wix-style-react
Version:
53 lines (46 loc) • 1.51 kB
TypeScript
import * as React from 'react';
import { OmitPolyfill } from '../common';
import InputWithOptions, {
InputWithOptionsProps,
OnSelectFnSignature,
} from '../InputWithOptions';
import {
DropdownLayoutProps,
DropdownLayoutValueOption,
} from '../DropdownLayout';
import { TagProps } from '../Tag';
import { InputStatus } from '../Input';
export type MultiSelectStatus = InputStatus;
export interface MultiSelectProps
extends InputWithOptionsProps<(values: string[]) => void> {
selectedId?: DropdownLayoutProps['selectedId'];
closeOnSelect?: DropdownLayoutProps['closeOnSelect'];
selectedHighlight?: DropdownLayoutProps['selectedHighlight'];
predicate?: (option: DropdownLayoutValueOption) => boolean;
tags?: MultiSelectTag[];
maxNumRows?: number;
delimiters?: string[];
mode?: MultiSelectMode;
status?: MultiSelectStatus;
statusMessage?: React.ReactNode;
onReorder?: OnReorderFn;
onSelect?: (option: DropdownLayoutValueOption) => void;
customInput?: React.ReactNode | Function;
customSuffix?: React.ReactNode;
disabled?: boolean;
onRemoveTag?: (tagId: TagProps['id']) => void;
clearOnBlur?: boolean;
}
export default class MultiSelect extends InputWithOptions<
(values: string[]) => void,
OnSelectFnSignature,
MultiSelectProps
> {}
export type MultiSelectMode = 'select';
export type OnReorderFn = (data: {
addedIndex: number;
removedIndex: number;
}) => void;
export type MultiSelectTag = OmitPolyfill<TagProps, 'children'> & {
label: string;
};