Skip to content

Commit f810e2b

Browse files
fix(alerts): memoize selecting alerts (#231)
1 parent a0b8d1d commit f810e2b

5 files changed

+37
-8
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
1+
import {
2+
AlertConversation,
3+
V1GetWorkspaceAlertsResponse,
4+
} from "@/api/generated";
15
import { filterAlertsCritical } from "../lib/filter-alerts-critical";
26
import { isAlertMalicious } from "../lib/is-alert-malicious";
37
import { useQueryGetWorkspaceAlerts } from "./use-query-get-workspace-alerts";
48

9+
// NOTE: This needs to be a stable function reference to enable memo-isation of
10+
// the select operation on each React re-render.
11+
function select(data: V1GetWorkspaceAlertsResponse): AlertConversation[] {
12+
return filterAlertsCritical(data).filter(isAlertMalicious);
13+
}
14+
515
export function useQueryGetWorkspaceAlertsMaliciousPkg() {
616
return useQueryGetWorkspaceAlerts({
7-
select: (data) => filterAlertsCritical(data).filter(isAlertMalicious),
17+
select,
818
});
919
}
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
1+
import {
2+
V1GetWorkspaceAlertsResponse,
3+
AlertConversation,
4+
} from "@/api/generated";
15
import { filterAlertsCritical } from "../lib/filter-alerts-critical";
26
import { isAlertSecret } from "../lib/is-alert-secret";
37
import { useQueryGetWorkspaceAlerts } from "./use-query-get-workspace-alerts";
48

9+
// NOTE: This needs to be a stable function reference to enable memo-isation of
10+
// the select operation on each React re-render.
11+
function select(data: V1GetWorkspaceAlertsResponse): AlertConversation[] {
12+
return filterAlertsCritical(data).filter(isAlertSecret);
13+
}
14+
515
export function useQueryGetWorkspaceAlertSecrets() {
616
return useQueryGetWorkspaceAlerts({
7-
select: (data) => filterAlertsCritical(data).filter(isAlertSecret),
17+
select,
818
});
919
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
1+
import { ListActiveWorkspacesResponse } from "@/api/generated";
12
import { useActiveWorkspaces } from "./use-active-workspaces";
23

4+
// NOTE: This needs to be a stable function reference to enable memo-isation of
5+
// the select operation on each React re-render.
6+
function select(data: ListActiveWorkspacesResponse | undefined): string | null {
7+
return data?.workspaces?.[0]?.name ?? null;
8+
}
9+
310
export function useActiveWorkspaceName() {
411
return useActiveWorkspaces({
5-
select: (d) => d?.workspaces?.[0]?.name ?? null,
12+
select,
613
});
714
}

src/hooks/useAlertsData.ts

+2
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@ export const useFilteredAlerts = () => {
5252
const { isMaliciousFilterActive, search } = useAlertSearch();
5353

5454
return useAlertsData({
55+
// NOTE: Inlined select will run on every render, we'll remove this over
56+
// time though - AMG
5557
select: (
5658
data: Exclude<ReturnType<typeof useAlertsData>["data"], undefined>,
5759
) => {

src/hooks/usePromptsData.ts

+5-5
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,13 @@ import {
77
import { v1GetWorkspaceMessagesOptions } from "@/api/generated/@tanstack/react-query.gen";
88
import { useActiveWorkspaceName } from "@/features/workspace/hooks/use-active-workspace-name";
99

10-
const selectConversations = (
11-
data: V1GetWorkspaceMessagesResponse,
12-
): Conversation[] => {
10+
// NOTE: This needs to be a stable function reference to enable memo-isation of
11+
// the select operation on each React re-render.
12+
function select(data: V1GetWorkspaceMessagesResponse): Conversation[] {
1313
return data.filter((prompt) =>
1414
prompt.question_answers?.every((item) => item.answer && item.question),
1515
);
16-
};
16+
}
1717

1818
export const usePromptsData = () => {
1919
const { data: activeWorkspaceName } = useActiveWorkspaceName();
@@ -26,6 +26,6 @@ export const usePromptsData = () => {
2626

2727
return useQuery({
2828
...v1GetWorkspaceMessagesOptions(options),
29-
select: selectConversations,
29+
select: select,
3030
});
3131
};

0 commit comments

Comments
 (0)