in packages/ketcher-react/src/script/editor/tool/rgroupfragment.ts [45:151]
click(event) {
const struct = this.editor.render.ctab;
const molecule = struct.molecule;
const functionalGroups = molecule.functionalGroups;
const editor = this.editor;
const ci = editor.findItem(event, ['frags', 'rgroups']);
const ce = editor.findItem(event, ['atoms', 'bonds']);
const atomResult: Array<number> = [];
const bondResult: Array<number> = [];
const result: Array<number> = [];
if (ce && functionalGroups && ce.map === 'atoms') {
const atomId = FunctionalGroup.atomsInFunctionalGroup(
functionalGroups,
ce.id,
);
if (atomId !== null) {
atomResult.push(atomId);
}
}
if (ce && functionalGroups && ce.map === 'bonds') {
const bondId = FunctionalGroup.bondsInFunctionalGroup(
molecule,
functionalGroups,
ce.id,
);
if (bondId !== null) {
bondResult.push(bondId);
}
}
if (atomResult.length > 0) {
for (const id of atomResult) {
const fgId = FunctionalGroup.findFunctionalGroupByAtom(
functionalGroups,
id,
);
if (fgId !== null && !result.includes(fgId)) {
result.push(fgId);
}
}
if (result.length > 0) {
this.editor.event.removeFG.dispatch({ fgIds: result });
return;
}
} else if (bondResult.length > 0) {
for (const id of bondResult) {
const fgId = FunctionalGroup.findFunctionalGroupByBond(
molecule,
functionalGroups,
id,
);
if (fgId !== null && !result.includes(fgId)) {
result.push(fgId);
}
}
this.editor.event.removeFG.dispatch({ fgIds: result });
return;
}
if (!ci) {
return true;
}
this.editor.hover(null);
const label =
ci.map === 'rgroups'
? ci.id
: RGroup.findRGroupByFragment(molecule.rgroups, ci.id);
const rg = Object.assign(
{ label },
ci.map === 'frags' ? { fragId: ci.id } : molecule.rgroups.get(ci.id),
);
const res = editor.event.rgroupEdit.dispatch(rg);
Promise.resolve(res)
.then((newRg) => {
let action;
if (ci.map !== 'rgroups') {
const rgidOld = RGroup.findRGroupByFragment(
struct.molecule.rgroups,
ci.id,
);
action = fromRGroupFragment(struct, newRg.label, ci.id).mergeWith(
fromUpdateIfThen(struct, newRg.label, rgidOld),
);
} else {
action = fromRGroupAttrs(struct, ci.id, newRg);
}
editor.update(action);
})
.catch((e) => {
KetcherLogger.error('rgroupfragment.ts::RGroupFragmentTool::click', e);
}); // w/o changes
return true;
}