@@ -406,14 +406,30 @@ export function ShotStatusClient({
|
||||
// eslint-disable-next-line react-hooks/exhaustive-deps
|
||||
}, []);
|
||||
|
||||
const [collapsedEpisodes, setCollapsedEpisodes] = useState<Set<string>>(new Set());
|
||||
const [expandedEpisodes, setExpandedEpisodes] = useState<Set<string>>(new Set());
|
||||
const [selectedIds, setSelectedIds] = useState<Set<string>>(new Set());
|
||||
|
||||
// Load saved episode expand state when project changes
|
||||
useEffect(() => {
|
||||
if (!selectedProjectId) return;
|
||||
try {
|
||||
const saved = localStorage.getItem(`shotStatus:${selectedProjectId}:episodeExpand`);
|
||||
setExpandedEpisodes(saved ? new Set(JSON.parse(saved) as string[]) : new Set());
|
||||
} catch {
|
||||
setExpandedEpisodes(new Set());
|
||||
}
|
||||
}, [selectedProjectId]);
|
||||
const [dueDateDialogOpen, setDueDateDialogOpen] = useState(false);
|
||||
|
||||
const toggleEpisode = (ep: string) =>
|
||||
setCollapsedEpisodes((prev) => {
|
||||
setExpandedEpisodes((prev) => {
|
||||
const next = new Set(prev);
|
||||
next.has(ep) ? next.delete(ep) : next.add(ep);
|
||||
if (selectedProjectId) {
|
||||
try {
|
||||
localStorage.setItem(`shotStatus:${selectedProjectId}:episodeExpand`, JSON.stringify([...next]));
|
||||
} catch {}
|
||||
}
|
||||
return next;
|
||||
});
|
||||
|
||||
@@ -571,7 +587,7 @@ export function ShotStatusClient({
|
||||
{isEpisodic ? (
|
||||
<div className="divide-y divide-zinc-800">
|
||||
{episodeGroups.map(([episode, episodeShots]) => {
|
||||
const collapsed = collapsedEpisodes.has(episode);
|
||||
const collapsed = !expandedEpisodes.has(episode);
|
||||
const episodeIds = episodeShots.map((s) => s.id);
|
||||
const allEpSelected = episodeIds.every((id) => selectedIds.has(id));
|
||||
const someEpSelected = episodeIds.some((id) => selectedIds.has(id));
|
||||
|
||||
Reference in New Issue
Block a user