import { observable, action } from "mobx"; import * as React from "react"; import { v4 as uuidv4 } from "uuid"; export default class DialogsStore { @observable guide: { title: string; content: React.ReactNode; isOpen: boolean; }; @observable modalStack = new Map< string, { title: string; content: React.ReactNode; isOpen: boolean; } >(); openGuide = ({ title, content, }: { title: string; content: React.ReactNode; }) => { setTimeout( action(() => { this.guide = { title, content, isOpen: true, }; }), 0 ); }; @action closeGuide = () => { if (this.guide) { this.guide.isOpen = false; } }; openModal = ({ title, content, replace, }: { title: string; content: React.ReactNode; replace?: boolean; }) => { setTimeout( action(() => { const id = uuidv4(); if (replace) { this.modalStack.clear(); } this.modalStack.set(id, { title, content, isOpen: true, }); }), 0 ); }; @action closeModal = (id: string) => { this.modalStack.delete(id); }; @action closeAllModals = () => { this.modalStack.clear(); }; }