fix(team-editor) : persist multiple apply selections
This commit is contained in:
@@ -190,6 +190,8 @@ const teamMemberApplyOptions = [
|
||||
["refinement", "R"],
|
||||
["damage", "Damage"],
|
||||
] as const satisfies readonly (readonly [TeamMemberApplyField, string])[];
|
||||
const multipleApplyStorageKey = (guideId: string) =>
|
||||
`buzz-sheet:team-multiple-apply:${guideId}`;
|
||||
type Guide = {
|
||||
id: string;
|
||||
characterKey: string;
|
||||
@@ -2244,6 +2246,7 @@ function TeamEditor({
|
||||
const [presetsHydrated, setPresetsHydrated] = useState(false);
|
||||
const [presetsGuideId, setPresetsGuideId] = useState<string | null>(null);
|
||||
const [applyFields, setApplyFields] = useState<TeamApplySelection[]>([]);
|
||||
const [multipleApplyGuideId, setMultipleApplyGuideId] = useState<string | null>(null);
|
||||
const [searchQuery, setSearchQuery] = useState("");
|
||||
const [searchTarget, setSearchTarget] = useState<TeamSearchTarget>("all");
|
||||
const filteredTeams = useMemo(() => {
|
||||
@@ -2310,6 +2313,49 @@ function TeamEditor({
|
||||
}, 0);
|
||||
return () => window.clearTimeout(timer);
|
||||
}, [guide.id]);
|
||||
useEffect(() => {
|
||||
const timer = window.setTimeout(() => {
|
||||
try {
|
||||
const stored = JSON.parse(
|
||||
window.localStorage.getItem(multipleApplyStorageKey(guide.id)) ?? "null",
|
||||
) as { selectedTeamIds?: unknown; applyFields?: unknown } | null;
|
||||
const teamIds = new Set(initial.teams.map((team) => team.id));
|
||||
setSelectedTeamIds(new Set(
|
||||
Array.isArray(stored?.selectedTeamIds)
|
||||
? stored.selectedTeamIds.filter(
|
||||
(id): id is string => typeof id === "string" && teamIds.has(id),
|
||||
)
|
||||
: [],
|
||||
));
|
||||
setApplyFields(
|
||||
Array.isArray(stored?.applyFields)
|
||||
? stored.applyFields.filter(
|
||||
(field): field is TeamApplySelection => typeof field === "string",
|
||||
)
|
||||
: [],
|
||||
);
|
||||
} catch {
|
||||
setSelectedTeamIds(new Set());
|
||||
setApplyFields([]);
|
||||
}
|
||||
setMultipleApplyGuideId(guide.id);
|
||||
}, 0);
|
||||
return () => window.clearTimeout(timer);
|
||||
}, [guide.id, initial.teams]);
|
||||
useEffect(() => {
|
||||
if (multipleApplyGuideId !== guide.id) return;
|
||||
try {
|
||||
window.localStorage.setItem(
|
||||
multipleApplyStorageKey(guide.id),
|
||||
JSON.stringify({
|
||||
selectedTeamIds: [...selectedTeamIds],
|
||||
applyFields,
|
||||
}),
|
||||
);
|
||||
} catch {
|
||||
// Browser storage is optional; multiple apply remains usable without it.
|
||||
}
|
||||
}, [applyFields, guide.id, multipleApplyGuideId, selectedTeamIds]);
|
||||
useEffect(() => {
|
||||
if (!presetsHydrated || presetsGuideId !== guide.id) return;
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user