Load through server side pagination for team members list
This commit is contained in:
@@ -1,9 +1,11 @@
|
|||||||
import { BehaviorSubject } from "rxjs"
|
import { BehaviorSubject } from "rxjs"
|
||||||
import { apolloClient } from "~/helpers/apollo"
|
|
||||||
import gql from "graphql-tag"
|
import gql from "graphql-tag"
|
||||||
import cloneDeep from "lodash/cloneDeep"
|
import cloneDeep from "lodash/cloneDeep"
|
||||||
|
import { ApolloQueryResult } from "@apollo/client/core"
|
||||||
|
import { apolloClient } from "~/helpers/apollo"
|
||||||
|
|
||||||
interface TeamsTeamMember {
|
interface TeamsTeamMember {
|
||||||
|
membershipID: string
|
||||||
user: {
|
user: {
|
||||||
uid: string
|
uid: string
|
||||||
email: string
|
email: string
|
||||||
@@ -48,26 +50,44 @@ export default class TeamMemberAdapter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private async loadTeamMembers(): Promise<void> {
|
private async loadTeamMembers(): Promise<void> {
|
||||||
const { data } = await apolloClient.query({
|
const result: TeamsTeamMember[] = []
|
||||||
query: gql`
|
|
||||||
query GetTeamMembers($teamID: String!) {
|
let cursor: string | null = null
|
||||||
team(teamID: $teamID) {
|
while (true) {
|
||||||
members {
|
const response: ApolloQueryResult<any> = await apolloClient.query({
|
||||||
user {
|
query: gql`
|
||||||
uid
|
query GetTeamMembers($teamID: String!, $cursor: String) {
|
||||||
email
|
team(teamID: $teamID) {
|
||||||
|
members(cursor: $cursor) {
|
||||||
|
membershipID
|
||||||
|
user {
|
||||||
|
uid
|
||||||
|
email
|
||||||
|
}
|
||||||
|
role
|
||||||
}
|
}
|
||||||
role
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
`,
|
||||||
`,
|
variables: {
|
||||||
variables: {
|
teamID: this.teamID,
|
||||||
teamID: this.teamID,
|
cursor,
|
||||||
},
|
},
|
||||||
})
|
})
|
||||||
|
|
||||||
|
debugger
|
||||||
|
|
||||||
this.members$.next(data.team.members)
|
result.push(...response.data.team.members)
|
||||||
|
|
||||||
|
if ((response.data.team.members as any[]).length === 0) break
|
||||||
|
else {
|
||||||
|
cursor =
|
||||||
|
response.data.team.members[response.data.team.members.length - 1]
|
||||||
|
.membershipID
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this.members$.next(result)
|
||||||
}
|
}
|
||||||
|
|
||||||
private registerSubscriptions() {
|
private registerSubscriptions() {
|
||||||
@@ -105,7 +125,9 @@ export default class TeamMemberAdapter {
|
|||||||
})
|
})
|
||||||
.subscribe(({ data }) => {
|
.subscribe(({ data }) => {
|
||||||
this.members$.next(
|
this.members$.next(
|
||||||
this.members$.value.filter((el) => el.user.uid !== data.teamMemberRemoved)
|
this.members$.value.filter(
|
||||||
|
(el) => el.user.uid !== data.teamMemberRemoved
|
||||||
|
)
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
@@ -128,7 +150,9 @@ export default class TeamMemberAdapter {
|
|||||||
})
|
})
|
||||||
.subscribe(({ data }) => {
|
.subscribe(({ data }) => {
|
||||||
const list = cloneDeep(this.members$.value)
|
const list = cloneDeep(this.members$.value)
|
||||||
const obj = list.find((el) => el.user.uid === data.teamMemberUpdated.user.uid)
|
const obj = list.find(
|
||||||
|
(el) => el.user.uid === data.teamMemberUpdated.user.uid
|
||||||
|
)
|
||||||
|
|
||||||
if (!obj) return
|
if (!obj) return
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user