Merge pull request #1765 from ONLYOFFICE/feature/creating-room-from-one-folder
feature/creating-room-from-one-folder
This commit is contained in:
commit
227531280d
@ -85,8 +85,7 @@ class CreateEditRoomStore {
|
||||
uploadRoomLogo,
|
||||
addLogoToRoom,
|
||||
} = this.filesStore;
|
||||
const { preparingDataForCopyingToRoom } =
|
||||
this.filesActionsStore.uploadDataStore;
|
||||
const { preparingDataForCopyingToRoom } = this.filesActionsStore;
|
||||
|
||||
const createRoomData = {
|
||||
roomType: roomParams.type,
|
||||
@ -155,10 +154,8 @@ class CreateEditRoomStore {
|
||||
});
|
||||
} else !withPaging && this.onOpenNewRoom(room);
|
||||
|
||||
if (processCreatingRoomFromData) {
|
||||
setSelectedItems();
|
||||
if (processCreatingRoomFromData)
|
||||
preparingDataForCopyingToRoom(room.id, t);
|
||||
}
|
||||
|
||||
this.roomIsCreated = true;
|
||||
} catch (err) {
|
||||
|
@ -22,6 +22,7 @@ import {
|
||||
removeShareFiles,
|
||||
createFolder,
|
||||
moveToFolder,
|
||||
getFolder,
|
||||
} from "@docspace/common/api/files";
|
||||
import {
|
||||
ConflictResolveType,
|
||||
@ -2339,6 +2340,71 @@ class FilesActionStore {
|
||||
setGroupMenuBlocked = (blocked) => {
|
||||
this.isGroupMenuBlocked = blocked;
|
||||
};
|
||||
|
||||
preparingDataForCopyingToRoom = async (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;
|
||||
const oneFolder = selections.length === 1 && selections[0].isFolder;
|
||||
|
||||
if (oneFolder) {
|
||||
folderIds = [selections[0].id];
|
||||
|
||||
try {
|
||||
const selectedFolder = await getFolder(selections[0].id);
|
||||
const { folders, files, total } = selectedFolder;
|
||||
|
||||
if (total > 1) this.setSelectedItems(false, total);
|
||||
|
||||
if (total === 1) {
|
||||
const title = !!folders.length ? folders[0].title : files[0].title;
|
||||
this.setSelectedItems(title, total);
|
||||
}
|
||||
|
||||
if (total === 0) {
|
||||
this.filesStore.setSelection([]);
|
||||
this.filesStore.setBufferSelection(null);
|
||||
return;
|
||||
}
|
||||
} catch (err) {
|
||||
toastr.error(err);
|
||||
}
|
||||
}
|
||||
|
||||
!oneFolder &&
|
||||
selections.map((item) => {
|
||||
if (item.fileExst || item.contentLength) fileIds.push(item.id);
|
||||
else folderIds.push(item.id);
|
||||
});
|
||||
|
||||
!oneFolder && this.setSelectedItems();
|
||||
this.filesStore.setSelection([]);
|
||||
this.filesStore.setBufferSelection(null);
|
||||
|
||||
const operationData = {
|
||||
destFolderId,
|
||||
folderIds: folderIds,
|
||||
fileIds,
|
||||
deleteAfter: false,
|
||||
isCopy: true,
|
||||
translations: {
|
||||
copy: t("Common:CopyOperation"),
|
||||
},
|
||||
content: oneFolder,
|
||||
};
|
||||
|
||||
this.uploadDataStore.itemOperationToFolder(operationData);
|
||||
};
|
||||
}
|
||||
|
||||
export default FilesActionStore;
|
||||
|
@ -344,6 +344,8 @@ class FilesStore {
|
||||
|
||||
if (this.files.findIndex((x) => x.id === fileInfo.id) > -1) return;
|
||||
|
||||
if (this.selectedFolderStore.id !== fileInfo.folderId) return;
|
||||
|
||||
console.log("[WS] create new file", { fileInfo });
|
||||
|
||||
const newFiles = [fileInfo, ...this.files];
|
||||
|
@ -14,6 +14,7 @@ import {
|
||||
copyToFolder,
|
||||
moveToFolder,
|
||||
fileCopyAs,
|
||||
getFolder,
|
||||
} from "@docspace/common/api/files";
|
||||
import toastr from "@docspace/components/toast/toastr";
|
||||
import { isMobile } from "react-device-detect";
|
||||
@ -1326,7 +1327,8 @@ class UploadDataStore {
|
||||
fileIds,
|
||||
conflictResolveType,
|
||||
deleteAfter,
|
||||
operationId
|
||||
operationId,
|
||||
content
|
||||
) => {
|
||||
const { setSecondaryProgressBarData, clearSecondaryProgressData } =
|
||||
this.secondaryProgressDataStore;
|
||||
@ -1336,7 +1338,8 @@ class UploadDataStore {
|
||||
folderIds,
|
||||
fileIds,
|
||||
conflictResolveType,
|
||||
deleteAfter
|
||||
deleteAfter,
|
||||
content
|
||||
)
|
||||
.then((res) => {
|
||||
const pbData = { icon: "duplicate", operationId };
|
||||
@ -1449,6 +1452,7 @@ class UploadDataStore {
|
||||
deleteAfter,
|
||||
isCopy,
|
||||
translations,
|
||||
content,
|
||||
} = data;
|
||||
const conflictResolveType = data.conflictResolveType
|
||||
? data.conflictResolveType
|
||||
@ -1473,7 +1477,8 @@ class UploadDataStore {
|
||||
fileIds,
|
||||
conflictResolveType,
|
||||
deleteAfter,
|
||||
operationId
|
||||
operationId,
|
||||
content
|
||||
)
|
||||
: this.moveToAction(
|
||||
destFolderId,
|
||||
@ -1485,45 +1490,6 @@ 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) => {
|
||||
const { clearSecondaryProgressData, setSecondaryProgressBarData } =
|
||||
this.secondaryProgressDataStore;
|
||||
|
@ -603,7 +603,8 @@ export function copyToFolder(
|
||||
folderIds,
|
||||
fileIds,
|
||||
conflictResolveType,
|
||||
deleteAfter
|
||||
deleteAfter,
|
||||
content = false
|
||||
) {
|
||||
const data = {
|
||||
destFolderId,
|
||||
@ -611,6 +612,7 @@ export function copyToFolder(
|
||||
fileIds,
|
||||
conflictResolveType,
|
||||
deleteAfter,
|
||||
content,
|
||||
};
|
||||
return request({ method: "put", url: "/files/fileops/copy", data });
|
||||
}
|
||||
|
@ -1957,9 +1957,9 @@ public class FileStorageService //: IFileStorageService
|
||||
return _fileOperationsManager.GetOperationResults(_authContext.CurrentAccount.ID);
|
||||
}
|
||||
|
||||
public List<FileOperationResult> TerminateTasks()
|
||||
public List<FileOperationResult> TerminateTasks(string id = null)
|
||||
{
|
||||
return _fileOperationsManager.CancelOperations(_authContext.CurrentAccount.ID);
|
||||
return _fileOperationsManager.CancelOperations(_authContext.CurrentAccount.ID, id);
|
||||
}
|
||||
|
||||
public async Task<List<FileOperationResult>> BulkDownloadAsync(Dictionary<JsonElement, string> folders, Dictionary<JsonElement, string> files)
|
||||
|
@ -90,10 +90,10 @@ public class FileOperationsManager
|
||||
return results;
|
||||
}
|
||||
|
||||
public List<FileOperationResult> CancelOperations(Guid userId)
|
||||
public List<FileOperationResult> CancelOperations(Guid userId, string id = null)
|
||||
{
|
||||
var operations = _tasks.GetAllTasks()
|
||||
.Where(t => new Guid(t[FileOperation.Owner]) == userId);
|
||||
.Where(t => (string.IsNullOrEmpty(id) || t.Id == id) && new Guid(t[FileOperation.Owner]) == userId);
|
||||
|
||||
foreach (var o in operations)
|
||||
{
|
||||
|
@ -241,10 +241,10 @@ public class OperationController : ApiControllerBase
|
||||
/// <httpMethod>PUT</httpMethod>
|
||||
/// <collection>list</collection>
|
||||
[AllowAnonymous]
|
||||
[HttpPut("fileops/terminate")]
|
||||
public async IAsyncEnumerable<FileOperationDto> TerminateTasks()
|
||||
[HttpPut("fileops/terminate/{id?}")]
|
||||
public async IAsyncEnumerable<FileOperationDto> TerminateTasks(string id = null)
|
||||
{
|
||||
var tasks = _fileStorageService.TerminateTasks();
|
||||
var tasks = _fileStorageService.TerminateTasks(id);
|
||||
|
||||
foreach (var e in tasks)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user