diff --git a/client/src/Components/Fallback/index.jsx b/client/src/Components/Fallback/index.jsx
index b00ddbecc..47497ba02 100644
--- a/client/src/Components/Fallback/index.jsx
+++ b/client/src/Components/Fallback/index.jsx
@@ -11,7 +11,7 @@ import { useSelector } from "react-redux";
import Alert from "../Alert";
import { useTranslation } from "react-i18next";
import "./index.css";
-import { useFetchSettings } from "../../Hooks/useFetchSettings";
+import { useFetchSettings } from "../../Hooks/settingsHooks";
import { useState } from "react";
/**
* Fallback component to display a fallback UI with a title, a list of checks, and a navigation button.
diff --git a/client/src/Pages/Auth/components/TextLink.jsx b/client/src/Components/TextLink/index.jsx
similarity index 100%
rename from client/src/Pages/Auth/components/TextLink.jsx
rename to client/src/Components/TextLink/index.jsx
diff --git a/client/src/Hooks/useFetchSettings.js b/client/src/Hooks/settingsHooks.js
similarity index 100%
rename from client/src/Hooks/useFetchSettings.js
rename to client/src/Hooks/settingsHooks.js
diff --git a/client/src/Pages/Auth/Login/index.jsx b/client/src/Pages/Auth/Login/index.jsx
index a969706e7..098fbbf08 100644
--- a/client/src/Pages/Auth/Login/index.jsx
+++ b/client/src/Pages/Auth/Login/index.jsx
@@ -5,7 +5,7 @@ import Button from "@mui/material/Button";
import TextInput from "../../../Components/Inputs/TextInput";
import { PasswordEndAdornment } from "../../../Components/Inputs/TextInput/Adornments";
import { loginCredentials } from "../../../Validation/validation";
-import TextLink from "../components/TextLink";
+import TextLink from "../../../Components/TextLink";
import Typography from "@mui/material/Typography";
// Utils
diff --git a/client/src/Pages/Settings/index.jsx b/client/src/Pages/Settings/index.jsx
index e7a50e321..a3cd88fca 100644
--- a/client/src/Pages/Settings/index.jsx
+++ b/client/src/Pages/Settings/index.jsx
@@ -18,7 +18,7 @@ import { useSelector, useDispatch } from "react-redux";
import { setTimezone, setMode, setLanguage, setShowURL } from "../../Features/UI/uiSlice";
import SettingsStats from "./SettingsStats";
-import { useFetchSettings, useSaveSettings } from "../../Hooks/useFetchSettings";
+import { useFetchSettings, useSaveSettings } from "../../Hooks/settingsHooks";
import { useIsAdmin } from "../../Hooks/useIsAdmin";
import {
useAddDemoMonitors,
diff --git a/client/src/Pages/StatusPage/Status/index.jsx b/client/src/Pages/StatusPage/Status/index.jsx
index ee1ec436c..727daeeb1 100644
--- a/client/src/Pages/StatusPage/Status/index.jsx
+++ b/client/src/Pages/StatusPage/Status/index.jsx
@@ -8,6 +8,7 @@ import StatusBar from "./Components/StatusBar";
import MonitorsList from "./Components/MonitorsList";
import Dialog from "../../../Components/Dialog";
import Breadcrumbs from "../../../Components/Breadcrumbs/index.jsx";
+import TextLink from "../../../Components/TextLink";
// Utils
import { useStatusPageFetch } from "./Hooks/useStatusPageFetch";
@@ -30,6 +31,7 @@ const PublicStatus = () => {
const { t } = useTranslation();
const location = useLocation();
const navigate = useNavigate();
+ const isAdmin = useIsAdmin();
const [statusPage, monitors, isLoading, networkError, fetchStatusPage] =
useStatusPageFetch(false, url);
@@ -60,6 +62,26 @@ const PublicStatus = () => {
return ;
}
+ if (monitors.length === 0) {
+ return (
+
+
+ {"Theres nothing here yet"}
+
+ {isAdmin && (
+
+ )}
+
+ );
+ }
+
// Error fetching data
if (networkError === true) {
return (
diff --git a/client/src/Pages/Uptime/Create/index.jsx b/client/src/Pages/Uptime/Create/index.jsx
index e2d51153c..6527334ab 100644
--- a/client/src/Pages/Uptime/Create/index.jsx
+++ b/client/src/Pages/Uptime/Create/index.jsx
@@ -142,8 +142,7 @@ const CreateMonitor = () => {
notifications: monitor.notifications,
};
- console.log(JSON.stringify(form, null, 2));
- // await createMonitor({ monitor: form, redirect: "/uptime" });
+ await createMonitor({ monitor: form, redirect: "/uptime" });
};
const onChange = (event) => {
diff --git a/server/db/models/Monitor.js b/server/db/models/Monitor.js
index 26a79b815..7bb38f520 100755
--- a/server/db/models/Monitor.js
+++ b/server/db/models/Monitor.js
@@ -3,6 +3,7 @@ import HardwareCheck from "./HardwareCheck.js";
import PageSpeedCheck from "./PageSpeedCheck.js";
import Check from "./Check.js";
import MonitorStats from "./MonitorStats.js";
+import StatusPage from "./StatusPage.js";
const MonitorSchema = mongoose.Schema(
{
@@ -105,6 +106,9 @@ MonitorSchema.pre("findOneAndDelete", async function (next) {
await Check.deleteMany({ monitorId: doc._id });
}
+ // Deal with status pages
+ await StatusPage.updateMany({ monitors: doc._id }, { $pull: { monitors: doc._id } });
+
await MonitorStats.deleteMany({ monitorId: doc._id.toString() });
next();
} catch (error) {
diff --git a/server/db/mongo/modules/monitorModule.js b/server/db/mongo/modules/monitorModule.js
index 6c03dcd4c..32ed8b146 100755
--- a/server/db/mongo/modules/monitorModule.js
+++ b/server/db/mongo/modules/monitorModule.js
@@ -710,9 +710,11 @@ const deleteMonitor = async ({ monitorId }) => {
const stringService = ServiceRegistry.get(StringService.SERVICE_NAME);
try {
const monitor = await Monitor.findByIdAndDelete(monitorId);
+
if (!monitor) {
throw new Error(stringService.getDbFindMonitorById(monitorId));
}
+
return monitor;
} catch (error) {
error.service = SERVICE_NAME;
diff --git a/server/db/mongo/modules/statusPageModule.js b/server/db/mongo/modules/statusPageModule.js
index b2f7ef7d6..d6331fcf8 100755
--- a/server/db/mongo/modules/statusPageModule.js
+++ b/server/db/mongo/modules/statusPageModule.js
@@ -106,7 +106,10 @@ const getStatusPage = async (url) => {
},
},
{
- $unwind: "$monitors",
+ $unwind: {
+ path: "$monitors",
+ preserveNullAndEmptyArrays: true,
+ },
},
{
$lookup: {
@@ -153,9 +156,17 @@ const getStatusPage = async (url) => {
url: 1,
},
monitors: {
- $sortArray: {
- input: "$monitors",
- sortBy: { orderIndex: 1 },
+ $filter: {
+ input: {
+ $sortArray: {
+ input: "$monitors",
+ sortBy: { orderIndex: 1 },
+ },
+ },
+ as: "monitor",
+ cond: {
+ $ne: ["$$monitor.orderIndex", -1],
+ },
},
},
},