Skip to content

Commit f65728c

Browse files
committed
added prop-types
1 parent 4d7e049 commit f65728c

File tree

11 files changed

+89
-26
lines changed

11 files changed

+89
-26
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
"bootstrap": "^4.1.1",
77
"enzyme": "^3.3.0",
88
"enzyme-adapter-react-16": "^1.1.1",
9+
"prop-types": "^15.6.2",
910
"react": "^16.4.1",
1011
"react-dom": "^16.4.1",
1112
"react-router-dom": "^4.3.1",
Lines changed: 17 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,28 @@
11
import React from 'react';
2+
import PropTypes from 'prop-types';
23
import { DropdownToggle } from 'reactstrap';
34
import './index.css';
45

56
const DropdownToggleSelect = (props) => {
6-
const massagedProps = Object.assign({}, props);
7-
if (massagedProps.caret) delete massagedProps.caret;
8-
if (massagedProps.color) delete massagedProps.color;
9-
if (massagedProps.outline) delete massagedProps.outline;
10-
11-
const style = Object.assign({}, { textAlign: 'left' }, massagedProps.style);
7+
const style = Object.assign({}, { textAlign: 'left' }, props.style);
128

139
return (
14-
<DropdownToggle outline color='dropdown-toggle-select' block {...massagedProps} className='dropdown-toggle-select' style={style}/>
10+
<DropdownToggle outline color='dropdown-toggle-select' block {...props} className='dropdown-toggle-select' style={style}/>
1511
);
1612
};
1713

14+
// Rely on the propTypes provided by reacstrap
15+
DropdownToggleSelect.propTypes = {
16+
className: PropTypes.string,
17+
style: PropTypes.object,
18+
disabled: PropTypes.bool,
19+
onClick: PropTypes.func,
20+
'data-toggle': PropTypes.string,
21+
'aria-haspopup': PropTypes.bool,
22+
// For DropdownToggle usage inside a Nav
23+
nav: PropTypes.bool,
24+
// Defaults to Button component
25+
tag: PropTypes.any
26+
};
27+
1828
export default DropdownToggleSelect;

src/editor/document/index.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import React, { Component } from 'react';
2+
import PropTypes from 'prop-types';
23
import { Row, Col, Input } from 'reactstrap';
34
import SyntaxHighlighter from 'react-syntax-highlighter';
45
import { defaultStyle, arduinoLight, ascetic, docco, githubGist, grayscale, idea, tomorrow, vs, xcode } from 'react-syntax-highlighter/styles/hljs';
@@ -67,5 +68,12 @@ class Document extends Component {
6768
}
6869
}
6970

71+
Document.propTypes = {
72+
font: PropTypes.string.isRequired,
73+
size: PropTypes.number.isRequired,
74+
theme: PropTypes.oneOf([ 'None', ...Object.keys(themeMap) ]).isRequired,
75+
numbers: PropTypes.bool.isRequired
76+
};
77+
7078
export default Document;
7179
export { Document, themeMap };

src/editor/index.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,4 +72,6 @@ class Editor extends Component {
7272
}
7373
}
7474

75+
Editor.propTypes = { };
76+
7577
export default Editor;
Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,28 @@
11
import React from 'react';
2+
import PropTypes from 'prop-types';
23
import { UncontrolledDropdown, DropdownMenu, DropdownItem } from 'reactstrap';
34
import DropdownToggleSelect from '../../../common/dropdown-toggle-select';
45

