From 202eb6e3044bda3407fd3e483e4c3c9aedd7986c Mon Sep 17 00:00:00 2001 From: Chika Date: Tue, 25 Oct 2022 16:53:52 +0300 Subject: [PATCH] tools: add makeDisposable function for mobx reactions --- tools/mobx.ts | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 tools/mobx.ts diff --git a/tools/mobx.ts b/tools/mobx.ts new file mode 100644 index 0000000..a36643f --- /dev/null +++ b/tools/mobx.ts @@ -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(); + } + }); +}