feat(settings): add searchable settings navigation

This commit is contained in:
Tunglies
2026-11-06 17:14:15 +08:00
parent 38faf20f90
commit 7fd537af08
47 changed files with 1832 additions and 337 deletions
@@ -0,0 +1,42 @@
import {
createContext,
use,
useEffect,
useImperativeHandle,
type Ref,
} from 'react'
import type { DialogRef } from '@/components/base'
export interface SearchDialog {
id: string
open: () => void
isOpen: boolean
}
export const SettingsSearchContext = createContext<Set<SearchDialog> | null>(
null,
)
export function useSettingDialog(
ref: Ref<DialogRef> | undefined,
id: string,
open: boolean,
create: () => DialogRef,
) {
useImperativeHandle(ref, create)
const registry = use(SettingsSearchContext)
useEffect(() => {
if (!registry) return
const handle = {
id,
isOpen: open,
open: () => {
if (!open) create().open()
},
}
registry.add(handle)
return () => {
registry.delete(handle)
}
})
}