Skip to content

Commit 81e8c20

Browse files
committed
localStorage setup
1 parent e095ef0 commit 81e8c20

File tree

12 files changed

+151
-43
lines changed

12 files changed

+151
-43
lines changed

lib/reducers/progress/index.js

+1-2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
"use strict";
2-
var redux_pouchdb_1 = require('redux-pouchdb');
32
var _types_1 = require('../../actions/_types');
43
var store_1 = require('../../store');
54
var _progress = {
@@ -51,4 +50,4 @@ function progressReducer(progress, action) {
5150
}
5251
}
5352
Object.defineProperty(exports, "__esModule", { value: true });
54-
exports.default = redux_pouchdb_1.persistentReducer(progressReducer);
53+
exports.default = progressReducer;

lib/store/index.js

+5-13
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,8 @@
11
"use strict";
2-
var env = 'dev';
32
var redux_1 = require('redux');
4-
var redux_thunk_1 = require('redux-thunk');
5-
var PouchDB = require('pouchdb');
6-
var redux_pouchdb_1 = require('redux-pouchdb');
3+
var redux_localstorage_1 = require('redux-localstorage');
74
var reducers_1 = require('../reducers');
8-
var db = new PouchDB('coderoad');
9-
var middlewares = [redux_thunk_1.default];
10-
if (env && env === 'dev') {
11-
var createLogger = require('redux-logger');
12-
var logger = createLogger();
13-
middlewares.push(logger);
14-
}
15-
var createStoreWithMiddleware = redux_1.compose(redux_1.applyMiddleware.apply(void 0, middlewares), redux_pouchdb_1.persistentStore(db))(redux_1.createStore);
16-
exports.store = createStoreWithMiddleware(reducers_1.default, {});
5+
var middleware_1 = require('./middleware');
6+
var initialState = {};
7+
var reducer = redux_1.compose(redux_localstorage_1.mergePersistedState())(reducers_1.default);
8+
exports.store = middleware_1.default(reducer, initialState);

lib/store/localStorage.js

+10
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
"use strict";
2+
var redux_1 = require('redux');
3+
var redux_localstorage_1 = require('redux-localstorage');
4+
var adapter = require('redux-localstorage/lib/adapters/localStorage');
5+
var redux_localstorage_filter_1 = require('redux-localstorage-filter');
6+
var key = 'coderoad';
7+
var storage = redux_1.compose(redux_localstorage_filter_1.default('nested.key'))(adapter(window.localStorage));
8+
var localStorage = redux_localstorage_1.default(storage, key);
9+
Object.defineProperty(exports, "__esModule", { value: true });
10+
exports.default = localStorage;

lib/store/middleware.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
"use strict";
2+
var env = 'dev';
3+
var redux_1 = require('redux');
4+
var redux_thunk_1 = require('redux-thunk');
5+
var localStorage_1 = require('./localStorage');
6+
var middlewares = [redux_thunk_1.default];
7+
if (env && env === 'dev') {
8+
var createLogger = require('redux-logger');
9+
var logger = createLogger();
10+
middlewares.push(logger);
11+
}
12+
var createStoreWithMiddleware = redux_1.compose(redux_1.applyMiddleware.apply(void 0, middlewares), localStorage_1.default)(redux_1.createStore);
13+
Object.defineProperty(exports, "__esModule", { value: true });
14+
exports.default = createStoreWithMiddleware;

package.json

+4-4
Original file line numberDiff line numberDiff line change
@@ -42,15 +42,15 @@
4242
"highlights": "1.3.1",
4343
"marked": "0.3.5",
4444
"material-ui": "0.15.0-beta.2",
45-
"pouchdb": "^5.3.2",
4645
"react": "15.0.1",
4746
"react-dom": "15.0.1",
4847
"react-redux": "4.4.5",
4948
"react-tap-event-plugin": "1.0.0",
5049
"redux": "3.5.2",
51-
"redux-logger": "^2.6.1",
52-
"redux-pouchdb": "0.0.7",
53-
"redux-thunk": "^2.0.1"
50+
"redux-localstorage": "^1.0.0-rc4",
51+
"redux-localstorage-filter": "^0.1.1",
52+
"redux-logger": "2.6.1",
53+
"redux-thunk": "2.0.1"
5454
},
5555
"scripts": {
5656
"test": "ava",

src/reducers/progress/index.ts

+1-3
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import {persistentReducer} from 'redux-pouchdb';
21
import {
32
PROGRESS_LOAD, COMPLETE_PAGE, COMPLETE_CHAPTER, COMPLETE_TUTORIAL
43
} from '../../actions/_types';
@@ -19,7 +18,7 @@ const _progress: CR.Progress = {
1918
}]
2019
};
2120

