Skip to content

Commit 999fd62

Browse files
authored
Merge pull request #490 from catho/QTM-468
feat(QTM-468): Added property to set an initial value for autocomplete
2 parents 6585127 + 185bc80 commit 999fd62

File tree

3 files changed

+20
-9
lines changed

3 files changed

+20
-9
lines changed

Diff for: components/AutoComplete/AutoComplete.jsx

+12-9
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,7 @@ const AutoComplete = ({
146146
id,
147147
name,
148148
label,
149+
value,
149150
error,
150151
disabled,
151152
helperText,
@@ -157,7 +158,7 @@ const AutoComplete = ({
157158
required,
158159
skin,
159160
}) => {
160-
const [userTypedValue, setUserTypedValue] = useState('');
161+
const [userTypedValue, setUserTypedValue] = useState(value);
161162
const [filterSuggestions, setFilterSuggestions] = useState(suggestions);
162163
const [filterSuggestionsLength, setFilterSuggestionsLength] = useState(
163164
filterSuggestions.length,
@@ -174,24 +175,24 @@ const AutoComplete = ({
174175
}
175176
${cursor + 1} de ${filterSuggestionsLength} está destacado`;
176177

177-
const filterItems = value =>
178+
const filterItems = currentValue =>
178179
suggestions.filter(suggestion => {
179180
let option = normalizeChars(suggestion.toLowerCase());
180181
option = normalizeChars(option);
181-
return option.indexOf(normalizeChars(value.toLowerCase())) > -1;
182+
return option.indexOf(normalizeChars(currentValue.toLowerCase())) > -1;
182183
});
183184

184-
const handleFilter = value => {
185-
const filteredValues = filterItems(value);
185+
const handleFilter = currentValue => {
186+
const filteredValues = filterItems(currentValue);
186187
setShowSuggestions(!!filteredValues.length);
187188
setFilterSuggestions(filteredValues);
188189
};
189190

190-
const handleChange = value => {
191-
setUserTypedValue(value);
192-
onChange(value);
191+
const handleChange = currentValue => {
192+
setUserTypedValue(currentValue);
193+
onChange(currentValue);
193194
setCursor(0);
194-
handleFilter(value);
195+
handleFilter(currentValue);
195196
};
196197

197198
const handleClickOutside = event => {
@@ -393,6 +394,7 @@ AutoComplete.propTypes = {
393394
disabled: PropTypes.bool,
394395
/** Displays a label text that describes the field */
395396
label: PropTypes.string,
397+
value: PropTypes.string,
396398
name: PropTypes.string,
397399
placeholder: PropTypes.string,
398400
/** Callback function to receive what the user is typing */
@@ -413,6 +415,7 @@ AutoComplete.defaultProps = {
413415
id: '',
414416
name: '',
415417
label: '',
418+
value: '',
416419
helperText: '',
417420
error: '',
418421
disabled: false,

Diff for: components/AutoComplete/AutoComplete.unit.test.jsx

+7
Original file line numberDiff line numberDiff line change
@@ -198,4 +198,11 @@ describe('AutoComplete', () => {
198198
screen.getByRole('option', { name: 'melancia' }),
199199
).toBeInTheDocument();
200200
});
201+
202+
it('Should have a value when prop value is set', () => {
203+
const initialValue = 'initial value';
204+
render(<AutoComplete value={initialValue} suggestions={[]} />);
205+
const autoCompleteInput = screen.getByRole('combobox');
206+
expect(autoCompleteInput).toHaveAttribute('value', initialValue);
207+
});
201208
});

Diff for: components/AutoComplete/index.d.ts

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ export interface AutoCompleteProps {
99
id?: string;
1010
name?: string;
1111
label?: string;
12+
value?: string;
1213
helperText?: string;
1314
error?: string;
1415
disabled?: boolean;

0 commit comments

Comments
 (0)