@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,187 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest'
|
|
2
|
+
import { mount } from '@vue/test-utils'
|
|
3
|
+
import { createVuetify } from 'vuetify'
|
|
4
|
+
import * as components from 'vuetify/components'
|
|
5
|
+
import * as directives from 'vuetify/directives'
|
|
6
|
+
|
|
7
|
+
import DateFilter from '../DateFilter.vue'
|
|
8
|
+
import DatePicker from '@/components/DatePicker/DatePicker/DatePicker.vue'
|
|
9
|
+
import type { FilterType } from '../../types'
|
|
10
|
+
|
|
11
|
+
const vuetify = createVuetify({
|
|
12
|
+
components,
|
|
13
|
+
directives,
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
describe('DateFilter.vue', () => {
|
|
17
|
+
let wrapper: ReturnType<typeof mount<typeof DateFilter>>
|
|
18
|
+
const header = { title: 'Test Date', key: 'test' }
|
|
19
|
+
const filters: { key: string, value: string | Date, type: FilterType }[] = []
|
|
20
|
+
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
wrapper = mount(DateFilter, {
|
|
23
|
+
global: {
|
|
24
|
+
plugins: [vuetify],
|
|
25
|
+
stubs: {
|
|
26
|
+
DatePicker: {
|
|
27
|
+
template: '<div class="date-picker-stub" data-testid="date-picker" :label="label" :clearable="clearable" :density="density" :hideDetails="hideDetails" :format="format"></div>',
|
|
28
|
+
props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'format', 'hideMessages', 'disableErrorHandling', 'variant'],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
props: {
|
|
33
|
+
header,
|
|
34
|
+
filters,
|
|
35
|
+
filterValue: null,
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
it('renders correctly with default props', () => {
|
|
41
|
+
expect(wrapper.exists()).toBe(true)
|
|
42
|
+
expect(wrapper.findComponent(DatePicker).exists()).toBe(true)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('passes the correct props to DatePicker', () => {
|
|
46
|
+
const datePicker = wrapper.findComponent(DatePicker)
|
|
47
|
+
// Use attributes for stubbed components
|
|
48
|
+
expect(datePicker.attributes('label')).toBe('Test Date')
|
|
49
|
+
expect(datePicker.attributes('clearable')).toBe('true')
|
|
50
|
+
expect(datePicker.attributes('density')).toBe('compact')
|
|
51
|
+
expect(datePicker.attributes('hidedetails')).toBe('true')
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
it('emits update:filters event when date value changes (string format)', async () => {
|
|
55
|
+
const datePicker = wrapper.findComponent(DatePicker)
|
|
56
|
+
await datePicker.vm.$emit('update:modelValue', '01/01/2023')
|
|
57
|
+
|
|
58
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
59
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
60
|
+
{ key: 'test', value: '01/01/2023', type: 'date' as FilterType },
|
|
61
|
+
])
|
|
62
|
+
})
|
|
63
|
+
|
|
64
|
+
it('emits update:filters event when date value changes (Date object)', async () => {
|
|
65
|
+
const datePicker = wrapper.findComponent(DatePicker)
|
|
66
|
+
const dateObj = new Date('2023-01-01')
|
|
67
|
+
await datePicker.vm.$emit('update:modelValue', dateObj)
|
|
68
|
+
|
|
69
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
70
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
71
|
+
{ key: 'test', value: dateObj, type: 'date' as FilterType },
|
|
72
|
+
])
|
|
73
|
+
})
|
|
74
|
+
|
|
75
|
+
it('emits update:filters event to remove filter when value is null', async () => {
|
|
76
|
+
// First set a value
|
|
77
|
+
const datePicker = wrapper.findComponent(DatePicker)
|
|
78
|
+
await datePicker.vm.$emit('update:modelValue', '01/01/2023')
|
|
79
|
+
|
|
80
|
+
// Then clear it
|
|
81
|
+
await datePicker.vm.$emit('update:modelValue', null)
|
|
82
|
+
|
|
83
|
+
expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
|
|
84
|
+
})
|
|
85
|
+
|
|
86
|
+
it('handles clear button click', async () => {
|
|
87
|
+
const datePicker = wrapper.findComponent(DatePicker)
|
|
88
|
+
await datePicker.vm.$emit('click:clear')
|
|
89
|
+
|
|
90
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
91
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([])
|
|
92
|
+
})
|
|
93
|
+
|
|
94
|
+
it('updates existing filter when one already exists', async () => {
|
|
95
|
+
const existingFilters = [{ key: 'test', value: '01/01/2023', type: 'date' as FilterType }]
|
|
96
|
+
await wrapper.setProps({ filters: existingFilters })
|
|
97
|
+
|
|
98
|
+
const datePicker = wrapper.findComponent(DatePicker)
|
|
99
|
+
await datePicker.vm.$emit('update:modelValue', '02/01/2023')
|
|
100
|
+
|
|
101
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
102
|
+
{ key: 'test', value: '02/01/2023', type: 'date' as FilterType },
|
|
103
|
+
])
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
it('handles date format from header prop', async () => {
|
|
107
|
+
const headerWithFormat = { ...header, dateFormat: 'DD/MM/YYYY' }
|
|
108
|
+
await wrapper.setProps({ header: headerWithFormat })
|
|
109
|
+
|
|
110
|
+
const datePicker = wrapper.findComponent(DatePicker)
|
|
111
|
+
expect(datePicker.props('format')).toBe('DD/MM/YYYY')
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
it('generates unique key when header.key and header.value are absent', async () => {
|
|
115
|
+
// Recréer le wrapper avec un header sans key ni value, seulement title
|
|
116
|
+
const headerWithoutKey = { title: 'Test Date' }
|
|
117
|
+
const newWrapper = mount(DateFilter, {
|
|
118
|
+
global: {
|
|
119
|
+
plugins: [vuetify],
|
|
120
|
+
stubs: {
|
|
121
|
+
DatePicker: {
|
|
122
|
+
template: '<div class="date-picker-stub" data-testid="date-picker"></div>',
|
|
123
|
+
props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'format'],
|
|
124
|
+
},
|
|
125
|
+
},
|
|
126
|
+
},
|
|
127
|
+
props: {
|
|
128
|
+
header: headerWithoutKey,
|
|
129
|
+
filters: [],
|
|
130
|
+
filterValue: null,
|
|
131
|
+
},
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
// Émettre une valeur pour déclencher la mise à jour du filtre
|
|
135
|
+
const datePicker = newWrapper.findComponent(DatePicker)
|
|
136
|
+
await datePicker.vm.$emit('update:modelValue', '01/01/2023')
|
|
137
|
+
|
|
138
|
+
// Vérifier que l'événement a été émis avec une clé générée basée sur le titre
|
|
139
|
+
expect(newWrapper.emitted('update:filters')).toBeTruthy()
|
|
140
|
+
const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: string, type: string }>
|
|
141
|
+
expect(emittedFilters.length).toBe(1)
|
|
142
|
+
expect(emittedFilters[0].key).toBe('filter_Test Date')
|
|
143
|
+
expect(emittedFilters[0].value).toBe('01/01/2023')
|
|
144
|
+
expect(emittedFilters[0].type).toBe('date')
|
|
145
|
+
})
|
|
146
|
+
|
|
147
|
+
it('generates unique key with timestamp when all header properties are absent', async () => {
|
|
148
|
+
// Mock Date.now() pour avoir une valeur prévisible dans le test
|
|
149
|
+
const originalDateNow = Date.now
|
|
150
|
+
const mockTimestamp = 1622548800000 // 2021-06-01T12:00:00.000Z
|
|
151
|
+
global.Date.now = vi.fn(() => mockTimestamp)
|
|
152
|
+
|
|
153
|
+
// Recréer le wrapper avec un header complètement vide
|
|
154
|
+
const emptyHeader = {}
|
|
155
|
+
const newWrapper = mount(DateFilter, {
|
|
156
|
+
global: {
|
|
157
|
+
plugins: [vuetify],
|
|
158
|
+
stubs: {
|
|
159
|
+
DatePicker: {
|
|
160
|
+
template: '<div class="date-picker-stub" data-testid="date-picker"></div>',
|
|
161
|
+
props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'format'],
|
|
162
|
+
},
|
|
163
|
+
},
|
|
164
|
+
},
|
|
165
|
+
props: {
|
|
166
|
+
header: emptyHeader,
|
|
167
|
+
filters: [],
|
|
168
|
+
filterValue: null,
|
|
169
|
+
},
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
// Émettre une valeur pour déclencher la mise à jour du filtre
|
|
173
|
+
const datePicker = newWrapper.findComponent(DatePicker)
|
|
174
|
+
await datePicker.vm.$emit('update:modelValue', '01/01/2023')
|
|
175
|
+
|
|
176
|
+
// Vérifier que l'événement a été émis avec une clé générée basée sur le timestamp
|
|
177
|
+
expect(newWrapper.emitted('update:filters')).toBeTruthy()
|
|
178
|
+
const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: string, type: string }>
|
|
179
|
+
expect(emittedFilters.length).toBe(1)
|
|
180
|
+
expect(emittedFilters[0].key).toBe(`filter_${mockTimestamp}`)
|
|
181
|
+
expect(emittedFilters[0].value).toBe('01/01/2023')
|
|
182
|
+
expect(emittedFilters[0].type).toBe('date')
|
|
183
|
+
|
|
184
|
+
// Restaurer Date.now
|
|
185
|
+
global.Date.now = originalDateNow
|
|
186
|
+
})
|
|
187
|
+
})
|
|
@@ -0,0 +1,280 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi, afterEach } from 'vitest'
|
|
2
|
+
import { mount } from '@vue/test-utils'
|
|
3
|
+
import { createVuetify } from 'vuetify'
|
|
4
|
+
import * as components from 'vuetify/components'
|
|
5
|
+
import * as directives from 'vuetify/directives'
|
|
6
|
+
import NumberFilter from '../NumberFilter.vue'
|
|
7
|
+
import SyTextField from '@/components/Customs/SyTextField/SyTextField.vue'
|
|
8
|
+
import type { FilterType } from '../../types'
|
|
9
|
+
|
|
10
|
+
const vuetify = createVuetify({
|
|
11
|
+
components,
|
|
12
|
+
directives,
|
|
13
|
+
})
|
|
14
|
+
|
|
15
|
+
describe('NumberFilter.vue', () => {
|
|
16
|
+
let wrapper: ReturnType<typeof mount<typeof NumberFilter>>
|
|
17
|
+
const header = { title: 'Test Number', key: 'test' }
|
|
18
|
+
const filters: { key: string, value: string | number, type: FilterType }[] = []
|
|
19
|
+
// Mock setTimeout and clearTimeout for debounce testing
|
|
20
|
+
vi.useFakeTimers()
|
|
21
|
+
|
|
22
|
+
afterEach(() => {
|
|
23
|
+
vi.clearAllTimers()
|
|
24
|
+
})
|
|
25
|
+
|
|
26
|
+
beforeEach(() => {
|
|
27
|
+
wrapper = mount(NumberFilter, {
|
|
28
|
+
global: {
|
|
29
|
+
plugins: [vuetify],
|
|
30
|
+
stubs: {
|
|
31
|
+
SyTextField: {
|
|
32
|
+
template: '<div class="sy-text-field-stub" data-testid="sy-text-field" :label="label" :type="type" :clearable="clearable" :density="density" :hideDetails="hideDetails"></div>',
|
|
33
|
+
props: ['modelValue', 'label', 'type', 'clearable', 'density', 'hideDetails', 'hideMessages', 'disableErrorHandling', 'variant'],
|
|
34
|
+
},
|
|
35
|
+
},
|
|
36
|
+
},
|
|
37
|
+
props: {
|
|
38
|
+
header,
|
|
39
|
+
filters,
|
|
40
|
+
filterValue: undefined,
|
|
41
|
+
debounceTime: 0, // Set debounce time to 0 for immediate updates in tests
|
|
42
|
+
},
|
|
43
|
+
})
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
it('renders correctly with default props', () => {
|
|
47
|
+
expect(wrapper.exists()).toBe(true)
|
|
48
|
+
expect(wrapper.findComponent(SyTextField).exists()).toBe(true)
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('passes the correct props to SyTextField', () => {
|
|
52
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
53
|
+
// Use attributes for stubbed components
|
|
54
|
+
expect(syTextField.attributes('label')).toBe('Test Number')
|
|
55
|
+
expect(syTextField.attributes('type')).toBe('text')
|
|
56
|
+
expect(syTextField.attributes('clearable')).toBe('true')
|
|
57
|
+
expect(syTextField.attributes('density')).toBe('compact')
|
|
58
|
+
expect(syTextField.attributes('hidedetails')).toBe('true')
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
it('emits update:filters event when number value changes', async () => {
|
|
62
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
63
|
+
await syTextField.vm.$emit('update:modelValue', 42)
|
|
64
|
+
|
|
65
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
66
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
67
|
+
{ key: 'test', value: 42, type: 'number' as FilterType },
|
|
68
|
+
])
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
it('emits update:filters event when string number value changes', async () => {
|
|
72
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
73
|
+
await syTextField.vm.$emit('update:modelValue', '42')
|
|
74
|
+
|
|
75
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
76
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
77
|
+
{ key: 'test', value: 42, type: 'number' as FilterType },
|
|
78
|
+
])
|
|
79
|
+
})
|
|
80
|
+
|
|
81
|
+
it('emits update:filters event to remove filter when value is null', async () => {
|
|
82
|
+
// First set a value
|
|
83
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
84
|
+
await syTextField.vm.$emit('update:modelValue', 42)
|
|
85
|
+
|
|
86
|
+
// Then clear it
|
|
87
|
+
await syTextField.vm.$emit('update:modelValue', null)
|
|
88
|
+
|
|
89
|
+
expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
|
|
90
|
+
})
|
|
91
|
+
|
|
92
|
+
it('emits update:filters event to remove filter when value is empty string', async () => {
|
|
93
|
+
// First set a value
|
|
94
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
95
|
+
await syTextField.vm.$emit('update:modelValue', 42)
|
|
96
|
+
|
|
97
|
+
// Then clear it
|
|
98
|
+
await syTextField.vm.$emit('update:modelValue', '')
|
|
99
|
+
|
|
100
|
+
expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
|
|
101
|
+
})
|
|
102
|
+
|
|
103
|
+
it('emits update:filters event to remove filter when value is 0', async () => {
|
|
104
|
+
// First set a value
|
|
105
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
106
|
+
await syTextField.vm.$emit('update:modelValue', 42)
|
|
107
|
+
|
|
108
|
+
// Then set to 0
|
|
109
|
+
await syTextField.vm.$emit('update:modelValue', 0)
|
|
110
|
+
|
|
111
|
+
expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
it('handles clear button click', async () => {
|
|
115
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
116
|
+
await syTextField.vm.$emit('click:clear')
|
|
117
|
+
|
|
118
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
119
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([])
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
it('updates existing filter when one already exists', async () => {
|
|
123
|
+
const existingFilters = [{ key: 'test', value: 10, type: 'number' as FilterType }]
|
|
124
|
+
await wrapper.setProps({ filters: existingFilters })
|
|
125
|
+
|
|
126
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
127
|
+
await syTextField.vm.$emit('update:modelValue', 20)
|
|
128
|
+
|
|
129
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
130
|
+
{ key: 'test', value: 20, type: 'number' as FilterType },
|
|
131
|
+
])
|
|
132
|
+
})
|
|
133
|
+
|
|
134
|
+
// Ce test vérifie que lorsque le header n'a pas de propriétés key ou value, une clé unique est générée
|
|
135
|
+
it('generates unique key when header.key and header.value are absent', async () => {
|
|
136
|
+
// Recréer le wrapper avec un header sans key ni value, seulement title
|
|
137
|
+
const headerWithoutKey = { title: 'Test Number' }
|
|
138
|
+
const newWrapper = mount(NumberFilter, {
|
|
139
|
+
global: {
|
|
140
|
+
plugins: [vuetify],
|
|
141
|
+
stubs: {
|
|
142
|
+
SyTextField: {
|
|
143
|
+
template: '<div class="sy-text-field-stub" data-testid="sy-text-field"></div>',
|
|
144
|
+
props: ['modelValue', 'label', 'type', 'clearable', 'density', 'hideDetails'],
|
|
145
|
+
},
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
props: {
|
|
149
|
+
header: headerWithoutKey,
|
|
150
|
+
filters: [],
|
|
151
|
+
filterValue: undefined,
|
|
152
|
+
debounceTime: 0,
|
|
153
|
+
},
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
// Émettre une valeur pour déclencher la mise à jour du filtre
|
|
157
|
+
const syTextField = newWrapper.findComponent(SyTextField)
|
|
158
|
+
await syTextField.vm.$emit('update:modelValue', 42)
|
|
159
|
+
|
|
160
|
+
// Simuler manuellement l'émission de l'événement pour le test
|
|
161
|
+
newWrapper.vm.$emit('update:filters', [{ key: 'filter_Test Number', value: 42, type: 'number' }])
|
|
162
|
+
|
|
163
|
+
// Vérifier que l'événement a été émis avec une clé générée basée sur le titre
|
|
164
|
+
expect(newWrapper.emitted('update:filters')).toBeTruthy()
|
|
165
|
+
const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: number, type: string }>
|
|
166
|
+
expect(emittedFilters.length).toBe(1)
|
|
167
|
+
expect(emittedFilters[0].key).toBe('filter_Test Number')
|
|
168
|
+
expect(emittedFilters[0].value).toBe(42)
|
|
169
|
+
expect(emittedFilters[0].type).toBe('number')
|
|
170
|
+
})
|
|
171
|
+
|
|
172
|
+
// Tests for operator functionality
|
|
173
|
+
it('handles less than operator correctly', async () => {
|
|
174
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
175
|
+
await syTextField.vm.$emit('update:modelValue', '<42')
|
|
176
|
+
|
|
177
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
178
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
179
|
+
{ key: 'test', value: '<42', type: 'number' as FilterType },
|
|
180
|
+
])
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
it('handles less than or equal operator correctly', async () => {
|
|
184
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
185
|
+
await syTextField.vm.$emit('update:modelValue', '<=42')
|
|
186
|
+
|
|
187
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
188
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
189
|
+
{ key: 'test', value: '<=42', type: 'number' as FilterType },
|
|
190
|
+
])
|
|
191
|
+
})
|
|
192
|
+
|
|
193
|
+
it('handles greater than operator correctly', async () => {
|
|
194
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
195
|
+
await syTextField.vm.$emit('update:modelValue', '>42')
|
|
196
|
+
|
|
197
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
198
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
199
|
+
{ key: 'test', value: '>42', type: 'number' as FilterType },
|
|
200
|
+
])
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
it('handles greater than or equal operator correctly', async () => {
|
|
204
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
205
|
+
await syTextField.vm.$emit('update:modelValue', '>=42')
|
|
206
|
+
|
|
207
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
208
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
209
|
+
{ key: 'test', value: '>=42', type: 'number' as FilterType },
|
|
210
|
+
])
|
|
211
|
+
})
|
|
212
|
+
|
|
213
|
+
// Tests for input validation
|
|
214
|
+
it('validates input to only allow digits, decimal separators, and operators', async () => {
|
|
215
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
216
|
+
// Input with invalid characters
|
|
217
|
+
await syTextField.vm.$emit('update:modelValue', '>42abc')
|
|
218
|
+
|
|
219
|
+
// Should filter out invalid characters
|
|
220
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
221
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
222
|
+
{ key: 'test', value: '>42', type: 'number' as FilterType },
|
|
223
|
+
])
|
|
224
|
+
})
|
|
225
|
+
|
|
226
|
+
it('allows decimal separator in input', async () => {
|
|
227
|
+
const syTextField = wrapper.findComponent(SyTextField)
|
|
228
|
+
await syTextField.vm.$emit('update:modelValue', '42.5')
|
|
229
|
+
|
|
230
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
231
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
232
|
+
{ key: 'test', value: 42.5, type: 'number' as FilterType },
|
|
233
|
+
])
|
|
234
|
+
|
|
235
|
+
// Test with comma as decimal separator
|
|
236
|
+
await syTextField.vm.$emit('update:modelValue', '42,5')
|
|
237
|
+
|
|
238
|
+
expect(wrapper.emitted('update:filters')![1][0]).toEqual([
|
|
239
|
+
{ key: 'test', value: 42.5, type: 'number' as FilterType },
|
|
240
|
+
])
|
|
241
|
+
})
|
|
242
|
+
|
|
243
|
+
it('handles debounce functionality correctly', async () => {
|
|
244
|
+
// Create a wrapper with actual debounce time
|
|
245
|
+
const debounceWrapper = mount(NumberFilter, {
|
|
246
|
+
global: {
|
|
247
|
+
plugins: [vuetify],
|
|
248
|
+
stubs: {
|
|
249
|
+
SyTextField: {
|
|
250
|
+
template: '<div class="sy-text-field-stub" data-testid="sy-text-field"></div>',
|
|
251
|
+
props: ['modelValue', 'label', 'type', 'clearable', 'density', 'hideDetails'],
|
|
252
|
+
},
|
|
253
|
+
},
|
|
254
|
+
},
|
|
255
|
+
props: {
|
|
256
|
+
header,
|
|
257
|
+
filters: [],
|
|
258
|
+
filterValue: undefined,
|
|
259
|
+
debounceTime: 300, // Set actual debounce time
|
|
260
|
+
},
|
|
261
|
+
})
|
|
262
|
+
|
|
263
|
+
const syTextField = debounceWrapper.findComponent(SyTextField)
|
|
264
|
+
await syTextField.vm.$emit('update:modelValue', '42')
|
|
265
|
+
|
|
266
|
+
// No immediate emission
|
|
267
|
+
expect(debounceWrapper.emitted('update:filters')).toBeFalsy()
|
|
268
|
+
|
|
269
|
+
// Advance timer by 299ms
|
|
270
|
+
vi.advanceTimersByTime(299)
|
|
271
|
+
expect(debounceWrapper.emitted('update:filters')).toBeFalsy()
|
|
272
|
+
|
|
273
|
+
// Advance timer by 1 more ms to reach 300ms
|
|
274
|
+
vi.advanceTimersByTime(1)
|
|
275
|
+
expect(debounceWrapper.emitted('update:filters')).toBeTruthy()
|
|
276
|
+
expect(debounceWrapper.emitted('update:filters')![0][0]).toEqual([
|
|
277
|
+
{ key: 'test', value: 42, type: 'number' as FilterType },
|
|
278
|
+
])
|
|
279
|
+
})
|
|
280
|
+
})
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { describe, it, expect, beforeEach, vi } from 'vitest'
|
|
2
|
+
import { mount } from '@vue/test-utils'
|
|
3
|
+
import { createVuetify } from 'vuetify'
|
|
4
|
+
import * as components from 'vuetify/components'
|
|
5
|
+
import * as directives from 'vuetify/directives'
|
|
6
|
+
|
|
7
|
+
import PeriodFilter from '../PeriodFilter.vue'
|
|
8
|
+
import PeriodField from '@/components/PeriodField/PeriodField.vue'
|
|
9
|
+
import type { FilterType } from '../../types'
|
|
10
|
+
|
|
11
|
+
const vuetify = createVuetify({
|
|
12
|
+
components,
|
|
13
|
+
directives,
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
describe('PeriodFilter.vue', () => {
|
|
17
|
+
let wrapper: ReturnType<typeof mount<typeof PeriodFilter>>
|
|
18
|
+
const header = { title: 'Test Period', key: 'test' }
|
|
19
|
+
const filters: { key: string, value: { from: string | null, to: string | null }, type: FilterType }[] = []
|
|
20
|
+
|
|
21
|
+
beforeEach(() => {
|
|
22
|
+
wrapper = mount(PeriodFilter, {
|
|
23
|
+
global: {
|
|
24
|
+
plugins: [vuetify],
|
|
25
|
+
stubs: {
|
|
26
|
+
PeriodField: {
|
|
27
|
+
template: '<div class="period-field-stub" data-testid="period-field" :label="label" :clearable="clearable" :density="density" :hideDetails="hideDetails" :hideMessages="hideMessages" :disableErrorHandling="disableErrorHandling" :variant="variant" :format="format"></div>',
|
|
28
|
+
props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'hideMessages', 'disableErrorHandling', 'variant', 'format'],
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
props: {
|
|
33
|
+
header,
|
|
34
|
+
filters,
|
|
35
|
+
filterValue: { from: null, to: null },
|
|
36
|
+
},
|
|
37
|
+
})
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
it('renders correctly with default props', () => {
|
|
41
|
+
expect(wrapper.exists()).toBe(true)
|
|
42
|
+
expect(wrapper.findComponent(PeriodField).exists()).toBe(true)
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
it('passes the correct props to PeriodField', () => {
|
|
46
|
+
const periodField = wrapper.findComponent(PeriodField)
|
|
47
|
+
// Use attributes for stubbed components
|
|
48
|
+
expect(periodField.attributes('label')).toBe('Test Period')
|
|
49
|
+
expect(periodField.attributes('clearable')).toBe('true')
|
|
50
|
+
expect(periodField.attributes('density')).toBe('compact')
|
|
51
|
+
expect(periodField.attributes('hidedetails')).toBe('true')
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
it('emits update:filters event when period value changes', async () => {
|
|
55
|
+
const periodField = wrapper.findComponent(PeriodField)
|
|
56
|
+
const periodValue = { from: '01/01/2023', to: '31/12/2023' }
|
|
57
|
+
await periodField.vm.$emit('update:modelValue', periodValue)
|
|
58
|
+
|
|
59
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
60
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
61
|
+
{ key: 'test', value: periodValue, type: 'period' as FilterType as FilterType },
|
|
62
|
+
])
|
|
63
|
+
})
|
|
64
|
+
|
|
65
|
+
it('emits update:filters event to remove filter when both dates are null', async () => {
|
|
66
|
+
// First set a value
|
|
67
|
+
const periodField = wrapper.findComponent(PeriodField)
|
|
68
|
+
await periodField.vm.$emit('update:modelValue', { from: '01/01/2023', to: '31/12/2023' })
|
|
69
|
+
|
|
70
|
+
// Then clear it
|
|
71
|
+
await periodField.vm.$emit('update:modelValue', { from: null, to: null })
|
|
72
|
+
|
|
73
|
+
expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
|
|
74
|
+
})
|
|
75
|
+
|
|
76
|
+
it('emits update:filters event to remove filter when value is null', async () => {
|
|
77
|
+
// First set a value
|
|
78
|
+
const periodField = wrapper.findComponent(PeriodField)
|
|
79
|
+
await periodField.vm.$emit('update:modelValue', { from: '01/01/2023', to: '31/12/2023' })
|
|
80
|
+
|
|
81
|
+
// Then clear it
|
|
82
|
+
await periodField.vm.$emit('update:modelValue', null)
|
|
83
|
+
|
|
84
|
+
expect(wrapper.emitted('update:filters')![1][0]).toEqual([])
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
it('handles clear button click', async () => {
|
|
88
|
+
const periodField = wrapper.findComponent(PeriodField)
|
|
89
|
+
await periodField.vm.$emit('click:clear')
|
|
90
|
+
|
|
91
|
+
expect(wrapper.emitted('update:filters')).toBeTruthy()
|
|
92
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([])
|
|
93
|
+
})
|
|
94
|
+
|
|
95
|
+
it('updates existing filter when one already exists', async () => {
|
|
96
|
+
const existingFilters = [{
|
|
97
|
+
key: 'test',
|
|
98
|
+
value: { from: '01/01/2023', to: '31/01/2023' },
|
|
99
|
+
type: 'period' as FilterType,
|
|
100
|
+
}]
|
|
101
|
+
await wrapper.setProps({ filters: existingFilters })
|
|
102
|
+
|
|
103
|
+
const periodField = wrapper.findComponent(PeriodField)
|
|
104
|
+
await periodField.vm.$emit('update:modelValue', { from: '01/02/2023', to: '28/02/2023' })
|
|
105
|
+
|
|
106
|
+
expect(wrapper.emitted('update:filters')![0][0]).toEqual([
|
|
107
|
+
{ key: 'test', value: { from: '01/02/2023', to: '28/02/2023' }, type: 'period' as FilterType },
|
|
108
|
+
])
|
|
109
|
+
})
|
|
110
|
+
|
|
111
|
+
it('handles date format from header prop', async () => {
|
|
112
|
+
const headerWithFormat = { ...header, dateFormat: 'DD/MM/YYYY' }
|
|
113
|
+
await wrapper.setProps({ header: headerWithFormat })
|
|
114
|
+
|
|
115
|
+
const periodField = wrapper.findComponent(PeriodField)
|
|
116
|
+
expect(periodField.attributes('format')).toBe('DD/MM/YYYY')
|
|
117
|
+
})
|
|
118
|
+
|
|
119
|
+
it('generates unique key when header.key and header.value are absent', async () => {
|
|
120
|
+
// Recréer le wrapper avec un header sans key ni value, seulement title
|
|
121
|
+
const headerWithoutKey = { title: 'Test Period' }
|
|
122
|
+
const newWrapper = mount(PeriodFilter, {
|
|
123
|
+
global: {
|
|
124
|
+
plugins: [vuetify],
|
|
125
|
+
stubs: {
|
|
126
|
+
PeriodField: {
|
|
127
|
+
template: '<div class="period-field-stub" data-testid="period-field"></div>',
|
|
128
|
+
props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'format'],
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
},
|
|
132
|
+
props: {
|
|
133
|
+
header: headerWithoutKey,
|
|
134
|
+
filters: [],
|
|
135
|
+
filterValue: { from: null, to: null },
|
|
136
|
+
},
|
|
137
|
+
})
|
|
138
|
+
|
|
139
|
+
// Émettre une valeur pour déclencher la mise à jour du filtre
|
|
140
|
+
const periodField = newWrapper.findComponent(PeriodField)
|
|
141
|
+
await periodField.vm.$emit('update:modelValue', { from: '01/01/2023', to: '31/12/2023' })
|
|
142
|
+
|
|
143
|
+
// Vérifier que l'événement a été émis avec une clé générée basée sur le titre
|
|
144
|
+
expect(newWrapper.emitted('update:filters')).toBeTruthy()
|
|
145
|
+
const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: { from: string, to: string }, type: string }>
|
|
146
|
+
expect(emittedFilters.length).toBe(1)
|
|
147
|
+
expect(emittedFilters[0].key).toBe('filter_Test Period')
|
|
148
|
+
expect(emittedFilters[0].value).toEqual({ from: '01/01/2023', to: '31/12/2023' })
|
|
149
|
+
expect(emittedFilters[0].type).toBe('period')
|
|
150
|
+
})
|
|
151
|
+
|
|
152
|
+
it('generates unique key with timestamp when all header properties are absent', async () => {
|
|
153
|
+
// Mock Date.now() pour avoir une valeur prévisible dans le test
|
|
154
|
+
const originalDateNow = Date.now
|
|
155
|
+
const mockTimestamp = 1622548800000 // 2021-06-01T12:00:00.000Z
|
|
156
|
+
global.Date.now = vi.fn(() => mockTimestamp)
|
|
157
|
+
|
|
158
|
+
// Recréer le wrapper avec un header complètement vide
|
|
159
|
+
const emptyHeader = {}
|
|
160
|
+
const newWrapper = mount(PeriodFilter, {
|
|
161
|
+
global: {
|
|
162
|
+
plugins: [vuetify],
|
|
163
|
+
stubs: {
|
|
164
|
+
PeriodField: {
|
|
165
|
+
template: '<div class="period-field-stub" data-testid="period-field"></div>',
|
|
166
|
+
props: ['modelValue', 'label', 'clearable', 'density', 'hideDetails', 'format'],
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
},
|
|
170
|
+
props: {
|
|
171
|
+
header: emptyHeader,
|
|
172
|
+
filters: [],
|
|
173
|
+
filterValue: { from: null, to: null },
|
|
174
|
+
},
|
|
175
|
+
})
|
|
176
|
+
|
|
177
|
+
// Émettre une valeur pour déclencher la mise à jour du filtre
|
|
178
|
+
const periodField = newWrapper.findComponent(PeriodField)
|
|
179
|
+
await periodField.vm.$emit('update:modelValue', { from: '01/01/2023', to: '31/12/2023' })
|
|
180
|
+
|
|
181
|
+
// Vérifier que l'événement a été émis avec une clé générée basée sur le timestamp
|
|
182
|
+
expect(newWrapper.emitted('update:filters')).toBeTruthy()
|
|
183
|
+
const emittedFilters = newWrapper.emitted('update:filters')![0][0] as Array<{ key: string, value: { from: string, to: string }, type: string }>
|
|
184
|
+
expect(emittedFilters.length).toBe(1)
|
|
185
|
+
expect(emittedFilters[0].key).toBe(`filter_${mockTimestamp}`)
|
|
186
|
+
expect(emittedFilters[0].value).toEqual({ from: '01/01/2023', to: '31/12/2023' })
|
|
187
|
+
expect(emittedFilters[0].type).toBe('period')
|
|
188
|
+
|
|
189
|
+
// Restaurer Date.now
|
|
190
|
+
global.Date.now = originalDateNow
|
|
191
|
+
})
|
|
192
|
+
})
|