"use client" import { getCharacterListApi, fetchCharactersByIdsNative, getConfigMazeApi, getLightconeListApi, fetchLightconesByIdsNative, fetchRelicsByIdsNative, getRelicSetListApi, getMainAffixApi, getSubAffixApi } from "@/lib/api" import Image from "next/image" import { useEffect, useState } from "react" import CharacterCard from "../card/characterCard" import useLocaleStore from "@/stores/localeStore" import { listCurrentLanguageApi } from "@/lib/constant" import useAvatarStore from "@/stores/avatarStore" import useUserDataStore from "@/stores/userDataStore" import { converterToAvatarStore, getAvatarNotExist } from "@/helper" import useLightconeStore from "@/stores/lightconeStore" import useRelicStore from "@/stores/relicStore" import useAffixStore from "@/stores/affixStore" import useMazeStore from "@/stores/mazeStore" import { useTranslations } from "next-intl" export default function AvatarBar() { const [listElement, setListElement] = useState>({ "fire": false, "ice": false, "imaginary": false, "physical": false, "quantum": false, "thunder": false, "wind": false }) const [listPath, setListPath] = useState>({ "knight": false, "mage": false, "priest": false, "rogue": false, "shaman": false, "warlock": false, "warrior": false, "memory": false }) const { listAvatar, setListAvatar, setAvatarSelected, setFilter, filter, setAllMapAvatarInfo, avatarSelected } = useAvatarStore() const { setAvatars, avatars } = useUserDataStore() const transI18n = useTranslations("DataPage") const { locale } = useLocaleStore() const { setListLightcone, setAllMapLightconeInfo } = useLightconeStore() const { setListRelic, setAllMapRelicInfo } = useRelicStore() const { setMapMainAffix, setMapSubAffix } = useAffixStore() const { setAllData } = useMazeStore() useEffect(() => { const fetchData = async () => { // Maze const maze = await getConfigMazeApi() setAllData(maze) // Affix const mapMainAffix = await getMainAffixApi() setMapMainAffix(mapMainAffix) const mapSubAffix = await getSubAffixApi() setMapSubAffix(mapSubAffix) } fetchData() }, []) useEffect(() => { const fetchData = async () => { // Avatar const listAvatar = await getCharacterListApi() listAvatar.sort((a, b) => { const aHasRelease = typeof a.release === 'number'; const bHasRelease = typeof b.release === 'number'; if (!aHasRelease && !bHasRelease) return 0; if (!aHasRelease) return -1; if (!bHasRelease) return 1; return b.release! - a.release!; }); const mapAvatar = await fetchCharactersByIdsNative(listAvatar.map((item) => item.id), listCurrentLanguageApi[locale.toLowerCase()]) setListAvatar(listAvatar) setAllMapAvatarInfo(mapAvatar) const avatarStore = converterToAvatarStore(getAvatarNotExist()) if (Object.keys(avatarStore).length > 0) { setAvatars({ ...avatars, ...avatarStore }) } if (!avatarSelected) { setAvatarSelected(listAvatar[0]) } // Lightcone const listLightcone = await getLightconeListApi() listLightcone.sort((a, b) => Number(b.id) - Number(a.id)) setListLightcone(listLightcone) const mapLightcone = await fetchLightconesByIdsNative(listLightcone.map((item) => item.id), listCurrentLanguageApi[locale.toLowerCase()]) setAllMapLightconeInfo(mapLightcone) // Relic const listRelic = await getRelicSetListApi() setListRelic(listRelic) const mapRelic = await fetchRelicsByIdsNative(listRelic.map((item) => item.id), listCurrentLanguageApi[locale.toLowerCase()]) setAllMapRelicInfo(mapRelic) } fetchData() }, [locale]) useEffect(() => { setFilter({ ...filter, locale: locale, element: Object.keys(listElement).filter((key) => listElement[key]), path: Object.keys(listPath).filter((key) => listPath[key]) }) }, [locale, listElement, listPath]) return (
setFilter({ ...filter, name: e.target.value, locale: locale })} />
{Object.entries(listElement).map(([key, value], index) => (
{ setListElement((prev) => ({ ...prev, [key]: !prev[key] })) }} className="hover:bg-gray-600 grid items-center justify-items-center cursor-pointer rounded-md shadow-lg" style={{ backgroundColor: listElement[key] ? "#374151" : "#6B7280" }}> {key}
))}
{Object.entries(listPath).map(([key, value], index) => (
{ setListPath((prev) => ({ ...prev, [key]: !prev[key] })) }} className="hover:bg-gray-600 grid items-center justify-items-center rounded-md shadow-lg cursor-pointer" style={{ backgroundColor: listPath[key] ? "#374151" : "#6B7280" }} > {key}
))}
    {listAvatar.map((item, index) => (
    setAvatarSelected(item)}>
    ))}
) }