Просмотр исходного кода

Merge pull request #5240 from weseek/feat/85844-get-selectable-groups-with-swr

feat: 85844 Get selectable groups with SWR
Shun Miyazawa 4 лет назад
Родитель
Сommit
e17bc52f46

+ 2 - 1
packages/app/src/components/Admin/UserGroupDetail/UserGroupDetailPage.tsx

@@ -18,7 +18,7 @@ import { IPageHasId } from '~/interfaces/page';
 import {
 import {
   IUserGroup, IUserGroupHasId, IUserGroupRelation,
   IUserGroup, IUserGroupHasId, IUserGroupRelation,
 } from '~/interfaces/user';
 } from '~/interfaces/user';
-import { useSWRxUserGroupPages, useSWRxUserGroupRelations } from '~/stores/user-group';
+import { useSWRxUserGroupPages, useSWRxUserGroupRelations, useSWRxSelectableUserGroups } from '~/stores/user-group';
 
 
 
 
 const UserGroupDetailPage: FC = () => {
 const UserGroupDetailPage: FC = () => {
@@ -46,6 +46,7 @@ const UserGroupDetailPage: FC = () => {
    */
    */
   const { data: userGroupPages } = useSWRxUserGroupPages(userGroup._id, 10, 0);
   const { data: userGroupPages } = useSWRxUserGroupPages(userGroup._id, 10, 0);
   const { data: userGroupRelations, mutate: mutateUserGroupRelations } = useSWRxUserGroupRelations(userGroup._id);
   const { data: userGroupRelations, mutate: mutateUserGroupRelations } = useSWRxUserGroupRelations(userGroup._id);
+  const { data: selectableUserGroups } = useSWRxSelectableUserGroups(userGroup._id);
 
 
   // TODO 85844: Fetch /user-groups/selectable-groups with SWR
   // TODO 85844: Fetch /user-groups/selectable-groups with SWR
   const selectableUserGroups: IUserGroupHasId[] = [];
   const selectableUserGroups: IUserGroupHasId[] = [];

+ 4 - 0
packages/app/src/interfaces/user-group-response.ts

@@ -16,3 +16,7 @@ export type UserGroupRelationListResult = {
 export type UserGroupPagesResult = {
 export type UserGroupPagesResult = {
   pages: IPageHasId[],
   pages: IPageHasId[],
 }
 }
+
+export type SelectableUserGroupsResult = {
+  selectableUserGroups: IUserGroupHasId[],
+}

+ 2 - 2
packages/app/src/server/routes/apiv3/user-group.js

@@ -234,8 +234,8 @@ module.exports = (crowi) => {
       ]);
       ]);
 
 
       const excludeUserGroupIds = [userGroup, ...ancestorGroups, ...descendantGroups].map(userGroups => userGroups._id.toString());
       const excludeUserGroupIds = [userGroup, ...ancestorGroups, ...descendantGroups].map(userGroups => userGroups._id.toString());
-      const userGroups = await UserGroup.find({ _id: { $nin: excludeUserGroupIds } });
-      return res.apiv3({ userGroups });
+      const selectableUserGroups = await UserGroup.find({ _id: { $nin: excludeUserGroupIds } });
+      return res.apiv3({ selectableUserGroups });
     }
     }
     catch (err) {
     catch (err) {
       const msg = 'Error occurred while searching user groups';
       const msg = 'Error occurred while searching user groups';

+ 8 - 1
packages/app/src/stores/user-group.tsx

@@ -6,7 +6,7 @@ import { apiv3Get } from '~/client/util/apiv3-client';
 import { IPageHasId } from '~/interfaces/page';
 import { IPageHasId } from '~/interfaces/page';
 import { IUserGroupHasId, IUserGroupRelationHasId } from '~/interfaces/user';
 import { IUserGroupHasId, IUserGroupRelationHasId } from '~/interfaces/user';
 import {
 import {
-  UserGroupListResult, ChildUserGroupListResult, UserGroupRelationListResult, UserGroupPagesResult,
+  UserGroupListResult, ChildUserGroupListResult, UserGroupRelationListResult, UserGroupPagesResult, SelectableUserGroupsResult,
 } from '~/interfaces/user-group-response';
 } from '~/interfaces/user-group-response';
 
 
 
 
@@ -62,3 +62,10 @@ export const useSWRxUserGroupPages = (groupId: string | undefined, limit: number
     endpoint => apiv3Get<UserGroupPagesResult>(endpoint, { limit, offset }).then(result => result.data.pages),
     endpoint => apiv3Get<UserGroupPagesResult>(endpoint, { limit, offset }).then(result => result.data.pages),
   );
   );
 };
 };
+
+export const useSWRxSelectableUserGroups = (groupId: string | undefined): SWRResponse<IUserGroupHasId[], Error> => {
+  return useSWRImmutable(
+    groupId != null ? ['/user-groups/selectable-groups'] : null,
+    endpoint => apiv3Get<SelectableUserGroupsResult>(endpoint, { groupId }).then(result => result.data.selectableUserGroups),
+  );
+};