Files
misode.github.io/src/app/hooks/useModel.ts
2022-04-08 01:30:14 +02:00

21 lines
487 B
TypeScript

import type { DataModel } from '@mcschema/core'
import type { Inputs } from 'preact/hooks'
import { useEffect } from 'preact/hooks'
export function useModel(model: DataModel | undefined | null, invalidated: (model: DataModel) => unknown, inputs?: Inputs) {
const listener = {
invalidated() {
if (model) {
invalidated(model)
}
},
}
useEffect(() => {
model?.addListener(listener)
return () => {
model?.removeListener(listener)
}
}, [model, ...inputs ?? []])
}