From 51d264098cfb44ab64108069c2cb694e6a313d69 Mon Sep 17 00:00:00 2001 From: Dave Richer Date: Tue, 20 Aug 2024 13:24:26 -0400 Subject: [PATCH] - Enhance Date Time Picker Signed-off-by: Dave Richer --- .../bill-form/bill-form.component.jsx | 4 +- .../contract-form/contract-form.component.jsx | 6 +- .../courtesy-car-form.component.jsx | 22 +- .../courtesy-car-return-modal.component.jsx | 4 +- .../dms-post-form/dms-post-form.component.jsx | 4 +- client/src/components/eula/eula.component.jsx | 4 +- .../form-date-picker.component.jsx | 123 ---------- ...rm-date-time-picker-enhanced.component.jsx | 3 +- .../form-date-time-picker.component.jsx | 229 +++++++++++++++--- .../job-scoreboard-add-button.component.jsx | 4 +- .../jobs-admin-dates.component.jsx | 12 +- .../jobs-create-jobs-info.component.jsx | 19 +- ...jobs-create-vehicle-info.new.component.jsx | 4 +- .../jobs-detail-dates.component.jsx | 6 +- .../jobs-detail-general.component.jsx | 4 +- .../parts-order-backorder-eta.component.jsx | 4 +- ...-order-line-backorder-button.component.jsx | 4 +- .../parts-order-modal.component.jsx | 4 +- .../payment-form/payment-form.component.jsx | 4 +- ...production-list-columns.date.component.jsx | 18 +- ...center-modal-filters-sorters-component.jsx | 5 +- .../scoreboard-entry-edit.component.jsx | 4 +- .../shop-employees-add-vacation.component.jsx | 4 +- .../shop-employees-form.component.jsx | 6 +- .../task-upsert-modal.component.jsx | 5 +- .../time-ticket-list-team-pay.component.jsx | 4 +- .../time-ticket-modal.component.jsx | 8 +- .../vehicle-detail-form.component.jsx | 4 +- 28 files changed, 271 insertions(+), 251 deletions(-) delete mode 100644 client/src/components/form-date-picker/form-date-picker.component.jsx diff --git a/client/src/components/bill-form/bill-form.component.jsx b/client/src/components/bill-form/bill-form.component.jsx index 28984dbf0..143747f61 100644 --- a/client/src/components/bill-form/bill-form.component.jsx +++ b/client/src/components/bill-form/bill-form.component.jsx @@ -14,7 +14,6 @@ import dayjs from "../../utils/day"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import AlertComponent from "../alert/alert.component"; import BillFormLinesExtended from "../bill-form-lines-extended/bill-form-lines-extended.component"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component"; import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import JobSearchSelect from "../job-search-select/job-search-select.component"; @@ -22,6 +21,7 @@ import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import VendorSearchSelect from "../vendor-search-select/vendor-search-select.component"; import BillFormLines from "./bill-form.lines.component"; import { CalculateBillTotal } from "./bill-form.totals.utility"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -276,7 +276,7 @@ export function BillFormComponent({ }) ]} > - + - + {dlExpiresBeforeReturn && ( @@ -274,7 +274,7 @@ export default function ContractFormComponent({ form, create = false, selectedJo - + diff --git a/client/src/components/courtesy-car-form/courtesy-car-form.component.jsx b/client/src/components/courtesy-car-form/courtesy-car-form.component.jsx index eac3846aa..cc3fcd310 100644 --- a/client/src/components/courtesy-car-form/courtesy-car-form.component.jsx +++ b/client/src/components/courtesy-car-form/courtesy-car-form.component.jsx @@ -10,16 +10,12 @@ import { DateFormatter } from "../../utils/DateFormatter"; import CourtesyCarFuelSlider from "../courtesy-car-fuel-select/courtesy-car-fuel-select.component"; import CourtesyCarReadiness from "../courtesy-car-readiness-select/courtesy-car-readiness-select.component"; import CourtesyCarStatus from "../courtesy-car-status-select/courtesy-car-status-select.component"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; import FormFieldsChanged from "../form-fields-changed-alert/form-fields-changed-alert.component"; import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; -export default function CourtesyCarCreateFormComponent({ - form, - saveLoading, - newCC, -}) { +export default function CourtesyCarCreateFormComponent({ form, saveLoading, newCC }) { const { t } = useTranslation(); const client = useApolloClient(); @@ -161,16 +157,16 @@ export default function CourtesyCarCreateFormComponent({ - + - + - + - + @@ -228,7 +224,7 @@ export default function CourtesyCarCreateFormComponent({
- + p.nextservicedate !== c.nextservicedate}> {() => { @@ -260,7 +256,7 @@ export default function CourtesyCarCreateFormComponent({
- + p.registrationexpires !== c.registrationexpires}> {() => { @@ -293,7 +289,7 @@ export default function CourtesyCarCreateFormComponent({ } ]} > - + p.insuranceexpires !== c.insuranceexpires}> {() => { diff --git a/client/src/components/courtesy-car-return-modal/courtesy-car-return-modal.component.jsx b/client/src/components/courtesy-car-return-modal/courtesy-car-return-modal.component.jsx index 589c97ad4..3a7ec4c6b 100644 --- a/client/src/components/courtesy-car-return-modal/courtesy-car-return-modal.component.jsx +++ b/client/src/components/courtesy-car-return-modal/courtesy-car-return-modal.component.jsx @@ -2,7 +2,7 @@ import { Form, InputNumber } from "antd"; import React from "react"; import { useTranslation } from "react-i18next"; import CourtesyCarFuelSlider from "../courtesy-car-fuel-select/courtesy-car-fuel-select.component"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; export default function CourtesyCarReturnModalComponent() { const { t } = useTranslation(); @@ -19,7 +19,7 @@ export default function CourtesyCarReturnModalComponent() { } ]} > - + - + diff --git a/client/src/components/eula/eula.component.jsx b/client/src/components/eula/eula.component.jsx index 7399c279b..8d2227e02 100644 --- a/client/src/components/eula/eula.component.jsx +++ b/client/src/components/eula/eula.component.jsx @@ -4,7 +4,6 @@ import Markdown from "react-markdown"; import { createStructuredSelector } from "reselect"; import { selectCurrentEula, selectCurrentUser } from "../../redux/user/user.selectors"; import { connect } from "react-redux"; -import { FormDatePicker } from "../form-date-picker/form-date-picker.component"; import { INSERT_EULA_ACCEPTANCE } from "../../graphql/user.queries"; import { useMutation } from "@apollo/client"; import { acceptEula } from "../../redux/user/user.actions"; @@ -12,6 +11,7 @@ import { useTranslation } from "react-i18next"; import day from "../../utils/day"; import "./eula.styles.scss"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; const Eula = ({ currentEula, currentUser, acceptEula }) => { const [formReady, setFormReady] = useState(false); @@ -216,7 +216,7 @@ const EulaFormComponent = ({ form, handleChange, onFinish, t }) => ( } ]} > - + diff --git a/client/src/components/form-date-picker/form-date-picker.component.jsx b/client/src/components/form-date-picker/form-date-picker.component.jsx deleted file mode 100644 index 500e22d45..000000000 --- a/client/src/components/form-date-picker/form-date-picker.component.jsx +++ /dev/null @@ -1,123 +0,0 @@ -import { DatePicker } from "antd"; -import dayjs from "../../utils/day"; -import React, { useRef } from "react"; - -import { connect } from "react-redux"; -import { createStructuredSelector } from "reselect"; -import { selectBodyshop } from "../../redux/user/user.selectors"; - -const mapStateToProps = createStructuredSelector({ - bodyshop: selectBodyshop -}); -const mapDispatchToProps = (dispatch) => ({ - //setUserLanguage: language => dispatch(setUserLanguage(language)) -}); -export default connect(mapStateToProps, mapDispatchToProps)(FormDatePicker); - -const dateFormat = "MM/DD/YYYY"; - -export function FormDatePicker({ - bodyshop, - value, - onChange, - onBlur, - onlyFuture, - onlyToday, - isDateOnly = true, - ...restProps -}) { - const ref = useRef(); - - const handleChange = (newDate) => { - if (value !== newDate && onChange) { - onChange(isDateOnly ? newDate && newDate.format("YYYY-MM-DD") : newDate); - } - }; - - const handleKeyDown = (e) => { - if (e.key.toLowerCase() === "t") { - if (onChange) { - onChange(isDateOnly ? dayjs().format("YYYY-MM-DD") : dayjs()); - } - } else if (e.key.toLowerCase() === "enter") { - if (ref.current && ref.current.blur) ref.current.blur(); - } - }; - - const handleBlur = (e) => { - const v = e.target.value; - if (!v) return; - - const formats = [ - "MMDDYY", - "MMDDYYYY", - "MM/DD/YY", - "MM/DD/YYYY", - "M/DD/YY", - "M/DD/YYYY", - "MM/D/YY", - "MM/D/YYYY", - "M/D/YY", - "M/D/YYYY", - "D/MM/YY", - "D/MM/YYYY", - "DD/M/YY", - "DD/M/YYYY", - "D/M/YY", - "D/M/YYYY" - ]; - - let _a; - - // Iterate through formats to find the correct one - for (let format of formats) { - _a = dayjs(v, format); - if (v === _a.format(format)) { - break; - } - } - - if (_a.isValid() && value && value.isValid && value.isValid()) { - _a.set({ - hours: value.hours(), - minutes: value.minutes(), - seconds: value.seconds(), - milliseconds: value.milliseconds() - }); - } - - if (_a.isValid() && onChange) { - if (onlyFuture) { - if (dayjs().subtract(1, "day").isBefore(_a)) { - onChange(isDateOnly ? _a.format("YYYY-MM-DD") : _a); - } else { - onChange(isDateOnly ? dayjs().format("YYYY-MM-DD") : dayjs()); - } - } else { - onChange(isDateOnly ? _a.format("YYYY-MM-DD") : _a); - } - } - }; - - return ( -
- { - if (onlyToday) { - return !dayjs().isSame(d, "day"); - } else if (onlyFuture) { - return dayjs().subtract(1, "day").isAfter(d); - } - }} - {...restProps} - /> -
- ); -} diff --git a/client/src/components/form-date-time-picker-enhanced/form-date-time-picker-enhanced.component.jsx b/client/src/components/form-date-time-picker-enhanced/form-date-time-picker-enhanced.component.jsx index 5d41fc5e3..cdabfdfb5 100644 --- a/client/src/components/form-date-time-picker-enhanced/form-date-time-picker-enhanced.component.jsx +++ b/client/src/components/form-date-time-picker-enhanced/form-date-time-picker-enhanced.component.jsx @@ -12,7 +12,6 @@ const mapStateToProps = createStructuredSelector({ const mapDispatchToProps = (dispatch) => ({ //setUserLanguage: language => dispatch(setUserLanguage(language)) }); -export default connect(mapStateToProps, mapDispatchToProps)(FormDateTimePickerEnhanced); const dateFormat = "MM/DD/YYYY h:mm a"; @@ -46,3 +45,5 @@ export function FormDateTimePickerEnhanced({
); } + +export default connect(mapStateToProps, mapDispatchToProps)(FormDateTimePickerEnhanced); diff --git a/client/src/components/form-date-time-picker/form-date-time-picker.component.jsx b/client/src/components/form-date-time-picker/form-date-time-picker.component.jsx index 23af7008a..c1bf6f749 100644 --- a/client/src/components/form-date-time-picker/form-date-time-picker.component.jsx +++ b/client/src/components/form-date-time-picker/form-date-time-picker.component.jsx @@ -1,45 +1,204 @@ -import React, { forwardRef } from "react"; -//import DatePicker from "react-datepicker"; -//import "react-datepicker/src/stylesheets/datepicker.scss"; -import { Space, TimePicker } from "antd"; +import React, { forwardRef, useState } from "react"; +import { DatePicker } from "antd"; import dayjs from "../../utils/day"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; -//To be used as a form element only. -const DateTimePicker = ({ value, onChange, onBlur, id, onlyFuture, ...restProps }, ref) => { - // const handleChange = (newDate) => { - // if (value !== newDate && onChange) { - // onChange(newDate); - // } - // }; +// To be used as a form element only. + +const DateTimePicker = ( + { value, onChange, onBlur, id, onlyFuture, onlyToday, isDateOnly = false, ...restProps }, + ref +) => { + const [isManualInput, setIsManualInput] = useState(false); + + const handleChange = (newDate) => { + if (newDate && onChange) { + onChange(newDate); + } + setIsManualInput(false); // Reset the manual input flag when using GUI + }; + + const handleKeyDown = (e) => { + setIsManualInput(true); // User is typing, so set the manual input flag + + if (e.key.toLowerCase() === "t") { + if (onChange) { + onChange(dayjs()); + } + } else if (e.key.toLowerCase() === "enter") { + handleBlur(e); + } + }; + + const handleBlur = (e) => { + if (!isManualInput) { + // If the input is not manual, skip the format processing + return; + } + + setIsManualInput(false); // Reset the flag after processing + + const v = e.target.value; + if (!v) return; + + // Convert input to uppercase to handle 'am/pm' as well as 'AM/PM' + const upperV = v.toUpperCase(); + + let _a; + + // Handling common shorthand datetime inputs + const shorthandFormats = [ + "M/D/YY hA", + "M/D/YY h:mmA", + "M/D/YYYY hA", + "M/D/YYYY h:mmA", + "M/D/YY ha", + "M/D/YY h:mma", + "M/D/YYYY ha", + "M/D/YYYY h:mma" + ]; + + for (let format of shorthandFormats) { + _a = dayjs(upperV, format); + if (_a.isValid()) break; + } + + // If shorthand parsing didn't work, fall back to existing formats + if (!_a || !_a.isValid()) { + const formats = [ + "MMDDYY", + "MMDDYYYY", + "MM/DD/YY", + "MM/DD/YYYY", + "M/DD/YY", + "M/DD/YYYY", + "MM/D/YY", + "MM/D/YYYY", + "M/D/YY", + "M/D/YYYY", + "D/MM/YY", + "D/MM/YYYY", + "DD/M/YY", + "DD/M/YYYY", + "D/M/YY", + "D/M/YYYY", + "MMDDYY hh:mm A", + "MMDDYYYY hh:mm A", + "MM/DD/YY hh:mm A", + "MM/DD/YYYY hh:mm A", + "M/DD/YY hh:mm A", + "M/DD/YYYY hh:mm A", + "MM/D/YY hh:mm A", + "MM/D/YYYY hh:mm A", + "M/D/YY hh:mm A", + "M/D/YYYY hh:mm A", + "D/MM/YY hh:mm A", + "D/MM/YYYY hh:mm A", + "DD/M/YY hh:mm A", + "DD/M/YYYY hh:mm A", + "D/M/YY hh:mm A", + "D/M/YYYY hh:mm A", + "MMDDYY hh:mm:ss A", + "MMDDYYYY hh:mm:ss A", + "MM/DD/YY hh:mm:ss A", + "MM/DD/YYYY hh:mm:ss A", + "M/DD/YY hh:mm:ss A", + "M/DD/YYYY hh:mm:ss A", + "MM/D/YY hh:mm:ss A", + "MM/D/YYYY hh:mm:ss A", + "M/D/YY hh:mm:ss A", + "M/D/YYYY hh:mm:ss A", + "D/MM/YY hh:mm:ss A", + "D/MM/YYYY hh:mm:ss A", + "DD/M/YY hh:mm:ss A", + "DD/M/YYYY hh:mm:ss A", + "D/M/YY hh:mm:ss A", + "D/M/YYYY hh:mm:ss A", + "MMDDYY HH:mm", + "MMDDYYYY HH:mm", + "MM/DD/YY HH:mm", + "MM/DD/YYYY HH:mm", + "M/DD/YY HH:mm", + "M/DD/YYYY HH:mm", + "MM/D/YY HH:mm", + "MM/D/YYYY HH:mm", + "M/D/YY HH:mm", + "M/D/YYYY HH:mm", + "D/MM/YY HH:mm", + "D/MM/YYYY HH:mm", + "DD/M/YY HH:mm", + "DD/M/YYYY HH:mm", + "D/M/YY HH:mm", + "D/M/YYYY HH:mm", + "MMDDYY HH:mm:ss", + "MMDDYYYY HH:mm:ss", + "MM/DD/YY HH:mm:ss", + "MM/DD/YYYY HH:mm:ss", + "M/DD/YY HH:mm:ss", + "M/DD/YYYY HH:mm:ss", + "MM/D/YY HH:mm:ss", + "MM/D/YYYY HH:mm:ss", + "M/D/YY HH:mm:ss", + "M/D/YYYY HH:mm:ss", + "D/MM/YY HH:mm:ss", + "D/MM/YYYY HH:mm:ss", + "DD/M/YY HH:mm:ss", + "DD/M/YYYY HH:mm:ss", + "D/M/YY HH:mm:ss", + "D/M/YYYY HH:mm:ss" + ]; + + for (let format of formats) { + _a = dayjs(upperV, format); + if (_a.isValid()) break; + } + } + + if (_a && _a.isValid()) { + if (isDateOnly) { + _a = _a.startOf("day"); // Only apply startOf("day") when isDateOnly is true + } + + if (value && value.isValid && value.isValid()) { + _a.set({ + hours: value.hours(), + minutes: value.minutes(), + seconds: value.seconds(), + milliseconds: value.milliseconds() + }); + } + + if (onlyFuture) { + if (dayjs().subtract(1, "day").isBefore(_a)) { + onChange(_a); + } else { + onChange(dayjs().startOf("day")); + } + } else { + onChange(_a); + } + } + }; return ( - - dayjs().subtract(1, "day").isAfter(d) - })} - value={value} - onBlur={onBlur} - onChange={onChange} - onlyFuture={onlyFuture} - isDateOnly={false} - /> - - + dayjs().isAfter(d) - })} - onChange={onChange} - disableSeconds={true} - minuteStep={15} - onBlur={onBlur} - format="hh:mm a" + onChange={handleChange} + onBlur={onBlur || handleBlur} + disabledDate={(d) => { + if (onlyToday) { + return !dayjs().isSame(d, "day"); + } else if (onlyFuture) { + return dayjs().subtract(1, "day").isAfter(d); + } + return false; + }} {...restProps} /> - +
); }; diff --git a/client/src/components/job-scoreboard-add-button/job-scoreboard-add-button.component.jsx b/client/src/components/job-scoreboard-add-button/job-scoreboard-add-button.component.jsx index a8c673552..e17368ed9 100644 --- a/client/src/components/job-scoreboard-add-button/job-scoreboard-add-button.component.jsx +++ b/client/src/components/job-scoreboard-add-button/job-scoreboard-add-button.component.jsx @@ -10,8 +10,8 @@ import { QUERY_SCOREBOARD_ENTRY, UPDATE_SCOREBOARD_ENTRY } from "../../graphql/scoreboard.queries"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; import LoadingSpinner from "../loading-spinner/loading-spinner.component"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; export default function ScoreboardAddButton({ job, disabled, ...otherBtnProps }) { const { t } = useTranslation(); @@ -86,7 +86,7 @@ export default function ScoreboardAddButton({ job, disabled, ...otherBtnProps }) } ]} > - + ({ - insertAuditTrail: ({ jobid, operation, type }) => dispatch(insertAuditTrail({ jobid, operation, type })) + insertAuditTrail: ({ jobid, operation, type }) => + dispatch( + insertAuditTrail({ + jobid, + operation, + type + }) + ) }); export default connect(mapStateToProps, mapDispatchToProps)(JobsAdminDatesChange); @@ -87,7 +93,7 @@ export function JobsAdminDatesChange({ insertAuditTrail, job }) { - + diff --git a/client/src/components/jobs-create-jobs-info/jobs-create-jobs-info.component.jsx b/client/src/components/jobs-create-jobs-info/jobs-create-jobs-info.component.jsx index 54708449b..c50894005 100644 --- a/client/src/components/jobs-create-jobs-info/jobs-create-jobs-info.component.jsx +++ b/client/src/components/jobs-create-jobs-info/jobs-create-jobs-info.component.jsx @@ -1,18 +1,9 @@ -import { - Collapse, - Form, - Input, - InputNumber, - Select, - Space, - Switch, -} from "antd"; +import { Collapse, Form, Input, InputNumber, Select, Space, Switch } from "antd"; import React from "react"; import { useTranslation } from "react-i18next"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import FormItemEmail from "../form-items-formatted/email-form-item.component"; import FormItemPhone, { PhoneItemFormatterValidation } from "../form-items-formatted/phone-form-item.component"; @@ -29,6 +20,7 @@ import JobsDetailRatesTaxes from "../jobs-detail-rates/jobs-detail-rates.taxes.c import JobsMarkPstExempt from "../jobs-mark-pst-exempt/jobs-mark-pst-exempt.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser @@ -61,10 +53,7 @@ export function JobsCreateJobsInfo({ bodyshop, form, selected }) { - + @@ -116,7 +105,7 @@ export function JobsCreateJobsInfo({ bodyshop, form, selected }) { - + diff --git a/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.new.component.jsx b/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.new.component.jsx index d3026676d..e38c2f28d 100644 --- a/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.new.component.jsx +++ b/client/src/components/jobs-create-vehicle-info/jobs-create-vehicle-info.new.component.jsx @@ -2,9 +2,9 @@ import { Form, Input } from "antd"; import React, { useContext } from "react"; import { useTranslation } from "react-i18next"; import JobCreateContext from "../../pages/jobs-create/jobs-create.context"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; import LayoutFormRow from "../layout-form-row/layout-form-row.component"; import JobsCreateVehicleInfoPredefined from "./jobs-create-vehicle-info.predefined.component"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; export default function JobsCreateVehicleInfoNewComponent({ form }) { const [state] = useContext(JobCreateContext); @@ -113,7 +113,7 @@ export default function JobsCreateVehicleInfoNewComponent({ form }) { - + diff --git a/client/src/components/jobs-detail-dates/jobs-detail-dates.component.jsx b/client/src/components/jobs-detail-dates/jobs-detail-dates.component.jsx index 80598717e..f32f1b94d 100644 --- a/client/src/components/jobs-detail-dates/jobs-detail-dates.component.jsx +++ b/client/src/components/jobs-detail-dates/jobs-detail-dates.component.jsx @@ -5,7 +5,6 @@ import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component"; import FormRow from "../layout-form-row/layout-form-row.component"; @@ -30,7 +29,7 @@ export function JobsDetailDatesComponent({ jobRO, job, bodyshop }) {
- + @@ -45,7 +44,7 @@ export function JobsDetailDatesComponent({ jobRO, job, bodyshop }) { - + @@ -85,7 +84,6 @@ export function JobsDetailDatesComponent({ jobRO, job, bodyshop }) { rules={[ { required: jobInPostProduction - //message: t("general.validation.required"), } ]} > diff --git a/client/src/components/jobs-detail-general/jobs-detail-general.component.jsx b/client/src/components/jobs-detail-general/jobs-detail-general.component.jsx index df2b43cd0..1fee1a6b5 100644 --- a/client/src/components/jobs-detail-general/jobs-detail-general.component.jsx +++ b/client/src/components/jobs-detail-general/jobs-detail-general.component.jsx @@ -5,7 +5,6 @@ import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import { selectJobReadOnly } from "../../redux/application/application.selectors"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; import CurrencyInput from "../form-items-formatted/currency-form-item.component"; import FormItemEmail from "../form-items-formatted/email-form-item.component"; import FormItemPhone, { PhoneItemFormatterValidation } from "../form-items-formatted/phone-form-item.component"; @@ -13,6 +12,7 @@ import Car from "../job-damage-visual/job-damage-visual.component"; import JobsDetailChangeEstimator from "../jobs-detail-change-estimator/jobs-detail-change-estimator.component"; import JobsDetailChangeFileHandler from "../jobs-detail-change-filehandler/jobs-detail-change-filehandler.component"; import FormRow from "../layout-form-row/layout-form-row.component"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; const mapStateToProps = createStructuredSelector({ jobRO: selectJobReadOnly, @@ -152,7 +152,7 @@ export function JobsDetailGeneral({ bodyshop, jobRO, job, form }) { - + diff --git a/client/src/components/parts-order-backorder-eta/parts-order-backorder-eta.component.jsx b/client/src/components/parts-order-backorder-eta/parts-order-backorder-eta.component.jsx index dc27b3601..db0d49f70 100644 --- a/client/src/components/parts-order-backorder-eta/parts-order-backorder-eta.component.jsx +++ b/client/src/components/parts-order-backorder-eta/parts-order-backorder-eta.component.jsx @@ -8,8 +8,8 @@ import { logImEXEvent } from "../../firebase/firebase.utils"; import { MUTATION_UPDATE_BO_ETA } from "../../graphql/parts-orders.queries"; import { selectBodyshop } from "../../redux/user/user.selectors"; import { DateFormatter } from "../../utils/DateFormatter"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; import { CalendarFilled } from "@ant-design/icons"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -62,7 +62,7 @@ export function PartsOrderBackorderEta({
- + diff --git a/client/src/components/report-center-modal/report-center-modal-filters-sorters-component.jsx b/client/src/components/report-center-modal/report-center-modal-filters-sorters-component.jsx index ace62cf27..a696ab5c6 100644 --- a/client/src/components/report-center-modal/report-center-modal-filters-sorters-component.jsx +++ b/client/src/components/report-center-modal/report-center-modal-filters-sorters-component.jsx @@ -6,7 +6,7 @@ import { useTranslation } from "react-i18next"; import { getOrderOperatorsByType, getWhereOperatorsByType } from "../../utils/graphQLmodifier"; import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component"; import { generateInternalReflections } from "./report-center-modal-utils"; -import { FormDatePicker } from "../form-date-picker/form-date-picker.component.jsx"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; export default function ReportCenterModalFiltersSortersComponent({ form, bodyshop }) { return ( @@ -196,7 +196,8 @@ function FiltersSection({ filters, form, bodyshop }) { // We have a type of date, so we will use a date picker if (type === "date") { return ( - form.setFieldValue(fieldPath, date)} /> diff --git a/client/src/components/scoreboard-entry-edit/scoreboard-entry-edit.component.jsx b/client/src/components/scoreboard-entry-edit/scoreboard-entry-edit.component.jsx index 4c099a13c..9d09dedcd 100644 --- a/client/src/components/scoreboard-entry-edit/scoreboard-entry-edit.component.jsx +++ b/client/src/components/scoreboard-entry-edit/scoreboard-entry-edit.component.jsx @@ -4,7 +4,7 @@ import dayjs from "../../utils/day"; import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import { UPDATE_SCOREBOARD_ENTRY } from "../../graphql/scoreboard.queries"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component.jsx"; export default function ScoreboardEntryEdit({ entry }) { const [open, setOpen] = useState(false); @@ -52,7 +52,7 @@ export default function ScoreboardEntryEdit({ entry }) { } ]} > - + - + - + - + - - + diff --git a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx index b05c9658e..7a86d0d56 100644 --- a/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx +++ b/client/src/components/time-ticket-modal/time-ticket-modal.component.jsx @@ -7,8 +7,8 @@ import { createStructuredSelector } from "reselect"; import { GET_LINE_TICKET_BY_PK } from "../../graphql/jobs-lines.queries"; import { selectAuthLevel, selectBodyshop } from "../../redux/user/user.selectors"; import EmployeeSearchSelect from "../employee-search-select/employee-search-select.component"; -import FormDatePicker from "../form-date-picker/form-date-picker.component"; import FormDateTimePicker from "../form-date-time-picker/form-date-time-picker.component"; +import DateTimePicker from "../form-date-time-picker/form-date-time-picker.component"; import JobSearchSelect from "../job-search-select/job-search-select.component"; import LaborAllocationsTable from "../labor-allocations-table/labor-allocations-table.component"; import { CalculateAllocationsTotals } from "../labor-allocations-table/labor-allocations-table.utility"; @@ -60,8 +60,8 @@ export function TimeTicketModalComponent({ {item.cost_center === "timetickets.labels.shift" ? t(item.cost_center) : bodyshop.cdk_dealerid || bodyshop.pbs_serialnumber || Enhanced_Payroll.treatment === "on" - ? t(`joblines.fields.lbr_types.${item.cost_center.toUpperCase()}`) - : item.cost_center} + ? t(`joblines.fields.lbr_types.${item.cost_center.toUpperCase()}`) + : item.cost_center} ))} @@ -111,7 +111,7 @@ export function TimeTicketModalComponent({ } ]} > - + - +