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 | import * as React from "react";
import { Customer } from "@customTypes/customer.types";
import { fromUnixTime } from "date-fns";
import { getServicePhoneNumber } from "@utils/helpers";
import { isoStringToLocalDate } from "@utils/date.helpers";
type FormInput = {
[key: string]: any;
};
export const FormContext = React.createContext<FormContextType | null>(null);
export type FormContextType = {
formData: FormInput;
setFormValues: (values: FormInput) => void;
};
export default function CustomerFormProvider({
children,
data,
}: {
data?: Customer;
children: React.ReactNode;
}) {
const [formData, setFormData] = React.useState({
firstName: data?.firstName || "",
lastName: data?.lastName || "",
email: data?.email ? data.email : "",
phone: getServicePhoneNumber(data?.phoneNumber) ?? "",
dateOfBirth: data?.dateOfBirth
? typeof data?.dateOfBirth === "number"
? fromUnixTime(data?.dateOfBirth)
: isoStringToLocalDate(data?.dateOfBirth as string)
: null,
employer: data?.employer || "",
occupation: data?.occupation || "",
avatarURL: data?.avatarURL,
address: data?.address
? {
country: data?.address?.country,
city: data?.address?.city,
state: data?.address?.state,
zip: data?.address?.zip,
line1: data?.address?.line1,
}
: null,
notes: data?.notes || "",
});
const setFormValues = (values: FormInput) => {
setFormData((prevValues) => ({
...prevValues,
...values,
}));
};
return (
<FormContext.Provider
value={{
formData,
setFormValues,
}}
>
{children}
</FormContext.Provider>
);
}
export const useFormData = () =>
React.useContext(FormContext) as FormContextType;
|