feat(frontend): updated `ModelServiceEdit` component to use form utilities

pull/75/head
Samuel Rowe 3 years ago
parent 898f9246f5
commit cae905bf4e

@ -1,19 +1,15 @@
import { useState, useEffect } from "react"; import { useState, useEffect, useMemo } from "react";
import { Formik } from "formik"; import { Formik } from "formik";
import * as yup from "yup";
import { XIcon } from "@heroicons/react/outline"; import { XIcon } from "@heroicons/react/outline";
import General from "./General"; import General from "./General";
import Environment from "./Environment"; import Environment from "./Environment";
import Volumes from "./Volumes"; import Volumes from "./Volumes";
import Labels from "./Labels"; import Labels from "./Labels";
import { import type { CallbackFunction, IServiceNodeItem } from "../../../types";
CallbackFunction, import { getInitialValues, validationSchema } from "./form-utils";
ICanvasConfig,
IService,
IServiceNodeItem
} from "../../../types";
interface IModalServiceProps { export interface IModalServiceProps {
node: IServiceNodeItem; node: IServiceNodeItem;
onHide: CallbackFunction; onHide: CallbackFunction;
onUpdateEndpoint: CallbackFunction; onUpdateEndpoint: CallbackFunction;
@ -25,25 +21,13 @@ const ModalServiceEdit = (props: IModalServiceProps) => {
const [selectedNode, setSelectedNode] = useState<IServiceNodeItem>(); const [selectedNode, setSelectedNode] = useState<IServiceNodeItem>();
const handleUpdate = (values: any) => { const handleUpdate = (values: any) => {
// TODO
const updated = { ...selectedNode }; const updated = { ...selectedNode };
updated.canvasConfig = values.canvasConfig; updated.canvasConfig = values.canvasConfig;
updated.serviceConfig = values.serviceConfig; updated.serviceConfig = values.serviceConfig;
onUpdateEndpoint(updated); onUpdateEndpoint(updated);
}; };
const validationSchema = yup.object({
canvasConfig: yup.object({
node_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 = [ const tabs = [
{ {
name: "General", name: "General",
@ -70,6 +54,12 @@ const ModalServiceEdit = (props: IModalServiceProps) => {
hidden: false hidden: false
} }
]; ];
const initialValues = useMemo(
() => getInitialValues(selectedNode),
[selectedNode]
);
const classNames = (...classes: string[]) => { const classNames = (...classes: string[]) => {
return classes.filter(Boolean).join(" "); return classes.filter(Boolean).join(" ");
}; };
@ -103,18 +93,9 @@ const ModalServiceEdit = (props: IModalServiceProps) => {
{selectedNode && ( {selectedNode && (
<Formik <Formik
initialValues={{ initialValues={initialValues}
canvasConfig: {
...selectedNode.canvasConfig
} as ICanvasConfig,
serviceConfig: {
...selectedNode.serviceConfig
} as IService
}}
enableReinitialize={true} enableReinitialize={true}
onSubmit={(values) => { onSubmit={handleUpdate}
handleUpdate(values);
}}
validationSchema={validationSchema} validationSchema={validationSchema}
> >
{(formik) => ( {(formik) => (

Loading…
Cancel
Save