"use client" import useUserDataStore from "@/stores/userDataStore"; import { useEffect, useState } from "react"; import useCopyProfileStore from "@/stores/copyProfile"; import ProfileCard from "../card/profileCard"; import { AvatarProfileCardType, AvatarProfileStore } from "@/types"; import Image from "next/image"; import useListAvatarStore from "@/stores/avatarStore"; import { getNameChar } from "@/helper"; import useLocaleStore from "@/stores/localeStore"; import { useTranslations } from "next-intl"; import SelectCustomImage from "../select/customSelectImage"; export default function CopyImport() { const { avatars, setAvatar } = useUserDataStore(); const { avatarSelected } = useListAvatarStore() const { locale } = useLocaleStore() const { selectedProfiles, listCopyAvatar, avatarCopySelected, setSelectedProfiles, filterCopy, setFilterCopy, setAvatarCopySelected, listElement, listPath, listRank, setListElement, setListPath, setListRank } = useCopyProfileStore() const transI18n = useTranslations("DataPage") const [message, setMessage] = useState({ type: "", text: "" }) const handleProfileToggle = (profile: AvatarProfileCardType) => { if (selectedProfiles.some((selectedProfile) => selectedProfile.key === profile.key)) { setSelectedProfiles(selectedProfiles.filter((selectedProfile) => selectedProfile.key !== profile.key)); return; } setSelectedProfiles([...selectedProfiles, profile]); }; useEffect(() => { setFilterCopy({ ...filterCopy, locale: locale, path: Object.keys(listPath).filter((key) => listPath[key]), element: Object.keys(listElement).filter((key) => listElement[key]), rarity: Object.keys(listRank).filter((key) => listRank[key]) }) // eslint-disable-next-line react-hooks/exhaustive-deps }, [listPath, listRank, listElement, locale, setFilterCopy]) const clearSelection = () => { setSelectedProfiles([]); setMessage({ type: "success", text: transI18n("clearAll") }) }; const selectAll = () => { if (avatarCopySelected) { setSelectedProfiles(avatars[avatarCopySelected?.id.toString()].profileList.map((profile, index) => { if (!profile.lightcone?.item_id && Object.keys(profile.relics).length == 0) { return null; } return { key: index, ...profile, } as AvatarProfileCardType }).filter((profile) => profile !== null)); } setMessage({ type: "success", text: transI18n("selectAll") }) }; const handleCopy = () => { if (selectedProfiles.length === 0) { setMessage({ type: "error", text: transI18n("pleaseSelectAtLeastOneProfile") }); return; } if (!avatarCopySelected) { setMessage({ type: "error", text: transI18n("noAvatarToCopySelected") }); return; } if (!avatarSelected) { setMessage({ type: "error", text: transI18n("noAvatarSelected") }); return; } const newListProfile = avatars[avatarCopySelected.id.toString()].profileList.map((profile) => { if (!profile.lightcone?.item_id && Object.keys(profile.relics).length == 0) { return null; } return { ...profile, profile_name: profile.profile_name + ` - Copy: ${avatarCopySelected?.id}`, } as AvatarProfileStore }).filter((profile) => profile !== null); const newAvatar = { ...avatars[avatarSelected.id.toString()], profileList: avatars[avatarSelected.id.toString()].profileList.concat(newListProfile), profileSelect: avatars[avatarSelected.id.toString()].profileList.length - 1, } setAvatar(newAvatar); setSelectedProfiles([]); setMessage({ type: "success", text: transI18n("copied") }); }; return (
{/* Header */}
{transI18n("filter")}
{/* Path */}
{Object.entries(listPath).map(([key], index) => (
{ setListPath({ ...listPath, [key]: !listPath[key] }) }} className="w-12.5 h-12.5 hover:bg-gray-600 grid items-center justify-items-center rounded-md shadow-md cursor-pointer" style={{ backgroundColor: listPath[key] ? "#374151" : "#6B7280" }}> {key}
))}
{/* Element */}
{Object.entries(listElement).map(([key], index) => (
{ setListElement({ ...listElement, [key]: !listElement[key] }) }} className="w-12.5 h-12.5 hover:bg-gray-600 grid items-center justify-items-center rounded-md shadow-md cursor-pointer" style={{ backgroundColor: listElement[key] ? "#374151" : "#6B7280" }}> {key}
))}
{/* Rank */}
{Object.entries(listRank).map(([key], index) => (
{ setListRank({ ...listRank, [key]: !listRank[key] }) }} className="w-12.5 h-12.5 hover:bg-gray-600 grid items-center justify-items-center rounded-md shadow-md cursor-pointer" style={{ backgroundColor: listRank[key] ? "#374151" : "#6B7280" }}>
{key}*
))}
{listCopyAvatar.length > 0 && (
{transI18n("characterName")}
({ value: avatar.id.toString(), label: getNameChar(locale, transI18n, avatar), imageUrl: `https://api.hakush.in/hsr/UI/avatarshopicon/${avatar.id}.webp` }))} excludeSet={[]} selectedCustomSet={avatarCopySelected?.id.toString() || ""} placeholder="Character Select" setSelectedCustomSet={(value) => setAvatarCopySelected(listCopyAvatar.find((avatar) => avatar.id.toString() === value) || null)} />
)}
{/* Selection Info */}
{transI18n("selectedProfiles")}: {selectedProfiles.length} {selectedProfiles.length > 0 && ( )}
{message.type && message.text && (
{message.type == "error" ? "😭" : "🎉"} {message.text}
)}
{/* Character Grid */}
{avatarCopySelected && avatars[avatarCopySelected?.id.toString()]?.profileList.map((profile, index) => { if (!profile.lightcone?.item_id && Object.keys(profile.relics).length == 0) { return null; } return ( ) })}
) }