import { useState, useCallback, useContext } from "react"; import { Button, Box, Stack, Typography } from "@mui/material"; import { ConfigBox } from "../../../Pages/Uptime/styled"; import { useTheme } from "@emotion/react"; import TabPanel from "@mui/lab/TabPanel"; import { publicPageGeneralSettingsValidation } from "../../../Validation/validation"; import { buildErrors } from "../../../Validation/error"; import Card from "./Card"; import update from "immutability-helper"; import Checkbox from "../../Inputs/Checkbox"; import { StatusFormContext } from "../../../Pages/Status/CreateStatusContext"; const ContentPanel = () => { const theme = useTheme(); const { form, setForm, errors, setErrors } = useContext(StatusFormContext); const [cards, setCards] = useState(form.monitors); const moveCard = useCallback( (dragIndex, hoverIndex) => { const dragCard = cards[dragIndex]; setCards( update(cards, { $splice: [ [dragIndex, 1], [hoverIndex, 0, dragCard], ], }) ); }, [cards] ); const handleChange = (event) => { event.preventDefault(); const { value, id } = event.target; setForm((prev) => ({ ...prev, [id]: value, })); }; const handleCardChange = (event) => { event.preventDefault(); const { value, id } = event.target; let idx = cards.findIndex((a) => a.id == id); if (idx >= 0) { let x = JSON.parse(JSON.stringify(cards[idx])); x.url = value; setCards(update(cards, { $splice: [[idx, 1, x]] })); } else setCards(update(cards, { $push: [{ id: id, url: value }] })); } const handleAddNew = () => { setCards([...cards, { id: "" + Math.random() }]); }; const removeCard = (id) => { setCards(cards.filter((c) => c?.id != id)); }; const handleBlur = (event) => { event.preventDefault(); const { value, id } = event.target; const { error } = publicPageGeneralSettingsValidation.validate( { [id]: value }, { abortEarly: false, } ); setErrors((prev) => { return buildErrors(prev, id, error); }); }; return ( Status page servers You can add any number of servers that you monitor to your status page. You can also reorder them for the best viewing experience. {" "} Servers list{" "} {cards.length > 0 && ( {cards.map((card, idx) => ( ))} )} Features Show more details on the status page ); }; export default ContentPanel;