@trendmicro/react-dropdown v1.4.0
react-dropdown 
 
React Dropdown
Demo: https://trendmicro-frontend.github.io/react-dropdown
Installation
Install the latest version of react and react-dropdown:
npm install --save react @trendmicro/react-dropdownAt this point you can import
@trendmicro/react-dropdownand its styles in your application as follows:import Dropdown, { DropdownToggle, DropdownMenu, DropdownMenuWrapper, MenuItem, DropdownButton } from '@trendmicro/react-dropdown'; // Be sure to include styles at some point, probably during your bootstraping import '@trendmicro/react-buttons/dist/react-buttons.css'; import '@trendmicro/react-dropdown/dist/react-dropdown.css';
Recommended Setup
Create a common components directory including both Buttons and Dropdown components, as shown below:
components/
  Buttons/
    index.js
  Dropdown/
    index.jscomponents/Buttons/index.js
import '@trendmicro/react-buttons/dist/react-buttons.css';
export { Button, ButtonGroup, ButtonToolbar } from '@trendmicro/react-buttons';components/Dropdown/index.js
import '@trendmicro/react-dropdown/dist/react-dropdown.css';
import Dropdown from '@trendmicro/react-dropdown';
import '../Buttons'; // Ensure CSS dependency
export default Dropdown;
export {
    DropdownToggle,
    DropdownMenu,
    DropdownMenuWrapper,
    MenuItem,
    DropdownButton
} from '@trendmicro/react-dropdown';Then, import Dropdown component in your code:
import Dropdown from './components/Dropdown';Custom Styling
You can make style changes using inline styles or styled-components, and specify propTypes and defaultProps by setting them as properties on the function.
Inline Styles
const CustomDropdownMenu = (props) => (
    <Dropdown.Menu {...props} style={{ padding: '2px 0' }} />
);
CustomDropdownMenu.propTypes = Dropdown.Menu.propTypes;
CustomDropdownMenu.defaultProps = Dropdown.Menu.defaultProps;Styled Components
const CustomDropdownMenu = styled(Dropdown.Menu)`
    padding: 2px 0;
`;
CustomDropdownMenu.propTypes = Dropdown.Menu.propTypes;
CustomDropdownMenu.defaultProps = Dropdown.Menu.defaultProps;To increase the CSS specificity of a rule, you can simply repeat a selector, like so:
const CustomMenuItem = styled(MenuItem)`
&& {
    a {
        &:hover {
            background: ${styleConstants.selectionColor};
        }
        padding: 0 6px;
    }
}
`;
CustomMenuItem.propTypes = MenuItem.propTypes;
CustomMenuItem.defaultProps = MenuItem.defaultProps;Usage
Dropdown
<Dropdown
    onSelect={(eventKey) => {
    }}
>
    <Dropdown.Toggle
        btnStyle="flat"
    >
        Toggler
    </Dropdown.Toggle>
    <Dropdown.Menu>
        <MenuItem header>Header</MenuItem>
        <MenuItem eventKey={1}>link</MenuItem>
        <MenuItem divider />
        <MenuItem header>Header</MenuItem>
        <MenuItem eventKey={2}>link</MenuItem>
        <MenuItem eventKey={3} disabled>disabled</MenuItem>
        <MenuItem
            eventKey={4}
            title="link with title"
        >
            link with title
        </MenuItem>
        <MenuItem
            eventKey={5}
            active
            onSelect={(eventKey) => {
                alert(`Alert from menu item.\neventKey: ${eventKey}`);
            }}
        >
            link that alerts
        </MenuItem>
    </Dropdown.Menu>
</Dropdown>Multi-Level Dropdown
<Dropdown>
    <Dropdown.Toggle title="Select an option" />
    <Dropdown.Menu>
        <MenuItem>
            Menu item one
        </MenuItem>
        <MenuItem>
            Menu item two
        </MenuItem>
        <MenuItem>
            Menu item three
        </MenuItem>
        <MenuItem divider />
        <MenuItem>
            Menu item four
            <MenuItem>
                Second level item one
            </MenuItem>
            <MenuItem>
                Second level item two
            </MenuItem>
            <MenuItem>
                Second level item three
                <MenuItem>
                    Third level item one
                </MenuItem>
            </MenuItem>
        </MenuItem>
    </Dropdown.Menu>
</Dropdown>Dropdown Menu Wrapper
<Dropdown>
    <Dropdown.Toggle title="Select an option" />
    <Dropdown.MenuWrapper>
        <SearchFilter />
        <Dropdown.Menu>
            <MenuItem>
                Menu item one
            </MenuItem>
            <MenuItem>
                Menu item two
            </MenuItem>
            <MenuItem>
                Menu item three
            </MenuItem>
        </Dropdown.Menu>
    </Dropdown.MenuWrapper>
