mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-25 06:00:16 +01:00
Removes context from tgui (#80003)
## About The Pull Request *Most context This is a precursor PR for moving to React. Newer React (>16) does not have the `context` parameter, so it needs removed. I want to make converting to React look slightly less intimidating, so this is just short-circuiting context here. This shouldn't be considered a long term solution. ## Why It's Good For The Game Moving to react is good actually ## Changelog N/A hopefully no noticeable change
This commit is contained in:
@@ -201,12 +201,16 @@ export const createAction = <TAction extends string>(
|
||||
export const useDispatch = <TAction extends Action = AnyAction>(context: {
|
||||
store: Store<unknown, TAction>;
|
||||
}): Dispatch<TAction> => {
|
||||
return context.store.dispatch;
|
||||
return context?.store?.dispatch;
|
||||
};
|
||||
|
||||
export const useSelector = <State, Selected>(
|
||||
context: { store: Store<State, Action> },
|
||||
selector: (state: State) => Selected
|
||||
): Selected => {
|
||||
return selector(context.store.getState());
|
||||
if (!context) {
|
||||
return {} as Selected;
|
||||
}
|
||||
|
||||
return selector(context?.store?.getState());
|
||||
};
|
||||
|
||||
@@ -22,6 +22,7 @@ import { setupPanelFocusHacks } from './panelFocus';
|
||||
import { pingMiddleware, pingReducer } from './ping';
|
||||
import { settingsMiddleware, settingsReducer } from './settings';
|
||||
import { telemetryMiddleware } from './telemetry';
|
||||
import { setGlobalStore } from 'tgui/backend';
|
||||
|
||||
perf.mark('inception', window.performance?.timing?.navigationStart);
|
||||
perf.mark('init');
|
||||
@@ -47,6 +48,8 @@ const store = configureStore({
|
||||
});
|
||||
|
||||
const renderApp = createRenderer(() => {
|
||||
setGlobalStore(store);
|
||||
|
||||
const { Panel } = require('./Panel');
|
||||
return (
|
||||
<StoreProvider store={store}>
|
||||
|
||||
@@ -21,6 +21,12 @@ import { resumeRenderer, suspendRenderer } from './renderer';
|
||||
|
||||
const logger = createLogger('backend');
|
||||
|
||||
export let globalStore;
|
||||
|
||||
export const setGlobalStore = (store) => {
|
||||
globalStore = store;
|
||||
};
|
||||
|
||||
export const backendUpdate = createAction('backend/update');
|
||||
export const backendSetSharedState = createAction('backend/setSharedState');
|
||||
export const backendSuspendStart = createAction('backend/suspendStart');
|
||||
@@ -267,6 +273,10 @@ type BackendState<TData> = {
|
||||
shared: Record<string, any>;
|
||||
suspending: boolean;
|
||||
suspended: boolean;
|
||||
debug?: {
|
||||
debugLayout: boolean;
|
||||
kitchenSink: boolean;
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -280,9 +290,9 @@ export const selectBackend = <TData>(state: any): BackendState<TData> =>
|
||||
*
|
||||
* Includes the `act` function for performing DM actions.
|
||||
*/
|
||||
export const useBackend = <TData>(context: any) => {
|
||||
const { store } = context;
|
||||
const state = selectBackend<TData>(store.getState());
|
||||
export const useBackend = <TData>() => {
|
||||
const state: BackendState<TData> = globalStore?.getState()?.backend;
|
||||
|
||||
return {
|
||||
...state,
|
||||
act: sendAct,
|
||||
@@ -308,18 +318,16 @@ type StateWithSetter<T> = [T, (nextState: T) => void];
|
||||
* @param initialState Initializes your global variable with this value.
|
||||
*/
|
||||
export const useLocalState = <T>(
|
||||
context: any,
|
||||
key: string,
|
||||
initialState: T
|
||||
): StateWithSetter<T> => {
|
||||
const { store } = context;
|
||||
const state = selectBackend(store.getState());
|
||||
const sharedStates = state.shared ?? {};
|
||||
const state = globalStore?.getState()?.backend;
|
||||
const sharedStates = state?.shared ?? {};
|
||||
const sharedState = key in sharedStates ? sharedStates[key] : initialState;
|
||||
return [
|
||||
sharedState,
|
||||
(nextState) => {
|
||||
store.dispatch(
|
||||
globalStore.dispatch(
|
||||
backendSetSharedState({
|
||||
key,
|
||||
nextState:
|
||||
@@ -347,26 +355,22 @@ export const useLocalState = <T>(
|
||||
* @param initialState Initializes your global variable with this value.
|
||||
*/
|
||||
export const useSharedState = <T>(
|
||||
context: any,
|
||||
key: string,
|
||||
initialState: T
|
||||
): StateWithSetter<T> => {
|
||||
const { store } = context;
|
||||
const state = selectBackend(store.getState());
|
||||
const sharedStates = state.shared ?? {};
|
||||
const state = globalStore?.getState()?.backend;
|
||||
const sharedStates = state?.shared ?? {};
|
||||
const sharedState = key in sharedStates ? sharedStates[key] : initialState;
|
||||
return [
|
||||
sharedState,
|
||||
(nextState) => {
|
||||
// prettier-ignore
|
||||
Byond.sendMessage({
|
||||
type: 'setSharedState',
|
||||
key,
|
||||
value: JSON.stringify(
|
||||
typeof nextState === 'function'
|
||||
? nextState(sharedState)
|
||||
: nextState
|
||||
) || '',
|
||||
value:
|
||||
JSON.stringify(
|
||||
typeof nextState === 'function' ? nextState(sharedState) : nextState
|
||||
) || '',
|
||||
});
|
||||
},
|
||||
];
|
||||
|
||||
@@ -180,33 +180,24 @@ export class Dropdown extends Component<DropdownProps, DropdownState> {
|
||||
|
||||
const to_render = ops.length ? ops : 'No Options Found';
|
||||
|
||||
render(
|
||||
<div>{to_render}</div>,
|
||||
renderedMenu,
|
||||
() => {
|
||||
let singletonPopper = Dropdown.singletonPopper;
|
||||
if (singletonPopper === undefined) {
|
||||
singletonPopper = createPopper(
|
||||
Dropdown.virtualElement,
|
||||
renderedMenu!,
|
||||
{
|
||||
...DEFAULT_OPTIONS,
|
||||
placement: 'bottom-start',
|
||||
}
|
||||
);
|
||||
render(<div>{to_render}</div>, renderedMenu, () => {
|
||||
let singletonPopper = Dropdown.singletonPopper;
|
||||
if (singletonPopper === undefined) {
|
||||
singletonPopper = createPopper(Dropdown.virtualElement, renderedMenu!, {
|
||||
...DEFAULT_OPTIONS,
|
||||
placement: 'bottom-start',
|
||||
});
|
||||
|
||||
Dropdown.singletonPopper = singletonPopper;
|
||||
} else {
|
||||
singletonPopper.setOptions({
|
||||
...DEFAULT_OPTIONS,
|
||||
placement: 'bottom-start',
|
||||
});
|
||||
Dropdown.singletonPopper = singletonPopper;
|
||||
} else {
|
||||
singletonPopper.setOptions({
|
||||
...DEFAULT_OPTIONS,
|
||||
placement: 'bottom-start',
|
||||
});
|
||||
|
||||
singletonPopper.update();
|
||||
}
|
||||
},
|
||||
this.context
|
||||
);
|
||||
singletonPopper.update();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setOpen(open: boolean) {
|
||||
|
||||
@@ -70,12 +70,7 @@ export class Popper extends Component<PopperProps> {
|
||||
renderPopperContent(callback: () => void) {
|
||||
// `render` errors when given false, so we convert it to `null`,
|
||||
// which is supported.
|
||||
render(
|
||||
this.props.popperContent || null,
|
||||
this.renderedContent,
|
||||
callback,
|
||||
this.context
|
||||
);
|
||||
render(this.props.popperContent || null, this.renderedContent, callback);
|
||||
}
|
||||
|
||||
render() {
|
||||
|
||||
@@ -12,8 +12,8 @@ import { toInputValue } from './Input';
|
||||
import { KEY_ENTER, KEY_ESCAPE, KEY_TAB } from 'common/keycodes';
|
||||
|
||||
export class TextArea extends Component {
|
||||
constructor(props, context) {
|
||||
super(props, context);
|
||||
constructor(props) {
|
||||
super(props);
|
||||
this.textareaRef = props.innerRef || createRef();
|
||||
this.state = {
|
||||
editing: false,
|
||||
|
||||
@@ -103,33 +103,28 @@ export class Tooltip extends Component<TooltipProps, TooltipState> {
|
||||
return;
|
||||
}
|
||||
|
||||
render(
|
||||
<span>{this.props.content}</span>,
|
||||
renderedTooltip,
|
||||
() => {
|
||||
let singletonPopper = Tooltip.singletonPopper;
|
||||
if (singletonPopper === undefined) {
|
||||
singletonPopper = createPopper(
|
||||
Tooltip.virtualElement,
|
||||
renderedTooltip!,
|
||||
{
|
||||
...DEFAULT_OPTIONS,
|
||||
placement: this.props.position || 'auto',
|
||||
}
|
||||
);
|
||||
|
||||
Tooltip.singletonPopper = singletonPopper;
|
||||
} else {
|
||||
singletonPopper.setOptions({
|
||||
render(<span>{this.props.content}</span>, renderedTooltip, () => {
|
||||
let singletonPopper = Tooltip.singletonPopper;
|
||||
if (singletonPopper === undefined) {
|
||||
singletonPopper = createPopper(
|
||||
Tooltip.virtualElement,
|
||||
renderedTooltip!,
|
||||
{
|
||||
...DEFAULT_OPTIONS,
|
||||
placement: this.props.position || 'auto',
|
||||
});
|
||||
}
|
||||
);
|
||||
|
||||
singletonPopper.update();
|
||||
}
|
||||
},
|
||||
this.context
|
||||
);
|
||||
Tooltip.singletonPopper = singletonPopper;
|
||||
} else {
|
||||
singletonPopper.setOptions({
|
||||
...DEFAULT_OPTIONS,
|
||||
placement: this.props.position || 'auto',
|
||||
});
|
||||
|
||||
singletonPopper.update();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
componentDidUpdate() {
|
||||
|
||||
@@ -20,10 +20,10 @@ const r = require.context('../stories', false, /\.stories\.js$/);
|
||||
*/
|
||||
const getStories = () => r.keys().map((path) => r(path));
|
||||
|
||||
export const KitchenSink = (props, context) => {
|
||||
export const KitchenSink = (props) => {
|
||||
const { panel } = props;
|
||||
const [theme] = useLocalState(context, 'kitchenSinkTheme');
|
||||
const [pageIndex, setPageIndex] = useLocalState(context, 'pageIndex', 0);
|
||||
const [theme] = useLocalState('kitchenSinkTheme');
|
||||
const [pageIndex, setPageIndex] = useLocalState('pageIndex', 0);
|
||||
const stories = getStories();
|
||||
const story = stories[pageIndex];
|
||||
const Layout = panel ? Pane : Window;
|
||||
|
||||
@@ -26,7 +26,7 @@ import './styles/themes/syndicate.scss';
|
||||
import './styles/themes/wizard.scss';
|
||||
import './styles/themes/admin.scss';
|
||||
|
||||
import { StoreProvider, configureStore } from './store';
|
||||
import { configureStore } from './store';
|
||||
|
||||
import { captureExternalLinks } from './links';
|
||||
import { createRenderer } from './renderer';
|
||||
@@ -34,6 +34,7 @@ import { perf } from 'common/perf';
|
||||
import { setupGlobalEvents } from './events';
|
||||
import { setupHotKeys } from './hotkeys';
|
||||
import { setupHotReloading } from 'tgui-dev-server/link/client.cjs';
|
||||
import { setGlobalStore } from './backend';
|
||||
|
||||
perf.mark('inception', window.performance?.timing?.navigationStart);
|
||||
perf.mark('init');
|
||||
@@ -41,13 +42,11 @@ perf.mark('init');
|
||||
const store = configureStore();
|
||||
|
||||
const renderApp = createRenderer(() => {
|
||||
setGlobalStore(store);
|
||||
|
||||
const { getRoutedComponent } = require('./routes');
|
||||
const Component = getRoutedComponent(store);
|
||||
return (
|
||||
<StoreProvider store={store}>
|
||||
<Component />
|
||||
</StoreProvider>
|
||||
);
|
||||
return <Component />;
|
||||
});
|
||||
|
||||
const setupApp = () => {
|
||||
|
||||
@@ -3,8 +3,8 @@ import { Button, LabeledList, NoticeBox, Section, Tabs } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
import { GenericUplink } from './Uplink/GenericUplink';
|
||||
|
||||
export const AbductorConsole = (props, context) => {
|
||||
const [tab, setTab] = useSharedState(context, 'tab', 1);
|
||||
export const AbductorConsole = (props) => {
|
||||
const [tab, setTab] = useSharedState('tab', 1);
|
||||
return (
|
||||
<Window theme="abductor" width={600} height={532}>
|
||||
<Window.Content scrollable>
|
||||
@@ -36,8 +36,8 @@ export const AbductorConsole = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const Abductsoft = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const Abductsoft = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { experiment, points, credits, categories } = data;
|
||||
|
||||
if (!experiment) {
|
||||
@@ -81,8 +81,8 @@ const Abductsoft = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const EmergencyTeleporter = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const EmergencyTeleporter = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { pad, gizmo } = data;
|
||||
|
||||
if (!pad) {
|
||||
@@ -114,8 +114,8 @@ const EmergencyTeleporter = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const VestSettings = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const VestSettings = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { vest, vest_mode, vest_lock } = data;
|
||||
|
||||
if (!vest) {
|
||||
|
||||
@@ -30,12 +30,8 @@ enum SCREENS {
|
||||
audit,
|
||||
}
|
||||
|
||||
export const AccountingConsole = (props, context) => {
|
||||
const [screenmode, setScreenmode] = useLocalState(
|
||||
context,
|
||||
'tab_main',
|
||||
SCREENS.users
|
||||
);
|
||||
export const AccountingConsole = (props) => {
|
||||
const [screenmode, setScreenmode] = useLocalState('tab_main', SCREENS.users);
|
||||
|
||||
return (
|
||||
<Window width={300} height={360}>
|
||||
@@ -66,8 +62,8 @@ export const AccountingConsole = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const UsersScreen = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const UsersScreen = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { PlayerAccounts } = data;
|
||||
|
||||
return (
|
||||
@@ -93,8 +89,8 @@ const UsersScreen = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const AuditScreen = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const AuditScreen = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { AuditLog } = data;
|
||||
|
||||
return (
|
||||
@@ -110,8 +106,8 @@ const AuditScreen = (props, context) => {
|
||||
};
|
||||
|
||||
/** The modal menu that contains the prompts to making new channels. */
|
||||
const MarketCrashing = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const MarketCrashing = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
|
||||
const { Crashing } = data;
|
||||
if (!Crashing) {
|
||||
|
||||
@@ -2,11 +2,10 @@ import { useBackend, useLocalState } from '../backend';
|
||||
import { Box, Flex, Icon, Table, Tabs, Tooltip } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const Achievements = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
export const Achievements = (props) => {
|
||||
const { data } = useBackend();
|
||||
const { categories } = data;
|
||||
const [selectedCategory, setSelectedCategory] = useLocalState(
|
||||
context,
|
||||
'category',
|
||||
categories[0]
|
||||
);
|
||||
@@ -39,7 +38,7 @@ export const Achievements = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const AchievementTable = (props, context) => {
|
||||
const AchievementTable = (props) => {
|
||||
const { achievements } = props;
|
||||
return (
|
||||
<Table>
|
||||
@@ -90,14 +89,10 @@ const Achievement = (props) => {
|
||||
);
|
||||
};
|
||||
|
||||
const HighScoreTable = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
const HighScoreTable = (props) => {
|
||||
const { data } = useBackend();
|
||||
const { highscore: highscores, user_ckey } = data;
|
||||
const [highScoreIndex, setHighScoreIndex] = useLocalState(
|
||||
context,
|
||||
'highscore',
|
||||
0
|
||||
);
|
||||
const [highScoreIndex, setHighScoreIndex] = useLocalState('highscore', 0);
|
||||
const highscore = highscores[highScoreIndex];
|
||||
if (!highscore) {
|
||||
return null;
|
||||
|
||||
@@ -9,8 +9,8 @@ type ViewerData = {
|
||||
view_raw: boolean;
|
||||
};
|
||||
|
||||
export const AdminBookViewer = (_: any, context: any) => {
|
||||
const { data } = useBackend<ViewerData>(context);
|
||||
export const AdminBookViewer = (_: any) => {
|
||||
const { data } = useBackend<ViewerData>();
|
||||
return (
|
||||
<Window title={'Reading: ' + data.title}>
|
||||
<Window.Content scrollable>
|
||||
|
||||
@@ -2,7 +2,7 @@ import { useBackend, useLocalState } from '../backend';
|
||||
import { Section, Box, Dropdown, Button, Input, TextArea, Divider, NumberInput, Tooltip, Knob } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const AdminFax = (props, context) => {
|
||||
export const AdminFax = (props) => {
|
||||
return (
|
||||
<Window title="Admin Fax Panel" width={400} height={675} theme="admin">
|
||||
<Window.Content>
|
||||
@@ -12,26 +12,18 @@ export const AdminFax = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const FaxMainPanel = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const FaxMainPanel = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
|
||||
const [fax, setFax] = useLocalState(context, 'fax', '');
|
||||
const [saved, setSaved] = useLocalState(context, 'saved', false);
|
||||
const [paperName, setPaperName] = useLocalState(context, 'paperName', '');
|
||||
const [fromWho, setFromWho] = useLocalState(context, 'fromWho', '');
|
||||
const [rawText, setRawText] = useLocalState(context, 'rawText', '');
|
||||
const [stamp, setStamp] = useLocalState(context, 'stampType', '');
|
||||
const [stampCoordX, setStampCoordX] = useLocalState(
|
||||
context,
|
||||
'stampCoordX',
|
||||
0
|
||||
);
|
||||
const [stampCoordY, setStampCoordY] = useLocalState(
|
||||
context,
|
||||
'stampCoordY',
|
||||
0
|
||||
);
|
||||
const [stampAngle, setStampAngle] = useLocalState(context, 'stampAngle', 0);
|
||||
const [fax, setFax] = useLocalState('fax', '');
|
||||
const [saved, setSaved] = useLocalState('saved', false);
|
||||
const [paperName, setPaperName] = useLocalState('paperName', '');
|
||||
const [fromWho, setFromWho] = useLocalState('fromWho', '');
|
||||
const [rawText, setRawText] = useLocalState('rawText', '');
|
||||
const [stamp, setStamp] = useLocalState('stampType', '');
|
||||
const [stampCoordX, setStampCoordX] = useLocalState('stampCoordX', 0);
|
||||
const [stampCoordY, setStampCoordY] = useLocalState('stampCoordY', 0);
|
||||
const [stampAngle, setStampAngle] = useLocalState('stampAngle', 0);
|
||||
if (stamp && data.stamps[0] !== 'None') {
|
||||
data.stamps.unshift('None');
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ import { useBackend, useLocalState } from '../backend';
|
||||
import { Button } from '../components/Button';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const AdminPDA = (props, context) => {
|
||||
export const AdminPDA = (props) => {
|
||||
return (
|
||||
<Window title="Send PDA Message" width={300} height={575} theme="admin">
|
||||
<Window.Content>
|
||||
@@ -15,15 +15,14 @@ export const AdminPDA = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ReceiverChoice = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
const ReceiverChoice = (props) => {
|
||||
const { data } = useBackend();
|
||||
const { users } = data;
|
||||
const receivers = Array.from(Object.values(users));
|
||||
|
||||
const [user, setUser] = useLocalState(context, 'user', '');
|
||||
const [spam, setSpam] = useLocalState(context, 'spam', false);
|
||||
const [user, setUser] = useLocalState('user', '');
|
||||
const [spam, setSpam] = useLocalState('spam', false);
|
||||
const [showInvisible, setShowInvisible] = useLocalState(
|
||||
context,
|
||||
'showInvisible',
|
||||
false
|
||||
);
|
||||
@@ -66,9 +65,9 @@ const ReceiverChoice = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const SenderInfo = (props, context) => {
|
||||
const [name, setName] = useLocalState(context, 'name', '');
|
||||
const [job, setJob] = useLocalState(context, 'job', '');
|
||||
const SenderInfo = (props) => {
|
||||
const [name, setName] = useLocalState('name', '');
|
||||
const [job, setJob] = useLocalState('job', '');
|
||||
|
||||
return (
|
||||
<Section title="From Who?" textAlign="center">
|
||||
@@ -94,17 +93,16 @@ const SenderInfo = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const MessageInput = (props, context) => {
|
||||
const { act } = useBackend(context);
|
||||
const MessageInput = (props) => {
|
||||
const { act } = useBackend();
|
||||
|
||||
const [user, setUser] = useLocalState(context, 'user', '');
|
||||
const [name, setName] = useLocalState(context, 'name', '');
|
||||
const [job, setJob] = useLocalState(context, 'job', '');
|
||||
const [messageText, setMessageText] = useLocalState(context, 'message', '');
|
||||
const [spam, setSpam] = useLocalState(context, 'spam', false);
|
||||
const [force, setForce] = useLocalState(context, 'force', false);
|
||||
const [user, setUser] = useLocalState('user', '');
|
||||
const [name, setName] = useLocalState('name', '');
|
||||
const [job, setJob] = useLocalState('job', '');
|
||||
const [messageText, setMessageText] = useLocalState('message', '');
|
||||
const [spam, setSpam] = useLocalState('spam', false);
|
||||
const [force, setForce] = useLocalState('force', false);
|
||||
const [showInvisible, setShowInvisible] = useLocalState(
|
||||
context,
|
||||
'showInvisible',
|
||||
false
|
||||
);
|
||||
|
||||
@@ -10,8 +10,8 @@ type AdminhelpData = {
|
||||
urgentAhelpPromptMessage: string;
|
||||
};
|
||||
|
||||
export const Adminhelp = (props, context) => {
|
||||
const { act, data } = useBackend<AdminhelpData>(context);
|
||||
export const Adminhelp = (props) => {
|
||||
const { act, data } = useBackend<AdminhelpData>();
|
||||
const {
|
||||
adminCount,
|
||||
urgentAhelpEnabled,
|
||||
@@ -19,20 +19,14 @@ export const Adminhelp = (props, context) => {
|
||||
urgentAhelpPromptMessage,
|
||||
} = data;
|
||||
const [requestForAdmin, setRequestForAdmin] = useLocalState(
|
||||
context,
|
||||
'request_for_admin',
|
||||
false
|
||||
);
|
||||
const [currentlyInputting, setCurrentlyInputting] = useLocalState(
|
||||
context,
|
||||
'confirm_request',
|
||||
false
|
||||
);
|
||||
const [ahelpMessage, setAhelpMessage] = useLocalState(
|
||||
context,
|
||||
'ahelp_message',
|
||||
''
|
||||
);
|
||||
const [ahelpMessage, setAhelpMessage] = useLocalState('ahelp_message', '');
|
||||
|
||||
const confirmationText = 'alert admins';
|
||||
return (
|
||||
|
||||
@@ -23,10 +23,9 @@ type AdventureBrowserData = AdventureDataProvider & {
|
||||
delay_message: string;
|
||||
};
|
||||
|
||||
const AdventureList = (props, context) => {
|
||||
const { data, act } = useBackend<AdventureBrowserData>(context);
|
||||
const AdventureList = (props) => {
|
||||
const { data, act } = useBackend<AdventureBrowserData>();
|
||||
const [openAdventure, setOpenAdventure] = useLocalState<string | null>(
|
||||
context,
|
||||
'openAdventure',
|
||||
null
|
||||
);
|
||||
@@ -57,8 +56,8 @@ const AdventureList = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const DebugPlayer = (props, context) => {
|
||||
const { data, act } = useBackend<AdventureBrowserData>(context);
|
||||
const DebugPlayer = (props) => {
|
||||
const { data, act } = useBackend<AdventureBrowserData>();
|
||||
return (
|
||||
<Section
|
||||
title="Playtest"
|
||||
@@ -79,8 +78,8 @@ const DebugPlayer = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const AdventureBrowser = (props, context) => {
|
||||
const { data } = useBackend<AdventureBrowserData>(context);
|
||||
export const AdventureBrowser = (props) => {
|
||||
const { data } = useBackend<AdventureBrowserData>();
|
||||
|
||||
return (
|
||||
<Window width={600} height={400} title="Adventure Overview">
|
||||
|
||||
@@ -17,8 +17,8 @@ const dangerMap = {
|
||||
},
|
||||
};
|
||||
|
||||
export const AiAirlock = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const AiAirlock = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const statusMain = dangerMap[data.power.main] || dangerMap[0];
|
||||
const statusBackup = dangerMap[data.power.backup] || dangerMap[0];
|
||||
const statusElectrify = dangerMap[data.shock] || dangerMap[0];
|
||||
|
||||
@@ -24,8 +24,8 @@ export const AiRestorer = () => {
|
||||
);
|
||||
};
|
||||
|
||||
export const AiRestorerContent = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AiRestorerContent = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
AI_present,
|
||||
error,
|
||||
|
||||
@@ -11,8 +11,8 @@ type Data = {
|
||||
name: string;
|
||||
};
|
||||
|
||||
export const AiVoiceChanger = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AiVoiceChanger = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { loud, name, on, say_verb, voices } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -43,8 +43,8 @@ type AirAlarmData = {
|
||||
thresholdTypeMap: Record<string, number>;
|
||||
};
|
||||
|
||||
export const AirAlarm = (props, context) => {
|
||||
const { act, data } = useBackend<AirAlarmData>(context);
|
||||
export const AirAlarm = (props) => {
|
||||
const { act, data } = useBackend<AirAlarmData>();
|
||||
const locked = data.locked && !data.siliconUser;
|
||||
return (
|
||||
<Window width={475} height={650}>
|
||||
@@ -57,8 +57,8 @@ export const AirAlarm = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const AirAlarmStatus = (props, context) => {
|
||||
const { data } = useBackend<AirAlarmData>(context);
|
||||
const AirAlarmStatus = (props) => {
|
||||
const { data } = useBackend<AirAlarmData>();
|
||||
const { envData } = data;
|
||||
const dangerMap = {
|
||||
0: {
|
||||
@@ -142,8 +142,8 @@ const AIR_ALARM_ROUTES = {
|
||||
|
||||
type Screen = keyof typeof AIR_ALARM_ROUTES;
|
||||
|
||||
const AirAlarmControl = (props, context) => {
|
||||
const [screen, setScreen] = useLocalState<Screen>(context, 'screen', 'home');
|
||||
const AirAlarmControl = (props) => {
|
||||
const [screen, setScreen] = useLocalState<Screen>('screen', 'home');
|
||||
const route = AIR_ALARM_ROUTES[screen] || AIR_ALARM_ROUTES.home;
|
||||
const Component = route.component();
|
||||
return (
|
||||
@@ -166,9 +166,9 @@ const AirAlarmControl = (props, context) => {
|
||||
// Home screen
|
||||
// --------------------------------------------------------
|
||||
|
||||
const AirAlarmControlHome = (props, context) => {
|
||||
const { act, data } = useBackend<AirAlarmData>(context);
|
||||
const [screen, setScreen] = useLocalState<Screen>(context, 'screen', 'home');
|
||||
const AirAlarmControlHome = (props) => {
|
||||
const { act, data } = useBackend<AirAlarmData>();
|
||||
const [screen, setScreen] = useLocalState<Screen>('screen', 'home');
|
||||
const {
|
||||
selectedModePath,
|
||||
panicSiphonPath,
|
||||
@@ -238,8 +238,8 @@ const AirAlarmControlHome = (props, context) => {
|
||||
// Vents
|
||||
// --------------------------------------------------------
|
||||
|
||||
const AirAlarmControlVents = (props, context) => {
|
||||
const { data } = useBackend<AirAlarmData>(context);
|
||||
const AirAlarmControlVents = (props) => {
|
||||
const { data } = useBackend<AirAlarmData>();
|
||||
const { vents } = data;
|
||||
if (!vents || vents.length === 0) {
|
||||
return <span>Nothing to show</span>;
|
||||
@@ -256,8 +256,8 @@ const AirAlarmControlVents = (props, context) => {
|
||||
// Scrubbers
|
||||
// --------------------------------------------------------
|
||||
|
||||
const AirAlarmControlScrubbers = (props, context) => {
|
||||
const { data } = useBackend<AirAlarmData>(context);
|
||||
const AirAlarmControlScrubbers = (props) => {
|
||||
const { data } = useBackend<AirAlarmData>();
|
||||
const { scrubbers } = data;
|
||||
if (!scrubbers || scrubbers.length === 0) {
|
||||
return <span>Nothing to show</span>;
|
||||
@@ -274,8 +274,8 @@ const AirAlarmControlScrubbers = (props, context) => {
|
||||
// Modes
|
||||
// --------------------------------------------------------
|
||||
|
||||
const AirAlarmControlModes = (props, context) => {
|
||||
const { act, data } = useBackend<AirAlarmData>(context);
|
||||
const AirAlarmControlModes = (props) => {
|
||||
const { act, data } = useBackend<AirAlarmData>();
|
||||
const { modes, selectedModePath } = data;
|
||||
if (!modes || modes.length === 0) {
|
||||
return <span>Nothing to show</span>;
|
||||
@@ -315,8 +315,8 @@ type EditingModalProps = {
|
||||
finish: () => void;
|
||||
};
|
||||
|
||||
const EditingModal = (props: EditingModalProps, context) => {
|
||||
const { act, data } = useBackend<AirAlarmData>(context);
|
||||
const EditingModal = (props: EditingModalProps) => {
|
||||
const { act, data } = useBackend<AirAlarmData>();
|
||||
const { id, name, type, typeVar, typeName, unit, oldValue, finish } = props;
|
||||
return (
|
||||
<Modal>
|
||||
@@ -370,12 +370,12 @@ const EditingModal = (props: EditingModalProps, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const AirAlarmControlThresholds = (props, context) => {
|
||||
const { act, data } = useBackend<AirAlarmData>(context);
|
||||
const AirAlarmControlThresholds = (props) => {
|
||||
const { act, data } = useBackend<AirAlarmData>();
|
||||
const [activeModal, setActiveModal] = useLocalState<Omit<
|
||||
EditingModalProps,
|
||||
'oldValue'
|
||||
> | null>(context, 'tlvModal', null);
|
||||
> | null>('tlvModal', null);
|
||||
const { tlvSettings, thresholdTypeMap } = data;
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -16,8 +16,8 @@ type AirlockStatus = {
|
||||
color: string;
|
||||
};
|
||||
|
||||
export const AirlockController = (props, context) => {
|
||||
const { data } = useBackend<AirlockControllerData>(context);
|
||||
export const AirlockController = (props) => {
|
||||
const { data } = useBackend<AirlockControllerData>();
|
||||
const { airlockState, pumpStatus, interiorStatus, exteriorStatus } = data;
|
||||
const currentStatus: AirlockStatus = getAirlockStatus(airlockState);
|
||||
const nameToUpperCase = (str: string) =>
|
||||
@@ -55,8 +55,8 @@ export const AirlockController = (props, context) => {
|
||||
};
|
||||
|
||||
/** Displays the buttons on top of the window to cycle the airlock */
|
||||
const AirLockButtons = (props, context) => {
|
||||
const { act, data } = useBackend<AirlockControllerData>(context);
|
||||
const AirLockButtons = (props) => {
|
||||
const { act, data } = useBackend<AirlockControllerData>();
|
||||
const { airlockState } = data;
|
||||
switch (airlockState) {
|
||||
case 'pressurize':
|
||||
@@ -105,8 +105,8 @@ const AirLockButtons = (props, context) => {
|
||||
};
|
||||
|
||||
/** Displays the numeric pressure alongside an icon for the user */
|
||||
const PressureIndicator = (props, context) => {
|
||||
const { data } = useBackend<AirlockControllerData>(context);
|
||||
const PressureIndicator = (props) => {
|
||||
const { data } = useBackend<AirlockControllerData>();
|
||||
const { sensorPressure } = data;
|
||||
const {
|
||||
currentStatus: { icon, color },
|
||||
|
||||
@@ -14,8 +14,8 @@ type Data = {
|
||||
shell: BooleanLike;
|
||||
};
|
||||
|
||||
export const AirLockMainSection = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AirLockMainSection = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
accesses = [],
|
||||
oneAccess,
|
||||
@@ -138,7 +138,7 @@ export const AirLockMainSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const AirlockElectronics = (props, context) => {
|
||||
export const AirlockElectronics = (props) => {
|
||||
return (
|
||||
<Window width={420} height={485}>
|
||||
<Window.Content>
|
||||
|
||||
@@ -17,8 +17,8 @@ type AlertModalData = {
|
||||
const KEY_DECREMENT = -1;
|
||||
const KEY_INCREMENT = 1;
|
||||
|
||||
export const AlertModal = (props, context) => {
|
||||
const { act, data } = useBackend<AlertModalData>(context);
|
||||
export const AlertModal = (props) => {
|
||||
const { act, data } = useBackend<AlertModalData>();
|
||||
const {
|
||||
autofocus,
|
||||
buttons = [],
|
||||
@@ -27,7 +27,7 @@ export const AlertModal = (props, context) => {
|
||||
timeout,
|
||||
title,
|
||||
} = data;
|
||||
const [selected, setSelected] = useLocalState<number>(context, 'selected', 0);
|
||||
const [selected, setSelected] = useLocalState<number>('selected', 0);
|
||||
// Dynamically sets window dimensions
|
||||
const windowHeight =
|
||||
115 +
|
||||
@@ -89,8 +89,8 @@ export const AlertModal = (props, context) => {
|
||||
* Technically this handles more than 2 buttons, but you
|
||||
* should just be using a list input in that case.
|
||||
*/
|
||||
const ButtonDisplay = (props, context) => {
|
||||
const { data } = useBackend<AlertModalData>(context);
|
||||
const ButtonDisplay = (props) => {
|
||||
const { data } = useBackend<AlertModalData>();
|
||||
const { buttons = [], large_buttons, swapped_buttons } = data;
|
||||
const { selected } = props;
|
||||
|
||||
@@ -127,8 +127,8 @@ const ButtonDisplay = (props, context) => {
|
||||
/**
|
||||
* Displays a button with variable sizing.
|
||||
*/
|
||||
const AlertButton = (props, context) => {
|
||||
const { act, data } = useBackend<AlertModalData>(context);
|
||||
const AlertButton = (props) => {
|
||||
const { act, data } = useBackend<AlertModalData>();
|
||||
const { large_buttons } = data;
|
||||
const { button, selected } = props;
|
||||
const buttonWidth = button.length > 7 ? button.length : 7;
|
||||
|
||||
@@ -3,8 +3,8 @@ import { Button, Icon, Modal, Section, Stack, LabeledList, Box } from '../compon
|
||||
import { Window } from '../layouts';
|
||||
import { GasmixParser } from './common/GasmixParser';
|
||||
|
||||
export const AnomalyRefinery = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const AnomalyRefinery = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
return (
|
||||
<Window title="Anomaly Refinery" width={550} height={350}>
|
||||
<Window.Content>
|
||||
@@ -14,9 +14,9 @@ export const AnomalyRefinery = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const AnomalyRefineryContent = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const [currentTab, changeTab] = useSharedState(context, 'exploderTab', 1);
|
||||
const AnomalyRefineryContent = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const [currentTab, changeTab] = useSharedState('exploderTab', 1);
|
||||
const { core, valvePresent, active } = data;
|
||||
return (
|
||||
<Stack vertical fill>
|
||||
@@ -59,8 +59,8 @@ const AnomalyRefineryContent = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CoreCompressorContent = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const CoreCompressorContent = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { core, requiredRadius, gasList, valveReady, active, valvePresent } =
|
||||
data;
|
||||
return (
|
||||
@@ -160,8 +160,8 @@ const CoreCompressorContent = (props, context) => {
|
||||
</>
|
||||
);
|
||||
};
|
||||
const BombProcessorContent = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const BombProcessorContent = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { gasList, reactionIncrement } = data;
|
||||
return (
|
||||
<>
|
||||
|
||||
@@ -14,7 +14,7 @@ type Data = {
|
||||
|
||||
const BLOB_COLOR = '#556b2f';
|
||||
|
||||
export const AntagInfoBlob = (props, context) => {
|
||||
export const AntagInfoBlob = (props) => {
|
||||
return (
|
||||
<Window width={400} height={550}>
|
||||
<Window.Content>
|
||||
@@ -31,8 +31,8 @@ export const AntagInfoBlob = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const Overview = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const Overview = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { color, description, effects, name } = data;
|
||||
|
||||
if (!name) {
|
||||
@@ -89,7 +89,7 @@ const Overview = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const Basics = (props, context) => {
|
||||
const Basics = (props) => {
|
||||
return (
|
||||
<Collapsible title="The Basics">
|
||||
<LabeledList>
|
||||
@@ -118,7 +118,7 @@ const Basics = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const Minions = (props, context) => {
|
||||
const Minions = (props) => {
|
||||
return (
|
||||
<Collapsible title="Minions">
|
||||
<LabeledList>
|
||||
@@ -137,7 +137,7 @@ const Minions = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const Structures = (props, context) => {
|
||||
const Structures = (props) => {
|
||||
return (
|
||||
<Collapsible title="Structures">
|
||||
<Box>
|
||||
@@ -173,8 +173,8 @@ const Structures = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ObjectiveDisplay = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const ObjectiveDisplay = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { color, objectives } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -7,8 +7,8 @@ type Data = {
|
||||
objectives: Objective[];
|
||||
};
|
||||
|
||||
export const AntagInfoBrainwashed = (porps, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
export const AntagInfoBrainwashed = (porps) => {
|
||||
const { data } = useBackend<Data>();
|
||||
|
||||
return (
|
||||
<Window width={400} height={400} theme="abductor">
|
||||
|
||||
@@ -9,8 +9,8 @@ type Info = {
|
||||
brothers: string;
|
||||
};
|
||||
|
||||
export const AntagInfoBrother = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
export const AntagInfoBrother = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { antag_name, brothers, objectives } = data;
|
||||
return (
|
||||
<Window width={620} height={250}>
|
||||
|
||||
@@ -54,7 +54,7 @@ type Info = {
|
||||
can_change_objective: BooleanLike;
|
||||
};
|
||||
|
||||
export const AntagInfoChangeling = (props, context) => {
|
||||
export const AntagInfoChangeling = (props) => {
|
||||
return (
|
||||
<Window width={720} height={750}>
|
||||
<Window.Content
|
||||
@@ -87,8 +87,8 @@ export const AntagInfoChangeling = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const HivemindSection = (props, context) => {
|
||||
const { act, data } = useBackend<Info>(context);
|
||||
const HivemindSection = (props) => {
|
||||
const { act, data } = useBackend<Info>();
|
||||
const { true_name } = data;
|
||||
return (
|
||||
<Section fill title="Hivemind">
|
||||
@@ -115,8 +115,8 @@ const HivemindSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const IntroductionSection = (props, context) => {
|
||||
const { act, data } = useBackend<Info>(context);
|
||||
const IntroductionSection = (props) => {
|
||||
const { act, data } = useBackend<Info>();
|
||||
const { true_name, hive_name, objectives, can_change_objective } = data;
|
||||
return (
|
||||
<Section
|
||||
@@ -145,8 +145,8 @@ const IntroductionSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const AbilitiesSection = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const AbilitiesSection = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
return (
|
||||
<Section fill title="Abilities">
|
||||
<Stack fill>
|
||||
@@ -195,11 +195,10 @@ const AbilitiesSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const MemoriesSection = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const MemoriesSection = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { memories } = data;
|
||||
const [selectedMemory, setSelectedMemory] = useSharedState(
|
||||
context,
|
||||
'memory',
|
||||
(!!memories && memories[0]) || null
|
||||
);
|
||||
@@ -245,8 +244,8 @@ const MemoriesSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const VictimPatternsSection = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const VictimPatternsSection = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { stolen_antag_info } = data;
|
||||
return (
|
||||
<Section
|
||||
|
||||
@@ -18,8 +18,8 @@ type Info = {
|
||||
objectives: Objective[];
|
||||
};
|
||||
|
||||
export const AntagInfoDemon = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
export const AntagInfoDemon = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { fluff, objectives, explain_attack } = data;
|
||||
return (
|
||||
<Window width={620} height={356} theme="syndicate">
|
||||
@@ -84,7 +84,7 @@ export const AntagInfoDemon = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const DemonRunes = (props, context) => {
|
||||
const DemonRunes = (props) => {
|
||||
return (
|
||||
<Section height="102%" mt="-6px" fill>
|
||||
{/*
|
||||
|
||||
@@ -8,8 +8,8 @@ type Info = {
|
||||
objectives: Objective[];
|
||||
};
|
||||
|
||||
export const AntagInfoGeneric = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
export const AntagInfoGeneric = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { antag_name, objectives } = data;
|
||||
return (
|
||||
<Window width={620} height={250}>
|
||||
|
||||
@@ -17,8 +17,8 @@ const textStyles = {
|
||||
},
|
||||
} as const;
|
||||
|
||||
export const AntagInfoGlitch = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
export const AntagInfoGlitch = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { antag_name, objectives = [] } = data;
|
||||
|
||||
return (
|
||||
@@ -64,8 +64,8 @@ export const AntagInfoGlitch = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const SpecificInfo = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const SpecificInfo = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { antag_name } = data;
|
||||
|
||||
switch (antag_name) {
|
||||
|
||||
@@ -52,8 +52,8 @@ type Info = {
|
||||
can_change_objective: BooleanLike;
|
||||
};
|
||||
|
||||
const IntroductionSection = (props, context) => {
|
||||
const { data, act } = useBackend<Info>(context);
|
||||
const IntroductionSection = (props) => {
|
||||
const { data, act } = useBackend<Info>();
|
||||
const { objectives, ascended, can_change_objective } = data;
|
||||
|
||||
return (
|
||||
@@ -176,8 +176,8 @@ const GuideSection = () => {
|
||||
);
|
||||
};
|
||||
|
||||
const InformationSection = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const InformationSection = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { charges, total_sacrifices, ascended } = data;
|
||||
return (
|
||||
<Stack.Item>
|
||||
@@ -212,8 +212,8 @@ const InformationSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ResearchedKnowledge = (props, context) => {
|
||||
const { data } = useBackend<KnowledgeInfo>(context);
|
||||
const ResearchedKnowledge = (props) => {
|
||||
const { data } = useBackend<KnowledgeInfo>();
|
||||
const { learnedKnowledge } = data;
|
||||
|
||||
return (
|
||||
@@ -237,8 +237,8 @@ const ResearchedKnowledge = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const KnowledgeShop = (props, context) => {
|
||||
const { data, act } = useBackend<KnowledgeInfo>(context);
|
||||
const KnowledgeShop = (props) => {
|
||||
const { data, act } = useBackend<KnowledgeInfo>();
|
||||
const { learnableKnowledge } = data;
|
||||
|
||||
return (
|
||||
@@ -272,8 +272,8 @@ const KnowledgeShop = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ResearchInfo = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const ResearchInfo = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { charges } = data;
|
||||
|
||||
return (
|
||||
@@ -299,11 +299,11 @@ const ResearchInfo = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const AntagInfoHeretic = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
export const AntagInfoHeretic = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { ascended } = data;
|
||||
|
||||
const [currentTab, setTab] = useLocalState(context, 'currentTab', 0);
|
||||
const [currentTab, setTab] = useLocalState('currentTab', 0);
|
||||
|
||||
return (
|
||||
<Window width={675} height={635}>
|
||||
|
||||
@@ -35,8 +35,8 @@ type Info = {
|
||||
can_change_objective: BooleanLike;
|
||||
};
|
||||
|
||||
const IntroductionSection = (props, context) => {
|
||||
const { act, data } = useBackend<Info>(context);
|
||||
const IntroductionSection = (props) => {
|
||||
const { act, data } = useBackend<Info>();
|
||||
const { intro, objectives, can_change_objective } = data;
|
||||
return (
|
||||
<Section fill title="Intro" scrollable>
|
||||
@@ -61,8 +61,8 @@ const IntroductionSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const FlavorSection = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const FlavorSection = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { allies, goal } = data;
|
||||
return (
|
||||
<Section
|
||||
@@ -116,8 +116,8 @@ const FlavorSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CodewordsSection = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const CodewordsSection = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { has_codewords, phrases, responses } = data;
|
||||
return (
|
||||
<Section title="Codewords" mb={!has_codewords && -1}>
|
||||
@@ -162,14 +162,10 @@ const CodewordsSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const AntagInfoMalf = (props, context) => {
|
||||
const { act, data } = useBackend<Info>(context);
|
||||
export const AntagInfoMalf = (props) => {
|
||||
const { act, data } = useBackend<Info>();
|
||||
const { processingTime, categories } = data;
|
||||
const [antagInfoTab, setAntagInfoTab] = useLocalState(
|
||||
context,
|
||||
'antagInfoTab',
|
||||
0
|
||||
);
|
||||
const [antagInfoTab, setAntagInfoTab] = useLocalState('antagInfoTab', 0);
|
||||
const categoriesList: string[] = [];
|
||||
const items: Item[] = [];
|
||||
for (let i = 0; i < categories.length; i++) {
|
||||
|
||||
@@ -13,7 +13,7 @@ const noticestyle = {
|
||||
color: 'lightblue',
|
||||
};
|
||||
|
||||
export const AntagInfoMorph = (props, context) => {
|
||||
export const AntagInfoMorph = (props) => {
|
||||
return (
|
||||
<Window width={620} height={170} theme="abductor">
|
||||
<Window.Content>
|
||||
|
||||
@@ -9,7 +9,7 @@ const noticestyle = {
|
||||
color: 'lightblue',
|
||||
};
|
||||
|
||||
export const AntagInfoNightmare = (props, context) => {
|
||||
export const AntagInfoNightmare = (props) => {
|
||||
return (
|
||||
<Window width={620} height={340}>
|
||||
<Window.Content backgroundColor="#0d0d0d">
|
||||
|
||||
@@ -13,8 +13,8 @@ type NinjaInfo = {
|
||||
can_change_objective: BooleanLike;
|
||||
};
|
||||
|
||||
export const AntagInfoNinja = (props, context) => {
|
||||
const { data } = useBackend<NinjaInfo>(context);
|
||||
export const AntagInfoNinja = (props) => {
|
||||
const { data } = useBackend<NinjaInfo>();
|
||||
const { objectives, can_change_objective } = data;
|
||||
return (
|
||||
<Window width={550} height={450} theme="hackerman">
|
||||
|
||||
@@ -2,8 +2,8 @@ import { useBackend } from '../backend';
|
||||
import { BlockQuote, Section, Stack } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const AntagInfoSentient = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const AntagInfoSentient = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { enslaved_to, holographic, p_them, p_their } = data;
|
||||
return (
|
||||
<Window width={400} height={400} theme="neutral">
|
||||
|
||||
@@ -9,8 +9,8 @@ type Info = {
|
||||
nationColor: string;
|
||||
};
|
||||
|
||||
export const AntagInfoSeparatist = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
export const AntagInfoSeparatist = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { nationColor } = data;
|
||||
return (
|
||||
<Window width={620} height={450}>
|
||||
@@ -28,8 +28,8 @@ export const AntagInfoSeparatist = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const IntroductionObjectives = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const IntroductionObjectives = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { nation, objectives } = data;
|
||||
return (
|
||||
<Section fill>
|
||||
@@ -48,8 +48,8 @@ const IntroductionObjectives = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const FrequentlyAskedQuestions = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const FrequentlyAskedQuestions = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { nation } = data;
|
||||
return (
|
||||
<Section fill>
|
||||
|
||||
@@ -2,8 +2,8 @@ import { useBackend } from '../backend';
|
||||
import { Icon, Section, Stack } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const AntagInfoShade = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const AntagInfoShade = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { master_name } = data;
|
||||
return (
|
||||
<Window width={400} height={400} theme="abductor">
|
||||
|
||||
@@ -38,8 +38,8 @@ type Info = {
|
||||
objectives: Objective[];
|
||||
};
|
||||
|
||||
const IntroductionSection = (props, context) => {
|
||||
const { act, data } = useBackend<Info>(context);
|
||||
const IntroductionSection = (props) => {
|
||||
const { act, data } = useBackend<Info>();
|
||||
const { intro, objectives } = data;
|
||||
return (
|
||||
<Section fill title="Intro" scrollable>
|
||||
@@ -53,8 +53,8 @@ const IntroductionSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const EmployerSection = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const EmployerSection = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { allies, goal } = data;
|
||||
return (
|
||||
<Section
|
||||
@@ -97,8 +97,8 @@ const EmployerSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const UplinkSection = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const UplinkSection = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const {
|
||||
has_uplink,
|
||||
uplink_intro,
|
||||
@@ -172,8 +172,8 @@ const UplinkSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CodewordsSection = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
const CodewordsSection = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { has_codewords, phrases, responses } = data;
|
||||
return (
|
||||
<Section title="Codewords" mb={!has_codewords && -1}>
|
||||
@@ -218,8 +218,8 @@ const CodewordsSection = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const AntagInfoTraitor = (props, context) => {
|
||||
const { data } = useBackend<Info>(context);
|
||||
export const AntagInfoTraitor = (props) => {
|
||||
const { data } = useBackend<Info>();
|
||||
const { theme } = data;
|
||||
return (
|
||||
<Window width={620} height={580} theme={theme}>
|
||||
|
||||
@@ -48,8 +48,8 @@ type Info = {
|
||||
can_change_objective: BooleanLike;
|
||||
};
|
||||
|
||||
export const AntagInfoWizard = (props, context) => {
|
||||
const { data, act } = useBackend<Info>(context);
|
||||
export const AntagInfoWizard = (props) => {
|
||||
const { data, act } = useBackend<Info>();
|
||||
const { ritual, objectives, can_change_objective } = data;
|
||||
|
||||
return (
|
||||
@@ -152,7 +152,7 @@ export const AntagInfoWizard = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const RitualPrintout = (props: { ritual: GrandRitual }, context) => {
|
||||
const RitualPrintout = (props: { ritual: GrandRitual }) => {
|
||||
const { ritual } = props;
|
||||
if (!ritual.next_area) {
|
||||
return null;
|
||||
|
||||
@@ -3,7 +3,7 @@ import { Box, Button, LabeledList, NoticeBox, ProgressBar, Section } from '../co
|
||||
import { Window } from '../layouts';
|
||||
import { InterfaceLockNoticeBox } from './common/InterfaceLockNoticeBox';
|
||||
|
||||
export const Apc = (props, context) => {
|
||||
export const Apc = (props) => {
|
||||
return (
|
||||
<Window width={450} height={445}>
|
||||
<Window.Content scrollable>
|
||||
@@ -54,8 +54,8 @@ const malfMap = {
|
||||
},
|
||||
};
|
||||
|
||||
const ApcContent = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const ApcContent = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const locked = data.locked && !data.siliconUser;
|
||||
const externalPowerStatus =
|
||||
powerStatusMap[data.externalPower] || powerStatusMap[0];
|
||||
|
||||
@@ -6,8 +6,8 @@ import { Box, Button, Dimmer, Icon, Table, Tabs, Stack, Section } from '../compo
|
||||
import { Window } from '../layouts';
|
||||
import { AreaCharge, powerRank } from './PowerMonitor';
|
||||
|
||||
export const ApcControl = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
export const ApcControl = (props) => {
|
||||
const { data } = useBackend();
|
||||
return (
|
||||
<Window title="APC Controller" width={550} height={500}>
|
||||
<Window.Content>
|
||||
@@ -18,8 +18,8 @@ export const ApcControl = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ApcLoggedOut = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const ApcLoggedOut = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { emagged } = data;
|
||||
const text = emagged === 1 ? 'Open' : 'Log In';
|
||||
return (
|
||||
@@ -35,10 +35,10 @@ const ApcLoggedOut = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ApcLoggedIn = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const ApcLoggedIn = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { restoring } = data;
|
||||
const [tabIndex, setTabIndex] = useLocalState(context, 'tab-index', 1);
|
||||
const [tabIndex, setTabIndex] = useLocalState('tab-index', 1);
|
||||
return (
|
||||
<Box>
|
||||
<Tabs>
|
||||
@@ -90,14 +90,10 @@ const ApcLoggedIn = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ControlPanel = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const ControlPanel = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { emagged, logging } = data;
|
||||
const [sortByField, setSortByField] = useLocalState(
|
||||
context,
|
||||
'sortByField',
|
||||
'name'
|
||||
);
|
||||
const [sortByField, setSortByField] = useLocalState('sortByField', 'name');
|
||||
return (
|
||||
<Stack justify="space-between">
|
||||
<Stack.Item>
|
||||
@@ -146,10 +142,10 @@ const ControlPanel = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ApcControlScene = (props, context) => {
|
||||
const { data, act } = useBackend(context);
|
||||
const ApcControlScene = (props) => {
|
||||
const { data, act } = useBackend();
|
||||
|
||||
const [sortByField] = useLocalState(context, 'sortByField', 'name');
|
||||
const [sortByField] = useLocalState('sortByField', 'name');
|
||||
|
||||
const apcs = flow([
|
||||
map((apc, i) => ({
|
||||
@@ -243,8 +239,8 @@ const ApcControlScene = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const LogPanel = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
const LogPanel = (props) => {
|
||||
const { data } = useBackend();
|
||||
|
||||
const logs = flow([
|
||||
map((line, i) => ({
|
||||
|
||||
@@ -4,7 +4,7 @@ import { useBackend } from '../backend';
|
||||
import { BlockQuote, Box, Button, Icon, Section, Stack } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const ApprenticeContract = (props, context) => {
|
||||
export const ApprenticeContract = (props) => {
|
||||
return (
|
||||
<Window width={620} height={600} theme="wizard">
|
||||
<Window.Content>
|
||||
@@ -65,8 +65,8 @@ export const ApprenticeContract = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ApprenticeSelection = (props, context) => {
|
||||
const { act } = useBackend(context);
|
||||
const ApprenticeSelection = (props) => {
|
||||
const { act } = useBackend();
|
||||
const { iconName, fluffName, schoolTitle, assetName, blurb } = props;
|
||||
return (
|
||||
<Section>
|
||||
|
||||
@@ -14,8 +14,8 @@ type Data = {
|
||||
feeding_interval: number;
|
||||
};
|
||||
|
||||
export const Aquarium = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const Aquarium = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
temperature,
|
||||
fluid_type,
|
||||
|
||||
@@ -7,8 +7,8 @@ type Data = {
|
||||
minor: string[];
|
||||
};
|
||||
|
||||
export const AtmosAlertConsole = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AtmosAlertConsole = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { priority = [], minor = [] } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -12,25 +12,21 @@ type Chamber = {
|
||||
output_info?: { active: boolean; amount: number };
|
||||
};
|
||||
|
||||
export const AtmosControlConsole = (props, context) => {
|
||||
export const AtmosControlConsole = (props) => {
|
||||
const { act, data } = useBackend<{
|
||||
chambers: Chamber[];
|
||||
maxInput: number;
|
||||
maxOutput: number;
|
||||
reconnecting: boolean;
|
||||
control: boolean;
|
||||
}>(context);
|
||||
}>();
|
||||
const chambers = data.chambers || [];
|
||||
const [chamberId, setChamberId] = useLocalState(
|
||||
context,
|
||||
'chamberId',
|
||||
chambers[0]?.id
|
||||
);
|
||||
const [chamberId, setChamberId] = useLocalState('chamberId', chambers[0]?.id);
|
||||
const selectedChamber =
|
||||
chambers.length === 1
|
||||
? chambers[0]
|
||||
: chambers.find((chamber) => chamber.id === chamberId);
|
||||
const [setActiveGasId, setActiveReactionId] = atmosHandbookHooks(context);
|
||||
const [setActiveGasId, setActiveReactionId] = atmosHandbookHooks();
|
||||
return (
|
||||
<Window width={550} height={350}>
|
||||
<Window.Content scrollable>
|
||||
|
||||
@@ -4,8 +4,8 @@ import { useBackend } from '../backend';
|
||||
import { Box, Button, Flex, Section, Table } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const AtmosControlPanel = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const AtmosControlPanel = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const groups = flow([
|
||||
map((group, i) => ({
|
||||
...group,
|
||||
|
||||
@@ -17,8 +17,8 @@ type Filter = {
|
||||
gas_id: string;
|
||||
};
|
||||
|
||||
export const AtmosFilter = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AtmosFilter = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { filter_types = [], on, rate, max_rate } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -11,8 +11,8 @@ type Data = {
|
||||
node2_concentration: number;
|
||||
};
|
||||
|
||||
export const AtmosMixer = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AtmosMixer = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
on,
|
||||
set_pressure,
|
||||
|
||||
@@ -11,8 +11,8 @@ type Data = {
|
||||
max_pressure: number;
|
||||
};
|
||||
|
||||
export const AtmosPump = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AtmosPump = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { on, max_rate, max_pressure, rate, pressure } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -10,8 +10,8 @@ type Data = {
|
||||
max_temperature: number;
|
||||
};
|
||||
|
||||
export const AtmosTempGate = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AtmosTempGate = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { on, temperature, min_temperature, max_temperature } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -9,8 +9,8 @@ type Data = {
|
||||
max_heat_transfer_rate: number;
|
||||
};
|
||||
|
||||
export const AtmosTempPump = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AtmosTempPump = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { on, rate, max_heat_transfer_rate } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -17,8 +17,8 @@ type AutolatheData = {
|
||||
active: BooleanLike;
|
||||
};
|
||||
|
||||
export const Autolathe = (props, context) => {
|
||||
const { data } = useBackend<AutolatheData>(context);
|
||||
export const Autolathe = (props) => {
|
||||
const { data } = useBackend<AutolatheData>();
|
||||
const {
|
||||
materialtotal,
|
||||
materialsmax,
|
||||
@@ -121,8 +121,8 @@ type PrintButtonProps = {
|
||||
maxmult: number;
|
||||
};
|
||||
|
||||
const PrintButton = (props: PrintButtonProps, context) => {
|
||||
const { act } = useBackend<AutolatheData>(context);
|
||||
const PrintButton = (props: PrintButtonProps) => {
|
||||
const { act } = useBackend<AutolatheData>();
|
||||
const {
|
||||
design,
|
||||
quantity,
|
||||
@@ -163,8 +163,8 @@ type AutolatheRecipeProps = {
|
||||
SHEET_MATERIAL_AMOUNT: number;
|
||||
};
|
||||
|
||||
const AutolatheRecipe = (props: AutolatheRecipeProps, context) => {
|
||||
const { act } = useBackend<AutolatheData>(context);
|
||||
const AutolatheRecipe = (props: AutolatheRecipeProps) => {
|
||||
const { act } = useBackend<AutolatheData>();
|
||||
const { design, availableMaterials, SHEET_MATERIAL_AMOUNT } = props;
|
||||
|
||||
const maxmult = design.maxmult;
|
||||
|
||||
@@ -16,8 +16,8 @@ type Data = {
|
||||
newhead: string;
|
||||
};
|
||||
|
||||
export const AutomatedAnnouncement = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AutomatedAnnouncement = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { arrivalToggle, arrival, newheadToggle, newhead } = data;
|
||||
return (
|
||||
<Window title="Automated Announcement System" width={500} height={225}>
|
||||
|
||||
@@ -27,9 +27,9 @@ const STATUS_COLOR_KEYS = {
|
||||
'All Clear': 'good',
|
||||
} as const;
|
||||
|
||||
export const AuxBaseConsole = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const [tab, setTab] = useLocalState(context, 'tab', 1);
|
||||
export const AuxBaseConsole = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const [tab, setTab] = useLocalState('tab', 1);
|
||||
const { type, blind_drop, turrets = [] } = data;
|
||||
|
||||
return (
|
||||
@@ -62,8 +62,8 @@ export const AuxBaseConsole = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const AuxBaseConsoleContent = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const AuxBaseConsoleContent = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { turrets = [] } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -47,8 +47,8 @@ const boxHelp = [
|
||||
},
|
||||
] as const;
|
||||
|
||||
export const AvatarHelp = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
export const AvatarHelp = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { help_text = DEFAULT_HELP } = data;
|
||||
|
||||
return (
|
||||
@@ -96,7 +96,7 @@ export const AvatarHelp = (props, context) => {
|
||||
};
|
||||
|
||||
// I wish I had media queries
|
||||
const BoxHelp = (props: { index: number }, context) => {
|
||||
const BoxHelp = (props: { index: number }) => {
|
||||
const { index } = props;
|
||||
|
||||
return (
|
||||
|
||||
@@ -10,8 +10,8 @@ type Data = {
|
||||
station_name: string;
|
||||
};
|
||||
|
||||
export const BankMachine = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const BankMachine = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { current_balance, siphoning, station_name } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -13,8 +13,8 @@ type BasketballPanelData = {
|
||||
}[];
|
||||
};
|
||||
|
||||
export const BasketballPanel = (props, context) => {
|
||||
const { act, data } = useBackend<BasketballPanelData>(context);
|
||||
export const BasketballPanel = (props) => {
|
||||
const { act, data } = useBackend<BasketballPanelData>();
|
||||
|
||||
return (
|
||||
<Window title="Basketball" width={650} height={580}>
|
||||
|
||||
@@ -32,8 +32,8 @@ type Design = {
|
||||
amount: number;
|
||||
};
|
||||
|
||||
export const Biogenerator = (props, context) => {
|
||||
const { act, data } = useBackend<BiogeneratorData>(context);
|
||||
export const Biogenerator = (props) => {
|
||||
const { act, data } = useBackend<BiogeneratorData>();
|
||||
const {
|
||||
processing,
|
||||
beaker,
|
||||
@@ -48,7 +48,6 @@ export const Biogenerator = (props, context) => {
|
||||
categories,
|
||||
} = data;
|
||||
const [selectedCategory, setSelectedCategory] = useLocalState<string>(
|
||||
context,
|
||||
'category',
|
||||
data.categories[0]?.name
|
||||
);
|
||||
@@ -163,11 +162,10 @@ export const Biogenerator = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ItemList = (props, context) => {
|
||||
const { act } = useBackend(context);
|
||||
const ItemList = (props) => {
|
||||
const { act } = useBackend();
|
||||
const items = props.items.map((item) => {
|
||||
const [amount, setAmount] = useLocalState(
|
||||
context,
|
||||
'amount' + item.name,
|
||||
item.is_reagent ? Math.min(Math.max(props.space, 1), 10) : 1
|
||||
);
|
||||
|
||||
@@ -34,8 +34,8 @@ type DeliveryMethod = {
|
||||
price: number;
|
||||
};
|
||||
|
||||
export const BlackMarketUplink = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const BlackMarketUplink = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
categories = [],
|
||||
markets = [],
|
||||
@@ -124,8 +124,8 @@ export const BlackMarketUplink = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ShipmentSelector = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
const ShipmentSelector = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { buying, ltsrbt_built, money } = data;
|
||||
if (!buying) {
|
||||
return null;
|
||||
|
||||
@@ -7,8 +7,8 @@ type Data = {
|
||||
whitelist: string[];
|
||||
};
|
||||
|
||||
export const BloodFilter = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
export const BloodFilter = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { whitelist = [] } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -10,8 +10,8 @@ type Data = {
|
||||
target: string;
|
||||
};
|
||||
|
||||
export const BluespaceArtillery = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const BluespaceArtillery = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { notice, connected, unlocked, target } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -25,8 +25,8 @@ const DIRECTION_TO_ICON = {
|
||||
northwest: 315,
|
||||
} as const;
|
||||
|
||||
export const BluespaceLocator = (props, context) => {
|
||||
const [tab, setTab] = useLocalState(context, 'tab', 'implant');
|
||||
export const BluespaceLocator = (props) => {
|
||||
const [tab, setTab] = useLocalState('tab', 'implant');
|
||||
|
||||
return (
|
||||
<Window width={300} height={300}>
|
||||
@@ -50,8 +50,8 @@ export const BluespaceLocator = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const TeleporterBeacons = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const TeleporterBeacons = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { telebeacons } = data;
|
||||
|
||||
return (
|
||||
@@ -68,8 +68,8 @@ const TeleporterBeacons = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const TrackingImplants = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const TrackingImplants = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { trackimplants } = data;
|
||||
|
||||
return (
|
||||
@@ -86,8 +86,8 @@ const TrackingImplants = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const SignalLocator = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
const SignalLocator = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { trackingrange } = data;
|
||||
const { name, direction, distance } = props;
|
||||
|
||||
|
||||
@@ -29,8 +29,8 @@ type GasDisplayProps = {
|
||||
|
||||
const mappedTopMargin = '2%';
|
||||
|
||||
export const BluespaceSender = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const BluespaceSender = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { gas_transfer_rate, credits, bluespace_network_gases = [], on } = data;
|
||||
|
||||
const gases: Gas[] = flow([
|
||||
@@ -106,8 +106,8 @@ export const BluespaceSender = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const GasDisplay = (props: GasDisplayProps, context) => {
|
||||
const { act } = useBackend<Data>(context);
|
||||
const GasDisplay = (props: GasDisplayProps) => {
|
||||
const { act } = useBackend<Data>();
|
||||
const {
|
||||
gas: { amount, id, name, price },
|
||||
gasMax,
|
||||
|
||||
@@ -32,8 +32,8 @@ type GasDisplayProps = {
|
||||
gasMax: number;
|
||||
};
|
||||
|
||||
export const BluespaceVendor = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const BluespaceVendor = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
bluespace_network_gases = [],
|
||||
inserted_tank,
|
||||
@@ -153,8 +153,8 @@ export const BluespaceVendor = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const GasDisplay = (props: GasDisplayProps, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
const GasDisplay = (props: GasDisplayProps) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { pumping, selected_gas, inserted_tank } = data;
|
||||
const {
|
||||
gas: { name, amount, price, id },
|
||||
|
||||
@@ -16,8 +16,8 @@ type Reagent = {
|
||||
description: string;
|
||||
};
|
||||
|
||||
export const BorgHypo = (props, context) => {
|
||||
const { data } = useBackend<BorgHypoContext>(context);
|
||||
export const BorgHypo = (props) => {
|
||||
const { data } = useBackend<BorgHypoContext>();
|
||||
const { maxVolume, theme, reagents, selectedReagent } = data;
|
||||
|
||||
const dynamicHeight = reagents.length * 25 + 60;
|
||||
@@ -37,8 +37,8 @@ export const BorgHypo = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ReagentDisplay = (props, context) => {
|
||||
const { act } = useBackend(context);
|
||||
const ReagentDisplay = (props) => {
|
||||
const { act } = useBackend();
|
||||
const { reagents, selected, maxVolume } = props;
|
||||
if (reagents.length === 0) {
|
||||
return <NoticeBox>No reagents available!</NoticeBox>;
|
||||
|
||||
@@ -2,8 +2,8 @@ import { useBackend } from '../backend';
|
||||
import { Box, Button, LabeledList, ProgressBar, Section } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const BorgPanel = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const BorgPanel = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const borg = data.borg || {};
|
||||
const cell = data.cell || {};
|
||||
const cellPercent = cell.charge / cell.maxcharge;
|
||||
|
||||
@@ -16,8 +16,8 @@ type Reagent = {
|
||||
description: string;
|
||||
};
|
||||
|
||||
export const BorgShaker = (props, context) => {
|
||||
const { data } = useBackend<BorgShakerContext>(context);
|
||||
export const BorgShaker = (props) => {
|
||||
const { data } = useBackend<BorgShakerContext>();
|
||||
const { theme, minVolume, sodas, alcohols, selectedReagent } = data;
|
||||
|
||||
const dynamicHeight =
|
||||
@@ -47,8 +47,8 @@ export const BorgShaker = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ReagentDisplay = (props, context) => {
|
||||
const { act } = useBackend(context);
|
||||
const ReagentDisplay = (props) => {
|
||||
const { act } = useBackend();
|
||||
const { reagents, selected, minimum } = props;
|
||||
if (reagents.length === 0) {
|
||||
return <NoticeBox>No reagents available!</NoticeBox>;
|
||||
|
||||
@@ -31,7 +31,7 @@ type User = {
|
||||
name: string;
|
||||
};
|
||||
|
||||
export const BountyBoard = (props, context) => {
|
||||
export const BountyBoard = (props) => {
|
||||
return (
|
||||
<Window width={550} height={600}>
|
||||
<Window.Content scrollable>
|
||||
@@ -41,8 +41,8 @@ export const BountyBoard = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const BountyBoardContent = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const BountyBoardContent = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
accountName,
|
||||
requests = [],
|
||||
|
||||
@@ -10,8 +10,8 @@ type Data = {
|
||||
flash_charging: BooleanLike;
|
||||
};
|
||||
|
||||
export const BrigTimer = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const BrigTimer = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { timing, minutes, seconds, flash_charging } = data;
|
||||
return (
|
||||
<Window width={300} height={138}>
|
||||
|
||||
@@ -19,8 +19,8 @@ type CTFPanelData =
|
||||
voted: BooleanLike;
|
||||
};
|
||||
|
||||
export const CTFPanel = (props, context) => {
|
||||
const { act, data } = useBackend<CTFPanelData>(context);
|
||||
export const CTFPanel = (props) => {
|
||||
const { act, data } = useBackend<CTFPanelData>();
|
||||
|
||||
return (
|
||||
<Window title="CTF Panel" width={700} height={600}>
|
||||
|
||||
@@ -70,7 +70,7 @@ const selectCameras = (cameras: Camera[], searchText = ''): Camera[] => {
|
||||
])(cameras);
|
||||
};
|
||||
|
||||
export const CameraConsole = (props, context) => {
|
||||
export const CameraConsole = (props) => {
|
||||
return (
|
||||
<Window width={850} height={708}>
|
||||
<Window.Content>
|
||||
@@ -80,7 +80,7 @@ export const CameraConsole = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const CameraContent = (props, context) => {
|
||||
export const CameraContent = (props) => {
|
||||
return (
|
||||
<Stack fill>
|
||||
<Stack.Item grow>
|
||||
@@ -93,9 +93,9 @@ export const CameraContent = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CameraSelector = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
const [searchText, setSearchText] = useLocalState(context, 'searchText', '');
|
||||
const CameraSelector = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const [searchText, setSearchText] = useLocalState('searchText', '');
|
||||
const { activeCamera } = data;
|
||||
const cameras = selectCameras(data.cameras, searchText);
|
||||
|
||||
@@ -141,10 +141,10 @@ const CameraSelector = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CameraControls = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
const CameraControls = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { activeCamera, can_spy, mapRef } = data;
|
||||
const [searchText] = useLocalState(context, 'searchText', '');
|
||||
const [searchText] = useLocalState('searchText', '');
|
||||
|
||||
const cameras = selectCameras(data.cameras, searchText);
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ const formatPressure = (value) => {
|
||||
return formatSiUnit(value * 1000, 1, 'Pa');
|
||||
};
|
||||
|
||||
export const Canister = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const Canister = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const {
|
||||
portConnected,
|
||||
tankPressure,
|
||||
|
||||
@@ -240,8 +240,8 @@ type CanvasData = {
|
||||
show_grid: boolean;
|
||||
};
|
||||
|
||||
export const Canvas = (props, context) => {
|
||||
const { act, data } = useBackend<CanvasData>(context);
|
||||
export const Canvas = (props) => {
|
||||
const { act, data } = useBackend<CanvasData>();
|
||||
const [width, height] = getImageSize(data.grid);
|
||||
const scaled_width = width * data.px_per_unit;
|
||||
const scaled_height = height * data.px_per_unit;
|
||||
|
||||
@@ -5,7 +5,7 @@ import { AnimatedNumber, Box, Button, Flex, Icon, Input, RestrictedInput, Labele
|
||||
import { formatMoney } from '../format';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const Cargo = (props, context) => {
|
||||
export const Cargo = (props) => {
|
||||
return (
|
||||
<Window width={800} height={750}>
|
||||
<Window.Content scrollable>
|
||||
@@ -15,9 +15,9 @@ export const Cargo = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const CargoContent = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
const [tab, setTab] = useSharedState(context, 'tab', 'catalog');
|
||||
export const CargoContent = (props) => {
|
||||
const { data } = useBackend();
|
||||
const [tab, setTab] = useSharedState('tab', 'catalog');
|
||||
const { cart = [], requests = [], requestonly } = data;
|
||||
const cart_length = cart.reduce((total, entry) => total + entry.amount, 0);
|
||||
return (
|
||||
@@ -65,8 +65,8 @@ export const CargoContent = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CargoStatus = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const CargoStatus = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const {
|
||||
department,
|
||||
grocery,
|
||||
@@ -149,9 +149,9 @@ const searchForSupplies = (supplies, search) => {
|
||||
])(supplies);
|
||||
};
|
||||
|
||||
export const CargoCatalog = (props, context) => {
|
||||
export const CargoCatalog = (props) => {
|
||||
const { express } = props;
|
||||
const { act, data } = useBackend(context);
|
||||
const { act, data } = useBackend();
|
||||
|
||||
const { self_paid, app_cost } = data;
|
||||
|
||||
@@ -159,16 +159,11 @@ export const CargoCatalog = (props, context) => {
|
||||
const { amount_by_name = [], max_order } = data;
|
||||
|
||||
const [activeSupplyName, setActiveSupplyName] = useSharedState(
|
||||
context,
|
||||
'supply',
|
||||
supplies[0]?.name
|
||||
);
|
||||
|
||||
const [searchText, setSearchText] = useSharedState(
|
||||
context,
|
||||
'search_text',
|
||||
''
|
||||
);
|
||||
const [searchText, setSearchText] = useSharedState('search_text', '');
|
||||
|
||||
const activeSupply =
|
||||
activeSupplyName === 'search_results'
|
||||
@@ -289,8 +284,8 @@ export const CargoCatalog = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CargoRequests = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const CargoRequests = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { requestonly, can_send, can_approve_requests } = data;
|
||||
const requests = data.requests || [];
|
||||
// Labeled list reimplementation to squeeze extra columns out of it
|
||||
@@ -355,8 +350,8 @@ const CargoRequests = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CargoCartButtons = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const CargoCartButtons = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { requestonly, can_send, can_approve_requests } = data;
|
||||
const cart = data.cart || [];
|
||||
const total = cart.reduce((total, entry) => total + entry.cost, 0);
|
||||
@@ -380,8 +375,8 @@ const CargoCartButtons = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CartHeader = (props, context) => {
|
||||
const { data } = useBackend(context);
|
||||
const CartHeader = (props) => {
|
||||
const { data } = useBackend();
|
||||
return (
|
||||
<Section>
|
||||
<Stack>
|
||||
@@ -397,8 +392,8 @@ const CartHeader = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CargoCart = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const CargoCart = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const {
|
||||
requestonly,
|
||||
away,
|
||||
@@ -484,7 +479,7 @@ const CargoCart = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CargoHelp = (props, context) => {
|
||||
const CargoHelp = (props) => {
|
||||
return (
|
||||
<>
|
||||
<Section title="Department Orders">
|
||||
|
||||
@@ -17,8 +17,8 @@ type Data = {
|
||||
message: string;
|
||||
};
|
||||
|
||||
export const CargoExpress = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
export const CargoExpress = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { locked } = data;
|
||||
|
||||
return (
|
||||
@@ -31,8 +31,8 @@ export const CargoExpress = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CargoExpressContent = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
const CargoExpressContent = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
hasBeacon,
|
||||
message,
|
||||
|
||||
@@ -10,8 +10,8 @@ type Data = {
|
||||
status_report: string;
|
||||
};
|
||||
|
||||
export const CargoHoldTerminal = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const CargoHoldTerminal = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { points, pad, sending, status_report } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -24,10 +24,9 @@ type Ability = {
|
||||
dna_required: number; // Checks against dna_count
|
||||
};
|
||||
|
||||
export const CellularEmporium = (props, context) => {
|
||||
const { act, data } = useBackend<CellularEmporiumContext>(context);
|
||||
export const CellularEmporium = (props) => {
|
||||
const { act, data } = useBackend<CellularEmporiumContext>();
|
||||
const [searchAbilities, setSearchAbilities] = useLocalState(
|
||||
context,
|
||||
'searchAbilities',
|
||||
''
|
||||
);
|
||||
@@ -78,9 +77,9 @@ export const CellularEmporium = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const AbilityList = (props, context) => {
|
||||
const { act, data } = useBackend<CellularEmporiumContext>(context);
|
||||
const [searchAbilities] = useLocalState(context, 'searchAbilities', '');
|
||||
const AbilityList = (props) => {
|
||||
const { act, data } = useBackend<CellularEmporiumContext>();
|
||||
const [searchAbilities] = useLocalState('searchAbilities', '');
|
||||
const {
|
||||
abilities,
|
||||
owned_abilities,
|
||||
|
||||
@@ -12,14 +12,14 @@ const pod_grey = {
|
||||
color: 'grey',
|
||||
};
|
||||
|
||||
const useCompact = (context) => {
|
||||
const [compact, setCompact] = useLocalState(context, 'compact', false);
|
||||
const useCompact = () => {
|
||||
const [compact, setCompact] = useLocalState('compact', false);
|
||||
const toggleCompact = () => setCompact(!compact);
|
||||
return [compact, toggleCompact];
|
||||
};
|
||||
|
||||
export const CentcomPodLauncher = (props, context) => {
|
||||
const [compact] = useCompact(context);
|
||||
export const CentcomPodLauncher = (props) => {
|
||||
const [compact] = useCompact();
|
||||
return (
|
||||
<Window
|
||||
title="Supply Pod Menu (Use against Helen Weinstein)"
|
||||
@@ -30,8 +30,8 @@ export const CentcomPodLauncher = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const CentcomPodLauncherContent = (props, context) => {
|
||||
const [compact] = useCompact(context);
|
||||
const CentcomPodLauncherContent = (props) => {
|
||||
const [compact] = useCompact();
|
||||
return (
|
||||
<Window.Content>
|
||||
<Stack fill vertical>
|
||||
@@ -410,13 +410,9 @@ const EFFECTS_ALL = [
|
||||
},
|
||||
];
|
||||
|
||||
const ViewTabHolder = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const [tabPageIndex, setTabPageIndex] = useLocalState(
|
||||
context,
|
||||
'tabPageIndex',
|
||||
1
|
||||
);
|
||||
const ViewTabHolder = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const [tabPageIndex, setTabPageIndex] = useLocalState('tabPageIndex', 1);
|
||||
const { mapRef } = data;
|
||||
const TabPageComponent = TABPAGES[tabPageIndex].component();
|
||||
return (
|
||||
@@ -505,7 +501,7 @@ const ViewTabHolder = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const TabPod = (props, context) => {
|
||||
const TabPod = (props) => {
|
||||
return (
|
||||
<Box color="label">
|
||||
Note: You can right click on this
|
||||
@@ -515,8 +511,8 @@ const TabPod = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const TabBay = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const TabBay = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
@@ -534,8 +530,8 @@ const TabBay = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const TabDrop = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const TabDrop = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
return (
|
||||
<>
|
||||
<Button
|
||||
@@ -553,9 +549,9 @@ const TabDrop = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const PodStatusPage = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const [compact, toggleCompact] = useCompact(context);
|
||||
const PodStatusPage = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const [compact, toggleCompact] = useCompact();
|
||||
return (
|
||||
<Section fill width="100%">
|
||||
<Stack>
|
||||
@@ -671,13 +667,9 @@ const PodStatusPage = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ReverseMenu = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const [tabPageIndex, setTabPageIndex] = useLocalState(
|
||||
context,
|
||||
'tabPageIndex',
|
||||
1
|
||||
);
|
||||
const ReverseMenu = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const [tabPageIndex, setTabPageIndex] = useLocalState('tabPageIndex', 1);
|
||||
return (
|
||||
<Section
|
||||
fill
|
||||
@@ -782,8 +774,8 @@ class PresetsPage extends Component {
|
||||
storage.set('podlauncher_preset_' + id, data);
|
||||
}
|
||||
|
||||
async loadDataFromPreset(id, context) {
|
||||
const { act } = useBackend(this.context);
|
||||
async loadDataFromPreset(id) {
|
||||
const { act } = useBackend();
|
||||
act('loadDataFromPreset', {
|
||||
payload: await storage.get('podlauncher_preset_' + id),
|
||||
});
|
||||
@@ -822,23 +814,11 @@ class PresetsPage extends Component {
|
||||
}
|
||||
render() {
|
||||
const { presets } = this.state;
|
||||
const { act, data } = useBackend(this.context);
|
||||
const [presetIndex, setSelectedPreset] = useLocalState(
|
||||
this.context,
|
||||
'presetIndex',
|
||||
0
|
||||
);
|
||||
const [settingName, setEditingNameStatus] = useLocalState(
|
||||
this.context,
|
||||
'settingName',
|
||||
0
|
||||
);
|
||||
const [newNameText, setText] = useLocalState(
|
||||
this.context,
|
||||
'newNameText',
|
||||
''
|
||||
);
|
||||
const [hue, setHue] = useLocalState(this.context, 'hue', 0);
|
||||
const { act, data } = useBackend();
|
||||
const [presetIndex, setSelectedPreset] = useLocalState('presetIndex', 0);
|
||||
const [settingName, setEditingNameStatus] = useLocalState('settingName', 0);
|
||||
const [newNameText, setText] = useLocalState('newNameText', '');
|
||||
const [hue, setHue] = useLocalState('hue', 0);
|
||||
return (
|
||||
<Section
|
||||
scrollable
|
||||
@@ -962,9 +942,9 @@ class PresetsPage extends Component {
|
||||
}
|
||||
}
|
||||
|
||||
const LaunchPage = (props, context) => {
|
||||
const [compact] = useCompact(context);
|
||||
const { act, data } = useBackend(context);
|
||||
const LaunchPage = (props) => {
|
||||
const [compact] = useCompact();
|
||||
const { act, data } = useBackend();
|
||||
return (
|
||||
<Button
|
||||
fluid
|
||||
@@ -984,8 +964,8 @@ const LaunchPage = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const StylePage = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const StylePage = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
return (
|
||||
<Section
|
||||
fill
|
||||
@@ -1039,9 +1019,9 @@ const StylePage = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const Bays = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const [compact] = useCompact(context);
|
||||
const Bays = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const [compact] = useCompact();
|
||||
return (
|
||||
<Section
|
||||
fill
|
||||
@@ -1085,8 +1065,8 @@ const Bays = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const Timing = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const Timing = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
return (
|
||||
<Section
|
||||
fill
|
||||
@@ -1129,8 +1109,8 @@ const Timing = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const DelayHelper = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const DelayHelper = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { delay_list, reverse = false } = props;
|
||||
return (
|
||||
<LabeledControls wrap>
|
||||
@@ -1167,8 +1147,8 @@ const DelayHelper = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const Sounds = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
const Sounds = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
return (
|
||||
<Section
|
||||
fill
|
||||
|
||||
@@ -2,8 +2,8 @@ import { useBackend } from '../backend';
|
||||
import { AccessList } from './common/AccessList';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const ChameleonCard = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const ChameleonCard = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
|
||||
const {
|
||||
accesses,
|
||||
|
||||
@@ -58,7 +58,7 @@ export class Changelog extends Component {
|
||||
}
|
||||
|
||||
getData = (date, attemptNumber = 1) => {
|
||||
const { act } = useBackend(this.context);
|
||||
const { act } = useBackend();
|
||||
const self = this;
|
||||
const maxAttempts = 6;
|
||||
|
||||
@@ -90,7 +90,7 @@ export class Changelog extends Component {
|
||||
componentDidMount() {
|
||||
const {
|
||||
data: { dates = [] },
|
||||
} = useBackend(this.context);
|
||||
} = useBackend();
|
||||
|
||||
if (dates) {
|
||||
dates.forEach((date) =>
|
||||
@@ -105,7 +105,7 @@ export class Changelog extends Component {
|
||||
const { data, selectedDate, selectedIndex } = this.state;
|
||||
const {
|
||||
data: { dates },
|
||||
} = useBackend(this.context);
|
||||
} = useBackend();
|
||||
const { dateChoices } = this;
|
||||
|
||||
const dateDropdown = dateChoices.length > 0 && (
|
||||
|
||||
@@ -17,8 +17,8 @@ type Data = {
|
||||
};
|
||||
|
||||
/** Renders a list of checkboxes per items for input. */
|
||||
export const CheckboxInput = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
export const CheckboxInput = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const {
|
||||
items = [],
|
||||
min_checked,
|
||||
@@ -28,14 +28,9 @@ export const CheckboxInput = (props, context) => {
|
||||
title,
|
||||
} = data;
|
||||
|
||||
const [selections, setSelections] = useLocalState<string[]>(
|
||||
context,
|
||||
'selections',
|
||||
[]
|
||||
);
|
||||
const [selections, setSelections] = useLocalState<string[]>('selections', []);
|
||||
|
||||
const [searchQuery, setSearchQuery] = useLocalState<string>(
|
||||
context,
|
||||
'searchQuery',
|
||||
''
|
||||
);
|
||||
|
||||
@@ -14,8 +14,8 @@ type Data = {
|
||||
emptying: BooleanLike;
|
||||
};
|
||||
|
||||
export const ChemAcclimator = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const ChemAcclimator = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
chem_temp,
|
||||
target_temperature,
|
||||
|
||||
@@ -9,8 +9,8 @@ type Data = {
|
||||
beaker: Beaker;
|
||||
};
|
||||
|
||||
export const ChemDebugSynthesizer = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const ChemDebugSynthesizer = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { amount, purity, beaker } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -25,11 +25,11 @@ type Data = {
|
||||
beaker: Beaker;
|
||||
};
|
||||
|
||||
export const ChemDispenser = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const ChemDispenser = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const recording = !!data.recordingRecipe;
|
||||
const { recipeReagents = [], recipes = [], beaker } = data;
|
||||
const [hasCol, setHasCol] = useLocalState(context, 'has_col', false);
|
||||
const [hasCol, setHasCol] = useLocalState('has_col', false);
|
||||
|
||||
const beakerTransferAmounts = beaker ? beaker.transferAmounts : [];
|
||||
const recordedContents =
|
||||
|
||||
@@ -14,8 +14,8 @@ type Props = {
|
||||
buttonColor: string;
|
||||
};
|
||||
|
||||
export const ChemFilterPane = (props: Props, context) => {
|
||||
const { act } = useBackend(context);
|
||||
export const ChemFilterPane = (props: Props) => {
|
||||
const { act } = useBackend();
|
||||
const { title, list, buttonColor } = props;
|
||||
const titleKey = title.toLowerCase();
|
||||
|
||||
@@ -54,8 +54,8 @@ export const ChemFilterPane = (props: Props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
export const ChemFilter = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
export const ChemFilter = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { left = [], right = [] } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -6,8 +6,8 @@ import { COLORS } from '../constants';
|
||||
import { Window } from '../layouts';
|
||||
import { BeakerContents } from './common/BeakerContents';
|
||||
|
||||
export const ChemHeater = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const ChemHeater = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const {
|
||||
targetTemp,
|
||||
isActive,
|
||||
|
||||
@@ -56,8 +56,8 @@ type Container = {
|
||||
volume: number;
|
||||
};
|
||||
|
||||
export const ChemMaster = (props, context) => {
|
||||
const { data } = useBackend<Data>(context);
|
||||
export const ChemMaster = (props) => {
|
||||
const { data } = useBackend<Data>();
|
||||
const { reagentAnalysisMode } = data;
|
||||
return (
|
||||
<Window width={400} height={620}>
|
||||
@@ -68,8 +68,8 @@ export const ChemMaster = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ChemMasterContent = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
const ChemMasterContent = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
isPrinting,
|
||||
printingProgress,
|
||||
@@ -89,7 +89,7 @@ const ChemMasterContent = (props, context) => {
|
||||
suggestedContainer,
|
||||
} = data;
|
||||
|
||||
const [itemCount, setItemCount] = useLocalState(context, 'itemCount', 1);
|
||||
const [itemCount, setItemCount] = useLocalState('itemCount', 1);
|
||||
|
||||
return (
|
||||
<Box>
|
||||
@@ -260,8 +260,8 @@ const ChemMasterContent = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ReagentEntry = (props, context) => {
|
||||
const { data, act } = useBackend<Data>(context);
|
||||
const ReagentEntry = (props) => {
|
||||
const { data, act } = useBackend<Data>();
|
||||
const { chemical, transferTo } = props;
|
||||
const { isPrinting } = data;
|
||||
return (
|
||||
@@ -342,8 +342,8 @@ const ReagentEntry = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const ContainerButton = ({ container, category }, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
const ContainerButton = ({ container, category }) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { isPrinting, selectedContainerRef } = data;
|
||||
const isPillPatch = ['pills', 'patches'].includes(category.name);
|
||||
return (
|
||||
@@ -375,8 +375,8 @@ const ContainerButton = ({ container, category }, context) => {
|
||||
) as any;
|
||||
};
|
||||
|
||||
const AnalysisResults = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
const AnalysisResults = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
name,
|
||||
state,
|
||||
|
||||
@@ -17,16 +17,11 @@ export type MixingData = {
|
||||
isReacting: BooleanLike;
|
||||
};
|
||||
|
||||
export const ChemMixingChamber = (props, context) => {
|
||||
const { act, data } = useBackend<MixingData>(context);
|
||||
export const ChemMixingChamber = (props) => {
|
||||
const { act, data } = useBackend<MixingData>();
|
||||
|
||||
const [reagentName, setReagentName] = useLocalState(
|
||||
context,
|
||||
'reagentName',
|
||||
''
|
||||
);
|
||||
const [reagentName, setReagentName] = useLocalState('reagentName', '');
|
||||
const [reagentQuantity, setReagentQuantity] = useLocalState(
|
||||
context,
|
||||
'reagentQuantity',
|
||||
1
|
||||
);
|
||||
|
||||
@@ -23,8 +23,8 @@ type Data = {
|
||||
packaging_type: string;
|
||||
};
|
||||
|
||||
export const ChemPress = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const ChemPress = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
current_volume,
|
||||
product_name,
|
||||
@@ -35,7 +35,6 @@ export const ChemPress = (props, context) => {
|
||||
packaging_type,
|
||||
} = data;
|
||||
const [categoryName, setCategoryName] = useLocalState(
|
||||
context,
|
||||
'categoryName',
|
||||
packaging_category
|
||||
);
|
||||
|
||||
@@ -10,11 +10,10 @@ type ReactingData = MixingData & {
|
||||
reagentAlkaline: number;
|
||||
};
|
||||
|
||||
export const ChemReactionChamber = (props, context) => {
|
||||
const { act, data } = useBackend<ReactingData>(context);
|
||||
export const ChemReactionChamber = (props) => {
|
||||
const { act, data } = useBackend<ReactingData>();
|
||||
|
||||
const [reagentQuantity, setReagentQuantity] = useLocalState(
|
||||
context,
|
||||
'reagentQuantity',
|
||||
1
|
||||
);
|
||||
|
||||
@@ -4,8 +4,8 @@ import { AnimatedNumber, Box, Button, Flex, LabeledList, NumberInput, ProgressBa
|
||||
import { Window } from '../layouts';
|
||||
import { BeakerContents } from './common/BeakerContents';
|
||||
|
||||
export const ChemRecipeDebug = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const ChemRecipeDebug = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const {
|
||||
targetTemp,
|
||||
isActive,
|
||||
|
||||
@@ -15,8 +15,8 @@ type Data = {
|
||||
beaker_reagent_color: string;
|
||||
};
|
||||
|
||||
export const ChemSeparator = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const ChemSeparator = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
return (
|
||||
<Window width={470} height={130}>
|
||||
<Window.Content>
|
||||
|
||||
@@ -9,8 +9,8 @@ type Data = {
|
||||
max_transfer: number;
|
||||
};
|
||||
|
||||
export const ChemSplitter = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const ChemSplitter = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { straight, side, max_transfer } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -10,8 +10,8 @@ type Data = {
|
||||
possible_amounts: number[];
|
||||
};
|
||||
|
||||
export const ChemSynthesizer = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const ChemSynthesizer = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const {
|
||||
amount,
|
||||
current_reagent,
|
||||
|
||||
@@ -10,8 +10,8 @@ type Data = {
|
||||
accesses: string[];
|
||||
};
|
||||
|
||||
export const CircuitAccessChecker = (props, context) => {
|
||||
const { act, data } = useBackend<Data>(context);
|
||||
export const CircuitAccessChecker = (props) => {
|
||||
const { act, data } = useBackend<Data>();
|
||||
const { oneAccess, regions = [], accesses = [] } = data;
|
||||
|
||||
return (
|
||||
|
||||
@@ -12,8 +12,8 @@ type CircuitAdminPanelData = {
|
||||
}[];
|
||||
};
|
||||
|
||||
export const CircuitAdminPanel = (props, context) => {
|
||||
const { act, data } = useBackend<CircuitAdminPanelData>(context);
|
||||
export const CircuitAdminPanel = (props) => {
|
||||
const { act, data } = useBackend<CircuitAdminPanelData>();
|
||||
|
||||
return (
|
||||
<Window title="Circuit Admin Panel" width={1200} height={500} resizable>
|
||||
|
||||
@@ -2,8 +2,8 @@ import { useBackend } from '../backend';
|
||||
import { Stack, Section, Input, Button, Dropdown } from '../components';
|
||||
import { Window } from '../layouts';
|
||||
|
||||
export const CircuitModule = (props, context) => {
|
||||
const { act, data } = useBackend(context);
|
||||
export const CircuitModule = (props) => {
|
||||
const { act, data } = useBackend();
|
||||
const { input_ports, output_ports, global_port_types } = data;
|
||||
return (
|
||||
<Window width={600} height={300}>
|
||||
@@ -111,7 +111,7 @@ export const CircuitModule = (props, context) => {
|
||||
);
|
||||
};
|
||||
|
||||
const PortEntry = (props, context) => {
|
||||
const PortEntry = (props) => {
|
||||
const {
|
||||
onRemove,
|
||||
onEnter,
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user