Просмотр исходного кода

自动查词按钮支持loading

visuddhinanda 2 лет назад
Родитель
Сommit
24c4dd7745

+ 6 - 0
dashboard/src/components/template/SentEdit.tsx

@@ -71,6 +71,7 @@ export const SentEditInner = ({
 }: IWidgetSentEditInner) => {
 }: IWidgetSentEditInner) => {
   const [wbwData, setWbwData] = useState<IWbw[]>();
   const [wbwData, setWbwData] = useState<IWbw[]>();
   const [magicDict, setMagicDict] = useState<string>();
   const [magicDict, setMagicDict] = useState<string>();
+  const [magicDictLoading, setMagicDictLoading] = useState(false);
 
 
   useEffect(() => {
   useEffect(() => {
     const content = origin?.find(
     const content = origin?.find(
@@ -96,6 +97,9 @@ export const SentEditInner = ({
         onWbwChange={(data: IWbw[]) => {
         onWbwChange={(data: IWbw[]) => {
           setWbwData(data);
           setWbwData(data);
         }}
         }}
+        onMagicDictDone={() => {
+          setMagicDictLoading(false);
+        }}
       />
       />
       <SentTab
       <SentTab
         id={id}
         id={id}
@@ -110,8 +114,10 @@ export const SentEditInner = ({
         originNum={originNum}
         originNum={originNum}
         simNum={simNum}
         simNum={simNum}
         wbwData={wbwData}
         wbwData={wbwData}
+        magicDictLoading={magicDictLoading}
         onMagicDict={(type: string) => {
         onMagicDict={(type: string) => {
           setMagicDict(type);
           setMagicDict(type);
+          setMagicDictLoading(true);
         }}
         }}
       />
       />
     </Card>
     </Card>

+ 7 - 0
dashboard/src/components/template/SentEdit/SentContent.tsx

@@ -24,6 +24,7 @@ interface IWidgetSentContent {
   layout?: TDirection;
   layout?: TDirection;
   magicDict?: string;
   magicDict?: string;
   onWbwChange?: Function;
   onWbwChange?: Function;
+  onMagicDictDone?: Function;
 }
 }
 const SentContentWidget = ({
 const SentContentWidget = ({
   sid,
   sid,
@@ -36,6 +37,7 @@ const SentContentWidget = ({
   layout = "column",
   layout = "column",
   magicDict,
   magicDict,
   onWbwChange,
   onWbwChange,
+  onMagicDictDone,
 }: IWidgetSentContent) => {
 }: IWidgetSentContent) => {
   const [layoutDirection, setLayoutDirection] = useState<TDirection>(layout);
   const [layoutDirection, setLayoutDirection] = useState<TDirection>(layout);
   const [layoutFlex, setLayoutFlex] = useState<ILayoutFlex>({
   const [layoutFlex, setLayoutFlex] = useState<ILayoutFlex>({
@@ -101,6 +103,11 @@ const SentContentWidget = ({
                     onWbwChange(data);
                     onWbwChange(data);
                   }
                   }
                 }}
                 }}
+                onMagicDictDone={() => {
+                  if (typeof onMagicDictDone !== "undefined") {
+                    onMagicDictDone();
+                  }
+                }}
               />
               />
             );
             );
           } else {
           } else {

+ 7 - 4
dashboard/src/components/template/SentEdit/SentMenu.tsx

@@ -2,15 +2,19 @@ import { Button, Dropdown } from "antd";
 import { MoreOutlined } from "@ant-design/icons";
 import { MoreOutlined } from "@ant-design/icons";
 import type { MenuProps } from "antd";
 import type { MenuProps } from "antd";
 import RelatedPara from "../../corpus/RelatedPara";
 import RelatedPara from "../../corpus/RelatedPara";
-import { useState } from "react";
 
 
 interface ISentMenu {
 interface ISentMenu {
   book?: number;
   book?: number;
   para?: number;
   para?: number;
+  loading?: boolean;
   onMagicDict?: Function;
   onMagicDict?: Function;
 }
 }
-const SentMenuWidget = ({ book, para, onMagicDict }: ISentMenu) => {
-  const [loading, setLoading] = useState(false);
+const SentMenuWidget = ({
+  book,
+  para,
+  loading = false,
+  onMagicDict,
+}: ISentMenu) => {
   const items: MenuProps["items"] = [
   const items: MenuProps["items"] = [
     {
     {
       key: "magic-dict-current",
       key: "magic-dict-current",
@@ -38,7 +42,6 @@ const SentMenuWidget = ({ book, para, onMagicDict }: ISentMenu) => {
     switch (key) {
     switch (key) {
       case "magic-dict-current":
       case "magic-dict-current":
         if (typeof onMagicDict !== "undefined") {
         if (typeof onMagicDict !== "undefined") {
-          setLoading(true);
           onMagicDict("current");
           onMagicDict("current");
         }
         }
         break;
         break;

+ 3 - 0
dashboard/src/components/template/SentEdit/SentTab.tsx

@@ -30,6 +30,7 @@ interface IWidget {
   originNum: number;
   originNum: number;
   simNum?: number;
   simNum?: number;
   wbwData?: IWbw[];
   wbwData?: IWbw[];
+  magicDictLoading?: boolean;
   onMagicDict?: Function;
   onMagicDict?: Function;
 }
 }
 const SentTabWidget = ({
 const SentTabWidget = ({
@@ -45,6 +46,7 @@ const SentTabWidget = ({
   originNum,
   originNum,
   simNum = 0,
   simNum = 0,
   wbwData,
   wbwData,
+  magicDictLoading = false,
   onMagicDict,
   onMagicDict,
 }: IWidget) => {
 }: IWidget) => {
   const intl = useIntl();
   const intl = useIntl();
@@ -73,6 +75,7 @@ const SentTabWidget = ({
             <SentMenu
             <SentMenu
               book={book}
               book={book}
               para={para}
               para={para}
+              loading={magicDictLoading}
               onMagicDict={(type: string) => {
               onMagicDict={(type: string) => {
                 if (typeof onMagicDict !== "undefined") {
                 if (typeof onMagicDict !== "undefined") {
                   onMagicDict(type);
                   onMagicDict(type);

+ 16 - 9
dashboard/src/components/template/WbwSent.tsx

@@ -62,7 +62,7 @@ interface IWidget {
   display?: "block" | "inline";
   display?: "block" | "inline";
   fields?: IWbwFields;
   fields?: IWbwFields;
   magicDict?: string;
   magicDict?: string;
-
+  onMagicDictDone?: Function;
   onChange?: Function;
   onChange?: Function;
 }
 }
 export const WbwSentCtl = ({
 export const WbwSentCtl = ({
@@ -76,6 +76,7 @@ export const WbwSentCtl = ({
   fields,
   fields,
   magicDict,
   magicDict,
   onChange,
   onChange,
+  onMagicDictDone,
 }: IWidget) => {
 }: IWidget) => {
   const [wordData, setWordData] = useState<IWbw[]>(data);
   const [wordData, setWordData] = useState<IWbw[]>(data);
   const [wbwMode, setWbwMode] = useState(display);
   const [wbwMode, setWbwMode] = useState(display);
@@ -121,14 +122,20 @@ export const WbwSentCtl = ({
       word_end: wordEnd,
       word_end: wordEnd,
       data: wordData,
       data: wordData,
       channel_id: channelId,
       channel_id: channelId,
-    }).then((json) => {
-      if (json.ok) {
-        console.log("magic dict result", json.data);
-        setWordData(json.data);
-      } else {
-        console.error(json.message);
-      }
-    });
+    })
+      .then((json) => {
+        if (json.ok) {
+          console.log("magic dict result", json.data);
+          setWordData(json.data);
+        } else {
+          console.error(json.message);
+        }
+      })
+      .finally(() => {
+        if (typeof onMagicDictDone !== "undefined") {
+          onMagicDictDone();
+        }
+      });
   }, [magicDict]);
   }, [magicDict]);
   return (
   return (
     <div style={{ display: "flex", flexWrap: "wrap" }}>
     <div style={{ display: "flex", flexWrap: "wrap" }}>