import { useContext, useState } from "react"; import { StyleSheet, View } from "react-native"; import { Actions, DispatchContext, StateContext } from "../../context/state"; import Input from "../../components/Input"; import { formatCurrency } from "../../util/helpers"; import { PaymentType, sessionDataType } from "../../util/types"; import { validateTransferFormFields } from "../../util/validator"; import { responsiveScale } from "../../theme/scalling"; import SubmitButton from "../SubmitButton"; import useSessionPayHandler from "../../hooks/useSessionPayHandler"; type TransferFormSectionProps = { type: PaymentType; }; const initialErrors = { lastName: false, firstName: false, lastNamePhonetic: false, firstNamePhonetic: false, email: false, phone: false, }; const TransferFormSection = ({ type }: TransferFormSectionProps) => { const dispatch = useContext(DispatchContext); const [inputErrors, setInputErrors] = useState(initialErrors); const { sessionData, transferFormFields } = useContext(StateContext); const { sessionPay } = useSessionPayHandler(); const SessionData = sessionData as sessionDataType; const onPay = () => { const isValid = validateTransferFormFields({ ...transferFormFields, // @ts-expect-error - Type 'string' cannot be used to index type 'object'. setInputErrors, }); if (isValid) { sessionPay({ paymentType: type, paymentDetails: { ...transferFormFields, }, }); } }; const resetError = (typeKey: keyof typeof initialErrors) => { setInputErrors((pre) => ({ ...pre, [typeKey]: false })); }; const changeTextHandler = ( text: string, typeKey: keyof typeof initialErrors ) => { resetError(typeKey); const copyOfTransferFormFields = { ...transferFormFields }; copyOfTransferFormFields[typeKey] = text; dispatch({ type: Actions.SET_TRANSFER_FORM_FIELDS, payload: copyOfTransferFormFields, }); }; return ( { changeTextHandler(text, "lastName"); }} inputStyle={styles.inputStyle} error={inputErrors.lastName} /> { changeTextHandler(text, "firstName"); }} inputStyle={styles.inputStyle} error={inputErrors.firstName} /> { changeTextHandler(text, "lastNamePhonetic"); }} inputStyle={styles.inputStyle} error={inputErrors.lastNamePhonetic} /> { changeTextHandler(text, "firstNamePhonetic"); }} inputStyle={styles.inputStyle} error={inputErrors.firstNamePhonetic} /> { changeTextHandler(text, "email"); }} inputStyle={styles.inputStyle} error={inputErrors.email} /> { changeTextHandler(text, "phone"); }} inputStyle={styles.inputStyle} error={inputErrors.phone} /> ); }; export default TransferFormSection; const styles = StyleSheet.create({ mainContainer: { position: "relative", flex: 1, }, inputContainer: { margin: responsiveScale(16), marginBottom: responsiveScale(24), height: responsiveScale(60), }, inputStyle: { height: responsiveScale(50), }, btn: { height: responsiveScale(60), marginVertical: responsiveScale(24), }, });