Skip to content

Commit 4b8171c

Browse files
committed
feat(CDropdown): add centered dropdown and centered dropup
1 parent 2698c5a commit 4b8171c

File tree

4 files changed

+76
-6
lines changed

4 files changed

+76
-6
lines changed

packages/coreui-react/src/components/dropdown/CDropdown.tsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,10 +56,8 @@ export interface CDropdownProps extends HTMLAttributes<HTMLDivElement | HTMLLIEl
5656
dark?: boolean
5757
/**
5858
* Sets a specified direction and location of the dropdown menu.
59-
*
60-
* @type 'dropup' | 'dropend' | 'dropstart'
6159
*/
62-
direction?: 'dropup' | 'dropend' | 'dropstart'
60+
direction?: 'center' | 'dropup' | 'dropup-center' | 'dropend' | 'dropstart'
6361
/**
6462
* Callback fired when the component requests to be hidden.
6563
*/
@@ -146,7 +144,11 @@ export const CDropdown = forwardRef<HTMLDivElement | HTMLLIElement, CDropdownPro
146144
{
147145
show: _visible,
148146
},
149-
direction,
147+
direction === 'center'
148+
? 'dropdown-center'
149+
: direction === 'dropup-center'
150+
? 'dropup dropup-center'
151+
: direction,
150152
className,
151153
)
152154

@@ -202,7 +204,7 @@ CDropdown.propTypes = {
202204
className: PropTypes.string,
203205
component: PropTypes.elementType,
204206
dark: PropTypes.bool,
205-
direction: PropTypes.oneOf(['dropup', 'dropend', 'dropstart']),
207+
direction: PropTypes.oneOf(['center', 'dropup', 'dropup-center', 'dropend', 'dropstart']),
206208
onHide: PropTypes.func,
207209
onShow: PropTypes.func,
208210
placement: placementPropType,

packages/coreui-react/src/components/dropdown/CDropdownMenu.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,18 @@ export const CDropdownMenu: FC<CDropdownMenuProps> = ({
8686

8787
let _placement: Placements = placement
8888

89+
if (direction === 'center') {
90+
_placement = 'bottom'
91+
}
92+
8993
if (direction === 'dropup') {
9094
_placement = 'top-start'
9195
}
9296

97+
if (direction === 'dropup-center') {
98+
_placement = 'top'
99+
}
100+
93101
if (direction === 'dropend') {
94102
_placement = 'right-start'
95103
}

packages/docs/content/4.3/api/CDropdown.api.mdx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import CDropdown from '@coreui/react/src/components/dropdown/CDropdown'
1212
| **className** | A string of all className you want applied to the base component. | `string` | - |
1313
| **component** | Component used for the root node. Either a string to use a HTML element or a component. | `string` \| `ComponentClass<any, any>` \| `FunctionComponent<any>` | div |
1414
| **dark** | Sets a darker color scheme to match a dark navbar. | `boolean` | - |
15-
| **direction** | Sets a specified direction and location of the dropdown menu. | `'dropup'` \| `'dropend'` \| `'dropstart'` | - |
15+
| **direction** | Sets a specified direction and location of the dropdown menu. | `'center'` \| `'dropup'` \| `'dropup-center'` \| `'dropend'` \| `'dropstart'` | - |
1616
| **onHide** | Callback fired when the component requests to be hidden. | `() => void` | - |
1717
| **onShow** | Callback fired when the component requests to be shown. | `() => void` | - |
1818
| **placement** | Describes the placement of your component after Popper.js has applied all the modifiers that may have flipped or altered the originally provided placement property. | `'auto'` \| `'top-end'` \| `'top'` \| `'top-start'` \| `'bottom-end'` \| `'bottom'` \| `'bottom-start'` \| `'right-start'` \| `'right'` \| `'right-end'` \| `'left-start'` \| `'left'` \| `'left-end'` | bottom-start |

packages/docs/content/4.3/components/dropdown.mdx

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -363,6 +363,36 @@ And putting it to use in a navbar:
363363
</p>
364364
</CCallout>
365365

366+
### Centered
367+
368+
Make the dropdown menu centered below the toggle by adding `direction="center"` to the `<CDropdown>` component.
369+
370+
<Example>
371+
<CDropdown variant="btn-group" direction="center">
372+
<CDropdownToggle color="secondary">Centered dropdown</CDropdownToggle>
373+
<CDropdownMenu>
374+
<CDropdownItem href="#">Action</CDropdownItem>
375+
<CDropdownItem href="#">Another action</CDropdownItem>
376+
<CDropdownItem href="#">Something else here</CDropdownItem>
377+
<CDropdownDivider/>
378+
<CDropdownItem href="#">Separated link</CDropdownItem>
379+
</CDropdownMenu>
380+
</CDropdown>
381+
</Example>
382+
383+
```jsx
384+
<CDropdown variant="btn-group" direction="center">
385+
<CDropdownToggle color="secondary">Centered dropdown</CDropdownToggle>
386+
<CDropdownMenu>
387+
<CDropdownItem href="#">Action</CDropdownItem>
388+
<CDropdownItem href="#">Another action</CDropdownItem>
389+
<CDropdownItem href="#">Something else here</CDropdownItem>
390+
<CDropdownDivider/>
391+
<CDropdownItem href="#">Separated link</CDropdownItem>
392+
</CDropdownMenu>
393+
</CDropdown>
394+
```
395+
366396
### Dropup
367397

368398
Trigger dropdown menus above elements by adding `direction="dropup"` to the `<CDropdown>` component.
@@ -417,6 +447,36 @@ Trigger dropdown menus above elements by adding `direction="dropup"` to the `<CD
417447
</CDropdown>
418448
```
419449

450+
### Dropup centered
451+
452+
Make the dropup menu centered above the toggle by adding `direction="dropup-center"` to the `<CDropdown>` component.
453+
454+
<Example>
455+
<CDropdown variant="btn-group" direction="dropup-center">
456+
<CDropdownToggle color="secondary">Centered dropup</CDropdownToggle>
457+
<CDropdownMenu>
458+
<CDropdownItem href="#">Action</CDropdownItem>
459+
<CDropdownItem href="#">Another action</CDropdownItem>
460+
<CDropdownItem href="#">Something else here</CDropdownItem>
461+
<CDropdownDivider/>
462+
<CDropdownItem href="#">Separated link</CDropdownItem>
463+
</CDropdownMenu>
464+
</CDropdown>
465+
</Example>
466+
467+
```jsx
468+
<CDropdown variant="btn-group" direction="dropup-center">
469+
<CDropdownToggle color="secondary">Centered dropup</CDropdownToggle>
470+
<CDropdownMenu>
471+
<CDropdownItem href="#">Action</CDropdownItem>
472+
<CDropdownItem href="#">Another action</CDropdownItem>
473+
<CDropdownItem href="#">Something else here</CDropdownItem>
474+
<CDropdownDivider/>
475+
<CDropdownItem href="#">Separated link</CDropdownItem>
476+
</CDropdownMenu>
477+
</CDropdown>
478+
```
479+
420480
### Dropright
421481

422482
Trigger dropdown menus at the right of the elements by adding `direction="dropend"` to the `<CDropdown>` component.

0 commit comments

Comments
 (0)