Skip to content

Commit

Permalink
#267 added filter possibility for right side
Browse files Browse the repository at this point in the history
  • Loading branch information
matej-vavrek committed May 11, 2020
1 parent ee9520a commit d0276f7
Show file tree
Hide file tree
Showing 9 changed files with 190 additions and 69 deletions.
20 changes: 11 additions & 9 deletions js/components/datasets/customDatasetList.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ import * as listType from '../../constants/listTypes';
import { filterMolecules } from '../preview/molecule/moleculeListSortFilterDialog';
import { getJoinedMoleculeList } from '../preview/molecule/redux/selectors';
import { getUrl, loadFromServer } from '../../utils/genericList';
import { setSortDialogOpen } from '../preview/molecule/redux/actions';
import { setFilterDialogOpen } from './redux/actions';
import { VIEWS } from '../../constants/constants';
import { NglContext } from '../nglView/nglProvider';
import { initializeFilter } from '../../reducers/selection/dispatchActions';
import { initializeFilter } from './redux/dispatchActions';
import { setFilter } from './redux/actions';
import { DatasetMoleculeList } from './datasetMoleculeList';

const CustomDatasetList = memo(
Expand All @@ -31,7 +32,7 @@ const CustomDatasetList = memo(
moleculeLists,
filter,
sortDialogOpen,
setSortDialogOpen,
setFilterDialogOpen,
firstLoad,
hideProjects
}) => {
Expand Down Expand Up @@ -122,14 +123,14 @@ const CustomDatasetList = memo(
onClick={event => {
if (sortDialogOpen === false) {
setSortDialogAnchorEl(event.currentTarget);
setSortDialogOpen(true);
setFilterDialogOpen(true);
} else {
setSortDialogAnchorEl(null);
setSortDialogOpen(false);
setFilterDialogOpen(false);
}
}}
color={'inherit'}
disabled={true || !(object_selection || []).length}
disabled={!(object_selection || []).length}
variant="text"
startIcon={<FilterList />}
size="small"
Expand All @@ -149,6 +150,7 @@ const CustomDatasetList = memo(
object_selection={object_selection}
cached_mol_lists={cached_mol_lists}
filter={filter}
setFilter={setFilter}
actions={actions}
sortDialogAnchorEl={sortDialogAnchorEl}
datasetID={dataset.id}
Expand All @@ -166,15 +168,15 @@ function mapStateToProps(state) {
object_list: state.apiReducers.molecule_list,
cached_mol_lists: state.apiReducers.cached_mol_lists,
moleculeLists: state.datasetsReducers.moleculeLists,
filter: state.selectionReducers.filter,
sortDialogOpen: state.previewReducers.molecule.sortDialogOpen,
filter: state.datasetsReducers.filter,
sortDialogOpen: state.datasetsReducers.filterDialogOpen,
firstLoad: state.selectionReducers.firstLoad
};
}
const mapDispatchToProps = {
setMoleculeList: apiActions.setMoleculeList,
setCachedMolLists: apiActions.setCachedMolLists,
setSortDialogOpen
setFilterDialogOpen
};
CustomDatasetList.displayName = 'CustomDatasetList';
export default connect(mapStateToProps, mapDispatchToProps)(CustomDatasetList);
8 changes: 6 additions & 2 deletions js/components/datasets/datasetMoleculeList.js
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ export const DatasetMoleculeList = memo(
cached_mol_lists,
moleculeDataList,
filter,
setFilter,
title,
actions,
sortDialogAnchorEl,
Expand All @@ -160,7 +161,7 @@ export const DatasetMoleculeList = memo(
const [currentPage, setCurrentPage] = useState(0);
const imgHeight = 34;
const imgWidth = 150;
const sortDialogOpen = useSelector(state => state.previewReducers.molecule.sortDialogOpen);
const sortDialogOpen = useSelector(state => state.datasetsReducers.filterDialogOpen);

const isActiveFilter = !!(filter || {}).active;

Expand Down Expand Up @@ -269,13 +270,16 @@ export const DatasetMoleculeList = memo(
forceCompute={isActiveFilter}
>
<Panel hasHeader title={title} headerActions={actions}>
{false && sortDialogOpen && (
{sortDialogOpen && (
<MoleculeListSortFilterDialog
open={sortDialogOpen}
anchorEl={sortDialogAnchorEl}
molGroupSelection={object_selection}
cachedMolList={cached_mol_lists}
filter={filter}
setFilter={setFilter}
parentID="datasets"
placement="left-start"
/>
)}
<div ref={filterRef}>
Expand Down
78 changes: 54 additions & 24 deletions js/components/datasets/redux/actions.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,90 +7,120 @@ export const addMoleculeList = (datasetID, moleculeList) => ({
});
export const removeMoleculeList = datasetID => ({ type: constants.REMOVE_MOLECULELIST, payload: datasetID });

export const setFilter = filter => ({ type: constants.SET_FILTER, payload: filter });
export const setFilterDialogOpen = filterDialogOpen => ({
type: constants.SET_FILTER_DIALOG_OPEN,
payload: filterDialogOpen
});

export const setLigandList = function(datsetID, ligandList) {
return {
type: constants.SET_LIGAND_LIST,
datasetID: datsetID,
ligandList: ligandList
payload: {
datasetID: datsetID,
ligandList: ligandList
}
};
};
export const appendLigandList = function(datsetID, item) {
return {
type: constants.APPEND_LIGAND_LIST,
datasetID: datsetID,
item: item
payload: {
datasetID: datsetID,
item: item
}
};
};
export const removeFromLigandList = function(datsetID, item) {
return {
type: constants.REMOVE_FROM_LIGAND_LIST,
datasetID: datsetID,
item: item
payload: {
datasetID: datsetID,
item: item
}
};
};

export const setProteinList = function(datsetID, proteinList) {
return {
type: constants.SET_PROTEIN_LIST,
datasetID: datsetID,
proteinList: proteinList
payload: {
datasetID: datsetID,
proteinList: proteinList
}
};
};
export const appendProteinList = function(datsetID, item) {
return {
type: constants.APPEND_PROTEIN_LIST,
datasetID: datsetID,
item: item
payload: {
datasetID: datsetID,
item: item
}
};
};
export const removeFromProteinList = function(datsetID, item) {
return {
type: constants.REMOVE_FROM_PROTEIN_LIST,
datasetID: datsetID,
item: item
payload: {
datasetID: datsetID,
item: item
}
};
};

export const setComplexList = function(datsetID, complexList) {
return {
type: constants.SET_COMPLEX_LIST,
datasetID: datsetID,
complexList: complexList
payload: {
datasetID: datsetID,
complexList: complexList
}
};
};
export const appendComplexList = function(datsetID, item) {
return {
type: constants.APPEND_COMPLEX_LIST,
datasetID: datsetID,
item: item
payload: {
datasetID: datsetID,
item: item
}
};
};
export const removeFromComplexList = function(datsetID, item) {
return {
type: constants.REMOVE_FROM_COMPLEX_LIST,
datasetID: datsetID,
item: item
payload: {
datasetID: datsetID,
item: item
}
};
};

export const setSurfaceList = function(datsetID, surfaceList) {
return {
type: constants.SET_SURFACE_LIST,
datasetID: datsetID,
surfaceList: surfaceList
payload: {
datasetID: datsetID,
surfaceList: surfaceList
}
};
};
export const appendSurfaceList = function(datsetID, item) {
return {
type: constants.APPEND_SURFACE_LIST,
datasetID: datsetID,
item: item
payload: {
datasetID: datsetID,
item: item
}
};
};
export const removeFromSurfaceList = function(datsetID, item) {
return {
type: constants.REMOVE_FROM_SURFACE_LIST,
datasetID: datsetID,
item: item
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
@@ -1,10 +1,13 @@
const prefix = 'CUSTOM_DATASETS';
const prefix = 'CUSTOM_DATASETS_';

export const constants = {
ADD_DATASET: prefix + 'ADD_DATASET',
ADD_MOLECULELIST: prefix + 'ADD_MOLECULELIST',
REMOVE_MOLECULELIST: prefix + 'REMOVE_MOLECULELIST',

SET_FILTER: prefix + 'SET_FILTER',
SET_FILTER_DIALOG_OPEN: prefix + 'SET_FILTER_DIALOG_OPEN',

SET_LIGAND_LIST: prefix + 'SET_LIGAND_LIST',
APPEND_LIGAND_LIST: prefix + 'APPEND_LIGAND_LIST',
REMOVE_FROM_LIGAND_LIST: prefix + 'REMOVE_FROM_LIGAND_LIST',
Expand Down
69 changes: 69 additions & 0 deletions js/components/datasets/redux/dispatchActions.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { deleteObject, loadObject, setOrientation } from '../../../reducers/ngl/dispatchActions';
import {
setFilter,
appendLigandList,
appendProteinList,
appendComplexList,
Expand All @@ -18,6 +19,7 @@ import {
generateMoleculeObject
} from '../../nglView/generatingObjects';
import { VIEWS } from '../../../constants/constants';
import { MOL_ATTRIBUTES } from '../../preview/molecule/redux/constants';

import { addMoleculeList } from './actions';

Expand All @@ -44,6 +46,73 @@ export const initializeDatasetMoleculeLists = moleculeList => (dispatch, getStat
});
};

export const getListedMolecules = (object_selection, cached_mol_lists) => {
let molecules = [];
if ((object_selection || []).length) {
for (let molgroupId of object_selection) {
// Selected molecule groups
const molGroup = cached_mol_lists[molgroupId];
if (molGroup) {
molecules = molecules.concat(molGroup);
} else {
console.log(`Molecule group ${molgroupId} not found in cached list`);
}
}
}

return molecules;
};

export const initializeFilter = (object_selection, cached_mol_lists) => (dispatch, getState) => {
const state = getState();
if (!object_selection || !cached_mol_lists) {
object_selection = (() => {
let tmp = [];
state.datasetsReducers.datasets.forEach(dataset => {
tmp.push(dataset.id);
});
return tmp;
})(state.datasetsReducers.datasets);
cached_mol_lists = state.datasetsReducers.moleculeLists;
}

let initObject = state.selectionReducers.filter;

if (initObject === undefined) {
initObject = {
active: false,
predefined: 'none',
filter: {},
priorityOrder: MOL_ATTRIBUTES.map(molecule => molecule.key)
};
} else {
initObject = Object.assign({}, initObject);
console.log('using saved filter');
}

for (let attr of MOL_ATTRIBUTES) {
const lowAttr = attr.key.toLowerCase();
let minValue = -999999;
let maxValue = 0;
for (let molecule of getListedMolecules(object_selection, cached_mol_lists)) {
const attrValue = molecule[lowAttr];
if (attrValue > maxValue) maxValue = attrValue;
if (minValue === -999999) minValue = maxValue;
if (attrValue < minValue) minValue = attrValue;
}

initObject.filter[attr.key] = {
priority: 0,
order: 1,
minValue: minValue,
maxValue: maxValue,
isFloat: attr.isFloat
};
}
dispatch(setFilter(initObject));
return initObject;
};

/* ----------------------------------------------- */

export const addProtein = (stage, data, colourToggle, datasetID) => dispatch => {
Expand Down
Loading

0 comments on commit d0276f7

Please sign in to comment.