feat: add persistent pull request sort and filter menus
This commit is contained in:
+49
-1
@@ -2286,6 +2286,9 @@ pub struct Editor {
|
||||
diff_display_options: (ViewMode, SplitAxis),
|
||||
pub(crate) pull_request_review_requested_symbol: String,
|
||||
pub(crate) pull_request_approved_symbol: String,
|
||||
pub(crate) pull_request_preferences: crate::pull_requests::Preferences,
|
||||
pub(crate) pull_request_preferences_changed: bool,
|
||||
pub(crate) pull_request_configured: [bool; 2],
|
||||
next_diff_request: u64,
|
||||
outstanding_diff_request: Option<u64>,
|
||||
pending_lsp_navigation: Option<PendingLspNavigation>,
|
||||
@@ -2428,6 +2431,9 @@ impl Editor {
|
||||
diff_display_options: (ViewMode::Split, SplitAxis::Vertical),
|
||||
pull_request_review_requested_symbol: "🙏".into(),
|
||||
pull_request_approved_symbol: "👍".into(),
|
||||
pull_request_preferences: Default::default(),
|
||||
pull_request_preferences_changed: false,
|
||||
pull_request_configured: [false; 2],
|
||||
next_diff_request: 0,
|
||||
outstanding_diff_request: None,
|
||||
pending_lsp_navigation: None,
|
||||
@@ -5318,6 +5324,46 @@ impl Editor {
|
||||
let phase = self.picker_diff().expect("active diff").phase;
|
||||
let files_focused =
|
||||
phase == Phase::View && self.picker_diff().unwrap().focus == Focus::Files;
|
||||
if phase != Phase::View
|
||||
&& self.picker_diff().unwrap().pull_request_remote.is_some()
|
||||
&& (self.picker_diff().unwrap().pull_request_menu.is_some()
|
||||
|| matches!(input, Input::Ctrl('s' | 'f')))
|
||||
{
|
||||
if !matches!(
|
||||
input,
|
||||
Input::Char('0'..='9' | ' ')
|
||||
| Input::Ctrl('s' | 'f')
|
||||
| Input::Escape
|
||||
| Input::Enter
|
||||
| Input::Left
|
||||
| Input::Right
|
||||
) && BackspaceKind::from_input(&input).is_none()
|
||||
&& self.handle_selection_binding(&input)
|
||||
{
|
||||
return None;
|
||||
}
|
||||
let diff = self.picker_diff_mut().unwrap();
|
||||
diff.handle(input);
|
||||
if std::mem::take(&mut diff.pull_request_preferences_changed) {
|
||||
let preferences = diff.pull_request_preferences.clone();
|
||||
self.pull_request_preferences = preferences.clone();
|
||||
self.pull_request_preferences_changed = true;
|
||||
for diff in self
|
||||
.diff
|
||||
.iter_mut()
|
||||
.chain(self.parked_diff.iter_mut())
|
||||
.chain(
|
||||
self.tabs
|
||||
.values_mut()
|
||||
.flat_map(|tab| tab.diff.iter_mut().chain(tab.parked_diff.iter_mut())),
|
||||
)
|
||||
.filter(|diff| diff.pull_request_remote.is_some())
|
||||
{
|
||||
diff.set_pull_request_preferences(preferences.clone());
|
||||
}
|
||||
}
|
||||
return None;
|
||||
}
|
||||
if phase != Phase::View && input == Input::Escape {
|
||||
return self.execute_action(Action::DiffClose.entry(), "");
|
||||
}
|
||||
@@ -10172,7 +10218,9 @@ impl Editor {
|
||||
if args.split_whitespace().count() > 1 {
|
||||
self.set_message("Usage: pull_requests [remote]");
|
||||
} else {
|
||||
self.open_diff(DiffState::pull_requests(args.into()));
|
||||
let mut diff = DiffState::pull_requests(args.into());
|
||||
diff.set_pull_request_preferences(self.pull_request_preferences.clone());
|
||||
self.open_diff(diff);
|
||||
}
|
||||
} else if args.is_empty() {
|
||||
self.open_diff(DiffState::new());
|
||||
|
||||
Reference in New Issue
Block a user