main
vue 128 lines 3.17 KB
Raw
1 <template>
2 <div class="customer-network-connectors flex flex-col gap-4">
3 <transition name="form-fade" mode="out-in">
4 <div v-if="showForm">
5 <CustomerNetworkConnectorForm
6 :customer-code
7 :customer-name
8 :disabled-ids-list="disabledIds"
9 @submitted="refreshList()"
10 @close="closeForm()"
11 />
12 </div>
13 <div v-else class="flex flex-col gap-4">
14 <div class="flex items-center justify-between gap-4">
15 <n-button size="small" type="primary" @click="openForm()">
16 <template #icon>
17 <Icon :name="AddIcon" :size="14" />
18 </template>
19 Add Network Connector
20 </n-button>
21 </div>
22
23 <n-spin :show="loading">
24 <div class="min-h-52">
25 <template v-if="list.length">
26 <CustomerNetworkConnectorItem
27 v-for="networkConnector of list"
28 :key="networkConnector.id"
29 :network-connector
30 embedded
31 class="item-appear item-appear-bottom item-appear-005 mb-2"
32 @deployed="refreshList()"
33 @deleted="refreshList()"
34 @decommissioned="refreshList()"
35 />
36 </template>
37 <template v-else>
38 <n-empty
39 v-if="!loading"
40 description="No network connectors found"
41 class="h-48 justify-center"
42 />
43 </template>
44 </div>
45 </n-spin>
46 </div>
47 </transition>
48 </div>
49 </template>
50
51 <script setup lang="ts">
52 import type { CustomerNetworkConnector } from "@/types/networkConnectors.d"
53 import { NButton, NEmpty, NSpin, useMessage } from "naive-ui"
54 import { computed, onBeforeMount, ref } from "vue"
55 import Api from "@/api"
56 import Icon from "@/components/common/Icon.vue"
57 import CustomerNetworkConnectorForm from "./CustomerNetworkConnectorForm.vue"
58 import CustomerNetworkConnectorItem from "./CustomerNetworkConnectorItem.vue"
59
60 const { customerCode, customerName } = defineProps<{
61 customerCode: string
62 customerName: string
63 }>()
64
65 const AddIcon = "carbon:add-alt"
66
67 const message = useMessage()
68 const showForm = ref(false)
69 const loading = ref(false)
70 const list = ref<CustomerNetworkConnector[]>([])
71 const disabledIds = computed(() => list.value.map(o => o.network_connector_service_id))
72
73 function getCustomerNetworkConnectors() {
74 loading.value = true
75
76 Api.networkConnectors
77 .getCustomerNetworkConnectors(customerCode)
78 .then(res => {
79 if (res.data.success) {
80 list.value = res.data?.available_network_connectors || []
81 } else {
82 message.warning(res.data?.message || "An error occurred. Please try again later.")
83 }
84 })
85 .catch(err => {
86 message.error(err.response?.data?.message || "An error occurred. Please try again later.")
87 })
88 .finally(() => {
89 loading.value = false
90 })
91 }
92
93 function openForm() {
94 showForm.value = true
95 }
96
97 function closeForm() {
98 showForm.value = false
99 }
100
101 function refreshList() {
102 closeForm()
103 getCustomerNetworkConnectors()
104 }
105
106 onBeforeMount(() => {
107 getCustomerNetworkConnectors()
108 })
109 </script>
110
111 <style lang="scss" scoped>
112 .customer-network-connectors {
113 .form-fade-enter-active,
114 .form-fade-leave-active {
115 transition:
116 opacity 0.2s ease-in-out,
117 transform 0.3s ease-in-out;
118 }
119 .form-fade-enter-from {
120 opacity: 0;
121 transform: translateY(10px);
122 }
123 .form-fade-leave-to {
124 opacity: 0;
125 transform: translateY(-10px);
126 }
127 }
128 </style>