@cnamts/synapse 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DateFilter-BmRuzQ9Z.js +98 -0
- package/dist/NumberFilter-CnIPDHqx.js +121 -0
- package/dist/PeriodFilter-CZwZ8CnQ.js +112 -0
- package/dist/SelectFilter-Cj-GW2Cc.js +97 -0
- package/dist/TextFilter-DTxZHJwX.js +114 -0
- package/dist/{components/BackBtn → common}/constants/ExpertiseLevelEnum.d.ts +3 -0
- package/dist/components/BackBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/BackToTopBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ChipList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/CollapsibleList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ContextualMenu/AccessibiliteItems.d.ts +1 -1
- package/dist/components/CookieBanner/AccessibiliteItems.d.ts +1 -1
- package/dist/components/CopyBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyBtnSelect/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyInputSelect/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SySelect/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Customs/SyTextField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DataList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DataListGroup/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DatePicker/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DatePicker/ComplexDatePicker/ComplexDatePicker.d.ts +4162 -0
- package/dist/components/DatePicker/{DatePicker.d.ts → DatePicker/DatePicker.d.ts} +142 -102
- package/dist/components/DatePicker/{DateTextInput.d.ts → DateTextInput/DateTextInput.d.ts} +32 -26
- package/dist/components/DatePicker/composables/index.d.ts +15 -0
- package/dist/components/DatePicker/composables/useDateFormatValidation.d.ts +25 -0
- package/dist/components/DatePicker/composables/useDateInputEditing.d.ts +33 -0
- package/dist/components/DatePicker/composables/useDatePickerViewMode.d.ts +16 -0
- package/dist/components/DatePicker/composables/useDatePickerVisibility.d.ts +27 -0
- package/dist/components/DatePicker/composables/useDateRangeInput.d.ts +29 -0
- package/dist/components/DatePicker/composables/useDateRangeValidation.d.ts +11 -0
- package/dist/components/DatePicker/composables/useDateSelection.d.ts +10 -0
- package/dist/components/DatePicker/composables/useDateValidation.d.ts +35 -0
- package/dist/components/DatePicker/composables/useDisplayedDateString.d.ts +16 -0
- package/dist/components/DatePicker/composables/useIconState.d.ts +17 -0
- package/dist/components/DatePicker/composables/useInputBlurHandler.d.ts +30 -0
- package/dist/components/DatePicker/composables/useInputHandler.d.ts +32 -0
- package/dist/components/DatePicker/composables/useManualDateValidation.d.ts +33 -0
- package/dist/components/DatePicker/composables/useMonthButtonCustomization.d.ts +9 -0
- package/dist/components/DatePicker/composables/useTodayButton.d.ts +16 -0
- package/dist/components/DatePicker/composables/useWeekendDays.d.ts +11 -0
- package/dist/components/DatePicker/constants/messages.d.ts +29 -0
- package/dist/components/DatePicker/types.d.ts +13 -0
- package/dist/components/DialogBox/AccessibiliteItems.d.ts +1 -1
- package/dist/components/DownloadBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ErrorPage/AccessibiliteItems.d.ts +1 -1
- package/dist/components/ExternalLinks/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FileList/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilePreview/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FileUpload/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilterInline/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilterSideBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FilterSideBar/FilterSideBar.d.ts +395 -1
- package/dist/components/FooterBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/FranceConnectBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderLoading/AccessibiliteItems.d.ts +1 -1
- package/dist/components/HeaderToolbar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/LangBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Logo/AccessibiliteItems.d.ts +1 -1
- package/dist/components/LogoBrandSection/AccessibiliteItems.d.ts +1 -1
- package/dist/components/MaintenancePage/AccessibiliteItems.d.ts +1 -1
- package/dist/components/NirField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/NotFoundPage/AccessibiliteItems.d.ts +1 -1
- package/dist/components/NotificationBar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PageContainer/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PaginatedTable/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PasswordField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PeriodField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/PeriodField/PeriodField.d.ts +171 -37
- package/dist/components/PhoneField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/RangeField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/RatingPicker/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SearchListField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SelectBtnField/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SkipLink/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SocialMediaLinks/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SubHeader/AccessibiliteItems.d.ts +1 -1
- package/dist/components/SyAlert/AccessibiliteItems.d.ts +1 -1
- package/dist/components/TableToolbar/AccessibiliteItems.d.ts +1 -1
- package/dist/components/Tables/SyServerTable/SyServerTable.d.ts +647 -0
- package/dist/components/Tables/SyTable/SyTable.d.ts +666 -0
- package/dist/components/Tables/common/SyTableFilter.d.ts +126 -0
- package/dist/components/Tables/common/TableHeader.d.ts +33 -0
- package/dist/components/Tables/common/constants/StateEnum.d.ts +6 -0
- package/dist/components/Tables/common/filters/DateFilter.d.ts +121 -0
- package/dist/components/Tables/common/filters/NumberFilter.d.ts +132 -0
- package/dist/components/Tables/common/filters/PeriodFilter.d.ts +135 -0
- package/dist/components/Tables/common/filters/SelectFilter.d.ts +120 -0
- package/dist/components/Tables/common/filters/TextFilter.d.ts +132 -0
- package/dist/components/Tables/common/formatters.d.ts +17 -0
- package/dist/components/Tables/common/locales.d.ts +7 -0
- package/dist/components/Tables/common/tableAccessibilityUtils.d.ts +8 -0
- package/dist/components/Tables/common/tableFilterUtils.d.ts +2 -0
- package/dist/components/Tables/common/tableStorageUtils.d.ts +29 -0
- package/dist/components/Tables/common/tableUtils.d.ts +42 -0
- package/dist/components/Tables/common/types.d.ts +80 -0
- package/dist/components/Tables/common/useTableFilter.d.ts +9 -0
- package/dist/components/Tables/index.d.ts +2 -0
- package/dist/components/UploadWorkflow/AccessibiliteItems.d.ts +1 -1
- package/dist/components/UserMenuBtn/AccessibiliteItems.d.ts +1 -1
- package/dist/components/index.d.ts +3 -1
- package/dist/design-system-v3.js +100 -11944
- package/dist/design-system-v3.umd.cjs +22 -4
- package/dist/designTokens/index.d.ts +3 -1
- package/dist/designTokens/tokens/cnam/cnamFonts.d.ts +140 -0
- package/dist/designTokens/tokens/pa/paFonts.d.ts +140 -0
- package/dist/designTokens/utils/createFontVariables.d.ts +39 -0
- package/dist/designTokens/utils/index.d.ts +2 -1
- package/dist/main-WDqeoGM-.js +14788 -0
- package/dist/style.css +1 -1
- package/dist/utils/rules/isRequired/index.d.ts +1 -1
- package/dist/vite-env.d.ts +12 -0
- package/package.json +3 -3
- package/src/assets/_spacers.scss +37 -1
- package/src/assets/_typography.scss +158 -0
- package/src/assets/settings.scss +7 -0
- package/src/common/constants/ExpertiseLevelEnum.ts +7 -0
- package/src/components/BackBtn/AccessibiliteItems.ts +1 -1
- package/src/components/BackToTopBtn/AccessibiliteItems.ts +1 -1
- package/src/components/ChipList/AccessibiliteItems.ts +1 -1
- package/src/components/CollapsibleList/AccessibiliteItems.ts +1 -1
- package/src/components/ContextualMenu/AccessibiliteItems.ts +1 -1
- package/src/components/CookieBanner/AccessibiliteItems.ts +1 -1
- package/src/components/CopyBtn/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyBtnSelect/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SyInputSelect/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SySelect/AccessibiliteItems.ts +1 -1
- package/src/components/Customs/SySelect/SySelect.vue +3 -9
- package/src/components/Customs/SySelect/tests/SySelect.spec.ts +4 -2
- package/src/components/Customs/SyTextField/AccessibiliteItems.ts +1 -1
- package/src/components/DataList/AccessibiliteItems.ts +1 -1
- package/src/components/DataListGroup/AccessibiliteItems.ts +1 -1
- package/src/components/DatePicker/AccessibiliteItems.ts +1 -1
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.mdx +212 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.stories.ts +1097 -0
- package/src/components/DatePicker/ComplexDatePicker/ComplexDatePicker.vue +497 -180
- package/src/components/DatePicker/ComplexDatePicker/tests/ComplexDatePicker.spec.ts +941 -0
- package/src/components/DatePicker/DatePicker/DatePicker.mdx +176 -0
- package/src/components/DatePicker/{tests → DatePicker}/DatePicker.spec.ts +1 -1
- package/src/components/DatePicker/{DatePicker.stories.ts → DatePicker/DatePicker.stories.ts} +115 -400
- package/src/components/DatePicker/{DatePicker.vue → DatePicker/DatePicker.vue} +302 -84
- package/src/components/DatePicker/DatePickerOverview.mdx +227 -0
- package/src/components/DatePicker/{DatePickerValidation.mdx → DatePickerValidationExample/DatePickerValidation.mdx} +3 -3
- package/src/components/DatePicker/{DatePickerValidation.stories.ts → DatePickerValidationExample/DatePickerValidation.stories.ts} +2 -2
- package/src/components/DatePicker/DateTextInput/DateRange.stories.ts +310 -0
- package/src/components/DatePicker/DateTextInput/DateTextInput.range.spec.ts +278 -0
- package/src/components/DatePicker/{tests → DateTextInput}/DateTextInput.spec.ts +8 -7
- package/src/components/DatePicker/DateTextInput/DateTextInput.vue +916 -0
- package/src/components/DatePicker/DateTextInput/NoCalendar.mdx +64 -0
- package/src/components/DatePicker/DateTextInput/NoCalendar.stories.ts +572 -0
- package/src/components/DatePicker/composables/index.ts +22 -0
- package/src/components/DatePicker/composables/tests/useDateFormatValidation.spec.ts +165 -0
- package/src/components/DatePicker/composables/tests/useDateInputEditing.spec.ts +359 -0
- package/src/components/DatePicker/composables/tests/useDatePickerViewMode.spec.ts +160 -0
- package/src/components/DatePicker/composables/tests/useDatePickerVisibility.spec.ts +339 -0
- package/src/components/DatePicker/composables/tests/useDateRangeInput.spec.ts +277 -0
- package/src/components/DatePicker/composables/tests/useDateRangeValidation.spec.ts +107 -0
- package/src/components/DatePicker/composables/tests/useDateSelection.spec.ts +171 -0
- package/src/components/DatePicker/composables/tests/useDateValidation.spec.ts +245 -0
- package/src/components/DatePicker/composables/tests/useDisplayedDateString.spec.ts +98 -0
- package/src/components/DatePicker/composables/tests/useIconState.spec.ts +130 -0
- package/src/components/DatePicker/composables/tests/useInputBlurHandler.spec.ts +278 -0
- package/src/components/DatePicker/composables/tests/useManualDateValidation.spec.ts +233 -0
- package/src/components/DatePicker/composables/tests/useMonthButtonCustomization.spec.ts +100 -0
- package/src/components/DatePicker/composables/tests/useTodayButton.spec.ts +97 -0
- package/src/components/DatePicker/composables/tests/useWeekendDays.spec.ts +28 -0
- package/src/components/DatePicker/composables/useDateFormatValidation.ts +95 -0
- package/src/components/DatePicker/composables/useDateInputEditing.ts +326 -0
- package/src/components/DatePicker/composables/useDatePickerViewMode.ts +61 -0
- package/src/components/DatePicker/composables/useDatePickerVisibility.ts +146 -0
- package/src/components/DatePicker/composables/useDateRangeInput.ts +375 -0
- package/src/components/DatePicker/composables/useDateRangeValidation.ts +48 -0
- package/src/components/DatePicker/composables/useDateSelection.ts +121 -0
- package/src/components/DatePicker/composables/useDateValidation.ts +225 -0
- package/src/components/DatePicker/composables/useDisplayedDateString.ts +58 -0
- package/src/components/DatePicker/composables/useIconState.ts +53 -0
- package/src/components/DatePicker/composables/useInputBlurHandler.ts +101 -0
- package/src/components/DatePicker/composables/useInputHandler.ts +436 -0
- package/src/components/DatePicker/composables/useManualDateValidation.ts +161 -0
- package/src/components/DatePicker/composables/useMonthButtonCustomization.ts +89 -0
- package/src/components/DatePicker/composables/useTodayButton.ts +43 -0
- package/src/components/DatePicker/composables/useWeekendDays.ts +21 -0
- package/src/components/DatePicker/constants/messages.ts +50 -0
- package/src/components/DatePicker/docExamples/DatePickerBidirectionalValidation.vue +4 -4
- package/src/components/DatePicker/docExamples/DatePickerValidationExamples.vue +1 -1
- package/src/components/DatePicker/playground/ComplexDatePickerPlayground.vue +172 -0
- package/src/components/DatePicker/types.ts +15 -0
- package/src/components/DialogBox/AccessibiliteItems.ts +1 -1
- package/src/components/DownloadBtn/AccessibiliteItems.ts +1 -1
- package/src/components/ErrorPage/AccessibiliteItems.ts +1 -1
- package/src/components/ExternalLinks/AccessibiliteItems.ts +1 -1
- package/src/components/FileList/AccessibiliteItems.ts +1 -1
- package/src/components/FilePreview/AccessibiliteItems.ts +1 -1
- package/src/components/FileUpload/AccessibiliteItems.ts +1 -1
- package/src/components/FilterInline/AccessibiliteItems.ts +1 -1
- package/src/components/FilterSideBar/AccessibiliteItems.ts +1 -1
- package/src/components/FilterSideBar/FilterSideBar.vue +108 -90
- package/src/components/FilterSideBar/tests/FilterSideBar.spec.ts +27 -0
- package/src/components/FilterSideBar/tests/__snapshots__/FilterSideBar.spec.ts.snap +114 -109
- package/src/components/FooterBar/AccessibiliteItems.ts +1 -1
- package/src/components/FooterBar/FooterBar.vue +2 -1
- package/src/components/FranceConnectBtn/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderBar/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderBar/HeaderBurgerMenu/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderLoading/AccessibiliteItems.ts +1 -1
- package/src/components/HeaderToolbar/AccessibiliteItems.ts +1 -1
- package/src/components/LangBtn/AccessibiliteItems.ts +1 -1
- package/src/components/Logo/Accessibilite.stories.ts +4 -0
- package/src/components/Logo/AccessibiliteItems.ts +1 -1
- package/src/components/LogoBrandSection/AccessibiliteItems.ts +1 -1
- package/src/components/MaintenancePage/AccessibiliteItems.ts +1 -1
- package/src/components/NirField/AccessibiliteItems.ts +1 -1
- package/src/components/NotFoundPage/AccessibiliteItems.ts +1 -1
- package/src/components/NotificationBar/AccessibiliteItems.ts +1 -1
- package/src/components/PageContainer/AccessibiliteItems.ts +1 -1
- package/src/components/PaginatedTable/AccessibiliteItems.ts +1 -1
- package/src/components/PaginatedTable/PaginatedTable.stories.ts +19 -0
- package/src/components/PaginatedTable/PaginatedTable.vue +51 -13
- package/src/components/PaginatedTable/tests/PaginatedTable.spec.ts +0 -2
- package/src/components/PasswordField/AccessibiliteItems.ts +1 -1
- package/src/components/PeriodField/AccessibiliteItems.ts +1 -1
- package/src/components/PeriodField/PeriodField.vue +13 -1
- package/src/components/PhoneField/AccessibiliteItems.ts +1 -1
- package/src/components/RangeField/AccessibiliteItems.ts +1 -1
- package/src/components/RatingPicker/AccessibiliteItems.ts +1 -1
- package/src/components/SearchListField/AccessibiliteItems.ts +1 -1
- package/src/components/SelectBtnField/AccessibiliteItems.ts +1 -1
- package/src/components/SkipLink/AccessibiliteItems.ts +1 -1
- package/src/components/SocialMediaLinks/AccessibiliteItems.ts +1 -1
- package/src/components/SubHeader/AccessibiliteItems.ts +1 -1
- package/src/components/SyAlert/AccessibiliteItems.ts +1 -1
- package/src/components/TableToolbar/AccessibiliteItems.ts +1 -1
- package/src/components/TableToolbar/TableToolbar.stories.ts +110 -56
- package/src/components/Tables/SyServerTable/FilterRules.stories.ts +83 -0
- package/src/components/Tables/SyServerTable/SyServerTable.mdx +160 -0
- package/src/components/Tables/SyServerTable/SyServerTable.stories.ts +2887 -0
- package/src/components/Tables/SyServerTable/SyServerTable.vue +302 -0
- package/src/components/Tables/SyServerTable/tests/SyServerTable.spec.ts +450 -0
- package/src/components/Tables/SyServerTable/tests/__snapshots__/SyServerTable.spec.ts.snap +521 -0
- package/src/components/Tables/SyTable/FilterRules.stories.ts +235 -0
- package/src/components/Tables/SyTable/SyTable.mdx +129 -0
- package/src/components/Tables/SyTable/SyTable.stories.ts +1966 -0
- package/src/components/Tables/SyTable/SyTable.vue +317 -0
- package/src/components/Tables/SyTable/tests/SyTable.spec.ts +345 -0
- package/src/components/Tables/SyTable/tests/__snapshots__/SyTable.spec.ts.snap +521 -0
- package/src/components/Tables/common/SyTableFilter.vue +342 -0
- package/src/components/Tables/common/TableHeader.vue +221 -0
- package/src/components/Tables/common/constants/StateEnum.ts +6 -0
- package/src/components/Tables/common/filters/DateFilter.vue +140 -0
- package/src/components/Tables/common/filters/NumberFilter.vue +234 -0
- package/src/components/Tables/common/filters/PeriodFilter.vue +147 -0
- package/src/components/Tables/common/filters/SelectFilter.vue +126 -0
- package/src/components/Tables/common/filters/TextFilter.vue +191 -0
- package/src/components/Tables/common/filters/tests/DateFilter.spec.ts +187 -0
- package/src/components/Tables/common/filters/tests/NumberFilter.spec.ts +280 -0
- package/src/components/Tables/common/filters/tests/PeriodFilter.spec.ts +192 -0
- package/src/components/Tables/common/filters/tests/SelectFilter.spec.ts +219 -0
- package/src/components/Tables/common/filters/tests/TextFilter.spec.ts +260 -0
- package/src/components/Tables/common/formatters.ts +72 -0
- package/src/components/Tables/common/locales.ts +7 -0
- package/src/components/Tables/common/tableAccessibilityUtils.ts +61 -0
- package/src/components/Tables/common/tableFilterUtils.ts +327 -0
- package/src/components/Tables/common/tableStorageUtils.ts +102 -0
- package/src/components/Tables/common/tableStyles.scss +54 -0
- package/src/components/Tables/common/tableUtils.ts +115 -0
- package/src/components/Tables/common/tests/SyTableFilter.spec.ts +312 -0
- package/src/components/Tables/common/tests/resize.spec.ts +161 -0
- package/src/components/Tables/common/tests/tableFilterUtils.spec.ts +106 -0
- package/src/components/Tables/common/tests/tableUtils.spec.ts +272 -0
- package/src/components/Tables/common/types.ts +81 -0
- package/src/components/Tables/common/useTableFilter.ts +19 -0
- package/src/components/Tables/index.ts +3 -0
- package/src/components/UploadWorkflow/AccessibiliteItems.ts +1 -1
- package/src/components/UserMenuBtn/AccessibiliteItems.ts +1 -1
- package/src/components/index.ts +3 -1
- package/src/composables/date/useDateFormatDayjs.ts +8 -3
- package/src/composables/date/useDateInitializationDayjs.ts +28 -36
- package/src/composables/rules/useFieldValidation.ts +1 -2
- package/src/designTokens/index.ts +4 -0
- package/src/designTokens/tokens/cnam/cnamFonts.ts +140 -0
- package/src/designTokens/tokens/pa/paFonts.ts +140 -0
- package/src/designTokens/utils/createFontVariables.ts +143 -0
- package/src/designTokens/utils/index.ts +2 -1
- package/src/stories/Demarrer/Accueil.stories.ts +12 -3
- package/src/utils/rules/isHolidayDay/IsHolidayDay.stories.ts +1 -1
- package/src/utils/rules/isRequired/index.ts +2 -1
- package/src/vite-env.d.ts +12 -0
- package/src/vuetifyConfig.ts +10 -3
- package/dist/components/BackToTopBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ChipList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/CollapsibleList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ContextualMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/CookieBanner/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/CopyBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SySelect/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Customs/SyTextField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DataList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DataListGroup/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DatePicker/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DialogBox/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/DownloadBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ErrorPage/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/ExternalLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FileList/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FilePreview/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FileUpload/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FooterBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/FranceConnectBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderLoading/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/HeaderToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/LangBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/Logo/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/LogoBrandSection/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/MaintenancePage/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/NirField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/NotFoundPage/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/NotificationBar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PageContainer/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PaginatedTable/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PasswordField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PeriodField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/PhoneField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/RangeField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/RatingPicker/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SearchListField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SelectBtnField/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SkipLink/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SocialMediaLinks/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SubHeader/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/SyAlert/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/TableToolbar/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/dist/components/UserMenuBtn/constants/ExpertiseLevelEnum.d.ts +0 -4
- package/src/components/BackBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/BackToTopBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ChipList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/CollapsibleList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ContextualMenu/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/CookieBanner/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/CopyBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SyBtnSelect/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SyInputSelect/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SySelect/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Customs/SyTextField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DataList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DataListGroup/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DatePicker/DatePicker.mdx +0 -222
- package/src/components/DatePicker/DateTextInput.vue +0 -504
- package/src/components/DatePicker/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DialogBox/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/DownloadBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ErrorPage/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/ExternalLinks/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FileList/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FilePreview/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FileUpload/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FooterBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/FranceConnectBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderBar/HeaderBurgerMenu/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderLoading/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/HeaderToolbar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/LangBtn/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/Logo/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/LogoBrandSection/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/MaintenancePage/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/NirField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/NotFoundPage/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/NotificationBar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PageContainer/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PaginatedTable/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PasswordField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PeriodField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/PhoneField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/RangeField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/RatingPicker/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SearchListField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SelectBtnField/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SkipLink/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SocialMediaLinks/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SubHeader/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/SyAlert/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/TableToolbar/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +0 -4
- package/src/components/UserMenuBtn/constants/ExpertiseLevelEnum.ts +0 -4
- /package/src/components/DatePicker/{examples → playground}/DatePickerHolidayRule.vue +0 -0
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { ref } from 'vue'
|
|
2
|
+
import type { Ref } from 'vue'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Composable pour gérer la sélection de dates dans les composants DatePicker
|
|
6
|
+
* Gère les plages de dates et la génération des dates intermédiaires
|
|
7
|
+
*/
|
|
8
|
+
export function useDateSelection(
|
|
9
|
+
parseDate: (dateStr: string, format: string) => Date | null,
|
|
10
|
+
selectedDates: Ref<Date | (Date | null)[] | null>,
|
|
11
|
+
format: string,
|
|
12
|
+
displayRange: boolean,
|
|
13
|
+
) {
|
|
14
|
+
// Stockage des dates de début et de fin pour les plages
|
|
15
|
+
const rangeBoundaryDates = ref<[Date | null, Date | null] | null>(null)
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Génère toutes les dates entre deux dates (incluses)
|
|
19
|
+
*/
|
|
20
|
+
const generateDateRange = (start: Date, end: Date): Date[] => {
|
|
21
|
+
const dateArray: Date[] = []
|
|
22
|
+
const currentDate = new Date(start)
|
|
23
|
+
|
|
24
|
+
// Ajouter la date de début
|
|
25
|
+
dateArray.push(new Date(currentDate))
|
|
26
|
+
|
|
27
|
+
// Ajouter toutes les dates intermédiaires jusqu'à la date de fin
|
|
28
|
+
while (currentDate < end) {
|
|
29
|
+
currentDate.setDate(currentDate.getDate() + 1)
|
|
30
|
+
dateArray.push(new Date(currentDate))
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return dateArray
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/**
|
|
37
|
+
* Met à jour les dates sélectionnées en fonction de l'entrée
|
|
38
|
+
*/
|
|
39
|
+
const updateSelectedDates = (input: Date | Date[] | string | string[] | null | undefined) => {
|
|
40
|
+
// Cas 0: Input est null ou undefined (suppression de la sélection)
|
|
41
|
+
if (input === null || input === undefined) {
|
|
42
|
+
selectedDates.value = null
|
|
43
|
+
rangeBoundaryDates.value = null
|
|
44
|
+
return
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Cas 1: Input est un tableau de dates ou de chaînes (sélection depuis le calendrier)
|
|
48
|
+
if (Array.isArray(input)) {
|
|
49
|
+
const dates = input
|
|
50
|
+
.map((item) => {
|
|
51
|
+
if (item instanceof Date) return item
|
|
52
|
+
return item ? parseDate(item, format) : null
|
|
53
|
+
})
|
|
54
|
+
.filter((date): date is Date => date !== null)
|
|
55
|
+
|
|
56
|
+
if (dates.length === 0) {
|
|
57
|
+
selectedDates.value = null
|
|
58
|
+
rangeBoundaryDates.value = null
|
|
59
|
+
return
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (displayRange && dates.length >= 2) {
|
|
63
|
+
// Trier les dates pour s'assurer que nous avons la première et la dernière
|
|
64
|
+
dates.sort((a, b) => a.getTime() - b.getTime())
|
|
65
|
+
|
|
66
|
+
// Récupérer les dates de début et de fin
|
|
67
|
+
const startDate = dates[0]
|
|
68
|
+
const endDate = dates[dates.length - 1]
|
|
69
|
+
|
|
70
|
+
// Stocker les dates de début et de fin pour la plage, même si la plage est invalide
|
|
71
|
+
rangeBoundaryDates.value = [startDate, endDate]
|
|
72
|
+
|
|
73
|
+
// Pour l'affichage dans le calendrier, générer les dates intermédiaires si la plage est valide
|
|
74
|
+
if (startDate && endDate && startDate.getTime() <= endDate.getTime()) {
|
|
75
|
+
const allDates = generateDateRange(startDate, endDate)
|
|
76
|
+
selectedDates.value = allDates
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
// Même si la plage est invalide, conserver les deux dates pour l'affichage
|
|
80
|
+
// Cela permettra à l'utilisateur de voir et corriger la plage invalide
|
|
81
|
+
selectedDates.value = [startDate, endDate]
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
selectedDates.value = dates
|
|
86
|
+
rangeBoundaryDates.value = null
|
|
87
|
+
}
|
|
88
|
+
return
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
// Cas 2: Input est une chaîne de caractères (saisie manuelle)
|
|
92
|
+
if (!displayRange) {
|
|
93
|
+
// Mode date unique
|
|
94
|
+
const date = input && typeof input === 'string' ? parseDate(input, format) : null
|
|
95
|
+
selectedDates.value = date === null ? null : date
|
|
96
|
+
rangeBoundaryDates.value = null
|
|
97
|
+
}
|
|
98
|
+
else if (typeof input === 'string') {
|
|
99
|
+
// Mode plage de dates
|
|
100
|
+
const dates = input.split(' - ')
|
|
101
|
+
if (dates.length === 2) {
|
|
102
|
+
const startDate = parseDate(dates[0], format)
|
|
103
|
+
const endDate = parseDate(dates[1], format)
|
|
104
|
+
if (startDate && endDate) {
|
|
105
|
+
// Stocker les dates de début et de fin pour la plage
|
|
106
|
+
rangeBoundaryDates.value = [startDate, endDate]
|
|
107
|
+
|
|
108
|
+
// Générer toutes les dates intermédiaires pour l'affichage dans le calendrier
|
|
109
|
+
const allDates = generateDateRange(startDate, endDate)
|
|
110
|
+
selectedDates.value = allDates
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
return {
|
|
117
|
+
updateSelectedDates,
|
|
118
|
+
rangeBoundaryDates,
|
|
119
|
+
generateDateRange,
|
|
120
|
+
}
|
|
121
|
+
}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { type Ref } from 'vue'
|
|
2
|
+
import { type ValidationResult } from '@/composables/validation/useValidation'
|
|
3
|
+
import { type DateObjectValue } from '../types'
|
|
4
|
+
import { DATE_PICKER_MESSAGES } from '../constants/messages'
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Composable pour la validation des dates
|
|
8
|
+
*
|
|
9
|
+
* @param options - Options de configuration
|
|
10
|
+
* @returns Fonctions pour la validation des dates
|
|
11
|
+
*/
|
|
12
|
+
export const useDateValidation = (options: {
|
|
13
|
+
// Propriétés de configuration
|
|
14
|
+
noCalendar?: boolean
|
|
15
|
+
required?: boolean
|
|
16
|
+
displayRange?: boolean
|
|
17
|
+
disableErrorHandling?: boolean
|
|
18
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Règles personnalisées
|
|
19
|
+
customRules?: { type: string, options: any }[]
|
|
20
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Règles d'avertissement personnalisées
|
|
21
|
+
customWarningRules?: { type: string, options: any }[]
|
|
22
|
+
|
|
23
|
+
// Références réactives
|
|
24
|
+
selectedDates: Ref<DateObjectValue>
|
|
25
|
+
isUpdatingFromInternal: Ref<boolean>
|
|
26
|
+
currentRangeIsValid: Ref<boolean>
|
|
27
|
+
getRangeValidationError: Ref<string>
|
|
28
|
+
|
|
29
|
+
// Fonctions de validation
|
|
30
|
+
clearValidation: () => void
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any -- Règles personnalisées
|
|
32
|
+
validateField: (value: any, rules?: any[], warningRules?: any[]) => ValidationResult
|
|
33
|
+
|
|
34
|
+
// Références aux messages
|
|
35
|
+
errors: Ref<string[]>
|
|
36
|
+
warnings: Ref<string[]>
|
|
37
|
+
successes: Ref<string[]>
|
|
38
|
+
}) => {
|
|
39
|
+
const {
|
|
40
|
+
noCalendar = false,
|
|
41
|
+
required = false,
|
|
42
|
+
displayRange = false,
|
|
43
|
+
disableErrorHandling = false,
|
|
44
|
+
customRules = [],
|
|
45
|
+
customWarningRules = [],
|
|
46
|
+
selectedDates,
|
|
47
|
+
isUpdatingFromInternal,
|
|
48
|
+
currentRangeIsValid,
|
|
49
|
+
getRangeValidationError,
|
|
50
|
+
clearValidation,
|
|
51
|
+
validateField,
|
|
52
|
+
errors,
|
|
53
|
+
warnings,
|
|
54
|
+
successes,
|
|
55
|
+
} = options
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* Valide les dates sélectionnées
|
|
59
|
+
*
|
|
60
|
+
* @param forceValidation - Force la validation même si isUpdatingFromInternal est vrai
|
|
61
|
+
* @returns Résultat de la validation
|
|
62
|
+
*/
|
|
63
|
+
const validateDates = (forceValidation = false): ValidationResult => {
|
|
64
|
+
if (noCalendar) {
|
|
65
|
+
// En mode no-calendar, on délègue la validation au DateTextInput
|
|
66
|
+
return {
|
|
67
|
+
hasError: false,
|
|
68
|
+
hasWarning: false,
|
|
69
|
+
hasSuccess: false,
|
|
70
|
+
state: {
|
|
71
|
+
errors: [],
|
|
72
|
+
warnings: [],
|
|
73
|
+
successes: [],
|
|
74
|
+
},
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Réinitialiser la validation
|
|
79
|
+
clearValidation()
|
|
80
|
+
|
|
81
|
+
// Si la gestion des erreurs est désactivée, on effectue la validation interne
|
|
82
|
+
// mais on n'ajoute pas les messages d'erreur
|
|
83
|
+
const shouldDisplayErrors = !disableErrorHandling
|
|
84
|
+
|
|
85
|
+
// Vérifier si le champ est requis et vide
|
|
86
|
+
if ((forceValidation || !isUpdatingFromInternal.value) && required && (!selectedDates.value || (Array.isArray(selectedDates.value) && selectedDates.value.length === 0))) {
|
|
87
|
+
if (shouldDisplayErrors) {
|
|
88
|
+
// Ajouter le message d'erreur dans le tableau errors.value
|
|
89
|
+
errors.value.push(DATE_PICKER_MESSAGES.ERROR_REQUIRED)
|
|
90
|
+
return {
|
|
91
|
+
hasError: true,
|
|
92
|
+
hasWarning: false,
|
|
93
|
+
hasSuccess: false,
|
|
94
|
+
state: {
|
|
95
|
+
errors: [DATE_PICKER_MESSAGES.ERROR_REQUIRED],
|
|
96
|
+
warnings: [],
|
|
97
|
+
successes: [],
|
|
98
|
+
},
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
return {
|
|
103
|
+
hasError: true,
|
|
104
|
+
hasWarning: false,
|
|
105
|
+
hasSuccess: false,
|
|
106
|
+
state: {
|
|
107
|
+
errors: [],
|
|
108
|
+
warnings: [],
|
|
109
|
+
successes: [],
|
|
110
|
+
},
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
if (!selectedDates.value) {
|
|
116
|
+
return {
|
|
117
|
+
hasError: false,
|
|
118
|
+
hasWarning: false,
|
|
119
|
+
hasSuccess: true,
|
|
120
|
+
state: {
|
|
121
|
+
errors: [],
|
|
122
|
+
warnings: [],
|
|
123
|
+
successes: [],
|
|
124
|
+
},
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Détecter si nous sommes en train de saisir une plage incomplète
|
|
129
|
+
// (mode plage activé, avec une seule date sélectionnée)
|
|
130
|
+
if (displayRange && Array.isArray(selectedDates.value)
|
|
131
|
+
&& selectedDates.value.length === 2 && selectedDates.value[0] && !selectedDates.value[1]
|
|
132
|
+
&& !forceValidation) {
|
|
133
|
+
// Si nous sommes en train de saisir la première date d'une plage,
|
|
134
|
+
// ne pas appliquer les règles de validation pour éviter le message "Date invalide"
|
|
135
|
+
return {
|
|
136
|
+
hasError: false,
|
|
137
|
+
hasWarning: false,
|
|
138
|
+
hasSuccess: false,
|
|
139
|
+
state: {
|
|
140
|
+
errors: [],
|
|
141
|
+
warnings: [],
|
|
142
|
+
successes: [],
|
|
143
|
+
},
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
// Préparer les dates à valider
|
|
148
|
+
const datesToValidate = Array.isArray(selectedDates.value)
|
|
149
|
+
? selectedDates.value.filter(Boolean) // Filtrer les valeurs null
|
|
150
|
+
: [selectedDates.value]
|
|
151
|
+
|
|
152
|
+
let isValid = true
|
|
153
|
+
|
|
154
|
+
// Valider chaque date
|
|
155
|
+
if (shouldDisplayErrors) {
|
|
156
|
+
datesToValidate.forEach((date) => {
|
|
157
|
+
if (!date) return // Ignorer les dates null
|
|
158
|
+
|
|
159
|
+
const result = validateField(
|
|
160
|
+
date,
|
|
161
|
+
customRules,
|
|
162
|
+
customWarningRules,
|
|
163
|
+
)
|
|
164
|
+
if (result.hasError) {
|
|
165
|
+
isValid = false
|
|
166
|
+
}
|
|
167
|
+
})
|
|
168
|
+
|
|
169
|
+
// Vérifier la validité de la plage de dates si en mode plage
|
|
170
|
+
if (displayRange && Array.isArray(selectedDates.value) && selectedDates.value.length >= 2) {
|
|
171
|
+
// Récupérer les dates de début et de fin
|
|
172
|
+
const startDate = selectedDates.value[0]
|
|
173
|
+
const endDate = selectedDates.value[selectedDates.value.length - 1]
|
|
174
|
+
|
|
175
|
+
// Vérifier si les deux dates sont présentes et si la plage est valide
|
|
176
|
+
if (startDate && endDate && startDate.getTime() > endDate.getTime()) {
|
|
177
|
+
// La date de fin est antérieure à la date de début
|
|
178
|
+
const rangeError = DATE_PICKER_MESSAGES.ERROR_END_BEFORE_START
|
|
179
|
+
if (!errors.value.includes(rangeError)) {
|
|
180
|
+
errors.value.push(rangeError)
|
|
181
|
+
isValid = false
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
// Utiliser également la validation du composable useDateRangeValidation
|
|
185
|
+
else if (!currentRangeIsValid.value) {
|
|
186
|
+
const rangeError = getRangeValidationError.value
|
|
187
|
+
if (rangeError && !errors.value.includes(rangeError)) {
|
|
188
|
+
errors.value.push(rangeError)
|
|
189
|
+
isValid = false
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
// Dédoublonner les messages (au cas où plusieurs dates auraient les mêmes messages)
|
|
195
|
+
errors.value = [...new Set(errors.value)]
|
|
196
|
+
warnings.value = [...new Set(warnings.value)]
|
|
197
|
+
successes.value = [...new Set(successes.value)]
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return {
|
|
201
|
+
hasError: !isValid,
|
|
202
|
+
hasWarning: warnings.value.length > 0,
|
|
203
|
+
hasSuccess: successes.value.length > 0 && isValid && warnings.value.length === 0,
|
|
204
|
+
state: {
|
|
205
|
+
errors: errors.value,
|
|
206
|
+
warnings: warnings.value,
|
|
207
|
+
successes: successes.value,
|
|
208
|
+
},
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Valide les dates pour la soumission d'un formulaire
|
|
214
|
+
*
|
|
215
|
+
* @returns Résultat de la validation
|
|
216
|
+
*/
|
|
217
|
+
const validateOnSubmit = (): ValidationResult => {
|
|
218
|
+
return validateDates(true)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
return {
|
|
222
|
+
validateDates,
|
|
223
|
+
validateOnSubmit,
|
|
224
|
+
}
|
|
225
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { computed, type ComputedRef } from 'vue'
|
|
2
|
+
import dayjs from 'dayjs'
|
|
3
|
+
import { type DateObjectValue } from '../types'
|
|
4
|
+
|
|
5
|
+
export interface DisplayedDateStringProps {
|
|
6
|
+
selectedDates: { value: DateObjectValue }
|
|
7
|
+
todayInString: ComputedRef<string>
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export interface DisplayedDateStringReturn {
|
|
11
|
+
displayedDateString: ComputedRef<string>
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Composable pour formater l'affichage des dates sélectionnées
|
|
16
|
+
* Gère à la fois les dates uniques et les plages de dates
|
|
17
|
+
*/
|
|
18
|
+
export function useDisplayedDateString(props: DisplayedDateStringProps): DisplayedDateStringReturn {
|
|
19
|
+
// Computed pour formater l'affichage des dates sélectionnées
|
|
20
|
+
const displayedDateString = computed(() => {
|
|
21
|
+
// Si nous n'avons pas de date sélectionnée, afficher la date du jour
|
|
22
|
+
if (!props.selectedDates.value) return props.todayInString.value
|
|
23
|
+
|
|
24
|
+
// Si nous avons une plage de dates
|
|
25
|
+
if (Array.isArray(props.selectedDates.value)) {
|
|
26
|
+
// Si nous avons les deux dates de la plage
|
|
27
|
+
if (props.selectedDates.value.length >= 2) {
|
|
28
|
+
const startDate = dayjs(props.selectedDates.value[0])
|
|
29
|
+
const endDate = dayjs(props.selectedDates.value[props.selectedDates.value.length - 1])
|
|
30
|
+
|
|
31
|
+
if (startDate.isValid() && endDate.isValid()) {
|
|
32
|
+
// Format court pour la date de début, format complet pour la date de fin
|
|
33
|
+
return `${startDate.format('D MMMM')} - ${endDate.format('D MMMM YYYY')}`
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
// Si nous n'avons qu'une seule date dans le tableau
|
|
37
|
+
else if (props.selectedDates.value.length === 1) {
|
|
38
|
+
const date = dayjs(props.selectedDates.value[0])
|
|
39
|
+
if (date.isValid()) {
|
|
40
|
+
return date.format('dddd D MMMM YYYY')
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return props.todayInString.value
|
|
44
|
+
}
|
|
45
|
+
// Si nous avons une seule date (pas dans un tableau)
|
|
46
|
+
else {
|
|
47
|
+
const date = dayjs(props.selectedDates.value)
|
|
48
|
+
if (date.isValid()) {
|
|
49
|
+
return date.format('dddd D MMMM YYYY')
|
|
50
|
+
}
|
|
51
|
+
return props.todayInString.value
|
|
52
|
+
}
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
return {
|
|
56
|
+
displayedDateString,
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { computed, type Ref } from 'vue'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Composable pour déterminer l'icône à afficher en fonction de l'état de validation
|
|
5
|
+
*
|
|
6
|
+
* @param options - Options de configuration
|
|
7
|
+
* @returns Fonction pour obtenir l'icône appropriée
|
|
8
|
+
*/
|
|
9
|
+
export const useIconState = (options: {
|
|
10
|
+
noCalendar?: boolean
|
|
11
|
+
disableErrorHandling?: boolean
|
|
12
|
+
errorMessages: Ref<string[]>
|
|
13
|
+
warningMessages: Ref<string[]>
|
|
14
|
+
successMessages: Ref<string[]>
|
|
15
|
+
}) => {
|
|
16
|
+
const {
|
|
17
|
+
noCalendar = false,
|
|
18
|
+
disableErrorHandling = false,
|
|
19
|
+
errorMessages,
|
|
20
|
+
warningMessages,
|
|
21
|
+
successMessages,
|
|
22
|
+
} = options
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Détermine l'icône à afficher en fonction de l'état de validation
|
|
26
|
+
*
|
|
27
|
+
* @returns Le type d'icône à afficher ('error', 'warning', 'success' ou undefined)
|
|
28
|
+
*/
|
|
29
|
+
const getIconValue = computed(() => {
|
|
30
|
+
if (noCalendar || disableErrorHandling) {
|
|
31
|
+
return undefined
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
switch (true) {
|
|
35
|
+
case errorMessages.value.length > 0:
|
|
36
|
+
return 'error'
|
|
37
|
+
case warningMessages.value.length > 0:
|
|
38
|
+
return 'warning'
|
|
39
|
+
case successMessages.value.length > 0:
|
|
40
|
+
return 'success'
|
|
41
|
+
default:
|
|
42
|
+
return undefined
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
// Propriété exposée pour être utilisée dans le template
|
|
47
|
+
const getIcon = getIconValue
|
|
48
|
+
|
|
49
|
+
return {
|
|
50
|
+
getIcon,
|
|
51
|
+
getIconValue,
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { type Ref } from 'vue'
|
|
2
|
+
import { type DateValue } from '@/composables/date/useDateInitializationDayjs'
|
|
3
|
+
import { type DateObjectValue } from '../types'
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Composable pour gérer le comportement lors de la perte de focus d'un champ de date
|
|
7
|
+
*
|
|
8
|
+
* @param options - Options de configuration
|
|
9
|
+
* @returns Fonction pour gérer la perte de focus
|
|
10
|
+
*/
|
|
11
|
+
export const useInputBlurHandler = (options: {
|
|
12
|
+
// Propriétés de configuration
|
|
13
|
+
format: string
|
|
14
|
+
dateFormatReturn?: string
|
|
15
|
+
required?: boolean
|
|
16
|
+
|
|
17
|
+
// Références réactives
|
|
18
|
+
displayFormattedDate: Ref<string>
|
|
19
|
+
hasInteracted: Ref<boolean>
|
|
20
|
+
isManualInputActive: Ref<boolean>
|
|
21
|
+
isUpdatingFromInternal: Ref<boolean>
|
|
22
|
+
selectedDates: Ref<DateObjectValue>
|
|
23
|
+
|
|
24
|
+
// Fonctions
|
|
25
|
+
validateDateFormat: (dateStr: string) => { isValid: boolean, message: string }
|
|
26
|
+
parseDate: (dateStr: string, format: string) => Date | null
|
|
27
|
+
formatDate: (date: Date, format: string) => string
|
|
28
|
+
updateModel: (value: DateValue) => void
|
|
29
|
+
validateManualInput: (value: string) => boolean
|
|
30
|
+
|
|
31
|
+
// Émetteurs d'événements
|
|
32
|
+
emitBlur: () => void
|
|
33
|
+
}) => {
|
|
34
|
+
const {
|
|
35
|
+
format,
|
|
36
|
+
dateFormatReturn = '',
|
|
37
|
+
required = false,
|
|
38
|
+
displayFormattedDate,
|
|
39
|
+
hasInteracted,
|
|
40
|
+
isManualInputActive,
|
|
41
|
+
isUpdatingFromInternal,
|
|
42
|
+
selectedDates,
|
|
43
|
+
validateDateFormat,
|
|
44
|
+
parseDate,
|
|
45
|
+
formatDate,
|
|
46
|
+
updateModel,
|
|
47
|
+
validateManualInput,
|
|
48
|
+
emitBlur,
|
|
49
|
+
} = options
|
|
50
|
+
|
|
51
|
+
/**
|
|
52
|
+
* Gère la perte de focus du champ de saisie de date
|
|
53
|
+
*/
|
|
54
|
+
const handleInputBlur = () => {
|
|
55
|
+
// Émettre l'événement blur
|
|
56
|
+
emitBlur()
|
|
57
|
+
|
|
58
|
+
// Marquer que l'utilisateur a interagi avec le champ
|
|
59
|
+
hasInteracted.value = true
|
|
60
|
+
|
|
61
|
+
// Désactiver le mode de saisie manuelle
|
|
62
|
+
isManualInputActive.value = false
|
|
63
|
+
|
|
64
|
+
// Gérer la mise à jour du modèle en fonction de la validité de la date
|
|
65
|
+
if (displayFormattedDate.value) {
|
|
66
|
+
const validation = validateDateFormat(displayFormattedDate.value)
|
|
67
|
+
if (validation.isValid) {
|
|
68
|
+
const date = parseDate(displayFormattedDate.value, format)
|
|
69
|
+
if (date) {
|
|
70
|
+
// Si la date est valide, mettre à jour selectedDates et le modèle
|
|
71
|
+
try {
|
|
72
|
+
isUpdatingFromInternal.value = true
|
|
73
|
+
selectedDates.value = date
|
|
74
|
+
|
|
75
|
+
// Si on a un format de retour, formater la date dans ce format
|
|
76
|
+
const formattedValue = dateFormatReturn
|
|
77
|
+
? formatDate(date, dateFormatReturn)
|
|
78
|
+
: formatDate(date, format)
|
|
79
|
+
updateModel(formattedValue)
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
setTimeout(() => {
|
|
83
|
+
isUpdatingFromInternal.value = false
|
|
84
|
+
}, 0)
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else if (!required) {
|
|
90
|
+
// Si le champ est vide et non requis, réinitialiser le modèle
|
|
91
|
+
updateModel(null)
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
// Valider la saisie manuelle (affiche les messages d'erreur)
|
|
95
|
+
validateManualInput(displayFormattedDate.value || '')
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
handleInputBlur,
|
|
100
|
+
}
|
|
101
|
+
}
|