From 9ad27807f5c948938c781a6548b9d902898f4824 Mon Sep 17 00:00:00 2001 From: Rithvik Nishad Date: Thu, 11 Jul 2024 12:41:58 +0530 Subject: [PATCH] Phone number field: Adds helper icon to improve how supported phone number types are shown (#8126) * Adds utility fn. to humanize strings * Adds helper to clarify supported phone number types in phone number field * update `humanizeStrings` implementation * correct icon for user register page * fix responsiveness * handle empty array gracefully --- .../Form/FormFields/PhoneNumberFormField.tsx | 41 ++++++++----------- src/Components/Users/UserAdd.tsx | 3 +- src/Locale/en/Common.json | 5 +++ src/Utils/utils.ts | 19 +++++++++ 4 files changed, 44 insertions(+), 24 deletions(-) diff --git a/src/Components/Form/FormFields/PhoneNumberFormField.tsx b/src/Components/Form/FormFields/PhoneNumberFormField.tsx index b2034507475..c580a15e409 100644 --- a/src/Components/Form/FormFields/PhoneNumberFormField.tsx +++ b/src/Components/Form/FormFields/PhoneNumberFormField.tsx @@ -7,6 +7,7 @@ import { formatPhoneNumber as formatPhoneNumberUtil, getCountryCode, CountryData, + humanizeStrings, } from "../../../Utils/utils"; import phoneCodesJson from "../../../Common/static/countryPhoneAndFlags.json"; import { @@ -14,8 +15,9 @@ import { PhoneNumberValidator, PhoneNumberType, } from "../FieldValidators"; -import CareIcon, { IconName } from "../../../CAREUI/icons/CareIcon"; +import CareIcon from "../../../CAREUI/icons/CareIcon"; import { Popover } from "@headlessui/react"; +import { useTranslation } from "react-i18next"; const phoneCodes: Record = phoneCodesJson; @@ -154,29 +156,22 @@ export default function PhoneNumberFormField(props: Props) { ); } -const phoneNumberTypeIcons: Record = { - international_mobile: "l-globe", - indian_mobile: "l-mobile-android", - mobile: "l-mobile-android", - landline: "l-phone", - support: "l-headset", -}; +const PhoneNumberTypesHelp = (props: { types: PhoneNumberType[] }) => { + const { t } = useTranslation(); -const PhoneNumberTypesHelp = ({ types }: { types: PhoneNumberType[] }) => ( -
- {types.map((type) => ( - - - - {type.replace("_", " ")} - - - ))} -
-); + return ( +
+ +
+ Supports only{" "} + + {humanizeStrings(props.types.map((item) => t(item)))} + {" "} + numbers. +
+
+ ); +}; const conditionPhoneCode = (code: string) => { code = code.split(" ")[0]; diff --git a/src/Components/Users/UserAdd.tsx b/src/Components/Users/UserAdd.tsx index f7e6b978fb9..bb8b1ea158d 100644 --- a/src/Components/Users/UserAdd.tsx +++ b/src/Components/Users/UserAdd.tsx @@ -608,7 +608,8 @@ export const UserAdd = (props: UserProps) => { className="inline-block rounded border border-gray-600 bg-gray-50 px-4 py-2 text-gray-600 transition hover:bg-gray-100" target="_blank" > -  Need Help? +  Need + Help? } backUrl="/users" diff --git a/src/Locale/en/Common.json b/src/Locale/en/Common.json index 019a51232ba..f6ee4f1032d 100644 --- a/src/Locale/en/Common.json +++ b/src/Locale/en/Common.json @@ -48,6 +48,11 @@ "filter": "Filter", "ordering": "Ordering", "phone_number": "Phone Number", + "international_mobile": "International Mobile", + "indian_mobile": "Indian Mobile", + "mobile": "Mobile", + "landline": "Indian landline", + "support": "Support", "emergency_contact_number": "Emergency Contact Number", "last_modified": "Last Modified", "patient_address": "Patient Address", diff --git a/src/Utils/utils.ts b/src/Utils/utils.ts index d599a494b1c..60c49da0dc9 100644 --- a/src/Utils/utils.ts +++ b/src/Utils/utils.ts @@ -454,3 +454,22 @@ export const isPostPartum = (data_of_delivery?: string) => { export const isAntenatal = (menstruation_start_date?: string) => { return dayjs().diff(menstruation_start_date, "month") <= 9; }; + +/** + * A utility method to format an array of string to human readable format. + * + * @param values Array of strings to be made human readable. + * @returns Human readable version of the list of strings + */ +export const humanizeStrings = (strings: readonly string[], empty = "") => { + if (strings.length === 0) { + return empty; + } + + if (strings.length === 1) { + return strings[0]; + } + + const [last, ...items] = [...strings].reverse(); + return `${items.reverse().join(", ")} and ${last}`; +};