import * as React from "react"; import { ComponentProps } from "components/designSystems/appsmith/BaseComponent"; import { MenuItem, Button } from "@blueprintjs/core"; import { SelectionType, DropdownOption } from "widgets/DropdownWidget"; import { Select, MultiSelect, IItemRendererProps } from "@blueprintjs/select"; import _ from "lodash"; import "../../../../node_modules/@blueprintjs/select/lib/css/blueprint-select.css"; const SingleDropDown = Select.ofType(); const MultiDropDown = MultiSelect.ofType(); class DropDownComponent extends React.Component { render() { const selectedItems = this.props.selectedIndexArr ? _.map(this.props.selectedIndexArr, index => { return this.props.options[index]; }) : []; return (
{this.props.selectionType === "SINGLE_SELECT" ? (
); } onItemSelect = (item: DropdownOption): void => { this.props.onOptionSelected(item); }; onItemRemoved = (_tag: string, index: number) => { this.props.onOptionRemoved(index); }; renderTag = (option: DropdownOption) => { return option.label; }; isOptionSelected = (selectedOption: DropdownOption) => { const optionIndex = _.findIndex(this.props.options, option => { return option.value === selectedOption.value; }); if (this.props.selectionType === "SINGLE_SELECT") { return optionIndex === this.props.selectedIndex; } else { return ( _.findIndex(this.props.selectedIndexArr, index => { return index === optionIndex; }) !== -1 ); } }; renderItem = (option: DropdownOption, itemProps: IItemRendererProps) => { if (!itemProps.modifiers.matchesPredicate) { return null; } const isSelected: boolean = this.isOptionSelected(option); return ( ); }; } export interface DropDownComponentProps extends ComponentProps { selectionType: SelectionType; disabled?: boolean; onOptionSelected: (optionSelected: DropdownOption) => void; onOptionRemoved: (removedIndex: number) => void; placeholder?: string; label?: string; selectedIndex: number; selectedIndexArr: number[]; options: DropdownOption[]; isLoading: boolean; } export default DropDownComponent;