Merge pull request #54329 from nextcloud/fix/files-batch-actions

pull/54575/head
John Molakvoæ 2025-08-22 20:34:30 +07:00 committed by GitHub
commit 301f567089
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 59 additions and 4 deletions

@ -151,6 +151,10 @@ export default defineComponent({
.filter(action => !action.renderInline)
// We don't handle actions that are not visible
.filter(action => action.default !== DefaultType.HIDDEN)
// We allow top-level actions that have no execBatch method
// but children actions always need to have it
.filter(action => action.execBatch || !action.parent)
// We filter out actions that are not enabled for the current selection
.filter(action => !action.enabled || action.enabled(this.nodes, this.currentView))
.sort((a, b) => (a.order || 0) - (b.order || 0))
},
@ -190,7 +194,11 @@ export default defineComponent({
})
// Generate list of all top-level actions ids
const childrenActionsIds = actions.filter(action => action.parent).map(action => action.parent) as string[]
const childrenActionsIds = actions
.filter(action => action.parent)
// Filter out all actions that are not batch actions
.filter(action => action.execBatch)
.map(action => action.parent) as string[]
const menuActions = actions
.filter(action => {

@ -213,4 +213,51 @@ describe('Files: Actions', { testIsolation: true }, () => {
getSelectionActionEntry('nested-child-1').should('not.exist')
getSelectionActionEntry('nested-child-2').should('not.exist')
})
it('Do not show parent if nested action has no batch support', () => {
const parent = new FileAction({
id: 'nested-action',
displayName: () => 'Nested Action',
exec: cy.spy(),
iconSvgInline: () => '<svg></svg>',
})
const child1 = new FileAction({
id: 'nested-child-1',
displayName: () => 'Nested Child 1',
exec: cy.spy(),
iconSvgInline: () => '<svg></svg>',
parent: 'nested-action',
})
const child2 = new FileAction({
id: 'nested-child-2',
displayName: () => 'Nested Child 2',
exec: cy.spy(),
iconSvgInline: () => '<svg></svg>',
parent: 'nested-action',
})
cy.visit('/apps/files', {
// Cannot use registerFileAction here
onBeforeLoad: (win) => {
if (!win._nc_fileactions) win._nc_fileactions = []
// Cannot use registerFileAction here
win._nc_fileactions.push(parent)
win._nc_fileactions.push(child1)
win._nc_fileactions.push(child2)
},
})
selectRowForFile('image.jpg')
// Open the menu
getSelectionActionButton().click({ force: true })
// Check we have the parent action but not the children
getSelectionActionEntry('nested-action').should('not.exist')
getSelectionActionEntry('menu-back').should('not.exist')
getSelectionActionEntry('nested-child-1').should('not.exist')
getSelectionActionEntry('nested-child-2').should('not.exist')
})
})

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long