Skip to content

Commit

Permalink
enh(api): generate pagesUrl from parts
Browse files Browse the repository at this point in the history
Accept multiple arguments to `pagesUrl`
and join them with `/` to build the url:

Example:
```js
api.pagesUrl({collectiveId: 10}, 'trash', 12)
```
results in `/apps/collectives/_api/10/_pages/trash/12`

Signed-off-by: Max <[email protected]>
  • Loading branch information
max-nextcloud committed Nov 27, 2023
1 parent cdf550b commit 6a33d57
Show file tree
Hide file tree
Showing 2 changed files with 36 additions and 43 deletions.
39 changes: 21 additions & 18 deletions src/api.js
Original file line number Diff line number Diff line change
@@ -1,63 +1,66 @@
import axios from '@nextcloud/axios'
import { generateUrl } from '@nextcloud/router'

// not used yet.
function url(suffix = '') {
return generateUrl('/apps/collectives/_api' + suffix)
function collectivesUrl(...parts) {

Check warning on line 4 in src/api.js

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc comment
const path = ['apps/collectives/_api', ...parts]
.join('/')
return generateUrl(path)
}

export function getCollectives(shareTokenParam = false) {

Check warning on line 10 in src/api.js

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc comment
return shareTokenParam
? axios.get(url(`/p/${shareTokenParam}`))
: axios.get(url())
? axios.get(collectivesUrl('p', shareTokenParam))
: axios.get(collectivesUrl())
}

export function getTrashCollectives() {

Check warning on line 16 in src/api.js

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc comment
return axios.get(url('/trash'))
return axios.get(collectivesUrl('trash'))
}

export function newCollective(collective) {

Check warning on line 20 in src/api.js

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc comment
return axios.post(
url(),
collectivesUrl(),
collective,
)
}

export function trashCollective(id) {

Check warning on line 27 in src/api.js

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc comment
return axios.delete(url(`/${id}`))
return axios.delete(collectivesUrl(id))
}

export function deleteCollective(id, circle) {

Check warning on line 31 in src/api.js

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc comment
let doCircle = ''
if (circle) {
doCircle = '?circle=1'
}
return axios.delete(url('/trash/' + id + doCircle))
return axios.delete(collectivesUrl('trash', id + doCircle))
}

export function updateCollectiveEditPermissions(id, level) {

Check warning on line 39 in src/api.js

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc comment
return axios.put(url(`/${id}/editLevel`), { level })
return axios.put(collectivesUrl(id, 'editLevel'), { level })
}

export function updateCollectiveSharePermissions(id, level) {

Check warning on line 43 in src/api.js

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc comment
return axios.put(url(`/${id}/shareLevel`), { level })
return axios.put(collectivesUrl(id, 'shareLevel'), { level })
}

export function updateCollectivePageMode(id, mode) {

Check warning on line 47 in src/api.js

View workflow job for this annotation

GitHub Actions / NPM lint

Missing JSDoc comment
return axios.put(url(`/${id}/pageMode`), { mode })
return axios.put(collectivesUrl(id, 'pageMode'), { mode })
}

export function getPages(context) {
return axios.get(pagesUrl(context))
}

export function createPage(context, page) {
const url = pagesUrl(context) + '/' + page.parentId
return axios.post(url, page)
return axios.post(
pagesUrl(context, page.parentId),
page,
)
}

export function pagesUrl({ isPublic = false, shareTokenParam, collectiveId }) {
return isPublic
? url(`/p/${shareTokenParam}/_pages`)
: url(`/${collectiveId}/_pages`)
export function pagesUrl(context, ...parts) {
return context.isPublic
? collectivesUrl('p', context.shareTokenParam, '_pages', ...parts)
: collectivesUrl(context.collectiveId, '_pages', ...parts)
}
40 changes: 15 additions & 25 deletions src/store/pages.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { set } from 'vue'
import { getCurrentUser } from '@nextcloud/auth'
import { getBuilder } from '@nextcloud/browser-storage'
import axios from '@nextcloud/axios'
import { generateRemoteUrl, generateUrl } from '@nextcloud/router'
import { generateRemoteUrl } from '@nextcloud/router'
/* eslint import/namespace: ['error', { allowComputed: true }] */
import * as sortOrders from '../util/sortOrders.js'
import { sortedSubpages, pageParents } from './pageExtracts.js'
Expand Down Expand Up @@ -251,42 +251,32 @@ export default {
}
},

pagesUrl(_state, getters) {
return getters.isPublic
? generateUrl(`/apps/collectives/_api/p/${getters.shareTokenParam}/_pages`)
: generateUrl(`/apps/collectives/_api/${getters.currentCollective.id}/_pages`)
},

pageUrl(_state, getters) {
return (pageId) => `${getters.pagesUrl}/${pageId}`
},

emojiUrl(_state, getters) {
return (pageId) => `${getters.pageUrl(pageId)}/emoji`
return (pageId) => api.pagesUrl(getters, pageId, 'emoji')
},

subpageOrderUrl(_state, getters) {
return (pageId) => `${getters.pageUrl(pageId)}/subpageOrder`
return (pageId) => api.pagesUrl(getters, pageId, 'subpageOrder')
},

touchUrl(_state, getters) {
return `${getters.pageUrl(getters.currentPage.id)}/touch`
return api.pagesUrl(getters, getters.currentPage.id, 'touch')
},

attachmentsUrl(_state, getters) {
return (pageId) => `${getters.pageUrl(pageId)}/attachments`
return (pageId) => api.pagesUrl(getters, pageId, 'attachments')
},

backlinksUrl(_state, getters) {
return (pageId) => `${getters.pageUrl(pageId)}/backlinks`
return (pageId) => api.pagesUrl(getters, pageId, 'backlinks')
},

trashIndexUrl(_state, getters) {
return `${getters.pagesUrl}/trash`
return api.pagesUrl(getters, 'trash')
},

trashActionUrl(_state, getters) {
return (pageId) => `${getters.pagesUrl}/trash/${pageId}`
return (pageId) => api.pagesUrl(getters, 'trash', pageId)
},

pageTitle(state, getters) {
Expand Down Expand Up @@ -544,7 +534,7 @@ export default {
* @param {number} pageId Page ID
*/
async [GET_PAGE]({ commit, getters, state }, pageId) {
const response = await axios.get(getters.pageUrl(pageId))
const response = await axios.get(api.pagesUrl(getters, pageId))
commit(UPDATE_PAGE, response.data.data)
},

Expand Down Expand Up @@ -610,7 +600,7 @@ export default {
* @param {string} newTitle new title for the page
*/
async [RENAME_PAGE]({ commit, getters }, newTitle) {
const url = getters.pageUrl(getters.currentPage.id)
const url = api.pagesUrl(getters, getters.currentPage.id)
const response = await axios.put(url, { title: newTitle })
await commit(UPDATE_PAGE, response.data.data)
},
Expand Down Expand Up @@ -640,7 +630,7 @@ export default {
index += 1
}

const url = getters.pageUrl(pageId)
const url = api.pagesUrl(getters, pageId)
try {
await axios.put(url, { index, parentId: newParentId, copy: true })
// Reload the page list to make new page appear
Expand Down Expand Up @@ -679,7 +669,7 @@ export default {
page.parentId = newParentId
commit(UPDATE_PAGE, page)

const url = getters.pageUrl(pageId)
const url = api.pagesUrl(getters, pageId)
try {
const response = await axios.put(url, { index, parentId: newParentId })
commit(UPDATE_PAGE, response.data.data)
Expand Down Expand Up @@ -714,7 +704,7 @@ export default {
async [COPY_PAGE_TO_COLLECTIVE]({ commit, getters, state, dispatch }, { collectiveId, newParentId, pageId, index }) {
commit('load', 'pagelist')

const url = `${getters.pageUrl(pageId)}/to/${collectiveId}`
const url = api.pagesUrl(getters, pageId, 'to', collectiveId)
await axios.put(url, { index, parentId: newParentId, copy: true })
commit('done', 'pagelist')
},
Expand All @@ -738,7 +728,7 @@ export default {
const page = { ...state.pages.find(p => p.id === pageId) }
const hasSubpages = getters.visibleSubpages(pageId).length > 0

const url = `${getters.pageUrl(pageId)}/to/${collectiveId}`
const url = api.pagesUrl(getters, pageId, 'to', collectiveId)
await axios.put(url, { index, parentId: newParentId })
commit(REMOVE_PAGE, page)
commit('done', 'pagelist')
Expand Down Expand Up @@ -814,7 +804,7 @@ export default {
* @param {number} page.pageId ID of the page
*/
async [TRASH_PAGE]({ commit, getters }, { pageId }) {
const response = await axios.delete(getters.pageUrl(pageId))
const response = await axios.delete(api.pagesUrl(getters, pageId))
commit(MOVE_PAGE_INTO_TRASH, response.data.data)
},

Expand Down

0 comments on commit 6a33d57

Please sign in to comment.