From f065f12b0de07a79b5afacbfc9ca0ef4f28eb1e6 Mon Sep 17 00:00:00 2001
From: "CTFang@WireLab" <ctfang.cs12@nycu.edu.tw>
Date: Thu, 28 Mar 2024 06:37:44 +0000
Subject: [PATCH] feat: frontend set staticIp UI

---
 frontend/src/pages/SubscriberCreate.tsx | 63 +++++++++++++++++++++++++
 1 file changed, 63 insertions(+)

diff --git a/frontend/src/pages/SubscriberCreate.tsx b/frontend/src/pages/SubscriberCreate.tsx
index 4a6a918..01dcd64 100644
--- a/frontend/src/pages/SubscriberCreate.tsx
+++ b/frontend/src/pages/SubscriberCreate.tsx
@@ -9,6 +9,7 @@ import {
   DnnConfiguration,
   AccessAndMobilitySubscriptionData,
   QosFlows,
+  IpAddress,
 } from "../api/api";
 
 import Dashboard from "../Dashboard";
@@ -28,7 +29,10 @@ import {
   TableCell,
   TableRow,
   TextField,
+  FormControlLabel,
+  Switch,
 } from "@mui/material";
+import { RawOff } from "@mui/icons-material";
 
 let isNewSubscriber = false;
 
@@ -117,6 +121,7 @@ export default function SubscriberCreate() {
               uplink: "1000 Mbps",
               downlink: "1000 Mbps",
             },
+            staticIpAddress: [],
           },
         },
       },
@@ -148,6 +153,7 @@ export default function SubscriberCreate() {
               uplink: "1000 Mbps",
               downlink: "1000 Mbps",
             },
+            staticIpAddress: [],
           },
         },
       },
@@ -997,6 +1003,17 @@ export default function SubscriberCreate() {
     setData({ ...data });
   };
 
+  const handleChangeStaticIp = (
+    event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,
+    index: number,
+    dnn: string,
+  ): void => {
+    data.SessionManagementSubscriptionData![index].dnnConfigurations![dnn][
+      "staticIpAddress"
+    ]![0].ipv4Addr = event.target.value;
+    setData({ ...data });
+  };
+
   const handleChangeFilter = (
     event: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,
     dnn: string,
@@ -1854,6 +1871,52 @@ export default function SubscriberCreate() {
                           </TableRow>
                         </TableBody>
                       </Table>
+                      <Table>
+                        <TableBody>
+                          <TableRow>
+                            <TableCell style={{ width: "33%" }}>
+                              <FormControlLabel
+                                style={{ justifyItems: "end" }}
+                                control=<Switch
+                                  checked={
+                                    row.dnnConfigurations![dnn]["staticIpAddress"]?.length != 0
+                                  }
+                                  onChange={(event) => {
+                                    if (event.target.checked) {
+                                      var ipaddr: IpAddress = { ipv4Addr: "10.60.0.1" };
+                                      data.SessionManagementSubscriptionData![
+                                        index
+                                      ].dnnConfigurations![dnn]["staticIpAddress"] = [ipaddr];
+                                    } else {
+                                      data.SessionManagementSubscriptionData![
+                                        index
+                                      ].dnnConfigurations![dnn]["staticIpAddress"] = [];
+                                    }
+                                    setData({ ...data });
+                                  }}
+                                />
+                                label="Static IPv4 Address"
+                              />
+                            </TableCell>
+                            <TableCell style={{ width: "66%" }}>
+                              <TextField
+                                label="StaticIpv4"
+                                variant="outlined"
+                                fullWidth
+                                disabled={
+                                  row.dnnConfigurations![dnn]["staticIpAddress"]?.length == 0
+                                }
+                                value={
+                                  row.dnnConfigurations![dnn]["staticIpAddress"]?.length != 0
+                                    ? row.dnnConfigurations![dnn]["staticIpAddress"]![0].ipv4Addr!
+                                    : ""
+                                }
+                                onChange={(ev) => handleChangeStaticIp(ev, index, dnn)}
+                              />
+                            </TableCell>
+                          </TableRow>
+                        </TableBody>
+                      </Table>
 
                       {chargingConfig(dnn, row.singleNssai!, undefined)}
 
-- 
GitLab