diff --git a/services/frontend/src/components/Modal/Service/Create.tsx b/services/frontend/src/components/Modal/Service/Create.tsx index 09cf94a..dfe9f53 100644 --- a/services/frontend/src/components/Modal/Service/Create.tsx +++ b/services/frontend/src/components/Modal/Service/Create.tsx @@ -24,7 +24,8 @@ const ModalServiceCreate = (props: IModalServiceProps) => { }, serviceConfig: { container_name: "", - labels: [] + labels: [], + environmentVariables: [] }, key: "service", type: "SERVICE", diff --git a/services/frontend/src/components/Modal/Service/Edit.tsx b/services/frontend/src/components/Modal/Service/Edit.tsx index 5f1a9d9..478712a 100644 --- a/services/frontend/src/components/Modal/Service/Edit.tsx +++ b/services/frontend/src/components/Modal/Service/Edit.tsx @@ -30,7 +30,8 @@ const ModalServiceEdit = (props: IModalServiceProps) => { }, serviceConfig: { container_name: "", - labels: [] + labels: [], + environmentVariables: [] } }, onSubmit: () => undefined diff --git a/services/frontend/src/components/Modal/Service/Environment.tsx b/services/frontend/src/components/Modal/Service/Environment.tsx index f68aaa3..5dc33f5 100644 --- a/services/frontend/src/components/Modal/Service/Environment.tsx +++ b/services/frontend/src/components/Modal/Service/Environment.tsx @@ -1,6 +1,98 @@ -const Environment = (props: any) => { +import { PlusIcon } from "@heroicons/react/outline"; +import Record from "../../Record"; +import { Button } from "@mui/joy"; +import { styled } from "@mui/joy"; +import { useCallback } from "react"; + +const Root = styled("div")` + display: flex; + flex-direction: column; +`; + +const Records = styled("div")` + display: flex; + flex-direction: column; + row-gap: ${({ theme }) => theme.spacing(1)}; +`; + +const AddButton = styled(Button)` + width: 140px; + margin-top: ${({ theme }) => theme.spacing(2)}; +`; + +const EnvironmentVariables = (props: any) => { const { formik } = props; - return <>; + const { environmentVariables } = formik.values.serviceConfig; + + const handleNewEnvironmentVariable = useCallback(() => { + formik.setFieldValue( + `serviceConfig.environmentVariables[${environmentVariables.length}]`, + { + key: "", + value: "" + } + ); + }, [formik]); + + const handleRemoveEnvironmentVariable = useCallback( + (index: number) => { + const newEnvironmentVariables = environmentVariables.filter( + (_: unknown, currentIndex: number) => currentIndex != index + ); + formik.setFieldValue( + `serviceConfig.environmentVariables`, + newEnvironmentVariables + ); + }, + [formik] + ); + + const emptyEnvironmentVariables = environmentVariables.length === 0; + + return ( + + {!emptyEnvironmentVariables && ( + + {environmentVariables.map((_: unknown, index: number) => ( + + ))} + + )} + {emptyEnvironmentVariables && ( +

+ The service does not have any environment variables. +
+ Click "+ New Variable" to add a new environment variable. +

+ )} + + + + New Variable + +
+ ); }; -export default Environment; +export default EnvironmentVariables; diff --git a/services/frontend/src/components/Modal/Service/Labels.tsx b/services/frontend/src/components/Modal/Service/Labels.tsx index 1e24306..95e571c 100644 --- a/services/frontend/src/components/Modal/Service/Labels.tsx +++ b/services/frontend/src/components/Modal/Service/Labels.tsx @@ -3,7 +3,6 @@ import Record from "../../Record"; import { Button } from "@mui/joy"; import { styled } from "@mui/joy"; import { useCallback } from "react"; -import lodash from "lodash"; const Root = styled("div")` display: flex; @@ -49,7 +48,7 @@ const Labels = (props: any) => { {!emptyLabels && ( - {labels.map((label: unknown, index: number) => ( + {labels.map((_: unknown, index: number) => (