74 lines
1.2 KiB
JavaScript
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();
|
|
};
|
|
}
|