import useForm, { FormChange } from "@saleor/hooks/useForm"; import React, { useState } from "react"; export enum CustomerChangeActionEnum { KEEP_ADDRESS = "keepAddress", CHANGE_ADDRESS = "changeAddress" } export interface OrderCustomerChangeData { changeActionOption: CustomerChangeActionEnum; } interface UseOrderCustomerChangeFormResult { submit: (event: React.FormEvent) => void; change: FormChange; hasChanged: boolean; data: OrderCustomerChangeData; } export interface OrderCustomerChangeFormProps { children: (props: UseOrderCustomerChangeFormResult) => React.ReactNode; initial?: Partial; onSubmit: (data: OrderCustomerChangeData) => void; } function useOrderCustomerChangeForm( initial: Partial, onSubmit: (data: OrderCustomerChangeData) => void ): UseOrderCustomerChangeFormResult { const defaultInitialFormData: OrderCustomerChangeData = { changeActionOption: CustomerChangeActionEnum.KEEP_ADDRESS }; const form = useForm({ ...initial, ...defaultInitialFormData }); const [changed, setChanged] = useState(false); const triggerChange = () => setChanged(true); const handleChange: FormChange = (event, cb) => { form.change(event, cb); triggerChange(); }; const submit = (event: React.FormEvent) => { event.stopPropagation(); event.preventDefault(); return onSubmit(form.data); }; return { change: handleChange, submit, hasChanged: changed, data: form.data }; } const OrderCustomerChangeForm: React.FC = ({ children, initial, onSubmit }) => { const props = useOrderCustomerChangeForm(initial || {}, onSubmit); return
{children(props)}
; }; OrderCustomerChangeForm.displayName = "OrderCustomerChangeForm"; export default OrderCustomerChangeForm;