nitro-react/src/views/wired/WiredView.tsx

53 lines
2.3 KiB
TypeScript
Raw Normal View History

2021-06-29 04:11:11 +02:00
import { ConditionDefinition, Triggerable, TriggerDefinition, UpdateActionMessageComposer, UpdateConditionMessageComposer, UpdateTriggerMessageComposer, WiredActionDefinition } from 'nitro-renderer';
2021-06-28 18:32:06 +02:00
import { FC, useCallback, useMemo, useState } from 'react';
import { GetConnection } from '../../api';
import { WiredEvent } from '../../events';
import { useUiEvent } from '../../hooks/events';
import { GetWiredLayout } from './common/GetWiredLayout';
import { WiredContextProvider } from './context/WiredContext';
import { WiredMessageHandler } from './WiredMessageHandler';
2021-06-27 04:46:40 +02:00
import { WiredFurniSelectorViewProps } from './WiredView.types';
export const WiredView: FC<WiredFurniSelectorViewProps> = props =>
{
2021-06-28 18:32:06 +02:00
const [ trigger, setTrigger ] = useState<Triggerable>(null);
const [ intParams, setIntParams ] = useState<number[]>(null);
const [ stringParam, setStringParam ] = useState<string>(null);
const [ furniIds, setFurniIds ] = useState<number[]>(null);
const [ actionDelay, setActionDelay ] = useState<number>(null);
2021-06-27 04:46:40 +02:00
2021-06-28 18:32:06 +02:00
const wiredLayout = useMemo(() =>
2021-06-27 04:46:40 +02:00
{
2021-06-28 18:32:06 +02:00
return GetWiredLayout(trigger);
}, [ trigger ]);
2021-06-27 04:46:40 +02:00
2021-06-28 18:32:06 +02:00
const onWiredEvent = useCallback((event: WiredEvent) =>
2021-06-27 04:46:40 +02:00
{
2021-06-28 18:32:06 +02:00
// check if owner & warn with confirm
if(trigger instanceof WiredActionDefinition)
{
GetConnection().send(new UpdateActionMessageComposer(trigger.id, intParams, stringParam, furniIds, actionDelay, trigger.stuffTypeSelectionCode));
}
2021-06-29 02:48:15 +02:00
if(trigger instanceof TriggerDefinition)
{
GetConnection().send(new UpdateTriggerMessageComposer(trigger.id, intParams, stringParam, furniIds, trigger.stuffTypeSelectionCode));
}
2021-06-29 04:11:11 +02:00
if(trigger instanceof ConditionDefinition)
{
GetConnection().send(new UpdateConditionMessageComposer(trigger.id, intParams, stringParam, furniIds, trigger.stuffTypeSelectionCode));
}
2021-06-28 18:32:06 +02:00
}, [ trigger, intParams, stringParam, furniIds, actionDelay ]);
2021-06-27 04:46:40 +02:00
2021-06-28 18:32:06 +02:00
useUiEvent(WiredEvent.SAVE_WIRED, onWiredEvent);
2021-06-27 04:46:40 +02:00
return (
2021-06-28 18:32:06 +02:00
<WiredContextProvider value={ { trigger, setTrigger, intParams, setIntParams, stringParam, setStringParam, furniIds, setFurniIds, actionDelay, setActionDelay }}>
<WiredMessageHandler />
{ wiredLayout }
</WiredContextProvider>
2021-06-27 04:46:40 +02:00
);
};