Skip to content

Commit 837e492

Browse files
authored
Merge pull request #573 from adobe/fixHideShowRightCLick
Fix hide show right click
2 parents e578b84 + 8fc309a commit 837e492

File tree

5 files changed

+50
-16
lines changed

5 files changed

+50
-16
lines changed

packages/react-spectrum-charts/src/context/RscChartContext.tsx

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ interface ChartContextValue {
3030
setIsPopoverOpen: (isOpen: boolean) => void;
3131
popoverAnchorRef: MutableRefObject<HTMLDivElement | null>;
3232

33-
// Interaction handlers
34-
onLegendClick?: (seriesName: string) => void;
35-
onLegendMouseOver?: (seriesName: string) => void;
36-
onLegendMouseOut?: (seriesName: string) => void;
37-
3833
// Spec state
3934
controlledHoveredIdSignal: MutableRefObject<Signal | undefined>;
4035
controlledHoveredGroupSignal: MutableRefObject<Signal | undefined>;

packages/react-spectrum-charts/src/stories/components/Legend/LegendHideShow.story.tsx

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
* OF ANY KIND, either express or implied. See the License for the specific language
1010
* governing permissions and limitations under the License.
1111
*/
12-
import { Legend } from '../../../components';
12+
import { ChartPopover, Legend } from '../../../components';
1313
import { LegendBarHiddenSeriesStory, LegendBarStory, defaultProps } from './LegendStoryUtils';
1414

1515
export default {
@@ -18,7 +18,17 @@ export default {
1818
};
1919

2020
const DefaultHiddenSeries = LegendBarStory.bind({});
21-
DefaultHiddenSeries.args = { defaultHiddenSeries: ['Other'], isToggleable: true, highlight: true, ...defaultProps };
21+
DefaultHiddenSeries.args = {
22+
defaultHiddenSeries: ['Other'],
23+
isToggleable: true,
24+
highlight: true,
25+
children: (
26+
<ChartPopover rightClick width="auto">
27+
{(datum) => <div>{datum.value}</div>}
28+
</ChartPopover>
29+
),
30+
...defaultProps,
31+
};
2232
DefaultHiddenSeries.storyName = 'Default Hidden Series (uncontrolled)';
2333

2434
const HiddenSeries = LegendBarHiddenSeriesStory.bind({});

packages/react-spectrum-charts/src/stories/components/Legend/LegendHideShow.test.tsx

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import {
2222
getAllLegendSymbols,
2323
hoverNthElement,
2424
render,
25+
rightClickNthElement,
2526
screen,
2627
} from '../../../test-utils';
2728
import '../../../test-utils/__mocks__/matchMedia.mock';
@@ -120,3 +121,22 @@ test('Hidden series should not highlight any marks', async () => {
120121
bars = await findAllMarksByGroupName(chart, 'bar0');
121122
expect(bars[0]).toHaveAttribute('opacity', '1');
122123
});
124+
125+
test('Right clicking on a legend entry should not hide the series or trigger onClick', async () => {
126+
const onLegendClick = jest.fn();
127+
render(<DefaultHiddenSeries {...DefaultHiddenSeries.args} onClick={onLegendClick} />);
128+
const chart = await findChart();
129+
130+
let bars = await findAllMarksByGroupName(chart, 'bar0');
131+
// there should only be 6 bars (2 series 3 categories)
132+
expect(bars.length).toEqual(6);
133+
134+
const entries = getAllLegendEntries(chart);
135+
await rightClickNthElement(entries, 0);
136+
137+
bars = await findAllMarksByGroupName(chart, 'bar0');
138+
// there should still be 6 bars (2 series 3 categories)
139+
expect(bars.length).toEqual(6);
140+
141+
expect(onLegendClick).not.toHaveBeenCalled();
142+
});

packages/react-spectrum-charts/src/utils/markClickUtils.test.ts

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,13 @@ describe('getItemBounds()', () => {
4141

4242
describe('handleLegendItemClick()', () => {
4343
let setHiddenSeries;
44+
const item = {
45+
context: null,
46+
height: null,
47+
width: null,
48+
items: [{ role: 'legend-label', bounds: null, clip: null, items: [{ datum: { value: 'test' } }] }],
49+
} as unknown as Item;
50+
4451
beforeEach(() => {
4552
setHiddenSeries = jest.fn();
4653
});
@@ -49,12 +56,6 @@ describe('handleLegendItemClick()', () => {
4956
});
5057

5158
test('should call setHiddenSeries if legendItemValue is found', () => {
52-
const item = {
53-
context: null,
54-
height: null,
55-
width: null,
56-
items: [{ role: 'legend-label', bounds: null, clip: null, items: [{ datum: { value: 'test' } }] }],
57-
} as unknown as Item;
5859
handleLegendItemClick(item, { ...defaultMarkClickArgs, setHiddenSeries, legendIsToggleable: true });
5960
expect(setHiddenSeries).toHaveBeenCalled();
6061
});
@@ -63,6 +64,11 @@ describe('handleLegendItemClick()', () => {
6364
handleLegendItemClick(item, { ...defaultMarkClickArgs, setHiddenSeries, legendIsToggleable: true });
6465
expect(setHiddenSeries).not.toHaveBeenCalled();
6566
});
67+
test('should call onLegendClick if trigger is click', () => {
68+
const onLegendClick = jest.fn();
69+
handleLegendItemClick(item, { ...defaultMarkClickArgs, onLegendClick, trigger: 'click' });
70+
expect(onLegendClick).toHaveBeenCalled();
71+
});
6672
});
6773

6874
describe('getLegendItemValue', () => {

packages/react-spectrum-charts/src/utils/markClickUtils.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -204,9 +204,12 @@ export const handleLegendItemClick = (
204204
triggerPopover(chartId, itemName, trigger);
205205
}
206206

207-
onLegendClick?.(legendItemValue);
208-
if (!legendIsToggleable) return;
209-
setHiddenSeries(toggleStringArrayValue(hiddenSeries, legendItemValue));
207+
if (trigger === 'click') {
208+
onLegendClick?.(legendItemValue);
209+
if (legendIsToggleable) {
210+
setHiddenSeries(toggleStringArrayValue(hiddenSeries, legendItemValue));
211+
}
212+
}
210213
};
211214

212215
/**

0 commit comments

Comments
 (0)