2016-11-16 17:18:39 +00:00
|
|
|
import {bindActionCreators, combineReducers} from 'redux';
|
|
|
|
import * as entities from './entities';
|
2016-12-01 01:50:59 +00:00
|
|
|
import configureStore from '../create';
|
2016-11-16 17:18:39 +00:00
|
|
|
import * as global from './global';
|
|
|
|
import * as db from '../../../common/database';
|
|
|
|
import * as models from '../../../models';
|
|
|
|
import * as fetch from '../../../common/fetch';
|
|
|
|
|
2016-11-30 03:55:27 +00:00
|
|
|
export async function init () {
|
|
|
|
const store = configureStore();
|
|
|
|
|
|
|
|
// Do things that must happen before initial render
|
2017-02-28 21:32:23 +00:00
|
|
|
const {addChanges, addChangesSync} = bindActionCreators(entities, store.dispatch);
|
2016-11-30 03:55:27 +00:00
|
|
|
const {newCommand} = bindActionCreators(global, store.dispatch);
|
2016-11-16 17:18:39 +00:00
|
|
|
|
2017-04-21 04:30:52 +00:00
|
|
|
const allDocs = await getAllDocs();
|
2016-11-16 17:18:39 +00:00
|
|
|
|
|
|
|
// Link DB changes to entities reducer/actions
|
|
|
|
const changes = allDocs.map(doc => [db.CHANGE_UPDATE, doc]);
|
2017-02-28 21:32:23 +00:00
|
|
|
addChangesSync(changes);
|
2016-11-16 17:18:39 +00:00
|
|
|
db.onChange(addChanges);
|
|
|
|
|
|
|
|
// Bind to fetch commands
|
|
|
|
fetch.onCommand(newCommand);
|
|
|
|
|
2016-11-30 03:55:27 +00:00
|
|
|
store.dispatch(global.init());
|
|
|
|
|
|
|
|
return store;
|
2016-11-16 17:18:39 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
export const reducer = combineReducers({
|
2017-03-03 20:09:08 +00:00
|
|
|
entities: entities.reducer,
|
|
|
|
global: global.reducer
|
2016-11-16 17:18:39 +00:00
|
|
|
});
|
2017-04-21 04:30:52 +00:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Async function to get all docs concurrently
|
|
|
|
*/
|
|
|
|
async function getAllDocs () {
|
|
|
|
// Restore docs in parent->child->grandchild order
|
|
|
|
const allQueryResults = await Promise.all([
|
|
|
|
models.settings.all(),
|
|
|
|
models.workspace.all(),
|
|
|
|
models.workspaceMeta.all(),
|
|
|
|
models.environment.all(),
|
|
|
|
models.cookieJar.all(),
|
|
|
|
models.requestGroup.all(),
|
|
|
|
models.requestGroupMeta.all(),
|
|
|
|
models.request.all(),
|
|
|
|
models.requestMeta.all(),
|
2017-07-17 18:20:38 +00:00
|
|
|
models.response.all(),
|
2017-04-21 04:30:52 +00:00
|
|
|
models.oAuth2Token.all()
|
|
|
|
]);
|
|
|
|
|
|
|
|
// Aggregate all results into one big array
|
|
|
|
const allDocs = [];
|
|
|
|
for (const result of allQueryResults) {
|
|
|
|
for (const doc of result) {
|
|
|
|
allDocs.push(doc);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return allDocs;
|
|
|
|
}
|