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 encode: drive.function.FolderLinkProvider
}) })
builder.mixin(drive.class.Folder, core.class.Class, view.mixin.ObjectTitle, {
titleProvider: drive.function.FolderTitleProvider
})
// Search // Search
builder.createDoc( builder.createDoc(
@ -608,6 +612,10 @@ function defineFile (builder: Builder): void {
encode: drive.function.FileLinkProvider encode: drive.function.FileLinkProvider
}) })
builder.mixin(drive.class.File, core.class.Class, view.mixin.ObjectTitle, {
titleProvider: drive.function.FileTitleProvider
})
// Activity // Activity
builder.mixin(drive.class.File, core.class.Class, activity.mixin.ActivityDoc, {}) builder.mixin(drive.class.File, core.class.Class, activity.mixin.ActivityDoc, {})

View File

@ -13,7 +13,7 @@
// limitations under the License. // limitations under the License.
// //
import type { Doc, Ref } from '@hcengineering/core' import type { Client, Doc, Ref } from '@hcengineering/core'
import {} from '@hcengineering/core' import {} from '@hcengineering/core'
import { driveId } from '@hcengineering/drive' import { driveId } from '@hcengineering/drive'
import drive from '@hcengineering/drive-resources/src/plugin' 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>>, FileLinkProvider: '' as Resource<(doc: Doc, props: Record<string, any>) => Promise<Location>>,
CanRenameFile: '' as Resource<ViewActionAvailabilityFunction>, CanRenameFile: '' as Resource<ViewActionAvailabilityFunction>,
CanRenameFolder: '' 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: { completion: {
FileQuery: '' as Resource<ObjectSearchFactory>, 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) 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> => ({ export default async (): Promise<Resources> => ({
component: { component: {
CreateDrive, CreateDrive,
@ -212,7 +224,9 @@ export default async (): Promise<Resources> => ({
FolderLinkProvider, FolderLinkProvider,
CanRenameFile, CanRenameFile,
CanRenameFolder, CanRenameFolder,
CanDeleteFileVersion CanDeleteFileVersion,
FileTitleProvider,
FolderTitleProvider
}, },
resolver: { resolver: {
Location: resolveLocation Location: resolveLocation