;
+ }>({ filtering, open: {} });
+ if (filtered.filtering !== filtering) {
+ setFiltered({ filtering, open: {} });
+ }
+ const whileFiltering = filtered.filtering === filtering ? filtered.open : {};
- const toggle = (
- category: LabOverviewCategoryDto,
- status: LabOverviewCategoryDto["status"],
- ) => {
- const next = {
- ...stored,
- ...own,
- [category.key]: !isOpen(category, status),
- };
+ const isOpen = (category: LabOverviewCategoryDto) =>
+ filtering
+ ? (whileFiltering[category.key] ?? true)
+ : (own[category.key] ??
+ stored[category.key] ??
+ openByDefault(category, mode));
+
+ const toggle = (category: LabOverviewCategoryDto) => {
+ if (filtering) {
+ setFiltered({
+ filtering,
+ open: { ...whileFiltering, [category.key]: !isOpen(category) },
+ });
+ return;
+ }
+ const next = { ...stored, ...own, [category.key]: !isOpen(category) };
setToggled({ mode, open: next });
writeStoredOpen(mode, next);
};
diff --git a/src/components/labs/lab-list.tsx b/src/components/labs/lab-list.tsx
index 67680ca2f..1de1a0ecf 100644
--- a/src/components/labs/lab-list.tsx
+++ b/src/components/labs/lab-list.tsx
@@ -87,12 +87,11 @@ function LabTable({
function useGroupToggle(
category: LabOverviewCategoryDto,
groupsOpen: GroupsOpen,
- status: LabOverviewCategoryDto["status"],
) {
const panelId = `${useId()}-panel`;
return {
- open: groupsOpen.isOpen(category, status),
- onToggle: () => groupsOpen.toggle(category, status),
+ open: groupsOpen.isOpen(category),
+ onToggle: () => groupsOpen.toggle(category),
panelId,
};
}
@@ -118,7 +117,6 @@ function TableGroup({
const { open, onToggle, panelId } = useGroupToggle(
group.category,
groupsOpen,
- status,
);
return (
@@ -186,7 +184,6 @@ function CardGroup({
const { open, onToggle, panelId } = useGroupToggle(
group.category,
groupsOpen,
- status,
);
return (
@@ -379,7 +376,7 @@ export function LabList({
effectiveFilters.toDay,
);
- const groupsOpen = useGroupsOpen(prefs.groupsOpen);
+ const groupsOpen = useGroupsOpen(prefs.groupsOpen, effectiveIsFiltered);
// Scrub stale category filter when categories load.
// afterPaint protects mount writes from router history initialization.