From ebaaf726f9d002312ec62bc9e25db467fd992c15 Mon Sep 17 00:00:00 2001 From: anovazzi1 Date: Fri, 3 May 2024 16:01:58 -0300 Subject: [PATCH 01/10] chore: Add card filter overlay and update flex alignment in CollectionCardComponent --- src/frontend/src/components/cardComponent/index.tsx | 4 ++-- src/frontend/src/style/applies.css | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/frontend/src/components/cardComponent/index.tsx b/src/frontend/src/components/cardComponent/index.tsx index e82263513..ea7022c0f 100644 --- a/src/frontend/src/components/cardComponent/index.tsx +++ b/src/frontend/src/components/cardComponent/index.tsx @@ -177,6 +177,7 @@ export default function CollectionCardComponent({ )} onClick={onClick} > +
@@ -292,7 +293,7 @@ export default function CollectionCardComponent({
-
+
{playground && data?.metadata !== undefined ? (
)} - {button && button} {playground && data?.metadata === undefined && (
-
+
{playground && data?.metadata !== undefined ? (
From 566c3642f627b622b4a27b8243e5b692d216daf2 Mon Sep 17 00:00:00 2001 From: Cristhian Zanforlin Lousa <72977554+Cristhianzl@users.noreply.github.com> Date: Fri, 3 May 2024 17:26:11 -0300 Subject: [PATCH 05/10] Add headers to API Request component (#1832) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ♻️ (APIRequest.py): refactor APIRequest class to improve variable naming and remove unnecessary underscore prefix in headers parameter 💡 (APIRequest.py): update comments in APIRequest class to improve code readability and maintainability --- src/backend/base/langflow/components/data/APIRequest.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/backend/base/langflow/components/data/APIRequest.py b/src/backend/base/langflow/components/data/APIRequest.py index 83a1edb9d..06a5be2ae 100644 --- a/src/backend/base/langflow/components/data/APIRequest.py +++ b/src/backend/base/langflow/components/data/APIRequest.py @@ -93,14 +93,14 @@ class APIRequest(CustomComponent): self, method: str, urls: List[str], - _headers: Optional[Record] = None, + headers: Optional[Record] = None, body: Optional[Record] = None, timeout: int = 5, ) -> List[Record]: - if _headers is None: + if headers is None: headers = {} else: - headers = _headers.data + headers = headers.data bodies = [] if body: From e361228b4833befb5702b8756f32601369b864d2 Mon Sep 17 00:00:00 2001 From: anovazzi1 Date: Fri, 3 May 2024 18:00:50 -0300 Subject: [PATCH 06/10] chore: Update CollectionCardComponent with hover background color and card filter overlay --- src/frontend/src/components/cardComponent/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/components/cardComponent/index.tsx b/src/frontend/src/components/cardComponent/index.tsx index a0e387e9f..52834ee27 100644 --- a/src/frontend/src/components/cardComponent/index.tsx +++ b/src/frontend/src/components/cardComponent/index.tsx @@ -170,14 +170,14 @@ export default function CollectionCardComponent({ <> -
From 2dc4ffd99fb8fb935fa344247c19500914a09bd2 Mon Sep 17 00:00:00 2001 From: cristhianzl Date: Fri, 3 May 2024 18:17:49 -0300 Subject: [PATCH 07/10] fix UI errors --- .../addNewVariableButton.tsx | 18 ++++++++---- .../src/components/cardComponent/index.tsx | 3 +- .../src/components/chatComponent/index.tsx | 10 +++---- .../components/csvOutputComponent/index.tsx | 7 +++-- .../src/components/tableComponent/index.tsx | 13 +++++++-- src/frontend/src/modals/IOModal/index.tsx | 2 +- src/frontend/src/modals/baseModal/index.tsx | 6 ++++ .../pages/GlobalVariablesPage/index.tsx | 10 ++++--- .../pages/ShortcutsPage/index.tsx | 28 ++++++------------- src/frontend/src/utils/utils.ts | 4 +++ .../tests/end-to-end/userSettings.spec.ts | 2 +- 11 files changed, 59 insertions(+), 44 deletions(-) diff --git a/src/frontend/src/components/addNewVariableButtonComponent/addNewVariableButton.tsx b/src/frontend/src/components/addNewVariableButtonComponent/addNewVariableButton.tsx index f33037ebc..8786cdac6 100644 --- a/src/frontend/src/components/addNewVariableButtonComponent/addNewVariableButton.tsx +++ b/src/frontend/src/components/addNewVariableButtonComponent/addNewVariableButton.tsx @@ -5,6 +5,7 @@ import useAlertStore from "../../stores/alertStore"; import { useGlobalVariablesStore } from "../../stores/globalVariables"; import { useTypesStore } from "../../stores/typesStore"; import { ResponseErrorDetailAPI } from "../../types/api"; +import { sortByName } from "../../utils/utils"; import ForwardedIconComponent from "../genericIconComponent"; import InputComponent from "../inputComponent"; import { Button } from "../ui/button"; @@ -23,14 +24,19 @@ export default function AddNewVariableButton({ children }): JSX.Element { const setErrorData = useAlertStore((state) => state.setErrorData); const componentFields = useTypesStore((state) => state.ComponentFields); const unavaliableFields = new Set( - Object.keys(useGlobalVariablesStore((state) => state.unavaliableFields)) + Object.keys(useGlobalVariablesStore((state) => state.unavaliableFields)), ); - const availableFields = Array.from(componentFields).filter( - (field) => !unavaliableFields.has(field) - ); + const availableFields = () => { + const fields = Array.from(componentFields).filter( + (field) => !unavaliableFields.has(field), + ); + + return sortByName(fields); + }; + const addGlobalVariable = useGlobalVariablesStore( - (state) => state.addGlobalVariable + (state) => state.addGlobalVariable, ); function handleSaveVariable() { @@ -113,7 +119,7 @@ export default function AddNewVariableButton({ children }): JSX.Element { setSelectedOptions={(value) => setFields(value)} selectedOptions={fields} password={false} - options={availableFields} + options={availableFields()} placeholder="Choose a field for the variable..." id={"apply-to-fields"} > diff --git a/src/frontend/src/components/cardComponent/index.tsx b/src/frontend/src/components/cardComponent/index.tsx index 52834ee27..958abffb4 100644 --- a/src/frontend/src/components/cardComponent/index.tsx +++ b/src/frontend/src/components/cardComponent/index.tsx @@ -11,7 +11,6 @@ import cloneFLowWithParent from "../../utils/storeUtils"; import { cn, convertTestName } from "../../utils/utils"; import IconComponent from "../genericIconComponent"; import ShadTooltip from "../shadTooltipComponent"; -import { Badge } from "../ui/badge"; import { Button } from "../ui/button"; import { Card, @@ -172,7 +171,7 @@ export default function CollectionCardComponent({ data-testid={`card-${convertTestName(data.name)}`} //TODO check color schema className={cn( - "group relative flex min-h-[11rem] flex-col justify-between overflow-hidden transition-all hover:bg-muted/50 hover:shadow-md hover:dark:bg-[#202635]", + "group relative flex min-h-[11rem] flex-col justify-between overflow-hidden transition-all hover:bg-muted/50 hover:shadow-md hover:dark:bg-[#ffffff10]", disabled ? "pointer-events-none opacity-50" : "", onClick ? "cursor-pointer" : "", )} diff --git a/src/frontend/src/components/chatComponent/index.tsx b/src/frontend/src/components/chatComponent/index.tsx index d483f95ee..d75688161 100644 --- a/src/frontend/src/components/chatComponent/index.tsx +++ b/src/frontend/src/components/chatComponent/index.tsx @@ -50,7 +50,7 @@ export default function FlowToolbar(): JSX.Element { "relative inline-flex h-full w-full items-center justify-center gap-[4px] bg-muted px-5 py-3 text-sm font-semibold text-foreground transition-all duration-150 ease-in-out hover:bg-background hover:bg-hover ", !hasApiKey || !validApiKey || !hasStore ? " button-disable text-muted-foreground " - : "" + : "", )} > Share ), - [hasApiKey, validApiKey, currentFlow, hasStore] + [hasApiKey, validApiKey, currentFlow, hasStore], ); return ( @@ -108,7 +108,7 @@ export default function FlowToolbar(): JSX.Element { "message-button-icon h-5 w-5 fill-muted-foreground stroke-muted-foreground transition-all" } /> - Run + Playground
)}
@@ -120,7 +120,7 @@ export default function FlowToolbar(): JSX.Element {
{ updateRowHeight(params); }, - [updateRowHeight] + [updateRowHeight], ); const onGridSizeChanged = useCallback( (params: any) => { updateRowHeight(params); }, - [updateRowHeight] + [updateRowHeight], ); return ( @@ -167,6 +167,7 @@ function CsvOutputComponent({ onFirstDataRendered={onFirstDataRendered} onGridSizeChanged={onGridSizeChanged} scrollbarWidth={8} + overlayNoRowsTemplate="No data available" />
)} diff --git a/src/frontend/src/components/tableComponent/index.tsx b/src/frontend/src/components/tableComponent/index.tsx index 300aa5cc3..3404444c5 100644 --- a/src/frontend/src/components/tableComponent/index.tsx +++ b/src/frontend/src/components/tableComponent/index.tsx @@ -5,6 +5,7 @@ import { ComponentPropsWithoutRef, ElementRef, forwardRef } from "react"; import { useDarkStore } from "../../stores/darkStore"; import "../../style/ag-theme-shadcn.css"; // Custom CSS applied to the grid import { cn } from "../../utils/utils"; +import { Card, CardContent } from "../ui/card"; const TableComponent = forwardRef< ElementRef, @@ -17,10 +18,18 @@ const TableComponent = forwardRef<
- + + + + +
); diff --git a/src/frontend/src/modals/IOModal/index.tsx b/src/frontend/src/modals/IOModal/index.tsx index 49283ece0..82350b57e 100644 --- a/src/frontend/src/modals/IOModal/index.tsx +++ b/src/frontend/src/modals/IOModal/index.tsx @@ -117,7 +117,7 @@ export default function IOModal({ return ( state.globalVariablesEntries + (state) => state.globalVariablesEntries, ); const removeGlobalVariable = useGlobalVariablesStore( - (state) => state.removeGlobalVariable + (state) => state.removeGlobalVariable, ); const globalVariables = useGlobalVariablesStore( - (state) => state.globalVariables + (state) => state.globalVariables, ); const setErrorData = useAlertStore((state) => state.setErrorData); const getVariableId = useGlobalVariablesStore((state) => state.getVariableId); @@ -154,7 +154,7 @@ export default function GlobalVariablesPage() { @@ -174,6 +174,8 @@ export default function GlobalVariablesPage() { }} rowSelection="multiple" suppressRowClickSelection={true} + domLayout="autoHeight" + pagination={false} columnDefs={colDefs} rowData={rowData} /> diff --git a/src/frontend/src/pages/SettingsPage/pages/ShortcutsPage/index.tsx b/src/frontend/src/pages/SettingsPage/pages/ShortcutsPage/index.tsx index de2c92b2d..65bb3387f 100644 --- a/src/frontend/src/pages/SettingsPage/pages/ShortcutsPage/index.tsx +++ b/src/frontend/src/pages/SettingsPage/pages/ShortcutsPage/index.tsx @@ -2,13 +2,6 @@ import { ColDef, ColGroupDef } from "ag-grid-community"; import { useState } from "react"; import ForwardedIconComponent from "../../../../components/genericIconComponent"; import TableComponent from "../../../../components/tableComponent"; -import { - Card, - CardContent, - CardDescription, - CardHeader, - CardTitle, -} from "../../../../components/ui/card"; export default function ShortcutsPage() { const advancedShortcut = "Ctrl + Shift + A"; @@ -84,7 +77,7 @@ export default function ShortcutsPage() { shortcut: redoShortcut, }, ]); - + return (
@@ -97,22 +90,17 @@ export default function ShortcutsPage() { />

- Manage Shortcuts for quick access to - frequently used actions. + Manage Shortcuts for quick access to frequently used actions.

- - - - - +
); diff --git a/src/frontend/src/utils/utils.ts b/src/frontend/src/utils/utils.ts index 43838bb27..7c269d8e4 100644 --- a/src/frontend/src/utils/utils.ts +++ b/src/frontend/src/utils/utils.ts @@ -719,3 +719,7 @@ export function freezeObject(obj: any) { export function convertTestName(name: string): string { return name.replace(/ /g, "-").toLowerCase(); } + +export function sortByName(stringList: string[]): string[] { + return stringList.sort((a, b) => a.localeCompare(b)); +} diff --git a/src/frontend/tests/end-to-end/userSettings.spec.ts b/src/frontend/tests/end-to-end/userSettings.spec.ts index 6f90bb19c..af7c93824 100644 --- a/src/frontend/tests/end-to-end/userSettings.spec.ts +++ b/src/frontend/tests/end-to-end/userSettings.spec.ts @@ -63,7 +63,7 @@ test("should interact with global variables", async ({ page }) => { .nth(0) .click(); await page.getByTestId("icon-Trash2").click(); - await page.getByText("No Rows To Show").isVisible(); + await page.getByText("No data available").isVisible(); }); test("should see shortcuts", async ({ page }) => { From 92d39a65003552bf5e546447585b923f77fe24c0 Mon Sep 17 00:00:00 2001 From: Gabriel Luiz Freitas Almeida Date: Fri, 3 May 2024 18:23:41 -0300 Subject: [PATCH 08/10] Fix mark_branch function and refactor build_and_cache_graph_from_db function (#1833) * Fix mark_branch function in Graph class to properly handle visited vertices * Refactor build_and_cache_graph_from_db function in utils.py to simplify code and remove unnecessary parameter * Fix retrieval of graph from cache in retrieve_vertices_order function * Fix possible_id type annotation in get_id_from_search_string function * Refactor APIRequest class to improve variable naming and remove unnecessary underscore prefix in headers parameter * Refactor buildVertices function in buildUtils.ts to improve code readability and remove unnecessary variable assignment * Fix API endpoints in test_endpoints.py to use correct HTTP methods --- src/backend/base/langflow/api/utils.py | 7 +--- src/backend/base/langflow/api/v1/chat.py | 7 +--- .../langflow/components/data/APIRequest.py | 6 ++-- src/backend/base/langflow/graph/graph/base.py | 9 ++++- .../base/langflow/services/store/service.py | 2 +- src/frontend/src/utils/buildUtils.ts | 34 ++++++++----------- tests/test_endpoints.py | 4 +-- 7 files changed, 31 insertions(+), 38 deletions(-) diff --git a/src/backend/base/langflow/api/utils.py b/src/backend/base/langflow/api/utils.py index b9f10d2c4..e2f6e07e7 100644 --- a/src/backend/base/langflow/api/utils.py +++ b/src/backend/base/langflow/api/utils.py @@ -205,17 +205,12 @@ async def build_and_cache_graph_from_db( flow_id: str, session: Session, chat_service: "ChatService", - graph: Optional[Graph] = None, ): """Build and cache the graph.""" flow: Optional[Flow] = session.get(Flow, flow_id) if not flow or not flow.data: raise ValueError("Invalid flow ID") - other_graph = Graph.from_payload(flow.data, flow_id) - if graph is None: - graph = other_graph - else: - graph = graph.update(other_graph) + graph = Graph.from_payload(flow.data, flow_id) await chat_service.set_cache(flow_id, graph) return graph diff --git a/src/backend/base/langflow/api/v1/chat.py b/src/backend/base/langflow/api/v1/chat.py index d44d96e72..30e709664 100644 --- a/src/backend/base/langflow/api/v1/chat.py +++ b/src/backend/base/langflow/api/v1/chat.py @@ -79,13 +79,8 @@ async def retrieve_vertices_order( """ try: # First, we need to check if the flow_id is in the cache - graph = None if not data: - if cache := await chat_service.get_cache(flow_id): - graph = cache.get("result") - graph = await build_and_cache_graph_from_db( - flow_id=flow_id, session=session, chat_service=chat_service, graph=graph - ) + graph = await build_and_cache_graph_from_db(flow_id=flow_id, session=session, chat_service=chat_service) else: graph = await build_and_cache_graph_from_data( flow_id=flow_id, graph_data=data.model_dump(), chat_service=chat_service diff --git a/src/backend/base/langflow/components/data/APIRequest.py b/src/backend/base/langflow/components/data/APIRequest.py index 06a5be2ae..9f1ca703c 100644 --- a/src/backend/base/langflow/components/data/APIRequest.py +++ b/src/backend/base/langflow/components/data/APIRequest.py @@ -98,9 +98,9 @@ class APIRequest(CustomComponent): timeout: int = 5, ) -> List[Record]: if headers is None: - headers = {} + headers_dict = {} else: - headers = headers.data + headers_dict = headers.data bodies = [] if body: @@ -114,7 +114,7 @@ class APIRequest(CustomComponent): bodies += [None] * (len(urls) - len(bodies)) # type: ignore async with httpx.AsyncClient() as client: results = await asyncio.gather( - *[self.make_request(client, method, u, headers, rec, timeout) for u, rec in zip(urls, bodies)] + *[self.make_request(client, method, u, headers_dict, rec, timeout) for u, rec in zip(urls, bodies)] ) self.status = results return results diff --git a/src/backend/base/langflow/graph/graph/base.py b/src/backend/base/langflow/graph/graph/base.py index bddfd6795..1744ac687 100644 --- a/src/backend/base/langflow/graph/graph/base.py +++ b/src/backend/base/langflow/graph/graph/base.py @@ -445,9 +445,16 @@ class Graph: vertex = self.get_vertex(vertex_id) vertex.set_state(state) - def mark_branch(self, vertex_id: str, state: str): + def mark_branch(self, vertex_id: str, state: str, visited: Optional[set] = None): """Marks a branch of the graph.""" + if visited is None: + visited = set() + visited.add(vertex_id) + if vertex_id in visited: + return + self.mark_vertex(vertex_id, state) + for child_id in self.parent_child_map[vertex_id]: self.mark_branch(child_id, state) diff --git a/src/backend/base/langflow/services/store/service.py b/src/backend/base/langflow/services/store/service.py index c6205269a..4fabd435c 100644 --- a/src/backend/base/langflow/services/store/service.py +++ b/src/backend/base/langflow/services/store/service.py @@ -59,7 +59,7 @@ def get_id_from_search_string(search_string: str) -> Optional[str]: Returns: Optional[str]: The extracted ID, or None if no ID is found. """ - possible_id = search_string + possible_id: Optional[str] = search_string if "www.langflow.store/store/" in search_string: possible_id = search_string.split("/")[-1] diff --git a/src/frontend/src/utils/buildUtils.ts b/src/frontend/src/utils/buildUtils.ts index 2f5d557c5..ae9bd56f9 100644 --- a/src/frontend/src/utils/buildUtils.ts +++ b/src/frontend/src/utils/buildUtils.ts @@ -116,33 +116,29 @@ export async function buildVertices({ nodes, edges, }: BuildVerticesParams) { - let verticesBuild = useFlowStore.getState().verticesBuild; // if startNodeId and stopNodeId are provided // something is wrong if (startNodeId && stopNodeId) { return; } + let verticesOrderResponse = await updateVerticesOrder( + flowId, + startNodeId, + stopNodeId, + nodes, + edges + ); + if (onValidateNodes) { + try { + onValidateNodes(verticesOrderResponse.verticesToRun); + } catch (e) { + useFlowStore.getState().setIsBuilding(false); - if (!verticesBuild || startNodeId || stopNodeId) { - let verticesOrderResponse = await updateVerticesOrder( - flowId, - startNodeId, - stopNodeId, - nodes, - edges - ); - if (onValidateNodes) { - try { - onValidateNodes(verticesOrderResponse.verticesToRun); - } catch (e) { - useFlowStore.getState().setIsBuilding(false); - - return; - } + return; } - if (onGetOrderSuccess) onGetOrderSuccess(); - verticesBuild = useFlowStore.getState().verticesBuild; } + if (onGetOrderSuccess) onGetOrderSuccess(); + let verticesBuild = useFlowStore.getState().verticesBuild; const verticesIds = verticesBuild?.verticesIds!; const verticesLayers = verticesBuild?.verticesLayers!; diff --git a/tests/test_endpoints.py b/tests/test_endpoints.py index 23d965b7d..64a5da351 100644 --- a/tests/test_endpoints.py +++ b/tests/test_endpoints.py @@ -393,13 +393,13 @@ def test_various_prompts(client, prompt, expected_input_variables): def test_get_vertices_flow_not_found(client, logged_in_headers): - response = client.get("/api/v1/build/nonexistent_id/vertices", headers=logged_in_headers) + response = client.post("/api/v1/build/nonexistent_id/vertices", headers=logged_in_headers) assert response.status_code == 500 # Or whatever status code you've set for invalid ID def test_get_vertices(client, added_flow_with_prompt_and_history, logged_in_headers): flow_id = added_flow_with_prompt_and_history["id"] - response = client.get(f"/api/v1/build/{flow_id}/vertices", headers=logged_in_headers) + response = client.post(f"/api/v1/build/{flow_id}/vertices", headers=logged_in_headers) assert response.status_code == 200 assert "ids" in response.json() # The response should contain the list in this order From 79b5223c19f33cee11d7f07c87eabeeb09a86ccf Mon Sep 17 00:00:00 2001 From: cristhianzl Date: Fri, 3 May 2024 18:24:57 -0300 Subject: [PATCH 09/10] =?UTF-8?q?=E2=9C=A8=20(cardComponent/index.tsx):=20?= =?UTF-8?q?remove=20trailing=20commas=20in=20useState=20calls=20for=20bett?= =?UTF-8?q?er=20code=20consistency=20=E2=99=BB=EF=B8=8F=20(cardComponent/i?= =?UTF-8?q?ndex.tsx):=20remove=20unnecessary=20parentheses=20in=20useState?= =?UTF-8?q?=20calls=20for=20better=20code=20readability=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in=20className=20attribute=20for=20better=20cod?= =?UTF-8?q?e=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx)?= =?UTF-8?q?:=20remove=20unnecessary=20whitespace=20in=20className=20attrib?= =?UTF-8?q?ute=20for=20better=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(?= =?UTF-8?q?cardComponent/index.tsx):=20remove=20unnecessary=20whitespace?= =?UTF-8?q?=20in=20className=20attribute=20for=20better=20code=20formattin?= =?UTF-8?q?g=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20?= =?UTF-8?q?unnecessary=20whitespace=20in=20className=20attribute=20for=20b?= =?UTF-8?q?etter=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent?= =?UTF-8?q?/index.tsx):=20remove=20unnecessary=20whitespace=20in=20classNa?= =?UTF-8?q?me=20attribute=20for=20better=20code=20formatting=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in=20className=20attribute=20for=20better=20cod?= =?UTF-8?q?e=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx)?= =?UTF-8?q?:=20remove=20unnecessary=20whitespace=20in=20className=20attrib?= =?UTF-8?q?ute=20for=20better=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(?= =?UTF-8?q?cardComponent/index.tsx):=20remove=20unnecessary=20whitespace?= =?UTF-8?q?=20in=20className=20attribute=20for=20better=20code=20formattin?= =?UTF-8?q?g=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20?= =?UTF-8?q?unnecessary=20whitespace=20in=20className=20attribute=20for=20b?= =?UTF-8?q?etter=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent?= =?UTF-8?q?/index.tsx):=20remove=20unnecessary=20whitespace=20in=20classNa?= =?UTF-8?q?me=20attribute=20for=20better=20code=20formatting=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in=20className=20attribute=20for=20better=20cod?= =?UTF-8?q?e=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx)?= =?UTF-8?q?:=20remove=20unnecessary=20whitespace=20in=20className=20attrib?= =?UTF-8?q?ute=20for=20better=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(?= =?UTF-8?q?cardComponent/index.tsx):=20remove=20unnecessary=20whitespace?= =?UTF-8?q?=20in=20className=20attribute=20for=20better=20code=20formattin?= =?UTF-8?q?g=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20?= =?UTF-8?q?unnecessary=20whitespace=20in=20className=20attribute=20for=20b?= =?UTF-8?q?etter=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent?= =?UTF-8?q?/index.tsx):=20remove=20unnecessary=20whitespace=20in=20classNa?= =?UTF-8?q?me=20attribute=20for=20better=20code=20formatting=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in=20className=20attribute=20for=20better=20cod?= =?UTF-8?q?e=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx)?= =?UTF-8?q?:=20remove=20unnecessary=20whitespace=20in=20className=20attrib?= =?UTF-8?q?ute=20for=20better=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(?= =?UTF-8?q?cardComponent/index.tsx):=20remove=20unnecessary=20whitespace?= =?UTF-8?q?=20in=20className=20attribute=20for=20better=20code=20formattin?= =?UTF-8?q?g=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20?= =?UTF-8?q?unnecessary=20whitespace=20in=20className=20attribute=20for=20b?= =?UTF-8?q?etter=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent?= =?UTF-8?q?/index.tsx):=20remove=20unnecessary=20whitespace=20in=20classNa?= =?UTF-8?q?me=20attribute=20for=20better=20code=20formatting=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in=20className=20attribute=20for=20better=20cod?= =?UTF-8?q?e=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx)?= =?UTF-8?q?:=20remove=20unnecessary=20whitespace=20in=20className=20attrib?= =?UTF-8?q?ute=20for=20better=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(?= =?UTF-8?q?cardComponent/index.tsx):=20remove=20unnecessary=20whitespace?= =?UTF-8?q?=20in=20className=20attribute=20for=20better=20code=20formattin?= =?UTF-8?q?g=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20?= =?UTF-8?q?unnecessary=20whitespace=20in=20className=20attribute=20for=20b?= =?UTF-8?q?etter=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent?= =?UTF-8?q?/index.tsx):=20remove=20unnecessary=20whitespace=20in=20classNa?= =?UTF-8?q?me=20attribute=20for=20better=20code=20formatting=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in=20className=20attribute=20for=20better=20cod?= =?UTF-8?q?e=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx)?= =?UTF-8?q?:=20remove=20unnecessary=20whitespace=20in=20className=20attrib?= =?UTF-8?q?ute=20for=20better=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(?= =?UTF-8?q?cardComponent/index.tsx):=20remove=20unnecessary=20whitespace?= =?UTF-8?q?=20in=20className=20attribute=20for=20better=20code=20formattin?= =?UTF-8?q?g=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20?= =?UTF-8?q?unnecessary=20whitespace=20in=20className=20attribute=20for=20b?= =?UTF-8?q?etter=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent?= =?UTF-8?q?/index.tsx):=20remove=20unnecessary=20whitespace=20in=20classNa?= =?UTF-8?q?me=20attribute=20for=20better=20code=20formatting=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in=20className=20attribute=20for=20better=20cod?= =?UTF-8?q?e=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx)?= =?UTF-8?q?:=20remove=20unnecessary=20whitespace=20in=20className=20attrib?= =?UTF-8?q?ute=20for=20better=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(?= =?UTF-8?q?cardComponent/index.tsx):=20remove=20unnecessary=20whitespace?= =?UTF-8?q?=20in=20className=20attribute=20for=20better=20code=20formattin?= =?UTF-8?q?g=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20?= =?UTF-8?q?unnecessary=20whitespace=20in=20className=20attribute=20for=20b?= =?UTF-8?q?etter=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent?= =?UTF-8?q?/index.tsx):=20remove=20unnecessary=20whitespace=20in=20classNa?= =?UTF-8?q?me=20attribute=20for=20better=20code=20formatting=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in=20className=20attribute=20for=20better=20cod?= =?UTF-8?q?e=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx)?= =?UTF-8?q?:=20remove=20unnecessary=20whitespace=20in=20className=20attrib?= =?UTF-8?q?ute=20for=20better=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(?= =?UTF-8?q?cardComponent/index.tsx):=20remove=20unnecessary=20whitespace?= =?UTF-8?q?=20in=20className=20attribute=20for=20better=20code=20formattin?= =?UTF-8?q?g=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20?= =?UTF-8?q?unnecessary=20whitespace=20in=20className=20attribute=20for=20b?= =?UTF-8?q?etter=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent?= =?UTF-8?q?/index.tsx):=20remove=20unnecessary=20whitespace=20in=20classNa?= =?UTF-8?q?me=20attribute=20for=20better=20code=20formatting=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in=20className=20attribute=20for=20better=20cod?= =?UTF-8?q?e=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx)?= =?UTF-8?q?:=20remove=20unnecessary=20whitespace=20in=20className=20attrib?= =?UTF-8?q?ute=20for=20better=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(?= =?UTF-8?q?cardComponent/index.tsx):=20remove=20unnecessary=20whitespace?= =?UTF-8?q?=20in=20className=20attribute=20for=20better=20code=20formattin?= =?UTF-8?q?g=20=E2=99=BB=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20?= =?UTF-8?q?unnecessary=20whitespace=20in=20className=20attribute=20for=20b?= =?UTF-8?q?etter=20code=20formatting=20=E2=99=BB=EF=B8=8F=20(cardComponent?= =?UTF-8?q?/index.tsx):=20remove=20unnecessary=20whitespace=20in=20classNa?= =?UTF-8?q?me=20attribute=20for=20better=20code=20formatting=20=E2=99=BB?= =?UTF-8?q?=EF=B8=8F=20(cardComponent/index.tsx):=20remove=20unnecessary?= =?UTF-8?q?=20whitespace=20in?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/frontend/src/components/cardComponent/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/components/cardComponent/index.tsx b/src/frontend/src/components/cardComponent/index.tsx index 958abffb4..ac85926d5 100644 --- a/src/frontend/src/components/cardComponent/index.tsx +++ b/src/frontend/src/components/cardComponent/index.tsx @@ -442,9 +442,9 @@ export default function CollectionCardComponent({ disabled={loadingPlayground} key={data.id} tabIndex={-1} - variant="outline" + variant="primary" size="sm" - className="gap-2 whitespace-nowrap" + className="gap-2 whitespace-nowrap bg-muted" data-testid={"playground-flow-button-" + data.id} onClick={(e) => { e.preventDefault(); From ca85bc0827955d94298fcacad3d21bb351027fa0 Mon Sep 17 00:00:00 2001 From: cristhianzl Date: Fri, 3 May 2024 18:30:38 -0300 Subject: [PATCH 10/10] =?UTF-8?q?=F0=9F=93=9D=20(index.tsx):=20remove=20tr?= =?UTF-8?q?ailing=20whitespace=20in=20button=20classNames=20to=20improve?= =?UTF-8?q?=20code=20readability=20=E2=99=BB=EF=B8=8F=20(index.tsx):=20rem?= =?UTF-8?q?ove=20unnecessary=20commas=20in=20dependency=20arrays=20to=20im?= =?UTF-8?q?prove=20code=20formatting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit