Skip to content
This repository has been archived by the owner on Jun 11, 2021. It is now read-only.

Commit

Permalink
feat(autoFocus): add support for autoFocus option
Browse files Browse the repository at this point in the history
  • Loading branch information
francoischalifour committed Feb 11, 2020
1 parent e863791 commit 4d3f792
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 12 deletions.
15 changes: 12 additions & 3 deletions packages/autocomplete-core/autocompleteSetters.ts
Original file line number Diff line number Diff line change
@@ -1,11 +1,20 @@
import { stateReducer } from './stateReducer';

import { AutocompleteInstance, AutocompleteItem } from './types';
import {
AutocompleteInstance,
AutocompleteStore,
RequiredAutocompleteOptions,
} from './types';

export function getAutocompleteSetters<TItem extends AutocompleteItem>({
interface GetAutocompleteSettersOptions<TItem> {
store: AutocompleteStore<TItem>;
props: RequiredAutocompleteOptions<TItem>;
}

export function getAutocompleteSetters<TItem>({
store,
props,
}) {
}: GetAutocompleteSettersOptions<TItem>) {
const setHighlightedIndex: AutocompleteInstance<
TItem
>['setHighlightedIndex'] = value => {
Expand Down
1 change: 1 addition & 0 deletions packages/autocomplete-core/defaultProps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ export function getDefaultProps<TItem>(
id: generateAutocompleteId(),
minLength: 1,
placeholder: '',
autoFocus: false,
defaultHighlightedIndex: 0,
showCompletion: false,
stallThreshold: 300,
Expand Down
16 changes: 12 additions & 4 deletions packages/autocomplete-core/propGetters.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,17 @@ import {
GetItemProps,
GetLabelProps,
GetMenuProps,
AutocompleteStore,
RequiredAutocompleteOptions,
AutocompleteSetters,
} from './types';

export function getPropGetters({
interface GetPropGettersOptions<TItem> extends AutocompleteSetters<TItem> {
store: AutocompleteStore<TItem>;
props: RequiredAutocompleteOptions<TItem>;
}

export function getPropGetters<TItem>({
store,
props,
setHighlightedIndex,
Expand All @@ -21,7 +29,7 @@ export function getPropGetters({
setIsOpen,
setStatus,
setContext,
}) {
}: GetPropGettersOptions<TItem>) {
const getRootProps: GetRootProps = rest => {
return {
role: 'combobox',
Expand Down Expand Up @@ -106,7 +114,7 @@ export function getPropGetters({
return {
'aria-autocomplete': 'list',
'aria-activedescendant':
store.getState().isOpen && props.highlightedIndex >= 0
store.getState().isOpen && store.getState().highlightedIndex >= 0
? `${props.id}-item-${store.getState().highlightedIndex}`
: null,
'aria-controls': store.getState().isOpen ? `${props.id}-menu` : null,
Expand All @@ -118,7 +126,7 @@ export function getPropGetters({
autoCapitalize: 'off',
spellCheck: false,
autofocus: props.autoFocus,
placeholder: props.showCompletion ? '' : props.placeholder,
placeholder: props.placeholder,
// @TODO: see if this accessibility attribute is necessary
// 'aria-expanded': store.getStore().isOpen,
onInput: (event: InputEvent) => {
Expand Down
11 changes: 7 additions & 4 deletions packages/autocomplete-core/types.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
export type StateUpdater<TState> = (value: TState) => void;

export interface AutocompleteItem {
__autocomplete_id: number;
}

type SuggestionsOptions = any;

export type AutocompleteSource = any;
Expand Down Expand Up @@ -228,6 +224,12 @@ export interface AutocompleteOptions<TItem> {
* The text that appears in the search box input when there is no query.
*/
placeholder?: string;
/**
* Whether to focus the search box when the page is loaded.
*
* @default false
*/
autoFocus?: boolean;
/**
* The default item index to pre-select.
*
Expand Down Expand Up @@ -298,6 +300,7 @@ export interface RequiredAutocompleteOptions<TItem> {
id: string;
onStateChange<TItem>(props: { state: AutocompleteState<TItem> }): void;
placeholder: string;
autoFocus: boolean;
defaultHighlightedIndex: number;
showCompletion: boolean;
minLength: number;
Expand Down
1 change: 0 additions & 1 deletion packages/autocomplete-react/SearchBox.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ export function SearchBox(props: SearchBoxProps) {
{...props.getInputProps({
ref: props.onInputRef,
inputElement: (props.onInputRef as any).current,
placeholder: props.placeholder,
type: 'search',
maxLength: '512',
})}
Expand Down

0 comments on commit 4d3f792

Please sign in to comment.