Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
1 change: 1 addition & 0 deletions apps/files/src/actions/deleteAction.ts
Original file line number Diff line number Diff line change
Expand Up @@ -112,5 +112,6 @@ export const action = new FileAction({
return Promise.all(promises)
},

destructive: true,
order: 100,
})
54 changes: 50 additions & 4 deletions apps/files/src/components/FileEntry/FileEntryActions.vue
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,16 @@
:open="openedMenu"
@close="onMenuClose"
@closed="onMenuClosed">
<!-- Default actions list-->
<NcActionButton v-for="action, index in enabledMenuActions"
<!-- Non-destructive actions list -->
<!-- Please keep this block in sync with the destructive actions block below -->
<NcActionButton v-for="action, index in renderedNonDestructiveActions"
:key="action.id"
:ref="`action-${action.id}`"
class="files-list__row-action"
:class="{
[`files-list__row-action-${action.id}`]: true,
'files-list__row-action--inline': index < enabledInlineActions.length,
'files-list__row-action--menu': isValidMenu(action)
'files-list__row-action--menu': isValidMenu(action),
}"
:close-after-click="!isValidMenu(action)"
:data-cy-files-list-row-action="action.id"
Expand All @@ -50,6 +51,35 @@
{{ actionDisplayName(action) }}
</NcActionButton>

<!-- Destructive actions list -->
<template v-if="renderedDestructiveActions.length > 0">
<NcActionSeparator />
<NcActionButton v-for="action, index in renderedDestructiveActions"
:key="action.id"
:ref="`action-${action.id}`"
class="files-list__row-action"
:class="{
[`files-list__row-action-${action.id}`]: true,
'files-list__row-action--inline': index < enabledInlineActions.length,
'files-list__row-action--menu': isValidMenu(action),
'files-list__row-action--destructive': true,
}"
:close-after-click="!isValidMenu(action)"
:data-cy-files-list-row-action="action.id"
:is-menu="isValidMenu(action)"
:aria-label="action.title?.([source], currentView)"
:title="action.title?.([source], currentView)"
@click="onActionClick(action)">
<template #icon>
<NcLoadingIcon v-if="isLoadingAction(action)" />
<NcIconSvgWrapper v-else
class="files-list__row-action-icon"
:svg="action.iconSvgInline([source], currentView)" />
</template>
{{ actionDisplayName(action) }}
</NcActionButton>
</template>

<!-- Submenu actions list-->
<template v-if="openedSubmenu && enabledSubmenuActions[openedSubmenu?.id]">
<!-- Back to top-level button -->
Expand All @@ -68,10 +98,11 @@
class="files-list__row-action--submenu"
close-after-click
:data-cy-files-list-row-action="action.id"
:aria-label="action.title?.([source], currentView)"
:title="action.title?.([source], currentView)"
@click="onActionClick(action)">
<template #icon>
<NcLoadingIcon v-if="isLoadingAction(action)" :size="18" />
<NcLoadingIcon v-if="isLoadingAction(action)" />
<NcIconSvgWrapper v-else :svg="action.iconSvgInline([source], currentView)" />
</template>
{{ actionDisplayName(action) }}
Expand Down Expand Up @@ -211,6 +242,14 @@ export default defineComponent({
return actions.filter(action => !(action.parent && topActionsIds.includes(action.parent)))
},

renderedNonDestructiveActions() {
return this.enabledMenuActions.filter(action => !action.destructive)
},

renderedDestructiveActions() {
return this.enabledMenuActions.filter(action => action.destructive)
},

openedMenu: {
get() {
return this.opened
Expand Down Expand Up @@ -349,5 +388,12 @@ main.app-content[style*="mouse-pos-x"] .v-popper__popper {
max-height: var(--max-icon-size) !important;
max-width: var(--max-icon-size) !important;
}

&.files-list__row-action--destructive {
::deep(button) {
color: var(--color-error) !important;
}
}
}

</style>
12 changes: 11 additions & 1 deletion apps/files/src/components/FileEntryMixin.ts
Original file line number Diff line number Diff line change
Expand Up @@ -250,7 +250,17 @@ export default defineComponent({
return false
}
})
.sort((a, b) => (a.order || 0) - (b.order || 0))
.sort((a, b) => {
// Sort destructive actions to the end
if (a.destructive && !b.destructive) {
return 1
} else if (!a.destructive && b.destructive) {
return -1
}

// Sort by order, if not defined, use 0
return (a.order || 0) - (b.order || 0)
})
},

defaultFileAction() {
Expand Down
Loading