From 2775d64d0b2b96b5e206e214a8d1fcf4261a0fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1na=20Kohanov=C3=A1?= Date: Thu, 26 Nov 2020 15:11:51 +0100 Subject: [PATCH] #462 Mass actions --- js/reducers/tracking/actions.js | 7 +++ js/reducers/tracking/constants.js | 1 + js/reducers/tracking/dispatchActions.js | 72 +++++++++++++----------- js/reducers/tracking/trackingReducers.js | 8 ++- 4 files changed, 55 insertions(+), 33 deletions(-) diff --git a/js/reducers/tracking/actions.js b/js/reducers/tracking/actions.js index 1521f7dc1..f3e12cfc4 100644 --- a/js/reducers/tracking/actions.js +++ b/js/reducers/tracking/actions.js @@ -14,6 +14,13 @@ export const appendToActionList = function(track_action) { }; }; +export const appendToUndoRedoActionList = function(track_action) { + return { + type: constants.APPEND_UNDO_REDO_ACTIONS_LIST, + track_action: track_action + }; +}; + export const setCurrentActionsList = function(current_actions_list) { return { type: constants.SET_CURRENT_ACTIONS_LIST, diff --git a/js/reducers/tracking/constants.js b/js/reducers/tracking/constants.js index c6d3740d8..228820c83 100644 --- a/js/reducers/tracking/constants.js +++ b/js/reducers/tracking/constants.js @@ -3,6 +3,7 @@ const prefix = 'REDUCERS_TRACKING_'; export const constants = { SET_ACTIONS_LIST: prefix + 'SET_ACTIONS_LIST', APPEND_ACTIONS_LIST: prefix + 'APPEND_ACTIONS_LIST', + APPEND_UNDO_REDO_ACTIONS_LIST: prefix + 'APPEND_UNDO_REDO_ACTIONS_LIST', SET_CURRENT_ACTIONS_LIST: prefix + 'SET_CURRENT_ACTIONS_LIST', SET_IS_TRACKING_COMPOUNDS_RESTORING: prefix + 'SET_IS_TRACKING_COMPOUNDS_RESTORING', SET_IS_TRACKING_MOLECULES_RESTORING: prefix + 'SET_IS_TRACKING_MOLECULES_RESTORING', diff --git a/js/reducers/tracking/dispatchActions.js b/js/reducers/tracking/dispatchActions.js index b81ce8ebc..e766ef35b 100644 --- a/js/reducers/tracking/dispatchActions.js +++ b/js/reducers/tracking/dispatchActions.js @@ -64,7 +64,8 @@ import { appendToSendActionList, setProjectActionList, setIsActionsSaving, - setIsActionsRestoring + setIsActionsRestoring, + appendToUndoRedoActionList } from './actions'; import { setSelectedAll, @@ -655,9 +656,9 @@ export const undoAction = (stages = []) => (dispatch, getState) => { const actionUndoList = state.undoableTrackingReducers.future; let actions = actionUndoList && actionUndoList[0]; if (actions) { - let actionsLenght = actions.track_actions_list.length; + let actionsLenght = actions.undo_redo_actions_list.length; actionsLenght = actionsLenght > 0 ? actionsLenght - 1 : actionsLenght; - action = actions.track_actions_list[actionsLenght]; + action = actions.undo_redo_actions_list[actionsLenght]; Promise.resolve(dispatch(handleUndoAction(action, stages))).then(() => { dispatch(setIsUndoRedoAction(false)); @@ -673,9 +674,9 @@ export const redoAction = (stages = []) => (dispatch, getState) => { const actions = state.undoableTrackingReducers.present; if (actions) { - let actionsLenght = actions.track_actions_list.length; + let actionsLenght = actions.undo_redo_actions_list.length; actionsLenght = actionsLenght > 0 ? actionsLenght - 1 : actionsLenght; - action = actions.track_actions_list[actionsLenght]; + action = actions.undo_redo_actions_list[actionsLenght]; Promise.resolve(dispatch(dispatch(handleRedoAction(action, stages)))).then(() => { dispatch(setIsUndoRedoAction(false)); @@ -790,82 +791,82 @@ const handleRedoAction = (action, stages) => (dispatch, getState) => { const type = action.type; switch (type) { case actionType.ALL_TURNED_ON: - dispatch(handleAllAction(action, false, majorViewStage, state)); + dispatch(handleAllAction(action, true, majorViewStage, state)); break; case actionType.ALL_TURNED_OFF: - dispatch(handleAllAction(action, true, majorViewStage, state)); + dispatch(handleAllAction(action, false, majorViewStage, state)); break; case actionType.ALL_TURNED_ON_BY_TYPE: - dispatch(handleAllActionByType(action, false, majorViewStage)); + dispatch(handleAllActionByType(action, true, majorViewStage)); break; case actionType.ALL_TURNED_OFF_BY_TYPE: - dispatch(handleAllActionByType(action, true, majorViewStage)); + dispatch(handleAllActionByType(action, false, majorViewStage)); break; case actionType.LIGAND_TURNED_ON: - dispatch(handleMoleculeAction(action, 'ligand', false, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'ligand', true, majorViewStage, state)); break; case actionType.SIDECHAINS_TURNED_ON: - dispatch(handleMoleculeAction(action, 'protein', false, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'protein', true, majorViewStage, state)); break; case actionType.INTERACTIONS_TURNED_ON: - dispatch(handleMoleculeAction(action, 'complex', false, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'complex', true, majorViewStage, state)); break; case actionType.SURFACE_TURNED_ON: - dispatch(handleMoleculeAction(action, 'surface', false, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'surface', true, majorViewStage, state)); break; case actionType.VECTORS_TURNED_ON: - dispatch(handleMoleculeAction(action, 'vector', false, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'vector', true, majorViewStage, state)); break; case actionType.LIGAND_TURNED_OFF: - dispatch(handleMoleculeAction(action, 'ligand', true, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'ligand', false, majorViewStage, state)); break; case actionType.SIDECHAINS_TURNED_OFF: - dispatch(handleMoleculeAction(action, 'protein', true, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'protein', false, majorViewStage, state)); break; case actionType.INTERACTIONS_TURNED_OFF: - dispatch(handleMoleculeAction(action, 'complex', true, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'complex', false, majorViewStage, state)); break; case actionType.SURFACE_TURNED_OFF: - dispatch(handleMoleculeAction(action, 'surface', true, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'surface', false, majorViewStage, state)); break; case actionType.VECTORS_TURNED_OFF: - dispatch(handleMoleculeAction(action, 'vector', true, majorViewStage, state)); + dispatch(handleMoleculeAction(action, 'vector', false, majorViewStage, state)); break; case actionType.VECTOR_SELECTED: - dispatch(setCurrentVector(undefined)); + dispatch(setCurrentVector(action.object_name)); break; case actionType.VECTOR_DESELECTED: - dispatch(setCurrentVector(action.object_name)); + dispatch(setCurrentVector(undefined)); break; case actionType.TARGET_LOADED: - dispatch(handleTargetAction(action, false)); + dispatch(handleTargetAction(action, true)); break; case actionType.SITE_TURNED_ON: - dispatch(handleMoleculeGroupAction(action, false, stageSummaryView, majorViewStage)); + dispatch(handleMoleculeGroupAction(action, true, stageSummaryView, majorViewStage)); break; case actionType.SITE_TURNED_OFF: - dispatch(handleMoleculeGroupAction(action, true, stageSummaryView, majorViewStage)); + dispatch(handleMoleculeGroupAction(action, false, stageSummaryView, majorViewStage)); break; case actionType.MOLECULE_ADDED_TO_SHOPPING_CART: - dispatch(handleShoppingCartAction(action, false)); + dispatch(handleShoppingCartAction(action, true)); break; case actionType.MOLECULE_REMOVED_FROM_SHOPPING_CART: - dispatch(handleShoppingCartAction(action, true)); + dispatch(handleShoppingCartAction(action, false)); break; case actionType.COMPOUND_SELECTED: - dispatch(handleCompoundAction(action, false)); + dispatch(handleCompoundAction(action, true)); break; case actionType.COMPOUND_DESELECTED: - dispatch(handleCompoundAction(action, true)); + dispatch(handleCompoundAction(action, false)); break; case actionType.REPRESENTATION_CHANGED: - dispatch(handleChangeRepresentationAction(action, false, majorView)); + dispatch(handleChangeRepresentationAction(action, true, majorView)); break; case actionType.REPRESENTATION_ADDED: - dispatch(handleRepresentationAction(action, false, majorView)); + dispatch(handleRepresentationAction(action, true, majorView)); break; case actionType.REPRESENTATION_REMOVED: - dispatch(handleRepresentationAction(action, true, majorView)); + dispatch(handleRepresentationAction(action, false, majorView)); break; default: break; @@ -1168,9 +1169,16 @@ export const getCanRedo = () => (dispatch, getState) => { }; export const appendAndSendTrackingActions = trackAction => (dispatch, getState) => { + const state = getState(); + const isUndoRedoAction = state.trackingReducers.isUndoRedoAction; + if (trackAction && trackAction !== null) { - dispatch(appendToActionList(trackAction)); + dispatch(appendToActionList(trackAction, isUndoRedoAction)); dispatch(appendToSendActionList(trackAction)); + + if (isUndoRedoAction === false) { + dispatch(appendToUndoRedoActionList(trackAction)); + } } dispatch(checkSendTrackingActions()); diff --git a/js/reducers/tracking/trackingReducers.js b/js/reducers/tracking/trackingReducers.js index eb8269339..2d5014617 100644 --- a/js/reducers/tracking/trackingReducers.js +++ b/js/reducers/tracking/trackingReducers.js @@ -3,6 +3,7 @@ import undoable, { includeAction } from 'redux-undo'; export const INITIAL_STATE = { track_actions_list: [], + undo_redo_actions_list: [], current_actions_list: [], isTrackingMoleculesRestoring: false, isTrackingCompoundsRestoring: false, @@ -27,6 +28,11 @@ export function trackingReducers(state = INITIAL_STATE, action = {}) { track_actions_list: [...new Set([...state.track_actions_list, action.track_action])] }); + case constants.APPEND_UNDO_REDO_ACTIONS_LIST: + return Object.assign({}, state, { + undo_redo_actions_list: [...new Set([...state.undo_redo_actions_list, action.track_action])] + }); + case constants.SET_CURRENT_ACTIONS_LIST: return Object.assign({}, state, { current_actions_list: action.current_actions_list @@ -89,5 +95,5 @@ export function trackingReducers(state = INITIAL_STATE, action = {}) { export const undoableTrackingReducers = undoable(trackingReducers, { limit: false, - filter: includeAction(constants.APPEND_ACTIONS_LIST) + filter: includeAction(constants.APPEND_UNDO_REDO_ACTIONS_LIST) });