From 267adea4118a12f1aae614b79abb2f3bfa5cb892 Mon Sep 17 00:00:00 2001 From: Shuchang Zheng Date: Thu, 10 Oct 2024 06:59:03 -0700 Subject: [PATCH] Make scrollable areas more consistent (#952) Co-authored-by: wintonzheng --- .../src/components/ui/scroll-area.tsx | 19 +- .../src/routes/tasks/create/PromptBox.tsx | 38 ++-- .../tasks/detail/ScrollableActionList.tsx | 47 ++--- .../editor/panels/WorkflowParametersPanel.tsx | 174 +++++++++--------- 4 files changed, 154 insertions(+), 124 deletions(-) diff --git a/skyvern-frontend/src/components/ui/scroll-area.tsx b/skyvern-frontend/src/components/ui/scroll-area.tsx index 842f82f7..68ec626f 100644 --- a/skyvern-frontend/src/components/ui/scroll-area.tsx +++ b/skyvern-frontend/src/components/ui/scroll-area.tsx @@ -12,15 +12,26 @@ const ScrollArea = React.forwardRef< className={cn("relative overflow-hidden", className)} {...props} > - - {children} - + {children} )); ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName; +const ScrollAreaViewport = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ children, ...props }, ref) => { + return ( + + {children} + + ); +}); +ScrollAreaViewport.displayName = + ScrollAreaPrimitive.ScrollAreaViewport.displayName; + const ScrollBar = React.forwardRef< React.ElementRef, React.ComponentPropsWithoutRef @@ -43,4 +54,4 @@ const ScrollBar = React.forwardRef< )); ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName; -export { ScrollArea, ScrollBar }; +export { ScrollArea, ScrollBar, ScrollAreaViewport }; diff --git a/skyvern-frontend/src/routes/tasks/create/PromptBox.tsx b/skyvern-frontend/src/routes/tasks/create/PromptBox.tsx index f0bef342..2b5662b4 100644 --- a/skyvern-frontend/src/routes/tasks/create/PromptBox.tsx +++ b/skyvern-frontend/src/routes/tasks/create/PromptBox.tsx @@ -10,7 +10,11 @@ import { AxiosError } from "axios"; import { useState } from "react"; import { useNavigate } from "react-router-dom"; import { stringify as convertToYAML } from "yaml"; -import { ScrollArea, ScrollBar } from "@/components/ui/scroll-area"; +import { + ScrollArea, + ScrollAreaViewport, + ScrollBar, +} from "@/components/ui/scroll-area"; function createTaskFromTaskGenerationParameters( values: TaskGenerationApiResponse, @@ -178,21 +182,23 @@ function PromptBox() { -
- {examplePrompts.map((examplePrompt) => { - return ( -
{ - setPrompt(examplePrompt); - }} - > - {examplePrompt} -
- ); - })} -
+ +
+ {examplePrompts.map((examplePrompt) => { + return ( +
{ + setPrompt(examplePrompt); + }} + > + {examplePrompt} +
+ ); + })} +
+
diff --git a/skyvern-frontend/src/routes/tasks/detail/ScrollableActionList.tsx b/skyvern-frontend/src/routes/tasks/detail/ScrollableActionList.tsx index 44751dbb..58d953b5 100644 --- a/skyvern-frontend/src/routes/tasks/detail/ScrollableActionList.tsx +++ b/skyvern-frontend/src/routes/tasks/detail/ScrollableActionList.tsx @@ -2,6 +2,7 @@ import { getClient } from "@/api/AxiosClient"; import { Action, ActionTypes, ReadableActionTypes } from "@/api/types"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; +import { ScrollArea, ScrollAreaViewport } from "@/components/ui/scroll-area"; import { Separator } from "@/components/ui/separator"; import { Tooltip, @@ -155,29 +156,33 @@ function ScrollableActionList({ -
- {showStreamOption && ( -
{ - refs.current[data.length] = element; - }} - className={cn( - "flex cursor-pointer rounded-lg border p-4 shadow-md hover:border-slate-300", - { - "border-slate-300": activeIndex === "stream", - }, + + +
+ {showStreamOption && ( +
{ + refs.current[data.length] = element; + }} + className={cn( + "flex cursor-pointer rounded-lg border p-4 shadow-md hover:border-slate-300", + { + "border-slate-300": activeIndex === "stream", + }, + )} + onClick={() => onActiveIndexChange("stream")} + > +
+ + Live +
+
)} - onClick={() => onActiveIndexChange("stream")} - > -
- - Live -
+ {getReverseActions()}
- )} - {getReverseActions()} -
+ +
); } diff --git a/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParametersPanel.tsx b/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParametersPanel.tsx index c16c569d..e369d1a5 100644 --- a/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParametersPanel.tsx +++ b/skyvern-frontend/src/routes/workflows/editor/panels/WorkflowParametersPanel.tsx @@ -26,6 +26,7 @@ import { } from "@/components/ui/dropdown-menu"; import { useReactFlow } from "@xyflow/react"; import { useWorkflowHasChangesStore } from "@/store/WorkflowHasChangesStore"; +import { ScrollArea, ScrollAreaViewport } from "@/components/ui/scroll-area"; const WORKFLOW_EDIT_PANEL_WIDTH = 20 * 16; const WORKFLOW_EDIT_PANEL_GAP = 1 * 16; @@ -105,89 +106,96 @@ function WorkflowParametersPanel() { -
- {workflowParameters.map((parameter) => { - return ( -
-
- {parameter.key} - {parameter.parameterType === "workflow" ? ( - - {parameter.dataType} - - ) : ( - - {parameter.parameterType} - - )} -
-
- { - setOperationPanelState({ - active: true, - operation: "edit", - parameter: parameter, - type: parameter.parameterType, - }); - }} - /> - - - - - - - Are you sure? - - This parameter will be deleted. - - - - - - - - - - -
-
- ); - })} -
+ + +
+ {workflowParameters.map((parameter) => { + return ( +
+
+ {parameter.key} + {parameter.parameterType === "workflow" ? ( + + {parameter.dataType} + + ) : ( + + {parameter.parameterType} + + )} +
+
+ { + setOperationPanelState({ + active: true, + operation: "edit", + parameter: parameter, + type: parameter.parameterType, + }); + }} + /> + + + + + + + Are you sure? + + This parameter will be deleted. + + + + + + + + + + +
+
+ ); + })} +
+
+
{operationPanelState.active && (