Merge pull request #225 from lbryio/redux-persist

Redux persist
This commit is contained in:
Jeremy Kauffman 2017-06-15 10:13:31 -04:00 committed by GitHub
commit 98782bbe2a
7 changed files with 387 additions and 200 deletions

View file

@ -11,6 +11,7 @@ import { selectResolvingUris } from "selectors/content";
import { selectCostInfoForUri } from "selectors/cost_info";
import { doOpenModal } from "actions/app";
import { doClaimEligiblePurchaseRewards } from "actions/rewards";
import batchActions from "util/batchActions";
export function doResolveUri(uri) {
return function(dispatch, getState) {
@ -63,20 +64,29 @@ export function doFetchFeaturedUris() {
const success = ({ Categories, Uris }) => {
let featuredUris = {};
const actions = [];
Categories.forEach(category => {
if (Uris[category] && Uris[category].length) {
featuredUris[category] = Uris[category];
const uris = Uris[category];
featuredUris[category] = uris;
uris.forEach(uri => {
actions.push(doResolveUri(uri));
});
}
});
dispatch({
actions.push({
type: types.FETCH_FEATURED_CONTENT_COMPLETED,
data: {
categories: Categories,
uris: featuredUris,
success: true,
},
});
dispatch(batchActions(...actions));
};
const failure = () => {

View file

@ -98,7 +98,9 @@ export function doDeleteFile(outpoint, deleteFromComputer) {
export function doFetchFileInfosAndPublishedClaims() {
return function(dispatch, getState) {
const state = getState();
const state = getState(),
isClaimListMinePending = selectClaimListMineIsPending(state),
isFileInfoListPending = selectFileListIsPending(state);
dispatch(doFetchClaimListMine());
dispatch(doFileList());

View file

@ -4,6 +4,7 @@ import lighthouse from "lighthouse";
import { doResolveUri } from "actions/content";
import { doNavigate, doHistoryPush } from "actions/app";
import { selectCurrentPage } from "selectors/app";
import batchActions from "util/batchActions";
export function doSearch(query) {
return function(dispatch, getState) {
@ -25,22 +26,26 @@ export function doSearch(query) {
dispatch(doNavigate("search", { query: query }));
} else {
lighthouse.search(query).then(results => {
const actions = [];
results.forEach(result => {
const uri = lbryuri.build({
channelName: result.channel_name,
contentName: result.name,
claimId: result.channel_id || result.claim_id,
});
dispatch(doResolveUri(uri));
actions.push(doResolveUri(uri));
});
dispatch({
actions.push({
type: types.SEARCH_COMPLETED,
data: {
query,
results,
},
});
dispatch(batchActions(...actions));
});
}
};

View file

@ -6,15 +6,13 @@ import FilePage from "page/filePage";
class ShowPage extends React.PureComponent {
componentWillMount() {
this.resolve(this.props);
const { isResolvingUri, resolveUri, uri } = this.props;
if (!isResolvingUri) resolveUri(uri);
}
componentWillReceiveProps(nextProps) {
this.resolve(nextProps);
}
resolve(props) {
const { isResolvingUri, resolveUri, claim, uri } = props;
const { isResolvingUri, resolveUri, claim, uri } = this.props;
if (!isResolvingUri && claim === undefined && uri) {
resolveUri(uri);
@ -26,7 +24,7 @@ class ShowPage extends React.PureComponent {
let innerContent = "";
if (isResolvingUri || !claim) {
if (isResolvingUri && !claim) {
innerContent = (
<section className="card">
<div className="card__inner">
@ -44,7 +42,7 @@ class ShowPage extends React.PureComponent {
</div>
</section>
);
} else if (claim.name.length && claim.name[0] === "@") {
} else if (claim && claim.name.length && claim.name[0] === "@") {
innerContent = <ChannelPage uri={uri} />;
} else if (claim) {
innerContent = <FilePage uri={uri} />;

View file

@ -1,50 +1,56 @@
const redux = require('redux');
const thunk = require('redux-thunk').default;
import { createLogger } from "redux-logger";
import appReducer from "reducers/app";
import availabilityReducer from "reducers/availability";
import claimsReducer from "reducers/claims";
import contentReducer from "reducers/content";
import costInfoReducer from "reducers/cost_info";
import fileInfoReducer from "reducers/file_info";
import rewardsReducer from "reducers/rewards";
import searchReducer from "reducers/search";
import settingsReducer from "reducers/settings";
import userReducer from "reducers/user";
import walletReducer from "reducers/wallet";
import { persistStore, autoRehydrate } from "redux-persist";
import createCompressor from "redux-persist-transform-compress";
import createFilter from "redux-persist-transform-filter";
import { REHYDRATE } from "redux-persist/constants";
import createActionBuffer from "redux-action-buffer";
const localForage = require("localforage");
const redux = require("redux");
const thunk = require("redux-thunk").default;
const env = ENV;
import { createLogger } from 'redux-logger';
import appReducer from 'reducers/app';
import availabilityReducer from 'reducers/availability';
import claimsReducer from 'reducers/claims';
import contentReducer from 'reducers/content';
import costInfoReducer from 'reducers/cost_info';
import fileInfoReducer from 'reducers/file_info';
import rewardsReducer from 'reducers/rewards';
import searchReducer from 'reducers/search';
import settingsReducer from 'reducers/settings';
import walletReducer from 'reducers/wallet';
import userReducer from 'reducers/user';
function isFunction(object) {
return typeof object === 'function';
return typeof object === "function";
}
function isNotFunction(object) {
return !isFunction(object);
return !isFunction(object);
}
function createBulkThunkMiddleware() {
return ({ dispatch, getState }) => next => action => {
if (action.type === 'BATCH_ACTIONS') {
action.actions
.filter(isFunction)
.map(actionFn => actionFn(dispatch, getState));
}
return next(action);
};
return ({ dispatch, getState }) => next => action => {
if (action.type === "BATCH_ACTIONS") {
action.actions
.filter(isFunction)
.map(actionFn => actionFn(dispatch, getState));
}
return next(action);
};
}
function enableBatching(reducer) {
return function batchingReducer(state, action) {
switch (action.type) {
case 'BATCH_ACTIONS':
return action.actions
.filter(isNotFunction)
.reduce(batchingReducer, state);
default:
return reducer(state, action);
}
};
return function batchingReducer(state, action) {
switch (action.type) {
case "BATCH_ACTIONS":
return action.actions
.filter(isNotFunction)
.reduce(batchingReducer, state);
default:
return reducer(state, action);
}
};
}
const reducers = redux.combineReducers({
@ -64,17 +70,36 @@ const reducers = redux.combineReducers({
const bulkThunk = createBulkThunkMiddleware();
const middleware = [thunk, bulkThunk];
if (env === 'development') {
const logger = createLogger({
collapsed: true
});
middleware.push(logger);
if (env === "development") {
const logger = createLogger({
collapsed: true,
});
middleware.push(logger);
}
middleware.push(createActionBuffer(REHYDRATE));
const createStoreWithMiddleware = redux.compose(
redux.applyMiddleware(...middleware)
autoRehydrate(),
redux.applyMiddleware(...middleware)
)(redux.createStore);
const reduxStore = createStoreWithMiddleware(enableBatching(reducers));
const compressor = createCompressor();
const saveClaimsFilter = createFilter("claims", [
"byId",
"claimsByUri",
"myClaims",
]);
const persistOptions = {
whitelist: ["claims"],
// Order is important. Needs to be compressed last or other transforms can't
// read the data
transforms: [saveClaimsFilter, compressor],
debounce: 1000,
storage: localForage,
};
persistStore(reduxStore, persistOptions);
export default reduxStore;

434
ui/package-lock.json generated
View file

@ -15,10 +15,9 @@
"dev": true
},
"acorn": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz",
"integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=",
"dev": true
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz",
"integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ="
},
"acorn-dynamic-import": {
"version": "2.0.2",
@ -201,6 +200,11 @@
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
"integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ="
},
"ast-types": {
"version": "0.8.15",
"resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.8.15.tgz",
"integrity": "sha1-ju8IJ/BN/w7IhXupJavj/qYZTlI="
},
"async": {
"version": "2.4.1",
"resolved": "https://registry.npmjs.org/async/-/async-2.4.1.tgz",
@ -666,6 +670,11 @@
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
},
"base62": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/base62/-/base62-0.1.1.tgz",
"integrity": "sha1-e0F0wvlESXU7EcJlHAg9qEGnsIQ="
},
"base64-js": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.2.0.tgz",
@ -1312,6 +1321,11 @@
"integrity": "sha1-RTVSSKiJeQNLZ5Lhm7gfK3l13Q0=",
"dev": true
},
"es3ify": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/es3ify/-/es3ify-0.1.4.tgz",
"integrity": "sha1-rZ+l3xrjTz8x4SEbWBiy1RB439E="
},
"es5-ext": {
"version": "0.10.23",
"resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.23.tgz",
@ -1507,17 +1521,29 @@
}
}
},
"esmangle-evaluator": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/esmangle-evaluator/-/esmangle-evaluator-1.0.1.tgz",
"integrity": "sha1-Yg2GbvSGGzMR91dm1SqFcrs8YzY="
},
"espree": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/espree/-/espree-3.4.3.tgz",
"integrity": "sha1-KRC1zNSc6JPC//+qtP2LOjG4I3Q=",
"dev": true
"dev": true,
"dependencies": {
"acorn": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz",
"integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=",
"dev": true
}
}
},
"esprima": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
"dev": true
"esprima-fb": {
"version": "3001.1.0-dev-harmony-fb",
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-3001.0001.0000-dev-harmony-fb.tgz",
"integrity": "sha1-t303q8046gt3Qmu4vCkizmtCZBE="
},
"esquery": {
"version": "1.0.0",
@ -1650,6 +1676,18 @@
"resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
"integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA="
},
"falafel": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/falafel/-/falafel-1.2.0.tgz",
"integrity": "sha1-wY0k71CRF0pJfzGM0ksCaiXN2rQ=",
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
}
}
},
"fast-levenshtein": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
@ -1746,8 +1784,7 @@
"foreach": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/foreach/-/foreach-2.0.5.tgz",
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k=",
"dev": true
"integrity": "sha1-C+4AUBiusmDQo6865ljdATbsG5k="
},
"forever-agent": {
"version": "0.6.1",
@ -1787,9 +1824,9 @@
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fsevents": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.1.tgz",
"integrity": "sha1-8Z/Sj0Pur3YWgOUZogPE0LPTGv8=",
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz",
"integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==",
"optional": true,
"dependencies": {
"abbrev": {
@ -1797,22 +1834,22 @@
"bundled": true,
"optional": true
},
"ajv": {
"version": "4.11.8",
"bundled": true,
"optional": true
},
"ansi-regex": {
"version": "2.1.1",
"bundled": true
},
"ansi-styles": {
"version": "2.2.1",
"bundled": true,
"optional": true
},
"aproba": {
"version": "1.1.1",
"bundled": true,
"optional": true
},
"are-we-there-yet": {
"version": "1.1.2",
"version": "1.1.4",
"bundled": true,
"optional": true
},
@ -1859,7 +1896,7 @@
"bundled": true
},
"brace-expansion": {
"version": "1.1.6",
"version": "1.1.7",
"bundled": true
},
"buffer-shims": {
@ -1867,12 +1904,12 @@
"bundled": true
},
"caseless": {
"version": "0.11.0",
"version": "0.12.0",
"bundled": true,
"optional": true
},
"chalk": {
"version": "1.1.3",
"co": {
"version": "4.6.0",
"bundled": true,
"optional": true
},
@ -1884,11 +1921,6 @@
"version": "1.0.5",
"bundled": true
},
"commander": {
"version": "2.9.0",
"bundled": true,
"optional": true
},
"concat-map": {
"version": "0.0.1",
"bundled": true
@ -1919,12 +1951,12 @@
}
},
"debug": {
"version": "2.2.0",
"version": "2.6.8",
"bundled": true,
"optional": true
},
"deep-extend": {
"version": "0.4.1",
"version": "0.4.2",
"bundled": true,
"optional": true
},
@ -1942,13 +1974,8 @@
"bundled": true,
"optional": true
},
"escape-string-regexp": {
"version": "1.0.5",
"bundled": true,
"optional": true
},
"extend": {
"version": "3.0.0",
"version": "3.0.1",
"bundled": true,
"optional": true
},
@ -1962,7 +1989,7 @@
"optional": true
},
"form-data": {
"version": "2.1.2",
"version": "2.1.4",
"bundled": true,
"optional": true
},
@ -1971,7 +1998,7 @@
"bundled": true
},
"fstream": {
"version": "1.0.10",
"version": "1.0.11",
"bundled": true
},
"fstream-ignore": {
@ -1980,22 +2007,12 @@
"optional": true
},
"gauge": {
"version": "2.7.3",
"bundled": true,
"optional": true
},
"generate-function": {
"version": "2.0.0",
"bundled": true,
"optional": true
},
"generate-object-property": {
"version": "1.2.0",
"version": "2.7.4",
"bundled": true,
"optional": true
},
"getpass": {
"version": "0.1.6",
"version": "0.1.7",
"bundled": true,
"optional": true,
"dependencies": {
@ -2007,25 +2024,20 @@
}
},
"glob": {
"version": "7.1.1",
"version": "7.1.2",
"bundled": true
},
"graceful-fs": {
"version": "4.1.11",
"bundled": true
},
"graceful-readlink": {
"version": "1.0.1",
"har-schema": {
"version": "1.0.5",
"bundled": true,
"optional": true
},
"har-validator": {
"version": "2.0.6",
"bundled": true,
"optional": true
},
"has-ansi": {
"version": "2.0.0",
"version": "4.2.1",
"bundled": true,
"optional": true
},
@ -2065,16 +2077,6 @@
"version": "1.0.0",
"bundled": true
},
"is-my-json-valid": {
"version": "2.15.0",
"bundled": true,
"optional": true
},
"is-property": {
"version": "1.0.2",
"bundled": true,
"optional": true
},
"is-typedarray": {
"version": "1.0.0",
"bundled": true,
@ -2104,31 +2106,43 @@
"bundled": true,
"optional": true
},
"json-stable-stringify": {
"version": "1.0.1",
"bundled": true,
"optional": true
},
"json-stringify-safe": {
"version": "5.0.1",
"bundled": true,
"optional": true
},
"jsonpointer": {
"version": "4.0.1",
"jsonify": {
"version": "0.0.0",
"bundled": true,
"optional": true
},
"jsprim": {
"version": "1.3.1",
"version": "1.4.0",
"bundled": true,
"optional": true
"optional": true,
"dependencies": {
"assert-plus": {
"version": "1.0.0",
"bundled": true,
"optional": true
}
}
},
"mime-db": {
"version": "1.26.0",
"version": "1.27.0",
"bundled": true
},
"mime-types": {
"version": "2.1.14",
"version": "2.1.15",
"bundled": true
},
"minimatch": {
"version": "3.0.3",
"version": "3.0.4",
"bundled": true
},
"minimist": {
@ -2140,22 +2154,22 @@
"bundled": true
},
"ms": {
"version": "0.7.1",
"version": "2.0.0",
"bundled": true,
"optional": true
},
"node-pre-gyp": {
"version": "0.6.33",
"version": "0.6.36",
"bundled": true,
"optional": true
},
"nopt": {
"version": "3.0.6",
"version": "4.0.1",
"bundled": true,
"optional": true
},
"npmlog": {
"version": "4.0.2",
"version": "4.1.0",
"bundled": true,
"optional": true
},
@ -2177,17 +2191,27 @@
"version": "1.4.0",
"bundled": true
},
"os-homedir": {
"version": "1.0.2",
"bundled": true,
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
"bundled": true,
"optional": true
},
"osenv": {
"version": "0.1.4",
"bundled": true,
"optional": true
},
"path-is-absolute": {
"version": "1.0.1",
"bundled": true
},
"pinkie": {
"version": "2.0.4",
"bundled": true,
"optional": true
},
"pinkie-promise": {
"version": "2.0.1",
"performance-now": {
"version": "0.2.0",
"bundled": true,
"optional": true
},
@ -2201,12 +2225,12 @@
"optional": true
},
"qs": {
"version": "6.3.1",
"version": "6.4.0",
"bundled": true,
"optional": true
},
"rc": {
"version": "1.1.7",
"version": "1.2.1",
"bundled": true,
"optional": true,
"dependencies": {
@ -2218,17 +2242,20 @@
}
},
"readable-stream": {
"version": "2.2.2",
"bundled": true,
"optional": true
"version": "2.2.9",
"bundled": true
},
"request": {
"version": "2.79.0",
"version": "2.81.0",
"bundled": true,
"optional": true
},
"rimraf": {
"version": "2.5.4",
"version": "2.6.1",
"bundled": true
},
"safe-buffer": {
"version": "5.0.1",
"bundled": true
},
"semver": {
@ -2252,7 +2279,7 @@
"optional": true
},
"sshpk": {
"version": "1.10.2",
"version": "1.13.0",
"bundled": true,
"optional": true,
"dependencies": {
@ -2264,7 +2291,7 @@
}
},
"string_decoder": {
"version": "0.10.31",
"version": "1.0.1",
"bundled": true
},
"string-width": {
@ -2285,31 +2312,14 @@
"bundled": true,
"optional": true
},
"supports-color": {
"version": "2.0.0",
"bundled": true,
"optional": true
},
"tar": {
"version": "2.2.1",
"bundled": true
},
"tar-pack": {
"version": "3.3.0",
"version": "3.4.0",
"bundled": true,
"optional": true,
"dependencies": {
"once": {
"version": "1.3.3",
"bundled": true,
"optional": true
},
"readable-stream": {
"version": "2.1.5",
"bundled": true,
"optional": true
}
}
"optional": true
},
"tough-cookie": {
"version": "2.3.2",
@ -2317,7 +2327,7 @@
"optional": true
},
"tunnel-agent": {
"version": "0.4.3",
"version": "0.6.0",
"bundled": true,
"optional": true
},
@ -2346,18 +2356,13 @@
"optional": true
},
"wide-align": {
"version": "1.1.0",
"version": "1.1.2",
"bundled": true,
"optional": true
},
"wrappy": {
"version": "1.0.2",
"bundled": true
},
"xtend": {
"version": "4.0.1",
"bundled": true,
"optional": true
}
}
},
@ -2626,9 +2631,9 @@
}
},
"iconv-lite": {
"version": "0.4.17",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.17.tgz",
"integrity": "sha1-T9qjs4rLwsAxsEXQ7c3+HsqxjI0="
"version": "0.4.18",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.18.tgz",
"integrity": "sha512-sr1ZQph3UwHTR0XftSbK85OvBbxe/abLGzEnPENCQwmHf7sck8Oyu4ob3LgBxWWxRoM+QszeUyl7jbqapu2TqA=="
},
"ieee754": {
"version": "1.1.8",
@ -2642,6 +2647,11 @@
"integrity": "sha1-QyNS5XrM2HqzEQ6C0/6g5HgSFW0=",
"dev": true
},
"immediate": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz",
"integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps="
},
"imurmurhash": {
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@ -2674,6 +2684,11 @@
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"inline-process-browser": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/inline-process-browser/-/inline-process-browser-1.0.0.tgz",
"integrity": "sha1-RqYbFT3TybFiSxoAYm7bT39BTyI="
},
"inquirer": {
"version": "0.12.0",
"resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
@ -2903,7 +2918,15 @@
"version": "3.8.4",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.8.4.tgz",
"integrity": "sha1-UgtFZPhlc7qWZir4Woyvp7S1pvY=",
"dev": true
"dev": true,
"dependencies": {
"esprima": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz",
"integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=",
"dev": true
}
}
},
"jsbn": {
"version": "0.1.1",
@ -2976,6 +2999,18 @@
}
}
},
"jstransform": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/jstransform/-/jstransform-3.0.0.tgz",
"integrity": "sha1-olkats7o2XvzvoMNv6IxO4fNZAs=",
"dependencies": {
"source-map": {
"version": "0.1.31",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.31.tgz",
"integrity": "sha1-n3BNDWnZ4TioG63267T94z0VHGE="
}
}
},
"jsx-ast-utils": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz",
@ -3004,6 +3039,11 @@
"integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
"dev": true
},
"lie": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/lie/-/lie-3.0.2.tgz",
"integrity": "sha1-/9oh17uibzd8rYZdNkmy/Izjn+o="
},
"lint-staged": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-3.6.1.tgz",
@ -3065,6 +3105,11 @@
"integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=",
"dev": true
},
"localforage": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/localforage/-/localforage-1.5.0.tgz",
"integrity": "sha1-a5lOGbVmEfqF3zmS3zl6xKtm6BU="
},
"locate-path": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
@ -3159,6 +3204,16 @@
"integrity": "sha1-9HGh2khr5g9quVXRcRVSPdHSVdU=",
"dev": true
},
"lodash.forin": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.forin/-/lodash.forin-4.4.0.tgz",
"integrity": "sha1-XT8grlZAEfvog4H32YlJyclRlzE="
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"lodash.isarguments": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
@ -3171,12 +3226,32 @@
"integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=",
"dev": true
},
"lodash.isempty": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz",
"integrity": "sha1-b4bL7di+TsmHvpqvM8loTbGzHn4="
},
"lodash.keys": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
"integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=",
"dev": true
},
"lodash.pickby": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/lodash.pickby/-/lodash.pickby-4.6.0.tgz",
"integrity": "sha1-feoh2MGNdwOifHBMFdO4SmfjOv8="
},
"lodash.set": {
"version": "4.3.2",
"resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz",
"integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM="
},
"lodash.unset": {
"version": "4.5.2",
"resolved": "https://registry.npmjs.org/lodash.unset/-/lodash.unset-4.5.2.tgz",
"integrity": "sha1-Nw0dPoW3Kn4bDN8tJyEhMG8j5O0="
},
"log-symbols": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
@ -3210,6 +3285,11 @@
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz",
"integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew=="
},
"lz-string": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz",
"integrity": "sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY="
},
"map-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
@ -3487,8 +3567,7 @@
"object-keys": {
"version": "1.0.11",
"resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.0.11.tgz",
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0=",
"dev": true
"integrity": "sha1-xUYBd4rVYPEULODgG8yotW0TQm0="
},
"object.assign": {
"version": "4.0.4",
@ -3922,19 +4001,19 @@
"integrity": "sha1-0xzLFJmuIjwNIdFIVlCqSg03TOA="
},
"react": {
"version": "15.5.4",
"resolved": "https://registry.npmjs.org/react/-/react-15.5.4.tgz",
"integrity": "sha1-+oPrAVBqsjfNwcjDsc6o3gEr8Ec="
"version": "15.6.0",
"resolved": "https://registry.npmjs.org/react/-/react-15.6.0.tgz",
"integrity": "sha1-wjKZtI4w7TAlCM6J4aAskZ+Ca84="
},
"react-dom": {
"version": "15.5.4",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.5.4.tgz",
"integrity": "sha1-ugwoeG/VLtfk8hNf4CiNRirvk9o="
"version": "15.6.0",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.0.tgz",
"integrity": "sha1-i8I8sMgOcGNVt2yp+M5Hz3vfttE="
},
"react-modal": {
"version": "1.9.2",
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-1.9.2.tgz",
"integrity": "sha512-4FG4SsYdJ9ncLYIP17Q8HEWRXbEsd+lHkG3vJd+koqXdPDMzP+2KZFjrkMOVvLyvXYSpgVTqEqeLFnkJ2x8+Ig=="
"version": "1.9.4",
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-1.9.4.tgz",
"integrity": "sha512-ourtHswaEA/KyeI20AsCOSWTC23WF3z0b1C3qzQtA5UhBOdwQ2sEK2OPJGN8u7iFGJ83etmk605aeF/i4tGVEQ=="
},
"react-redux": {
"version": "5.0.5",
@ -3967,6 +4046,18 @@
"integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
"dev": true
},
"recast": {
"version": "0.10.43",
"resolved": "https://registry.npmjs.org/recast/-/recast-0.10.43.tgz",
"integrity": "sha1-uV1Q9tYHYaX2JS4V2AZ4FoSRzn8=",
"dependencies": {
"esprima-fb": {
"version": "15001.1001.0-dev-harmony-fb",
"resolved": "https://registry.npmjs.org/esprima-fb/-/esprima-fb-15001.1001.0-dev-harmony-fb.tgz",
"integrity": "sha1-Q761fsJujPI3092LM+QlM1d/Jlk="
}
}
},
"rechoir": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
@ -3997,11 +4088,31 @@
"resolved": "https://registry.npmjs.org/redux/-/redux-3.6.0.tgz",
"integrity": "sha1-iHwrPQub2G7KK+cFccJ2VMGeGI0="
},
"redux-action-buffer": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/redux-action-buffer/-/redux-action-buffer-1.1.0.tgz",
"integrity": "sha1-nGkqtlMrBC0NQ6nwGkitoSD8lBo="
},
"redux-logger": {
"version": "3.0.6",
"resolved": "https://registry.npmjs.org/redux-logger/-/redux-logger-3.0.6.tgz",
"integrity": "sha1-91VZZvMJjzyIYExEnPC69XeCdL8="
},
"redux-persist": {
"version": "4.8.0",
"resolved": "https://registry.npmjs.org/redux-persist/-/redux-persist-4.8.0.tgz",
"integrity": "sha1-F/2ZiUm97vknXkz2CtW74cc2dfw="
},
"redux-persist-transform-compress": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/redux-persist-transform-compress/-/redux-persist-transform-compress-4.2.0.tgz",
"integrity": "sha1-UInimd9xMIePykX5f/6CiIugJpA="
},
"redux-persist-transform-filter": {
"version": "0.0.10",
"resolved": "https://registry.npmjs.org/redux-persist-transform-filter/-/redux-persist-transform-filter-0.0.10.tgz",
"integrity": "sha1-mjsQbOiTnSy79SEsdH7Rd//xQoA="
},
"redux-thunk": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.2.0.tgz",
@ -4523,8 +4634,29 @@
"through": {
"version": "2.3.8",
"resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
"dev": true
"integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
},
"through2": {
"version": "0.6.5",
"resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz",
"integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=",
"dependencies": {
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.0.34",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz",
"integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw="
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ="
}
}
},
"timers-browserify": {
"version": "2.0.2",
@ -4604,9 +4736,9 @@
"integrity": "sha1-BMgamb3V3FImPqKdJMa/jUgYpLs="
},
"uglify-js": {
"version": "2.8.28",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.28.tgz",
"integrity": "sha512-WqKNbmNJKzIdIEQu/U2ytgGBbhCy2PVks94GoetczOAJ/zCgVu2CuO7gguI5KPFGPtUtI1dmPQl6h0D4cPzypA==",
"version": "2.8.29",
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
"integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
"dev": true,
"dependencies": {
"camelcase": {
@ -4652,6 +4784,11 @@
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
"dev": true
},
"unreachable-branch-transform": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/unreachable-branch-transform/-/unreachable-branch-transform-0.3.0.tgz",
"integrity": "sha1-2ZzExudG0mSSiEW2EdtUsPNHTKo="
},
"url": {
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz",
@ -4765,6 +4902,12 @@
"integrity": "sha1-LgRX8KuxrF3zqxBsacZy8jZ4Xwc=",
"dev": true,
"dependencies": {
"acorn": {
"version": "5.0.3",
"resolved": "https://registry.npmjs.org/acorn/-/acorn-5.0.3.tgz",
"integrity": "sha1-xGDfCEkUY/AozLguqzcwvwEIez0=",
"dev": true
},
"camelcase": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
@ -5090,8 +5233,7 @@
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=",
"dev": true
"integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68="
},
"y18n": {
"version": "3.2.1",

View file

@ -26,6 +26,7 @@
"babel-preset-react": "^6.11.1",
"from2": "^2.3.0",
"jshashes": "^1.0.6",
"localforage": "^1.5.0",
"node-sass": "^3.8.0",
"rc-progress": "^2.0.6",
"react": "^15.4.0",
@ -33,7 +34,11 @@
"react-modal": "^1.5.2",
"react-redux": "^5.0.3",
"redux": "^3.6.0",
"redux-action-buffer": "^1.1.0",
"redux-logger": "^3.0.1",
"redux-persist": "^4.8.0",
"redux-persist-transform-compress": "^4.2.0",
"redux-persist-transform-filter": "0.0.10",
"redux-thunk": "^2.2.0",
"render-media": "^2.10.0",
"reselect": "^3.0.0",