diff --git a/plugins/drive-resources/src/components/DriveSpacePresenter.svelte b/plugins/drive-resources/src/components/DriveSpacePresenter.svelte index 90a5dffaed..ea0e30b962 100644 --- a/plugins/drive-resources/src/components/DriveSpacePresenter.svelte +++ b/plugins/drive-resources/src/components/DriveSpacePresenter.svelte @@ -89,22 +89,6 @@ handleDriveSelected(space._id) }} > - - {/if} diff --git a/plugins/drive-resources/src/components/FilePresenter.svelte b/plugins/drive-resources/src/components/FilePresenter.svelte index c4a9ad1f76..ead51c9195 100644 --- a/plugins/drive-resources/src/components/FilePresenter.svelte +++ b/plugins/drive-resources/src/components/FilePresenter.svelte @@ -23,7 +23,7 @@ import { ObjectPresenterType } from '@hcengineering/view' import { DocNavLink, ObjectMention } from '@hcengineering/view-resources' - import drive from '../plugin' + import { getFileTypeIcon } from '../utils' export let value: WithLookup export let inline: boolean = false @@ -33,6 +33,8 @@ export let shouldShowAvatar = true export let type: ObjectPresenterType = 'link' + $: icon = getFileTypeIcon(value.$lookup?.file?.contentType ?? '') + function handleClick (): void { if (disabled) { return @@ -65,7 +67,7 @@
{#if shouldShowAvatar}
- +
{/if} diff --git a/plugins/drive-resources/src/components/FolderPresenter.svelte b/plugins/drive-resources/src/components/FolderPresenter.svelte index fc5508df64..a7e1be5e10 100644 --- a/plugins/drive-resources/src/components/FolderPresenter.svelte +++ b/plugins/drive-resources/src/components/FolderPresenter.svelte @@ -21,7 +21,7 @@ import { DocNavLink, ObjectMention } from '@hcengineering/view-resources' import { ObjectPresenterType } from '@hcengineering/view' - import drive from '../plugin' + import FolderIcon from './icons/Folder.svelte' export let value: Folder export let inline: boolean = false @@ -40,7 +40,7 @@
{#if shouldShowAvatar}
- +
{/if} diff --git a/plugins/drive-resources/src/components/FolderTreeLevel.svelte b/plugins/drive-resources/src/components/FolderTreeLevel.svelte index 04d7d9de70..9174a9e595 100644 --- a/plugins/drive-resources/src/components/FolderTreeLevel.svelte +++ b/plugins/drive-resources/src/components/FolderTreeLevel.svelte @@ -22,8 +22,7 @@ import { getActions as getContributedActions } from '@hcengineering/view-resources' import FolderTreeElement from './FolderTreeElement.svelte' - - import drive from '../plugin' + import FolderIcon from './icons/Folder.svelte' export let folders: Ref[] export let folderById: Map, Folder> @@ -69,7 +68,10 @@ {#if doc} 0} diff --git a/plugins/drive-resources/src/components/icons/FileTypeAudio.svelte b/plugins/drive-resources/src/components/icons/FileTypeAudio.svelte new file mode 100644 index 0000000000..d62faa8def --- /dev/null +++ b/plugins/drive-resources/src/components/icons/FileTypeAudio.svelte @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/plugins/drive-resources/src/components/icons/FileTypeImage.svelte b/plugins/drive-resources/src/components/icons/FileTypeImage.svelte new file mode 100644 index 0000000000..5c1cff806c --- /dev/null +++ b/plugins/drive-resources/src/components/icons/FileTypeImage.svelte @@ -0,0 +1,32 @@ + + + + + + + + diff --git a/plugins/drive-resources/src/components/icons/FileTypePdf.svelte b/plugins/drive-resources/src/components/icons/FileTypePdf.svelte new file mode 100644 index 0000000000..cd11bc4a8b --- /dev/null +++ b/plugins/drive-resources/src/components/icons/FileTypePdf.svelte @@ -0,0 +1,27 @@ + + + + + + + diff --git a/plugins/drive-resources/src/components/icons/FileTypeText.svelte b/plugins/drive-resources/src/components/icons/FileTypeText.svelte new file mode 100644 index 0000000000..cd11bc4a8b --- /dev/null +++ b/plugins/drive-resources/src/components/icons/FileTypeText.svelte @@ -0,0 +1,27 @@ + + + + + + + diff --git a/plugins/drive-resources/src/components/icons/FileTypeVideo.svelte b/plugins/drive-resources/src/components/icons/FileTypeVideo.svelte new file mode 100644 index 0000000000..d62faa8def --- /dev/null +++ b/plugins/drive-resources/src/components/icons/FileTypeVideo.svelte @@ -0,0 +1,28 @@ + + + + + + + + diff --git a/plugins/drive-resources/src/components/icons/Folder.svelte b/plugins/drive-resources/src/components/icons/Folder.svelte new file mode 100644 index 0000000000..61b61cc512 --- /dev/null +++ b/plugins/drive-resources/src/components/icons/Folder.svelte @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/plugins/drive-resources/src/utils.ts b/plugins/drive-resources/src/utils.ts index 6e90d225e8..c0e3f066b5 100644 --- a/plugins/drive-resources/src/utils.ts +++ b/plugins/drive-resources/src/utils.ts @@ -15,15 +15,21 @@ import { type Class, type Doc, type Ref } from '@hcengineering/core' import drive, { type Drive, type Folder, type Resource } from '@hcengineering/drive' -import { setPlatformStatus, unknownError } from '@hcengineering/platform' +import { type Asset, setPlatformStatus, unknownError } from '@hcengineering/platform' import { getClient, getFileMetadata, uploadFile } from '@hcengineering/presentation' -import { showPopup } from '@hcengineering/ui' +import { type AnySvelteComponent, showPopup } from '@hcengineering/ui' import { openDoc } from '@hcengineering/view-resources' import CreateDrive from './components/CreateDrive.svelte' import CreateFolder from './components/CreateFolder.svelte' import RenamePopup from './components/RenamePopup.svelte' +import FileTypeAudio from './components/icons/FileTypeAudio.svelte' +import FileTypeImage from './components/icons/FileTypeImage.svelte' +import FileTypeVideo from './components/icons/FileTypeVideo.svelte' +import FileTypePdf from './components/icons/FileTypePdf.svelte' +import FileTypeText from './components/icons/FileTypeText.svelte' + async function navigateToDoc (_id: Ref, _class: Ref>): Promise { const client = getClient() const doc = await client.findOne(_class, { _id }) @@ -91,3 +97,16 @@ export async function renameResource (resource: Resource): Promise { } }) } + +const fileTypesMap: Record = { + 'application/pdf': FileTypePdf, + audio: FileTypeAudio, + image: FileTypeImage, + video: FileTypeVideo, + text: FileTypeText +} + +export function getFileTypeIcon (contentType: string): Asset | AnySvelteComponent { + const type = contentType.split('/', 1)[0] + return fileTypesMap[type] ?? fileTypesMap[contentType] ?? drive.icon.File +}