From 783d794d56facb30b2aa4803d839093dfeda44c8 Mon Sep 17 00:00:00 2001 From: Victor Ilyushchenko Date: Fri, 14 Mar 2025 18:09:43 +0300 Subject: [PATCH] QFix: (drive) add title providers for files and folders (#8224) Signed-off-by: Victor Ilyushchenko --- models/drive/src/index.ts | 8 ++++++++ models/drive/src/plugin.ts | 6 ++++-- plugins/drive-resources/src/index.ts | 16 +++++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/models/drive/src/index.ts b/models/drive/src/index.ts index 02ed40f0d4..2dec1c87c7 100644 --- a/models/drive/src/index.ts +++ b/models/drive/src/index.ts @@ -447,6 +447,10 @@ function defineFolder (builder: Builder): void { encode: drive.function.FolderLinkProvider }) + builder.mixin(drive.class.Folder, core.class.Class, view.mixin.ObjectTitle, { + titleProvider: drive.function.FolderTitleProvider + }) + // Search builder.createDoc( @@ -608,6 +612,10 @@ function defineFile (builder: Builder): void { encode: drive.function.FileLinkProvider }) + builder.mixin(drive.class.File, core.class.Class, view.mixin.ObjectTitle, { + titleProvider: drive.function.FileTitleProvider + }) + // Activity builder.mixin(drive.class.File, core.class.Class, activity.mixin.ActivityDoc, {}) diff --git a/models/drive/src/plugin.ts b/models/drive/src/plugin.ts index 3f351771c0..ddfe0386f1 100644 --- a/models/drive/src/plugin.ts +++ b/models/drive/src/plugin.ts @@ -13,7 +13,7 @@ // limitations under the License. // -import type { Doc, Ref } from '@hcengineering/core' +import type { Client, Doc, Ref } from '@hcengineering/core' import {} from '@hcengineering/core' import { driveId } from '@hcengineering/drive' import drive from '@hcengineering/drive-resources/src/plugin' @@ -55,7 +55,9 @@ export default mergeIds(driveId, drive, { FileLinkProvider: '' as Resource<(doc: Doc, props: Record) => Promise>, CanRenameFile: '' as Resource, CanRenameFolder: '' as Resource, - CanDeleteFileVersion: '' as Resource + CanDeleteFileVersion: '' as Resource, + FileTitleProvider: '' as Resource<(client: Client, ref: Ref, doc?: Doc) => Promise>, + FolderTitleProvider: '' as Resource<(client: Client, ref: Ref, doc?: Doc) => Promise> }, completion: { FileQuery: '' as Resource, diff --git a/plugins/drive-resources/src/index.ts b/plugins/drive-resources/src/index.ts index bbf3049963..e47246b63f 100644 --- a/plugins/drive-resources/src/index.ts +++ b/plugins/drive-resources/src/index.ts @@ -171,6 +171,18 @@ export async function CanDeleteFileVersion ( return docs.every((p) => p.$lookup?.attachedTo !== undefined && p.$lookup?.attachedTo.file !== p._id) } +export async function FileTitleProvider (client: Client, ref: Ref, doc?: File): Promise { + const object = doc ?? (await client.findOne(drive.class.File, { _id: ref })) + if (object === undefined) throw new Error(`File not found, _id: ${ref}`) + return object.title +} + +export async function FolderTitleProvider (client: Client, ref: Ref, doc?: Folder): Promise { + const object = doc ?? (await client.findOne(drive.class.Folder, { _id: ref })) + if (object === undefined) throw new Error(`Folder not found, _id: ${ref}`) + return object.title +} + export default async (): Promise => ({ component: { CreateDrive, @@ -212,7 +224,9 @@ export default async (): Promise => ({ FolderLinkProvider, CanRenameFile, CanRenameFolder, - CanDeleteFileVersion + CanDeleteFileVersion, + FileTitleProvider, + FolderTitleProvider }, resolver: { Location: resolveLocation