diff --git a/services/frontend/src/components/Canvas/NodeIcon.tsx b/services/frontend/src/components/Canvas/NodeIcon.tsx
new file mode 100644
index 0000000..a1997d4
--- /dev/null
+++ b/services/frontend/src/components/Canvas/NodeIcon.tsx
@@ -0,0 +1,28 @@
+import { DatabaseIcon, ServerIcon, ChipIcon } from "@heroicons/react/solid";
+
+type NodeIconProps = {
+ nodeType: string;
+};
+
+const NodeIcon = ({ nodeType }: NodeIconProps) => {
+ switch (nodeType) {
+ case "SERVICE":
+ return (
+
+ );
+ case "VOLUME":
+ return (
+
+ );
+ case "NETWORK":
+ return (
+
+ );
+ default:
+ return (
+
+ );
+ }
+};
+
+export default NodeIcon;
diff --git a/services/frontend/src/components/Canvas/ServiceNode.tsx b/services/frontend/src/components/Canvas/ServiceNode.tsx
index cbd3d71..4865a36 100644
--- a/services/frontend/src/components/Canvas/ServiceNode.tsx
+++ b/services/frontend/src/components/Canvas/ServiceNode.tsx
@@ -1,9 +1,9 @@
import { useEffect, useState } from "react";
-import { ServerIcon } from "@heroicons/react/outline";
import { truncateStr } from "../../utils";
import { IServiceNodeItem, CallbackFunction } from "../../types";
import eventBus from "../../events/eventBus";
import { Popover } from "./Popover";
+import NodeIcon from "./NodeIcon";
interface INodeProps {
node: IServiceNodeItem;
@@ -56,9 +56,9 @@ export default function ServiceNode(props: INodeProps) {
)}
<>
- {node.canvasConfig.service_name && (
+ {node.canvasConfig.node_name && (
- {truncateStr(node.canvasConfig.service_name, 12)}
+ {truncateStr(node.canvasConfig.node_name, 12)}
)}
@@ -68,7 +68,7 @@ export default function ServiceNode(props: INodeProps) {
)}
-
+
>
diff --git a/services/frontend/src/components/Canvas/VolumeNode.tsx b/services/frontend/src/components/Canvas/VolumeNode.tsx
index 759f2dd..781e962 100644
--- a/services/frontend/src/components/Canvas/VolumeNode.tsx
+++ b/services/frontend/src/components/Canvas/VolumeNode.tsx
@@ -1,9 +1,9 @@
import { useEffect, useState } from "react";
-import { DatabaseIcon } from "@heroicons/react/outline";
import { truncateStr } from "../../utils";
import { IVolumeNodeItem, CallbackFunction } from "../../types";
import eventBus from "../../events/eventBus";
import { Popover } from "./Popover";
+import NodeIcon from "./NodeIcon";
interface INodeProps {
node: IVolumeNodeItem;
@@ -62,7 +62,7 @@ export default function VolumeNode(props: INodeProps) {
)}
-
+
>
diff --git a/services/frontend/src/components/Modal/Service/Create.tsx b/services/frontend/src/components/Modal/Service/Create.tsx
index aba5516..87a86cd 100644
--- a/services/frontend/src/components/Modal/Service/Create.tsx
+++ b/services/frontend/src/components/Modal/Service/Create.tsx
@@ -7,7 +7,7 @@ import Environment from "./Environment";
import Volumes from "./Volumes";
import Labels from "./Labels";
import { serviceConfigCanvasInitialValues } from "../../../utils";
-import { CallbackFunction } from "../../../types";
+import { CallbackFunction, ICanvasConfig, IService } from "../../../types";
interface IModalServiceProps {
onHide: CallbackFunction;
@@ -18,12 +18,13 @@ const ModalServiceCreate = (props: IModalServiceProps) => {
const { onHide, onAddEndpoint } = props;
const [openTab, setOpenTab] = useState("General");
const handleCreate = (values: any, formik: any) => {
+ console.log(values);
onAddEndpoint(values);
formik.resetForm();
};
const validationSchema = yup.object({
canvasConfig: yup.object({
- service_name: yup
+ node_name: yup
.string()
.max(256, "service name should be 256 characters or less")
.required("service name is required")
@@ -102,6 +103,7 @@ const ModalServiceCreate = (props: IModalServiceProps) => {
}}
enableReinitialize={true}
onSubmit={(values, formik) => {
+ console.log(values);
handleCreate(values, formik);
}}
validationSchema={validationSchema}
@@ -147,8 +149,7 @@ const ModalServiceCreate = (props: IModalServiceProps) => {
className="btn-util"
type="button"
onClick={() => {
- onAddEndpoint(formik.values);
- formik.resetForm();
+ formik.submitForm();
}}
>
Add
diff --git a/services/frontend/src/components/Modal/Service/Edit.tsx b/services/frontend/src/components/Modal/Service/Edit.tsx
index baa8699..8077b4f 100644
--- a/services/frontend/src/components/Modal/Service/Edit.tsx
+++ b/services/frontend/src/components/Modal/Service/Edit.tsx
@@ -32,7 +32,7 @@ const ModalServiceEdit = (props: IModalServiceProps) => {
};
const validationSchema = yup.object({
canvasConfig: yup.object({
- service_name: yup
+ node_name: yup
.string()
.max(256, "service name should be 256 characters or less")
.required("service name is required")
diff --git a/services/frontend/src/components/Modal/Service/General.tsx b/services/frontend/src/components/Modal/Service/General.tsx
index 40b26e4..961fd71 100644
--- a/services/frontend/src/components/Modal/Service/General.tsx
+++ b/services/frontend/src/components/Modal/Service/General.tsx
@@ -3,7 +3,7 @@ import TextField from "../../global/FormElements/InputField";
const General = () => {
return (
<>
-
+
>
);
diff --git a/services/frontend/src/components/Modal/Volume/Create.tsx b/services/frontend/src/components/Modal/Volume/Create.tsx
index 6d8ef0c..ec40630 100644
--- a/services/frontend/src/components/Modal/Volume/Create.tsx
+++ b/services/frontend/src/components/Modal/Volume/Create.tsx
@@ -4,7 +4,10 @@ import * as yup from "yup";
import { XIcon } from "@heroicons/react/outline";
import General from "./General";
import Labels from "./Labels";
-import { topLevelVolumeConfigInitialValues } from "../../../utils";
+import {
+ topLevelVolumeConfigInitialValues,
+ volumeConfigCanvasInitialValues
+} from "../../../utils";
import { CallbackFunction } from "../../../types";
interface IModalVolumeCreate {
@@ -68,6 +71,9 @@ const ModalVolumeCreate = (props: IModalVolumeCreate) => {
{
return key + "-" + uuidv4();
};
+export const setNodeIcon = (nodeType: string) => {
+ switch (nodeType) {
+ case "service":
+ return "ServerIcon";
+ case "volume":
+ return "DatabaseIcon";
+ case "network":
+ return "ChipIcon";
+ default:
+ return "ServerIcon";
+ }
+};
+
export const getClientNodeItem = (
nodeItem: IServiceNodeItem,
library: INodeLibraryItem
): IServiceNodeItem => {
const uniqueKey = attachUUID(nodeItem.key);
+ if (
+ nodeItem.canvasConfig.node_icon &&
+ nodeItem.canvasConfig.node_icon.length === 0
+ ) {
+ nodeItem.canvasConfig.node_icon = setNodeIcon(nodeItem.type);
+ }
+
return {
...nodeItem,
key: uniqueKey,
@@ -188,9 +208,16 @@ export const topLevelNetworkConfigInitialValues =
};
};
+export const volumeConfigCanvasInitialValues = (): ICanvasConfig => {
+ return {
+ node_icon: ""
+ };
+};
+
export const serviceConfigCanvasInitialValues = (): ICanvasConfig => {
return {
- service_name: "unnamed"
+ node_name: "unnamed",
+ node_icon: ""
};
};