ant-design/components/tabs/TabBar.tsx
mushan0x0 62d68b049f feat: Tabs render tab bar (#11856)
* feat: Customized bar of tab.

* docs: 更新关于renderTabBar的中文文档

* docs: 更新关于renderTabBar的英文文档

* update: 优化代码

* docs: 更新关于renderTabBar的文档

* update: 完善renderTabBar代码

* update: 完成自定义tabBar

* docs: 去掉旧的DefaultTabBar参数说明

* update: 修复CI测试

* fix: 去掉>选择器,解决自定义tabBar后样式错误

* update: 优化代码质量

* update: 添加测试

* fix: lint

* fix: 避免tab嵌套bug

* update: 把DefaultTabBar放在renderTabBar里
2018-08-28 18:56:25 +08:00

52 lines
1.5 KiB
TypeScript

import * as React from 'react';
import Icon from '../icon';
import ScrollableInkTabBar from 'rc-tabs/lib/ScrollableInkTabBar';
import { TabsProps } from './index';
export default class TabBar extends React.Component<TabsProps> {
render() {
const {
tabBarStyle,
animated = true,
renderTabBar,
tabBarExtraContent,
tabPosition,
prefixCls,
} = this.props;
const inkBarAnimated = typeof animated === 'object' ? animated.inkBar : animated;
const isVertical = tabPosition === 'left' || tabPosition === 'right';
const prevIconType = isVertical ? 'up' : 'left';
const nextIconType = isVertical ? 'down' : 'right';
const prevIcon = (
<span className={`${prefixCls}-tab-prev-icon`}>
<Icon type={prevIconType} className={`${prefixCls}-tab-prev-icon-target`} />
</span>
);
const nextIcon = (
<span className={`${prefixCls}-tab-next-icon`}>
<Icon type={nextIconType} className={`${prefixCls}-tab-next-icon-target`} />
</span>
);
const renderProps = {
...this.props,
inkBarAnimated,
extraContent: tabBarExtraContent,
style: tabBarStyle,
prevIcon,
nextIcon,
};
let RenderTabBar: React.ReactElement<any>;
if (renderTabBar) {
RenderTabBar = renderTabBar(renderProps, ScrollableInkTabBar);
} else {
RenderTabBar = <ScrollableInkTabBar {...renderProps} />;
}
return React.cloneElement(RenderTabBar);
}
}