Skip to content

Commit 4336029

Browse files
authored
BC-10467 - Open Collabora from file folder (#3969)
* Show content last modified info in file table * Add chip if file status too large for collabora online editing
1 parent e66edb4 commit 4336029

27 files changed

+321
-58
lines changed

src/components/icons/material/index.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import {
1818
mdiAccountSwitchOutline,
1919
mdiAlert,
2020
mdiAlertCircle,
21+
mdiAlertCircleOutline,
2122
mdiApplicationBracketsOutline,
2223
mdiArchiveOutline,
2324
mdiArrowCollapse,
@@ -48,6 +49,7 @@ import {
4849
mdiCircleOutline,
4950
mdiClockOutline,
5051
mdiClockTimeFour,
52+
mdiClockTimeFourOutline,
5153
mdiClose,
5254
mdiCloseCircle,
5355
mdiCloudDownload,
@@ -94,6 +96,7 @@ import {
9496
mdiImageOff,
9597
mdiImport,
9698
mdiInformation,
99+
mdiInformationOutline,
97100
mdiKeyboardReturn,
98101
mdiLightbulbOnOutline,
99102
mdiLink,
@@ -118,6 +121,7 @@ import {
118121
mdiOpenInNew,
119122
mdiPalette,
120123
mdiPause,
124+
mdiPencilOffOutline,
121125
mdiPencilOutline,
122126
mdiPencilPlusOutline,
123127
mdiPhone,
@@ -179,6 +183,7 @@ export {
179183
mdiAccountSwitchOutline,
180184
mdiAlert,
181185
mdiAlertCircle,
186+
mdiAlertCircleOutline,
182187
mdiApplicationBracketsOutline,
183188
mdiArchiveOutline,
184189
mdiArrowCollapse,
@@ -209,6 +214,7 @@ export {
209214
mdiCircleOutline,
210215
mdiClockOutline,
211216
mdiClockTimeFour,
217+
mdiClockTimeFourOutline,
212218
mdiClose,
213219
mdiCloseCircle,
214220
mdiCloudDownload,
@@ -255,6 +261,7 @@ export {
255261
mdiImageOff,
256262
mdiImport,
257263
mdiInformation,
264+
mdiInformationOutline,
258265
mdiKeyboardReturn,
259266
mdiLightbulbOnOutline,
260267
mdiLink,
@@ -279,6 +286,7 @@ export {
279286
mdiOpenInNew,
280287
mdiPalette,
281288
mdiPause,
289+
mdiPencilOffOutline,
282290
mdiPencilOutline,
283291
mdiPencilPlusOutline,
284292
mdiPhone,

src/fileStorageApi/v3/models/file-record-response.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,12 @@ export interface FileRecordResponse {
119119
* @memberof FileRecordResponse
120120
*/
121121
updatedAt?: string;
122+
/**
123+
*
124+
* @type {string}
125+
* @memberof FileRecordResponse
126+
*/
127+
contentLastModifiedAt?: string;
122128
}
123129

124130

src/locales/de.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export default {
4545
"common.file": "Datei",
4646
"common.file.exceedsCollaboraEditableFileSize":
4747
"Dokumente größer als {sizeInMb} können online nicht bearbeitet werden.",
48+
"common.file.exceedsCollaboraEditableFileSize.short": "Online Bearbeitung nicht möglich",
4849
"common.files": "Dateien",
4950
"common.instructions.orderBy.arrowKeys": "Die Elemente dieser Liste können per Pfeiltaste verschoben werden.",
5051
"common.labels.admin": "Admin(s)",
@@ -1994,6 +1995,7 @@ export default {
19941995
"pages.folder.title": "Ordner",
19951996
"pages.folder.columns.name": "Name",
19961997
"pages.folder.columns.createdat": "Erstellt am",
1998+
"pages.folder.columns.lastModifiedAt": "Zuletzt geändert",
19971999
"pages.folder.columns.size": "Größe",
19982000
"pages.folder.ariaLabels.menu": "Ordner Menü",
19992001
"pages.folder.ariaLabels.menu.action.edit": "Ordner umbenennen",

src/locales/en.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ export default {
4343
"common.file.virusDetected.short": "Virus suspected",
4444
"common.file": "file",
4545
"common.file.exceedsCollaboraEditableFileSize": "Documents larger than {sizeInMb} cannot be edited online.",
46+
"common.file.exceedsCollaboraEditableFileSize.short": "Online editing not possible",
4647
"common.files": "files",
4748
"common.instructions.orderBy.arrowKeys": "The items in this list can be moved using the arrow keys.",
4849
"common.labels.admin": "",
@@ -1959,6 +1960,7 @@ export default {
19591960
"pages.folder.title": "Folder",
19601961
"pages.folder.columns.name": "Name",
19611962
"pages.folder.columns.createdat": "Created on",
1963+
"pages.folder.columns.lastModifiedAt": "Last updated",
19621964
"pages.folder.columns.size": "Size",
19631965
"pages.folder.ariaLabels.menu": "Folder menu",
19641966
"pages.folder.ariaLabels.menu.action.edit": "Rename folder",

src/locales/es.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export default {
4545
"common.file": "Archivo",
4646
"common.file.exceedsCollaboraEditableFileSize":
4747
"Los documentos que superen los {sizeInMb} no se pueden editar en línea.",
48+
"common.file.exceedsCollaboraEditableFileSize.short": "Edición en línea no posible",
4849
"common.files": "Archivos",
4950
"common.instructions.orderBy.arrowKeys": "Los elementos de esta lista se pueden mover con las teclas de flecha.",
5051
"common.labels.admin": "Admin(s)",
@@ -2009,6 +2010,7 @@ export default {
20092010
"pages.folder.title": "Carpeta",
20102011
"pages.folder.columns.name": "Nombre",
20112012
"pages.folder.columns.createdat": "Creado el",
2013+
"pages.folder.columns.lastModifiedAt": "Última actualización",
20122014
"pages.folder.columns.size": "Talla",
20132015
"pages.folder.ariaLabels.menu": "Menú carpeta",
20142016
"pages.folder.ariaLabels.menu.action.edit": "Renombrar carpeta",

src/locales/uk.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export default {
4545
"common.file": "Файл",
4646
"common.file.exceedsCollaboraEditableFileSize":
4747
"Документи розміром більше {sizeInMb} не можуть бути оброблені онлайн.",
48+
"common.file.exceedsCollaboraEditableFileSize.short": "Онлайн редагування неможливе",
4849
"common.instructions.orderBy.arrowKeys": "Елементи цього списку можна переміщати за допомогою клавіш зі стрілками.",
4950
"common.files": "Файли",
5051
"common.labels.admin": "адміністратор(и)",
@@ -1979,6 +1980,7 @@ export default {
19791980
"pages.folder.title": "Папка",
19801981
"pages.folder.columns.name": "Ім'я",
19811982
"pages.folder.columns.createdat": "Створено на",
1983+
"pages.folder.columns.lastModifiedAt": "Останнє оновлення",
19821984
"pages.folder.columns.size": "Розмір",
19831985
"pages.folder.ariaLabels.menu": "Меню Папки",
19841986
"pages.folder.ariaLabels.menu.action.edit": "Перейменувати папку",

src/modules/feature/board-file-element/FileContentElement.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
<script setup lang="ts">
5858
import { useFileAlerts } from "./content/alert/useFileAlerts.composable";
5959
import FileContent from "./content/FileContent.vue";
60-
import { mapEditBoardPermissionToEditorMode } from "./mapper";
6160
import { FileAlert } from "./shared/types/FileAlert.enum";
6261
import FileUpload from "./upload/FileUpload.vue";
6362
import { FileRecordParentType, PreviewWidth } from "@/fileStorageApi/v3";
@@ -70,6 +69,7 @@ import { useEnvConfig } from "@data-env";
7069
import { useFileStorageApi } from "@data-file";
7170
import { BoardMenuScope } from "@ui-board";
7271
import { KebabMenuActionDelete, KebabMenuActionMoveDown, KebabMenuActionMoveUp } from "@ui-kebab-menu";
72+
import { mapEditBoardPermissionToEditorMode } from "@util-board";
7373
import { useDebounceFn } from "@vueuse/core";
7474
import { computed, onMounted, ref, toRef, watch } from "vue";
7575
import { useI18n } from "vue-i18n";

src/modules/feature/board-file-element/mapper/index.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/modules/feature/folder/Folder.unit.ts

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,12 @@ import { useBoardStore } from "@/modules/data/board/Board.store";
1010
import { ParentNodeInfo, ParentNodeType } from "@/types/board/ContentElement";
1111
import { FileRecordParent } from "@/types/file/File";
1212
import * as FileHelper from "@/utils/fileHelper";
13-
import { fileRecordFactory, mockedPiniaStoreTyping, parentNodeInfoFactory } from "@@/tests/test-utils";
13+
import {
14+
boardResponseFactory,
15+
fileRecordFactory,
16+
mockedPiniaStoreTyping,
17+
parentNodeInfoFactory,
18+
} from "@@/tests/test-utils";
1419
import { createTestingI18n, createTestingVuetify } from "@@/tests/test-utils/setup";
1520
import * as BoardApi from "@data-board";
1621
import * as FileStorageApi from "@data-file";
@@ -76,7 +81,7 @@ describe("Folder.vue", () => {
7681
describe("when user has board edit permission", () => {
7782
describe("when folder contains no files", () => {
7883
describe("when component is loaded", () => {
79-
const setup = async () => {
84+
const setup = async (boardInStoreUndefined = false, boardInStoreIsParent = true) => {
8085
const folderStateMock = createMock<ReturnType<typeof FolderState.useFolderState>>();
8186
vi.spyOn(FolderState, "useFolderState").mockReturnValueOnce(folderStateMock);
8287

@@ -107,6 +112,10 @@ describe("Folder.vue", () => {
107112

108113
const { wrapper } = setupWrapper();
109114
const useBoardStoreMock = mockedPiniaStoreTyping(useBoardStore);
115+
const board = boardResponseFactory.build({
116+
id: boardInStoreIsParent ? parent.id : "different-board-id",
117+
});
118+
useBoardStoreMock.board = boardInStoreUndefined ? undefined : board;
110119

111120
await nextTick();
112121
await nextTick();
@@ -135,14 +144,6 @@ describe("Folder.vue", () => {
135144
expect(fileStorageApiMock.fetchFiles).toHaveBeenCalled();
136145
});
137146

138-
it("should call fetchBoardRequest", async () => {
139-
const { useBoardStoreMock, parent } = await setup();
140-
141-
expect(useBoardStoreMock.fetchBoardRequest).toHaveBeenCalledWith({
142-
boardId: parent.id,
143-
});
144-
});
145-
146147
it("should not show the loading spinner", async () => {
147148
const { wrapper } = await setup();
148149

@@ -164,6 +165,31 @@ describe("Folder.vue", () => {
164165
expect(includesFolderName).toBe(true);
165166
});
166167

168+
describe("when board is not in store", () => {
169+
it("should call fetchBoardRequest", async () => {
170+
const { useBoardStoreMock, parent } = await setup(true);
171+
172+
expect(useBoardStoreMock.fetchBoardRequest).toHaveBeenCalledWith({
173+
boardId: parent.id,
174+
});
175+
});
176+
});
177+
describe("when board in store is not the same as parent", () => {
178+
it("should call fetchBoardRequest", async () => {
179+
const { useBoardStoreMock, parent } = await setup(false, false);
180+
181+
expect(useBoardStoreMock.fetchBoardRequest).toHaveBeenCalledWith({
182+
boardId: parent.id,
183+
});
184+
});
185+
});
186+
describe("when board in store is the same as parent", () => {
187+
it("should not call fetchBoardRequest", async () => {
188+
const { useBoardStoreMock } = await setup(false, true);
189+
190+
expect(useBoardStoreMock.fetchBoardRequest).not.toHaveBeenCalled();
191+
});
192+
});
167193
describe("when folder is board", () => {
168194
it("should call createPageInformation with the correct parentId", async () => {
169195
const { boardState, parent } = await setup();

src/modules/feature/folder/Folder.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -224,7 +224,7 @@ onMounted(async () => {
224224
225225
await fetchFileFolderElement(props.folderId);
226226
await fetchFiles(folderId.value, FileRecordParent.BOARDNODES);
227-
if (!boardStore.board) {
227+
if (!boardStore.board || boardStore.board.id !== parent.value.id) {
228228
await boardStore.fetchBoardRequest({ boardId: parent.value.id });
229229
}
230230

0 commit comments

Comments
 (0)