refactor(core): Split up the large menu trait.
This commit is contained in:
@@ -5,7 +5,7 @@
|
||||
use crate::filter::Filter;
|
||||
use crate::format::FormatTemplate;
|
||||
use crate::item::Item;
|
||||
use crate::model::traits::Menu;
|
||||
use crate::model::traits::{Menu, MutableMenu};
|
||||
use crate::pipeline::FilterPipeline;
|
||||
|
||||
/// A menu backed by a flat list of JSON items. Handles
|
||||
@@ -120,16 +120,6 @@ impl Menu for JsonMenu {
|
||||
.map(|idx| self.items[idx].label())
|
||||
}
|
||||
|
||||
fn add_raw(&mut self, values: Vec<serde_json::Value>) {
|
||||
for value in values {
|
||||
let idx = self.items.len();
|
||||
let item = Item::new(value, &self.label_key);
|
||||
let text = self.extract_filter_text(&item);
|
||||
self.filter.push_with_value(idx, &text, &item.value);
|
||||
self.items.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
fn serialize_filtered(&self, filtered_index: usize) -> Option<&serde_json::Value> {
|
||||
self.filter
|
||||
.matched_index(filtered_index)
|
||||
@@ -140,6 +130,24 @@ impl Menu for JsonMenu {
|
||||
self.filter.matched_index(filtered_index)
|
||||
}
|
||||
|
||||
fn formatted_label(&self, filtered_index: usize) -> Option<String> {
|
||||
let template = self.format_template.as_ref()?;
|
||||
let orig_idx = self.filter.matched_index(filtered_index)?;
|
||||
Some(template.render(&self.items[orig_idx].value))
|
||||
}
|
||||
}
|
||||
|
||||
impl MutableMenu for JsonMenu {
|
||||
fn add_raw(&mut self, values: Vec<serde_json::Value>) {
|
||||
for value in values {
|
||||
let idx = self.items.len();
|
||||
let item = Item::new(value, &self.label_key);
|
||||
let text = self.extract_filter_text(&item);
|
||||
self.filter.push_with_value(idx, &text, &item.value);
|
||||
self.items.push(item);
|
||||
}
|
||||
}
|
||||
|
||||
fn replace_all(&mut self, values: Vec<serde_json::Value>) {
|
||||
self.items = values
|
||||
.into_iter()
|
||||
@@ -161,10 +169,4 @@ impl Menu for JsonMenu {
|
||||
}
|
||||
self.rebuild_pipeline();
|
||||
}
|
||||
|
||||
fn formatted_label(&self, filtered_index: usize) -> Option<String> {
|
||||
let template = self.format_template.as_ref()?;
|
||||
let orig_idx = self.filter.matched_index(filtered_index)?;
|
||||
Some(template.render(&self.items[orig_idx].value))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user