Team.ts 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  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. type DeleteTeamErrors =
  7. | "team/not_required_role"
  8. | "team/invalid_id"
  9. | "team/member_not_found"
  10. | "ea/not_invite_or_admin"
  11. type ExitTeamErrors =
  12. | "team/invalid_id"
  13. | "team/member_not_found"
  14. | "ea/not_invite_or_admin"
  15. type CreateTeamErrors = "team/name_invalid" | "ea/not_invite_or_admin"
  16. export const createTeam = (name: TeamName) =>
  17. pipe(
  18. runMutation<
  19. {
  20. createTeam: {
  21. id: string
  22. name: string
  23. }
  24. },
  25. CreateTeamErrors
  26. >(
  27. gql`
  28. mutation CreateTeam($name: String!) {
  29. createTeam(name: $name) {
  30. id
  31. name
  32. }
  33. }
  34. `,
  35. {
  36. name,
  37. }
  38. ),
  39. TE.map(({ createTeam }) => createTeam)
  40. )
  41. export const deleteTeam = (teamID: string) =>
  42. runMutation<void, DeleteTeamErrors>(
  43. gql`
  44. mutation DeleteTeam($teamID: ID!) {
  45. deleteTeam(teamID: $teamID)
  46. }
  47. `,
  48. {
  49. teamID,
  50. }
  51. )
  52. export const leaveTeam = (teamID: string) =>
  53. runMutation<void, ExitTeamErrors>(
  54. gql`
  55. mutation ExitTeam($teamID: ID!) {
  56. leaveTeam(teamID: $teamID)
  57. }
  58. `,
  59. {
  60. teamID,
  61. }
  62. )