Fix chip input issue

This commit is contained in:
LASER-Yi 2022-10-11 23:49:52 +08:00
parent 559ec50c92
commit 1a612d12b8
2 changed files with 9 additions and 1 deletions

View File

@ -28,6 +28,7 @@ const ChipInput: FunctionComponent<ChipInputProps> = ({ ...props }) => {
onChange?.([...(value ?? []), query]); onChange?.([...(value ?? []), query]);
return query; return query;
}} }}
buildOption={(value) => value}
></MultiSelector> ></MultiSelector>
); );
}; };

View File

@ -109,6 +109,7 @@ export type MultiSelectorProps<T> = Override<
options: readonly SelectorOption<T>[]; options: readonly SelectorOption<T>[];
onChange?: (value: T[]) => void; onChange?: (value: T[]) => void;
getkey?: (value: T) => string; getkey?: (value: T) => string;
buildOption?: (value: string) => T;
}, },
Omit<MultiSelectProps, "data"> Omit<MultiSelectProps, "data">
>; >;
@ -119,11 +120,15 @@ export function MultiSelector<T>({
options, options,
onChange, onChange,
getkey = DefaultKeyBuilder, getkey = DefaultKeyBuilder,
buildOption,
...select ...select
}: MultiSelectorProps<T>) { }: MultiSelectorProps<T>) {
const labelRef = useRef(getkey); const labelRef = useRef(getkey);
labelRef.current = getkey; labelRef.current = getkey;
const buildRef = useRef(buildOption);
buildRef.current = buildOption;
const data = useMemo( const data = useMemo(
() => () =>
options.map<SelectItemWithPayload<T>>(({ value, ...option }) => ({ options.map<SelectItemWithPayload<T>>(({ value, ...option }) => ({
@ -150,6 +155,8 @@ export function MultiSelector<T>({
const payload = data.find((v) => v.value === value)?.payload; const payload = data.find((v) => v.value === value)?.payload;
if (payload) { if (payload) {
payloads.push(payload); payloads.push(payload);
} else if (buildRef.current) {
payloads.push(buildRef.current(value));
} }
} }
onChange?.(payloads); onChange?.(payloads);
@ -159,10 +166,10 @@ export function MultiSelector<T>({
return ( return (
<MultiSelect <MultiSelect
{...select}
value={wrappedValue} value={wrappedValue}
defaultValue={wrappedDefaultValue} defaultValue={wrappedDefaultValue}
onChange={wrappedOnChange} onChange={wrappedOnChange}
{...select}
data={data} data={data}
></MultiSelect> ></MultiSelect>
); );