ProjectsV2ItemsForPullRequest fetches all ProjectItems for a pull request.
(client *Client, repo ghrepo.Interface, pr *PullRequest)
| 134 | |
| 135 | // ProjectsV2ItemsForPullRequest fetches all ProjectItems for a pull request. |
| 136 | func ProjectsV2ItemsForPullRequest(client *Client, repo ghrepo.Interface, pr *PullRequest) error { |
| 137 | type projectV2ItemStatus struct { |
| 138 | StatusFragment struct { |
| 139 | OptionID string `json:"optionId"` |
| 140 | Name string `json:"name"` |
| 141 | } `graphql:"... on ProjectV2ItemFieldSingleSelectValue"` |
| 142 | } |
| 143 | |
| 144 | type projectV2Item struct { |
| 145 | ID string `json:"id"` |
| 146 | Project struct { |
| 147 | ID string `json:"id"` |
| 148 | Title string `json:"title"` |
| 149 | } |
| 150 | Status projectV2ItemStatus `graphql:"status:fieldValueByName(name: \"Status\")"` |
| 151 | } |
| 152 | |
| 153 | type response struct { |
| 154 | Repository struct { |
| 155 | PullRequest struct { |
| 156 | ProjectItems struct { |
| 157 | TotalCount int |
| 158 | Nodes []*projectV2Item |
| 159 | PageInfo struct { |
| 160 | HasNextPage bool |
| 161 | EndCursor string |
| 162 | } |
| 163 | } `graphql:"projectItems(first: 100, after: $endCursor)"` |
| 164 | } `graphql:"pullRequest(number: $number)"` |
| 165 | } `graphql:"repository(owner: $owner, name: $name)"` |
| 166 | } |
| 167 | variables := map[string]interface{}{ |
| 168 | "owner": githubv4.String(repo.RepoOwner()), |
| 169 | "name": githubv4.String(repo.RepoName()), |
| 170 | "number": githubv4.Int(pr.Number), |
| 171 | "endCursor": (*githubv4.String)(nil), |
| 172 | } |
| 173 | var items ProjectItems |
| 174 | for { |
| 175 | var query response |
| 176 | err := client.Query(repo.RepoHost(), "PullRequestProjectItems", &query, variables) |
| 177 | if err != nil { |
| 178 | return err |
| 179 | } |
| 180 | |
| 181 | for _, projectItemNode := range query.Repository.PullRequest.ProjectItems.Nodes { |
| 182 | if projectItemNode == nil { |
| 183 | continue |
| 184 | } |
| 185 | items.Nodes = append(items.Nodes, &ProjectV2Item{ |
| 186 | ID: projectItemNode.ID, |
| 187 | Project: ProjectV2ItemProject{ |
| 188 | ID: projectItemNode.Project.ID, |
| 189 | Title: projectItemNode.Project.Title, |
| 190 | }, |
| 191 | Status: ProjectV2ItemStatus{ |
| 192 | OptionID: projectItemNode.Status.StatusFragment.OptionID, |
| 193 | Name: projectItemNode.Status.StatusFragment.Name, |