Merged in hotfix/IO-3020-smart-scheduling-upsell (pull request #2027)
IO-3020 Resolve smart scheduling upsell displays when they shouldn't.
This commit is contained in:
@@ -8,6 +8,7 @@ import { createStructuredSelector } from "reselect";
|
|||||||
import { selectBodyshop } from "../../redux/user/user.selectors";
|
import { selectBodyshop } from "../../redux/user/user.selectors";
|
||||||
import BlurWrapperComponent from "../feature-wrapper/blur-wrapper.component";
|
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({
|
const mapStateToProps = createStructuredSelector({
|
||||||
bodyshop: selectBodyshop
|
bodyshop: selectBodyshop
|
||||||
@@ -35,6 +36,28 @@ export function ScheduleCalendarHeaderGraph({ bodyshop, loadData }) {
|
|||||||
[]
|
[]
|
||||||
);
|
);
|
||||||
}, [loadData, ssbuckets]);
|
}, [loadData, ssbuckets]);
|
||||||
|
const hasSmartSchedulingAccess = HasFeatureAccess({ featureName: "smartscheduling", bodyshop });
|
||||||
|
|
||||||
|
const chartContents = (
|
||||||
|
<>
|
||||||
|
<RadarChart
|
||||||
|
// cx={300}
|
||||||
|
// cy={250}
|
||||||
|
// outerRadius={150}
|
||||||
|
width={800}
|
||||||
|
height={600}
|
||||||
|
data={data}
|
||||||
|
>
|
||||||
|
<PolarGrid />
|
||||||
|
<PolarAngleAxis dataKey="bucket" />
|
||||||
|
<PolarRadiusAxis angle={90} />
|
||||||
|
<Radar name="Ideal Load" dataKey="target" stroke="darkgreen" fill="white" fillOpacity={0} />
|
||||||
|
<Radar name="EOD Load" dataKey="current" stroke="dodgerblue" fill="dodgerblue" fillOpacity={0.6} />
|
||||||
|
<Tooltip />
|
||||||
|
<Legend />
|
||||||
|
</RadarChart>
|
||||||
|
</>
|
||||||
|
);
|
||||||
|
|
||||||
const popContent = (
|
const popContent = (
|
||||||
<div>
|
<div>
|
||||||
@@ -48,26 +71,13 @@ export function ScheduleCalendarHeaderGraph({ bodyshop, loadData }) {
|
|||||||
<strong>{loadData?.expectedJobCount}</strong>
|
<strong>{loadData?.expectedJobCount}</strong>
|
||||||
</BlurWrapperComponent>
|
</BlurWrapperComponent>
|
||||||
</Space>
|
</Space>
|
||||||
<UpsellMaskWrapper upsell={upsellEnum().smartscheduling.general}>
|
<BlurWrapperComponent featureName="smartscheduling">
|
||||||
<BlurWrapperComponent featureName="smartscheduling">
|
{hasSmartSchedulingAccess ? (
|
||||||
<RadarChart
|
chartContents
|
||||||
// cx={300}
|
) : (
|
||||||
// cy={250}
|
<UpsellMaskWrapper upsell={upsellEnum().smartscheduling.general}>{chartContents}</UpsellMaskWrapper>
|
||||||
// outerRadius={150}
|
)}
|
||||||
width={800}
|
</BlurWrapperComponent>
|
||||||
height={600}
|
|
||||||
data={data}
|
|
||||||
>
|
|
||||||
<PolarGrid />
|
|
||||||
<PolarAngleAxis dataKey="bucket" />
|
|
||||||
<PolarRadiusAxis angle={90} />
|
|
||||||
<Radar name="Ideal Load" dataKey="target" stroke="darkgreen" fill="white" fillOpacity={0} />
|
|
||||||
<Radar name="EOD Load" dataKey="current" stroke="dodgerblue" fill="dodgerblue" fillOpacity={0.6} />
|
|
||||||
<Tooltip />
|
|
||||||
<Legend />
|
|
||||||
</RadarChart>
|
|
||||||
</BlurWrapperComponent>
|
|
||||||
</UpsellMaskWrapper>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import OwnerNameDisplay from "../owner-name-display/owner-name-display.component
|
|||||||
import ScheduleBlockDay from "../schedule-block-day/schedule-block-day.component";
|
import ScheduleBlockDay from "../schedule-block-day/schedule-block-day.component";
|
||||||
import ScheduleCalendarHeaderGraph from "./schedule-calendar-header-graph.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({
|
const mapStateToProps = createStructuredSelector({
|
||||||
bodyshop: selectBodyshop,
|
bodyshop: selectBodyshop,
|
||||||
@@ -52,6 +53,7 @@ export function ScheduleCalendarHeaderComponent({
|
|||||||
|
|
||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const loadData = load[date.toISOString().substr(0, 10)];
|
const loadData = load[date.toISOString().substr(0, 10)];
|
||||||
|
const hasSmartSchedulingAccess = HasFeatureAccess({ featureName: "smartscheduling", bodyshop });
|
||||||
|
|
||||||
const jobsOutPopup = () => (
|
const jobsOutPopup = () => (
|
||||||
<div onClick={(e) => e.stopPropagation()}>
|
<div onClick={(e) => e.stopPropagation()}>
|
||||||
@@ -89,9 +91,11 @@ export function ScheduleCalendarHeaderComponent({
|
|||||||
)}
|
)}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<Card style={{ maxWidth: "30rem" }}>
|
{!hasSmartSchedulingAccess && (
|
||||||
<UpsellComponent size="small" upsell={upsellEnum().smartscheduling.hrsdelta} />
|
<Card style={{ maxWidth: "30rem" }}>
|
||||||
</Card>
|
<UpsellComponent size="small" upsell={upsellEnum().smartscheduling.hrsdelta} />
|
||||||
|
</Card>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
||||||
@@ -129,9 +133,11 @@ export function ScheduleCalendarHeaderComponent({
|
|||||||
</BlurWrapperComponent>
|
</BlurWrapperComponent>
|
||||||
</tr>
|
</tr>
|
||||||
)}
|
)}
|
||||||
<Card style={{ maxWidth: "30rem" }}>
|
{!hasSmartSchedulingAccess && (
|
||||||
<UpsellComponent size="small" upsell={upsellEnum().smartscheduling.hrsdelta} />
|
<Card style={{ maxWidth: "30rem" }}>
|
||||||
</Card>
|
<UpsellComponent size="small" upsell={upsellEnum().smartscheduling.hrsdelta} />
|
||||||
|
</Card>
|
||||||
|
)}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import ScheduleDayViewContainer from "../schedule-day-view/schedule-day-view.con
|
|||||||
import ScheduleExistingAppointmentsList from "../schedule-existing-appointments-list/schedule-existing-appointments-list.component";
|
import ScheduleExistingAppointmentsList from "../schedule-existing-appointments-list/schedule-existing-appointments-list.component";
|
||||||
import "./schedule-job-modal.scss";
|
import "./schedule-job-modal.scss";
|
||||||
import LockWrapperComponent from "../lock-wrapper/lock-wrapper.component";
|
import LockWrapperComponent from "../lock-wrapper/lock-wrapper.component";
|
||||||
import { BlurWrapper } from "../feature-wrapper/blur-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({
|
const mapStateToProps = createStructuredSelector({
|
||||||
@@ -138,7 +138,7 @@ export function ScheduleJobModalComponent({
|
|||||||
</BlurWrapper>
|
</BlurWrapper>
|
||||||
</Button>
|
</Button>
|
||||||
))}
|
))}
|
||||||
{smartOptions.length > 1 && hasSmartSchedulingAccess && (
|
{!smartOptions.length > 1 && hasSmartSchedulingAccess && (
|
||||||
<UpsellComponent upsell={upsellEnum().smartscheduling.general} />
|
<UpsellComponent upsell={upsellEnum().smartscheduling.general} />
|
||||||
)}
|
)}
|
||||||
</Space>
|
</Space>
|
||||||
|
|||||||
@@ -19,7 +19,6 @@ export default function UpsellComponent({ featureName, subFeatureName, upsell, d
|
|||||||
const { t } = useTranslation();
|
const { t } = useTranslation();
|
||||||
const resultProps = upsell || upsellEnum[featureName][subFeatureName];
|
const resultProps = upsell || upsellEnum[featureName][subFeatureName];
|
||||||
|
|
||||||
console.trace("***LOG ~ file: upsell.component.jsx:22 ~ UpsellComponent ~ resultProps:", resultProps);
|
|
||||||
const componentRef = useRef(null);
|
const componentRef = useRef(null);
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
Reference in New Issue
Block a user