From 20e3b638e03aa6443fb3afecb441fd056ca465ea Mon Sep 17 00:00:00 2001 From: Joep Meindertsma Date: Sat, 9 Apr 2022 18:39:40 +0200 Subject: [PATCH] WIP dialoguer --- Cargo.lock | 2 +- cli/Cargo.toml | 2 +- cli/src/new.rs | 23 ++++++++++++++--------- 3 files changed, 16 insertions(+), 11 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index a772229bf..ca8bb1e2c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -544,9 +544,9 @@ dependencies = [ "atomic_lib", "clap 3.1.6", "colored", + "dialoguer", "dirs", "edit", - "promptly", "regex", ] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 824b53bc3..a19339722 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -12,9 +12,9 @@ version = "0.31.1" atomic_lib = {version = "0.31", path = "../lib", features = ["config", "rdf"]} clap = {version = "3", features = ["cargo"]} colored = "2" +dialoguer = "0.10" dirs = "4" edit = {version = "0.1", optional = true} -promptly = "0.3" regex = "1" [dev-dependencies] diff --git a/cli/src/new.rs b/cli/src/new.rs index 61ea25c2d..2e247d131 100644 --- a/cli/src/new.rs +++ b/cli/src/new.rs @@ -8,7 +8,7 @@ use atomic_lib::{ Resource, Storelike, Value, }; use colored::Colorize; -use promptly::prompt_opt; +use dialoguer::Input; use regex::Regex; use std::time::{SystemTime, UNIX_EPOCH}; @@ -133,27 +133,32 @@ fn prompt_field( match &property.data_type { DataType::String | DataType::Markdown => { let msg = format!("string{}", msg_appendix); - input = prompt_opt(&msg)?; - return Ok(input); + let str: String = Input::new().with_prompt(msg).interact_text()?; + match str.as_str() { + "" => (return Ok(None)), + string => { + return Ok(Some(str)); + } + } } DataType::Slug => { let msg = format!("slug{}", msg_appendix); - input = prompt_opt(&msg)?; + let str: String = Input::new().with_prompt(msg).interact_text()?; let re = Regex::new(atomic_lib::values::SLUG_REGEX)?; - match input { - Some(slug) => { + match str.as_str() { + "" => (return Ok(None)), + slug => { if re.is_match(&*slug) { - return Ok(Some(slug)); + return Ok(Some(slug.into())); } println!("Only letters, numbers and dashes - no spaces or special characters."); return Ok(None); } - None => (return Ok(None)), } } DataType::Integer => { let msg = format!("integer{}", msg_appendix); - let number: Option = prompt_opt(&msg)?; + let number: Option = Input::new().with_prompt(msg).allow_empty(true).interact()?; match number { Some(nr) => { input = Some(nr.to_string());