Skip to content

Commit 002e3bd

Browse files
authored
Merge pull request #25 from rjz/feature/compose
Demos compose() utility
2 parents e3ccfba + 0702f27 commit 002e3bd

File tree

3 files changed

+25
-12
lines changed

3 files changed

+25
-12
lines changed

src/api.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,21 @@ const flakify = <T>(f: () => T): Promise<T> =>
1818
}, 200 + Math.random() * 2000)
1919
)
2020

21+
type Counter = {
22+
value: number,
23+
}
24+
2125
export type Api = {
22-
save(x: { value: number }): Promise<null>,
23-
load(): (Promise<{ value: number }>),
26+
save(x: Counter): Promise<null>,
27+
load(): (Promise<Counter>),
2428
}
2529

2630
export const api: Api = {
27-
save: (counter: { value: number }): Promise<null> => flakify(() => {
31+
save: (counter: Counter): Promise<null> => flakify(() => {
2832
localStorage.setItem('__counterValue', counter.value.toString())
2933
return null
3034
}),
31-
load: (): Promise<{ value: number }> => flakify(() => {
35+
load: (): Promise<Counter> => flakify(() => {
3236
const storedValue = parseInt(localStorage.getItem('__counterValue'), 10)
3337
return {
3438
value: storedValue || 0,

src/index.tsx

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import * as React from 'react' // tslint:disable-line
1+
import * as React from 'react'
22
import * as ReactDOM from 'react-dom'
33
import * as redux from 'redux'
44
import { Provider } from 'react-redux'
@@ -8,18 +8,19 @@ import * as state from './reducers'
88

99
import { Counter } from './components/counter'
1010

11-
let store: redux.Store<state.All> = redux.createStore(
11+
const store: redux.Store<state.All> = redux.createStore(
1212
state.reducers,
1313
{} as state.All,
1414
redux.applyMiddleware(thunk),
1515
)
1616

17-
// Commented out ("let HTML app be HTML app!")
17+
const Root: React.SFC<{}> = () => (
18+
<Provider store={store}>
19+
<Counter />
20+
</Provider>
21+
)
22+
1823
window.addEventListener('DOMContentLoaded', () => {
1924
const rootEl = document.getElementById('redux-app-root')
20-
if (rootEl) ReactDOM.render(
21-
<Provider store={store}>
22-
<Counter />
23-
</Provider>
24-
, rootEl)
25+
ReactDOM.render(<Root />, rootEl)
2526
})

src/utils.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import * as React from 'react'
2+
3+
type RC = React.SFC | React.ComponentClass
4+
5+
type HOC = (C: RC) => RC
6+
7+
export const compose = (Component: RC, ...hocs: Array<HOC>) =>
8+
hocs.reduce((C, hoc) => hoc(C), Component)

0 commit comments

Comments
 (0)