PrAcceptButton.tsx 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. import { useState } from "react";
  2. import { useIntl } from "react-intl";
  3. import { Button, message, Tooltip } from "antd";
  4. import { CheckOutlined } from "@ant-design/icons";
  5. import { put } from "../../../request";
  6. import type { ISentenceRequest, ISentenceResponse } from "../../../api/Corpus";
  7. import { type ISentence, toISentence } from "../SentEdit";
  8. import store from "../../../store";
  9. import { accept } from "../../../reducers/accept-pr";
  10. interface IWidget {
  11. data: ISentence;
  12. onAccept?: Function;
  13. }
  14. const PrAcceptButtonWidget = ({ data, onAccept }: IWidget) => {
  15. const intl = useIntl();
  16. const [saving, setSaving] = useState<boolean>(false);
  17. const save = () => {
  18. setSaving(true);
  19. const url = `/v2/sentence/${data.book}_${data.para}_${data.wordStart}_${data.wordEnd}_${data.channel.id}`;
  20. const prData = {
  21. book: data.book,
  22. para: data.para,
  23. wordStart: data.wordStart,
  24. wordEnd: data.wordEnd,
  25. channel: data.channel.id,
  26. content: data.content,
  27. prEditor: data.editor.id,
  28. prId: data.id,
  29. prUuid: data.uid,
  30. prEditAt: data.updateAt,
  31. token: sessionStorage.getItem(data.channel.id),
  32. };
  33. console.debug("pr accept url", url, prData);
  34. put<ISentenceRequest, ISentenceResponse>(url, prData)
  35. .then((json) => {
  36. console.log(json);
  37. setSaving(false);
  38. if (json.ok) {
  39. message.success(intl.formatMessage({ id: "flashes.success" }));
  40. const newData: ISentence = toISentence(json.data);
  41. store.dispatch(accept([newData]));
  42. if (typeof onAccept !== "undefined") {
  43. onAccept(newData);
  44. }
  45. } else {
  46. message.error(json.message);
  47. }
  48. })
  49. .catch((e) => {
  50. setSaving(false);
  51. console.error("catch", e);
  52. message.error(e.message);
  53. });
  54. };
  55. return (
  56. <Tooltip title="采纳此修改建议">
  57. <Button
  58. size="small"
  59. type="text"
  60. icon={<CheckOutlined />}
  61. loading={saving}
  62. onClick={() => save()}
  63. />
  64. </Tooltip>
  65. );
  66. };
  67. export default PrAcceptButtonWidget;