UBERF-9316 Allow to delete drive file versions (#7889)

Signed-off-by: Andrey Sobolev <haiodo@gmail.com>
This commit is contained in:
Alexander Onnikov 2025-02-04 07:32:01 +04:00 committed by Andrey Sobolev
parent 93effa442d
commit 8db7625f08
No known key found for this signature in database
GPG Key ID: BD80F68D68D8F7F2
4 changed files with 39 additions and 3 deletions

View File

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

View File

@ -54,7 +54,8 @@ export default mergeIds(driveId, drive, {
FolderLinkProvider: '' as Resource<(doc: Doc, props: Record<string, any>) => Promise<Location>>,
FileLinkProvider: '' as Resource<(doc: Doc, props: Record<string, any>) => Promise<Location>>,
CanRenameFile: '' as Resource<ViewActionAvailabilityFunction>,
CanRenameFolder: '' as Resource<ViewActionAvailabilityFunction>
CanRenameFolder: '' as Resource<ViewActionAvailabilityFunction>,
CanDeleteFileVersion: '' as Resource<ViewActionAvailabilityFunction>
},
completion: {
FileQuery: '' as Resource<ObjectSearchFactory>,
@ -78,6 +79,7 @@ export default mergeIds(driveId, drive, {
DownloadFile: '' as Ref<Action>,
RenameFile: '' as Ref<Action>,
RenameFolder: '' as Ref<Action>,
DeleteFileVersion: '' as Ref<Action>,
RestoreFileVersion: '' as Ref<Action>
},
actionImpl: {

View File

@ -13,7 +13,7 @@
// limitations under the License.
-->
<script lang="ts">
import core, { FindOptions, SortingOrder } from '@hcengineering/core'
import { FindOptions, SortingOrder } from '@hcengineering/core'
import { type File, type FileVersion } from '@hcengineering/drive'
import { Scroller, Section } from '@hcengineering/ui'
import { Table } from '@hcengineering/view-resources'
@ -24,6 +24,9 @@
export let readonly: boolean = false
const options: FindOptions<FileVersion> = {
lookup: {
attachedTo: drive.class.File
},
sort: { version: SortingOrder.Descending }
}
</script>

View File

@ -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<FileVersion> | Array<WithLookup<FileVersion>> | undefined
): Promise<boolean> {
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<Resources> => ({
component: {
CreateDrive,
@ -200,7 +211,8 @@ export default async (): Promise<Resources> => ({
FileLinkProvider,
FolderLinkProvider,
CanRenameFile,
CanRenameFolder
CanRenameFolder,
CanDeleteFileVersion
},
resolver: {
Location: resolveLocation