Team.ts 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import gql from "graphql-tag"
  2. import { pipe } from "fp-ts/function"
  3. import * as TE from "fp-ts/TaskEither"
  4. import { runMutation } from "../GQLClient"
  5. import { TeamName } from "../types/TeamName"
  6. import { TeamMemberRole } from "../types/TeamMemberRole"
  7. type DeleteTeamErrors =
  8. | "team/not_required_role"
  9. | "team/invalid_id"
  10. | "team/member_not_found"
  11. | "ea/not_invite_or_admin"
  12. type ExitTeamErrors =
  13. | "team/invalid_id"
  14. | "team/member_not_found"
  15. | "ea/not_invite_or_admin"
  16. type CreateTeamErrors = "team/name_invalid" | "ea/not_invite_or_admin"
  17. export const createTeam = (name: TeamName) =>
  18. pipe(
  19. runMutation<
  20. {
  21. createTeam: {
  22. id: string
  23. name: string
  24. members: Array<{ membershipID: string }>
  25. myRole: TeamMemberRole
  26. ownersCount: number
  27. editorsCount: number
  28. viewersCount: number
  29. }
  30. },
  31. CreateTeamErrors
  32. >(
  33. gql`
  34. mutation CreateTeam($name: String!) {
  35. createTeam(name: $name) {
  36. id
  37. name
  38. members {
  39. membershipID
  40. }
  41. myRole
  42. ownersCount
  43. editorsCount
  44. viewersCount
  45. }
  46. }
  47. `,
  48. {
  49. name,
  50. }
  51. ),
  52. TE.map(({ createTeam }) => createTeam)
  53. )
  54. export const deleteTeam = (teamID: string) =>
  55. runMutation<void, DeleteTeamErrors>(
  56. gql`
  57. mutation DeleteTeam($teamID: ID!) {
  58. deleteTeam(teamID: $teamID)
  59. }
  60. `,
  61. {
  62. teamID,
  63. },
  64. {
  65. additionalTypenames: ["Team"],
  66. }
  67. )
  68. export const leaveTeam = (teamID: string) =>
  69. runMutation<void, ExitTeamErrors>(
  70. gql`
  71. mutation ExitTeam($teamID: ID!) {
  72. leaveTeam(teamID: $teamID)
  73. }
  74. `,
  75. {
  76. teamID,
  77. },
  78. {
  79. additionalTypenames: ["Team"],
  80. }
  81. )