Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
120 changes: 22 additions & 98 deletions packages/web-pkg/src/components/FilesList/ResourceTable.vue
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,14 @@
:lazy="lazy"
:grouping-settings="groupingSettings"
padding-x="medium"
@highlight="fileClicked"
@row-mounted="rowMounted"
@highlight="
fileContainerClicked({
resource: $event[0],
event: $event[1],
selectedIds: unref(selectedIds)
})
"
@row-mounted="$emit('rowMounted', $event[0], $event[1], ImageDimension.Thumbnail)"
@contextmenu-clicked="showContextMenu"
@item-dropped="fileDropped"
@item-dragged="fileDragged"
Expand Down Expand Up @@ -69,13 +75,7 @@
:outline="isLatestSelectedItem(item)"
:data-test-selection-resource-name="item.name"
:data-test-selection-resource-path="item.path"
@click.stop="
(e: MouseEvent) => {
if (!interceptModifierClick(e, item)) {
toggleSelection(item.id)
}
}
"
@click.stop="fileCheckboxClicked({ resource: item, event: $event })"
/>
</template>
<template #name="{ item }">
Expand All @@ -99,7 +99,7 @@
getParentFolderLinkIconAdditionalAttributes(item)
"
:class="{ 'opacity-70': isResourceCut(item) }"
@click="emitFileClick(item)"
@click.stop="fileNameClicked({ resource: item, event: $event })"
/>
<oc-button
v-if="hasRenameAction(item)"
Expand Down Expand Up @@ -281,9 +281,7 @@ import {
} from '@opencloud-eu/web-client'

