mirror of
https://github.com/Unleash/unleash.git
synced 2025-10-13 11:17:26 +02:00
This is the second part of the code cleanup job. It primarily consists of breaking apart large files and organizing the code better
43 lines
1.2 KiB
TypeScript
43 lines
1.2 KiB
TypeScript
import { type FC, useState } from 'react';
|
|
import { ConfigButton, type ConfigButtonProps } from './ConfigButton';
|
|
import { DropdownList, type DropdownListProps } from './DropdownList';
|
|
|
|
type MultiSelectConfigButtonProps = Pick<
|
|
ConfigButtonProps,
|
|
'button' | 'onOpen' | 'onClose' | 'description'
|
|
> &
|
|
Pick<DropdownListProps, 'search' | 'options'> & {
|
|
selectedOptions: Set<string>;
|
|
onChange: (values: Set<string>) => void;
|
|
};
|
|
|
|
export const MultiSelectConfigButton: FC<MultiSelectConfigButtonProps> = ({
|
|
selectedOptions,
|
|
onChange,
|
|
...rest
|
|
}) => {
|
|
const [anchorEl, setAnchorEl] = useState<HTMLDivElement | null>();
|
|
|
|
const handleToggle = (value: string) => {
|
|
if (selectedOptions.has(value)) {
|
|
selectedOptions.delete(value);
|
|
} else {
|
|
selectedOptions.add(value);
|
|
}
|
|
|
|
onChange(new Set(selectedOptions));
|
|
};
|
|
|
|
return (
|
|
<ConfigButton {...rest} anchorEl={anchorEl} setAnchorEl={setAnchorEl}>
|
|
<DropdownList
|
|
multiselect={{
|
|
selectedOptions,
|
|
}}
|
|
onChange={handleToggle}
|
|
{...rest}
|
|
/>
|
|
</ConfigButton>
|
|
);
|
|
};
|