Delete.vue 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  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 v-slot:dialogText>
  13. <v-card-title class="text-h5 grey lighten-2">
  14. {{ $t('attention') }}
  15. </v-card-title>
  16. <v-card-text>
  17. <br>
  18. <p>{{ $t('confirm_to_delete') }}</p>
  19. </v-card-text>
  20. </template>
  21. <template v-slot:dialogBtn>
  22. <v-btn class="mr-4 submitBtn ot_grey ot_white--text" @click="closeDialog">
  23. {{ $t('cancel') }}
  24. </v-btn>
  25. <v-btn class="mr-4 submitBtn ot_danger ot_white--text" @click="deleteItem">
  26. {{ $t('delete') }}
  27. </v-btn>
  28. </template>
  29. </lazy-LayoutDialog>
  30. </main>
  31. </template>
  32. <script lang="ts">
  33. import {defineComponent, ref, Ref, useContext} from '@nuxtjs/composition-api'
  34. import {alert, DataDeleterArgs} from '~/types/interfaces'
  35. import {TYPE_ALERT} from '~/types/enums'
  36. import Page from "~/services/store/page";
  37. export default defineComponent({
  38. props: {
  39. deleteArgs: {
  40. type: Object as () => DataDeleterArgs,
  41. required: true
  42. }
  43. },
  44. setup (props) {
  45. const { $dataDeleter, store, app: { i18n } } = useContext()
  46. const showDialog: Ref<boolean> = ref(false)
  47. const page = new Page(store)
  48. const deleteItem = async () => {
  49. try {
  50. await $dataDeleter.invoke(props.deleteArgs)
  51. page.addAlerts(TYPE_ALERT.SUCCESS, [i18n.t('deleteSuccess') as string])
  52. } catch (error) {
  53. page.addAlerts(TYPE_ALERT.ALERT, [error.message])
  54. }
  55. showDialog.value = false
  56. }
  57. return {
  58. alertDeleteItem: () => { showDialog.value = true },
  59. closeDialog: () => { showDialog.value = false },
  60. deleteItem,
  61. showDialog
  62. }
  63. }
  64. })
  65. </script>
  66. <style scoped>
  67. </style>