updating verse_editor to be able to make verse changes betterrererer
Some checks are pending
/ test (push) Waiting to run
Some checks are pending
/ test (push) Waiting to run
This commit is contained in:
parent
2d2a0d3673
commit
6d8a24ea38
3 changed files with 52 additions and 6 deletions
|
|
@ -981,6 +981,19 @@ impl Song {
|
|||
}
|
||||
}
|
||||
|
||||
pub fn update_verse_name(
|
||||
&mut self,
|
||||
verse: VerseName,
|
||||
old_verse: &VerseName,
|
||||
) {
|
||||
if let Some(verse_map) = self.verse_map.as_mut()
|
||||
&& let Some(lyric) = verse_map.remove(old_verse)
|
||||
{
|
||||
verse_map.insert(verse, lyric);
|
||||
}
|
||||
todo!("need to finish update the versename in the vec")
|
||||
}
|
||||
|
||||
// TODO update_verse needs to also change the lyrics for the song such that
|
||||
// the song can be sent to the db and it's lyrics will actually change. Or we
|
||||
// could have the update_song_in_db function recreate the lyrics from the new
|
||||
|
|
@ -1159,6 +1172,15 @@ impl Song {
|
|||
VerseName::from_string(verse_name)
|
||||
}
|
||||
}
|
||||
|
||||
pub(crate) fn delete_verse(&mut self, verse: VerseName) {
|
||||
if let Some(verses) = self.verses.as_mut() {
|
||||
verses.retain(|inner| inner != &verse);
|
||||
}
|
||||
if let Some(map) = self.verse_map.as_mut() {
|
||||
let _ = map.remove(&verse);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
|
|
|||
|
|
@ -446,30 +446,40 @@ impl SongEditor {
|
|||
) => {
|
||||
if let Some(mut song) = self.song.clone()
|
||||
{
|
||||
let old_verse_name = verse.verse_name.clone();
|
||||
let verse_name = song
|
||||
.verse_name_from_str(
|
||||
verse_name,
|
||||
verse.verse_name.clone(),
|
||||
old_verse_name,
|
||||
);
|
||||
let lyric = verse.lyric.clone();
|
||||
|
||||
song.update_verse(
|
||||
song.update_verse_name(
|
||||
index, verse_name, lyric,
|
||||
);
|
||||
|
||||
return self.update_song(song);
|
||||
}
|
||||
}
|
||||
verse_editor::Action::UpdateVerse(verse) => {
|
||||
verse_editor::Action::UpdateVerse((
|
||||
verse,
|
||||
lyric,
|
||||
)) => {
|
||||
if let Some(mut song) = self.song.clone()
|
||||
{
|
||||
let (verse, lyric) = verse;
|
||||
song.update_verse(
|
||||
index, verse, lyric,
|
||||
);
|
||||
return self.update_song(song);
|
||||
}
|
||||
}
|
||||
verse_editor::Action::DeleteVerse(verse) => {
|
||||
if let Some(mut song) = self.song.clone()
|
||||
{
|
||||
song.delete_verse(verse);
|
||||
return self.update_song(song);
|
||||
};
|
||||
}
|
||||
verse_editor::Action::None => (),
|
||||
}
|
||||
}
|
||||
|
|
@ -679,6 +689,9 @@ impl SongEditor {
|
|||
.on_input(Message::ChangeAuthor)
|
||||
.label("Song Author");
|
||||
|
||||
let top_input_row =
|
||||
row![title_input, author_input].spacing(space_m);
|
||||
|
||||
// let verse_input = text_input(
|
||||
// "Verse
|
||||
// order",
|
||||
|
|
@ -962,7 +975,7 @@ impl SongEditor {
|
|||
.padding(space_s)
|
||||
.class(theme::Container::Card);
|
||||
|
||||
column![title_input, author_input, verse_order, verse_toolbar]
|
||||
column![top_input_row, verse_order, verse_toolbar]
|
||||
.spacing(space_m)
|
||||
.width(Length::FillPortion(2))
|
||||
.into()
|
||||
|
|
@ -1193,6 +1206,14 @@ impl SongEditor {
|
|||
|
||||
// I think this implementation is faster
|
||||
|
||||
self.verses = song.verse_map.as_ref().map(|map| {
|
||||
map.into_iter()
|
||||
.sorted()
|
||||
.map(|(verse_name, lyric)| {
|
||||
VerseEditor::new(*verse_name, lyric.to_string())
|
||||
})
|
||||
.collect()
|
||||
});
|
||||
let mut tasks = Vec::with_capacity(2);
|
||||
if let Ok(slides) = song.to_slides() {
|
||||
if let Some(handle) = &self.update_slide_handle {
|
||||
|
|
|
|||
|
|
@ -26,6 +26,7 @@ pub enum Message {
|
|||
UpdateLyric(text_editor::Action),
|
||||
UpdateVerseName(String),
|
||||
EditVerseName,
|
||||
DeleteVerse(VerseName),
|
||||
None,
|
||||
}
|
||||
|
||||
|
|
@ -33,6 +34,7 @@ pub enum Action {
|
|||
Task(Task<Message>),
|
||||
UpdateVerse((VerseName, String)),
|
||||
UpdateVerseName(String),
|
||||
DeleteVerse(VerseName),
|
||||
None,
|
||||
}
|
||||
|
||||
|
|
@ -65,6 +67,7 @@ impl VerseEditor {
|
|||
self.editing_verse_name = !self.editing_verse_name;
|
||||
Action::None
|
||||
}
|
||||
Message::DeleteVerse(verse) => Action::DeleteVerse(verse),
|
||||
Message::None => Action::None,
|
||||
}
|
||||
}
|
||||
|
|
@ -80,7 +83,7 @@ impl VerseEditor {
|
|||
let delete_button = button::text("Delete")
|
||||
.trailing_icon(icon::from_name("view-close"))
|
||||
.class(theme::Button::Destructive)
|
||||
.on_press(Message::None);
|
||||
.on_press(Message::DeleteVerse(self.verse_name));
|
||||
let combo = combo_box(
|
||||
&self.verse_name_combo,
|
||||
"Verse 1",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue