Radish alpha
r
Radicle terminal user interface
Radicle
Git (anonymous pull)
Log in to clone via SSH
Use new tui-realm-textarea interface for form inputs
Erik Kundt committed 2 years ago
commit 0325cb57d961fc78343dd2adadf1ed8d25e7467a
parent bd4c79f285ed67f224948942b6048b41a68ba8f9
3 files changed +51 -33
modified Cargo.lock
@@ -962,7 +962,18 @@ version = "2.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff63c423c68ea6814b7da9e88ce585f793c87ddd9e78f646970891769c8235d4"
dependencies = [
-
 "lazy-regex-proc_macros",
+
 "lazy-regex-proc_macros 2.4.1",
+
 "once_cell",
+
 "regex",
+
]
+

+
[[package]]
+
name = "lazy-regex"
+
version = "3.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "57451d19ad5e289ff6c3d69c2a2424652995c42b79dafa11e9c4d5508c913c01"
+
dependencies = [
+
 "lazy-regex-proc_macros 3.0.1",
 "once_cell",
 "regex",
]
@@ -980,6 +991,18 @@ dependencies = [
]

[[package]]
+
name = "lazy-regex-proc_macros"
+
version = "3.0.1"
+
source = "registry+https://github.com/rust-lang/crates.io-index"
+
checksum = "0f0a1d9139f0ee2e862e08a9c5d0ba0470f2aa21cd1e1aa1b1562f83116c725f"
+
dependencies = [
+
 "proc-macro2",
+
 "quote",
+
 "regex",
+
 "syn 2.0.28",
+
]
+

+
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -2245,20 +2268,19 @@ dependencies = [

[[package]]
name = "tui-realm-textarea"
-
version = "1.1.1"
-
source = "git+https://github.com/erak/tui-realm-textarea.git#c34d196cd477254a3b1bca28e6c105ee580b96e2"
+
version = "1.1.2"
+
source = "git+https://github.com/erak/tui-realm-textarea.git#e9dc23b6bfbaca0501cdb23c2641c0deae110027"
dependencies = [
 "cli-clipboard",
-
 "lazy-regex",
+
 "lazy-regex 3.0.1",
 "tui-textarea",
 "tuirealm",
]

[[package]]
name = "tui-textarea"
-
version = "0.1.6"
-
source = "registry+https://github.com/rust-lang/crates.io-index"
-
checksum = "4e7a086dc7ddcec25bfb9c47d5f3d85e3313c0c67eebe645d9e6b883452e56cc"
+
version = "0.2.0"
+
source = "git+https://github.com/erak/tui-textarea.git?branch=textwrap#2381ef729a8d2199f99cfa611116a6b6cd485011"
dependencies = [
 "crossterm",
 "tui",
@@ -2271,7 +2293,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "265411b5606f400459af94fbc5aae6a7bc0e98094d08cb5868390c932be88e26"
dependencies = [
 "bitflags 1.3.2",
-
 "lazy-regex",
+
 "lazy-regex 2.5.0",
 "termion 1.5.6",
 "thiserror",
 "tui",
modified src/ui/widget/common/form.rs
@@ -19,12 +19,13 @@ pub struct TextInput {
}

impl TextInput {
-
    pub const PROP_MULTILINE: &str = "multiline";
    pub const CMD_NEWLINE: &str = tui_realm_textarea::TEXTAREA_CMD_NEWLINE;
    pub const CMD_PASTE: &str = tui_realm_textarea::TEXTAREA_CMD_PASTE;

-
    pub fn new(theme: Theme, title: &str) -> Self {
+
    pub fn new(theme: Theme, title: &str, wrap: bool, single_line: bool) -> Self {
        let input = TextArea::default()
+
            .wrap(wrap)
+
            .single_line(single_line)
            .cursor_line_style(Style::reset())
            .style(Style::default().fg(theme.colors.default_fg));
        let container = super::container(&theme, Box::new(input));
@@ -59,27 +60,16 @@ impl WidgetComponent for TextInput {
        self.input.state()
    }

-
    fn perform(&mut self, properties: &Props, cmd: Cmd) -> CmdResult {
-
        let multiline = properties
-
            .get_or(
-
                Attribute::Custom(Self::PROP_MULTILINE),
-
                AttrValue::Flag(false),
-
            )
-
            .unwrap_flag();
-

-
        if !multiline && cmd == Cmd::Custom(Self::CMD_NEWLINE) {
-
            CmdResult::None
-
        } else {
-
            let result = self.input.perform(cmd);
-
            if let State::Vec(values) = self.input.state() {
-
                if let Some(StateValue::String(input)) = values.first() {
-
                    self.show_placeholder = values.len() == 1 && input.is_empty();
-
                } else {
-
                    self.show_placeholder = false;
-
                }
+
    fn perform(&mut self, _properties: &Props, cmd: Cmd) -> CmdResult {
+
        let result = self.input.perform(cmd);
+
        if let State::Vec(values) = self.input.state() {
+
            if let Some(StateValue::String(input)) = values.first() {
+
                self.show_placeholder = values.len() == 1 && input.is_empty();
+
            } else {
+
                self.show_placeholder = false;
            }
-
            result
        }
+
        result
    }
}

modified src/ui/widget/issue.rs
@@ -262,14 +262,20 @@ impl NewForm {
    pub fn new(theme: &Theme) -> Self {
        use tuirealm::props::Layout;

-
        let title = Widget::new(TextInput::new(theme.clone(), "Title"));
-
        let tags = Widget::new(TextInput::new(theme.clone(), "Labels (bug, ...)"));
+
        let title = Widget::new(TextInput::new(theme.clone(), "Title", false, true));
+
        let tags = Widget::new(TextInput::new(
+
            theme.clone(),
+
            "Labels (bug, ...)",
+
            false,
+
            true,
+
        ));
        let assignees = Widget::new(TextInput::new(
            theme.clone(),
            "Assignees (z6MkvAdxCp1oLVVTsqYvev9YrhSN3gBQNUSM45hhy4pgkexk, ...)",
+
            false,
+
            true,
        ));
-
        let description = Widget::new(TextInput::new(theme.clone(), "Description"))
-
            .custom(TextInput::PROP_MULTILINE, AttrValue::Flag(true));
+
        let description = Widget::new(TextInput::new(theme.clone(), "Description", true, false));

        let mut form = Widget::new(Form::new(
            theme.clone(),