import { useEffect, useRef, useState } from "react"; import { Button, Dropdown, MenuProps, Typography } from "antd"; import { LoadingOutlined, CloseOutlined } from "@ant-design/icons"; import { useAppSelector } from "../../hooks"; import { onChangeKey, onChangeValue, settingInfo, } from "../../reducers/setting"; import { GetUserSetting } from "../auth/setting/default"; import { TCodeConvertor } from "./utilities"; import { ISentence, IWidgetSentEditInner, SentEditInner } from "./SentEdit"; import MdView from "./MdView"; import store from "../../store"; import { push } from "../../reducers/sentence"; import "./style.css"; import InteractiveButton from "./SentEdit/InteractiveButton"; import { prOpen } from "./SentEdit/SuggestionButton"; import { openDiscussion } from "../discussion/DiscussionButton"; import { IEditableSentence } from "../api/Corpus"; import { get } from "../../request"; const { Text } = Typography; const items: MenuProps["items"] = [ { label: "编辑", key: "edit", }, { label: "讨论", key: "discussion", }, { label: "修改建议", key: "pr", }, { label: "标签", key: "tag", }, ]; interface IWidgetSentReadFrame { origin?: ISentence[]; translation?: ISentence[]; layout?: "row" | "column"; book?: number; para?: number; wordStart?: number; wordEnd?: number; sentId?: string; error?: string; } const SentReadFrame = ({ origin, translation, layout = "column", book, para, wordStart, wordEnd, sentId, error, }: IWidgetSentReadFrame) => { const [paliCode1, setPaliCode1] = useState("roman"); const [active, setActive] = useState(false); const [loading, setLoading] = useState(false); const [sentData, setSentData] = useState(); const [showEdit, SetShowEdit] = useState(false); const [translationData, setTranslationData] = useState< ISentence[] | undefined >(translation); const key = useAppSelector(onChangeKey); const value = useAppSelector(onChangeValue); const settings = useAppSelector(settingInfo); const boxOrg = useRef(null); const boxSent = useRef(null); useEffect(() => { store.dispatch( push({ id: `${book}-${para}-${wordStart}-${wordEnd}`, origin: origin?.map((item) => item.html), translation: translation?.map((item) => item.html), }) ); }, [book, origin, para, translation, wordEnd, wordStart]); useEffect(() => { const displayOriginal = GetUserSetting( "setting.display.original", settings ); if (typeof displayOriginal === "boolean") { if (boxOrg.current) { if ( displayOriginal === false && translation && translation.length > 0 ) { boxOrg.current.style.display = "none"; } else { boxOrg.current.style.display = "block"; } } } const layoutDirection = GetUserSetting( "setting.layout.direction", settings ); if (typeof layoutDirection === "string") { if (boxSent.current) { boxSent.current.style.flexDirection = layoutDirection; } } const _paliCode1 = GetUserSetting("setting.pali.script.primary", settings); if (typeof _paliCode1 !== "undefined") { setPaliCode1(_paliCode1.toString() as TCodeConvertor); } }, [key, value, settings]); return ( {error} `, }} /> {origin?.map((item, id) => { return ( ); })} {translationData?.map((item, id) => { return ( {loading ? : <>} { console.log("click ", e); switch (e.key) { case "edit": const url = `/v2/editable-sentence/${item.id}`; console.info("api request", url); setLoading(true); get(url) .then((json) => { console.info("api response", json); if (json.ok) { setSentData(json.data); SetShowEdit(true); } }) .finally(() => setLoading(false)); break; case "discussion": if (item.id) { openDiscussion(item.id, false); } break; case "pr": prOpen(item); break; default: break; } }, }} trigger={["contextMenu"]} >
{sentData ? ( { console.log("onTranslationChange", data); if (translationData) { let newData = [...translationData]; newData.forEach( ( value: ISentence, index: number, array: ISentence[] ) => { if (index === id) { array[index] = data; } } ); setTranslationData(newData); } }} /> ) : ( "无数据" )}
setActive(true)} onMouseLeave={() => setActive(false)} />
); })}
); }; interface IWidget { props: string; } const Widget = ({ props }: IWidget) => { const prop = JSON.parse(atob(props)) as IWidgetSentReadFrame; return ( <> ); }; export default Widget;