parent
f41edfd318
commit
4fa8b9d65c
2 changed files with 23 additions and 14 deletions
|
|
@ -136,7 +136,7 @@ impl RenderOnce for CompanyListItem {
|
||||||
struct CompanyListDelegate {
|
struct CompanyListDelegate {
|
||||||
companies: Vec<Company>,
|
companies: Vec<Company>,
|
||||||
matched_companies: Vec<Company>,
|
matched_companies: Vec<Company>,
|
||||||
selected_index: usize,
|
selected_index: Option<usize>,
|
||||||
confirmed_index: Option<usize>,
|
confirmed_index: Option<usize>,
|
||||||
query: String,
|
query: String,
|
||||||
loading: bool,
|
loading: bool,
|
||||||
|
|
@ -168,14 +168,12 @@ impl ListDelegate for CompanyListDelegate {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn set_selected_index(&mut self, ix: Option<usize>, cx: &mut ViewContext<List<Self>>) {
|
fn set_selected_index(&mut self, ix: Option<usize>, cx: &mut ViewContext<List<Self>>) {
|
||||||
if let Some(ix) = ix {
|
self.selected_index = ix;
|
||||||
self.selected_index = ix;
|
cx.notify();
|
||||||
cx.notify();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_item(&self, ix: usize, _cx: &mut ViewContext<List<Self>>) -> Option<Self::Item> {
|
fn render_item(&self, ix: usize, _cx: &mut ViewContext<List<Self>>) -> Option<Self::Item> {
|
||||||
let selected = ix == self.selected_index || Some(ix) == self.confirmed_index;
|
let selected = Some(ix) == self.selected_index || Some(ix) == self.confirmed_index;
|
||||||
if let Some(company) = self.matched_companies.get(ix) {
|
if let Some(company) = self.matched_companies.get(ix) {
|
||||||
return Some(CompanyListItem::new(ix, company.clone(), ix, selected));
|
return Some(CompanyListItem::new(ix, company.clone(), ix, selected));
|
||||||
}
|
}
|
||||||
|
|
@ -216,7 +214,11 @@ impl ListDelegate for CompanyListDelegate {
|
||||||
|
|
||||||
impl CompanyListDelegate {
|
impl CompanyListDelegate {
|
||||||
fn selected_company(&self) -> Option<Company> {
|
fn selected_company(&self) -> Option<Company> {
|
||||||
self.companies.get(self.selected_index).cloned()
|
let Some(ix) = self.selected_index else {
|
||||||
|
return None;
|
||||||
|
};
|
||||||
|
|
||||||
|
self.companies.get(ix).cloned()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -254,7 +256,7 @@ impl ListStory {
|
||||||
let delegate = CompanyListDelegate {
|
let delegate = CompanyListDelegate {
|
||||||
matched_companies: companies.clone(),
|
matched_companies: companies.clone(),
|
||||||
companies,
|
companies,
|
||||||
selected_index: 3,
|
selected_index: None,
|
||||||
confirmed_index: None,
|
confirmed_index: None,
|
||||||
query: "".to_string(),
|
query: "".to_string(),
|
||||||
loading: false,
|
loading: false,
|
||||||
|
|
@ -262,9 +264,9 @@ impl ListStory {
|
||||||
};
|
};
|
||||||
|
|
||||||
let company_list = cx.new_view(|cx| List::new(delegate, cx));
|
let company_list = cx.new_view(|cx| List::new(delegate, cx));
|
||||||
company_list.update(cx, |list, cx| {
|
// company_list.update(cx, |list, cx| {
|
||||||
list.set_selected_index(Some(3), cx);
|
// list.set_selected_index(Some(3), cx);
|
||||||
});
|
// });
|
||||||
let _subscriptions =
|
let _subscriptions =
|
||||||
vec![
|
vec![
|
||||||
cx.subscribe(&company_list, |_, _, ev: &ListEvent, _| match ev {
|
cx.subscribe(&company_list, |_, _, ev: &ListEvent, _| match ev {
|
||||||
|
|
|
||||||
|
|
@ -405,12 +405,19 @@ where
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut selected_index = self.selected_index.unwrap_or(0);
|
let selected_index;
|
||||||
if selected_index < items_count - 1 {
|
if let Some(ix) = self.selected_index {
|
||||||
selected_index = selected_index + 1;
|
if ix < items_count - 1 {
|
||||||
|
selected_index = ix + 1;
|
||||||
|
} else {
|
||||||
|
// When the last item is selected, select the first item.
|
||||||
|
selected_index = 0;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// When no selected index, select the first item.
|
||||||
selected_index = 0;
|
selected_index = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
self.select_item(selected_index, cx);
|
self.select_item(selected_index, cx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue