import { IAvatarFigureContainer, SaveWardrobeOutfitMessageComposer } from '@nitrots/nitro-renderer'; import { Dispatch, FC, SetStateAction, useCallback, useMemo } from 'react'; import { Button } from 'react-bootstrap'; import { GetAvatarRenderManager, GetSessionDataManager } from '../../../../api'; import { AutoGrid } from '../../../../common/AutoGrid'; import { LayoutGridItem } from '../../../../common/layout/LayoutGridItem'; import { SendMessageHook } from '../../../../hooks'; import { AvatarImageView } from '../../../../views/shared/avatar-image/AvatarImageView'; import { CurrencyIcon } from '../../../../views/shared/currency-icon/CurrencyIcon'; import { FigureData } from '../../common/FigureData'; export interface AvatarEditorWardrobeViewProps { figureData: FigureData; savedFigures: [ IAvatarFigureContainer, string ][]; setSavedFigures: Dispatch>; loadAvatarInEditor: (figure: string, gender: string, reset?: boolean) => void; } export const AvatarEditorWardrobeView: FC = props => { const { figureData = null, savedFigures = [], setSavedFigures = null, loadAvatarInEditor = null } = props; const wearFigureAtIndex = useCallback((index: number) => { if((index >= savedFigures.length) || (index < 0)) return; const [ figure, gender ] = savedFigures[index]; loadAvatarInEditor(figure.getFigureString(), gender); }, [ savedFigures, loadAvatarInEditor ]); const saveFigureAtWardrobeIndex = useCallback((index: number) => { if(!figureData || (index >= savedFigures.length) || (index < 0)) return; const newFigures = [ ...savedFigures ]; const figure = figureData.getFigureString(); const gender = figureData.gender; newFigures[index] = [ GetAvatarRenderManager().createFigureContainer(figure), gender ]; setSavedFigures(newFigures); SendMessageHook(new SaveWardrobeOutfitMessageComposer((index + 1), figure, gender)); }, [ figureData, savedFigures, setSavedFigures ]); const figures = useMemo(() => { if(!savedFigures || !savedFigures.length) return []; const items: JSX.Element[] = []; savedFigures.forEach(([ figureContainer, gender ], index) => { let clubLevel = 0; if(figureContainer) clubLevel = GetAvatarRenderManager().getFigureClubLevel(figureContainer, gender); items.push( { figureContainer && } { (clubLevel > 0) && }
{ figureContainer && }
); }); return items; }, [ savedFigures, saveFigureAtWardrobeIndex, wearFigureAtIndex ]); return ( { figures } ); }