Skip to content

Commit 378f3ee

Browse files
authored
Change RAC style merge order (#5506)
* Change style merge order for RAC
1 parent a2146aa commit 378f3ee

File tree

7 files changed

+75
-5
lines changed

7 files changed

+75
-5
lines changed

packages/react-aria-components/src/OverlayArrow.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,8 @@ function OverlayArrow(props: OverlayArrowProps, ref: ForwardedRef<HTMLDivElement
5454
{...props}
5555
{...renderProps}
5656
style={{
57-
...renderProps.style,
58-
...style
57+
...style,
58+
...renderProps.style
5959
}}
6060
ref={ref}
6161
data-placement={placement} />

packages/react-aria-components/src/Popover.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,7 @@ function PopoverInner({state, isExiting, UNSTABLE_portalContainer, ...props}: Po
142142
}
143143
});
144144

145-
let style = {...renderProps.style, ...popoverProps.style};
145+
let style = {...popoverProps.style, ...renderProps.style};
146146

147147
return (
148148
<Overlay isExiting={isExiting} portalContainer={UNSTABLE_portalContainer}>

packages/react-aria-components/src/Tooltip.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ function TooltipInner(props: TooltipProps & {isExiting: boolean, tooltipRef: Ref
147147
{...tooltipProps}
148148
ref={props.tooltipRef}
149149
{...renderProps}
150-
style={{...renderProps.style, ...overlayProps.style}}
150+
style={{...overlayProps.style, ...renderProps.style}}
151151
data-placement={placement}
152152
data-entering={isEntering || undefined}
153153
data-exiting={props.isExiting || undefined}>

packages/react-aria-components/stories/index.stories.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -586,7 +586,8 @@ export const PopoverExample = () => (
586586
background: 'Canvas',
587587
color: 'CanvasText',
588588
border: '1px solid gray',
589-
padding: 30
589+
padding: 30,
590+
zIndex: 5
590591
}}>
591592
<Dialog>
592593
{({close}) => (

packages/react-aria-components/test/Popover.test.js

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,30 @@ describe('Popover', () => {
152152
expect(popover).not.toBeInTheDocument();
153153
});
154154

155+
it('supports overriding styles', async () => {
156+
let {getByRole, getByTestId} = render(
157+
<DialogTrigger>
158+
<Button />
159+
<Popover style={{zIndex: 5}}>
160+
<OverlayArrow style={{top: 5}} data-testid="arrow">
161+
<svg width={12} height={12}>
162+
<path d="M0 0,L6 6,L12 0" />
163+
</svg>
164+
</OverlayArrow>
165+
<Dialog>Popover</Dialog>
166+
</Popover>
167+
</DialogTrigger>
168+
);
169+
170+
let button = getByRole('button');
171+
await user.click(button);
172+
173+
let popover = getByRole('dialog').closest('.react-aria-Popover');
174+
expect(popover).toHaveAttribute('style', expect.stringContaining('z-index: 5'));
175+
let arrow = getByTestId('arrow');
176+
expect(arrow).toHaveAttribute('style', expect.stringContaining('top: 5px'));
177+
});
178+
155179
describe('portalContainer', () => {
156180
function InfoPopover(props) {
157181
return (

packages/react-aria-components/test/Table.test.js

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -878,6 +878,33 @@ describe('Table', () => {
878878
}
879879
});
880880

881+
it('should support overriding table style', () => {
882+
let {getByRole} = render(
883+
<Table aria-label="Table" style={{width: 200}}>
884+
<MyTableHeader>
885+
<Column isRowHeader>Foo</Column>
886+
<Column>Bar</Column>
887+
<Column>Baz</Column>
888+
</MyTableHeader>
889+
<TableBody>
890+
<MyRow href="https://google.com">
891+
<Cell>Foo 1</Cell>
892+
<Cell>Bar 1</Cell>
893+
<Cell>Baz 1</Cell>
894+
</MyRow>
895+
<MyRow href="https://adobe.com">
896+
<Cell>Foo 2</Cell>
897+
<Cell>Bar 2</Cell>
898+
<Cell>Baz 2</Cell>
899+
</MyRow>
900+
</TableBody>
901+
</Table>
902+
);
903+
904+
let table = getByRole('grid');
905+
expect(table).toHaveAttribute('style', expect.stringContaining('width: 200px'));
906+
});
907+
881908
describe('links', function () {
882909
describe.each(['mouse', 'keyboard'])('%s', (type) => {
883910
let trigger = async (item, key = 'Enter') => {

packages/react-aria-components/test/Tooltip.test.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,24 @@ describe('Tooltip', () => {
115115
rerender(<TestTooltip />);
116116
expect(tooltip).not.toBeInTheDocument();
117117
});
118+
119+
it('supports overriding styles', async () => {
120+
let {getByRole} = render(<TestTooltip style={{zIndex: 5}} />);
121+
122+
let button = getByRole('button');
123+
124+
fireEvent.mouseMove(document.body);
125+
await user.hover(button);
126+
act(() => jest.runAllTimers());
127+
128+
let tooltip = getByRole('tooltip');
129+
expect(tooltip).toHaveAttribute('style', expect.stringContaining('z-index: 5'));
130+
131+
await user.unhover(button);
132+
act(() => jest.runAllTimers());
133+
});
134+
135+
118136
describe('portalContainer', () => {
119137
function InfoTooltip(props) {
120138
return (

0 commit comments

Comments
 (0)