From f0018ebdb8c73e575b7fb66f7e2eef6580d2c898 Mon Sep 17 00:00:00 2001 From: RJ Zaworski Date: Wed, 20 Sep 2017 19:30:41 -0700 Subject: [PATCH 1/3] Declares api type --- src/api.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/api.ts b/src/api.ts index 655d922..4521b28 100644 --- a/src/api.ts +++ b/src/api.ts @@ -18,17 +18,21 @@ const flakify = (f: () => T): Promise => }, 200 + Math.random() * 2000) ) +type Counter = { + value: number, +} + export type Api = { - save(x: { value: number }): Promise, - load(): (Promise<{ value: number }>), + save(x: Counter): Promise, + load(): (Promise), } export const api: Api = { - save: (counter: { value: number }): Promise => flakify(() => { + save: (counter: Counter): Promise => flakify(() => { localStorage.setItem('__counterValue', counter.value.toString()) return null }), - load: (): Promise<{ value: number }> => flakify(() => { + load: (): Promise => flakify(() => { const storedValue = parseInt(localStorage.getItem('__counterValue'), 10) return { value: storedValue || 0, From 316fb545281b2a3aab4a873f9ca7a809c1f57568 Mon Sep 17 00:00:00 2001 From: RJ Zaworski Date: Wed, 20 Sep 2017 19:30:55 -0700 Subject: [PATCH 2/3] Clarifies entry-point --- src/index.tsx | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/index.tsx b/src/index.tsx index 99949e7..5fae8b2 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,4 +1,4 @@ -import * as React from 'react' // tslint:disable-line +import * as React from 'react' import * as ReactDOM from 'react-dom' import * as redux from 'redux' import { Provider } from 'react-redux' @@ -8,18 +8,19 @@ import * as state from './reducers' import { Counter } from './components/counter' -let store: redux.Store = redux.createStore( +const store: redux.Store = redux.createStore( state.reducers, {} as state.All, redux.applyMiddleware(thunk), ) -// Commented out ("let HTML app be HTML app!") +const Root: React.SFC<{}> = () => ( + + + +) + window.addEventListener('DOMContentLoaded', () => { const rootEl = document.getElementById('redux-app-root') - if (rootEl) ReactDOM.render( - - - - , rootEl) + ReactDOM.render(, rootEl) }) From 0702f27f7191054d3c1a3b6031621dfbafe7bbd3 Mon Sep 17 00:00:00 2001 From: RJ Zaworski Date: Wed, 20 Sep 2017 19:31:18 -0700 Subject: [PATCH 3/3] Demos compose() utility --- src/utils.ts | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/utils.ts diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..34fad00 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,8 @@ +import * as React from 'react' + +type RC = React.SFC | React.ComponentClass + +type HOC = (C: RC) => RC + +export const compose = (Component: RC, ...hocs: Array) => + hocs.reduce((C, hoc) => hoc(C), Component)