From 21343073d4c4dfe35c07662c504f744733d00663 Mon Sep 17 00:00:00 2001 From: Jonathan Pagel Date: Fri, 24 Mar 2023 22:21:55 +0100 Subject: [PATCH 1/2] Category: Add new category button to create new folders in current notes path for categories. Signed-off-by: Jonathan Pagel --- package-lock.json | 17 +++---- package.json | 1 + src/NotesService.js | 37 ++++++++++++++- src/components/CategoriesList.vue | 79 ++++++++++++++++++++++++++++++- 4 files changed, 124 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index b8536d41e..751fb5ce7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "4.8.1", "license": "agpl", "dependencies": { + "@nextcloud/auth": "^2.2.1", "@nextcloud/axios": "^2.4.0", "@nextcloud/dialogs": "^4.2.1", "@nextcloud/event-bus": "^3.1.0", @@ -3099,15 +3100,15 @@ "integrity": "sha512-rxzuSL2RSt/pWWnFnUFQi5GJArm2tHMhx20Gee3Ydn+xT2bqbR4syfgdPrq2b+j+n5LjC7C8Fb1QDM6LKeF0cA==" }, "node_modules/@nextcloud/auth": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.1.0.tgz", - "integrity": "sha512-wf5xQrWQu6fkl3MGegVdyR5mh/EdSQKJByH3m2Url2K2xbML9Y4Y7LAff9jjJAcMt2MkzzJEM463ZBbgTqs0lg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.2.1.tgz", + "integrity": "sha512-zYtgrg9NMZfN8kmL5JPCsh5jDhpTCEslhnZWMvbhTiQ7hrOnji/67ok6VMK0CTJ1a92Vr67Ow72lW7YRX69zEA==", "dependencies": { "@nextcloud/event-bus": "^3.1.0" }, "engines": { - "node": "^16.0.0", - "npm": "^7.0.0 || ^8.0.0" + "node": "^20.0.0", + "npm": "^9.0.0" } }, "node_modules/@nextcloud/axios": { @@ -19995,9 +19996,9 @@ "integrity": "sha512-rxzuSL2RSt/pWWnFnUFQi5GJArm2tHMhx20Gee3Ydn+xT2bqbR4syfgdPrq2b+j+n5LjC7C8Fb1QDM6LKeF0cA==" }, "@nextcloud/auth": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.1.0.tgz", - "integrity": "sha512-wf5xQrWQu6fkl3MGegVdyR5mh/EdSQKJByH3m2Url2K2xbML9Y4Y7LAff9jjJAcMt2MkzzJEM463ZBbgTqs0lg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@nextcloud/auth/-/auth-2.2.1.tgz", + "integrity": "sha512-zYtgrg9NMZfN8kmL5JPCsh5jDhpTCEslhnZWMvbhTiQ7hrOnji/67ok6VMK0CTJ1a92Vr67Ow72lW7YRX69zEA==", "requires": { "@nextcloud/event-bus": "^3.1.0" } diff --git a/package.json b/package.json index 3ebb94023..f626dbc62 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "stylelint:fix": "stylelint 'src/**/*.vue' 'css/**/*.css' --fix" }, "dependencies": { + "@nextcloud/auth": "^2.2.1", "@nextcloud/axios": "^2.4.0", "@nextcloud/dialogs": "^4.2.1", "@nextcloud/event-bus": "^3.1.0", diff --git a/src/NotesService.js b/src/NotesService.js index cba6f8ced..4c5dd2316 100644 --- a/src/NotesService.js +++ b/src/NotesService.js @@ -1,5 +1,6 @@ import axios from '@nextcloud/axios' -import { generateUrl } from '@nextcloud/router' +import { getCurrentUser } from '@nextcloud/auth' +import { generateUrl, generateRemoteUrl } from '@nextcloud/router' import { showError } from '@nextcloud/dialogs' import store from './store.js' @@ -338,6 +339,40 @@ export const setFavorite = (noteId, favorite) => { }) } +export const findCategory = (categoryName) => { + return axios + .get(generateRemoteUrl(`dav/files/${getCurrentUser().uid}/${store.state.app.settings.notesPath}${categoryName}`)) + .then(response => { + return categoryName + }) + .catch(err => { + if (err?.response?.status === 404) { + return false + } else { + console.error(err) + handleSyncError(t('notes', 'Fetching category {name} has failed.', { name: categoryName }), err) + throw err + } + }) +} + +export const createCategory = (categoryName) => { + // Axios MKCOL workaround: https://github.com/axios/axios/issues/2220 + return axios + .request({ + url: generateRemoteUrl(`dav/files/${getCurrentUser().uid}/${store.state.app.settings.notesPath}${categoryName}`), + method: 'MKCOL', + }) + .then(response => { + return categoryName + }) + .catch(err => { + console.error(err) + handleSyncError(t('notes', 'Creating new category {name} has failed.', { name: categoryName }), err) + throw err + }) +} + export const setCategory = (noteId, category) => { return axios .put(url('/notes/' + noteId + '/category'), { category }) diff --git a/src/components/CategoriesList.vue b/src/components/CategoriesList.vue index 7ff1f56fa..882ddb939 100644 --- a/src/components/CategoriesList.vue +++ b/src/components/CategoriesList.vue @@ -1,5 +1,38 @@