Skip to content

Commit 26d7d7e

Browse files
committed
Fix SWR key logic
1 parent d6b6ac6 commit 26d7d7e

File tree

5 files changed

+41
-22
lines changed

5 files changed

+41
-22
lines changed

resources/scripts/api/account/activity.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
1-
import useUserSWRContentKey from '@/plugins/useUserSWRContentKey';
21
import useSWR, { ConfigInterface, responseInterface } from 'swr';
32
import { ActivityLog, Transformers } from '@definitions/user';
43
import { AxiosError } from 'axios';
54
import http, { PaginatedResult, QueryBuilderParams, withQueryBuilderParams } from '@/api/http';
65
import { toPaginatedSet } from '@definitions/helpers';
76
import useFilteredObject from '@/plugins/useFilteredObject';
7+
import { useUserSWRKey } from '@/plugins/useSWRKey';
88

99
export type ActivityLogFilters = QueryBuilderParams<'ip' | 'event', 'timestamp'>;
1010

1111
const useActivityLogs = (
1212
filters?: ActivityLogFilters,
1313
config?: ConfigInterface<PaginatedResult<ActivityLog>, AxiosError>
1414
): responseInterface<PaginatedResult<ActivityLog>, AxiosError> => {
15-
const key = useUserSWRContentKey(['account', 'activity', JSON.stringify(useFilteredObject(filters || {}))]);
15+
const key = useUserSWRKey(['account', 'activity', JSON.stringify(useFilteredObject(filters || {}))]);
1616

1717
return useSWR<PaginatedResult<ActivityLog>>(
1818
key,

resources/scripts/api/account/ssh-keys.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import useSWR, { ConfigInterface } from 'swr';
2-
import useUserSWRContentKey from '@/plugins/useUserSWRContentKey';
32
import http, { FractalResponseList } from '@/api/http';
43
import { SSHKey, Transformers } from '@definitions/user';
54
import { AxiosError } from 'axios';
5+
import { useUserSWRKey } from '@/plugins/useSWRKey';
66

77
const useSSHKeys = (config?: ConfigInterface<SSHKey[], AxiosError>) => {
8-
const key = useUserSWRContentKey(['account', 'ssh-keys']);
8+
const key = useUserSWRKey(['account', 'ssh-keys']);
99

1010
return useSWR(
1111
key,

resources/scripts/api/server/activity.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { AxiosError } from 'axios';
44
import http, { PaginatedResult, QueryBuilderParams, withQueryBuilderParams } from '@/api/http';
55
import { toPaginatedSet } from '@definitions/helpers';
66
import useFilteredObject from '@/plugins/useFilteredObject';
7+
import { useServerSWRKey } from '@/plugins/useSWRKey';
78
import { ServerContext } from '@/state/server';
89

910
export type ActivityLogFilters = QueryBuilderParams<'ip' | 'event', 'timestamp'>;
@@ -12,10 +13,11 @@ const useActivityLogs = (
1213
filters?: ActivityLogFilters,
1314
config?: ConfigInterface<PaginatedResult<ActivityLog>, AxiosError>
1415
): responseInterface<PaginatedResult<ActivityLog>, AxiosError> => {
15-
const uuid = ServerContext.useStoreState((state) => state.server.data!.uuid);
16+
const uuid = ServerContext.useStoreState((state) => state.server.data?.uuid);
17+
const key = useServerSWRKey(['activity', useFilteredObject(filters || {})]);
1618

1719
return useSWR<PaginatedResult<ActivityLog>>(
18-
['server:activty', uuid, useFilteredObject(filters || {})],
20+
key,
1921
async () => {
2022
const { data } = await http.get(`/api/client/servers/${uuid}/activity`, {
2123
params: {
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
import { useDeepCompareMemo } from '@/plugins/useDeepCompareMemo';
2+
import { ServerContext } from '@/state/server';
3+
import { useStoreState } from '@/state/hooks';
4+
5+
// eslint-disable-next-line @typescript-eslint/ban-types
6+
type Context = string | string[] | (string | number | null | {})[];
7+
8+
function useSWRKey(context: Context, prefix: string | null = null): string {
9+
const key = useDeepCompareMemo((): string => {
10+
return (Array.isArray(context) ? context : [context]).map((value) => JSON.stringify(value)).join(':');
11+
}, [context]);
12+
13+
if (!key.trim().length) {
14+
throw new Error('Must provide a valid context key to "useSWRKey".');
15+
}
16+
17+
return `swr::${prefix ? `${prefix}:` : ''}${key.trim()}`;
18+
}
19+
20+
function useServerSWRKey(context: Context): string {
21+
const uuid = ServerContext.useStoreState((state) => state.server.data?.uuid);
22+
23+
return useSWRKey(context, `server:${uuid}`);
24+
}
25+
26+
function useUserSWRKey(context: Context): string {
27+
const uuid = useStoreState((state) => state.user.data?.uuid);
28+
29+
return useSWRKey(context, `user:${uuid}`);
30+
}
31+
32+
export default useSWRKey;
33+
export { useServerSWRKey, useUserSWRKey };

resources/scripts/plugins/useUserSWRContentKey.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

0 commit comments

Comments
 (0)