Skip to content

Commit e60bcf9

Browse files
authored
Merge pull request #5 from coreui/dev-fix
v2.0.0-beta
2 parents 37d44c9 + 63256cc commit e60bcf9

17 files changed

+1152
-554
lines changed

demo/src/scss/style.css

+1,024-506
Large diffs are not rendered by default.

demo/src/scss/style.scss

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
@import "variables";
33

44
// Import styles
5-
@import "node_modules/@coreui/styles/scss/coreui";
5+
@import "~@coreui/coreui/scss/coreui";
66
// Temp fix for reactstrap
7-
@import 'node_modules/@coreui/styles/scss/_dropdown-menu-right.scss';
7+
@import '~@coreui/coreui/scss/_dropdown-menu-right.scss';
88

99
// If you want to add something do it here
1010
@import "custom";

demo/src/scss/vendors/_variables.scss

+5-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// Override Boostrap variables
22
@import "../variables";
3-
@import "node_modules/@coreui/styles/scss/bootstrap-variables";
4-
@import "node_modules/bootstrap/scss/mixins";
5-
@import "node_modules/bootstrap/scss/functions";
6-
@import "node_modules/bootstrap/scss/variables";
7-
@import "node_modules/@coreui/styles/scss/variables";
3+
@import "~@coreui/coreui/scss/bootstrap-variables";
4+
@import "~bootstrap/scss/mixins";
5+
@import "~bootstrap/scss/functions";
6+
@import "~bootstrap/scss/variables";
7+
@import "~@coreui/coreui/scss/variables";

demo/src/scss/vendors/chart.js/chart.css

