diff --git a/web/src/components/filter/CameraGroupSelector.tsx b/web/src/components/filter/CameraGroupSelector.tsx index 365fc8ccf..cd0b118c9 100644 --- a/web/src/components/filter/CameraGroupSelector.tsx +++ b/web/src/components/filter/CameraGroupSelector.tsx @@ -109,7 +109,7 @@ export function CameraGroupSelector({ className }: CameraGroupSelectorProps) { // groups - const [group, setGroup, deleteGroup] = usePersistedOverlayState( + const [group, setGroup, , deleteGroup] = usePersistedOverlayState( "cameraGroup", "default" as string, ); diff --git a/web/src/hooks/use-overlay-state.tsx b/web/src/hooks/use-overlay-state.tsx index 5b41ca302..585afd542 100644 --- a/web/src/hooks/use-overlay-state.tsx +++ b/web/src/hooks/use-overlay-state.tsx @@ -40,6 +40,7 @@ export function usePersistedOverlayState( ): [ S | undefined, (value: S | undefined, replace?: boolean) => void, + boolean, () => void, ] { const location = useLocation(); @@ -55,7 +56,7 @@ export function usePersistedOverlayState( // saved value from previous session - const [persistedValue, setPersistedValue, , deletePersistedValue] = + const [persistedValue, setPersistedValue, loaded, deletePersistedValue] = usePersistence(key, overlayStateValue); const setOverlayStateValue = useCallback( @@ -73,6 +74,7 @@ export function usePersistedOverlayState( return [ overlayStateValue ?? persistedValue ?? defaultValue, setOverlayStateValue, + loaded, deletePersistedValue, ]; } diff --git a/web/src/pages/Live.tsx b/web/src/pages/Live.tsx index dec6ad60d..338290153 100644 --- a/web/src/pages/Live.tsx +++ b/web/src/pages/Live.tsx @@ -24,17 +24,21 @@ function Live() { // selection const [selectedCameraName, setSelectedCameraName] = useHashState(); - const [cameraGroup, setCameraGroup] = usePersistedOverlayState( + const [cameraGroup, setCameraGroup, loaded, ,] = usePersistedOverlayState( "cameraGroup", "default" as string, ); useSearchEffect("group", (cameraGroup) => { - if (config && cameraGroup) { + if (config && cameraGroup && loaded) { const group = config.camera_groups[cameraGroup]; if (group) { setCameraGroup(cameraGroup); + // return false so that url cleanup doesn't occur here. + // will be cleaned up by usePersistedOverlayState in the + // camera group selector so that the icon switches correctly + return false; } return true;