tools: add makeDisposable function for mobx reactions

This commit is contained in:
Chika 2022-10-25 16:53:52 +03:00
parent 815a6336ec
commit 202eb6e304

23
tools/mobx.ts Normal file
View File

@ -0,0 +1,23 @@
/* eslint-disable import/prefer-default-export */
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();
}
});
}