fix(team-editor) : persist multiple apply selections
CI / Verify (push) Successful in 1m6s
CI / Build immutable images and deploy (push) Successful in 1m53s

This commit is contained in:
2026-09-05 14:09:46 +07:00 Unverified
parent 20ca7f6303
commit d7b8dcfd49
+46
View File
@@ -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 {