ketcher-macromolecules 2.21.0-rc.2 → 2.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +114 -6
- package/dist/index.js.map +1 -1
- package/dist/index.modern.js +114 -6
- package/dist/index.modern.js.map +1 -1
- package/dist/state/rna-builder/rnaBuilderSlice.d.ts +14 -2
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -497,10 +497,12 @@ var initialState = {
|
|
|
497
497
|
sequenceSelectionName: undefined,
|
|
498
498
|
isSequenceFirstsOnlyNucleotidesSelected: undefined,
|
|
499
499
|
activePresetMonomerGroup: null,
|
|
500
|
+
groupItemValidations: _defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"]({}, exports.MonomerGroups.BASES, []), exports.MonomerGroups.SUGARS, []), exports.MonomerGroups.PHOSPHATES, []),
|
|
500
501
|
presets: [],
|
|
501
502
|
activeRnaBuilderItem: null,
|
|
502
503
|
isEditMode: false,
|
|
503
504
|
uniqueNameError: '',
|
|
505
|
+
invalidPresetError: '',
|
|
504
506
|
activePresetForContextMenu: null
|
|
505
507
|
};
|
|
506
508
|
var monomerGroupToPresetGroup = _defineProperty__default["default"](_defineProperty__default["default"](_defineProperty__default["default"]({}, exports.MonomerGroups.BASES, 'base'), exports.MonomerGroups.SUGARS, 'sugar'), exports.MonomerGroups.PHOSPHATES, 'phosphate');
|
|
@@ -539,6 +541,15 @@ var rnaBuilderSlice = toolkit.createSlice({
|
|
|
539
541
|
setActiveRnaBuilderItem: function setActiveRnaBuilderItem(state, action) {
|
|
540
542
|
state.activeRnaBuilderItem = action.payload;
|
|
541
543
|
},
|
|
544
|
+
setSugarValidations: function setSugarValidations(state, action) {
|
|
545
|
+
state.groupItemValidations[exports.MonomerGroups.SUGARS] = action.payload;
|
|
546
|
+
},
|
|
547
|
+
setBaseValidations: function setBaseValidations(state, action) {
|
|
548
|
+
state.groupItemValidations[exports.MonomerGroups.BASES] = action.payload;
|
|
549
|
+
},
|
|
550
|
+
setPhosphateValidations: function setPhosphateValidations(state, action) {
|
|
551
|
+
state.groupItemValidations[exports.MonomerGroups.PHOSPHATES] = action.payload;
|
|
552
|
+
},
|
|
542
553
|
setActivePresetMonomerGroup: function setActivePresetMonomerGroup(state, action) {
|
|
543
554
|
state.activePresetMonomerGroup = action.payload;
|
|
544
555
|
},
|
|
@@ -573,6 +584,9 @@ var rnaBuilderSlice = toolkit.createSlice({
|
|
|
573
584
|
setUniqueNameError: function setUniqueNameError(state, action) {
|
|
574
585
|
state.uniqueNameError = action.payload;
|
|
575
586
|
},
|
|
587
|
+
setInvalidPresetError: function setInvalidPresetError(state, action) {
|
|
588
|
+
state.invalidPresetError = action.payload;
|
|
589
|
+
},
|
|
576
590
|
setDefaultPresets: function setDefaultPresets(state, action) {
|
|
577
591
|
var defaultNucleotide = action.payload[0];
|
|
578
592
|
if (!defaultNucleotide) {
|
|
@@ -634,6 +648,9 @@ var rnaBuilderSlice = toolkit.createSlice({
|
|
|
634
648
|
var selectActiveRnaBuilderItem = function selectActiveRnaBuilderItem(state) {
|
|
635
649
|
return state.rnaBuilder.activeRnaBuilderItem;
|
|
636
650
|
};
|
|
651
|
+
var selectGroupItemValidations = function selectGroupItemValidations(state) {
|
|
652
|
+
return state.rnaBuilder.groupItemValidations;
|
|
653
|
+
};
|
|
637
654
|
var selectActivePreset = function selectActivePreset(state) {
|
|
638
655
|
return state.rnaBuilder.activePreset;
|
|
639
656
|
};
|
|
@@ -657,7 +674,7 @@ var selectActivePresetMonomerGroup = function selectActivePresetMonomerGroup(sta
|
|
|
657
674
|
return state.rnaBuilder.activePresetMonomerGroup;
|
|
658
675
|
};
|
|
659
676
|
var selectIsPresetReadyToSave = function selectIsPresetReadyToSave(preset) {
|
|
660
|
-
return Boolean(
|
|
677
|
+
return Boolean(preset.name && preset.sugar && (preset.base || preset.phosphate));
|
|
661
678
|
};
|
|
662
679
|
var selectIsEditMode = function selectIsEditMode(state) {
|
|
663
680
|
return state.rnaBuilder.isEditMode;
|
|
@@ -682,6 +699,9 @@ var selectPresetFullName = function selectPresetFullName(preset) {
|
|
|
682
699
|
var selectUniqueNameError = function selectUniqueNameError(state) {
|
|
683
700
|
return state.rnaBuilder.uniqueNameError;
|
|
684
701
|
};
|
|
702
|
+
var selectInvalidPresetError = function selectInvalidPresetError(state) {
|
|
703
|
+
return state.rnaBuilder.invalidPresetError;
|
|
704
|
+
};
|
|
685
705
|
var selectIsActivePresetNewAndEmpty = function selectIsActivePresetNewAndEmpty(state) {
|
|
686
706
|
var activePreset = state.rnaBuilder.activePreset;
|
|
687
707
|
return activePreset && !activePreset.presetInList && !activePreset.name && !activePreset.sugar && !activePreset.base && !activePreset.phosphate;
|
|
@@ -715,12 +735,16 @@ var _rnaBuilderSlice$acti = rnaBuilderSlice.actions,
|
|
|
715
735
|
setIsSequenceFirstsOnlyNucleotidesSelected = _rnaBuilderSlice$acti.setIsSequenceFirstsOnlyNucleotidesSelected;
|
|
716
736
|
_rnaBuilderSlice$acti.setActivePresetName;
|
|
717
737
|
var setActiveRnaBuilderItem = _rnaBuilderSlice$acti.setActiveRnaBuilderItem,
|
|
738
|
+
setSugarValidations = _rnaBuilderSlice$acti.setSugarValidations,
|
|
739
|
+
setBaseValidations = _rnaBuilderSlice$acti.setBaseValidations,
|
|
740
|
+
setPhosphateValidations = _rnaBuilderSlice$acti.setPhosphateValidations,
|
|
718
741
|
setActivePresetMonomerGroup = _rnaBuilderSlice$acti.setActivePresetMonomerGroup,
|
|
719
742
|
savePreset = _rnaBuilderSlice$acti.savePreset,
|
|
720
743
|
deletePreset = _rnaBuilderSlice$acti.deletePreset,
|
|
721
744
|
createNewPreset = _rnaBuilderSlice$acti.createNewPreset,
|
|
722
745
|
setIsEditMode = _rnaBuilderSlice$acti.setIsEditMode,
|
|
723
746
|
setUniqueNameError = _rnaBuilderSlice$acti.setUniqueNameError,
|
|
747
|
+
setInvalidPresetError = _rnaBuilderSlice$acti.setInvalidPresetError,
|
|
724
748
|
setDefaultPresets = _rnaBuilderSlice$acti.setDefaultPresets,
|
|
725
749
|
setActivePresetForContextMenu = _rnaBuilderSlice$acti.setActivePresetForContextMenu,
|
|
726
750
|
togglePresetFavorites = _rnaBuilderSlice$acti.togglePresetFavorites,
|
|
@@ -1733,6 +1757,23 @@ var MonomerGroup = function MonomerGroup(_ref) {
|
|
|
1733
1757
|
var preview = useAppSelector(selectShowPreview);
|
|
1734
1758
|
var editor = useAppSelector(selectEditor);
|
|
1735
1759
|
var activeMonomerGroup = useAppSelector(selectActiveRnaBuilderItem);
|
|
1760
|
+
var activeGroupItemValidations = useAppSelector(selectGroupItemValidations);
|
|
1761
|
+
var isMonomerDisabled = function isMonomerDisabled(monomer) {
|
|
1762
|
+
var monomerDisabled = false;
|
|
1763
|
+
if (disabled) {
|
|
1764
|
+
monomerDisabled = disabled;
|
|
1765
|
+
} else {
|
|
1766
|
+
var monomerValidations = activeGroupItemValidations["".concat(monomer.props.MonomerClass, "s")];
|
|
1767
|
+
if ((monomerValidations === null || monomerValidations === void 0 ? void 0 : monomerValidations.length) > 0 && monomer.props.MonomerCaps) {
|
|
1768
|
+
for (var i = 0; i < monomerValidations.length; i++) {
|
|
1769
|
+
if (!(monomerValidations[i] in monomer.props.MonomerCaps)) {
|
|
1770
|
+
monomerDisabled = true;
|
|
1771
|
+
}
|
|
1772
|
+
}
|
|
1773
|
+
}
|
|
1774
|
+
}
|
|
1775
|
+
return monomerDisabled;
|
|
1776
|
+
};
|
|
1736
1777
|
var _useState = React.useState(null),
|
|
1737
1778
|
_useState2 = _slicedToArray__default["default"](_useState, 2),
|
|
1738
1779
|
selectedItemInGroup = _useState2[0],
|
|
@@ -1788,7 +1829,7 @@ var MonomerGroup = function MonomerGroup(_ref) {
|
|
|
1788
1829
|
children: items.map(function (monomer) {
|
|
1789
1830
|
var key = monomer.props ? "".concat(monomer.props.MonomerName + monomer.props.Name) : monomer.label;
|
|
1790
1831
|
return jsxRuntime.jsx(MonomerItem, {
|
|
1791
|
-
disabled:
|
|
1832
|
+
disabled: isMonomerDisabled(monomer),
|
|
1792
1833
|
item: monomer,
|
|
1793
1834
|
groupName: groupName,
|
|
1794
1835
|
isSelected: isMonomerSelected(monomer),
|
|
@@ -2027,8 +2068,36 @@ var RnaPresetGroup = function RnaPresetGroup(_ref) {
|
|
|
2027
2068
|
}),
|
|
2028
2069
|
show = _useContextMenu.show;
|
|
2029
2070
|
var dispatch = reactRedux.useDispatch();
|
|
2071
|
+
var validatePreset = function validatePreset(preset) {
|
|
2072
|
+
var _preset$base, _preset$sugar, _preset$phosphate;
|
|
2073
|
+
var isBaseValid = true;
|
|
2074
|
+
var isSugarValid = true;
|
|
2075
|
+
var isPhosphateValid = true;
|
|
2076
|
+
if (preset !== null && preset !== void 0 && (_preset$base = preset.base) !== null && _preset$base !== void 0 && (_preset$base = _preset$base.props) !== null && _preset$base !== void 0 && _preset$base.MonomerCaps) {
|
|
2077
|
+
isBaseValid = 'R1' in preset.base.props.MonomerCaps;
|
|
2078
|
+
}
|
|
2079
|
+
if (preset !== null && preset !== void 0 && (_preset$sugar = preset.sugar) !== null && _preset$sugar !== void 0 && (_preset$sugar = _preset$sugar.props) !== null && _preset$sugar !== void 0 && _preset$sugar.MonomerCaps) {
|
|
2080
|
+
var _preset$base2;
|
|
2081
|
+
if (isBaseValid && preset !== null && preset !== void 0 && (_preset$base2 = preset.base) !== null && _preset$base2 !== void 0 && (_preset$base2 = _preset$base2.props) !== null && _preset$base2 !== void 0 && _preset$base2.MonomerCaps) {
|
|
2082
|
+
isSugarValid = 'R3' in preset.sugar.props.MonomerCaps;
|
|
2083
|
+
}
|
|
2084
|
+
}
|
|
2085
|
+
if (preset !== null && preset !== void 0 && (_preset$phosphate = preset.phosphate) !== null && _preset$phosphate !== void 0 && (_preset$phosphate = _preset$phosphate.props) !== null && _preset$phosphate !== void 0 && _preset$phosphate.MonomerCaps) {
|
|
2086
|
+
var _preset$sugar2;
|
|
2087
|
+
isPhosphateValid = 'R1' in preset.phosphate.props.MonomerCaps;
|
|
2088
|
+
if (isSugarValid && preset !== null && preset !== void 0 && (_preset$sugar2 = preset.sugar) !== null && _preset$sugar2 !== void 0 && (_preset$sugar2 = _preset$sugar2.props) !== null && _preset$sugar2 !== void 0 && _preset$sugar2.MonomerCaps) {
|
|
2089
|
+
isSugarValid = 'R2' in preset.sugar.props.MonomerCaps;
|
|
2090
|
+
}
|
|
2091
|
+
}
|
|
2092
|
+
return isBaseValid && isSugarValid && isPhosphateValid;
|
|
2093
|
+
};
|
|
2030
2094
|
var selectPreset = function selectPreset(preset) {
|
|
2031
2095
|
return function () {
|
|
2096
|
+
var isPresetValid = validatePreset(preset);
|
|
2097
|
+
if (!isPresetValid && preset.name) {
|
|
2098
|
+
dispatch(setInvalidPresetError(preset.name));
|
|
2099
|
+
return;
|
|
2100
|
+
}
|
|
2032
2101
|
dispatch(setActivePreset(preset));
|
|
2033
2102
|
editor.events.selectPreset.dispatch(preset);
|
|
2034
2103
|
if (preset === (activePreset === null || activePreset === void 0 ? void 0 : activePreset.presetInList)) return;
|
|
@@ -2815,11 +2884,39 @@ var RnaEditorExpanded = function RnaEditorExpanded(_ref) {
|
|
|
2815
2884
|
var selectGroup = function selectGroup(selectedGroup) {
|
|
2816
2885
|
return function () {
|
|
2817
2886
|
var selectedRNAPartMonomer = selectCurrentMonomerGroup(newPreset, selectedGroup);
|
|
2887
|
+
var sugarValidaions = [];
|
|
2888
|
+
var phosphateValidaions = [];
|
|
2889
|
+
var baseValidaions = [];
|
|
2818
2890
|
if (selectedRNAPartMonomer) {
|
|
2819
2891
|
editor.events.selectMonomer.dispatch(selectedRNAPartMonomer);
|
|
2820
2892
|
}
|
|
2893
|
+
if (selectedGroup === exports.MonomerGroups.SUGARS) {
|
|
2894
|
+
if (newPreset.phosphate) {
|
|
2895
|
+
sugarValidaions.push('R2');
|
|
2896
|
+
}
|
|
2897
|
+
if (newPreset.base) {
|
|
2898
|
+
sugarValidaions.push('R3');
|
|
2899
|
+
}
|
|
2900
|
+
}
|
|
2901
|
+
if (selectedGroup === exports.MonomerGroups.BASES) {
|
|
2902
|
+
var _newPreset$sugar;
|
|
2903
|
+
baseValidaions.push('R1');
|
|
2904
|
+
if (newPreset !== null && newPreset !== void 0 && (_newPreset$sugar = newPreset.sugar) !== null && _newPreset$sugar !== void 0 && (_newPreset$sugar = _newPreset$sugar.props) !== null && _newPreset$sugar !== void 0 && _newPreset$sugar.MonomerCaps && !('R3' in newPreset.sugar.props.MonomerCaps)) {
|
|
2905
|
+
baseValidaions.push('DISABLED');
|
|
2906
|
+
}
|
|
2907
|
+
}
|
|
2908
|
+
if (selectedGroup === exports.MonomerGroups.PHOSPHATES) {
|
|
2909
|
+
var _newPreset$sugar2;
|
|
2910
|
+
phosphateValidaions.push('R1');
|
|
2911
|
+
if (newPreset !== null && newPreset !== void 0 && (_newPreset$sugar2 = newPreset.sugar) !== null && _newPreset$sugar2 !== void 0 && (_newPreset$sugar2 = _newPreset$sugar2.props) !== null && _newPreset$sugar2 !== void 0 && _newPreset$sugar2.MonomerCaps && !('R2' in newPreset.sugar.props.MonomerCaps)) {
|
|
2912
|
+
phosphateValidaions.push('DISABLED');
|
|
2913
|
+
}
|
|
2914
|
+
}
|
|
2821
2915
|
scrollToActiveItemInLibrary(selectedGroup);
|
|
2822
2916
|
dispatch(setActiveRnaBuilderItem(selectedGroup));
|
|
2917
|
+
dispatch(setSugarValidations(sugarValidaions));
|
|
2918
|
+
dispatch(setPhosphateValidations(phosphateValidaions));
|
|
2919
|
+
dispatch(setBaseValidations(baseValidaions));
|
|
2823
2920
|
};
|
|
2824
2921
|
};
|
|
2825
2922
|
var onChangeName = function onChangeName(event) {
|
|
@@ -3287,8 +3384,14 @@ var RnaBuilder = function RnaBuilder(_ref) {
|
|
|
3287
3384
|
editPreset = _ref.editPreset;
|
|
3288
3385
|
var dispatch = useAppDispatch();
|
|
3289
3386
|
var uniqueNameError = useAppSelector(selectUniqueNameError);
|
|
3387
|
+
var invalidPresetError = useAppSelector(selectInvalidPresetError);
|
|
3290
3388
|
var closeErrorModal = function closeErrorModal() {
|
|
3291
|
-
|
|
3389
|
+
if (uniqueNameError.length > 0) {
|
|
3390
|
+
dispatch(setUniqueNameError(''));
|
|
3391
|
+
}
|
|
3392
|
+
if (invalidPresetError.length > 0) {
|
|
3393
|
+
dispatch(setInvalidPresetError(''));
|
|
3394
|
+
}
|
|
3292
3395
|
};
|
|
3293
3396
|
return jsxRuntime.jsxs(RnaBuilderContainer, {
|
|
3294
3397
|
children: [jsxRuntime.jsx(RnaEditor, {
|
|
@@ -3298,11 +3401,16 @@ var RnaBuilder = function RnaBuilder(_ref) {
|
|
|
3298
3401
|
duplicatePreset: duplicatePreset,
|
|
3299
3402
|
editPreset: editPreset
|
|
3300
3403
|
}), jsxRuntime.jsxs(Modal, {
|
|
3301
|
-
isOpen: !!uniqueNameError,
|
|
3404
|
+
isOpen: !!uniqueNameError || !!invalidPresetError,
|
|
3302
3405
|
title: "Error Message",
|
|
3303
3406
|
onClose: closeErrorModal,
|
|
3304
|
-
children: [jsxRuntime.
|
|
3305
|
-
children:
|
|
3407
|
+
children: [jsxRuntime.jsx(Modal.Content, {
|
|
3408
|
+
children: jsxRuntime.jsxs("div", {
|
|
3409
|
+
style: {
|
|
3410
|
+
padding: '12px'
|
|
3411
|
+
},
|
|
3412
|
+
children: [uniqueNameError && "Preset with name \"".concat(uniqueNameError, "\" already exists. Please choose another name."), invalidPresetError && "Preset with name \"".concat(invalidPresetError, "\" can't be used. Because it is impossible to establish bonds between monomers. Edit it's structure or choose another one.")]
|
|
3413
|
+
})
|
|
3306
3414
|
}), jsxRuntime.jsx(Modal.Footer, {
|
|
3307
3415
|
children: jsxRuntime.jsx(StyledButton$1, {
|
|
3308
3416
|
onClick: closeErrorModal,
|