"use client"; import Check from "@mui/icons-material/Check"; import Close from "@mui/icons-material/Close"; import Button from "@mui/material/Button"; import Stack from "@mui/material/Stack"; import Print from '@mui/icons-material/Print'; // import { CreateInvoiceInputs, saveInvoice } from "@/app/api/companys/actions"; import { useRouter } from "next/navigation"; import React, { useCallback, useState, useLayoutEffect } from "react"; import { useTranslation } from "react-i18next"; import { FieldErrors, FormProvider, SubmitErrorHandler, SubmitHandler, useForm, } from "react-hook-form"; import { useSearchParams } from 'next/navigation' import { InvoiceResult } from "@/app/api/invoices"; import { InvoiceInformation, fetchInvoiceInfoById, fetchProjectInvoiceById } from "@/app/api/invoices/actions"; import InvoiceDetails from "./InvoiceDetails"; import ProjectDetails from "./ProjectDetails"; import ProjectTotalFee from "./ProjectTotalFee"; import { timestampToDateString } from "@/app/utils/formatUtil"; import dayjs from "dayjs"; const CreateInvoice: React.FC = ({ }) => { const { t } = useTranslation(); const searchParams = useSearchParams() const router = useRouter() const [projectDetail, setProjectDetail] = useState() const [invoiceDetail, setInvoiceDetail] = useState() const [serverError, setServerError] = useState(""); // const { getValues } = useForm(); const fetchProjectDetails = async () =>{ const projectId = searchParams.get("id") try{ if (projectId !== null && parseInt(projectId) > 0) { const projectDetail = await fetchProjectInvoiceById(parseInt(projectId)) // console.log(projectDetail) const updatedPrijectDetail = projectDetail.map(detail => { return { ...detail, paymentMilestoneDate: timestampToDateString(detail.paymentMilestoneDate) }; // Update the age of person with id 2 }); setProjectDetail(updatedPrijectDetail[0]) } } catch (error){ console.log(error) setServerError(t("An error has occurred. Please try again later.")); } } const fetchInvoiceDetails = async () =>{ const projectId = searchParams.get("id") try{ if (projectId !== null && parseInt(projectId) > 0) { const invoiceInfo = await fetchInvoiceInfoById(parseInt(projectId)) console.log(invoiceInfo) const updatedInvoiceInfo = invoiceInfo.map(info => { return { ...info, invoiceDate: dayjs.unix(parseFloat(info.invoiceDate)/1000).format('YYYY/MM/DD'), dueDate: dayjs.unix(parseFloat(info.dueDate)/1000).format('YYYY/MM/DD') }; }); setInvoiceDetail(updatedInvoiceInfo[0]) } } catch (error){ console.log(error) setServerError(t("An error has occurred. Please try again later.")); } } useLayoutEffect(() => { fetchProjectDetails() fetchInvoiceDetails() }, []) const handleCancel = () => { router.back(); }; const handlePrintout = () => { // const formData = getValues(); console.log("Printing in Progress") } const onSubmit = useCallback>( async (data) => { try { console.log(data); setServerError(""); // console.log(JSON.stringify(data)); // await saveCompany(data) // router.replace("/invoices"); } catch (e) { setServerError(t("An error has occurred. Please try again later.")); } }, [router, t], ); const onSubmitError = useCallback>( (errors) => { console.log(errors) }, [], ); const formProps = useForm({ defaultValues: { }, }); const errors = formProps.formState.errors; return( { projectDetail && } { invoiceDetail && } { } ) } export default CreateInvoice;