user-group.tsx 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import { SWRResponse } from 'swr';
  2. import useSWRImmutable from 'swr/immutable';
  3. import { apiv3Get } from '~/client/util/apiv3-client';
  4. import { IUserGroupHasId, IUserGroupRelationHasId } from '~/interfaces/user';
  5. import { UserGroupListResult, ChildUserGroupListResult, UserGroupRelationListResult } from '~/interfaces/user-group-response';
  6. export const useSWRxUserGroupList = (initialData?: IUserGroupHasId[]): SWRResponse<IUserGroupHasId[], Error> => {
  7. return useSWRImmutable<IUserGroupHasId[], Error>(
  8. '/user-groups',
  9. endpoint => apiv3Get<UserGroupListResult>(endpoint, { pagination: false }).then(result => result.data.userGroups),
  10. {
  11. fallbackData: initialData,
  12. },
  13. );
  14. };
  15. export const useSWRxChildUserGroupList = (
  16. parentIds: string[] | undefined, includeGrandChildren?: boolean, initialData?: IUserGroupHasId[],
  17. ): SWRResponse<IUserGroupHasId[], Error> => {
  18. return useSWRImmutable<IUserGroupHasId[], Error>(
  19. parentIds != null ? ['/user-groups/children', parentIds, includeGrandChildren] : null,
  20. (endpoint, parentIds, includeGrandChildren) => apiv3Get<ChildUserGroupListResult>(
  21. endpoint, { parentIds, includeGrandChildren },
  22. ).then(result => result.data.childUserGroups),
  23. {
  24. fallbackData: initialData,
  25. },
  26. );
  27. };
  28. export const useSWRxUserGroupRelationList = (
  29. groupIds: string[] | undefined, childGroupIds?: string[], initialData?: IUserGroupRelationHasId[],
  30. ): SWRResponse<IUserGroupRelationHasId[], Error> => {
  31. return useSWRImmutable<IUserGroupRelationHasId[], Error>(
  32. groupIds != null ? ['/user-group-relations', groupIds, childGroupIds] : null,
  33. (endpoint, groupIds, childGroupIds) => apiv3Get<UserGroupRelationListResult>(
  34. endpoint, { groupIds, childGroupIds },
  35. ).then(result => result.data.userGroupRelations),
  36. {
  37. fallbackData: initialData,
  38. },
  39. );
  40. };