ConceptPortal-public/rsconcept/frontend/src/components/RSInput/clickNavigation.ts

39 lines
1018 B
TypeScript
Raw Normal View History

2024-06-18 19:55:23 +03:00
import { Extension } from '@codemirror/state';
import { EditorView } from '@uiw/react-codemirror';
import { ConstituentaID, IRSForm } from '@/models/rsform';
import { findAliasAt } from '@/utils/codemirror';
const globalsNavigation = (schema: IRSForm, onOpenEdit: (cstID: ConstituentaID) => void) => {
return EditorView.domEventHandlers({
click: (event: MouseEvent, view: EditorView) => {
if (!event.ctrlKey) {
return;
}
const pos = view.posAtCoords({ x: event.clientX, y: event.clientY });
if (!pos) {
return;
}
const { alias } = findAliasAt(pos, view.state);
if (!alias) {
return;
}
const cst = schema.cstByAlias.get(alias);
if (!cst) {
return;
}
event.preventDefault();
event.stopPropagation();
onOpenEdit(cst.id);
}
});
};
export function rsNavigation(schema: IRSForm, onOpenEdit: (cstID: ConstituentaID) => void): Extension {
return [globalsNavigation(schema, onOpenEdit)];
}