diff --git a/packages/common/src/LocaleUtils.ts b/packages/common/src/LocaleUtils.ts index 97dce2d5a..17d2f21d6 100644 --- a/packages/common/src/LocaleUtils.ts +++ b/packages/common/src/LocaleUtils.ts @@ -85,6 +85,7 @@ export const getValidationErrorTranslation = ( case PersonalDetailsValidation.PHONE_INVALID: return "מספר הטלפון אינו תקין"; case PersonalDetailsValidation.PHONE_HAS_NANS: + case PersonalDetailsValidation.ID_HAS_NANS: return "יש להזין ספרות בלבד"; case PersonalDetailsValidation.REQUIRED_FIELD: return "שדה חובה"; diff --git a/packages/common/src/Validation.ts b/packages/common/src/Validation.ts index 30b7bd84c..b36230c73 100644 --- a/packages/common/src/Validation.ts +++ b/packages/common/src/Validation.ts @@ -2,6 +2,8 @@ export enum PersonalDetailsValidation { VALID_FIELD = "VALID_FIELD", NAME_TOO_SHORT = "NAME_TOO_SHORT", FULL_NAME_TOO_LONG = "FULL_NAME_TOO_LONG", + ID_INVALID = "ID_INVALID", + ID_HAS_NANS = "ID_HAS_NANS", PHONE_INVALID = "PHONE_INVALID", PHONE_HAS_NANS = "PHONE_HAS_NANS", REQUIRED_FIELD = "REQUIRED_FIELD", @@ -20,6 +22,11 @@ export type LastNameValidation = | PersonalDetailsValidation.NAME_TOO_SHORT | PersonalDetailsValidation.FULL_NAME_TOO_LONG; +export type CountryIdNumberValidation = + | PersonalDetailsValidation.VALID_FIELD + | PersonalDetailsValidation.ID_INVALID + | PersonalDetailsValidation.ID_HAS_NANS; + export type PhoneValidation = | FieldValidation | PersonalDetailsValidation.PHONE_INVALID @@ -46,6 +53,18 @@ export const ValidateLastName = ( return PersonalDetailsValidation.VALID_FIELD; }; +export const ValidateIdNumber = (id: string): CountryIdNumberValidation => { + const allNumbersValidator = /^[0-9]*$/; + if (!allNumbersValidator.test(id)) { + return PersonalDetailsValidation.ID_HAS_NANS; + } + const formatValidator = /^\d{9}$/; + if (id.length > 0 && !formatValidator.test(id)) { + return PersonalDetailsValidation.ID_INVALID; + } + return PersonalDetailsValidation.VALID_FIELD; +}; + export const ValidatePhone = (phone: string): PhoneValidation => { if (!phone) return PersonalDetailsValidation.REQUIRED_FIELD; diff --git a/packages/common/src/types.ts b/packages/common/src/types.ts index 22787f3da..a3e8a05d8 100644 --- a/packages/common/src/types.ts +++ b/packages/common/src/types.ts @@ -31,6 +31,7 @@ export type MinimalDonorDetailsForAppointment = { lastName: string; phoneNumber: string; bloodType: BloodType; + countryIdNumber?: string; }; //https://docs.google.com/document/d/1Y3ovMRJhdHlJEd4rS3FCgxxY3qdpmk2WLaR45nL8IT8 diff --git a/packages/coordinator/src/__test__/src/screens/bookManualDonationScreen/__snapshots__/BookManualDonationScreen.stories.storyshot b/packages/coordinator/src/__test__/src/screens/bookManualDonationScreen/__snapshots__/BookManualDonationScreen.stories.storyshot index 1c163bd41..c9e564420 100644 --- a/packages/coordinator/src/__test__/src/screens/bookManualDonationScreen/__snapshots__/BookManualDonationScreen.stories.storyshot +++ b/packages/coordinator/src/__test__/src/screens/bookManualDonationScreen/__snapshots__/BookManualDonationScreen.stories.storyshot @@ -323,7 +323,7 @@ label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-p animation-name: mui-auto-fill; } -.emotion-13 { +.emotion-17 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -373,23 +373,23 @@ label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-p box-shadow: none; } -.emotion-13::-moz-focus-inner { +.emotion-17::-moz-focus-inner { border-style: none; } -.emotion-13.Mui-disabled { +.emotion-17.Mui-disabled { pointer-events: none; cursor: default; } @media print { - .emotion-13 { + .emotion-17 { -webkit-print-color-adjust: exact; color-adjust: exact; } } -.emotion-13:hover { +.emotion-17:hover { -webkit-text-decoration: none; text-decoration: none; background-color: rgb(53, 122, 56); @@ -397,42 +397,42 @@ label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-p } @media (hover: none) { - .emotion-13:hover { + .emotion-17:hover { background-color: #4caf51; } } -.emotion-13:active { +.emotion-17:active { box-shadow: 0px 5px 5px -3px rgba(0,0,0,0.2),0px 8px 10px 1px rgba(0,0,0,0.14),0px 3px 14px 2px rgba(0,0,0,0.12); } -.emotion-13.Mui-focusVisible { +.emotion-17.Mui-focusVisible { box-shadow: 0px 3px 5px -1px rgba(0,0,0,0.2),0px 6px 10px 0px rgba(0,0,0,0.14),0px 1px 18px 0px rgba(0,0,0,0.12); } -.emotion-13.Mui-disabled { +.emotion-17.Mui-disabled { color: #7E7E7E; box-shadow: none; background-color: #dadee0; } -.emotion-13:hover { +.emotion-17:hover { box-shadow: none; } -.emotion-13.Mui-focusVisible { +.emotion-17.Mui-focusVisible { box-shadow: none; } -.emotion-13:active { +.emotion-17:active { box-shadow: none; } -.emotion-13.Mui-disabled { +.emotion-17.Mui-disabled { box-shadow: none; } -.emotion-14 { +.emotion-18 { display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -481,23 +481,23 @@ label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-p box-shadow: none; } -.emotion-14::-moz-focus-inner { +.emotion-18::-moz-focus-inner { border-style: none; } -.emotion-14.Mui-disabled { +.emotion-18.Mui-disabled { pointer-events: none; cursor: default; } @media print { - .emotion-14 { + .emotion-18 { -webkit-print-color-adjust: exact; color-adjust: exact; } } -.emotion-14:hover { +.emotion-18:hover { -webkit-text-decoration: none; text-decoration: none; background-color: rgba(76, 175, 81, 0.04); @@ -505,29 +505,29 @@ label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-p } @media (hover: none) { - .emotion-14:hover { + .emotion-18:hover { background-color: transparent; } } -.emotion-14.Mui-disabled { +.emotion-18.Mui-disabled { color: #7E7E7E; border: 1px solid #dadee0; } -.emotion-14:hover { +.emotion-18:hover { box-shadow: none; } -.emotion-14.Mui-focusVisible { +.emotion-18.Mui-focusVisible { box-shadow: none; } -.emotion-14:active { +.emotion-18:active { box-shadow: none; } -.emotion-14.Mui-disabled { +.emotion-18.Mui-disabled { box-shadow: none; } @@ -690,6 +690,36 @@ label[data-shrink=false]+.MuiInputBase-formControl .emotion-4:focus::-ms-input-p /> + +