develop #9

Merged
TobaOjo merged 5 commits from develop into main 2025-11-12 09:50:18 +00:00
4 changed files with 65 additions and 3 deletions
Showing only changes of commit 2ccc26ebdc - Show all commits

View File

@@ -6,7 +6,6 @@ const ModemCard = () => {
return ( return (
<Card className="p-4"> <Card className="p-4">
<CardHeader title={"Modem"} /> <CardHeader title={"Modem"} />
<ModemSettings /> <ModemSettings />
</Card> </Card>
); );

View File

@@ -6,6 +6,8 @@ import { useEffect, useState } from "react";
import ModemToggle from "./ModemToggle"; import ModemToggle from "./ModemToggle";
import { faEyeSlash, faEye } from "@fortawesome/free-solid-svg-icons"; import { faEyeSlash, faEye } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { ValidateIPaddress } from "../../../utils/utils";
import { toast, Toaster } from "sonner";
const ModemSettings = () => { const ModemSettings = () => {
const [showSettings, setShowSettings] = useState(false); const [showSettings, setShowSettings] = useState(false);
@@ -16,6 +18,8 @@ const ModemSettings = () => {
const username = modemQuery?.data?.propUsername.value; const username = modemQuery?.data?.propUsername.value;
const password = modemQuery?.data?.propPassword?.value; const password = modemQuery?.data?.propPassword?.value;
const mode = modemQuery?.data?.propMode?.value; const mode = modemQuery?.data?.propMode?.value;
const serverPrimary = modemQuery?.data?.propNameServerPrimary?.value;
const serverSecondary = modemQuery?.data?.propNameServerSecondary?.value;
useEffect(() => { useEffect(() => {
setShowSettings(mode === "AUTO"); setShowSettings(mode === "AUTO");
@@ -26,6 +30,8 @@ const ModemSettings = () => {
username: username ?? "", username: username ?? "",
password: password ?? "", password: password ?? "",
authenticationType: "PAP", authenticationType: "PAP",
serverPrimary: serverPrimary ?? "",
serverSecondary: serverSecondary ?? "",
}; };
const handleSubmit = async (values: ModemSettingsType) => { const handleSubmit = async (values: ModemSettingsType) => {
@@ -49,9 +55,24 @@ const ModemSettings = () => {
property: "propMode", property: "propMode",
value: showSettings ? "AUTO" : "MANUAL", value: showSettings ? "AUTO" : "MANUAL",
}, },
{
property: "propNameServerPrimary",
value: values.serverPrimary,
},
{
property: "propNameServerSecondary",
value: values.serverSecondary,
},
], ],
}; };
await modemMutation.mutateAsync(modemConfig);
const response = await modemMutation.mutateAsync(modemConfig);
if (response?.id) {
toast.success("Modem settings updated successfully", {
id: "modemSettings",
});
}
}; };
return ( return (
@@ -107,9 +128,35 @@ const ModemSettings = () => {
/> />
</div> </div>
</FormGroup> </FormGroup>
<FormGroup>
<label htmlFor="serverPrimary" className="font-medium whitespace-nowrap md:w-2/3">
Name server primary
</label>
<Field
placeholder="Enter Server primary"
name="serverPrimary"
id="serverPrimary"
type="text"
className="p-1.5 border border-gray-400 rounded-lg"
validate={ValidateIPaddress}
/>
</FormGroup>
<FormGroup>
<label htmlFor="serverSecondary" className="font-medium whitespace-nowrap md:w-2/3">
Name server secondary
</label>
<Field
placeholder="Enter Server secondary"
name="serverSecondary"
id="serverSecondary"
type="text"
className="p-1.5 border border-gray-400 rounded-lg"
validate={ValidateIPaddress}
/>
</FormGroup>
<FormGroup> <FormGroup>
<label htmlFor="password" className="font-medium whitespace-nowrap md:w-2/3"> <label htmlFor="password" className="font-medium whitespace-nowrap md:w-2/3">
Password Authentication Type
</label> </label>
<Field <Field
name="authenticationType" name="authenticationType"
@@ -132,6 +179,7 @@ const ModemSettings = () => {
</Form> </Form>
)} )}
</Formik> </Formik>
<Toaster />
</> </>
); );
}; };

View File

@@ -403,6 +403,8 @@ export type ModemSettingsType = {
username: string; username: string;
password: string; password: string;
authenticationType: string; authenticationType: string;
serverPrimary: string;
serverSecondary: string;
}; };
export type HitKind = "NPED" | "HOTLIST"; export type HitKind = "NPED" | "HOTLIST";

View File

@@ -184,3 +184,16 @@ export const reverseZoomMapping = (magnification: string) => {
break; break;
} }
}; };
export function ValidateIPaddress(ipaddress: string) {
if (!ipaddress) {
return undefined;
} else if (
!/^(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(
ipaddress
)
) {
return "Invalid IP";
}
return undefined;
}