From ee46d83bd18b3a76526b672ed31fb11d2759cea9 Mon Sep 17 00:00:00 2001 From: Dominik Pschenitschni Date: Tue, 5 Nov 2024 12:27:49 +0100 Subject: [PATCH] feat: move to file-based routes --- .../src/{views/Home.vue => pages/(home).vue} | 2 + .../{views/404.vue => pages/[[...path]]+.vue} | 0 .../[[auth]]/get-password-reset.vue} | 0 .../Login.vue => pages/[[auth]]/login.vue} | 0 .../[[auth]]/password-reset.vue} | 0 .../[[auth]]/register.vue} | 0 .../src/{views/About.vue => pages/about.vue} | 0 .../auth/openid/[provider].vue} | 0 .../filters/[projectId]/settings/delete.vue} | 0 .../filters/[projectId]/settings/edit.vue} | 0 .../FilterNew.vue => pages/filters/new.vue} | 0 .../labels/(labels).vue} | 0 .../NewLabel.vue => pages/labels/new.vue} | 0 .../migrate/[service].vue} | 0 .../projects/(projects).vue} | 0 .../projects/[[parentProjectId]]/new.vue} | 0 .../projects/[projectId]/[[viewId]].vue} | 0 .../projects/[projectId]/info.vue} | 0 .../[projectId]/settings/archive.vue} | 0 .../[projectId]/settings/background.vue} | 0 .../projects/[projectId]/settings/delete.vue} | 0 .../[projectId]/settings/duplicate.vue} | 0 .../projects/[projectId]/settings/edit.vue} | 0 .../projects/[projectId]/settings/share.vue} | 0 .../projects/[projectId]/settings/views.vue} | 0 .../[projectId]/settings/webhooks.vue} | 0 .../share/[share]/auth.vue} | 0 .../task/[id].vue} | 0 .../ListTeams.vue => pages/teams/(teams).vue} | 0 .../teams/[id]/edit.vue} | 0 .../teams/NewTeam.vue => pages/teams/new.vue} | 0 .../user/export/download.vue} | 0 .../Settings.vue => pages/user/settings.vue} | 0 .../user/settings/api-tokens.vue} | 0 .../user/settings/avatar.vue} | 0 .../user/settings/caldav.vue} | 0 .../user/settings/data-export.vue} | 0 .../user/settings/deletion.vue} | 0 .../user/settings/email-update.vue} | 0 .../user/settings/general.vue} | 0 .../user/settings/migrate.vue} | 0 .../user/settings/password-update.vue} | 0 .../TOTP.vue => pages/user/settings/totp.vue} | 0 frontend/src/router/index.ts | 313 ------------------ frontend/typed-router.d.ts | 43 +++ frontend/vite.config.ts | 17 +- 46 files changed, 61 insertions(+), 314 deletions(-) rename frontend/src/{views/Home.vue => pages/(home).vue} (98%) rename frontend/src/{views/404.vue => pages/[[...path]]+.vue} (100%) rename frontend/src/{views/user/RequestPasswordReset.vue => pages/[[auth]]/get-password-reset.vue} (100%) rename frontend/src/{views/user/Login.vue => pages/[[auth]]/login.vue} (100%) rename frontend/src/{views/user/PasswordReset.vue => pages/[[auth]]/password-reset.vue} (100%) rename frontend/src/{views/user/Register.vue => pages/[[auth]]/register.vue} (100%) rename frontend/src/{views/About.vue => pages/about.vue} (100%) rename frontend/src/{views/user/OpenIdAuth.vue => pages/auth/openid/[provider].vue} (100%) rename frontend/src/{views/filters/FilterDelete.vue => pages/filters/[projectId]/settings/delete.vue} (100%) rename frontend/src/{views/filters/FilterEdit.vue => pages/filters/[projectId]/settings/edit.vue} (100%) rename frontend/src/{views/filters/FilterNew.vue => pages/filters/new.vue} (100%) rename frontend/src/{views/labels/ListLabels.vue => pages/labels/(labels).vue} (100%) rename frontend/src/{views/labels/NewLabel.vue => pages/labels/new.vue} (100%) rename frontend/src/{views/migrate/MigrationHandler.vue => pages/migrate/[service].vue} (100%) rename frontend/src/{views/project/ListProjects.vue => pages/projects/(projects).vue} (100%) rename frontend/src/{views/project/NewProject.vue => pages/projects/[[parentProjectId]]/new.vue} (100%) rename frontend/src/{views/project/ProjectView.vue => pages/projects/[projectId]/[[viewId]].vue} (100%) rename frontend/src/{views/project/ProjectInfo.vue => pages/projects/[projectId]/info.vue} (100%) rename frontend/src/{views/project/settings/ProjectSettingsArchive.vue => pages/projects/[projectId]/settings/archive.vue} (100%) rename frontend/src/{views/project/settings/ProjectSettingsBackground.vue => pages/projects/[projectId]/settings/background.vue} (100%) rename frontend/src/{views/project/settings/ProjectSettingsDelete.vue => pages/projects/[projectId]/settings/delete.vue} (100%) rename frontend/src/{views/project/settings/ProjectSettingsDuplicate.vue => pages/projects/[projectId]/settings/duplicate.vue} (100%) rename frontend/src/{views/project/settings/ProjectSettingsEdit.vue => pages/projects/[projectId]/settings/edit.vue} (100%) rename frontend/src/{views/project/settings/ProjectSettingsShare.vue => pages/projects/[projectId]/settings/share.vue} (100%) rename frontend/src/{views/project/settings/ProjectSettingsViews.vue => pages/projects/[projectId]/settings/views.vue} (100%) rename frontend/src/{views/project/settings/ProjectSettingsWebhooks.vue => pages/projects/[projectId]/settings/webhooks.vue} (100%) rename frontend/src/{views/sharing/LinkSharingAuth.vue => pages/share/[share]/auth.vue} (100%) rename frontend/src/{views/tasks/TaskDetailView.vue => pages/task/[id].vue} (100%) rename frontend/src/{views/teams/ListTeams.vue => pages/teams/(teams).vue} (100%) rename frontend/src/{views/teams/EditTeam.vue => pages/teams/[id]/edit.vue} (100%) rename frontend/src/{views/teams/NewTeam.vue => pages/teams/new.vue} (100%) rename frontend/src/{views/user/DataExportDownload.vue => pages/user/export/download.vue} (100%) rename frontend/src/{views/user/Settings.vue => pages/user/settings.vue} (100%) rename frontend/src/{views/user/settings/ApiTokens.vue => pages/user/settings/api-tokens.vue} (100%) rename frontend/src/{views/user/settings/Avatar.vue => pages/user/settings/avatar.vue} (100%) rename frontend/src/{views/user/settings/Caldav.vue => pages/user/settings/caldav.vue} (100%) rename frontend/src/{views/user/settings/DataExport.vue => pages/user/settings/data-export.vue} (100%) rename frontend/src/{views/user/settings/Deletion.vue => pages/user/settings/deletion.vue} (100%) rename frontend/src/{views/user/settings/EmailUpdate.vue => pages/user/settings/email-update.vue} (100%) rename frontend/src/{views/user/settings/General.vue => pages/user/settings/general.vue} (100%) rename frontend/src/{views/migrate/Migration.vue => pages/user/settings/migrate.vue} (100%) rename frontend/src/{views/user/settings/PasswordUpdate.vue => pages/user/settings/password-update.vue} (100%) rename frontend/src/{views/user/settings/TOTP.vue => pages/user/settings/totp.vue} (100%) diff --git a/frontend/src/views/Home.vue b/frontend/src/pages/(home).vue similarity index 98% rename from frontend/src/views/Home.vue rename to frontend/src/pages/(home).vue index 87fc26c82..7240a6544 100644 --- a/frontend/src/views/Home.vue +++ b/frontend/src/pages/(home).vue @@ -73,6 +73,8 @@ import {useConfigStore} from '@/stores/config' import {useAuthStore} from '@/stores/auth' import {useTaskStore} from '@/stores/tasks' +definePage({ name: 'home' }) + const salutation = useDaytimeSalutation() const baseStore = useBaseStore() diff --git a/frontend/src/views/404.vue b/frontend/src/pages/[[...path]]+.vue similarity index 100% rename from frontend/src/views/404.vue rename to frontend/src/pages/[[...path]]+.vue diff --git a/frontend/src/views/user/RequestPasswordReset.vue b/frontend/src/pages/[[auth]]/get-password-reset.vue similarity index 100% rename from frontend/src/views/user/RequestPasswordReset.vue rename to frontend/src/pages/[[auth]]/get-password-reset.vue diff --git a/frontend/src/views/user/Login.vue b/frontend/src/pages/[[auth]]/login.vue similarity index 100% rename from frontend/src/views/user/Login.vue rename to frontend/src/pages/[[auth]]/login.vue diff --git a/frontend/src/views/user/PasswordReset.vue b/frontend/src/pages/[[auth]]/password-reset.vue similarity index 100% rename from frontend/src/views/user/PasswordReset.vue rename to frontend/src/pages/[[auth]]/password-reset.vue diff --git a/frontend/src/views/user/Register.vue b/frontend/src/pages/[[auth]]/register.vue similarity index 100% rename from frontend/src/views/user/Register.vue rename to frontend/src/pages/[[auth]]/register.vue diff --git a/frontend/src/views/About.vue b/frontend/src/pages/about.vue similarity index 100% rename from frontend/src/views/About.vue rename to frontend/src/pages/about.vue diff --git a/frontend/src/views/user/OpenIdAuth.vue b/frontend/src/pages/auth/openid/[provider].vue similarity index 100% rename from frontend/src/views/user/OpenIdAuth.vue rename to frontend/src/pages/auth/openid/[provider].vue diff --git a/frontend/src/views/filters/FilterDelete.vue b/frontend/src/pages/filters/[projectId]/settings/delete.vue similarity index 100% rename from frontend/src/views/filters/FilterDelete.vue rename to frontend/src/pages/filters/[projectId]/settings/delete.vue diff --git a/frontend/src/views/filters/FilterEdit.vue b/frontend/src/pages/filters/[projectId]/settings/edit.vue similarity index 100% rename from frontend/src/views/filters/FilterEdit.vue rename to frontend/src/pages/filters/[projectId]/settings/edit.vue diff --git a/frontend/src/views/filters/FilterNew.vue b/frontend/src/pages/filters/new.vue similarity index 100% rename from frontend/src/views/filters/FilterNew.vue rename to frontend/src/pages/filters/new.vue diff --git a/frontend/src/views/labels/ListLabels.vue b/frontend/src/pages/labels/(labels).vue similarity index 100% rename from frontend/src/views/labels/ListLabels.vue rename to frontend/src/pages/labels/(labels).vue diff --git a/frontend/src/views/labels/NewLabel.vue b/frontend/src/pages/labels/new.vue similarity index 100% rename from frontend/src/views/labels/NewLabel.vue rename to frontend/src/pages/labels/new.vue diff --git a/frontend/src/views/migrate/MigrationHandler.vue b/frontend/src/pages/migrate/[service].vue similarity index 100% rename from frontend/src/views/migrate/MigrationHandler.vue rename to frontend/src/pages/migrate/[service].vue diff --git a/frontend/src/views/project/ListProjects.vue b/frontend/src/pages/projects/(projects).vue similarity index 100% rename from frontend/src/views/project/ListProjects.vue rename to frontend/src/pages/projects/(projects).vue diff --git a/frontend/src/views/project/NewProject.vue b/frontend/src/pages/projects/[[parentProjectId]]/new.vue similarity index 100% rename from frontend/src/views/project/NewProject.vue rename to frontend/src/pages/projects/[[parentProjectId]]/new.vue diff --git a/frontend/src/views/project/ProjectView.vue b/frontend/src/pages/projects/[projectId]/[[viewId]].vue similarity index 100% rename from frontend/src/views/project/ProjectView.vue rename to frontend/src/pages/projects/[projectId]/[[viewId]].vue diff --git a/frontend/src/views/project/ProjectInfo.vue b/frontend/src/pages/projects/[projectId]/info.vue similarity index 100% rename from frontend/src/views/project/ProjectInfo.vue rename to frontend/src/pages/projects/[projectId]/info.vue diff --git a/frontend/src/views/project/settings/ProjectSettingsArchive.vue b/frontend/src/pages/projects/[projectId]/settings/archive.vue similarity index 100% rename from frontend/src/views/project/settings/ProjectSettingsArchive.vue rename to frontend/src/pages/projects/[projectId]/settings/archive.vue diff --git a/frontend/src/views/project/settings/ProjectSettingsBackground.vue b/frontend/src/pages/projects/[projectId]/settings/background.vue similarity index 100% rename from frontend/src/views/project/settings/ProjectSettingsBackground.vue rename to frontend/src/pages/projects/[projectId]/settings/background.vue diff --git a/frontend/src/views/project/settings/ProjectSettingsDelete.vue b/frontend/src/pages/projects/[projectId]/settings/delete.vue similarity index 100% rename from frontend/src/views/project/settings/ProjectSettingsDelete.vue rename to frontend/src/pages/projects/[projectId]/settings/delete.vue diff --git a/frontend/src/views/project/settings/ProjectSettingsDuplicate.vue b/frontend/src/pages/projects/[projectId]/settings/duplicate.vue similarity index 100% rename from frontend/src/views/project/settings/ProjectSettingsDuplicate.vue rename to frontend/src/pages/projects/[projectId]/settings/duplicate.vue diff --git a/frontend/src/views/project/settings/ProjectSettingsEdit.vue b/frontend/src/pages/projects/[projectId]/settings/edit.vue similarity index 100% rename from frontend/src/views/project/settings/ProjectSettingsEdit.vue rename to frontend/src/pages/projects/[projectId]/settings/edit.vue diff --git a/frontend/src/views/project/settings/ProjectSettingsShare.vue b/frontend/src/pages/projects/[projectId]/settings/share.vue similarity index 100% rename from frontend/src/views/project/settings/ProjectSettingsShare.vue rename to frontend/src/pages/projects/[projectId]/settings/share.vue diff --git a/frontend/src/views/project/settings/ProjectSettingsViews.vue b/frontend/src/pages/projects/[projectId]/settings/views.vue similarity index 100% rename from frontend/src/views/project/settings/ProjectSettingsViews.vue rename to frontend/src/pages/projects/[projectId]/settings/views.vue diff --git a/frontend/src/views/project/settings/ProjectSettingsWebhooks.vue b/frontend/src/pages/projects/[projectId]/settings/webhooks.vue similarity index 100% rename from frontend/src/views/project/settings/ProjectSettingsWebhooks.vue rename to frontend/src/pages/projects/[projectId]/settings/webhooks.vue diff --git a/frontend/src/views/sharing/LinkSharingAuth.vue b/frontend/src/pages/share/[share]/auth.vue similarity index 100% rename from frontend/src/views/sharing/LinkSharingAuth.vue rename to frontend/src/pages/share/[share]/auth.vue diff --git a/frontend/src/views/tasks/TaskDetailView.vue b/frontend/src/pages/task/[id].vue similarity index 100% rename from frontend/src/views/tasks/TaskDetailView.vue rename to frontend/src/pages/task/[id].vue diff --git a/frontend/src/views/teams/ListTeams.vue b/frontend/src/pages/teams/(teams).vue similarity index 100% rename from frontend/src/views/teams/ListTeams.vue rename to frontend/src/pages/teams/(teams).vue diff --git a/frontend/src/views/teams/EditTeam.vue b/frontend/src/pages/teams/[id]/edit.vue similarity index 100% rename from frontend/src/views/teams/EditTeam.vue rename to frontend/src/pages/teams/[id]/edit.vue diff --git a/frontend/src/views/teams/NewTeam.vue b/frontend/src/pages/teams/new.vue similarity index 100% rename from frontend/src/views/teams/NewTeam.vue rename to frontend/src/pages/teams/new.vue diff --git a/frontend/src/views/user/DataExportDownload.vue b/frontend/src/pages/user/export/download.vue similarity index 100% rename from frontend/src/views/user/DataExportDownload.vue rename to frontend/src/pages/user/export/download.vue diff --git a/frontend/src/views/user/Settings.vue b/frontend/src/pages/user/settings.vue similarity index 100% rename from frontend/src/views/user/Settings.vue rename to frontend/src/pages/user/settings.vue diff --git a/frontend/src/views/user/settings/ApiTokens.vue b/frontend/src/pages/user/settings/api-tokens.vue similarity index 100% rename from frontend/src/views/user/settings/ApiTokens.vue rename to frontend/src/pages/user/settings/api-tokens.vue diff --git a/frontend/src/views/user/settings/Avatar.vue b/frontend/src/pages/user/settings/avatar.vue similarity index 100% rename from frontend/src/views/user/settings/Avatar.vue rename to frontend/src/pages/user/settings/avatar.vue diff --git a/frontend/src/views/user/settings/Caldav.vue b/frontend/src/pages/user/settings/caldav.vue similarity index 100% rename from frontend/src/views/user/settings/Caldav.vue rename to frontend/src/pages/user/settings/caldav.vue diff --git a/frontend/src/views/user/settings/DataExport.vue b/frontend/src/pages/user/settings/data-export.vue similarity index 100% rename from frontend/src/views/user/settings/DataExport.vue rename to frontend/src/pages/user/settings/data-export.vue diff --git a/frontend/src/views/user/settings/Deletion.vue b/frontend/src/pages/user/settings/deletion.vue similarity index 100% rename from frontend/src/views/user/settings/Deletion.vue rename to frontend/src/pages/user/settings/deletion.vue diff --git a/frontend/src/views/user/settings/EmailUpdate.vue b/frontend/src/pages/user/settings/email-update.vue similarity index 100% rename from frontend/src/views/user/settings/EmailUpdate.vue rename to frontend/src/pages/user/settings/email-update.vue diff --git a/frontend/src/views/user/settings/General.vue b/frontend/src/pages/user/settings/general.vue similarity index 100% rename from frontend/src/views/user/settings/General.vue rename to frontend/src/pages/user/settings/general.vue diff --git a/frontend/src/views/migrate/Migration.vue b/frontend/src/pages/user/settings/migrate.vue similarity index 100% rename from frontend/src/views/migrate/Migration.vue rename to frontend/src/pages/user/settings/migrate.vue diff --git a/frontend/src/views/user/settings/PasswordUpdate.vue b/frontend/src/pages/user/settings/password-update.vue similarity index 100% rename from frontend/src/views/user/settings/PasswordUpdate.vue rename to frontend/src/pages/user/settings/password-update.vue diff --git a/frontend/src/views/user/settings/TOTP.vue b/frontend/src/pages/user/settings/totp.vue similarity index 100% rename from frontend/src/views/user/settings/TOTP.vue rename to frontend/src/pages/user/settings/totp.vue diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 3afdf2525..9d4d6bb7e 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -11,11 +11,6 @@ import {LINK_SHARE_HASH_PREFIX} from '@/constants/linkShareHash' import {useAuthStore} from '@/stores/auth' import {useBaseStore} from '@/stores/base' -import Register from '@/views/user/Register.vue' -import LinkSharingAuth from '@/views/sharing/LinkSharingAuth.vue' - -import NotFoundComponent from '@/views/404.vue' - const router = createRouter({ history: createWebHistory(import.meta.env.BASE_URL), scrollBehavior(to, from, savedPosition) { @@ -34,141 +29,6 @@ const router = createRouter({ }, routes: [ ...routes, - { - path: '/', - name: 'home', - component: () => import('@/views/Home.vue'), - }, - { - path: '/:pathMatch(.*)*', - name: 'not-found', - component: NotFoundComponent, - }, - // if you omit the last `*`, the `/` character in params will be encoded when resolving or pushing - { - path: '/:pathMatch(.*)', - name: 'bad-not-found', - component: NotFoundComponent, - }, - { - path: '/login', - name: 'user.login', - component: () => import('@/views/user/Login.vue'), - meta: { - title: 'user.auth.login', - }, - }, - { - path: '/get-password-reset', - name: 'user.password-reset.request', - component: () => import('@/views/user/RequestPasswordReset.vue'), - meta: { - title: 'user.auth.resetPassword', - }, - }, - { - path: '/password-reset', - name: 'user.password-reset.reset', - component: () => import('@/views/user/PasswordReset.vue'), - meta: { - title: 'user.auth.resetPassword', - }, - }, - { - path: '/register', - name: 'user.register', - // FIXME: use dynamic imports - // component: () => import('@/views/user/Register.vue'), - component: Register, - meta: { - title: 'user.auth.createAccount', - }, - }, - { - path: '/user/settings', - name: 'user.settings', - component: () => import('@/views/user/Settings.vue'), - redirect: {name: 'user.settings.general'}, - children: [ - { - path: '/user/settings/avatar', - name: 'user.settings.avatar', - component: () => import('@/views/user/settings/Avatar.vue'), - }, - { - path: '/user/settings/caldav', - name: 'user.settings.caldav', - component: () => import('@/views/user/settings/Caldav.vue'), - }, - { - path: '/user/settings/data-export', - name: 'user.settings.data-export', - component: () => import('@/views/user/settings/DataExport.vue'), - }, - { - path: '/user/settings/deletion', - name: 'user.settings.deletion', - component: () => import('@/views/user/settings/Deletion.vue'), - }, - { - path: '/user/settings/email-update', - name: 'user.settings.email-update', - component: () => import('@/views/user/settings/EmailUpdate.vue'), - }, - { - path: '/user/settings/general', - name: 'user.settings.general', - component: () => import('@/views/user/settings/General.vue'), - }, - { - path: '/user/settings/password-update', - name: 'user.settings.password-update', - component: () => import('@/views/user/settings/PasswordUpdate.vue'), - }, - { - path: '/user/settings/totp', - name: 'user.settings.totp', - component: () => import('@/views/user/settings/TOTP.vue'), - }, - { - path: '/user/settings/api-tokens', - name: 'user.settings.apiTokens', - component: () => import('@/views/user/settings/ApiTokens.vue'), - }, - { - path: '/user/settings/migrate', - name: 'migrate.start', - component: () => import('@/views/migrate/Migration.vue'), - }, - { - path: '/migrate/:service', - name: 'migrate.service', - component: () => import('@/views/migrate/MigrationHandler.vue'), - props: route => ({ - service: route.params.service as string, - code: route.query.code as string, - }), - }, - ], - }, - { - path: '/user/export/download', - name: 'user.export.download', - component: () => import('@/views/user/DataExportDownload.vue'), - }, - { - path: '/share/:share/auth', - name: 'link-share.auth', - // FIXME: use dynamic imports - // component: () => import('@/views/sharing/LinkSharingAuth.vue'), - component: LinkSharingAuth, - }, - { - path: '/tasks/:id', - name: 'task.detail', - component: () => import('@/views/tasks/TaskDetailView.vue'), - props: route => ({ taskId: Number(route.params.id as string) }), - }, { path: '/tasks/by/upcoming', name: 'tasks.range', @@ -193,121 +53,6 @@ const router = createRouter({ } }, }, - { - path: '/projects', - name: 'projects.index', - component: () => import('@/views/project/ListProjects.vue'), - }, - { - path: '/projects/new', - name: 'project.create', - component: () => import('@/views/project/NewProject.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/projects/:parentProjectId/new', - name: 'project.createFromParent', - component: () => import('@/views/project/NewProject.vue'), - props: route => ({ parentProjectId: Number(route.params.parentProjectId as string) }), - meta: { - showAsModal: true, - }, - }, - { - path: '/projects/:projectId/settings/edit', - name: 'project.settings.edit', - component: () => import('@/views/project/settings/ProjectSettingsEdit.vue'), - props: route => ({ projectId: Number(route.params.projectId as string) }), - meta: { - showAsModal: true, - }, - }, - { - path: '/projects/:projectId/settings/background', - name: 'project.settings.background', - component: () => import('@/views/project/settings/ProjectSettingsBackground.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/projects/:projectId/settings/duplicate', - name: 'project.settings.duplicate', - component: () => import('@/views/project/settings/ProjectSettingsDuplicate.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/projects/:projectId/settings/share', - name: 'project.settings.share', - component: () => import('@/views/project/settings/ProjectSettingsShare.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/projects/:projectId/settings/webhooks', - name: 'project.settings.webhooks', - component: () => import('@/views/project/settings/ProjectSettingsWebhooks.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/projects/:projectId/settings/delete', - name: 'project.settings.delete', - component: () => import('@/views/project/settings/ProjectSettingsDelete.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/projects/:projectId/settings/archive', - name: 'project.settings.archive', - component: () => import('@/views/project/settings/ProjectSettingsArchive.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/projects/:projectId/settings/views', - name: 'project.settings.views', - component: () => import('@/views/project/settings/ProjectSettingsViews.vue'), - meta: { - showAsModal: true, - }, - props: route => ({ projectId: Number(route.params.projectId as string) }), - }, - { - path: '/projects/:projectId/settings/edit', - name: 'filter.settings.edit', - component: () => import('@/views/filters/FilterEdit.vue'), - meta: { - showAsModal: true, - }, - props: route => ({ projectId: Number(route.params.projectId as string) }), - }, - { - path: '/projects/:projectId/settings/delete', - name: 'filter.settings.delete', - component: () => import('@/views/filters/FilterDelete.vue'), - meta: { - showAsModal: true, - }, - props: route => ({ projectId: Number(route.params.projectId as string) }), - }, - { - path: '/projects/:projectId/info', - name: 'project.info', - component: () => import('@/views/project/ProjectInfo.vue') , - meta: { - showAsModal: true, - }, - props: route => ({ projectId: Number(route.params.projectId as string) }), - }, { path: '/projects/:projectId', name: 'project.index', @@ -327,64 +72,6 @@ const router = createRouter({ } }, }, - { - path: '/projects/:projectId/:viewId', - name: 'project.view', - component: () => import('@/views/project/ProjectView.vue'), - props: route => ({ - projectId: parseInt(route.params.projectId as string), - viewId: route.params.viewId ? parseInt(route.params.viewId as string): undefined, - }), - }, - { - path: '/teams', - name: 'teams.index', - component: () => import('@/views/teams/ListTeams.vue'), - }, - { - path: '/teams/new', - name: 'teams.create', - component: () => import('@/views/teams/NewTeam.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/teams/:id/edit', - name: 'teams.edit', - component: () => import('@/views/teams/EditTeam.vue'), - }, - { - path: '/labels', - name: 'labels.index', - component: () => import('@/views/labels/ListLabels.vue'), - }, - { - path: '/labels/new', - name: 'labels.create', - component: () => import('@/views/labels/NewLabel.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/filters/new', - name: 'filters.create', - component: () => import('@/views/filters/FilterNew.vue'), - meta: { - showAsModal: true, - }, - }, - { - path: '/auth/openid/:provider', - name: 'openid.auth', - component: () => import('@/views/user/OpenIdAuth.vue'), - }, - { - path: '/about', - name: 'about', - component: () => import('@/views/About.vue'), - }, ], }) diff --git a/frontend/typed-router.d.ts b/frontend/typed-router.d.ts index 507aa9159..766de252c 100644 --- a/frontend/typed-router.d.ts +++ b/frontend/typed-router.d.ts @@ -18,5 +18,48 @@ declare module 'vue-router/auto-routes' { * Route name map generated by unplugin-vue-router */ export interface RouteNamedMap { + '/[[auth]]/get-password-reset': RouteRecordInfo<'/[[auth]]/get-password-reset', '/:auth?/get-password-reset', { auth?: ParamValueZeroOrOne }, { auth?: ParamValueZeroOrOne }>, + '/[[auth]]/login': RouteRecordInfo<'/[[auth]]/login', '/:auth?/login', { auth?: ParamValueZeroOrOne }, { auth?: ParamValueZeroOrOne }>, + '/[[auth]]/password-reset': RouteRecordInfo<'/[[auth]]/password-reset', '/:auth?/password-reset', { auth?: ParamValueZeroOrOne }, { auth?: ParamValueZeroOrOne }>, + '/[[auth]]/register': RouteRecordInfo<'/[[auth]]/register', '/:auth?/register', { auth?: ParamValueZeroOrOne }, { auth?: ParamValueZeroOrOne }>, + '/[[...path]]+': RouteRecordInfo<'/[[...path]]+', '/:path(.*)*', { path?: ParamValueZeroOrMore }, { path?: ParamValueZeroOrMore }>, + 'home': RouteRecordInfo<'home', '/(home)', Record, Record>, + '/about': RouteRecordInfo<'/about', '/about', Record, Record>, + '/auth/openid/[provider]': RouteRecordInfo<'/auth/openid/[provider]', '/auth/openid/:provider', { provider: ParamValue }, { provider: ParamValue }>, + '/filters/[projectId]/settings/delete': RouteRecordInfo<'/filters/[projectId]/settings/delete', '/filters/:projectId/settings/delete', { projectId: ParamValue }, { projectId: ParamValue }>, + '/filters/[projectId]/settings/edit': RouteRecordInfo<'/filters/[projectId]/settings/edit', '/filters/:projectId/settings/edit', { projectId: ParamValue }, { projectId: ParamValue }>, + '/filters/new': RouteRecordInfo<'/filters/new', '/filters/new', Record, Record>, + '/labels/(labels)': RouteRecordInfo<'/labels/(labels)', '/labels/(labels)', Record, Record>, + '/labels/new': RouteRecordInfo<'/labels/new', '/labels/new', Record, Record>, + '/migrate/[service]': RouteRecordInfo<'/migrate/[service]', '/migrate/:service', { service: ParamValue }, { service: ParamValue }>, + '/projects/[[parentProjectId]]/new': RouteRecordInfo<'/projects/[[parentProjectId]]/new', '/projects/:parentProjectId?/new', { parentProjectId?: ParamValueZeroOrOne }, { parentProjectId?: ParamValueZeroOrOne }>, + '/projects/[projectId]/[[viewId]]': RouteRecordInfo<'/projects/[projectId]/[[viewId]]', '/projects/:projectId/:viewId?', { projectId: ParamValue, viewId?: ParamValueZeroOrOne }, { projectId: ParamValue, viewId?: ParamValueZeroOrOne }>, + '/projects/[projectId]/info': RouteRecordInfo<'/projects/[projectId]/info', '/projects/:projectId/info', { projectId: ParamValue }, { projectId: ParamValue }>, + '/projects/[projectId]/settings/archive': RouteRecordInfo<'/projects/[projectId]/settings/archive', '/projects/:projectId/settings/archive', { projectId: ParamValue }, { projectId: ParamValue }>, + '/projects/[projectId]/settings/background': RouteRecordInfo<'/projects/[projectId]/settings/background', '/projects/:projectId/settings/background', { projectId: ParamValue }, { projectId: ParamValue }>, + '/projects/[projectId]/settings/delete': RouteRecordInfo<'/projects/[projectId]/settings/delete', '/projects/:projectId/settings/delete', { projectId: ParamValue }, { projectId: ParamValue }>, + '/projects/[projectId]/settings/duplicate': RouteRecordInfo<'/projects/[projectId]/settings/duplicate', '/projects/:projectId/settings/duplicate', { projectId: ParamValue }, { projectId: ParamValue }>, + '/projects/[projectId]/settings/edit': RouteRecordInfo<'/projects/[projectId]/settings/edit', '/projects/:projectId/settings/edit', { projectId: ParamValue }, { projectId: ParamValue }>, + '/projects/[projectId]/settings/share': RouteRecordInfo<'/projects/[projectId]/settings/share', '/projects/:projectId/settings/share', { projectId: ParamValue }, { projectId: ParamValue }>, + '/projects/[projectId]/settings/views': RouteRecordInfo<'/projects/[projectId]/settings/views', '/projects/:projectId/settings/views', { projectId: ParamValue }, { projectId: ParamValue }>, + '/projects/[projectId]/settings/webhooks': RouteRecordInfo<'/projects/[projectId]/settings/webhooks', '/projects/:projectId/settings/webhooks', { projectId: ParamValue }, { projectId: ParamValue }>, + '/projects/(projects)': RouteRecordInfo<'/projects/(projects)', '/projects/(projects)', Record, Record>, + '/share/[share]/auth': RouteRecordInfo<'/share/[share]/auth', '/share/:share/auth', { share: ParamValue }, { share: ParamValue }>, + '/task/[id]': RouteRecordInfo<'/task/[id]', '/task/:id', { id: ParamValue }, { id: ParamValue }>, + '/teams/[id]/edit': RouteRecordInfo<'/teams/[id]/edit', '/teams/:id/edit', { id: ParamValue }, { id: ParamValue }>, + '/teams/(teams)': RouteRecordInfo<'/teams/(teams)', '/teams/(teams)', Record, Record>, + '/teams/new': RouteRecordInfo<'/teams/new', '/teams/new', Record, Record>, + '/user/export/download': RouteRecordInfo<'/user/export/download', '/user/export/download', Record, Record>, + '/user/settings': RouteRecordInfo<'/user/settings', '/user/settings', Record, Record>, + '/user/settings/api-tokens': RouteRecordInfo<'/user/settings/api-tokens', '/user/settings/api-tokens', Record, Record>, + '/user/settings/avatar': RouteRecordInfo<'/user/settings/avatar', '/user/settings/avatar', Record, Record>, + '/user/settings/caldav': RouteRecordInfo<'/user/settings/caldav', '/user/settings/caldav', Record, Record>, + '/user/settings/data-export': RouteRecordInfo<'/user/settings/data-export', '/user/settings/data-export', Record, Record>, + '/user/settings/deletion': RouteRecordInfo<'/user/settings/deletion', '/user/settings/deletion', Record, Record>, + '/user/settings/email-update': RouteRecordInfo<'/user/settings/email-update', '/user/settings/email-update', Record, Record>, + '/user/settings/general': RouteRecordInfo<'/user/settings/general', '/user/settings/general', Record, Record>, + '/user/settings/migrate': RouteRecordInfo<'/user/settings/migrate', '/user/settings/migrate', Record, Record>, + '/user/settings/password-update': RouteRecordInfo<'/user/settings/password-update', '/user/settings/password-update', Record, Record>, + '/user/settings/totp': RouteRecordInfo<'/user/settings/totp', '/user/settings/totp', Record, Record>, } } diff --git a/frontend/vite.config.ts b/frontend/vite.config.ts index bcab21dbd..c84100a7d 100644 --- a/frontend/vite.config.ts +++ b/frontend/vite.config.ts @@ -101,7 +101,22 @@ export default defineConfig(({mode}) => { }, }, plugins: [ - VueRouter(), + VueRouter({ + // FIXME: use dynamic imports for these components + importMode: (filePath) => { + const syncImports = [ + pathSrc + '/pages/[[auth]]/register.vue', + pathSrc + '/pages/share/[share]/auth.vue', + ] + + if (syncImports.includes(filePath)) { + console.log('sync') + return 'sync' + } + + return 'async' + }, + }), vue({ script: { propsDestructure: true,