Files
Firefly_Srtools/src/stores/copyProfile.ts
AzenKain 331aba4489
All checks were successful
Gitea Auto Deploy / Deploy-Container (push) Successful in 1m31s
init
2025-07-01 09:33:43 +07:00

61 lines
2.6 KiB
TypeScript

import { AvatarDataStore, AvatarProfileCardType, CharacterBasic, CharacterInfoCardType, EnkaResponse, FilterAvatarType } from '@/types';
import { create } from 'zustand'
interface CopyProfileState {
selectedProfiles: AvatarProfileCardType[];
listCopyAvatar: CharacterBasic[];
listRawCopyAvatar: CharacterBasic[];
filterCopy: FilterAvatarType;
avatarCopySelected: CharacterBasic | null;
setSelectedProfiles: (newListAvatar: AvatarProfileCardType[]) => void;
setAvatarCopySelected: (newAvatarSelected: CharacterBasic | null) => void;
setFilterCopy: (newFilter: FilterAvatarType) => void;
setListCopyAvatar: (newListAvatar: CharacterBasic[]) => void;
}
const useCopyProfileStore = create<CopyProfileState>((set, get) => ({
selectedProfiles: [],
listCopyAvatar: [],
listRawCopyAvatar: [],
filterCopy: {
name: "",
path: [],
element: [],
rarity: [],
locale: "",
},
avatarCopySelected: null,
setListCopyAvatar: (newListAvatar: CharacterBasic[]) => set({ listCopyAvatar: newListAvatar, listRawCopyAvatar: newListAvatar }),
setAvatarCopySelected: (newAvatarSelected: CharacterBasic | null) => set({ avatarCopySelected: newAvatarSelected }),
setFilterCopy: (newFilter: FilterAvatarType) => {
set({ filterCopy: newFilter })
if (newFilter.locale === "") {
return
}
let filteredList = get().listRawCopyAvatar;
if (newFilter.name) {
filteredList = filteredList.filter((avatar) => {
return avatar.lang?.get(newFilter.locale)?.toLowerCase().includes(newFilter.name.toLowerCase()) ?? false;
});
}
if (newFilter.path.length > 0) {
filteredList = filteredList.filter((avatar) => {
return newFilter.path.some((path) => avatar.baseType?.toLowerCase().includes(path.toLowerCase())) ?? false;
});
}
if (newFilter.element.length > 0) {
filteredList = filteredList.filter((avatar) => {
return newFilter.element.some((element) => avatar.damageType?.toLowerCase().includes(element.toLowerCase())) ?? false;
});
}
if (newFilter.rarity.length > 0) {
filteredList = filteredList.filter((avatar) => {
return newFilter.rarity.some((rarity) => avatar.rank?.toLowerCase().includes(rarity.toLowerCase())) ?? false;
});
}
set({ listCopyAvatar: filteredList });
},
setSelectedProfiles: (newListAvatar: AvatarProfileCardType[]) => set({ selectedProfiles: newListAvatar }),
}));
export default useCopyProfileStore;