Skip to content

Commit

Permalink
Merge pull request #225 from m2ms/#460
Browse files Browse the repository at this point in the history
  • Loading branch information
boriskovar-m2ms authored Dec 2, 2020
2 parents eb1edbd + 43363c3 commit bacb410
Show file tree
Hide file tree
Showing 5 changed files with 64 additions and 91 deletions.
12 changes: 4 additions & 8 deletions js/components/nglView/redux/dispatchActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import { setDuckYankData, setMolGroupOn, setPanddaSiteOn } from '../../../reduce
import * as listTypes from '../../../constants/listTypes';
import { selectVectorAndResetCompounds } from '../../../reducers/selection/dispatchActions';

export const toggleMoleculeGroup = (molGroupId, summaryViewStage, majorViewStage) => (dispatch, getState) => {
export const toggleMoleculeGroup = (molGroupId, summaryViewStage) => (dispatch, getState) => {
const state = getState();
const molGroupSelection = state.selectionReducers.mol_group_selection;
const objIdx = molGroupSelection.indexOf(molGroupId);
Expand Down Expand Up @@ -58,11 +58,7 @@ export const toggleMoleculeGroup = (molGroupId, summaryViewStage, majorViewStage
throw new Error(error);
});
dispatch(
clearAfterDeselectingMoleculeGroup({
molGroupId,
currentMolGroup,
majorViewStage
})
clearAfterDeselectingMoleculeGroup()
);
}
};
Expand Down Expand Up @@ -117,9 +113,9 @@ export const handleNglViewPick = (stage, pickingProxy, getNglView) => (dispatch,
const type = name.split('_')[0];
const pk = parseInt(name.split('_')[1], 10);
if (type === OBJECT_TYPE.MOLECULE_GROUP && getNglView(VIEWS.MAJOR_VIEW)) {
dispatch(toggleMoleculeGroup(pk, stage, getNglView(VIEWS.MAJOR_VIEW).stage));
dispatch(toggleMoleculeGroup(pk, stage));
} else if (type === OBJECT_TYPE.MOLGROUPS_SELECT && getNglView(VIEWS.MAJOR_VIEW)) {
dispatch(toggleMoleculeGroup(pk, stage, getNglView(VIEWS.MAJOR_VIEW).stage));
dispatch(toggleMoleculeGroup(pk, stage));
} else if (type === listTypes.PANDDA_SITE) {
dispatch(setPanddaSiteOn(pk));
}
Expand Down
61 changes: 54 additions & 7 deletions js/components/preview/molecule/moleculeList.js
Original file line number Diff line number Diff line change
Expand Up @@ -283,18 +283,59 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei
molecule.protein_code.toLowerCase().includes(searchString.toLowerCase())
);
} else {
return getJoinedMoleculeList;
return [...getJoinedMoleculeList];
}
}, [getJoinedMoleculeList, getAllMoleculeList, searchString]);

const addSelectedMoleculesFromUnselectedSites = useCallback((joinedMoleculeLists, list) => {
const result = [...joinedMoleculeLists];
list?.forEach(moleculeID => {
const foundJoinedMolecule = result.find(mol => mol.id === moleculeID);
if (!foundJoinedMolecule) {
const molecule = getAllMoleculeList.find(mol => mol.id === moleculeID);
if (molecule) {
result.push(molecule);
}
}
});
return result;
}, [getAllMoleculeList]);

joinedMoleculeLists = useMemo(
() => addSelectedMoleculesFromUnselectedSites(joinedMoleculeLists, proteinList),
[addSelectedMoleculesFromUnselectedSites, joinedMoleculeLists, proteinList]
);
joinedMoleculeLists = useMemo(
() => addSelectedMoleculesFromUnselectedSites(joinedMoleculeLists, complexList),
[addSelectedMoleculesFromUnselectedSites, joinedMoleculeLists, complexList]
);
joinedMoleculeLists = useMemo(
() => addSelectedMoleculesFromUnselectedSites(joinedMoleculeLists, fragmentDisplayList),
[addSelectedMoleculesFromUnselectedSites, joinedMoleculeLists, fragmentDisplayList]
);
joinedMoleculeLists = useMemo(
() => addSelectedMoleculesFromUnselectedSites(joinedMoleculeLists, surfaceList),
[addSelectedMoleculesFromUnselectedSites, joinedMoleculeLists, surfaceList]
);
joinedMoleculeLists = useMemo(
() => addSelectedMoleculesFromUnselectedSites(joinedMoleculeLists, densityList),
[addSelectedMoleculesFromUnselectedSites, joinedMoleculeLists, densityList]
);
joinedMoleculeLists = useMemo(
() => addSelectedMoleculesFromUnselectedSites(joinedMoleculeLists, vectorOnList),
[addSelectedMoleculesFromUnselectedSites, joinedMoleculeLists, vectorOnList]
);

// Used for MoleculeListSortFilterDialog when using textSearch
// Also used for displaying filter, since using the original would perform deadlock when creating a filter which matches
// 0 molecules
const joinedMoleculeListsCopy = useMemo(() => [...joinedMoleculeLists], [joinedMoleculeLists]);

if (isActiveFilter) {
joinedMoleculeLists = filterMolecules(joinedMoleculeLists, filter);
} else {
if (!isActiveFilter) {
// default sort is by site
joinedMoleculeLists.sort((a, b) => a.site - b.site || a.number - b.number);
} else {
joinedMoleculeLists = filterMolecules(joinedMoleculeLists, filter);
}

const loadNextMolecules = () => {
Expand Down Expand Up @@ -405,6 +446,12 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei
}
}, [isActiveFilter, setFilterItemsHeight]);

