Skip to content

Commit b06e9a0

Browse files
committed
Merge branch 'redux' into universal-redux
2 parents d5daee4 + 0781c5b commit b06e9a0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+1557
-523
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@
8787
"redux-saga": "^0.14.0",
8888
"redux-thunk": "^2.1.0",
8989
"serialize-javascript": "^1.3.0",
90-
"styled-components": "^1.0.7",
90+
"styled-components": "1.1.1",
9191
"url-loader": "^0.5.7",
9292
"validator": "^6.1.0",
9393
"webpack": "^1.13.2",

src/components/App.js

+5-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
1-
import React, { Component, PropTypes } from 'react'
2-
import { injectGlobal } from 'styled-components'
1+
import React, { PropTypes, Component } from 'react'
2+
import { injectGlobal, ThemeProvider } from 'styled-components'
33
import Helmet from 'react-helmet'
44

5+
import theme from './theme'
6+
57
injectGlobal`
68
body {
79
margin: 0;
@@ -31,7 +33,7 @@ class App extends Component {
3133
link={[
3234
{ rel: 'icon', href: 'https://diegohaz.github.io/arc/icon.png' }
3335
]} />
34-
{children}
36+
<ThemeProvider theme={theme}>{children}</ThemeProvider>
3537
</div>
3638
)
3739
}

src/components/atoms/Atom/index.js

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import { PropTypes } from 'react'
2+
import styled from 'styled-components'
3+
4+
export const fontFamily = ({ theme }) => theme.fonts.primary
5+
6+
export const color = ({ theme, reverse, color }) =>
7+
theme[reverse ? 'reverseColors' : 'colors'][color][color === 'grayscale' ? 0 : 1]
8+
9+
const Atom = styled.span`
10+
font-family: ${fontFamily};
11+
color: ${color};
12+
`
13+
14+
Atom.propTypes = {
15+
color: PropTypes.string,
16+
reverse: PropTypes.bool
17+
}
18+
19+
Atom.defaultProps = {
20+
color: 'grayscale',
21+
theme: {
22+
fonts: {
23+
primary: 'sans-serif'
24+
},
25+
colors: {
26+
grayscale: { 0: '#222' }
27+
},
28+
reverseColors: {
29+
grayscale: { 0: '#fff' }
30+
}
31+
}
32+
}
33+
34+
export default Atom
+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import React from 'react'
2+
import { shallow } from 'enzyme'
3+
import Atom, * as styles from '.'
4+
5+
const wrap = (props = {}) => shallow(<Atom {...props} />)
6+
7+
it('renders children when passed in', () => {
8+
const wrapper = wrap({ children: 'test' })
9+
expect(wrapper.contains('test')).toBe(true)
10+
})
11+
12+
it('renders props when passed in', () => {
13+
const wrapper = wrap({ id: 'foo' })
14+
expect(wrapper.find({ id: 'foo' })).toHaveLength(1)
15+
})
16+
17+
describe('styles', () => {
18+
const theme = {
19+
fonts: {
20+
primary: 'sans-serif'
21+
},
22+
colors: {
23+
grayscale: { 0: '#222' },
24+
primary: { 1: 'red' }
25+
},
26+
reverseColors: {
27+
grayscale: { 0: '#fff' },
28+
primary: { 1: 'blue' }
29+
}
30+
}
31+
32+
test('fontFamily', () => {
33+
expect(styles.fontFamily({ theme })).toBe(theme.fonts.primary)
34+
})
35+
36+
test('color', () => {
37+
const props = {
38+
color: 'grayscale',
39+
reverse: false,
40+
theme
41+
}
42+
expect(styles.color(props)).toBe(theme.colors.grayscale[0])
43+
expect(styles.color({ ...props, reverse: true })).toBe(theme.reverseColors.grayscale[0])
44+
expect(styles.color({ ...props, color: 'primary' })).toBe(theme.colors.primary[1])
45+
})
46+
})

src/components/atoms/Badge/index.js

+26-6
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,44 @@
11
import { PropTypes } from 'react'
22
import styled from 'styled-components'
33

4-
import { colors, fonts } from 'components/globals'
4+
export const fontFamily = ({ theme }) => theme.fonts.primary
5+
6+
export const color = ({ reverse, theme }) =>
7+
reverse ? theme.colors.grayscale[0] : theme.reverseColors.grayscale[0]
8+
9+
export const backgroundColor = ({ reverse, theme, color }) =>
10+
theme[reverse ? 'reverseColors' : 'colors'][color][1]
511

612
const Badge = styled.span`
7-
font-family: ${fonts.primary};
13+
font-family: ${fontFamily};
814
font-size: 0.75rem;
915
line-height: 1.5em;
1016
padding: 0 0.3em;
11-
color: #fff;
12-
background-color: ${(props) => colors[props.kind][1]};
17+
color: ${color};
18+
background-color: ${backgroundColor};
1319
border-radius: 0.16667em;
1420
`
1521

1622
Badge.propTypes = {
17-
kind: PropTypes.oneOf(Object.keys(colors))
23+
color: PropTypes.string,
24+
reverse: PropTypes.bool
1825
}
1926

2027
Badge.defaultProps = {
21-
kind: 'primary'
28+
color: 'primary',
29+
theme: {
30+
fonts: {
31+
primary: 'sans-serif'
32+
},
33+
colors: {
34+
grayscale: { 0: '#222', 1: '#555' },
35+
primary: { 1: '#2196f3' }
36+
},
37+
reverseColors: {
38+
grayscale: { 0: '#fff', 1: '#bbb' },
39+
primary: { 1: '#71bcf7' }
40+
}
41+
}
2242
}
2343

2444
export default Badge

src/components/atoms/Badge/index.test.js

+36-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import React from 'react'
22
import { shallow } from 'enzyme'
3-
import Badge from '.'
3+
import Badge, * as styles from '.'
44

55
const wrap = (props = {}) => shallow(<Badge {...props} />)
66

@@ -13,3 +13,38 @@ it('renders props when passed in', () => {
1313
const wrapper = wrap({ id: 'foo' })
1414
expect(wrapper.find({ id: 'foo' })).toHaveLength(1)
1515
})
16+
17+
describe('styles', () => {
18+
const theme = {
19+
fonts: {
20+
primary: 'sans-serif'
21+
},
22+
colors: {
23+
grayscale: { 0: '#222', 1: '#555' },
24+
primary: { 1: '#2196f3' }
25+
},
26+
reverseColors: {
27+
grayscale: { 0: '#fff', 1: '#bbb' },
28+
primary: { 1: '#71bcf7' }
29+
}
30+
}
31+
32+
test('fontFamily', () => {
33+
expect(styles.fontFamily({ theme })).toBe(theme.fonts.primary)
34+
})
35+
36+
test('color', () => {
37+
expect(styles.color({ theme, reverse: false })).toBe(theme.reverseColors.grayscale[0])
38+
expect(styles.color({ theme, reverse: true })).toBe(theme.colors.grayscale[0])
39+
})
40+
41+
test('backgroundColor', () => {
42+
const props = {
43+
color: 'primary',
44+
reverse: false,
45+
theme
46+
}
47+
expect(styles.backgroundColor(props)).toBe(theme.colors.primary[1])
48+
expect(styles.backgroundColor({ ...props, reverse: true })).toBe(theme.reverseColors.primary[1])
49+
})
50+
})

src/components/atoms/Block/index.js

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import { PropTypes } from 'react'
2+
import styled from 'styled-components'
3+
4+
export const fontFamily = ({ theme }) => theme.fonts.primary
5+
6+
export const backgroundColor = ({ theme, reverse, color, transparent }) =>
7+
transparent ? 'transparent' : theme[reverse ? 'colors' : 'reverseColors'][color][0]
8+
9+
export const color = ({ theme, reverse, color }) =>
10+
theme[reverse ? 'reverseColors' : 'colors'][color][color === 'grayscale' ? 0 : 1]
11+
12+
const Block = styled.div`
13+
font-family: ${fontFamily};
14+
background-color: ${backgroundColor};
15+
color: ${color};
16+
`
17+
18+
Block.propTypes = {
19+
color: PropTypes.string,
20+
reverse: PropTypes.bool
21+
}
22+
23+
Block.defaultProps = {
24+
color: 'grayscale',
25+
theme: {
26+
fonts: {
27+
primary: 'sans-serif'
28+
},
29+
colors: {
30+
grayscale: { 0: '#222' }
31+
},
32+
reverseColors: {
33+
grayscale: { 0: '#fff' }
34+
}
35+
}
36+
}
37+
38+
export default Block
+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import React from 'react'
2+
import { shallow } from 'enzyme'
3+
import Block, * as styles from '.'
4+
5+
const wrap = (props = {}) => shallow(<Block {...props} />)
6+
7+
it('renders children when passed in', () => {
8+
const wrapper = wrap({ children: 'test' })
9+
expect(wrapper.contains('test')).toBe(true)
10+
})
11+
12+
it('renders props when passed in', () => {
13+
const wrapper = wrap({ id: 'foo' })
14+
expect(wrapper.find({ id: 'foo' })).toHaveLength(1)
15+
})
16+
17+
describe('styles', () => {
18+
const theme = {
19+
fonts: {
20+
primary: 'sans-serif'
21+
},
22+
colors: {
23+
grayscale: { 0: '#222' },
24+
primary: { 0: 'darkred', 1: 'red' }
25+
},
26+
reverseColors: {
27+
grayscale: { 0: '#fff' },
28+
primary: { 0: 'lightblue', 1: 'blue' }
29+
}
30+
}
31+
32+
test('fontFamily', () => {
33+
expect(styles.fontFamily({ theme })).toBe(theme.fonts.primary)
34+
})
35+
36+
test('backgroundColor', () => {
37+
const props = {
38+
color: 'grayscale',
39+
reverse: false,
40+
theme
41+
}
42+
expect(styles.backgroundColor(props)).toBe(theme.reverseColors.grayscale[0])
43+
expect(styles.backgroundColor({ ...props, transparent: true })).toBe('transparent')
44+
expect(styles.backgroundColor({ ...props, reverse: true })).toBe(theme.colors.grayscale[0])
45+
expect(styles.backgroundColor({ ...props, color: 'primary' }))
46+
.toBe(theme.reverseColors.primary[0])
47+
})
48+
49+
test('color', () => {
50+
const props = {
51+
color: 'grayscale',
52+
reverse: false,
53+
theme
54+
}
55+
expect(styles.color(props)).toBe(theme.colors.grayscale[0])
56+
expect(styles.color({ ...props, reverse: true })).toBe(theme.reverseColors.grayscale[0])
57+
expect(styles.color({ ...props, color: 'primary' })).toBe(theme.colors.primary[1])
58+
})
59+
})

0 commit comments

Comments
 (0)