🎯 Use case
This file lives under “hooks/”, which covers reusable UI or integration hooks. On the API surface it exposes useSettingsChange — mainly functions, hooks, or classes. Dependencies touch React UI. It composes internal code from utils (relative imports).
Generated from folder role, exports, dependency roots, and inline comments — not hand-reviewed for every path.
🧠 Inline summary
import { useCallback, useEffect } from 'react' import { settingsChangeDetector } from '../utils/settings/changeDetector.js' import type { SettingSource } from '../utils/settings/constants.js' import { getSettings_DEPRECATED } from '../utils/settings/settings.js' import type { SettingsJson } from '../utils/settings/types.js'
📤 Exports (heuristic)
useSettingsChange
📚 External import roots
Package roots from from "…" (relative paths omitted).
react
🖥️ Source preview
import { useCallback, useEffect } from 'react'
import { settingsChangeDetector } from '../utils/settings/changeDetector.js'
import type { SettingSource } from '../utils/settings/constants.js'
import { getSettings_DEPRECATED } from '../utils/settings/settings.js'
import type { SettingsJson } from '../utils/settings/types.js'
export function useSettingsChange(
onChange: (source: SettingSource, settings: SettingsJson) => void,
): void {
const handleChange = useCallback(
(source: SettingSource) => {
// Cache is already reset by the notifier (changeDetector.fanOut) —
// resetting here caused N-way thrashing with N subscribers: each
// cleared the cache, re-read from disk, then the next cleared again.
const newSettings = getSettings_DEPRECATED()
onChange(source, newSettings)
},
[onChange],
)
useEffect(
() => settingsChangeDetector.subscribe(handleChange),
[handleChange],
)
}