Browse Source

change useMyUserGroupRelations to useMyUserGroups

Futa Arai 2 years ago
parent
commit
dc15cfe55a

+ 14 - 29
apps/app/src/client/services/user-group.ts

@@ -1,6 +1,4 @@
-import {
-  type GrantedGroup, GroupType, isPopulated, type IUserGroupHasId,
-} from '@growi/core';
+import { GroupType } from '@growi/core';
 
 
 import {
 import {
   useSWRxAncestorExternalUserGroups,
   useSWRxAncestorExternalUserGroups,
@@ -8,12 +6,11 @@ import {
   useSWRxExternalUserGroup,
   useSWRxExternalUserGroup,
   useSWRxExternalUserGroupRelationList,
   useSWRxExternalUserGroupRelationList,
   useSWRxExternalUserGroupRelations,
   useSWRxExternalUserGroupRelations,
-  useSWRxMyExternalUserGroupRelations,
+  useSWRxMyExternalUserGroups,
 } from '~/features/external-user-group/client/stores/external-user-group';
 } from '~/features/external-user-group/client/stores/external-user-group';
-import { IExternalUserGroupHasId } from '~/features/external-user-group/interfaces/external-user-group';
 import {
 import {
   useSWRxAncestorUserGroups,
   useSWRxAncestorUserGroups,
-  useSWRxChildUserGroupList, useSWRxMyUserGroupRelations, useSWRxUserGroup, useSWRxUserGroupRelationList, useSWRxUserGroupRelations,
+  useSWRxChildUserGroupList, useSWRxMyUserGroups, useSWRxUserGroup, useSWRxUserGroupRelationList, useSWRxUserGroupRelations,
 } from '~/stores/user-group';
 } from '~/stores/user-group';
 
 
 // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
 // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
@@ -57,38 +54,26 @@ export const useAncestorUserGroups = (userGroupId: string, isExternalGroup: bool
 
 
 // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
 // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
 export const useMyUserGroups = (shouldFetch: boolean) => {
 export const useMyUserGroups = (shouldFetch: boolean) => {
-  const { data: myUserGroupRelations, mutate: mutateMyUserGroupRelations } = useSWRxMyUserGroupRelations(shouldFetch);
-  const { data: myExternalUserGroupRelations, mutate: mutateMyExternalUserGroupRelations } = useSWRxMyExternalUserGroupRelations(shouldFetch);
+  const { data: myUserGroups, mutate: mutateMyUserGroups } = useSWRxMyUserGroups(shouldFetch);
+  const { data: myExternalUserGroups, mutate: mutateMyExternalUserGroups } = useSWRxMyExternalUserGroups(shouldFetch);
 
 
-  const mutate = () => {
-    mutateMyUserGroupRelations();
-    mutateMyExternalUserGroupRelations();
+  const update = () => {
+    mutateMyUserGroups();
+    mutateMyExternalUserGroups();
   };
   };
 
 
-  if (myUserGroupRelations == null || myExternalUserGroupRelations == null) {
-    return { data: null, mutate };
+  if (myUserGroups == null || myExternalUserGroups == null) {
+    return { data: null, update };
   }
   }
 
 
-  const myUserGroups = myUserGroupRelations
-    .map((relation) => {
-      // relation.relatedGroup should be populated by server
-      return isPopulated(relation.relatedGroup) ? relation.relatedGroup : undefined;
-    })
-    // exclude undefined elements
-    .filter((elem): elem is IUserGroupHasId => elem != null)
+  const myUserGroupsData = myUserGroups
     .map((group) => {
     .map((group) => {
       return {
       return {
         item: group,
         item: group,
         type: GroupType.userGroup,
         type: GroupType.userGroup,
       };
       };
     });
     });
-  const myExternalUserGroups = myExternalUserGroupRelations
-    .map((relation) => {
-    // relation.relatedGroup should be populated by server
-      return isPopulated(relation.relatedGroup) ? relation.relatedGroup : undefined;
-    })
-    // exclude undefined elements
-    .filter((elem): elem is IExternalUserGroupHasId => elem != null)
+  const myExternalUserGroupsData = myExternalUserGroups
     .map((group) => {
     .map((group) => {
       return {
       return {
         item: group,
         item: group,
@@ -96,7 +81,7 @@ export const useMyUserGroups = (shouldFetch: boolean) => {
       };
       };
     });
     });
 
 
-  const data = [...myUserGroups, ...myExternalUserGroups];
+  const data = [...myUserGroupsData, ...myExternalUserGroupsData];
 
 
-  return { data, mutate };
+  return { data, update };
 };
 };

+ 3 - 3
apps/app/src/components/SavePageControls/GrantSelector.tsx

@@ -61,12 +61,12 @@ const GrantSelector = (props: Props): JSX.Element => {
   const { data: currentUser } = useCurrentUser();
   const { data: currentUser } = useCurrentUser();
 
 
   const shouldFetch = isSelectGroupModalShown;
   const shouldFetch = isSelectGroupModalShown;
-  const { data: myUserGroups, mutate: mutateMyUserGroups } = useMyUserGroups(shouldFetch);
+  const { data: myUserGroups, update: updateMyUserGroups } = useMyUserGroups(shouldFetch);
 
 
   const showSelectGroupModal = useCallback(() => {
   const showSelectGroupModal = useCallback(() => {
-    mutateMyUserGroups();
+    updateMyUserGroups();
     setIsSelectGroupModalShown(true);
     setIsSelectGroupModalShown(true);
-  }, [mutateMyUserGroups]);
+  }, [updateMyUserGroups]);
 
 
   /**
   /**
    * change event handler for grant selector
    * change event handler for grant selector

+ 5 - 5
apps/app/src/features/external-user-group/client/stores/external-user-group.ts

@@ -16,13 +16,13 @@ export const useSWRxLdapGroupSyncSettings = (): SWRResponse<LdapGroupSyncSetting
   );
   );
 };
 };
 
 
-type MyExternalUserGroupRelationsResult = {
-  userGroupRelations: IExternalUserGroupRelationHasId[],
+type MyExternalUserGroupsResult = {
+  userGroups: IExternalUserGroupHasId[],
 }
 }
-export const useSWRxMyExternalUserGroupRelations = (shouldFetch: boolean): SWRResponse<IExternalUserGroupRelationHasId[], Error> => {
+export const useSWRxMyExternalUserGroups = (shouldFetch: boolean): SWRResponse<IExternalUserGroupHasId[], Error> => {
   return useSWR(
   return useSWR(
-    shouldFetch ? '/me/external-user-group-relations' : null,
-    endpoint => apiGet(endpoint).then(result => (result as MyExternalUserGroupRelationsResult).userGroupRelations),
+    shouldFetch ? '/me/external-user-groups' : null,
+    endpoint => apiGet(endpoint).then(result => (result as MyExternalUserGroupsResult).userGroups),
   );
   );
 };
 };
 
 

+ 2 - 2
apps/app/src/server/models/user-group-relation.ts

@@ -62,7 +62,7 @@ schema.statics.removeAllInvalidRelations = function() {
 /**
 /**
    * find all user and group relation
    * find all user and group relation
    *
    *
-   * @staticfindAllRelationForUser
+   * @static
    * @returns {Promise<UserGroupRelation[]>}
    * @returns {Promise<UserGroupRelation[]>}
    * @memberof UserGroupRelation
    * @memberof UserGroupRelation
    */
    */
@@ -123,7 +123,7 @@ schema.statics.findAllRelationForUserGroups = function(userGroups) {
  * @returns {Promise<UserGroupRelation[]>}
  * @returns {Promise<UserGroupRelation[]>}
  * @memberof UserGroupRelation
  * @memberof UserGroupRelation
  */
  */
-schema.statics.findAllRelationForUser = function(user) {
+schema.statics.findAllRelationForUser = function(user): Promise<UserGroupRelationDocument[]> {
   return this
   return this
     .find({ relatedUser: user.id })
     .find({ relatedUser: user.id })
     .populate('relatedGroup')
     .populate('relatedGroup')

+ 2 - 2
apps/app/src/server/routes/index.js

@@ -123,8 +123,8 @@ module.exports = function(crowi, app) {
 
 
   apiV1Router.get('/search'                        , accessTokenParser , loginRequired , search.api.search);
   apiV1Router.get('/search'                        , accessTokenParser , loginRequired , search.api.search);
 
 
-  apiV1Router.get('/me/user-group-relations'  , accessTokenParser , loginRequiredStrictly , me.api.userGroupRelations);
-  apiV1Router.get('/me/external-user-group-relations'  , accessTokenParser , loginRequiredStrictly , me.api.externalUserGroupRelations);
+  apiV1Router.get('/me/user-groups'  , accessTokenParser , loginRequiredStrictly , me.api.userGroups);
+  apiV1Router.get('/me/external-user-groups'  , accessTokenParser , loginRequiredStrictly , me.api.externalUserGroups);
 
 
   // HTTP RPC Styled API (に徐々に移行していいこうと思う)
   // HTTP RPC Styled API (に徐々に移行していいこうと思う)
   apiV1Router.get('/pages.list'          , accessTokenParser , loginRequired , page.api.list);
   apiV1Router.get('/pages.list'          , accessTokenParser , loginRequired , page.api.list);

+ 19 - 32
apps/app/src/server/routes/me.js

@@ -1,3 +1,5 @@
+import { isPopulated } from '@growi/core';
+
 import ExternalUserGroupRelation from '~/features/external-user-group/server/models/external-user-group-relation';
 import ExternalUserGroupRelation from '~/features/external-user-group/server/models/external-user-group-relation';
 
 
 import UserGroupRelation from '../models/user-group-relation';
 import UserGroupRelation from '../models/user-group-relation';
@@ -63,41 +65,20 @@ module.exports = function(crowi, app) {
   actions.api = api;
   actions.api = api;
 
 
   /**
   /**
-   * @swagger
-   *
-   *   /me/user-group-relations:
-   *     get:
-   *       tags: [Me, CrowiCompatibles]
-   *       operationId: getUserGroupRelations
-   *       summary: /me/user-group-relations
-   *       description: Get user group relations
-   *       responses:
-   *         200:
-   *           description: Succeeded to get user group relations.
-   *           content:
-   *             application/json:
-   *               schema:
-   *                 properties:
-   *                   ok:
-   *                     $ref: '#/components/schemas/V1Response/properties/ok'
-   *                   userGroupRelations:
-   *                     type: array
-   *                     items:
-   *                       $ref: '#/components/schemas/UserGroupRelation'
-   *         403:
-   *           $ref: '#/components/responses/403'
-   *         500:
-   *           $ref: '#/components/responses/500'
-   */
-  /**
-   * retrieve user-group-relation documents
+   * retrieve user-group documents
    * @param {object} req
    * @param {object} req
    * @param {object} res
    * @param {object} res
    */
    */
-  api.userGroupRelations = function(req, res) {
+  api.userGroups = function(req, res) {
     UserGroupRelation.findAllRelationForUser(req.user)
     UserGroupRelation.findAllRelationForUser(req.user)
       .then((userGroupRelations) => {
       .then((userGroupRelations) => {
-        return res.json(ApiResponse.success({ userGroupRelations }));
+        const userGroups = userGroupRelations.map((relation) => {
+          // relation.relatedGroup should be populated
+          return isPopulated(relation.relatedGroup) ? relation.relatedGroup : undefined;
+        })
+          // exclude undefined elements
+          .filter(elem => elem != null);
+        return res.json(ApiResponse.success({ userGroups }));
       });
       });
   };
   };
 
 
@@ -106,10 +87,16 @@ module.exports = function(crowi, app) {
    * @param {object} req
    * @param {object} req
    * @param {object} res
    * @param {object} res
    */
    */
-  api.externalUserGroupRelations = function(req, res) {
+  api.externalUserGroups = function(req, res) {
     ExternalUserGroupRelation.findAllRelationForUser(req.user)
     ExternalUserGroupRelation.findAllRelationForUser(req.user)
       .then((userGroupRelations) => {
       .then((userGroupRelations) => {
-        return res.json(ApiResponse.success({ userGroupRelations }));
+        const userGroups = userGroupRelations.map((relation) => {
+          // relation.relatedGroup should be populated
+          return isPopulated(relation.relatedGroup) ? relation.relatedGroup : undefined;
+        })
+          // exclude undefined elements
+          .filter(elem => elem != null);
+        return res.json(ApiResponse.success({ userGroups }));
       });
       });
   };
   };
 
 

+ 8 - 6
apps/app/src/stores/user-group.tsx

@@ -1,4 +1,6 @@
-import type { IPageHasId, IUserGroupHasId, IUserGroupRelationHasId } from '@growi/core';
+import type {
+  IPageHasId, IUserGroupHasId, IUserGroupRelationHasId,
+} from '@growi/core';
 import { type SWRResponseWithUtils, withUtils } from '@growi/core/dist/swr';
 import { type SWRResponseWithUtils, withUtils } from '@growi/core/dist/swr';
 import useSWR, { SWRResponse } from 'swr';
 import useSWR, { SWRResponse } from 'swr';
 import useSWRImmutable from 'swr/immutable';
 import useSWRImmutable from 'swr/immutable';
@@ -12,13 +14,13 @@ import {
 } from '~/interfaces/user-group-response';
 } from '~/interfaces/user-group-response';
 
 
 
 
-type MyUserGroupRelationsResult = {
-  userGroupRelations: IUserGroupRelationHasId[],
+type MyUserGroupsResult = {
+  userGroups: IUserGroupHasId[],
 }
 }
-export const useSWRxMyUserGroupRelations = (shouldFetch: boolean): SWRResponse<IUserGroupRelationHasId[], Error> => {
+export const useSWRxMyUserGroups = (shouldFetch: boolean): SWRResponse<IUserGroupHasId[], Error> => {
   return useSWR(
   return useSWR(
-    shouldFetch ? '/me/user-group-relations' : null,
-    endpoint => apiGet(endpoint).then(result => (result as MyUserGroupRelationsResult).userGroupRelations),
+    shouldFetch ? '/me/user-groups' : null,
+    endpoint => apiGet(endpoint).then(result => (result as MyUserGroupsResult).userGroups),
   );
   );
 };
 };