Delete.vue 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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, useContext, ref, Ref } from '@nuxtjs/composition-api'
  34. import { DataDeleterArgs, alert } from '~/types/interfaces'
  35. import { TYPE_ALERT } from '~/types/enums'
  36. export default defineComponent({
  37. props: {
  38. deleteArgs: {
  39. type: Object as () => DataDeleterArgs,
  40. required: true
  41. }
  42. },
  43. setup (props) {
  44. const { $dataDeleter, store, app: { i18n } } = useContext()
  45. const showDialog: Ref<boolean> = ref(false)
  46. const deleteItem = async () => {
  47. try {
  48. await $dataDeleter.invoke(props.deleteArgs)
  49. const alert: alert = {
  50. type: TYPE_ALERT.SUCCESS,
  51. message: i18n.t('deleteSuccess') as string
  52. }
  53. store.commit('page/setAlert', alert)
  54. } catch (error) {
  55. const alert: alert = {
  56. type: TYPE_ALERT.ALERT,
  57. message: error.message
  58. }
  59. store.commit('page/setAlert', alert)
  60. }
  61. showDialog.value = false
  62. }
  63. return {
  64. alertDeleteItem: () => showDialog.value = true,
  65. closeDialog: () => showDialog.value = false,
  66. deleteItem,
  67. showDialog
  68. }
  69. }
  70. })
  71. </script>
  72. <style scoped>
  73. </style>