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 { ISentencePrRequest, ISentencePrResponse, ISentenceRequest, ISentenceResponse, } from "../../api/Corpus"; import { ISentence } 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(), }; console.log("save url", url, body); put(url, body) .then((json) => { if (json.ok) { console.debug("sent save ok", json.data); const newData: ISentence = { id: json.data.id, content: json.data.content, html: json.data.html, book: json.data.book, para: json.data.paragraph, wordStart: json.data.word_start, wordEnd: json.data.word_end, editor: json.data.editor, studio: json.data.studio, channel: json.data.channel, forkAt: json.data.fork_at, updateAt: json.data.updated_at, }; 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(), }; 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 = { id: json.data.id, content: json.data.content, html: json.data.html, book: json.data.book, para: json.data.paragraph, wordStart: json.data.word_start, wordEnd: json.data.word_end, editor: json.data.editor, studio: json.data.studio, channel: json.data.channel, forkAt: json.data.fork_at, updateAt: json.data.updated_at, }; 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;