AppFlashMessages.vue 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. <script setup>
  2. import { ref, watch, computed } from 'vue'
  3. import { usePage } from '@inertiajs/inertia-vue3'
  4. const show = ref(true)
  5. const flashMessage = computed(() => usePage().props.value.flash)
  6. watch(
  7. flashMessage,
  8. () => {
  9. show.value = true
  10. },
  11. { deep: true }
  12. )
  13. </script>
  14. <template>
  15. <CRow>
  16. <CCol md="8">
  17. <CAlert
  18. v-if="$page.props.flash.success && show"
  19. color="success"
  20. dismissible
  21. @close="show = false"
  22. class="d-flex align-items-center"
  23. >
  24. <CIcon icon="cil-check-circle" class="flex-shrink-0 me-2" width="24" height="24" />
  25. <div>{{ $page.props.flash.success }}</div>
  26. </CAlert>
  27. <CAlert
  28. v-if="($page.props.flash.error || Object.keys($page.props.errors).length > 0) && show"
  29. color="danger"
  30. dismissible
  31. @close="show = false"
  32. class="d-flex align-items-center"
  33. >
  34. <CIcon icon="cil-x-circle" class="flex-shrink-0 me-2" width="24" height="24" />
  35. <div v-if="$page.props.flash.error">{{ $page.props.flash.error }}</div>
  36. <div v-else>
  37. <div v-if="Object.keys($page.props.errors).length === 1">Ditemukan satu error pada form</div>
  38. <div v-else>Ditemukan {{ Object.keys($page.props.errors).length }} error pada form</div>
  39. </div>
  40. </CAlert>
  41. </CCol>
  42. </CRow>
  43. </template>