DatePicker.vue 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <!--
  2. Sélecteur de dates
  3. @see https://vue3datepicker.com/
  4. -->
  5. <template>
  6. <main>
  7. <VueDatePicker
  8. :model-value="modelValue"
  9. :locale="i18n.locale.value"
  10. :format-locale="fnsLocale"
  11. :format="dateFormat"
  12. :enable-time-picker="withTime"
  13. :teleport="true"
  14. text-input
  15. :auto-apply="true"
  16. :select-text="$t('select')"
  17. :cancel-text="$t('cancel')"
  18. :disabled="readonly"
  19. :position="position"
  20. @update:model-value="onUpdate"
  21. />
  22. </main>
  23. </template>
  24. <script setup lang="ts">
  25. import DateUtils, {supportedLocales} from "~/services/utils/dateUtils";
  26. import {PropType} from "@vue/runtime-core";
  27. const i18n = useI18n()
  28. const fnsLocale = DateUtils.getFnsLocale(i18n.locale.value as supportedLocales)
  29. const props = defineProps({
  30. modelValue: {
  31. type: Object as PropType<Date>,
  32. required: false,
  33. default: null
  34. },
  35. readonly: {
  36. type: Boolean,
  37. required: false,
  38. default: false
  39. },
  40. format: {
  41. type: String,
  42. required: false,
  43. default: null
  44. },
  45. withTime: {
  46. type: Boolean,
  47. required: false,
  48. default: false
  49. },
  50. /**
  51. * @see https://vue3datepicker.com/props/positioning/#position
  52. */
  53. position: {
  54. type: String as PropType<'left' | 'center' | 'right'>,
  55. required: false,
  56. default: 'center'
  57. }
  58. })
  59. const defaultFormatPattern = props.withTime ?
  60. DateUtils.getFormatPattern(i18n.locale.value as supportedLocales) :
  61. DateUtils.getShortFormatPattern(i18n.locale.value as supportedLocales)
  62. const dateFormat: Ref<string> = ref(props.format ?? defaultFormatPattern)
  63. const emit = defineEmits(['update:model-value'])
  64. const onUpdate = (event: Date) => {
  65. emit('update:model-value', event)
  66. }
  67. </script>
  68. <style scoped>
  69. </style>