"use client"; import React from "react"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { Button, Input, Textarea, Select, SelectItem, Tooltip, Listbox, ListboxItem, Divider, Selection, DropdownTrigger, Dropdown, DropdownMenu, DropdownItem, } from "@nextui-org/react"; import { Save, ArrowLeft, Folder, ChevronDown, CopyPlus, CopyMinus, } from "lucide-react"; import TestCaseSelector from "./TestCaseSelector"; import { testRunStatus } from "@/config/selection"; import { RunType } from "@/types/run"; import { CaseType } from "@/types/case"; import { FolderType } from "@/types/folder"; import { fetchRun, updateRun, createRunCase, deleteRunCase, } from "../runsControl"; import { fetchFolders } from "../../folders/foldersControl"; import { fetchCases } from "../../folders/[folderId]/cases/caseControl"; const defaultTestRun = { id: 0, name: "", configurations: 0, description: "", state: 0, projectId: 0, }; type Props = { projectId: string; runId: string; }; export default function RunEditor({ projectId, runId }: Props) { const [testRun, setTestRun] = useState(defaultTestRun); const [folders, setFolders] = useState([]); const [selectedKeys, setSelectedKeys] = useState(new Set([])); const [selectedFolder, setSelectedFolder] = useState({}); const [testcases, setTestCases] = useState([]); const [isNameInvalid, setIsNameInvalid] = useState(false); const [isUpdating, setIsUpdating] = useState(false); const router = useRouter(); useEffect(() => { async function fetchDataEffect() { try { const runData = await fetchRun(runId); setTestRun(runData); const foldersData = await fetchFolders(projectId); setFolders(foldersData); } catch (error) { console.error("Error in effect:", error.message); } } fetchDataEffect(); }, []); const fetchAndUpdateCases = async () => { try { const testCasesData = await fetchCases(selectedFolder.id); // Check if each testCase has an association with testRun // and add "isIncluded" property testCasesData.forEach((caseItr: CaseType) => { let isIncluded: boolean = false; let runStatus: number = 0; testRun.Cases.forEach((runCaseItr: CaseType) => { if (runCaseItr.id === caseItr.id) { isIncluded = true; runStatus = runCaseItr.runCases.status; } }); caseItr.isIncluded = isIncluded; caseItr.runStatus = runStatus; }); setTestCases(testCasesData); } catch (error) { console.error("Error fetching cases data:", error.message); } }; useEffect(() => { async function fetchCasesData() { if (selectedFolder && selectedFolder.id) { await fetchAndUpdateCases(); } } fetchCasesData(); }, [selectedFolder]); const onIncludeExcludeClick = async (mode: string) => { console.log(mode); if (selectedKeys === "all") { const allKeys = testcases.map((item) => item.id); console.log(allKeys); } else { console.log([...selectedKeys]); } setSelectedKeys(new Set([])); }; const handleIncludeCase = async (includeTestCaseId: number) => { await createRunCase(runId, includeTestCaseId); fetchAndUpdateCases(); }; const handleExcludeCase = async (excludeTestCaseId: number) => { await deleteRunCase(runId, excludeTestCaseId); fetchAndUpdateCases(); }; const baseClass = ""; const selectedClass = `${baseClass} bg-neutral-200 dark:bg-neutral-700`; return ( <>

{testRun.name}

Basic
{ setTestRun({ ...testRun, name: e.target.value }); }} className="mt-3" />