SentEdit.tsx 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. translationChannels?: string[];
  33. }
  34. export interface ISentenceId {
  35. book: number;
  36. para: number;
  37. wordStart: number;
  38. wordEnd: number;
  39. }
  40. export interface IWidgetSentEditInner {
  41. id: string;
  42. book: number;
  43. para: number;
  44. wordStart: number;
  45. wordEnd: number;
  46. channels?: string[];
  47. origin?: ISentence[];
  48. translation?: ISentence[];
  49. path?: ITocPathNode[];
  50. layout?: "row" | "column";
  51. tranNum?: number;
  52. nissayaNum?: number;
  53. commNum?: number;
  54. originNum: number;
  55. simNum?: number;
  56. }
  57. export const SentEditInner = ({
  58. id,
  59. book,
  60. para,
  61. wordStart,
  62. wordEnd,
  63. channels,
  64. origin,
  65. translation,
  66. path,
  67. layout = "column",
  68. tranNum,
  69. nissayaNum,
  70. commNum,
  71. originNum,
  72. simNum,
  73. }: IWidgetSentEditInner) => {
  74. const [wbwData, setWbwData] = useState<IWbw[]>();
  75. const [magicDict, setMagicDict] = useState<string>();
  76. const [magicDictLoading, setMagicDictLoading] = useState(false);
  77. useEffect(() => {
  78. const content = origin?.find(
  79. (value) => value.channel.type === "wbw"
  80. )?.content;
  81. if (typeof content !== "undefined") {
  82. setWbwData(JSON.parse(content));
  83. }
  84. }, []);
  85. const channelsId = translation?.map((item) => item.channel.id);
  86. return (
  87. <Card
  88. bodyStyle={{ paddingBottom: 0 }}
  89. style={{ border: "solid 2px #dfdfdf", marginTop: 4, borderRadius: 5 }}
  90. size="small"
  91. >
  92. <SentContent
  93. sid={id}
  94. book={book}
  95. para={para}
  96. wordStart={wordStart}
  97. wordEnd={wordEnd}
  98. origin={origin}
  99. translation={translation}
  100. layout={layout}
  101. magicDict={magicDict}
  102. onWbwChange={(data: IWbw[]) => {
  103. setWbwData(data);
  104. }}
  105. onMagicDictDone={() => {
  106. setMagicDictLoading(false);
  107. setMagicDict(undefined);
  108. }}
  109. />
  110. <SentTab
  111. id={id}
  112. book={book}
  113. para={para}
  114. wordStart={wordStart}
  115. wordEnd={wordEnd}
  116. channelsId={channelsId}
  117. path={path}
  118. tranNum={tranNum}
  119. nissayaNum={nissayaNum}
  120. commNum={commNum}
  121. originNum={originNum}
  122. simNum={simNum}
  123. wbwData={wbwData}
  124. magicDictLoading={magicDictLoading}
  125. onMagicDict={(type: string) => {
  126. setMagicDict(type);
  127. setMagicDictLoading(true);
  128. }}
  129. />
  130. </Card>
  131. );
  132. };
  133. interface IWidgetSentEdit {
  134. props: string;
  135. }
  136. const Widget = ({ props }: IWidgetSentEdit) => {
  137. const prop = JSON.parse(atob(props)) as IWidgetSentEditInner;
  138. //console.log("sent data", prop);
  139. return <SentEditInner {...prop} />;
  140. };
  141. export default Widget;