From 4c93ed5d9a25f071986c407618b5a53da9192a34 Mon Sep 17 00:00:00 2001 From: ag-m2ms Date: Fri, 30 Oct 2020 12:47:56 +0100 Subject: [PATCH 01/16] Search all molecules --- .../preview/molecule/moleculeList.js | 7 ++++--- .../preview/molecule/redux/selectors.js | 21 +++++++++++++++++++ 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/js/components/preview/molecule/moleculeList.js b/js/components/preview/molecule/moleculeList.js index 999212ee7..02350a8f7 100644 --- a/js/components/preview/molecule/moleculeList.js +++ b/js/components/preview/molecule/moleculeList.js @@ -17,7 +17,7 @@ import { IconButton, ButtonGroup } from '@material-ui/core'; -import React, { useState, useEffect, useCallback, memo, useRef, useContext } from 'react'; +import React, { useState, useEffect, useCallback, memo, useRef, useContext, useMemo } from 'react'; import { useDispatch, useSelector, useStore } from 'react-redux'; import MoleculeView, { colourList } from './moleculeView'; import { MoleculeListSortFilterDialog, filterMolecules, getAttrDefinition } from './moleculeListSortFilterDialog'; @@ -49,7 +49,7 @@ import { } from './redux/dispatchActions'; import { DEFAULT_FILTER, PREDEFINED_FILTERS } from '../../../reducers/selection/constants'; import { DeleteSweep, FilterList, Search } from '@material-ui/icons'; -import { selectJoinedMoleculeList } from './redux/selectors'; +import { selectAllMoleculeList, selectJoinedMoleculeList } from './redux/selectors'; import { debounce } from 'lodash'; import { MOL_ATTRIBUTES } from './redux/constants'; import { setFilter } from '../../../reducers/selection/actions'; @@ -235,6 +235,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei const sortDialogOpen = useSelector(state => state.previewReducers.molecule.sortDialogOpen); const filter = useSelector(state => state.selectionReducers.filter); const getJoinedMoleculeList = useSelector(state => selectJoinedMoleculeList(state)); + const getAllMoleculeList = useSelector(state => selectAllMoleculeList(state)); const selectedAll = useRef(false); const proteinList = useSelector(state => state.selectionReducers.proteinList); @@ -278,7 +279,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei let joinedMoleculeLists = []; if (searchString !== null) { - joinedMoleculeLists = getJoinedMoleculeList.filter(molecule => + joinedMoleculeLists = getAllMoleculeList.filter(molecule => molecule.protein_code.toLowerCase().includes(searchString.toLowerCase()) ); } else { diff --git a/js/components/preview/molecule/redux/selectors.js b/js/components/preview/molecule/redux/selectors.js index 621d0a049..79e1ad775 100644 --- a/js/components/preview/molecule/redux/selectors.js +++ b/js/components/preview/molecule/redux/selectors.js @@ -32,3 +32,24 @@ export const selectJoinedMoleculeList = createSelector( return joinedMoleculeLists; } ); + +export const selectAllMoleculeList = createSelector( + getAllMolecules, + getMoleculeGroupLists, + (all_mol_lists, mol_group_list) => { + const groupList = mol_group_list || []; + const allMoleculesList = []; + groupList.forEach(site => { + const siteId = site.id; + const siteMolecules = (all_mol_lists || {})[siteId]; + + if (siteMolecules) { + siteMolecules.forEach(r => { + allMoleculesList.push({ site: siteId, ...r }) + }); + } + }); + + return allMoleculesList; + } +) \ No newline at end of file From e2bdc5677b770621c1b907b7a9a7a7f7643dec36 Mon Sep 17 00:00:00 2001 From: ag-m2ms Date: Thu, 5 Nov 2020 11:58:04 +0100 Subject: [PATCH 02/16] Check molecule's site after clicking on a molecule's action --- .../preview/molecule/moleculeList.js | 3 +- .../preview/molecule/moleculeView.js | 57 ++++++++++++------- .../preview/molecule/redux/selectors.js | 11 ++-- .../moleculeGroups/molGroupChecklist.js | 4 +- .../moleculeGroups/redux/dispatchActions.js | 6 +- 5 files changed, 47 insertions(+), 34 deletions(-) diff --git a/js/components/preview/molecule/moleculeList.js b/js/components/preview/molecule/moleculeList.js index 02350a8f7..c3f2224a0 100644 --- a/js/components/preview/molecule/moleculeList.js +++ b/js/components/preview/molecule/moleculeList.js @@ -60,7 +60,6 @@ import { useRouteMatch } from 'react-router-dom'; import { setSortDialogOpen } from './redux/actions'; import { setMoleculeList, setAllMolLists } from '../../../reducers/api/actions'; import { AlertModal } from '../../common/Modal/AlertModal'; -import {selectMoleculeGroup} from '../moleculeGroups/redux/dispatchActions' const useStyles = makeStyles(theme => ({ container: { @@ -581,7 +580,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei ) }} onChange={handleSearch} - disabled={disableUserInteraction || (getJoinedMoleculeList && getJoinedMoleculeList.length === 0)} + disabled={disableUserInteraction} />, ({ @@ -215,6 +217,8 @@ const MoleculeView = memo( const key = 'mol_image'; const [moleculeGroupID, setMoleculeGroupID] = useState(); + const moleculeGroups = useSelector(state => getMoleculeGroupLists(state)); + const dispatch = useDispatch(); const proteinList = useSelector(state => state.selectionReducers.proteinList); const complexList = useSelector(state => state.selectionReducers.complexList); @@ -228,7 +232,8 @@ const MoleculeView = memo( const [img_data, setImg_data] = useState(img_data_init); const { getNglView } = useContext(NglContext); - const stage = getNglView(VIEWS.MAJOR_VIEW) && getNglView(VIEWS.MAJOR_VIEW).stage; + const majorViewStage = getNglView(VIEWS.MAJOR_VIEW) && getNglView(VIEWS.MAJOR_VIEW).stage; + const stageSummaryView = getNglView(VIEWS.SUMMARY_VIEW) && getNglView(VIEWS.SUMMARY_VIEW).stage; const isLigandOn = (currentID && fragmentDisplayList.includes(currentID)) || false; const isProteinOn = (currentID && proteinList.includes(currentID)) || false; @@ -324,6 +329,8 @@ const MoleculeView = memo( } }, [currentID, dispatch, searchMoleculeGroup]); + const moleculeGroup = moleculeGroups[data.site - 1]; + const svg_image = ( { + dispatch(onSelectMoleculeGroup({ moleculeGroup, stageSummaryView, majorViewStage, selectGroup: true })); + } + const addNewLigand = () => { - dispatch(addLigand(stage, data, colourToggle)); + selectMoleculeSite(); + dispatch(addLigand(majorViewStage, data, colourToggle)); }; const removeSelectedLigand = () => { - dispatch(removeLigand(stage, data)); + dispatch(removeLigand(majorViewStage, data)); selectedAll.current = false; }; @@ -370,12 +382,13 @@ const MoleculeView = memo( }; const removeSelectedProtein = () => { - dispatch(removeHitProtein(stage, data, colourToggle)); + dispatch(removeHitProtein(majorViewStage, data, colourToggle)); selectedAll.current = false; }; const addNewProtein = () => { - dispatch(addHitProtein(stage, data, colourToggle)); + selectMoleculeSite(); + dispatch(addHitProtein(majorViewStage, data, colourToggle)); }; const onProtein = calledFromSelectAll => { @@ -395,12 +408,13 @@ const MoleculeView = memo( }; const removeSelectedComplex = () => { - dispatch(removeComplex(stage, data, colourToggle)); + dispatch(removeComplex(majorViewStage, data, colourToggle)); selectedAll.current = false; }; const addNewComplex = () => { - dispatch(addComplex(stage, data, colourToggle)); + selectMoleculeSite(); + dispatch(addComplex(majorViewStage, data, colourToggle)); }; const onComplex = calledFromSelectAll => { @@ -420,11 +434,12 @@ const MoleculeView = memo( }; const removeSelectedSurface = () => { - dispatch(removeSurface(stage, data, colourToggle)); + dispatch(removeSurface(majorViewStage, data, colourToggle)); }; const addNewSurface = () => { - dispatch(addSurface(stage, data, colourToggle)); + selectMoleculeSite(); + dispatch(addSurface(majorViewStage, data, colourToggle)); }; const onSurface = () => { @@ -436,11 +451,12 @@ const MoleculeView = memo( }; const removeSelectedDensity = () => { - dispatch(removeDensity(stage, data, colourToggle)); + dispatch(removeDensity(majorViewStage, data, colourToggle)); }; const addNewDensity = () => { - dispatch(addDensity(stage, data, colourToggle)); + selectMoleculeSite(); + dispatch(addDensity(majorViewStage, data, colourToggle)); }; const onDensity = () => { @@ -452,11 +468,12 @@ const MoleculeView = memo( }; const removeSelectedVector = () => { - dispatch(removeVector(stage, data)); + dispatch(removeVector(majorViewStage, data)); }; const addNewVector = () => { - dispatch(addVector(stage, data)).catch(error => { + selectMoleculeSite(); + dispatch(addVector(majorViewStage, data)).catch(error => { throw new Error(error); }); }; @@ -498,22 +515,22 @@ const MoleculeView = memo( const moveSelectedMolSettings = newItemDataset => { if (newItemDataset) { if (isLigandOn) { - dispatch(addLigand(stage, newItemDataset, colourToggle)); + dispatch(addLigand(majorViewStage, newItemDataset, colourToggle)); } if (isProteinOn) { - dispatch(addHitProtein(stage, newItemDataset, colourToggle)); + dispatch(addHitProtein(majorViewStage, newItemDataset, colourToggle)); } if (isComplexOn) { - dispatch(addComplex(stage, newItemDataset, colourToggle)); + dispatch(addComplex(majorViewStage, newItemDataset, colourToggle)); } if (isSurfaceOn) { - dispatch(addSurface(stage, newItemDataset, colourToggle)); + dispatch(addSurface(majorViewStage, newItemDataset, colourToggle)); } if (isDensityOn) { - dispatch(addDensity(stage, newItemDataset, colourToggle)); + dispatch(addDensity(majorViewStage, newItemDataset, colourToggle)); } if (isVectorOn) { - dispatch(addVector(stage, newItemDataset)).catch(error => { + dispatch(addVector(majorViewStage, newItemDataset)).catch(error => { throw new Error(error); }); } @@ -567,7 +584,7 @@ const MoleculeView = memo( variant="outlined" className={classes.myLocationButton} onClick={() => { - dispatch(centerOnLigandByMoleculeID(stage, data?.id)); + dispatch(centerOnLigandByMoleculeID(majorViewStage, data?.id)); }} disabled={disableUserInteraction || !isLigandOn} > diff --git a/js/components/preview/molecule/redux/selectors.js b/js/components/preview/molecule/redux/selectors.js index 79e1ad775..031c81a7b 100644 --- a/js/components/preview/molecule/redux/selectors.js +++ b/js/components/preview/molecule/redux/selectors.js @@ -1,6 +1,6 @@ import { createSelector } from 'reselect'; -const getMoleculeGroupLists = state => state.apiReducers.mol_group_list; +export const getMoleculeGroupLists = state => state.apiReducers.mol_group_list; const getMoleculeGroupSelection = state => state.selectionReducers.mol_group_selection; const getObjectSelection = state => state.selectionReducers.object_selection; const getAllMolecules = state => state.apiReducers.all_mol_lists; @@ -39,17 +39,16 @@ export const selectAllMoleculeList = createSelector( (all_mol_lists, mol_group_list) => { const groupList = mol_group_list || []; const allMoleculesList = []; - groupList.forEach(site => { - const siteId = site.id; - const siteMolecules = (all_mol_lists || {})[siteId]; + groupList.forEach((site, index) => { + const siteMolecules = (all_mol_lists || {})[site.id]; if (siteMolecules) { siteMolecules.forEach(r => { - allMoleculesList.push({ site: siteId, ...r }) + allMoleculesList.push({ site: index + 1, ...r }) }); } }); return allMoleculesList; } -) \ No newline at end of file +); \ No newline at end of file diff --git a/js/components/preview/moleculeGroups/molGroupChecklist.js b/js/components/preview/moleculeGroups/molGroupChecklist.js index f1fb53177..9bf99efe6 100644 --- a/js/components/preview/moleculeGroups/molGroupChecklist.js +++ b/js/components/preview/moleculeGroups/molGroupChecklist.js @@ -73,9 +73,7 @@ const molGroupChecklist = memo(({}) => { - dispatch(onSelectMoleculeGroup({ moleculeGroup, stageSummaryView, majorViewStage, event })) - } + onChange={event => dispatch(onSelectMoleculeGroup({ moleculeGroup, stageSummaryView, majorViewStage, selectGroup: event.target.checked }))} disabled={disableUserInteraction} /> diff --git a/js/components/preview/moleculeGroups/redux/dispatchActions.js b/js/components/preview/moleculeGroups/redux/dispatchActions.js index 8875e791e..8b05dcde2 100644 --- a/js/components/preview/moleculeGroups/redux/dispatchActions.js +++ b/js/components/preview/moleculeGroups/redux/dispatchActions.js @@ -259,7 +259,7 @@ export const onDeselectMoleculeGroup = ({ moleculeGroup, stageSummaryView, major } }; -export const onSelectMoleculeGroup = ({ moleculeGroup, stageSummaryView, majorViewStage, event }) => ( +export const onSelectMoleculeGroup = ({ moleculeGroup, stageSummaryView, majorViewStage, selectGroup }) => ( dispatch, getState ) => { @@ -270,9 +270,9 @@ export const onSelectMoleculeGroup = ({ moleculeGroup, stageSummaryView, majorVi const objIdx = mol_group_selection.indexOf(moleculeGroup.id); const currentMolGroup = mol_group_list.find(o => o.id === moleculeGroup.id); - if (event.target.checked && objIdx === -1) { + if (selectGroup && objIdx === -1) { dispatch(selectMoleculeGroup(currentMolGroup, stageSummaryView)); - } else if (!event.target.checked && objIdx > -1) { + } else if (!selectGroup && objIdx > -1) { dispatch(onDeselectMoleculeGroup({ moleculeGroup, stageSummaryView, majorViewStage })); } }; From 70ac7ea1431f60750b0c38ce4b4d42402866ca2a Mon Sep 17 00:00:00 2001 From: ag-m2ms Date: Thu, 5 Nov 2020 13:57:42 +0100 Subject: [PATCH 03/16] Exact match for direct links --- js/components/direct/constants.js | 3 ++- js/components/direct/directDisplay.js | 10 +++++++--- .../preview/molecule/redux/dispatchActions.js | 5 ++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/js/components/direct/constants.js b/js/components/direct/constants.js index 04847abfd..bc48332c7 100644 --- a/js/components/direct/constants.js +++ b/js/components/direct/constants.js @@ -1,4 +1,5 @@ export const URL_TOKENS = { target: 'target', - molecules: 'mols' + molecules: 'mols', + exact: 'exact' }; \ No newline at end of file diff --git a/js/components/direct/directDisplay.js b/js/components/direct/directDisplay.js index 01b5c3103..3d99870cb 100644 --- a/js/components/direct/directDisplay.js +++ b/js/components/direct/directDisplay.js @@ -65,12 +65,16 @@ export const DirectDisplay = memo(props => { currentMolecule.V = true; break; default: - currentMolecule = { name: part, L: true, P: false, C: false, S: false, V: false }; - molecules.push(currentMolecule); + if (part.toLowerCase() === URL_TOKENS.exact) { + currentMolecule.exact = true; + } else { + currentMolecule = { name: part, L: true, P: false, C: false, S: false, V: false, exact: false }; + molecules.push(currentMolecule); + } break; } } else { - currentMolecule = { name: part, L: true, P: false, C: false, S: false, V: false }; + currentMolecule = { name: part, L: true, P: false, C: false, S: false, V: false, exact: false }; molecules.push(currentMolecule); } } else { diff --git a/js/components/preview/molecule/redux/dispatchActions.js b/js/components/preview/molecule/redux/dispatchActions.js index 9ace772fd..3da18b5a4 100644 --- a/js/components/preview/molecule/redux/dispatchActions.js +++ b/js/components/preview/molecule/redux/dispatchActions.js @@ -404,13 +404,16 @@ export const applyDirectSelection = (stage, stageSummaryView) => (dispatch, getS //const molGroupMap = getMolGroupNameToId(); directDisplay.molecules.forEach(m => { let keys = Object.keys(allMols); + let directProteinNameModded = m.name.toLowerCase(); + let directProteinCodeModded = `${directDisplay.target.toLowerCase()}-${directProteinNameModded}`; for (let groupIndex = 0; groupIndex < keys.length; groupIndex++) { let groupId = keys[groupIndex]; let molList = allMols[groupId]; let molCount = molList.length; for (let molIndex = 0; molIndex < molCount; molIndex++) { let mol = molList[molIndex]; - if (mol.protein_code.includes(m.name) || mol.protein_code.includes(m.name.toLowerCase())) { + let proteinCodeModded = mol.protein_code.toLowerCase(); + if (m.exact ? proteinCodeModded === directProteinCodeModded : proteinCodeModded.includes(directProteinNameModded)) { let molGroupId = groupId; if (!mol_group_selection.includes(parseInt(molGroupId))) { let molGroup = mol_group_list.find(g => g.id === parseInt(molGroupId)); From 2bf965337113abb2fac3d0167ab17b79389b4af3 Mon Sep 17 00:00:00 2001 From: Boris Kovar Date: Thu, 5 Nov 2020 14:30:47 +0100 Subject: [PATCH 04/16] - updated version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index db96c294a..4cdac4c47 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fragalysis-frontend", - "version": "0.9.15", + "version": "0.9.16", "description": "Frontend for fragalysis", "main": "webpack.config.js", "scripts": { From 94db501713b1d07a72c6a74f5ffbd7163c5073f9 Mon Sep 17 00:00:00 2001 From: ag-m2ms Date: Fri, 6 Nov 2020 12:38:48 +0100 Subject: [PATCH 05/16] Fixed stale reads of mol_group_selection --- js/components/preview/molecule/redux/dispatchActions.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/js/components/preview/molecule/redux/dispatchActions.js b/js/components/preview/molecule/redux/dispatchActions.js index 9ace772fd..6cc997ae3 100644 --- a/js/components/preview/molecule/redux/dispatchActions.js +++ b/js/components/preview/molecule/redux/dispatchActions.js @@ -390,7 +390,6 @@ export const applyDirectSelection = (stage, stageSummaryView) => (dispatch, getS const state = getState(); const directDisplay = state.apiReducers.direct_access; - const mol_group_selection = state.selectionReducers.mol_group_selection; const fragmentDisplayList = state.selectionReducers.fragmentDisplayList; const proteinList = state.selectionReducers.proteinList; const complexList = state.selectionReducers.complexList; @@ -412,6 +411,8 @@ export const applyDirectSelection = (stage, stageSummaryView) => (dispatch, getS let mol = molList[molIndex]; if (mol.protein_code.includes(m.name) || mol.protein_code.includes(m.name.toLowerCase())) { let molGroupId = groupId; + // Has to be declared here because otherwise we read stale value + const mol_group_selection = getState().selectionReducers.mol_group_selection; if (!mol_group_selection.includes(parseInt(molGroupId))) { let molGroup = mol_group_list.find(g => g.id === parseInt(molGroupId)); dispatch(selectMoleculeGroup(molGroup, stageSummaryView)); From 3dac0f5296bc4e7a68ca5e647269c986477cc219 Mon Sep 17 00:00:00 2001 From: ag-m2ms Date: Fri, 6 Nov 2020 13:19:03 +0100 Subject: [PATCH 06/16] Fixed LPC buttons at the top of the list --- .../preview/molecule/moleculeList.js | 36 ++++++---- .../preview/molecule/moleculeView.js | 66 ++++++++----------- .../preview/molecule/redux/selectors.js | 2 +- 3 files changed, 51 insertions(+), 53 deletions(-) diff --git a/js/components/preview/molecule/moleculeList.js b/js/components/preview/molecule/moleculeList.js index c3f2224a0..c4747504b 100644 --- a/js/components/preview/molecule/moleculeList.js +++ b/js/components/preview/molecule/moleculeList.js @@ -60,6 +60,7 @@ import { useRouteMatch } from 'react-router-dom'; import { setSortDialogOpen } from './redux/actions'; import { setMoleculeList, setAllMolLists } from '../../../reducers/api/actions'; import { AlertModal } from '../../common/Modal/AlertModal'; +import { onSelectMoleculeGroup } from '../moleculeGroups/redux/dispatchActions'; const useStyles = makeStyles(theme => ({ container: { @@ -260,7 +261,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei const isActiveFilter = !!(filter || {}).active; const { getNglView } = useContext(NglContext); - const stage = getNglView(VIEWS.MAJOR_VIEW) && getNglView(VIEWS.MAJOR_VIEW).stage; + const majorViewStage = getNglView(VIEWS.MAJOR_VIEW) && getNglView(VIEWS.MAJOR_VIEW).stage; const stageSummaryView = getNglView(VIEWS.SUMMARY_VIEW) && getNglView(VIEWS.SUMMARY_VIEW).stage; const filterRef = useRef(); @@ -357,11 +358,11 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei ) { dispatch(setMoleculeList({ ...(all_mol_lists[mol_group_on] || []) })); if (!directAccessProcessed && directDisplay && directDisplay.molecules && directDisplay.molecules.length > 0) { - dispatch(applyDirectSelection(stage, stageSummaryView)); + dispatch(applyDirectSelection(majorViewStage, stageSummaryView)); wereMoleculesInitialized.current = true; } if ( - stage && + majorViewStage && all_mol_lists && all_mol_lists[mol_group_on] && hideProjects && @@ -370,14 +371,14 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei ) { dispatch(initializeFilter(object_selection, joinedMoleculeLists)); let moleculeList = all_mol_lists[mol_group_on]; - dispatch(initializeMolecules(stage, moleculeList, firstInitializationMolecule.current)); + dispatch(initializeMolecules(majorViewStage, moleculeList, firstInitializationMolecule.current)); wereMoleculesInitialized.current = true; } } }, [ list_type, mol_group_on, - stage, + majorViewStage, firstLoad, target_on, dispatch, @@ -475,7 +476,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei const removeSelectedType = type => { joinedMoleculeLists.forEach(molecule => { - dispatch(removeType[type](stage, molecule, colourList[molecule.id % colourList.length])); + dispatch(removeType[type](majorViewStage, molecule, colourList[molecule.id % colourList.length])); }); selectedAll.current = false; }; @@ -483,33 +484,39 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei const removeOfAllSelectedTypes = () => { proteinList?.forEach(moleculeID => { const foundedMolecule = joinedMoleculeLists?.find(mol => mol.id === moleculeID); - dispatch(removeHitProtein(stage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); + dispatch(removeHitProtein(majorViewStage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); }); complexList?.forEach(moleculeID => { const foundedMolecule = joinedMoleculeLists?.find(mol => mol.id === moleculeID); - dispatch(removeComplex(stage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); + dispatch(removeComplex(majorViewStage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); }); fragmentDisplayList?.forEach(moleculeID => { const foundedMolecule = joinedMoleculeLists?.find(mol => mol.id === moleculeID); - dispatch(removeLigand(stage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); + dispatch(removeLigand(majorViewStage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); }); surfaceList?.forEach(moleculeID => { const foundedMolecule = joinedMoleculeLists?.find(mol => mol.id === moleculeID); - dispatch(removeSurface(stage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); + dispatch(removeSurface(majorViewStage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); }); densityList?.forEach(moleculeID => { const foundedMolecule = joinedMoleculeLists?.find(mol => mol.id === moleculeID); - dispatch(removeDensity(stage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); + dispatch(removeDensity(majorViewStage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); }); vectorOnList?.forEach(moleculeID => { const foundedMolecule = joinedMoleculeLists?.find(mol => mol.id === moleculeID); - dispatch(removeVector(stage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); + dispatch(removeVector(majorViewStage, foundedMolecule, colourList[foundedMolecule.id % colourList.length])); }); }; + const selectMoleculeSite = (moleculeGroupSite) => { + const moleculeGroup = mol_group_list[moleculeGroupSite - 1]; + dispatch(onSelectMoleculeGroup({ moleculeGroup, stageSummaryView, majorViewStage, selectGroup: true })); + } + const addNewType = type => { joinedMoleculeLists.forEach(molecule => { - dispatch(addType[type](stage, molecule, colourList[molecule.id % colourList.length])); + selectMoleculeSite(molecule.site); + dispatch(addType[type](majorViewStage, molecule, colourList[molecule.id % colourList.length])); }); }; @@ -586,7 +593,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei dispatch(hideAllSelectedMolecules(stage, joinedMoleculeLists))} + onClick={() => dispatch(hideAllSelectedMolecules(majorViewStage, joinedMoleculeLists))} > @@ -789,6 +796,7 @@ export const MoleculeList = memo(({ height, setFilterItemsHeight, filterItemsHei previousItemData={index > 0 && array[index - 1]} nextItemData={index < array?.length && array[index + 1]} removeOfAllSelectedTypes={removeOfAllSelectedTypes} + selectMoleculeSite={selectMoleculeSite} /> ))} diff --git a/js/components/preview/molecule/moleculeView.js b/js/components/preview/molecule/moleculeView.js index 58ee1a11d..891a1818c 100644 --- a/js/components/preview/molecule/moleculeView.js +++ b/js/components/preview/molecule/moleculeView.js @@ -31,8 +31,6 @@ import { base_url } from '../../routes/constants'; import { moleculeProperty } from './helperConstants'; import { centerOnLigandByMoleculeID } from '../../../reducers/ngl/dispatchActions'; import { SvgTooltip } from '../../common'; -import { onSelectMoleculeGroup } from '../moleculeGroups/redux/dispatchActions'; -import { getMoleculeGroupLists } from './redux/selectors'; const useStyles = makeStyles(theme => ({ @@ -207,7 +205,8 @@ const MoleculeView = memo( index, previousItemData, nextItemData, - removeOfAllSelectedTypes + removeOfAllSelectedTypes, + selectMoleculeSite }) => { // const [countOfVectors, setCountOfVectors] = useState('-'); // const [cmpds, setCmpds] = useState('-'); @@ -217,8 +216,6 @@ const MoleculeView = memo( const key = 'mol_image'; const [moleculeGroupID, setMoleculeGroupID] = useState(); - const moleculeGroups = useSelector(state => getMoleculeGroupLists(state)); - const dispatch = useDispatch(); const proteinList = useSelector(state => state.selectionReducers.proteinList); const complexList = useSelector(state => state.selectionReducers.complexList); @@ -232,8 +229,7 @@ const MoleculeView = memo( const [img_data, setImg_data] = useState(img_data_init); const { getNglView } = useContext(NglContext); - const majorViewStage = getNglView(VIEWS.MAJOR_VIEW) && getNglView(VIEWS.MAJOR_VIEW).stage; - const stageSummaryView = getNglView(VIEWS.SUMMARY_VIEW) && getNglView(VIEWS.SUMMARY_VIEW).stage; + const stage = getNglView(VIEWS.MAJOR_VIEW) && getNglView(VIEWS.MAJOR_VIEW).stage; const isLigandOn = (currentID && fragmentDisplayList.includes(currentID)) || false; const isProteinOn = (currentID && proteinList.includes(currentID)) || false; @@ -329,8 +325,6 @@ const MoleculeView = memo( } }, [currentID, dispatch, searchMoleculeGroup]); - const moleculeGroup = moleculeGroups[data.site - 1]; - const svg_image = ( { - dispatch(onSelectMoleculeGroup({ moleculeGroup, stageSummaryView, majorViewStage, selectGroup: true })); - } - const addNewLigand = () => { - selectMoleculeSite(); - dispatch(addLigand(majorViewStage, data, colourToggle)); + selectMoleculeSite(data.site); + dispatch(addLigand(stage, data, colourToggle)); }; const removeSelectedLigand = () => { - dispatch(removeLigand(majorViewStage, data)); + dispatch(removeLigand(stage, data)); selectedAll.current = false; }; @@ -382,13 +372,13 @@ const MoleculeView = memo( }; const removeSelectedProtein = () => { - dispatch(removeHitProtein(majorViewStage, data, colourToggle)); + dispatch(removeHitProtein(stage, data, colourToggle)); selectedAll.current = false; }; const addNewProtein = () => { - selectMoleculeSite(); - dispatch(addHitProtein(majorViewStage, data, colourToggle)); + selectMoleculeSite(data.site); + dispatch(addHitProtein(stage, data, colourToggle)); }; const onProtein = calledFromSelectAll => { @@ -408,13 +398,13 @@ const MoleculeView = memo( }; const removeSelectedComplex = () => { - dispatch(removeComplex(majorViewStage, data, colourToggle)); + dispatch(removeComplex(stage, data, colourToggle)); selectedAll.current = false; }; const addNewComplex = () => { - selectMoleculeSite(); - dispatch(addComplex(majorViewStage, data, colourToggle)); + selectMoleculeSite(data.site); + dispatch(addComplex(stage, data, colourToggle)); }; const onComplex = calledFromSelectAll => { @@ -434,12 +424,12 @@ const MoleculeView = memo( }; const removeSelectedSurface = () => { - dispatch(removeSurface(majorViewStage, data, colourToggle)); + dispatch(removeSurface(stage, data, colourToggle)); }; const addNewSurface = () => { - selectMoleculeSite(); - dispatch(addSurface(majorViewStage, data, colourToggle)); + selectMoleculeSite(data.site); + dispatch(addSurface(stage, data, colourToggle)); }; const onSurface = () => { @@ -451,12 +441,12 @@ const MoleculeView = memo( }; const removeSelectedDensity = () => { - dispatch(removeDensity(majorViewStage, data, colourToggle)); + dispatch(removeDensity(stage, data, colourToggle)); }; const addNewDensity = () => { - selectMoleculeSite(); - dispatch(addDensity(majorViewStage, data, colourToggle)); + selectMoleculeSite(data.site); + dispatch(addDensity(stage, data, colourToggle)); }; const onDensity = () => { @@ -468,12 +458,12 @@ const MoleculeView = memo( }; const removeSelectedVector = () => { - dispatch(removeVector(majorViewStage, data)); + dispatch(removeVector(stage, data)); }; const addNewVector = () => { - selectMoleculeSite(); - dispatch(addVector(majorViewStage, data)).catch(error => { + selectMoleculeSite(data.site); + dispatch(addVector(stage, data)).catch(error => { throw new Error(error); }); }; @@ -515,22 +505,22 @@ const MoleculeView = memo( const moveSelectedMolSettings = newItemDataset => { if (newItemDataset) { if (isLigandOn) { - dispatch(addLigand(majorViewStage, newItemDataset, colourToggle)); + dispatch(addLigand(stage, newItemDataset, colourToggle)); } if (isProteinOn) { - dispatch(addHitProtein(majorViewStage, newItemDataset, colourToggle)); + dispatch(addHitProtein(stage, newItemDataset, colourToggle)); } if (isComplexOn) { - dispatch(addComplex(majorViewStage, newItemDataset, colourToggle)); + dispatch(addComplex(stage, newItemDataset, colourToggle)); } if (isSurfaceOn) { - dispatch(addSurface(majorViewStage, newItemDataset, colourToggle)); + dispatch(addSurface(stage, newItemDataset, colourToggle)); } if (isDensityOn) { - dispatch(addDensity(majorViewStage, newItemDataset, colourToggle)); + dispatch(addDensity(stage, newItemDataset, colourToggle)); } if (isVectorOn) { - dispatch(addVector(majorViewStage, newItemDataset)).catch(error => { + dispatch(addVector(stage, newItemDataset)).catch(error => { throw new Error(error); }); } @@ -584,7 +574,7 @@ const MoleculeView = memo( variant="outlined" className={classes.myLocationButton} onClick={() => { - dispatch(centerOnLigandByMoleculeID(majorViewStage, data?.id)); + dispatch(centerOnLigandByMoleculeID(stage, data?.id)); }} disabled={disableUserInteraction || !isLigandOn} > diff --git a/js/components/preview/molecule/redux/selectors.js b/js/components/preview/molecule/redux/selectors.js index 031c81a7b..9fe926a7e 100644 --- a/js/components/preview/molecule/redux/selectors.js +++ b/js/components/preview/molecule/redux/selectors.js @@ -1,6 +1,6 @@ import { createSelector } from 'reselect'; -export const getMoleculeGroupLists = state => state.apiReducers.mol_group_list; +const getMoleculeGroupLists = state => state.apiReducers.mol_group_list; const getMoleculeGroupSelection = state => state.selectionReducers.mol_group_selection; const getObjectSelection = state => state.selectionReducers.object_selection; const getAllMolecules = state => state.apiReducers.all_mol_lists; From 34f36231e573dad917930c9cff0837c976282e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1na=20Kohanov=C3=A1?= Date: Fri, 6 Nov 2020 14:01:58 +0100 Subject: [PATCH 07/16] #444 The button X needs to be fixed (related to #407) --- js/components/datasets/redux/selectors.js | 27 ++++++++++++++--------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/js/components/datasets/redux/selectors.js b/js/components/datasets/redux/selectors.js index 0b33faa5a..3ceaf3a7e 100644 --- a/js/components/datasets/redux/selectors.js +++ b/js/components/datasets/redux/selectors.js @@ -254,20 +254,24 @@ export const getFilteredDatasetMoleculeList = createSelector( for (let prioAttr of sortedAttributes) { const order = filterProperties[prioAttr].order; - const scoreValueOfA = Object.keys(a.numerical_scores).find(key => key === prioAttr) && a.numerical_scores[prioAttr]; - scoreValueOfA = scoreValueOfA || (Object.keys(a.text_scores).find(key => key === prioAttr) && a.text_scores[prioAttr]); - const scoreValueOfB = Object.keys(b.numerical_scores).find(key => key === prioAttr) && b.numerical_scores[prioAttr]; - scoreValueOfB = scoreValueOfB || (Object.keys(b.text_scores).find(key => key === prioAttr) && b.text_scores[prioAttr]); - - if (scoreValueOfA === "Y") { + const scoreValueOfA = + Object.keys(a.numerical_scores).find(key => key === prioAttr) && a.numerical_scores[prioAttr]; + scoreValueOfA = + scoreValueOfA || (Object.keys(a.text_scores).find(key => key === prioAttr) && a.text_scores[prioAttr]); + const scoreValueOfB = + Object.keys(b.numerical_scores).find(key => key === prioAttr) && b.numerical_scores[prioAttr]; + scoreValueOfB = + scoreValueOfB || (Object.keys(b.text_scores).find(key => key === prioAttr) && b.text_scores[prioAttr]); + + if (scoreValueOfA === 'Y') { scoreValueOfA = 1; - } else if (scoreValueOfA === "N") { + } else if (scoreValueOfA === 'N') { scoreValueOfA = 0; } - if (scoreValueOfB === "Y") { + if (scoreValueOfB === 'Y') { scoreValueOfB = 1; - } else if (scoreValueOfB === "N") { + } else if (scoreValueOfB === 'N') { scoreValueOfB = 0; } @@ -314,7 +318,10 @@ export const getCrossReferenceCompoundListByCompoundName = createSelector( Object.keys(moleculesDatasetMap).forEach(datasetID => { const currentList = moleculesDatasetMap[datasetID]; if (currentList && Array.isArray(currentList)) { - results.push({ molecule: currentList.find(item => item.name === compoundName), datasetID }); + let molecule = currentList.find(item => item.name === compoundName); + if (molecule) { + results.push({ molecule, datasetID }); + } } }); return results; From e59a73bcf73ed646d745529cfe98857d2a76ee35 Mon Sep 17 00:00:00 2001 From: ag-m2ms Date: Fri, 6 Nov 2020 14:05:29 +0100 Subject: [PATCH 08/16] Fixed target name stripping from molecule title --- js/components/preview/molecule/moleculeView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/components/preview/molecule/moleculeView.js b/js/components/preview/molecule/moleculeView.js index aaeccdf85..0224b4400 100644 --- a/js/components/preview/molecule/moleculeView.js +++ b/js/components/preview/molecule/moleculeView.js @@ -530,7 +530,7 @@ const MoleculeView = memo( moveSelectedMolSettings(previousItemData); }; - let moleculeTitle = data?.protein_code.replace(`${target_on_name}-`, ''); + let moleculeTitle = data?.protein_code.replace(new RegExp(`${target_on_name}-`, 'i'), ''); return ( <> From 3f9b2c8cb66229fcac1d21ee6170a9618a252ed2 Mon Sep 17 00:00:00 2001 From: Boris Kovar Date: Fri, 6 Nov 2020 14:28:31 +0100 Subject: [PATCH 09/16] - updated version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 4cdac4c47..cf7236631 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fragalysis-frontend", - "version": "0.9.16", + "version": "0.9.17", "description": "Frontend for fragalysis", "main": "webpack.config.js", "scripts": { From ca0b33e24d6f81b3389c39a3e6dcb83fade39b03 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1na=20Kohanov=C3=A1?= Date: Mon, 9 Nov 2020 11:10:56 +0100 Subject: [PATCH 10/16] #444 The button X needs to be fixed (related to #407) --- js/components/datasets/datasetMoleculeView.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/js/components/datasets/datasetMoleculeView.js b/js/components/datasets/datasetMoleculeView.js index 8bc445a32..3d92b3b1d 100644 --- a/js/components/datasets/datasetMoleculeView.js +++ b/js/components/datasets/datasetMoleculeView.js @@ -729,7 +729,7 @@ export const DatasetMoleculeView = memo( setRef(ref.current); } }} - disabled={true} + disabled={disableUserInteraction} > X From 3a1ee1d5fc777a47e61defb27ba1b336a0aa1d15 Mon Sep 17 00:00:00 2001 From: Boris Kovar Date: Mon, 9 Nov 2020 13:01:05 +0100 Subject: [PATCH 11/16] -updated version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index f44f91aaf..ed2b56dc0 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fragalysis-frontend", - "version": "0.9.11", + "version": "0.9.18", "description": "Frontend for fragalysis", "main": "webpack.config.js", "scripts": { From bea0e70851637c17c96b804c849b71e924679e6c Mon Sep 17 00:00:00 2001 From: Boris Kovar Date: Mon, 9 Nov 2020 13:20:53 +0100 Subject: [PATCH 12/16] - updated version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cf7236631..df3246da8 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fragalysis-frontend", - "version": "0.9.17", + "version": "0.9.19", "description": "Frontend for fragalysis", "main": "webpack.config.js", "scripts": { From 95701a31107ab321e7ecfc6a946ed8102f9c4822 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1na=20Kohanov=C3=A1?= Date: Mon, 9 Nov 2020 14:04:48 +0100 Subject: [PATCH 13/16] #451 Compounds are not displayed for a vector --- .../preview/molecule/redux/dispatchActions.js | 5 ++--- js/reducers/api/selectors.js | 1 + js/reducers/selection/selectors.js | 12 +++++++----- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/js/components/preview/molecule/redux/dispatchActions.js b/js/components/preview/molecule/redux/dispatchActions.js index 9ace772fd..6659ce577 100644 --- a/js/components/preview/molecule/redux/dispatchActions.js +++ b/js/components/preview/molecule/redux/dispatchActions.js @@ -42,8 +42,8 @@ import { setCompoundImage } from '../../summary/redux/actions'; import { noCompoundImage } from '../../summary/redux/reducer'; import { getMoleculeOfCurrentVector } from '../../../../reducers/selection/selectors'; import { resetCurrentCompoundsSettings } from '../../compounds/redux/actions'; -import {selectMoleculeGroup} from '../../moleculeGroups/redux/dispatchActions'; -import {setDirectAccess, setDirectAccessProcessed} from '../../../../reducers/api/actions'; +import { selectMoleculeGroup } from '../../moleculeGroups/redux/dispatchActions'; +import { setDirectAccess, setDirectAccessProcessed } from '../../../../reducers/api/actions'; /** * Convert the JSON into a list of arrow objects @@ -438,5 +438,4 @@ export const applyDirectSelection = (stage, stageSummaryView) => (dispatch, getS // dispatch(setDirectAccess({})); dispatch(setDirectAccessProcessed(true)); } - }; diff --git a/js/reducers/api/selectors.js b/js/reducers/api/selectors.js index 409289146..3bca464a3 100644 --- a/js/reducers/api/selectors.js +++ b/js/reducers/api/selectors.js @@ -1 +1,2 @@ export const getMoleculeList = state => state.apiReducers.molecule_list; +export const getAllMoleculeList = state => state.apiReducers.all_mol_lists; diff --git a/js/reducers/selection/selectors.js b/js/reducers/selection/selectors.js index f54f9b288..8aa98b9d5 100644 --- a/js/reducers/selection/selectors.js +++ b/js/reducers/selection/selectors.js @@ -1,5 +1,5 @@ import { createSelector } from 'reselect'; -import { getMoleculeList } from '../api/selectors'; +import { getAllMoleculeList } from '../api/selectors'; const getCurrentCompoundClass = state => state.previewReducers.compounds.currentCompoundClass; const getVectorList = state => state.selectionReducers.vector_list; @@ -10,14 +10,16 @@ const getCompoundsOfVectors = state => state.selectionReducers.compoundsOfVector export const getMoleculeOfCurrentVector = createSelector( getCurrentVector, getVectorList, - getMoleculeList, + getAllMoleculeList, (selectedVectorSmile, vectorList, moleculeList) => { if (selectedVectorSmile !== null && vectorList && moleculeList) { const foundedVector = vectorList.find(vector => vector.name.includes(selectedVectorSmile)); if (foundedVector) { - for (const molecule in moleculeList) { - if (moleculeList.hasOwnProperty(molecule)) { - if (molecule.id === foundedVector.moleculeId) { + for (const moleculeProperty in moleculeList) { + if (moleculeList.hasOwnProperty(moleculeProperty)) { + let molecules = moleculeList[moleculeProperty]; + let molecule = molecules.find(m => m.id === foundedVector.moleculeId); + if (molecule) { return molecule; } } From fb6878bb53a4a5baca70c4f191cac346d1c8dc8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1na=20Kohanov=C3=A1?= Date: Mon, 9 Nov 2020 16:18:37 +0100 Subject: [PATCH 14/16] Fixed molecule view of inspiration dialog --- js/components/datasets/inspirationDialog.js | 3 +++ .../preview/molecule/moleculeView.js | 24 ++++++++++++++----- 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/js/components/datasets/inspirationDialog.js b/js/components/datasets/inspirationDialog.js index 3a69ab162..007782ab3 100644 --- a/js/components/datasets/inspirationDialog.js +++ b/js/components/datasets/inspirationDialog.js @@ -218,6 +218,8 @@ export const InspirationDialog = memo( surface: removeSurface }; + const selectMoleculeSite = moleculeGroupSite => {}; + const removeOfAllSelectedTypes = () => { proteinList?.forEach(moleculeID => { let foundedMolecule = moleculeList?.find(mol => mol.id === moleculeID); @@ -409,6 +411,7 @@ export const InspirationDialog = memo( previousItemData={previousData} nextItemData={nextData} removeOfAllSelectedTypes={removeOfAllSelectedTypes} + selectMoleculeSite={selectMoleculeSite} /> ); })} diff --git a/js/components/preview/molecule/moleculeView.js b/js/components/preview/molecule/moleculeView.js index 59f5ba431..e6e3391aa 100644 --- a/js/components/preview/molecule/moleculeView.js +++ b/js/components/preview/molecule/moleculeView.js @@ -345,7 +345,9 @@ const MoleculeView = memo( isLigandOn || isProteinOn || isComplexOn || isSurfaceOn || isVectorOn ? selected_style : not_selected_style; const addNewLigand = () => { - selectMoleculeSite(data.site); + if (selectMoleculeSite) { + selectMoleculeSite(data.site); + } dispatch(addLigand(stage, data, colourToggle)); }; @@ -376,7 +378,9 @@ const MoleculeView = memo( }; const addNewProtein = () => { - selectMoleculeSite(data.site); + if (selectMoleculeSite) { + selectMoleculeSite(data.site); + } dispatch(addHitProtein(stage, data, colourToggle)); }; @@ -402,7 +406,9 @@ const MoleculeView = memo( }; const addNewComplex = () => { - selectMoleculeSite(data.site); + if (selectMoleculeSite) { + selectMoleculeSite(data.site); + } dispatch(addComplex(stage, data, colourToggle)); }; @@ -427,7 +433,9 @@ const MoleculeView = memo( }; const addNewSurface = () => { - selectMoleculeSite(data.site); + if (selectMoleculeSite) { + selectMoleculeSite(data.site); + } dispatch(addSurface(stage, data, colourToggle)); }; @@ -444,7 +452,9 @@ const MoleculeView = memo( }; const addNewDensity = () => { - selectMoleculeSite(data.site); + if (selectMoleculeSite) { + selectMoleculeSite(data.site); + } dispatch(addDensity(stage, data, colourToggle)); }; @@ -461,7 +471,9 @@ const MoleculeView = memo( }; const addNewVector = () => { - selectMoleculeSite(data.site); + if (selectMoleculeSite) { + selectMoleculeSite(data.site); + } dispatch(addVector(stage, data)).catch(error => { throw new Error(error); }); From 165a485df06370cd35e6e4a084fd918d219c70f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adri=C3=A1na=20Kohanov=C3=A1?= Date: Tue, 10 Nov 2020 12:10:27 +0100 Subject: [PATCH 15/16] Fixed molecule view of cross reference dialog --- js/components/datasets/crossReferenceDialog.js | 3 ++- js/components/datasets/datasetMoleculeView.js | 12 +++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/js/components/datasets/crossReferenceDialog.js b/js/components/datasets/crossReferenceDialog.js index 5bd070d7d..78361819d 100644 --- a/js/components/datasets/crossReferenceDialog.js +++ b/js/components/datasets/crossReferenceDialog.js @@ -60,7 +60,8 @@ const useStyles = makeStyles(theme => ({ }, content: { overflowY: 'auto', - height: 214 + height: 214, + width: 'fit-content' }, search: { margin: theme.spacing(1), diff --git a/js/components/datasets/datasetMoleculeView.js b/js/components/datasets/datasetMoleculeView.js index 3d92b3b1d..3f3588eac 100644 --- a/js/components/datasets/datasetMoleculeView.js +++ b/js/components/datasets/datasetMoleculeView.js @@ -161,6 +161,10 @@ const useStyles = makeStyles(theme => ({ inheritWidth: { width: 'inherit' }, + widthOverflow: { + maxWidth: '180px', + overflow: 'hidden' + }, rank: { fontStyle: 'italic', fontSize: 7 @@ -553,7 +557,13 @@ export const DatasetMoleculeView = memo( {/* Title label */} - +
From e84da99f87df59f4a392db9810143e2b15b29efd Mon Sep 17 00:00:00 2001 From: Boris Kovar Date: Wed, 11 Nov 2020 06:19:26 +0100 Subject: [PATCH 16/16] - updated version number --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index df3246da8..3f2053a6b 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fragalysis-frontend", - "version": "0.9.19", + "version": "0.9.21", "description": "Frontend for fragalysis", "main": "webpack.config.js", "scripts": {