+3-1
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
white-space: nowrap;
2424
position: relative;
2525
margin-bottom: 4px;
26+
border-radius: 0.25rem;
2627
padding: 2px 8px 2px 28px;
2728
font-size: smaller;
2829
cursor: default; }
@@ -39,4 +40,5 @@
3940
left: 0;
4041
top: 0;
4142
width: 20px;
42-
height: 20px; }
43+
height: 20px;
44+
border-radius: 0.25rem; }

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@coreui/react",
3-
"version": "2.0.0-alpha.5",
3+
"version": "2.0.0-beta",
44
"description": "CoreUI React Bootstrap 4 components",
55
"main": "lib/index.js",
66
"module": "es/index.js",
@@ -20,6 +20,7 @@
2020
"lint": "eslint src"
2121
},
2222
"dependencies": {
23+
"@coreui/coreui": "^2.0.0-beta.6",
2324
"bootstrap": "4.0.0",
2425
"classnames": "^2.2.5",
2526
"prop-types": "^15.6.1",

src/AsideToggler.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
22
import PropTypes from 'prop-types';
33
import classNames from 'classnames';
44
import { asideMenuCssClasses } from './Shared/index';
5-
import { ToggleClasses } from './Shared/toggle-classes';
5+
import toggleClasses from './Shared/toggle-classes';
66

77
const propTypes = {
88
children: PropTypes.node,
@@ -40,7 +40,7 @@ class AppAsideToggler extends Component {
4040
if (display && asideMenuCssClasses.indexOf(cssTemplate) > -1) {
4141
cssClass = cssTemplate;
4242
}
43-
ToggleClasses(cssClass, asideMenuCssClasses);
43+
toggleClasses(cssClass, asideMenuCssClasses);
4444
}
4545
}
4646

@@ -54,7 +54,7 @@ class AppAsideToggler extends Component {
5454
type="button"
5555
className={classes}
5656
{...attributes}
57-
onClick={this.asideToggle}
57+
onClick={(event)=>this.asideToggle(event)}
5858
>
5959
{children || <span className="navbar-toggler-icon" />}
6060
</button>

src/Breadcrumb.js

+2-3
Original file line numberDiff line numberDiff line change
@@ -31,15 +31,14 @@ const BreadcrumbsItem = ({ match }) => {
3131
const routeName = findRouteName(match.url);
3232
if (routeName) {
3333
return (
34-
match.isExact ?
34+
match.isExact ?
3535
<BreadcrumbItem active>{routeName}</BreadcrumbItem>
36-
:
36+
:
3737
<BreadcrumbItem>
3838
<Link to={match.url || ''}>
3939
{routeName}
4040
</Link>
4141
</BreadcrumbItem>
42-
4342
);
4443
}
4544
return null;

src/Shared/toggle-classes.js

+6-16
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,6 @@
1-
const RemoveClasses = (NewClassNames) => {
2-
const MatchClasses = NewClassNames.map(Class => document.body.classList.contains(Class));
3-
return MatchClasses.indexOf(true) !== -1;
4-
};
5-
6-
const ToggleClasses = (Toggle, ClassNames) => {
7-
const Level = ClassNames.indexOf(Toggle);
8-
const NewClassNames = ClassNames.slice(0, Level + 1);
9-
if (RemoveClasses(NewClassNames)) {
10-
NewClassNames.map(Class => document.body.classList.remove(Class));
11-
} else {
12-
document.body.classList.add(Toggle);
13-
}
14-
};
15-
16-
export { ToggleClasses };
1+
export default function toggleClasses (toggleClass, classList) {
2+
const level = classList.indexOf(toggleClass)
3+
const removeClassList = classList.slice(0, level)
4+
removeClassList.map((className) => document.body.classList.remove(className))
5+
document.body.classList.toggle(toggleClass)
6+
}

src/SidebarMinimizer.js

+16-1
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,20 @@ const defaultProps = {
1515
};
1616

1717
class AppSidebarMinimizer extends Component {
18+
constructor(props) {
19+
super(props);
20+
21+
this.handleClick = this.handleClick.bind(this);
22+
}
1823
sidebarMinimize(e) {
1924
// e.preventDefault();
2025

2126
document.body.classList.toggle('sidebar-minimized');
27+
const sidebar = document.querySelector('.sidebar-nav')
28+
if (sidebar) {
29+
sidebar.classList.toggle('ps');
30+
sidebar.classList.toggle('scrollbar-container');
31+
}
2232
}
2333

2434
brandMinimize(e) {
@@ -27,13 +37,18 @@ class AppSidebarMinimizer extends Component {
2737
document.body.classList.toggle('brand-minimized');
2838
}
2939

40+
handleClick(e) {
41+
this.sidebarMinimize(e)
42+
this.brandMinimize(e)
43+
}
44+
3045
render() {
3146
const { className, children, tag: Tag, type, ...attributes } = this.props;
3247

3348
const classes = classNames(className, 'sidebar-minimizer', 'mt-auto');
3449

3550
return (
36-
<Tag className={classes} type={type} {...attributes} onClick={(event) => { this.sidebarMinimize(event); this.brandMinimize(event); }} >
51+
<Tag className={classes} type={type} {...attributes} onClick={(event)=>this.handleClick(event)} >
3752
{children}
3853
</Tag>
3954
);

src/SidebarNav.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class AppSidebarNav extends Component {
171171

172172
// sidebar-nav root
173173
return (
174-
<PerfectScrollbar className={navClasses} {...attributes}>
174+
<PerfectScrollbar className={navClasses} {...attributes} option={{ suppressScrollX: true }} >
175175
<Nav>
176176
{children || this.navList(navConfig.items)}
177177
</Nav>

src/SidebarToggler.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React, { Component } from 'react';
22
import PropTypes from 'prop-types';
33
import classNames from 'classnames';
44
import { sidebarCssClasses } from './Shared/index';
5-
import { ToggleClasses } from './Shared/toggle-classes';
5+
import toggleClasses from './Shared/toggle-classes';
66

77
const propTypes = {
88
children: PropTypes.node,
@@ -38,7 +38,7 @@ class AppSidebarToggler extends Component {
3838
if (display && sidebarCssClasses.indexOf(cssTemplate) > -1) {
3939
cssClass = cssTemplate;
4040
}
41-
ToggleClasses(cssClass, sidebarCssClasses);
41+
toggleClasses(cssClass, sidebarCssClasses);
4242
}
4343
}
4444

@@ -48,7 +48,7 @@ class AppSidebarToggler extends Component {
4848
const classes = classNames(className, 'navbar-toggler');
4949

5050
return (
51-
<Tag type="button" className={classes} {...attributes} onClick={this.sidebarToggle}>
51+
<Tag type="button" className={classes} {...attributes} onClick={(event)=>this.sidebarToggle(event)}>
5252
{children || <span className="navbar-toggler-icon" />}
5353
</Tag>
5454
);

tests/AsideToggler.test.js

+23-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,33 @@ import expect from 'expect'
22
import React from 'react'
33
import {renderToStaticMarkup as render} from 'react-dom/server'
44

5+
import { configure, mount } from 'enzyme'
6+
import Adapter from 'enzyme-adapter-react-16'
7+
import sinon from 'sinon';
8+
59
import AppAsideToggler from 'src/AsideToggler'
610

11+
configure({ adapter: new Adapter() });
12+
713
describe('AppAsideToggler', () => {
814
it('renders button with class="navbar-toggler"', () => {
915
expect(render(<AppAsideToggler />))
1016
.toContain('<button type="button" class="navbar-toggler"><span class="navbar-toggler-icon"></span></button>')
1117
})
12-
})
18+
it('should call asideToggle', () => {
19+
let component = mount(<AppAsideToggler />);
20+
const instance = component.instance();
21+
const handleClickSpy = sinon.spy(instance, 'asideToggle');
22+
component.find('button').simulate('click');
23+
24+
expect(handleClickSpy.called).toBe(true);
25+
})
26+
it('should call asideToggle mobile', () => {
27+
let component = mount(<AppAsideToggler mobile/>);
28+
const instance = component.instance();
29+
const handleClickSpy = sinon.spy(instance, 'asideToggle');
30+
component.find('button').simulate('click');
31+
32+
expect(handleClickSpy.called).toBe(true);
33+
})
34+
})

tests/HeaderDropdown.test.js

+17-3
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,25 @@ import expect from 'expect'
22
import React from 'react'
33
import {renderToStaticMarkup as render} from 'react-dom/server'
44

5+
import { configure, mount } from 'enzyme'
6+
import Adapter from 'enzyme-adapter-react-16'
7+
58
import AppHeaderDropdown from 'src/HeaderDropdown'
9+
import sinon from 'sinon';
10+
11+
configure({ adapter: new Adapter() });
612

713
describe('AppHeaderDropdown', () => {
814
it('renders li with class="dropdown nav-item"', () => {
9-
expect(render(<AppHeaderDropdown />))
10-
.toContain('<li class="dropdown nav-item"></li>')
15+
expect(render(<AppHeaderDropdown />)).toContain('<li class="dropdown nav-item"></li>')
16+
})
17+
it('dropdownOpen changed on toggle', () => {
18+
19+
let component = mount(<AppHeaderDropdown />);
20+
const instance = component.instance();
21+
22+
expect(instance.state.dropdownOpen).toBe(false);
23+
instance.toggle();
24+
expect(instance.state.dropdownOpen).toBe(true);
1125
})
12-
})
26+
})

tests/NavbarBrand.test.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,9 @@ import AppNavbarBrand from 'src/NavbarBrand';
1010
describe('AppNavbarBrand', () => {
1111
it('renders anchor with class="navbar-brand"', () => {
1212
expect(render(<AppNavbarBrand
13-
full={{ src: logo, width: 89, height: 25, alt: 'CoreUI Logo' }}
14-
minimized={{ src: sygnet, width: 30, height: 30, alt: 'CoreUI Logo' }}
13+
brand={{ src: logo, width: 89, height: 25, alt: 'CoreUI Brand' }}
14+
full={{ src: logo, width: 89, height: 25, alt: 'CoreUI Full' }}
15+
minimized={{ src: sygnet, width: 30, height: 30, alt: 'CoreUI Minimized' }}
1516
/>)).toContain('class="navbar-brand"');
1617
});
17-
});
18+
});

tests/Sidebar.test.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ describe('AppSidebar', () => {
1818
it('calls componentDidMount', () => {
1919
spy(AppSidebar.prototype, 'componentDidMount');
2020

21-
const wrapper = mount(<AppSidebar fixed display="lg" />);
22-
expect(AppSidebar.prototype.componentDidMount.calledOnce).toEqual(true);
21+
const wrapper = mount(<AppSidebar fixed display="lg" compact minimized offCanvas />);
22+
expect(AppSidebar.prototype.componentDidMount.calledOnce).toBe(true);
2323
});
24-
})
24+
})

tests/SidebarMinimizer.test.js

+15-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,25 @@ import expect from 'expect'
22
import React from 'react'
33
import {renderToStaticMarkup as render} from 'react-dom/server'
44

5+
import { configure, mount } from 'enzyme'
6+
import Adapter from 'enzyme-adapter-react-16'
7+
import sinon from 'sinon';
8+
59
import AppSidebarMinimizer from 'src/SidebarMinimizer'
610

11+
configure({ adapter: new Adapter() });
12+
713
describe('AppSidebarMinimizer', () => {
814
it('renders button with class="sidebar-minimizer"', () => {
915
expect(render(<AppSidebarMinimizer></AppSidebarMinimizer>))
1016
.toContain('<button class="sidebar-minimizer mt-auto" type="button"></button>')
1117
})
12-
})
18+
it('should call handleClick', () => {
19+
let component = mount(<AppSidebarMinimizer />);
20+
const instance = component.instance();
21+
const handleClickSpy = sinon.spy(instance, 'handleClick');
22+
component.find('button').simulate('click');
23+
24+
expect(handleClickSpy.called).toBe(true);
25+
})
26+
})

