Skip to content

Commit

Permalink
[Lens] fixed equality check for visualization (#172685)
Browse files Browse the repository at this point in the history
## Summary

Fixed an equality check bug for attributesChanged calculation. It wasn't
taking into account that visualization can also have references (to
dataview for annotations) and a custom isEqual function.
  • Loading branch information
mbondyra authored Dec 7, 2023
1 parent ff49526 commit 9e41850
Showing 1 changed file with 30 additions and 5 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,9 @@ export function LensEditConfigurationFlyout({
const datasourceState = attributes.state.datasourceStates[datasourceId];
const activeVisualization = visualizationMap[attributes.visualizationType];
const activeDatasource = datasourceMap[datasourceId];
const { datasourceStates, visualization, isLoading } = useLensSelector((state) => state.lens);
const { datasourceStates, visualization, isLoading, annotationGroups } = useLensSelector(
(state) => state.lens
);
const framePublicAPI = useLensSelector((state) => selectFramePublicAPI(state, datasourceMap));
const suggestsLimitedColumns = activeDatasource?.suggestsLimitedColumns?.(datasourceState);

Expand Down Expand Up @@ -113,10 +115,33 @@ export function LensEditConfigurationFlyout({
: false;

const visualizationState = visualization.state;
return (
!isEqual(visualizationState, previousAttrs.state.visualization) || !datasourceStatesAreSame
);
}, [attributes.references, datasourceId, datasourceMap, datasourceStates, visualization.state]);
const customIsEqual = visualizationMap[previousAttrs.visualizationType]?.isEqual;
const visualizationStateIsEqual = customIsEqual
? (() => {
try {
return customIsEqual(
previousAttrs.state.visualization,
previousAttrs.references,
visualizationState,
attributes.references,
annotationGroups
);
} catch (err) {
return false;
}
})()
: isEqual(visualizationState, previousAttrs.state.visualization);

return !visualizationStateIsEqual || !datasourceStatesAreSame;
}, [
attributes.references,
datasourceId,
datasourceMap,
datasourceStates,
visualizationMap,
annotationGroups,
visualization.state,
]);

const onCancel = useCallback(() => {
const previousAttrs = previousAttributes.current;
Expand Down

0 comments on commit 9e41850

Please sign in to comment.