mirror of
https://github.com/extrawurst/gitui.git
synced 2024-12-26 10:33:25 +03:00
feat: add branch name validation on renaming (#2081)
Closes #2062 --------- Co-authored-by: extrawurst <776816+extrawurst@users.noreply.github.com>
This commit is contained in:
parent
a50a478c1a
commit
fa051eff5a
@ -29,6 +29,7 @@ These defaults require some adoption from existing users but feel more natural t
|
||||
* support `prepare-commit-msg` hook ([#1873](https://github.com/extrawurst/gitui/issues/1873))
|
||||
* new style `block_title_focused` to allow customizing title text of focused frame/block ([#2052](https://github.com/extrawurst/gitui/issues/2052)).
|
||||
* allow `fetch` command in both tabs of branchlist popup ([#2067](https://github.com/extrawurst/gitui/issues/2067))
|
||||
* check branch name validity while typing [[@sainad2222](https://github.com/sainad2222)] ([#2062](https://github.com/extrawurst/gitui/issues/2062))
|
||||
|
||||
### Changed
|
||||
* do not allow tagging when `tag.gpgsign` enabled until gpg-signing is [supported](https://github.com/extrawurst/gitui/issues/97) [[@TeFiLeDo](https://github.com/TeFiLeDo)] ([#1915](https://github.com/extrawurst/gitui/pull/1915))
|
||||
|
@ -2,6 +2,7 @@ use crate::components::{
|
||||
visibility_blocking, CommandBlocking, CommandInfo, Component,
|
||||
DrawableComponent, EventState, InputType, TextInputComponent,
|
||||
};
|
||||
use crate::ui::style::SharedTheme;
|
||||
use crate::{
|
||||
app::Environment,
|
||||
keys::{key_match, SharedKeyConfig},
|
||||
@ -11,7 +12,8 @@ use crate::{
|
||||
use anyhow::Result;
|
||||
use asyncgit::sync::{self, RepoPathRef};
|
||||
use crossterm::event::Event;
|
||||
use ratatui::{layout::Rect, Frame};
|
||||
use easy_cast::Cast;
|
||||
use ratatui::{layout::Rect, widgets::Paragraph, Frame};
|
||||
|
||||
pub struct RenameBranchPopup {
|
||||
repo: RepoPathRef,
|
||||
@ -19,12 +21,15 @@ pub struct RenameBranchPopup {
|
||||
branch_ref: Option<String>,
|
||||
queue: Queue,
|
||||
key_config: SharedKeyConfig,
|
||||
theme: SharedTheme,
|
||||
}
|
||||
|
||||
impl DrawableComponent for RenameBranchPopup {
|
||||
fn draw(&self, f: &mut Frame, rect: Rect) -> Result<()> {
|
||||
self.input.draw(f, rect)?;
|
||||
|
||||
if self.is_visible() {
|
||||
self.input.draw(f, rect)?;
|
||||
self.draw_warnings(f);
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
@ -97,6 +102,7 @@ impl RenameBranchPopup {
|
||||
.with_input_type(InputType::Singleline),
|
||||
branch_ref: None,
|
||||
key_config: env.key_config.clone(),
|
||||
theme: env.theme.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
@ -148,4 +154,35 @@ impl RenameBranchPopup {
|
||||
|
||||
self.input.clear();
|
||||
}
|
||||
|
||||
fn draw_warnings(&self, f: &mut Frame) {
|
||||
let current_text = self.input.get_text();
|
||||
|
||||
if !current_text.is_empty() {
|
||||
let valid = sync::validate_branch_name(current_text)
|
||||
.unwrap_or_default();
|
||||
|
||||
if !valid {
|
||||
let msg = strings::branch_name_invalid();
|
||||
let msg_length: u16 = msg.len().cast();
|
||||
let w = Paragraph::new(msg)
|
||||
.style(self.theme.text_danger());
|
||||
|
||||
let rect = {
|
||||
let mut rect = self.input.get_area();
|
||||
rect.y += rect.height.saturating_sub(1);
|
||||
rect.height = 1;
|
||||
let offset =
|
||||
rect.width.saturating_sub(msg_length + 1);
|
||||
rect.width =
|
||||
rect.width.saturating_sub(offset + 1);
|
||||
rect.x += offset;
|
||||
|
||||
rect
|
||||
};
|
||||
|
||||
f.render_widget(w, rect);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user