import Icon, { BarsOutlined, CalendarFilled, DollarCircleOutlined, FileImageFilled, ToolFilled, } from "@ant-design/icons"; import { Form, notification, Tabs } from "antd"; import moment from "moment"; import queryString from "query-string"; import React, { lazy, Suspense } from "react"; import { useTranslation } from "react-i18next"; import { FaHardHat, FaHistory, FaRegStickyNote, FaShieldAlt, } from "react-icons/fa"; import { connect } from "react-redux"; import { useHistory, useLocation } from "react-router-dom"; import { createStructuredSelector } from "reselect"; import FormFieldsChanged from "../../components/form-fields-changed-alert/form-fields-changed-alert.component"; import { CalculateJob } from "../../components/job-totals-table/job-totals.utility"; import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component"; import { selectBodyshop } from "../../redux/user/user.selectors"; const JobsLinesContainer = lazy(() => import("../../components/job-detail-lines/job-lines.container") ); const JobsDetailDatesComponent = lazy(() => import("../../components/jobs-detail-dates/jobs-detail-dates.component") ); const JobsDetailTotals = lazy(() => import("../../components/jobs-detail-totals/jobs-detail-totals.component") ); const JobsDetailRates = lazy(() => import("../../components/jobs-detail-rates/jobs-detail-rates.component") ); const JobsDetailHeader = lazy(() => import("../../components/jobs-detail-header/jobs-detail-header.component") ); const JobsDetailGeneral = lazy(() => import("../../components/jobs-detail-general/jobs-detail-general.component") ); const JobsDocumentsGalleryContainer = lazy(() => import( "../../components/jobs-documents-gallery/jobs-documents-gallery.container" ) ); const JobNotesContainer = lazy(() => import("../../components/jobs-notes/jobs-notes.container") ); const ScheduleJobModalContainer = lazy(() => import("../../components/schedule-job-modal/schedule-job-modal.container") ); const JobLineUpsertModalContainer = lazy(() => import( "../../components/job-lines-upsert-modal/job-lines-upsert-modal.container" ) ); const JobsDetailPliContainer = lazy(() => import("../../components/jobs-detail-pli/jobs-detail-pli.container") ); const JobsDetailAuditContainer = lazy(() => import("../../components/audit-trail-list/audit-trail-list.container") ); const JobsDetailLaborContainer = lazy(() => import("../../components/jobs-detail-labor/jobs-detail-labor.container") ); const JobReconciliationModal = lazy(() => import( "../../components/job-reconciliation-modal/job-reconciliation.modal.container" ) ); const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, }); export function JobsDetailPage({ job, mutationUpdateJob, mutationConvertJob, handleSubmit, refetch, updateJobStatus, bodyshop, }) { const { t } = useTranslation(); const [form] = Form.useForm(); const history = useHistory(); const search = queryString.parse(useLocation().search); const formItemLayout = { layout: "vertical", // size: "small", }; const handleFinish = async (values) => { const newTotals = CalculateJob({ ...job, ...values }, bodyshop.shoprates); const result = await mutationUpdateJob({ variables: { jobId: job.id, job: { ...values, clm_total: newTotals.totals.total_repairs.toFormat("0.00"), owner_owing: newTotals.custPayable.total.toFormat("0.00"), job_totals: JSON.stringify(newTotals), }, }, }); if (!!!result.errors) { notification["success"]({ message: t("jobs.successes.savetitle"), }); await refetch(); form.resetFields(); form.resetFields(); } }; return ( } >
history.push({ search: `?tab=${key}` })} > {t("menus.jobsdetail.general")} } key="general" > {t("menus.jobsdetail.repairdata")} } key="repairdata" > {t("menus.jobsdetail.rates")} } key="rates" > {t("menus.jobsdetail.totals")} } key="totals" > {t("menus.jobsdetail.partssublet")} } key="partssublet" > {t("menus.jobsdetail.labor")} } key="labor" > {t("menus.jobsdetail.dates")} } key="dates" > {t("jobs.labels.documents")} } key="documents" > {t("jobs.labels.notes")} } key="notes" > {t("jobs.labels.audit")} } key="audit" >
); } export default connect(mapStateToProps, null)(JobsDetailPage);