PrAcceptButton.tsx 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  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 { ISentenceRequest, ISentenceResponse } from "../../api/Corpus";
  7. import { ISentence } 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. put<ISentenceRequest, ISentenceResponse>(
  20. `/v2/sentence/${data.book}_${data.para}_${data.wordStart}_${data.wordEnd}_${data.channel.id}`,
  21. {
  22. book: data.book,
  23. para: data.para,
  24. wordStart: data.wordStart,
  25. wordEnd: data.wordEnd,
  26. channel: data.channel.id,
  27. content: data.content,
  28. prEditor: data.editor.id,
  29. prId: data.id,
  30. prEditAt: data.updateAt,
  31. }
  32. )
  33. .then((json) => {
  34. console.log(json);
  35. setSaving(false);
  36. if (json.ok) {
  37. message.success(intl.formatMessage({ id: "flashes.success" }));
  38. const newData: ISentence = {
  39. id: json.data.id,
  40. content: json.data.content,
  41. html: json.data.html,
  42. book: json.data.book,
  43. para: json.data.paragraph,
  44. wordStart: json.data.word_start,
  45. wordEnd: json.data.word_end,
  46. editor: json.data.editor,
  47. channel: json.data.channel,
  48. updateAt: json.data.updated_at,
  49. acceptor: json.data.acceptor,
  50. prEditAt: json.data.pr_edit_at,
  51. suggestionCount: json.data.suggestionCount,
  52. };
  53. store.dispatch(accept(newData));
  54. if (typeof onAccept !== "undefined") {
  55. onAccept(newData);
  56. }
  57. } else {
  58. message.error(json.message);
  59. }
  60. })
  61. .catch((e) => {
  62. setSaving(false);
  63. console.error("catch", e);
  64. message.error(e.message);
  65. });
  66. };
  67. return (
  68. <Tooltip title="采纳此修改建议">
  69. <Button
  70. size="small"
  71. type="text"
  72. icon={<CheckOutlined />}
  73. loading={saving}
  74. onClick={() => save()}
  75. />
  76. </Tooltip>
  77. );
  78. };
  79. export default PrAcceptButtonWidget;