user-group.tsx 4.5 KB

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