Skip to content

Commit

Permalink
Merge pull request #4977 from scavnickyj/jsc-f1-323-drilldown-fix
Browse files Browse the repository at this point in the history
fix: make drill dialog respect drilldown disable option and FF

Reviewed-by: https://github.com/kandl
  • Loading branch information
gdgate authored May 13, 2024
2 parents 358cd05 + 24b59ea commit 9c49026
Showing 1 changed file with 31 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
// (C) 2020-2022 GoodData Corporation
// (C) 2020-2024 GoodData Corporation
import { useCallback, useState } from "react";
import isEqual from "lodash/isEqual.js";
import {
useDashboardSelector,
selectImplicitDrillsByAvailableDrillTargets,
selectDrillableItemsByAvailableDrillTargets,
selectEnableKPIDashboardDrillFromAttribute,
} from "../../../../../model/index.js";
import { OnWidgetDrill } from "../../../../drill/types.js";
import {
Expand Down Expand Up @@ -35,13 +36,22 @@ export const useDrillDialogInsightDrills = ({
}: UseDashboardInsightDrillsProps) => {
// Drilling
const [drillTargets, setDrillTargets] = useState<IAvailableDrillTargets>();
const isDrillFromAttributeEnabled = useDashboardSelector(selectEnableKPIDashboardDrillFromAttribute);
const disableDrillDownOnInsight = insight.insight.properties.controls?.disableDrillDown;

const onPushData = useCallback(
(data: IPushData): void => {
if (data?.availableDrillTargets && !isEqual(drillTargets, data.availableDrillTargets)) {
setDrillTargets(data.availableDrillTargets);
const targets = sanitizeAvailableDrillTargets(
data?.availableDrillTargets,
isDrillFromAttributeEnabled,
!disableDrillDownOnInsight,
);

if (targets && !isEqual(drillTargets, data.availableDrillTargets)) {
setDrillTargets(targets);
}
},
[drillTargets],
[disableDrillDownOnInsight, drillTargets, isDrillFromAttributeEnabled],
);

const implicitDrillDefinitions = useDashboardSelector(
Expand Down Expand Up @@ -81,3 +91,20 @@ export const useDrillDialogInsightDrills = ({
onDrill,
};
};

const sanitizeAvailableDrillTargets = (
availableDrillTargets: IAvailableDrillTargets | undefined,
isDrillFromAttributeEnabled: boolean,
isDrillDownOnInsightEnabled: boolean,
) => {
// if no drill targets went in (likely the pushData was fired in a non-drill-related case)
// pass the undefined through, this avoids useless setting of the drill targets down the line
if (!availableDrillTargets) {
return availableDrillTargets;
}

// Both drill from attribute FF and drilldown enablement on insight level must be enabled
return isDrillFromAttributeEnabled && isDrillDownOnInsightEnabled
? availableDrillTargets
: { ...availableDrillTargets, attributes: undefined };
};

0 comments on commit 9c49026

Please sign in to comment.