diff --git a/client/src/Pages/StatusPage/Create/Components/HeaderConfigStatusControls.tsx b/client/src/Pages/StatusPage/Create/Components/HeaderConfigStatusControls.tsx index f628fd00d..99ae46cdd 100644 --- a/client/src/Pages/StatusPage/Create/Components/HeaderConfigStatusControls.tsx +++ b/client/src/Pages/StatusPage/Create/Components/HeaderConfigStatusControls.tsx @@ -1,12 +1,10 @@ import Stack from "@mui/material/Stack"; -import { Icon, MonitorStatus } from "@/Components/v2/design-elements"; +import { Icon } from "@/Components/v2/design-elements"; import { Button } from "@/Components/v2/inputs"; import { Trash } from "lucide-react"; import { useTranslation } from "react-i18next"; -import { useNavigate } from "react-router-dom"; import { useTheme } from "@mui/material/styles"; -import { usePost } from "@/Hooks/UseApi"; interface HeaderConfigStatusControlsProps { onDelete: () => void; diff --git a/client/src/Pages/StatusPage/Create/index.tsx b/client/src/Pages/StatusPage/Create/index.tsx index f8695ae80..83286277b 100644 --- a/client/src/Pages/StatusPage/Create/index.tsx +++ b/client/src/Pages/StatusPage/Create/index.tsx @@ -13,16 +13,17 @@ import { TextField, Autocomplete, Checkbox, + Dialog, } from "@/Components/v2/inputs"; import { useTheme } from "@mui/material/styles"; import { useTranslation } from "react-i18next"; -import { useEffect } from "react"; +import { useEffect, useState } from "react"; import { useForm, Controller } from "react-hook-form"; import { zodResolver } from "@hookform/resolvers/zod"; import { useStatusPageForm } from "@/Hooks/useStatusPageForm"; import type { StatusPageFormData } from "@/Validation/statusPage"; -import { useGet, usePost, usePut } from "@/Hooks/UseApi"; +import { useGet, usePost, usePut, useDelete } from "@/Hooks/UseApi"; import type { Monitor } from "@/Types/Monitor"; import type { StatusPageResponse } from "@/Types/StatusPage"; import timezones from "@/Utils/timezones.json"; @@ -55,6 +56,10 @@ const CreateStatusPage = () => { const { post, loading: isSubmittingPost } = usePost(); const { put, loading: isSubmittingPut } = usePut(); + const { deleteFn, loading: isDeleting } = useDelete(); + + // Delete dialog state + const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const isSubmitting = isSubmittingPost || isSubmittingPut; const { schema, defaults } = useStatusPageForm({ @@ -78,6 +83,22 @@ const CreateStatusPage = () => { console.log(errors); }; + const handleDeleteClick = () => { + setIsDeleteDialogOpen(true); + }; + + const handleDeleteConfirm = async () => { + const result = await deleteFn(`/status-page/${statusPageData?.statusPage?.id}`); + if (result) { + navigate("/status"); + } + setIsDeleteDialogOpen(false); + }; + + const handleDeleteCancel = () => { + setIsDeleteDialogOpen(false); + }; + const onSubmit = async (data: StatusPageFormData) => { const fd = new FormData(); fd.append("type", "uptime"); @@ -136,13 +157,7 @@ const CreateStatusPage = () => { component="form" onSubmit={handleSubmit(onSubmit, onError)} > - {!isCreate && ( - { - console.log("poo"); - }} - /> - )} + {!isCreate && } { {t("common.buttons.save")} + ); }; diff --git a/client/src/Pages/StatusPage/Status/Components/HeaderStatusPageControls.tsx b/client/src/Pages/StatusPage/Status/Components/HeaderStatusPageControls.tsx index 4fc2e41e1..d738671ac 100644 --- a/client/src/Pages/StatusPage/Status/Components/HeaderStatusPageControls.tsx +++ b/client/src/Pages/StatusPage/Status/Components/HeaderStatusPageControls.tsx @@ -50,7 +50,7 @@ export const HeaderStatusPageControls = ({ { window.open( - `/status/uptime/public/${statusPage.url}`, + `/status/public/${statusPage.url}`, "_blank", "noopener,noreferrer" ); @@ -77,7 +77,7 @@ export const HeaderStatusPageControls = ({ variant="contained" color="secondary" startIcon={} - onClick={() => navigate(`/status/uptime/configure/${statusPage.url}`)} + onClick={() => navigate(`/status/configure/${statusPage.url}`)} > {t("common.buttons.configure")} diff --git a/client/src/Pages/StatusPage/Status/index.tsx b/client/src/Pages/StatusPage/Status/index.tsx index fcb92f2f0..6cb9830b9 100644 --- a/client/src/Pages/StatusPage/Status/index.tsx +++ b/client/src/Pages/StatusPage/Status/index.tsx @@ -19,7 +19,7 @@ const StatusPageView = () => { const { url } = useParams(); const isAdmin = useIsAdmin(); const location = useLocation(); - const isPublic = location.pathname.startsWith("/status/uptime/public"); + const isPublic = location.pathname.startsWith("/status/public"); const apiUrl = url ? `/status-page/${url}?type=uptime` : null; @@ -47,7 +47,7 @@ const StatusPageView = () => { {t("pages.statusPages.details.empty.title")} {isAdmin && ( - + {t("pages.statusPages.details.empty.addMonitor")} )} diff --git a/client/src/Pages/StatusPage/StatusPages/Components/StatusPagesTable.tsx b/client/src/Pages/StatusPage/StatusPages/Components/StatusPagesTable.tsx index 1741aeadf..d832751de 100644 --- a/client/src/Pages/StatusPage/StatusPages/Components/StatusPagesTable.tsx +++ b/client/src/Pages/StatusPage/StatusPages/Components/StatusPagesTable.tsx @@ -22,7 +22,7 @@ export const StatusPagesTable = ({ data }: StatusPagesTableProps) => { const handleUrlClick = (e: React.MouseEvent, row: StatusPage) => { if (row.isPublished) { e.stopPropagation(); - const url = `/status/uptime/public/${row.url}`; + const url = `/status/public/${row.url}`; window.open(url, "_blank", "noopener,noreferrer"); } }; @@ -91,7 +91,7 @@ export const StatusPagesTable = ({ data }: StatusPagesTableProps) => { }; const handleRowClick = (statusPage: StatusPage) => { - navigate(`/status/uptime/${statusPage.url}`); + navigate(`/status/${statusPage.url}`); }; return ( diff --git a/client/src/Pages/StatusPage/StatusPages/index.tsx b/client/src/Pages/StatusPage/StatusPages/index.tsx index 6a34e587d..0c891591b 100644 --- a/client/src/Pages/StatusPage/StatusPages/index.tsx +++ b/client/src/Pages/StatusPage/StatusPages/index.tsx @@ -27,10 +27,10 @@ const StatusPages = () => { error={!!error} items={statusPages ?? []} actionButtonText={t("pages.statusPages.fallback.actionButton")} - actionLink="/status/uptime/create" + actionLink="/status/create" > diff --git a/client/src/Routes/index.jsx b/client/src/Routes/index.jsx index 078d05d75..908d7efe1 100644 --- a/client/src/Routes/index.jsx +++ b/client/src/Routes/index.jsx @@ -237,7 +237,7 @@ const Routes = () => { /> @@ -248,7 +248,7 @@ const Routes = () => { /> @@ -259,7 +259,7 @@ const Routes = () => { /> @@ -377,7 +377,7 @@ const Routes = () => { element={} /> diff --git a/client/src/locales/en.json b/client/src/locales/en.json index d98d4fbdd..04eca42b0 100644 --- a/client/src/locales/en.json +++ b/client/src/locales/en.json @@ -861,6 +861,7 @@ } }, "statusPages": { + "deleteSuccess": "Status page deleted successfully", "fallback": { "title": "A status page is used to:", "checks": [ diff --git a/server/src/routes/statusPageRoute.ts b/server/src/routes/statusPageRoute.ts index f70802f73..1468f9d16 100755 --- a/server/src/routes/statusPageRoute.ts +++ b/server/src/routes/statusPageRoute.ts @@ -19,7 +19,7 @@ class StatusPageRoutes { this.router.put("/:id", upload.single("logo"), verifyJWT, this.statusPageController.updateStatusPage); this.router.get("/:url", this.statusPageController.getStatusPageByUrl); - this.router.delete("/:url(*)", verifyJWT, this.statusPageController.deleteStatusPage); + this.router.delete("/:id", verifyJWT, this.statusPageController.deleteStatusPage); } getRouter() {