Skip to content

Commit 7414225

Browse files
committed
feat: Close & reset metadata panel on route change
1 parent 7db2f0d commit 7414225

1 file changed

Lines changed: 19 additions & 1 deletion

File tree

app/components/metadata-panel.tsx

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import match from "autosuggest-highlight/match";
1717
import parse from "autosuggest-highlight/parse";
1818
import clsx from "clsx";
1919
import { AnimatePresence, Transition } from "framer-motion";
20+
import { useRouter } from "next/router";
2021
import React, { useState } from "react";
2122
import create from "zustand";
2223
import shallow from "zustand/shallow";
@@ -37,17 +38,22 @@ type MetadataPanelSection = "general" | "data";
3738

3839
type MetadataPanelState = {
3940
open: boolean;
41+
setOpen: (d: boolean) => void;
4042
toggle: () => void;
4143
activeSection: MetadataPanelSection;
4244
setActiveSection: (d: MetadataPanelSection) => void;
4345
selectedDimension: DimensionMetadataFragment | undefined;
4446
setSelectedDimension: (d: DimensionMetadataFragment) => void;
4547
clearSelectedDimension: () => void;
4648
openDimension: (d: DimensionMetadataFragment) => void;
49+
reset: () => void;
4750
};
4851

4952
export const useMetadataPanelStore = create<MetadataPanelState>((set, get) => ({
5053
open: false,
54+
setOpen: (d: boolean) => {
55+
set({ open: d });
56+
},
5157
toggle: () => {
5258
set({ open: !get().open });
5359
},
@@ -65,6 +71,9 @@ export const useMetadataPanelStore = create<MetadataPanelState>((set, get) => ({
6571
openDimension: (d: DimensionMetadataFragment) => {
6672
set({ open: true, activeSection: "data", selectedDimension: d });
6773
},
74+
reset: () => {
75+
set({ activeSection: "general", selectedDimension: undefined });
76+
},
6877
}));
6978

7079
const useDrawerStyles = makeStyles<Theme, { top: number }>((theme) => {
@@ -221,22 +230,31 @@ export const MetadataPanel = ({
221230
container?: HTMLDivElement | null;
222231
top?: number;
223232
}) => {
233+
const router = useRouter();
224234
const drawerClasses = useDrawerStyles({ top });
225235
const otherClasses = useOtherStyles();
226-
const { open, toggle, activeSection, setActiveSection } =
236+
const { open, setOpen, toggle, activeSection, setActiveSection, reset } =
227237
useMetadataPanelStore(
228238
(state) => ({
229239
open: state.open,
240+
setOpen: state.setOpen,
230241
toggle: state.toggle,
231242
activeSection: state.activeSection,
232243
setActiveSection: state.setActiveSection,
244+
reset: state.reset,
233245
}),
234246
shallow
235247
);
236248
const handleToggle = useEvent(() => {
237249
toggle();
238250
});
239251

252+
// Close and reset the metadata panel when route has changed.
253+
React.useEffect(() => {
254+
setOpen(false);
255+
reset();
256+
}, [router.pathname, setOpen, reset]);
257+
240258
return (
241259
<>
242260
<ToggleButton onClick={handleToggle} />

0 commit comments

Comments
 (0)