feat: gql codegen + caching + optimistic
This commit is contained in:
committed by
liyasthomas
parent
2325982801
commit
d6324e6ba6
@@ -1,7 +1,7 @@
|
||||
import { KeyingConfig } from "@urql/exchange-graphcache";
|
||||
import { KeyingConfig } from "@urql/exchange-graphcache"
|
||||
|
||||
export const keyDefs: KeyingConfig = {
|
||||
User: (data) => (data as any).uid,
|
||||
TeamMember: (data) => (data as any).membershipID,
|
||||
Team: (data) => data.id as any,
|
||||
}
|
||||
}
|
||||
|
||||
14
packages/hoppscotch-app/helpers/backend/caching/resolvers.ts
Normal file
14
packages/hoppscotch-app/helpers/backend/caching/resolvers.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import { ResolverConfig } from "@urql/exchange-graphcache"
|
||||
|
||||
export const resolversDef: ResolverConfig = {
|
||||
Query: {
|
||||
team: (_parent, { teamID }, _cache, _info) => ({
|
||||
__typename: "Team",
|
||||
id: teamID as any,
|
||||
}),
|
||||
user: (_parent, { uid }, _cache, _info) => ({
|
||||
__typename: "User",
|
||||
uid: uid as any,
|
||||
}),
|
||||
},
|
||||
}
|
||||
@@ -1,18 +1,12 @@
|
||||
import { UpdatesConfig } from "@urql/exchange-graphcache"
|
||||
import gql from "graphql-tag"
|
||||
import { MyTeamsDocument } from "../graphql"
|
||||
|
||||
export const updatesDef: Partial<UpdatesConfig> = {
|
||||
Mutation: {
|
||||
deleteTeam: (_r, { teamID }, cache, _info) => {
|
||||
cache.updateQuery(
|
||||
{
|
||||
query: gql`
|
||||
query {
|
||||
myTeams {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
query: MyTeamsDocument,
|
||||
},
|
||||
(data: any) => {
|
||||
data.myTeams = (data as any).myTeams.filter(
|
||||
@@ -31,13 +25,7 @@ export const updatesDef: Partial<UpdatesConfig> = {
|
||||
leaveTeam: (_r, { teamID }, cache, _info) => {
|
||||
cache.updateQuery(
|
||||
{
|
||||
query: gql`
|
||||
query {
|
||||
myTeams {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
query: MyTeamsDocument,
|
||||
},
|
||||
(data: any) => {
|
||||
data.myTeams = (data as any).myTeams.filter(
|
||||
@@ -56,13 +44,7 @@ export const updatesDef: Partial<UpdatesConfig> = {
|
||||
createTeam: (result, _args, cache, _info) => {
|
||||
cache.updateQuery(
|
||||
{
|
||||
query: gql`
|
||||
{
|
||||
myTeams {
|
||||
id
|
||||
}
|
||||
}
|
||||
`,
|
||||
query: MyTeamsDocument,
|
||||
},
|
||||
(data: any) => {
|
||||
data.myTeams.push(result.createTeam)
|
||||
@@ -70,77 +52,25 @@ export const updatesDef: Partial<UpdatesConfig> = {
|
||||
}
|
||||
)
|
||||
},
|
||||
renameTeam: (_result, { teamID, newName }, cache, _info) => {
|
||||
cache.updateQuery(
|
||||
{
|
||||
query: gql`
|
||||
query GetTeam($teamID: ID!) {
|
||||
team(teamID: $teamID) {
|
||||
id
|
||||
name
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
teamID,
|
||||
removeTeamMember: (_result, { teamID, userUid }, cache) => {
|
||||
const newMembers = (
|
||||
cache.resolve(
|
||||
{
|
||||
__typename: "Team",
|
||||
id: teamID as string,
|
||||
},
|
||||
},
|
||||
(data: any) => {
|
||||
data.team.name = newName
|
||||
return data
|
||||
}
|
||||
"members"
|
||||
) as string[]
|
||||
)
|
||||
},
|
||||
removeTeamMember: (_result, { userUid, teamID }, cache) => {
|
||||
cache.updateQuery(
|
||||
{
|
||||
query: gql`
|
||||
query GetTeam($teamID: ID!) {
|
||||
team(teamID: $teamID) {
|
||||
members {
|
||||
user {
|
||||
uid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
teamID,
|
||||
},
|
||||
},
|
||||
(data: any) => {
|
||||
data.team.members = data.team.members.filter(
|
||||
(x: any) => x.user.uid !== userUid
|
||||
)
|
||||
return data
|
||||
}
|
||||
)
|
||||
},
|
||||
updateTeamMemberRole: (result, { userUid, teamID }, cache) => {
|
||||
cache.updateQuery(
|
||||
{
|
||||
query: gql`
|
||||
query GetTeam($teamID: ID!) {
|
||||
team(teamID: $teamID) {
|
||||
members {
|
||||
user {
|
||||
uid
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
`,
|
||||
variables: {
|
||||
teamID,
|
||||
},
|
||||
},
|
||||
(data: any) => {
|
||||
data.team.members = data.team.members.map((x: any) =>
|
||||
x.user.uid !== userUid ? x : result
|
||||
)
|
||||
return data
|
||||
}
|
||||
.map((x) => [x, cache.resolve(x, "user") as string])
|
||||
.map(([key, userKey]) => [key, cache.resolve(userKey, "uid") as string])
|
||||
.filter(([_key, uid]) => uid !== userUid)
|
||||
.map(([key]) => key)
|
||||
|
||||
cache.link(
|
||||
{ __typename: "Team", id: teamID as string },
|
||||
"members",
|
||||
newMembers
|
||||
)
|
||||
},
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user