Web: Files: Added IntegrationStore. Added method handleMessage. Added openCrateFileModal, openCrateFolderModal, openCrateRoomModal, createFile, createFolder, createRoom message events

This commit is contained in:
Ilya Oleshko 2022-08-01 14:49:46 +03:00
parent c53028ac3f
commit 0afd521b43
4 changed files with 165 additions and 103 deletions

View File

@ -132,14 +132,14 @@ class FilesContent extends React.Component {
updateTempContent();
});
window.addEventListener("message", this.integrationMessage, false);
window.addEventListener("message", this.props.handleMessage, false);
}
componentWillUnmount() {
const script = document.getElementById("img-tiff-script");
document.body.removeChild(script);
window.removeEventListener("message", this.integrationMessage);
window.removeEventListener("message", this.props.handleMessage, false);
}
componentDidUpdate(prevProps) {
@ -173,96 +173,6 @@ class FilesContent extends React.Component {
}
}
integrationMessage = async (e) => {
const {
setFrameConfig,
folderInfo,
folders,
files,
selection,
user,
filesList,
} = this.props;
const eventData = typeof e.data === "string" ? JSON.parse(e.data) : e.data;
if (eventData.data) {
const { data, methodName } = eventData.data;
if (methodName === "setConfig") {
const config = await setFrameConfig(data);
window.parent.postMessage(
JSON.stringify({
type: "onMethodReturn",
methodReturnData: config,
}),
"*"
);
}
if (methodName === "getFolderInfo") {
window.parent.postMessage(
JSON.stringify({
type: "onMethodReturn",
methodReturnData: folderInfo,
}),
"*"
);
}
if (methodName === "getFolders") {
window.parent.postMessage(
JSON.stringify({
type: "onMethodReturn",
methodReturnData: folders,
}),
"*"
);
}
if (methodName === "getFiles") {
window.parent.postMessage(
JSON.stringify({
type: "onMethodReturn",
methodReturnData: files,
}),
"*"
);
}
if (methodName === "getItems") {
window.parent.postMessage(
JSON.stringify({
type: "onMethodReturn",
methodReturnData: filesList,
}),
"*"
);
}
if (methodName === "getSelection") {
window.parent.postMessage(
JSON.stringify({
type: "onMethodReturn",
methodReturnData: selection,
}),
"*"
);
}
if (methodName === "getUserInfo") {
window.parent.postMessage(
JSON.stringify({
type: "onMethodReturn",
methodReturnData: user,
}),
"*"
);
}
}
};
render() {
const { frameConfig } = this.props;
@ -284,7 +194,7 @@ class FilesContent extends React.Component {
}
}
const Files = inject(({ auth, filesStore }) => {
const Files = inject(({ auth, filesStore, integrationStore }) => {
return {
isDesktop: auth.settingsStore.isDesktopClient,
user: auth.userStore.user,
@ -295,11 +205,7 @@ const Files = inject(({ auth, filesStore }) => {
setFrameConfig: auth.settingsStore.setFrameConfig,
isLoaded: auth.isLoaded && filesStore.isLoaded,
setIsLoaded: filesStore.setIsLoaded,
folderInfo: filesStore.selectedFolderStore,
files: filesStore.files,
folders: filesStore.folders,
selection: filesStore.selection,
filesList: filesStore.filesList,
handleMessage: integrationStore.handleMessage,
setEncryptionKeys: auth.settingsStore.setEncryptionKeys,
loadFilesInfo: async () => {

View File

@ -0,0 +1,118 @@
import { makeAutoObservable } from "mobx";
import { Events } from "../helpers/constants";
import { frameCallback } from "@appserver/common/utils";
class IntegrationStore {
authStore;
filesStore;
settingsStore;
filesActionsStore;
constructor(authStore, filesStore, settingsStore, filesActionsStore) {
makeAutoObservable(this);
this.authStore = authStore;
this.filesStore = filesStore;
this.settingsStore = settingsStore;
this.filesActionsStore = filesActionsStore;
}
handleMessage = async (e) => {
const { settingsStore, userStore } = this.authStore;
const { setFrameConfig } = settingsStore;
const { user } = userStore;
const {
folders,
files,
selection,
filesList,
selectedFolderStore,
createFile,
createFolder,
createRoom,
refreshFiles,
} = this.filesStore;
const eventData = typeof e.data === "string" ? JSON.parse(e.data) : e.data;
if (eventData.data) {
const { data, methodName } = eventData.data;
let res;
switch (methodName) {
case "setConfig":
res = await setFrameConfig(data);
break;
case "getFolderInfo":
res = selectedFolderStore;
break;
case "getFolders":
res = folders;
break;
case "getFiles":
res = files;
break;
case "getItems":
res = filesList;
break;
case "getSelection":
res = selection;
break;
case "getUserInfo":
res = user;
break;
case "openCrateItemModal":
{
const item = new Event(Events.CREATE);
const payload = {
extension: data,
id: -1,
};
item.payload = payload;
window.dispatchEvent(item);
}
break;
case "openCrateRoomModal":
{
const room = new Event(Events.ROOM_CREATE);
window.dispatchEvent(room);
}
break;
case "createFile":
{
const { folderId, title, templateId, formId } = data;
res = await createFile(folderId, title, templateId, formId);
refreshFiles();
}
break;
case "createFolder":
{
const { parentFolderId, title } = data;
res = await createFolder(parentFolderId, title);
refreshFiles();
}
break;
case "createRoom":
{
const { title, type } = data;
res = await createRoom(title, type);
refreshFiles();
}
break;
default:
res = "Wrong method";
}
frameCallback(res);
}
};
}
export default IntegrationStore;

View File

@ -17,6 +17,7 @@ import HotkeyStore from "./HotkeyStore";
import store from "studio/store";
import selectFileDialogStore from "./SelectFileDialogStore";
import TagsStore from "./TagsStore";
import IntegrationStore from "./IntegrationStore";
const tagsStore = new TagsStore();
@ -91,6 +92,13 @@ const hotkeyStore = new HotkeyStore(
uploadDataStore
);
const integrationStore = new IntegrationStore(
store.auth,
filesStore,
settingsStore,
filesActionsStore
);
const stores = {
filesStore,
@ -108,6 +116,7 @@ const stores = {
selectFileDialogStore,
tagsStore,
integrationStore,
};
export default stores;

View File

@ -242,15 +242,39 @@
);
};
const createItem = (format) => {
const openCrateFileModal = (format) => {
executeMethod("openCreateItemModal", format);
};
const openCrateFolderModal = () => {
executeMethod("openCreateItemModal");
};
const openCrateRoomModal = () => {
executeMethod("openCrateRoomModal");
};
const createFile = (folderId, title, templateId, formId) => {
return new Promise((resolve) =>
executeMethod("createItem", null, (data) => resolve(data))
executeMethod(
"createFile",
{ folderId, title, templateId, formId },
(data) => resolve(data)
)
);
};
const createRoom = () => {
const createFolder = (parentFolderId, title) => {
return new Promise((resolve) =>
executeMethod("createRoom", null, (data) => resolve(data))
executeMethod("createFolder", { parentFolderId, title }, (data) =>
resolve(data)
)
);
};
const createRoom = (title, type) => {
return new Promise((resolve) =>
executeMethod("createRoom", { title, type }, (data) => resolve(data))
);
};
@ -270,7 +294,12 @@
setConfig,
createItem,
openCrateFileModal,
openCrateFolderModal,
openCrateRoomModal,
createFile,
createFolder,
createRoom,
};
};