@cnamts/synapse 0.0.12-alpha → 0.0.13-alpha
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/design-system-v3.js +4913 -4021
- package/dist/design-system-v3.umd.cjs +1 -1
- package/dist/src/components/Amelipro/types/types.d.ts +30 -57
- package/dist/src/components/Customs/SyTextField/SyTextField.d.ts +2 -0
- package/dist/src/components/DatePicker/DatePicker.d.ts +36 -44
- package/dist/src/components/DatePicker/DateTextInput.d.ts +33 -36
- package/dist/src/components/FilterInline/AccessibiliteItems.d.ts +30 -0
- package/dist/src/components/FilterInline/constants/ExpertiseLevelEnum.d.ts +4 -0
- package/dist/src/components/FilterSideBar/AccessibiliteItems.d.ts +29 -0
- package/dist/src/components/FilterSideBar/constants/ExpertiseLevelEnum.d.ts +4 -0
- package/dist/src/components/NirField/NirField.d.ts +14 -2
- package/dist/src/components/NotificationBar/NotificationBar.d.ts +5 -5
- package/dist/src/components/PasswordField/PasswordField.d.ts +2 -0
- package/dist/src/components/PeriodField/PeriodField.d.ts +159 -157
- package/dist/src/components/PhoneField/PhoneField.d.ts +22 -1
- package/dist/src/components/UploadWorkflow/AccessibiliteItems.d.ts +29 -0
- package/dist/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.d.ts +4 -0
- package/dist/src/components/Usages/Usages.d.ts +10 -0
- package/dist/src/components/index.d.ts +3 -0
- package/dist/src/composables/date/tests/useDatePickerAccessibility.spec.d.ts +1 -0
- package/dist/src/composables/date/useDateFormat.d.ts +26 -0
- package/dist/src/composables/date/useDateInitialization.d.ts +18 -0
- package/dist/src/composables/date/useDatePickerAccessibility.d.ts +8 -0
- package/dist/src/composables/useFilterable/useFilterable.d.ts +1 -1
- package/dist/src/composables/validation/useValidation.d.ts +1 -0
- package/dist/src/main.d.ts +1 -0
- package/dist/src/utils/formatDate/index.d.ts +3 -0
- package/dist/src/utils/formatDate/tests/formatDate.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateAfter/index.d.ts +2 -0
- package/dist/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateBefore/index.d.ts +2 -0
- package/dist/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateInRange/index.d.ts +3 -0
- package/dist/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isDateValid/index.d.ts +9 -0
- package/dist/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isEmailValid/tests/isEmailValid.spec.d.ts +1 -0
- package/dist/src/utils/functions/validation/isWeekend/index.d.ts +3 -0
- package/dist/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.d.ts +1 -0
- package/dist/src/utils/parseDate/index.d.ts +3 -0
- package/dist/src/utils/parseDate/tests/parseDate.spec.d.ts +1 -0
- package/dist/src/utils/rules/doMatchPattern/index.d.ts +3 -0
- package/dist/src/utils/rules/doMatchPattern/tests/matchPattern.spec.d.ts +1 -0
- package/dist/src/utils/rules/index.d.ts +11 -0
- package/dist/src/utils/rules/isDateValid/index.d.ts +4 -0
- package/dist/src/utils/rules/isDateValid/tests/isDateValid.spec.d.ts +1 -0
- package/dist/src/utils/rules/isExactLength/index.d.ts +3 -0
- package/dist/src/utils/rules/isExactLength/locales.d.ts +2 -0
- package/dist/src/utils/rules/isExactLength/tests/exactLength.spec.d.ts +1 -0
- package/dist/src/utils/rules/isMaxLength/index.d.ts +3 -0
- package/dist/src/utils/rules/isMaxLength/locales.d.ts +2 -0
- package/dist/src/utils/rules/isMaxLength/tests/isMaxLength.spec.d.ts +1 -0
- package/dist/src/utils/rules/isMinLength/index.d.ts +3 -0
- package/dist/src/utils/rules/isMinLength/locales.d.ts +2 -0
- package/dist/src/utils/rules/isMinLength/tests/isMinLength.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotAfterDate/index.d.ts +3 -0
- package/dist/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotAfterToday/index.d.ts +4 -0
- package/dist/src/utils/rules/isNotAfterToday/locales.d.ts +2 -0
- package/dist/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotBeforeDate/index.d.ts +3 -0
- package/dist/src/utils/rules/isNotBeforeDate/locales.d.ts +2 -0
- package/dist/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.d.ts +1 -0
- package/dist/src/utils/rules/isNotBeforeToday/index.d.ts +4 -0
- package/dist/src/utils/rules/isNotBeforeToday/locales.d.ts +2 -0
- package/dist/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.d.ts +1 -0
- package/dist/src/utils/rules/isRequired/index.d.ts +4 -0
- package/dist/src/utils/rules/isRequired/locales.d.ts +2 -0
- package/dist/src/utils/rules/isRequired/tests/isRequred.spec.d.ts +1 -0
- package/dist/src/utils/rules/isValidEmail/index.d.ts +4 -0
- package/dist/src/utils/rules/isValidEmail/locales.d.ts +2 -0
- package/dist/src/utils/rules/isValidEmail/tests/isValidEmail.spec.d.ts +1 -0
- package/dist/style.css +1 -1
- package/package.json +3 -1
- package/src/assets/_radius.scss +12 -6
- package/src/assets/settings.scss +8 -0
- package/src/components/Amelipro/types/types.ts +40 -0
- package/src/components/ChipList/ChipList.stories.ts +26 -27
- package/src/components/ChipList/ChipList.vue +5 -1
- package/src/components/ChipList/config.ts +1 -0
- package/src/components/CookiesSelection/CookiesInformation/CookiesInformation.vue +2 -2
- package/src/components/Customs/SyBtnSelect/SyBtnSelect.mdx +1 -1
- package/src/components/Customs/SyInputSelect/SyInputSelect.mdx +1 -1
- package/src/components/Customs/SySelect/SySelect.mdx +1 -1
- package/src/components/Customs/SySelect/SySelect.vue +19 -4
- package/src/components/Customs/SyTextField/SyTextField.mdx +2 -2
- package/src/components/Customs/SyTextField/SyTextField.stories.ts +239 -0
- package/src/components/Customs/SyTextField/SyTextField.vue +3 -0
- package/src/components/DatePicker/DatePicker.stories.ts +177 -5
- package/src/components/DatePicker/DatePicker.vue +148 -347
- package/src/components/DatePicker/DateTextInput.vue +91 -251
- package/src/components/DatePicker/tests/DatePicker.spec.ts +118 -48
- package/src/components/DatePicker/tests/DateTextInput.spec.ts +202 -6
- package/src/components/FileList/Accessibilite.stories.ts +1 -1
- package/src/components/FileList/AccessibiliteItems.ts +22 -0
- package/src/components/FileUpload/FileUpload.stories.ts +9 -7
- package/src/components/FilterInline/Accessibilite.mdx +14 -0
- package/src/components/FilterInline/Accessibilite.stories.ts +216 -0
- package/src/components/FilterInline/AccessibiliteItems.ts +132 -0
- package/src/components/FilterInline/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/FilterSideBar/Accessibilite.mdx +14 -0
- package/src/components/FilterSideBar/Accessibilite.stories.ts +216 -0
- package/src/components/FilterSideBar/AccessibiliteItems.ts +153 -0
- package/src/components/FilterSideBar/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/NirField/NirField.stories.ts +165 -0
- package/src/components/NirField/NirField.vue +6 -2
- package/src/components/NirField/tests/config.spec.ts +65 -0
- package/src/components/NotificationBar/NotificationBar.mdx +2 -2
- package/src/components/NotificationBar/NotificationBar.stories.ts +59 -11
- package/src/components/NotificationBar/NotificationBar.vue +42 -114
- package/src/components/NotificationBar/tests/NotificationBar.spec.ts +28 -33
- package/src/components/NotificationBar/tests/__snapshots__/NotificationBar.spec.ts.snap +1 -1
- package/src/components/PaginatedTable/PaginatedTable.vue +6 -10
- package/src/components/PaginatedTable/tests/__snapshots__/PaginatedTable.spec.ts.snap +4 -4
- package/src/components/PasswordField/PasswordField.stories.ts +191 -4
- package/src/components/PasswordField/PasswordField.vue +3 -0
- package/src/components/PeriodField/PeriodField.stories.ts +214 -118
- package/src/components/PeriodField/PeriodField.vue +195 -148
- package/src/components/PeriodField/tests/PeriodField.spec.ts +146 -0
- package/src/components/PhoneField/PhoneField.stories.ts +101 -0
- package/src/components/PhoneField/PhoneField.vue +73 -17
- package/src/components/PhoneField/tests/PhoneField.spec.ts +40 -0
- package/src/components/RatingPicker/RatingPicker.stories.ts +7 -7
- package/src/components/SearchListField/SearchListField.stories.ts +1 -1
- package/src/components/UploadWorkflow/Accessibilite.mdx +14 -0
- package/src/components/UploadWorkflow/Accessibilite.stories.ts +216 -0
- package/src/components/UploadWorkflow/AccessibiliteItems.ts +192 -0
- package/src/components/UploadWorkflow/UploadWorkflow.vue +2 -2
- package/src/components/UploadWorkflow/constants/ExpertiseLevelEnum.ts +4 -0
- package/src/components/Usages/tests/Usages.spec.ts +183 -0
- package/src/components/index.ts +3 -0
- package/src/composables/date/tests/useDateFormat.spec.ts +67 -0
- package/src/composables/date/tests/useDateInitialization.spec.ts +89 -0
- package/src/composables/date/tests/useDatePickerAccessibility.spec.ts +102 -0
- package/src/composables/date/useDateFormat.ts +94 -0
- package/src/composables/date/useDateInitialization.ts +92 -0
- package/src/composables/date/useDatePickerAccessibility.ts +78 -0
- package/src/composables/rules/tests/useFieldValidation.spec.ts +385 -4
- package/src/composables/useFilterable/useFilterable.ts +5 -4
- package/src/composables/validation/useValidation.ts +15 -0
- package/src/main.ts +1 -0
- package/src/stories/Accessibilite/Aculturation/AuditDesignSystem.mdx +28 -0
- package/src/stories/Accessibilite/Aculturation/SensibilisationAccessibilite.mdx +2 -2
- package/src/stories/Accessibilite/Audit/RGAA.mdx +6 -6
- package/src/stories/Accessibilite/Introduction.mdx +2 -1
- package/src/stories/Accessibilite/KitDePreAudit/Echantillonnage.mdx +1 -1
- package/src/stories/Accessibilite/KitDePreAudit/Introduction.mdx +1 -1
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Introduction.mdx +8 -11
- package/src/stories/Accessibilite/KitDePreAudit/Outils/LecteursDEcran.mdx +77 -0
- package/src/stories/Accessibilite/KitDePreAudit/Outils/Tanaguru.mdx +9 -3
- package/src/stories/Accessibilite/KitDePreAudit/Preaudit.mdx +2 -2
- package/src/stories/Demarrer/Introduction.stories.ts +3 -3
- package/src/stories/Demarrer/Releases.mdx +8 -0
- package/src/stories/Demarrer/Releases.stories.ts +66 -0
- package/src/stories/DesignTokens/Conteneurs.stories.ts +3 -3
- package/src/stories/GuideDuDev/LesBreackingChanges.mdx +36 -0
- package/src/stories/GuideDuDev/UtiliserLesRules.mdx +2 -2
- package/src/utils/formatDate/index.ts +6 -0
- package/src/utils/formatDate/tests/formatDate.spec.ts +18 -0
- package/src/utils/functions/validation/isDateAfter/index.ts +9 -0
- package/src/utils/functions/validation/isDateAfter/tests/isDateAfter.spec.ts +18 -0
- package/src/utils/functions/validation/isDateBefore/index.ts +9 -0
- package/src/utils/functions/validation/isDateBefore/tests/isDateBefore.spec.ts +23 -0
- package/src/utils/functions/validation/isDateInRange/index.ts +22 -0
- package/src/utils/functions/validation/isDateInRange/tests/isDateInRange.spec.ts +28 -0
- package/src/utils/functions/validation/isDateValid/index.ts +67 -0
- package/src/utils/functions/validation/isDateValid/tests/isDateValid.spec.ts +46 -0
- package/src/utils/functions/validation/isEmailValid/index.ts +9 -0
- package/src/utils/functions/validation/isWeekend/index.ts +10 -0
- package/src/utils/functions/validation/isWeekend/tests/isWeekend.spec.ts +16 -0
- package/src/utils/parseDate/index.ts +29 -0
- package/src/utils/parseDate/tests/parseDate.spec.ts +52 -0
- package/src/utils/rules/Rules.mdx +16 -0
- package/src/utils/rules/doMatchPattern/DoMachPattern.mdx +66 -0
- package/src/utils/rules/doMatchPattern/DoMatchPattern.stories.ts +106 -0
- package/src/utils/rules/doMatchPattern/index.ts +28 -0
- package/src/utils/rules/doMatchPattern/locales.ts +5 -0
- package/src/utils/rules/doMatchPattern/tests/matchPattern.spec.ts +38 -0
- package/src/utils/rules/index.ts +11 -0
- package/src/utils/rules/isDateValid/IsDateValid.mdx +87 -0
- package/src/utils/rules/isDateValid/IsDateValid.stories.ts +113 -0
- package/src/utils/rules/isDateValid/index.ts +32 -0
- package/src/utils/rules/isDateValid/locales.ts +10 -0
- package/src/utils/rules/isDateValid/tests/isDateValid.spec.ts +27 -0
- package/src/utils/rules/isExactLength/IsExactLenght.mdx +68 -0
- package/src/utils/rules/isExactLength/IsExactLength.stories.ts +151 -0
- package/src/utils/rules/{exactLength → isExactLength}/index.ts +2 -4
- package/src/utils/rules/isExactLength/tests/exactLength.spec.ts +48 -0
- package/src/utils/rules/isMaxLength/IsMaxLength.mdx +68 -0
- package/src/utils/rules/isMaxLength/IsMaxLength.stories.ts +152 -0
- package/src/utils/rules/isMaxLength/index.ts +30 -0
- package/src/utils/rules/isMaxLength/locales.ts +6 -0
- package/src/utils/rules/isMaxLength/tests/isMaxLength.spec.ts +42 -0
- package/src/utils/rules/isMinLength/IsMinLength.mdx +68 -0
- package/src/utils/rules/isMinLength/IsMinLength.stories.ts +152 -0
- package/src/utils/rules/isMinLength/index.ts +30 -0
- package/src/utils/rules/isMinLength/locales.ts +6 -0
- package/src/utils/rules/isMinLength/tests/isMinLength.spec.ts +42 -0
- package/src/utils/rules/isNotAfterDate/IsNotAfterDate.mdx +68 -0
- package/src/utils/rules/isNotAfterDate/IsNotAfterDate.stories.ts +109 -0
- package/src/utils/rules/isNotAfterDate/index.ts +25 -0
- package/src/utils/rules/isNotAfterDate/locales.ts +6 -0
- package/src/utils/rules/isNotAfterDate/tests/isNotAfterDate.spec.ts +25 -0
- package/src/utils/rules/isNotAfterToday/IsNotAfterToday.mdx +83 -0
- package/src/utils/rules/isNotAfterToday/IsNotAfterToday.stories.ts +110 -0
- package/src/utils/rules/isNotAfterToday/index.ts +28 -0
- package/src/utils/rules/isNotAfterToday/locales.ts +5 -0
- package/src/utils/rules/isNotAfterToday/tests/isNotAfterToday.spec.ts +30 -0
- package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.mdx +68 -0
- package/src/utils/rules/isNotBeforeDate/IsNotBeforeDate.stories.ts +114 -0
- package/src/utils/rules/isNotBeforeDate/index.ts +25 -0
- package/src/utils/rules/isNotBeforeDate/locales.ts +6 -0
- package/src/utils/rules/isNotBeforeDate/tests/IsNotBeforeDate.spec.ts +25 -0
- package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.mdx +83 -0
- package/src/utils/rules/isNotBeforeToday/IsNotBeforeToday.stories.ts +110 -0
- package/src/utils/rules/isNotBeforeToday/index.ts +28 -0
- package/src/utils/rules/isNotBeforeToday/locales.ts +5 -0
- package/src/utils/rules/isNotBeforeToday/tests/notBeforeToday.spec.ts +36 -0
- package/src/utils/rules/isRequired/IsRequired.mdx +81 -0
- package/src/utils/rules/isRequired/IsRequired.stories.ts +101 -0
- package/src/utils/rules/{required → isRequired}/index.ts +3 -3
- package/src/utils/rules/{required/tests/index.spec.ts → isRequired/tests/isRequred.spec.ts} +9 -9
- package/src/utils/rules/isValidEmail/IsValidEmail.mdx +81 -0
- package/src/utils/rules/isValidEmail/IsValidEmail.stories.ts +101 -0
- package/src/utils/rules/{email → isValidEmail}/index.ts +3 -5
- package/src/utils/rules/{email/tests/email.spec.ts → isValidEmail/tests/isValidEmail.spec.ts} +5 -5
- package/dist/src/components/Amelipro/types/languages.d.ts +0 -6
- package/dist/src/utils/rules/email/index.d.ts +0 -4
- package/dist/src/utils/rules/exactLength/index.d.ts +0 -4
- package/dist/src/utils/rules/required/index.d.ts +0 -4
- package/dist/src/utils/rules/required/ruleMessageHelper.d.ts +0 -3
- package/src/components/Amelipro/types/languages.d.ts +0 -6
- package/src/components/Amelipro/types/types.d.ts +0 -65
- package/src/components/Customs/SyTextField/tests/__snapshots__/SyTextField.spec.ts.snap +0 -58
- package/src/utils/functions/isEmailValid/index.ts +0 -8
- package/src/utils/rules/required/ruleMessageHelper.ts +0 -14
- package/src/utils/rules/required/tests/rulesMessageHelper.spec.ts +0 -22
- /package/dist/src/{utils/functions/isEmailValid/tests/isEmailValid.spec.d.ts → components/NirField/tests/config.spec.d.ts} +0 -0
- /package/dist/src/{utils/rules/email/tests/email.spec.d.ts → components/Usages/tests/Usages.spec.d.ts} +0 -0
- /package/dist/src/{utils/rules/required/tests/index.spec.d.ts → composables/date/tests/useDateFormat.spec.d.ts} +0 -0
- /package/dist/src/{utils/rules/required/tests/rulesMessageHelper.spec.d.ts → composables/date/tests/useDateInitialization.spec.d.ts} +0 -0
- /package/dist/src/utils/functions/{isEmailValid → validation/isEmailValid}/index.d.ts +0 -0
- /package/dist/src/utils/rules/{exactLength → doMatchPattern}/locales.d.ts +0 -0
- /package/dist/src/utils/rules/{email → isDateValid}/locales.d.ts +0 -0
- /package/dist/src/utils/rules/{required → isNotAfterDate}/locales.d.ts +0 -0
- /package/src/components/NirField/{tests → examples}//342/200/257dataset/342/200/257.md" +0 -0
- /package/src/utils/functions/{isEmailValid → validation/isEmailValid}/tests/isEmailValid.spec.ts +0 -0
- /package/src/utils/rules/{exactLength → isExactLength}/locales.ts +0 -0
- /package/src/utils/rules/{required → isRequired}/locales.ts +0 -0
- /package/src/utils/rules/{email → isValidEmail}/locales.ts +0 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Meta, Canvas, Source } from '@storybook/blocks';
|
|
2
|
+
import * as IsExactLengthStories from './IsExactLength.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={IsExactLengthStories} />
|
|
5
|
+
|
|
6
|
+
# Règle de validation `isExactLength`
|
|
7
|
+
|
|
8
|
+
La règle de validation `isExactLength` permet d'imposer une longueur exacte à une chaîne de caractères dans un champs de formulaire.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
Pour utiliser cette règle de validation, vous devez importer la fonction d'ordre supérieur `isExactLengthFn` depuis le package `@cnamts/synapse`.
|
|
13
|
+
|
|
14
|
+
<Source dark code={`
|
|
15
|
+
import { isExactLengthFn } from '@cnamts/synapse';
|
|
16
|
+
`} />
|
|
17
|
+
|
|
18
|
+
Vous devez ensuite faire appel à cette fonction en lui passant en paramètre la longueur exacte que vous souhaitez imposer.
|
|
19
|
+
|
|
20
|
+
<Source dark code={`
|
|
21
|
+
const length15 = isExactLengthFn(15);
|
|
22
|
+
`} />
|
|
23
|
+
|
|
24
|
+
Vous pouvez ensuite utiliser la fonction retournée comme règle d'un champs de formulaire.
|
|
25
|
+
|
|
26
|
+
<Source dark code={`
|
|
27
|
+
<script setup lang="ts">
|
|
28
|
+
import { isExactLengthFn } from '@cnamts/synapse';
|
|
29
|
+
import { VTextField } from 'vuetify/components';
|
|
30
|
+
|
|
31
|
+
const length15 = isExactLengthFn(15);
|
|
32
|
+
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<template>
|
|
36
|
+
<VTextField
|
|
37
|
+
:rules="[length15]"
|
|
38
|
+
label="Max 15 characters"
|
|
39
|
+
/>
|
|
40
|
+
</template>
|
|
41
|
+
`} />
|
|
42
|
+
|
|
43
|
+
## API
|
|
44
|
+
|
|
45
|
+
`} />typescript
|
|
46
|
+
isExactLengthFn(
|
|
47
|
+
lengthValue: number,
|
|
48
|
+
ignoreSpaces?: boolean
|
|
49
|
+
errorMessages?: {
|
|
50
|
+
default?: (length: number) => string;
|
|
51
|
+
}
|
|
52
|
+
): (value: string) => true | string;
|
|
53
|
+
`} />
|
|
54
|
+
|
|
55
|
+
### Arguments
|
|
56
|
+
|
|
57
|
+
- `lengthValue` : nombre entier positif représentant la longueur exacte à imposer.
|
|
58
|
+
- `ignoreSpaces` : booléen optionnel permettant d'ignorer les espaces dans le calcul de la longueur. Par défaut, la valeur est `false`.
|
|
59
|
+
- `errorMessages` : objet optionnel permettant de personnaliser les messages d'erreur. Les clés disponibles sont :
|
|
60
|
+
- `default` : message d'erreur par défaut. Vous pouvez utiliser la variable `{{ length }}` pour afficher la longueur attendue.
|
|
61
|
+
|
|
62
|
+
### Valeurs de retour
|
|
63
|
+
|
|
64
|
+
Retourne une fonction pouvant être utilisée comme règle de validation pour un champs de formulaire Vuetify.
|
|
65
|
+
|
|
66
|
+
## Exemples
|
|
67
|
+
|
|
68
|
+
<Canvas of={IsExactLengthStories.Default} />
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/vue3'
|
|
2
|
+
import { VTextField } from 'vuetify/components'
|
|
3
|
+
import { isExactLengthFn } from './index'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
title: 'Guide du dev/Règles De Validation/isExactLength',
|
|
7
|
+
component: isExactLengthFn,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const Default: StoryObj<unknown> = {
|
|
11
|
+
render: () => {
|
|
12
|
+
return {
|
|
13
|
+
components: { VTextField },
|
|
14
|
+
setup() {
|
|
15
|
+
const length10 = isExactLengthFn(10)
|
|
16
|
+
return { length10 }
|
|
17
|
+
},
|
|
18
|
+
template: `
|
|
19
|
+
<VTextField
|
|
20
|
+
:rules="[length10]"
|
|
21
|
+
label="Max 10 characters"
|
|
22
|
+
variant="outlined"
|
|
23
|
+
/>
|
|
24
|
+
`,
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
parameters: {
|
|
28
|
+
sourceCode: [
|
|
29
|
+
{
|
|
30
|
+
name: 'Script',
|
|
31
|
+
code: `
|
|
32
|
+
<script setup lang="ts">
|
|
33
|
+
import { VTextField } from 'vuetify/components'
|
|
34
|
+
import { isExactLengthFn } from '@cnamts/synapse'
|
|
35
|
+
|
|
36
|
+
const length10 = isExactLengthFn(10)
|
|
37
|
+
</script>
|
|
38
|
+
`,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Template',
|
|
42
|
+
code: `
|
|
43
|
+
<template>
|
|
44
|
+
<VTextField
|
|
45
|
+
:rules="[length10]"
|
|
46
|
+
label="Max 10 characters"
|
|
47
|
+
variant="outlined"
|
|
48
|
+
/>
|
|
49
|
+
</template>
|
|
50
|
+
`,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const DoNotCountSpaces: StoryObj<unknown> = {
|
|
57
|
+
render: () => {
|
|
58
|
+
return {
|
|
59
|
+
components: { VTextField },
|
|
60
|
+
setup() {
|
|
61
|
+
const length10 = isExactLengthFn(10, true)
|
|
62
|
+
return { length10 }
|
|
63
|
+
},
|
|
64
|
+
template: `
|
|
65
|
+
<VTextField
|
|
66
|
+
:rules="[length10]"
|
|
67
|
+
label="Max 10 characters"
|
|
68
|
+
variant="outlined"
|
|
69
|
+
/>
|
|
70
|
+
`,
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
parameters: {
|
|
74
|
+
sourceCode: [
|
|
75
|
+
{
|
|
76
|
+
name: 'Script',
|
|
77
|
+
code: `
|
|
78
|
+
<script setup lang="ts">
|
|
79
|
+
import { VTextField } from 'vuetify/components'
|
|
80
|
+
import { isExactLengthFn } from '@cnamts/synapse'
|
|
81
|
+
|
|
82
|
+
const length10 = isExactLengthFn(10, true)
|
|
83
|
+
</script>
|
|
84
|
+
`,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'Template',
|
|
88
|
+
code: `
|
|
89
|
+
<template>
|
|
90
|
+
<VTextField
|
|
91
|
+
:rules="[length10]"
|
|
92
|
+
label="Max 10 characters"
|
|
93
|
+
variant="outlined"
|
|
94
|
+
/>
|
|
95
|
+
</template>
|
|
96
|
+
`,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export const CustomMessage: StoryObj<unknown> = {
|
|
103
|
+
render: () => {
|
|
104
|
+
return {
|
|
105
|
+
components: { VTextField },
|
|
106
|
+
setup() {
|
|
107
|
+
const messages = {
|
|
108
|
+
default: (length: number) => `The length of this field must be exactly ${length} characters.`,
|
|
109
|
+
}
|
|
110
|
+
const length10 = isExactLengthFn(10, false, messages)
|
|
111
|
+
return { length10 }
|
|
112
|
+
},
|
|
113
|
+
template: `
|
|
114
|
+
<VTextField
|
|
115
|
+
:rules="[length10]"
|
|
116
|
+
label="This field must be 10 characters long."
|
|
117
|
+
/>
|
|
118
|
+
`,
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
parameters: {
|
|
122
|
+
sourceCode: [
|
|
123
|
+
{
|
|
124
|
+
name: 'Script',
|
|
125
|
+
code: `
|
|
126
|
+
<script setup lang="ts">
|
|
127
|
+
import { VTextField } from 'vuetify/components'
|
|
128
|
+
import { isExactLengthFn } from '@cnamts/synapse'
|
|
129
|
+
|
|
130
|
+
const messages = {
|
|
131
|
+
default: (length: number) => \`The length of this field must be exactly \${length} characters.\`,
|
|
132
|
+
}
|
|
133
|
+
const length10 = isExactLengthFn(10, false, messages)
|
|
134
|
+
</script>
|
|
135
|
+
`,
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'Template',
|
|
139
|
+
code: `
|
|
140
|
+
<template>
|
|
141
|
+
<VTextField
|
|
142
|
+
:rules="[length10]"
|
|
143
|
+
label="This field must be 10 characters long."
|
|
144
|
+
variant="outlined"
|
|
145
|
+
/>
|
|
146
|
+
</template>
|
|
147
|
+
`,
|
|
148
|
+
},
|
|
149
|
+
],
|
|
150
|
+
},
|
|
151
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ruleMessage } from '
|
|
1
|
+
import { ruleMessage } from '@/utils/ruleMessage'
|
|
2
2
|
import type {
|
|
3
3
|
ValidationRule,
|
|
4
4
|
ValidationResult,
|
|
@@ -9,7 +9,7 @@ import type {
|
|
|
9
9
|
import { defaultErrorMessages } from './locales'
|
|
10
10
|
|
|
11
11
|
/** Check that the value does not exceeds the specified length */
|
|
12
|
-
export function
|
|
12
|
+
export function isExactLengthFn(
|
|
13
13
|
lengthValue: number,
|
|
14
14
|
ignoreSpaces = false,
|
|
15
15
|
errorMessages: ErrorMessages<number> = defaultErrorMessages,
|
|
@@ -29,5 +29,3 @@ export function exactLengthFn(
|
|
|
29
29
|
)
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
export const exactLength = exactLengthFn
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest'
|
|
2
|
+
import { isExactLengthFn } from '../'
|
|
3
|
+
|
|
4
|
+
describe('exactLength', () => {
|
|
5
|
+
it('returns an error when the value is longer than the exact length', () => {
|
|
6
|
+
const rule = isExactLengthFn(2)
|
|
7
|
+
|
|
8
|
+
expect(typeof rule('0 1')).toBe('string')
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('returns an error when the value is smaller than the exact length', () => {
|
|
12
|
+
const rule = isExactLengthFn(2)
|
|
13
|
+
|
|
14
|
+
expect(typeof rule('s')).toBe('string')
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it('returns true when the value is the exact length without counting spaces', () => {
|
|
18
|
+
const rule = isExactLengthFn(2, true)
|
|
19
|
+
|
|
20
|
+
expect(rule('x x')).toBe(true)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('returns true when the value is equal than the exact length', () => {
|
|
24
|
+
const rule = isExactLengthFn(2)
|
|
25
|
+
|
|
26
|
+
expect(rule('01')).toBe(true)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('returns true if the value is empty', () => {
|
|
30
|
+
const rule = isExactLengthFn(10)
|
|
31
|
+
|
|
32
|
+
expect(rule('')).toBe(true)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('returns true if the value is null', () => {
|
|
36
|
+
const rule = isExactLengthFn(10)
|
|
37
|
+
|
|
38
|
+
expect(rule(null)).toBe(true)
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
it('works with custom error messages', () => {
|
|
42
|
+
const rule = isExactLengthFn(1, false, {
|
|
43
|
+
default: 'test',
|
|
44
|
+
})
|
|
45
|
+
|
|
46
|
+
expect(rule('01')).toBe('test')
|
|
47
|
+
})
|
|
48
|
+
})
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Meta, Canvas, Source } from '@storybook/blocks';
|
|
2
|
+
import * as IsMaxLengthStories from './IsMaxLength.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={IsMaxLengthStories} />
|
|
5
|
+
|
|
6
|
+
# Règle de validation `isMaxLength`
|
|
7
|
+
|
|
8
|
+
La règle de validation `isMaxLength` permet de limiter la longueur d'une chaîne de caractères dans un champs de formulaire.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
Pour utiliser cette règle de validation, vous devez importer la fonction d'ordre supérieur `isMaxLengthFn` depuis le package `@cnamts/synapse`.
|
|
13
|
+
|
|
14
|
+
<Source dark code={`
|
|
15
|
+
import { isMaxLengthFn } from '@cnamts/synapse';
|
|
16
|
+
`} />
|
|
17
|
+
|
|
18
|
+
Vous devez ensuite faire appel à cette fonction en lui passant en paramètre la longueur maximale que vous souhaitez imposer.
|
|
19
|
+
|
|
20
|
+
<Source dark code={`
|
|
21
|
+
const max10 = isMaxLengthFn(10);
|
|
22
|
+
`} />
|
|
23
|
+
|
|
24
|
+
Vous pouvez ensuite utiliser la fonction retournée comme règle d'un champs de formulaire.
|
|
25
|
+
|
|
26
|
+
<Source dark code={`
|
|
27
|
+
<script setup lang="ts">
|
|
28
|
+
import { isMaxLengthFn } from '@cnamts/synapse';
|
|
29
|
+
import { VTextField } from 'vuetify/components';
|
|
30
|
+
|
|
31
|
+
const max10 = isMaxLengthFn(10);
|
|
32
|
+
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<template>
|
|
36
|
+
<VTextField
|
|
37
|
+
:rules="[max10]"
|
|
38
|
+
label="Max 10 characters"
|
|
39
|
+
/>
|
|
40
|
+
</template>
|
|
41
|
+
`} />
|
|
42
|
+
|
|
43
|
+
## API
|
|
44
|
+
|
|
45
|
+
<Source dark code={`
|
|
46
|
+
isMaxLengthFn(
|
|
47
|
+
maxLength: number,
|
|
48
|
+
ignoreSpaces?: boolean,
|
|
49
|
+
errorMessages?: {
|
|
50
|
+
default?: (length: number) => string;
|
|
51
|
+
}
|
|
52
|
+
): (value: string) => true | string;
|
|
53
|
+
`} />
|
|
54
|
+
|
|
55
|
+
### Arguments
|
|
56
|
+
|
|
57
|
+
- `maxLength` : nombre entier positif représentant la longueur maximale à imposer.
|
|
58
|
+
- `ignoreSpaces` : booléen optionnel permettant d'ignorer les espaces dans le calcul de la longueur. Par défaut, la valeur est `false`.
|
|
59
|
+
- `errorMessages` : objet optionnel permettant de personnaliser les messages d'erreur. Les clés disponibles sont :
|
|
60
|
+
- `default` : message d'erreur par défaut. Vous pouvez utiliser la variable `{{ length }}` pour afficher la longueur maximale attendue.
|
|
61
|
+
|
|
62
|
+
### Valeurs de retour
|
|
63
|
+
|
|
64
|
+
Retourne une fonction pouvant être utilisée comme règle de validation pour un champs de formulaire Vuetify.
|
|
65
|
+
|
|
66
|
+
## Exemples
|
|
67
|
+
|
|
68
|
+
<Canvas of={IsMaxLengthStories.Default} />
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import type { StoryObj } from '@storybook/vue3'
|
|
2
|
+
import { VTextField } from 'vuetify/components'
|
|
3
|
+
import { isMaxLengthFn } from './index'
|
|
4
|
+
|
|
5
|
+
export default {
|
|
6
|
+
title: 'Guide du dev/Règles De Validation/isMaxLength',
|
|
7
|
+
component: isMaxLengthFn,
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const Default: StoryObj<unknown> = {
|
|
11
|
+
render: () => {
|
|
12
|
+
return {
|
|
13
|
+
components: { VTextField },
|
|
14
|
+
setup() {
|
|
15
|
+
const max5 = isMaxLengthFn(5)
|
|
16
|
+
return { max5 }
|
|
17
|
+
},
|
|
18
|
+
template: `
|
|
19
|
+
<VTextField
|
|
20
|
+
:rules="[max5]"
|
|
21
|
+
label="Max 5 caractères"
|
|
22
|
+
variant="outlined"
|
|
23
|
+
/>
|
|
24
|
+
`,
|
|
25
|
+
}
|
|
26
|
+
},
|
|
27
|
+
parameters: {
|
|
28
|
+
sourceCode: [
|
|
29
|
+
{
|
|
30
|
+
name: 'Script',
|
|
31
|
+
code: `
|
|
32
|
+
<script setup lang="ts">
|
|
33
|
+
import { VTextField } from 'vuetify/components'
|
|
34
|
+
import { isMaxLengthFn } from '@cnamts/synapse'
|
|
35
|
+
|
|
36
|
+
const max5 = isMaxLengthFn(5)
|
|
37
|
+
</script>
|
|
38
|
+
`,
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
name: 'Template',
|
|
42
|
+
code: `
|
|
43
|
+
<template>
|
|
44
|
+
<VTextField
|
|
45
|
+
:rules="[max5]"
|
|
46
|
+
label="Max 5 caractères"
|
|
47
|
+
variant="outlined"
|
|
48
|
+
/>
|
|
49
|
+
</template>
|
|
50
|
+
`,
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
},
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export const ignoreSpaces: StoryObj<unknown> = {
|
|
57
|
+
render: () => {
|
|
58
|
+
return {
|
|
59
|
+
components: { VTextField },
|
|
60
|
+
setup() {
|
|
61
|
+
const max5 = isMaxLengthFn(5, true)
|
|
62
|
+
return { max5 }
|
|
63
|
+
},
|
|
64
|
+
template: `
|
|
65
|
+
<VTextField
|
|
66
|
+
:rules="[max5]"
|
|
67
|
+
label="Max 5 caractères, ignore les espaces"
|
|
68
|
+
variant="outlined"
|
|
69
|
+
/>
|
|
70
|
+
`,
|
|
71
|
+
}
|
|
72
|
+
},
|
|
73
|
+
parameters: {
|
|
74
|
+
sourceCode: [
|
|
75
|
+
{
|
|
76
|
+
name: 'Script',
|
|
77
|
+
code: `
|
|
78
|
+
<script setup lang="ts">
|
|
79
|
+
import { VTextField } from 'vuetify/components'
|
|
80
|
+
import { isMaxLengthFn } from '@cnamts/synapse'
|
|
81
|
+
|
|
82
|
+
const max5 = isMaxLengthFn(5, true)
|
|
83
|
+
</script>
|
|
84
|
+
`,
|
|
85
|
+
},
|
|
86
|
+
{
|
|
87
|
+
name: 'Template',
|
|
88
|
+
code: `
|
|
89
|
+
<template>
|
|
90
|
+
<VTextField
|
|
91
|
+
:rules="[max5]"
|
|
92
|
+
label="Max 5 caractères, ignore les espaces"
|
|
93
|
+
variant="outlined"
|
|
94
|
+
/>
|
|
95
|
+
</template>
|
|
96
|
+
`,
|
|
97
|
+
},
|
|
98
|
+
],
|
|
99
|
+
},
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
export const CustomMessage: StoryObj<unknown> = {
|
|
103
|
+
render: () => {
|
|
104
|
+
return {
|
|
105
|
+
components: { VTextField },
|
|
106
|
+
setup() {
|
|
107
|
+
const messages = {
|
|
108
|
+
default: max => `The text entered is too long, it must be ${max} characters or less`,
|
|
109
|
+
}
|
|
110
|
+
const max5 = isMaxLengthFn(5, false, messages)
|
|
111
|
+
return { max5 }
|
|
112
|
+
},
|
|
113
|
+
template: `
|
|
114
|
+
<VTextField
|
|
115
|
+
:rules="[max5]"
|
|
116
|
+
label="Max 5 characters"
|
|
117
|
+
variant="outlined"
|
|
118
|
+
/>
|
|
119
|
+
`,
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
parameters: {
|
|
123
|
+
sourceCode: [
|
|
124
|
+
{
|
|
125
|
+
name: 'Script',
|
|
126
|
+
code: `
|
|
127
|
+
<script setup lang="ts">
|
|
128
|
+
import { VTextField } from 'vuetify/components'
|
|
129
|
+
import { isMaxLengthFn } from '@cnamts/synapse'
|
|
130
|
+
|
|
131
|
+
const messages = {
|
|
132
|
+
default: max => \`The text entered is too long, it must be \${max} characters or less\`,
|
|
133
|
+
}
|
|
134
|
+
const max5 = isMaxLengthFn(5, false, messages)
|
|
135
|
+
</script>
|
|
136
|
+
`,
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
name: 'Template',
|
|
140
|
+
code: `
|
|
141
|
+
<template>
|
|
142
|
+
<VTextField
|
|
143
|
+
:rules="[max5]"
|
|
144
|
+
label="Max 5 characters"
|
|
145
|
+
variant="outlined"
|
|
146
|
+
/>
|
|
147
|
+
</template>
|
|
148
|
+
`,
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
},
|
|
152
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ruleMessage } from '@/utils/ruleMessage'
|
|
2
|
+
import type {
|
|
3
|
+
ValidationRule,
|
|
4
|
+
ValidationResult,
|
|
5
|
+
ErrorMessages,
|
|
6
|
+
Value,
|
|
7
|
+
} from '../types'
|
|
8
|
+
|
|
9
|
+
import { defaultErrorMessages } from './locales'
|
|
10
|
+
|
|
11
|
+
/** Check that the value does not exceeds the specified length */
|
|
12
|
+
export function isMaxLengthFn(
|
|
13
|
+
max: number,
|
|
14
|
+
ignoreSpaces = false,
|
|
15
|
+
errorMessages: ErrorMessages<number> = defaultErrorMessages,
|
|
16
|
+
): ValidationRule {
|
|
17
|
+
return (value: Value): ValidationResult => {
|
|
18
|
+
if (!value) {
|
|
19
|
+
return true
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
if (ignoreSpaces) {
|
|
23
|
+
value = value.replace(/\s/g, '')
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
return (
|
|
27
|
+
value.length <= max || ruleMessage(errorMessages, 'default', [max])
|
|
28
|
+
)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { isMaxLengthFn } from '..'
|
|
2
|
+
import { describe, it, expect } from 'vitest'
|
|
3
|
+
|
|
4
|
+
describe('maxLength', () => {
|
|
5
|
+
it('returns an error when the value is longer than maximum', () => {
|
|
6
|
+
const rule = isMaxLengthFn(1)
|
|
7
|
+
|
|
8
|
+
expect(typeof rule('0123')).toBe('string')
|
|
9
|
+
})
|
|
10
|
+
|
|
11
|
+
it('returns true when the value is shorter than the maximum', () => {
|
|
12
|
+
const rule = isMaxLengthFn(10)
|
|
13
|
+
|
|
14
|
+
expect(rule('012345')).toBe(true)
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
it('returns true when the value equals the maximum', () => {
|
|
18
|
+
const rule = isMaxLengthFn(10)
|
|
19
|
+
|
|
20
|
+
expect(rule('0123456789')).toBe(true)
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
it('returns true when the value is shorter than the maximum without counting spaces', () => {
|
|
24
|
+
const rule = isMaxLengthFn(10, true)
|
|
25
|
+
|
|
26
|
+
expect(rule('0 1 2 3 4 5')).toBe(true)
|
|
27
|
+
})
|
|
28
|
+
|
|
29
|
+
it('returns true if the value is falsy', () => {
|
|
30
|
+
const rule = isMaxLengthFn(10)
|
|
31
|
+
|
|
32
|
+
expect(rule('')).toBe(true)
|
|
33
|
+
})
|
|
34
|
+
|
|
35
|
+
it('works with custom error messages', () => {
|
|
36
|
+
const rule = isMaxLengthFn(1, false, {
|
|
37
|
+
default: 'test',
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
expect(rule('0123')).toBe('test')
|
|
41
|
+
})
|
|
42
|
+
})
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Meta, Canvas, Source } from '@storybook/blocks';
|
|
2
|
+
import * as IsMinLengthStories from './IsMinLength.stories';
|
|
3
|
+
|
|
4
|
+
<Meta of={IsMinLengthStories} />
|
|
5
|
+
|
|
6
|
+
# Règle de validation `isMinLength`
|
|
7
|
+
|
|
8
|
+
La règle de validation `isMinLength` permet de limiter la longueur d'une chaîne de caractères dans un champs de formulaire.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
Pour utiliser cette règle de validation, vous devez importer la fonction d'ordre supérieur `isMinLengthFn` depuis le package `@cnamts/synapse`.
|
|
13
|
+
|
|
14
|
+
<Source dark code={`
|
|
15
|
+
import { isMinLengthFn } from '@cnamts/synapse';
|
|
16
|
+
`} />
|
|
17
|
+
|
|
18
|
+
Vous devez ensuite faire appel à cette fonction en lui passant en paramètre la longueur minimale que vous souhaitez imposer.
|
|
19
|
+
|
|
20
|
+
<Source dark code={`
|
|
21
|
+
const min10 = isMinLengthFn(10);
|
|
22
|
+
`} />
|
|
23
|
+
|
|
24
|
+
Vous pouvez ensuite utiliser la fonction retournée comme règle d'un champs de formulaire.
|
|
25
|
+
|
|
26
|
+
<Source dark code={`
|
|
27
|
+
<script setup lang="ts">
|
|
28
|
+
import { isMinLengthFn } from '@cnamts/synapse';
|
|
29
|
+
import { VTextField } from 'vuetify/components';
|
|
30
|
+
|
|
31
|
+
const min10 = isMinLengthFn(10);
|
|
32
|
+
|
|
33
|
+
</script>
|
|
34
|
+
|
|
35
|
+
<template>
|
|
36
|
+
<VTextField
|
|
37
|
+
:rules="[min10]"
|
|
38
|
+
label="Min 10 characters"
|
|
39
|
+
/>
|
|
40
|
+
</template>
|
|
41
|
+
`} />
|
|
42
|
+
|
|
43
|
+
## API
|
|
44
|
+
|
|
45
|
+
<Source dark code={`
|
|
46
|
+
isMinLengthFn(
|
|
47
|
+
minLength: number,
|
|
48
|
+
ignoreSpaces?: boolean,
|
|
49
|
+
errorMessages?: {
|
|
50
|
+
default?: (length: number) => string;
|
|
51
|
+
}
|
|
52
|
+
): (value: string) => true | string;
|
|
53
|
+
`} />
|
|
54
|
+
|
|
55
|
+
### Arguments
|
|
56
|
+
|
|
57
|
+
- `minLength` : nombre entier positif représentant la longueur minimale à imposer.
|
|
58
|
+
- `ignoreSpaces` : booléen optionnel permettant d'ignorer les espaces dans le calcul de la longueur. Par défaut, la valeur est `false`.
|
|
59
|
+
- `errorMessages` : objet optionnel permettant de personnaliser les messages d'erreur. Les clés disponibles sont :
|
|
60
|
+
- `default` : message d'erreur par défaut. Vous pouvez utiliser la variable `{{ length }}` pour afficher la longueur minimale attendue.
|
|
61
|
+
|
|
62
|
+
### Valeurs de retour
|
|
63
|
+
|
|
64
|
+
Retourne une fonction pouvant être utilisée comme règle de validation pour un champs de formulaire Vuetify.
|
|
65
|
+
|
|
66
|
+
## Exemples
|
|
67
|
+
|
|
68
|
+
<Canvas of={IsMinLengthStories.Default} />
|