Skip to content

Commit 60ceeec

Browse files
committed
Don't mount component with empty columns
1 parent 1944abf commit 60ceeec

File tree

3 files changed

+37
-13
lines changed

3 files changed

+37
-13
lines changed

app/javascript/src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariations.js

+13-8
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,17 @@ import PropTypes from 'prop-types';
1212
import Reaction from 'src/models/Reaction';
1313
import {
1414
createVariationsRow, copyVariationsRow, updateVariationsRow,
15-
materialTypes, instantiateSelectedColumns,
15+
materialTypes, getVariationsColumns,
1616
addMissingColumnsToVariations, removeObsoleteColumnsFromVariations,
17+
getMetadataColumnGroupChild, getPropertyColumnGroupChild
1718
} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsUtils';
1819
import {
1920
getReactionAnalyses, updateAnalyses
2021
} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsAnalyses';
2122
import {
2223
updateVariationsGasTypes,
2324
getReactionMaterials, getReactionMaterialsIDs, getReactionMaterialsGasTypes,
24-
removeObsoleteMaterialColumns
25+
removeObsoleteMaterialColumns, getMaterialColumnGroupChild
2526
} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsMaterials';
2627
import {
2728
PropertyFormatter, PropertyParser,
@@ -43,9 +44,7 @@ export default function ReactionVariations({ reaction, onReactionChange, isActiv
4344
const [gasMode, setGasMode] = useState(reaction.gaseous);
4445
const [allReactionAnalyses, setAllReactionAnalyses] = useState(getReactionAnalyses(reaction));
4546
const [reactionMaterials, setReactionMaterials] = useState(getReactionMaterials(reaction));
46-
const [selectedColumns, setSelectedColumns] = useState(
47-
instantiateSelectedColumns
48-
);
47+
const [selectedColumns, setSelectedColumns] = useState(getVariationsColumns(reactionVariations));
4948
const [columnDefinitions, setColumnDefinitions] = useReducer(columnDefinitionsReducer, [
5049
{
5150
headerName: 'Tools',
@@ -59,20 +58,26 @@ export default function ReactionVariations({ reaction, onReactionChange, isActiv
5958
headerName: 'Metadata',
6059
groupId: 'metadata',
6160
marryChildren: true,
62-
children: []
61+
children: selectedColumns.metadata.map((entry) => getMetadataColumnGroupChild(entry))
6362
},
6463
{
6564
headerName: 'Properties',
6665
groupId: 'properties',
6766
marryChildren: true,
68-
children: []
67+
children: selectedColumns.properties.map((entry) => getPropertyColumnGroupChild(entry, gasMode))
6968
},
7069
].concat(
7170
Object.entries(materialTypes).map(([materialType, { label }]) => ({
7271
headerName: label,
7372
groupId: materialType,
7473
marryChildren: true,
75-
children: []
74+
children: selectedColumns[materialType].map(
75+
(materialID) => getMaterialColumnGroupChild(
76+
reactionMaterials[materialType].find((material) => material.id.toString() === materialID),
77+
materialType,
78+
gasMode
79+
)
80+
)
7681
}))
7782
));
7883

app/javascript/src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsUtils.js

+9-4
Original file line numberDiff line numberDiff line change
@@ -470,13 +470,16 @@ function updateColumnDefinitions(columnDefinitions, field, property, newValue) {
470470
return updatedColumnDefinitions;
471471
}
472472

473-
function instantiateSelectedColumns() {
473+
function getVariationsColumns(variations) {
474+
const variationsRow = variations[0];
474475
const materialColumns = Object.entries(materialTypes).reduce((materialsByType, [materialType]) => {
475-
materialsByType[materialType] = [];
476+
materialsByType[materialType] = Object.keys(variationsRow ? variationsRow[materialType] : []);
476477
return materialsByType;
477478
}, {});
479+
const propertyColumns = Object.keys(variationsRow ? variationsRow.properties : {});
480+
const metadataColumns = Object.keys(variationsRow ? variationsRow.metadata : {});
478481

479-
return { ...materialColumns, properties: [], metadata: [] };
482+
return { ...materialColumns, properties: propertyColumns, metadata: metadataColumns };
480483
}
481484

482485
export {
@@ -490,17 +493,19 @@ export {
490493
convertUnit,
491494
materialTypes,
492495
getVariationsRowName,
496+
getVariationsColumns,
493497
createVariationsRow,
494498
copyVariationsRow,
495499
updateVariationsRow,
496500
updateColumnDefinitions,
497501
getCellDataType,
498502
getUserFacingUnit,
499503
getStandardValue,
500-
instantiateSelectedColumns,
501504
addMissingColumnsToVariations,
502505
removeObsoleteColumnsFromVariations,
503506
addMissingColumnDefinitions,
504507
removeObsoleteColumnDefinitions,
508+
getMetadataColumnGroupChild,
509+
getPropertyColumnGroupChild,
505510
REACTION_VARIATIONS_TAB_KEY
506511
};

spec/javascripts/packs/src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsUtils.spec.js

+15-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import expect from 'expect';
22
import {
33
convertUnit, createVariationsRow, copyVariationsRow, updateVariationsRow, updateColumnDefinitions,
44
removeObsoleteColumnsFromVariations, removeObsoleteColumnDefinitions, addMissingColumnDefinitions,
5-
addMissingColumnsToVariations
5+
addMissingColumnsToVariations, getVariationsColumns
66
} from 'src/apps/mydb/elements/details/reactions/variationsTab/ReactionVariationsUtils';
77
import {
88
getReactionMaterials, getMaterialColumnGroupChild, getReactionMaterialsIDs
@@ -195,4 +195,18 @@ describe('ReactionVariationsUtils', () => {
195195
);
196196
expect(getColumnGroupChild(updatedColumnDefinitions, 'startingMaterials', field).cellDataType).toBe('equivalent');
197197
});
198+
it('gets column names from variations table', async () => {
199+
const reaction = await setUpReaction();
200+
const reactionMaterialsIDs = getReactionMaterialsIDs(getReactionMaterials(reaction));
201+
const variationsColumns = getVariationsColumns(reaction.variations);
202+
203+
expect(variationsColumns.startingMaterials).toEqual(reactionMaterialsIDs.startingMaterials);
204+
expect(variationsColumns.properties).toEqual(expect.arrayContaining(['duration', 'temperature']));
205+
expect(variationsColumns.metadata).toEqual(expect.arrayContaining(['notes', 'analyses']));
206+
207+
const emptyVariationsColumns = getVariationsColumns([]);
208+
expect(emptyVariationsColumns.startingMaterials).toEqual([]);
209+
expect(emptyVariationsColumns.properties).toEqual([]);
210+
expect(emptyVariationsColumns.metadata).toEqual([]);
211+
});
198212
});

0 commit comments

Comments
 (0)