DayDetailViewModel now ignores records and directly retrieves data from App
This is preparatory work. Having the view model directly retrieve data both adds a degree of symmetry (it both gets data from and sends data to the app) and makes it possible for the view model to refresh itself when needing to revert data or after saving data.
This commit is contained in:
parent
304008c674
commit
c1e797f3ae
|
@ -136,20 +136,19 @@ impl AppWindow {
|
||||||
fn show_historical_view(&self, records: Vec<Record<TraxRecord>>) {
|
fn show_historical_view(&self, records: Vec<Record<TraxRecord>>) {
|
||||||
let view = View::Historical(HistoricalView::new(self.app.clone(), records, {
|
let view = View::Historical(HistoricalView::new(self.app.clone(), records, {
|
||||||
let s = self.clone();
|
let s = self.clone();
|
||||||
Rc::new(move |date, records| {
|
Rc::new(move |date, _records| {
|
||||||
|
let s = s.clone();
|
||||||
|
glib::spawn_future_local(async move {
|
||||||
let layout = gtk::Box::new(gtk::Orientation::Vertical, 0);
|
let layout = gtk::Box::new(gtk::Orientation::Vertical, 0);
|
||||||
layout.append(&adw::HeaderBar::new());
|
layout.append(&adw::HeaderBar::new());
|
||||||
// layout.append(&DayDetailView::new(date, records, s.app.clone()));
|
let view_model = DayDetailViewModel::new(date, s.app.clone()).await;
|
||||||
layout.append(&DayDetailView::new(DayDetailViewModel::new(
|
layout.append(&DayDetailView::new(view_model));
|
||||||
date,
|
|
||||||
records,
|
|
||||||
s.app.clone(),
|
|
||||||
)));
|
|
||||||
let page = &adw::NavigationPage::builder()
|
let page = &adw::NavigationPage::builder()
|
||||||
.title(date.format("%Y-%m-%d").to_string())
|
.title(date.format("%Y-%m-%d").to_string())
|
||||||
.child(&layout)
|
.child(&layout)
|
||||||
.build();
|
.build();
|
||||||
s.navigation.push(page);
|
s.navigation.push(page);
|
||||||
|
});
|
||||||
})
|
})
|
||||||
}));
|
}));
|
||||||
self.swap_main(view);
|
self.swap_main(view);
|
||||||
|
|
|
@ -85,7 +85,9 @@ pub struct DayDetailViewModel {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl DayDetailViewModel {
|
impl DayDetailViewModel {
|
||||||
pub fn new(date: chrono::NaiveDate, records: Vec<Record<TraxRecord>>, app: App) -> Self {
|
pub async fn new(date: chrono::NaiveDate, app: App) -> Self {
|
||||||
|
let records = app.records(date, date).await.unwrap();
|
||||||
|
|
||||||
let (weight_records, records): (Vec<Record<TraxRecord>>, Vec<Record<TraxRecord>>) =
|
let (weight_records, records): (Vec<Record<TraxRecord>>, Vec<Record<TraxRecord>>) =
|
||||||
records.into_iter().partition(|r| r.data.is_weight());
|
records.into_iter().partition(|r| r.data.is_weight());
|
||||||
let (step_records, records): (Vec<Record<TraxRecord>>, Vec<Record<TraxRecord>>) =
|
let (step_records, records): (Vec<Record<TraxRecord>>, Vec<Record<TraxRecord>>) =
|
||||||
|
|
|
@ -59,6 +59,9 @@ impl ObjectSubclass for HistoricalViewPrivate {
|
||||||
factory.connect_bind({
|
factory.connect_bind({
|
||||||
let app = s.app.clone();
|
let app = s.app.clone();
|
||||||
move |_, list_item| {
|
move |_, list_item| {
|
||||||
|
let app = app.clone();
|
||||||
|
let list_item = list_item.clone();
|
||||||
|
glib::spawn_future_local(async move {
|
||||||
let records = list_item
|
let records = list_item
|
||||||
.downcast_ref::<gtk::ListItem>()
|
.downcast_ref::<gtk::ListItem>()
|
||||||
.expect("should be a ListItem")
|
.expect("should be a ListItem")
|
||||||
|
@ -74,12 +77,10 @@ impl ObjectSubclass for HistoricalViewPrivate {
|
||||||
.expect("should be a DaySummary");
|
.expect("should be a DaySummary");
|
||||||
|
|
||||||
if let Some(app) = app.borrow().clone() {
|
if let Some(app) = app.borrow().clone() {
|
||||||
summary.set_data(DayDetailViewModel::new(
|
let view_model = DayDetailViewModel::new(records.date(), app.clone()).await;
|
||||||
records.date(),
|
summary.set_data(view_model);
|
||||||
records.records(),
|
|
||||||
app.clone(),
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue