UPDATE: monster bar
Some checks failed
Gitea Auto Deploy / Deploy-Container (push) Failing after 1m36s
Some checks failed
Gitea Auto Deploy / Deploy-Container (push) Failing after 1m36s
This commit is contained in:
@@ -1,91 +1,31 @@
|
||||
"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"
|
||||
import { useFetchASData, useFetchAvatarData, useFetchConfigData, useFetchLightconeData, useFetchMOCData, useFetchMonsterData, useFetchPFData, useFetchRelicData } from "@/hooks"
|
||||
|
||||
export default function AvatarBar() {
|
||||
const [listElement, setListElement] = useState<Record<string, boolean>>({ "fire": false, "ice": false, "imaginary": false, "physical": false, "quantum": false, "thunder": false, "wind": false })
|
||||
const [listPath, setListPath] = useState<Record<string, boolean>>({ "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 { listAvatar, setAvatarSelected, setFilter, filter } = useAvatarStore()
|
||||
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])
|
||||
|
||||
|
||||
useFetchConfigData()
|
||||
useFetchAvatarData()
|
||||
useFetchLightconeData()
|
||||
useFetchRelicData()
|
||||
useFetchMonsterData()
|
||||
useFetchPFData()
|
||||
useFetchMOCData()
|
||||
useFetchASData()
|
||||
|
||||
useEffect(() => {
|
||||
setFilter({ ...filter, locale: locale, element: Object.keys(listElement).filter((key) => listElement[key]), path: Object.keys(listPath).filter((key) => listPath[key]) })
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, [locale, listElement, listPath])
|
||||
|
||||
return (
|
||||
@@ -103,7 +43,7 @@ export default function AvatarBar() {
|
||||
/>
|
||||
</div>
|
||||
<div className="grid grid-cols-1 md:grid-cols-4 lg:grid-cols-7 mb-1 mx-1 gap-2 w-full max-h-[17vh] min-h-[5vh] overflow-y-auto">
|
||||
{Object.entries(listElement).map(([key, value], index) => (
|
||||
{Object.keys(listElement).map((key, index) => (
|
||||
<div
|
||||
key={index}
|
||||
onClick={() => {
|
||||
@@ -113,7 +53,7 @@ export default function AvatarBar() {
|
||||
style={{
|
||||
backgroundColor: listElement[key] ? "#374151" : "#6B7280"
|
||||
}}>
|
||||
<Image src={"https://api.hakush.in/hsr/UI/element/" + key + ".webp"}
|
||||
<Image src={ `/icon/${key}.webp`}
|
||||
alt={key}
|
||||
className="h-[28px] w-[28px] 2xl:h-[40px] 2xl:w-[40px] object-contain rounded-md"
|
||||
width={200}
|
||||
@@ -123,7 +63,7 @@ export default function AvatarBar() {
|
||||
</div>
|
||||
|
||||
<div className="grid grid-cols-1 md:grid-cols-4 lg:grid-cols-8 mb-1 mx-1 gap-2 overflow-y-auto w-full max-h-[17vh] min-h-[5vh]">
|
||||
{Object.entries(listPath).map(([key, value], index) => (
|
||||
{Object.keys(listPath).map((key, index) => (
|
||||
<div
|
||||
key={index}
|
||||
onClick={() => {
|
||||
@@ -135,7 +75,7 @@ export default function AvatarBar() {
|
||||
}}
|
||||
>
|
||||
|
||||
<Image src={"https://api.hakush.in/hsr/UI/pathicon/" + key + ".webp"}
|
||||
<Image src={`/icon/${key}.webp`}
|
||||
alt={key}
|
||||
className="h-[28px] w-[28px] 2xl:h-[40px] 2xl:w-[40px] object-contain rounded-md"
|
||||
width={200}
|
||||
|
||||
Reference in New Issue
Block a user