Content.vue 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <!-- Message d'alerte -->
  2. <template>
  3. <v-alert
  4. v-model="show"
  5. :type="alert.type"
  6. class="position"
  7. border="left"
  8. width="400"
  9. dismissible
  10. transition="fade-transition"
  11. @mouseover="onMouseOver"
  12. @mouseout="onMouseOut"
  13. >
  14. {{ $t(alert.message) }}
  15. </v-alert>
  16. </template>
  17. <script lang="ts">
  18. import { defineComponent, ref, Ref } from '@vue/composition-api'
  19. import { useContext } from '@nuxtjs/composition-api'
  20. import { alert } from '~/types/interfaces'
  21. export default defineComponent({
  22. props: {
  23. alert: {
  24. type: Object as () => alert,
  25. required: true
  26. }
  27. },
  28. setup () {
  29. const { store } = useContext()
  30. const show: Ref<boolean> = ref(true)
  31. let timeout: any = null
  32. const clearAlert = (time: number = 2000) => {
  33. timeout = setTimeout(() => {
  34. show.value = false
  35. store.dispatch('page/removeSlowlyAlert')
  36. }, time)
  37. }
  38. const onMouseOver = () => {
  39. clearTimeout(timeout)
  40. }
  41. const onMouseOut = () => {
  42. clearAlert(1000)
  43. }
  44. clearAlert()
  45. return {
  46. show,
  47. onMouseOver,
  48. onMouseOut
  49. }
  50. }
  51. })
  52. </script>
  53. <style scoped>
  54. </style>