From 964daef4c17ccd51caa96e9c4470355e13b81f36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Carl-Gerhard=20Lindesva=CC=88rd?= Date: Fri, 27 Dec 2024 21:25:12 +0100 Subject: [PATCH] fix(dashboard): handle `*` (any events) for notifications --- .../src/components/notifications/rule-card.tsx | 2 +- packages/db/src/services/notification.service.ts | 16 ++++++++-------- packages/validation/src/index.ts | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/apps/dashboard/src/components/notifications/rule-card.tsx b/apps/dashboard/src/components/notifications/rule-card.tsx index 8a8c3d87..7e49e805 100644 --- a/apps/dashboard/src/components/notifications/rule-card.tsx +++ b/apps/dashboard/src/components/notifications/rule-card.tsx @@ -34,7 +34,7 @@ function EventBadge({ } > - {event.name} + {event.name === '*' ? 'Any event' : event.name} {Boolean(event.filters.length) && ( )} diff --git a/packages/db/src/services/notification.service.ts b/packages/db/src/services/notification.service.ts index e2a3f2fe..908de618 100644 --- a/packages/db/src/services/notification.service.ts +++ b/packages/db/src/services/notification.service.ts @@ -134,7 +134,7 @@ export function triggerNotification(notification: Notification) { } function matchEventFilters( - event: IServiceCreateEventPayload, + payload: IServiceCreateEventPayload, filters: IChartEventFilter[], ) { return filters.every((filter) => { @@ -144,15 +144,15 @@ function matchEventFilters( if (name === 'has_profile') { if (value.includes('true')) { - return event.profileId !== event.deviceId; + return payload.profileId !== payload.deviceId; } - return event.profileId === event.deviceId; + return payload.profileId === payload.deviceId; } const propertyValue = ( name.startsWith('properties.') - ? pathOr('', name.split('.'), event) - : pathOr('', [name], event) + ? pathOr('', name.split('.'), payload) + : pathOr('', [name], payload) ).trim(); switch (operator) { @@ -180,15 +180,15 @@ function matchEventFilters( } export function matchEvent( - event: IServiceCreateEventPayload, + payload: IServiceCreateEventPayload, chartEvent: IChartEvent, ) { - if (event.name !== chartEvent.name) { + if (payload.name !== chartEvent.name && chartEvent.name !== '*') { return false; } if (chartEvent.filters.length > 0) { - return matchEventFilters(event, chartEvent.filters); + return matchEventFilters(payload, chartEvent.filters); } return true; diff --git a/packages/validation/src/index.ts b/packages/validation/src/index.ts index 372a7e0f..ea0d7e26 100644 --- a/packages/validation/src/index.ts +++ b/packages/validation/src/index.ts @@ -189,7 +189,7 @@ export const zWebhookConfig = z.object({ type: z.literal('webhook'), url: z.string().url(), headers: z.record(z.string()), - payload: z.record(z.string(), z.unknown()), + payload: z.record(z.string(), z.unknown()).optional(), }); export type IWebhookConfig = z.infer;