LegendIcon: only render color picker when the props change (#33141)

This commit is contained in:
Ryan McKinley 2021-04-20 11:28:47 -07:00 committed by GitHub
parent 18bbbaf53e
commit af46bbf654
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -8,25 +8,29 @@ interface Props {
onColorChange: (color: string) => void;
}
/**
* @internal
*/
export const VizLegendSeriesIcon: React.FunctionComponent<Props> = ({ disabled, color, onColorChange }) => {
return disabled ? (
<SeriesIcon color={color} />
) : (
<SeriesColorPicker color={color} onChange={onColorChange} enableNamedColors>
{({ ref, showColorPicker, hideColorPicker }) => (
<SeriesIcon
color={color}
className="pointer"
ref={ref}
onClick={showColorPicker}
onMouseLeave={hideColorPicker}
/>
)}
</SeriesColorPicker>
);
};
export const VizLegendSeriesIcon = React.memo<Props>(
({ disabled, color, onColorChange }) => {
return disabled ? (
<SeriesIcon color={color} />
) : (
<SeriesColorPicker color={color} onChange={onColorChange} enableNamedColors>
{({ ref, showColorPicker, hideColorPicker }) => (
<SeriesIcon
color={color}
className="pointer"
ref={ref}
onClick={showColorPicker}
onMouseLeave={hideColorPicker}
/>
)}
</SeriesColorPicker>
);
},
// areEqual -- return true if they are the same.
// onColorChange updates frequently, so ignore that
(prevProps, nextProps) => {
return prevProps.color === nextProps.color && prevProps.disabled === nextProps.disabled;
}
);
VizLegendSeriesIcon.displayName = 'VizLegendSeriesIcon';