Skip to content

Commit

Permalink
feat: use web history mode
Browse files Browse the repository at this point in the history
  • Loading branch information
raimund-schluessler committed Jan 29, 2024
1 parent 18c5a18 commit 5a88dfc
Show file tree
Hide file tree
Showing 8 changed files with 153 additions and 118 deletions.
145 changes: 86 additions & 59 deletions appinfo/routes.php
Original file line number Diff line number Diff line change
Expand Up @@ -24,78 +24,105 @@
*/
return [
'routes' => [
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'items#getAll', 'url' => '/items', 'verb' => 'GET'],
['name' => 'items#getByFolder', 'url' => '/items/folder', 'verb' => 'POST'],
['name' => 'items#getByPlace', 'url' => '/items/place', 'verb' => 'POST'],
['name' => 'items#getByTags', 'url' => '/items/tags', 'verb' => 'POST'],
['name' => 'items#get', 'url' => '/item/{itemID}', 'verb' => 'GET'],
['name' => 'page#index', 'url' => '/', 'verb' => 'GET'],
['name' => 'page#index', 'url' => '/folders', 'verb' => 'GET', 'postfix' => 'view.folders'],
['name' => 'page#index', 'url' => '/folders/', 'verb' => 'GET', 'postfix' => 'view.folders./'],
[
'name' => 'page#index',
'url' => '/folders/{path}',
'verb' => 'GET',
'postfix' => 'view.folders.path',
'requirements' => array('path' => '.+')
],
['name' => 'page#index', 'url' => '/places', 'verb' => 'GET', 'postfix' => 'view.places'],
['name' => 'page#index', 'url' => '/places/', 'verb' => 'GET', 'postfix' => 'view.places./'],
[
'name' => 'page#index',
'url' => '/places/{path}',
'verb' => 'GET',
'postfix' => 'view.places.path',
'requirements' => array('path' => '.+')
],
['name' => 'page#index', 'url' => '/tags', 'verb' => 'GET', 'postfix' => 'view.tags'],
['name' => 'page#index', 'url' => '/tags/', 'verb' => 'GET', 'postfix' => 'view.tags./'],
[
'name' => 'page#index',
'url' => '/tags/{tags}',
'verb' => 'GET',
'postfix' => 'view.tags.tags',
'requirements' => array('tags' => '.+')
],
['name' => 'items#getAll', 'url' => '/api/v1/items', 'verb' => 'GET'],
['name' => 'items#getByFolder', 'url' => '/api/v1/items/folder', 'verb' => 'POST'],
['name' => 'items#getByPlace', 'url' => '/api/v1/items/place', 'verb' => 'POST'],
['name' => 'items#getByTags', 'url' => '/api/v1/items/tags', 'verb' => 'POST'],
['name' => 'items#get', 'url' => '/api/v1/item/{itemID}', 'verb' => 'GET'],

['name' => 'items#getSub', 'url' => '/item/{itemID}/sub', 'verb' => 'GET'],
['name' => 'items#getParent', 'url' => '/item/{itemID}/parent', 'verb' => 'GET'],
['name' => 'items#getRelated', 'url' => '/item/{itemID}/related', 'verb' => 'GET'],
['name' => 'items#getCandidates', 'url' => '/item/{itemID}/candidates/{relationType}', 'verb' => 'GET'],
['name' => 'items#link', 'url' => '/item/{itemID}/link/{relationType}', 'verb' => 'POST'],
['name' => 'items#unlink', 'url' => '/item/{itemID}/unlink/{relationType}', 'verb' => 'POST'],
['name' => 'items#enlist', 'url' => '/item/add', 'verb' => 'POST'],
['name' => 'items#delete', 'url' => '/item/{itemID}/delete', 'verb' => 'DELETE'],
['name' => 'items#edit', 'url' => '/item/{itemID}/edit', 'verb' => 'PATCH'],
['name' => 'items#move', 'url' => '/item/{itemID}/move', 'verb' => 'PATCH'],
['name' => 'items#moveByUuid', 'url' => '/item/move', 'verb' => 'PATCH'],
['name' => 'items#moveInstance', 'url' => '/item/{itemID}/instance/{instanceID}/move', 'verb' => 'PATCH'],
['name' => 'items#getSub', 'url' => '/api/v1/item/{itemID}/sub', 'verb' => 'GET'],
['name' => 'items#getParent', 'url' => '/api/v1/item/{itemID}/parent', 'verb' => 'GET'],
['name' => 'items#getRelated', 'url' => '/api/v1/item/{itemID}/related', 'verb' => 'GET'],
['name' => 'items#getCandidates', 'url' => '/api/v1/item/{itemID}/candidates/{relationType}', 'verb' => 'GET'],
['name' => 'items#link', 'url' => '/api/v1/item/{itemID}/link/{relationType}', 'verb' => 'POST'],
['name' => 'items#unlink', 'url' => '/api/v1/item/{itemID}/unlink/{relationType}', 'verb' => 'POST'],
['name' => 'items#enlist', 'url' => '/api/v1/item/add', 'verb' => 'POST'],
['name' => 'items#delete', 'url' => '/api/v1/item/{itemID}/delete', 'verb' => 'DELETE'],
['name' => 'items#edit', 'url' => '/api/v1/item/{itemID}/edit', 'verb' => 'PATCH'],
['name' => 'items#move', 'url' => '/api/v1/item/{itemID}/move', 'verb' => 'PATCH'],
['name' => 'items#moveByUuid', 'url' => '/api/v1/item/move', 'verb' => 'PATCH'],
['name' => 'items#moveInstance', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/move', 'verb' => 'PATCH'],

['name' => 'attachment#getAll', 'url' => '/item/{itemID}/attachments', 'verb' => 'GET'],
['name' => 'attachment#link', 'url' => '/item/{itemID}/attachment/link', 'verb' => 'POST'],
['name' => 'attachment#create', 'url' => '/item/{itemID}/attachment/create', 'verb' => 'POST'],
['name' => 'attachment#delete', 'url' => '/item/{itemID}/attachment/{attachmentID}/delete', 'verb' => 'DELETE'],
['name' => 'attachment#unlink', 'url' => '/item/{itemID}/attachment/{attachmentID}/unlink', 'verb' => 'DELETE'],
['name' => 'attachment#display', 'url' => '/item/{itemID}/attachment/{attachmentID}/display','verb' => 'GET'],
['name' => 'attachment#update', 'url' => '/item/{itemID}/attachment/{attachmentID}/update', 'verb' => 'PUT'],
['name' => 'attachment#getAll', 'url' => '/api/v1/item/{itemID}/attachments', 'verb' => 'GET'],
['name' => 'attachment#link', 'url' => '/api/v1/item/{itemID}/attachment/link', 'verb' => 'POST'],
['name' => 'attachment#create', 'url' => '/api/v1/item/{itemID}/attachment/create', 'verb' => 'POST'],
['name' => 'attachment#delete', 'url' => '/api/v1/item/{itemID}/attachment/{attachmentID}/delete', 'verb' => 'DELETE'],
['name' => 'attachment#unlink', 'url' => '/api/v1/item/{itemID}/attachment/{attachmentID}/unlink', 'verb' => 'DELETE'],
['name' => 'attachment#display', 'url' => '/api/v1/item/{itemID}/attachment/{attachmentID}/display', 'verb' => 'GET'],
['name' => 'attachment#update', 'url' => '/api/v1/item/{itemID}/attachment/{attachmentID}/update', 'verb' => 'PUT'],
// also allow to use POST for updates so we can properly access files when using application/x-www-form-urlencoded
['name' => 'attachment#update', 'url' => '/item/{itemID}/attachment/{attachmentID}/update', 'verb' => 'POST'],
['name' => 'attachment#update', 'url' => '/api/v1/item/{itemID}/attachment/{attachmentID}/update', 'verb' => 'POST'],

['name' => 'attachment#getInstance', 'url' => '/item/{itemID}/instance/{instanceID}/attachments', 'verb' => 'GET'],
['name' => 'attachment#linkInstance', 'url' => '/item/{itemID}/instance/{instanceID}/attachment/link', 'verb' => 'POST'],
['name' => 'attachment#createInstance', 'url' => '/item/{itemID}/instance/{instanceID}/attachment/create', 'verb' => 'POST'],
['name' => 'attachment#deleteInstance', 'url' => '/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/delete', 'verb' => 'DELETE'],
['name' => 'attachment#unlinkInstance', 'url' => '/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/unlink', 'verb' => 'DELETE'],
['name' => 'attachment#displayInstance','url' => '/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/display', 'verb' => 'GET'],
['name' => 'attachment#updateInstance', 'url' => '/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/update', 'verb' => 'PUT'],
['name' => 'attachment#getInstance', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/attachments', 'verb' => 'GET'],
['name' => 'attachment#linkInstance', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/attachment/link', 'verb' => 'POST'],
['name' => 'attachment#createInstance', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/attachment/create', 'verb' => 'POST'],
['name' => 'attachment#deleteInstance', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/delete', 'verb' => 'DELETE'],
['name' => 'attachment#unlinkInstance', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/unlink', 'verb' => 'DELETE'],
['name' => 'attachment#displayInstance','url' => '/api/v1/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/display', 'verb' => 'GET'],
['name' => 'attachment#updateInstance', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/update', 'verb' => 'PUT'],
// also allow to use POST for updates so we can properly access files when using application/x-www-form-urlencoded
['name' => 'attachment#updateInstance', 'url' => '/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/update', 'verb' => 'POST'],
['name' => 'attachment#updateInstance', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/attachment/{attachmentID}/update', 'verb' => 'POST'],

['name' => 'attachment#setFolder', 'url' => '/settings/attachmentFolder/set', 'verb' => 'POST'],
['name' => 'attachment#setFolder', 'url' => '/api/v1/settings/attachmentFolder/set', 'verb' => 'POST'],

['name' => 'attachment#uploadImage','url' => '/item/{itemID}/image/upload', 'verb' => 'POST'],
['name' => 'attachment#uploadImage','url' => '/api/v1/item/{itemID}/image/upload', 'verb' => 'POST'],

['name' => 'instance#add', 'url' => '/item/{itemID}/instance/add', 'verb' => 'POST'],
['name' => 'instance#delete', 'url' => '/item/{itemID}/instance/{instanceID}/delete', 'verb' => 'DELETE'],
['name' => 'instance#edit', 'url' => '/item/{itemID}/instance/{instanceID}/edit', 'verb' => 'PATCH'],
['name' => 'instance#addUuid', 'url' => '/item/{itemID}/instance/{instanceID}/uuid/{uuid}', 'verb' => 'PUT'],
['name' => 'instance#deleteUuid', 'url' => '/item/{itemID}/instance/{instanceID}/uuid/{uuid}', 'verb' => 'DELETE'],
['name' => 'instance#add', 'url' => '/api/v1/item/{itemID}/instance/add', 'verb' => 'POST'],
['name' => 'instance#delete', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/delete', 'verb' => 'DELETE'],
['name' => 'instance#edit', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/edit', 'verb' => 'PATCH'],
['name' => 'instance#addUuid', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/uuid/{uuid}', 'verb' => 'PUT'],
['name' => 'instance#deleteUuid', 'url' => '/api/v1/item/{itemID}/instance/{instanceID}/uuid/{uuid}', 'verb' => 'DELETE'],

['name' => 'settings#get', 'url' => '/settings', 'verb' => 'GET'],
['name' => 'settings#set', 'url' => '/settings/{setting}/{value}', 'verb' => 'POST'],
['name' => 'settings#get', 'url' => '/api/v1/settings', 'verb' => 'GET'],
['name' => 'settings#set', 'url' => '/api/v1/settings/{setting}/{value}', 'verb' => 'POST'],

['name' => 'folders#getByFolder', 'url' => '/folders', 'verb' => 'POST'],
['name' => 'folders#add', 'url' => '/folders/add', 'verb' => 'POST'],
['name' => 'folders#delete', 'url' => '/folders/{folderID}/delete', 'verb' => 'DELETE'],
['name' => 'folders#rename', 'url' => '/folders/{folderID}/rename', 'verb' => 'PATCH'],
['name' => 'folders#move', 'url' => '/folders/{folderID}/move', 'verb' => 'PATCH'],
['name' => 'folders#getByFolder', 'url' => '/api/v1/folders', 'verb' => 'POST'],
['name' => 'folders#add', 'url' => '/api/v1/folders/add', 'verb' => 'POST'],
['name' => 'folders#delete', 'url' => '/api/v1/folders/{folderID}/delete', 'verb' => 'DELETE'],
['name' => 'folders#rename', 'url' => '/api/v1/folders/{folderID}/rename', 'verb' => 'PATCH'],
['name' => 'folders#move', 'url' => '/api/v1/folders/{folderID}/move', 'verb' => 'PATCH'],

['name' => 'places#getByPlace', 'url' => '/places', 'verb' => 'POST'],
['name' => 'places#add', 'url' => '/places/add', 'verb' => 'POST'],
['name' => 'places#delete', 'url' => '/places/{placeID}/delete', 'verb' => 'DELETE'],
['name' => 'places#rename', 'url' => '/places/{placeID}/rename', 'verb' => 'PATCH'],
['name' => 'places#move', 'url' => '/places/{placeID}/move', 'verb' => 'PATCH'],
['name' => 'places#getByPlace', 'url' => '/api/v1/places', 'verb' => 'POST'],
['name' => 'places#add', 'url' => '/api/v1/places/add', 'verb' => 'POST'],
['name' => 'places#delete', 'url' => '/api/v1/places/{placeID}/delete', 'verb' => 'DELETE'],
['name' => 'places#rename', 'url' => '/api/v1/places/{placeID}/rename', 'verb' => 'PATCH'],
['name' => 'places#move', 'url' => '/api/v1/places/{placeID}/move', 'verb' => 'PATCH'],

['name' => 'places#get', 'url' => '/place', 'verb' => 'POST'],
['name' => 'places#addUuid', 'url' => '/place/{placeID}/uuid/add', 'verb' => 'POST'],
['name' => 'places#deleteUuid', 'url' => '/place/{placeID}/uuid/delete', 'verb' => 'POST'],
['name' => 'places#setDescription', 'url' => '/place/{placeID}/description', 'verb' => 'POST'],
['name' => 'places#get', 'url' => '/api/v1/place', 'verb' => 'POST'],
['name' => 'places#addUuid', 'url' => '/api/v1/place/{placeID}/uuid/add', 'verb' => 'POST'],
['name' => 'places#deleteUuid', 'url' => '/api/v1/place/{placeID}/uuid/delete', 'verb' => 'POST'],
['name' => 'places#setDescription', 'url' => '/api/v1/place/{placeID}/description', 'verb' => 'POST'],

['name' => 'search#find', 'url' => '/search', 'verb' => 'POST'],
['name' => 'search#find', 'url' => '/api/v1/search', 'verb' => 'POST'],

['name' => 'tags#getAll', 'url' => '/tags', 'verb' => 'POST'],
['name' => 'tags#getAll', 'url' => '/api/v1/tags', 'verb' => 'POST'],
]
];
4 changes: 2 additions & 2 deletions src/components/Attachments.vue
Original file line number Diff line number Diff line change
Expand Up @@ -337,9 +337,9 @@ export default {

attachmentUrl(attachment) {
if (attachment.instanceid) {
return generateUrl(`/apps/inventory/item/${attachment.itemid}/instance/${attachment.instanceid}/attachment/${attachment.id}/display`)
return generateUrl(`/apps/inventory/api/v1/item/${attachment.itemid}/instance/${attachment.instanceid}/attachment/${attachment.id}/display`)
} else {
return generateUrl(`/apps/inventory/item/${attachment.itemid}/attachment/${attachment.id}/display`)
return generateUrl(`/apps/inventory/api/v1/item/${attachment.itemid}/attachment/${attachment.id}/display`)
}
},

Expand Down
12 changes: 10 additions & 2 deletions src/router.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,16 @@ import ItemsOverview from './views/AppContent/ItemsOverview.vue'
import Tags from './views/AppContent/Tags.vue'
import AppSidebar from './views/AppSidebar.vue'

import { getRootUrl, generateUrl } from '@nextcloud/router'

import { h } from 'vue'
import { createWebHashHistory, createRouter, RouterView } from 'vue-router'
import { createWebHistory, createRouter, RouterView } from 'vue-router'

const webRootWithIndexPHP = getRootUrl() + '/index.php'
const doesURLContainIndexPHP = window.location.pathname.startsWith(webRootWithIndexPHP)
const base = generateUrl('apps/inventory', {}, {
noRewrite: doesURLContainIndexPHP,
})

const routes = [
{ path: '/', redirect: '/folders/' },
Expand Down Expand Up @@ -240,7 +248,7 @@ const routes = [
]

const router = createRouter({
history: createWebHashHistory(),
history: createWebHistory(base),
routes,
})

Expand Down
10 changes: 5 additions & 5 deletions src/store/folders.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ const actions = {
commit('setLoadingFolders', true)
try {
commit('setFolders', { folders: [] })
const response = await Axios.post(generateUrl('apps/inventory/folders'), { path }, { signal })
const response = await Axios.post(generateUrl('apps/inventory/api/v1/folders'), { path }, { signal })
const folders = response.data.map(payload => {
return new Folder(payload)
})
Expand All @@ -145,7 +145,7 @@ const actions = {

async createFolder(context, { name, path }) {
try {
const response = await Axios.post(generateUrl('apps/inventory/folders/add'), { name, path })
const response = await Axios.post(generateUrl('apps/inventory/api/v1/folders/add'), { name, path })
const folder = new Folder(response.data)
context.commit('addFolder', { folder })
} catch {
Expand All @@ -155,7 +155,7 @@ const actions = {

async moveFolder({ commit }, { folderID, newPath }) {
try {
const response = await Axios.patch(generateUrl(`apps/inventory/folders/${folderID}/move`), { path: newPath })
const response = await Axios.patch(generateUrl(`apps/inventory/api/v1/folders/${folderID}/move`), { path: newPath })
commit('deleteFolder', { folder: new Folder(response.data) })
} catch {
console.debug('Could not move the folder.')
Expand All @@ -164,7 +164,7 @@ const actions = {

async deleteFolder(context, folderID) {
try {
const response = await Axios.delete(generateUrl(`apps/inventory/folders/${folderID}/delete`))
const response = await Axios.delete(generateUrl(`apps/inventory/api/v1/folders/${folderID}/delete`))
context.commit('deleteFolder', { folder: new Folder(response.data) })
} catch {
console.debug('Could not delete the folder.')
Expand All @@ -173,7 +173,7 @@ const actions = {

async renameFolder(context, { folderID, newName }) {
try {
const response = await Axios.patch(generateUrl(`apps/inventory/folders/${folderID}/rename`), { newName })
const response = await Axios.patch(generateUrl(`apps/inventory/api/v1/folders/${folderID}/rename`), { newName })
context.commit('updateFolder', { newFolder: new Folder(response.data) })
} catch {
console.debug('Could not rename the folder.')
Expand Down
Loading

0 comments on commit 5a88dfc

Please sign in to comment.