Generate script/storybook
This commit is contained in:
parent
da960fffe7
commit
ac3622cc6a
5 changed files with 141 additions and 16 deletions
|
@ -3,10 +3,15 @@ name = "storybook2"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
publish = false
|
publish = false
|
||||||
|
default-run = "storybook"
|
||||||
|
|
||||||
[[bin]]
|
[[bin]]
|
||||||
name = "storybook"
|
name = "storybook"
|
||||||
path = "src/storybook2.rs"
|
path = "src/bin/storybook2.rs"
|
||||||
|
|
||||||
|
[[bin]]
|
||||||
|
name = "print_storybook_script"
|
||||||
|
path = "src/bin/print_storybook_script.rs"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
anyhow.workspace = true
|
anyhow.workspace = true
|
||||||
|
|
74
crates/storybook2/src/bin/print_storybook_script.rs
Normal file
74
crates/storybook2/src/bin/print_storybook_script.rs
Normal file
|
@ -0,0 +1,74 @@
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::Write;
|
||||||
|
|
||||||
|
use strum::IntoEnumIterator;
|
||||||
|
|
||||||
|
use storybook2::story_selector::ComponentStory;
|
||||||
|
|
||||||
|
// TOOD: Ideally we actually create a more full featured CLI,
|
||||||
|
// but for the moment I just wanted a easier way to run the stories
|
||||||
|
|
||||||
|
fn main() -> std::io::Result<()> {
|
||||||
|
let path = std::env::current_dir()?;
|
||||||
|
let out_file = path.join("script").join("storybook");
|
||||||
|
|
||||||
|
// the script output file
|
||||||
|
let mut file = File::create(out_file)?;
|
||||||
|
|
||||||
|
// generate the list of components, in `snake_case`
|
||||||
|
let components = ComponentStory::iter()
|
||||||
|
.map(|c| c.to_string()) // Converts enum to string in `snake_case`
|
||||||
|
.collect::<Vec<_>>();
|
||||||
|
|
||||||
|
// write the bash script
|
||||||
|
writeln!(file, "#!/bin/bash")?;
|
||||||
|
writeln!(file, "")?;
|
||||||
|
writeln!(file, "options=(")?;
|
||||||
|
for component in &components {
|
||||||
|
writeln!(file, " \"{}\"", component)?;
|
||||||
|
}
|
||||||
|
writeln!(file, ")")?;
|
||||||
|
writeln!(file, "")?;
|
||||||
|
|
||||||
|
// Check if an argument is provided and if it matches a valid option
|
||||||
|
writeln!(file, "run_story() {{")?;
|
||||||
|
writeln!(file, " echo \"Running story: $1\"")?;
|
||||||
|
writeln!(file, " cargo run -p storybook2 -- \"$1\"")?;
|
||||||
|
writeln!(file, "}}")?;
|
||||||
|
writeln!(file, "")?;
|
||||||
|
|
||||||
|
writeln!(file, "if [ \"$#\" -gt 0 ]; then")?;
|
||||||
|
writeln!(file, " story_arg=\"$1\"")?;
|
||||||
|
writeln!(file, " # Add prefix 'components/' if not present")?;
|
||||||
|
writeln!(file, " if [[ $story_arg != components/* ]]; then")?;
|
||||||
|
writeln!(file, " story_arg=\"components/$story_arg\"")?;
|
||||||
|
writeln!(file, " fi")?;
|
||||||
|
writeln!(file, " # Check if the provided story is a valid option")?;
|
||||||
|
writeln!(file, " for opt in \"${{options[@]}}\"; do")?;
|
||||||
|
writeln!(
|
||||||
|
file,
|
||||||
|
" if [[ \"components/$opt\" == \"$story_arg\" ]]; then"
|
||||||
|
)?;
|
||||||
|
writeln!(file, " run_story \"$story_arg\"")?;
|
||||||
|
writeln!(file, " exit")?;
|
||||||
|
writeln!(file, " fi")?;
|
||||||
|
writeln!(file, " done")?;
|
||||||
|
writeln!(file, " echo \"Invalid story name: $1\"")?;
|
||||||
|
writeln!(file, " exit 1")?;
|
||||||
|
writeln!(file, "fi")?;
|
||||||
|
writeln!(file, "")?;
|
||||||
|
|
||||||
|
// Existing selection prompt
|
||||||
|
writeln!(file, "prompt=\"Please select a story:\"")?;
|
||||||
|
writeln!(file, "PS3=\"$prompt \"")?;
|
||||||
|
writeln!(file, "select story in \"${{options[@]}}\"; do")?;
|
||||||
|
writeln!(file, " if [[ -n $story ]]; then")?;
|
||||||
|
writeln!(file, " run_story \"components/$story\"")?;
|
||||||
|
writeln!(file, " break")?;
|
||||||
|
writeln!(file, " else")?;
|
||||||
|
writeln!(file, " echo \"Invalid option\"")?;
|
||||||
|
writeln!(file, " fi")?;
|
||||||
|
writeln!(file, "done")?;
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
|
@ -1,7 +1,3 @@
|
||||||
mod assets;
|
|
||||||
mod stories;
|
|
||||||
mod story_selector;
|
|
||||||
|
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
use clap::Parser;
|
use clap::Parser;
|
||||||
|
@ -15,8 +11,9 @@ use simplelog::SimpleLogger;
|
||||||
use theme2::{ThemeRegistry, ThemeSettings};
|
use theme2::{ThemeRegistry, ThemeSettings};
|
||||||
use ui::prelude::*;
|
use ui::prelude::*;
|
||||||
|
|
||||||
use crate::assets::Assets;
|
use storybook2::assets::Assets;
|
||||||
use crate::story_selector::StorySelector;
|
pub use storybook2::story_selector::*;
|
||||||
|
// pub use crate::story_selector::{ComponentStory, StorySelector};
|
||||||
|
|
||||||
// gpui::actions! {
|
// gpui::actions! {
|
||||||
// storybook,
|
// storybook,
|
4
crates/storybook2/src/lib.rs
Normal file
4
crates/storybook2/src/lib.rs
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
pub mod assets;
|
||||||
|
|
||||||
|
pub mod stories;
|
||||||
|
pub mod story_selector;
|
|
@ -1,15 +1,60 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# This script takes a single text input and replaces 'list_item' with the input in a cargo run command
|
options=(
|
||||||
|
"auto_height_editor"
|
||||||
|
"avatar"
|
||||||
|
"button"
|
||||||
|
"checkbox"
|
||||||
|
"context_menu"
|
||||||
|
"cursor"
|
||||||
|
"disclosure"
|
||||||
|
"focus"
|
||||||
|
"icon"
|
||||||
|
"icon_button"
|
||||||
|
"keybinding"
|
||||||
|
"label"
|
||||||
|
"list"
|
||||||
|
"list_header"
|
||||||
|
"list_item"
|
||||||
|
"overflow_scroll"
|
||||||
|
"scroll"
|
||||||
|
"tab"
|
||||||
|
"tab_bar"
|
||||||
|
"text"
|
||||||
|
"viewport_units"
|
||||||
|
"z_index"
|
||||||
|
"picker"
|
||||||
|
)
|
||||||
|
|
||||||
# Check if an argument is provided
|
run_story() {
|
||||||
if [ "$#" -ne 1 ]; then
|
echo "Running story: $1"
|
||||||
echo "Usage: $0 <component_name>"
|
cargo run -p storybook2 -- "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "$#" -gt 0 ]; then
|
||||||
|
story_arg="$1"
|
||||||
|
# Add prefix 'components/' if not present
|
||||||
|
if [[ $story_arg != components/* ]]; then
|
||||||
|
story_arg="components/$story_arg"
|
||||||
|
fi
|
||||||
|
# Check if the provided story is a valid option
|
||||||
|
for opt in "${options[@]}"; do
|
||||||
|
if [[ "components/$opt" == "$story_arg" ]]; then
|
||||||
|
run_story "$story_arg"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
echo "Invalid story name: $1"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Assign the argument to a variable
|
prompt="Please select a story:"
|
||||||
COMPONENT_NAME="$1"
|
PS3="$prompt "
|
||||||
|
select story in "${options[@]}"; do
|
||||||
# Run the cargo command with the provided component name
|
if [[ -n $story ]]; then
|
||||||
cargo run -p storybook2 -- components/"$COMPONENT_NAME"
|
run_story "components/$story"
|
||||||
|
break
|
||||||
|
else
|
||||||
|
echo "Invalid option"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue