From 162a77254e918ee8b0b9d54d8c143302d1185c3d Mon Sep 17 00:00:00 2001 From: Jan Date: Fri, 7 Jul 2023 15:47:35 +0200 Subject: [PATCH] Show space icons in search (#9349) --- .../src/components/OcResource/OcResource.vue | 19 ++++++++++++- .../components/FilesList/ResourceTable.vue | 27 +++++++++++++++++++ .../src/components/Search/Preview.vue | 23 +++++++++++++++- .../useFileActionsCreateSpaceFromResource.ts | 2 +- .../src/views/spaces/Projects.vue | 1 + .../__snapshots__/Projects.spec.ts.snap | 2 +- 6 files changed, 70 insertions(+), 4 deletions(-) diff --git a/packages/design-system/src/components/OcResource/OcResource.vue b/packages/design-system/src/components/OcResource/OcResource.vue index 1eb5a1c63b1..ee64e4b0a79 100644 --- a/packages/design-system/src/components/OcResource/OcResource.vue +++ b/packages/design-system/src/components/OcResource/OcResource.vue @@ -51,7 +51,7 @@ class="parent-folder" @click.stop="$emit('parentFolderClicked')" > - + @@ -102,6 +102,14 @@ export default defineComponent({ required: false, default: null }, + /** + * The resource parent folder link path icon additional attributes + */ + parentFolderLinkIconAdditionalAttributes: { + type: Object, + required: false, + default: () => {} + }, /** * The resource to be displayed */ @@ -176,6 +184,15 @@ export default defineComponent({ } }, + parentFolderLinkIconAttrs() { + return { + 'fill-type': 'line', + name: 'folder-2', + size: 'small', + ...this.parentFolderLinkIconAdditionalAttributes + } + }, + hasThumbnail() { return ( this.isThumbnailDisplayed && diff --git a/packages/web-app-files/src/components/FilesList/ResourceTable.vue b/packages/web-app-files/src/components/FilesList/ResourceTable.vue index 3c68ca2e3e4..c6f38d3e504 100644 --- a/packages/web-app-files/src/components/FilesList/ResourceTable.vue +++ b/packages/web-app-files/src/components/FilesList/ResourceTable.vue @@ -67,6 +67,9 @@ :is-resource-clickable="isResourceClickable(item.id)" :folder-link="folderLink(item)" :parent-folder-link="parentFolderLink(item)" + :parent-folder-link-icon-additional-attributes=" + parentFolderLinkIconAdditionalAttributes(item) + " :class="{ 'resource-table-resource-cut': isResourceCut(item) }" @click="emitFileClick(item)" /> @@ -562,6 +565,15 @@ export default defineComponent({ wrap: 'nowrap', width: 'shrink' }, + { + name: 'status', + prop: 'disabled', + title: this.$gettext('Status'), + type: 'slot', + alignH: 'right', + wrap: 'nowrap', + width: 'shrink' + }, this.hasTags ? { name: 'tags', @@ -753,6 +765,21 @@ export default defineComponent({ resource: file }) }, + parentFolderLinkIconAdditionalAttributes(file) { + // Identify if resource is project space or is part of a project space and the resource is located in its root + if ( + isProjectSpaceResource(file) || + (isProjectSpaceResource(this.getInternalSpace(file.storageId) || ({} as Resource)) && + file.path.split('/').length === 2) + ) { + return { + name: 'layout-grid', + 'fill-type': 'fill' + } + } + + return {} + }, fileDragged(file) { this.addSelectedResource(file) }, diff --git a/packages/web-app-files/src/components/Search/Preview.vue b/packages/web-app-files/src/components/Search/Preview.vue index c1def68a98d..7af8a8b96c2 100644 --- a/packages/web-app-files/src/components/Search/Preview.vue +++ b/packages/web-app-files/src/components/Search/Preview.vue @@ -12,6 +12,7 @@ :is-path-displayed="true" :is-resource-clickable="false" :parent-folder-link="parentFolderLink" + :parent-folder-link-icon-additional-attributes="parentFolderLinkIconAdditionalAttributes" :parent-folder-name-default="defaultParentFolderName" :is-thumbnail-displayed="displayThumbnails" @parent-folder-clicked="parentFolderClicked" @@ -29,7 +30,7 @@ import { computed, defineComponent, ref, unref } from 'vue' import { mapGetters } from 'vuex' import { createLocationShares, createLocationSpaces } from '../../router' import { basename, dirname } from 'path' -import { useCapabilityShareJailEnabled } from 'web-pkg/src/composables' +import { useCapabilityShareJailEnabled, useGetMatchingSpace } from 'web-pkg/src/composables' import { buildShareSpaceResource, isProjectSpaceResource, Resource } from 'web-client/src/helpers' import { configurationManager } from 'web-pkg/src/configuration' import { eventBus } from 'web-pkg/src/services/eventBus' @@ -53,6 +54,7 @@ export default defineComponent({ } }, setup(props) { + const { getInternalSpace } = useGetMatchingSpace() const previewData = ref() const resource = computed((): Resource => { return { @@ -65,6 +67,7 @@ export default defineComponent({ }) return { ...useFileActions(), + getInternalSpace, hasShareJail: useCapabilityShareJailEnabled(), previewData, resource @@ -142,6 +145,24 @@ export default defineComponent({ return createLocationSpaces('files-spaces-projects') } return this.createFolderLink(dirname(this.resource.path), this.resource.parentFolderId) + }, + + parentFolderLinkIconAdditionalAttributes() { + // Identify if resource is project space or is part of a project space and the resource is located in its root + if ( + isProjectSpaceResource(this.resource) || + (isProjectSpaceResource( + this.getInternalSpace(this.resource.storageId) || ({} as Resource) + ) && + this.resource.path.split('/').length === 2) + ) { + return { + name: 'layout-grid', + 'fill-type': 'fill' + } + } + + return {} } }, mounted() { diff --git a/packages/web-app-files/src/composables/actions/files/useFileActionsCreateSpaceFromResource.ts b/packages/web-app-files/src/composables/actions/files/useFileActionsCreateSpaceFromResource.ts index 855c60b8cff..40333955efa 100644 --- a/packages/web-app-files/src/composables/actions/files/useFileActionsCreateSpaceFromResource.ts +++ b/packages/web-app-files/src/composables/actions/files/useFileActionsCreateSpaceFromResource.ts @@ -94,7 +94,7 @@ export const useFileActionsCreateSpaceFromResource = ({ store }: { store?: Store return [ { name: 'create-space-from-resource', - icon: 'layout-grid', + icon: 'function', handler, label: () => { return $gettext('Create Space from selection') diff --git a/packages/web-app-files/src/views/spaces/Projects.vue b/packages/web-app-files/src/views/spaces/Projects.vue index 34e75d69999..68d74e3fe4a 100644 --- a/packages/web-app-files/src/views/spaces/Projects.vue +++ b/packages/web-app-files/src/views/spaces/Projects.vue @@ -191,6 +191,7 @@ export default defineComponent({ 'totalQuota', 'usedQuota', 'remainingQuota', + 'status', 'mdate' ] diff --git a/packages/web-app-files/tests/unit/views/spaces/__snapshots__/Projects.spec.ts.snap b/packages/web-app-files/tests/unit/views/spaces/__snapshots__/Projects.spec.ts.snap index 663d99fd6a7..34a03be3183 100644 --- a/packages/web-app-files/tests/unit/views/spaces/__snapshots__/Projects.spec.ts.snap +++ b/packages/web-app-files/tests/unit/views/spaces/__snapshots__/Projects.spec.ts.snap @@ -6,7 +6,7 @@ exports[`Projects view different files view states lists all available project s
- +