From 64bee1c4a6b69dced9cac67feb0c241a1752874c Mon Sep 17 00:00:00 2001
From: deep1401 <gandhi0869@gmail.com>
Date: Mon, 24 Feb 2025 12:15:51 -0800
Subject: [PATCH] Elevate selectedDocs to parent component to maintain state
 and avoid and reloading

---
 .../components/Experiment/Generate/GenerateModal.tsx |  9 ++++++++-
 .../components/Experiment/Rag/PickADocumentMenu.tsx  | 12 ++++++------
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/src/renderer/components/Experiment/Generate/GenerateModal.tsx b/src/renderer/components/Experiment/Generate/GenerateModal.tsx
index 126880a4..92a9947c 100644
--- a/src/renderer/components/Experiment/Generate/GenerateModal.tsx
+++ b/src/renderer/components/Experiment/Generate/GenerateModal.tsx
@@ -71,6 +71,7 @@ export default function GenerateModal({
   const [hasDatasetKey, setHasDatasetKey] = useState(false);
   const [hasDocumentsKey, setHasDocumentsKey] = useState(false);
   const [hasContextKey, setHasContextKey] = useState(false);
+  const [selectedDocs, setSelectedDocs] = useState([]);
   const [nameInput, setNameInput] = useState('');
   const [currentTab, setCurrentTab] = useState(0);
   const [contextInput, setContextInput] = useState('');
@@ -185,6 +186,8 @@ export default function GenerateModal({
                 if (!nameInput && evalConfig?.name.length > 0) {
                   setNameInput(evalConfig.name);
                 }
+
+                config.docs? setSelectedDocs(config.docs) : [];
               }
               // if (nameInput !== '' && evalConfig?.name) {
               //   setNameInput(evalConfig?.name);
@@ -204,6 +207,7 @@ export default function GenerateModal({
           try {
             parsedData = JSON.parse(data); //Parsing data for easy access to parameters}
             // Set config as a JSON object with keys of the parameters and values of the default values
+            setSelectedDocs([]);
             let tempconfig: { [key: string]: any } = {};
             if (parsedData && parsedData.parameters) {
               tempconfig = Object.fromEntries(
@@ -328,7 +332,9 @@ export default function GenerateModal({
           <PickADocumentMenu
             experimentInfo={experimentInfo}
             showFoldersOnly={false}
-            defaultValue={config.docs? config.docs : []}
+            selected={selectedDocs}
+            onChange={setSelectedDocs}
+            // defaultValue={config.docs? config.docs : []}
             name="docs"
           />
           <FormHelperText>Select documents to upload</FormHelperText>
@@ -337,6 +343,7 @@ export default function GenerateModal({
     );
   }
 
+
   function ContextTab({ contextInput, setContextInput }) {
     return (
       <Stack spacing={2}>
diff --git a/src/renderer/components/Experiment/Rag/PickADocumentMenu.tsx b/src/renderer/components/Experiment/Rag/PickADocumentMenu.tsx
index 7b88e1f4..f761687a 100644
--- a/src/renderer/components/Experiment/Rag/PickADocumentMenu.tsx
+++ b/src/renderer/components/Experiment/Rag/PickADocumentMenu.tsx
@@ -7,7 +7,8 @@ const fetcher = (url) => fetch(url).then((res) => res.json());
 export default function PickADocumentMenu({
   name,
   experimentInfo,
-  defaultValue = [],
+  selected,
+  onChange,
   showFoldersOnly = false,
 }) {
   const {
@@ -16,16 +17,15 @@ export default function PickADocumentMenu({
     mutate,
   } = useSWR(chatAPI.Endpoints.Documents.List(experimentInfo?.id, ''), fetcher);
 
-  const [selected, setSelected] = useState([]);
 
-  useEffect(() => {
-    setSelected(defaultValue || []);
-  }, [defaultValue]);
+  // useEffect(() => {
+  //   setSelected(defaultValue || []);
+  // }, [defaultValue]);
 
 
   function handleChange(event, newValue) {
     console.log(newValue);
-    setSelected(newValue);
+    onChange(newValue);
   }
 
   return (
-- 
GitLab