diff --git a/services/frontend/src/components/Modal/network/index.tsx b/services/frontend/src/components/Modal/network/index.tsx index f6a2698..4832e3c 100644 --- a/services/frontend/src/components/Modal/network/index.tsx +++ b/services/frontend/src/components/Modal/network/index.tsx @@ -1,10 +1,13 @@ -import { useState } from "react"; +import { useCallback, useState } from "react"; import { XIcon } from "@heroicons/react/outline"; import CreateNetworkModal from "./CreateNetworkModal"; import { CallbackFunction } from "../../../types"; import EditNetworkModal from "./EditNetworkModal"; import { attachUUID } from "../../../utils"; import { getFinalValues } from "./form-utils"; +import EmptyNetworks from "./EmptyNetworks"; +import NetworkList from "./NetworkList"; +import { styled } from "@mui/joy"; interface IModalNetworkProps { networks: Record; @@ -14,6 +17,16 @@ interface IModalNetworkProps { onHide: CallbackFunction; } +const Container = styled("div")` + display: flex; + flex-direction: row; +`; + +const NetworkFormContainer = styled("div")` + display: flex; + flex-direction: column; +`; + const ModalNetwork = (props: IModalNetworkProps) => { const { networks, @@ -23,6 +36,7 @@ const ModalNetwork = (props: IModalNetworkProps) => { onHide } = props; const [selectedNetwork, setSelectedNetwork] = useState(); + const [showCreate, setShowCreate] = useState(false); const handleCreate = (values: any) => { const finalValues = getFinalValues(values); const uniqueKey = attachUUID(finalValues.key); @@ -33,22 +47,38 @@ const ModalNetwork = (props: IModalNetworkProps) => { onCreateNetwork(network); setSelectedNetwork(network); }; + const handleUpdate = (values: any) => { const finalValues = getFinalValues(values, selectedNetwork); onUpdateNetwork(finalValues); setSelectedNetwork(finalValues); }; - const handleDelete = () => { - onDeleteNetwork(selectedNetwork.key); - setSelectedNetwork(null); - }; - const handleNew = () => { + + const handleRemove = useCallback( + (networkUuid: string) => { + onDeleteNetwork(networkUuid); + /* Show the new network form only when the selected node was deleted. */ + /* BUG: If a selected node is deleted, it still remains in the form. */ + if (selectedNetwork?.key === networkUuid) { + setSelectedNetwork(null); + } + }, + [onDeleteNetwork, selectedNetwork] + ); + + const handleNew = useCallback(() => { + setShowCreate(true); setSelectedNetwork(null); - }; - const onNetworkSelect = (e: any) => { - const networkUuid = e.target.value; - setSelectedNetwork(networks[networkUuid]); - }; + }, []); + + const handleEdit = useCallback( + (networkUuid: string) => { + setSelectedNetwork(networks[networkUuid]); + }, + [networks] + ); + + const networkKeys = Object.keys(networks); return (
@@ -60,7 +90,7 @@ const ModalNetwork = (props: IModalNetworkProps) => {
-

Add top level network

+

Networks

- {networks && Object.keys(networks).length > 0 && ( -
- + {networkKeys.length === 0 && !showCreate && ( + + )} - {selectedNetwork && ( - + {(networkKeys.length > 0 || showCreate) && ( + + {networkKeys.length > 0 && ( + )} -
- )} - {!selectedNetwork && ( - - )} + + {!selectedNetwork && ( + + )} - {selectedNetwork && ( - + {selectedNetwork && ( + + )} + + )}