@@ -3,6 +3,7 @@ import React, {
3
3
ElementType ,
4
4
forwardRef ,
5
5
HTMLAttributes ,
6
+ ReactNode ,
6
7
RefObject ,
7
8
useEffect ,
8
9
useRef ,
@@ -87,6 +88,16 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
87
88
visible ?: boolean
88
89
}
89
90
91
+ const PopperManagerWrapper = ( {
92
+ children,
93
+ popper,
94
+ } : {
95
+ children : ReactNode
96
+ popper : boolean
97
+ } ) => {
98
+ return popper ? < Manager > { children } </ Manager > : < > { children } </ >
99
+ }
100
+
90
101
interface ContextProps extends CDropdownProps {
91
102
// eslint-disable-next-line @typescript-eslint/no-explicit-any
92
103
dropdownToggleRef : RefObject < any > | undefined
@@ -149,38 +160,30 @@ export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownPro
149
160
! _visible && onHide && onHide ( )
150
161
} , [ _visible ] )
151
162
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
-
175
163
return (
176
164
< 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 >
184
187
</ CDropdownContext . Provider >
185
188
)
186
189
} ,
0 commit comments