Delete.vue 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. <!--
  2. Bouton Delete avec modale de confirmation de la suppression
  3. -->
  4. <template>
  5. <main>
  6. <v-btn :icon="true" :flat="flat" @click="alertDeleteItem()">
  7. <v-icon>fas fa-trash</v-icon>
  8. </v-btn>
  9. <LazyLayoutDialog :show="showDialog">
  10. <template #dialogType>{{ $t('delete_assistant') }}</template>
  11. <template #dialogTitle>{{ $t('caution') }}</template>
  12. <template #dialogText>
  13. <v-card-text>
  14. <p>{{ $t('confirm_to_delete') }}</p>
  15. </v-card-text>
  16. </template>
  17. <template #dialogBtn>
  18. <v-btn class="mr-4 submitBtn theme-neutral-strong" @click="closeDialog">
  19. {{ $t('cancel') }}
  20. </v-btn>
  21. <v-btn class="mr-4 submitBtn theme-danger" @click="deleteItem">
  22. {{ $t('delete') }}
  23. </v-btn>
  24. </template>
  25. </LazyLayoutDialog>
  26. </main>
  27. </template>
  28. <script setup lang="ts">
  29. import type { Ref, PropType } from 'vue'
  30. import { TYPE_ALERT } from '~/types/enum/enums'
  31. import { useEntityManager } from '~/composables/data/useEntityManager'
  32. import ApiResource from '~/models/ApiResource'
  33. import { usePageStore } from '~/stores/page'
  34. const props = defineProps({
  35. entity: {
  36. type: Object as PropType<ApiResource>,
  37. required: true,
  38. },
  39. flat: {
  40. type: Boolean,
  41. required: false,
  42. default: false,
  43. },
  44. })
  45. const showDialog: Ref<boolean> = ref(false)
  46. const { em } = useEntityManager()
  47. const deleteItem = async () => {
  48. try {
  49. await em.delete(props.entity)
  50. usePageStore().addAlert(TYPE_ALERT.SUCCESS, ['deleteSuccess'])
  51. } catch (error) {
  52. // @ts-expect-error error is supposed to have a message prop
  53. usePageStore().addAlert(TYPE_ALERT.ALERT, [error.message])
  54. throw error
  55. }
  56. showDialog.value = false
  57. }
  58. const alertDeleteItem = () => {
  59. showDialog.value = true
  60. }
  61. const closeDialog = () => {
  62. showDialog.value = false
  63. }
  64. </script>
  65. <style scoped></style>