updates.ts 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. import { GraphCacheUpdaters, MyTeamsDocument } from "../graphql"
  2. export const updatesDef: GraphCacheUpdaters = {
  3. Mutation: {
  4. deleteTeam: (_r, { teamID }, cache, _info) => {
  5. cache.updateQuery(
  6. {
  7. query: MyTeamsDocument,
  8. },
  9. (data) => {
  10. if (data) {
  11. data.myTeams = data.myTeams.filter((x) => x.id !== teamID)
  12. }
  13. return data
  14. }
  15. )
  16. cache.invalidate({
  17. __typename: "Team",
  18. id: teamID,
  19. })
  20. },
  21. leaveTeam: (_r, { teamID }, cache, _info) => {
  22. cache.updateQuery(
  23. {
  24. query: MyTeamsDocument,
  25. },
  26. (data) => {
  27. if (data) {
  28. data.myTeams = data.myTeams.filter((x) => x.id !== teamID)
  29. }
  30. return data
  31. }
  32. )
  33. cache.invalidate({
  34. __typename: "Team",
  35. id: teamID,
  36. })
  37. },
  38. createTeam: (result, _args, cache, _info) => {
  39. cache.updateQuery(
  40. {
  41. query: MyTeamsDocument,
  42. },
  43. (data) => {
  44. if (data) data.myTeams.push(result.createTeam as any)
  45. return data
  46. }
  47. )
  48. },
  49. removeTeamMember: (_result, { teamID, userUid }, cache) => {
  50. const newMembers = (
  51. cache.resolve(
  52. {
  53. __typename: "Team",
  54. id: teamID,
  55. },
  56. "members"
  57. ) as string[]
  58. )
  59. .map((x) => [x, cache.resolve(x, "user") as string])
  60. .map(([key, userKey]) => [key, cache.resolve(userKey, "uid") as string])
  61. .filter(([_key, uid]) => uid !== userUid)
  62. .map(([key]) => key)
  63. cache.link({ __typename: "Team", id: teamID }, "members", newMembers)
  64. },
  65. createTeamInvitation: (result, _args, cache, _info) => {
  66. cache.invalidate(
  67. {
  68. __typename: "Team",
  69. id: result.createTeamInvitation.teamID!,
  70. },
  71. "teamInvitations"
  72. )
  73. },
  74. acceptTeamInvitation: (_result, _args, cache, _info) => {
  75. cache.invalidate({ __typename: "Query" }, "myTeams")
  76. },
  77. revokeTeamInvitation: (_result, args, cache, _info) => {
  78. const targetTeamID = cache.resolve(
  79. {
  80. __typename: "TeamInvitation",
  81. id: args.inviteID,
  82. },
  83. "teamID"
  84. )
  85. if (typeof targetTeamID === "string") {
  86. const newInvites = (
  87. cache.resolve(
  88. {
  89. __typename: "Team",
  90. id: targetTeamID,
  91. },
  92. "teamInvitations"
  93. ) as string[]
  94. ).filter(
  95. (inviteKey) =>
  96. inviteKey !==
  97. cache.keyOfEntity({
  98. __typename: "TeamInvitation",
  99. id: args.inviteID,
  100. })
  101. )
  102. cache.link(
  103. { __typename: "Team", id: targetTeamID },
  104. "teamInvitations",
  105. newInvites
  106. )
  107. }
  108. },
  109. },
  110. }