nitro-v36-with-renderer-v36
/
src /
components /
wired /
views /
actions /
WiredActionGiveOrTakeFurniView.tsx
WiredActionGiveOrTakeFurniView.tsx 3.5 Ko
Télécharger le fichier
import { FC, useEffect, useState } from 'react';
import { localizeWithFallback, WiredFurniType } from '../../../../api';
import { Text } from '../../../../common';
import { useWired } from '../../../../hooks';
import { WiredSourcesSelector } from '../WiredSourcesSelector';
import { slotUserSource } from '../WiredSourceSlots';
import { WiredActionBaseView } from './WiredActionBaseView';
import { Radio } from '../../../../common/Radio';
import { NumberInput } from '../../../../common/NumberInput';
import { NativeTextTree } from '../../../../common/native-text/NativeTextTree';
const MODE_GIVE = 0;
const MODE_TAKE = 1;
export const WiredActionGiveOrTakeFurniView: FC<{}> = props =>
{
const { trigger = null, setIntParams = null, setSourceTypes = null } = useWired();
const [ baseItemId, setBaseItemId ] = useState<number>(0);
const [ quantity, setQuantity ] = useState<number>(1);
const [ giveOrTake, setGiveOrTake ] = useState<number>(MODE_GIVE);
const [ userSource, setUserSource ] = useState<number>(0);
useEffect(() =>
{
if(!trigger) return;
setBaseItemId((trigger.intData?.length ?? 0) > 0 ? trigger.intData[0] : 0);
setQuantity((trigger.intData?.length ?? 0) > 1 ? trigger.intData[1] : 1);
setGiveOrTake((trigger.intData?.length ?? 0) > 2 ? trigger.intData[2] : MODE_GIVE);
setUserSource(slotUserSource(trigger));
}, [ trigger ]);
// Ours: [base item, quantity, give or take]; the user source is the official source slot.
const save = () => {
setIntParams([ baseItemId, quantity, giveOrTake ]);
setSourceTypes({ furni: [], users: [ userSource ] });
};
return (
<NativeTextTree>
<WiredActionBaseView
hasSpecialInput={ true }
requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE }
save={ save }
footer={ <WiredSourcesSelector showUsers={ true } userSource={ userSource } onChangeUsers={ setUserSource } /> }>
<div className="flex flex-col gap-1">
<Text bold>{ localizeWithFallback('wiredfurni.params.base_item_id', 'Base item ID') }</Text>
<NumberInput className="form-control form-control-sm" min={ 1 } value={ baseItemId } onChange={ event => setBaseItemId(parseInt(event.target.value, 10) || 0) } />
</div>
<div className="flex flex-col gap-1">
<Text bold>{ localizeWithFallback('wiredfurni.params.count', 'Quantity', [ 'count' ], [ quantity.toString() ]) }</Text>
<NumberInput className="form-control form-control-sm" min={ 1 } max={ 100 } value={ quantity } onChange={ event => setQuantity(parseInt(event.target.value, 10) || 0) } />
</div>
<div className="flex flex-col gap-1">
<div className="flex items-center gap-1">
<Radio name="giveOrTake" checked={ giveOrTake === MODE_GIVE } onCheckedChange={() => setGiveOrTake(MODE_GIVE)} />
<Text>{ localizeWithFallback('wiredfurni.params.give', 'Give') }</Text>
</div>
<div className="flex items-center gap-1">
<Radio name="giveOrTake" checked={ giveOrTake === MODE_TAKE } onCheckedChange={() => setGiveOrTake(MODE_TAKE)} />
<Text>{ localizeWithFallback('wiredfurni.params.take', 'Take') }</Text>
</div>
</div>
</WiredActionBaseView>
</NativeTextTree>
);
};
