Taichi Masuyama 4 лет назад
Родитель
Сommit
ac68e7a7c4

+ 13 - 0
packages/app/src/stores/middlewares/serialize.ts

@@ -0,0 +1,13 @@
+import { Middleware, SWRHook } from 'swr';
+
+export const serializeKey: Middleware = (useSWRNext: SWRHook) => {
+  return (key, fetcher, config) => {
+    const serializedKey = Array.isArray(key) ? JSON.stringify(key) : key;
+
+    if (fetcher == null) {
+      return useSWRNext(serializedKey, config);
+    }
+
+    return useSWRNext(serializedKey, key => fetcher(...JSON.parse(key)), config);
+  };
+};

+ 3 - 0
packages/app/src/stores/user-group.tsx

@@ -4,6 +4,7 @@ import useSWRImmutable from 'swr/immutable';
 import { apiv3Get } from '~/client/util/apiv3-client';
 import { IUserGroupHasId, IUserGroupRelationHasId } from '~/interfaces/user';
 import { UserGroupListResult, ChildUserGroupListResult, UserGroupRelationListResult } from '~/interfaces/user-group-response';
+import { serializeKey } from './middlewares/serialize';
 
 
 export const useSWRxUserGroupList = (initialData?: IUserGroupHasId[]): SWRResponse<UserGroupListResult, Error> => {
@@ -24,6 +25,7 @@ export const useSWRxChildUserGroupList = (
     (endpoint, parentIds, includeGrandChildren) => apiv3Get(endpoint, { parentIds, includeGrandChildren }).then(result => result.data),
     {
       fallbackData: initialData,
+      use: [serializeKey],
     },
   );
 };
@@ -36,6 +38,7 @@ export const useSWRxUserGroupRelationList = (
     (endpoint, parentIds, childGroupIds) => apiv3Get(endpoint, { parentIds, childGroupIds }).then(result => result.data),
     {
       fallbackData: initialData,
+      use: [serializeKey],
     },
   );
 };