feat: unify project.view & project.index
This commit is contained in:
parent
1803135c17
commit
60f3ee00bc
|
|
@ -37,7 +37,7 @@
|
|||
v-slot="{ Component }"
|
||||
:route="routeWithModal"
|
||||
>
|
||||
<keep-alive :include="['project.view']">
|
||||
<keep-alive :include="['project']">
|
||||
<component :is="Component" />
|
||||
</keep-alive>
|
||||
</RouterView>
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@
|
|||
/>
|
||||
</BaseButton>
|
||||
<BaseButton
|
||||
:to="{ name: 'project.index', params: { projectId: project.id} }"
|
||||
:to="{ name: 'project', params: { projectId: project.id} }"
|
||||
class="list-menu-link"
|
||||
:class="{'router-link-exact-active': currentProject?.id === project.id}"
|
||||
>
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ export const KEYBOARD_SHORTCUTS : ShortcutGroup[] = [
|
|||
},
|
||||
{
|
||||
title: 'project.kanban.title',
|
||||
available: (route) => route.name === 'project.view',
|
||||
available: (route) => route.name === 'project',
|
||||
shortcuts: [
|
||||
{
|
||||
title: 'keyboardShortcuts.task.done',
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@
|
|||
:key="view.id"
|
||||
class="switch-view-button"
|
||||
:class="{'is-active': view.id === viewId}"
|
||||
:to="{ name: 'project.view', params: { projectId, viewId: view.id } }"
|
||||
:to="{ name: 'project', params: { projectId, viewId: view.id } }"
|
||||
>
|
||||
{{ getViewTitle(view) }}
|
||||
</BaseButton>
|
||||
|
|
|
|||
|
|
@ -37,7 +37,7 @@
|
|||
:aria-label="project.title"
|
||||
:title="textOnlyDescription"
|
||||
:to="{
|
||||
name: 'project.index',
|
||||
name: 'project',
|
||||
params: { projectId: project.id}
|
||||
}"
|
||||
/>
|
||||
|
|
|
|||
|
|
@ -449,7 +449,7 @@ async function doAction(type: ACTION_TYPE, item: DoAction) {
|
|||
case ACTION_TYPE.PROJECT:
|
||||
closeQuickActions()
|
||||
await router.push({
|
||||
name: 'project.index',
|
||||
name: 'project',
|
||||
params: {projectId: (item as DoAction<IProject>).id},
|
||||
})
|
||||
break
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@
|
|||
<RouterLink
|
||||
v-if="showProject && typeof project !== 'undefined'"
|
||||
v-tooltip="$t('task.detail.belongsToProject', {project: project.title})"
|
||||
:to="{ name: 'project.index', params: { projectId: task.projectId } }"
|
||||
:to="{ name: 'project', params: { projectId: task.projectId } }"
|
||||
class="task-project mr-1"
|
||||
:class="{'mr-2': task.hexColor !== ''}"
|
||||
@click.stop
|
||||
|
|
@ -139,7 +139,7 @@
|
|||
<RouterLink
|
||||
v-if="showProjectSeparately"
|
||||
v-tooltip="$t('task.detail.belongsToProject', {project: project.title})"
|
||||
:to="{ name: 'project.index', params: { projectId: task.projectId } }"
|
||||
:to="{ name: 'project', params: { projectId: task.projectId } }"
|
||||
class="task-project"
|
||||
@click.stop
|
||||
>
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ function ganttFiltersToRoute(filters: GanttFilters): RouteLocationRaw {
|
|||
}
|
||||
|
||||
return {
|
||||
name: 'project.view',
|
||||
name: 'project',
|
||||
params: {
|
||||
projectId: filters.projectId,
|
||||
viewId: filters.viewId,
|
||||
|
|
@ -104,7 +104,7 @@ export function useGanttFilters(route: Ref<RouteLocationNormalized>, viewId: Ref
|
|||
ganttGetDefaultFilters,
|
||||
ganttRouteToFilters,
|
||||
ganttFiltersToRoute,
|
||||
['project.view'],
|
||||
['project'],
|
||||
)
|
||||
|
||||
const {
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ export function useRouteWithModal() {
|
|||
}
|
||||
|
||||
const newRoute = {
|
||||
name: 'project.view',
|
||||
name: 'project',
|
||||
params: {
|
||||
projectId: baseStore.currentProject?.id,
|
||||
viewId,
|
||||
|
|
|
|||
|
|
@ -6,7 +6,7 @@ import {useBaseStore} from '@/stores/base'
|
|||
import {useProjectStore} from '@/stores/projects'
|
||||
import {useAuthStore} from '@/stores/auth'
|
||||
|
||||
import {saveProjectView} from '@/helpers/projectView'
|
||||
import {getProjectViewId, saveProjectView} from '@/helpers/projectView'
|
||||
import ProjectService from '@/services/project'
|
||||
|
||||
import ProjectList from '@/components/project/views/ProjectList.vue'
|
||||
|
|
@ -17,6 +17,32 @@ import ProjectKanban from '@/components/project/views/ProjectKanban.vue'
|
|||
import {DEFAULT_PROJECT_VIEW_SETTINGS} from '@/modelTypes/IProjectView'
|
||||
import {saveProjectToHistory} from '@/modules/projectHistory'
|
||||
|
||||
definePage({
|
||||
name: 'project',
|
||||
beforeEnter(to) {
|
||||
if (to.name !== 'project') {
|
||||
throw new Error()
|
||||
}
|
||||
|
||||
const viewIdFromRoute = Number(to.params?.viewId)
|
||||
|
||||
if (!viewIdFromRoute) {
|
||||
return {
|
||||
name: 'project',
|
||||
replace: true,
|
||||
params: {
|
||||
projectId: to.params.projectId,
|
||||
viewId: getProjectViewId(Number(to.params?.projectId)) ?? 0,
|
||||
},
|
||||
}
|
||||
}
|
||||
},
|
||||
props: route => ({
|
||||
projectId: parseInt(route.params.projectId as string),
|
||||
viewId: route.params.viewId ? parseInt(route.params.viewId as string): undefined,
|
||||
}),
|
||||
})
|
||||
|
||||
const props = defineProps<{
|
||||
projectId: number,
|
||||
viewId: number,
|
||||
|
|
@ -100,7 +126,7 @@ function redirectToDefaultViewIfNecessary() {
|
|||
|
||||
if (view) {
|
||||
router.replace({
|
||||
name: 'project.view',
|
||||
name: 'project',
|
||||
params: {
|
||||
projectId: props.projectId,
|
||||
viewId: view.id,
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ function useAuth() {
|
|||
}
|
||||
|
||||
return router.push({
|
||||
name: 'project.index',
|
||||
name: 'project',
|
||||
params: {
|
||||
projectId,
|
||||
},
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
</a>
|
||||
<RouterLink
|
||||
v-else
|
||||
:to="{ name: 'project.index', params: { projectId: p.id } }"
|
||||
:to="{ name: 'project', params: { projectId: p.id } }"
|
||||
>
|
||||
{{ getProjectTitle(p) }}
|
||||
</RouterLink>
|
||||
|
|
@ -881,7 +881,7 @@ const showDeleteModal = ref(false)
|
|||
async function deleteTask() {
|
||||
await taskStore.delete(task.value)
|
||||
success({message: t('task.detail.deleteSuccess')})
|
||||
router.push({name: 'project.index', params: {projectId: task.value.projectId}})
|
||||
router.push({name: 'project', params: {projectId: task.value.projectId}})
|
||||
}
|
||||
|
||||
async function toggleTaskDone() {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ import { routes, handleHotUpdate } from 'vue-router/auto-routes'
|
|||
|
||||
import {saveLastVisited} from '@/helpers/saveLastVisited'
|
||||
|
||||
import {getProjectViewId} from '@/helpers/projectView'
|
||||
import {LINK_SHARE_HASH_PREFIX} from '@/constants/linkShareHash'
|
||||
|
||||
import {useAuthStore} from '@/stores/auth'
|
||||
|
|
@ -40,25 +39,6 @@ const router = createRouter({
|
|||
}
|
||||
},
|
||||
},
|
||||
{
|
||||
path: '/projects/:projectId',
|
||||
name: 'project.index',
|
||||
redirect(to) {
|
||||
const viewId = getProjectViewId(Number(to.params.projectId as string))
|
||||
|
||||
if (viewId) {
|
||||
console.debug('Replaced list view with', viewId)
|
||||
}
|
||||
|
||||
return {
|
||||
name: 'project.view',
|
||||
params: {
|
||||
projectId: parseInt(to.params.projectId as string),
|
||||
viewId: viewId ?? 0,
|
||||
},
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
})
|
||||
|
||||
|
|
|
|||
|
|
@ -87,7 +87,7 @@ export function useSavedFilter(projectId?: MaybeRefOrGetter<IProject['id']>) {
|
|||
async function createFilter() {
|
||||
filter.value = await filterService.create(filter.value)
|
||||
await projectStore.loadAllProjects()
|
||||
router.push({name: 'project.index', params: {projectId: getProjectId(filter.value)}})
|
||||
router.push({name: 'project', params: {projectId: getProjectId(filter.value)}})
|
||||
}
|
||||
|
||||
async function saveFilter() {
|
||||
|
|
|
|||
|
|
@ -150,7 +150,7 @@ export const useProjectStore = defineStore('project', () => {
|
|||
const createdProject = await projectService.create(project)
|
||||
setProject(createdProject)
|
||||
router.push({
|
||||
name: 'project.index',
|
||||
name: 'project',
|
||||
params: { projectId: createdProject.id },
|
||||
})
|
||||
return createdProject
|
||||
|
|
@ -315,7 +315,7 @@ export function useProject(projectId: MaybeRefOrGetter<IProject['id']>) {
|
|||
|
||||
projectStore.setProject(duplicate.duplicatedProject)
|
||||
success({message: t('project.duplicate.success')})
|
||||
router.push({name: 'project.index', params: {projectId: duplicate.duplicatedProject.id}})
|
||||
router.push({name: 'project', params: {projectId: duplicate.duplicatedProject.id}})
|
||||
}
|
||||
|
||||
return {
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ declare module 'vue-router/auto-routes' {
|
|||
'labels.create': RouteRecordInfo<'labels.create', '/labels/new', Record<never, never>, Record<never, never>>,
|
||||
'migrate.service': RouteRecordInfo<'migrate.service', '/migrate/:service', { service: ParamValue<true> }, { service: ParamValue<false> }>,
|
||||
'project.create': RouteRecordInfo<'project.create', '/projects/:parentProjectId?/new', { parentProjectId?: ParamValueZeroOrOne<true> }, { parentProjectId?: ParamValueZeroOrOne<false> }>,
|
||||
'/projects/[projectId]/[[viewId]]': RouteRecordInfo<'/projects/[projectId]/[[viewId]]', '/projects/:projectId/:viewId?', { projectId: ParamValue<true>, viewId?: ParamValueZeroOrOne<true> }, { projectId: ParamValue<false>, viewId?: ParamValueZeroOrOne<false> }>,
|
||||
'project': RouteRecordInfo<'project', '/projects/:projectId/:viewId?', { projectId: ParamValue<true>, viewId?: ParamValueZeroOrOne<true> }, { projectId: ParamValue<false>, viewId?: ParamValueZeroOrOne<false> }>,
|
||||
'project.info': RouteRecordInfo<'project.info', '/projects/:projectId/info', { projectId: ParamValue<true> }, { projectId: ParamValue<false> }>,
|
||||
'project.settings.archive': RouteRecordInfo<'project.settings.archive', '/projects/:projectId/settings/archive', { projectId: ParamValue<true> }, { projectId: ParamValue<false> }>,
|
||||
'project.settings.background': RouteRecordInfo<'project.settings.background', '/projects/:projectId/settings/background', { projectId: ParamValue<true> }, { projectId: ParamValue<false> }>,
|
||||
|
|
|
|||
Loading…
Reference in New Issue