Browse Source

fix: fix model editing now working properly (close #288)

JustSong 2 years ago
parent
commit
3c940113ab
1 changed files with 28 additions and 18 deletions
  1. 28 18
      web/src/pages/Channel/EditChannel.js

+ 28 - 18
web/src/pages/Channel/EditChannel.js

@@ -27,6 +27,7 @@ const EditChannel = () => {
   };
   const [batch, setBatch] = useState(false);
   const [inputs, setInputs] = useState(originInputs);
+  const [originModelOptions, setOriginModelOptions] = useState([]);
   const [modelOptions, setModelOptions] = useState([]);
   const [groupOptions, setGroupOptions] = useState([]);
   const [basicModels, setBasicModels] = useState([]);
@@ -44,19 +45,6 @@ const EditChannel = () => {
         data.models = [];
       } else {
         data.models = data.models.split(',');
-        setTimeout(() => {
-          let localModelOptions = [...modelOptions];
-          data.models.forEach((model) => {
-            if (!localModelOptions.find((option) => option.key === model)) {
-              localModelOptions.push({
-                key: model,
-                text: model,
-                value: model
-              });
-            }
-          });
-          setModelOptions(localModelOptions);
-        }, 1000);
       }
       if (data.group === '') {
         data.groups = [];
@@ -76,13 +64,16 @@ const EditChannel = () => {
   const fetchModels = async () => {
     try {
       let res = await API.get(`/api/channel/models`);
-      setModelOptions(res.data.data.map((model) => ({
+      let localModelOptions = res.data.data.map((model) => ({
         key: model.id,
         text: model.id,
         value: model.id
-      })));
+      }));
+      setOriginModelOptions(localModelOptions);
       setFullModels(res.data.data.map((model) => model.id));
-      setBasicModels(res.data.data.filter((model) => !model.id.startsWith('gpt-4')).map((model) => model.id));
+      setBasicModels(res.data.data.filter((model) => {
+        return model.id.startsWith('gpt-3') || model.id.startsWith('text-');
+      }).map((model) => model.id));
     } catch (error) {
       showError(error.message);
     }
@@ -101,6 +92,20 @@ const EditChannel = () => {
     }
   };
 
+  useEffect(() => {
+    let localModelOptions = [...originModelOptions];
+    inputs.models.forEach((model) => {
+      if (!localModelOptions.find((option) => option.key === model)) {
+        localModelOptions.push({
+          key: model,
+          text: model,
+          value: model
+        });
+      }
+    });
+    setModelOptions(localModelOptions);
+  }, [originModelOptions, inputs.models]);
+
   useEffect(() => {
     if (isEdit) {
       loadChannel().then();
@@ -280,15 +285,20 @@ const EditChannel = () => {
             <Input
               action={
                 <Button type={'button'} onClick={()=>{
+                  if (customModel.trim() === "") return;
+                  if (inputs.models.includes(customModel)) return;
                   let localModels = [...inputs.models];
                   localModels.push(customModel);
-                  let localModelOptions = [...modelOptions];
+                  let localModelOptions = [];
                   localModelOptions.push({
                     key: customModel,
                     text: customModel,
                     value: customModel,
                   });
-                  setModelOptions(localModelOptions);
+                  setModelOptions(modelOptions=>{
+                    return [...modelOptions, ...localModelOptions];
+                  });
+                  setCustomModel('');
                   handleInputChange(null, { name: 'models', value: localModels });
                 }}>填入</Button>
               }