Преглед на файлове

add DatePicker component and move DateRangePicker

Olivier Massot преди 2 години
родител
ревизия
a2fd0cfa5a
променени са 4 файла, в които са добавени 80 реда и са изтрити 1 реда
  1. 1 1
      components/Layout/SubHeader/DataTimingRange.vue
  2. 71 0
      components/Ui/DatePicker.vue
  3. 0 0
      components/Ui/DateRangePicker.vue
  4. 8 0
      services/utils/dateUtils.ts

+ 1 - 1
components/Layout/SubHeader/DataTimingRange.vue

@@ -5,7 +5,7 @@
         {{ $t('period_choose') }}
       </span>
 
-      <UiInputDateRangePicker
+      <UiDateRangePicker
           :model-value="datesRange"
           :max-height="28"
           @update:model-value="updateDateTimeRange"

+ 71 - 0
components/Ui/DatePicker.vue

@@ -0,0 +1,71 @@
+<!--
+Sélecteur de dates
+
+@see https://vuetifyjs.com/en/components/date-pickers/
+-->
+
+<template>
+  <main>
+    <!-- @see https://vue3datepicker.com/props/modes/#multi-calendars -->
+    <VueDatePicker
+        :model-value="modelValue"
+        :locale="i18n.locale.value"
+        :format-locale="fnsLocale"
+        :format="dateFormat"
+        :enable-time-picker="withTime"
+        :teleport="true"
+        text-input
+        :auto-apply="true"
+        :select-text="$t('select')"
+        :cancel-text="$t('cancel')"
+        @update:model-value="onUpdate"
+    />
+  </main>
+</template>
+
+<script setup lang="ts">
+import {computed} from "@vue/reactivity";
+import DateUtils, {supportedLocales} from "~/services/utils/dateUtils";
+import {PropType} from "@vue/runtime-core";
+
+const i18n = useI18n()
+
+const fnsLocale = DateUtils.getFnsLocale(i18n.locale.value as supportedLocales)
+const defaultFormatPattern = DateUtils.getFormatPattern(i18n.locale.value as supportedLocales)
+
+const props = defineProps({
+  modelValue: {
+    type: Object as PropType<Date>,
+    required: false,
+    default: null
+  },
+  readonly: {
+    type: Boolean,
+    required: false,
+    default: false
+  },
+  format: {
+    type: String,
+    required: false,
+    default: null
+  },
+  withTime: {
+    type: Boolean,
+    required: false,
+    default: false
+  }
+})
+
+const dateFormat: ComputedRef<string> = computed(() => props.format ?? defaultFormatPattern)
+
+const emit = defineEmits(['update:model-value'])
+
+const onUpdate = (event: Date) => {
+  emit('update:model-value', event)
+}
+
+</script>
+
+<style scoped>
+
+</style>

+ 0 - 0
components/Ui/Input/DateRangePicker.vue → components/Ui/DateRangePicker.vue


+ 8 - 0
services/utils/dateUtils.ts

@@ -54,6 +54,14 @@ export default class DateUtils {
     return mapping[code] ?? mapping[defaultLocale]
   }
 
+  public static getFormatPattern(code: supportedLocales): string {
+    const mapping = {
+      'en': 'MM/dd/yyyy HH:mm',
+      'fr': 'dd/MM/yyyy HH:mm'
+    }
+    return mapping[code] ?? mapping[defaultLocale]
+  }
+
   public static formatIsoShortDate(date: Date): string {
     return format(date, 'yyyy-MM-dd')
   }