import { Typography } from "antd"; import { useIntl } from "react-intl"; import Mermaid from "../../general/Mermaid"; import { useAppSelector } from "../../../hooks"; import { getGrammar } from "../../../reducers/term-vocabulary"; import type { IWbwRelation } from "./WbwDetailRelation" import type { IWbw } from "./WbwWord" import { relationWordId } from "./WbwRelationAdd"; import store from "../../../store"; import { openPanel } from "../../../reducers/right-panel"; import { grammar } from "../../../reducers/command"; import { fullUrl } from "../../../utils"; const { Text } = Typography; const pureMeaning = (input: string | null | undefined) => { return input ? input ?.replaceAll("[", "") .replaceAll("]", "") .replaceAll("{", "") .replaceAll("}", "") : ""; }; interface IWidget { wbwData?: IWbw[]; } const RelaGraphicWidget = ({ wbwData }: IWidget) => { const terms = useAppSelector(getGrammar); const intl = useIntl(); const _____onLoad = () => { const links = document.getElementsByTagName("a"); alert(links.length + "links"); // 为每个链接添加点击事件监听器 for (let i = 0; i < links.length; i++) { (function (index) { links[index].addEventListener("click", function (e) { // 阻止链接的默认点击行为 e.preventDefault(); // 在这里执行你想在点击链接时执行的代码 console.log("链接被点击: ", this.href); alert("链接被点击" + this.href); const iPos = this.href.lastIndexOf("grammar/"); if (iPos >= 0) { const word = this.href.substring(iPos + 8); console.debug("relation graphic", word); store.dispatch(grammar(word)); store.dispatch(openPanel("grammar")); } else { window.location.href = this.href; } }); })(i); } }; const grammarStr = (input?: string | null) => { if (!input) { return ""; } const g = input.split("#"); const mType = g[0].replaceAll(".", ""); const type = intl.formatMessage({ id: `dict.fields.type.${mType}.short.label`, defaultMessage: mType, }); let strGrammar: string[] = []; if (g.length > 1 && g[1].length > 0) { strGrammar = g[1].split("$").map((item, _id) => { const mCase = item.replaceAll(".", ""); return intl.formatMessage({ id: `dict.fields.type.${mCase}.short.label`, defaultMessage: mCase, }); }); } let output = type; if (strGrammar.length > 0) { output += `|${strGrammar.join("·")}`; } return output; }; //根据relation 绘制关系图 function sent_show_rel_map(data?: IWbw[]): string { let mermaid: string = "flowchart LR\n"; const relationWords = data ?.filter((value) => value.relation) .map((item) => { if (item.relation && item.relation.value) { const json: IWbwRelation[] = JSON.parse(item.relation.value); const graphic = json.map((relation) => { const localName = terms?.find( (item) => item.word === relation.relation )?.meaning; const fromMeaning = pureMeaning(item.meaning?.value); const fromGrammar = grammarStr(item.case?.value); //查找目标意思 const toWord = data.find( (value: IWbw) => relationWordId(value) === relation.dest_id ); const toMeaning = pureMeaning(toWord?.meaning?.value); const url = fullUrl("/term/list/" + relation.relation); const toGrammar = grammarStr(toWord?.case?.value); const strFrom = `${relation.sour_id}("${relation.sour_spell}
${fromMeaning}
${fromGrammar}")`; const strRelation = `"${relation.relation}
${localName}"`; const strTo = `${relation.dest_id}("${relation.dest_spell}
${toMeaning}
${toGrammar}")`; return `${strFrom} --${strRelation}--> ${strTo}\n`; }); return graphic.join(""); } else { return ""; } }); mermaid += relationWords?.join(""); console.log("mermaid", mermaid); return mermaid; } const mermaidText = sent_show_rel_map(wbwData); return (
); }; export default RelaGraphicWidget;