Skip to content

Commit c53ffba

Browse files
Handle events overview when event definition is missing (#25548)
* Handle case where event definition is missing * add cl entry
1 parent b2858ec commit c53ffba

4 files changed

Lines changed: 17 additions & 16 deletions

File tree

changelog/unreleased/pr-25548.toml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type = "fixed"
2+
message = "Show event definition ID instead of throwing errors in the Events Overview widget when the event definition has been deleted"
3+
4+
pulls = ["25548"]
5+
issues = ["graylog-plugin-enterprise#13756"]

graylog2-web-interface/src/components/events/events/hooks/useEventDefinition.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,21 +19,20 @@ import { keepPreviousData, useQuery } from '@tanstack/react-query';
1919
import fetch from 'logic/rest/FetchProvider';
2020
import { qualifyUrl } from 'util/URLUtils';
2121
import type { EventDefinition } from 'components/event-definitions/event-definitions-types';
22-
import { defaultOnError } from 'util/conditional/onError';
2322

2423
export const fetchEventDefinitionDetails = async (eventDefinitionId: string): Promise<EventDefinition> =>
2524
fetch('GET', qualifyUrl(`/events/definitions/${eventDefinitionId}`));
2625

2726
const useEventDefinition = (eventDefId: string, enabled = true) => {
28-
const { data, isFetching, isInitialLoading } = useQuery({
27+
const { data, isFetching, isInitialLoading, isError } = useQuery({
2928
queryKey: ['get-event-definition-details', eventDefId],
30-
queryFn: () => defaultOnError(fetchEventDefinitionDetails(eventDefId), 'Loading archives failed with status'),
29+
queryFn: () => fetchEventDefinitionDetails(eventDefId),
3130
retry: 0,
3231
placeholderData: keepPreviousData,
3332
enabled: !!eventDefId && enabled,
3433
});
3534

36-
return { data, isFetching, isInitialLoading };
35+
return { data, isFetching, isInitialLoading, isError };
3736
};
3837

3938
export default useEventDefinition;

graylog2-web-interface/src/views/components/widgets/events/EventsList/EventDetails.test.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ describe('EventDetails', () => {
5252
);
5353

5454
asMock(useCurrentUser).mockReturnValue(adminUser);
55-
asMock(useEventDefinition).mockReturnValue({ data: undefined, isFetching: false, isInitialLoading: false });
55+
asMock(useEventDefinition).mockReturnValue({ data: undefined, isFetching: false, isInitialLoading: false, isError: false });
5656

5757
asMock(useEventById).mockImplementation(() => ({
5858
data: mockEventData.event,
@@ -86,6 +86,7 @@ describe('EventDetails', () => {
8686
data: mockEventDefinitionTwoAggregations,
8787
isFetching: false,
8888
isInitialLoading: false,
89+
isError: false,
8990
});
9091

9192
renderEventDetails();

graylog2-web-interface/src/views/components/widgets/events/filters/EventDefinitionName.tsx

Lines changed: 7 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -30,26 +30,22 @@ type Props = {
3030
const EventDefinitionName = ({ eventDefinitionId, displayAsLink = true }: Props) => {
3131
const currentUser = useCurrentUser();
3232
const canViewDefinition = isPermitted(currentUser.permissions, `eventdefinitions:read:${eventDefinitionId}`);
33-
const { data: eventDefinition, isFetching } = useEventDefinition(eventDefinitionId, canViewDefinition);
33+
const { data: eventDefinition, isFetching, isError } = useEventDefinition(eventDefinitionId, canViewDefinition);
3434
const title = eventDefinition?.title ?? eventDefinitionId;
3535

3636
if (isFetching) {
3737
return <Spinner />;
3838
}
3939

40-
if (!displayAsLink || !canViewDefinition) {
40+
if (!displayAsLink || !canViewDefinition || !eventDefinition || isError) {
4141
return <>{title}</>;
4242
}
4343

44-
if (eventDefinition) {
45-
return (
46-
<Link to={Routes.ALERTS.DEFINITIONS.show(eventDefinition.id)} target="_blank">
47-
{title}
48-
</Link>
49-
);
50-
}
51-
52-
return null;
44+
return (
45+
<Link to={Routes.ALERTS.DEFINITIONS.show(eventDefinition.id)} target="_blank">
46+
{title}
47+
</Link>
48+
);
5349
};
5450

5551
export default EventDefinitionName;

0 commit comments

Comments
 (0)