feat: basic pr diff rendering
This commit is contained in:
55
src/query.rs
55
src/query.rs
@@ -137,13 +137,13 @@ where
|
||||
})?;
|
||||
|
||||
match wait_state {
|
||||
| WaitState::Cached => {
|
||||
return Ok(ent);
|
||||
}
|
||||
| WaitState::Waiting { rx, sub } => {
|
||||
_ = sub;
|
||||
_ = rx.await;
|
||||
}
|
||||
| WaitState::Cached => {
|
||||
return Ok(ent);
|
||||
}
|
||||
| WaitState::Waiting { rx, sub } => {
|
||||
_ = sub;
|
||||
_ = rx.await;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -181,12 +181,27 @@ where
|
||||
let state = query.raw.read(cx);
|
||||
|
||||
match &state.data {
|
||||
| QueryData::Loading | QueryData::Pending | QueryData::Stale => QueryStatus::Loading,
|
||||
| QueryData::Some(data) => QueryStatus::Loaded(data.downcast_ref::<F::Data>().unwrap()),
|
||||
| QueryData::Err(error) => QueryStatus::Err(error.downcast_ref::<F::Error>().unwrap()),
|
||||
| QueryData::Loading | QueryData::Pending | QueryData::Stale => QueryStatus::Loading,
|
||||
| QueryData::Some(data) => QueryStatus::Loaded(data.downcast_ref::<F::Data>().unwrap()),
|
||||
| QueryData::Err(error) => QueryStatus::Err(error.downcast_ref::<F::Error>().unwrap()),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn observe_query<E, F>(
|
||||
query: &Entity<F>,
|
||||
mut on_notify: impl FnMut(&mut E, &Entity<F>, &mut gpui::Context<E>) + 'static,
|
||||
cx: &mut gpui::Context<E>,
|
||||
) -> gpui::Subscription
|
||||
where
|
||||
E: 'static,
|
||||
F: QueryFn,
|
||||
{
|
||||
let q = query.clone();
|
||||
cx.observe(&query, move |this, _, cx| {
|
||||
on_notify(this, &q, cx);
|
||||
})
|
||||
}
|
||||
|
||||
// ================= Store ==================
|
||||
|
||||
pub(crate) trait Context: Clone {}
|
||||
@@ -284,14 +299,14 @@ where
|
||||
|
||||
entity.raw.update(cx, |state, cx| {
|
||||
state.data = match result {
|
||||
| Ok(data) => {
|
||||
println!("[query] OK {}", q.key());
|
||||
QueryData::Some(Box::new(data))
|
||||
}
|
||||
| Err(err) => {
|
||||
println!("[query] ERR {:?}: {:?}", q.key(), err);
|
||||
QueryData::Err(Box::new(err))
|
||||
}
|
||||
| Ok(data) => {
|
||||
println!("[query] OK {}", q.key());
|
||||
QueryData::Some(Box::new(data))
|
||||
}
|
||||
| Err(err) => {
|
||||
println!("[query] ERR {:?}: {:?}", q.key(), err);
|
||||
QueryData::Err(Box::new(err))
|
||||
}
|
||||
};
|
||||
cx.notify();
|
||||
})?;
|
||||
@@ -317,8 +332,8 @@ where
|
||||
.raw
|
||||
.update(cx, |query, cx| {
|
||||
query.data = match result {
|
||||
| Ok(data) => QueryData::Some(Box::new(data)),
|
||||
| Err(err) => QueryData::Err(Box::new(err)),
|
||||
| Ok(data) => QueryData::Some(Box::new(data)),
|
||||
| Err(err) => QueryData::Err(Box::new(err)),
|
||||
};
|
||||
cx.notify();
|
||||
true
|
||||
|
||||
Reference in New Issue
Block a user