This repository has been archived on 2022-08-14. You can view files and clone it, but cannot push or open issues or pull requests.
outline/app/stores/DialogsStore.js

74 lines
1.2 KiB
JavaScript

// @flow
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.Node,
isOpen: boolean,
};
@observable modalStack = new Map<
string,
{
title: string,
content: React.Node,
isOpen: boolean,
}
>();
openGuide = ({ title, content }: { title: string, content: React.Node }) => {
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.Node,
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();
};
}