-
+
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
deleted file mode 100644
index 5d41fc5e3..000000000
--- a/client/src/components/form-date-time-picker-enhanced/form-date-time-picker-enhanced.component.jsx
+++ /dev/null
@@ -1,48 +0,0 @@
-import { DatePicker } from "antd";
-import dayjs from "../../utils/day.js";
-import React, { useRef } from "react";
-
-import { connect } from "react-redux";
-import { createStructuredSelector } from "reselect";
-import { selectBodyshop } from "../../redux/user/user.selectors.js";
-
-const mapStateToProps = createStructuredSelector({
- bodyshop: selectBodyshop
-});
-const mapDispatchToProps = (dispatch) => ({
- //setUserLanguage: language => dispatch(setUserLanguage(language))
-});
-export default connect(mapStateToProps, mapDispatchToProps)(FormDateTimePickerEnhanced);
-
-const dateFormat = "MM/DD/YYYY h:mm a";
-
-export function FormDateTimePickerEnhanced({
- bodyshop,
- value,
- onBlur,
- onlyFuture,
- onlyToday,
- isDateOnly = true,
- ...restProps
-}) {
- const ref = useRef();
- 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/form-date-time-picker.component.jsx b/client/src/components/form-date-time-picker/form-date-time-picker.component.jsx
index 23af7008a..e8f52ee31 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,46 +1,150 @@
-import React, { forwardRef } from "react";
-//import DatePicker from "react-datepicker";
-//import "react-datepicker/src/stylesheets/datepicker.scss";
-import { Space, TimePicker } from "antd";
+import { DatePicker } from "antd";
+import PropTypes from "prop-types";
+import React, { useCallback, useState } from "react";
+import { useTranslation } from "react-i18next";
import dayjs from "../../utils/day";
-import FormDatePicker from "../form-date-picker/form-date-picker.component";
-//To be used as a form element only.
+import { dateFormats, dateTimeFormats } from "./formats.js";
-const DateTimePicker = ({ value, onChange, onBlur, id, onlyFuture, ...restProps }, ref) => {
- // const handleChange = (newDate) => {
- // if (value !== newDate && onChange) {
- // onChange(newDate);
- // }
- // };
+const DateTimePicker = ({ value, onChange, onBlur, id, onlyFuture, onlyToday, isDateOnly = false, ...restProps }) => {
+ const [isManualInput, setIsManualInput] = useState(false);
+ const { t } = useTranslation();
+
+ const handleChange = useCallback(
+ (newDate) => {
+ if (newDate === null && onChange) {
+ onChange(null);
+ } else if (newDate && onChange) {
+ onChange(newDate);
+ }
+ setIsManualInput(false);
+ },
+ [onChange]
+ );
+
+ const normalizeDateTimeString = (input) => {
+ const upperV = input.toUpperCase().replaceAll(".", "/").replaceAll("-", "/");
+
+ const [datePart, ...timeParts] = upperV.split(" ");
+
+ if (timeParts.length === 0) {
+ return datePart; // If there's no time part, just return the date part.
+ }
+
+ const timePart = timeParts.join(" "); // In case there are multiple spaces, join them back
+
+ // Normalize the time part by ensuring there's a space before AM/PM if not already present
+ const normalizedTime = timePart.replace(/(\d{1,2})(:\d{2})?\s?(AM|PM)/, "$1$2 $3");
+
+ // Combine the date part with the normalized time part
+ return `${datePart} ${normalizedTime}`.trim();
+ };
+
+ const handleBlur = useCallback(
+ (e) => {
+ if (!isManualInput) {
+ return;
+ }
+
+ setIsManualInput(false);
+
+ const v = e.target.value;
+ if (!v) return;
+
+ const upperV = normalizeDateTimeString(v);
+ let parsedDate;
+
+ for (const format of isDateOnly ? dateFormats : dateTimeFormats) {
+ parsedDate = dayjs(upperV, format);
+ if (parsedDate.isValid()) break;
+ }
+
+ if (parsedDate && parsedDate.isValid()) {
+ if (isDateOnly) {
+ parsedDate = parsedDate.startOf("day");
+ }
+
+ if (value && value.isValid && value.isValid()) {
+ parsedDate = parsedDate.set({
+ hours: value.hours(),
+ minutes: value.minutes(),
+ seconds: value.seconds(),
+ milliseconds: value.milliseconds()
+ });
+ }
+
+ if (onlyFuture) {
+ if (dayjs().subtract(1, "day").isBefore(parsedDate)) {
+ onChange(parsedDate);
+ } else {
+ onChange(dayjs().startOf("day"));
+ }
+ } else {
+ onChange(parsedDate);
+ }
+ }
+ },
+ [isManualInput, isDateOnly, onlyFuture, onChange, value]
+ );
+
+ const handleKeyDown = useCallback(
+ (e) => {
+ setIsManualInput(true);
+
+ if (e.key.toLowerCase() === "t" && onChange) {
+ e.preventDefault();
+ setIsManualInput(false);
+ onChange(dayjs());
+ } else if (e.key.toLowerCase() === "enter") {
+ handleBlur(e);
+ }
+ },
+ [onChange, handleBlur]
+ );
+
+ const handleDisabledDate = useCallback(
+ (current) => {
+ if (onlyToday) {
+ return !dayjs().isSame(current, "day");
+ } else if (onlyFuture) {
+ return dayjs().subtract(1, "day").isAfter(current);
+ }
+ return false;
+ },
+ [onlyToday, onlyFuture]
+ );
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}
+ placeholder={isDateOnly ? t("general.labels.date") : t("general.labels.datetime")}
+ onBlur={onBlur || handleBlur}
+ disabledDate={handleDisabledDate}
{...restProps}
/>
-
+
);
};
-export default forwardRef(DateTimePicker);
+DateTimePicker.propTypes = {
+ value: PropTypes.any,
+ onChange: PropTypes.func,
+ onBlur: PropTypes.func,
+ id: PropTypes.string,
+ onlyFuture: PropTypes.bool,
+ onlyToday: PropTypes.bool,
+ isDateOnly: PropTypes.bool
+};
+
+export default React.memo(DateTimePicker);
diff --git a/client/src/components/form-date-time-picker/formats.js b/client/src/components/form-date-time-picker/formats.js
new file mode 100644
index 000000000..b68704a72
--- /dev/null
+++ b/client/src/components/form-date-time-picker/formats.js
@@ -0,0 +1,96 @@
+export const dateTimeFormats = [
+ // Four-digit year with time
+ "M/D/YYYY h:mm A", // Example: 1/5/2023 9:00 AM
+ "M/D/YYYY h:mmA", // Example: 1/5/2023 9:00AM
+ "M/D/YYYY h A", // Example: 1/5/2023 9 AM
+ "M/D/YYYY hA", // Example: 1/5/2023 9AM
+ "M/D/YYYY hh:mm A", // Example: 1/5/2023 02:25 PM
+ "M/D/YYYY hh:mm:ss A", // Example: 1/5/2023 02:25:45 PM
+
+ "MM/D/YYYY h:mm A", // Example: 12/5/2023 9:00 AM
+ "MM/D/YYYY h:mmA", // Example: 12/5/2023 9:00AM
+ "MM/D/YYYY h A", // Example: 12/5/2023 9 AM
+ "MM/D/YYYY hA", // Example: 12/5/2023 9AM
+ "MM/D/YYYY hh:mm A", // Example: 12/5/2023 02:25 PM
+ "MM/D/YYYY hh:mm:ss A", // Example: 12/5/2023 02:25:45 PM
+
+ "M/DD/YYYY h:mm A", // Example: 1/25/2023 9:00 AM
+ "M/DD/YYYY h:mmA", // Example: 1/25/2023 9:00AM
+ "M/DD/YYYY h A", // Example: 1/25/2023 9 AM
+ "M/DD/YYYY hA", // Example: 1/25/2023 9AM
+ "M/DD/YYYY hh:mm A", // Example: 1/25/2023 02:25 PM
+ "M/DD/YYYY hh:mm:ss A", // Example: 1/25/2023 02:25:45 PM
+
+ "MM/DD/YYYY h:mm A", // Example: 12/25/2023 9:00 AM
+ "MM/DD/YYYY h:mmA", // Example: 12/25/2023 9:00AM
+ "MM/DD/YYYY h A", // Example: 12/25/2023 9 AM
+ "MM/DD/YYYY hA", // Example: 12/25/2023 9AM
+ "MM/DD/YYYY hh:mm A", // Example: 12/25/2023 02:25 PM
+ "MM/DD/YYYY hh:mm:ss A", // Example: 12/25/2023 02:25:45 PM
+
+ // Two-digit year with time
+ "M/D/YY h:mm A", // Example: 1/5/23 9:00 AM
+ "M/D/YY h:mmA", // Example: 1/5/23 9:00AM
+ "M/D/YY h A", // Example: 1/5/23 9 AM
+ "M/D/YY hA", // Example: 1/5/23 9AM
+ "M/D/YY hh:mm A", // Example: 1/5/23 02:25 PM
+ "M/D/YY hh:mm:ss A", // Example: 1/5/23 02:25:45 PM
+
+ "MM/D/YY h:mm A", // Example: 12/5/23 9:00 AM
+ "MM/D/YY h:mmA", // Example: 12/5/23 9:00AM
+ "MM/D/YY h A", // Example: 12/5/23 9 AM
+ "MM/D/YY hA", // Example: 12/5/23 9AM
+ "MM/D/YY hh:mm A", // Example: 12/5/23 02:25 PM
+ "MM/D/YY hh:mm:ss A", // Example: 12/5/23 02:25:45 PM
+
+ "M/DD/YY h:mm A", // Example: 1/25/23 9:00 AM
+ "M/DD/YY h:mmA", // Example: 1/25/23 9:00AM
+ "M/DD/YY h A", // Example: 1/25/23 9 AM
+ "M/DD/YY hA", // Example: 1/25/23 9AM
+ "M/DD/YY hh:mm A", // Example: 1/25/23 02:25 PM
+ "M/DD/YY hh:mm:ss A", // Example: 1/25/23 02:25:45 PM
+
+ "MM/DD/YY h:mm A", // Example: 12/25/23 9:00 AM
+ "MM/DD/YY h:mmA", // Example: 12/25/23 9:00AM
+ "MM/DD/YY h A", // Example: 12/25/23 9 AM
+ "MM/DD/YY hA", // Example: 12/25/23 9AM
+ "MM/DD/YY hh:mm A", // Example: 12/25/23 02:25 PM
+ "MM/DD/YY hh:mm:ss A", // Example: 12/25/23 02:25:45 PM
+
+ // Four-digit year without time
+ "M/D/YYYY", // Example: 1/5/2023
+ "MM/D/YYYY", // Example: 12/5/2023
+ "M/DD/YYYY", // Example: 1/25/2023
+ "MM/DD/YYYY", // Example: 12/25/2023
+
+ // Two-digit year without time
+ "M/D/YY", // Example: 1/5/23
+ "MM/D/YY", // Example: 12/5/23
+ "M/DD/YY", // Example: 1/25/23
+ "MM/DD/YY" // Example: 12/25/23
+];
+
+// CONFIRMED
+export const dateFormats = [
+ "MMDDYYYY",
+ "MMDDYY",
+ // Four-digit year
+ "M/D/YYYY", // Example: 1/5/2023
+ "MM/D/YYYY", // Example: 12/5/2023
+ "M/DD/YYYY", // Example: 1/25/2023
+ "MM/DD/YYYY", // Example: 12/25/2023
+
+ // Two-digit year
+ "M/D/YY", // Example: 1/5/23
+ "MM/D/YY", // Example: 12/5/23
+ "M/DD/YY", // Example: 1/25/23
+ "MM/DD/YY", // Example: 12/25/23
+
+ // Explicitly handle single-digit month and day
+ "M/D/YY", // Example: 1/5/23
+ "M/D/YYYY", // Example: 1/5/2023
+ "M/DD/YY", // Example: 1/25/23
+ "M/DD/YYYY", // Example: 1/25/2023
+ "MM/D/YY", // Example: 12/5/23
+ "MM/D/YYYY" // Example: 12/5/2023
+];
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/partner-ping/partner-ping.component.jsx b/client/src/components/partner-ping/partner-ping.component.jsx
index f40566fa1..aa0366e5c 100644
--- a/client/src/components/partner-ping/partner-ping.component.jsx
+++ b/client/src/components/partner-ping/partner-ping.component.jsx
@@ -23,7 +23,7 @@ export function PartnerPingComponent({ bodyshop }) {
// Execute the created function directly
checkPartnerStatus(bodyshop);
// eslint-disable-next-line react-hooks/exhaustive-deps
- }, [bodyshop]);
+ }, [bodyshop?.id]);
return <>>;
}
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({
-
+