From 46872feb483bdd4635d44a1da12ca135b06f3211 Mon Sep 17 00:00:00 2001 From: Lucas Oliveira Date: Mon, 3 Jun 2024 00:16:11 -0300 Subject: [PATCH] Passed duplicate flow function to main page --- .../components/menuBar/index.tsx | 27 +++------------ .../components/componentsComponent/index.tsx | 34 ++++++++++++++++--- .../components/headerComponent/index.tsx | 32 +++++++++++++---- 3 files changed, 60 insertions(+), 33 deletions(-) diff --git a/src/frontend/src/components/headerComponent/components/menuBar/index.tsx b/src/frontend/src/components/headerComponent/components/menuBar/index.tsx index 41f7b6d5b..35542ca2a 100644 --- a/src/frontend/src/components/headerComponent/components/menuBar/index.tsx +++ b/src/frontend/src/components/headerComponent/components/menuBar/index.tsx @@ -35,21 +35,11 @@ export const MenuBar = ({}: {}): JSX.Element => { const navigate = useNavigate(); const isBuilding = useFlowStore((state) => state.isBuilding); - function handleAddFlow(duplicate?: boolean) { + function handleAddFlow() { try { - if (duplicate) { - if (!currentFlow) { - throw new Error("No flow to duplicate"); - } - addFlow(true, currentFlow).then((id) => { - setSuccessData({ title: "Flow duplicated successfully" }); - navigate("/flow/" + id); - }); - } else { - addFlow(true).then((id) => { - navigate("/flow/" + id); - }); - } + addFlow(true).then((id) => { + navigate("/flow/" + id); + }); } catch (err) { setErrorData(err as { title: string; list?: Array }); } @@ -89,15 +79,6 @@ export const MenuBar = ({}: {}): JSX.Element => { New - { - handleAddFlow(true); - }} - className="cursor-pointer" - > - - Duplicate - { diff --git a/src/frontend/src/pages/MainPage/components/componentsComponent/index.tsx b/src/frontend/src/pages/MainPage/components/componentsComponent/index.tsx index 62b96a9bc..3577c74c8 100644 --- a/src/frontend/src/pages/MainPage/components/componentsComponent/index.tsx +++ b/src/frontend/src/pages/MainPage/components/componentsComponent/index.tsx @@ -66,6 +66,7 @@ export default function ComponentsComponent({ const myCollectionId = useFolderStore((state) => state.myCollectionId); const getFoldersApi = useFolderStore((state) => state.getFoldersApi); const setFolderUrl = useFolderStore((state) => state.setFolderUrl); + const addFlow = useFlowsManagerStore((state) => state.addFlow); useEffect(() => { setFolderUrl(folderId ?? ""); @@ -115,7 +116,7 @@ export default function ComponentsComponent({ }); }; - const handleSelectOptionsChange = () => { + const handleSelectOptionsChange = (action: string) => { const hasSelected = selectedFlowsComponentsCards?.length > 0; if (!hasSelected) { setErrorData({ @@ -124,7 +125,31 @@ export default function ComponentsComponent({ }); return; } - setOpenDelete(true); + if (action === "delete") { + setOpenDelete(true); + } else if (action === "duplicate") { + handleDuplicate(); + } + }; + + const handleDuplicate = () => { + Promise.all( + selectedFlowsComponentsCards.map((selectedFlow) => + addFlow( + true, + allFlows.find((flow) => flow.id === selectedFlow), + ), + ), + ).then(() => { + resetFilter(); + getFoldersApi(true); + if (!folderId || folderId === myCollectionId) { + getFolderById(folderId ? folderId : myCollectionId); + } + setSelectedFlowsComponentsCards([]); + + setSuccessData({ title: "Flows duplicated successfully" }); + }); }; const handleDeleteMultiple = () => { @@ -198,9 +223,10 @@ export default function ComponentsComponent({ <> {allFlows?.length > 0 && ( handleSelectOptionsChange("delete")} handleSelectAll={handleSelectAll} - disableDelete={!(selectedFlowsComponentsCards?.length > 0)} + handleDuplicate={() => handleSelectOptionsChange("duplicate")} + disableFunctions={!(selectedFlowsComponentsCards?.length > 0)} /> )} diff --git a/src/frontend/src/pages/MainPage/components/headerComponent/index.tsx b/src/frontend/src/pages/MainPage/components/headerComponent/index.tsx index 5b556f162..212816ea4 100644 --- a/src/frontend/src/pages/MainPage/components/headerComponent/index.tsx +++ b/src/frontend/src/pages/MainPage/components/headerComponent/index.tsx @@ -16,13 +16,15 @@ import ShadTooltip from "../../../../components/shadTooltipComponent"; type HeaderComponentProps = { handleSelectAll: (select) => void; handleDelete: () => void; - disableDelete: boolean; + handleDuplicate: () => void; + disableFunctions: boolean; }; const HeaderComponent = ({ handleSelectAll, handleDelete, - disableDelete, + handleDuplicate, + disableFunctions, }: HeaderComponentProps) => { const [shouldSelectAll, setShouldSelectAll] = useState(true); @@ -55,23 +57,41 @@ const HeaderComponent = ({ -
+
Select items to duplicate + ) : ( + Duplicate selected items + ) + } + > + + +
+
+ Select items to delete ) : ( Delete selected items ) } > -