SentEdit.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. import { Card } from "antd";
  2. import { useEffect, useState } from "react";
  3. import { IStudio } from "../auth/StudioName";
  4. import type { IUser } from "../auth/User";
  5. import { IChannel } from "../channel/Channel";
  6. import { TContentType } from "../discussion/DiscussionCreate";
  7. import { ITocPathNode } from "../corpus/TocPath";
  8. import SentContent from "./SentEdit/SentContent";
  9. import SentTab from "./SentEdit/SentTab";
  10. import { IWbw } from "./Wbw/WbwWord";
  11. export interface ISuggestionCount {
  12. suggestion?: number;
  13. discussion?: number;
  14. }
  15. export interface ISentence {
  16. id?: string;
  17. content: string;
  18. contentType?: TContentType;
  19. html: string;
  20. book: number;
  21. para: number;
  22. wordStart: number;
  23. wordEnd: number;
  24. editor: IUser;
  25. acceptor?: IUser;
  26. prEditAt?: string;
  27. channel: IChannel;
  28. studio?: IStudio;
  29. updateAt: string;
  30. suggestionCount?: ISuggestionCount;
  31. openInEditMode?: boolean;
  32. }
  33. export interface ISentenceId {
  34. book: number;
  35. para: number;
  36. wordStart: number;
  37. wordEnd: number;
  38. }
  39. export interface IWidgetSentEditInner {
  40. id: string;
  41. book: number;
  42. para: number;
  43. wordStart: number;
  44. wordEnd: number;
  45. channels?: string[];
  46. origin?: ISentence[];
  47. translation?: ISentence[];
  48. path?: ITocPathNode[];
  49. layout?: "row" | "column";
  50. tranNum?: number;
  51. nissayaNum?: number;
  52. commNum?: number;
  53. originNum: number;
  54. simNum?: number;
  55. }
  56. export const SentEditInner = ({
  57. id,
  58. book,
  59. para,
  60. wordStart,
  61. wordEnd,
  62. channels,
  63. origin,
  64. translation,
  65. path,
  66. layout = "column",
  67. tranNum,
  68. nissayaNum,
  69. commNum,
  70. originNum,
  71. simNum,
  72. }: IWidgetSentEditInner) => {
  73. const [wbwData, setWbwData] = useState<IWbw[]>();
  74. const [magicDict, setMagicDict] = useState<string>();
  75. const [magicDictLoading, setMagicDictLoading] = useState(false);
  76. useEffect(() => {
  77. const content = origin?.find(
  78. (value) => value.channel.type === "wbw"
  79. )?.content;
  80. if (typeof content !== "undefined") {
  81. setWbwData(JSON.parse(content));
  82. }
  83. }, []);
  84. const channelsId = translation?.map((item) => item.channel.id);
  85. return (
  86. <Card
  87. bodyStyle={{ paddingBottom: 0 }}
  88. style={{ border: "solid 2px #dfdfdf", marginTop: 4, borderRadius: 5 }}
  89. size="small"
  90. >
  91. <SentContent
  92. sid={id}
  93. book={book}
  94. para={para}
  95. wordStart={wordStart}
  96. wordEnd={wordEnd}
  97. origin={origin}
  98. translation={translation}
  99. layout={layout}
  100. magicDict={magicDict}
  101. onWbwChange={(data: IWbw[]) => {
  102. setWbwData(data);
  103. }}
  104. onMagicDictDone={() => {
  105. setMagicDictLoading(false);
  106. setMagicDict(undefined);
  107. }}
  108. />
  109. <SentTab
  110. id={id}
  111. book={book}
  112. para={para}
  113. wordStart={wordStart}
  114. wordEnd={wordEnd}
  115. channelsId={channelsId}
  116. path={path}
  117. tranNum={tranNum}
  118. nissayaNum={nissayaNum}
  119. commNum={commNum}
  120. originNum={originNum}
  121. simNum={simNum}
  122. wbwData={wbwData}
  123. magicDictLoading={magicDictLoading}
  124. onMagicDict={(type: string) => {
  125. setMagicDict(type);
  126. setMagicDictLoading(true);
  127. }}
  128. />
  129. </Card>
  130. );
  131. };
  132. interface IWidgetSentEdit {
  133. props: string;
  134. }
  135. const Widget = ({ props }: IWidgetSentEdit) => {
  136. const prop = JSON.parse(atob(props)) as IWidgetSentEditInner;
  137. //console.log("sent data", prop);
  138. return <SentEditInner {...prop} />;
  139. };
  140. export default Widget;