diff --git a/lib/components/FilePicker/FilePreview.vue b/lib/components/FilePicker/FilePreview.vue index 0445f086..b324669b 100644 --- a/lib/components/FilePicker/FilePreview.vue +++ b/lib/components/FilePicker/FilePreview.vue @@ -7,6 +7,7 @@ :class="fileListIconStyles['file-picker__file-icon']"> @@ -19,6 +20,12 @@ import { usePreviewURL } from '../../composables/preview' import IconFile from 'vue-material-design-icons/File.vue' import IconFolder from 'vue-material-design-icons/Folder.vue' +import LockIcon from 'vue-material-design-icons/Lock.vue' +import TagIcon from 'vue-material-design-icons/Tag.vue' +import LinkIcon from 'vue-material-design-icons/Link.vue' +import AccountPlusIcon from 'vue-material-design-icons/AccountPlus.vue' +import NetworkIcon from 'vue-material-design-icons/Network.vue' +import AccountGroupIcon from 'vue-material-design-icons/AccountGroup.vue' // CSS modules import fileListIconStylesModule from './FileListIcon.module.scss' @@ -37,6 +44,45 @@ const { } = usePreviewURL(toRef(props, 'node'), computed(() => ({ cropPreview: props.cropImagePreviews }))) const isFile = computed(() => props.node.type === FileType.File) +const folderDecorationIcon = computed(() => { + if (props.node.type !== FileType.Folder) { + return null + } + + // Encrypted folders + if (props.node.attributes?.['is-encrypted'] === 1) { + return LockIcon + } + + // System tags + if (props.node.attributes?.['is-tag']) { + return TagIcon + } + + // Link and mail shared folders + const shareTypes = Object.values(props.node.attributes?.['share-types'] || {}).flat() as number[] + if (shareTypes.some(type => type === ShareType.Link || type === ShareType.Email)) { + return LinkIcon + } + + // Shared folders + if (shareTypes.length > 0) { + return AccountPlusIcon + } + + switch (props.node.attributes?.['mount-type']) { + case 'external': + case 'external-session': + return NetworkIcon + case 'group': + return AccountGroupIcon + case 'shared': + return AccountPlusIcon + } + + return null + +})