ketcher-react 3.2.0-rc.1 → 3.2.0-rc.3

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.
@@ -23,7 +23,7 @@ import { merge, debounce, flatten, get as get$2 } from 'lodash';
23
23
  import { combineReducers, applyMiddleware, createStore, compose as compose$1 } from 'redux';
24
24
  import { createSelector } from 'reselect';
25
25
  import thunkMiddleware from 'redux-thunk';
26
- import { KetcherLogger, MonomerGroups as MonomerGroups$1, KetMonomerClass, ChemicalMimeType as ChemicalMimeType$1, KetSerializer, CoreEditor, generateMenuShortcuts, hotkeysConfiguration, ToolName, modesMap, isAmbiguousMonomerLibraryItem, MONOMER_CONST, macromoleculesFilesInputFormats, EditorHistory, SequenceMode, SnakeMode, FlexMode, ModeTypes, ketcherProvider, KetcherAsyncEvents, isTwoStrandedNodeRestrictedForHydrogenBondCreation, UsageInMacromolecule, ZoomTool, SequenceType, HydrogenBond, BackBoneSequenceNode, AmbiguousMonomer, Nucleotide, Nucleoside, RNABase, getSugarFromRnaBase, Sugar, getRnaBaseFromSugar, setAmbiguousMonomerTemplatePrefix, setMonomerTemplatePrefix, monomerFactory, Entities, isRnaBaseOrAmbiguousRnaBase, MonomerToAtomBond, DEFAULT_LAYOUT_MODE, HAS_CONTENT_LAYOUT_MODE, Vec2, Coordinates, AmbiguousMonomerRenderer, Phosphate, KetAmbiguousMonomerTemplateSubType, getSvgFromDrawnStructures, isClipboardAPIAvailable, legacyCopy } from 'ketcher-core';
26
+ import { KetcherLogger, MonomerGroups as MonomerGroups$1, KetMonomerClass, ChemicalMimeType as ChemicalMimeType$1, KetSerializer, CoreEditor, generateMenuShortcuts, hotkeysConfiguration, ToolName, modesMap, isAmbiguousMonomerLibraryItem, MONOMER_CONST, macromoleculesFilesInputFormats, EditorHistory, SequenceMode, SnakeMode, FlexMode, ModeTypes, ketcherProvider, KetcherAsyncEvents, isTwoStrandedNodeRestrictedForHydrogenBondCreation, UsageInMacromolecule, ZoomTool, SequenceType, HydrogenBond, BackBoneSequenceNode, AmbiguousMonomer, Nucleotide, Nucleoside, RNABase, getSugarFromRnaBase, Sugar, getRnaBaseFromSugar, setAmbiguousMonomerTemplatePrefix, setMonomerTemplatePrefix, monomerFactory, Entities, isRnaBaseOrAmbiguousRnaBase, SequenceRenderer, EmptySequenceNode, MonomerToAtomBond, DEFAULT_LAYOUT_MODE, HAS_CONTENT_LAYOUT_MODE, Vec2, Coordinates, AmbiguousMonomerRenderer, Phosphate, KetAmbiguousMonomerTemplateSubType, getSvgFromDrawnStructures, isClipboardAPIAvailable, legacyCopy } from 'ketcher-core';
27
27
  import _regeneratorRuntime from '@babel/runtime/regenerator';
28
28
  import _extends from '@babel/runtime/helpers/esm/extends';
29
29
  import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
@@ -12306,7 +12306,8 @@ var ConfirmationText = _styled("p", process.env.NODE_ENV === "production" ? {
12306
12306
  });
12307
12307
 
