Merge pull request #46432 from nextcloud/fix/close-sidebar-on-navigation

fix(files): Close sidebar on navigation
This commit is contained in:
Ferdinand Thiessen 2024-07-15 12:53:03 +02:00 committed by GitHub
commit d42849852e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
11 changed files with 74 additions and 16 deletions

View file

@ -473,6 +473,9 @@ export default defineComponent({
// TODO: preserve selection on browsing?
this.selectionStore.reset()
this.triggerResetSearch()
if (window.OCA.Files.Sidebar?.close) {
window.OCA.Files.Sidebar.close()
}
this.fetchContent()
// Scroll to top, force virtual scroller to re-render

View file

@ -93,7 +93,7 @@ import { emit, subscribe, unsubscribe } from '@nextcloud/event-bus'
import { File, Folder, formatFileSize } from '@nextcloud/files'
import { encodePath } from '@nextcloud/paths'
import { generateRemoteUrl, generateUrl } from '@nextcloud/router'
import { Type as ShareTypes } from '@nextcloud/sharing'
import { ShareTypes } from '@nextcloud/sharing'
import { mdiStar, mdiStarOutline } from '@mdi/js'
import axios from '@nextcloud/axios'
import $ from 'jquery'

View file

@ -55,12 +55,16 @@ window.addEventListener('DOMContentLoaded', function() {
await TabInstance.update(fileInfo)
TabInstance.$mount(el)
},
update(fileInfo) {
TabInstance.update(fileInfo)
},
destroy() {
TabInstance.$destroy()
TabInstance = null
if (TabInstance) {
TabInstance.$destroy()
TabInstance = null
}
},
}))
}

View file

@ -54,6 +54,8 @@ export default defineConfig({
// Disable session isolation
testIsolation: false,
requestTimeout: 30000,
// We've imported your old cypress plugins here.
// You may want to clean this up later by importing these.
async setupNodeEvents(on, config) {

View file

@ -5,6 +5,7 @@
import type { User } from '@nextcloud/cypress'
import { getRowForFile, navigateToFolder, triggerActionForFile } from './FilesUtils'
import { assertNotExistOrNotVisible } from '../settings/usersUtils'
describe('Files: Sidebar', { testIsolation: true }, () => {
let user: User
@ -26,7 +27,10 @@ describe('Files: Sidebar', { testIsolation: true }, () => {
triggerActionForFile('file', 'details')
cy.get('[data-cy-sidebar]').should('be.visible')
cy.get('[data-cy-sidebar]')
.should('be.visible')
.findByRole('heading', { name: 'file' })
.should('be.visible')
})
it('changes the current fileid', () => {
@ -39,20 +43,63 @@ describe('Files: Sidebar', { testIsolation: true }, () => {
cy.url().should('contain', `apps/files/files/${fileId}`)
})
it('closes the sidebar on delete', () => {
it('changes the sidebar content on other file', () => {
cy.visit('/apps/files')
getRowForFile('file').should('be.visible')
triggerActionForFile('file', 'details')
cy.get('[data-cy-sidebar]')
.should('be.visible')
.findByRole('heading', { name: 'file' })
.should('be.visible')
triggerActionForFile('folder', 'details')
cy.get('[data-cy-sidebar]')
.should('be.visible')
.findByRole('heading', { name: 'folder' })
.should('be.visible')
})
it('closes the sidebar on navigation', () => {
cy.visit('/apps/files')
getRowForFile('file').should('be.visible')
getRowForFile('folder').should('be.visible')
// open the sidebar
triggerActionForFile('file', 'details')
// validate it is open
cy.get('[data-cy-sidebar]').should('be.visible')
cy.get('[data-cy-sidebar]')
.should('be.visible')
// if we navigate to the folder
navigateToFolder('folder')
// the sidebar should not be visible anymore
cy.get('[data-cy-sidebar]')
.should(assertNotExistOrNotVisible)
})
it('closes the sidebar on delete', () => {
cy.intercept('DELETE', `**/remote.php/dav/files/${user.userId}/file`).as('deleteFile')
// visit the files app
cy.visit('/apps/files')
getRowForFile('file').should('be.visible')
// open the sidebar
triggerActionForFile('file', 'details')
// validate it is open
cy.get('[data-cy-sidebar]').should('be.visible')
// delete the file
triggerActionForFile('file', 'delete')
cy.get('[data-cy-sidebar]').should('not.exist')
cy.wait('@deleteFile', { timeout: 10000 })
// see the sidebar is closed
cy.get('[data-cy-sidebar]')
.should(assertNotExistOrNotVisible)
})
it('changes the fileid on delete', () => {
cy.intercept('DELETE', `**/remote.php/dav/files/${user.userId}/folder/other`).as('deleteFile')
cy.uploadContent(user, new Blob([]), 'text/plain', '/folder/other').then((response) => {
const otherFileId = Number.parseInt(response.headers['oc-fileid'] ?? '0')
cy.login(user)
@ -69,6 +116,8 @@ describe('Files: Sidebar', { testIsolation: true }, () => {
cy.url().should('contain', `apps/files/files/${otherFileId}`)
triggerActionForFile('other', 'delete')
cy.wait('@deleteFile')
cy.get('[data-cy-sidebar]').should('not.exist')
// Ensure the URL is changed
cy.url().should('not.contain', `apps/files/files/${otherFileId}`)

4
dist/files-main.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long