Skip to content

Commit 508f4f2

Browse files
ryan953andrewshie-sentry
authored andcommitted
ref(replay): Refactor how we refresh bulk delete notifications (#97893)
Instead of getting a direct reference to the `refresh` method, we can instead clear the cached data which will trigger a refresh. This decouples the Refresh button from the rest of the hook because they're two ideas and don't need to be in the same spot in the same file like they were before.
1 parent 44493fc commit 508f4f2

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
lines changed

static/app/components/replays/bulkDelete/useReplayBulkDeleteAuditLog.tsx

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,41 @@
11
import type {ReplayBulkDeleteAuditLog} from 'sentry/components/replays/bulkDelete/types';
2-
import {useApiQuery} from 'sentry/utils/queryClient';
2+
import {useApiQuery, type ApiQueryKey} from 'sentry/utils/queryClient';
33
import useOrganization from 'sentry/utils/useOrganization';
44

5+
type Query = {
6+
referrer: string;
7+
offset?: number;
8+
per_page?: number;
9+
};
10+
511
interface Props {
612
projectSlug: string;
7-
query: {
8-
referrer: string;
9-
offset?: number;
10-
per_page?: number;
11-
};
13+
query: Query;
1214
enabled?: boolean;
1315
refetchIntervalMs?: number;
1416
}
1517

18+
export function useReplayBulkDeleteAuditLogQueryKey({
19+
projectSlug,
20+
query,
21+
}: {
22+
projectSlug: string;
23+
query: Query;
24+
}): ApiQueryKey {
25+
const organization = useOrganization();
26+
return [`/projects/${organization.slug}/${projectSlug}/replays/jobs/delete/`, {query}];
27+
}
28+
1629
export default function useReplayBulkDeleteAuditLog({
1730
enabled,
1831
projectSlug,
1932
query,
2033
refetchIntervalMs,
2134
}: Props) {
22-
const organization = useOrganization();
35+
const queryKey = useReplayBulkDeleteAuditLogQueryKey({projectSlug, query});
2336
const {data, error, getResponseHeader, isPending, refetch} = useApiQuery<{
2437
data: ReplayBulkDeleteAuditLog[];
25-
}>([`/projects/${organization.slug}/${projectSlug}/replays/jobs/delete/`, {query}], {
38+
}>(queryKey, {
2639
enabled,
2740
refetchInterval: refetchIntervalMs ?? 1_000,
2841
retry: false,

static/app/components/replays/table/deleteReplays.tsx

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Fragment} from 'react';
1+
import {Fragment, useCallback} from 'react';
22
import styled from '@emotion/styled';
33
import invariant from 'invariant';
44

@@ -14,15 +14,15 @@ import {Tooltip} from 'sentry/components/core/tooltip';
1414
import Duration from 'sentry/components/duration/duration';
1515
import ErrorBoundary from 'sentry/components/errorBoundary';
1616
import {KeyValueData} from 'sentry/components/keyValueData';
17-
import useReplayBulkDeleteAuditLog from 'sentry/components/replays/bulkDelete/useReplayBulkDeleteAuditLog';
17+
import {useReplayBulkDeleteAuditLogQueryKey} from 'sentry/components/replays/bulkDelete/useReplayBulkDeleteAuditLog';
1818
import {SimpleTable} from 'sentry/components/tables/simpleTable';
1919
import TimeSince from 'sentry/components/timeSince';
2020
import {IconCalendar, IconDelete} from 'sentry/icons';
2121
import {t, tct, tn} from 'sentry/locale';
2222
import {space} from 'sentry/styles/space';
2323
import type {Project} from 'sentry/types/project';
2424
import {getShortEventId} from 'sentry/utils/events';
25-
import type {QueryKeyEndpointOptions} from 'sentry/utils/queryClient';
25+
import {useQueryClient, type QueryKeyEndpointOptions} from 'sentry/utils/queryClient';
2626
import {decodeList} from 'sentry/utils/queryString';
2727
import useDeleteReplays, {
2828
type ReplayBulkDeletePayload,
@@ -40,6 +40,7 @@ interface Props {
4040
}
4141

4242
export default function DeleteReplays({selectedIds, replays, queryOptions}: Props) {
43+
const queryClient = useQueryClient();
4344
const analyticsArea = useAnalyticsArea();
4445
const {project: projectIds} = useLocationQuery({
4546
fields: {
@@ -59,10 +60,13 @@ export default function DeleteReplays({selectedIds, replays, queryOptions}: Prop
5960

6061
const settingsPath = `/settings/projects/${project?.slug}/replays/?replaySettingsTab=bulk-delete`;
6162

62-
const {refetch: refetchAuditLog} = useReplayBulkDeleteAuditLog({
63+
const queryKey = useReplayBulkDeleteAuditLogQueryKey({
6364
projectSlug: project?.slug ?? '',
6465
query: {referrer: analyticsArea},
6566
});
67+
const refetchAuditLog = useCallback(() => {
68+
queryClient.invalidateQueries({queryKey});
69+
}, [queryClient, queryKey]);
6670

6771
return (
6872
<Tooltip

0 commit comments

Comments
 (0)