diff --git a/src/actions/chuni/userbox.ts b/src/actions/chuni/userbox.ts index dcda7c2..f621799 100644 --- a/src/actions/chuni/userbox.ts +++ b/src/actions/chuni/userbox.ts @@ -34,7 +34,7 @@ export type UserboxItems = { trophy: Pick[] } & { [K in `avatar${'Wear' | 'Head' | 'Face' | 'Skin' | 'Item' | 'Front' | 'Back'}`]: - Pick[] + Pick[] }; export const getUserboxItems = async (user: UserPayload, profile: ChuniUserData): Promise => { diff --git a/src/app/(with-header)/chuni/userbox/userbox.tsx b/src/app/(with-header)/chuni/userbox/userbox.tsx index e371890..6fe46ac 100644 --- a/src/app/(with-header)/chuni/userbox/userbox.tsx +++ b/src/app/(with-header)/chuni/userbox/userbox.tsx @@ -45,7 +45,7 @@ type SavedItem = { [K in keyof RequiredUserbox]: boolean }; export const ChuniUserbox = ({ profile, userboxItems }: ChuniUserboxProps) => { const initialEquipped = useRef(Object.fromEntries(Object.entries(ITEM_KEYS) .map(([key, profileKey]) => [key, userboxItems[key as keyof RequiredUserbox] - .find(i => ('id' in i ? i.id : i.avatarAccessoryId) === profile?.[profileKey])])) as EquippedItem); + .find(i => i.id === profile?.[profileKey])])) as EquippedItem); const [equipped, setEquipped] = useState(initialEquipped.current); const [saved, setSaved] = useState(Object.fromEntries(Object.keys(ITEM_KEYS).map(k => [k, true])) as any); const [playingVoice, setPlayingVoice] = useState(false); @@ -82,7 +82,7 @@ export const ChuniUserbox = ({ profile, userboxItems }: ChuniUserboxProps) => { const update: Partial = Object.fromEntries((Object.entries(equipped) as Entries) .filter(([k]) => items.includes(k as any)) - .map(([k, v]) => [ITEM_KEYS[k], 'id' in v ? v.id : v.avatarAccessoryId])); + .map(([k, v]) => [ITEM_KEYS[k], v.id])); setSaved(s => ({ ...s, ...Object.fromEntries(items.map(i => [i, true])) })); @@ -209,7 +209,7 @@ export const ChuniUserbox = ({ profile, userboxItems }: ChuniUserboxProps) => {
{(['avatarHead', 'avatarFace', 'avatarWear', 'avatarSkin', 'avatarItem', 'avatarBack'] as const).map(k => ((k !== 'avatarSkin' || userboxItems.avatarSkin.length > 1) && equipItem(k, i)} items={userboxItems[k]} selectedItem={equipped[k]} renderItem={i => renderItem(i, getImageUrl(`chuni/avatar/${i.iconPath}`)) }> diff --git a/src/components/select-modal.tsx b/src/components/select-modal.tsx index 1305b29..79a6317 100644 --- a/src/components/select-modal.tsx +++ b/src/components/select-modal.tsx @@ -10,11 +10,11 @@ import { useWindowListener } from '@/helpers/use-window-listener'; import { useReloaded } from './client-providers'; import { useVirtualizer } from '@tanstack/react-virtual'; -type Data = { +type Data = { name?: string | null, -} & { [K in I]: any }; +}; -export type SelectModalProps> = { +export type SelectModalProps = { isOpen: boolean, onSelected: (item: D | null | undefined) => void, selectedItem: D | null | undefined, @@ -33,8 +33,8 @@ export type SelectModalProps>({ onSelectionChanged, setSelected, gap, rowSize, renderItem, items, selected, itemId }: - Pick, 'itemId' | 'onSelectionChanged' | 'gap' | 'rowSize' | 'renderItem' | 'items'> & { selected?: D | null, setSelected: (d: D) => void }) => { +const SelectModalList = ({ onSelectionChanged, setSelected, gap, rowSize, renderItem, items, selected, itemId }: + Pick, 'itemId' | 'onSelectionChanged' | 'gap' | 'rowSize' | 'renderItem' | 'items'> & { selected?: D | null, setSelected: (d: D) => void }) => { const listRef = useRef(null); const lastHeight = useRef(rowSize); @@ -76,8 +76,8 @@ const SelectModalList = >({ onSelectionChang
) }; -const SelectModalGrid = >({ onSelectionChanged, setSelected, gap, rowSize, renderItem, items, selected, colSize, itemId }: - Pick, 'itemId' | 'onSelectionChanged' | 'gap' | 'rowSize' | 'renderItem' | 'items' | 'colSize'> & { selected?: D | null, setSelected: (d: D) => void; }) => { +const SelectModalGrid = ({ onSelectionChanged, setSelected, gap, rowSize, renderItem, items, selected, colSize, itemId }: + Pick, 'itemId' | 'onSelectionChanged' | 'gap' | 'rowSize' | 'renderItem' | 'items' | 'colSize'> & { selected?: D | null, setSelected: (d: D) => void; }) => { const listRef = useRef(null); const lastHeight = useRef(rowSize); const [width, setWidth] = useState(0) @@ -134,7 +134,7 @@ const SelectModalGrid = >({ onSelectionChang ) }; -const SelectModal = >({ footer, onSelectionChanged, gap, selectedItem, renderItem, displayMode, items, isOpen, onSelected, modalSize, colSize, rowSize, itemId }: SelectModalProps) => { +const SelectModal = ({ footer, onSelectionChanged, gap, selectedItem, renderItem, displayMode, items, isOpen, onSelected, modalSize, colSize, rowSize, itemId }: SelectModalProps) => { const [selected, setSelected] = useState(selectedItem); const [filteredItems, setFilteredItems] = useState(items); const outputSelected = useRef(null); @@ -194,8 +194,8 @@ const SelectModal = ) }; -export const SelectModalButton = >(props: Omit & - Pick, 'itemId' | 'modalSize' | 'displayMode' | 'colSize' | 'rowSize' | 'items' | 'renderItem' | 'selectedItem' | 'onSelected' | 'gap' | 'onSelectionChanged' | 'footer'> & +export const SelectModalButton = (props: Omit & + Pick, 'itemId' | 'modalSize' | 'displayMode' | 'colSize' | 'rowSize' | 'items' | 'renderItem' | 'selectedItem' | 'onSelected' | 'gap' | 'onSelectionChanged' | 'footer'> & { modalId: string; }) => { const router = useRouter(); const [isOpen, setOpen] = useState(false);