useEffect(() => {
if (!joinedMoleculeListsCopy.length) {
dispatch(setSortDialogOpen(false));
}
}, [dispatch, joinedMoleculeListsCopy.length]);

const handleFilterChange = filter => {
const filterSet = Object.assign({}, filter);
for (let attr of MOL_ATTRIBUTES) {
Expand Down Expand Up @@ -567,7 +614,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei
};

const actions = [
<FormControl className={classes.formControl} disabled={!(object_selection || []).length || sortDialogOpen}>
<FormControl className={classes.formControl} disabled={!joinedMoleculeListsCopy.length || sortDialogOpen}>
<Select
className={classes.select}
value={predefinedFilter}
Expand Down Expand Up @@ -604,7 +651,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei

<IconButton
color={'inherit'}
disabled={!(object_selection || []).length}
disabled={!joinedMoleculeListsCopy.length}
onClick={() => dispatch(hideAllSelectedMolecules(majorViewStage, joinedMoleculeLists))}
>
<Tooltip title="Hide all">
Expand All @@ -622,7 +669,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei
}
}}
color={'inherit'}
disabled={!(object_selection || []).length || predefinedFilter !== 'none'}
disabled={!joinedMoleculeListsCopy.length || predefinedFilter !== 'none'}
>
<Tooltip title="Filter/Sort">
<FilterList />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -171,8 +171,9 @@ export const MoleculeListSortFilterDialog = memo(
}
return initObject;
}, [joinedMoleculeLists]);

const [initState, setInitState] = useState(initialize());
filter = filter || initState;
const [filteredCount, setFilteredCount] = useState(getFilteredMoleculesCount(joinedMoleculeLists, filter));
const [predefinedFilter, setPredefinedFilter] = useState(filter.predefined);

Expand Down
77 changes: 3 additions & 74 deletions js/components/preview/moleculeGroups/redux/dispatchActions.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,4 @@
import {
complexObjectTypes,
generateComplex,
generateMolecule,
generateSphere
} from '../../molecule/molecules_helpers';
import { VIEWS } from '../../../../constants/constants';
Expand All @@ -10,19 +7,12 @@ import {
deleteObject,
loadObject
} from '../../../../reducers/ngl/dispatchActions';
import { selectJoinedMoleculeList } from '../../molecule/redux/selectors';
import {
removeFromComplexList,
removeFromProteinList,
removeFromSurfaceList,
removeFromFragmentDisplayList,
removeFromVectorOnList,
resetSelectionState,
setComplexList,
setFilter,
setFragmentDisplayList,
setMolGroupSelection,
setObjectSelection,
setVectorList,
setVectorOnList
} from '../../../../reducers/selection/actions';
Expand All @@ -34,68 +24,11 @@ import { setSortDialogOpen } from '../../molecule/redux/actions';
import { resetCurrentCompoundsSettings } from '../../compounds/redux/actions';
import { reloadSession } from '../../../snapshot/redux/dispatchActions';

export const clearAfterDeselectingMoleculeGroup = ({ molGroupId, currentMolGroup, majorViewStage }) => (
dispatch,
getState
export const clearAfterDeselectingMoleculeGroup = () => (
dispatch
) => {
dispatch(setObjectSelection([molGroupId]));

let site;
const state = getState();
const vector_list = state.selectionReducers.vector_list;

// loop through all molecules
selectJoinedMoleculeList(state).forEach(mol => {
site = mol.site;

// remove Ligand
dispatch(
deleteObject(
Object.assign({ display_div: VIEWS.MAJOR_VIEW }, generateMolecule(mol.protein_code, mol.sdf_info)),
majorViewStage
)
);

// remove Complex, Protein, Surface
Object.keys(complexObjectTypes).forEach(type => {
dispatch(
deleteObject(
Object.assign(
{ display_div: VIEWS.MAJOR_VIEW },
generateComplex(mol.protein_code, mol.sdf_info, mol.molecule_protein, type)
),
majorViewStage
)
);
});
});

// remove all Vectors
vector_list
.filter(v => v.site === site)
.forEach(item => {
dispatch(deleteObject(Object.assign({ display_div: VIEWS.MAJOR_VIEW }, item), majorViewStage));
});

dispatch(setObjectSelection(undefined));

// remove all molecule orientations
dispatch(setMoleculeOrientations({}));

// remove all selected ALCV of given site
currentMolGroup.mol_id.forEach(moleculeID => {
// remove Ligand, Complex, Vectors from selection
//Ligand
dispatch(removeFromFragmentDisplayList({ id: moleculeID }));
// Complex
dispatch(removeFromComplexList({ id: moleculeID }));
// Protein
dispatch(removeFromProteinList({ id: moleculeID }));
// Surface
dispatch(removeFromSurfaceList({ id: moleculeID }));
// Vectors
dispatch(removeFromVectorOnList({ id: moleculeID }));
});
};

export const saveMoleculeGroupsToNglView = (molGroupList, stage, projectId) => dispatch => {
Expand Down Expand Up @@ -229,11 +162,7 @@ export const onDeselectMoleculeGroup = ({ moleculeGroup, stageSummaryView, major
const selectionCopy = mol_group_selection.slice();
const objIdx = mol_group_selection.indexOf(moleculeGroup.id);
dispatch(
clearAfterDeselectingMoleculeGroup({
molGroupId: moleculeGroup.id,
currentMolGroup,
majorViewStage
})
clearAfterDeselectingMoleculeGroup()
);
selectionCopy.splice(objIdx, 1);
dispatch(
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "fragalysis-frontend",
"version": "0.9.29",
"version": "0.9.32",
"description": "Frontend for fragalysis",
"main": "webpack.config.js",
"scripts": {
Expand Down

0 comments on commit bacb410

Please sign in to comment.