@@ -3,6 +3,7 @@ import React, {
33 ElementType ,
44 forwardRef ,
55 HTMLAttributes ,
6+ ReactNode ,
67 RefObject ,
78 useEffect ,
89 useRef ,
@@ -87,6 +88,16 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
8788 visible ?: boolean
8889}
8990
91+ const PopperManagerWrapper = ( {
92+ children,
93+ popper,
94+ } : {
95+ children : ReactNode
96+ popper : boolean
97+ } ) => {
98+ return popper ? < Manager > { children } </ Manager > : < > { children } </ >
99+ }
100+
90101interface ContextProps extends CDropdownProps {
91102 // eslint-disable-next-line @typescript-eslint/no-explicit-any
92103 dropdownToggleRef : RefObject < any > | undefined
@@ -149,38 +160,30 @@ export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownPro
149160 ! _visible && onHide && onHide ( )
150161 } , [ _visible ] )
151162
152- const DropdownContent = ( ) => {
153- return variant === 'input-group' ? (
154- < > { children } </ >
155- ) : (
156- < Component
157- className = { classNames (
158- variant === 'nav-item' ? 'nav-item dropdown' : variant ,
159- {
160- 'dropdown-center' : direction === 'center' ,
161- 'dropup dropup-center' : direction === 'dropup-center' ,
162- direction : direction && direction !== 'center' && direction !== 'dropup-center' ,
163- show : _visible ,
164- } ,
165- className ,
166- ) }
167- { ...rest }
168- ref = { forkedRef }
169- >
170- { children }
171- </ Component >
172- )
173- }
174-
175163 return (
176164 < CDropdownContext . Provider value = { contextValues } >
177- { popper ? (
178- < Manager >
179- < DropdownContent />
180- </ Manager >
181- ) : (
182- < DropdownContent />
183- ) }
165+ < PopperManagerWrapper popper = { popper } >
166+ { variant === 'input-group' ? (
167+ < > { children } </ >
168+ ) : (
169+ < Component
170+ className = { classNames (
171+ variant === 'nav-item' ? 'nav-item dropdown' : variant ,
172+ {
173+ 'dropdown-center' : direction === 'center' ,
174+ 'dropup dropup-center' : direction === 'dropup-center' ,
175+ direction : direction && direction !== 'center' && direction !== 'dropup-center' ,
176+ show : _visible ,
177+ } ,
178+ className ,
179+ ) }
180+ { ...rest }
181+ ref = { forkedRef }
182+ >
183+ { children }
184+ </ Component >
185+ ) }
186+ </ PopperManagerWrapper >
184187 </ CDropdownContext . Provider >
185188 )
186189 } ,
0 commit comments