12308
12308
  var ConfirmationDialog = function ConfirmationDialog(_ref) {
12309
- var confirmationText = _ref.confirmationText,
12309
+ var title = _ref.title,
12310
+ confirmationText = _ref.confirmationText,
12310
12311
  onConfirm = _ref.onConfirm,
12311
12312
  isModalOpen = _ref.isModalOpen,
12312
12313
  onClose = _ref.onClose;
@@ -12316,7 +12317,7 @@ var ConfirmationDialog = function ConfirmationDialog(_ref) {
12316
12317
  };
12317
12318
  return jsxs(Modal, {
12318
12319
  isOpen: isModalOpen,
12319
- title: "Confirm your action",
12320
+ title: title || 'Confirm your action',
12320
12321
  onClose: onClose,
12321
12322
  children: [jsx(Modal.Content, {
12322
12323
  children: jsx(ConfirmationText, {
@@ -13770,8 +13771,61 @@ var SequenceItemContextMenu = function SequenceItemContextMenu(_ref) {
13770
13771
  editor.events.establishHydrogenBond.dispatch(props.sequenceItemRenderer);
13771
13772
  break;
13772
13773
  case SequenceItemContextMenuNames.deleteHydrogenBond:
13773
- editor.events.deleteHydrogenBond.dispatch(props.sequenceItemRenderer);
13774
- break;
13774
+ {
13775
+ var _props$sequenceItemRe3;
13776
+ var sequenceViewModel = SequenceRenderer.sequenceViewModel;
13777
+ var monomerToChain = sequenceViewModel.chainsCollection.monomerToChain;
13778
+ var antisenseChainToSelectedNodeMap = new Map();
13779
+ var selectedTwoStrandedNodes = selections !== null && selections !== void 0 && selections.length ? selections.reduce(function (acc, selectionRange) {
13780
+ return [].concat(_toConsumableArray(acc), _toConsumableArray(selectionRange));
13781
+ }, []).map(function (nodeSelection) {
13782
+ return nodeSelection.twoStrandedNode;
13783
+ }) : [(_props$sequenceItemRe3 = props.sequenceItemRenderer) === null || _props$sequenceItemRe3 === void 0 ? void 0 : _props$sequenceItemRe3.twoStrandedNode];
13784
+ selectedTwoStrandedNodes.forEach(function (selectedTwoStrandedNode) {
13785
+ if (selectedTwoStrandedNode.antisenseChain && selectedTwoStrandedNode.antisenseNode && !(selectedTwoStrandedNode.antisenseNode instanceof EmptySequenceNode || selectedTwoStrandedNode.antisenseNode instanceof BackBoneSequenceNode)) {
13786
+ if (!antisenseChainToSelectedNodeMap.has(selectedTwoStrandedNode.antisenseChain)) {
13787
+ antisenseChainToSelectedNodeMap.set(selectedTwoStrandedNode.antisenseChain, new Set());
13788
+ }
13789
+ var antisenseChainSelectedNodes = antisenseChainToSelectedNodeMap.get(selectedTwoStrandedNode.antisenseChain);
13790
+ if (!antisenseChainSelectedNodes) {
13791
+ return;
13792
+ }
13793
+ antisenseChainSelectedNodes.add(selectedTwoStrandedNode);
13794
+ }
13795
+ });
13796
+ var isGoingToDeleteAllHydrogenBondsForAnyChain = false;
13797
+ antisenseChainToSelectedNodeMap.forEach(function (selectedTwoStrandedNodes, chain) {
13798
+ var firstSelectedTwoStrandedNode = _toConsumableArray(selectedTwoStrandedNodes.values())[0];
13799
+ var senseChain = firstSelectedTwoStrandedNode.chain;
13800
+ var selectedAntisenseNodes = new Set(_toConsumableArray(selectedTwoStrandedNodes.values()).map(function (node) {
13801
+ return node.antisenseNode;
13802
+ }));
13803
+ var hasMoreHydrogenConnectionsThanSelected = chain.nodes.some(function (node) {
13804
+ return !selectedAntisenseNodes.has(node) && node.monomers.some(function (monomer) {
13805
+ return monomer.hydrogenBonds.some(function (hydrogenBond) {
13806
+ var anotherMonomer = hydrogenBond.getAnotherMonomer(monomer);
13807
+ var anotherChain = anotherMonomer && monomerToChain.get(anotherMonomer);
13808
+ return anotherChain === senseChain;
13809
+ });
13810
+ });
13811
+ });
13812
+ if (!hasMoreHydrogenConnectionsThanSelected) {
13813
+ isGoingToDeleteAllHydrogenBondsForAnyChain = true;
13814
+ }
13815
+ });
13816
+ if (isGoingToDeleteAllHydrogenBondsForAnyChain) {
13817
+ editor.events.openConfirmationDialog.dispatch({
13818
+ title: 'Deletion of all Hydrogen Bonds',
13819
+ confirmationText: 'Deleting all hydrogen bonds will cause the separation of two chains. Do you wish to proceed?',
13820
+ onConfirm: function onConfirm() {
13821
+ editor.events.deleteHydrogenBond.dispatch(props.sequenceItemRenderer);
13822
+ }
13823
+ });
13824
+ } else {
13825
+ editor.events.deleteHydrogenBond.dispatch(props.sequenceItemRenderer);
13826
+ }
13827
+ break;
13828
+ }
13775
13829
  }
13776
13830
  };
13777
13831
  var ketcherEditorRootElement = document.querySelector(KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR);
@@ -15074,6 +15128,7 @@ var EditorEvents = function EditorEvents() {
15074
15128
  var activeTool = useAppSelector(selectEditorActiveTool);
15075
15129
  var dispatch = useAppDispatch();
15076
15130
  var presets = useAppSelector(selectAllPresets);
15131
+ var hasAtLeastOneAntisense = useAppSelector(hasAntisenseChains);
15077
15132
  var handleMonomersLibraryUpdate = useCallback(function () {
15078
15133
  dispatch(loadMonomerLibrary(editor === null || editor === void 0 ? void 0 : editor.monomersLibrary));
15079
15134
  }, [editor]);
@@ -15271,6 +15326,11 @@ var EditorEvents = function EditorEvents() {
15271
15326
  editor === null || editor === void 0 || editor.events.mouseLeavePolymerBond.remove(handleClosePreview);
15272
15327
  };
15273
15328
  }, [editor, activeTool, handleOpenPreview, handleClosePreview]);
15329
+ useEffect(function () {
15330
+ if (!hasAtLeastOneAntisense) {
15331
+ editor === null || editor === void 0 || editor.events.resetSequenceEditMode.dispatch();
15332
+ }
15333
+ }, [hasAtLeastOneAntisense]);
15274
15334
  return jsx(Fragment, {});
15275
15335
  };
15276
15336
 
@@ -15672,4 +15732,4 @@ function Editor(_ref2) {
15672
15732
  }
15673
15733
 
15674
15734
  export { EditorContainer as default };
15675
- //# sourceMappingURL=index.modern-17b0bd64.js.map
15735
+ //# sourceMappingURL=index.modern-7550b98e.js.map