Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions src/github/githubRepository.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1581,11 +1581,14 @@ export class GitHubRepository extends Disposable {
let after: string | null = null;
let hasNextPage = false;
const ret: IAccount[] = [];
// Once we fall back to the legacy assignableUsers query, the cursors are not compatible
// with suggestedActors, so stay on the legacy query for the rest of the pagination.
let useLegacyAssignableUsers = false;
Comment thread
alexr00 marked this conversation as resolved.

do {
try {
let result: { data: AssignableUsersResponse | SuggestedActorsResponse } | undefined;
if (schema.GetSuggestedActors) {
let result: { data: AssignableUsersResponse | SuggestedActorsResponse | null } | undefined;
if (schema.GetSuggestedActors && !useLegacyAssignableUsers) {
result = await query<SuggestedActorsResponse>({
query: schema.GetSuggestedActors,
variables: {
Expand Down Expand Up @@ -1617,13 +1620,20 @@ export class GitHubRepository extends Disposable {
}, true); // we ignore SAML errors here because this query can happen at startup
}

if (result.data.repository === null) {
if (result.data?.repository === null) {
Logger.error('Unexpected null repository when getting assignable users', this.id);
return [];
}

const users = (result.data as AssignableUsersResponse).repository?.assignableUsers ?? (result.data as SuggestedActorsResponse).repository?.suggestedActors;

// If we got assignableUsers back (either because we already used the legacy query, or
// because the legacy fallback kicked in inside query()), the cursor is incompatible with
// suggestedActors. Stay on the legacy query for subsequent pages.
Comment thread
alexr00 marked this conversation as resolved.
if ((result.data as AssignableUsersResponse).repository?.assignableUsers) {
useLegacyAssignableUsers = true;
}

ret.push(
...(users?.nodes.map(node => {
return parseAccount(node, this);
Expand Down
Loading