import { AvatarEditorFigureCategory, AvatarFigurePartType, FigureDataContainer } from '@nitrots/nitro-renderer'; import { FC, useCallback, useEffect, useMemo, useState } from 'react'; import { CreateLinkEvent, GetClubMemberLevel, GetConfigurationValue, IAvatarEditorCategory } from '../../api'; import { LayoutCurrencyIcon } from '../../common'; import { useAvatarEditor } from '../../hooks'; import { AvatarEditorIcon } from './AvatarEditorIcon'; import { AvatarEditorFigureSetView } from './figure-set'; import { AvatarEditorAdvancedColorView, AvatarEditorPaletteSetView } from './palette-set'; export const AvatarEditorModelView: FC<{ name: string, categories: IAvatarEditorCategory[] }> = props => { const { name = '', categories = [] } = props; const [ didChange, setDidChange ] = useState(false); const [ activeSetType, setActiveSetType ] = useState(''); const [ advancedColorMode, setAdvancedColorMode ] = useState(false); const hasHC = GetClubMemberLevel() > 0; const { maxPaletteCount = 1, gender = null, setGender = null, selectedColorParts = null, getFirstSelectableColor = null, selectEditorColor = null } = useAvatarEditor(); const activeCategory = useMemo(() => { return categories.find(category => category.setType === activeSetType) ?? null; }, [ categories, activeSetType ]); const selectSet = useCallback((setType: string) => { const selectedPalettes = selectedColorParts[setType]; if(!selectedPalettes || !selectedPalettes.length) selectEditorColor(setType, 0, getFirstSelectableColor(setType)); setActiveSetType(setType); }, [ getFirstSelectableColor, selectEditorColor, selectedColorParts ]); useEffect(() => { if(!categories || !categories.length || !didChange) return; selectSet(categories[0]?.setType); setDidChange(false); }, [ categories, didChange, selectSet ]); useEffect(() => { setDidChange(true); }, [ categories ]); if(!activeCategory) return null; return (
{ /* ── Category / gender selector row ── */ }
{ (name === AvatarEditorFigureCategory.GENERIC) && <>
setGender(AvatarFigurePartType.MALE) }>
setGender(AvatarFigurePartType.FEMALE) }>
} { (name !== AvatarEditorFigureCategory.GENERIC) && categories.map(category =>
selectSet(category.setType) }>
) }
{ /* ── Colour palette row at bottom ── */ }
{ (maxPaletteCount >= 1) &&
{ advancedColorMode ? : }
} { (maxPaletteCount === 2) &&
{ advancedColorMode ? : }
}
); };