Handle correctly setting file filters as array when API call fails

- Only set addedFiles to selectedFiles when selectedFiles is an array
- Only set seleectedFiles, addedFiles to API response json when
  response succeeded. Previously we set it to response json
  on errors as well. This made the variables into json objects instead
  of arrays on API call failure
- Check if selectedFiles, addedFiles are arrays before running
  operations on them. Previously the addedFiles.includes was where the
  code would fail
This commit is contained in:
Debanjum Singh Solanky
2024-10-17 01:27:28 -07:00
parent 7ebfc24a96
commit 42acc324dc
2 changed files with 19 additions and 14 deletions

View File

@@ -175,7 +175,11 @@ export function modifyFileFilterForConversation(
},
body: JSON.stringify(body),
})
.then((response) => response.json())
.then((res) => {
if (!res.ok)
throw new Error(`Failed to call API at ${addUrl} with error ${res.statusText}`);
return res.json();
})
.then((data) => {
setAddedFiles(data);
})

View File

@@ -98,7 +98,11 @@ import { KhojLogoType } from "@/app/components/logo/khojLogo";
import NavMenu from "@/app/components/navMenu/navMenu";
// Define a fetcher function
const fetcher = (url: string) => fetch(url).then((res) => res.json());
const fetcher = (url: string) =>
fetch(url).then((res) => {
if (!res.ok) throw new Error(`Failed to call API at ${url} with error ${res.statusText}`);
return res.json();
});
interface GroupedChatHistory {
[key: string]: ChatHistory[];
@@ -181,20 +185,15 @@ function FilesMenu(props: FilesMenuProps) {
useEffect(() => {
if (!files) return;
const uniqueFiles = Array.from(new Set(files));
let sortedUniqueFiles = Array.from(new Set(files)).sort();
// First, sort lexically
uniqueFiles.sort();
let sortedFiles = uniqueFiles;
if (addedFiles) {
sortedFiles = addedFiles.concat(
sortedFiles.filter((filename: string) => !addedFiles.includes(filename)),
if (Array.isArray(addedFiles)) {
sortedUniqueFiles = addedFiles.concat(
sortedUniqueFiles.filter((filename: string) => !addedFiles.includes(filename)),
);
}
setUnfilteredFiles(sortedFiles);
setUnfilteredFiles(sortedUniqueFiles);
}, [files, addedFiles]);
useEffect(() => {
@@ -204,8 +203,10 @@ function FilesMenu(props: FilesMenuProps) {
}, [props.uploadedFiles]);
useEffect(() => {
if (selectedFiles) {
if (Array.isArray(selectedFiles)) {
setAddedFiles(selectedFiles);
} else {
setAddedFiles([]);
}
}, [selectedFiles]);
@@ -269,7 +270,7 @@ function FilesMenu(props: FilesMenuProps) {
</CommandItem>
)}
{unfilteredFiles.map((filename: string) =>
addedFiles && addedFiles.includes(filename) ? (
Array.isArray(addedFiles) && addedFiles.includes(filename) ? (
<CommandItem
key={filename}
value={filename}