22-
function progressReducer(
21+
export default function progressReducer(
2322
progress = _progress, action: Action
2423
): CR.Progress {
2524
switch (action.type) {
@@ -54,4 +53,3 @@ function progressReducer(
5453
return progress;
5554
}
5655
}
57-
export default persistentReducer(progressReducer);

src/store/index.ts

+11-21
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,14 @@
1-
const env = 'dev';
1+
import {compose} from 'redux';
2+
import {mergePersistedState} from 'redux-localstorage';
3+
import rootReducer from '../reducers';
4+
import createStoreWithMiddleware from './middleware';
25

3-
import {createStore, compose, applyMiddleware} from 'redux';
4-
import thunk from 'redux-thunk';
5-
import * as PouchDB from 'pouchdb';
6-
import {persistentStore} from 'redux-pouchdb';
7-
import reducer from '../reducers';
6+
const initialState = {};
87

9-
const db = new PouchDB('coderoad');
8+
const reducer = compose(
9+
mergePersistedState()
10+
)(rootReducer);
1011

11-
const middlewares = [thunk];
12-
13-
if (env && env === 'dev') {
14-
const createLogger = require('redux-logger');
15-
const logger = createLogger();
16-
middlewares.push(logger);
17-
}
18-
19-
const createStoreWithMiddleware = compose(
20-
applyMiddleware(...middlewares),
21-
persistentStore(db)
22-
)(createStore);
23-
24-
export let store: Redux.Store = createStoreWithMiddleware(reducer, {});
12+
export let store: Redux.Store = createStoreWithMiddleware(
13+
reducer, initialState
14+
);

src/store/localStorage.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import {compose} from 'redux';
2+
import persistState from 'redux-localstorage';
3+
import * as adapter from 'redux-localstorage/lib/adapters/localStorage';
4+
import filter from 'redux-localstorage-filter';
5+
6+
const key = 'coderoad';
7+
8+
const storage = compose(
9+
filter('nested.key')
10+
)(adapter(window.localStorage));
11+
12+
const localStorage = persistState(storage, key);
13+
export default localStorage

src/store/middleware.ts

+20
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
const env = 'dev'; // toggle on/off logger
2+
3+
import {createStore, compose, applyMiddleware} from 'redux';
4+
import thunk from 'redux-thunk';
5+
import localStorage from './localStorage';
6+
7+
const middlewares = [thunk];
8+
9+
if (env && env === 'dev') {
10+
const createLogger = require('redux-logger');
11+
const logger = createLogger();
12+
middlewares.push(logger);
13+
}
14+
15+
const createStoreWithMiddleware = compose(
16+
applyMiddleware(...middlewares),
17+
localStorage
18+
)(createStore);
19+
20+
export default createStoreWithMiddleware;

src/typings/redux/redux-logger.d.ts

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Type definitions for redux-logger v2.6.0
2+
// Project: https://github.com/fcomb/redux-logger
3+
// Definitions by: Alexander Rusakov <https://github.com/arusakov/>
4+
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5+
6+
/// <reference path="../redux/redux.d.ts" />
7+
8+
declare module 'redux-logger' {
9+
10+
type LoggerPredicate = (getState: () => any, action: any) => boolean;
11+
12+
type StateToString = (state: any) => string;
13+
type ActionToString = (action: any) => string;
14+
type ErrorToString = (error: any, prevState: any) => string;
15+
16+
interface ColorsObject {
17+
title?: boolean | ActionToString;
18+
prevState?: boolean | StateToString;
19+
action?: boolean | ActionToString;
20+
nextState?: boolean | StateToString;
21+
error?: boolean | ErrorToString;
22+
}
23+
24+
interface LevelObject {
25+
prevState?: string | boolean | StateToString;
26+
action?: string | boolean | ActionToString;
27+
nextState?: string | boolean | StateToString;
28+
error?: string | boolean | ErrorToString;
29+
}
30+
31+
interface ReduxLoggerOptions {
32+
level?: string | ActionToString | LevelObject;
33+
duration?: boolean;
34+
timestamp?: boolean;
35+
colors?: ColorsObject;
36+
logger?: any;
37+
logErrors?: boolean;
38+
collapsed?: boolean | LoggerPredicate;
39+
predicate?: LoggerPredicate;
40+
stateTransformer?: (state: any) => any;
41+
actionTransformer?: (action: any) => any;
42+
errorTransformer?: (error: any) => any;
43+
}
44+
45+
// Trickery to get TypeScript to accept that our anonymous, non-default export is a function.
46+
// see https://github.com/Microsoft/TypeScript/issues/3612 for more
47+
namespace createLogger {}
48+
function createLogger(options?: ReduxLoggerOptions): Redux.Middleware;
49+
export = createLogger;
50+
}

src/typings/redux/redux-thunk.d.ts

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// Type definitions for redux-thunk v2.0.1
2+
// Project: https://github.com/gaearon/redux-thunk
3+
// Definitions by: Qubo <https://github.com/tkqubo>
4+
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
5+
6+
/// <reference path="../redux/redux.d.ts" />
7+
8+
declare namespace ReduxThunk {
9+
export interface Thunk extends Redux.Middleware {}
10+
export interface ThunkInterface {
11+
<T>(dispatch: Redux.Dispatch, getState?: () => T): any;
12+
}
13+
}
14+
15+
declare module "redux-thunk" {
16+
var thunk: ReduxThunk.Thunk;
17+
export default thunk;
18+
}

tsconfig.json

+4
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@
4444
"src/typings/react/react-addons-transition-group.d.ts",
4545
"src/typings/react/react-tap-event-plugin.d.ts",
4646
"src/typings/react/react.d.ts",
47+
"src/typings/redux/redux-logger.d.ts",
48+
"src/typings/redux/redux-thunk.d.ts",
4749
"src/typings/redux/redux.d.ts",
4850
"src/typings/space-pen/space-pen.d.ts",
4951
"src/typings/status-bar/status-bar.d.ts",
@@ -106,6 +108,8 @@
106108
"src/services/polyfills.ts",
107109
"src/services/system.ts",
108110
"src/store/index.ts",
111+
"src/store/localStorage.ts",
112+
"src/store/middleware.ts",
109113
"src/components/Alert/index.tsx",
110114
"src/components/App.tsx",
111115
"src/components/AppMenu/index.tsx",

0 commit comments

Comments
 (0)