import { Box, Step, StepLabel, Stepper } from "@mui/material"; import { HTParking } from "api/custom/hello-techno"; import { createReceiptIssuingOrder } from "api/custom/hello-techno/receipt-issuing-order"; import { PageID, TabID } from "codes/page"; import useAPICall from "hooks/useAPICall"; import useDashboard from "hooks/useDashBoard"; import useSnackbarCustom from "hooks/useSnackbarCustom"; import { useEffect, useMemo, useState } from "react"; import { CreateContextProvider } from "./contexts/CreateContext"; import useConfirm, { ConfirmDataProps } from "./hooks/useConfirm"; import useCreate from "./hooks/useCreate"; import useInputReceiptStep from "./hooks/useInputReceiptStep"; import useInputSMSSendAddress from "./hooks/useInputSMSSendAddress"; import useParkingList from "./hooks/useParkingList"; export default function ReceiptIssuingOrderCreate() { const { setHeaderTitle, setTabs } = useDashboard( PageID.DASHBOARD_RECEIPT_ISSUING_ORDER_CREATE_CUSTOM_HELLO_TECHNO, TabID.NONE ); useEffect(() => { setHeaderTitle("領収証発行依頼作成"); setTabs(null); }, []); return ( ); } function Create() { const { parking, adjustData } = useCreate(); const { success, error } = useSnackbarCustom(); const [mode, setMode] = useState< "parking_select" | "input_receipt" | "input_address" | "confirm" | "done" >("parking_select"); const step = useMemo(() => { switch (mode) { case "parking_select": return 0; case "input_receipt": return 1; case "input_address": return 2; case "confirm": return 3; case "done": return 4; } }, [mode]); const getConfimData = (): ConfirmDataProps => { return { customerName: parking?.customer_name ?? "XXXXXXXXXXXX", parkingName: parking?.parking_name ?? "XXXXXXXXXXXXXXX", adjustSeqNo: adjustData ? String(adjustData.adjust_seq_no) : "", amount: inputReceiptStep.values("amount"), date: inputReceiptStep.values("date"), address: inputSMSSendAddress.values("address"), memo: inputReceiptStep.values("memo"), }; }; const getFormData = () => { return { ...parking, ...inputReceiptStep.values(), ...inputSMSSendAddress.values(), }; }; const selectParkingStep = useParkingList({ onNext: (parking: HTParking) => { inputReceiptStep.init(); setMode("input_receipt"); }, }); const inputReceiptStep = useInputReceiptStep({ onNext: () => { setMode("input_address"); }, onPrev: () => { setMode("parking_select"); }, }); const inputSMSSendAddress = useInputSMSSendAddress({ onNext: () => { confirm.setData(getConfimData()); setMode("confirm"); }, onPrev: () => { setMode("input_receipt"); }, }); const confirm = useConfirm({ onNext: () => { send(); }, onPrev: () => { setMode("input_address"); }, }); const createAPI = useAPICall({ apiMethod: createReceiptIssuingOrder, backDrop: true, onSuccess: () => { setMode("done"); success("成功しました"); }, onFailed: () => { error("失敗しました"); }, }); const send = () => { const { callAPI, makeSendData } = createAPI; const formData = getFormData(); const sendData = makeSendData({ customer_code: formData.customer_code ?? "", parking_management_code: formData.parking_management_code ?? "", adjust_seq_no: adjustData?.adjust_seq_no, receipt_use_date: formData.date, receipt_amount: formData.amount, tax_amount: formData.tax_amount, sms_phone_number: formData.address, memo: formData.memo, }); callAPI(sendData); }; return ( 駐車場選択 領収証情報入力 SMS送信先入力 確認 完了 {mode === "parking_select" && selectParkingStep.element} {mode === "input_receipt" && inputReceiptStep.element} {mode === "input_address" && inputSMSSendAddress.element} {mode === "confirm" && confirm.element} {mode === "done" && 受付しました。} ); }