import { Col, Form, Input, Row, Select, Switch } from "antd"; import React from "react"; import { useTranslation } from "react-i18next"; import { createStructuredSelector } from "reselect"; import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors.js"; import dayjs from "../../utils/day"; import { connect } from "react-redux"; import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component.jsx"; import JobSearchSelectComponent from "../job-search-select/job-search-select.component.jsx"; import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, currentUser: selectCurrentUser }); const mapDispatchToProps = () => ({}); export default connect(mapStateToProps, mapDispatchToProps)(TaskUpsertModalComponent); export function TaskUpsertModalComponent({ form, bodyshop, currentUser, selectedJobId, setSelectedJobId, selectedJobDetails, existingTask, loading, error }) { const { t } = useTranslation(); const datePickerPresets = [ { label: t("tasks.date_presets.today"), value: dayjs().add(1, "hour") }, { label: t("tasks.date_presets.tomorrow"), value: dayjs().add(1, "day").startOf("day") }, { label: t("tasks.date_presets.next_week"), value: dayjs().add(1, "week").startOf("day") }, { label: t("tasks.date_presets.two_weeks"), value: dayjs().add(2, "weeks").startOf("day") }, { label: t("tasks.date_presets.three_weeks"), value: dayjs().add(3, "weeks").startOf("day") }, { label: t("tasks.date_presets.one_month"), value: dayjs().add(1, "month").startOf("day") }, { label: t("tasks.date_presets.three_months"), value: dayjs().add(3, "month").startOf("day") } ]; const generatePresets = (job) => { if (!job || !selectedJobDetails) return datePickerPresets; // return default presets if no job selected const relativePresets = []; if (selectedJobDetails?.scheduled_completion) { const scheduledCompletion = dayjs(selectedJobDetails.scheduled_completion); if (scheduledCompletion.isAfter(dayjs())) { relativePresets.push( { label: `${t("tasks.date_presets.completion")} -1 ${t("tasks.date_presets.day")}`, value: scheduledCompletion.subtract(1, "day").startOf("day") }, { label: `${t("tasks.date_presets.completion")} -2 ${t("tasks.date_presets.days")}`, value: scheduledCompletion.subtract(2, "day").startOf("day") }, { label: `${t("tasks.date_presets.completion")} -3 ${t("tasks.date_presets.days")}`, value: scheduledCompletion.subtract(3, "day").startOf("day") } ); } } if (selectedJobDetails?.scheduled_delivery) { const scheduledDelivery = dayjs(selectedJobDetails.scheduled_delivery); if (scheduledDelivery.isAfter(dayjs())) { relativePresets.push( { label: `${t("tasks.date_presets.delivery")} -1 ${t("tasks.date_presets.day")}`, value: scheduledDelivery.subtract(1, "day").startOf("day") }, { label: `${t("tasks.date_presets.delivery")} -2 ${t("tasks.date_presets.days")}`, value: scheduledDelivery.subtract(2, "day").startOf("day") }, { label: `${t("tasks.date_presets.delivery")} -3 ${t("tasks.date_presets.days")}`, value: scheduledDelivery.subtract(3, "day").startOf("day") } ); } } return [...relativePresets, ...datePickerPresets]; }; const clearRelations = () => { form.setFieldsValue({ billid: null, partsorderid: null, joblineid: null }); }; /** * Change the selected job id * @param jobId */ const changeJobId = (jobId) => { setSelectedJobId(jobId || null); // Reset the form fields when selectedJobId changes clearRelations(); }; if (loading || error) return ; return ( <> ({ key: jobline.id, value: jobline.id, label: jobline.line_desc }))} /> ({ key: bill.id, value: bill.id, label: `${bill.invoice_number} - ${bill.vendor.name}` }))} /> employee?.user_email === currentUser.email && employee.active)?.id } rules={[ { required: true } ]} >