/
settings.vue
94 lines (83 loc) · 2.69 KB
/
settings.vue
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
<template>
<VContainer class="h-100 pt-10">
<VRow>
<VCol cols="3">
<Sidebar @action="onActionClick" />
</VCol>
<VCol class="pl-8" cols="9">
<VSheet color="transparent" rounded="lg">
<NuxtPage />
</VSheet>
</VCol>
</VRow>
<CloneModal v-if="showCloneModal" @close="showCloneModal = false" />
<ExportDialog
v-if="showExportModal"
:repository="currentRepositoryStore.repository as Repository"
@close="showExportModal = false"
/>
<ProgressDialog
:show="publishUtils.isPublishing.value"
:status="publishPercentage"
/>
</VContainer>
<AppFooter />
</template>
<script lang="ts" setup>
import AppFooter from '@/components/common/AppFooter.vue';
import CloneModal from '@/components/repository/Settings/CloneModal.vue';
import ExportDialog from '@/components/repository/Settings/ExportModal.vue';
import ProgressDialog from '@/components/common/ProgressDialog.vue';
import Sidebar from '@/components/repository/Settings/Sidebar.vue';
import type { Repository } from '~/api/interfaces/repository';
import { useConfirmationDialog } from '@/composables/useConfirmationDialog';
import { useCurrentRepository } from '@/stores/current-repository';
import { usePublishActivity } from '@/composables/usePublishActivity';
import { useRepositoryStore } from '@/stores/repository';
definePageMeta({
name: 'repository-settings',
});
const repositoryStore = useRepositoryStore();
const currentRepositoryStore = useCurrentRepository();
const publishUtils = usePublishActivity();
const confirmationDialog = useConfirmationDialog();
const showCloneModal = ref(false);
const showExportModal = ref(false);
const publishPercentage = computed(
() => publishUtils.status.value.progress * 100,
);
const clone = () => {
showCloneModal.value = true;
};
const publishRepository = () => {
publishUtils.confirmPublishing(currentRepositoryStore.outlineActivities);
};
const exportRepository = () => {
showExportModal.value = true;
};
const showDeleteConfirmation = () => {
const repository = currentRepositoryStore.repository as Repository;
const { id, name } = repository;
confirmationDialog({
title: 'Delete repository?',
message: `Are you sure you want to delete repository ${name}?`,
action: async () => {
await repositoryStore.remove(id);
navigateTo('/');
},
});
};
const onActionClick = (name: string) => {
const actions = {
publish: publishRepository,
clone: clone,
export: exportRepository,
delete: showDeleteConfirmation,
} as any;
actions[name]();
};
onMounted(() => {
if (currentRepositoryStore?.repository?.hasAdminAccess) return;
navigateTo({ name: 'catalog' });
});
</script>