user-group.tsx 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. import type { IPageHasId, IUserGroupHasId, IUserGroupRelationHasId } from '@growi/core';
  2. import useSWR, { SWRResponse } from 'swr';
  3. import useSWRImmutable from 'swr/immutable';
  4. import { apiGet } from '~/client/util/apiv1-client';
  5. import { apiv3Get } from '~/client/util/apiv3-client';
  6. import {
  7. IUserGroupRelationHasIdPopulatedUser,
  8. UserGroupResult, UserGroupListResult, ChildUserGroupListResult, UserGroupRelationListResult, UserGroupRelationsResult,
  9. UserGroupPagesResult, SelectableParentUserGroupsResult, SelectableUserChildGroupsResult, AncestorUserGroupsResult,
  10. } from '~/interfaces/user-group-response';
  11. type MyUserGroupRelationsResult = {
  12. userGroupRelations: IUserGroupRelationHasId[],
  13. }
  14. export const useSWRxMyUserGroupRelations = (shouldFetch: boolean): SWRResponse<IUserGroupRelationHasId[], Error> => {
  15. return useSWR(
  16. shouldFetch ? '/me/user-group-relations' : null,
  17. endpoint => apiGet(endpoint).then(result => (result as MyUserGroupRelationsResult).userGroupRelations),
  18. );
  19. };
  20. export const useSWRxUserGroup = (groupId: string | undefined): SWRResponse<IUserGroupHasId, Error> => {
  21. return useSWRImmutable(
  22. groupId != null ? `/user-groups/${groupId}` : null,
  23. endpoint => apiv3Get<UserGroupResult>(endpoint).then(result => result.data.userGroup),
  24. );
  25. };
  26. export const useSWRxUserGroupList = (initialData?: IUserGroupHasId[]): SWRResponse<IUserGroupHasId[], Error> => {
  27. return useSWRImmutable(
  28. '/user-groups',
  29. endpoint => apiv3Get<UserGroupListResult>(endpoint, { pagination: false }).then(result => result.data.userGroups),
  30. {
  31. fallbackData: initialData,
  32. },
  33. );
  34. };
  35. export const useSWRxChildUserGroupList = (
  36. parentIds?: string[], includeGrandChildren?: boolean,
  37. ): SWRResponse<ChildUserGroupListResult, Error> => {
  38. const shouldFetch = parentIds != null && parentIds.length > 0;
  39. return useSWRImmutable(
  40. shouldFetch ? ['/user-groups/children', parentIds, includeGrandChildren] : null,
  41. ([endpoint, parentIds, includeGrandChildren]) => apiv3Get<ChildUserGroupListResult>(
  42. endpoint, { parentIds, includeGrandChildren },
  43. ).then((result => result.data)),
  44. );
  45. };
  46. export const useSWRxUserGroupRelations = (groupId: string): SWRResponse<IUserGroupRelationHasIdPopulatedUser[], Error> => {
  47. return useSWRImmutable(
  48. groupId != null ? `/user-groups/${groupId}/user-group-relations` : null,
  49. endpoint => apiv3Get<UserGroupRelationsResult>(endpoint).then(result => result.data.userGroupRelations),
  50. );
  51. };
  52. export const useSWRxUserGroupRelationList = (
  53. groupIds: string[] | undefined, childGroupIds?: string[], initialData?: IUserGroupRelationHasId[],
  54. ): SWRResponse<IUserGroupRelationHasId[], Error> => {
  55. return useSWRImmutable(
  56. groupIds != null ? ['/user-group-relations', groupIds, childGroupIds] : null,
  57. ([endpoint, groupIds, childGroupIds]) => apiv3Get<UserGroupRelationListResult>(
  58. endpoint, { groupIds, childGroupIds },
  59. ).then(result => result.data.userGroupRelations),
  60. {
  61. fallbackData: initialData,
  62. },
  63. );
  64. };
  65. export const useSWRxUserGroupPages = (groupId: string | undefined, limit: number, offset: number): SWRResponse<IPageHasId[], Error> => {
  66. return useSWRImmutable(
  67. groupId != null ? [`/user-groups/${groupId}/pages`, limit, offset] : null,
  68. ([endpoint, limit, offset]) => apiv3Get<UserGroupPagesResult>(endpoint, { limit, offset }).then(result => result.data.pages),
  69. );
  70. };
  71. export const useSWRxSelectableParentUserGroups = (groupId: string | undefined): SWRResponse<IUserGroupHasId[], Error> => {
  72. return useSWRImmutable(
  73. groupId != null ? ['/user-groups/selectable-parent-groups', groupId] : null,
  74. ([endpoint, groupId]) => apiv3Get<SelectableParentUserGroupsResult>(endpoint, { groupId }).then(result => result.data.selectableParentGroups),
  75. );
  76. };
  77. export const useSWRxSelectableChildUserGroups = (groupId: string | undefined): SWRResponse<IUserGroupHasId[], Error> => {
  78. return useSWRImmutable(
  79. groupId != null ? ['/user-groups/selectable-child-groups', groupId] : null,
  80. ([endpoint, groupId]) => apiv3Get<SelectableUserChildGroupsResult>(endpoint, { groupId }).then(result => result.data.selectableChildGroups),
  81. );
  82. };
  83. export const useSWRxAncestorUserGroups = (groupId: string | undefined): SWRResponse<IUserGroupHasId[], Error> => {
  84. return useSWRImmutable(
  85. groupId != null ? ['/user-groups/ancestors', groupId] : null,
  86. ([endpoint, groupId]) => apiv3Get<AncestorUserGroupsResult>(endpoint, { groupId }).then(result => result.data.ancestorUserGroups),
  87. );
  88. };