diff --git a/.changeset/wise-horses-swim.md b/.changeset/wise-horses-swim.md new file mode 100644 index 000000000..29f986bd8 --- /dev/null +++ b/.changeset/wise-horses-swim.md @@ -0,0 +1,5 @@ +--- +"@hyperdx/app": patch +--- + +avoid hydration errors when app loads if nav is collapsed diff --git a/packages/app/src/AppNav.tsx b/packages/app/src/AppNav.tsx index caad2f930..e1c1f3fe8 100644 --- a/packages/app/src/AppNav.tsx +++ b/packages/app/src/AppNav.tsx @@ -23,7 +23,7 @@ import { Loader, ScrollArea, } from '@mantine/core'; -import { useDisclosure } from '@mantine/hooks'; +import { useDisclosure, useLocalStorage } from '@mantine/hooks'; import { useCreateDashboard, @@ -50,7 +50,7 @@ import OnboardingChecklist from './OnboardingChecklist'; import { useSavedSearches, useUpdateSavedSearch } from './savedSearch'; import type { SavedSearch, ServerDashboard } from './types'; import { UserPreferencesModal } from './UserPreferencesModal'; -import { useLocalStorage, useWindowSize } from './utils'; +import { useWindowSize } from './utils'; import styles from '../styles/AppNav.module.scss'; @@ -212,7 +212,10 @@ const AppNavLinkGroups = ({ }) => { const [collapsedGroups, setCollapsedGroups] = useLocalStorage< Record - >(`collapsedGroups-${name}`, {}); + >({ + key: `collapsedGroups-${name}`, + defaultValue: {}, + }); const handleToggleGroup = useCallback( (groupName: string) => { @@ -375,20 +378,21 @@ export default function AppNav({ fixed = false }: { fixed?: boolean }) { const { data: meData } = api.useMe(); - const [isSearchExpanded, setIsSearchExpanded] = useLocalStorage( - 'isSearchExpanded', - true, - ); - const [isDashboardsExpanded, setIsDashboardExpanded] = useLocalStorage( - 'isDashboardsExpanded', - true, - ); + const [isSearchExpanded, setIsSearchExpanded] = useLocalStorage({ + key: 'isSearchExpanded', + defaultValue: true, + }); + const [isDashboardsExpanded, setIsDashboardExpanded] = + useLocalStorage({ + key: 'isDashboardsExpanded', + defaultValue: true, + }); const { width } = useWindowSize(); - const [isPreferCollapsed, setIsPreferCollapsed] = useLocalStorage( - 'isNavCollapsed', - false, - ); + const [isPreferCollapsed, setIsPreferCollapsed] = useLocalStorage({ + key: 'isNavCollapsed', + defaultValue: false, + }); const isSmallScreen = (width ?? 1000) < 900; const isCollapsed = isSmallScreen || isPreferCollapsed; @@ -434,7 +438,10 @@ export default function AppNav({ fixed = false }: { fixed?: boolean }) { }); const [isDashboardsPresetsCollapsed, setDashboardsPresetsCollapsed] = - useLocalStorage('isDashboardsPresetsCollapsed', false); + useLocalStorage({ + key: 'isDashboardsPresetsCollapsed', + defaultValue: false, + }); const savedSearchesResultsRef = useRef(null); const dashboardsResultsRef = useRef(null);