Skip to content

Commit 8b55ce7

Browse files
authored
Merge pull request #2300 from nextcloud/refactor/adjust-for-nc33
refactor: adjust for Nextcloud 33 new files sidebar API
2 parents ccf007b + 4de32e5 commit 8b55ce7

68 files changed

Lines changed: 506 additions & 196 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

cypress/e2e/sidebar.cy.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import { createFolder, getFileListRow, moveFile, navigateToFolder, renameFile } from './filesUtils.ts'
77
import { addComment, addTag, createPublicShare, randHash, showActivityTab, toggleFavorite } from './sidebarUtils.ts'
88

9-
describe.skip('Check activity listing in the sidebar', { testIsolation: true }, () => {
9+
describe('Check activity listing in the sidebar', { testIsolation: true }, () => {
1010
beforeEach(function() {
1111
cy.createRandomUser()
1212
.then((user) => {
@@ -70,7 +70,8 @@ describe.skip('Check activity listing in the sidebar', { testIsolation: true },
7070
cy.get('.activity-entry').first().should('contains.text', 'Added system tag')
7171
})
7272

73-
it('Has comment activity', () => {
73+
// TODO: re-enable when comments app is fixed
74+
it.skip('Has comment activity', () => {
7475
addComment('welcome.txt', 'A comment')
7576
cy.visit('/apps/files')
7677

cypress/e2e/sidebarUtils.ts

Lines changed: 37 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,25 @@
33
* SPDX-License-Identifier: AGPL-3.0-or-later
44
*/
55

6-
import { toggleMenuAction } from './filesUtils'
6+
import { toggleMenuAction, triggerActionForFile } from './filesUtils.ts'
77

88
function showSidebarForFile(fileName: string) {
9-
closeSidebar()
109
toggleMenuAction(fileName, 'details')
1110
cy.get('#app-sidebar-vue').should('be.visible')
1211
}
1312

13+
/**
14+
* Close the sidebar
15+
*/
1416
export function closeSidebar() {
15-
cy.get('body')
16-
.then(($body) => {
17-
if ($body.find('.app-sidebar__close').length !== 0) {
18-
// {force: true} as it might be hidden behind toasts
19-
cy.get('[data-cy-sidebar] .app-sidebar__close').click({ force: true })
20-
}
21-
})
22-
cy.get('#app-sidebar-vue').should('not.exist')
17+
// {force: true} as it might be hidden behind toasts
18+
cy.get('[data-cy-sidebar] .app-sidebar__close')
19+
.click({ force: true })
20+
cy.get('[data-cy-sidebar]')
21+
.should('not.be.visible')
22+
cy.wait(500)
23+
cy.url()
24+
.should('not.contain', 'opendetails')
2325
}
2426

2527
export function showActivityTab(fileName: string) {
@@ -75,24 +77,36 @@ export function createPublicShare(fileName: string) {
7577
cy.wait('@createPublicShare')
7678
}
7779

78-
export function addTag(fileName: string, tag: string) {
79-
showSidebarForFile(fileName)
80+
/**
81+
* Add a system tag to a file
82+
*
83+
* @param fileName - The filename to asign the tag
84+
* @param newTag - The new tag
85+
*/
86+
export function addTag(fileName: string, newTag: string) {
87+
triggerActionForFile(fileName, 'systemtags:bulk')
8088

81-
cy.get('#app-sidebar-vue .app-sidebar-header')
82-
.should('be.visible')
83-
.findByRole('button', { name: 'Actions' })
84-
.click()
89+
cy.intercept('POST', '/remote.php/dav/systemtags').as('createTag')
90+
cy.intercept('PROPFIND', '/remote.php/dav/systemtags/*/files').as('getTagData')
91+
cy.intercept('PROPPATCH', '/remote.php/dav/systemtags/*/files').as('assignTagData')
8592

86-
cy.findByRole('menuitem', { name: 'Tags' })
87-
.should('be.visible')
88-
.click()
93+
cy.get('[data-cy-systemtags-picker-input]').type(newTag)
94+
95+
cy.get('[data-cy-systemtags-picker-tag]').should('have.length', 0)
96+
cy.get('[data-cy-systemtags-picker-button-create]').should('be.visible')
97+
cy.get('[data-cy-systemtags-picker-button-create]').click()
8998

90-
cy.intercept('POST', '/remote.php/dav/systemtags').as('tag')
99+
cy.wait('@createTag')
100+
// Verify the new tag is selected by default
101+
cy.get('[data-cy-systemtags-picker-tag]').contains(newTag)
102+
.parents('[data-cy-systemtags-picker-tag]')
103+
.findByRole('checkbox', { hidden: true }).should('be.checked')
91104

92-
cy.findByLabelText('Search or create collaborative tags')
93-
.type(`${tag}{enter}{esc}`)
105+
// Apply changes
106+
cy.get('[data-cy-systemtags-picker-button-submit]').click()
94107

95-
cy.wait('@tag')
108+
cy.wait('@assignTagData')
109+
cy.get('[data-cy-systemtags-picker]').should('not.exist')
96110
}
97111

98112
export function addComment(fileName: string, comment: string) {

js/ActivityComponent.vue_vue_type_script_setup_true_lang-BvJjhy3M.chunk.mjs renamed to js/ActivityComponent.vue_vue_type_script_setup_true_lang-BPBYWpOt.chunk.mjs

Lines changed: 5 additions & 5 deletions
Large diffs are not rendered by default.

js/ActivityComponent.vue_vue_type_script_setup_true_lang-BvJjhy3M.chunk.mjs.license renamed to js/ActivityComponent.vue_vue_type_script_setup_true_lang-BPBYWpOt.chunk.mjs.license

File renamed without changes.

js/ActivityComponent.vue_vue_type_script_setup_true_lang-BPBYWpOt.chunk.mjs.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/ActivityComponent.vue_vue_type_script_setup_true_lang-BvJjhy3M.chunk.mjs.map

Lines changed: 0 additions & 1 deletion
This file was deleted.

js/ActivityTab-6Gq3gTQ6.chunk.mjs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
(function(){"use strict";try{if(typeof document<"u"){var t=document.createElement("style");t.appendChild(document.createTextNode(".activity[data-v-b6867024]{display:flex;flex-direction:column;overflow:hidden;height:100%}.activity__actions[data-v-b6867024]{display:flex;flex-direction:column;width:100%}.activity__list[data-v-b6867024]{flex-grow:1;overflow:scroll}.activity__empty-content[data-v-b6867024]{height:100%}[data-v-b6867024] .empty-content__icon span{background-size:64px;width:64px;height:64px}")),document.head.appendChild(t)}}catch(e){console.error("vite-plugin-css-injected-by-js",e)}})();
2+
import{l as k}from"./activity-sidebar.mjs";import{h as P,e as N,g as j,d as I}from"./_plugin-vue_export-helper-DiB0wW6k.chunk.mjs";import{d as _,r as x,x as B,B as C,y as E,a as s,b as i,L as m,l as L,m as o,e as r,i as p,h as y,F as g,E as R,M as h,n as q}from"./index-6AAKmhoX.chunk.mjs";import{N as G,e as O,_ as V,A as T}from"./ActivityComponent.vue_vue_type_script_setup_true_lang-BPBYWpOt.chunk.mjs";import{g as W,a as F,b as M}from"./api-mFrM-9qG.chunk.mjs";import{l as f}from"./logger-1JHA8kGV.chunk.mjs";import"./preload-helper-DxYC2qmj.chunk.mjs";import"./index-NjYp13Ld.chunk.mjs";const U=_({__name:"ActivitySidebarPlugin",props:{plugin:{},node:{}},emits:["reload-activities"],setup(t,{emit:e}){const a=t,n=e,l=x();return B(()=>a.plugin.mount(l.value,{node:a.node,context:C()?.proxy??void 0,reload:()=>n("reload-activities")})),E(()=>a.plugin.unmount()),(b,d)=>(i(),s("div",{ref_key:"attachTarget",ref:l},null,512))}}),$=_({name:"ActivityTab",components:{ActivityComponent:V,NcEmptyContent:O,NcIconSvgWrapper:G,NcLoadingIcon:P,ActivitySidebarPlugin:U},props:{node:{type:Object,required:!0},folder:{type:Object,required:!1,default:void 0},view:{type:Object,required:!1,default:void 0}},expose:["update"],data(){return{error:"",loading:!0,activities:[],lightningBoltSVG:k,sidebarPlugins:[]}},watch:{node:{immediate:!0,async handler(){await this.update()}}},async mounted(){this.node&&await this.update()},methods:{async update(){this.sidebarPlugins=[];const t=M();t.length>0&&L(()=>{this.sidebarPlugins=t}),this.resetState(),await this.getActivities()},async getActivities(){try{this.loading=!0;const t=await this.processActivities(await this.loadRealActivities()),e=await F({node:this.node});this.activities=[...t,...e].sort((a,n)=>n.timestamp-a.timestamp)}catch(t){this.error=m("activity","Unable to load the activity list"),f.error("Error loading the activity list",{error:t})}finally{this.loading=!1}},resetState(){this.loading=!0,this.error="",this.activities=[]},async loadRealActivities(){try{const{data:t}=await N.get(j("apps/activity/api/v2/activity/filter"),{params:{format:"json",object_type:"files",object_id:this.node.fileid}});return t.ocs.data}catch(t){if(t.response!==void 0&&t.response.status===304)return[];throw t}},processActivities(t){t=t.map(a=>new T(a)),f.debug(`Processed ${t.length} activity(ies)`,{activities:t,node:this.node});const e=W();return t.filter(a=>!e||e.every(n=>n(a)))},t:m}}),z={key:0,class:"activity__actions"},D={key:3,class:"activity__list"};function H(t,e,a,n,l,b){const d=o("NcIconSvgWrapper"),v=o("NcEmptyContent"),A=o("ActivitySidebarPlugin"),w=o("NcLoadingIcon"),S=o("ActivityComponent");return i(),s("div",{class:q([{"icon-loading":t.loading},"activity"])},[t.error||!t.node?(i(),r(v,{key:0,name:t.error},{icon:p(()=>[y(d,{svg:t.lightningBoltSVG},null,8,["svg"])]),_:1},8,["name"])):(i(),s(g,{key:1},[t.sidebarPlugins.length>0?(i(),s("div",z,[(i(!0),s(g,null,h(t.sidebarPlugins,(c,u)=>(i(),r(A,{key:u,plugin:c,node:t.node,onReloadActivities:e[0]||(e[0]=J=>t.getActivities())},null,8,["plugin","node"]))),128))])):R("",!0),t.loading?(i(),r(v,{key:1,class:"activity__empty-content",name:t.t("activity","Loading activities")},{icon:p(()=>[y(w)]),_:1},8,["name"])):t.activities.length===0?(i(),r(v,{key:2,class:"activity__empty-content",name:t.t("activity","No activity yet")},{icon:p(()=>[y(d,{svg:t.lightningBoltSVG},null,8,["svg"])]),_:1},8,["name"])):(i(),s("ul",D,[(i(!0),s(g,null,h(t.activities,c=>(i(),r(S,{key:c.id,activity:c,"show-previews":!1,onReload:e[1]||(e[1]=u=>t.getActivities())},null,8,["activity"]))),128))]))],64))],2)}const at=I($,[["render",H],["__scopeId","data-v-b6867024"]]);export{at as default};
3+
//# sourceMappingURL=ActivityTab-6Gq3gTQ6.chunk.mjs.map

js/ActivityTab-6Gq3gTQ6.chunk.mjs.map

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)