import { useState } from "react"; import { useIntl } from "react-intl"; import { AddressTypeInput } from "@saleor/customers/types"; import { commonMessages } from "@saleor/intl"; import { transformFormToAddress } from "@saleor/misc"; import { UserError } from "@saleor/types"; import { AddressInput } from "@saleor/types/globalTypes"; import { add, remove } from "@saleor/utils/lists"; interface UseAddressValidation { errors: UserError[]; submit: (data: T & AddressTypeInput) => void; } function useAddressValidation( onSubmit: (address: T & AddressInput) => void ): UseAddressValidation { const intl = useIntl(); const [validationErrors, setValidationErrors] = useState([]); const countryRequiredError = { field: "country", message: intl.formatMessage(commonMessages.requiredField) }; return { errors: validationErrors, submit: (data: T & AddressTypeInput) => { try { setValidationErrors( remove( countryRequiredError, validationErrors, (a, b) => a.field === b.field ) ); onSubmit(transformFormToAddress(data)); } catch { setValidationErrors(add(countryRequiredError, validationErrors)); } } }; } export default useAddressValidation;