autocomplete icon indicating copy to clipboard operation
autocomplete copied to clipboard

TypeError: Cannot read properties of null (onKeyDown.js)

Open amureki opened this issue 1 year ago • 2 comments

Description

Greetings dear fellows.

We did set up Algolia search autocomplete with the help of @algolia/autocomplete-js. It is quite similar to what is defined in the query suggestions sandbox example from your docs.

It is rolled out in one of our services and works, however we are noticing cryptic errors coming from the library code. We cannot reproduce it and it happens quite occasionally. Sentry gives us the following traceback:

TypeError: Cannot read properties of null (reading 'item')
  at <anonymous>(./node_modules/@algolia/autocomplete-core/dist/esm/onKeyDown.js:116:20)
  at <object>.onKeyDown(./node_modules/@algolia/autocomplete-core/dist/esm/getPropGetters.js:179:9)
  at <object>.onKeyDown(./node_modules/@algolia/autocomplete-js/dist/esm/elements/Input.js:36:18)
  at eventProxy(./node_modules/@algolia/autocomplete-js/dist/esm/utils/setProperties.js:30:25)

Reproduction

Couldn't yet.

Expected behavior

No errors coming from the library.

Environment

  • OS: Windows >= 10
  • Browser: Edge 122.0.0, Firefox 124.0, Chrome 122.0.0, Edge 120.0.0
  • Autocomplete version: 1.17.0

amureki avatar Apr 10 '24 07:04 amureki

To start unpacking this behaviour, it seems to be linked to this line: https://github.com/algolia/autocomplete/blob/next/packages/autocomplete-core/src/onKeyDown.ts#L146 where somehow getActiveItem returns null, although I don't know how that can happen

Haroenv avatar Apr 15 '24 14:04 Haroenv

Analysis

  • The function getCollectionFromActiveItemId attempts to find the collection containing the active item based on the activeItemId. If no collection contains this item, the function returns undefined, leading getActiveItem to return null
  • Similarly, if the activeItemId is invalid the function can fail to find the active item and return null.

Possible Fix

  • By Validate activeItemId Before Using It.
  • Null Check in Calling Code: In onKeyDown.js and other places where getActiveItem() is used.

I would like to open a PR for this issue. Could you please assign it to me? @Haroenv

dineshsutihar avatar Oct 11 '24 06:10 dineshsutihar