From 55ca57942e27b41a9df61e01b79285fdc3f15c71 Mon Sep 17 00:00:00 2001 From: ksjaay Date: Fri, 28 Nov 2025 17:12:18 +0000 Subject: [PATCH 1/4] Removes the docs folder --- README.md | 2 +- docs/public/icon-192x192.png | Bin 23935 -> 0 bytes docs/public/icon-512x512.png | Bin 31343 -> 0 bytes {docs/public => public}/demo.gif | Bin {docs/public => public}/header.png | Bin 5 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 docs/public/icon-192x192.png delete mode 100644 docs/public/icon-512x512.png rename {docs/public => public}/demo.gif (100%) rename {docs/public => public}/header.png (100%) diff --git a/README.md b/README.md index 63f5e55f..a6be1e4e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Discord -![Demo](https://raw.githubusercontent.com/KSJaay/Lunalytics/refs/heads/main/docs/public/demo.gif) +![Demo](https://raw.githubusercontent.com/KSJaay/Lunalytics/refs/heads/main/public/demo.gif) ## 📔 Features diff --git a/docs/public/icon-192x192.png b/docs/public/icon-192x192.png deleted file mode 100644 index 774f8b8a7fb959c874341e74ce7e4419488669bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23935 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 Date: Sun, 23 Nov 2025 22:14:06 -0600 Subject: [PATCH 2/4] A failed Create call now switches to the page with an error --- app/components/modal/monitor/configure.tsx | 24 +++++++---- app/components/modal/monitor/styles.scss | 12 ++++++ app/hooks/useMonitorForm.tsx | 49 +++++++++++++++++++--- 3 files changed, 71 insertions(+), 14 deletions(-) diff --git a/app/components/modal/monitor/configure.tsx b/app/components/modal/monitor/configure.tsx index 9fea2f9a..39b9aac3 100644 --- a/app/components/modal/monitor/configure.tsx +++ b/app/components/modal/monitor/configure.tsx @@ -43,11 +43,12 @@ const MonitorConfigureModal = ({ isEdit = false, }: ModalProps) => { const [pageId, setPageId] = useState('basic'); - const { errors, inputs, handleActionButtons, handleInput } = useMonitorForm( + const { errors, inputs, handleActionButtons, handleInput, errorPages, setErrorPages } = useMonitorForm( monitor, isEdit, closeModal, - handleMonitorSubmit + handleMonitorSubmit, + setPageId ); return ( @@ -65,12 +66,19 @@ const MonitorConfigureModal = ({
{pages.map((page) => (
setPageId(page.id)} + className={`monitor-configure-page-button + ${page.id === pageId ? 'active' : ''} + ${errorPages.has(page.id) ? 'error-circle' : ''}`} + + onClick={() => { + setErrorPages(oldSet => { + const trimmedErrorPages = new Set([...oldSet]) + trimmedErrorPages.delete(pageId) + return trimmedErrorPages + }) + setPageId(page.id) + + }} key={page.id} > {page.icon} diff --git a/app/components/modal/monitor/styles.scss b/app/components/modal/monitor/styles.scss index 41d9b3f4..fd7bed60 100644 --- a/app/components/modal/monitor/styles.scss +++ b/app/components/modal/monitor/styles.scss @@ -13,6 +13,7 @@ } .monitor-configure-page-button { + position: relative; padding: 12px; background-color: var(--accent-800); border-radius: 8px; @@ -31,6 +32,17 @@ &:hover { background-color: var(--accent-700); } + + &.error-circle::after { + content: ""; + position: absolute; + top: 40%; + right: 10px; + width: 10px; + height: 10px; + background-color: red; + border-radius: 50%; + } } .monitor-configure-left-container { diff --git a/app/hooks/useMonitorForm.tsx b/app/hooks/useMonitorForm.tsx index e26b542e..6eccde49 100644 --- a/app/hooks/useMonitorForm.tsx +++ b/app/hooks/useMonitorForm.tsx @@ -24,18 +24,50 @@ const useMonitorForm = ( values: Partial = defaultInputs, isEdit: boolean = false, closeModal: () => void, - setMonitor: (monitor: Partial) => void + setMonitor: (monitor: Partial) => void, + setPageId: (id: string) => void, ) => { const [inputs, setInput] = useState>({ ...defaultInputs, ...values, }); const [errors, setErrors] = useState({}); + const [errorPages, setErrorPages] = useState>(new Set()) const handleInput = (name: string, value: any) => { setInput((prev) => ({ ...prev, [name]: value })); }; + const getPagesWithErrors = (errorsObj: Record) => { + + const associatedPage: Record = { + 'name': "basic", + 'type': "basic", + 'url': "basic", + 'port': "basic", + 'icon': "basic", + 'method': "basic", + 'json_query': "basic", + 'interval': "interval", + 'retry': "interval", + 'retryInterval': "interval", + 'requestTimeout': "interval", + 'notificationType': "notification", + 'headers': "advanced", + 'body': "advanced", + 'valid_status_codes': "advanced", + } + const pagesWithError = new Set(); + + Object.keys(errorsObj).forEach(error => { + const page = associatedPage[error] + if(error && page) pagesWithError.add(page) + }) + + return pagesWithError + } + + const handleActionButtons = (action: string) => () => { switch (action) { case 'Create': { @@ -43,15 +75,20 @@ const useMonitorForm = ( const validator = monitorValidators[type]; if (!validator) return console.log("Validator doesn't exist"); - const errorsObj = validator(inputs); + const errorsObj = validator(inputs) as Record | false; + + if (errorsObj !== false) { + const pagesWithErrors = getPagesWithErrors(errorsObj) + setErrorPages(pagesWithErrors); + setPageId(Array.from(pagesWithErrors)[0]) - if (errorsObj) { - setErrors(errorsObj); + setErrors(errorsObj); break; } + setErrorPages(new Set()) setErrors({}); - + handleMonitor(inputs, isEdit, closeModal, setMonitor); break; } @@ -66,7 +103,7 @@ const useMonitorForm = ( } }; - return { inputs, errors, handleActionButtons, handleInput }; + return { inputs, errors, handleActionButtons, handleInput, errorPages, setErrorPages }; }; export default useMonitorForm; From 57895750ef3afc94f1172e13700121622d2bb714 Mon Sep 17 00:00:00 2001 From: ksjaay Date: Sun, 30 Nov 2025 16:14:21 +0000 Subject: [PATCH 3/4] Adds support for parentId for monitors --- app/components/incident/content/impact.tsx | 3 +- .../modal/monitor/pages/initial/index.tsx | 3 + .../modal/monitor/pages/initial/parent.tsx | 71 +++++++++++++++++++ app/handlers/monitor.ts | 2 + package-lock.json | 31 +++++++- package.json | 3 +- scripts/migrations/0-10-13.js | 22 ++++++ scripts/migrations/index.js | 2 + server/cache/index.js | 15 ++++ server/class/monitor/docker.js | 1 + server/class/monitor/http.js | 1 + server/class/monitor/json.js | 1 + server/class/monitor/ping.js | 1 + server/class/monitor/tcp.js | 1 + server/database/sqlite/tables/monitor.js | 1 + server/index.js | 5 +- server/middleware/monitor/add.js | 2 + test/server/class/monitor.test.js | 3 + test/server/middleware/monitor/add.test.js | 2 + test/server/middleware/monitor/edit.test.js | 2 + 20 files changed, 164 insertions(+), 8 deletions(-) create mode 100644 app/components/modal/monitor/pages/initial/parent.tsx create mode 100644 scripts/migrations/0-10-13.js diff --git a/app/components/incident/content/impact.tsx b/app/components/incident/content/impact.tsx index d6f8175d..a77a4396 100644 --- a/app/components/incident/content/impact.tsx +++ b/app/components/incident/content/impact.tsx @@ -1,4 +1,5 @@ import { toast } from 'react-toastify'; +import { observer } from 'mobx-react-lite'; // import local files import Dropdown from '../../ui/dropdown'; @@ -88,4 +89,4 @@ const IncidentContentImpact = () => { IncidentContentImpact.displayName = 'IncidentContentImpact'; -export default IncidentContentImpact; +export default observer(IncidentContentImpact); diff --git a/app/components/modal/monitor/pages/initial/index.tsx b/app/components/modal/monitor/pages/initial/index.tsx index 7e69b696..40d37ca2 100644 --- a/app/components/modal/monitor/pages/initial/index.tsx +++ b/app/components/modal/monitor/pages/initial/index.tsx @@ -4,6 +4,7 @@ import { Input } from '@lunalytics/ui'; // import local files import MonitorInitialDropdown from './type'; import MonitorIconSelect from './icons'; +import MonitorParentSelect from './parent'; interface MonitorInitialTypeProps { inputs: any; @@ -51,6 +52,8 @@ const MonitorInitialType = ({ )} + +
); }; diff --git a/app/components/modal/monitor/pages/initial/parent.tsx b/app/components/modal/monitor/pages/initial/parent.tsx new file mode 100644 index 00000000..ea2bff9a --- /dev/null +++ b/app/components/modal/monitor/pages/initial/parent.tsx @@ -0,0 +1,71 @@ +import { observer } from 'mobx-react-lite'; +import useDropdown from '../../../../../hooks/useDropdown'; +import Dropdown from '../../../../ui/dropdown'; +import useContextStore from '../../../../../context'; + +const MonitorParentSelect = ({ + inputs, + handleInput, +}: { + inputs: any; + handleInput: (key: string, value: any) => void; +}) => { + const { + globalStore: { allMonitors }, + } = useContextStore(); + const { toggleDropdown, dropdownIsOpen } = useDropdown(true); + + const onSelect = (monitorId: string | null) => { + handleInput('parentId', monitorId); + toggleDropdown(); + }; + + const monitors = allMonitors.filter( + (monitor) => monitor.monitorId !== inputs.monitorId + ); + + return ( +
+ + + +
+ + + {inputs.parentId + ? monitors.find( + (monitor) => monitor.monitorId === inputs.parentId + )?.name + : 'No parent'} + + + onSelect(null)}> + No parent + + {monitors.map((monitor) => ( + onSelect(monitor.monitorId)} + > + {monitor.name} + + ))} + + +
+
+ ); +}; + +export default observer(MonitorParentSelect); diff --git a/app/handlers/monitor.ts b/app/handlers/monitor.ts index 07a3cc01..08d1785a 100644 --- a/app/handlers/monitor.ts +++ b/app/handlers/monitor.ts @@ -33,6 +33,7 @@ const handleMonitor = async ( const { name, + parentId, type, url, method, @@ -57,6 +58,7 @@ const handleMonitor = async ( const query = await createPostRequest(apiPath, { name, + parentId, type, url, method, diff --git a/package-lock.json b/package-lock.json index 1826c7a7..a213dab9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "lunalytics", - "version": "0.10.12", + "version": "0.10.13", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "lunalytics", - "version": "0.10.12", + "version": "0.10.13", "license": "SEE LICENSE IN LICENSE", "dependencies": { "@dnd-kit/core": "6.3.1", @@ -50,6 +50,7 @@ "react-window": "1.8.11", "recharts": "3.2.1", "swapy": "1.0.5", + "systeminformation": "^5.27.11", "ua-parser-js": "2.0.3", "uuid": "11.1.0", "winston": "3.17.0", @@ -12851,6 +12852,32 @@ "integrity": "sha512-XEzy5HCw7yESb7QajKTBJ+NA/BL0kAKlE7XhSMPZawF740X4ws/5CFtXRsVDQ+EztISC759a9+DJM9mxjz4hXg==", "license": "GPL-3.0" }, + "node_modules/systeminformation": { + "version": "5.27.11", + "resolved": "https://registry.npmjs.org/systeminformation/-/systeminformation-5.27.11.tgz", + "integrity": "sha512-K3Lto/2m3K2twmKHdgx5B+0in9qhXK4YnoT9rIlgwN/4v7OV5c8IjbeAUkuky/6VzCQC7iKCAqi8rZathCdjHg==", + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, "node_modules/tar-fs": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", diff --git a/package.json b/package.json index f558e0c8..8ed274e5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lunalytics", - "version": "0.10.12", + "version": "0.10.13", "description": "Open source Node.js server/website monitoring tool", "private": true, "author": "KSJaay ", @@ -81,6 +81,7 @@ "react-window": "1.8.11", "recharts": "3.2.1", "swapy": "1.0.5", + "systeminformation": "^5.27.11", "ua-parser-js": "2.0.3", "uuid": "11.1.0", "winston": "3.17.0", diff --git a/scripts/migrations/0-10-13.js b/scripts/migrations/0-10-13.js new file mode 100644 index 00000000..af6d13fa --- /dev/null +++ b/scripts/migrations/0-10-13.js @@ -0,0 +1,22 @@ +// import local files +import SQLite from '../../server/database/sqlite/setup.js'; +import logger from '../../server/utils/logger.js'; + +const infomation = { + title: 'Add parentId to monitor table', + description: 'Adds parentId to monitor table', + version: '0.10.13', +}; + +const migrate = async () => { + const client = await SQLite.connect(); + + await client.schema.alterTable('monitor', (table) => { + table.string('parentId').nullable().defaultTo(null); + }); + + logger.info('Migrations', { message: '0.10.13 has been applied' }); + return; +}; + +export { infomation, migrate }; diff --git a/scripts/migrations/index.js b/scripts/migrations/index.js index c73d0bff..d76f0b29 100644 --- a/scripts/migrations/index.js +++ b/scripts/migrations/index.js @@ -11,6 +11,7 @@ import { migrate as migrateIncidentEmail } from './0-9-4.js'; import { migrate as migrateMonitor } from './0-9-5.js'; import { migrate as migrateMonitorJson } from './0-9-7.js'; import { migrate as migrateUiOverhaul } from './0-10-0.js'; +import { migrate as migrateMonitorParent } from './0-10-13.js'; const migrationList = { '0.4.0': migrateTcpUpdate, @@ -25,6 +26,7 @@ const migrationList = { '0.9.5': migrateMonitor, '0.9.7': migrateMonitorJson, '0.10.0': migrateUiOverhaul, + '0.10.13': migrateMonitorParent, }; export default migrationList; diff --git a/server/cache/index.js b/server/cache/index.js index 2057896a..82a70895 100644 --- a/server/cache/index.js +++ b/server/cache/index.js @@ -197,6 +197,21 @@ class Master { if (!hasOutage && !hasRecovered) return; if (!monitor.notificationId) return; + if (hasOutage && monitor.parentId) { + const parentMonitor = await fetchMonitor(monitor.parentId).catch( + () => false + ); + + if (parentMonitor) { + const isDown = await isMonitorDown( + parentMonitor.monitorId, + parentMonitor.retry + ); + + if (isDown) return; + } + } + const notification = await fetchNotificationById(monitor.notificationId); if ( diff --git a/server/class/monitor/docker.js b/server/class/monitor/docker.js index 35909f12..4ae2731e 100644 --- a/server/class/monitor/docker.js +++ b/server/class/monitor/docker.js @@ -2,6 +2,7 @@ import { parseJsonOrArray } from '../../utils/parser.js'; const clean = ({ heartbeats = [], ...monitor }, includeHeartbeats = true) => ({ monitorId: monitor.monitorId, + parentId: monitor.parentId || null, name: monitor.name, url: monitor.url, retry: parseInt(monitor.retry), diff --git a/server/class/monitor/http.js b/server/class/monitor/http.js index faaae5ac..0b365026 100644 --- a/server/class/monitor/http.js +++ b/server/class/monitor/http.js @@ -7,6 +7,7 @@ const clean = ( includeCert = true ) => ({ monitorId: monitor.monitorId, + parentId: monitor.parentId || null, name: monitor.name, url: monitor.url, retry: parseInt(monitor.retry), diff --git a/server/class/monitor/json.js b/server/class/monitor/json.js index af5c1c9b..4cb2ab21 100644 --- a/server/class/monitor/json.js +++ b/server/class/monitor/json.js @@ -7,6 +7,7 @@ export const clean = ( includeCert = true ) => ({ monitorId: monitor.monitorId, + parentId: monitor.parentId || null, name: monitor.name, url: monitor.url, retry: parseInt(monitor.retry), diff --git a/server/class/monitor/ping.js b/server/class/monitor/ping.js index 93ce7483..ec36959b 100644 --- a/server/class/monitor/ping.js +++ b/server/class/monitor/ping.js @@ -5,6 +5,7 @@ export const clean = ( includeHeartbeats = true ) => ({ monitorId: monitor.monitorId, + parentId: monitor.parentId || null, name: monitor.name, url: monitor.url, retry: parseInt(monitor.retry), diff --git a/server/class/monitor/tcp.js b/server/class/monitor/tcp.js index 31c727de..6f593122 100644 --- a/server/class/monitor/tcp.js +++ b/server/class/monitor/tcp.js @@ -2,6 +2,7 @@ import { parseJsonOrArray } from '../../utils/parser.js'; const clean = ({ heartbeats = [], ...monitor }, includeHeartbeats = true) => ({ monitorId: monitor.monitorId, + parentId: monitor.parentId || null, name: monitor.name, url: monitor.url, retry: parseInt(monitor.retry), diff --git a/server/database/sqlite/tables/monitor.js b/server/database/sqlite/tables/monitor.js index 7bd9fb2a..5b42fad2 100644 --- a/server/database/sqlite/tables/monitor.js +++ b/server/database/sqlite/tables/monitor.js @@ -5,6 +5,7 @@ export const monitorTable = async (client) => { await client.schema.createTable('monitor', (table) => { table.increments('id'); table.string('monitorId').notNullable().primary(); + table.string('parentId').defaultTo(null); table.string('name').notNullable(); table.string('url').notNullable(); table.integer('port').defaultTo(null); diff --git a/server/index.js b/server/index.js index 41ac1879..28b73a9b 100644 --- a/server/index.js +++ b/server/index.js @@ -17,10 +17,7 @@ import initialiseCronJobs from './utils/cron.js'; import migrateDatabase from '../scripts/migrate.js'; import addInviteToCookie from './middleware/addInviteToCookie.js'; import { loadIcons } from './utils/icons.js'; -import { - getVersionInfo, - startVersionCheck -} from './utils/checkVersion.js'; +import { getVersionInfo, startVersionCheck } from './utils/checkVersion.js'; const app = express(); diff --git a/server/middleware/monitor/add.js b/server/middleware/monitor/add.js index 765b7e50..af82eb45 100644 --- a/server/middleware/monitor/add.js +++ b/server/middleware/monitor/add.js @@ -25,6 +25,7 @@ export const defaultMonitorData = (body) => ({ url: body.url, interval: body.interval ?? 60, monitorId: body.monitorId, + parentId: body.parentId ?? null, retry: body.retry ?? 1, retryInterval: body.retryInterval ?? 60, requestTimeout: body.requestTimeout ?? 60, @@ -51,6 +52,7 @@ export const formatMonitorData = (body, email) => { url: body.url, interval: body.interval, monitorId: body.monitorId, + parentId: body.parentId, retry: body.retry, retryInterval: body.retryInterval, requestTimeout: body.requestTimeout, diff --git a/test/server/class/monitor.test.js b/test/server/class/monitor.test.js index 87314480..a2db826e 100644 --- a/test/server/class/monitor.test.js +++ b/test/server/class/monitor.test.js @@ -4,6 +4,7 @@ import { cleanMonitor } from '../../../server/class/monitor/index'; describe('Monitor - Class', () => { const monitor = { monitorId: '4d048471-9e85-428b-8050-4238f6033478', + parentId: '4d048471-9e85-428b-8050-4238f6033479', name: 'Lunalytics', url: 'https://demo.lunalytics.xyz/api/status', createdAt: '2025-08-23T17:00:00.000Z', @@ -48,6 +49,7 @@ describe('Monitor - Class', () => { it('should return valid monitor using cleanPartialMonitor', () => { expect(cleanMonitor(monitor, false, false)).toEqual({ monitorId: '4d048471-9e85-428b-8050-4238f6033478', + parentId: '4d048471-9e85-428b-8050-4238f6033479', name: 'Lunalytics', url: 'https://demo.lunalytics.xyz/api/status', createdAt: '2025-08-23T17:00:00.000Z', @@ -87,6 +89,7 @@ describe('Monitor - Class', () => { }) ).toEqual({ monitorId: '4d048471-9e85-428b-8050-4238f6033478', + parentId: '4d048471-9e85-428b-8050-4238f6033479', name: 'Lunalytics', url: 'https://demo.lunalytics.xyz/api/status', createdAt: '2025-08-23T17:00:00.000Z', diff --git a/test/server/middleware/monitor/add.test.js b/test/server/middleware/monitor/add.test.js index 53a96fbf..e51e677b 100644 --- a/test/server/middleware/monitor/add.test.js +++ b/test/server/middleware/monitor/add.test.js @@ -154,6 +154,7 @@ describe('Add Monitor - Middleware', () => { requestTimeout: fakeRequest.body.requestTimeout, notificationId: fakeRequest.body.notificationId, notificationType: fakeRequest.body.notificationType, + parentId: null, headers: JSON.stringify(fakeRequest.body.headers), body: JSON.stringify(fakeRequest.body.body), email: user.email, @@ -276,6 +277,7 @@ describe('Add Monitor - Middleware', () => { requestTimeout: fakeRequest.body.requestTimeout, notificationId: fakeRequest.body.notificationId, notificationType: fakeRequest.body.notificationType, + parentId: null, email: user.email, port: fakeRequest.body.port, valid_status_codes: '', diff --git a/test/server/middleware/monitor/edit.test.js b/test/server/middleware/monitor/edit.test.js index b8498373..40aecb84 100644 --- a/test/server/middleware/monitor/edit.test.js +++ b/test/server/middleware/monitor/edit.test.js @@ -154,6 +154,7 @@ describe('Edit Monitor - Middleware', () => { requestTimeout: fakeRequest.body.requestTimeout, notificationId: fakeRequest.body.notificationId, notificationType: fakeRequest.body.notificationType, + parentId: null, body: JSON.stringify(fakeRequest.body.body), headers: JSON.stringify(fakeRequest.body.headers), email: user.email, @@ -275,6 +276,7 @@ describe('Edit Monitor - Middleware', () => { requestTimeout: fakeRequest.body.requestTimeout, notificationId: fakeRequest.body.notificationId, notificationType: fakeRequest.body.notificationType, + parentId: null, email: user.email, port: fakeRequest.body.port, valid_status_codes: '', From 3188239334b3108b4524fde488af22bc23021ddd Mon Sep 17 00:00:00 2001 From: ksjaay Date: Sun, 30 Nov 2025 16:21:01 +0000 Subject: [PATCH 4/4] Adds classNames to make classes easier to read --- app/components/modal/monitor/configure.tsx | 55 +++++++++++++--------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/app/components/modal/monitor/configure.tsx b/app/components/modal/monitor/configure.tsx index 39b9aac3..b2a226cb 100644 --- a/app/components/modal/monitor/configure.tsx +++ b/app/components/modal/monitor/configure.tsx @@ -17,6 +17,7 @@ import MonitorConfigureDockerModal from './configure/docker'; import MonitorConfigureJsonQueryModal from './configure/json'; import type { MonitorProps } from '../../../types/monitor'; import MonitorConfigurePushModal from './configure/push'; +import classNames from 'classnames'; const pages = [ { id: 'basic', title: 'Basic', icon: }, @@ -43,7 +44,14 @@ const MonitorConfigureModal = ({ isEdit = false, }: ModalProps) => { const [pageId, setPageId] = useState('basic'); - const { errors, inputs, handleActionButtons, handleInput, errorPages, setErrorPages } = useMonitorForm( + const { + errors, + inputs, + handleActionButtons, + handleInput, + errorPages, + setErrorPages, + } = useMonitorForm( monitor, isEdit, closeModal, @@ -64,27 +72,30 @@ const MonitorConfigureModal = ({ settings to your liking.
- {pages.map((page) => ( -
{ - setErrorPages(oldSet => { - const trimmedErrorPages = new Set([...oldSet]) - trimmedErrorPages.delete(pageId) - return trimmedErrorPages - }) - setPageId(page.id) - - }} - key={page.id} - > - {page.icon} -
{page.title}
-
- ))} + {pages.map((page) => { + const classes = classNames('monitor-configure-page-button', { + active: page.id === pageId, + 'error-circle': errorPages.has(page.id), + }); + + return ( +
{ + setErrorPages((oldSet) => { + const trimmedErrorPages = new Set([...oldSet]); + trimmedErrorPages.delete(pageId); + return trimmedErrorPages; + }); + setPageId(page.id); + }} + key={page.id} + > + {page.icon} +
{page.title}
+
+ ); + })}