Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pterodactyl
GitHub Repository: pterodactyl/panel
Path: blob/1.0-develop/resources/scripts/plugins/useSWRKey.ts
7458 views
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 };
34
35