@@ -17,6 +17,7 @@ import match from "autosuggest-highlight/match";
1717import parse from "autosuggest-highlight/parse" ;
1818import clsx from "clsx" ;
1919import { AnimatePresence , Transition } from "framer-motion" ;
20+ import { useRouter } from "next/router" ;
2021import React , { useState } from "react" ;
2122import create from "zustand" ;
2223import shallow from "zustand/shallow" ;
@@ -37,17 +38,22 @@ type MetadataPanelSection = "general" | "data";
3738
3839type 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
4952export 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
7079const 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