Skip to content

Commit 2480153

Browse files
committed
fix #41375
1 parent d7bda2a commit 2480153

File tree

2 files changed

+65
-39
lines changed

2 files changed

+65
-39
lines changed

packages/mui-material/src/Select/Select.d.ts

Lines changed: 11 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -187,43 +187,6 @@ export type SelectProps<
187187
? StandardSelectProps
188188
: OutlinedSelectProps);
189189

190-
interface SelectType {
191-
<Value, Variant extends 'filled' | 'standard'>(
192-
props: {
193-
/**
194-
* The variant to use.
195-
* @default 'outlined'
196-
*/
197-
variant: Variant;
198-
} & Omit<SelectProps<Value, Variant>, 'variant'>,
199-
): JSX.Element & {
200-
muiName: string;
201-
};
202-
<Value = unknown, Variant extends 'outlined' = 'outlined'>(
203-
props: {
204-
/**
205-
* The variant to use.
206-
* @default 'outlined'
207-
*/
208-
variant?: Variant;
209-
} & Omit<SelectProps<Value, Variant>, 'variant'>,
210-
): JSX.Element & {
211-
muiName: string;
212-
};
213-
}
214-
/**
215-
*
216-
* Demos:
217-
*
218-
* - [Select](https://mui.com/material-ui/react-select/)
219-
*
220-
* API:
221-
*
222-
* - [Select API](https://mui.com/material-ui/api/select/)
223-
* - inherits [OutlinedInput API](https://mui.com/material-ui/api/outlined-input/)
224-
*/
225-
declare const Select: SelectType;
226-
227190
/**
228191
*
229192
* Demos:
@@ -235,5 +198,14 @@ declare const Select: SelectType;
235198
* - [Select API](https://mui.com/material-ui/api/select/)
236199
* - inherits [OutlinedInput API](https://mui.com/material-ui/api/outlined-input/)
237200
*/
238-
239-
export default Select;
201+
export default function Select<Value = unknown, Variant extends SelectVariants = 'outlined'>(
202+
props: {
203+
/**
204+
* The variant to use.
205+
* @default 'outlined'
206+
*/
207+
variant?: Variant;
208+
} & SelectProps<Value, Variant>,
209+
): JSX.Element & {
210+
muiName: string;
211+
};

packages/mui-material/src/Select/Select.spec.tsx

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,3 +141,57 @@ function genericValueTest() {
141141
// @ts-expect-error hiddenLabel is not present in standard variant
142142
<Select {...standardProps} hiddenLabel />;
143143
}
144+
145+
type Options<T> = { text: string; value: T } | T;
146+
147+
type Props<T> = (
148+
| {
149+
value: T;
150+
multiple?: false;
151+
onChange: (value: T) => void;
152+
}
153+
| {
154+
value: T[];
155+
multiple: true;
156+
onChange: (value: T[]) => void;
157+
}
158+
) & {
159+
options: Options<T>[];
160+
};
161+
162+
// test for https://github.com/mui/material-ui/issues/41375
163+
const AppSelect = <T extends string>(props: Props<T>) => {
164+
const getOptionText = (option: Options<T>) => {
165+
if (typeof option === 'object') {
166+
return option.text;
167+
}
168+
return option;
169+
};
170+
171+
const getOptionValue = (option: Options<T>) => {
172+
if (typeof option === 'object') {
173+
return option.value;
174+
}
175+
return option;
176+
};
177+
178+
return (
179+
<Select
180+
value={props.value}
181+
multiple={props.multiple}
182+
onChange={(event) => {
183+
if (props.multiple) {
184+
props.onChange(event.target.value as T[]);
185+
} else {
186+
props.onChange(event.target.value as T);
187+
}
188+
}}
189+
>
190+
{props.options.map((option, index) => (
191+
<MenuItem key={index} value={getOptionValue(option)}>
192+
{getOptionText(option)}
193+
</MenuItem>
194+
))}
195+
</Select>
196+
);
197+
};

0 commit comments

Comments
 (0)