import clsx from 'clsx'; import PropTypes from 'prop-types'; import React, { memo } from 'react'; import DropdownSelect from '../DropdownSelect'; import i18n from './i18n'; import styles from './styles.scss'; const PhoneNumber = ({ formatPhone, usageType, label, currentLocale, phoneNumber, }: any) => { const usageTypeDom = label || usageType ? ( {label || i18n.getString(usageType, currentLocale)} ) : null; return ( {usageTypeDom} {formatPhone(phoneNumber)} ); }; PhoneNumber.propTypes = { formatPhone: PropTypes.func.isRequired, phoneNumber: PropTypes.string, usageType: PropTypes.string, label: PropTypes.string, currentLocale: PropTypes.string.isRequired, }; PhoneNumber.defaultProps = { phoneNumber: null, usageType: null, }; interface FromFieldIns { fromNumber: string; formatPhone: (...args: any[]) => any; fromNumbers: any[]; onChange: (...args: any[]) => any; currentLocale: string; hidden: boolean; showAnonymous: boolean; className?: string; disabled?: boolean; showCustomPhoneLabel?: boolean; } // phone number formatting becomes expensive when there are lots of numbers // memo makes this a pure component to reduce rendering cost const FromField = memo(function FromField({ className, fromNumber, fromNumbers, onChange, formatPhone, hidden, disabled, showAnonymous, currentLocale, showCustomPhoneLabel, }: FromFieldIns) { if (hidden) { return null; } const options = [...fromNumbers]; if (showAnonymous) { options.push({ phoneNumber: 'anonymous', }); } return ( { if (value === 'anonymous') { return {i18n.getString('Blocked', currentLocale)}; } return ( ); }} valueFunction={(option) => option.phoneNumber} renderFunction={(option) => { if (option.phoneNumber === 'anonymous') { return {i18n.getString('Blocked', currentLocale)}; } return ( ); }} /> ); }); // @ts-expect-error TS(2339): Property 'propTypes' does not exist on type 'Named... Remove this comment to see the full error message FromField.propTypes = { fromNumber: PropTypes.string, formatPhone: PropTypes.func.isRequired, fromNumbers: PropTypes.arrayOf( PropTypes.shape({ phoneNumber: PropTypes.string, usageType: PropTypes.string, }), ).isRequired, onChange: PropTypes.func.isRequired, currentLocale: PropTypes.string.isRequired, hidden: PropTypes.bool.isRequired, showAnonymous: PropTypes.bool, className: PropTypes.string, disabled: PropTypes.bool, }; // @ts-expect-error TS(2339): Property 'defaultProps' does not exist on type 'Na... Remove this comment to see the full error message FromField.defaultProps = { fromNumber: null, className: undefined, showAnonymous: true, disabled: false, }; export default FromField;