5-
const FontDropdown = (props) => {
6-
const dropdownItems = props.fonts.map(font => {
6+
const FontDropdown = ({ fonts, active, onSelect }) => {
7+
const dropdownItems = fonts.map(font => {
78
return (
8-
<DropdownItem key={font} active={font === props.active} onClick={props.onSelect.bind(null, font)} style={{ fontFamily: `"${font}", monospace`}}>{font}</DropdownItem>);
9+
<DropdownItem key={font} active={font === active} onClick={onSelect.bind(null, font)} style={{ fontFamily: `"${font}", monospace`}}>{font}</DropdownItem>);
910
});
1011

1112
return (
1213
<UncontrolledDropdown inNavbar>
13-
<DropdownToggleSelect style={{ fontFamily: `"${props.active}", monospace` }}>{props.active}</DropdownToggleSelect>
14+
<DropdownToggleSelect style={{ fontFamily: `"${active}", monospace` }}>{active}</DropdownToggleSelect>
1415
<DropdownMenu>
1516
{dropdownItems}
1617
</DropdownMenu>
1718
</UncontrolledDropdown>
1819
);
1920
};
2021

22+
FontDropdown.propTypes = {
23+
fonts: PropTypes.arrayOf(PropTypes.string).isRequired,
24+
active: PropTypes.string.isRequired,
25+
onSelect: PropTypes.func
26+
};
27+
2128
export default FontDropdown;

src/editor/toolbar/index.js

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,44 @@
11
import React from 'react';
2+
import PropTypes from 'prop-types';
23
import { Col, Navbar, Button } from 'reactstrap';
34
import FontDropdown from './font-dropdown';
45
import SizeDropdown from './size-dropdown';
56
import ThemeDropdown from './theme-dropdown';
67

7-
const Toolbar = (props) => {
8+
const Toolbar = ({ fonts, activeFont, sizes, activeSize, themes, activeTheme, activeNumbers, onChange, onPrint }) => {
89
return (
910
<Navbar color='#FFFFFF' light expand='sm' style={{ marginBottom: 5 }}>
1011
<div className='form-row' style={{ width: '100%' }}>
1112
<Col xs='9' md='4' className='my-2 my-md-0'>
12-
<FontDropdown fonts={props.fonts} active={props.activeFont} onSelect={props.onChange.bind(null, 'font')} />
13+
<FontDropdown fonts={fonts} active={activeFont} onSelect={onChange.bind(null, 'font')} />
1314
</Col>
1415
<Col xs='3' md='2' className='my-2 my-md-0'>
15-
<SizeDropdown sizes={props.sizes} active={props.activeSize} onSelect={props.onChange.bind(null, 'size')}/>
16+
<SizeDropdown sizes={sizes} active={activeSize} onSelect={onChange.bind(null, 'size')}/>
1617
</Col>
1718
<Col xs='9' md='3' className='my-2 my-md-0'>
18-
<ThemeDropdown themes={props.themes} active={props.activeTheme} onSelect={props.onChange.bind(null, 'theme')}/>
19+
<ThemeDropdown themes={themes} active={activeTheme} onSelect={onChange.bind(null, 'theme')}/>
1920
</Col>
2021
<Col xs='3' md='auto' className='my-2 my-md-0'>
21-
<Button active={props.activeNumbers} outline color='secondary' style={{ width: '100%' }} onClick={props.onChange.bind(null, 'numbers', !props.activeNumbers)}>#</Button>
22+
<Button active={activeNumbers} outline color='secondary' style={{ width: '100%' }} onClick={onChange.bind(null, 'numbers', !activeNumbers)}>#</Button>
2223
</Col>
2324
<Col xs='12' md='auto' className='my-2 my-md-0'>
24-
<Button outline color='success' onClick={props.onPrint} style={{ width: '100%' }}>Print</Button>
25+
<Button outline color='success' onClick={onPrint} style={{ width: '100%' }}>Print</Button>
2526
</Col>
2627
</div>
2728
</Navbar>
2829
);
2930
};
3031

32+
Toolbar.propTypes = {
33+
fonts: PropTypes.arrayOf(PropTypes.string).isRequired,
34+
activeFont: PropTypes.string.isRequired,
35+
sizes: PropTypes.arrayOf(PropTypes.number).isRequired,
36+
activeSize: PropTypes.number.isRequired,
37+
themes: PropTypes.arrayOf(PropTypes.string).isRequired,
38+
activeTheme: PropTypes.string.isRequired,
39+
activeNumbers: PropTypes.bool.isRequired,
40+
onChange: PropTypes.func,
41+
onPrint: PropTypes.func
42+
};
43+
3144
export default Toolbar;
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
import React from 'react';
2+
import PropTypes from 'prop-types';
23
import { UncontrolledDropdown, DropdownMenu, DropdownItem } from 'reactstrap';
34
import DropdownToggleSelect from '../../../common/dropdown-toggle-select';
45

5-
const SizeDropdown = (props) => {
6-
const dropdownItems = props.sizes.map(size => (<DropdownItem key={size} active={size === props.active} onClick={props.onSelect.bind(null, size)}>{size}</DropdownItem>));
6+
const SizeDropdown = ({ sizes, active, onSelect }) => {
7+
const dropdownItems = sizes.map(size => (<DropdownItem key={size} active={size === active} onClick={onSelect.bind(null, size)}>{size}</DropdownItem>));
78

89
return (
910
<UncontrolledDropdown inNavbar>
10-
<DropdownToggleSelect>{props.active}</DropdownToggleSelect>
11+
<DropdownToggleSelect>{active}</DropdownToggleSelect>
1112
<DropdownMenu>
1213
{dropdownItems}
1314
</DropdownMenu>
1415
</UncontrolledDropdown>
1516
);
1617
};
1718

19+
SizeDropdown.propTypes = {
20+
sizes: PropTypes.arrayOf(PropTypes.number).isRequired,
21+
active: PropTypes.number.isRequired,
22+
onSelect: PropTypes.func
23+
};
24+
1825
export default SizeDropdown;
Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,25 @@
11
import React from 'react';
2+
import PropTypes from 'prop-types';
23
import { UncontrolledDropdown, DropdownMenu, DropdownItem } from 'reactstrap';
34
import DropdownToggleSelect from '../../../common/dropdown-toggle-select';
45

5-
const ThemeDropdown = (props) => {
6-
const dropdownItems = props.themes.map(theme => (<DropdownItem key={theme} active={theme === props.active} onClick={props.onSelect.bind(null, theme)}>{theme}</DropdownItem>));
6+
const ThemeDropdown = ({ themes, active, onSelect }) => {
7+
const dropdownItems = themes.map(theme => (<DropdownItem key={theme} active={theme === active} onClick={onSelect.bind(null, theme)}>{theme}</DropdownItem>));
78

89
return (
910
<UncontrolledDropdown inNavbar>
10-
<DropdownToggleSelect>{props.active}</DropdownToggleSelect>
11+
<DropdownToggleSelect>{active}</DropdownToggleSelect>
1112
<DropdownMenu>
1213
{dropdownItems}
1314
</DropdownMenu>
1415
</UncontrolledDropdown>
1516
);
1617
};
1718

19+
ThemeDropdown.propTypes = {
20+
themes: PropTypes.arrayOf(PropTypes.string).isRequired,
21+
active: PropTypes.string.isRequired,
22+
onSelect: PropTypes.func
23+
};
24+
1825
export default ThemeDropdown;

src/heart/index.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React from 'react';
22
import { Container, Row, Col } from 'reactstrap';
33

4-
const Heart = (props) => {
4+
const Heart = () => {
55
return (
66
<Container fluid={true} className='responsive-container' style={{ marginTop: 10 }}>
77
<Row>
@@ -21,4 +21,6 @@ const Heart = (props) => {
2121
);
2222
};
2323

24+
Heart.propTypes = { };
25+
2426
export default Heart;

src/navbar/index.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {
1111
} from 'reactstrap';
1212
import { Link } from 'react-router-dom';
1313

14-
export default class NavBar extends React.Component {
14+
class CustomNavbar extends React.Component {
1515
constructor(props) {
1616
super(props);
1717

@@ -46,3 +46,7 @@ export default class NavBar extends React.Component {
4646
);
4747
}
4848
}
49+
50+
CustomNavbar.propTypes = { };
51+
52+
export default CustomNavbar;

0 commit comments

Comments
 (0)