@afonso360/react-input-enhancements v0.4.16
react-input-enhancements
Set of enhancements for input control
The intention of creating this library was to bring input component out of the dropdown/autocomplete/whatever code, so it could be easily replaced with your custom component, and also to split independent functionality into different components, which could be combined with each other (still not quite sure it was worth it, though).
There are currently five components:
All components accept function as a child, providing props as a first argument, which you should pass to your input component. If there is nothing else except input, it could be passed as a child directly (for simplicity).
<Combobox /> is a combination of Dropdown, Autosize and/or Autocomplete components.
Demo
http://alexkuz.github.io/react-input-enhancements/
Autosize
Autosize resizes component to fit it's content.
<Autosize defaultValue={value}
minWidth={100}>
{(inputProps, { width }) =>
<input type='text' {...inputProps} />
}
</Autosize>Autosize Props
valuestring - Input value (for a controlled component)defaultValuestring - Initial value (for a uncontrolled component)getInputElementfunction() - Optional callback that provides input DOM elementdefaultWidthnumber - Minimum input width
Autocomplete
Autocomplete prompts a value based on provided options (see also react-autocomplete for the same behaviour)
<Autocomplete defaultValue={value}
options={options}>
{(inputProps, { matchingText, value }) =>
<input type='text' {...inputProps} />
}
</Autocomplete>Autocomplete Props
valuestring - Input value (for a controlled component)defaultValuestring - Initial value (for a uncontrolled component)getInputElementfunction - Optional callback that provides input DOM elementoptionsarray - Array of options that are used to predict a value
options is an array of strings or objects with a text or value string properties.
Dropdown
Dropdown shows a dropdown with a (optionally filtered) list of suitable options.
<Dropdown defaultValue={value}
options={options}>
{(inputProps, { textValue }) =>
<input type='text' {...inputProps} />
}
</Dropdown>Dropdown Props
valuestring - Input value (for a controlled component)defaultValuestring - Initial value (for a uncontrolled component)optionsarray - Array of shown optionsonRenderOptionfunction(className, style, option) - Renders option in listonRenderCaretfunction(className, style, isActive, children) - Renders a caretonRenderListfunction(className, style, isActive, listShown, children, header) - Renders list of optionsonRenderListHeaderfunction(allCount, shownCount, staticCount) - Renders list headerdropdownClassNamestring - Dropdown root element class namedropdownPropsobject - Custom props passed to dropdown root elementoptionFiltersarray - List of option filters
options is an array of strings or objects with a shape:
value- "real" value of on optiontext- text used as input value when option is selectedlabel- text or component rendered in liststatic- option is never filtered out or sorteddisabled- option is not selectable
null option is rendered as a separator
optionFilters is an array of filters for options (for convenience). By default, these filters are used:
filters.filterByMatchingTextWithThreshold(20)- filters options by matching value, if options length is more than 20filters.sortByMatchingText- sorting by matching valuefilters.limitBy(100)- cuts options longer than 100filters.notFoundMessage('No matches found')- shows option with 'No matches found' label if all options are filtered outfilters.filterRedudantSeparators- removes redudant separators (duplicated or at the begin/end of the list)
Mask
Mask formats input value.
<Mask defaultValue={value}
pattern='0000-0000-0000-0000'>
{(inputProps, { value }) =>
<input type='text' {...inputProps} />
}
</Mask>Mask Props
valuestring - Input value (for a controlled component)defaultValuestring - Initial value (for a uncontrolled component)getInputElementfunction() - Optional callback that provides input DOM elementpatternstring - String formatting pattern. Only '0' (digit) or 'a' (letter) pattern chars are currently supported.emptyCharstring - Character used as an empty symbol (' 'by default)placeholderstring - If set, it is shown whenunmaskedValueis emptyonUnmaskedValueChangefunction(text) - Fires when value is changed, providing unmasked value
DatePicker
DatePicker uses Mask to format date and shows calendar (react-date-picker by default) in popup.
<DatePicker defaultValue={moment(value).format('ddd DD/MM/YYYY')}
placeholder={moment().format('ddd DD/MM/YYYY')}
pattern='ddd DD/MM/YYYY'
locale='en'>
{(inputProps, { value }) =>
<input type='text' {...inputProps} />
}
</DatePicker>DatePicker Props
valuestring - Input value (for a controlled component)defaultValuestring - Initial value (for a uncontrolled component)patternstring - Date formatting pattern. For now, only these tokens are supported:DD- day of monthMM- monthYYYY- yearddd- day of week (not editable)
placeholderstring - If set, it is shown whenunmaskedValueis emptylocalestring - Date localeonRenderCalendarfunction(className, style, date, isActive, popupShown, onSelect, locale) - Returns calendar component shown in popup (react-date-picker by default)onChangefunction(date) - Fires when date is selected, providing moment.js object
Combobox
Combobox combines Dropdown, Autosize and/or Autocomplete components.
<Combobox defaultValue={value}
options={options}
autosize
autocomplete>
{(inputProps, { matchingText, width }) =>
<input type='text' {...inputProps} />
}
</Combobox>Autosize and Autocomlete are enabled with corresponding bool props, other properties are proxied to Dropdown component.
See demo for code examples.
Some other (probably better) implementations
- react-autocomplete - Dropdown with autocompletion by Ryan Florence (that led me to create this library)
- react-maskedinput - More advanced masked input by Jonny Buchanan