From d69050f006976cc4419deb03980b4dc5ccd98a6b Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Mon, 6 Jan 2025 15:58:56 -0800 Subject: [PATCH 1/2] 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 2/2] 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: - } - } -}); + }; +};