feat: configure personal pull request review indicators
This commit is contained in:
+25
-5
@@ -101,11 +101,19 @@ pub struct Catalog {
|
||||
pub entries: Vec<Revision>,
|
||||
pub notice: Option<String>,
|
||||
}
|
||||
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
|
||||
pub enum PullRequestReviewState {
|
||||
#[default]
|
||||
None,
|
||||
Approved,
|
||||
Requested,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct PullRequestPage {
|
||||
pub kind: RepoKind,
|
||||
pub remote: String,
|
||||
pub entries: Vec<(Revision, String)>,
|
||||
pub entries: Vec<(Revision, String, PullRequestReviewState)>,
|
||||
pub has_more: bool,
|
||||
}
|
||||
|
||||
@@ -572,7 +580,7 @@ pub struct DiffState {
|
||||
pub catalog: Option<Catalog>,
|
||||
pub pull_request_remote: Option<String>,
|
||||
pull_request_categories: [PullRequestCategory; 2],
|
||||
pull_request_order: BTreeMap<u64, (String, usize)>,
|
||||
pull_request_order: BTreeMap<u64, (String, usize, PullRequestReviewState)>,
|
||||
pub(crate) pull_request_retries: [u64; 2],
|
||||
pub phase: Phase,
|
||||
pub word_wrap: bool,
|
||||
@@ -934,16 +942,18 @@ impl DiffState {
|
||||
entries: Vec::new(),
|
||||
notice: Some(format!("Pull requests from {}", page.remote)),
|
||||
});
|
||||
for (revision, created_at) in page.entries {
|
||||
for (revision, created_at, review_state) in page.entries {
|
||||
let RevisionTarget::PullRequest { number, .. } = &revision.target else {
|
||||
continue;
|
||||
};
|
||||
if let Some((date, index)) = self.pull_request_order.get_mut(number) {
|
||||
if let Some((date, index, state)) = self.pull_request_order.get_mut(number)
|
||||
{
|
||||
*date = created_at;
|
||||
*state = review_state;
|
||||
catalog.entries[*index] = revision;
|
||||
} else {
|
||||
self.pull_request_order
|
||||
.insert(*number, (created_at, catalog.entries.len()));
|
||||
.insert(*number, (created_at, catalog.entries.len(), review_state));
|
||||
catalog.entries.push(revision);
|
||||
}
|
||||
}
|
||||
@@ -1222,6 +1232,16 @@ impl DiffState {
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn pull_request_review_state(&self, revision: &Revision) -> PullRequestReviewState {
|
||||
if let RevisionTarget::PullRequest { number, .. } = revision.target {
|
||||
self.pull_request_order
|
||||
.get(&number)
|
||||
.map_or(PullRequestReviewState::None, |entry| entry.2)
|
||||
} else {
|
||||
PullRequestReviewState::None
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn pull_request_partial(&self) -> bool {
|
||||
self.pull_request_remote.is_some()
|
||||
&& self
|
||||
|
||||
Reference in New Issue
Block a user