diff --git a/frontend/components/forms/fields/Dropdown/Dropdown.jsx b/frontend/components/forms/fields/Dropdown/Dropdown.jsx index ed993121b3..af0744a995 100644 --- a/frontend/components/forms/fields/Dropdown/Dropdown.jsx +++ b/frontend/components/forms/fields/Dropdown/Dropdown.jsx @@ -1,53 +1,38 @@ import React, { Component, PropTypes } from 'react'; +import Select from 'react-select'; import { noop } from 'lodash'; import dropdownOptionInterface from '../../../../interfaces/dropdownOption'; -const baseClass = 'kolide-dropdown'; - class Dropdown extends Component { static propTypes = { - options: PropTypes.arrayOf(dropdownOptionInterface), + options: PropTypes.arrayOf(dropdownOptionInterface).isRequired, onSelect: PropTypes.func, className: PropTypes.string, + placeholder: PropTypes.string, + value: PropTypes.string, + clearable: PropTypes.bool, }; static defaultProps = { onSelect: noop, + clearable: false, + placeholder: 'Select One...', }; - onOptionClick = (evt) => { - evt.preventDefault(); - - const { onSelect } = this.props; - - onSelect(evt); - - return false; - } - - renderOption = (option) => { - const { disabled = false, value, text } = option; - - return ( - - ); - } - render () { - const { options, className } = this.props; - const { onOptionClick, renderOption } = this; + const { options, className, placeholder, value, clearable, onSelect } = this.props; return ( -
- -
+ - {osqueryTables.map((table) => { - return ; - })} - - + ); } diff --git a/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.tests.jsx b/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.tests.jsx index facdde03f8..6b92ae7c0e 100644 --- a/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.tests.jsx +++ b/frontend/components/side_panels/QuerySidePanel/QuerySidePanel.tests.jsx @@ -2,11 +2,8 @@ import React from 'react'; import expect, { createSpy, restoreSpies } from 'expect'; import { mount } from 'enzyme'; -import helpers from '../../../test/helpers'; import QuerySidePanel from './QuerySidePanel'; -const { fillInFormInput } = helpers; - describe('QuerySidePanel - component', () => { afterEach(restoreSpies); @@ -45,15 +42,14 @@ describe('QuerySidePanel - component', () => { it('renders the selected table in the dropdown', () => { const component = mount(); - const tableSelect = component.find('.kolide-dropdown'); + const tableSelect = component.find('Dropdown'); expect(tableSelect.prop('value')).toEqual('users'); }); it('calls the onOsqueryTableSelect prop when a new table is selected in the dropdown', () => { const component = mount(); - const tableSelect = component.find('.kolide-dropdown'); - fillInFormInput(tableSelect, 'groups'); + component.node.onSelectTable({ value: 'groups' }); expect(onOsqueryTableSelect).toHaveBeenCalledWith('groups'); }); diff --git a/frontend/interfaces/dropdownOption.js b/frontend/interfaces/dropdownOption.js index 325ef9c445..b289527a1f 100644 --- a/frontend/interfaces/dropdownOption.js +++ b/frontend/interfaces/dropdownOption.js @@ -2,6 +2,6 @@ import { PropTypes } from 'react'; export default PropTypes.shape({ disabled: PropTypes.bool, - text: PropTypes.string, + label: PropTypes.string, value: PropTypes.string, }); diff --git a/frontend/pages/Admin/UserManagementPage/UserBlock/UserBlock.jsx b/frontend/pages/Admin/UserManagementPage/UserBlock/UserBlock.jsx index 76ce768152..550f1a920c 100644 --- a/frontend/pages/Admin/UserManagementPage/UserBlock/UserBlock.jsx +++ b/frontend/pages/Admin/UserManagementPage/UserBlock/UserBlock.jsx @@ -19,24 +19,22 @@ class UserBlock extends Component { static userActionOptions = (currentUser, user, invite) => { const disableActions = currentUser.id === user.id; const inviteActions = [ - { text: 'Actions...', value: '' }, - { text: 'Revoke Invitation', value: 'revert_invitation' }, + { label: 'Revoke Invitation', value: 'revert_invitation' }, ]; const userEnableAction = user.enabled - ? { disabled: disableActions, text: 'Disable Account', value: 'disable_account' } - : { text: 'Enable Account', value: 'enable_account' }; + ? { disabled: disableActions, label: 'Disable Account', value: 'disable_account' } + : { label: 'Enable Account', value: 'enable_account' }; const userPromotionAction = user.admin - ? { disabled: disableActions, text: 'Demote User', value: 'demote_user' } - : { text: 'Promote User', value: 'promote_user' }; + ? { disabled: disableActions, label: 'Demote User', value: 'demote_user' } + : { label: 'Promote User', value: 'promote_user' }; if (invite) return inviteActions; return [ - { text: 'Actions...', value: '' }, userEnableAction, userPromotionAction, - { text: 'Require Password Reset', value: 'reset_password' }, - { text: 'Modify Details', value: 'modify_details' }, + { label: 'Require Password Reset', value: 'reset_password' }, + { label: 'Modify Details', value: 'modify_details' }, ]; }; @@ -70,9 +68,8 @@ class UserBlock extends Component { return onEditUser(user, updatedUser); } - onUserActionSelect = ({ target }) => { + onUserActionSelect = ({ value: action }) => { const { onSelect, user } = this.props; - const { value: action } = target; if (action === 'modify_details') { this.setState({ @@ -93,7 +90,7 @@ class UserBlock extends Component { return (