main
vue 70 lines 1.85 KB
Raw
1 <template>
2 <div>
3 <n-button-group :size>
4 <n-button :focusable="false" @click="showDetails = true">
5 <template #icon>
6 <Icon name="carbon:view" />
7 </template>
8 View Details
9 </n-button>
10 <n-button :focusable="false" @click="routeCaseDetails(caseId).navigate()">
11 <template #icon>
12 <Icon name="carbon:launch" />
13 </template>
14 </n-button>
15 </n-button-group>
16
17 <n-modal
18 v-model:show="showDetails"
19 title="Case Details"
20 preset="card"
21 display-directive="show"
22 :style="{ maxWidth: 'min(800px, 90vw)', minHeight: 'min(540px, 90vh)', overflow: 'hidden' }"
23 >
24 <CaseDetails
25 :case-id
26 @assigned-to-updated="handleAssignedToUpdated"
27 @status-updated="handleStatusUpdated"
28 @deleted="handleDeleted"
29 />
30 </n-modal>
31 </div>
32 </template>
33
34 <script setup lang="ts">
35 import type { ButtonSize } from "naive-ui"
36 import type { CaseAssignedUpdateSuccessPayload } from "./CaseAssignedSelect.vue"
37 import type { CaseStatusUpdateSuccessPayload } from "./CaseStatusSelect.vue"
38 import { NButton, NButtonGroup, NModal } from "naive-ui"
39 import { ref } from "vue"
40 import Icon from "@/components/common/Icon.vue"
41 import { useNavigation } from "@/composables/common/useNavigation"
42 import CaseDetails from "./CaseDetails"
43
44 defineProps<{
45 caseId: number
46 size?: ButtonSize
47 }>()
48
49 const emit = defineEmits<{
50 (e: "statusUpdated", value: CaseStatusUpdateSuccessPayload): void
51 (e: "assignedToUpdated", value: CaseAssignedUpdateSuccessPayload): void
52 (e: "deleted"): void
53 }>()
54
55 const { routeCaseDetails } = useNavigation()
56 const showDetails = ref(false)
57
58 function handleStatusUpdated(payload: CaseStatusUpdateSuccessPayload) {
59 emit("statusUpdated", payload)
60 }
61
62 function handleAssignedToUpdated(payload: CaseAssignedUpdateSuccessPayload) {
63 emit("assignedToUpdated", payload)
64 }
65
66 function handleDeleted() {
67 showDetails.value = false
68 emit("deleted")
69 }
70 </script>