diff --git a/package-lock.json b/package-lock.json index ba55830f1..2ac66f36a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "@nextcloud/axios": "^2.5.1", "@nextcloud/dialogs": "^7.1.0", "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/files": "^4.0.0-rc.1", "@nextcloud/initial-state": "^3.0.0", "@nextcloud/moment": "^1.3.5", "@nextcloud/router": "^3.1.0", @@ -2975,6 +2976,28 @@ "vue": "^3.2.0" } }, + "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "license": "AGPL-3.0-or-later", + "dependencies": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "cancelable-promise": "^4.3.1", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.1", + "webdav": "^5.8.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, "node_modules/@nextcloud/dialogs/node_modules/@nextcloud/vue": { "version": "9.4.0", "resolved": "https://registry.npmjs.org/@nextcloud/vue/-/vue-9.4.0.tgz", @@ -3382,9 +3405,9 @@ } }, "node_modules/@nextcloud/files": { - "version": "3.12.2", - "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", - "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "version": "4.0.0-rc.1", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-4.0.0-rc.1.tgz", + "integrity": "sha512-oJWg0UCAbPYBQBQ3BfKSCOzrCHFBp9LIpkZXo85WAvYniU0pJP9FHMdgh3BqAF0LVTd/E4F6wnlU7Au49IIwFA==", "license": "AGPL-3.0-or-later", "dependencies": { "@nextcloud/auth": "^2.5.3", @@ -3394,13 +3417,12 @@ "@nextcloud/paths": "^3.0.0", "@nextcloud/router": "^3.1.0", "@nextcloud/sharing": "^0.3.0", - "cancelable-promise": "^4.3.1", "is-svg": "^6.1.0", - "typescript-event-target": "^1.1.1", + "typescript-event-target": "^1.1.2", "webdav": "^5.8.0" }, "engines": { - "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + "node": "^24.0.0" } }, "node_modules/@nextcloud/initial-state": { @@ -3491,6 +3513,29 @@ "@nextcloud/files": "^3.12.0" } }, + "node_modules/@nextcloud/sharing/node_modules/@nextcloud/files": { + "version": "3.12.2", + "resolved": "https://registry.npmjs.org/@nextcloud/files/-/files-3.12.2.tgz", + "integrity": "sha512-vBo8tf3Xh6efiF8CrEo3pKj9AtvAF6RdDGO1XKL65IxV8+UUd9Uxl2lUExHlzoDRRczCqfGfaWfRRaFhYqce5Q==", + "license": "AGPL-3.0-or-later", + "optional": true, + "dependencies": { + "@nextcloud/auth": "^2.5.3", + "@nextcloud/capabilities": "^1.2.1", + "@nextcloud/l10n": "^3.4.1", + "@nextcloud/logger": "^3.0.3", + "@nextcloud/paths": "^3.0.0", + "@nextcloud/router": "^3.1.0", + "@nextcloud/sharing": "^0.3.0", + "cancelable-promise": "^4.3.1", + "is-svg": "^6.1.0", + "typescript-event-target": "^1.1.1", + "webdav": "^5.8.0" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || ^24.0.0" + } + }, "node_modules/@nextcloud/stylelint-config": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/@nextcloud/stylelint-config/-/stylelint-config-3.2.1.tgz", diff --git a/package.json b/package.json index f25727af0..e5dc6a10a 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@nextcloud/axios": "^2.5.1", "@nextcloud/dialogs": "^7.1.0", "@nextcloud/event-bus": "^3.3.3", + "@nextcloud/files": "^4.0.0-rc.1", "@nextcloud/initial-state": "^3.0.0", "@nextcloud/moment": "^1.3.5", "@nextcloud/router": "^3.1.0", diff --git a/src/components/NoteItem.vue b/src/components/NoteItem.vue index 252903e1e..af9c9aaa2 100644 --- a/src/components/NoteItem.vue +++ b/src/components/NoteItem.vue @@ -116,6 +116,7 @@ import { showError } from '@nextcloud/dialogs' import { setFavorite, setTitle, fetchNote, deleteNote, setCategory } from '../NotesService.js' import ShareVariantOutlineIcon from 'vue-material-design-icons/ShareVariantOutline.vue' import { emit, subscribe, unsubscribe } from '@nextcloud/event-bus' +import { getSidebar } from '@nextcloud/files' export default { name: 'NoteItem', @@ -239,6 +240,7 @@ export default { this.loading.favorite = true setFavorite(this.note.id, !this.note.favorite) .catch(() => { + this.loading.favorite = false }) .then(() => { this.loading.favorite = false @@ -312,13 +314,28 @@ export default { } }, onToggleSharing() { - if (window?.OCA?.Files?.Sidebar?.setActiveTab) { + const sidebar = getSidebar() + if (!sidebar) { + showError(this.t('notes', 'Sharing not available.')) + return + } + + try { emit('toggle-navigation', { open: false }) setTimeout(() => { window.dispatchEvent(new Event('resize')) }, 200) - window.OCA.Files.Sidebar.setActiveTab('sharing') - window.OCA.Files.Sidebar.open(this.note.internalPath) + sidebar.open(this.note.internalPath) + setTimeout(() => { + try { + sidebar.setActiveTab('sharing') + } catch (e) { + console.warn('Could not activate sharing tab:', e.message) + } + }, 100) + } catch (error) { + console.error('Failed to open sidebar:', error) + showError(this.t('notes', 'Could not open the sharing sidebar.')) } }, async onShareCreated(event) {