26 lines
946 B
TypeScript
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],
|
|
)
|
|
}
|