import { useEffect, useState } from "react"; import { useIntl } from "react-intl"; import { Button, message, Typography } from "antd"; import { SaveOutlined } from "@ant-design/icons"; import { post, put } from "../../../request"; import type { ISentencePrRequest, ISentencePrResponse, ISentenceRequest, ISentenceResponse, } from "../../../api/Corpus"; import { type ISentence, toISentence } from "../SentEdit"; import TermTextArea from "../../general/TermTextArea"; import { useAppSelector } from "../../../hooks"; import { wordList } from "../../../reducers/sent-word"; import Builder from "../Builder/Builder"; const { Text } = Typography; export const sentSave = ( data: ISentence, ok: (res: ISentence) => void, finish: () => void ) => { let url = `/v2/sentence/${data.book}_${data.para}_${data.wordStart}_${data.wordEnd}_${data.channel.id}`; url += "?mode=edit&html=true"; const body = { book: data.book, para: data.para, wordStart: data.wordStart, wordEnd: data.wordEnd, channel: data.channel.id, content: data.content, channels: data.translationChannels?.join(), token: sessionStorage.getItem(data.channel.id), }; console.log("save url", url, body); put(url, body) .then((json) => { if (json.ok) { console.debug("sent save ok", json.data); const newData: ISentence = toISentence(json.data); ok(newData); } else { message.error(json.message); } }) .finally(() => { finish(); }) .catch((e) => { console.error("catch", e); message.error(e.message); }); }; interface IWidget { data: ISentence; isPr?: boolean; isCreatePr?: boolean; onSave?: Function; onClose?: Function; onCreate?: Function; } const SentCellEditableWidget = ({ data, onSave, onClose, onCreate, isPr = false, isCreatePr = false, }: IWidget) => { const intl = useIntl(); const [value, setValue] = useState(data.content); const [saving, setSaving] = useState(false); const [termList, setTermList] = useState(); const sentWords = useAppSelector(wordList); useEffect(() => { const sentId = `${data.book}-${data.para}-${data.wordStart}-${data.wordEnd}`; setTermList(sentWords.find((value) => value.sentId === sentId)?.words); }, [data.book, data.para, data.wordEnd, data.wordStart, sentWords]); const savePr = () => { setSaving(true); if (!value) { return; } if (isCreatePr) { post(`/v2/sentpr`, { book: data.book, para: data.para, begin: data.wordStart, end: data.wordEnd, channel: data.channel.id, text: value, }) .then((json) => { setSaving(false); if (json.ok) { message.success(intl.formatMessage({ id: "flashes.success" })); if (typeof onCreate !== "undefined") { onCreate(); } } else { message.error(json.message); } }) .catch((e) => { setSaving(false); console.error("catch", e); message.error(e.message); }); } else { const url = `/v2/sentpr/${data.id}`; console.log("url", url); put(url, { text: value, }) .then((json) => { if (json.ok) { message.success(intl.formatMessage({ id: "flashes.success" })); if (typeof onSave !== "undefined") { onSave(); } } else { message.error(json.message); } }) .finally(() => { setSaving(false); }) .catch((e) => { console.error("catch", e); message.error(e.message); }); } }; const save = () => { setSaving(true); let url = `/v2/sentence/${data.book}_${data.para}_${data.wordStart}_${data.wordEnd}_${data.channel.id}`; url += "?mode=edit&html=true"; const body = { book: data.book, para: data.para, wordStart: data.wordStart, wordEnd: data.wordEnd, channel: data.channel.id, content: value, channels: data.translationChannels?.join(), token: sessionStorage.getItem(data.channel.id), }; console.debug("save url", url, body); put(url, body) .then((json) => { if (json.ok) { message.success(intl.formatMessage({ id: "flashes.success" })); if (typeof onSave !== "undefined") { const newData: ISentence = toISentence(json.data); onSave(newData); } } else { message.error(json.message); } }) .finally(() => { setSaving(false); }) .catch((e) => { console.error("catch", e); message.error(e.message); }); }; return ( { setValue(value); }} placeholder={intl.formatMessage({ id: "labels.input", })} onClose={() => { if (typeof onClose !== "undefined") { onClose(); } }} onSave={(value: string) => { setValue(value); isPr ? savePr() : save(); }} />
esc= enter= "} />
Ctrl/⌘enter=
); }; export default SentCellEditableWidget;