a way to create verses
Some checks are pending
/ test (push) Waiting to run

This commit is contained in:
Chris Cochrun 2026-02-03 15:20:38 -06:00
parent c85ab8beda
commit b70c4130c1
2 changed files with 56 additions and 11 deletions

View file

@ -805,9 +805,28 @@ impl Song {
verse: &VerseName,
lyrics: T,
) {
let lyric_copy = lyrics.into();
if let Some(verse_map) = self.verse_map.as_mut() {
verse_map.entry(*verse).or_insert(lyrics.into());
debug!(?verse_map, "should update");
verse_map
.entry(*verse)
.and_modify(|old_lyrics| {
*old_lyrics = lyric_copy.clone()
})
.or_insert(lyric_copy);
debug!(?verse_map, "should be updated");
} else {
debug!(?self.verse_map, "should create");
let mut verse_map = HashMap::new();
verse_map
.entry(*verse)
.and_modify(|old_lyrics| {
*old_lyrics = lyric_copy.clone()
})
.or_insert(lyric_copy);
self.verse_map = Some(verse_map);
}
debug!(?self.verse_map);
}
pub fn get_lyrics(&self) -> Result<Vec<String>> {
@ -908,10 +927,12 @@ impl Song {
verse: VerseName,
lyric: String,
) {
debug!(index, ?verse, lyric);
self.set_lyrics(&verse, lyric);
if let Some(verses) = self.verses.as_mut()
&& let Some(old_verse) = verses.get_mut(index)
{
debug!(?old_verse, ?verse);
*old_verse = verse;
}

View file

@ -463,7 +463,15 @@ impl SongEditor {
self.editing_verse_order = !self.editing_verse_order;
}
Message::AddVerse((verse, lyric)) => {
todo!()
let verse_editor =
VerseEditor::new(verse.clone(), lyric.clone());
if let Some(verses) = self.verses.as_mut() {
verses.push(verse_editor);
}
if let Some(mut song) = self.song.clone() {
song.add_verse(verse, lyric);
return self.update_song(song);
}
}
Message::RemoveVerse(index) => {
if let Some(mut song) = self.song.clone() {
@ -899,7 +907,7 @@ impl SongEditor {
})
},
))
.spacing(space_l),
.spacing(space_m),
)
} else {
Element::from(horizontal_space())
@ -912,15 +920,31 @@ impl SongEditor {
.height(Length::Fill)
.direction(Direction::Vertical(Scrollbar::new()));
column![
title_input,
author_input,
verse_order,
verse_scroller
let verse_add_message = self.song.as_ref().map_or_else(
|| Message::None,
|song| {
Message::AddVerse((
song.get_next_verse_name(),
"".to_string(),
))
},
);
let verse_toolbar = column![
row![
text::heading("Verses").width(Length::Fill),
button::icon(icon::from_name("add"))
.on_press(verse_add_message)
],
verse_scroller.height(Length::Fill)
]
.spacing(space_m)
.width(Length::FillPortion(2))
.into()
.apply(container)
.padding(space_s)
.class(theme::Container::Card);
column![title_input, author_input, verse_order, verse_toolbar]
.spacing(space_m)
.width(Length::FillPortion(2))
.into()
}
fn toolbar(&self) -> Element<Message> {