Skip to content

Commit be4df60

Browse files
Phoebe Gaoswarajpatel
authored andcommitted
feat(bs5): change .close to .btn-close (reactstrap#2116)
* feat(bs5): Change classname from .close to .btn-close for Button * feat(bs5): Change button classname from .close to .btn-close for ModalHeader * feat(bs5): Change button classname from .close to .btn-close for Alert * feat(bs5): Change button classname from .close to .btn-close for ToastHeader * don't render extra close icon for alerts, modal/toast headers Co-authored-by: Swaraj Patel <swarajpatel37@gmail.com>
1 parent 7859900 commit be4df60

9 files changed

Lines changed: 9 additions & 80 deletions

File tree

src/Alert.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ function Alert(props) {
5959
{ 'alert-dismissible': toggle }
6060
), cssModule);
6161

62-
const closeClasses = mapToCssModules(classNames('close', closeClassName), cssModule);
62+
const closeClasses = mapToCssModules(classNames('btn-close', closeClassName), cssModule);
6363

6464
const alertTransition = {
6565
...Fade.defaultProps,
@@ -71,9 +71,7 @@ function Alert(props) {
7171
return (
7272
<Fade {...attributes} {...alertTransition} tag={Tag} className={classes} in={isOpen} role="alert" innerRef={innerRef}>
7373
{toggle ?
74-
<button type="button" className={closeClasses} aria-label={closeAriaLabel} onClick={toggle}>
75-
<span aria-hidden="true">&times;</span>
76-
</button>
74+
<button type="button" className={closeClasses} aria-label={closeAriaLabel} onClick={toggle} />
7775
: null}
7876
{children}
7977
</Fade>

src/Button.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ class Button extends React.Component {
6767

6868
const classes = mapToCssModules(classNames(
6969
className,
70-
{ close },
70+
close && 'btn-close',
7171
close || 'btn',
7272
close || btnOutlineColor,
7373
size ? `btn-${size}` : false,

src/ModalHeader.js

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,13 @@ const propTypes = {
1111
cssModule: PropTypes.object,
1212
children: PropTypes.node,
1313
closeAriaLabel: PropTypes.string,
14-
charCode: PropTypes.oneOfType([PropTypes.string, PropTypes.number]),
1514
close: PropTypes.object,
1615
};
1716

1817
const defaultProps = {
1918
tag: 'h5',
2019
wrapTag: 'div',
2120
closeAriaLabel: 'Close',
22-
charCode: 215,
2321
};
2422

2523
const ModalHeader = (props) => {
@@ -32,7 +30,6 @@ const ModalHeader = (props) => {
3230
tag: Tag,
3331
wrapTag: WrapTag,
3432
closeAriaLabel,
35-
charCode,
3633
close,
3734
...attributes } = props;
3835

@@ -42,11 +39,8 @@ const ModalHeader = (props) => {
4239
), cssModule);
4340

4441
if (!close && toggle) {
45-
const closeIcon = typeof charCode === 'number' ? String.fromCharCode(charCode) : charCode;
4642
closeButton = (
47-
<button type="button" onClick={toggle} className={mapToCssModules('close', cssModule)} aria-label={closeAriaLabel}>
48-
<span aria-hidden="true">{closeIcon}</span>
49-
</button>
43+
<button type="button" onClick={toggle} className={mapToCssModules('btn-close', cssModule)} aria-label={closeAriaLabel} />
5044
);
5145
}
5246

src/ToastHeader.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@ const ToastHeader = (props) => {
3535
tag: Tag,
3636
wrapTag: WrapTag,
3737
closeAriaLabel,
38-
charCode,
3938
close,
4039
tagClassName,
4140
icon: iconProp,
@@ -47,11 +46,8 @@ const ToastHeader = (props) => {
4746
), cssModule);
4847

4948
if (!close && toggle) {
50-
const closeIcon = typeof charCode === 'number' ? String.fromCharCode(charCode) : charCode;
5149
closeButton = (
52-
<button type="button" onClick={toggle} className={mapToCssModules('close', cssModule)} aria-label={closeAriaLabel}>
53-
<span aria-hidden="true">{closeIcon}</span>
54-
</button>
50+
<button type="button" onClick={toggle} className={mapToCssModules('btn-close', cssModule)} aria-label={closeAriaLabel} />
5551
);
5652
}
5753

src/__tests__/Alert.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ describe('Alert', () => {
1616
it('should pass close className down', () => {
1717
function noop() { }
1818
const alert = mount(<Alert toggle={noop} closeClassName="test-class-name">Yo!</Alert>);
19-
expect(alert.find('.close').hostNodes().prop('className')).toContain('test-class-name');
19+
expect(alert.find('.btn-close').hostNodes().prop('className')).toContain('test-class-name');
2020
});
2121

2222
it('should pass other props down', () => {

src/__tests__/Button.spec.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ describe('Button', () => {
104104
const wrapper = shallow(<Button close />);
105105
const actualInnerHTML = wrapper.children().html();
106106

107-
expect(wrapper.find('.close').length).toBe(1);
107+
expect(wrapper.find('.btn-close').length).toBe(1);
108108
expect(wrapper.find('.btn').length).toBe(0);
109109
expect(wrapper.find('.btn-secondary').length).toBe(0);
110110
expect(wrapper.find('button').prop('aria-label')).toMatch(/close/i);

src/__tests__/ModalHeader.spec.js

Lines changed: 1 addition & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ describe('ModalHeader', () => {
2222

2323
expect(wrapper.hasClass('other')).toBe(true);
2424
expect(wrapper.hasClass('modal-header')).toBe(true);
25-
expect(wrapper.find('button.close').length).toBe(1);
25+
expect(wrapper.find('button.btn-close').length).toBe(1);
2626
});
2727

2828
it('should render custom tag', () => {
@@ -37,26 +37,4 @@ describe('ModalHeader', () => {
3737

3838
expect(wrapper.type()).toBe('main');
3939
});
40-
41-
it('should render close button with custom aria-label', () => {
42-
const wrapper = shallow(<ModalHeader toggle={() => {}} className="other" closeAriaLabel="oseclay">Yo!</ModalHeader>);
43-
44-
const closeButton = wrapper.find('button.close').first();
45-
expect(closeButton.prop('aria-label')).toBe('oseclay');
46-
});
47-
48-
it('should render close button with default icon', () => {
49-
const wrapper = shallow(<ModalHeader toggle={() => {}}>Yo!</ModalHeader>);
50-
51-
const closeButtonIcon = wrapper.find('button.close span');
52-
const defaultIcon = String.fromCharCode(215);
53-
expect(closeButtonIcon.text()).toEqual(defaultIcon);
54-
});
55-
56-
it('should render close button with custom icon', () => {
57-
const wrapper = shallow(<ModalHeader toggle={() => {}} charCode={'X'}>Yo!</ModalHeader>);
58-
59-
const closeButtonIcon = wrapper.find('button.close span');
60-
expect(closeButtonIcon.text()).toEqual('X');
61-
});
6240
});

src/__tests__/ToastHeader.spec.js

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ describe('ToastHeader', () => {
2222

2323
expect(wrapper.hasClass('other')).toBe(true);
2424
expect(wrapper.hasClass('toast-header')).toBe(true);
25-
expect(wrapper.find('button.close').length).toBe(1);
25+
expect(wrapper.find('button.btn-close').length).toBe(1);
2626
});
2727

2828
it('should render custom tag', () => {
@@ -37,40 +37,4 @@ describe('ToastHeader', () => {
3737

3838
expect(wrapper.type()).toBe('main');
3939
});
40-
41-
it('should render close button with custom aria-label', () => {
42-
const wrapper = shallow(<ToastHeader toggle={() => { }} className="other" closeAriaLabel="oseclay">Yo!</ToastHeader>);
43-
44-
const closeButton = wrapper.find('button.close').first();
45-
expect(closeButton.prop('aria-label')).toBe('oseclay');
46-
});
47-
48-
it('should render close button with default icon', () => {
49-
const wrapper = shallow(<ToastHeader toggle={() => { }}>Yo!</ToastHeader>);
50-
51-
const closeButtonIcon = wrapper.find('button.close span');
52-
const defaultIcon = String.fromCharCode(215);
53-
expect(closeButtonIcon.text()).toEqual(defaultIcon);
54-
});
55-
56-
it('should render close button with custom icon', () => {
57-
const wrapper = shallow(<ToastHeader toggle={() => { }} charCode={'X'}>Yo!</ToastHeader>);
58-
59-
const closeButtonIcon = wrapper.find('button.close span');
60-
expect(closeButtonIcon.text()).toEqual('X');
61-
});
62-
63-
it('should render icon with a color', () => {
64-
const wrapper = shallow(<ToastHeader icon="primary">Yo!</ToastHeader>);
65-
66-
const closeButtonIcon = wrapper.find('svg');
67-
expect(closeButtonIcon.hasClass('text-primary')).toBe(true);
68-
});
69-
70-
it('should render a custom icon', () => {
71-
const wrapper = shallow(<ToastHeader icon={<span className="my-header">icon</span>}>Yo!</ToastHeader>);
72-
73-
const closeButtonIcon = wrapper.find('span.my-header');
74-
expect(closeButtonIcon.text()).toEqual("icon");
75-
});
7640
});

types/lib/ToastHeader.d.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ export interface ToastHeaderProps extends React.HTMLAttributes<HTMLElement> {
99
toggle?: React.MouseEventHandler<any>;
1010
icon?: string | React.ReactNode;
1111
close?: React.ReactNode;
12-
charCode?: string | number;
1312
closeAriaLabel?: string;
1413
}
1514

0 commit comments

Comments
 (0)