MCPcopy
hub / github.com/algolia/autocomplete / autocomplete

Function autocomplete

packages/autocomplete-js/src/autocomplete.ts:33–417  ·  view source on GitHub ↗
(
  options: AutocompleteOptions<TItem>
)

Source from the content-addressed store, hash-verified

31let instancesCount = 0;
32
33export function autocomplete<TItem extends BaseItem>(
34 options: AutocompleteOptions<TItem>
35): AutocompleteApi<TItem> {
36 const { runEffect, cleanupEffects, runEffects } = createEffectWrapper();
37 const { reactive, runReactives } = createReactiveWrapper();
38
39 const hasNoResultsSourceTemplateRef = createRef(false);
40 const optionsRef = createRef(options);
41 const onStateChangeRef =
42 createRef<AutocompleteOptions<TItem>['onStateChange']>(undefined);
43 const props = reactive(() => getDefaultOptions(optionsRef.current));
44 const isDetached = reactive(
45 () =>
46 props.value.core.environment.matchMedia(
47 props.value.renderer.detachedMediaQuery
48 ).matches
49 );
50
51 const autocomplete = reactive(() =>
52 createAutocomplete<TItem>({
53 ...props.value.core,
54 onStateChange(params) {
55 hasNoResultsSourceTemplateRef.current = params.state.collections.some(
56 (collection) =>
57 (collection.source as AutocompleteSource<TItem>).templates.noResults
58 );
59 onStateChangeRef.current?.(params as any);
60 props.value.core.onStateChange?.(params as any);
61 },
62 shouldPanelOpen:
63 optionsRef.current.shouldPanelOpen ||
64 (({ state }) => {
65 if (isDetached.value) {
66 return true;
67 }
68
69 const hasItems = getItemsCount(state) > 0;
70
71 if (!props.value.core.openOnFocus && !state.query) {
72 return hasItems;
73 }
74
75 const hasNoResultsTemplate = Boolean(
76 hasNoResultsSourceTemplateRef.current ||
77 props.value.renderer.renderNoResults
78 );
79
80 return (!hasItems && hasNoResultsTemplate) || hasItems;
81 }),
82 __autocomplete_metadata: {
83 userAgents,
84 options,
85 },
86 })
87 );
88 const lastStateRef = createRef<AutocompleteState<TItem>>({
89 collections: [],
90 completion: null,

Callers 15

classNames.test.tsFile · 0.90
metadata.test.tsFile · 0.90
container.test.tsFile · 0.90
render.test.tsFile · 0.90
api.test.tsFile · 0.90
templates.test.tsxFile · 0.90

Calls 15

createEffectWrapperFunction · 0.90
createReactiveWrapperFunction · 0.90
createRefFunction · 0.90
getDefaultOptionsFunction · 0.90
createAutocompleteFunction · 0.90
getItemsCountFunction · 0.90
createAutocompleteDomFunction · 0.90
setPropertiesFunction · 0.90
debounceFunction · 0.90
warnFunction · 0.90
reactiveFunction · 0.85
runEffectFunction · 0.85

Tested by 1

startAutocompleteFunction · 0.72