diff --git a/js/components/nglView/redux/dispatchActions.js b/js/components/nglView/redux/dispatchActions.js index eec05e82c..4d8b2d0f6 100644 --- a/js/components/nglView/redux/dispatchActions.js +++ b/js/components/nglView/redux/dispatchActions.js @@ -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); @@ -58,11 +58,7 @@ export const toggleMoleculeGroup = (molGroupId, summaryViewStage, majorViewStage throw new Error(error); }); dispatch( - clearAfterDeselectingMoleculeGroup({ - molGroupId, - currentMolGroup, - majorViewStage - }) + clearAfterDeselectingMoleculeGroup() ); } }; @@ -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)); } diff --git a/js/components/preview/molecule/moleculeList.js b/js/components/preview/molecule/moleculeList.js index a72b1e46e..abfbe0288 100644 --- a/js/components/preview/molecule/moleculeList.js +++ b/js/components/preview/molecule/moleculeList.js @@ -292,11 +292,41 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei // Used for MoleculeListSortFilterDialog when using textSearch const joinedMoleculeListsCopy = useMemo(() => [...joinedMoleculeLists], [joinedMoleculeLists]); - if (isActiveFilter) { - joinedMoleculeLists = filterMolecules(joinedMoleculeLists, filter); - } else { + 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) { // default sort is by site joinedMoleculeLists.sort((a, b) => a.site - b.site || a.number - b.number); + } else { + joinedMoleculeLists = filterMolecules(joinedMoleculeLists, filter); } const loadNextMolecules = () => { @@ -409,6 +439,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) { @@ -621,7 +657,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei }; const actions = [ - +