Skip to content

Commit 06fe9ec

Browse files
committed
feat: tabs activeKey support number
1 parent 4055a23 commit 06fe9ec

File tree

7 files changed

+200
-7
lines changed

7 files changed

+200
-7
lines changed

components/tabs/__tests__/__snapshots__/demo.test.js.snap

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -309,6 +309,118 @@ exports[`renders ./components/tabs/demo/icon.md correctly 1`] = `
309309
</div>
310310
`;
311311

312+
exports[`renders ./components/tabs/demo/nest.md correctly 1`] = `
313+
<div>
314+
<div class="ant-select ant-select-enabled" style="width: 200px;">
315+
<div role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-controls="test-uuid" tabindex="0" class="ant-select-selection ant-select-selection--single">
316+
<div class="ant-select-selection__rendered"></div><span unselectable="on" class="ant-select-arrow"><i class="ant-select-arrow-icon anticon anticon-down"><svg viewBox="64 64 896 896" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true" class=""><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span>
317+
</div>
318+
</div>
319+
<div class="ant-select ant-select-enabled" style="width: 200px;">
320+
<div role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-controls="test-uuid" tabindex="0" class="ant-select-selection ant-select-selection--single">
321+
<div class="ant-select-selection__rendered"></div><span unselectable="on" class="ant-select-arrow"><i class="ant-select-arrow-icon anticon anticon-down"><svg viewBox="64 64 896 896" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true" class=""><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span>
322+
</div>
323+
</div>
324+
<div class="ant-select ant-select-enabled" style="width: 200px;">
325+
<div role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-controls="test-uuid" tabindex="0" class="ant-select-selection ant-select-selection--single">
326+
<div class="ant-select-selection__rendered"></div><span unselectable="on" class="ant-select-arrow"><i class="ant-select-arrow-icon anticon anticon-down"><svg viewBox="64 64 896 896" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true" class=""><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span>
327+
</div>
328+
</div>
329+
<div class="ant-select ant-select-enabled" style="width: 200px;">
330+
<div role="combobox" aria-autocomplete="list" aria-haspopup="true" aria-controls="test-uuid" tabindex="0" class="ant-select-selection ant-select-selection--single">
331+
<div class="ant-select-selection__rendered"></div><span unselectable="on" class="ant-select-arrow"><i class="ant-select-arrow-icon anticon anticon-down"><svg viewBox="64 64 896 896" data-icon="down" width="1em" height="1em" fill="currentColor" aria-hidden="true" class=""><path d="M884 256h-75c-5.1 0-9.9 2.5-12.9 6.6L512 654.2 227.9 262.6c-3-4.1-7.8-6.6-12.9-6.6h-75c-6.5 0-10.3 7.4-6.5 12.7l352.6 486.1c12.8 17.6 39 17.6 51.7 0l352.6-486.1c3.9-5.3.1-12.7-6.4-12.7z"></path></svg></i></span>
332+
</div>
333+
</div>
334+
<div class="ant-tabs ant-tabs-top ant-tabs-line no-flex">
335+
<div role="tablist" tabindex="0" class="ant-tabs-bar ant-tabs-top-bar">
336+
<div class="ant-tabs-nav-container"><span unselectable="unselectable" class="ant-tabs-tab-prev ant-tabs-tab-btn-disabled"><span class="ant-tabs-tab-prev-icon"><i class="ant-tabs-tab-prev-icon-target anticon anticon-left"><svg viewBox="64 64 896 896" data-icon="left" width="1em" height="1em" fill="currentColor" aria-hidden="true" class=""><path d="M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 0 0 0 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z"></path></svg></i></span></span><span unselectable="unselectable" class="ant-tabs-tab-next ant-tabs-tab-btn-disabled"><span class="ant-tabs-tab-next-icon"><i class="ant-tabs-tab-next-icon-target anticon anticon-right"><svg viewBox="64 64 896 896" data-icon="right" width="1em" height="1em" fill="currentColor" aria-hidden="true" class=""><path d="M765.7 486.8L314.9 134.7A7.97 7.97 0 0 0 302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 0 0 0-50.4z"></path></svg></i></span></span>
337+
<div class="ant-tabs-nav-wrap">
338+
<div class="ant-tabs-nav-scroll">
339+
<div class="ant-tabs-nav ant-tabs-nav-animated">
340+
<div>
341+
<div role="tab" aria-disabled="false" aria-selected="true" class="ant-tabs-tab-active ant-tabs-tab">Tab 1</div>
342+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 2</div>
343+
</div>
344+
<div class="ant-tabs-ink-bar ant-tabs-ink-bar-animated" style="display: block; transform: translate3d(0px,0,0); -webkit-transform: translate3d(0px,0,0); width: 0px;"></div>
345+
</div>
346+
</div>
347+
</div>
348+
</div>
349+
</div>
350+
<div tabindex="0" role="presentation" style="width: 0px; height: 0px; overflow: hidden;"></div>
351+
<div class="ant-tabs-content ant-tabs-content-animated ant-tabs-top-content" style="margin-left: 0%;">
352+
<div role="tabpanel" aria-hidden="false" class="ant-tabs-tabpane ant-tabs-tabpane-active">
353+
<div tabindex="0" role="presentation" style="width: 0px; height: 0px; overflow: hidden;"></div>
354+
<div class="ant-tabs ant-tabs-top ant-tabs-line no-flex" style="height: 300px;">
355+
<div role="tablist" tabindex="0" class="ant-tabs-bar ant-tabs-top-bar">
356+
<div class="ant-tabs-nav-container"><span unselectable="unselectable" class="ant-tabs-tab-prev ant-tabs-tab-btn-disabled"><span class="ant-tabs-tab-prev-icon"><i class="ant-tabs-tab-prev-icon-target anticon anticon-left"><svg viewBox="64 64 896 896" data-icon="left" width="1em" height="1em" fill="currentColor" aria-hidden="true" class=""><path d="M724 218.3V141c0-6.7-7.7-10.4-12.9-6.3L260.3 486.8a31.86 31.86 0 0 0 0 50.3l450.8 352.1c5.3 4.1 12.9.4 12.9-6.3v-77.3c0-4.9-2.3-9.6-6.1-12.6l-360-281 360-281.1c3.8-3 6.1-7.7 6.1-12.6z"></path></svg></i></span></span><span unselectable="unselectable" class="ant-tabs-tab-next ant-tabs-tab-btn-disabled"><span class="ant-tabs-tab-next-icon"><i class="ant-tabs-tab-next-icon-target anticon anticon-right"><svg viewBox="64 64 896 896" data-icon="right" width="1em" height="1em" fill="currentColor" aria-hidden="true" class=""><path d="M765.7 486.8L314.9 134.7A7.97 7.97 0 0 0 302 141v77.3c0 4.9 2.3 9.6 6.1 12.6l360 281.1-360 281.1c-3.9 3-6.1 7.7-6.1 12.6V883c0 6.7 7.7 10.4 12.9 6.3l450.8-352.1a31.96 31.96 0 0 0 0-50.4z"></path></svg></i></span></span>
357+
<div class="ant-tabs-nav-wrap">
358+
<div class="ant-tabs-nav-scroll">
359+
<div class="ant-tabs-nav ant-tabs-nav-animated">
360+
<div>
361+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 0</div>
362+
<div role="tab" aria-disabled="false" aria-selected="true" class="ant-tabs-tab-active ant-tabs-tab">Tab 1</div>
363+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 2</div>
364+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 3</div>
365+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 4</div>
366+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 5</div>
367+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 6</div>
368+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 7</div>
369+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 8</div>
370+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 9</div>
371+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 10</div>
372+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 11</div>
373+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 12</div>
374+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 13</div>
375+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 14</div>
376+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 15</div>
377+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 16</div>
378+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 17</div>
379+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 18</div>
380+
<div role="tab" aria-disabled="false" aria-selected="false" class=" ant-tabs-tab">Tab 19</div>
381+
</div>
382+
<div class="ant-tabs-ink-bar ant-tabs-ink-bar-animated" style="display: block; transform: translate3d(0px,0,0); -webkit-transform: translate3d(0px,0,0); width: 0px;"></div>
383+
</div>
384+
</div>
385+
</div>
386+
</div>
387+
</div>
388+
<div tabindex="0" role="presentation" style="width: 0px; height: 0px; overflow: hidden;"></div>
389+
<div class="ant-tabs-content ant-tabs-content-animated ant-tabs-top-content" style="margin-left: -100%;">
390+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
391+
<div role="tabpanel" aria-hidden="false" class="ant-tabs-tabpane ant-tabs-tabpane-active">
392+
<div tabindex="0" role="presentation" style="width: 0px; height: 0px; overflow: hidden;"></div>TTTT 1<div tabindex="0" role="presentation" style="width: 0px; height: 0px; overflow: hidden;"></div>
393+
</div>
394+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
395+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
396+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
397+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
398+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
399+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
400+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
401+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
402+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
403+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
404+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
405+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
406+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
407+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
408+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
409+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
410+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
411+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
412+
</div>
413+
<div tabindex="0" role="presentation" style="width: 0px; height: 0px; overflow: hidden;"></div>
414+
</div>
415+
<div tabindex="0" role="presentation" style="width: 0px; height: 0px; overflow: hidden;"></div>
416+
</div>
417+
<div role="tabpanel" aria-hidden="true" class="ant-tabs-tabpane ant-tabs-tabpane-inactive"></div>
418+
</div>
419+
<div tabindex="0" role="presentation" style="width: 0px; height: 0px; overflow: hidden;"></div>
420+
</div>
421+
</div>
422+
`;
423+
312424
exports[`renders ./components/tabs/demo/position.md correctly 1`] = `
313425
<div style="width: 500px;">
314426
<div class="ant-radio-group ant-radio-group-outline ant-radio-group-default" style="margin: 8px;"><label class="ant-radio-button-wrapper ant-radio-button-wrapper-checked"><span class="ant-radio-button ant-radio-button-checked"><input type="radio" class="ant-radio-button-input" value="top"><span class="ant-radio-button-inner"></span></span><span>top</span></label><label class="ant-radio-button-wrapper"><span class="ant-radio-button"><input type="radio" class="ant-radio-button-input" value="bottom"><span class="ant-radio-button-inner"></span></span><span>bottom</span></label><label class="ant-radio-button-wrapper"><span class="ant-radio-button"><input type="radio" class="ant-radio-button-input" value="left"><span class="ant-radio-button-inner"></span></span><span>left</span></label><label class="ant-radio-button-wrapper"><span class="ant-radio-button"><input type="radio" class="ant-radio-button-input" value="right"><span class="ant-radio-button-inner"></span></span><span>right</span></label></div>

components/tabs/demo/nest.md

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
### for debug
2+
<cn>
3+
#### 基本
4+
默认选中第一项。
5+
</cn>
6+
7+
<us>
8+
#### Nest
9+
Default activate first tab.
10+
</us>
11+
12+
```html
13+
<template>
14+
<div>
15+
<a-select style="width: 200px" v-model="parentPos">
16+
<a-select-option v-for="pos in positionList" :key="pos" :value="pos">Parent - {{pos}}</a-select-option>
17+
</a-select>
18+
19+
<a-select style="width: 200px" v-model="childPos">
20+
<a-select-option v-for="pos in positionList" :key="pos" :value="pos">Child - {{pos}}</a-select-option>
21+
</a-select>
22+
23+
<a-select style="width: 200px" v-model="parentType">
24+
<a-select-option value="line">Parent - line</a-select-option>
25+
<a-select-option value="card">Parent - card</a-select-option>
26+
</a-select>
27+
28+
<a-select style="width: 200px" v-model="childType">
29+
<a-select-option value="line">Child - line</a-select-option>
30+
<a-select-option value="card">Child - card</a-select-option>
31+
</a-select>
32+
33+
<a-tabs defaultActiveKey="1" :tabPosition="parentPos" :type="parentType">
34+
<a-tab-pane tab="Tab 1" key="1">
35+
<a-tabs :defaultActiveKey="1" :tabPosition="childPos" :type="childType" style="height: 300px">
36+
<a-tab-pane v-for="key in list" :tab="`Tab ${key}`" :key="key">TTTT {{key}}</a-tab-pane>
37+
</a-tabs>
38+
</a-tab-pane>
39+
<a-tab-pane tab="Tab 2" key="2">Content of Tab Pane 2</a-tab-pane>
40+
</a-tabs>
41+
</div>
42+
</template>
43+
<script>
44+
const positionList = ['left', 'right', 'top', 'bottom'];
45+
const list = new Array(20).fill().map((_, index) => index);
46+
export default {
47+
data () {
48+
return {
49+
positionList,
50+
list,
51+
parentPos: undefined,
52+
childPos: undefined,
53+
parentType: undefined,
54+
childType: undefined,
55+
}
56+
},
57+
}
58+
</script>
59+
```

components/tabs/tabs.jsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,14 @@ export default {
1212
name: 'ATabs',
1313
props: {
1414
prefixCls: PropTypes.string.def('ant-tabs'),
15-
activeKey: PropTypes.string,
16-
defaultActiveKey: PropTypes.string,
15+
activeKey: PropTypes.oneOfType([
16+
PropTypes.string,
17+
PropTypes.number,
18+
]),
19+
defaultActiveKey: PropTypes.oneOfType([
20+
PropTypes.string,
21+
PropTypes.number,
22+
]),
1723
hideAdd: PropTypes.bool.def(false),
1824
tabBarStyle: PropTypes.object,
1925
tabBarExtraContent: PropTypes.oneOfType([

components/vc-tabs/src/InkTabBarNode.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,10 @@ export default {
8484
saveRef: PropTypes.func.def(() => {}),
8585
getRef: PropTypes.func.def(() => {}),
8686
panels: PropTypes.array,
87-
activeKey: PropTypes.string,
87+
activeKey: PropTypes.oneOfType([
88+
PropTypes.string,
89+
PropTypes.number,
90+
]),
8891
},
8992
updated () {
9093
this.$nextTick(function () {

components/vc-tabs/src/TabBarTabsNode.jsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,10 @@ export default {
1010
name: 'TabBarTabsNode',
1111
mixins: [BaseMixin],
1212
props: {
13-
activeKey: PropTypes.string,
13+
activeKey: PropTypes.oneOfType([
14+
PropTypes.string,
15+
PropTypes.number,
16+
]),
1417
panels: PropTypes.any.def([]),
1518
prefixCls: PropTypes.string.def(''),
1619
tabBarGutter: PropTypes.any.def(null),

components/vc-tabs/src/TabContent.jsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import PropTypes from '../../_util/vue-types'
12
import { cloneElement } from '../../_util/vnode'
23
import {
34
getTransformByIndex,
@@ -14,7 +15,10 @@ export default {
1415
default: 'ant-tabs',
1516
type: String,
1617
},
17-
activeKey: String,
18+
activeKey: PropTypes.oneOfType([
19+
PropTypes.string,
20+
PropTypes.number,
21+
]),
1822
tabBarPosition: String,
1923
},
2024
computed: {

components/vc-tabs/src/Tabs.jsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,14 @@ export default {
3939
children: PropTypes.any.def([]),
4040
prefixCls: PropTypes.string.def('ant-tabs'),
4141
tabBarPosition: PropTypes.string.def('top'),
42-
activeKey: PropTypes.string,
43-
defaultActiveKey: PropTypes.string,
42+
activeKey: PropTypes.oneOfType([
43+
PropTypes.string,
44+
PropTypes.number,
45+
]),
46+
defaultActiveKey: PropTypes.oneOfType([
47+
PropTypes.string,
48+
PropTypes.number,
49+
]),
4450
__propsSymbol__: PropTypes.any,
4551
},
4652
data () {

0 commit comments

Comments
 (0)