update routes, validation

This commit is contained in:
Alex Holliday committed 2025-06-13 10:46:06 +08:00
1 parent d9c2f31f4e
commit afece4df65
8 files changed
+17 -23

No files matched your search

+1 -1
View File
@@ -57,7 +57,7 @@ Dialog.propTypes = {
onCancel: PropTypes.func.isRequired,
confirmationButtonLabel: PropTypes.string.isRequired,
onConfirm: PropTypes.func.isRequired,
isLoading: PropTypes.bool.isRequired,
isLoading: PropTypes.bool,
};
export default Dialog;
+2 -2
View File
@@ -136,8 +136,8 @@ const StatBox = ({
};
StatBox.propTypes = {
heading: PropTypes.string.isRequired,
subHeading: PropTypes.node.isRequired,
heading: PropTypes.string,
subHeading: PropTypes.node,
gradient: PropTypes.bool,
status: PropTypes.string,
sx: PropTypes.object,
@@ -15,7 +15,7 @@ import { useNavigate } from "react-router-dom";
import PropTypes from "prop-types";
import { useTranslation } from "react-i18next";
const MonitorsTable = ({ shouldRender, monitors, isAdmin, handleActionMenuDelete }) => {
const MonitorsTable = ({ isLoading, monitors, isAdmin, handleActionMenuDelete }) => {
// Utils
const theme = useTheme();
const { t } = useTranslation();
@@ -86,6 +86,7 @@ const MonitorsTable = ({ shouldRender, monitors, isAdmin, handleActionMenuDelete
monitor={row}
isAdmin={isAdmin}
updateCallback={handleActionMenuDelete}
isLoading={isLoading}
/>
),
},
@@ -120,7 +121,7 @@ const MonitorsTable = ({ shouldRender, monitors, isAdmin, handleActionMenuDelete
return (
<DataTable
shouldRender={shouldRender}
shouldRender={!isLoading}
headers={headers}
data={data}
config={{
@@ -140,7 +141,7 @@ const MonitorsTable = ({ shouldRender, monitors, isAdmin, handleActionMenuDelete
};
MonitorsTable.propTypes = {
shouldRender: PropTypes.bool,
isLoading: PropTypes.bool,
monitors: PropTypes.array,
isAdmin: PropTypes.bool,
handleActionMenuDelete: PropTypes.func,
@@ -11,7 +11,6 @@ import Filter from "./Components/Filters";
// Utils
import { useTheme } from "@emotion/react";
import { useState } from "react";
import { useSelector } from "react-redux";
import { useIsAdmin } from "../../../Hooks/useIsAdmin";
import { useTranslation } from "react-i18next";
import { useFetchMonitorsByTeamId } from "../../../Hooks/monitorHooks";
@@ -21,7 +20,6 @@ const BREADCRUMBS = [{ name: `infrastructure`, path: "/infrastructure" }];
const InfrastructureMonitors = () => {
// Redux state
const { user } = useSelector((state) => state.auth);
// Local state
const [page, setPage] = useState(0);
@@ -56,7 +54,6 @@ const InfrastructureMonitors = () => {
const field = toFilterStatus !== undefined ? "status" : undefined;
const [monitors, summary, isLoading, networkError] = useFetchMonitorsByTeamId({
teamId: user.teamId,
limit: 1,
types: TYPES,
page,
@@ -118,7 +115,7 @@ const InfrastructureMonitors = () => {
/>
</Stack>
<MonitorsTable
shouldRender={!isLoading}
isLoading={isLoading}
monitors={monitors}
isAdmin={isAdmin}
handleActionMenuDelete={handleActionMenuDelete}
@@ -9,7 +9,6 @@ import GenericFallback from "../../../Components/GenericFallback";
// Utils
import { useTheme } from "@emotion/react";
import { useSelector } from "react-redux";
import { useIsAdmin } from "../../../Hooks/useIsAdmin";
import { useTranslation } from "react-i18next";
import { useFetchMonitorsByTeamId } from "../../../Hooks/monitorHooks";
@@ -20,10 +19,8 @@ const PageSpeed = () => {
const theme = useTheme();
const { t } = useTranslation();
const isAdmin = useIsAdmin();
const { user } = useSelector((state) => state.auth);
const [monitors, monitorsSummary, isLoading, networkError] = useFetchMonitorsByTeamId({
teamId: user.teamId,
limit: 10,
types: TYPES,
page: null,
+4 -3
View File
@@ -519,7 +519,8 @@ const getMonitorsByTeamId = async (req) => {
order = "asc";
}
// Build match stage
const matchStage = { teamId: ObjectId.createFromHexString(req.params.teamId) };
const teamId = req.user.teamId;
const matchStage = { teamId: ObjectId.createFromHexString(teamId) };
if (type !== undefined) {
matchStage.type = Array.isArray(type) ? { $in: type } : type;
}
@@ -560,7 +561,7 @@ const getMonitorsByTeamId = async (req) => {
const getMonitorsAndSummaryByTeamId = async (req) => {
try {
const { type } = req.query;
const teamId = ObjectId.createFromHexString(req.params.teamId);
const teamId = ObjectId.createFromHexString(req.user.teamId);
const matchStage = { teamId };
if (type !== undefined) {
matchStage.type = Array.isArray(type) ? { $in: type } : type;
@@ -594,7 +595,7 @@ const getMonitorsWithChecksByTeamId = async (req) => {
field = "name";
order = "asc";
}
const teamId = ObjectId.createFromHexString(req.params.teamId);
const teamId = ObjectId.createFromHexString(req.user.teamId);
// Build match stage
const matchStage = { teamId };
if (type !== undefined) {
+4 -4
View File
@@ -35,17 +35,17 @@ class MonitorRoutes {
fetchMonitorCertificate
);
});
this.router.get("/team", this.monitorController.getMonitorsByTeamId);
this.router.get("/:monitorId", this.monitorController.getMonitorById);
this.router.get("/team/:teamId", this.monitorController.getMonitorsByTeamId);
this.router.get(
"/summary/team/:teamId",
"/summary/team",
this.monitorController.getMonitorsAndSummaryByTeamId
);
this.router.get(
"/team/:teamId/with-checks",
"/team/with-checks",
this.monitorController.getMonitorsWithChecksByTeamId
);
+1 -3
View File
@@ -126,9 +126,7 @@ const getMonitorByIdQueryValidation = joi.object({
normalize: joi.boolean(),
});
const getMonitorsByTeamIdParamValidation = joi.object({
teamId: joi.string().required(),
});
const getMonitorsByTeamIdParamValidation = joi.object({});
const getMonitorsByTeamIdQueryValidation = joi.object({
limit: joi.number(),