1- import React , { Context , createContext , useCallback , useContext , useState } from "react" ;
1+ import React , { Context , createContext , useContext , useEffect , useMemo , useState } from "react" ;
22import { getActivePanel } from "../Utils/getActivePanel" ;
33import { PanelSideBarContextProps } from "./PanelSideBarContextProps" ;
44
@@ -13,7 +13,7 @@ export interface PanelSideBarMenuProviderProps<TPanelItemId extends string, TPan
1313 */
1414 children : React . ReactNode ;
1515
16- /**
16+ /**
1717 * if the sidebar should be open by default.
1818 */
1919 sidebarOpenByDefault ?: boolean ;
@@ -23,14 +23,13 @@ export const PanelSideBarProvider = <TPanelItemId extends string, TPanelItem>(
2323 props : PanelSideBarMenuProviderProps < TPanelItemId , TPanelItem > ,
2424) => {
2525 const { children, defaultActivePanelId, sidebarOpenByDefault = true , menuItems : defaultMenuItems } = props ;
26- const [ menuItems , setMenuItems ] = useState ( defaultMenuItems ) ;
26+ const menuItems = useMemo ( ( ) => defaultMenuItems , [ defaultMenuItems ] ) ;
2727
2828 const [ isSidebarOpen , setIsSidebarOpen ] = useState ( sidebarOpenByDefault ) ;
2929 const toggleSidebar = ( ) => setIsSidebarOpen ( ( prev ) => ! prev ) ;
3030
3131 const [ activePanelId , setActivePanelId ] = useState ( getActivePanel ( menuItems , defaultActivePanelId ) ?. id ) ;
3232 const setActivePanel = ( panelId : TPanelItemId ) => setActivePanelId ( panelId ) ;
33-
3433 const [ toggledMenuItemIds , setToggledMenuItemIds ] = useState < TPanelItemId [ ] > ( activePanelId ? [ activePanelId ] : [ ] ) ;
3534 const toggleMenuItem : MenuItemToggleFn < TPanelItemId > = ( menuItemId ) => {
3635 setToggledMenuItemIds ( ( prev ) => {
@@ -44,24 +43,22 @@ export const PanelSideBarProvider = <TPanelItemId extends string, TPanelItem>(
4443 } ) ;
4544 } ;
4645
47- const untoggleMenuItems = ( ) => setToggledMenuItemIds ( [ ] ) ;
48-
49- const recomputeActivePanel = useCallback ( ( ) => {
46+ useEffect ( ( ) => {
5047 const activePanelId = getActivePanel ( menuItems , defaultActivePanelId ) ?. id ;
5148 setActivePanelId ( activePanelId ) ;
5249 if ( activePanelId ) {
53- setToggledMenuItemIds ( prev => prev . includes ( activePanelId ) ? prev : [ ...prev , activePanelId ] ) ;
50+ setToggledMenuItemIds ( ( prev ) => ( prev . includes ( activePanelId ) ? prev : [ ...prev , activePanelId ] ) ) ;
5451 }
55- } , [ ] ) ;
52+ } , [ menuItems ] ) ;
53+
54+ const untoggleMenuItems = ( ) => setToggledMenuItemIds ( [ ] ) ;
5655
5756 return (
5857 < PanelSideBarContext . Provider
5958 value = { {
6059 menuItems,
61- setMenuItems,
6260 activePanelId,
6361 setActivePanel,
64- recomputeActivePanel,
6562 toggledMenuItemIds,
6663 toggleMenuItem,
6764 untoggleMenuItems,
0 commit comments