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"];