This PR moves the entire project to Typescript. Due to the ~1000 ignores this will lead to a messy codebase for a while, but the churn is worth it – all of those ignore comments are places that were never type-safe previously. closes #1282
86 lines
1.3 KiB
TypeScript
86 lines
1.3 KiB
TypeScript
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();
|
|
};
|
|
}
|