import {
embedModeFilePickMessageData,
FolderViewModeConstants,
routeToContextQuery,
SortDir,
useActiveLocation,
useAuthStore,
Expand All @@ -296,6 +294,7 @@ import {
useGetMatchingSpace,
useIsTopBarSticky,
useResourcesStore,
useResourceViewHelpers,
useRouter,
useSpaceActionsRename
} from '../../composables'
Expand Down Expand Up @@ -423,14 +422,15 @@ const {
const { isSticky } = useIsTopBarSticky()
const { $gettext, $ngettext, current: currentLanguage } = useGettext()
const { isMobile } = useIsMobile()
const {
isLocationPicker,
isFilePicker,
postMessage,
isEnabled: isEmbedModeEnabled,
fileTypes: embedModeFileTypes
} = useEmbedMode()
const { isLocationPicker, isFilePicker } = useEmbedMode()
const { getDefaultAction } = useFileActions()
const {
fileContainerClicked,
fileNameClicked,
fileCheckboxClicked,
isResourceDisabled,
isResourceInDeleteQueue
} = useResourceViewHelpers({ emit })

const clipboardStore = useClipboardStore()
const { resources: clipboardResources, action: clipboardAction } = storeToRefs(clipboardStore)
Expand All @@ -439,7 +439,7 @@ const authStore = useAuthStore()
const { userContextReady } = storeToRefs(authStore)

const resourcesStore = useResourcesStore()
const { areFileExtensionsShown, latestSelectedId, deleteQueue } = storeToRefs(resourcesStore)
const { areFileExtensionsShown, latestSelectedId } = storeToRefs(resourcesStore)

const dragItem = ref<Resource>()
const ghostElement =
Expand All @@ -461,17 +461,6 @@ const renameHandlerSpace = computed(() => unref(renameActionsSpace)[0].handler)

const getTagToolTip = (tag: string) => $gettext(`Search for tag %{tag}`, { tag })

const isResourceDisabled = (resource: Resource) => {
if (unref(isEmbedModeEnabled) && unref(embedModeFileTypes)?.length) {
return (
!unref(embedModeFileTypes).includes(resource.extension) &&
!unref(embedModeFileTypes).includes(resource.mimeType) &&
!resource.isFolder
)
}
return resource.processing === true || isResourceInDeleteQueue(resource.id)
}

const disabledResources = computed(() => {
return resources?.filter(isResourceDisabled)?.map((resource) => resource.id) || []
})
Expand All @@ -485,14 +474,8 @@ const isResourceClickable = (resource: Resource) => {
return false
}

if (!resource.isFolder) {
if (!resource.canDownload() && !canBeOpenedWithSecureView(resource)) {
return false
}

if (unref(isEmbedModeEnabled) && !unref(isFilePicker)) {
return false
}
if (!resource.isFolder && !resource.canDownload() && !canBeOpenedWithSecureView(resource)) {
return false
}

return !unref(disabledResources).includes(resource.id)
Expand Down Expand Up @@ -527,10 +510,6 @@ const getResourceLink = (resource: Resource) => {
return action.route({ space: matchingSpace, resources: [resource] })
}

const isResourceInDeleteQueue = (id: string): boolean => {
return unref(deleteQueue).includes(id)
}

const showContextDrop = (item: Resource | SpaceResource) => {
if (unref(isTrashOverviewRoute) && isProjectSpaceResource(item) && item.disabled) {
return false
Expand Down Expand Up @@ -916,54 +895,6 @@ const showContextMenu = (

displayPositionedDropdown(instance._tippy, event, unref(contextMenuButton))
}
const rowMounted = (resource: Resource, component: ComponentPublicInstance<typeof OcTableTr>) => {
emit('rowMounted', resource, component, ImageDimension.Thumbnail)
}
const fileClicked = (data: [Resource, MouseEvent]) => {
const resource = data[0]

if (isResourceDisabled(resource)) {
return
}

if (unref(isEmbedModeEnabled) && unref(isFilePicker) && !resource.isFolder) {
return postMessage<embedModeFilePickMessageData>('opencloud-embed:file-pick', {
resource: JSON.parse(JSON.stringify(resource)),
locationQuery: JSON.parse(JSON.stringify(routeToContextQuery(unref(router.currentRoute))))
})
}

const eventData = data[1]

if (!eventData.shiftKey && !eventData.metaKey && !eventData.ctrlKey) {
eventBus.publish('app.files.shiftAnchor.reset')
}

const isCheckboxClicked = (eventData?.target as HTMLElement).getAttribute('type') === 'checkbox'
const contextActionClicked =
(eventData?.target as HTMLElement)?.closest('div')?.id === 'oc-files-context-menu'
if (contextActionClicked) {
return
}
if (eventData && eventData.metaKey) {
return eventBus.publish('app.files.list.clicked.meta', resource)
}
if (eventData && eventData.shiftKey) {
return eventBus.publish('app.files.list.clicked.shift', {
resource,
skipTargetSelection: false
})
}
if (isCheckboxClicked) {
return
}

if (isResourceSelected(resource)) {
return
}

return emitSelect([resource.id])
}
const formatDate = (date: string) => {
return formatDateFromJSDate(new Date(date), currentLanguage)
}
Expand All @@ -980,13 +911,6 @@ const toggleSelectionAll = () => {
.map((resource) => resource.id)
)
}
const emitFileClick = (resource: Resource, event?: MouseEvent) => {
if (interceptModifierClick(event, resource)) {
return
}

emit('fileClick', { space: getMatchingSpace(resource), resources: [resource] })
}
const getResourceCheckboxLabel = (resource: Resource) => {
if (resource.type === 'folder') {
return $gettext('Select folder')
Expand Down
13 changes: 6 additions & 7 deletions packages/web-pkg/src/components/FilesList/ResourceTile.vue
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
:link="resourceRoute"
:is-resource-clickable="isResourceClickable"
tabindex="-1"
@click="$emit('click', $event)"
@click="$emit('fileNameClicked', $event)"
>
<div
class="z-10 absolute top-0 left-0 [&_input]:not-[.oc-checkbox-checked]:bg-role-surface-container"
Expand Down Expand Up @@ -59,7 +59,7 @@
}"
:src="resource.thumbnail"
:data-test-thumbnail-resource-name="resource.name"
@click="toggleTile([resource, $event])"
@click.stop="$emit('tileClicked', [resource, $event])"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand why tileClicked exists, it is never consumed anywhere 🙈

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's consumed in the ResourceTiles component.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah, didn't check for @tile-clicked... -.- sorry for the noise

/>
<resource-icon
v-else
Expand All @@ -74,7 +74,7 @@
</slot>
</div>
</resource-link>
<div class="p-2" @click.stop="toggleTile([resource, $event])">
<div class="p-2" @click.stop="$emit('tileClicked', [resource, $event])">
<div class="flex justify-between items-center">
<div
class="flex items-center truncate resource-name-wrapper text-role-on-surface overflow-hidden"
Expand All @@ -88,7 +88,7 @@
:parent-folder-name="getParentFolderName(resource)"
:parent-folder-link="getParentFolderLink(resource)"
:link="resourceRoute"
@click.stop="$emit('click', $event)"
@click.stop="$emit('fileNameClicked', $event)"
/>
</div>
<div class="flex items-center">
Expand Down Expand Up @@ -120,7 +120,6 @@ import { isSpaceResource } from '@opencloud-eu/web-client'
import { RouteLocationRaw } from 'vue-router'
import { useIsVisible } from '@opencloud-eu/design-system/composables'
import { SizeType } from '@opencloud-eu/design-system/helpers'
import { useToggleTile } from '../../composables/selection'
import { OcCard } from '@opencloud-eu/design-system/components'
import { useFolderLink } from '../../composables'

Expand Down Expand Up @@ -151,9 +150,10 @@ const {
}>()

const emit = defineEmits<{
(e: 'click', event: MouseEvent | KeyboardEvent): void
(e: 'fileNameClicked', event: MouseEvent | KeyboardEvent): void
(e: 'contextmenu', event: MouseEvent | KeyboardEvent): void
(e: 'itemVisible'): void
(e: 'tileClicked', event: [Resource, MouseEvent | KeyboardEvent]): void
}>()

defineSlots<{
Expand All @@ -165,7 +165,6 @@ defineSlots<{
additionalResourceContent?: (props: { item: Resource }) => unknown
}>()

const { toggleTile } = useToggleTile()
const { $gettext } = useGettext()
const { getParentFolderName, getParentFolderLink } = useFolderLink({
space: ref(space)
Expand Down
Loading