Skip to content

Commit e94cb33

Browse files
authored
feat(form): support requiredMarkPosition (#3586)
* feat(form): docs & type & props * feat(config): docs & type * feat(form): support requiredMarkPosition * feat(form): support requiredMarkPosition
1 parent 79756c0 commit e94cb33

File tree

11 files changed

+36
-0
lines changed

11 files changed

+36
-0
lines changed

packages/components/config-provider/config-provider.en-US.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@ name | type | default | description | required
172172
colonText | String | - | colon on the right of label ":" | N
173173
errorMessage | Object | - | Typescript:`FormErrorMessage`[Form API Documents](./form?tab=api)[see more ts definition](https://github.com/Tencent/tdesign-react/blob/develop/packages/components/config-provider/type.ts) | N
174174
requiredMark | Boolean | true | \- | N
175+
requiredMarkPosition | String | left | Display position of required symbols。options: left/right | N
175176

176177
### GuideConfig
177178

packages/components/config-provider/config-provider.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ titleText | Object | - | 空状态组件各类型的标题文本配置。TS 类
202202
colonText | String | - | 字段旁边的冒号,中文为“:” | N
203203
errorMessage | Object | - | 表单错误信息配置,示例:`{ idcard: '请输入正确的身份证号码', max: '字符长度不能超过 ${max}' }`。TS 类型:`FormErrorMessage`[Form API Documents](./form?tab=api)[详细类型定义](https://github.com/Tencent/tdesign-react/blob/develop/packages/components/config-provider/type.ts) | N
204204
requiredMark | Boolean | true | 是否显示必填符号(*),默认显示 | N
205+
requiredMarkPosition | String | left | 表单必填符号(*)显示位置。可选项:left/right | N
205206

206207
### GuideConfig
207208

packages/components/config-provider/type.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -509,6 +509,11 @@ export interface FormConfig {
509509
* @default true
510510
*/
511511
requiredMark?: boolean;
512+
/**
513+
* 表单必填符号(*)显示位置
514+
* @default left
515+
*/
516+
requiredMarkPosition?: 'left' | 'right';
512517
}
513518

514519
export interface GuideConfig {

packages/components/form/Form.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ const Form = forwardRefWithStatics(
3232
colon,
3333
initialData,
3434
requiredMark = globalFormConfig.requiredMark,
35+
requiredMarkPosition = globalFormConfig.requiredMarkPosition,
3536
scrollToFirstError,
3637
showErrorMessage,
3738
resetType,
@@ -98,6 +99,7 @@ const Form = forwardRefWithStatics(
9899
colon,
99100
initialData,
100101
requiredMark,
102+
requiredMarkPosition,
101103
errorMessage,
102104
showErrorMessage,
103105
scrollToFirstError,

packages/components/form/FormContext.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ const FormContext = React.createContext<{
1212
colon: TdFormProps['colon'];
1313
initialData: TdFormProps['initialData'];
1414
requiredMark: TdFormProps['requiredMark'];
15+
requiredMarkPosition: TdFormProps['requiredMarkPosition'];
1516
scrollToFirstError: TdFormProps['scrollToFirstError'];
1617
showErrorMessage: TdFormProps['showErrorMessage'];
1718
resetType: TdFormProps['resetType'];
@@ -29,6 +30,7 @@ const FormContext = React.createContext<{
2930
colon: false,
3031
initialData: {},
3132
requiredMark: undefined,
33+
requiredMarkPosition: undefined,
3234
scrollToFirstError: undefined,
3335
showErrorMessage: undefined,
3436
resetType: 'empty',

packages/components/form/FormItem.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ const FormItem = forwardRef<FormItemInstance, FormItemProps>((originalProps, ref
6060
colon,
6161
layout,
6262
requiredMark: requiredMarkFromContext,
63+
requiredMarkPosition,
6364
labelAlign: labelAlignFromContext,
6465
labelWidth: labelWidthFromContext,
6566
showErrorMessage: showErrorMessageFromContext,
@@ -153,6 +154,7 @@ const FormItem = forwardRef<FormItemInstance, FormItemProps>((originalProps, ref
153154
labelWidth,
154155
labelAlign,
155156
requiredMark,
157+
requiredMarkPosition,
156158
showErrorMessage,
157159
innerRules,
158160
});

packages/components/form/_usage/props.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,21 @@
5757
"defaultValue": false,
5858
"options": []
5959
},
60+
{
61+
"name": "requiredMarkPosition",
62+
"type": "enum",
63+
"defaultValue": "left",
64+
"options": [
65+
{
66+
"label": "left",
67+
"value": "left"
68+
},
69+
{
70+
"label": "right",
71+
"value": "right"
72+
}
73+
]
74+
},
6075
{
6176
"name": "resetType",
6277
"type": "enum",

packages/components/form/form.en-US.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ labelWidth | String / Number | '100px' | \- | N
2020
layout | String | vertical | options: vertical/inline | N
2121
preventSubmitDefault | Boolean | true | \- | N
2222
requiredMark | Boolean | true | \- | N
23+
requiredMarkPosition | String | left | Display position of required symbols。options: left/right | N
2324
resetType | String | empty | options: empty/initial | N
2425
rules | Object | - | Typescript:`FormRules<FormData>` `type FormRules<T extends Data = any> = { [field in keyof T]?: Array<FormRule> }`[see more ts definition](https://github.com/Tencent/tdesign-react/blob/develop/packages/components/form/type.ts) | N
2526
scrollToFirstError | String | - | options: ''/smooth/auto | N

packages/components/form/form.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@ labelWidth | String / Number | '100px' | 可以整体设置label标签宽度,
102102
layout | String | vertical | 表单布局,有两种方式:纵向布局 和 行内布局。可选项:vertical/inline | N
103103
preventSubmitDefault | Boolean | true | 是否阻止表单提交默认事件(表单提交默认事件会刷新页面),设置为 `true` 可以避免刷新 | N
104104
requiredMark | Boolean | true | 是否显示必填符号(*),默认显示 | N
105+
requiredMarkPosition | String | left | 表单必填符号(*)显示位置。可选项:left/right | N
105106
resetType | String | empty | 重置表单的方式,值为 empty 表示重置表单为空,值为 initial 表示重置表单数据为初始值。可选项:empty/initial | N
106107
rules | Object | - | 表单字段校验规则。TS 类型:`FormRules<FormData>` `type FormRules<T extends Data = any> = { [field in keyof T]?: Array<FormRule> }`[详细类型定义](https://github.com/Tencent/tdesign-react/blob/develop/packages/components/form/type.ts) | N
107108
scrollToFirstError | String | - | 表单校验不通过时,是否自动滚动到第一个校验不通过的字段,平滑滚动或是瞬间直达。值为空则表示不滚动。可选项:''/smooth/auto | N

packages/components/form/hooks/useFormItemStyle.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export default function useFormItemStyle(props) {
2222
labelWidth,
2323
labelAlign,
2424
requiredMark,
25+
requiredMarkPosition,
2526
showErrorMessage,
2627
innerRules,
2728
} = props;
@@ -71,6 +72,7 @@ export default function useFormItemStyle(props) {
7172

7273
const formItemLabelClass = classNames(`${classPrefix}-form__label`, {
7374
[`${classPrefix}-form__label--required`]: needRequiredMark,
75+
[`${classPrefix}-form__label--required-right`]: needRequiredMark && requiredMarkPosition === 'right',
7476
[`${classPrefix}-form__label--top`]: labelAlign === 'top' || !labelWidth,
7577
[`${classPrefix}-form__label--left`]: labelAlign === 'left' && labelWidth,
7678
[`${classPrefix}-form__label--right`]: labelAlign === 'right' && labelWidth,

0 commit comments

Comments
 (0)