Skip to content

Commit fd75da0

Browse files
committed
fix(eds-core-react): resolve runtime errors in Autocomplete and DatePicker (#4619)
- Wrap showPopover/hidePopover calls in try-catch to handle timing issue where native Popover API is called before React applies the popover attribute - Replace React 19-only use() with useContext() in AutocompleteContext for React 18 compatibility
1 parent 21ff128 commit fd75da0

3 files changed

Lines changed: 16 additions & 10 deletions

File tree

packages/eds-core-react/src/components/Autocomplete/AutocompleteContext.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
import { createContext, use } from 'react'
1+
import { createContext, useContext } from 'react'
22
import { useAutocomplete } from './useAutocomplete'
33

44
export const AutocompleteContext = createContext<ReturnType<
55
typeof useAutocomplete
66
> | null>(null)
77

88
export const useAutocompleteContext = () => {
9-
const context = use(AutocompleteContext)
9+
const context = useContext(AutocompleteContext)
1010
if (!context) {
1111
throw new Error(
1212
'Autocomplete compound components must be used within an Autocomplete component',

packages/eds-core-react/src/components/Autocomplete/OptionList.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,10 +43,14 @@ export const OptionList = ({
4343

4444
// MARK: popover toggle
4545
useIsomorphicLayoutEffect(() => {
46-
if (isOpen) {
47-
refs.floating.current?.showPopover()
48-
} else {
49-
refs.floating.current?.hidePopover()
46+
try {
47+
if (isOpen) {
48+
refs.floating.current?.showPopover()
49+
} else {
50+
refs.floating.current?.hidePopover()
51+
}
52+
} catch {
53+
// Element may not have popover attribute applied yet
5054
}
5155
}, [isOpen, refs.floating])
5256

packages/eds-core-react/src/components/Popover/Popover.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -167,12 +167,14 @@ export const Popover = forwardRef<HTMLDivElement, PopoverProps>(
167167

168168
useEffect(() => {
169169
if (!elements.floating) return
170-
if (open) {
171-
if (elements.floating.isConnected) {
170+
try {
171+
if (open) {
172172
elements.floating.showPopover()
173+
} else {
174+
elements.floating.hidePopover()
173175
}
174-
} else {
175-
elements.floating.hidePopover()
176+
} catch {
177+
// Element may not have popover attribute applied yet
176178
}
177179
}, [open, elements.floating])
178180

0 commit comments

Comments
 (0)