import { GetSessionDataManager } from '@nitrots/nitro-renderer'; import { CSSProperties, FC, PropsWithChildren, useEffect, useState } from 'react'; import { LocalizeText, WiredFurniType, WiredSelectionVisualizer } from '../../../api'; import { Button, NitroCardContentView, NitroCardHeaderView, NitroCardView, Text } from '../../../common'; import { useWired } from '../../../hooks'; import { WiredFurniSelectorView } from './WiredFurniSelectorView'; export interface WiredBaseViewProps { wiredType: string; requiresFurni: number; hasSpecialInput: boolean; save: () => void; validate?: () => boolean; cardStyle?: CSSProperties; } export const WiredBaseView: FC> = props => { const { wiredType = '', requiresFurni = WiredFurniType.STUFF_SELECTION_OPTION_NONE, save = null, validate = null, children = null, hasSpecialInput = false, cardStyle = undefined } = props; const [ wiredName, setWiredName ] = useState(null); const [ wiredDescription, setWiredDescription ] = useState(null); const [ needsSave, setNeedsSave ] = useState(false); const { trigger = null, setTrigger = null, setIntParams = null, setStringParam = null, setFurniIds = null, setAllowsFurni = null, saveWired = null } = useWired(); const onClose = () => setTrigger(null); const onSave = () => { if(validate && !validate()) return; if(save) save(); setNeedsSave(true); }; useEffect(() => { if(!needsSave) return; saveWired(); setNeedsSave(false); }, [ needsSave, saveWired ]); useEffect(() => { if(!trigger) return; const spriteId = (trigger.spriteId || -1); const furniData = GetSessionDataManager().getFloorItemData(spriteId); if(!furniData) { setWiredName(('NAME: ' + spriteId)); setWiredDescription(('NAME: ' + spriteId)); } else { setWiredName(furniData.name); setWiredDescription(furniData.description); } if(hasSpecialInput) { setIntParams(trigger.intData); setStringParam(trigger.stringData); } if(requiresFurni > WiredFurniType.STUFF_SELECTION_OPTION_NONE) { setFurniIds(prevValue => { if(prevValue && prevValue.length) WiredSelectionVisualizer.clearSelectionShaderFromFurni(prevValue); if(trigger.selectedItems && trigger.selectedItems.length) { WiredSelectionVisualizer.applySelectionShaderToFurni(trigger.selectedItems); return trigger.selectedItems; } return []; }); } setAllowsFurni(requiresFurni); }, [ trigger, hasSpecialInput, requiresFurni, setIntParams, setStringParam, setFurniIds, setAllowsFurni ]); return (
{ wiredName }
{ wiredDescription }
{ !!children &&
} { children } { (requiresFurni > WiredFurniType.STUFF_SELECTION_OPTION_NONE) && <>
}
); };