ketcher-macromolecules 3.2.0-rc.1 → 3.2.0-rc.2

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.
@@ -1,2 +1,2 @@
1
1
  import { ConfirmationDialogProps } from "../modalContainer";
2
- export declare const ConfirmationDialog: ({ confirmationText, onConfirm, isModalOpen, onClose, }: ConfirmationDialogProps) => import("@emotion/react/jsx-runtime").JSX.Element;
2
+ export declare const ConfirmationDialog: ({ title, confirmationText, onConfirm, isModalOpen, onClose, }: ConfirmationDialogProps) => import("@emotion/react/jsx-runtime").JSX.Element;
@@ -7,6 +7,7 @@ export interface MonomerConnectionOnlyProps {
7
7
  isReconnectionDialog?: boolean;
8
8
  }
9
9
  export interface ConfirmationDialogOnlyProps {
10
+ title?: string;
10
11
  confirmationText?: string;
11
12
  onConfirm?: () => void;
12
13
  }
package/dist/index.js CHANGED
@@ -9186,7 +9186,8 @@ var ConfirmationText = _styled__default["default"]("p", process.env.NODE_ENV ===
9186
9186
  });
9187
9187
 
9188
9188
  var ConfirmationDialog = function ConfirmationDialog(_ref) {
9189
- var confirmationText = _ref.confirmationText,
9189
+ var title = _ref.title,
9190
+ confirmationText = _ref.confirmationText,
9190
9191
  onConfirm = _ref.onConfirm,
9191
9192
  isModalOpen = _ref.isModalOpen,
9192
9193
  onClose = _ref.onClose;
@@ -9196,7 +9197,7 @@ var ConfirmationDialog = function ConfirmationDialog(_ref) {
9196
9197
  };
9197
9198
  return jsxRuntime.jsxs(Modal, {
9198
9199
  isOpen: isModalOpen,
9199
- title: "Confirm your action",
9200
+ title: title || 'Confirm your action',
9200
9201
  onClose: onClose,
9201
9202
  children: [jsxRuntime.jsx(Modal.Content, {
9202
9203
  children: jsxRuntime.jsx(ConfirmationText, {
@@ -10650,8 +10651,61 @@ var SequenceItemContextMenu = function SequenceItemContextMenu(_ref) {
10650
10651
  editor.events.establishHydrogenBond.dispatch(props.sequenceItemRenderer);
10651
10652
  break;
10652
10653
  case SequenceItemContextMenuNames.deleteHydrogenBond:
10653
- editor.events.deleteHydrogenBond.dispatch(props.sequenceItemRenderer);
10654
- break;
10654
+ {
10655
+ var _props$sequenceItemRe3;
10656
+ var sequenceViewModel = ketcherCore.SequenceRenderer.sequenceViewModel;
10657
+ var monomerToChain = sequenceViewModel.chainsCollection.monomerToChain;
10658
+ var antisenseChainToSelectedNodeMap = new Map();
10659
+ var selectedTwoStrandedNodes = selections !== null && selections !== void 0 && selections.length ? selections.reduce(function (acc, selectionRange) {
10660
+ return [].concat(_toConsumableArray__default["default"](acc), _toConsumableArray__default["default"](selectionRange));
10661
+ }, []).map(function (nodeSelection) {
10662
+ return nodeSelection.twoStrandedNode;
10663
+ }) : [(_props$sequenceItemRe3 = props.sequenceItemRenderer) === null || _props$sequenceItemRe3 === void 0 ? void 0 : _props$sequenceItemRe3.twoStrandedNode];
10664
+ selectedTwoStrandedNodes.forEach(function (selectedTwoStrandedNode) {
10665
+ if (selectedTwoStrandedNode.antisenseChain && selectedTwoStrandedNode.antisenseNode && !(selectedTwoStrandedNode.antisenseNode instanceof ketcherCore.EmptySequenceNode || selectedTwoStrandedNode.antisenseNode instanceof ketcherCore.BackBoneSequenceNode)) {
10666
+ if (!antisenseChainToSelectedNodeMap.has(selectedTwoStrandedNode.antisenseChain)) {
10667
+ antisenseChainToSelectedNodeMap.set(selectedTwoStrandedNode.antisenseChain, new Set());
10668
+ }
10669
+ var antisenseChainSelectedNodes = antisenseChainToSelectedNodeMap.get(selectedTwoStrandedNode.antisenseChain);
10670
+ if (!antisenseChainSelectedNodes) {
10671
+ return;
10672
+ }
10673
+ antisenseChainSelectedNodes.add(selectedTwoStrandedNode);
10674
+ }
10675
+ });
10676
+ var isGoingToDeleteAllHydrogenBondsForAnyChain = false;
10677
+ antisenseChainToSelectedNodeMap.forEach(function (selectedTwoStrandedNodes, chain) {
10678
+ var firstSelectedTwoStrandedNode = _toConsumableArray__default["default"](selectedTwoStrandedNodes.values())[0];
10679
+ var senseChain = firstSelectedTwoStrandedNode.chain;
10680
+ var selectedAntisenseNodes = new Set(_toConsumableArray__default["default"](selectedTwoStrandedNodes.values()).map(function (node) {
10681
+ return node.antisenseNode;
10682
+ }));
10683
+ var hasMoreHydrogenConnectionsThanSelected = chain.nodes.some(function (node) {
10684
+ return !selectedAntisenseNodes.has(node) && node.monomers.some(function (monomer) {
10685
+ return monomer.hydrogenBonds.some(function (hydrogenBond) {
10686
+ var anotherMonomer = hydrogenBond.getAnotherMonomer(monomer);
10687
+ var anotherChain = anotherMonomer && monomerToChain.get(anotherMonomer);
10688
+ return anotherChain === senseChain;
10689
+ });
10690
+ });
10691
+ });
10692
+ if (!hasMoreHydrogenConnectionsThanSelected) {
10693
+ isGoingToDeleteAllHydrogenBondsForAnyChain = true;
10694
+ }
10695
+ });
10696
+ if (isGoingToDeleteAllHydrogenBondsForAnyChain) {
10697
+ editor.events.openConfirmationDialog.dispatch({
10698
+ title: 'Deletion of all Hydrogen Bonds',
10699
+ confirmationText: 'Deleting all hydrogen bonds will cause the separation of two chains. Do you wish to proceed?',
10700
+ onConfirm: function onConfirm() {
10701
+ editor.events.deleteHydrogenBond.dispatch(props.sequenceItemRenderer);
10702
+ }
10703
+ });
10704
+ } else {
10705
+ editor.events.deleteHydrogenBond.dispatch(props.sequenceItemRenderer);
10706
+ }
10707
+ break;
10708
+ }
10655
10709
  }
10656
10710
  };
10657
10711
  var ketcherEditorRootElement = document.querySelector(ketcherReact.KETCHER_MACROMOLECULES_ROOT_NODE_SELECTOR);
@@ -11954,6 +12008,7 @@ var EditorEvents = function EditorEvents() {
11954
12008
  var activeTool = useAppSelector(selectEditorActiveTool);
11955
12009
  var dispatch = useAppDispatch();
11956
12010
  var presets = useAppSelector(selectAllPresets);
12011
+ var hasAtLeastOneAntisense = useAppSelector(hasAntisenseChains);
11957
12012
  var handleMonomersLibraryUpdate = React.useCallback(function () {
11958
12013
  dispatch(loadMonomerLibrary(editor === null || editor === void 0 ? void 0 : editor.monomersLibrary));
11959
12014
  }, [editor]);
@@ -12151,6 +12206,11 @@ var EditorEvents = function EditorEvents() {
12151
12206
  editor === null || editor === void 0 || editor.events.mouseLeavePolymerBond.remove(handleClosePreview);
12152
12207
  };
12153
12208
  }, [editor, activeTool, handleOpenPreview, handleClosePreview]);
12209
+ React.useEffect(function () {
12210
+ if (!hasAtLeastOneAntisense) {
12211
+ editor === null || editor === void 0 || editor.events.resetSequenceEditMode.dispatch();
12212
+ }
12213
+ }, [hasAtLeastOneAntisense]);
12154
12214
  return jsxRuntime.jsx(jsxRuntime.Fragment, {});
12155
12215
  };
12156
12216