From f9da9f63ed0b9c1fc3703791e0ae8857436e7add Mon Sep 17 00:00:00 2001 From: Kerem Yilmaz Date: Wed, 2 Oct 2024 12:07:06 -0700 Subject: [PATCH] Make multi section openable in task form (#897) Co-authored-by: Muhammed Salih Altun --- .../routes/tasks/create/CreateNewTaskForm.tsx | 36 +++++++++----- .../src/routes/tasks/create/SavedTaskForm.tsx | 42 +++++++++++----- .../routes/tasks/create/TaskFormSection.tsx | 48 ++++++++----------- 3 files changed, 77 insertions(+), 49 deletions(-) diff --git a/skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx b/skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx index 7f3696ca..e4fae2f5 100644 --- a/skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx +++ b/skyvern-frontend/src/routes/tasks/create/CreateNewTaskForm.tsx @@ -79,14 +79,16 @@ function createTaskRequestObject( }; } +type Section = "base" | "extraction" | "advanced"; + function CreateNewTaskForm({ initialValues }: Props) { const queryClient = useQueryClient(); const { toast } = useToast(); const credentialGetter = useCredentialGetter(); const apiCredential = useApiCredential(); - const [section, setSection] = useState<"base" | "extraction" | "advanced">( + const [activeSections, setActiveSections] = useState>([ "base", - ); + ]); const [showAdvancedBaseContent, setShowAdvancedBaseContent] = useState(false); const form = useForm({ @@ -163,22 +165,34 @@ function CreateNewTaskForm({ initialValues }: Props) { mutation.mutate(values); } + function isActive(section: Section) { + return activeSections.includes(section); + } + + function toggleSection(section: Section) { + if (isActive(section)) { + setActiveSections(activeSections.filter((s) => s !== section)); + } else { + setActiveSections([...activeSections, section]); + } + } + return (
{ - setSection("base"); + toggleSection("base"); }} hasError={ typeof errors.url !== "undefined" || typeof errors.navigationGoal !== "undefined" } > - {section === "base" && ( + {isActive("base") && (
{ - setSection("extraction"); + toggleSection("extraction"); }} hasError={ typeof errors.dataExtractionGoal !== "undefined" || typeof errors.extractedInformationSchema !== "undefined" } > - {section === "extraction" && ( + {isActive("extraction") && (
{ - setSection("advanced"); + toggleSection("advanced"); }} hasError={ typeof errors.navigationPayload !== "undefined" || @@ -390,7 +404,7 @@ function CreateNewTaskForm({ initialValues }: Props) { typeof errors.errorCodeMapping !== "undefined" } > - {section === "advanced" && ( + {isActive("advanced") && (
( + const [activeSections, setActiveSections] = useState>([ "base", - ); + ]); const [showAdvancedBaseContent, setShowAdvancedBaseContent] = useState(false); const form = useForm({ @@ -263,6 +265,18 @@ function SavedTaskForm({ initialValues }: Props) { saveTaskMutation.mutate(values); } + function isActive(section: Section) { + return activeSections.includes(section); + } + + function toggleSection(section: Section) { + if (isActive(section)) { + setActiveSections(activeSections.filter((s) => s !== section)); + } else { + setActiveSections([...activeSections, section]); + } + } + return ( setSection("base")} + active={isActive("base")} + onClick={() => { + toggleSection("base"); + }} hasError={ typeof errors.navigationGoal !== "undefined" || typeof errors.title !== "undefined" || @@ -291,7 +307,7 @@ function SavedTaskForm({ initialValues }: Props) { typeof errors.description !== "undefined" } > - {section === "base" && ( + {isActive("base") && (
setSection("extraction")} + active={isActive("extraction")} + onClick={() => { + toggleSection("extraction"); + }} hasError={ typeof errors.extractedInformationSchema !== "undefined" || typeof errors.dataExtractionGoal !== "undefined" } > - {section === "extraction" && ( + {isActive("extraction") && (
setSection("advanced")} + active={isActive("advanced")} + onClick={() => { + toggleSection("advanced"); + }} hasError={ typeof errors.navigationPayload !== "undefined" || typeof errors.maxStepsOverride !== "undefined" || @@ -556,7 +576,7 @@ function SavedTaskForm({ initialValues }: Props) { typeof errors.errorCodeMapping !== "undefined" } > - {section === "advanced" && ( + {isActive("advanced") && (
setHovering(true)} - onMouseOut={() => setHovering(false)} - onMouseEnter={() => setHovering(true)} - onMouseLeave={() => setHovering(false)} - onClick={() => onClick && onClick()} - > +
onClick && onClick()} + onMouseEnter={() => setHovering(true)} + onMouseLeave={() => setHovering(false)} + onMouseOver={() => setHovering(true)} + onMouseOut={() => setHovering(false)} > +
+ {String(index)} +
- {String(index)} + {title}
- - {title} -
{children}