Delete.vue 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. <!--
  2. Bouton Delete avec modale de confirmation de la suppression
  3. -->
  4. <template>
  5. <main>
  6. <v-btn icon @click="alertDeleteItem()">
  7. <v-icon>mdi-delete</v-icon>
  8. </v-btn>
  9. <lazy-LayoutDialog
  10. :show="showDialog"
  11. >
  12. <template #dialogType>{{ $t('delete_assistant') }}</template>
  13. <template #dialogTitle>{{ $t('attention') }}</template>
  14. <template #dialogText>
  15. <v-card-text>
  16. <p>{{ $t('confirm_to_delete') }}</p>
  17. </v-card-text>
  18. </template>
  19. <template #dialogBtn>
  20. <v-btn class="mr-4 submitBtn ot_grey ot_white--text" @click="closeDialog">
  21. {{ $t('cancel') }}
  22. </v-btn>
  23. <v-btn class="mr-4 submitBtn ot_danger ot_white--text" @click="deleteItem">
  24. {{ $t('delete') }}
  25. </v-btn>
  26. </template>
  27. </lazy-LayoutDialog>
  28. </main>
  29. </template>
  30. <script lang="ts">
  31. import {defineComponent, ref, Ref, useContext} from '@nuxtjs/composition-api'
  32. import {DataDeleterArgs} from '~/types/interfaces'
  33. import {TYPE_ALERT} from '~/types/enums'
  34. import Page from "~/services/store/page";
  35. export default defineComponent({
  36. props: {
  37. deleteArgs: {
  38. type: Object as () => DataDeleterArgs,
  39. required: true
  40. }
  41. },
  42. setup (props) {
  43. const { $dataDeleter, store, app: { i18n } } = useContext()
  44. const showDialog: Ref<boolean> = ref(false)
  45. const page = new Page(store)
  46. const deleteItem = async () => {
  47. try {
  48. await $dataDeleter.invoke(props.deleteArgs)
  49. page.addAlerts(TYPE_ALERT.SUCCESS, [i18n.t('deleteSuccess') as string])
  50. } catch (error) {
  51. page.addAlerts(TYPE_ALERT.ALERT, [error.message])
  52. }
  53. showDialog.value = false
  54. }
  55. return {
  56. alertDeleteItem: () => { showDialog.value = true },
  57. closeDialog: () => { showDialog.value = false },
  58. deleteItem,
  59. showDialog
  60. }
  61. }
  62. })
  63. </script>
  64. <style scoped>
  65. </style>