main
vue 63 lines 1.47 KB
Raw
1 <template>
2 <ServicesList
3 v-model:selected="selected"
4 type="integration"
5 :embedded
6 :hide-totals
7 :selectable
8 :disabled-ids-list
9 :loading
10 :list
11 />
12 </template>
13
14 <script setup lang="ts">
15 import type { ServiceItemData } from "../services/types"
16 import { useMessage } from "naive-ui"
17 import { onBeforeMount, ref } from "vue"
18 import Api from "@/api"
19 import ServicesList from "@/components/services/List.vue"
20
21 const { embedded, hideTotals, selectable, disabledIdsList } = defineProps<{
22 embedded?: boolean
23 hideTotals?: boolean
24 selectable?: boolean
25 disabledIdsList?: (string | number)[]
26 }>()
27
28 const selected = defineModel<ServiceItemData | null>("selected", { default: null })
29
30 const message = useMessage()
31 const loading = ref(false)
32 const list = ref<ServiceItemData[]>([])
33
34 function getAvailableIntegrations() {
35 loading.value = true
36
37 Api.integrations
38 .getAvailableIntegrations()
39 .then(res => {
40 if (res.data.success) {
41 list.value = (res.data?.available_integrations || []).map(obj => ({
42 id: obj.id,
43 name: obj.integration_name,
44 description: obj.description,
45 details: obj.integration_details,
46 keys: obj.auth_keys
47 }))
48 } else {
49 message.warning(res.data?.message || "An error occurred. Please try again later.")
50 }
51 })
52 .catch(err => {
53 message.error(err.response?.data?.message || "An error occurred. Please try again later.")
54 })
55 .finally(() => {
56 loading.value = false
57 })
58 }
59
60 onBeforeMount(() => {
61 getAvailableIntegrations()
62 })
63 </script>