From f705d2366c7849c5b423e620d77c7af0b578cbb2 Mon Sep 17 00:00:00 2001 From: kolaente Date: Wed, 12 Apr 2023 12:18:11 +0200 Subject: [PATCH] chore: move duplicate project logic to composable --- src/stores/projects.ts | 25 ++++++++++++++-- src/views/project/settings/duplicate.vue | 36 ++++++++---------------- 2 files changed, 33 insertions(+), 28 deletions(-) diff --git a/src/stores/projects.ts b/src/stores/projects.ts index 39c621445..236df8500 100644 --- a/src/stores/projects.ts +++ b/src/stores/projects.ts @@ -4,6 +4,8 @@ import {useI18n} from 'vue-i18n' import {useRouter} from 'vue-router' import ProjectService from '@/services/project' +import ProjectDuplicateService from '@/services/projectDuplicateService' +import ProjectDuplicateModel from '@/models/projectDuplicateModel' import {setModuleLoading} from '@/stores/helper' import {removeProjectFromHistory} from '@/modules/projectHistory' import {createNewIndexer} from '@/indexes' @@ -201,9 +203,14 @@ export const useProjectStore = defineStore('project', () => { export function useProject(projectId: MaybeRef) { const projectService = shallowReactive(new ProjectService()) - const {loading: isLoading} = toRefs(projectService) + const projectDuplicateService = shallowReactive(new ProjectDuplicateService()) + + const isLoading = computed(() => projectService.loading || projectDuplicateService.loading) const project: IProject = reactive(new ProjectModel()) + const {t} = useI18n({useScope: 'global'}) + const router = useRouter() + const projectStore = useProjectStore() watch( () => unref(projectId), @@ -214,18 +221,30 @@ export function useProject(projectId: MaybeRef) { {immediate: true}, ) - const projectStore = useProjectStore() - async function save() { const updatedProject = await projectStore.updateProject(project) Object.assign(project, updatedProject) success({message: t('project.edit.success')}) } + + async function duplicateProject(parentProjectId: IProject['id']) { + const projectDuplicate = new ProjectDuplicateModel({ + projectId: unref(projectId), + parentProjectId, + }) + + const duplicate = await projectDuplicateService.create(projectDuplicate) + + projectStore.setProject(duplicate.project) + success({message: t('project.duplicate.success')}) + router.push({name: 'project.index', params: {projectId: duplicate.project.id}}) + } return { isLoading: readonly(isLoading), project, save, + duplicateProject, } } diff --git a/src/views/project/settings/duplicate.vue b/src/views/project/settings/duplicate.vue index 83a896780..c957bab9a 100644 --- a/src/views/project/settings/duplicate.vue +++ b/src/views/project/settings/duplicate.vue @@ -3,8 +3,8 @@ :title="$t('project.duplicate.title')" primary-icon="paste" :primary-label="$t('project.duplicate.label')" - @primary="duplicateProject" - :loading="projectDuplicateService.loading" + @primary="duplicate" + :loading="isLoading" >

{{ $t('project.duplicate.text') }}

@@ -12,19 +12,16 @@