QFix: (drive) add title providers for files and folders (#8224)

Signed-off-by: Victor Ilyushchenko <alt13ri@gmail.com>
This commit is contained in:
Victor Ilyushchenko 2025-03-14 18:09:43 +03:00 committed by GitHub
parent 448d6239ce
commit 783d794d56
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 27 additions and 3 deletions

View File

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

View File

@ -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<string, any>) => Promise<Location>>,
CanRenameFile: '' as Resource<ViewActionAvailabilityFunction>,
CanRenameFolder: '' as Resource<ViewActionAvailabilityFunction>,
CanDeleteFileVersion: '' as Resource<ViewActionAvailabilityFunction>
CanDeleteFileVersion: '' as Resource<ViewActionAvailabilityFunction>,
FileTitleProvider: '' as Resource<(client: Client, ref: Ref<Doc>, doc?: Doc) => Promise<string>>,
FolderTitleProvider: '' as Resource<(client: Client, ref: Ref<Doc>, doc?: Doc) => Promise<string>>
},
completion: {
FileQuery: '' as Resource<ObjectSearchFactory>,

View File

@ -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<File>, doc?: File): Promise<string> {
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<Folder>, doc?: Folder): Promise<string> {
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<Resources> => ({
component: {
CreateDrive,
@ -212,7 +224,9 @@ export default async (): Promise<Resources> => ({
FolderLinkProvider,
CanRenameFile,
CanRenameFolder,
CanDeleteFileVersion
CanDeleteFileVersion,
FileTitleProvider,
FolderTitleProvider
},
resolver: {
Location: resolveLocation