</Dropdown>Dropdown Button
<DropdownButton
    btnSize="xs"
    title="More"
    onSelect={(eventKey) => {
    }}
>
    <MenuItem eventKey={1}>link</MenuItem>
    <MenuItem eventKey={2}>link</MenuItem>
</DropdownButton>API
Properties
Dropdown
| Name | Type | Default | Description | 
|---|---|---|---|
| componentClass | element | ButtonGroup | A custom element for this component. | 
| dropup | boolean | false | The menu will open above the dropdown button, instead of below it. | 
| disabled | boolean | false | Whether or not component is disabled. | 
| open | boolean | false | Whether or not the dropdown is visible. | 
| autoOpen | boolean | false | Whether to open the dropdown on mouse over. | 
| pullRight | boolean | false | Align the menu to the right side of the dropdown toggle. | 
| onClose | function(event) | A callback fired when the dropdown closes. | |
| onToggle | function(boolean) | A callback fired when the dropdown wishes to change visibility. Called with the requested open value. | |
| onSelect | function(eventKey, event) | A callback fired when a menu item is selected. | |
| role | string | If 'menuitem', causes the dropdown to behave like a menu item rather than a menu button. | |
| rootCloseEvent | One of:'click''mousedown' | Which event when fired outside the component will cause it to be closed. | 
DropdownToggle
| Name | Type | Default | Description | 
|---|---|---|---|
| componentClass | element | Button | A custom element for this component. | 
| btnSize | One of:'lg''md''sm''xs' | 'md' | |
| btnStyle | One of:'default''primary''emphasis''flat''link' | 'flat' | |
| noCaret | boolean | false | Whether to prevent a caret from being rendered next to the title. | 
| title | node | Title content. | |
| disabled | boolean | false | Whether or not component is disabled. | 
DropdownMenu
| Name | Type | Default | Description | 
|---|---|---|---|
| componentClass | element | ul | A custom element for this component. | 
| onClose | function(event) | A callback fired when the dropdown menu closes. | |
| onSelect | function(eventKey, event) | A callback fired when a menu item is selected. | |
| rootCloseEvent | One of:'click''mousedown' | Which event when fired outside the component will cause it to be closed. | 
DropdownMenuWrapper
| Name | Type | Default | Description | 
|---|---|---|---|
| componentClass | element | div | A custom element for this component. | 
| onClose | function(event) | A callback fired when the dropdown menu closes. | |
| onSelect | function(eventKey, event) | A callback fired when a menu item is selected. | |
| rootCloseEvent | One of:'click''mousedown' | Which event when fired outside the component will cause it to be closed. | 
MenuItem
| Name | Type | Default | Description | 
|---|---|---|---|
| componentClass | element | Button | A custom element for this component. | 
| active | boolean | false | Highlight the menu item as active. | 
| disabled | boolean | false | Disable the menu item, making it unselectable. | 
| divider | boolean | false | Style the menu item as a horizontal rule, providing visual separation between groups of menu items. | 
| eventKey | any | Value passed to the onSelect handler, useful for identifying the selected menu item. | |
| header | boolean | false | Style the menu item as a header label, useful for describing a group of menu items. | 
| onClick | function(event) | Callback fired when the menu item is clicked, even if it is disabled. | |
| open | boolean | false | Whether or not the dropdown submenu is visible. | 
| onClose | function(event) | A callback fired when the dropdown menu closes. | |
| onSelect | function(eventKey, event) | A callback fired when a menu item is selected. | |
| rootCloseEvent | One of:'click''mousedown' | Which event when fired outside the component will cause it to be closed. | 
DropdownButton
| Name | Type | Default | Description | 
|---|---|---|---|
| componentClass | element | ButtonGroup | A custom element for this component. | 
| dropup | boolean | false | The menu will open above the dropdown button, instead of below it. | 
| disabled | boolean | false | Whether or not component is disabled. | 
| pullRight | boolean | false | Align the menu to the right side of the dropdown toggle. | 
| open | boolean | false | Whether or not the dropdown is visible. | 
| onClose | function(event) | A callback fired when the dropdown closes. | |
| onToggle | function(boolean) | A callback fired when the dropdown wishes to change visibility. Called with the requested open value. | |
| onSelect | function(eventKey, event) | A callback fired when a menu item is selected. | |
| role | string | If 'menuitem', causes the dropdown to behave like a menu item rather than a menu button. | |
| rootCloseEvent | One of:'click''mousedown' | Which event when fired outside the component will cause it to be closed. | |
| btnSize | One of:'lg''md''sm''xs' | 'md' | |
| btnStyle | One of:'default''primary''emphasis''flat''link' | 'flat' | |
| title | node | Title content. | |
| noCaret | boolean | false | Whether to prevent a caret from being rendered next to the title. | 
License
MIT
6 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
9 years ago
