Skip to content

Commit e989491

Browse files
authored
feat(Tabs): Add domRef prop for getting the ref to the tabs DOM node (#213)
1 parent 00a8401 commit e989491

File tree

4 files changed

+24
-0
lines changed

4 files changed

+24
-0
lines changed

README.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,12 @@ Provide a custom class name for disabled tabs.
102102
103103
> This option can also be set directly at the `<Tab />` component.
104104
105+
#### domRef: `(node: ?HTMLElement) => void`
106+
107+
> default: `null`
108+
109+
Register a callback that will receive the underlying DOM node for every mount. It will also receive null on unmount.
110+
105111
#### forceRenderTabPanel: `boolean`
106112
107113
> default: `false`

src/components/Tabs.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export default class Tabs extends Component {
1818
defaultFocus: PropTypes.bool,
1919
defaultIndex: PropTypes.number,
2020
disabledTabClassName: PropTypes.string,
21+
domRef: PropTypes.func,
2122
forceRenderTabPanel: PropTypes.bool,
2223
onSelect: onSelectPropType,
2324
selectedIndex: selectedIndexPropType,

src/components/UncontrolledTabs.js

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ export default class UncontrolledTabs extends Component {
4141
children: childrenPropType,
4242
className: PropTypes.oneOfType([PropTypes.string, PropTypes.array, PropTypes.object]),
4343
disabledTabClassName: PropTypes.string,
44+
domRef: PropTypes.func,
4445
focus: PropTypes.bool,
4546
forceRenderTabPanel: PropTypes.bool,
4647
onSelect: PropTypes.func.isRequired,
@@ -283,6 +284,7 @@ export default class UncontrolledTabs extends Component {
283284
children, // unused
284285
className,
285286
disabledTabClassName, // unused
287+
domRef,
286288
focus, // unused
287289
forceRenderTabPanel, // unused
288290
onSelect, // unused
@@ -300,6 +302,7 @@ export default class UncontrolledTabs extends Component {
300302
onKeyDown={this.handleKeyDown}
301303
ref={node => {
302304
this.node = node;
305+
if (domRef) domRef(node);
303306
}}
304307
data-tabs
305308
>

src/components/__tests__/Tabs-test.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,20 @@ describe('<Tabs />', () => {
9090
test('should accept className', () => {
9191
expectToMatchSnapshot(createTabs({ className: 'foobar' }));
9292
});
93+
94+
test('should accept domRef', () => {
95+
let domNode;
96+
mount(
97+
createTabs({
98+
domRef: node => {
99+
domNode = node;
100+
},
101+
}),
102+
);
103+
104+
expect(domNode).not.toBeUndefined();
105+
expect(domNode.className).toBe('react-tabs');
106+
});
93107
});
94108

95109
describe('child props', () => {

0 commit comments

Comments
 (0)