Merge pull request #1763 from ONLYOFFICE/feature/creating-room-from-data
feature/creating-room-from-data
This commit is contained in:
commit
bb1ab06e1a
@ -38,7 +38,7 @@ const CreateRoomEvent = ({
|
|||||||
) {
|
) {
|
||||||
setCreateRoomConfirmDialogVisible(true);
|
setCreateRoomConfirmDialogVisible(true);
|
||||||
} else {
|
} else {
|
||||||
onCreateRoom();
|
onCreateRoom(false, t);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -34,6 +34,7 @@ import CopyToReactSvgUrl from "PUBLIC_DIR/images/copyTo.react.svg?url";
|
|||||||
import MailReactSvgUrl from "PUBLIC_DIR/images/mail.react.svg?url";
|
import MailReactSvgUrl from "PUBLIC_DIR/images/mail.react.svg?url";
|
||||||
import RoomArchiveSvgUrl from "PUBLIC_DIR/images/room.archive.svg?url";
|
import RoomArchiveSvgUrl from "PUBLIC_DIR/images/room.archive.svg?url";
|
||||||
import LeaveRoomSvgUrl from "PUBLIC_DIR/images/logout.react.svg?url";
|
import LeaveRoomSvgUrl from "PUBLIC_DIR/images/logout.react.svg?url";
|
||||||
|
import CatalogRoomsReactSvgUrl from "PUBLIC_DIR/images/catalog.rooms.react.svg?url";
|
||||||
|
|
||||||
import { makeAutoObservable } from "mobx";
|
import { makeAutoObservable } from "mobx";
|
||||||
import copy from "copy-to-clipboard";
|
import copy from "copy-to-clipboard";
|
||||||
@ -52,6 +53,7 @@ import { getContextMenuItems } from "SRC_DIR/helpers/plugins";
|
|||||||
import { connectedCloudsTypeTitleTranslation } from "@docspace/client/src/helpers/filesUtils";
|
import { connectedCloudsTypeTitleTranslation } from "@docspace/client/src/helpers/filesUtils";
|
||||||
import { getOAuthToken } from "@docspace/common/utils";
|
import { getOAuthToken } from "@docspace/common/utils";
|
||||||
import api from "@docspace/common/api";
|
import api from "@docspace/common/api";
|
||||||
|
import { FolderType } from "@docspace/common/constants";
|
||||||
|
|
||||||
const LOADER_TIMER = 500;
|
const LOADER_TIMER = 500;
|
||||||
let loadingTime;
|
let loadingTime;
|
||||||
@ -163,10 +165,8 @@ class ContextOptionsStore {
|
|||||||
};
|
};
|
||||||
|
|
||||||
onClickMakeForm = (item, t) => {
|
onClickMakeForm = (item, t) => {
|
||||||
const {
|
const { setConvertPasswordDialogVisible, setFormCreationInfo } =
|
||||||
setConvertPasswordDialogVisible,
|
this.dialogsStore;
|
||||||
setFormCreationInfo,
|
|
||||||
} = this.dialogsStore;
|
|
||||||
const { title, id, folderId, fileExst } = item;
|
const { title, id, folderId, fileExst } = item;
|
||||||
|
|
||||||
const newTitle =
|
const newTitle =
|
||||||
@ -229,10 +229,8 @@ class ContextOptionsStore {
|
|||||||
};
|
};
|
||||||
|
|
||||||
showVersionHistory = (id, security) => {
|
showVersionHistory = (id, security) => {
|
||||||
const {
|
const { fetchFileVersions, setIsVerHistoryPanel } =
|
||||||
fetchFileVersions,
|
this.versionHistoryStore;
|
||||||
setIsVerHistoryPanel,
|
|
||||||
} = this.versionHistoryStore;
|
|
||||||
|
|
||||||
if (this.treeFoldersStore.isRecycleBinFolder) return;
|
if (this.treeFoldersStore.isRecycleBinFolder) return;
|
||||||
|
|
||||||
@ -262,9 +260,8 @@ class ContextOptionsStore {
|
|||||||
|
|
||||||
lockFile = (item, t) => {
|
lockFile = (item, t) => {
|
||||||
const { id, locked } = item;
|
const { id, locked } = item;
|
||||||
const {
|
const { setSelection: setInfoPanelSelection } =
|
||||||
setSelection: setInfoPanelSelection,
|
this.authStore.infoPanelStore;
|
||||||
} = this.authStore.infoPanelStore;
|
|
||||||
|
|
||||||
this.filesActionsStore
|
this.filesActionsStore
|
||||||
.lockFileAction(id, !locked)
|
.lockFileAction(id, !locked)
|
||||||
@ -410,6 +407,12 @@ class ContextOptionsStore {
|
|||||||
this.dialogsStore.setDownloadDialogVisible(true);
|
this.dialogsStore.setDownloadDialogVisible(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
onClickCreateRoom = () => {
|
||||||
|
this.filesActionsStore.setProcessCreatingRoomFromData(true);
|
||||||
|
const event = new Event(Events.ROOM_CREATE);
|
||||||
|
window.dispatchEvent(event);
|
||||||
|
};
|
||||||
|
|
||||||
onDuplicate = (item, t) => {
|
onDuplicate = (item, t) => {
|
||||||
this.filesActionsStore
|
this.filesActionsStore
|
||||||
.duplicateAction(item, t("Common:CopyOperation"))
|
.duplicateAction(item, t("Common:CopyOperation"))
|
||||||
@ -439,19 +442,13 @@ class ContextOptionsStore {
|
|||||||
};
|
};
|
||||||
|
|
||||||
onClickDeleteSelectedFolder = (t, isRoom) => {
|
onClickDeleteSelectedFolder = (t, isRoom) => {
|
||||||
const {
|
const { setIsFolderActions, setDeleteDialogVisible, setIsRoomDelete } =
|
||||||
setIsFolderActions,
|
this.dialogsStore;
|
||||||
setDeleteDialogVisible,
|
|
||||||
setIsRoomDelete,
|
|
||||||
} = this.dialogsStore;
|
|
||||||
const { confirmDelete } = this.settingsStore;
|
const { confirmDelete } = this.settingsStore;
|
||||||
const { deleteAction, deleteRoomsAction } = this.filesActionsStore;
|
const { deleteAction, deleteRoomsAction } = this.filesActionsStore;
|
||||||
const { id: selectedFolderId } = this.selectedFolderStore;
|
const { id: selectedFolderId } = this.selectedFolderStore;
|
||||||
const {
|
const { isThirdPartySelection, getFolderInfo, setBufferSelection } =
|
||||||
isThirdPartySelection,
|
this.filesStore;
|
||||||
getFolderInfo,
|
|
||||||
setBufferSelection,
|
|
||||||
} = this.filesStore;
|
|
||||||
|
|
||||||
setIsFolderActions(true);
|
setIsFolderActions(true);
|
||||||
|
|
||||||
@ -493,10 +490,8 @@ class ContextOptionsStore {
|
|||||||
onClickDelete = (item, t) => {
|
onClickDelete = (item, t) => {
|
||||||
const { id, title, providerKey, rootFolderId, isFolder, isRoom } = item;
|
const { id, title, providerKey, rootFolderId, isFolder, isRoom } = item;
|
||||||
|
|
||||||
const {
|
const { setRemoveItem, setDeleteThirdPartyDialogVisible } =
|
||||||
setRemoveItem,
|
this.dialogsStore;
|
||||||
setDeleteThirdPartyDialogVisible,
|
|
||||||
} = this.dialogsStore;
|
|
||||||
|
|
||||||
if (id === this.selectedFolderStore.id) {
|
if (id === this.selectedFolderStore.id) {
|
||||||
this.onClickDeleteSelectedFolder(t, isRoom);
|
this.onClickDeleteSelectedFolder(t, isRoom);
|
||||||
@ -1202,6 +1197,14 @@ class ContextOptionsStore {
|
|||||||
"data-action": "remove",
|
"data-action": "remove",
|
||||||
action: "remove",
|
action: "remove",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "option_create_room",
|
||||||
|
key: "create-room",
|
||||||
|
label: t("Files:CreateRoom"),
|
||||||
|
icon: CatalogRoomsReactSvgUrl,
|
||||||
|
onClick: this.onClickCreateRoom,
|
||||||
|
disabled: this.selectedFolderStore.rootFolderType !== FolderType.USER,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
id: "option_download",
|
id: "option_download",
|
||||||
key: "download",
|
key: "download",
|
||||||
@ -1338,11 +1341,8 @@ class ContextOptionsStore {
|
|||||||
const { personal } = this.authStore.settingsStore;
|
const { personal } = this.authStore.settingsStore;
|
||||||
const { selection, allFilesIsEditing } = this.filesStore;
|
const { selection, allFilesIsEditing } = this.filesStore;
|
||||||
const { setDeleteDialogVisible } = this.dialogsStore;
|
const { setDeleteDialogVisible } = this.dialogsStore;
|
||||||
const {
|
const { isRecycleBinFolder, isRoomsFolder, isArchiveFolder } =
|
||||||
isRecycleBinFolder,
|
this.treeFoldersStore;
|
||||||
isRoomsFolder,
|
|
||||||
isArchiveFolder,
|
|
||||||
} = this.treeFoldersStore;
|
|
||||||
|
|
||||||
const { pinRooms, unpinRooms, deleteRooms } = this.filesActionsStore;
|
const { pinRooms, unpinRooms, deleteRooms } = this.filesActionsStore;
|
||||||
|
|
||||||
@ -1504,6 +1504,14 @@ class ContextOptionsStore {
|
|||||||
"data-action": "remove",
|
"data-action": "remove",
|
||||||
action: "remove",
|
action: "remove",
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
id: "create_room",
|
||||||
|
key: "create-room",
|
||||||
|
label: t("Files:CreateRoom"),
|
||||||
|
icon: CatalogRoomsReactSvgUrl,
|
||||||
|
onClick: this.onClickCreateRoom,
|
||||||
|
disabled: this.selectedFolderStore.rootFolderType !== FolderType.USER,
|
||||||
|
},
|
||||||
{
|
{
|
||||||
key: "download",
|
key: "download",
|
||||||
label: t("Common:Download"),
|
label: t("Common:Download"),
|
||||||
|
@ -64,12 +64,17 @@ class CreateEditRoomStore {
|
|||||||
this.onClose = onClose;
|
this.onClose = onClose;
|
||||||
};
|
};
|
||||||
|
|
||||||
onCreateRoom = async (withConfirm = false) => {
|
onCreateRoom = async (withConfirm = false, t) => {
|
||||||
const roomParams = this.roomParams;
|
const roomParams = this.roomParams;
|
||||||
|
|
||||||
const { createTag } = this.tagsStore;
|
const { createTag } = this.tagsStore;
|
||||||
const { id: currentFolderId } = this.selectedFolderStore;
|
const { id: currentFolderId } = this.selectedFolderStore;
|
||||||
const { updateCurrentFolder } = this.filesActionsStore;
|
const {
|
||||||
|
updateCurrentFolder,
|
||||||
|
processCreatingRoomFromData,
|
||||||
|
setProcessCreatingRoomFromData,
|
||||||
|
setSelectedItems,
|
||||||
|
} = this.filesActionsStore;
|
||||||
const { deleteThirdParty } = this.thirdPartyStore;
|
const { deleteThirdParty } = this.thirdPartyStore;
|
||||||
const { withPaging } = this.settingsStore;
|
const { withPaging } = this.settingsStore;
|
||||||
const {
|
const {
|
||||||
@ -80,6 +85,8 @@ class CreateEditRoomStore {
|
|||||||
uploadRoomLogo,
|
uploadRoomLogo,
|
||||||
addLogoToRoom,
|
addLogoToRoom,
|
||||||
} = this.filesStore;
|
} = this.filesStore;
|
||||||
|
const { preparingDataForCopyingToRoom } =
|
||||||
|
this.filesActionsStore.uploadDataStore;
|
||||||
|
|
||||||
const createRoomData = {
|
const createRoomData = {
|
||||||
roomType: roomParams.type,
|
roomType: roomParams.type,
|
||||||
@ -148,6 +155,11 @@ class CreateEditRoomStore {
|
|||||||
});
|
});
|
||||||
} else !withPaging && this.onOpenNewRoom(room);
|
} else !withPaging && this.onOpenNewRoom(room);
|
||||||
|
|
||||||
|
if (processCreatingRoomFromData) {
|
||||||
|
setSelectedItems();
|
||||||
|
preparingDataForCopyingToRoom(room.id, t);
|
||||||
|
}
|
||||||
|
|
||||||
this.roomIsCreated = true;
|
this.roomIsCreated = true;
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
toastr.error(err);
|
toastr.error(err);
|
||||||
@ -157,6 +169,7 @@ class CreateEditRoomStore {
|
|||||||
this.onClose();
|
this.onClose();
|
||||||
this.roomIsCreated = true;
|
this.roomIsCreated = true;
|
||||||
} finally {
|
} finally {
|
||||||
|
processCreatingRoomFromData && setProcessCreatingRoomFromData(false);
|
||||||
if (withPaging) await updateCurrentFolder(null, currentFolderId);
|
if (withPaging) await updateCurrentFolder(null, currentFolderId);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -8,6 +8,7 @@ import PinReactSvgUrl from "PUBLIC_DIR/images/pin.react.svg?url";
|
|||||||
import UnpinReactSvgUrl from "PUBLIC_DIR/images/unpin.react.svg?url";
|
import UnpinReactSvgUrl from "PUBLIC_DIR/images/unpin.react.svg?url";
|
||||||
import RoomArchiveSvgUrl from "PUBLIC_DIR/images/room.archive.svg?url";
|
import RoomArchiveSvgUrl from "PUBLIC_DIR/images/room.archive.svg?url";
|
||||||
import DeleteReactSvgUrl from "PUBLIC_DIR/images/delete.react.svg?url";
|
import DeleteReactSvgUrl from "PUBLIC_DIR/images/delete.react.svg?url";
|
||||||
|
import CatalogRoomsReactSvgUrl from "PUBLIC_DIR/images/catalog.rooms.react.svg?url";
|
||||||
import {
|
import {
|
||||||
checkFileConflicts,
|
checkFileConflicts,
|
||||||
deleteFile,
|
deleteFile,
|
||||||
@ -43,7 +44,7 @@ import RoomsFilter from "@docspace/common/api/rooms/filter";
|
|||||||
import AccountsFilter from "@docspace/common/api/people/filter";
|
import AccountsFilter from "@docspace/common/api/people/filter";
|
||||||
import { RoomSearchArea } from "@docspace/common/constants";
|
import { RoomSearchArea } from "@docspace/common/constants";
|
||||||
import { getObjectByLocation } from "@docspace/common/utils";
|
import { getObjectByLocation } from "@docspace/common/utils";
|
||||||
|
import { Events } from "@docspace/common/constants";
|
||||||
import uniqueid from "lodash/uniqueId";
|
import uniqueid from "lodash/uniqueId";
|
||||||
import FilesFilter from "@docspace/common/api/files/filter";
|
import FilesFilter from "@docspace/common/api/files/filter";
|
||||||
import {
|
import {
|
||||||
@ -68,6 +69,7 @@ class FilesActionStore {
|
|||||||
isLoadedSearchFiles = false;
|
isLoadedSearchFiles = false;
|
||||||
isGroupMenuBlocked = false;
|
isGroupMenuBlocked = false;
|
||||||
emptyTrashInProgress = false;
|
emptyTrashInProgress = false;
|
||||||
|
processCreatingRoomFromData = false;
|
||||||
|
|
||||||
constructor(
|
constructor(
|
||||||
authStore,
|
authStore,
|
||||||
@ -1579,6 +1581,10 @@ class FilesActionStore {
|
|||||||
const canDelete = selection.every((s) => s.security?.Delete);
|
const canDelete = selection.every((s) => s.security?.Delete);
|
||||||
|
|
||||||
return !allFilesIsEditing && canDelete && hasSelection;
|
return !allFilesIsEditing && canDelete && hasSelection;
|
||||||
|
case "create-room":
|
||||||
|
const canCreateRoom = rootFolderType === FolderType.USER;
|
||||||
|
|
||||||
|
return canCreateRoom;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1710,6 +1716,16 @@ class FilesActionStore {
|
|||||||
setIsVisible(true);
|
setIsVisible(true);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
setProcessCreatingRoomFromData = (processCreatingRoomFromData) => {
|
||||||
|
this.processCreatingRoomFromData = processCreatingRoomFromData;
|
||||||
|
};
|
||||||
|
|
||||||
|
onClickCreateRoom = () => {
|
||||||
|
this.setProcessCreatingRoomFromData(true);
|
||||||
|
const event = new Event(Events.ROOM_CREATE);
|
||||||
|
window.dispatchEvent(event);
|
||||||
|
};
|
||||||
|
|
||||||
getOption = (option, t) => {
|
getOption = (option, t) => {
|
||||||
const {
|
const {
|
||||||
setSharingPanelVisible,
|
setSharingPanelVisible,
|
||||||
@ -1740,6 +1756,16 @@ class FilesActionStore {
|
|||||||
iconUrl: CopyToReactSvgUrl,
|
iconUrl: CopyToReactSvgUrl,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
case "create-room":
|
||||||
|
if (!this.isAvailableOption("create-room")) return null;
|
||||||
|
else
|
||||||
|
return {
|
||||||
|
id: "menu-create-room",
|
||||||
|
label: t("Files:CreateRoom"),
|
||||||
|
onClick: this.onClickCreateRoom,
|
||||||
|
iconUrl: CatalogRoomsReactSvgUrl,
|
||||||
|
};
|
||||||
|
|
||||||
case "download":
|
case "download":
|
||||||
if (!this.isAvailableOption("download")) return null;
|
if (!this.isAvailableOption("download")) return null;
|
||||||
else
|
else
|
||||||
@ -1879,6 +1905,7 @@ class FilesActionStore {
|
|||||||
};
|
};
|
||||||
|
|
||||||
getAnotherFolderOptions = (itemsCollection, t) => {
|
getAnotherFolderOptions = (itemsCollection, t) => {
|
||||||
|
const createRoom = this.getOption("create-room", t);
|
||||||
const download = this.getOption("download", t);
|
const download = this.getOption("download", t);
|
||||||
const downloadAs = this.getOption("downloadAs", t);
|
const downloadAs = this.getOption("downloadAs", t);
|
||||||
const moveTo = this.getOption("moveTo", t);
|
const moveTo = this.getOption("moveTo", t);
|
||||||
@ -1887,6 +1914,7 @@ class FilesActionStore {
|
|||||||
const showInfo = this.getOption("showInfo", t);
|
const showInfo = this.getOption("showInfo", t);
|
||||||
|
|
||||||
itemsCollection
|
itemsCollection
|
||||||
|
.set("createRoom", createRoom)
|
||||||
.set("download", download)
|
.set("download", download)
|
||||||
.set("downloadAs", downloadAs)
|
.set("downloadAs", downloadAs)
|
||||||
.set("moveTo", moveTo)
|
.set("moveTo", moveTo)
|
||||||
|
@ -1069,7 +1069,6 @@ class FilesStore {
|
|||||||
};
|
};
|
||||||
|
|
||||||
setSelection = (selection) => {
|
setSelection = (selection) => {
|
||||||
// console.log("setSelection", selection);
|
|
||||||
this.selection = selection;
|
this.selection = selection;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1869,6 +1868,7 @@ class FilesStore {
|
|||||||
"mark-read",
|
"mark-read",
|
||||||
// "mark-as-favorite",
|
// "mark-as-favorite",
|
||||||
// "remove-from-favorites",
|
// "remove-from-favorites",
|
||||||
|
"create-room",
|
||||||
"download",
|
"download",
|
||||||
"download-as",
|
"download-as",
|
||||||
"convert",
|
"convert",
|
||||||
@ -2208,6 +2208,7 @@ class FilesStore {
|
|||||||
// "link-for-portal-users",
|
// "link-for-portal-users",
|
||||||
"separator1",
|
"separator1",
|
||||||
"open-location",
|
"open-location",
|
||||||
|
"create-room",
|
||||||
"download",
|
"download",
|
||||||
"move", //category
|
"move", //category
|
||||||
"move-to",
|
"move-to",
|
||||||
@ -3020,12 +3021,8 @@ class FilesStore {
|
|||||||
}
|
}
|
||||||
|
|
||||||
get cbMenuItems() {
|
get cbMenuItems() {
|
||||||
const {
|
const { isDocument, isPresentation, isSpreadsheet, isArchive } =
|
||||||
isDocument,
|
this.filesSettingsStore;
|
||||||
isPresentation,
|
|
||||||
isSpreadsheet,
|
|
||||||
isArchive,
|
|
||||||
} = this.filesSettingsStore;
|
|
||||||
|
|
||||||
let cbMenu = ["all"];
|
let cbMenu = ["all"];
|
||||||
const filesItems = [...this.files, ...this.folders];
|
const filesItems = [...this.files, ...this.folders];
|
||||||
|
@ -1485,6 +1485,45 @@ class UploadDataStore {
|
|||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
preparingDataForCopyingToRoom = (destFolderId, t) => {
|
||||||
|
const { selection, bufferSelection } = this.filesStore;
|
||||||
|
let fileIds = [];
|
||||||
|
let folderIds = [];
|
||||||
|
|
||||||
|
const selections =
|
||||||
|
selection.length > 0 && selection[0] != null
|
||||||
|
? selection
|
||||||
|
: bufferSelection != null
|
||||||
|
? [bufferSelection]
|
||||||
|
: [];
|
||||||
|
|
||||||
|
if (!selections.length) return;
|
||||||
|
|
||||||
|
for (let item of selections) {
|
||||||
|
if (item.fileExst || item.contentLength) {
|
||||||
|
fileIds.push(item.id);
|
||||||
|
} else {
|
||||||
|
folderIds.push(item.id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.filesStore.setSelection([]);
|
||||||
|
this.filesStore.setBufferSelection(null);
|
||||||
|
|
||||||
|
const operationData = {
|
||||||
|
destFolderId,
|
||||||
|
folderIds,
|
||||||
|
fileIds,
|
||||||
|
deleteAfter: false,
|
||||||
|
isCopy: true,
|
||||||
|
translations: {
|
||||||
|
copy: t("Common:CopyOperation"),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
this.itemOperationToFolder(operationData);
|
||||||
|
};
|
||||||
|
|
||||||
loopFilesOperations = async (data, pbData, isDownloadAction) => {
|
loopFilesOperations = async (data, pbData, isDownloadAction) => {
|
||||||
const { clearSecondaryProgressData, setSecondaryProgressBarData } =
|
const { clearSecondaryProgressData, setSecondaryProgressBarData } =
|
||||||
this.secondaryProgressDataStore;
|
this.secondaryProgressDataStore;
|
||||||
|
Loading…
Reference in New Issue
Block a user