wana
Version:
Easy observable state for React
35 lines (30 loc) • 725 B
text/typescript
import { Change, ObserverTarget } from '../observable'
import { $O } from '../symbols'
import { logChange } from './logChange'
export type ChangeLogConfig = {
name?: string
onChange?: (change: Change) => void
}
export function logChanges(
target: ObserverTarget,
{ name, onChange }: ChangeLogConfig = {}
) {
const observable = target[$O]
if (!observable) {
throw Error('Expected an observable object')
}
const observers = observable.get($O)
const observer = {
onChange: (change: Change) => {
if (onChange) {
onChange(change)
}
logChange(change, name)
},
dispose: () => {
observers.delete(observer)
},
}
observers.add(observer)
return observer
}