mono/packages/kbot/ref/hooks/useSettingsChange.ts
2026-04-01 01:05:48 +02:00

26 lines
946 B
TypeScript

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],
)
}