import * as React from 'react'; import _ from 'lodash'; import { Dropdown, Checkbox } from 'react-bootstrap'; import { DropdownToggleProps } from 'react-bootstrap/lib/DropdownToggle'; import { DropdownMenuProps } from 'react-bootstrap/lib/DropdownMenu'; export interface IColumnVisibilityDef { id: string; name: string; visible: boolean; togglable?: boolean; } export interface IColumnVisibilityControlsProps { className?: string; buttonText?: string | JSX.Element; columnVisibility?: IColumnVisibilityDef[]; onColumnToggled?: ( columnId: string, columnVisibility?: IColumnVisibilityDef[] ) => void; resetColumnVisibility?: () => void; showResetColumnsButton?: boolean; customDropdown?: (props: IColumnVisibilityControlsProps) => JSX.Element; } /** * @author Selcuk Onur Sumer * @author Aaron Lisman */ export class ColumnVisibilityControls extends React.Component< IColumnVisibilityControlsProps, {} > { public static defaultProps: IColumnVisibilityControlsProps = { className: '', buttonText: 'Columns', }; constructor(props: IColumnVisibilityControlsProps) { super(props); this.handleSelect = this.handleSelect.bind(this); } public render() { return (
{this.props.customDropdown ? this.props.customDropdown(this.props) : this.defaultDropdown}
); } private get defaultDropdown() { return ( {this.props.buttonText} ); } private handleSelect(evt: React.FormEvent) { const id = evt.currentTarget.getAttribute('data-id'); if (this.props.onColumnToggled && id) { this.props.onColumnToggled(id, this.props.columnVisibility); } } }