-
{workspaces.active.name}
+ {workspace.name}
{loading ? : ''}
@@ -52,12 +72,12 @@ class WorkspaceDropdown extends Component {
-
- db.requestGroupCreate({parentId: workspaces.active._id})}>
+ db.requestGroupCreate({parentId: workspaces._id})}>
New Request Group
@@ -72,24 +92,24 @@ class WorkspaceDropdown extends Component {
- db.remove(workspaces.active)}>
- Delete {workspaces.active.name}
+ db.remove(workspace)}>
+ Delete {workspace.name}
{allWorkspaces.map(w => {
- return w._id === workspaces.active._id ? null : (
+ return w._id === workspace._id ? null : (
- db.workspaceActivate(w)}>
+ actions.workspaces.activate(w)}>
Switch to {w.name}
)
})}
- db.workspaceCreate()}>
+ this._workspaceCreate()}>
Create Workspace
@@ -107,7 +127,7 @@ class WorkspaceDropdown extends Component {
WorkspaceDropdown.propTypes = {
loading: PropTypes.bool.isRequired,
workspaces: PropTypes.shape({
- active: PropTypes.object.isRequired
+ activeId: PropTypes.object
}),
entities: PropTypes.shape({
workspaces: PropTypes.object.isRequired
@@ -115,6 +135,9 @@ WorkspaceDropdown.propTypes = {
actions: PropTypes.shape({
requestGroups: PropTypes.shape({
showEnvironmentEditModal: PropTypes.func.isRequired
+ }),
+ workspaces: PropTypes.shape({
+ activate: PropTypes.func.isRequired
})
})
};
@@ -131,7 +154,8 @@ function mapStateToProps (state) {
function mapDispatchToProps (dispatch) {
return {
actions: {
- requestGroups: bindActionCreators(RequestGroupActions, dispatch)
+ requestGroups: bindActionCreators(RequestGroupActions, dispatch),
+ workspaces: bindActionCreators(WorkspaceActions, dispatch)
}
}
}
diff --git a/app/database/index.js b/app/database/index.js
index e1a64eb952..fc2e4b8e16 100644
--- a/app/database/index.js
+++ b/app/database/index.js
@@ -185,15 +185,10 @@ export function workspaceCreate (patch = {}) {
return modelCreate(TYPE_WORKSPACE, 'wrk', {
name: 'New Workspace',
activeRequestId: null,
- activated: Date.now(), // TODO: Delete this property (replace with something better)
environments: []
}, patch);
}
-export function workspaceActivate (workspace) {
- return update(workspace, {activated: Date.now()});
-}
-
export function workspaceAll () {
return db.find({
selector: {type: 'Workspace'}
@@ -211,18 +206,6 @@ export function workspaceAll () {
})
}
-export function workspaceGetActive () {
- return db.find({
- selector: {
- activated: {$gte: 0}, // HACK: because can't use $exists here?
- type: {$eq: 'Workspace'}
- },
- sort: [{activated: 'desc'}],
- limit: 1
- })
-}
-
-
// ~~~~~~~~ //
// SETTINGS //
// ~~~~~~~~ //
diff --git a/app/redux/modules/entities.js b/app/redux/modules/entities.js
index d95ed1ac53..de5b5e8303 100644
--- a/app/redux/modules/entities.js
+++ b/app/redux/modules/entities.js
@@ -10,33 +10,14 @@ const ENTITY_REMOVE = 'entities/remove';
// REDUCERS //
// ~~~~~~~~ //
-function generateEntityReducer (referenceName, updateAction, deleteAction) {
- return function (state = {}, action) {
- switch (action.type) {
-
- case updateAction:
- const doc = action[referenceName];
- return {...state, [doc._id]: doc};
-
- case deleteAction:
- const newState = Object.assign({}, state);
- delete newState[action[referenceName]._id];
- return newState;
-
- default:
- return state;
- }
- }
-}
-
function genericEntityReducer (referenceName) {
return function (state = {}, action) {
const doc = action[referenceName];
-
+
if (!doc) {
return state;
}
-
+
switch (action.type) {
case ENTITY_UPDATE:
@@ -53,14 +34,8 @@ function genericEntityReducer (referenceName) {
}
}
-const workspaces = generateEntityReducer(
- 'workspace',
- workspaceFns.WORKSPACE_UPDATE,
- 'dne'
-);
-
export default combineReducers({
- workspaces,
+ workspaces: genericEntityReducer('workspace'),
requestGroups: genericEntityReducer('requestGroup'),
requests: genericEntityReducer('request'),
responses: genericEntityReducer('response')
@@ -72,15 +47,15 @@ export default combineReducers({
// ~~~~~~~ //
const updateFns = {
- [TYPE_WORKSPACE]: workspaceFns.update,
+ [TYPE_WORKSPACE]: workspace => ({type: ENTITY_UPDATE, workspace}),
[TYPE_REQUEST_GROUP]: requestGroup => ({type: ENTITY_UPDATE, requestGroup}),
[TYPE_RESPONSE]: response => ({type: ENTITY_UPDATE, response}),
[TYPE_REQUEST]: request => ({type: ENTITY_UPDATE, request})
};
const removeFns = {
- [TYPE_WORKSPACE]: workspace => ({type: ENTITY_UPDATE, workspace}),
- [TYPE_REQUEST_GROUP]: requestGroup => ({type: ENTITY_UPDATE, requestGroup}),
+ [TYPE_WORKSPACE]: workspace => ({type: ENTITY_REMOVE, workspace}),
+ [TYPE_REQUEST_GROUP]: requestGroup => ({type: ENTITY_REMOVE, requestGroup}),
[TYPE_RESPONSE]: response => ({type: ENTITY_UPDATE, response}),
[TYPE_REQUEST]: request => ({type: ENTITY_REMOVE, request})
};
diff --git a/app/redux/modules/workspaces.js b/app/redux/modules/workspaces.js
index fa149a5800..fe7104ad50 100644
--- a/app/redux/modules/workspaces.js
+++ b/app/redux/modules/workspaces.js
@@ -1,6 +1,6 @@
import {combineReducers} from 'redux'
-export const WORKSPACE_UPDATE = 'workspaces/update';
+export const WORKSPACE_ACTIVATE = 'workspaces/activate';
// ~~~~~~~~ //
// REDUCERS //
@@ -8,15 +8,9 @@ export const WORKSPACE_UPDATE = 'workspaces/update';
function activeReducer (state = null, action) {
switch (action.type) {
-
- case WORKSPACE_UPDATE:
- if (state && state._id === action.workspace._id) {
- return action.workspace;
- } else if (state) {
- return action.workspace.activated > state.activated ? action.workspace : state;
- } else {
- return action.workspace;
- }
+
+ case WORKSPACE_ACTIVATE:
+ return action.workspace._id;
default:
return state;
@@ -24,7 +18,7 @@ function activeReducer (state = null, action) {
}
export default combineReducers({
- active: activeReducer
+ activeId: activeReducer
});
@@ -32,6 +26,6 @@ export default combineReducers({
// ACTIONS //
// ~~~~~~~ //
-export function update (workspace) {
- return {type: WORKSPACE_UPDATE, workspace};
+export function activate (workspace) {
+ return {type: WORKSPACE_ACTIVATE, workspace};
}