Path: blob/1.0-develop/resources/scripts/plugins/useSWRKey.ts
7458 views
import { useDeepCompareMemo } from '@/plugins/useDeepCompareMemo';1import { ServerContext } from '@/state/server';2import { useStoreState } from '@/state/hooks';34// eslint-disable-next-line @typescript-eslint/ban-types5type Context = string | string[] | (string | number | null | {})[];67function useSWRKey(context: Context, prefix: string | null = null): string {8const key = useDeepCompareMemo((): string => {9return (Array.isArray(context) ? context : [context]).map((value) => JSON.stringify(value)).join(':');10}, [context]);1112if (!key.trim().length) {13throw new Error('Must provide a valid context key to "useSWRKey".');14}1516return `swr::${prefix ? `${prefix}:` : ''}${key.trim()}`;17}1819function useServerSWRKey(context: Context): string {20const uuid = ServerContext.useStoreState((state) => state.server.data?.uuid);2122return useSWRKey(context, `server:${uuid}`);23}2425function useUserSWRKey(context: Context): string {26const uuid = useStoreState((state) => state.user.data?.uuid);2728return useSWRKey(context, `user:${uuid}`);29}3031export default useSWRKey;32export { useServerSWRKey, useUserSWRKey };333435