Merge pull request #1765 from ONLYOFFICE/feature/creating-room-from-one-folder

feature/creating-room-from-one-folder
This commit is contained in:
Alexey Safronov 2023-09-29 19:29:04 +04:00 committed by GitHub
commit 227531280d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 88 additions and 55 deletions

View File

@ -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) {

View File

@ -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;

View File

@ -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];

View File

@ -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;

View File

@ -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 });
}

View File

@ -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)

View File

@ -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)
{

View File

@ -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)
{