Skip to content

Commit 7d93345

Browse files
committed
Merge branch 'improve-option-types' into alpha
2 parents 542a741 + b64e82f commit 7d93345

File tree

3 files changed

+29
-20
lines changed

3 files changed

+29
-20
lines changed

src/Fields/SelectField.tsx

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import {
77
UseControllerProps,
88
} from 'react-hook-form';
99

10-
import { Select, SelectProps, OptionType } from '../Select';
10+
import { Select, SelectProps, MaybeGroupedInputOption } from '../Select';
1111

1212
import { useFieldContext } from './FieldProvider';
1313
import { FieldWrapper, FieldWrapperProps } from './FieldWrapper';
@@ -18,7 +18,7 @@ type SelectFieldProps<
1818
TFieldValues extends FieldValues,
1919
TFieldPath extends FieldPath<TFieldValues>,
2020
TFieldPathValue extends UnpackArray<FieldPathValue<TFieldValues, TFieldPath>>,
21-
TOption extends OptionType<TFieldPathValue>,
21+
TOption extends MaybeGroupedInputOption<TFieldPathValue>,
2222
> = UseControllerProps<TFieldValues, TFieldPath> &
2323
Pick<FieldWrapperProps<TFieldValues, TFieldPath>, 'formItem'> & {
2424
component?: SelectProps<TFieldPathValue, TOption>;
@@ -30,7 +30,8 @@ export function SelectField<
3030
TFieldPathValue extends UnpackArray<
3131
FieldPathValue<TFieldValues, TFieldPath>
3232
> = UnpackArray<FieldPathValue<TFieldValues, TFieldPath>>,
33-
TOption extends OptionType<TFieldPathValue> = OptionType<TFieldPathValue>,
33+
TOption extends
34+
MaybeGroupedInputOption<TFieldPathValue> = MaybeGroupedInputOption<TFieldPathValue>,
3435
>({
3536
formItem,
3637
component,

src/Form/formInput.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
import { ReactNode } from 'react';
22

3-
export type FormInputOption<TValue, TLabel extends ReactNode> = {
3+
export type FormInputOption<
4+
TValue = unknown,
5+
TLabel extends ReactNode = ReactNode,
6+
> = {
47
value: TValue;
58
label: TLabel;
69
disabled?: boolean;

src/Select/index.tsx

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,33 +12,34 @@ import React, {
1212
} from 'react';
1313
import styled from 'styled-components';
1414

15+
import { FormInputOption } from '../Form';
1516
import { fontSizeFromTheme } from '../styled-utils';
1617

17-
export type OptionType<TValue = unknown> =
18-
| ValueOptionType<TValue>
19-
| GroupedOptionType<TValue>;
20-
21-
export type ValueOptionType<TValue = unknown> = {
22-
label: ReactNode;
23-
value: TValue;
24-
disabled?: boolean;
25-
};
18+
export type MaybeGroupedInputOption<
19+
TValue = unknown,
20+
TLabel extends ReactNode = ReactNode,
21+
> = FormInputOption<TValue, TLabel> | GroupedInputOption<TValue, TLabel>;
2622

2723
/** As described in https://4x.ant.design/components/select/#components-select-demo-optgroup. */
28-
export type GroupedOptionType<TValue = unknown> = {
29-
label: ReactNode;
30-
options: Array<ValueOptionType<TValue>>;
24+
export type GroupedInputOption<
25+
TValue = unknown,
26+
TLabel extends ReactNode = ReactNode,
27+
> = {
28+
label: TLabel;
29+
options: Array<FormInputOption<TValue, TLabel>>;
3130
disabled?: boolean;
3231
};
3332

3433
export type FilterOptionFunction<
3534
TValue = unknown,
36-
TOption extends OptionType<TValue> = OptionType<TValue>,
35+
TOption extends
36+
MaybeGroupedInputOption<TValue> = MaybeGroupedInputOption<TValue>,
3737
> = AntdFilterFunc<TOption>;
3838

3939
export type SelectProps<
4040
TValue = unknown,
41-
TOption extends OptionType<TValue> = OptionType<TValue>,
41+
TOption extends
42+
MaybeGroupedInputOption<TValue> = MaybeGroupedInputOption<TValue>,
4243
> = Modify<
4344
AntdSelectProps<TValue, TOption>,
4445
{
@@ -73,7 +74,10 @@ const StyledDropdown = styled.div`
7374
}
7475
`;
7576

76-
function SelectInner<TValue, TOptionType extends OptionType<TValue>>(
77+
function SelectInner<
78+
TValue,
79+
TOptionType extends MaybeGroupedInputOption<TValue>,
80+
>(
7781
{ children, dropdownRender, ...props }: SelectProps<TValue, TOptionType>,
7882
ref: ForwardedRef<BaseSelectRef>,
7983
) {
@@ -99,7 +103,8 @@ function SelectInner<TValue, TOptionType extends OptionType<TValue>>(
99103

100104
export const Select = forwardRef(SelectInner) as unknown as (<
101105
TValue = unknown,
102-
TOptionType extends OptionType<TValue> = OptionType<TValue>,
106+
TOptionType extends
107+
MaybeGroupedInputOption<TValue> = MaybeGroupedInputOption<TValue>,
103108
>(
104109
props: SelectProps<TValue, TOptionType>,
105110
) => ReactElement) & {

0 commit comments

Comments
 (0)