From 431268ca09d7d181fbea8d583e39dbe7d6999f3a Mon Sep 17 00:00:00 2001 From: Silviu Avram Date: Mon, 10 Dec 2018 13:17:22 +0200 Subject: [PATCH 01/62] crude implementation --- ...opdownExampleSingleSelection.shorthand.tsx | 50 +++++++++++++++++++ .../components/Dropdown/Types/index.tsx | 5 ++ src/components/Dropdown/Dropdown.tsx | 48 ++++++++++++++---- .../components/Dropdown/dropdownStyles.ts | 16 ++++++ 4 files changed, 109 insertions(+), 10 deletions(-) create mode 100644 docs/src/examples/components/Dropdown/Types/DropdownExampleSingleSelection.shorthand.tsx diff --git a/docs/src/examples/components/Dropdown/Types/DropdownExampleSingleSelection.shorthand.tsx b/docs/src/examples/components/Dropdown/Types/DropdownExampleSingleSelection.shorthand.tsx new file mode 100644 index 0000000000..e6968e8313 --- /dev/null +++ b/docs/src/examples/components/Dropdown/Types/DropdownExampleSingleSelection.shorthand.tsx @@ -0,0 +1,50 @@ +import * as React from 'react' +import { Dropdown } from '@stardust-ui/react' + +const inputItems = [ + 'Bruce Wayne', + 'Natasha Romanoff', + 'Steven Strange', + 'Alfred Pennyworth', + `Scarlett O'Hara`, + 'Imperator Furiosa', + 'Bruce Banner', + 'Peter Parker', + 'Selina Kyle', +] + +class DropdownExample extends React.Component { + render() { + return ( + + ) + } +} + +const getA11yStatusMessage = ({ + isOpen, + itemToString, + previousResultCount, + resultCount, + selectedItem, +}) => { + if (!isOpen) { + return selectedItem ? itemToString(selectedItem) : '' + } + if (!resultCount) { + return 'No results are available.' + } + if (resultCount !== previousResultCount) { + return `${resultCount} result${ + resultCount === 1 ? ' is' : 's are' + } available, use up and down arrow keys to navigate. Press Enter key to select.` + } + return '' +} + +export default DropdownExample diff --git a/docs/src/examples/components/Dropdown/Types/index.tsx b/docs/src/examples/components/Dropdown/Types/index.tsx index 6a93a98f50..dc2a7499ef 100644 --- a/docs/src/examples/components/Dropdown/Types/index.tsx +++ b/docs/src/examples/components/Dropdown/Types/index.tsx @@ -4,6 +4,11 @@ import ExampleSection from 'docs/src/components/ComponentDoc/ExampleSection' const Types = () => ( + extends DownshiftA11yStatusMessageOptions { @@ -210,11 +211,11 @@ export default class Dropdown extends AutoControlledComponent< {({ @@ -233,13 +234,14 @@ export default class Dropdown extends AutoControlledComponent< onClick={this.handleContainerClick.bind(this, isOpen)} > {multiple && this.renderSelectedItems(styles)} - {search && - this.renderSearchInput( - getRootProps, - getInputProps, - highlightedIndex, - selectItemAtIndex, - )} + {search + ? this.renderSearchInput( + getRootProps, + getInputProps, + highlightedIndex, + selectItemAtIndex, + ) + : this.renderTriggerButton(getToggleButtonProps, styles)} {toggleButton && this.renderToggleButton(getToggleButtonProps, styles, isOpen)} {this.renderItemsList( styles, @@ -257,6 +259,32 @@ export default class Dropdown extends AutoControlledComponent< ) } + private renderTriggerButton( + getToggleButtonProps: (options?: GetToggleButtonPropsOptions) => any, + styles: ComponentSlotStylesInput, + ): JSX.Element { + const { placeholder, itemToString } = this.props + const { value } = this.state + return ( +