Fixing some bugs
This commit is contained in:
1 parent
d59776d713
commit
5d305affd3
2 files changed
+78
-55
No files matched your search
+32
-5
@@ -53,7 +53,7 @@ pub struct DictionaryState {
|
||||
displayed_words_query: Query<WordData, WordRepositoryInner, WordDataLayer>,
|
||||
groups_query: Query<WordGroup, WordGroupRepositoryInner, WordGroupDataLayer>,
|
||||
selected_cell: Option<(EntityHandle<WordData>, BasicWordFields, usize)>,
|
||||
word_editor: Option<WordEditor>,
|
||||
word_editor: Option<WordEditor<DictionaryMessage>>,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
@@ -84,6 +84,7 @@ pub enum DictionaryMessage {
|
||||
EditField(String),
|
||||
ChangeSelectedField(SelectionChangeDirection),
|
||||
EditorAction(WordMessage),
|
||||
ExtendedWordEdited
|
||||
}
|
||||
|
||||
#[derive(Clone, PartialEq, Eq, Hash, Copy)]
|
||||
@@ -186,7 +187,7 @@ impl NavigatedPage<DictionaryMessage> for DictionaryState {
|
||||
}
|
||||
|
||||
ExtendedEdit(i) => {
|
||||
self.word_editor = Some(WordEditor::new(i, self.state.clone()));
|
||||
self.word_editor = Some(self.editor_for_word(i));
|
||||
}
|
||||
Include(i, b) => {
|
||||
if b {
|
||||
@@ -271,6 +272,7 @@ impl NavigatedPage<DictionaryMessage> for DictionaryState {
|
||||
self.reverse_list = !self.reverse_list;
|
||||
}
|
||||
TrySave(mut handle) => {
|
||||
let original = handle;
|
||||
let now = Utc::now();
|
||||
if !self.auto_save_queue.contains_key(&handle) {
|
||||
return Task::none();
|
||||
@@ -284,6 +286,10 @@ impl NavigatedPage<DictionaryMessage> for DictionaryState {
|
||||
let _ = dictionary.save(&mut handle);
|
||||
if reload_query {
|
||||
self.displayed_words_query.load(&dictionary);
|
||||
if let Some(selected) = self.selected_cell && selected.0 == original {
|
||||
self.selected_cell = Some((handle, selected.1, selected.2));
|
||||
self.word_editor = Some(self.editor_for_word(selected.0));
|
||||
}
|
||||
}
|
||||
info!("Saved word");
|
||||
return Task::none();
|
||||
@@ -293,7 +299,7 @@ impl NavigatedPage<DictionaryMessage> for DictionaryState {
|
||||
SelectField(e, f, index) => {
|
||||
info!("Editing word {}", e.id);
|
||||
if self.word_editor.is_some() && let Some(selected) = &self.selected_cell && selected.0 != e {
|
||||
self.word_editor = Some(WordEditor::new(e, self.state.clone()));
|
||||
self.word_editor = Some(self.editor_for_word(e));
|
||||
}
|
||||
self.selected_cell = Some((e, f, index));
|
||||
|
||||
@@ -374,9 +380,26 @@ impl NavigatedPage<DictionaryMessage> for DictionaryState {
|
||||
}
|
||||
|
||||
self.displayed_words_query.load(&dictionary);
|
||||
if let Some(selected) = self.selected_cell && selected.0 != i {
|
||||
self.selected_cell = None;
|
||||
self.word_editor = None;
|
||||
}
|
||||
}
|
||||
EditorAction(action) => {
|
||||
self.word_editor.as_mut().unwrap().update(action);
|
||||
let result = self.word_editor.as_mut().unwrap().update(action);
|
||||
if let Some(result) = result {
|
||||
match result {
|
||||
DeleteWord(_) |
|
||||
ExtendedWordEdited => {
|
||||
return Task::done(RootMessage::Dictionary(result));
|
||||
},
|
||||
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
}
|
||||
ExtendedWordEdited => {
|
||||
return self.launch_auto_save_offset(self.selected_cell.unwrap().0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -433,6 +456,10 @@ impl DictionaryState {
|
||||
result
|
||||
}
|
||||
|
||||
fn editor_for_word(&self, handle: EntityHandle<WordData>) -> WordEditor<DictionaryMessage> {
|
||||
WordEditor::new(handle, self.state.clone()).on_delete(DeleteWord(handle)).on_edit(ExtendedWordEdited)
|
||||
}
|
||||
|
||||
fn init(&mut self) {
|
||||
self.displayed_words_query = self
|
||||
.state
|
||||
@@ -564,7 +591,7 @@ impl DictionaryState {
|
||||
let line_button = || {
|
||||
if !data.handle.real() {
|
||||
return button("-")
|
||||
.on_press(ExtendedEdit(data.handle))
|
||||
.on_press(DeleteWord(data.handle))
|
||||
.style(|_x: &Theme, _status: button::Status| Style {
|
||||
background: None,
|
||||
text_color: Color::BLACK,
|
||||
|
||||
Reference in new issue
Block a user