// // "Pull Requests" section: open pull requests across every discovered // repository, each expanding into its reviews, comments, and changed files. // const builders = require("./builders.js"); const nodes = require("./nodes.js"); const { NodeProvider } = require("./provider.js"); const { node, message, errorNode } = nodes; class PullRequestsProvider extends NodeProvider { roots() { const store = this.store; if (!store.hasAnyToken) { return [message("No token stored. Run “Gitea → Set Token…” to sign in.")]; } if (!store.repos.length) { if (store.unmatchedHosts.length) return builders.unmatchedHostNodes(store); return [message(store.loading ? "Loading…" : "No Gitea repositories found.")]; } const sections = store.repos.map((repo) => this.repoSection(repo)); return store.repos.length === 1 ? sections[0].children : sections; } repoSection(repo) { const { items, error } = this.store.pullRequestsFor(repo.key); let children; if (error) children = [errorNode(error)]; else if (!items.length) children = [message("No open pull requests.")]; else children = items.map((pull) => builders.pullRequestNode(this.store, repo, pull)); return node("repo", repo.fullName, { identifier: `pr-repo-${repo.key}`, description: items.length ? String(items.length) : "", tooltip: repo.htmlUrl, contextValue: "repo", repo: repo, data: { repoKey: repo.key }, expanded: true, children: children, }); } } exports.PullRequestsProvider = PullRequestsProvider;