From d6ebb2680e76669ddd824a80eaadcebd554cfcae Mon Sep 17 00:00:00 2001
From: Linus Pahl
Date: Thu, 21 Mar 2024 16:12:11 +0100
Subject: [PATCH] Improve reusability of event definition wizard. (#18731)
* Unify event definition type.
* Remove redundant event definition type.
* Create component for event definition form buttons.
* Make event definition form controls pluggable.
* Fixing linter hint.
* Default to first step when in security mode
* Fix duplicate in event definition form (#18722)
* register event definition export globally
- EventDefinitionsBindings, EventNotificationsBindings, FieldValueProvidersBindings
* fix types
* Fix search query being erased while typing
* fix test
* fix types
* Make initial step configurable.
* Only set URL query param `step` when necessary.
* Refactor from controls.
* Update props:
* Reimplement `onChange` in `FilterForm` to fix problem with params.
* make embryonic only constrained to FilterForm
* Fixing linter hints.
---------
Co-authored-by: Simon Huang
Co-authored-by: Ousmane SAMBA
Co-authored-by: Ousmane Samba
---
.../src/@types/graylog-web-plugin/index.d.ts | 19 ++-
.../EventConditionForm.tsx | 7 +-
.../EventDefinitionForm.tsx | 143 +++++++-----------
.../EventDefinitionFormContainer.test.tsx | 14 +-
.../EventDefinitionFormContainer.tsx | 66 +++++---
.../EventDefinitionFormControls.tsx | 58 +++++++
.../EventDefinitionSummary.tsx | 4 -
.../event-definition-form/FieldsForm.tsx | 3 -
.../{index.js => bindings.ts} | 6 +-
.../event-definition-types/FilterForm.tsx | 23 +--
.../{index.js => bindings.js} | 5 +-
.../event-definitions-types.ts | 75 ++++++---
.../EventDefinitionsContainer.tsx | 1 -
.../EventNotificationFormContainer.jsx | 4 -
.../{index.js => bindings.ts} | 6 +-
.../EventNotificationsContainer.tsx | 3 -
.../events/events/EventsContainer.jsx | 2 -
.../events/hooks/useEventDefinition.tsx | 2 +-
.../hooks/useAlertAndEventDefinitionData.tsx | 2 +-
.../src/hooks/useEventDefinition.tsx | 2 +-
graylog2-web-interface/src/index.tsx | 6 +
.../src/logic/alerts/types.ts | 56 -------
.../src/pages/CreateEventDefinitionPage.tsx | 9 +-
.../src/pages/EditEventDefinitionPage.tsx | 24 ++-
.../src/pages/ShowEventNotificationPage.tsx | 1 -
.../logic/views/UseCreateViewForEvent.ts | 3 +-
.../views/UseCreateViewForEventDefinition.ts | 2 +-
.../test/fixtures/eventDefinition.ts | 2 +
.../mocking/EventAndEventDefinitions_mock.ts | 3 +-
29 files changed, 307 insertions(+), 244 deletions(-)
create mode 100644 graylog2-web-interface/src/components/event-definitions/event-definition-form/EventDefinitionFormControls.tsx
rename graylog2-web-interface/src/components/event-definitions/event-definition-form/field-value-providers/{index.js => bindings.ts} (93%)
rename graylog2-web-interface/src/components/event-definitions/event-definition-types/{index.js => bindings.js} (91%)
rename graylog2-web-interface/src/components/event-notifications/event-notification-types/{index.js => bindings.ts} (95%)
delete mode 100644 graylog2-web-interface/src/logic/alerts/types.ts
diff --git a/graylog2-web-interface/src/@types/graylog-web-plugin/index.d.ts b/graylog2-web-interface/src/@types/graylog-web-plugin/index.d.ts
index 4c8e1040b5..59250ef87f 100644
--- a/graylog2-web-interface/src/@types/graylog-web-plugin/index.d.ts
+++ b/graylog2-web-interface/src/@types/graylog-web-plugin/index.d.ts
@@ -137,13 +137,30 @@ type DataTiering = {
}>,
}
+type FieldValueProvider = {
+ type: string,
+ displayName: string,
+ formComponent: React.ComponentType,
+ summaryComponent: React.ComponentType,
+ defaultConfig: {
+ template?: string,
+ table_name?: string,
+ key_field?: string,
+ },
+ requiredFields: {
+ template?: string,
+ table_name?: string,
+ key_field?: string,
+ },
+}
declare module 'graylog-web-plugin/plugin' {
interface PluginExports {
navigation?: Array;
dataTiering?: Array
defaultNavigation?: Array;
navigationItems?: Array;
- globalNotifications?: Array
+ globalNotifications?: Array;
+ fieldValueProviders?:Array;
// Global context providers allow to fetch and process data once
// and provide the result for all components in your plugin.
globalContextProviders?: Array>>,
diff --git a/graylog2-web-interface/src/components/event-definitions/event-definition-form/EventConditionForm.tsx b/graylog2-web-interface/src/components/event-definitions/event-definition-form/EventConditionForm.tsx
index b44647e5bf..a838034e27 100644
--- a/graylog2-web-interface/src/components/event-definitions/event-definition-form/EventConditionForm.tsx
+++ b/graylog2-web-interface/src/components/event-definitions/event-definition-form/EventConditionForm.tsx
@@ -25,10 +25,10 @@ import { Select } from 'components/common';
import { Clearfix, Col, ControlLabel, FormGroup, HelpBlock, Row } from 'components/bootstrap';
import { HelpPanel } from 'components/event-definitions/common/HelpPanel';
import type User from 'logic/users/User';
-import { getPathnameWithoutId } from 'util/URLUtils';
import useSendTelemetry from 'logic/telemetry/useSendTelemetry';
import useLocation from 'routing/useLocation';
import { TELEMETRY_EVENT_TYPE } from 'logic/telemetry/Constants';
+import { getPathnameWithoutId } from 'util/URLUtils';
import styles from './EventConditionForm.css';
@@ -143,9 +143,10 @@ const EventConditionForm = ({ action, entityTypes, eventDefinition, validation,
Configure how Graylog should create Events of this kind. You can later use those Events as input on other
Conditions, making it possible to build powerful Conditions based on others.
-
- Condition Type
+
+ Condition Type