@nuskin/shipping-address-form 1.5.0 → 1.5.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.
|
@@ -86,7 +86,7 @@ const ShippingAddressForm = ({
|
|
|
86
86
|
(0, _react.useEffect)(() => {
|
|
87
87
|
setSelectedCountry(country);
|
|
88
88
|
setHasUserSelectedPhoneCountry(false);
|
|
89
|
-
}, [
|
|
89
|
+
}, [country]);
|
|
90
90
|
(0, _react.useEffect)(() => {
|
|
91
91
|
const availableCountries = shippingAddressForm.countries || [];
|
|
92
92
|
if (availableCountries.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ShippingAddressForm.js","names":["_propTypes","_interopRequireDefault","require","_react","_addressLookup","_interopRequireWildcard","_foundationUiComponents","_useAddressFieldLabels","_useShippingAddressForm","_useShippingFormState","_ShippingField","_shippingStrings","_emailVerify","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","getDefaultFieldLabel","fieldName","replace","character","toUpperCase","trim","getFieldLabel","labels","phoneLabelOverride","_labels$formStrings","mobilePhoneLabel","formStrings","CONTROL_TEST_IDS","country","saveToAccount","saveAsDefault","submit","cancel","CONTROL_IDS","ShippingAddressForm","language","onAction","address","showSaveCheckbox","showDefaultCheckbox","showCancelButton","showContinueButton","readOnlyView","type","selectedCountry","setSelectedCountry","useState","useAddressFieldLabels","shippingAddressForm","useShippingAddressForm","shippingFields","useMemo","preAddressFields","postAddressFields","addressFormDefinition","addressForm","isSavePending","setIsSavePending","validationRequestId","setValidationRequestId","phoneCountry","setPhoneCountry","mobilePhoneCountry","hasUserSelectedPhoneCountry","setHasUserSelectedPhoneCountry","setMobilePhoneLabel","emailValidationError","setEmailValidationError","values","setFieldValue","touchField","markAllTouched","resetValidationState","getFieldError","getValidationErrors","getPhoneValidationStatus","useShippingFormState","defaultPhoneCountry","showCheckboxSection","showActions","useEffect","availableCountries","countries","length","hasLoggedInCountry","some","countryOption","code","nextSelectedCountry","currentValue","isMounted","getShippingLabels","then","resolvedLabels","validateEmailValue","email","trimmedEmail","isEmailSyntaxValid","_labels$formStrings2","invalidEmail","emailInfo","getEmailInfo","hasInvalidEmail","isFormatValid","isDomainValid","_labels$formStrings3","handleAddressSelect","data","_data$status","shippingValidationErrors","isAddressLookupComplete","status","completeness","isShippingComplete","emailValue","isEmailValid","phoneValidationStatus","reduce","acc","fieldConfig","field","validationStatus","phone","handlePhoneCountryChange","nextCountry","resolvedCountry","handleSaveAddress","handleCancel","handleFieldBlur","renderLayoutItem","layoutItem","index","component","jsx","className","children","strings","formDefinition","deferFormLookup","Boolean","onAddressSelect","showManualValidateButton","jsxs","htmlFor","countryLabel","id","value","onChange","event","target","disabled","map","name","find","label","error","SUPPORTED_COUNTRIES","nextValue","onBlur","onPhoneCountryChange","layout","filter","Fragment","checked","agreeToSaveAddressLabel","setDefaultLabel","NsButton","variant","color","onClick","continueLabel","saveAddressButtonLabel","cancelLabel","propTypes","PropTypes","string","func","bool","shape","_default","exports"],"sources":["../src/ShippingAddressForm.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport { useEffect, useMemo, useState } from 'react';\nimport AddressLookup, { SUPPORTED_COUNTRIES } from '@nuskin/address-lookup'\nimport { NsButton } from '@nuskin/foundation-ui-components';\nimport 'react-phone-number-input/style.css'\nimport './styles/shippingAddressForm.css'\nimport useAddressFieldLabels from './hooks/useAddressFieldLabels';\nimport useShippingAddressForm from './hooks/useShippingAddressForm';\nimport useShippingFormState from './hooks/useShippingFormState';\nimport ShippingField from './components/ShippingField';\nimport { getShippingLabels } from './utils/shippingStrings.js';\nimport { getEmailInfo, isEmailSyntaxValid } from './utils/emailVerify';\n\nconst getDefaultFieldLabel = (fieldName = '') =>\n fieldName\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (character) => character.toUpperCase())\n .trim();\n\nconst getFieldLabel = (fieldName, labels, phoneLabelOverride) => {\n if (fieldName === 'mobilePhone') {\n return phoneLabelOverride || labels.mobilePhoneLabel;\n }\n\n return labels[`${fieldName}Label`] || labels.formStrings?.[fieldName] || getDefaultFieldLabel(fieldName);\n};\n\nconst CONTROL_TEST_IDS = {\n country: 'qa-address-country',\n saveToAccount: 'qa-address-save-to-account',\n saveAsDefault: 'qa-address-save-as-default',\n submit: 'qa-address-submit',\n cancel: 'qa-address-cancel'\n};\n\nconst CONTROL_IDS = {\n country: 'address-country',\n saveToAccount: 'address-save-to-account',\n saveAsDefault: 'address-save-as-default',\n submit: 'address-submit',\n cancel: 'address-cancel'\n};\n\nconst ShippingAddressForm = ({\n country = 'US',\n language,\n onAction,\n address = null,\n showSaveCheckbox = true,\n showDefaultCheckbox = true,\n showCancelButton = true,\n showContinueButton = false,\n readOnlyView = false,\n type = 'shipping'\n}) => {\n const [selectedCountry, setSelectedCountry] = useState(country)\n const labels = useAddressFieldLabels(selectedCountry, language)\n const { shippingAddressForm } = useShippingAddressForm(country, true, type)\n const shippingFields = useMemo(\n () => [\n ...(shippingAddressForm.preAddressFields || []),\n ...(shippingAddressForm.postAddressFields || [])\n ],\n [shippingAddressForm.postAddressFields, shippingAddressForm.preAddressFields]\n )\n const addressFormDefinition = selectedCountry === country ? shippingAddressForm.addressForm : null\n const [isSavePending, setIsSavePending] = useState(false)\n const [validationRequestId, setValidationRequestId] = useState(0)\n const [phoneCountry, setPhoneCountry] = useState(address?.mobilePhoneCountry || country)\n const [hasUserSelectedPhoneCountry, setHasUserSelectedPhoneCountry] = useState(false)\n const [mobilePhoneLabel, setMobilePhoneLabel] = useState('')\n const [emailValidationError, setEmailValidationError] = useState('')\n const {\n values,\n setFieldValue,\n touchField,\n markAllTouched,\n resetValidationState,\n getFieldError,\n getValidationErrors,\n getPhoneValidationStatus\n } = useShippingFormState({\n address,\n shippingFields,\n labels,\n defaultPhoneCountry: address?.mobilePhoneCountry || selectedCountry || country\n });\n const showCheckboxSection = showSaveCheckbox || showDefaultCheckbox;\n const showActions = !readOnlyView;\n\n useEffect(() => {\n setSelectedCountry(country)\n setHasUserSelectedPhoneCountry(false)\n }, [address, country])\n\n useEffect(() => {\n const availableCountries = shippingAddressForm.countries || [];\n\n if (availableCountries.length === 0) {\n setSelectedCountry(country);\n return;\n }\n\n const hasLoggedInCountry = availableCountries.some((countryOption) => countryOption.code === country);\n const nextSelectedCountry = hasLoggedInCountry ? country : availableCountries[0].code;\n\n setSelectedCountry((currentValue) => (\n availableCountries.some(\n (countryOption) => countryOption.code === currentValue\n ) ? currentValue : nextSelectedCountry\n ));\n }, [country, shippingAddressForm.countries])\n\n useEffect(() => {\n if (address?.mobilePhoneCountry) {\n setPhoneCountry(address.mobilePhoneCountry);\n return;\n }\n\n if (!hasUserSelectedPhoneCountry) {\n setPhoneCountry(selectedCountry || country);\n }\n }, [address?.mobilePhoneCountry, country, hasUserSelectedPhoneCountry, selectedCountry])\n\n useEffect(() => {\n let isMounted = true;\n\n getShippingLabels({ country: phoneCountry || country, language }).then((resolvedLabels) => {\n if (isMounted) {\n setMobilePhoneLabel(resolvedLabels.mobilePhoneLabel);\n }\n });\n\n return () => {\n isMounted = false;\n };\n }, [country, language, phoneCountry])\n\n useEffect(() => {\n if (!readOnlyView && !values.saveToAccount && values.saveAsDefault) {\n setFieldValue('saveAsDefault', false);\n }\n }, [readOnlyView, setFieldValue, values.saveAsDefault, values.saveToAccount])\n\n const validateEmailValue = async (email) => {\n const trimmedEmail = typeof email === 'string' ? email.trim() : '';\n\n if (!trimmedEmail) {\n setEmailValidationError('');\n return true;\n }\n\n if (!isEmailSyntaxValid(trimmedEmail)) {\n setEmailValidationError(labels.formStrings?.invalidEmail || 'Invalid email address.');\n return false;\n }\n\n const emailInfo = await getEmailInfo(trimmedEmail);\n const hasInvalidEmail =\n emailInfo &&\n (!emailInfo.isFormatValid || !emailInfo.isDomainValid);\n\n if (hasInvalidEmail) {\n setEmailValidationError(labels.formStrings?.invalidEmail || 'Invalid email address.');\n return false;\n }\n\n setEmailValidationError('');\n return true;\n };\n\n const handleAddressSelect = async (data) => {\n if (readOnlyView) {\n return;\n }\n\n if (!isSavePending || data?.type !== 'validation-request') {\n return;\n }\n\n setIsSavePending(false);\n\n const shippingValidationErrors = getValidationErrors();\n const isAddressLookupComplete = data?.status?.completeness === 'complete';\n const isShippingComplete = shippingValidationErrors.length === 0;\n\n if (!isAddressLookupComplete || !isShippingComplete) {\n return;\n }\n\n const emailValue = typeof values.email === 'string' ? values.email.trim() : '';\n\n if (emailValue) {\n const isEmailValid = await validateEmailValue(emailValue);\n\n if (!isEmailValid) {\n return;\n }\n }\n\n const phoneValidationStatus = getPhoneValidationStatus();\n\n onAction?.({\n type: 'save',\n data: {\n ...data.address,\n ...shippingFields.reduce((acc, fieldConfig) => {\n acc[fieldConfig.field] = values[fieldConfig.field];\n return acc;\n }, {}),\n mobilePhoneCountry: phoneCountry,\n country: selectedCountry,\n saveToAccount: values.saveToAccount,\n saveAsDefault: values.saveAsDefault\n },\n validationStatus: {\n ...data.status,\n ...(phoneValidationStatus ? { phone: phoneValidationStatus } : {})\n }\n });\n }\n\n const handlePhoneCountryChange = async (nextCountry) => {\n if (readOnlyView) {\n return;\n }\n\n const resolvedCountry = nextCountry || selectedCountry || country;\n\n setHasUserSelectedPhoneCountry(true);\n setPhoneCountry(resolvedCountry);\n\n const resolvedLabels = await getShippingLabels({\n country: resolvedCountry,\n language\n });\n\n setMobilePhoneLabel(resolvedLabels.mobilePhoneLabel);\n };\n\n const handleSaveAddress = () => {\n if (readOnlyView) {\n return;\n }\n\n setEmailValidationError('');\n markAllTouched();\n setIsSavePending(true);\n setValidationRequestId((currentValue) => currentValue + 1);\n };\n\n const handleCancel = () => {\n if (readOnlyView) {\n return;\n }\n\n setIsSavePending(false);\n setEmailValidationError('');\n resetValidationState();\n onAction?.({ type: 'cancel' });\n };\n\n const handleFieldBlur = async (fieldName) => {\n if (readOnlyView) {\n return;\n }\n\n touchField(fieldName);\n\n if (fieldName === 'email') {\n await validateEmailValue(values.email);\n }\n };\n\n const renderLayoutItem = (layoutItem, index) => {\n if (layoutItem.type === 'component' && layoutItem.component === 'addressLookup') {\n return (\n <div\n className='ns-shipping-address-form__component ns-shipping-address-form__component--full'\n key={`addressLookup-${index}`}\n >\n <AddressLookup\n country={selectedCountry}\n language={language}\n strings={labels.formStrings}\n formDefinition={addressFormDefinition}\n deferFormLookup={Boolean(addressFormDefinition)}\n validationRequestId={validationRequestId}\n onAddressSelect={handleAddressSelect}\n address={address}\n showManualValidateButton={true}\n readOnlyView={readOnlyView}\n />\n </div>\n );\n }\n\n if (layoutItem.type === 'component' && layoutItem.component === 'countrySelector') {\n return (\n <div\n className='ns-shipping-address-form__field ns-shipping-address-form__field--country-selector'\n key='country-selector'\n >\n <label\n htmlFor={CONTROL_IDS.country}\n className='ns-shipping-address-form__label'\n >\n {labels.countryLabel}\n </label>\n <select\n id={CONTROL_IDS.country}\n data-testid={CONTROL_TEST_IDS.country}\n value={selectedCountry}\n onChange={(event) => {\n if (!readOnlyView) {\n setSelectedCountry(event.target.value);\n }\n }}\n className='ns-shipping-address-form__input'\n disabled={readOnlyView}\n >\n {shippingAddressForm.countries.map((countryOption) => (\n <option key={countryOption.code} value={countryOption.code}>\n {countryOption.name}\n </option>\n ))}\n </select>\n </div>\n );\n }\n\n if (layoutItem.type === 'field') {\n const fieldConfig = shippingFields.find((field) => field.field === layoutItem.field);\n\n if (!fieldConfig) {\n return null;\n }\n\n return (\n <ShippingField\n key={fieldConfig.field}\n fieldConfig={fieldConfig}\n label={getFieldLabel(fieldConfig.field, labels, mobilePhoneLabel)}\n value={values[fieldConfig.field]}\n error={fieldConfig.field === 'email' ? (emailValidationError || getFieldError(fieldConfig)) : getFieldError(fieldConfig)}\n country={phoneCountry}\n countries={SUPPORTED_COUNTRIES}\n onChange={(nextValue) => {\n if (readOnlyView) {\n return;\n }\n\n if (fieldConfig.field === 'email' && emailValidationError) {\n setEmailValidationError('');\n }\n\n setFieldValue(fieldConfig.field, nextValue);\n }}\n onBlur={() => handleFieldBlur(fieldConfig.field)}\n onPhoneCountryChange={handlePhoneCountryChange}\n readOnlyView={readOnlyView}\n />\n );\n }\n\n return null;\n };\n\n return (\n <div className='ns-shipping-address-form'>\n {shippingAddressForm.layout.some(\n (layoutItem) => layoutItem.type === 'component' && layoutItem.component === 'countrySelector'\n ) && renderLayoutItem({ type: 'component', component: 'countrySelector' }, 'country-selector')}\n <div className='ns-shipping-address-form__layout'>\n {shippingAddressForm.layout\n .filter((layoutItem) => !(layoutItem.type === 'component' && layoutItem.component === 'countrySelector'))\n .map(renderLayoutItem)}\n </div>\n {showCheckboxSection && (\n <>\n <hr className='ns-shipping-address-form__separator' />\n {showSaveCheckbox && (\n <div>\n <label className='ns-shipping-address-form__checkbox-label ns-shipping-address-form__checkbox-label--spaced'>\n <input\n id={CONTROL_IDS.saveToAccount}\n data-testid={CONTROL_TEST_IDS.saveToAccount}\n type=\"checkbox\"\n checked={values.saveToAccount}\n onChange={(e) => {\n if (!readOnlyView) {\n setFieldValue('saveToAccount', e.target.checked);\n }\n }}\n className='ns-shipping-address-form__checkbox'\n disabled={readOnlyView}\n />\n {labels.agreeToSaveAddressLabel}\n </label>\n </div>\n )}\n {showDefaultCheckbox && (\n <div>\n <label className='ns-shipping-address-form__checkbox-label'>\n <input\n id={CONTROL_IDS.saveAsDefault}\n data-testid={CONTROL_TEST_IDS.saveAsDefault}\n type=\"checkbox\"\n checked={values.saveAsDefault}\n onChange={(e) => {\n if (!readOnlyView) {\n setFieldValue('saveAsDefault', e.target.checked);\n }\n }}\n className='ns-shipping-address-form__checkbox'\n disabled={readOnlyView || !values.saveToAccount}\n />\n {labels.setDefaultLabel}\n </label>\n </div>\n )}\n <hr className='ns-shipping-address-form__separator' />\n </>\n )}\n {showActions && (\n <div className='ns-shipping-address-form__actions'>\n <NsButton\n id={CONTROL_IDS.submit}\n data-testid={CONTROL_TEST_IDS.submit}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSaveAddress}\n >\n {showContinueButton ? labels.continueLabel : labels.saveAddressButtonLabel}\n </NsButton>\n {showCancelButton && (\n <NsButton\n id={CONTROL_IDS.cancel}\n data-testid={CONTROL_TEST_IDS.cancel}\n variant=\"outlined\"\n color=\"primary\"\n onClick={handleCancel}\n >\n {labels.cancelLabel}\n </NsButton>\n )}\n </div>\n )}\n </div>\n );\n};\n\nShippingAddressForm.propTypes = {\n country: PropTypes.string,\n language: PropTypes.string,\n type: PropTypes.string,\n onAction: PropTypes.func,\n showSaveCheckbox: PropTypes.bool,\n showDefaultCheckbox: PropTypes.bool,\n showCancelButton: PropTypes.bool,\n showContinueButton: PropTypes.bool,\n readOnlyView: PropTypes.bool,\n address: PropTypes.shape({\n mobilePhoneCountry: PropTypes.string,\n saveToAccount: PropTypes.bool,\n saveAsDefault: PropTypes.bool\n })\n};\n\nexport default ShippingAddressForm;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"ShippingAddressForm.js","names":["_propTypes","_interopRequireDefault","require","_react","_addressLookup","_interopRequireWildcard","_foundationUiComponents","_useAddressFieldLabels","_useShippingAddressForm","_useShippingFormState","_ShippingField","_shippingStrings","_emailVerify","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","getDefaultFieldLabel","fieldName","replace","character","toUpperCase","trim","getFieldLabel","labels","phoneLabelOverride","_labels$formStrings","mobilePhoneLabel","formStrings","CONTROL_TEST_IDS","country","saveToAccount","saveAsDefault","submit","cancel","CONTROL_IDS","ShippingAddressForm","language","onAction","address","showSaveCheckbox","showDefaultCheckbox","showCancelButton","showContinueButton","readOnlyView","type","selectedCountry","setSelectedCountry","useState","useAddressFieldLabels","shippingAddressForm","useShippingAddressForm","shippingFields","useMemo","preAddressFields","postAddressFields","addressFormDefinition","addressForm","isSavePending","setIsSavePending","validationRequestId","setValidationRequestId","phoneCountry","setPhoneCountry","mobilePhoneCountry","hasUserSelectedPhoneCountry","setHasUserSelectedPhoneCountry","setMobilePhoneLabel","emailValidationError","setEmailValidationError","values","setFieldValue","touchField","markAllTouched","resetValidationState","getFieldError","getValidationErrors","getPhoneValidationStatus","useShippingFormState","defaultPhoneCountry","showCheckboxSection","showActions","useEffect","availableCountries","countries","length","hasLoggedInCountry","some","countryOption","code","nextSelectedCountry","currentValue","isMounted","getShippingLabels","then","resolvedLabels","validateEmailValue","email","trimmedEmail","isEmailSyntaxValid","_labels$formStrings2","invalidEmail","emailInfo","getEmailInfo","hasInvalidEmail","isFormatValid","isDomainValid","_labels$formStrings3","handleAddressSelect","data","_data$status","shippingValidationErrors","isAddressLookupComplete","status","completeness","isShippingComplete","emailValue","isEmailValid","phoneValidationStatus","reduce","acc","fieldConfig","field","validationStatus","phone","handlePhoneCountryChange","nextCountry","resolvedCountry","handleSaveAddress","handleCancel","handleFieldBlur","renderLayoutItem","layoutItem","index","component","jsx","className","children","strings","formDefinition","deferFormLookup","Boolean","onAddressSelect","showManualValidateButton","jsxs","htmlFor","countryLabel","id","value","onChange","event","target","disabled","map","name","find","label","error","SUPPORTED_COUNTRIES","nextValue","onBlur","onPhoneCountryChange","layout","filter","Fragment","checked","agreeToSaveAddressLabel","setDefaultLabel","NsButton","variant","color","onClick","continueLabel","saveAddressButtonLabel","cancelLabel","propTypes","PropTypes","string","func","bool","shape","_default","exports"],"sources":["../src/ShippingAddressForm.js"],"sourcesContent":["import PropTypes from 'prop-types';\nimport { useEffect, useMemo, useState } from 'react';\nimport AddressLookup, { SUPPORTED_COUNTRIES } from '@nuskin/address-lookup'\nimport { NsButton } from '@nuskin/foundation-ui-components';\nimport 'react-phone-number-input/style.css'\nimport './styles/shippingAddressForm.css'\nimport useAddressFieldLabels from './hooks/useAddressFieldLabels';\nimport useShippingAddressForm from './hooks/useShippingAddressForm';\nimport useShippingFormState from './hooks/useShippingFormState';\nimport ShippingField from './components/ShippingField';\nimport { getShippingLabels } from './utils/shippingStrings.js';\nimport { getEmailInfo, isEmailSyntaxValid } from './utils/emailVerify';\n\nconst getDefaultFieldLabel = (fieldName = '') =>\n fieldName\n .replace(/([A-Z])/g, ' $1')\n .replace(/^./, (character) => character.toUpperCase())\n .trim();\n\nconst getFieldLabel = (fieldName, labels, phoneLabelOverride) => {\n if (fieldName === 'mobilePhone') {\n return phoneLabelOverride || labels.mobilePhoneLabel;\n }\n\n return labels[`${fieldName}Label`] || labels.formStrings?.[fieldName] || getDefaultFieldLabel(fieldName);\n};\n\nconst CONTROL_TEST_IDS = {\n country: 'qa-address-country',\n saveToAccount: 'qa-address-save-to-account',\n saveAsDefault: 'qa-address-save-as-default',\n submit: 'qa-address-submit',\n cancel: 'qa-address-cancel'\n};\n\nconst CONTROL_IDS = {\n country: 'address-country',\n saveToAccount: 'address-save-to-account',\n saveAsDefault: 'address-save-as-default',\n submit: 'address-submit',\n cancel: 'address-cancel'\n};\n\nconst ShippingAddressForm = ({\n country = 'US',\n language,\n onAction,\n address = null,\n showSaveCheckbox = true,\n showDefaultCheckbox = true,\n showCancelButton = true,\n showContinueButton = false,\n readOnlyView = false,\n type = 'shipping'\n}) => {\n const [selectedCountry, setSelectedCountry] = useState(country)\n const labels = useAddressFieldLabels(selectedCountry, language)\n const { shippingAddressForm } = useShippingAddressForm(country, true, type)\n const shippingFields = useMemo(\n () => [\n ...(shippingAddressForm.preAddressFields || []),\n ...(shippingAddressForm.postAddressFields || [])\n ],\n [shippingAddressForm.postAddressFields, shippingAddressForm.preAddressFields]\n )\n const addressFormDefinition = selectedCountry === country ? shippingAddressForm.addressForm : null\n const [isSavePending, setIsSavePending] = useState(false)\n const [validationRequestId, setValidationRequestId] = useState(0)\n const [phoneCountry, setPhoneCountry] = useState(address?.mobilePhoneCountry || country)\n const [hasUserSelectedPhoneCountry, setHasUserSelectedPhoneCountry] = useState(false)\n const [mobilePhoneLabel, setMobilePhoneLabel] = useState('')\n const [emailValidationError, setEmailValidationError] = useState('')\n const {\n values,\n setFieldValue,\n touchField,\n markAllTouched,\n resetValidationState,\n getFieldError,\n getValidationErrors,\n getPhoneValidationStatus\n } = useShippingFormState({\n address,\n shippingFields,\n labels,\n defaultPhoneCountry: address?.mobilePhoneCountry || selectedCountry || country\n });\n const showCheckboxSection = showSaveCheckbox || showDefaultCheckbox;\n const showActions = !readOnlyView;\n\n useEffect(() => {\n setSelectedCountry(country)\n setHasUserSelectedPhoneCountry(false)\n }, [country])\n\n useEffect(() => {\n const availableCountries = shippingAddressForm.countries || [];\n\n if (availableCountries.length === 0) {\n setSelectedCountry(country);\n return;\n }\n\n const hasLoggedInCountry = availableCountries.some((countryOption) => countryOption.code === country);\n const nextSelectedCountry = hasLoggedInCountry ? country : availableCountries[0].code;\n\n setSelectedCountry((currentValue) => (\n availableCountries.some(\n (countryOption) => countryOption.code === currentValue\n ) ? currentValue : nextSelectedCountry\n ));\n }, [country, shippingAddressForm.countries])\n\n useEffect(() => {\n if (address?.mobilePhoneCountry) {\n setPhoneCountry(address.mobilePhoneCountry);\n return;\n }\n\n if (!hasUserSelectedPhoneCountry) {\n setPhoneCountry(selectedCountry || country);\n }\n }, [address?.mobilePhoneCountry, country, hasUserSelectedPhoneCountry, selectedCountry])\n\n useEffect(() => {\n let isMounted = true;\n\n getShippingLabels({ country: phoneCountry || country, language }).then((resolvedLabels) => {\n if (isMounted) {\n setMobilePhoneLabel(resolvedLabels.mobilePhoneLabel);\n }\n });\n\n return () => {\n isMounted = false;\n };\n }, [country, language, phoneCountry])\n\n useEffect(() => {\n if (!readOnlyView && !values.saveToAccount && values.saveAsDefault) {\n setFieldValue('saveAsDefault', false);\n }\n }, [readOnlyView, setFieldValue, values.saveAsDefault, values.saveToAccount])\n\n const validateEmailValue = async (email) => {\n const trimmedEmail = typeof email === 'string' ? email.trim() : '';\n\n if (!trimmedEmail) {\n setEmailValidationError('');\n return true;\n }\n\n if (!isEmailSyntaxValid(trimmedEmail)) {\n setEmailValidationError(labels.formStrings?.invalidEmail || 'Invalid email address.');\n return false;\n }\n\n const emailInfo = await getEmailInfo(trimmedEmail);\n const hasInvalidEmail =\n emailInfo &&\n (!emailInfo.isFormatValid || !emailInfo.isDomainValid);\n\n if (hasInvalidEmail) {\n setEmailValidationError(labels.formStrings?.invalidEmail || 'Invalid email address.');\n return false;\n }\n\n setEmailValidationError('');\n return true;\n };\n\n const handleAddressSelect = async (data) => {\n if (readOnlyView) {\n return;\n }\n\n if (!isSavePending || data?.type !== 'validation-request') {\n return;\n }\n\n setIsSavePending(false);\n\n const shippingValidationErrors = getValidationErrors();\n const isAddressLookupComplete = data?.status?.completeness === 'complete';\n const isShippingComplete = shippingValidationErrors.length === 0;\n\n if (!isAddressLookupComplete || !isShippingComplete) {\n return;\n }\n\n const emailValue = typeof values.email === 'string' ? values.email.trim() : '';\n\n if (emailValue) {\n const isEmailValid = await validateEmailValue(emailValue);\n\n if (!isEmailValid) {\n return;\n }\n }\n\n const phoneValidationStatus = getPhoneValidationStatus();\n\n onAction?.({\n type: 'save',\n data: {\n ...data.address,\n ...shippingFields.reduce((acc, fieldConfig) => {\n acc[fieldConfig.field] = values[fieldConfig.field];\n return acc;\n }, {}),\n mobilePhoneCountry: phoneCountry,\n country: selectedCountry,\n saveToAccount: values.saveToAccount,\n saveAsDefault: values.saveAsDefault\n },\n validationStatus: {\n ...data.status,\n ...(phoneValidationStatus ? { phone: phoneValidationStatus } : {})\n }\n });\n }\n\n const handlePhoneCountryChange = async (nextCountry) => {\n if (readOnlyView) {\n return;\n }\n\n const resolvedCountry = nextCountry || selectedCountry || country;\n\n setHasUserSelectedPhoneCountry(true);\n setPhoneCountry(resolvedCountry);\n\n const resolvedLabels = await getShippingLabels({\n country: resolvedCountry,\n language\n });\n\n setMobilePhoneLabel(resolvedLabels.mobilePhoneLabel);\n };\n\n const handleSaveAddress = () => {\n if (readOnlyView) {\n return;\n }\n\n setEmailValidationError('');\n markAllTouched();\n setIsSavePending(true);\n setValidationRequestId((currentValue) => currentValue + 1);\n };\n\n const handleCancel = () => {\n if (readOnlyView) {\n return;\n }\n\n setIsSavePending(false);\n setEmailValidationError('');\n resetValidationState();\n onAction?.({ type: 'cancel' });\n };\n\n const handleFieldBlur = async (fieldName) => {\n if (readOnlyView) {\n return;\n }\n\n touchField(fieldName);\n\n if (fieldName === 'email') {\n await validateEmailValue(values.email);\n }\n };\n\n const renderLayoutItem = (layoutItem, index) => {\n if (layoutItem.type === 'component' && layoutItem.component === 'addressLookup') {\n return (\n <div\n className='ns-shipping-address-form__component ns-shipping-address-form__component--full'\n key={`addressLookup-${index}`}\n >\n <AddressLookup\n country={selectedCountry}\n language={language}\n strings={labels.formStrings}\n formDefinition={addressFormDefinition}\n deferFormLookup={Boolean(addressFormDefinition)}\n validationRequestId={validationRequestId}\n onAddressSelect={handleAddressSelect}\n address={address}\n showManualValidateButton={true}\n readOnlyView={readOnlyView}\n />\n </div>\n );\n }\n\n if (layoutItem.type === 'component' && layoutItem.component === 'countrySelector') {\n return (\n <div\n className='ns-shipping-address-form__field ns-shipping-address-form__field--country-selector'\n key='country-selector'\n >\n <label\n htmlFor={CONTROL_IDS.country}\n className='ns-shipping-address-form__label'\n >\n {labels.countryLabel}\n </label>\n <select\n id={CONTROL_IDS.country}\n data-testid={CONTROL_TEST_IDS.country}\n value={selectedCountry}\n onChange={(event) => {\n if (!readOnlyView) {\n setSelectedCountry(event.target.value);\n }\n }}\n className='ns-shipping-address-form__input'\n disabled={readOnlyView}\n >\n {shippingAddressForm.countries.map((countryOption) => (\n <option key={countryOption.code} value={countryOption.code}>\n {countryOption.name}\n </option>\n ))}\n </select>\n </div>\n );\n }\n\n if (layoutItem.type === 'field') {\n const fieldConfig = shippingFields.find((field) => field.field === layoutItem.field);\n\n if (!fieldConfig) {\n return null;\n }\n\n return (\n <ShippingField\n key={fieldConfig.field}\n fieldConfig={fieldConfig}\n label={getFieldLabel(fieldConfig.field, labels, mobilePhoneLabel)}\n value={values[fieldConfig.field]}\n error={fieldConfig.field === 'email' ? (emailValidationError || getFieldError(fieldConfig)) : getFieldError(fieldConfig)}\n country={phoneCountry}\n countries={SUPPORTED_COUNTRIES}\n onChange={(nextValue) => {\n if (readOnlyView) {\n return;\n }\n\n if (fieldConfig.field === 'email' && emailValidationError) {\n setEmailValidationError('');\n }\n\n setFieldValue(fieldConfig.field, nextValue);\n }}\n onBlur={() => handleFieldBlur(fieldConfig.field)}\n onPhoneCountryChange={handlePhoneCountryChange}\n readOnlyView={readOnlyView}\n />\n );\n }\n\n return null;\n };\n\n return (\n <div className='ns-shipping-address-form'>\n {shippingAddressForm.layout.some(\n (layoutItem) => layoutItem.type === 'component' && layoutItem.component === 'countrySelector'\n ) && renderLayoutItem({ type: 'component', component: 'countrySelector' }, 'country-selector')}\n <div className='ns-shipping-address-form__layout'>\n {shippingAddressForm.layout\n .filter((layoutItem) => !(layoutItem.type === 'component' && layoutItem.component === 'countrySelector'))\n .map(renderLayoutItem)}\n </div>\n {showCheckboxSection && (\n <>\n <hr className='ns-shipping-address-form__separator' />\n {showSaveCheckbox && (\n <div>\n <label className='ns-shipping-address-form__checkbox-label ns-shipping-address-form__checkbox-label--spaced'>\n <input\n id={CONTROL_IDS.saveToAccount}\n data-testid={CONTROL_TEST_IDS.saveToAccount}\n type=\"checkbox\"\n checked={values.saveToAccount}\n onChange={(e) => {\n if (!readOnlyView) {\n setFieldValue('saveToAccount', e.target.checked);\n }\n }}\n className='ns-shipping-address-form__checkbox'\n disabled={readOnlyView}\n />\n {labels.agreeToSaveAddressLabel}\n </label>\n </div>\n )}\n {showDefaultCheckbox && (\n <div>\n <label className='ns-shipping-address-form__checkbox-label'>\n <input\n id={CONTROL_IDS.saveAsDefault}\n data-testid={CONTROL_TEST_IDS.saveAsDefault}\n type=\"checkbox\"\n checked={values.saveAsDefault}\n onChange={(e) => {\n if (!readOnlyView) {\n setFieldValue('saveAsDefault', e.target.checked);\n }\n }}\n className='ns-shipping-address-form__checkbox'\n disabled={readOnlyView || !values.saveToAccount}\n />\n {labels.setDefaultLabel}\n </label>\n </div>\n )}\n <hr className='ns-shipping-address-form__separator' />\n </>\n )}\n {showActions && (\n <div className='ns-shipping-address-form__actions'>\n <NsButton\n id={CONTROL_IDS.submit}\n data-testid={CONTROL_TEST_IDS.submit}\n variant=\"contained\"\n color=\"primary\"\n onClick={handleSaveAddress}\n >\n {showContinueButton ? labels.continueLabel : labels.saveAddressButtonLabel}\n </NsButton>\n {showCancelButton && (\n <NsButton\n id={CONTROL_IDS.cancel}\n data-testid={CONTROL_TEST_IDS.cancel}\n variant=\"outlined\"\n color=\"primary\"\n onClick={handleCancel}\n >\n {labels.cancelLabel}\n </NsButton>\n )}\n </div>\n )}\n </div>\n );\n};\n\nShippingAddressForm.propTypes = {\n country: PropTypes.string,\n language: PropTypes.string,\n type: PropTypes.string,\n onAction: PropTypes.func,\n showSaveCheckbox: PropTypes.bool,\n showDefaultCheckbox: PropTypes.bool,\n showCancelButton: PropTypes.bool,\n showContinueButton: PropTypes.bool,\n readOnlyView: PropTypes.bool,\n address: PropTypes.shape({\n mobilePhoneCountry: PropTypes.string,\n saveToAccount: PropTypes.bool,\n saveAsDefault: PropTypes.bool\n })\n};\n\nexport default ShippingAddressForm;\n"],"mappings":"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","ignoreList":[]}
|
|
@@ -44,7 +44,12 @@ const useShippingFormState = ({
|
|
|
44
44
|
const [touchedFields, setTouchedFields] = (0, _react.useState)({});
|
|
45
45
|
const [values, setValues] = (0, _react.useState)(buildInitialValues(shippingFields, address, defaultPhoneCountry));
|
|
46
46
|
const fieldSignature = (0, _react.useMemo)(() => shippingFields.map(fieldConfig => fieldConfig.field).join('|'), [shippingFields]);
|
|
47
|
+
const previousFieldSignatureRef = (0, _react.useRef)(fieldSignature);
|
|
47
48
|
(0, _react.useEffect)(() => {
|
|
49
|
+
if (previousFieldSignatureRef.current === fieldSignature) {
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
previousFieldSignatureRef.current = fieldSignature;
|
|
48
53
|
setHasAttemptedSave(false);
|
|
49
54
|
setTouchedFields({});
|
|
50
55
|
setValues(buildInitialValues(shippingFields, address, defaultPhoneCountry));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useShippingFormState.js","names":["_react","require","_reactPhoneNumberInput","getTrimmedValue","value","trim","normalizeIncomingPhoneNumber","country","trimmedValue","parsedPhoneNumber","parsePhoneNumber","number","error","buildInitialValues","shippingFields","address","defaultPhoneCountry","fieldValues","reduce","acc","fieldConfig","field","mobilePhone","mobilePhoneCountry","saveToAccount","saveAsDefault","useShippingFormState","labels","hasAttemptedSave","setHasAttemptedSave","useState","touchedFields","setTouchedFields","values","setValues","fieldSignature","useMemo","map","join","useEffect","setFieldValue","fieldName","currentValue","touchField","markAllTouched","resetValidationState","getFieldError","shouldShowError","required","fieldRequiredLabel","isPossiblePhoneNumber","invalidPhoneLabel","allowedCharacters","test","getValidationErrors","errors","push","getPhoneValidationStatus","hasMobilePhoneField","some","valid","reason","_default","exports","default"],"sources":["../../src/hooks/useShippingFormState.js"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react';\nimport { isPossiblePhoneNumber, parsePhoneNumber } from 'react-phone-number-input';\n\nconst getTrimmedValue = (value) => (typeof value === 'string' ? value.trim() : value);\n\nconst normalizeIncomingPhoneNumber = (value, country) => {\n const trimmedValue = getTrimmedValue(value);\n\n if (!trimmedValue) {\n return '';\n }\n\n try {\n const parsedPhoneNumber = country ?\n parsePhoneNumber(trimmedValue, country) :\n parsePhoneNumber(trimmedValue);\n\n return parsedPhoneNumber?.number || trimmedValue;\n } catch (error) {\n return trimmedValue;\n }\n};\n\nconst buildInitialValues = (shippingFields = [], address = null, defaultPhoneCountry = '') => {\n const fieldValues = shippingFields.reduce((acc, fieldConfig) => {\n if (fieldConfig.field === 'mobilePhone') {\n acc[fieldConfig.field] = normalizeIncomingPhoneNumber(\n address?.mobilePhone,\n address?.mobilePhoneCountry || defaultPhoneCountry\n );\n return acc;\n }\n\n acc[fieldConfig.field] = address?.[fieldConfig.field] || '';\n return acc;\n }, {});\n\n return {\n ...fieldValues,\n saveToAccount: address?.saveToAccount || false,\n saveAsDefault: address?.saveAsDefault || false\n };\n};\n\nconst useShippingFormState = ({ address, shippingFields = [], labels, defaultPhoneCountry = '' }) => {\n const [hasAttemptedSave, setHasAttemptedSave] = useState(false);\n const [touchedFields, setTouchedFields] = useState({});\n const [values, setValues] = useState(buildInitialValues(shippingFields, address, defaultPhoneCountry));\n const fieldSignature = useMemo(\n () => shippingFields.map((fieldConfig) => fieldConfig.field).join('|'),\n [shippingFields]\n );\n\n useEffect(() => {\n setHasAttemptedSave(false);\n setTouchedFields({});\n setValues(buildInitialValues(shippingFields, address, defaultPhoneCountry));\n }, [address, defaultPhoneCountry, fieldSignature, shippingFields]);\n\n const setFieldValue = (fieldName, value) => {\n setValues((currentValue) => ({\n ...currentValue,\n [fieldName]: value\n }));\n };\n\n const touchField = (fieldName) => {\n setTouchedFields((currentValue) => ({\n ...currentValue,\n [fieldName]: true\n }));\n };\n\n const markAllTouched = () => {\n setHasAttemptedSave(true);\n setTouchedFields(\n shippingFields.reduce((acc, fieldConfig) => {\n acc[fieldConfig.field] = true;\n return acc;\n }, {})\n );\n };\n\n const resetValidationState = () => {\n setHasAttemptedSave(false);\n setTouchedFields({});\n };\n\n const getFieldError = (fieldConfig) => {\n const value = values[fieldConfig.field] || '';\n const trimmedValue = getTrimmedValue(value);\n const shouldShowError = hasAttemptedSave || touchedFields[fieldConfig.field];\n\n if (!shouldShowError) {\n return '';\n }\n\n if (fieldConfig.required && !trimmedValue) {\n return labels.fieldRequiredLabel;\n }\n\n if (\n fieldConfig.field === 'mobilePhone' &&\n trimmedValue &&\n !isPossiblePhoneNumber(trimmedValue)\n ) {\n return labels.invalidPhoneLabel;\n }\n\n if (trimmedValue && fieldConfig.allowedCharacters && !fieldConfig.allowedCharacters.test(trimmedValue)) {\n return labels.fieldRequiredLabel;\n }\n\n return '';\n };\n\n const getValidationErrors = () =>\n shippingFields.reduce((errors, fieldConfig) => {\n const value = values[fieldConfig.field] || '';\n const trimmedValue = getTrimmedValue(value);\n\n if (fieldConfig.required && !trimmedValue) {\n errors.push(fieldConfig.field);\n return errors;\n }\n\n if (trimmedValue && fieldConfig.allowedCharacters && !fieldConfig.allowedCharacters.test(trimmedValue)) {\n errors.push(fieldConfig.field);\n }\n\n return errors;\n }, []);\n\n const getPhoneValidationStatus = () => {\n const hasMobilePhoneField = shippingFields.some((fieldConfig) => fieldConfig.field === 'mobilePhone');\n\n if (!hasMobilePhoneField) {\n return null;\n }\n\n const trimmedValue = getTrimmedValue(values.mobilePhone || '');\n\n if (!trimmedValue) {\n return null;\n }\n\n if (!isPossiblePhoneNumber(trimmedValue)) {\n return {\n valid: false,\n reason: 'invalid_format'\n };\n }\n\n return {\n valid: true\n };\n };\n\n return {\n values,\n hasAttemptedSave,\n setFieldValue,\n touchField,\n markAllTouched,\n resetValidationState,\n getFieldError,\n getValidationErrors,\n getPhoneValidationStatus\n };\n};\n\nexport default useShippingFormState;\n"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useShippingFormState.js","names":["_react","require","_reactPhoneNumberInput","getTrimmedValue","value","trim","normalizeIncomingPhoneNumber","country","trimmedValue","parsedPhoneNumber","parsePhoneNumber","number","error","buildInitialValues","shippingFields","address","defaultPhoneCountry","fieldValues","reduce","acc","fieldConfig","field","mobilePhone","mobilePhoneCountry","saveToAccount","saveAsDefault","useShippingFormState","labels","hasAttemptedSave","setHasAttemptedSave","useState","touchedFields","setTouchedFields","values","setValues","fieldSignature","useMemo","map","join","previousFieldSignatureRef","useRef","useEffect","current","setFieldValue","fieldName","currentValue","touchField","markAllTouched","resetValidationState","getFieldError","shouldShowError","required","fieldRequiredLabel","isPossiblePhoneNumber","invalidPhoneLabel","allowedCharacters","test","getValidationErrors","errors","push","getPhoneValidationStatus","hasMobilePhoneField","some","valid","reason","_default","exports","default"],"sources":["../../src/hooks/useShippingFormState.js"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\nimport { isPossiblePhoneNumber, parsePhoneNumber } from 'react-phone-number-input';\n\nconst getTrimmedValue = (value) => (typeof value === 'string' ? value.trim() : value);\n\nconst normalizeIncomingPhoneNumber = (value, country) => {\n const trimmedValue = getTrimmedValue(value);\n\n if (!trimmedValue) {\n return '';\n }\n\n try {\n const parsedPhoneNumber = country ?\n parsePhoneNumber(trimmedValue, country) :\n parsePhoneNumber(trimmedValue);\n\n return parsedPhoneNumber?.number || trimmedValue;\n } catch (error) {\n return trimmedValue;\n }\n};\n\nconst buildInitialValues = (shippingFields = [], address = null, defaultPhoneCountry = '') => {\n const fieldValues = shippingFields.reduce((acc, fieldConfig) => {\n if (fieldConfig.field === 'mobilePhone') {\n acc[fieldConfig.field] = normalizeIncomingPhoneNumber(\n address?.mobilePhone,\n address?.mobilePhoneCountry || defaultPhoneCountry\n );\n return acc;\n }\n\n acc[fieldConfig.field] = address?.[fieldConfig.field] || '';\n return acc;\n }, {});\n\n return {\n ...fieldValues,\n saveToAccount: address?.saveToAccount || false,\n saveAsDefault: address?.saveAsDefault || false\n };\n};\n\nconst useShippingFormState = ({ address, shippingFields = [], labels, defaultPhoneCountry = '' }) => {\n const [hasAttemptedSave, setHasAttemptedSave] = useState(false);\n const [touchedFields, setTouchedFields] = useState({});\n const [values, setValues] = useState(buildInitialValues(shippingFields, address, defaultPhoneCountry));\n const fieldSignature = useMemo(\n () => shippingFields.map((fieldConfig) => fieldConfig.field).join('|'),\n [shippingFields]\n );\n const previousFieldSignatureRef = useRef(fieldSignature);\n\n useEffect(() => {\n if (previousFieldSignatureRef.current === fieldSignature) {\n return;\n }\n\n previousFieldSignatureRef.current = fieldSignature;\n setHasAttemptedSave(false);\n setTouchedFields({});\n setValues(buildInitialValues(shippingFields, address, defaultPhoneCountry));\n }, [address, defaultPhoneCountry, fieldSignature, shippingFields]);\n\n const setFieldValue = (fieldName, value) => {\n setValues((currentValue) => ({\n ...currentValue,\n [fieldName]: value\n }));\n };\n\n const touchField = (fieldName) => {\n setTouchedFields((currentValue) => ({\n ...currentValue,\n [fieldName]: true\n }));\n };\n\n const markAllTouched = () => {\n setHasAttemptedSave(true);\n setTouchedFields(\n shippingFields.reduce((acc, fieldConfig) => {\n acc[fieldConfig.field] = true;\n return acc;\n }, {})\n );\n };\n\n const resetValidationState = () => {\n setHasAttemptedSave(false);\n setTouchedFields({});\n };\n\n const getFieldError = (fieldConfig) => {\n const value = values[fieldConfig.field] || '';\n const trimmedValue = getTrimmedValue(value);\n const shouldShowError = hasAttemptedSave || touchedFields[fieldConfig.field];\n\n if (!shouldShowError) {\n return '';\n }\n\n if (fieldConfig.required && !trimmedValue) {\n return labels.fieldRequiredLabel;\n }\n\n if (\n fieldConfig.field === 'mobilePhone' &&\n trimmedValue &&\n !isPossiblePhoneNumber(trimmedValue)\n ) {\n return labels.invalidPhoneLabel;\n }\n\n if (trimmedValue && fieldConfig.allowedCharacters && !fieldConfig.allowedCharacters.test(trimmedValue)) {\n return labels.fieldRequiredLabel;\n }\n\n return '';\n };\n\n const getValidationErrors = () =>\n shippingFields.reduce((errors, fieldConfig) => {\n const value = values[fieldConfig.field] || '';\n const trimmedValue = getTrimmedValue(value);\n\n if (fieldConfig.required && !trimmedValue) {\n errors.push(fieldConfig.field);\n return errors;\n }\n\n if (trimmedValue && fieldConfig.allowedCharacters && !fieldConfig.allowedCharacters.test(trimmedValue)) {\n errors.push(fieldConfig.field);\n }\n\n return errors;\n }, []);\n\n const getPhoneValidationStatus = () => {\n const hasMobilePhoneField = shippingFields.some((fieldConfig) => fieldConfig.field === 'mobilePhone');\n\n if (!hasMobilePhoneField) {\n return null;\n }\n\n const trimmedValue = getTrimmedValue(values.mobilePhone || '');\n\n if (!trimmedValue) {\n return null;\n }\n\n if (!isPossiblePhoneNumber(trimmedValue)) {\n return {\n valid: false,\n reason: 'invalid_format'\n };\n }\n\n return {\n valid: true\n };\n };\n\n return {\n values,\n hasAttemptedSave,\n setFieldValue,\n touchField,\n markAllTouched,\n resetValidationState,\n getFieldError,\n getValidationErrors,\n getPhoneValidationStatus\n };\n};\n\nexport default useShippingFormState;\n"],"mappings":"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","ignoreList":[]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nuskin/shipping-address-form",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "React wrapper around address lookup with shipping-specific fields and actions",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"license": "MIT",
|
|
32
32
|
"homepage": "https://code.tls.nuskin.io/nextgen-development/shipping/npm/shipping-address-form/blob/master/README.md",
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@nuskin/address-lookup": "1.4.
|
|
34
|
+
"@nuskin/address-lookup": "1.4.1",
|
|
35
35
|
"@nuskin/contentstack-lib": "2.1.0",
|
|
36
36
|
"@nuskin/foundation-theme": "1.8.0",
|
|
37
37
|
"@nuskin/foundation-ui-components": "2.2.1",
|