feat(PBI-76): migrate debug-mode to user-settings store

DebugToggle reads debugMode from user-settings.devTools and
toggles via setPref. Removes the standalone stores/debug-store.ts
(no consumers left). Body classlist update only fires after the
store is hydrated to avoid a flash on initial paint.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Janpeter Visser 2026-05-10 12:57:30 +02:00
parent e0084228f3
commit 7b33dc9331
2 changed files with 9 additions and 25 deletions

View file

@ -1,25 +1,24 @@
'use client'
import { useEffect } from 'react'
import { useDebugStore } from '@/stores/debug-store'
import { useUserSettingsStore } from '@/stores/user-settings/store'
export function DebugToggle() {
const { debugMode, _hydrated, hydrate, toggleDebugMode } = useDebugStore()
const debugMode = useUserSettingsStore(
(s) => s.entities.settings.devTools?.debugMode ?? false,
)
const hydrated = useUserSettingsStore((s) => s.context.hydrated)
const setPref = useUserSettingsStore((s) => s.setPref)
useEffect(() => {
hydrate(localStorage.getItem('scrum4me:debug-mode') === 'true')
}, [hydrate])
useEffect(() => {
if (!_hydrated) return
localStorage.setItem('scrum4me:debug-mode', String(debugMode))
if (!hydrated) return
document.body.classList.toggle('debug-mode', debugMode)
}, [debugMode, _hydrated])
}, [debugMode, hydrated])
return (
<button
type="button"
onClick={toggleDebugMode}
onClick={() => void setPref(['devTools', 'debugMode'], !debugMode)}
aria-label="Debug-modus togglen"
aria-pressed={debugMode}
data-active={debugMode}

View file

@ -1,15 +0,0 @@
import { create } from 'zustand'
type DebugStore = {
debugMode: boolean
_hydrated: boolean
hydrate: (value: boolean) => void
toggleDebugMode: () => void
}
export const useDebugStore = create<DebugStore>((set, get) => ({
debugMode: false,
_hydrated: false,
hydrate: (v) => set({ debugMode: v, _hydrated: true }),
toggleDebugMode: () => set({ debugMode: !get().debugMode }),
}))