import { Defer } from 'iterable-observer'; import { observable } from 'mobx'; import { FC, observer } from 'web-cell'; export class DialogClose extends Error { constructor(message = 'Dialog closed') { super(message); } } export interface DialogProps { defer?: Defer; } export class Dialog { @observable accessor defer: Defer | undefined; Component: FC; constructor(Factory: FC>) { this.Component = observer(() => ); } open() { this.defer = new Defer(); this.defer.promise.finally(() => (this.defer = undefined)); return this.defer.promise; } }