|
1 | 1 | import { Component, isValidElement, ReactNode } from 'react'; |
2 | 2 | import classNames from 'classnames'; |
3 | | -import { createIcon, isI18nData } from '@alilc/lowcode-utils'; |
4 | | -import { IPublicTypeTitleContent, IPublicTypeI18nData } from '@alilc/lowcode-types'; |
| 3 | +import { createIcon, isI18nData, isTitleConfig } from '@alilc/lowcode-utils'; |
| 4 | +import { IPublicTypeTitleContent, IPublicTypeI18nData, IPublicTypeTitleConfig } from '@alilc/lowcode-types'; |
5 | 5 | import { intl } from '../../intl'; |
6 | 6 | import { Tip } from '../tip'; |
7 | 7 | import './title.less'; |
@@ -88,42 +88,49 @@ export class Title extends Component<{ |
88 | 88 |
|
89 | 89 | render() { |
90 | 90 | // eslint-disable-next-line prefer-const |
91 | | - let { title, className } = this.props; |
| 91 | + const { title, className } = this.props; |
| 92 | + let _title: IPublicTypeTitleConfig; |
92 | 93 | if (title == null) { |
93 | 94 | return null; |
94 | 95 | } |
95 | 96 | if (isValidElement(title)) { |
96 | 97 | return title; |
97 | 98 | } |
98 | 99 | if (typeof title === 'string' || isI18nData(title)) { |
99 | | - title = { label: title }; |
| 100 | + _title = { label: title }; |
| 101 | + } else if (isTitleConfig(title)) { |
| 102 | + _title = title; |
| 103 | + } else { |
| 104 | + _title = { |
| 105 | + label: title, |
| 106 | + }; |
100 | 107 | } |
101 | 108 |
|
102 | | - const icon = title.icon ? createIcon(title.icon, { size: 20 }) : null; |
| 109 | + const icon = _title.icon ? createIcon(_title.icon, { size: 20 }) : null; |
103 | 110 |
|
104 | 111 | let tip: any = null; |
105 | | - if (title.tip) { |
106 | | - if (isValidElement(title.tip) && title.tip.type === Tip) { |
107 | | - tip = title.tip; |
| 112 | + if (_title.tip) { |
| 113 | + if (isValidElement(_title.tip) && _title.tip.type === Tip) { |
| 114 | + tip = _title.tip; |
108 | 115 | } else { |
109 | 116 | const tipProps = |
110 | | - typeof title.tip === 'object' && !(isValidElement(title.tip) || isI18nData(title.tip)) |
111 | | - ? title.tip |
112 | | - : { children: title.tip }; |
| 117 | + typeof _title.tip === 'object' && !(isValidElement(_title.tip) || isI18nData(_title.tip)) |
| 118 | + ? _title.tip |
| 119 | + : { children: _title.tip }; |
113 | 120 | tip = <Tip {...tipProps} />; |
114 | 121 | } |
115 | 122 | } |
116 | 123 |
|
117 | 124 | return ( |
118 | 125 | <span |
119 | | - className={classNames('lc-title', className, title.className, { |
| 126 | + className={classNames('lc-title', className, _title.className, { |
120 | 127 | 'has-tip': !!tip, |
121 | | - 'only-icon': !title.label, |
| 128 | + 'only-icon': !_title.label, |
122 | 129 | })} |
123 | 130 | onClick={this.handleClick} |
124 | 131 | > |
125 | 132 | {icon ? <b className="lc-title-icon">{icon}</b> : null} |
126 | | - {this.renderLabel(title.label)} |
| 133 | + {this.renderLabel(_title.label)} |
127 | 134 | {tip} |
128 | 135 | </span> |
129 | 136 | ); |
|
0 commit comments