Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | 26x 26x 240x 2044x 2044x 411x 141x 411x 22x 411x 411x 411x 1633x 1633x 1633x 240x 240x 129x 240x 129x 240x 411x 405x 6x 6x 405x 405x 405x 1633x | import { Address, AddressKey, FormField } from '@bigcommerce/checkout-sdk';
import { DynamicFormFieldType } from '../ui/form';
export type AddressFormValues = Pick<Address, Exclude<AddressKey, 'customFields'>> & {
customFields: { [id: string]: any };
};
export default function mapAddressToFormValues(fields: FormField[], address?: Address): AddressFormValues {
const values = ({
...fields.reduce(
(addressFormValues, { name, custom, fieldType, default: defaultValue }) => {
if (custom) {
if (!addressFormValues.customFields) {
addressFormValues.customFields = {};
}
const field = address &&
address.customFields &&
address.customFields.find(({ fieldId }) => fieldId === name);
const fieldValue = (field && field.fieldValue);
addressFormValues.customFields[name] = getValue(fieldType, fieldValue, defaultValue);
return addressFormValues;
}
Eif (isSystemAddressFieldName(name)) {
addressFormValues[name] = (address && address[name]) || '';
}
return addressFormValues;
},
{} as AddressFormValues
),
});
values.shouldSaveAddress = address && address.shouldSaveAddress !== undefined ?
address.shouldSaveAddress :
true;
// Manually backfill stateOrProvince to avoid Formik warning (uncontrolled to controlled input)
if (values.stateOrProvince === undefined) {
values.stateOrProvince = '';
}
if (values.stateOrProvinceCode === undefined) {
values.stateOrProvinceCode = '';
}
return values;
}
function getValue(fieldType?: string, fieldValue?: string | string[] | number, defaultValue?: string): string | string[] | number | Date | undefined {
if (fieldValue === undefined || fieldValue === null) {
return getDefaultValue(fieldType, defaultValue);
}
Iif (fieldType === DynamicFormFieldType.date && typeof fieldValue === 'string') {
return fieldValue ? new Date(fieldValue) : undefined;
}
return fieldValue;
}
function getDefaultValue(fieldType?: string, defaultValue?: string): string | string[] | Date {
Iif (defaultValue && fieldType === DynamicFormFieldType.date) {
return new Date(defaultValue);
}
Iif (fieldType === DynamicFormFieldType.checkbox) {
return [];
}
return defaultValue || '';
}
function isSystemAddressFieldName(fieldName: string): fieldName is Exclude<keyof Address, 'customFields' | 'shouldSaveAddress'> {
return fieldName !== 'customFields' && fieldName !== 'shouldSaveAddress';
}
|