main
vue 66 lines 1.66 KB
Raw
1 <template>
2 <n-popover v-model:show="show" trigger="manual" to="body" content-class="px-0" @clickoutside="closePopup()">
3 <template #trigger>
4 <slot :loading :toggle-popup />
5 </template>
6
7 <div class="flex max-w-80 flex-col gap-2 py-1">
8 <div>This will remove ALL Sigma queries, are you sure you want to proceed?</div>
9
10 <p class="text-right">* It may take several minutes</p>
11
12 <div class="flex justify-between gap-2">
13 <n-button quaternary size="small" @click="closePopup()">Close</n-button>
14 <n-button :loading type="primary" size="small" @click="deleteQueries()">Yes I'm sure</n-button>
15 </div>
16 </div>
17 </n-popover>
18 </template>
19
20 <script setup lang="ts">
21 import { NButton, NPopover, useMessage } from "naive-ui"
22 import { ref } from "vue"
23 import Api from "@/api"
24
25 const emit = defineEmits<{
26 (e: "updated"): void
27 }>()
28
29 const loading = defineModel<boolean | undefined>("loading", { default: false })
30
31 const show = ref(false)
32 const lastShow = ref(Date.now())
33 const message = useMessage()
34
35 function togglePopup() {
36 if (Date.now() - lastShow.value > 500) {
37 show.value = !show.value
38 }
39 }
40
41 function closePopup() {
42 lastShow.value = Date.now()
43 show.value = false
44 }
45
46 function deleteQueries() {
47 loading.value = true
48
49 Api.sigma
50 .deleteAllRules()
51 .then(res => {
52 if (res.data.success) {
53 emit("updated")
54 message.success(res.data?.message || "Sigma queries deleted successfully")
55 } else {
56 message.warning(res.data?.message || "An error occurred. Please try again later.")
57 }
58 })
59 .catch(err => {
60 message.error(err.response?.data?.message || "An error occurred. Please try again later.")
61 })
62 .finally(() => {
63 loading.value = false
64 })
65 }
66 </script>