tests/SidebarToggler.test.js

+23-1
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,33 @@ import expect from 'expect'
22
import React from 'react'
33
import {renderToStaticMarkup as render} from 'react-dom/server'
44

5+
import { configure, mount } from 'enzyme'
6+
import Adapter from 'enzyme-adapter-react-16'
7+
import sinon from 'sinon';
8+
59
import AppSidebarToggler from 'src/SidebarToggler';
610

11+
configure({ adapter: new Adapter() });
12+
713
describe('AppSidebarToggler', () => {
814
it('renders button with class="navbar-toggler"', () => {
915
expect(render(<AppSidebarToggler className="d-lg-none" display="md" mobile />))
1016
.toContain('<button type="button" class="d-lg-none navbar-toggler"><span class="navbar-toggler-icon"></span></button>')
1117
})
12-
})
18+
it('should call sidebarToggle', () => {
19+
let component = mount(<AppSidebarToggler />);
20+
const instance = component.instance();
21+
const handleClickSpy = sinon.spy(instance, 'sidebarToggle');
22+
component.find('button').simulate('click');
23+
24+
expect(handleClickSpy.called).toBe(true);
25+
})
26+
it('should call sidebarToggle mobile', () => {
27+
let component = mount(<AppSidebarToggler mobile />);
28+
const instance = component.instance();
29+
const handleClickSpy = sinon.spy(instance, 'sidebarToggle');
30+
component.find('button').simulate('click');
31+
32+
expect(handleClickSpy.called).toBe(true);
33+
})
34+
})

0 commit comments

Comments
 (0)