AppMessage.vue 1.2KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. <script setup>
  2. import { ref, watch, computed } from 'vue'
  3. import { usePage } from '@inertiajs/inertia-vue3'
  4. const flashMessage = computed(() => usePage().props.value.flash)
  5. const messageDisplay = ref({})
  6. const onClose = () => (messageDisplay.value = { display: 'none' })
  7. watch(
  8. flashMessage,
  9. () => {
  10. messageDisplay.value = { display: '' }
  11. },
  12. { deep: true }
  13. )
  14. </script>
  15. <template>
  16. <div class="grid">
  17. <div class="col-12 lg:col-8">
  18. <Message v-if="$page.props.flash.success" severity="success" :style="messageDisplay" @close="onClose()">
  19. {{ $page.props.flash.success }}
  20. </Message>
  21. <template v-if="$page.props.flash.error || Object.keys($page.props.errors).length > 0">
  22. <Message v-if="$page.props.flash.error" severity="error" :style="messageDisplay" @close="onClose()">
  23. {{ $page.props.flash.error }}
  24. </Message>
  25. <Message v-else severity="error" :style="messageDisplay" @close="onClose()">
  26. <div v-if="Object.keys($page.props.errors).length === 1">Ditemukan satu error pada form</div>
  27. <div v-else>Ditemukan {{ Object.keys($page.props.errors).length }} error pada form</div>
  28. </Message>
  29. </template>
  30. </div>
  31. </div>
  32. </template>