From bc42d19dff071a7f491044b02c00402abc8a7585 Mon Sep 17 00:00:00 2001 From: Allan Carr Date: Fri, 27 Dec 2024 10:01:11 -0800 Subject: [PATCH 1/5] IO-3069 Job Drawer Documents Upsell correction Would constantly display the upsell component Signed-off-by: Allan Carr --- .../job-detail-cards.component.jsx | 2 +- .../job-detail-cards.documents.component.jsx | 30 +++++++++++-------- 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/client/src/components/job-detail-cards/job-detail-cards.component.jsx b/client/src/components/job-detail-cards/job-detail-cards.component.jsx index 204c956db..33315f959 100644 --- a/client/src/components/job-detail-cards/job-detail-cards.component.jsx +++ b/client/src/components/job-detail-cards/job-detail-cards.component.jsx @@ -122,7 +122,7 @@ export function JobDetailCards({ bodyshop, setPrintCenterContext }) { {!bodyshop.uselocalmediaserver && ( - + )} diff --git a/client/src/components/job-detail-cards/job-detail-cards.documents.component.jsx b/client/src/components/job-detail-cards/job-detail-cards.documents.component.jsx index 3129eaab7..573662722 100644 --- a/client/src/components/job-detail-cards/job-detail-cards.documents.component.jsx +++ b/client/src/components/job-detail-cards/job-detail-cards.documents.component.jsx @@ -1,12 +1,14 @@ import { Carousel } from "antd"; import React from "react"; import { useTranslation } from "react-i18next"; +import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import { GenerateThumbUrl } from "../jobs-documents-gallery/job-documents.utility"; -import CardTemplate from "./job-detail-cards.template.component"; import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; +import CardTemplate from "./job-detail-cards.template.component"; -export default function JobDetailCardsDocumentsComponent({ loading, data }) { +export default function JobDetailCardsDocumentsComponent({ loading, data, bodyshop }) { const { t } = useTranslation(); + const hasMediaAccess = HasFeatureAccess({ bodyshop, featureName: "media" }); if (!data) return ( @@ -21,17 +23,19 @@ export default function JobDetailCardsDocumentsComponent({ loading, data }) { title={t("jobs.labels.cards.documents")} extraLink={`/manage/jobs/${data.id}?tab=documents`} > - - {data.documents.length > 0 ? ( - - {data.documents.map((item) => ( - {item.name} - ))} - - ) : ( -
{t("documents.errors.nodocuments")}
- )} -
+ {!hasMediaAccess && ( + + {data.documents.length > 0 ? ( + + {data.documents.map((item) => ( + {item.name} + ))} + + ) : ( +
{t("documents.errors.nodocuments")}
+ )} +
+ )} ); } From f8ddfeb7d031059d426df3e0dd12362e3fc7e6df Mon Sep 17 00:00:00 2001 From: Allan Carr Date: Fri, 27 Dec 2024 10:03:51 -0800 Subject: [PATCH 2/5] IO-3070 Enter Bills Header Missing Translation Signed-off-by: Allan Carr --- client/src/components/header/header.component.jsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/src/components/header/header.component.jsx b/client/src/components/header/header.component.jsx index 5ac82ddc0..8acabfe40 100644 --- a/client/src/components/header/header.component.jsx +++ b/client/src/components/header/header.component.jsx @@ -148,7 +148,7 @@ function Header({ label: ( - {t(t("menus.header.enterbills"))} + {t("menus.header.enterbills")} ), From d69050f006976cc4419deb03980b4dc5ccd98a6b Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 6 Jan 2025 15:58:56 -0800 Subject: [PATCH 3/5] Revert "IO-3067 Add learn more link for Rome." This reverts commit c4f7c57c24e6883875031ea68d4599e296da6553. --- .../bills-list-table.component.jsx | 4 +- .../job-audit-trail.component.jsx | 4 +- .../job-bills-total.component.jsx | 4 +- .../job-detail-cards.documents.component.jsx | 4 +- .../job-lifecycle/job-lifecycle.component.jsx | 4 +- .../jobs-documents-gallery.component.jsx | 6 +- ...jobs-documents-local-gallery.container.jsx | 4 +- .../labor-allocations-table.component.jsx | 6 +- ...or-allocations-table.payroll.component.jsx | 4 +- ...hedule-calendar-header-graph.component.jsx | 4 +- .../schedule-calendar-header.component.jsx | 6 +- .../schedule-job-modal.component.jsx | 4 +- .../time-ticket-list.component.jsx | 4 +- .../components/upsell/upsell.component.jsx | 442 +++++++----------- .../accounting-payables.container.jsx | 4 +- .../accounting-payments.container.jsx | 4 +- .../accounting-receivables.container.jsx | 4 +- .../src/pages/bills/bills.page.container.jsx | 4 +- .../contract-create.page.container.jsx | 4 +- .../contract-detail.page.container.jsx | 4 +- .../contracts/contracts.page.container.jsx | 4 +- .../courtesy-car-create.page.container.jsx | 4 +- .../courtesy-cars.page.container.jsx | 4 +- .../pages/dashboard/dashboard.container.jsx | 4 +- .../export-logs.page.container.jsx | 4 +- .../jobs-checklist-view.page.jsx | 4 +- .../jobs-delivery.page.container.jsx | 4 +- .../jobs-intake.page.container.jsx | 4 +- .../payments-all.container.page.jsx | 4 +- .../production-board.container.jsx | 4 +- .../scoreboard/scoreboard.page.container.jsx | 4 +- .../pages/shift-clock/shift-clock.page.jsx | 4 +- .../shop-csi/shop-csi.container.page.jsx | 4 +- client/src/pages/tech/tech.page.component.jsx | 4 +- .../temporary-docs.container.jsx | 4 +- .../time-tickets/time-tickets.container.jsx | 4 +- .../tt-approvals.page.container.jsx | 4 +- 37 files changed, 243 insertions(+), 349 deletions(-) diff --git a/client/src/components/bills-list-table/bills-list-table.component.jsx b/client/src/components/bills-list-table/bills-list-table.component.jsx index 5db774a98..503751268 100644 --- a/client/src/components/bills-list-table/bills-list-table.component.jsx +++ b/client/src/components/bills-list-table/bills-list-table.component.jsx @@ -18,7 +18,7 @@ import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import LockerWrapperComponent from "../lock-wrapper/lock-wrapper.component"; import PrintWrapperComponent from "../print-wrapper/print-wrapper.component"; import UpsellComponent from "../upsell/upsell.component"; -import { UpsellEnum } from "../upsell/upsell.component"; +import { upsellEnum } from "../upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ jobRO: selectJobReadOnly, @@ -240,7 +240,7 @@ export function BillsListTableComponent({ onChange={handleTableChange} locale={{ ...(!hasBillsAccess && { - emptyText: + emptyText: }) }} /> diff --git a/client/src/components/job-audit-trail/job-audit-trail.component.jsx b/client/src/components/job-audit-trail/job-audit-trail.component.jsx index 9bda0c7ee..c3ca6f814 100644 --- a/client/src/components/job-audit-trail/job-audit-trail.component.jsx +++ b/client/src/components/job-audit-trail/job-audit-trail.component.jsx @@ -10,7 +10,7 @@ import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selecto import { DateTimeFormatter } from "../../utils/DateFormatter"; import BlurWrapperComponent from "../feature-wrapper/blur-wrapper.component"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ currentUser: selectCurrentUser, @@ -147,7 +147,7 @@ export function JobAuditTrail({ bodyshop, currentUser, jobId }) { {!hasAuditAccess && ( - + )} diff --git a/client/src/components/job-bills-total/job-bills-total.component.jsx b/client/src/components/job-bills-total/job-bills-total.component.jsx index bc5201c89..77b90cb9f 100644 --- a/client/src/components/job-bills-total/job-bills-total.component.jsx +++ b/client/src/components/job-bills-total/job-bills-total.component.jsx @@ -7,7 +7,7 @@ import AlertComponent from "../alert/alert.component"; import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component"; import "./job-bills-total.styles.scss"; import BlurWrapperComponent from "../feature-wrapper/blur-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; @@ -336,7 +336,7 @@ export function JobBillsTotalComponent({ {!hasBillsAccess && ( - + )} diff --git a/client/src/components/job-detail-cards/job-detail-cards.documents.component.jsx b/client/src/components/job-detail-cards/job-detail-cards.documents.component.jsx index c2d7808b7..3129eaab7 100644 --- a/client/src/components/job-detail-cards/job-detail-cards.documents.component.jsx +++ b/client/src/components/job-detail-cards/job-detail-cards.documents.component.jsx @@ -3,7 +3,7 @@ import React from "react"; import { useTranslation } from "react-i18next"; import { GenerateThumbUrl } from "../jobs-documents-gallery/job-documents.utility"; import CardTemplate from "./job-detail-cards.template.component"; -import UpsellComponent, { UpsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; export default function JobDetailCardsDocumentsComponent({ loading, data }) { const { t } = useTranslation(); @@ -21,7 +21,7 @@ export default function JobDetailCardsDocumentsComponent({ loading, data }) { title={t("jobs.labels.cards.documents")} extraLink={`/manage/jobs/${data.id}?tab=documents`} > - + {data.documents.length > 0 ? ( {data.documents.map((item) => ( diff --git a/client/src/components/job-lifecycle/job-lifecycle.component.jsx b/client/src/components/job-lifecycle/job-lifecycle.component.jsx index b7414e3c8..7f99d08b5 100644 --- a/client/src/components/job-lifecycle/job-lifecycle.component.jsx +++ b/client/src/components/job-lifecycle/job-lifecycle.component.jsx @@ -9,7 +9,7 @@ import { useTranslation } from "react-i18next"; import "./job-lifecycle.styles.scss"; import BlurWrapperComponent from "../feature-wrapper/blur-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; // show text on bar if text can fit export function JobLifecycleComponent({ job, statuses, ...rest }) { @@ -144,7 +144,7 @@ export function JobLifecycleComponent({ job, statuses, ...rest }) { style={{ width: "100%" }} > - +
- + )} @@ -152,7 +152,7 @@ function JobsDocumentsComponent({ {hasMediaAccess && !hasMobileAccess && ( - + )} diff --git a/client/src/components/jobs-documents-local-gallery/jobs-documents-local-gallery.container.jsx b/client/src/components/jobs-documents-local-gallery/jobs-documents-local-gallery.container.jsx index deee406b7..8c6991d94 100644 --- a/client/src/components/jobs-documents-local-gallery/jobs-documents-local-gallery.container.jsx +++ b/client/src/components/jobs-documents-local-gallery/jobs-documents-local-gallery.container.jsx @@ -18,7 +18,7 @@ import JobsDocumentsLocalGallerySelectAllComponent from "./jobs-documents-local- import Lightbox from "react-image-lightbox"; import "react-image-lightbox/style.css"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, @@ -117,7 +117,7 @@ export function JobsDocumentsLocalGallery({ {!hasMediaAccess && ( - + )} diff --git a/client/src/components/labor-allocations-table/labor-allocations-table.component.jsx b/client/src/components/labor-allocations-table/labor-allocations-table.component.jsx index 1c8947d5f..57be0b072 100644 --- a/client/src/components/labor-allocations-table/labor-allocations-table.component.jsx +++ b/client/src/components/labor-allocations-table/labor-allocations-table.component.jsx @@ -13,7 +13,7 @@ import LaborAllocationsAdjustmentEdit from "../labor-allocations-adjustment-edit import "./labor-allocations-table.styles.scss"; import { CalculateAllocationsTotals } from "./labor-allocations-table.utility"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, technician: selectTechnician @@ -206,7 +206,7 @@ export function LaborAllocationsTable({ ...(!hasTimeTicketAccess && { emptyText: ( - + ) }) @@ -249,7 +249,7 @@ export function LaborAllocationsTable({ ...(!hasTimeTicketAccess && { emptyText: ( - + ) }) diff --git a/client/src/components/labor-allocations-table/labor-allocations-table.payroll.component.jsx b/client/src/components/labor-allocations-table/labor-allocations-table.payroll.component.jsx index 5330f025a..82ccbbc7e 100644 --- a/client/src/components/labor-allocations-table/labor-allocations-table.payroll.component.jsx +++ b/client/src/components/labor-allocations-table/labor-allocations-table.payroll.component.jsx @@ -11,7 +11,7 @@ import { selectBodyshop } from "../../redux/user/user.selectors"; import CurrencyFormatter from "../../utils/CurrencyFormatter"; import "./labor-allocations-table.styles.scss"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; import LockWrapperComponent from "../lock-wrapper/lock-wrapper.component"; const mapStateToProps = createStructuredSelector({ @@ -269,7 +269,7 @@ export function PayrollLaborAllocationsTable({ ...(!hasTimeTicketAccess && { emptyText: ( - + ) }) diff --git a/client/src/components/schedule-calendar-wrapper/schedule-calendar-header-graph.component.jsx b/client/src/components/schedule-calendar-wrapper/schedule-calendar-header-graph.component.jsx index 57df25ecd..37809967e 100644 --- a/client/src/components/schedule-calendar-wrapper/schedule-calendar-header-graph.component.jsx +++ b/client/src/components/schedule-calendar-wrapper/schedule-calendar-header-graph.component.jsx @@ -7,7 +7,7 @@ import { Legend, PolarAngleAxis, PolarGrid, PolarRadiusAxis, Radar, RadarChart, import { createStructuredSelector } from "reselect"; import { selectBodyshop } from "../../redux/user/user.selectors"; import BlurWrapperComponent from "../feature-wrapper/blur-wrapper.component"; -import { UpsellMaskWrapper, UpsellEnum } from "../upsell/upsell.component"; +import { UpsellMaskWrapper, upsellEnum } from "../upsell/upsell.component"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; const mapStateToProps = createStructuredSelector({ @@ -75,7 +75,7 @@ export function ScheduleCalendarHeaderGraph({ bodyshop, loadData }) { {hasSmartSchedulingAccess ? ( chartContents ) : ( - {chartContents} + {chartContents} )}
diff --git a/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx b/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx index edf1a8748..2bf99c1a9 100644 --- a/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx +++ b/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx @@ -17,7 +17,7 @@ import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component"; import OwnerNameDisplay from "../owner-name-display/owner-name-display.component"; import ScheduleBlockDay from "../schedule-block-day/schedule-block-day.component"; import ScheduleCalendarHeaderGraph from "./schedule-calendar-header-graph.component"; -import UpsellComponent, { UpsellEnum, UpsellMaskWrapper } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum, UpsellMaskWrapper } from "../upsell/upsell.component"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; const mapStateToProps = createStructuredSelector({ @@ -93,7 +93,7 @@ export function ScheduleCalendarHeaderComponent({ {!hasSmartSchedulingAccess && ( - + )} @@ -135,7 +135,7 @@ export function ScheduleCalendarHeaderComponent({ )} {!hasSmartSchedulingAccess && ( - + )} diff --git a/client/src/components/schedule-job-modal/schedule-job-modal.component.jsx b/client/src/components/schedule-job-modal/schedule-job-modal.component.jsx index 1cee17397..c55163479 100644 --- a/client/src/components/schedule-job-modal/schedule-job-modal.component.jsx +++ b/client/src/components/schedule-job-modal/schedule-job-modal.component.jsx @@ -17,7 +17,7 @@ import ScheduleExistingAppointmentsList from "../schedule-existing-appointments- import "./schedule-job-modal.scss"; import LockWrapperComponent from "../lock-wrapper/lock-wrapper.component"; import BlurWrapper from "../feature-wrapper/blur-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -139,7 +139,7 @@ export function ScheduleJobModalComponent({ ))} {!smartOptions.length > 1 && hasSmartSchedulingAccess && ( - + )} diff --git a/client/src/components/time-ticket-list/time-ticket-list.component.jsx b/client/src/components/time-ticket-list/time-ticket-list.component.jsx index 3ac5d0a08..c29648f17 100644 --- a/client/src/components/time-ticket-list/time-ticket-list.component.jsx +++ b/client/src/components/time-ticket-list/time-ticket-list.component.jsx @@ -16,7 +16,7 @@ import { HasRbacAccess } from "../rbac-wrapper/rbac-wrapper.component"; import TimeTicketEnterButton from "../time-ticket-enter-button/time-ticket-enter-button.component"; import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import LockWrapperComponent from "../lock-wrapper/lock-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, @@ -364,7 +364,7 @@ export function TimeTicketList({ ...(!hasTimeTicketsAccess && { emptyText: ( - + ) }) diff --git a/client/src/components/upsell/upsell.component.jsx b/client/src/components/upsell/upsell.component.jsx index 847e68bdd..8857a278d 100644 --- a/client/src/components/upsell/upsell.component.jsx +++ b/client/src/components/upsell/upsell.component.jsx @@ -14,14 +14,10 @@ import i18n from "i18next"; import React, { useEffect, useRef } from "react"; import { useTranslation } from "react-i18next"; import "./upsell.styles.scss"; -import InstanceRenderManager from "../../utils/instanceRenderMgr.js"; -import { store } from "../../redux/store.js"; -import { Link } from "react-router-dom"; -import { useSelector } from "react-redux"; export default function UpsellComponent({ featureName, subFeatureName, upsell, disableMask }) { const { t } = useTranslation(); - const resultProps = upsell || UpsellEnum[featureName][subFeatureName]; + const resultProps = upsell || upsellEnum[featureName][subFeatureName]; const componentRef = useRef(null); @@ -56,7 +52,7 @@ export default function UpsellComponent({ featureName, subFeatureName, upsell, d } //Kept in the same function as the result props line must mirror and doesnt warrant a separate function. export function UpsellMaskWrapper({ children, upsell, featureName, subFeatureName }) { - const resultProps = upsell || UpsellEnum[featureName][subFeatureName]; + const resultProps = upsell || upsellEnum[featureName][subFeatureName]; return (
{children}
@@ -69,275 +65,173 @@ export function UpsellMaskWrapper({ children, upsell, featureName, subFeatureNam ); } //This is kept in this function as pulling it out into it's own util/enum prevents passing JSX as an `extra` prop -export const UpsellEnum = () => { - //Had to use the selector hook as accessing store with store.getState() was causing issues when hot reloading. - const currentUser = useSelector((state) => state.user.currentUser); - const bodyshop = useSelector((state) => state.user.bodyshop); - - const [first_name, ...last_name] = currentUser?.displayName ? currentUser.displayName.split(" ") : []; - const LearnMoreLink = encodeURI( - InstanceRenderManager({ - imex: `https://imexsystems.ca/schedule-a-demo/`, - rome: `https://forms.zohopublic.com/rometech/form/ROLearnMore/formperma/0G29z8LgLlvKK8nno-b7s-GHgNXwIFlrMeE0mC394L4?first_name=${first_name || ""}&last_name=${last_name.join(" ") || ""}&shop_name=${bodyshop?.shopname || ""}&email=${currentUser?.email || ""}&shop_phone=${bodyshop?.phone || ""}` - }) - ); - - return { - bills: { - autoreconcile: { - //icon: null, - title: i18n.t("upsell.messages.bills.autoreconcile.title"), - subTitle: i18n.t("upsell.messages.bills.autoreconcile.subtitle"), - extra: ( - - - - ) - //status: null - }, - general: { - //icon: null, - title: i18n.t("upsell.messages.bills.general.title"), - subTitle: i18n.t("upsell.messages.bills.general.subtitle"), - extra: ( - - - - ) - //status: null - } +export const upsellEnum = () => ({ + bills: { + autoreconcile: { + //icon: null, + title: i18n.t("upsell.messages.bills.autoreconcile.title"), + subTitle: i18n.t("upsell.messages.bills.autoreconcile.subtitle"), + extra: + //status: null }, - checklist: { - general: { - //icon: null, - title: i18n.t("upsell.messages.checklist.general.title"), - subTitle: i18n.t("upsell.messages.checklist.general.subtitle"), - extra: ( - - - - ) - //status: null - } + general: { + //icon: null, + title: i18n.t("upsell.messages.bills.general.title"), + subTitle: i18n.t("upsell.messages.bills.general.subtitle"), + extra: + //status: null + } + }, + checklist: { + general: { + //icon: null, + title: i18n.t("upsell.messages.checklist.general.title"), + subTitle: i18n.t("upsell.messages.checklist.general.subtitle"), + extra: + //status: null + } + }, + payments: { + general: { + //icon: null, + title: i18n.t("upsell.messages.payments.general.title"), + subTitle: i18n.t("upsell.messages.payments.general.subtitle"), + extra: + //status: null + } + }, + audit: { + general: { + //icon: null, + title: i18n.t("upsell.messages.audit.general.title"), + subTitle: i18n.t("upsell.messages.audit.general.subtitle"), + extra: + //status: null + } + }, + lifecycle: { + general: { + //icon: null, + title: i18n.t("upsell.messages.lifecycle.general.title"), + subTitle: i18n.t("upsell.messages.lifecycle.general.subtitle"), + extra: + //status: null } + } + }, + media: { + general: { + //icon: null, + title: i18n.t("upsell.messages.media.general.title"), + subTitle: i18n.t("upsell.messages.media.general.subtitle"), + extra: + //status: null } + }, + mobile: { + icon: , + title: i18n.t("upsell.messages.media.mobile.title"), + subTitle: i18n.t("upsell.messages.media.mobile.subtitle"), + extra: + //status: null } + } + }, + timetickets: { + allocations: { + title: i18n.t("upsell.messages.timetickets.allocations.title"), + subTitle: i18n.t("upsell.messages.timetickets.allocations.subtitle"), + extra: + }, + general: { + title: i18n.t("upsell.messages.timetickets.general.title"), + subTitle: i18n.t("upsell.messages.timetickets.general.subtitle"), + extra: + } + }, + smartscheduling: { + general: { + icon: , + title: i18n.t("upsell.messages.smartscheduling.general.title"), + subTitle: i18n.t("upsell.messages.smartscheduling.general.subtitle"), + extra: + }, + hrsdelta: { + icon: , + title: i18n.t("upsell.messages.smartscheduling.hrsdelta.title"), + subTitle: i18n.t("upsell.messages.smartscheduling.hrsdelta.subtitle"), + extra: + }, + datepicker: { + icon: , + title: i18n.t("upsell.messages.smartscheduling.datepicker.title"), + subTitle: i18n.t("upsell.messages.smartscheduling.datepicker.subtitle"), + extra: + } + }, + accounting: { + payables: { + icon: , + title: i18n.t("upsell.messages.accounting.payables.title"), + subTitle: i18n.t("upsell.messages.accounting.payables.subtitle"), + extra: + }, + receivables: { + icon: , + title: i18n.t("upsell.messages.accounting.receivables.title"), + subTitle: i18n.t("upsell.messages.accounting.receivables.subtitle"), + extra: }, payments: { - general: { - //icon: null, - title: i18n.t("upsell.messages.payments.general.title"), - subTitle: i18n.t("upsell.messages.payments.general.subtitle"), - extra: ( - - - - ) - //status: null - } - }, - audit: { - general: { - //icon: null, - title: i18n.t("upsell.messages.audit.general.title"), - subTitle: i18n.t("upsell.messages.audit.general.subtitle"), - extra: ( - - - - ) - //status: null - } - }, - lifecycle: { - general: { - //icon: null, - title: i18n.t("upsell.messages.lifecycle.general.title"), - subTitle: i18n.t("upsell.messages.lifecycle.general.subtitle"), - extra: ( - - - - ) - //status: null } - } - }, - media: { - general: { - //icon: null, - title: i18n.t("upsell.messages.media.general.title"), - subTitle: i18n.t("upsell.messages.media.general.subtitle"), - extra: ( - - - - ) - //status: null } - }, - mobile: { - icon: , - title: i18n.t("upsell.messages.media.mobile.title"), - subTitle: i18n.t("upsell.messages.media.mobile.subtitle"), - extra: ( - - - - ) - //status: null } - } - }, - timetickets: { - allocations: { - title: i18n.t("upsell.messages.timetickets.allocations.title"), - subTitle: i18n.t("upsell.messages.timetickets.allocations.subtitle"), - extra: ( - - - - ) - }, - general: { - title: i18n.t("upsell.messages.timetickets.general.title"), - subTitle: i18n.t("upsell.messages.timetickets.general.subtitle"), - extra: ( - - - - ) - } - }, - smartscheduling: { - general: { - icon: , - title: i18n.t("upsell.messages.smartscheduling.general.title"), - subTitle: i18n.t("upsell.messages.smartscheduling.general.subtitle"), - extra: ( - - - - ) - }, - hrsdelta: { - icon: , - title: i18n.t("upsell.messages.smartscheduling.hrsdelta.title"), - subTitle: i18n.t("upsell.messages.smartscheduling.hrsdelta.subtitle"), - extra: ( - - - - ) - }, - datepicker: { - icon: , - title: i18n.t("upsell.messages.smartscheduling.datepicker.title"), - subTitle: i18n.t("upsell.messages.smartscheduling.datepicker.subtitle"), - extra: ( - - - - ) - } - }, - accounting: { - payables: { - icon: , - title: i18n.t("upsell.messages.accounting.payables.title"), - subTitle: i18n.t("upsell.messages.accounting.payables.subtitle"), - extra: ( - - - - ) - }, - receivables: { - icon: , - title: i18n.t("upsell.messages.accounting.receivables.title"), - subTitle: i18n.t("upsell.messages.accounting.receivables.subtitle"), - extra: ( - - - - ) - }, - payments: { - icon: , - title: i18n.t("upsell.messages.accounting.payments.title"), - subTitle: i18n.t("upsell.messages.accounting.payments.subtitle"), - extra: ( - - - - ) - } - }, - courtesycars: { - general: { - icon: , - title: i18n.t("upsell.messages.courtesycars.general.title"), - subTitle: i18n.t("upsell.messages.courtesycars.general.subtitle"), - extra: ( - - - - ) - } - }, - dashboard: { - general: { - icon: , - title: i18n.t("upsell.messages.dashboard.general.title"), - subTitle: i18n.t("upsell.messages.dashboard.general.subtitle"), - extra: ( - - - - ) - } - }, - visualboard: { - general: { - icon: , - title: i18n.t("upsell.messages.visualboard.general.title"), - subTitle: i18n.t("upsell.messages.visualboard.general.subtitle"), - extra: ( - - - - ) - } - }, - scoreboard: { - general: { - icon: , - title: i18n.t("upsell.messages.scoreboard.general.title"), - subTitle: i18n.t("upsell.messages.scoreboard.general.subtitle"), - extra: ( - - - - ) - } - }, - techconsole: { - general: { - icon: , - title: i18n.t("upsell.messages.techconsole.general.title"), - subTitle: i18n.t("upsell.messages.techconsole.general.subtitle"), - extra: ( - - - - ) - } - }, - csi: { - general: { - icon: , - title: i18n.t("upsell.messages.csi.general.title"), - subTitle: i18n.t("upsell.messages.csi.general.subtitle"), - extra: ( - - - - ) - } + icon: , + title: i18n.t("upsell.messages.accounting.payments.title"), + subTitle: i18n.t("upsell.messages.accounting.payments.subtitle"), + extra: } - }; -}; + }, + courtesycars: { + general: { + icon: , + title: i18n.t("upsell.messages.courtesycars.general.title"), + subTitle: i18n.t("upsell.messages.courtesycars.general.subtitle"), + extra: + } + }, + dashboard: { + general: { + icon: , + title: i18n.t("upsell.messages.dashboard.general.title"), + subTitle: i18n.t("upsell.messages.dashboard.general.subtitle"), + extra: + } + }, + visualboard: { + general: { + icon: , + title: i18n.t("upsell.messages.visualboard.general.title"), + subTitle: i18n.t("upsell.messages.visualboard.general.subtitle"), + extra: + } + }, + scoreboard: { + general: { + icon: , + title: i18n.t("upsell.messages.scoreboard.general.title"), + subTitle: i18n.t("upsell.messages.scoreboard.general.subtitle"), + extra: + } + }, + techconsole: { + general: { + icon: , + title: i18n.t("upsell.messages.techconsole.general.title"), + subTitle: i18n.t("upsell.messages.techconsole.general.subtitle"), + extra: + } + }, + csi: { + general: { + icon: , + title: i18n.t("upsell.messages.csi.general.title"), + subTitle: i18n.t("upsell.messages.csi.general.subtitle"), + extra: + } + } +}); diff --git a/client/src/pages/accounting-payables/accounting-payables.container.jsx b/client/src/pages/accounting-payables/accounting-payables.container.jsx index 81127aea0..4e9b0dcfd 100644 --- a/client/src/pages/accounting-payables/accounting-payables.container.jsx +++ b/client/src/pages/accounting-payables/accounting-payables.container.jsx @@ -13,7 +13,7 @@ import { selectPartnerVersion } from "../../redux/application/application.select import { selectBodyshop } from "../../redux/user/user.selectors"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; import { Card } from "antd"; const mapStateToProps = createStructuredSelector({ @@ -63,7 +63,7 @@ export function AccountingPayablesContainer({ bodyshop, setBreadcrumbs, setSelec featureName="export" noauth={ - + } > diff --git a/client/src/pages/accounting-payments/accounting-payments.container.jsx b/client/src/pages/accounting-payments/accounting-payments.container.jsx index 856c84963..e3c01885d 100644 --- a/client/src/pages/accounting-payments/accounting-payments.container.jsx +++ b/client/src/pages/accounting-payments/accounting-payments.container.jsx @@ -13,7 +13,7 @@ import { checkPartnerStatus } from "../../components/partner-ping/partner-ping.c import { selectPartnerVersion } from "../../redux/application/application.selectors"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; import { Card } from "antd"; const mapStateToProps = createStructuredSelector({ @@ -61,7 +61,7 @@ export function AccountingPaymentsContainer({ bodyshop, setBreadcrumbs, setSelec featureName="export" noauth={ - + } > diff --git a/client/src/pages/accounting-receivables/accounting-receivables.container.jsx b/client/src/pages/accounting-receivables/accounting-receivables.container.jsx index 115272ab0..830eb6cfa 100644 --- a/client/src/pages/accounting-receivables/accounting-receivables.container.jsx +++ b/client/src/pages/accounting-receivables/accounting-receivables.container.jsx @@ -14,7 +14,7 @@ import { selectPartnerVersion } from "../../redux/application/application.select import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, @@ -66,7 +66,7 @@ export function AccountingReceivablesContainer({ bodyshop, setBreadcrumbs, setSe featureName="export" noauth={ - + } > diff --git a/client/src/pages/bills/bills.page.container.jsx b/client/src/pages/bills/bills.page.container.jsx index 069e307a7..5398cb87b 100644 --- a/client/src/pages/bills/bills.page.container.jsx +++ b/client/src/pages/bills/bills.page.container.jsx @@ -14,7 +14,7 @@ import { pageLimit } from "../../utils/config"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapDispatchToProps = (dispatch) => ({ setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)), @@ -59,7 +59,7 @@ export function BillsPageContainer({ setBreadcrumbs, setSelectedHeader }) { featureName="bills" noauth={ - + } > diff --git a/client/src/pages/contract-create/contract-create.page.container.jsx b/client/src/pages/contract-create/contract-create.page.container.jsx index cb6c7fa46..c2ab7358e 100644 --- a/client/src/pages/contract-create/contract-create.page.container.jsx +++ b/client/src/pages/contract-create/contract-create.page.container.jsx @@ -13,7 +13,7 @@ import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/appli import { selectBodyshop } from "../../redux/user/user.selectors"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import ContractCreatePageComponent from "./contract-create.page.component"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -125,7 +125,7 @@ export function ContractCreatePageContainer({ bodyshop, setBreadcrumbs, setSelec featureName="courtesycars" noauth={ - + } > diff --git a/client/src/pages/contract-detail/contract-detail.page.container.jsx b/client/src/pages/contract-detail/contract-detail.page.container.jsx index 7fce74e55..911acde91 100644 --- a/client/src/pages/contract-detail/contract-detail.page.container.jsx +++ b/client/src/pages/contract-detail/contract-detail.page.container.jsx @@ -16,7 +16,7 @@ import ContractDetailPageComponent from "./contract-detail.page.component"; import NotFound from "../../components/not-found/not-found.component"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapDispatchToProps = (dispatch) => ({ setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)), @@ -113,7 +113,7 @@ export function ContractDetailPageContainer({ setBreadcrumbs, addRecentItem, set featureName="courtesycars" noauth={ - + } > diff --git a/client/src/pages/contracts/contracts.page.container.jsx b/client/src/pages/contracts/contracts.page.container.jsx index 3d93e0862..4652b30be 100644 --- a/client/src/pages/contracts/contracts.page.container.jsx +++ b/client/src/pages/contracts/contracts.page.container.jsx @@ -13,7 +13,7 @@ import { pageLimit } from "../../utils/config"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapDispatchToProps = (dispatch) => ({ setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)), @@ -62,7 +62,7 @@ export function ContractsPageContainer({ setBreadcrumbs, setSelectedHeader }) { featureName="courtesycars" noauth={ - + } > diff --git a/client/src/pages/courtesy-car-create/courtesy-car-create.page.container.jsx b/client/src/pages/courtesy-car-create/courtesy-car-create.page.container.jsx index c6baaeb92..451a32ea9 100644 --- a/client/src/pages/courtesy-car-create/courtesy-car-create.page.container.jsx +++ b/client/src/pages/courtesy-car-create/courtesy-car-create.page.container.jsx @@ -12,7 +12,7 @@ import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/appli import { selectBodyshop } from "../../redux/user/user.selectors"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -73,7 +73,7 @@ export function CourtesyCarCreateContainer({ bodyshop, setBreadcrumbs, setSelect featureName="courtesycars" noauth={ - + } > diff --git a/client/src/pages/courtesy-cars/courtesy-cars.page.container.jsx b/client/src/pages/courtesy-cars/courtesy-cars.page.container.jsx index ea70e4be6..ebbd2c0b6 100644 --- a/client/src/pages/courtesy-cars/courtesy-cars.page.container.jsx +++ b/client/src/pages/courtesy-cars/courtesy-cars.page.container.jsx @@ -10,7 +10,7 @@ import CourtesyCarsPageComponent from "./courtesy-cars.page.component"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapDispatchToProps = (dispatch) => ({ setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)), @@ -40,7 +40,7 @@ export function CourtesyCarsPageContainer({ setBreadcrumbs, setSelectedHeader }) featureName="courtesycars" noauth={ - + } > diff --git a/client/src/pages/dashboard/dashboard.container.jsx b/client/src/pages/dashboard/dashboard.container.jsx index f84d6bb69..fd1b76e45 100644 --- a/client/src/pages/dashboard/dashboard.container.jsx +++ b/client/src/pages/dashboard/dashboard.container.jsx @@ -7,7 +7,7 @@ import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/appli import FeatureWrapper from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapDispatchToProps = (dispatch) => ({ setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)), @@ -38,7 +38,7 @@ export function ExportsLogPageContainer({ setBreadcrumbs, setSelectedHeader }) { featureName="dashboard" noauth={ - + } > diff --git a/client/src/pages/export-logs/export-logs.page.container.jsx b/client/src/pages/export-logs/export-logs.page.container.jsx index e2ea9c741..05fbe9426 100644 --- a/client/src/pages/export-logs/export-logs.page.container.jsx +++ b/client/src/pages/export-logs/export-logs.page.container.jsx @@ -7,7 +7,7 @@ import ExportLogsPage from "./export-logs.page.component"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapDispatchToProps = (dispatch) => ({ setBreadcrumbs: (breadcrumbs) => dispatch(setBreadcrumbs(breadcrumbs)), @@ -38,7 +38,7 @@ export function ExportsLogPageContainer({ setBreadcrumbs, setSelectedHeader }) { featureName="export" noauth={ - + } > diff --git a/client/src/pages/jobs-checklist-view/jobs-checklist-view.page.jsx b/client/src/pages/jobs-checklist-view/jobs-checklist-view.page.jsx index 6dacc0f4b..cc6bf193f 100644 --- a/client/src/pages/jobs-checklist-view/jobs-checklist-view.page.jsx +++ b/client/src/pages/jobs-checklist-view/jobs-checklist-view.page.jsx @@ -15,7 +15,7 @@ import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/appli import { selectBodyshop } from "../../redux/user/user.selectors"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser @@ -79,7 +79,7 @@ export function JobsChecklistViewContainer({ bodyshop, setBreadcrumbs, setSelect featureName="checklist" noauth={ - + } > diff --git a/client/src/pages/jobs-deliver/jobs-delivery.page.container.jsx b/client/src/pages/jobs-deliver/jobs-delivery.page.container.jsx index 9fa7aba13..077c83398 100644 --- a/client/src/pages/jobs-deliver/jobs-delivery.page.container.jsx +++ b/client/src/pages/jobs-deliver/jobs-delivery.page.container.jsx @@ -14,7 +14,7 @@ import JobchecklistComponent from "../../components/job-checklist/job-checklist. import InstanceRenderManager from "../../utils/instanceRenderMgr"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser @@ -66,7 +66,7 @@ export function JobsDeliverContainer({ bodyshop, setBreadcrumbs, setSelectedHead featureName="checklist" noauth={ - + } > diff --git a/client/src/pages/jobs-intake/jobs-intake.page.container.jsx b/client/src/pages/jobs-intake/jobs-intake.page.container.jsx index 7e9c1936a..54a8a561d 100644 --- a/client/src/pages/jobs-intake/jobs-intake.page.container.jsx +++ b/client/src/pages/jobs-intake/jobs-intake.page.container.jsx @@ -14,7 +14,7 @@ import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component"; import { Card, Result } from "antd"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ //currentUser: selectCurrentUser @@ -69,7 +69,7 @@ export function JobsIntakeContainer({ bodyshop, setBreadcrumbs, setSelectedHeade featureName="checklist" noauth={ - + } > diff --git a/client/src/pages/payments-all/payments-all.container.page.jsx b/client/src/pages/payments-all/payments-all.container.page.jsx index 649ac1004..2b67c4737 100644 --- a/client/src/pages/payments-all/payments-all.container.page.jsx +++ b/client/src/pages/payments-all/payments-all.container.page.jsx @@ -14,7 +14,7 @@ import { selectBodyshop } from "../../redux/user/user.selectors"; import { pageLimit } from "../../utils/config"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; import { Card } from "antd"; const mapStateToProps = createStructuredSelector({ @@ -64,7 +64,7 @@ export function AllJobs({ bodyshop, setBreadcrumbs, setSelectedHeader }) { featureName="payments" noauth={ - + } z diff --git a/client/src/pages/production-board/production-board.container.jsx b/client/src/pages/production-board/production-board.container.jsx index 914b8fdbf..0e80a5dd4 100644 --- a/client/src/pages/production-board/production-board.container.jsx +++ b/client/src/pages/production-board/production-board.container.jsx @@ -5,7 +5,7 @@ import { connect } from "react-redux"; import { createStructuredSelector } from "reselect"; import FeatureWrapper from "../../components/feature-wrapper/feature-wrapper.component"; import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/application.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; @@ -44,7 +44,7 @@ export function ProductionBoardContainer({ setBreadcrumbs, bodyshop, setSelected featureName="visualboard" noauth={ - + } > diff --git a/client/src/pages/scoreboard/scoreboard.page.container.jsx b/client/src/pages/scoreboard/scoreboard.page.container.jsx index 96cc433c0..7e15cae75 100644 --- a/client/src/pages/scoreboard/scoreboard.page.container.jsx +++ b/client/src/pages/scoreboard/scoreboard.page.container.jsx @@ -15,7 +15,7 @@ import ScoreboardTimeTickets from "../../components/scoreboard-timetickets/score import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/application.actions"; import { selectBodyshop } from "../../redux/user/user.selectors"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; /** * Mapping state to props @@ -71,7 +71,7 @@ export function ScoreboardContainer({ setBreadcrumbs, setSelectedHeader }) { featureName="scoreboard" noauth={ - + } > diff --git a/client/src/pages/shift-clock/shift-clock.page.jsx b/client/src/pages/shift-clock/shift-clock.page.jsx index b3e655af8..1e8ed0609 100644 --- a/client/src/pages/shift-clock/shift-clock.page.jsx +++ b/client/src/pages/shift-clock/shift-clock.page.jsx @@ -3,7 +3,7 @@ import RbacWrapper from "../../components/rbac-wrapper/rbac-wrapper.component"; import TimeTicketShift from "../../components/time-ticket-shift/time-ticket-shift.container"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; export default function ShiftClock() { return ( @@ -11,7 +11,7 @@ export default function ShiftClock() { featureName="timetickets" noauth={ - + } > diff --git a/client/src/pages/shop-csi/shop-csi.container.page.jsx b/client/src/pages/shop-csi/shop-csi.container.page.jsx index 01fd4a97a..fe6e6cf02 100644 --- a/client/src/pages/shop-csi/shop-csi.container.page.jsx +++ b/client/src/pages/shop-csi/shop-csi.container.page.jsx @@ -13,7 +13,7 @@ import { setBreadcrumbs, setSelectedHeader } from "../../redux/application/appli import { selectBodyshop } from "../../redux/user/user.selectors"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -56,7 +56,7 @@ export function ShopCsiContainer({ bodyshop, setBreadcrumbs, setSelectedHeader } featureName="csi" noauth={ - + } > diff --git a/client/src/pages/tech/tech.page.component.jsx b/client/src/pages/tech/tech.page.component.jsx index 9ffef2684..5f66bb970 100644 --- a/client/src/pages/tech/tech.page.component.jsx +++ b/client/src/pages/tech/tech.page.component.jsx @@ -14,7 +14,7 @@ import UpdateAlert from "../../components/update-alert/update-alert.component"; import { selectTechnician } from "../../redux/tech/tech.selectors"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import "./tech.page.styles.scss"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component.jsx"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component.jsx"; const TimeTicketModalContainer = lazy(() => import("../../components/time-ticket-modal/time-ticket-modal.container")); const EmailOverlayContainer = lazy(() => import("../../components/email-overlay/email-overlay.container.jsx")); @@ -87,7 +87,7 @@ export function TechPage({ technician }) { featureName="techconsole" noauth={ - + } > diff --git a/client/src/pages/temporary-docs/temporary-docs.container.jsx b/client/src/pages/temporary-docs/temporary-docs.container.jsx index d83f66d24..44d848230 100644 --- a/client/src/pages/temporary-docs/temporary-docs.container.jsx +++ b/client/src/pages/temporary-docs/temporary-docs.container.jsx @@ -9,7 +9,7 @@ import TemporaryDocsComponent from "./temporary-docs.component"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -44,7 +44,7 @@ export function TempDocumentsContainer({ setBreadcrumbs, setSelectedHeader }) { featureName="media" noauth={ - + } > diff --git a/client/src/pages/time-tickets/time-tickets.container.jsx b/client/src/pages/time-tickets/time-tickets.container.jsx index e3d791ddd..f1492a9d9 100644 --- a/client/src/pages/time-tickets/time-tickets.container.jsx +++ b/client/src/pages/time-tickets/time-tickets.container.jsx @@ -20,7 +20,7 @@ import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wr import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { useSplitTreatments } from "@splitsoftware/splitio-react"; import { selectBodyshop } from "../../redux/user/user.selectors"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -78,7 +78,7 @@ export function TimeTicketsContainer({ bodyshop, setBreadcrumbs, setSelectedHead featureName="timetickets" noauth={ - + } > diff --git a/client/src/pages/tt-approvals/tt-approvals.page.container.jsx b/client/src/pages/tt-approvals/tt-approvals.page.container.jsx index 230c9eaca..530a04503 100644 --- a/client/src/pages/tt-approvals/tt-approvals.page.container.jsx +++ b/client/src/pages/tt-approvals/tt-approvals.page.container.jsx @@ -9,7 +9,7 @@ import { selectBodyshop } from "../../redux/user/user.selectors"; import FeatureWrapperComponent from "../../components/feature-wrapper/feature-wrapper.component"; import InstanceRenderManager from "../../utils/instanceRenderMgr"; import { Card } from "antd"; -import UpsellComponent, { UpsellEnum } from "../../components/upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../../components/upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop @@ -44,7 +44,7 @@ export function TtApprovalsPage({ setBreadcrumbs, setSelectedHeader }) { featureName="timetickets" noauth={ - + } > From 1a8fad26e5a0a21b48e83417fdec939c15e0ba71 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 6 Jan 2025 16:09:00 -0800 Subject: [PATCH 4/5] IO-3067 Correct Rome Learn More Link. --- .../job-lifecycle/job-lifecycle.component.jsx | 26 +- .../components/upsell/upsell.component.jsx | 436 +++++++++++------- 2 files changed, 289 insertions(+), 173 deletions(-) diff --git a/client/src/components/job-lifecycle/job-lifecycle.component.jsx b/client/src/components/job-lifecycle/job-lifecycle.component.jsx index 7f99d08b5..df71c88c3 100644 --- a/client/src/components/job-lifecycle/job-lifecycle.component.jsx +++ b/client/src/components/job-lifecycle/job-lifecycle.component.jsx @@ -9,14 +9,25 @@ import { useTranslation } from "react-i18next"; import "./job-lifecycle.styles.scss"; import BlurWrapperComponent from "../feature-wrapper/blur-wrapper.component"; + import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; +import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; +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)) +}); // show text on bar if text can fit -export function JobLifecycleComponent({ job, statuses, ...rest }) { +export function JobLifecycleComponent({ bodyshop, job, statuses, ...rest }) { const [loading, setLoading] = useState(true); const [lifecycleData, setLifecycleData] = useState(null); const { t } = useTranslation(); // Used for tracking external state changes. - + const hasLifeCycleAccess = HasFeatureAccess({ bodyshop, featureName: "lifecycle" }); const { data } = useQuery( gql` query get_job_test($id: uuid!) { @@ -143,9 +154,11 @@ export function JobLifecycleComponent({ job, statuses, ...rest }) { } style={{ width: "100%" }} > - - - + {!hasLifeCycleAccess && ( + + + + )}
); } - -export default JobLifecycleComponent; +export default connect(mapStateToProps, mapDispatchToProps)(JobLifecycleComponent); diff --git a/client/src/components/upsell/upsell.component.jsx b/client/src/components/upsell/upsell.component.jsx index 8857a278d..652cbeab9 100644 --- a/client/src/components/upsell/upsell.component.jsx +++ b/client/src/components/upsell/upsell.component.jsx @@ -13,6 +13,9 @@ import { Button, Card, Result } from "antd"; import i18n from "i18next"; import React, { useEffect, useRef } from "react"; import { useTranslation } from "react-i18next"; +import { Link } from "react-router-dom"; +import { store } from "../../redux/store.js"; +import InstanceRenderManager from "../../utils/instanceRenderMgr.js"; import "./upsell.styles.scss"; export default function UpsellComponent({ featureName, subFeatureName, upsell, disableMask }) { @@ -64,174 +67,275 @@ export function UpsellMaskWrapper({ children, upsell, featureName, subFeatureNam
); } + //This is kept in this function as pulling it out into it's own util/enum prevents passing JSX as an `extra` prop -export const upsellEnum = () => ({ - bills: { - autoreconcile: { - //icon: null, - title: i18n.t("upsell.messages.bills.autoreconcile.title"), - subTitle: i18n.t("upsell.messages.bills.autoreconcile.subtitle"), - extra: - //status: null +export const upsellEnum = () => { + const { currentUser, bodyshop } = store.getState().user; + + const [first_name, ...last_name] = currentUser?.displayName ? currentUser.displayName.split(" ") : []; + const LearnMoreLink = encodeURI( + InstanceRenderManager({ + imex: `https://imexsystems.ca/schedule-a-demo/`, + rome: `https://forms.zohopublic.com/rometech/form/ROLearnMore/formperma/0G29z8LgLlvKK8nno-b7s-GHgNXwIFlrMeE0mC394L4?first_name=${first_name || ""}&last_name=${last_name.join(" ") || ""}&shop_name=${bodyshop?.shopname || ""}&email=${currentUser?.email || ""}&shop_phone=${bodyshop?.phone || ""}` + }) + ); + + return { + bills: { + autoreconcile: { + //icon: null, + title: i18n.t("upsell.messages.bills.autoreconcile.title"), + subTitle: i18n.t("upsell.messages.bills.autoreconcile.subtitle"), + extra: ( + + + + ) + //status: null + }, + general: { + //icon: null, + title: i18n.t("upsell.messages.bills.general.title"), + subTitle: i18n.t("upsell.messages.bills.general.subtitle"), + extra: ( + + + + ) + //status: null + } }, - general: { - //icon: null, - title: i18n.t("upsell.messages.bills.general.title"), - subTitle: i18n.t("upsell.messages.bills.general.subtitle"), - extra: - //status: null - } - }, - checklist: { - general: { - //icon: null, - title: i18n.t("upsell.messages.checklist.general.title"), - subTitle: i18n.t("upsell.messages.checklist.general.subtitle"), - extra: - //status: null - } - }, - payments: { - general: { - //icon: null, - title: i18n.t("upsell.messages.payments.general.title"), - subTitle: i18n.t("upsell.messages.payments.general.subtitle"), - extra: - //status: null - } - }, - audit: { - general: { - //icon: null, - title: i18n.t("upsell.messages.audit.general.title"), - subTitle: i18n.t("upsell.messages.audit.general.subtitle"), - extra: - //status: null - } - }, - lifecycle: { - general: { - //icon: null, - title: i18n.t("upsell.messages.lifecycle.general.title"), - subTitle: i18n.t("upsell.messages.lifecycle.general.subtitle"), - extra: - //status: null } - } - }, - media: { - general: { - //icon: null, - title: i18n.t("upsell.messages.media.general.title"), - subTitle: i18n.t("upsell.messages.media.general.subtitle"), - extra: - //status: null } - }, - mobile: { - icon: , - title: i18n.t("upsell.messages.media.mobile.title"), - subTitle: i18n.t("upsell.messages.media.mobile.subtitle"), - extra: - //status: null } - } - }, - timetickets: { - allocations: { - title: i18n.t("upsell.messages.timetickets.allocations.title"), - subTitle: i18n.t("upsell.messages.timetickets.allocations.subtitle"), - extra: - }, - general: { - title: i18n.t("upsell.messages.timetickets.general.title"), - subTitle: i18n.t("upsell.messages.timetickets.general.subtitle"), - extra: - } - }, - smartscheduling: { - general: { - icon: , - title: i18n.t("upsell.messages.smartscheduling.general.title"), - subTitle: i18n.t("upsell.messages.smartscheduling.general.subtitle"), - extra: - }, - hrsdelta: { - icon: , - title: i18n.t("upsell.messages.smartscheduling.hrsdelta.title"), - subTitle: i18n.t("upsell.messages.smartscheduling.hrsdelta.subtitle"), - extra: - }, - datepicker: { - icon: , - title: i18n.t("upsell.messages.smartscheduling.datepicker.title"), - subTitle: i18n.t("upsell.messages.smartscheduling.datepicker.subtitle"), - extra: - } - }, - accounting: { - payables: { - icon: , - title: i18n.t("upsell.messages.accounting.payables.title"), - subTitle: i18n.t("upsell.messages.accounting.payables.subtitle"), - extra: - }, - receivables: { - icon: , - title: i18n.t("upsell.messages.accounting.receivables.title"), - subTitle: i18n.t("upsell.messages.accounting.receivables.subtitle"), - extra: + checklist: { + general: { + //icon: null, + title: i18n.t("upsell.messages.checklist.general.title"), + subTitle: i18n.t("upsell.messages.checklist.general.subtitle"), + extra: ( + + + + ) + //status: null + } }, payments: { - icon: , - title: i18n.t("upsell.messages.accounting.payments.title"), - subTitle: i18n.t("upsell.messages.accounting.payments.subtitle"), - extra: + general: { + //icon: null, + title: i18n.t("upsell.messages.payments.general.title"), + subTitle: i18n.t("upsell.messages.payments.general.subtitle"), + extra: ( + + + + ) + //status: null + } + }, + audit: { + general: { + //icon: null, + title: i18n.t("upsell.messages.audit.general.title"), + subTitle: i18n.t("upsell.messages.audit.general.subtitle"), + extra: ( + + + + ) + //status: null + } + }, + lifecycle: { + general: { + //icon: null, + title: i18n.t("upsell.messages.lifecycle.general.title"), + subTitle: i18n.t("upsell.messages.lifecycle.general.subtitle"), + extra: ( + + + + ) + //status: null } + } + }, + media: { + general: { + //icon: null, + title: i18n.t("upsell.messages.media.general.title"), + subTitle: i18n.t("upsell.messages.media.general.subtitle"), + extra: ( + + + + ) + //status: null } + }, + mobile: { + icon: , + title: i18n.t("upsell.messages.media.mobile.title"), + subTitle: i18n.t("upsell.messages.media.mobile.subtitle"), + extra: ( + + + + ) + //status: null } + } + }, + timetickets: { + allocations: { + title: i18n.t("upsell.messages.timetickets.allocations.title"), + subTitle: i18n.t("upsell.messages.timetickets.allocations.subtitle"), + extra: ( + + + + ) + }, + general: { + title: i18n.t("upsell.messages.timetickets.general.title"), + subTitle: i18n.t("upsell.messages.timetickets.general.subtitle"), + extra: ( + + + + ) + } + }, + smartscheduling: { + general: { + icon: , + title: i18n.t("upsell.messages.smartscheduling.general.title"), + subTitle: i18n.t("upsell.messages.smartscheduling.general.subtitle"), + extra: ( + + + + ) + }, + hrsdelta: { + icon: , + title: i18n.t("upsell.messages.smartscheduling.hrsdelta.title"), + subTitle: i18n.t("upsell.messages.smartscheduling.hrsdelta.subtitle"), + extra: ( + + + + ) + }, + datepicker: { + icon: , + title: i18n.t("upsell.messages.smartscheduling.datepicker.title"), + subTitle: i18n.t("upsell.messages.smartscheduling.datepicker.subtitle"), + extra: ( + + + + ) + } + }, + accounting: { + payables: { + icon: , + title: i18n.t("upsell.messages.accounting.payables.title"), + subTitle: i18n.t("upsell.messages.accounting.payables.subtitle"), + extra: ( + + + + ) + }, + receivables: { + icon: , + title: i18n.t("upsell.messages.accounting.receivables.title"), + subTitle: i18n.t("upsell.messages.accounting.receivables.subtitle"), + extra: ( + + + + ) + }, + payments: { + icon: , + title: i18n.t("upsell.messages.accounting.payments.title"), + subTitle: i18n.t("upsell.messages.accounting.payments.subtitle"), + extra: ( + + + + ) + } + }, + courtesycars: { + general: { + icon: , + title: i18n.t("upsell.messages.courtesycars.general.title"), + subTitle: i18n.t("upsell.messages.courtesycars.general.subtitle"), + extra: ( + + + + ) + } + }, + dashboard: { + general: { + icon: , + title: i18n.t("upsell.messages.dashboard.general.title"), + subTitle: i18n.t("upsell.messages.dashboard.general.subtitle"), + extra: ( + + + + ) + } + }, + visualboard: { + general: { + icon: , + title: i18n.t("upsell.messages.visualboard.general.title"), + subTitle: i18n.t("upsell.messages.visualboard.general.subtitle"), + extra: ( + + + + ) + } + }, + scoreboard: { + general: { + icon: , + title: i18n.t("upsell.messages.scoreboard.general.title"), + subTitle: i18n.t("upsell.messages.scoreboard.general.subtitle"), + extra: ( + + + + ) + } + }, + techconsole: { + general: { + icon: , + title: i18n.t("upsell.messages.techconsole.general.title"), + subTitle: i18n.t("upsell.messages.techconsole.general.subtitle"), + extra: ( + + + + ) + } + }, + csi: { + general: { + icon: , + title: i18n.t("upsell.messages.csi.general.title"), + subTitle: i18n.t("upsell.messages.csi.general.subtitle"), + extra: ( + + + + ) + } } - }, - courtesycars: { - general: { - icon: , - title: i18n.t("upsell.messages.courtesycars.general.title"), - subTitle: i18n.t("upsell.messages.courtesycars.general.subtitle"), - extra: - } - }, - dashboard: { - general: { - icon: , - title: i18n.t("upsell.messages.dashboard.general.title"), - subTitle: i18n.t("upsell.messages.dashboard.general.subtitle"), - extra: - } - }, - visualboard: { - general: { - icon: , - title: i18n.t("upsell.messages.visualboard.general.title"), - subTitle: i18n.t("upsell.messages.visualboard.general.subtitle"), - extra: - } - }, - scoreboard: { - general: { - icon: , - title: i18n.t("upsell.messages.scoreboard.general.title"), - subTitle: i18n.t("upsell.messages.scoreboard.general.subtitle"), - extra: - } - }, - techconsole: { - general: { - icon: , - title: i18n.t("upsell.messages.techconsole.general.title"), - subTitle: i18n.t("upsell.messages.techconsole.general.subtitle"), - extra: - } - }, - csi: { - general: { - icon: , - title: i18n.t("upsell.messages.csi.general.title"), - subTitle: i18n.t("upsell.messages.csi.general.subtitle"), - extra: - } - } -}); + }; +}; From d70fee61258b61eef0026915d9e5086cb6346415 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Wed, 8 Jan 2025 09:51:52 -0800 Subject: [PATCH 5/5] IO-3067 clean up unused imports. --- .../bills-list-table.component.jsx | 6 ++---- .../schedule-calendar-header.component.jsx | 4 ++-- .../jobs-detail/jobs-detail.page.component.jsx | 14 +++++++++----- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/client/src/components/bills-list-table/bills-list-table.component.jsx b/client/src/components/bills-list-table/bills-list-table.component.jsx index 503751268..89813d74f 100644 --- a/client/src/components/bills-list-table/bills-list-table.component.jsx +++ b/client/src/components/bills-list-table/bills-list-table.component.jsx @@ -1,6 +1,6 @@ import { EditFilled, SyncOutlined } from "@ant-design/icons"; import { Button, Card, Checkbox, Input, Space, Table } from "antd"; -import React, { useRef, useState } from "react"; +import React, { useState } from "react"; import { useTranslation } from "react-i18next"; import { FaTasks } from "react-icons/fa"; import { connect } from "react-redux"; @@ -17,8 +17,7 @@ import BillDetailEditReturnComponent from "../bill-detail-edit/bill-detail-edit- import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import LockerWrapperComponent from "../lock-wrapper/lock-wrapper.component"; import PrintWrapperComponent from "../print-wrapper/print-wrapper.component"; -import UpsellComponent from "../upsell/upsell.component"; -import { upsellEnum } from "../upsell/upsell.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; const mapStateToProps = createStructuredSelector({ jobRO: selectJobReadOnly, @@ -61,7 +60,6 @@ export function BillsListTableComponent({ // const search = queryString.parse(useLocation().search); // const selectedBill = search.billid; const [searchText, setSearchText] = useState(""); - const containerRef = useRef(null); const Templates = TemplateList("bill"); const bills = billsQuery.data ? billsQuery.data.bills : []; diff --git a/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx b/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx index 2bf99c1a9..b00ff0c36 100644 --- a/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx +++ b/client/src/components/schedule-calendar-wrapper/schedule-calendar-header.component.jsx @@ -13,12 +13,12 @@ import { selectScheduleLoad, selectScheduleLoadCalculating } from "../../redux/a import { selectBodyshop } from "../../redux/user/user.selectors"; import { DateTimeFormatter } from "../../utils/DateFormatter"; import { default as BlurWrapper, default as BlurWrapperComponent } from "../feature-wrapper/blur-wrapper.component"; +import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; import LoadingSkeleton from "../loading-skeleton/loading-skeleton.component"; import OwnerNameDisplay from "../owner-name-display/owner-name-display.component"; import ScheduleBlockDay from "../schedule-block-day/schedule-block-day.component"; +import UpsellComponent, { upsellEnum } from "../upsell/upsell.component"; import ScheduleCalendarHeaderGraph from "./schedule-calendar-header-graph.component"; -import UpsellComponent, { upsellEnum, UpsellMaskWrapper } from "../upsell/upsell.component"; -import { HasFeatureAccess } from "../feature-wrapper/feature-wrapper.component"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, diff --git a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx index 320c2903c..eded63067 100644 --- a/client/src/pages/jobs-detail/jobs-detail.page.component.jsx +++ b/client/src/pages/jobs-detail/jobs-detail.page.component.jsx @@ -20,7 +20,6 @@ import { FaHardHat, FaRegStickyNote, FaShieldAlt, FaTasks } from "react-icons/fa import { connect } from "react-redux"; import { useLocation, useNavigate } from "react-router-dom"; import { createStructuredSelector } from "reselect"; -import { HasFeatureAccess } from "../../components/feature-wrapper/feature-wrapper.component"; import FormFieldsChanged from "../../components/form-fields-changed-alert/form-fields-changed-alert.component"; import JobAuditTrail from "../../components/job-audit-trail/job-audit-trail.component"; import JobsLinesContainer from "../../components/job-detail-lines/job-lines.container"; @@ -42,6 +41,7 @@ import JobsDetailTotals from "../../components/jobs-detail-totals/jobs-detail-to import JobsDocumentsGalleryContainer from "../../components/jobs-documents-gallery/jobs-documents-gallery.container"; import JobsDocumentsLocalGallery from "../../components/jobs-documents-local-gallery/jobs-documents-local-gallery.container"; import JobNotesContainer from "../../components/jobs-notes/jobs-notes.container"; +import LockWrapperComponent from "../../components/lock-wrapper/lock-wrapper.component.jsx"; import NoteUpsertModalComponent from "../../components/note-upsert-modal/note-upsert-modal.container"; import ScheduleJobModalContainer from "../../components/schedule-job-modal/schedule-job-modal.container"; import TaskListContainer from "../../components/task-list/task-list.container.jsx"; @@ -54,9 +54,7 @@ import { selectBodyshop } from "../../redux/user/user.selectors"; import AuditTrailMapping from "../../utils/AuditTrailMappings"; import { DateTimeFormat } from "../../utils/DateFormatter"; import dayjs from "../../utils/day"; -import InstanceRenderManager from "../../utils/instanceRenderMgr"; import UndefinedToNull from "../../utils/undefinedtonull"; -import LockWrapperComponent from "../../components/lock-wrapper/lock-wrapper.component.jsx"; const mapStateToProps = createStructuredSelector({ bodyshop: selectBodyshop, @@ -403,7 +401,9 @@ export function JobsDetailPage({ icon: , id: "job-details-lifecycle", label: ( - {t("menus.jobsdetail.lifecycle")} + + {t("menus.jobsdetail.lifecycle")} + ), children: }, @@ -438,7 +438,11 @@ export function JobsDetailPage({ key: "audit", icon: , id: "job-details-audit", - label: {t("jobs.labels.audit")}, + label: ( + + {t("jobs.labels.audit")} + + ), children: }, {