From f3cd7be1430d02eb1eb92b49452ceb51466d9b62 Mon Sep 17 00:00:00 2001 From: Nawaz Dhandala Date: Fri, 13 Feb 2026 13:48:46 +0000 Subject: [PATCH] refactor: Clean up code formatting and improve readability across multiple components --- APIReference/Service/DataTypeDetail.ts | 3 +- .../Monitor/Criteria/DnsMonitorCriteria.ts | 11 +-- .../Monitor/SummaryView/DnsMonitorView.tsx | 4 +- MobileApp/nativewind-env.d.ts | 2 +- MobileApp/src/components/AlertCard.tsx | 5 +- MobileApp/src/components/EpisodeCard.tsx | 5 +- MobileApp/src/components/IncidentCard.tsx | 8 +- MobileApp/src/components/SkeletonCard.tsx | 7 +- .../src/hooks/useAllProjectAlertEpisodes.ts | 7 +- MobileApp/src/hooks/useAllProjectCounts.ts | 26 ++++--- .../hooks/useAllProjectIncidentEpisodes.ts | 18 +++-- .../src/navigation/AlertsStackNavigator.tsx | 9 ++- .../navigation/IncidentsStackNavigator.tsx | 9 ++- .../src/navigation/SettingsStackNavigator.tsx | 9 ++- MobileApp/src/screens/AlertDetailScreen.tsx | 13 +--- .../src/screens/AlertEpisodeDetailScreen.tsx | 17 +--- MobileApp/src/screens/AlertsScreen.tsx | 25 +++--- .../src/screens/IncidentDetailScreen.tsx | 14 ++-- .../screens/IncidentEpisodeDetailScreen.tsx | 8 +- MobileApp/src/screens/IncidentsScreen.tsx | 25 +++--- MobileApp/src/screens/SettingsScreen.tsx | 8 +- .../Utils/Monitors/MonitorTypes/DnsMonitor.ts | 78 +++++++++---------- 22 files changed, 157 insertions(+), 154 deletions(-) diff --git a/APIReference/Service/DataTypeDetail.ts b/APIReference/Service/DataTypeDetail.ts index e895b48f81..3c815725d6 100644 --- a/APIReference/Service/DataTypeDetail.ts +++ b/APIReference/Service/DataTypeDetail.ts @@ -3172,8 +3172,7 @@ const dataTypeDetails: Dictionary = { name: "queryName", type: "string", required: true, - description: - "The domain name to query (e.g., 'example.com').", + description: "The domain name to query (e.g., 'example.com').", }, { name: "recordType", diff --git a/Common/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts b/Common/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts index e6b02e6c1a..ec7d6825bc 100644 --- a/Common/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts +++ b/Common/Server/Utils/Monitor/Criteria/DnsMonitorCriteria.ts @@ -5,9 +5,7 @@ import { CriteriaFilter, FilterType, } from "../../../../Types/Monitor/CriteriaFilter"; -import DnsMonitorResponse, { - DnsRecordResponse, -} from "../../../../Types/Monitor/DnsMonitor/DnsMonitorResponse"; +import DnsMonitorResponse from "../../../../Types/Monitor/DnsMonitor/DnsMonitorResponse"; import ProbeMonitorResponse from "../../../../Types/Probe/ProbeMonitorResponse"; import EvaluateOverTime from "./EvaluateOverTime"; import CaptureSpan from "../../Telemetry/CaptureSpan"; @@ -154,13 +152,12 @@ export default class DnsMonitorCriteria { CompareCriteria.convertToNumber(threshold); if (numericThreshold !== null && !isNaN(Number(recordValue))) { - const result: string | null = CompareCriteria.compareCriteriaNumbers( - { + const result: string | null = + CompareCriteria.compareCriteriaNumbers({ value: Number(recordValue), threshold: numericThreshold, criteriaFilter: input.criteriaFilter, - }, - ); + }); if (result) { return `DNS record (${record.type}): ${result}`; diff --git a/Dashboard/src/Components/Monitor/SummaryView/DnsMonitorView.tsx b/Dashboard/src/Components/Monitor/SummaryView/DnsMonitorView.tsx index d63290df86..e6fd547aa6 100644 --- a/Dashboard/src/Components/Monitor/SummaryView/DnsMonitorView.tsx +++ b/Dashboard/src/Components/Monitor/SummaryView/DnsMonitorView.tsx @@ -23,7 +23,9 @@ const DnsMonitorView: FunctionComponent = ( responseTimeInMs = Math.round(responseTimeInMs); } - const getDnssecStatusText = (): string => { + type GetDnssecStatusText = () => string; + + const getDnssecStatusText: GetDnssecStatusText = (): string => { if (dnsResponse?.isDnssecValid === undefined) { return "Unknown"; } diff --git a/MobileApp/nativewind-env.d.ts b/MobileApp/nativewind-env.d.ts index c0d8380737..9583462875 100644 --- a/MobileApp/nativewind-env.d.ts +++ b/MobileApp/nativewind-env.d.ts @@ -1,3 +1,3 @@ /// -// NOTE: This file should not be edited and should be committed with your source code. It is generated by NativeWind. \ No newline at end of file +// NOTE: This file should not be edited and should be committed with your source code. It is generated by NativeWind. diff --git a/MobileApp/src/components/AlertCard.tsx b/MobileApp/src/components/AlertCard.tsx index 1d165297df..f08a98cd16 100644 --- a/MobileApp/src/components/AlertCard.tsx +++ b/MobileApp/src/components/AlertCard.tsx @@ -49,10 +49,7 @@ export default function AlertCard({ accessibilityLabel={`Alert ${alert.alertNumberWithPrefix || alert.alertNumber}, ${alert.title}. State: ${alert.currentAlertState?.name ?? "unknown"}. Severity: ${alert.alertSeverity?.name ?? "unknown"}.`} > - + {projectName ? ( diff --git a/MobileApp/src/components/EpisodeCard.tsx b/MobileApp/src/components/EpisodeCard.tsx index 1b6007036d..7afc57700d 100644 --- a/MobileApp/src/components/EpisodeCard.tsx +++ b/MobileApp/src/components/EpisodeCard.tsx @@ -74,10 +74,7 @@ export default function EpisodeCard( activeOpacity={0.7} > - + {projectName ? ( diff --git a/MobileApp/src/components/IncidentCard.tsx b/MobileApp/src/components/IncidentCard.tsx index 105de3b4a8..badb1310de 100644 --- a/MobileApp/src/components/IncidentCard.tsx +++ b/MobileApp/src/components/IncidentCard.tsx @@ -52,10 +52,7 @@ export default function IncidentCard({ accessibilityLabel={`Incident ${incident.incidentNumberWithPrefix || incident.incidentNumber}, ${incident.title}. State: ${incident.currentIncidentState?.name ?? "unknown"}. Severity: ${incident.incidentSeverity?.name ?? "unknown"}.`} > - + {projectName ? ( @@ -68,7 +65,8 @@ export default function IncidentCard({ style={{ backgroundColor: theme.colors.backgroundTertiary }} > - {incident.incidentNumberWithPrefix || `#${incident.incidentNumber}`} + {incident.incidentNumberWithPrefix || + `#${incident.incidentNumber}`} {timeString} diff --git a/MobileApp/src/components/SkeletonCard.tsx b/MobileApp/src/components/SkeletonCard.tsx index c87bd19ab8..28d913ed86 100644 --- a/MobileApp/src/components/SkeletonCard.tsx +++ b/MobileApp/src/components/SkeletonCard.tsx @@ -1,5 +1,10 @@ import React, { useEffect, useRef } from "react"; -import { View, Animated, DimensionValue, AccessibilityInfo } from "react-native"; +import { + View, + Animated, + DimensionValue, + AccessibilityInfo, +} from "react-native"; import { useTheme } from "../theme"; interface SkeletonCardProps { diff --git a/MobileApp/src/hooks/useAllProjectAlertEpisodes.ts b/MobileApp/src/hooks/useAllProjectAlertEpisodes.ts index 4eba98f08f..c9033b51a1 100644 --- a/MobileApp/src/hooks/useAllProjectAlertEpisodes.ts +++ b/MobileApp/src/hooks/useAllProjectAlertEpisodes.ts @@ -21,14 +21,15 @@ interface UseAllProjectAlertEpisodesResult { export function useAllProjectAlertEpisodes(): UseAllProjectAlertEpisodesResult { const { projectList } = useProject(); - const query: UseQueryResult, Error> = - useQuery({ + const query: UseQueryResult, Error> = useQuery( + { queryKey: ["alert-episodes", "all-projects"], queryFn: () => { return fetchAllAlertEpisodes({ skip: 0, limit: FETCH_LIMIT }); }, enabled: projectList.length > 0, - }); + }, + ); const projectMap: Map = useMemo(() => { const map: Map = new Map(); diff --git a/MobileApp/src/hooks/useAllProjectCounts.ts b/MobileApp/src/hooks/useAllProjectCounts.ts index a852ad7940..f370cdce35 100644 --- a/MobileApp/src/hooks/useAllProjectCounts.ts +++ b/MobileApp/src/hooks/useAllProjectCounts.ts @@ -25,18 +25,20 @@ export function useAllProjectCounts(): UseAllProjectCountsResult { const { projectList } = useProject(); const enabled: boolean = projectList.length > 0; - const incidentQuery: UseQueryResult, Error> = - useQuery({ - queryKey: ["incidents", "unresolved-count", "all-projects"], - queryFn: () => { - return fetchAllIncidents({ - skip: 0, - limit: 1, - unresolvedOnly: true, - }); - }, - enabled, - }); + const incidentQuery: UseQueryResult< + ListResponse, + Error + > = useQuery({ + queryKey: ["incidents", "unresolved-count", "all-projects"], + queryFn: () => { + return fetchAllIncidents({ + skip: 0, + limit: 1, + unresolvedOnly: true, + }); + }, + enabled, + }); const alertQuery: UseQueryResult, Error> = useQuery({ queryKey: ["alerts", "unresolved-count", "all-projects"], diff --git a/MobileApp/src/hooks/useAllProjectIncidentEpisodes.ts b/MobileApp/src/hooks/useAllProjectIncidentEpisodes.ts index 4435a299ba..30778b062b 100644 --- a/MobileApp/src/hooks/useAllProjectIncidentEpisodes.ts +++ b/MobileApp/src/hooks/useAllProjectIncidentEpisodes.ts @@ -21,14 +21,16 @@ interface UseAllProjectIncidentEpisodesResult { export function useAllProjectIncidentEpisodes(): UseAllProjectIncidentEpisodesResult { const { projectList } = useProject(); - const query: UseQueryResult, Error> = - useQuery({ - queryKey: ["incident-episodes", "all-projects"], - queryFn: () => { - return fetchAllIncidentEpisodes({ skip: 0, limit: FETCH_LIMIT }); - }, - enabled: projectList.length > 0, - }); + const query: UseQueryResult< + ListResponse, + Error + > = useQuery({ + queryKey: ["incident-episodes", "all-projects"], + queryFn: () => { + return fetchAllIncidentEpisodes({ skip: 0, limit: FETCH_LIMIT }); + }, + enabled: projectList.length > 0, + }); const projectMap: Map = useMemo(() => { const map: Map = new Map(); diff --git a/MobileApp/src/navigation/AlertsStackNavigator.tsx b/MobileApp/src/navigation/AlertsStackNavigator.tsx index 360ec8d1fd..687e3b5c78 100644 --- a/MobileApp/src/navigation/AlertsStackNavigator.tsx +++ b/MobileApp/src/navigation/AlertsStackNavigator.tsx @@ -22,7 +22,14 @@ export default function AlertsStackNavigator(): React.JSX.Element { }, headerTintColor: theme.colors.textPrimary, headerShadowVisible: false, - ...(Platform.OS === "ios" ? { headerLargeTitle: true, headerLargeStyle: { backgroundColor: theme.colors.backgroundPrimary } } : {}), + ...(Platform.OS === "ios" + ? { + headerLargeTitle: true, + headerLargeStyle: { + backgroundColor: theme.colors.backgroundPrimary, + }, + } + : {}), }} > - - Created - + Created {formatDateTime(alert.createdAt)} @@ -457,9 +452,7 @@ export default function AlertDetailScreen({ route }: Props): React.JSX.Element { : null} {notes && notes.length === 0 ? ( - - No notes yet. - + No notes yet. ) : null} diff --git a/MobileApp/src/screens/AlertEpisodeDetailScreen.tsx b/MobileApp/src/screens/AlertEpisodeDetailScreen.tsx index ab29b34742..09a4979eaa 100644 --- a/MobileApp/src/screens/AlertEpisodeDetailScreen.tsx +++ b/MobileApp/src/screens/AlertEpisodeDetailScreen.tsx @@ -32,10 +32,7 @@ import FeedTimeline from "../components/FeedTimeline"; import SkeletonCard from "../components/SkeletonCard"; import { useHaptics } from "../hooks/useHaptics"; -type Props = NativeStackScreenProps< - AlertsStackParamList, - "AlertEpisodeDetail" ->; +type Props = NativeStackScreenProps; function SectionHeader({ title, @@ -283,18 +280,14 @@ export default function AlertEpisodeDetailScreen({ }} > - - Created - + Created {formatDateTime(episode.createdAt)} - - Alerts - + Alerts {episode.alertCount ?? 0} @@ -458,9 +451,7 @@ export default function AlertEpisodeDetailScreen({ : null} {notes && notes.length === 0 ? ( - - No notes yet. - + No notes yet. ) : null} diff --git a/MobileApp/src/screens/AlertsScreen.tsx b/MobileApp/src/screens/AlertsScreen.tsx index b51523f82e..c8779288c5 100644 --- a/MobileApp/src/screens/AlertsScreen.tsx +++ b/MobileApp/src/screens/AlertsScreen.tsx @@ -64,7 +64,9 @@ function SectionHeader({ { - return prev + PAGE_SIZE; - }); - } + } else if (visibleEpisodeCount < totalEpisodeCount) { + setVisibleEpisodeCount((prev: number) => { + return prev + PAGE_SIZE; + }); } - }, [segment, visibleCount, totalAlertCount, visibleEpisodeCount, totalEpisodeCount]); + }, [ + segment, + visibleCount, + totalAlertCount, + visibleEpisodeCount, + totalEpisodeCount, + ]); const handlePress: (wrapped: ProjectAlertItem) => void = useCallback( (wrapped: ProjectAlertItem) => { diff --git a/MobileApp/src/screens/IncidentDetailScreen.tsx b/MobileApp/src/screens/IncidentDetailScreen.tsx index f2851e8eb3..d6d0437d9a 100644 --- a/MobileApp/src/screens/IncidentDetailScreen.tsx +++ b/MobileApp/src/screens/IncidentDetailScreen.tsx @@ -130,7 +130,11 @@ export default function IncidentDetailScreen({ try { await changeIncidentState(projectId, incidentId, stateId); await successFeedback(); - await Promise.all([refetchIncident(), refetchTimeline(), refetchFeed()]); + await Promise.all([ + refetchIncident(), + refetchTimeline(), + refetchFeed(), + ]); await queryClient.invalidateQueries({ queryKey: ["incidents"] }); } catch { queryClient.setQueryData(queryKey, previousData); @@ -299,9 +303,7 @@ export default function IncidentDetailScreen({ ) : null} - - Created - + Created {formatDateTime(incident.createdAt)} @@ -484,9 +486,7 @@ export default function IncidentDetailScreen({ : null} {notes && notes.length === 0 ? ( - - No notes yet. - + No notes yet. ) : null} diff --git a/MobileApp/src/screens/IncidentEpisodeDetailScreen.tsx b/MobileApp/src/screens/IncidentEpisodeDetailScreen.tsx index 2fcd5b241c..023cd3000d 100644 --- a/MobileApp/src/screens/IncidentEpisodeDetailScreen.tsx +++ b/MobileApp/src/screens/IncidentEpisodeDetailScreen.tsx @@ -299,9 +299,7 @@ export default function IncidentEpisodeDetailScreen({ ) : null} - - Created - + Created {formatDateTime(episode.createdAt)} @@ -474,9 +472,7 @@ export default function IncidentEpisodeDetailScreen({ : null} {notes && notes.length === 0 ? ( - - No notes yet. - + No notes yet. ) : null} diff --git a/MobileApp/src/screens/IncidentsScreen.tsx b/MobileApp/src/screens/IncidentsScreen.tsx index e729e043da..9c9d903837 100644 --- a/MobileApp/src/screens/IncidentsScreen.tsx +++ b/MobileApp/src/screens/IncidentsScreen.tsx @@ -67,7 +67,9 @@ function SectionHeader({ { - return prev + PAGE_SIZE; - }); - } + } else if (visibleEpisodeCount < totalEpisodeCount) { + setVisibleEpisodeCount((prev: number) => { + return prev + PAGE_SIZE; + }); } - }, [segment, visibleCount, totalIncidentCount, visibleEpisodeCount, totalEpisodeCount]); + }, [ + segment, + visibleCount, + totalIncidentCount, + visibleEpisodeCount, + totalEpisodeCount, + ]); const handlePress: (wrapped: ProjectIncidentItem) => void = useCallback( (wrapped: ProjectIncidentItem) => { @@ -285,8 +291,7 @@ export default function IncidentsScreen(): React.JSX.Element { ? isLoading && allIncidents.length === 0 : episodesLoading && allEpisodes.length === 0; - const showError: boolean = - segment === "incidents" ? isError : episodesError; + const showError: boolean = segment === "incidents" ? isError : episodesError; if (showLoading) { return ( diff --git a/MobileApp/src/screens/SettingsScreen.tsx b/MobileApp/src/screens/SettingsScreen.tsx index e807a8685b..1170528579 100644 --- a/MobileApp/src/screens/SettingsScreen.tsx +++ b/MobileApp/src/screens/SettingsScreen.tsx @@ -1,11 +1,5 @@ import React, { useState, useEffect } from "react"; -import { - View, - Text, - TouchableOpacity, - ScrollView, - Switch, -} from "react-native"; +import { View, Text, TouchableOpacity, ScrollView, Switch } from "react-native"; import { Ionicons } from "@expo/vector-icons"; import { useTheme, ThemeMode } from "../theme"; import { useAuth } from "../hooks/useAuth"; diff --git a/Probe/Utils/Monitors/MonitorTypes/DnsMonitor.ts b/Probe/Utils/Monitors/MonitorTypes/DnsMonitor.ts index 803f200219..e5a63613fe 100644 --- a/Probe/Utils/Monitors/MonitorTypes/DnsMonitor.ts +++ b/Probe/Utils/Monitors/MonitorTypes/DnsMonitor.ts @@ -45,9 +45,10 @@ export default class DnsMonitorUtil { } if (config.hostname) { - const server: string = config.port && config.port !== 53 - ? `${config.hostname}:${config.port}` - : config.hostname; + const server: string = + config.port && config.port !== 53 + ? `${config.hostname}:${config.port}` + : config.hostname; resolver.setServers([server]); } @@ -162,8 +163,10 @@ export default class DnsMonitorUtil { switch (recordType) { case DnsRecordType.A: { - const results: Array = - await resolver.resolve4(queryName, { ttl: true }); + const results: Array = await resolver.resolve4( + queryName, + { ttl: true }, + ); for (const result of results) { records.push({ type: DnsRecordType.A, @@ -174,8 +177,10 @@ export default class DnsMonitorUtil { break; } case DnsRecordType.AAAA: { - const results: Array = - await resolver.resolve6(queryName, { ttl: true }); + const results: Array = await resolver.resolve6( + queryName, + { ttl: true }, + ); for (const result of results) { records.push({ type: DnsRecordType.AAAA, @@ -196,7 +201,8 @@ export default class DnsMonitorUtil { break; } case DnsRecordType.MX: { - const results: Array = await resolver.resolveMx(queryName); + const results: Array = + await resolver.resolveMx(queryName); for (const result of results) { records.push({ type: DnsRecordType.MX, @@ -262,7 +268,8 @@ export default class DnsMonitorUtil { for (const result of results) { records.push({ type: DnsRecordType.CAA, - value: `${result.critical} ${result.issue || result.issuewild || result.iodef || ""}`.trim(), + value: + `${result.critical} ${result.issue || result.issuewild || result.iodef || ""}`.trim(), }); } break; @@ -277,39 +284,30 @@ export default class DnsMonitorUtil { recordType: DnsRecordType, dnsServer?: string | undefined, ): Promise { - return new Promise( - (resolve: (value: boolean | undefined) => void) => { - const args: Array = [ - "+dnssec", - "+cd", - queryName, - recordType, - ]; + return new Promise((resolve: (value: boolean | undefined) => void) => { + const args: Array = ["+dnssec", "+cd", queryName, recordType]; - if (dnsServer) { - args.push(`@${dnsServer}`); - } + if (dnsServer) { + args.push(`@${dnsServer}`); + } - execFile( - "dig", - args, - { timeout: 10000 }, - ( - error: Error | null, - stdout: string, - ) => { - if (error) { - // dig not available, return undefined - resolve(undefined); - return; - } + execFile( + "dig", + args, + { timeout: 10000 }, + (error: Error | null, stdout: string) => { + if (error) { + // dig not available, return undefined + resolve(undefined); + return; + } - // Check for the AD (Authenticated Data) flag in the response - const hasAdFlag: boolean = /flags:.*\bad\b/i.test(stdout); - resolve(hasAdFlag); - }, - ); - }, - ); + // Check for the AD (Authenticated Data) flag in the response + const adFlagPattern: RegExp = /flags:.*\bad\b/i; + const hasAdFlag: boolean = adFlagPattern.test(stdout); + resolve(hasAdFlag); + }, + ); + }); } }