diff --git a/services/frontend/src/components/Modal/Service/Create.tsx b/services/frontend/src/components/Modal/Service/Create.tsx
index 3315933..aba5516 100644
--- a/services/frontend/src/components/Modal/Service/Create.tsx
+++ b/services/frontend/src/components/Modal/Service/Create.tsx
@@ -1,5 +1,6 @@
import { useState } from "react";
-import { useFormik } from "formik";
+import { Formik } from "formik";
+import * as yup from "yup";
import { XIcon } from "@heroicons/react/outline";
import General from "./General";
import Environment from "./Environment";
@@ -16,22 +17,23 @@ interface IModalServiceProps {
const ModalServiceCreate = (props: IModalServiceProps) => {
const { onHide, onAddEndpoint } = props;
const [openTab, setOpenTab] = useState("General");
-
- const formik = useFormik({
- initialValues: {
- canvasConfig: {
- ...serviceConfigCanvasInitialValues()
- },
- serviceConfig: {
- container_name: ""
- },
- key: "service",
- type: "SERVICE",
- inputs: ["op_source"],
- outputs: [],
- config: {}
- },
- onSubmit: () => undefined
+ const handleCreate = (values: any, formik: any) => {
+ onAddEndpoint(values);
+ formik.resetForm();
+ };
+ const validationSchema = yup.object({
+ canvasConfig: yup.object({
+ service_name: yup
+ .string()
+ .max(256, "service name should be 256 characters or less")
+ .required("service name is required")
+ }),
+ serviceConfig: yup.object({
+ container_name: yup
+ .string()
+ .max(256, "container name should be 256 characters or less")
+ .required("container name is required")
+ })
});
const tabs = [
{
@@ -84,56 +86,77 @@ const ModalServiceCreate = (props: IModalServiceProps) => {
-
-
+
{
+ handleCreate(values, formik);
+ }}
+ validationSchema={validationSchema}
+ >
+ {(formik) => (
+ <>
+
-
-
-
-
+
+ {openTab === "General" && }
+ {openTab === "Environment" && }
+ {openTab === "Volumes" && }
+ {openTab === "Labels" && }
+
-
-
-
+
+
+
+ >
+ )}
+
diff --git a/services/frontend/src/components/Modal/Service/Edit.tsx b/services/frontend/src/components/Modal/Service/Edit.tsx
index 2eb49be..0001646 100644
--- a/services/frontend/src/components/Modal/Service/Edit.tsx
+++ b/services/frontend/src/components/Modal/Service/Edit.tsx
@@ -1,17 +1,12 @@
import { useState, useEffect } from "react";
-import { useFormik } from "formik";
+import { Formik } from "formik";
+import * as yup from "yup";
import { XIcon } from "@heroicons/react/outline";
import General from "./General";
import Environment from "./Environment";
import Volumes from "./Volumes";
import Labels from "./Labels";
-import { serviceConfigCanvasInitialValues } from "../../../utils";
-import {
- CallbackFunction,
- ICanvasConfig,
- IServiceNodeItem,
- IService
-} from "../../../types";
+import { CallbackFunction, IServiceNodeItem } from "../../../types";
interface IModalServiceProps {
node: IServiceNodeItem;
@@ -23,16 +18,26 @@ const ModalServiceEdit = (props: IModalServiceProps) => {
const { node, onHide, onUpdateEndpoint } = props;
const [openTab, setOpenTab] = useState("General");
const [selectedNode, setSelectedNode] = useState();
- const formik = useFormik({
- initialValues: {
- canvasConfig: {
- ...serviceConfigCanvasInitialValues()
- },
- serviceConfig: {
- container_name: ""
- }
- },
- onSubmit: () => undefined
+
+ const handleUpdate = (values: any) => {
+ const updated = { ...selectedNode };
+ updated.canvasConfig = values.canvasConfig;
+ updated.serviceConfig = values.serviceConfig;
+ onUpdateEndpoint(updated);
+ };
+ const validationSchema = yup.object({
+ canvasConfig: yup.object({
+ service_name: yup
+ .string()
+ .max(256, "service name should be 256 characters or less")
+ .required("service name is required")
+ }),
+ serviceConfig: yup.object({
+ container_name: yup
+ .string()
+ .max(256, "container name should be 256 characters or less")
+ .required("container name is required")
+ })
});
const tabs = [
{
@@ -70,25 +75,6 @@ const ModalServiceEdit = (props: IModalServiceProps) => {
}
}, [node]);
- useEffect(() => {
- formik.resetForm();
-
- if (selectedNode) {
- formik.initialValues.canvasConfig = {
- ...selectedNode.canvasConfig
- } as ICanvasConfig;
- formik.initialValues.serviceConfig = {
- ...selectedNode.serviceConfig
- } as IService;
- }
- }, [selectedNode]);
-
- useEffect(() => {
- return () => {
- formik.resetForm();
- };
- }, []);
-
return (
@@ -110,58 +96,76 @@ const ModalServiceEdit = (props: IModalServiceProps) => {
-
-
-
-
-
+ {(formik) => (
+ <>
+
+
+
+ {openTab === "General" && }
+ {openTab === "Environment" && }
+ {openTab === "Volumes" && }
+ {openTab === "Labels" && }
+
+
+
+
+
+ >
+ )}
+
+ )}
diff --git a/services/frontend/src/components/Modal/Service/Environment.tsx b/services/frontend/src/components/Modal/Service/Environment.tsx
index f68aaa3..066dfb9 100644
--- a/services/frontend/src/components/Modal/Service/Environment.tsx
+++ b/services/frontend/src/components/Modal/Service/Environment.tsx
@@ -1,6 +1,5 @@
-const Environment = (props: any) => {
- const { formik } = props;
-
+const Environment = () => {
return <>>;
};
+
export default Environment;
diff --git a/services/frontend/src/components/Modal/Service/General.tsx b/services/frontend/src/components/Modal/Service/General.tsx
index 3ae0c59..40b26e4 100644
--- a/services/frontend/src/components/Modal/Service/General.tsx
+++ b/services/frontend/src/components/Modal/Service/General.tsx
@@ -1,56 +1,12 @@
-const General = (props: any) => {
- const { formik } = props;
+import TextField from "../../global/FormElements/InputField";
+const General = () => {
return (
<>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
>
);
};
+
export default General;
diff --git a/services/frontend/src/components/Modal/Service/Labels.tsx b/services/frontend/src/components/Modal/Service/Labels.tsx
index 9838a34..12d9e27 100644
--- a/services/frontend/src/components/Modal/Service/Labels.tsx
+++ b/services/frontend/src/components/Modal/Service/Labels.tsx
@@ -1,6 +1,5 @@
-const Labels = (props: any) => {
- const { formik } = props;
-
+const Labels = () => {
return <>>;
};
+
export default Labels;
diff --git a/services/frontend/src/components/Modal/Service/Volumes.tsx b/services/frontend/src/components/Modal/Service/Volumes.tsx
index 8ed7f94..054bed2 100644
--- a/services/frontend/src/components/Modal/Service/Volumes.tsx
+++ b/services/frontend/src/components/Modal/Service/Volumes.tsx
@@ -1,6 +1,5 @@
-const Volumes = (props: any) => {
- const { formik } = props;
-
+const Volumes = () => {
return <>>;
};
+
export default Volumes;
diff --git a/services/frontend/src/components/Modal/Volume/Create.tsx b/services/frontend/src/components/Modal/Volume/Create.tsx
index 62cfe5b..6d8ef0c 100644
--- a/services/frontend/src/components/Modal/Volume/Create.tsx
+++ b/services/frontend/src/components/Modal/Volume/Create.tsx
@@ -15,7 +15,7 @@ interface IModalVolumeCreate {
const ModalVolumeCreate = (props: IModalVolumeCreate) => {
const { onHide, onAddEndpoint } = props;
const [openTab, setOpenTab] = useState("General");
- const handleSave = (values: any, formik: any) => {
+ const handleCreate = (values: any, formik: any) => {
onAddEndpoint(values);
formik.resetForm();
};
@@ -79,7 +79,7 @@ const ModalVolumeCreate = (props: IModalVolumeCreate) => {
}}
enableReinitialize={true}
onSubmit={(values, formik) => {
- handleSave(values, formik);
+ handleCreate(values, formik);
}}
validationSchema={validationSchema}
>