Skip to content

Commit aeebe6d

Browse files
feat(core): rename private and public methods and properties (#349)
BREAKING CHANGE
1 parent 753c8ca commit aeebe6d

28 files changed

Lines changed: 356 additions & 362 deletions

examples/js/app.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {
44
autocomplete,
55
AutocompleteSource,
66
getAlgoliaHits,
7-
reverseHighlightItem,
7+
reverseHighlightHit,
88
} from '@algolia/autocomplete-js';
99
import { createRecentSearchesPlugin } from '@algolia/autocomplete-plugin-recent-searches';
1010
import '@algolia/autocomplete-plugin-recent-searches/style';
@@ -40,17 +40,19 @@ autocomplete<Hit<QuerySuggestionHit>>({
4040
}).then(([hits]) => {
4141
return [
4242
{
43-
getInputValue: ({ suggestion }) => suggestion.query,
44-
getSuggestions() {
43+
getItemInputValue({ item }) {
44+
return item.query;
45+
},
46+
getItems() {
4547
return hits;
4648
},
4749
templates: {
4850
item({ item }) {
4951
return `
5052
<div class="item-icon">${searchIcon}</div>
5153
<div>
52-
${reverseHighlightItem({
53-
item,
54+
${reverseHighlightHit({
55+
hit: item,
5456
attribute: 'query',
5557
})}
5658
</div>

packages/autocomplete-core/src/__tests__/getAutocompleteSetters.test.ts

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,43 +1,43 @@
1-
import { createAutocomplete, AutocompleteSuggestion } from '..';
1+
import { createAutocomplete, AutocompleteCollection } from '..';
22

3-
function createSuggestion<TItem extends { label: string }>(
3+
function createCollection<TItem extends { label: string }>(
44
items: TItem[] | TItem[][] = []
5-
): AutocompleteSuggestion<TItem | TItem[]> | AutocompleteSuggestion<TItem[]> {
5+
): AutocompleteCollection<TItem | TItem[]> | AutocompleteCollection<TItem[]> {
66
return {
77
source: {
8-
getInputValue: ({ suggestion }) => suggestion.label,
9-
getSuggestionUrl: () => undefined,
8+
getItemInputValue: ({ item }) => item.label,
9+
getItemUrl: () => undefined,
1010
onHighlight: () => {},
1111
onSelect: () => {},
12-
getSuggestions: () => items,
12+
getItems: () => items,
1313
},
1414
items,
1515
};
1616
}
1717

1818
describe('createAutocomplete', () => {
19-
test('setHighlightedIndex', () => {
19+
test('setSelectedItemId', () => {
2020
const onStateChange = jest.fn();
21-
const { setHighlightedIndex } = createAutocomplete({
21+
const { setSelectedItemId } = createAutocomplete({
2222
getSources: () => [],
2323
onStateChange,
2424
});
2525

26-
setHighlightedIndex(1);
26+
setSelectedItemId(1);
2727

2828
expect(onStateChange).toHaveBeenCalledTimes(1);
2929
expect(onStateChange).toHaveBeenCalledWith(
3030
expect.objectContaining({
31-
state: expect.objectContaining({ highlightedIndex: 1 }),
31+
state: expect.objectContaining({ selectedItemId: 1 }),
3232
})
3333
);
3434

35-
setHighlightedIndex(null);
35+
setSelectedItemId(null);
3636

3737
expect(onStateChange).toHaveBeenCalledTimes(2);
3838
expect(onStateChange).toHaveBeenCalledWith(
3939
expect.objectContaining({
40-
state: expect.objectContaining({ highlightedIndex: null }),
40+
state: expect.objectContaining({ selectedItemId: null }),
4141
})
4242
);
4343
});
@@ -59,21 +59,21 @@ describe('createAutocomplete', () => {
5959
);
6060
});
6161

62-
describe('setSuggestions', () => {
62+
describe('setCollections', () => {
6363
test('default', () => {
6464
const onStateChange = jest.fn();
65-
const { setSuggestions } = createAutocomplete({
65+
const { setCollections } = createAutocomplete({
6666
getSources: () => [],
6767
onStateChange,
6868
});
6969

70-
setSuggestions([createSuggestion([{ label: 'hi' }])]);
70+
setCollections([createCollection([{ label: 'hi' }])]);
7171

7272
expect(onStateChange).toHaveBeenCalledTimes(1);
7373
expect(onStateChange).toHaveBeenCalledWith({
7474
prevState: expect.any(Object),
7575
state: expect.objectContaining({
76-
suggestions: [
76+
collections: [
7777
{
7878
items: [
7979
{
@@ -90,18 +90,18 @@ describe('createAutocomplete', () => {
9090

9191
test('flattens suggestions', () => {
9292
const onStateChange = jest.fn();
93-
const { setSuggestions } = createAutocomplete({
93+
const { setCollections } = createAutocomplete({
9494
openOnFocus: true,
9595
getSources: () => [],
9696
onStateChange,
9797
});
9898

99-
setSuggestions([createSuggestion([[{ label: 'hi' }]])]);
99+
setCollections([createCollection([[{ label: 'hi' }]])]);
100100

101101
expect(onStateChange).toHaveBeenCalledWith({
102102
prevState: expect.any(Object),
103103
state: expect.objectContaining({
104-
suggestions: [
104+
collections: [
105105
expect.objectContaining({
106106
items: [{ label: 'hi', __autocomplete_id: 0 }],
107107
}),

packages/autocomplete-core/src/createAutocomplete.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,9 @@ export function createAutocomplete<
1919
const store = createStore(stateReducer, props, [completionStateEnhancer]);
2020

2121
const {
22-
setHighlightedIndex,
22+
setSelectedItemId,
2323
setQuery,
24-
setSuggestions,
24+
setCollections,
2525
setIsOpen,
2626
setStatus,
2727
setContext,
@@ -38,9 +38,9 @@ export function createAutocomplete<
3838
} = getPropGetters<TItem, TEvent, TMouseEvent, TKeyboardEvent>({
3939
store,
4040
props,
41-
setHighlightedIndex,
41+
setSelectedItemId,
4242
setQuery,
43-
setSuggestions,
43+
setCollections,
4444
setIsOpen,
4545
setStatus,
4646
setContext,
@@ -53,9 +53,9 @@ export function createAutocomplete<
5353
event: new Event('input'),
5454
store,
5555
props,
56-
setHighlightedIndex,
56+
setSelectedItemId,
5757
setQuery,
58-
setSuggestions,
58+
setCollections,
5959
setIsOpen,
6060
setStatus,
6161
setContext,
@@ -67,9 +67,9 @@ export function createAutocomplete<
6767
}
6868

6969
return {
70-
setHighlightedIndex,
70+
setSelectedItemId,
7171
setQuery,
72-
setSuggestions,
72+
setCollections,
7373
setIsOpen,
7474
setStatus,
7575
setContext,

packages/autocomplete-core/src/getAutocompleteSetters.ts

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,31 +8,31 @@ interface GetAutocompleteSettersOptions<TItem> {
88
export function getAutocompleteSetters<TItem>({
99
store,
1010
}: GetAutocompleteSettersOptions<TItem>) {
11-
const setHighlightedIndex: AutocompleteApi<TItem>['setHighlightedIndex'] = (
11+
const setSelectedItemId: AutocompleteApi<TItem>['setSelectedItemId'] = (
1212
value
1313
) => {
14-
store.send('setHighlightedIndex', value);
14+
store.send('setSelectedItemId', value);
1515
};
1616

1717
const setQuery: AutocompleteApi<TItem>['setQuery'] = (value) => {
1818
store.send('setQuery', value);
1919
};
2020

21-
const setSuggestions: AutocompleteApi<TItem>['setSuggestions'] = (
21+
const setCollections: AutocompleteApi<TItem | TItem[]>['setCollections'] = (
2222
rawValue
2323
) => {
2424
let baseItemId = 0;
25-
const value = rawValue.map((suggestion) => ({
26-
...suggestion,
25+
const value = rawValue.map((collection) => ({
26+
...collection,
2727
// We flatten the stored items to support calling `getAlgoliaHits`
2828
// from the source itself.
29-
items: flatten(suggestion.items).map((item) => ({
29+
items: flatten(collection.items).map((item) => ({
3030
...item,
3131
__autocomplete_id: baseItemId++,
3232
})),
3333
}));
3434

35-
store.send('setSuggestions', value);
35+
store.send('setCollections', value);
3636
};
3737

3838
const setIsOpen: AutocompleteApi<TItem>['setIsOpen'] = (value) => {
@@ -48,9 +48,9 @@ export function getAutocompleteSetters<TItem>({
4848
};
4949

5050
return {
51-
setHighlightedIndex,
51+
setSelectedItemId,
5252
setQuery,
53-
setSuggestions,
53+
setCollections,
5454
setIsOpen,
5555
setStatus,
5656
setContext,

packages/autocomplete-core/src/getCompletion.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import { InternalAutocompleteOptions, AutocompleteState } from './types';
2-
import { getHighlightedItem } from './utils';
2+
import { getSelectedItem } from './utils';
33

44
interface GetCompletionProps<TItem> {
55
state: AutocompleteState<TItem>;
@@ -13,28 +13,30 @@ export function getCompletion<TItem>({
1313
if (
1414
props.enableCompletion === false ||
1515
state.isOpen === false ||
16-
state.highlightedIndex === null ||
16+
state.selectedItemId === null ||
1717
state.status === 'stalled'
1818
) {
1919
return null;
2020
}
2121

22-
const { itemValue } = getHighlightedItem({ state })!;
22+
const { itemInputValue } = getSelectedItem({ state })!;
2323

2424
// The completion should appear only if the _first_ characters of the query
25-
// match with the suggestion.
25+
// match with the item.
2626
if (
2727
state.query.length > 0 &&
28-
itemValue.toLocaleLowerCase().indexOf(state.query.toLocaleLowerCase()) === 0
28+
itemInputValue
29+
.toLocaleLowerCase()
30+
.indexOf(state.query.toLocaleLowerCase()) === 0
2931
) {
30-
// If the query typed has a different case than the suggestion, we want
32+
// If the query typed has a different case than the item, we want
3133
// to show the completion matching the case of the query. This makes both
3234
// strings overlap correctly.
3335
// Example:
3436
// - query: 'Gui'
35-
// - suggestion: 'guitar'
37+
// - item: 'guitar'
3638
// => completion: 'Guitar'
37-
const completion = state.query + itemValue.slice(state.query.length);
39+
const completion = state.query + itemInputValue.slice(state.query.length);
3840

3941
if (completion === state.query) {
4042
return null;

packages/autocomplete-core/src/getDefaultProps.ts

Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export function getDefaultProps<TItem>(
2020
openOnFocus: false,
2121
placeholder: '',
2222
autoFocus: false,
23-
defaultHighlightedIndex: null,
23+
defaultSelectedItemId: null,
2424
enableCompletion: false,
2525
stallThreshold: 300,
2626
environment,
@@ -32,10 +32,10 @@ export function getDefaultProps<TItem>(
3232
id: props.id ?? generateAutocompleteId(),
3333
// The following props need to be deeply defaulted.
3434
initialState: {
35-
highlightedIndex: null,
35+
selectedItemId: null,
3636
query: '',
3737
completion: null,
38-
suggestions: [],
38+
collections: [],
3939
isOpen: false,
4040
status: 'idle',
4141
statusContext: {},
@@ -62,9 +62,7 @@ export function getDefaultProps<TItem>(
6262
getNormalizedSources(getSources!, options)
6363
)
6464
)
65-
.then((nested) =>
66-
flatten(nested)
67-
)
65+
.then((nested) => flatten(nested))
6866
.then((sources) =>
6967
sources.map((source) => ({
7068
...source,
@@ -80,22 +78,18 @@ export function getDefaultProps<TItem>(
8078
);
8179
},
8280
navigator: {
83-
navigate({ suggestionUrl }) {
84-
environment.location.assign(suggestionUrl);
81+
navigate({ itemUrl }) {
82+
environment.location.assign(itemUrl);
8583
},
86-
navigateNewTab({ suggestionUrl }) {
87-
const windowReference = environment.open(
88-
suggestionUrl,
89-
'_blank',
90-
'noopener'
91-
);
84+
navigateNewTab({ itemUrl }) {
85+
const windowReference = environment.open(itemUrl, '_blank', 'noopener');
9286

9387
if (windowReference) {
9488
windowReference.focus();
9589
}
9690
},
97-
navigateNewWindow({ suggestionUrl }) {
98-
environment.open(suggestionUrl, '_blank', 'noopener');
91+
navigateNewWindow({ itemUrl }) {
92+
environment.open(itemUrl, '_blank', 'noopener');
9993
},
10094
...props.navigator,
10195
},

0 commit comments

Comments
 (0)