mirror of https://github.com/ctk-hq/ctk
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
171 lines
4.4 KiB
TypeScript
171 lines
4.4 KiB
TypeScript
import { FunctionComponent, ReactElement } from "react";
|
|
import { styled } from "@mui/joy";
|
|
import TextField from "../../../global/FormElements/TextField";
|
|
import Records from "../../../Records";
|
|
|
|
const Root = styled("div")`
|
|
display: flex;
|
|
flex-direction: column;
|
|
row-gap: ${({ theme }) => theme.spacing(1)};
|
|
@media (max-width: 640px) {
|
|
row-gap: 0;
|
|
}
|
|
`;
|
|
|
|
const Group = styled("div")`
|
|
display: grid;
|
|
grid-template-columns: repeat(2, 1fr);
|
|
grid-column-gap: 0px;
|
|
grid-row-gap: 0px;
|
|
@media (max-width: 640px) {
|
|
grid-template-columns: repeat(1, 1fr);
|
|
}
|
|
column-gap: ${({ theme }) => theme.spacing(1)};
|
|
width: 100%;
|
|
`;
|
|
|
|
const Field = styled("div")`
|
|
width: 100%;
|
|
`;
|
|
|
|
const Remove = styled("div")`
|
|
margin-top: ${({ theme }) => theme.spacing(2)};
|
|
`;
|
|
|
|
const Configuration = styled("div")`
|
|
display: flex;
|
|
flex-direction: column;
|
|
row-gap: ${({ theme }) => theme.spacing(1)};
|
|
border-left: 4px solid #e0e8ff;
|
|
padding-left: 10px;
|
|
`;
|
|
|
|
const ConfigurationTop = styled("div")`
|
|
display: flex;
|
|
flex-direction: row;
|
|
@media (max-width: 640px) {
|
|
flex-direction: column;
|
|
}
|
|
column-gap: ${({ theme }) => theme.spacing(1)};
|
|
`;
|
|
|
|
const ConfigurationBorder = styled("div")`
|
|
height: 1px;
|
|
margin: 8px 0px 0px 0px;
|
|
`;
|
|
|
|
const IPAM: FunctionComponent = (): ReactElement => {
|
|
return (
|
|
<Root>
|
|
<Group>
|
|
<TextField label="Driver" name="driver" />
|
|
</Group>
|
|
|
|
<Records
|
|
name="configurations"
|
|
title="Configurations"
|
|
fields={(index: number) => [
|
|
{
|
|
name: `configurations[${index}].subnet`,
|
|
label: "Subnet",
|
|
type: "text"
|
|
},
|
|
{
|
|
name: `configurations[${index}].ipRange`,
|
|
label: "IP Range",
|
|
type: "text"
|
|
},
|
|
{
|
|
name: `configurations[${index}].gateway`,
|
|
label: "Gateway",
|
|
type: "text"
|
|
},
|
|
{
|
|
name: `configurations[${index}].auxAddresses`,
|
|
type: "records",
|
|
// TODO: Remove placeholder from the main object.
|
|
placeholder: "",
|
|
options: {
|
|
defaultOpen: true,
|
|
name: `configurations[${index}].auxAddresses`,
|
|
modal: "configuration",
|
|
title: "Aux addresses",
|
|
referred: "aux address",
|
|
fields: (index2: number) => [
|
|
{
|
|
name: `configurations[${index}].auxAddresses[${index2}].hostName`,
|
|
label: "Host name",
|
|
type: "text"
|
|
},
|
|
{
|
|
name: `configurations[${index}].auxAddresses[${index2}].ipAddress`,
|
|
label: "IP address",
|
|
type: "text"
|
|
}
|
|
],
|
|
newValue: {
|
|
hostName: "",
|
|
ipAddress: ""
|
|
},
|
|
renderField: (element: ReactElement): ReactElement => (
|
|
<Field>{element}</Field>
|
|
),
|
|
renderRemove: (element: ReactElement): ReactElement => (
|
|
<Remove>{element}</Remove>
|
|
)
|
|
}
|
|
}
|
|
]}
|
|
newValue={{
|
|
subnet: "",
|
|
ipRange: "",
|
|
gateway: "",
|
|
auxAddresses: []
|
|
}}
|
|
renderLayout={(elements: ReactElement[]): ReactElement => (
|
|
<Configuration>
|
|
<ConfigurationTop>
|
|
{elements[0]}
|
|
{elements[1]}
|
|
{elements[2]}
|
|
</ConfigurationTop>
|
|
{elements[3]}
|
|
</Configuration>
|
|
)}
|
|
renderField={(element: ReactElement): ReactElement => (
|
|
<Field>{element}</Field>
|
|
)}
|
|
renderRemove={(element: ReactElement): ReactElement => (
|
|
<Remove>{element}</Remove>
|
|
)}
|
|
renderBorder={() => <ConfigurationBorder />}
|
|
/>
|
|
|
|
<Records
|
|
name="options"
|
|
title="Options"
|
|
fields={(index: number) => [
|
|
{
|
|
name: `options[${index}].key`,
|
|
placeholder: "Key",
|
|
required: true,
|
|
type: "text"
|
|
},
|
|
{
|
|
name: `options[${index}].value`,
|
|
placeholder: "Value",
|
|
required: true,
|
|
type: "text"
|
|
}
|
|
]}
|
|
newValue={{ key: "", value: "" }}
|
|
renderField={(element: ReactElement): ReactElement => (
|
|
<Field>{element}</Field>
|
|
)}
|
|
/>
|
|
</Root>
|
|
);
|
|
};
|
|
|
|
export default IPAM;
|