Skip to content

Commit

Permalink
#462 Mass actions
Browse files Browse the repository at this point in the history
  • Loading branch information
Adriána Kohanová committed Nov 20, 2020
1 parent 0a6e5f7 commit 8cfc6a8
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 44 deletions.
50 changes: 31 additions & 19 deletions js/components/datasets/datasetMoleculeView.js
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ import {
appendMoleculeToCompoundsOfDatasetToBuy,
removeMoleculeFromCompoundsOfDatasetToBuy,
setCrossReferenceCompoundName,
setIsOpenCrossReferenceDialog
setIsOpenCrossReferenceDialog,
setSelectedAll,
setDeselectedAll
} from './redux/actions';
import { centerOnLigandByMoleculeID } from '../../reducers/ngl/dispatchActions';
import { ArrowDownward, ArrowUpward, MyLocation } from '@material-ui/icons';
Expand Down Expand Up @@ -365,22 +367,22 @@ export const DatasetMoleculeView = memo(
const not_selected_style = {};
const current_style = isLigandOn || isProteinOn || isComplexOn || isSurfaceOn ? selected_style : not_selected_style;

const addNewLigand = () => {
dispatch(addDatasetLigand(stage, data, colourToggle, datasetID));
const addNewLigand = (skipTracking = false) => {
dispatch(addDatasetLigand(stage, data, colourToggle, datasetID, skipTracking));
};

const removeSelectedLigand = () => {
dispatch(removeDatasetLigand(stage, data, colourToggle, datasetID));
const removeSelectedLigand = (skipTracking = false) => {
dispatch(removeDatasetLigand(stage, data, colourToggle, datasetID, skipTracking));
selectedAll.current = false;
};

const onLigand = calledFromSelectAll => {
if (calledFromSelectAll === true && selectedAll.current === true) {
if (isLigandOn === false) {
addNewLigand();
addNewLigand(calledFromSelectAll);
}
} else if (calledFromSelectAll && selectedAll.current === false) {
removeSelectedLigand();
removeSelectedLigand(calledFromSelectAll);
} else if (!calledFromSelectAll) {
if (isLigandOn === false) {
addNewLigand();
Expand All @@ -390,22 +392,22 @@ export const DatasetMoleculeView = memo(
}
};

const removeSelectedProtein = () => {
dispatch(removeDatasetHitProtein(stage, data, colourToggle, datasetID));
const removeSelectedProtein = (skipTracking = false) => {
dispatch(removeDatasetHitProtein(stage, data, colourToggle, datasetID, skipTracking));
selectedAll.current = false;
};

const addNewProtein = () => {
dispatch(addDatasetHitProtein(stage, data, colourToggle, datasetID));
const addNewProtein = (skipTracking = false) => {
dispatch(addDatasetHitProtein(stage, data, colourToggle, datasetID, skipTracking));
};

const onProtein = calledFromSelectAll => {
if (calledFromSelectAll === true && selectedAll.current === true) {
if (isProteinOn === false) {
addNewProtein();
addNewProtein(calledFromSelectAll);
}
} else if (calledFromSelectAll && selectedAll.current === false) {
removeSelectedProtein();
removeSelectedProtein(calledFromSelectAll);
} else if (!calledFromSelectAll) {
if (isProteinOn === false) {
addNewProtein();
Expand All @@ -415,22 +417,22 @@ export const DatasetMoleculeView = memo(
}
};

const removeSelectedComplex = () => {
dispatch(removeDatasetComplex(stage, data, colourToggle, datasetID));
const removeSelectedComplex = (skipTracking = false) => {
dispatch(removeDatasetComplex(stage, data, colourToggle, datasetID, skipTracking));
selectedAll.current = false;
};

const addNewComplex = () => {
dispatch(addDatasetComplex(stage, data, colourToggle, datasetID));
const addNewComplex = (skipTracking = false) => {
dispatch(addDatasetComplex(stage, data, colourToggle, datasetID, skipTracking));
};

const onComplex = calledFromSelectAll => {
if (calledFromSelectAll === true && selectedAll.current === true) {
if (isComplexOn === false) {
addNewComplex();
addNewComplex(calledFromSelectAll);
}
} else if (calledFromSelectAll && selectedAll.current === false) {
removeSelectedComplex();
removeSelectedComplex(calledFromSelectAll);
} else if (!calledFromSelectAll) {
if (isComplexOn === false) {
addNewComplex();
Expand Down Expand Up @@ -465,6 +467,15 @@ export const DatasetMoleculeView = memo(
}
};

const setCalledFromAll = () => {
let isSelected = selectedAll.current === true;
if (isSelected) {
dispatch(setSelectedAll(datasetID, data));
} else {
dispatch(setDeselectedAll(datasetID, data));
}
};

/**
* Check if given molecule is matching current filter
* @param Object item - item.name is attribute name, item.value is its value
Expand Down Expand Up @@ -630,6 +641,7 @@ export const DatasetMoleculeView = memo(
// always deselect all if are selected only some of options
selectedAll.current = hasSomeValuesOn ? false : !selectedAll.current;

setCalledFromAll();
onLigand(true);
onProtein(true);
onComplex(true);
Expand Down
46 changes: 34 additions & 12 deletions js/components/datasets/redux/actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,22 +50,24 @@ export const setLigandList = function(datsetID, ligandList) {
}
};
};
export const appendLigandList = function(datsetID, item) {
export const appendLigandList = function(datsetID, item, skipTracking = false) {
return {
type: constants.APPEND_LIGAND_LIST,
payload: {
datasetID: datsetID,
item: item
}
},
skipTracking: skipTracking
};
};
export const removeFromLigandList = function(datsetID, item) {
export const removeFromLigandList = function(datsetID, item, skipTracking = false) {
return {
type: constants.REMOVE_FROM_LIGAND_LIST,
payload: {
datasetID: datsetID,
item: item
}
},
skipTracking: skipTracking
};
};

Expand All @@ -78,22 +80,24 @@ export const setProteinList = function(datsetID, proteinList) {
}
};
};
export const appendProteinList = function(datsetID, item) {
export const appendProteinList = function(datsetID, item, skipTracking = false) {
return {
type: constants.APPEND_PROTEIN_LIST,
payload: {
datasetID: datsetID,
item: item
}
},
skipTracking: skipTracking
};
};
export const removeFromProteinList = function(datsetID, item) {
export const removeFromProteinList = function(datsetID, item, skipTracking = false) {
return {
type: constants.REMOVE_FROM_PROTEIN_LIST,
payload: {
datasetID: datsetID,
item: item
}
},
skipTracking: skipTracking
};
};

Expand All @@ -106,22 +110,24 @@ export const setComplexList = function(datsetID, complexList) {
}
};
};
export const appendComplexList = function(datsetID, item) {
export const appendComplexList = function(datsetID, item, skipTracking = false) {
return {
type: constants.APPEND_COMPLEX_LIST,
payload: {
datasetID: datsetID,
item: item
}
},
skipTracking: skipTracking
};
};
export const removeFromComplexList = function(datsetID, item) {
export const removeFromComplexList = function(datsetID, item, skipTracking = false) {
return {
type: constants.REMOVE_FROM_COMPLEX_LIST,
payload: {
datasetID: datsetID,
item: item
}
},
skipTracking: skipTracking
};
};

Expand Down Expand Up @@ -300,3 +306,19 @@ export const resetDatasetsState = () => {
type: constants.RESET_DATASETS_STATE
};
};

export const setSelectedAll = (datsetID, item) => ({
type: constants.SET_SELECTED_ALL,
payload: {
datasetID: datsetID,
item: item
}
});

export const setDeselectedAll = (datsetID, item) => ({
type: constants.SET_DESELECTED_ALL,
payload: {
datasetID: datsetID,
item: item
}
});
5 changes: 4 additions & 1 deletion js/components/datasets/redux/constants.js
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,10 @@ export const constants = {
REMOVE_MOLECULE_FROM_COMPOUNDS_TO_BUY_OF_DATASET: prefix + 'REMOVE_MOLECULE_FROM_COMPOUNDS_TO_BUY_OF_DATASET',

RELOAD_DATASETS_REDUCER: prefix + 'RELOAD_DATASETS_REDUCER',
RESET_DATASETS_STATE: prefix + 'RESET_DATASETS_STATE'
RESET_DATASETS_STATE: prefix + 'RESET_DATASETS_STATE',

SET_SELECTED_ALL: prefix + 'SET_SELECTED_ALL',
SET_DESELECTED_ALL: prefix + 'SET_DESELECTED_ALL'
};

export const COUNT_OF_VISIBLE_SCORES = 7;
Expand Down
24 changes: 12 additions & 12 deletions js/components/datasets/redux/dispatchActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ export const initializeDatasetFilter = datasetID => (dispatch, getState) => {
dispatch(setFilterProperties(datasetID, initFilterProperties));
};

export const addDatasetHitProtein = (stage, data, colourToggle, datasetID) => dispatch => {
export const addDatasetHitProtein = (stage, data, colourToggle, datasetID, skipTracking = false) => dispatch => {
dispatch(
loadObject({
target: Object.assign(
Expand All @@ -64,10 +64,10 @@ export const addDatasetHitProtein = (stage, data, colourToggle, datasetID) => di
const currentOrientation = stage.viewerControls.getOrientation();
dispatch(setOrientation(VIEWS.MAJOR_VIEW, currentOrientation));
});
dispatch(appendProteinList(datasetID, generateMoleculeCompoundId(data)));
dispatch(appendProteinList(datasetID, generateMoleculeCompoundId(data), skipTracking));
};

export const removeDatasetHitProtein = (stage, data, colourToggle, datasetID) => dispatch => {
export const removeDatasetHitProtein = (stage, data, colourToggle, datasetID, skipTracking = false) => dispatch => {
dispatch(
deleteObject(
Object.assign(
Expand All @@ -77,10 +77,10 @@ export const removeDatasetHitProtein = (stage, data, colourToggle, datasetID) =>
stage
)
);
dispatch(removeFromProteinList(datasetID, generateMoleculeCompoundId(data)));
dispatch(removeFromProteinList(datasetID, generateMoleculeCompoundId(data), skipTracking));
};

export const addDatasetComplex = (stage, data, colourToggle, datasetID) => dispatch => {
export const addDatasetComplex = (stage, data, colourToggle, datasetID, skipTracking = false) => dispatch => {
dispatch(
loadObject({
target: Object.assign(
Expand All @@ -94,17 +94,17 @@ export const addDatasetComplex = (stage, data, colourToggle, datasetID) => dispa
const currentOrientation = stage.viewerControls.getOrientation();
dispatch(setOrientation(VIEWS.MAJOR_VIEW, currentOrientation));
});
dispatch(appendComplexList(datasetID, generateMoleculeCompoundId(data)));
dispatch(appendComplexList(datasetID, generateMoleculeCompoundId(data), skipTracking));
};

export const removeDatasetComplex = (stage, data, colourToggle, datasetID) => dispatch => {
export const removeDatasetComplex = (stage, data, colourToggle, datasetID, skipTracking = false) => dispatch => {
dispatch(
deleteObject(
Object.assign({ display_div: VIEWS.MAJOR_VIEW }, generateComplexObject(data, colourToggle, base_url, datasetID)),
stage
)
);
dispatch(removeFromComplexList(datasetID, generateMoleculeCompoundId(data)));
dispatch(removeFromComplexList(datasetID, generateMoleculeCompoundId(data), skipTracking));
};

export const addDatasetSurface = (stage, data, colourToggle, datasetID) => dispatch => {
Expand Down Expand Up @@ -134,7 +134,7 @@ export const removeDatasetSurface = (stage, data, colourToggle, datasetID) => di
dispatch(removeFromSurfaceList(datasetID, generateMoleculeCompoundId(data)));
};

export const addDatasetLigand = (stage, data, colourToggle, datasetID) => dispatch => {
export const addDatasetLigand = (stage, data, colourToggle, datasetID, skipTracking = false) => dispatch => {
const currentOrientation = stage.viewerControls.getOrientation();
dispatch(
loadObject({
Expand All @@ -151,17 +151,17 @@ export const addDatasetLigand = (stage, data, colourToggle, datasetID) => dispat
// keep current orientation of NGL View
stage.viewerControls.orient(currentOrientation);
});
dispatch(appendLigandList(datasetID, generateMoleculeCompoundId(data)));
dispatch(appendLigandList(datasetID, generateMoleculeCompoundId(data), skipTracking));
};

export const removeDatasetLigand = (stage, data, colourToggle, datasetID) => dispatch => {
export const removeDatasetLigand = (stage, data, colourToggle, datasetID, skipTracking = false) => dispatch => {
dispatch(
deleteObject(
Object.assign({ display_div: VIEWS.MAJOR_VIEW }, generateMoleculeObject(data, undefined, datasetID)),
stage
)
);
dispatch(removeFromLigandList(datasetID, generateMoleculeCompoundId(data)));
dispatch(removeFromLigandList(datasetID, generateMoleculeCompoundId(data), skipTracking));
};

export const loadDataSets = targetId => dispatch =>
Expand Down
12 changes: 12 additions & 0 deletions js/components/datasets/redux/reducer.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,9 @@ export const INITIAL_STATE = {
surfaceLists: {}, // map of $datasetID and its $list
inspirationLists: {}, // map of $datasetID and its $list

molecule_all_selection: null,
molecule_all_deselection: null,

// search
searchString: null,

Expand Down Expand Up @@ -373,6 +376,15 @@ export const datasetsReducers = (state = INITIAL_STATE, action = {}) => {
};
return Object.assign({}, state, { ...INITIAL_STATE, ...datasetsLists });

case constants.SET_SELECTED_ALL:
return Object.assign({}, state, {
molecule_all_selection: action.payload
});

case constants.SET_DESELECTED_ALL:
return Object.assign({}, state, {
molecule_all_deselection: action.payload
});
default:
return state;
}
Expand Down
36 changes: 36 additions & 0 deletions js/reducers/tracking/trackingActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,42 @@ export const findTruckAction = (action, state) => {
text: `${objectType} ${objectName} ${actionDescription.DESELECTED} of dataset: ${action.payload.datasetID}`
};
}
} else if (action.type.includes(customDatasetConstants.SET_SELECTED_ALL)) {
if (action.payload && action.payload.item) {
let objectType =
action.payload.item.isCrossReference === true ? actionObjectType.CROSS_REFERENCE : actionObjectType.COMPOUND;
let objectName = action.payload.item.name;

truckAction = {
type: actionType.ALL_TURNED_ON,
timestamp: Date.now(),
username: username,
project: project,
object_type: objectType,
object_name: objectName,
object_id: action.payload.item.id,
dataset_id: action.payload.datasetID,
text: `${actionDescription.ALL} ${actionDescription.TURNED_ON} ${objectType} ${objectName} of dataset: ${action.payload.datasetID}`
};
}
} else if (action.type.includes(customDatasetConstants.SET_DESELECTED_ALL)) {
if (action.payload && action.payload.item) {
let objectType =
action.payload.item.isCrossReference === true ? actionObjectType.CROSS_REFERENCE : actionObjectType.COMPOUND;
let objectName = action.payload.item.name;

truckAction = {
type: actionType.ALL_TURNED_OFF,
timestamp: Date.now(),
username: username,
project: project,
object_type: objectType,
object_name: objectName,
object_id: action.payload.item.id,
dataset_id: action.payload.datasetID,
text: `${actionDescription.ALL} ${actionDescription.ALL_TURNED_OFF} ${objectType} ${objectName} of dataset: ${action.payload.datasetID}`
};
}
} else if (action.type.includes(customDatasetConstants.APPEND_LIGAND_LIST)) {
if (action.payload && action.payload.item) {
let objectType =
Expand Down

0 comments on commit 8cfc6a8

Please sign in to comment.