diff --git a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx
index 1f811fec5..414ec7da0 100644
--- a/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx
+++ b/client/src/components/jobs-detail-header/jobs-detail-header.component.jsx
@@ -28,6 +28,7 @@ import ProductionListColumnComment from "../production-list-columns/production-l
import ProductionListColumnProductionNote from "../production-list-columns/production-list-columns.productionnote.component";
import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.component";
import "./jobs-detail-header.styles.scss";
+import getPartsBasePath from "../../utils/getPartsBasePath.js";
const mapStateToProps = createStructuredSelector({
jobRO: selectJobReadOnly,
@@ -58,7 +59,7 @@ export function JobsDetailHeader({ job, bodyshop, disabled, insertAuditTrail, is
const { notification } = useNotification();
const [notesClamped, setNotesClamped] = useState(true);
const [updateJob] = useMutation(UPDATE_JOB);
- const basePath = isPartsEntry ? "/parts" : "/manage";
+ const basePath = getPartsBasePath(isPartsEntry);
const colSpan = {
xs: { span: 24 },
diff --git a/client/src/components/owner-detail-jobs/owner-detail-jobs.component.jsx b/client/src/components/owner-detail-jobs/owner-detail-jobs.component.jsx
index 8a5e8b3ec..8fae096d1 100644
--- a/client/src/components/owner-detail-jobs/owner-detail-jobs.component.jsx
+++ b/client/src/components/owner-detail-jobs/owner-detail-jobs.component.jsx
@@ -1,5 +1,5 @@
import { Card, Table } from "antd";
-import React, { useState } from "react";
+import { useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Link } from "react-router-dom";
@@ -9,18 +9,22 @@ import CurrencyFormatter from "../../utils/CurrencyFormatter";
import { DateTimeFormatter } from "../../utils/DateFormatter";
import { alphaSort, dateSort, statusSort } from "../../utils/sorters";
import OwnerDetailUpdateJobsComponent from "../owner-detail-update-jobs/owner-detail-update-jobs.component";
+import { selectIsPartsEntry } from "../../redux/application/application.selectors";
+import getPartsBasePath from "../../utils/getPartsBasePath.js";
const mapStateToProps = createStructuredSelector({
- bodyshop: selectBodyshop
+ bodyshop: selectBodyshop,
+ isPartsEntry: selectIsPartsEntry
});
-function OwnerDetailJobsComponent({ bodyshop, owner }) {
+function OwnerDetailJobsComponent({ bodyshop, owner, isPartsEntry }) {
const { t } = useTranslation();
const [selectedJobs, setSelectedJobs] = useState([]);
const [state, setState] = useState({
sortedInfo: {},
filteredInfo: { text: "" }
});
+ const basePath = getPartsBasePath(isPartsEntry);
const handleTableChange = (pagination, filters, sorter) => {
setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
@@ -33,7 +37,7 @@ function OwnerDetailJobsComponent({ bodyshop, owner }) {
key: "ro_number",
ellipsis: true,
render: (text, record) => (
- {record.ro_number || t("general.labels.na")}
+ {record.ro_number || t("general.labels.na")}
),
sorter: (a, b) => alphaSort(a.ro_number, b.ro_number),
sortOrder: state.sortedInfo.columnKey === "ro_number" && state.sortedInfo.order
@@ -50,7 +54,7 @@ function OwnerDetailJobsComponent({ bodyshop, owner }) {
sortOrder: state.sortedInfo.columnKey === "vehicleid" && state.sortedInfo.order,
render: (text, record) =>
record.vehicleid ? (
-
+
{`${record.v_model_yr || ""} ${record.v_make_desc || ""} ${record.v_model_desc || ""}`.trim()}
) : (
@@ -80,13 +84,9 @@ function OwnerDetailJobsComponent({ bodyshop, owner }) {
title: t("jobs.fields.actual_completion"),
dataIndex: "actual_completion",
key: "actual_completion",
- render: (text, record) => (
- {record.actual_completion}
- ),
+ render: (text, record) => {record.actual_completion},
sorter: (a, b) => dateSort(a.actual_completion, b.actual_completion),
- sortOrder:
- state.sortedInfo.columnKey === "actual_completion" &&
- state.sortedInfo.order,
+ sortOrder: state.sortedInfo.columnKey === "actual_completion" && state.sortedInfo.order
},
{
title: t("jobs.fields.clm_total"),
diff --git a/client/src/components/simplified-parts-jobs-list/simplified-parts-jobs-list.component.jsx b/client/src/components/simplified-parts-jobs-list/simplified-parts-jobs-list.component.jsx
index 0805cbc28..b4ef383e5 100644
--- a/client/src/components/simplified-parts-jobs-list/simplified-parts-jobs-list.component.jsx
+++ b/client/src/components/simplified-parts-jobs-list/simplified-parts-jobs-list.component.jsx
@@ -18,6 +18,7 @@ import JobPartsQueueCount from "../job-parts-queue-count/job-parts-queue-count.c
import RbacWrapper from "../rbac-wrapper/rbac-wrapper.component";
import { selectIsPartsEntry } from "../../redux/application/application.selectors";
import * as Sentry from "@sentry/react";
+import getPartsBasePath from "../../utils/getPartsBasePath.js";
const mapStateToProps = createStructuredSelector({
bodyshop: selectBodyshop,
@@ -31,7 +32,7 @@ export function SimplifiedPartsJobsListComponent({ bodyshop, refetch, loading, j
const [filter, setFilter] = useLocalStorage("filter_jobs_all", null);
const { page, sortcolumn, sortorder } = search;
const history = useNavigate();
- const basePath = isPartsEntry ? "/parts" : "/manage";
+ const basePath = getPartsBasePath(isPartsEntry);
const { t } = useTranslation();
diff --git a/client/src/components/vehicle-detail-jobs/vehicle-detail-jobs.component.jsx b/client/src/components/vehicle-detail-jobs/vehicle-detail-jobs.component.jsx
index 73da8fcf9..2c15743ee 100644
--- a/client/src/components/vehicle-detail-jobs/vehicle-detail-jobs.component.jsx
+++ b/client/src/components/vehicle-detail-jobs/vehicle-detail-jobs.component.jsx
@@ -1,5 +1,5 @@
import { Card, Table } from "antd";
-import React, { useState } from "react";
+import { useState } from "react";
import { useTranslation } from "react-i18next";
import { connect } from "react-redux";
import { Link } from "react-router-dom";
@@ -10,12 +10,15 @@ import { DateTimeFormatter } from "../../utils/DateFormatter";
import { alphaSort, dateSort, statusSort } from "../../utils/sorters";
import OwnerNameDisplay, { OwnerNameDisplayFunction } from "../owner-name-display/owner-name-display.component";
import VehicleDetailUpdateJobsComponent from "../vehicle-detail-update-jobs/vehicle-detail-update-jobs.component";
+import { selectIsPartsEntry } from "../../redux/application/application.selectors";
+import getPartsBasePath from "../../utils/getPartsBasePath.js";
const mapStateToProps = createStructuredSelector({
- bodyshop: selectBodyshop
+ bodyshop: selectBodyshop,
+ isPartsEntry: selectIsPartsEntry
});
-export function VehicleDetailJobsComponent({ vehicle, bodyshop }) {
+export function VehicleDetailJobsComponent({ vehicle, bodyshop, isPartsEntry }) {
const { t } = useTranslation();
const [selectedJobs, setSelectedJobs] = useState([]);
const [state, setState] = useState({
@@ -23,6 +26,8 @@ export function VehicleDetailJobsComponent({ vehicle, bodyshop }) {
filteredInfo: { text: "" }
});
+ const basePath = getPartsBasePath(isPartsEntry);
+
const handleTableChange = (pagination, filters, sorter) => {
setState({ ...state, filteredInfo: filters, sortedInfo: sorter });
};
@@ -34,7 +39,7 @@ export function VehicleDetailJobsComponent({ vehicle, bodyshop }) {
key: "ro_number",
ellipsis: true,
render: (text, record) => (
- {record.ro_number || t("general.labels.na")}
+ {record.ro_number || t("general.labels.na")}
),
sorter: (a, b) => alphaSort(a.ro_number, b.ro_number),
sortOrder: state.sortedInfo.columnKey === "ro_number" && state.sortedInfo.order
@@ -45,11 +50,14 @@ export function VehicleDetailJobsComponent({ vehicle, bodyshop }) {
key: "owner",
sorter: (a, b) => alphaSort(OwnerNameDisplayFunction(a), OwnerNameDisplayFunction(b)),
sortOrder: state.sortedInfo.columnKey === "owner" && state.sortedInfo.order,
- render: (text, record) => (
-
+ render: (text, record) =>
+ !isPartsEntry ? (
+
+
+
+ ) : (
-
- )
+ )
},
{
title: t("jobs.fields.clm_no"),
@@ -68,19 +76,15 @@ export function VehicleDetailJobsComponent({ vehicle, bodyshop }) {
text: status,
value: status
})),
- onFilter: (value, record) => value.includes(record.status),
+ onFilter: (value, record) => value.includes(record.status)
},
{
title: t("jobs.fields.actual_completion"),
dataIndex: "actual_completion",
key: "actual_completion",
- render: (text, record) => (
- {record.actual_completion}
- ),
+ render: (text, record) => {record.actual_completion},
sorter: (a, b) => dateSort(a.actual_completion, b.actual_completion),
- sortOrder:
- state.sortedInfo.columnKey === "actual_completion" &&
- state.sortedInfo.order,
+ sortOrder: state.sortedInfo.columnKey === "actual_completion" && state.sortedInfo.order
},
{
title: t("jobs.fields.clm_total"),
diff --git a/client/src/components/vehicle-tag-popover/vehicle-tag-popover.component.jsx b/client/src/components/vehicle-tag-popover/vehicle-tag-popover.component.jsx
index 0cbb888a4..4add32eee 100644
--- a/client/src/components/vehicle-tag-popover/vehicle-tag-popover.component.jsx
+++ b/client/src/components/vehicle-tag-popover/vehicle-tag-popover.component.jsx
@@ -5,6 +5,7 @@ import VehicleVinDisplay from "../vehicle-vin-display/vehicle-vin-display.compon
import { connect } from "react-redux";
import { selectIsPartsEntry } from "../../redux/application/application.selectors";
import { createStructuredSelector } from "reselect";
+import getPartsBasePath from "../../utils/getPartsBasePath.js";
const mapStateToProps = createStructuredSelector({
isPartsEntry: selectIsPartsEntry
@@ -12,7 +13,7 @@ const mapStateToProps = createStructuredSelector({
export function VehicleTagPopoverComponent({ job, isPartsEntry }) {
const { t } = useTranslation();
- const basePath = isPartsEntry ? "/parts" : "/manage";
+ const basePath = getPartsBasePath(isPartsEntry);
if (!job.vehicle) return null;
const content = (
diff --git a/client/src/components/vehicles-list/vehicles-list.container.jsx b/client/src/components/vehicles-list/vehicles-list.container.jsx
index 512a5cb0b..ba8f9c29b 100644
--- a/client/src/components/vehicles-list/vehicles-list.container.jsx
+++ b/client/src/components/vehicles-list/vehicles-list.container.jsx
@@ -8,6 +8,7 @@ import { pageLimit } from "../../utils/config";
import { connect } from "react-redux";
import { selectIsPartsEntry } from "../../redux/application/application.selectors";
import { createStructuredSelector } from "reselect";
+import getPartsBasePath from "../../utils/getPartsBasePath.js";
const mapStateToProps = createStructuredSelector({
isPartsEntry: selectIsPartsEntry
@@ -16,7 +17,7 @@ const mapStateToProps = createStructuredSelector({
export function VehiclesListContainer({ isPartsEntry }) {
const searchParams = queryString.parse(useLocation().search);
const { page, sortcolumn, sortorder, search } = searchParams;
- const basePath = isPartsEntry ? "/parts" : "/manage";
+ const basePath = getPartsBasePath(isPartsEntry);
const { loading, error, data, refetch } = useQuery(QUERY_ALL_VEHICLES_PAGINATED, {
variables: {
diff --git a/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx b/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx
index bd4ddd0aa..867bfb4c1 100644
--- a/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx
+++ b/client/src/pages/vehicles-detail/vehicles-detail.page.container.jsx
@@ -13,6 +13,7 @@ import NotFound from "../../components/not-found/not-found.component";
import InstanceRenderManager from "../../utils/instanceRenderMgr";
import { selectIsPartsEntry } from "../../redux/application/application.selectors";
import { createStructuredSelector } from "reselect";
+import getPartsBasePath from "../../utils/getPartsBasePath.js";
const mapStateToProps = createStructuredSelector({
isPartsEntry: selectIsPartsEntry
@@ -27,7 +28,7 @@ const mapDispatchToProps = (dispatch) => ({
export function VehicleDetailContainer({ setBreadcrumbs, addRecentItem, setSelectedHeader, isPartsEntry }) {
const { vehId } = useParams();
const { t } = useTranslation();
- const basePath = isPartsEntry ? "/parts" : "/manage";
+ const basePath = getPartsBasePath(isPartsEntry);
const { loading, data, error, refetch } = useQuery(QUERY_VEHICLE_BY_ID, {
variables: { id: vehId },
diff --git a/client/src/pages/vehicles/vehicles.page.container.jsx b/client/src/pages/vehicles/vehicles.page.container.jsx
index 090c83fb0..43ddb781e 100644
--- a/client/src/pages/vehicles/vehicles.page.container.jsx
+++ b/client/src/pages/vehicles/vehicles.page.container.jsx
@@ -7,6 +7,7 @@ import InstanceRenderManager from "../../utils/instanceRenderMgr";
import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/application.actions";
import { createStructuredSelector } from "reselect";
import { selectIsPartsEntry } from "../../redux/application/application.selectors.js";
+import getPartsBasePath from "../../utils/getPartsBasePath.js";
const mapStateToProps = createStructuredSelector({
isPartsEntry: selectIsPartsEntry
@@ -19,7 +20,7 @@ const mapDispatchToProps = (dispatch) => ({
export function VehiclesPageContainer({ setBreadcrumbs, setSelectedHeader, isPartsEntry }) {
const { t } = useTranslation();
- const basePath = isPartsEntry ? "/parts" : "/manage";
+ const basePath = getPartsBasePath(isPartsEntry);
useEffect(() => {
document.title = t("titles.vehicles", {
diff --git a/client/src/utils/getPartsBasePath.js b/client/src/utils/getPartsBasePath.js
new file mode 100644
index 000000000..eafb44ce8
--- /dev/null
+++ b/client/src/utils/getPartsBasePath.js
@@ -0,0 +1,5 @@
+const getPartsBasePath = (isPartsEntry) => {
+ return isPartsEntry ? "/parts" : "/manage";
+};
+
+export default getPartsBasePath;
diff --git a/server.js b/server.js
index 5484a12be..30a5a507b 100644
--- a/server.js
+++ b/server.js
@@ -71,7 +71,11 @@ const SOCKETIO_CORS_ORIGIN = [
"https://old.imex.online",
"https://www.old.imex.online",
"https://wsadmin.imex.online",
- "https://www.wsadmin.imex.online"
+ "https://www.wsadmin.imex.online",
+ "https://devproe.web-est.com",
+ "https://stagingproe.web-est.com",
+ "https://pm.staging.web-est.com",
+ "https://pm.web-est.com"
];
const SOCKETIO_CORS_ORIGIN_DEV = ["http://localhost:3333", "https://localhost:3333"];