diff --git a/models/drive/src/index.ts b/models/drive/src/index.ts index d6d5bd7e4f..8e3a88fb2f 100644 --- a/models/drive/src/index.ts +++ b/models/drive/src/index.ts @@ -568,6 +568,25 @@ function defineFileVersion (builder: Builder): void { }, drive.action.RestoreFileVersion ) + + createAction( + builder, + { + action: view.actionImpl.Delete, + visibilityTester: drive.function.CanDeleteFileVersion, + label: view.string.Delete, + icon: view.icon.Delete, + category: drive.category.Drive, + input: 'none', + target: drive.class.FileVersion, + context: { + mode: ['context', 'browser'], + application: drive.app.Drive, + group: 'edit' + } + }, + drive.action.DeleteFileVersion + ) } function defineFile (builder: Builder): void { diff --git a/models/drive/src/plugin.ts b/models/drive/src/plugin.ts index 533cb025d5..dc05a8f62e 100644 --- a/models/drive/src/plugin.ts +++ b/models/drive/src/plugin.ts @@ -54,7 +54,8 @@ export default mergeIds(driveId, drive, { FolderLinkProvider: '' as Resource<(doc: Doc, props: Record) => Promise>, FileLinkProvider: '' as Resource<(doc: Doc, props: Record) => Promise>, CanRenameFile: '' as Resource, - CanRenameFolder: '' as Resource + CanRenameFolder: '' as Resource, + CanDeleteFileVersion: '' as Resource }, completion: { FileQuery: '' as Resource, @@ -78,6 +79,7 @@ export default mergeIds(driveId, drive, { DownloadFile: '' as Ref, RenameFile: '' as Ref, RenameFolder: '' as Ref, + DeleteFileVersion: '' as Ref, RestoreFileVersion: '' as Ref }, actionImpl: { diff --git a/plugins/drive-resources/src/components/EditFileVersions.svelte b/plugins/drive-resources/src/components/EditFileVersions.svelte index b3af909528..a051b868e1 100644 --- a/plugins/drive-resources/src/components/EditFileVersions.svelte +++ b/plugins/drive-resources/src/components/EditFileVersions.svelte @@ -13,7 +13,7 @@ // limitations under the License. --> diff --git a/plugins/drive-resources/src/index.ts b/plugins/drive-resources/src/index.ts index 22343aa278..bbf3049963 100644 --- a/plugins/drive-resources/src/index.ts +++ b/plugins/drive-resources/src/index.ts @@ -160,6 +160,17 @@ export async function CanRenameFolder (doc: Folder | Folder[] | undefined): Prom return doc !== undefined && !Array.isArray(doc) } +export async function CanDeleteFileVersion ( + doc: WithLookup | Array> | undefined +): Promise { + if (doc === undefined) { + return false + } + + const docs = Array.isArray(doc) ? doc : [doc] + return docs.every((p) => p.$lookup?.attachedTo !== undefined && p.$lookup?.attachedTo.file !== p._id) +} + export default async (): Promise => ({ component: { CreateDrive, @@ -200,7 +211,8 @@ export default async (): Promise => ({ FileLinkProvider, FolderLinkProvider, CanRenameFile, - CanRenameFolder + CanRenameFolder, + CanDeleteFileVersion }, resolver: { Location: resolveLocation