]> source.dussan.org Git - nextcloud-server.git/commitdiff
fix(files): Close the sidebar on navigation
authorFerdinand Thiessen <opensource@fthiessen.de>
Wed, 10 Jul 2024 23:44:00 +0000 (01:44 +0200)
committerskjnldsv <skjnldsv@protonmail.com>
Fri, 2 Aug 2024 08:21:05 +0000 (10:21 +0200)
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
apps/files/src/views/FilesList.vue
apps/files/src/views/Sidebar.vue
apps/files_sharing/src/files_sharing_tab.js
cypress.config.ts
cypress/e2e/files/files-sidebar.cy.ts

index ed5ce8d039900679ab7f4e545480f5caed906b55..da68f862e2620def10f46a11faf19c1d3605b12a 100644 (file)
@@ -434,6 +434,9 @@ export default defineComponent({
                        // TODO: preserve selection on browsing?
                        this.selectionStore.reset()
                        this.resetSearch()
+                       if (window.OCA.Files.Sidebar?.close) {
+                               window.OCA.Files.Sidebar.close()
+                       }
                        this.fetchContent()
 
                        // Scroll to top, force virtual scroller to re-render
index f4b91d0659ddb8cfaae73e747c4da7806414a8db..6e33644437fa5a82d13634cb577276dc7b272264 100644 (file)
@@ -110,7 +110,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'
index 602992320d10d4776afb110c8b7bd7d77515cd87..09bedbc6398e76e72b8df11779313e101bc31836 100644 (file)
@@ -73,12 +73,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
+                               }
                        },
                }))
        }
index d158d8cfae21a0ab4025693205727832a7937dfc..347b293fd83093c34f1b9724ebd7c05c258646bd 100644 (file)
@@ -50,6 +50,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) {
index 316116a25e401d237292bad328e1961a8fe90df7..dfd90064cea48202ff3ded4604ccbcd13133a34f 100644 (file)
@@ -22,6 +22,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
@@ -56,20 +57,59 @@ 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('[cy-data-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('[cy-data-sidebar]').should('not.exist')
        })
 
        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)