Content.vue 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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, useContext } from '@nuxtjs/composition-api'
  19. import { alert } from '~/types/interfaces'
  20. export default defineComponent({
  21. props: {
  22. alert: {
  23. type: Object as () => alert,
  24. required: true
  25. }
  26. },
  27. setup () {
  28. const { store } = useContext()
  29. const show: Ref<boolean> = ref(true)
  30. let timeout: any = null
  31. const clearAlert = (time: number = 2000) => {
  32. timeout = setTimeout(() => {
  33. show.value = false
  34. store.dispatch('page/removeSlowlyAlert')
  35. }, time)
  36. }
  37. const onMouseOver = () => {
  38. clearTimeout(timeout)
  39. }
  40. const onMouseOut = () => {
  41. clearAlert(1000)
  42. }
  43. clearAlert()
  44. return {
  45. show,
  46. onMouseOver,
  47. onMouseOut
  48. }
  49. }
  50. })
  51. </script>
  52. <style scoped>
  53. </style>