Skip to content

Commit 34b7ee3

Browse files
committed
feat: improve Select option types
1 parent f40f6ef commit 34b7ee3

File tree

2 files changed

+14
-20
lines changed

2 files changed

+14
-20
lines changed

src/Fields/SelectField.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { BaseOptionType, DefaultOptionType } from 'antd/lib/select';
1+
import { DefaultOptionType } from 'antd/lib/select';
22
import React from 'react';
33
import {
44
useController,
@@ -9,15 +9,15 @@ import {
99
UnpackNestedValue,
1010
} from 'react-hook-form';
1111

12-
import { Select, SelectProps } from '../Select';
12+
import { GroupedOptionType, Select, SelectProps } from '../Select';
1313

1414
import { useFieldContext } from './FieldProvider';
1515
import { FieldWrapper, FieldWrapperProps } from './FieldWrapper';
1616

1717
type SelectFieldProps<
1818
TFieldValues extends FieldValues,
1919
TName extends FieldPath<TFieldValues>,
20-
TOption extends BaseOptionType | DefaultOptionType,
20+
TOption extends DefaultOptionType | GroupedOptionType,
2121
> = UseControllerProps<TFieldValues, TName> &
2222
Pick<FieldWrapperProps<TFieldValues, TName>, 'formItem'> & {
2323
component?: SelectProps<
@@ -29,7 +29,7 @@ type SelectFieldProps<
2929
export function SelectField<
3030
TFieldValues extends FieldValues = FieldValues,
3131
TName extends FieldPath<TFieldValues> = FieldPath<TFieldValues>,
32-
TOption extends BaseOptionType | DefaultOptionType = DefaultOptionType,
32+
TOption extends DefaultOptionType | GroupedOptionType = DefaultOptionType,
3333
>({
3434
formItem,
3535
component,

src/Select/index.tsx

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { Select as AntdSelect, SelectProps as AntdSelectProps } from 'antd';
2-
import { BaseOptionType, DefaultOptionType } from 'antd/lib/select';
2+
import { DefaultOptionType } from 'antd/lib/select';
33
import { BaseSelectRef } from 'rc-select';
44
import React, {
55
ForwardedRef,
@@ -12,17 +12,17 @@ import styled from 'styled-components';
1212

1313
import { fontSizeFromTheme } from '../styled-utils';
1414

15+
/** As described in https://4x.ant.design/components/select/#components-select-demo-optgroup. */
1516
export type GroupedOptionType = {
1617
label: string;
17-
options: BaseOptionType | DefaultOptionType;
18+
options: DefaultOptionType;
1819
};
1920

21+
export type { DefaultOptionType } from 'antd/lib/select';
22+
2023
export type SelectProps<
2124
ValueType = unknown,
22-
OptionType extends
23-
| BaseOptionType
24-
| DefaultOptionType
25-
| GroupedOptionType = DefaultOptionType,
25+
OptionType extends DefaultOptionType | GroupedOptionType = DefaultOptionType,
2626
> = AntdSelectProps<ValueType, OptionType> & RefAttributes<BaseSelectRef>;
2727

2828
const StyledSelect = styled(AntdSelect)`
@@ -52,8 +52,8 @@ const StyledDropdown = styled.div`
5252
`;
5353

5454
function SelectInner<
55-
ValueType = unknown,
56-
OptionType extends BaseOptionType | DefaultOptionType = DefaultOptionType,
55+
ValueType,
56+
OptionType extends DefaultOptionType | GroupedOptionType,
5757
>(
5858
{ children, dropdownRender, ...props }: SelectProps<ValueType, OptionType>,
5959
ref: ForwardedRef<BaseSelectRef>,
@@ -78,15 +78,9 @@ function SelectInner<
7878
);
7979
}
8080

81-
export const Select = forwardRef<
82-
BaseSelectRef,
83-
SelectProps<unknown, BaseOptionType | DefaultOptionType | GroupedOptionType>
84-
>(SelectInner) as unknown as (<
81+
export const Select = forwardRef(SelectInner) as unknown as (<
8582
TValue = unknown,
86-
TOption extends
87-
| BaseOptionType
88-
| DefaultOptionType
89-
| GroupedOptionType = DefaultOptionType,
83+
TOption extends DefaultOptionType | GroupedOptionType = DefaultOptionType,
9084
>(
9185
props: SelectProps<TValue, TOption> & RefAttributes<BaseSelectRef>,
9286
) => ReactElement) & {

0 commit comments

Comments
 (0)