Skip to content

Commit

Permalink
feat: tree token (ant-design#44282)
Browse files Browse the repository at this point in the history
  • Loading branch information
MadCcc authored Aug 18, 2023
1 parent 2e18b63 commit 74d9654
Show file tree
Hide file tree
Showing 16 changed files with 286 additions and 52 deletions.
6 changes: 4 additions & 2 deletions components/theme/interface/components.ts
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,8 @@ import type { ComponentToken as TimelineComponentToken } from '../../timeline/st
import type { ComponentToken as TooltipComponentToken } from '../../tooltip/style';
import type { ComponentToken as TourComponentToken } from '../../tour/style';
import type { ComponentToken as TransferComponentToken } from '../../transfer/style';
import type { ComponentToken as TreeComponentToken } from '../../tree/style';
import type { ComponentToken as TreeSelectComponentToken } from '../../tree-select/style';
import type { ComponentToken as TypographyComponentToken } from '../../typography/style';
import type { ComponentToken as UploadComponentToken } from '../../upload/style';

Expand Down Expand Up @@ -102,8 +104,8 @@ export interface ComponentTokenMap {
Statistic?: StatisticComponentToken;
Switch?: SwitchComponentToken;
Tag?: TagComponentToken;
Tree?: {};
TreeSelect?: {};
Tree?: TreeComponentToken;
TreeSelect?: TreeSelectComponentToken;
Typography?: TypographyComponentToken;
Timeline?: TimelineComponentToken;
Transfer?: TransferComponentToken;
Expand Down
2 changes: 1 addition & 1 deletion components/tree-select/__tests__/demo-extend.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { extendTest } from '../../../tests/shared/demoTest';

extendTest('tree-select');
extendTest('tree-select', { skip: ['component-token.tsx'] });
1 change: 1 addition & 0 deletions components/tree-select/__tests__/demo.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import demoTest, { rootPropsTest } from '../../../tests/shared/demoTest';

demoTest('tree-select', {
testRootProps: false,
skip: ['component-token.tsx'],
});

rootPropsTest('tree-select', (TreeSelect, props) => <TreeSelect {...props} />, {
Expand Down
7 changes: 7 additions & 0 deletions components/tree-select/demo/component-token.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## zh-CN

组件 Token

## en-US

Component Token
69 changes: 69 additions & 0 deletions components/tree-select/demo/component-token.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
import React, { useState } from 'react';
import { ConfigProvider, TreeSelect } from 'antd';

const treeData = [
{
value: 'parent 1',
title: 'parent 1',
children: [
{
value: 'parent 1-0',
title: 'parent 1-0',
children: [
{
value: 'leaf1',
title: 'leaf1',
},
{
value: 'leaf2',
title: 'leaf2',
},
],
},
{
value: 'parent 1-1',
title: 'parent 1-1',
children: [
{
value: 'leaf3',
title: <b style={{ color: '#08c' }}>leaf3</b>,
},
],
},
],
},
];
const App: React.FC = () => {
const [value, setValue] = useState<string>();

const onChange = (newValue: string) => {
setValue(newValue);
};

return (
<ConfigProvider
theme={{
components: {
TreeSelect: {
nodeHoverBg: '#fff2f0',
nodeSelectedBg: '#ffa39e',
},
},
}}
>
<TreeSelect
showSearch
style={{ width: '100%' }}
value={value}
dropdownStyle={{ maxHeight: 400, overflow: 'auto' }}
placeholder="Please select"
allowClear
treeDefaultExpandAll
onChange={onChange}
treeData={treeData}
/>
</ConfigProvider>
);
};

export default App;
1 change: 1 addition & 0 deletions components/tree-select/index.en-US.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ Tree selection control.
<code src="./demo/status.tsx">Status</code>
<code src="./demo/suffix.tsx" debug>Suffix</code>
<code src="./demo/render-panel.tsx" debug>_InternalPanelDoNotUseOrYouWillBeFired</code>
<code src="./demo/component-token.tsx" debug>Component Token</code>

## API

Expand Down
1 change: 1 addition & 0 deletions components/tree-select/index.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ demo:
<code src="./demo/status.tsx">自定义状态</code>
<code src="./demo/suffix.tsx" debug>后缀图标</code>
<code src="./demo/render-panel.tsx" debug>\_InternalPanelDoNotUseOrYouWillBeFired</code>
<code src="./demo/component-token.tsx" debug>组件 Token</code>

## API

Expand Down
19 changes: 13 additions & 6 deletions components/tree-select/style/index.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
import { getStyle as getCheckboxStyle } from '../../checkbox/style';
import type { AliasToken, FullToken, GenerateStyle } from '../../theme/internal';
import { genComponentStyleHook, mergeToken } from '../../theme/internal';
import { genTreeStyle } from '../../tree/style';
import type { TreeSharedToken } from '../../tree/style';
import { genTreeStyle, initComponentToken } from '../../tree/style';

export interface ComponentToken extends TreeSharedToken {}

interface TreeSelectToken extends FullToken<'TreeSelect'> {
treePrefixCls: string;
Expand All @@ -25,7 +28,7 @@ const genBaseStyle: GenerateStyle<TreeSelectToken> = (token) => {
// ====================== Tree ======================
genTreeStyle(
treePrefixCls,
mergeToken<AliasToken>(token, { colorBgContainer: colorBgElevated }),
mergeToken<AliasToken & TreeSharedToken>(token, { colorBgContainer: colorBgElevated }),
),
{
[treeCls]: {
Expand Down Expand Up @@ -64,8 +67,12 @@ const genBaseStyle: GenerateStyle<TreeSelectToken> = (token) => {

// ============================== Export ==============================
export default function useTreeSelectStyle(prefixCls: string, treePrefixCls: string) {
return genComponentStyleHook('TreeSelect', (token) => {
const treeSelectToken = mergeToken<TreeSelectToken>(token, { treePrefixCls });
return [genBaseStyle(treeSelectToken)];
})(prefixCls);
return genComponentStyleHook(
'TreeSelect',
(token) => {
const treeSelectToken = mergeToken<TreeSelectToken>(token, { treePrefixCls });
return [genBaseStyle(treeSelectToken)];
},
initComponentToken,
)(prefixCls);
}
2 changes: 1 addition & 1 deletion components/tree/__tests__/demo-extend.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import { extendTest } from '../../../tests/shared/demoTest';

extendTest('tree', { skip: ['big-data.tsx', 'virtual-scroll.tsx'] });
extendTest('tree', { skip: ['big-data.tsx', 'virtual-scroll.tsx', 'component-token.tsx'] });
2 changes: 1 addition & 1 deletion components/tree/__tests__/demo.test.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
import demoTest from '../../../tests/shared/demoTest';

demoTest('tree', { skip: ['big-data.tsx', 'virtual-scroll.tsx'] });
demoTest('tree', { skip: ['big-data.tsx', 'virtual-scroll.tsx', 'component-token.tsx'] });
7 changes: 7 additions & 0 deletions components/tree/demo/component-token.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
## zh-CN

组件 Token

## en-US

Component Token
68 changes: 68 additions & 0 deletions components/tree/demo/component-token.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
import React from 'react';
import { ConfigProvider, Tree } from 'antd';
import type { DataNode, TreeProps } from 'antd/es/tree';

const treeData: DataNode[] = [
{
title: 'parent 1',
key: '0-0',
children: [
{
title: 'parent 1-0',
key: '0-0-0',
disabled: true,
children: [
{
title: 'leaf',
key: '0-0-0-0',
disableCheckbox: true,
},
{
title: 'leaf',
key: '0-0-0-1',
},
],
},
{
title: 'parent 1-1',
key: '0-0-1',
children: [{ title: <span style={{ color: '#1677ff' }}>sss</span>, key: '0-0-1-0' }],
},
],
},
];

const App: React.FC = () => {
const onSelect: TreeProps['onSelect'] = (selectedKeys, info) => {
console.log('selected', selectedKeys, info);
};

const onCheck: TreeProps['onCheck'] = (checkedKeys, info) => {
console.log('onCheck', checkedKeys, info);
};

return (
<ConfigProvider
theme={{
components: {
Tree: {
nodeHoverBg: '#fff2f0',
nodeSelectedBg: '#ffa39e',
},
},
}}
>
<Tree
checkable
defaultExpandedKeys={['0-0-0', '0-0-1']}
defaultSelectedKeys={['0-0-0', '0-0-1']}
defaultCheckedKeys={['0-0-0', '0-0-1']}
onSelect={onSelect}
onCheck={onCheck}
treeData={treeData}
/>
</ConfigProvider>
);
};

export default App;
3 changes: 2 additions & 1 deletion components/tree/index.en-US.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ Almost anything can be represented in a tree structure. Examples include directo
<code src="./demo/drag-debug.tsx" debug>Drag Debug</code>
<code src="./demo/big-data.tsx" debug>Big data</code>
<code src="./demo/block-node.tsx">Block Node</code>
<code src="./demo/component-token.tsx" debug>Component Token</code>

## API

Expand Down Expand Up @@ -126,7 +127,7 @@ Before `3.4.0`: The number of treeNodes can be very large, but when `checkable=t

## Design Token

<ComponentTokenTable component="Transfer"></ComponentTokenTable>
<ComponentTokenTable component="Tree"></ComponentTokenTable>

## FAQ

Expand Down
3 changes: 2 additions & 1 deletion components/tree/index.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ demo:
<code src="./demo/drag-debug.tsx" debug>Drag Debug</code>
<code src="./demo/big-data.tsx" debug>大数据</code>
<code src="./demo/block-node.tsx">占据整行</code>
<code src="./demo/component-token.tsx" debug>组件 Token</code>

## API

Expand Down Expand Up @@ -128,7 +129,7 @@ demo:

## Design Token

<ComponentTokenTable component="Transfer"></ComponentTokenTable>
<ComponentTokenTable component="Tree"></ComponentTokenTable>

## FAQ

Expand Down
Loading

0 comments on commit 74d9654

Please sign in to comment.