From 8561a7547f4a4f4f0271f5810070e1ec50ec2c5a Mon Sep 17 00:00:00 2001 From: Andrew Bastin Date: Wed, 20 Oct 2021 15:33:20 +0530 Subject: [PATCH] feat: team invitation caching --- .../helpers/backend/caching/optimistic.ts | 1 + .../helpers/backend/caching/resolvers.ts | 4 ++ .../helpers/backend/caching/updates.ts | 46 +++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/packages/hoppscotch-app/helpers/backend/caching/optimistic.ts b/packages/hoppscotch-app/helpers/backend/caching/optimistic.ts index a9704ebba..0ab5065d3 100644 --- a/packages/hoppscotch-app/helpers/backend/caching/optimistic.ts +++ b/packages/hoppscotch-app/helpers/backend/caching/optimistic.ts @@ -9,4 +9,5 @@ export const optimisticDefs: GraphCacheOptimisticUpdaters = { name: newName, }), removeTeamMember: () => true, + revokeTeamInvitation: () => true, } diff --git a/packages/hoppscotch-app/helpers/backend/caching/resolvers.ts b/packages/hoppscotch-app/helpers/backend/caching/resolvers.ts index eba0374a0..fc3a74163 100644 --- a/packages/hoppscotch-app/helpers/backend/caching/resolvers.ts +++ b/packages/hoppscotch-app/helpers/backend/caching/resolvers.ts @@ -10,5 +10,9 @@ export const resolversDef: GraphCacheResolvers = { __typename: "User", uid, }), + teamInvitation: (_parent, args, _cache, _info) => ({ + __typename: "TeamInvitation", + id: args.inviteID, + }), }, } diff --git a/packages/hoppscotch-app/helpers/backend/caching/updates.ts b/packages/hoppscotch-app/helpers/backend/caching/updates.ts index eb11bbee5..1bedb9157 100644 --- a/packages/hoppscotch-app/helpers/backend/caching/updates.ts +++ b/packages/hoppscotch-app/helpers/backend/caching/updates.ts @@ -68,5 +68,51 @@ export const updatesDef: GraphCacheUpdaters = { cache.link({ __typename: "Team", id: teamID }, "members", newMembers) }, + createTeamInvitation: (result, _args, cache, _info) => { + cache.invalidate( + { + __typename: "Team", + id: result.createTeamInvitation.teamID!, + }, + "teamInvitations" + ) + }, + acceptTeamInvitation: (_result, _args, cache, _info) => { + cache.invalidate({ __typename: "Query" }, "myTeams") + }, + revokeTeamInvitation: (_result, args, cache, _info) => { + const targetTeamID = cache.resolve( + { + __typename: "TeamInvitation", + id: args.inviteID, + }, + "teamID" + ) + + if (typeof targetTeamID === "string") { + const newInvites = ( + cache.resolve( + { + __typename: "Team", + id: targetTeamID, + }, + "teamInvitations" + ) as string[] + ).filter( + (inviteKey) => + inviteKey !== + cache.keyOfEntity({ + __typename: "TeamInvitation", + id: args.inviteID, + }) + ) + + cache.link( + { __typename: "Team", id: targetTeamID }, + "teamInvitations", + newInvites + ) + } + }, }, }