Skip to content

Commit

Permalink
feat(bs5): Convert Dropdown & DropdownMenu to RTL
Browse files Browse the repository at this point in the history
'left' & 'right' to 'start' & 'end'
  • Loading branch information
gthomas-appfolio authored and phwebi committed Oct 27, 2021
1 parent 65bf0f0 commit 7417984
Show file tree
Hide file tree
Showing 8 changed files with 34 additions and 34 deletions.
10 changes: 5 additions & 5 deletions docs/lib/Components/ButtonDropdownPage.js
Expand Up @@ -48,7 +48,7 @@ export default class ButtonDropdownPage extends React.Component {
<PrismCode className="language-jsx">
{`ButtonDropdown.propTypes = {
disabled: PropTypes.bool,
direction: PropTypes.oneOf(['up', 'down', 'left', 'right']),
direction: PropTypes.oneOf(['up', 'down', 'start', 'end']),
group: PropTypes.bool,
isOpen: PropTypes.bool,
tag: PropTypes.string,
Expand Down Expand Up @@ -206,7 +206,7 @@ export default function Example () => {
</DropdownMenu>
</ButtonDropdown>
{' '}
<ButtonDropdown direction="left" isOpen={this.state.btnDropleft} toggle={() => { this.setState({ btnDropleft: !this.state.btnDropleft }); }}>
<ButtonDropdown direction="start" isOpen={this.state.btnDropleft} toggle={() => { this.setState({ btnDropleft: !this.state.btnDropleft }); }}>
<DropdownToggle caret>
Dropleft
</DropdownToggle>
Expand All @@ -216,7 +216,7 @@ export default function Example () => {
</DropdownMenu>
</ButtonDropdown>
{' '}
<ButtonDropdown direction="right" isOpen={this.state.btnDropright} toggle={() => { this.setState({ btnDropright: !this.state.btnDropright }); }}>
<ButtonDropdown direction="end" isOpen={this.state.btnDropright} toggle={() => { this.setState({ btnDropright: !this.state.btnDropright }); }}>
<DropdownToggle caret>
Dropright
</DropdownToggle>
Expand All @@ -239,7 +239,7 @@ export default function Example () => {
</DropdownMenu>
</ButtonDropdown>
<ButtonDropdown direction="left" isOpen={this.state.btnDropleft} toggle={() => { this.setState({ btnDropleft: !this.state.btnDropleft }); }}>
<ButtonDropdown direction="start" isOpen={this.state.btnDropleft} toggle={() => { this.setState({ btnDropleft: !this.state.btnDropleft }); }}>
<DropdownToggle caret>
Dropleft
</DropdownToggle>
Expand All @@ -249,7 +249,7 @@ export default function Example () => {
</DropdownMenu>
</ButtonDropdown>
<ButtonDropdown direction="right" isOpen={this.state.btnDropright} toggle={() => { this.setState({ btnDropright: !this.state.btnDropright }); }}>
<ButtonDropdown direction="end" isOpen={this.state.btnDropright} toggle={() => { this.setState({ btnDropright: !this.state.btnDropright }); }}>
<DropdownToggle caret>
Dropright
</DropdownToggle>
Expand Down
16 changes: 8 additions & 8 deletions docs/lib/Components/DropdownsPage.js
Expand Up @@ -63,7 +63,7 @@ export default class DropdownPage extends React.Component {
a11y: PropTypes.bool, // defaults to true. Set to false to enable more bootstrap like tabbing behavior
className: PropTypes.string,
disabled: PropTypes.bool,
direction: PropTypes.oneOf(['up', 'down', 'left', 'right']),
direction: PropTypes.oneOf(['up', 'down', 'start', 'end']),
group: PropTypes.bool,
isOpen: PropTypes.bool,
// For Dropdown usage inside a Nav
Expand Down Expand Up @@ -94,7 +94,7 @@ DropdownMenu.propTypes = {
tag: PropTypes.string,
children: PropTypes.node.isRequired,
dark: PropTypes.bool,
right: PropTypes.bool,
end: PropTypes.bool,
flip: PropTypes.bool, // default: true,
className: PropTypes.string,
cssModule: PropTypes.object,
Expand Down Expand Up @@ -132,7 +132,7 @@ DropdownItem.propTypes = {
<DropdownToggle caret>
Dropdown's menu is right-aligned
</DropdownToggle>
<DropdownMenu right>
<DropdownMenu end>
<DropdownItem header>Header</DropdownItem>
<DropdownItem disabled>Action</DropdownItem>
<DropdownItem>Another Action</DropdownItem>
Expand All @@ -148,7 +148,7 @@ DropdownItem.propTypes = {
<DropdownToggle caret>
Dropdown's menu is right-aligned
</DropdownToggle>
<DropdownMenu right>
<DropdownMenu end>
<DropdownItem header>Header</DropdownItem>
<DropdownItem disabled>Action</DropdownItem>
<DropdownItem>Another Action</DropdownItem>
Expand Down Expand Up @@ -293,7 +293,7 @@ DropdownItem.propTypes = {
</Dropdown>
</Col>
<Col>
<Dropdown direction="left" isOpen={this.state.ddDropleft} toggle={() => { this.setState({ ddDropleft: !this.state.ddDropleft }); }}>
<Dropdown direction="start" isOpen={this.state.ddDropleft} toggle={() => { this.setState({ ddDropleft: !this.state.ddDropleft }); }}>
<DropdownToggle caret>
Dropleft
</DropdownToggle>
Expand All @@ -304,7 +304,7 @@ DropdownItem.propTypes = {
</Dropdown>
</Col>
<Col>
<Dropdown direction="right" isOpen={this.state.ddDropright} toggle={() => { this.setState({ ddDropright: !this.state.ddDropright }); }}>
<Dropdown direction="end" isOpen={this.state.ddDropright} toggle={() => { this.setState({ ddDropright: !this.state.ddDropright }); }}>
<DropdownToggle caret>
Dropright
</DropdownToggle>
Expand All @@ -328,7 +328,7 @@ DropdownItem.propTypes = {
</DropdownMenu>
</Dropdown>
<Dropdown direction="left" isOpen={this.state.btnDropleft} toggle={() => { this.setState({ btnDropleft: !this.state.btnDropleft }); }}>
<Dropdown direction="start" isOpen={this.state.btnDropleft} toggle={() => { this.setState({ btnDropleft: !this.state.btnDropleft }); }}>
<DropdownToggle caret>
Dropleft
</DropdownToggle>
Expand All @@ -338,7 +338,7 @@ DropdownItem.propTypes = {
</DropdownMenu>
</Dropdown>
<Dropdown direction="right" isOpen={this.state.btnDropright} toggle={() => { this.setState({ btnDropright: !this.state.btnDropright }); }}>
<Dropdown direction="end" isOpen={this.state.btnDropright} toggle={() => { this.setState({ btnDropright: !this.state.btnDropright }); }}>
<DropdownToggle caret>
Dropright
</DropdownToggle>
Expand Down
2 changes: 1 addition & 1 deletion src/Dropdown.js
Expand Up @@ -11,7 +11,7 @@ import { mapToCssModules, omit, keyCodes, tagPropType } from './utils';
const propTypes = {
a11y: PropTypes.bool,
disabled: PropTypes.bool,
direction: PropTypes.oneOf(['up', 'down', 'left', 'right']),
direction: PropTypes.oneOf(['up', 'down', 'start', 'end']),
group: PropTypes.bool,
isOpen: PropTypes.bool,
nav: PropTypes.bool,
Expand Down
2 changes: 1 addition & 1 deletion src/DropdownContext.js
Expand Up @@ -5,7 +5,7 @@ import React from 'react';
* {
* toggle: PropTypes.func.isRequired,
* isOpen: PropTypes.bool.isRequired,
* direction: PropTypes.oneOf(['up', 'down', 'left', 'right']).isRequired,
* direction: PropTypes.oneOf(['up', 'down', 'start', 'end']).isRequired,
* inNavbar: PropTypes.bool.isRequired,
* disabled: PropTypes.bool
* }
Expand Down
12 changes: 6 additions & 6 deletions src/DropdownMenu.js
Expand Up @@ -10,7 +10,7 @@ const propTypes = {
tag: tagPropType,
children: PropTypes.node.isRequired,
dark: PropTypes.bool,
right: PropTypes.bool,
end: PropTypes.bool,
flip: PropTypes.bool,
modifiers: PropTypes.array,
className: PropTypes.string,
Expand All @@ -28,8 +28,8 @@ const defaultProps = {

const directionPositionMap = {
up: 'top',
left: 'left',
right: 'right',
start: 'left',
end: 'right',
down: 'bottom',
};

Expand All @@ -47,7 +47,7 @@ class DropdownMenu extends React.Component {
className,
cssModule,
dark,
right,
end,
tag,
flip,
modifiers,
Expand All @@ -62,7 +62,7 @@ class DropdownMenu extends React.Component {
'dropdown-menu',
{
'dropdown-menu-dark': dark,
'dropdown-menu-right': right,
'dropdown-menu-end': end,
show: this.context.isOpen,
}
), cssModule);
Expand All @@ -72,7 +72,7 @@ class DropdownMenu extends React.Component {
if (persist || (this.context.isOpen && !this.context.inNavbar)) {

const position1 = directionPositionMap[this.context.direction] || 'bottom';
const position2 = right ? 'end' : 'start';
const position2 = end ? 'end' : 'start';
const poperPlacement = `${position1}-${position2}`;
const poperModifiers = [
...modifiers,
Expand Down
8 changes: 4 additions & 4 deletions src/__tests__/Dropdown.spec.js
Expand Up @@ -1108,12 +1108,12 @@ describe('Dropdown', () => {

it('should render with correct class when direction is set', () => {
const dropup = shallow(<Dropdown direction="up" />);
const dropleft = shallow(<Dropdown direction="left" />);
const dropright = shallow(<Dropdown direction="right" />);
const dropleft = shallow(<Dropdown direction="start" />);
const dropright = shallow(<Dropdown direction="end" />);

expect(dropup.childAt(0).childAt(0).hasClass('dropup')).toBe(true);
expect(dropleft.childAt(0).childAt(0).hasClass('dropleft')).toBe(true);
expect(dropright.childAt(0).childAt(0).hasClass('dropright')).toBe(true);
expect(dropleft.childAt(0).childAt(0).hasClass('dropstart')).toBe(true);
expect(dropright.childAt(0).childAt(0).hasClass('dropend')).toBe(true);
});

describe('menuRole prop', () => {
Expand Down
16 changes: 8 additions & 8 deletions src/__tests__/DropdownMenu.spec.js
Expand Up @@ -65,18 +65,18 @@ describe('DropdownMenu', () => {
</DropdownContext.Provider>
);

expect(wrapper.find('.dropdown-menu').hostNodes().hasClass('dropdown-menu-right')).toBe(false);
expect(wrapper.find('.dropdown-menu').hostNodes().hasClass('dropdown-menu-end')).toBe(false);
});

it('should render right aligned menus', () => {
isOpen = true;
const wrapper = mount(
<DropdownContext.Provider value={{ isOpen, direction, inNavbar }}>
<DropdownMenu right>Ello world</DropdownMenu>
<DropdownMenu end>Ello world</DropdownMenu>
</DropdownContext.Provider>
);

expect(wrapper.find('.dropdown-menu').hostNodes().hasClass('dropdown-menu-right')).toBe(true);
expect(wrapper.find('.dropdown-menu').hostNodes().hasClass('dropdown-menu-end')).toBe(true);
});

it('should render down when direction is unknown on the context', () => {
Expand Down Expand Up @@ -114,9 +114,9 @@ describe('DropdownMenu', () => {
expect(wrapper.find(Popper).prop('placement')).toBe('top-start');
});

it('should render left when direction is "left" on the context', () => {
it('should render left when direction is "start" on the context', () => {
isOpen = true;
direction = 'left';
direction = 'start';
const wrapper = mount(
<DropdownContext.Provider value={{ isOpen, direction, inNavbar }}>
<DropdownMenu>Ello world</DropdownMenu>
Expand All @@ -126,9 +126,9 @@ describe('DropdownMenu', () => {
expect(wrapper.find(Popper).prop('placement')).toBe('left-start');
});

it('should render right when direction is "right" on the context', () => {
it('should render right when direction is "end" on the context', () => {
isOpen = true;
direction = 'right';
direction = 'end';
const wrapper = mount(
<DropdownContext.Provider value={{ isOpen, direction, inNavbar }}>
<DropdownMenu>Ello world</DropdownMenu>
Expand Down Expand Up @@ -176,7 +176,7 @@ describe('DropdownMenu', () => {
it('should not render Popper when isOpen is false', () => {
const wrapper = mount(
<DropdownContext.Provider value={{ isOpen, direction, inNavbar }}>
<DropdownMenu right>Ello world</DropdownMenu>
<DropdownMenu end>Ello world</DropdownMenu>
</DropdownContext.Provider>
);

Expand Down
2 changes: 1 addition & 1 deletion types/lib/Dropdown.d.ts
@@ -1,7 +1,7 @@
import * as React from 'react';
import { CSSModule } from './index';

export type Direction = 'up' | 'down' | 'left' | 'right';
export type Direction = 'up' | 'down' | 'start' | 'end';

export interface DropdownProps extends React.HTMLAttributes<HTMLElement> {
[key: string]: any;
Expand Down

0 comments on commit 7417984

Please sign in to comment.