23 lines
476 B
TypeScript
23 lines
476 B
TypeScript
import type { IReactionDisposer } from 'mobx';
|
|
import { autorun } from 'mobx';
|
|
|
|
export function makeDisposable(
|
|
createReaction: () => IReactionDisposer,
|
|
mustBeDisposed: () => boolean
|
|
) {
|
|
let disposer: IReactionDisposer | undefined;
|
|
|
|
function cleanDisposer() {
|
|
disposer = undefined;
|
|
}
|
|
|
|
autorun(() => {
|
|
if (mustBeDisposed()) {
|
|
if (disposer !== undefined) disposer();
|
|
cleanDisposer();
|
|
} else {
|
|
disposer = createReaction();
|
|
}
|
|
});
|
|
}
|