better
This commit is contained in:
parent
f1be2dd735
commit
58698a1087
@ -70,6 +70,7 @@ pub fn Wall() -> impl IntoView {
|
|||||||
let wall = wall.await?;
|
let wall = wall.await?;
|
||||||
let problems = problems.await?;
|
let problems = problems.await?;
|
||||||
let user_interactions = user_interactions.await?;
|
let user_interactions = user_interactions.await?;
|
||||||
|
let user_interactions = RwSignal::new(user_interactions);
|
||||||
let v = view! { <WithWall wall problems user_interactions /> };
|
let v = view! { <WithWall wall problems user_interactions /> };
|
||||||
Ok::<_, ServerFnError>(v)
|
Ok::<_, ServerFnError>(v)
|
||||||
})}
|
})}
|
||||||
@ -92,7 +93,7 @@ fn WithProblem(#[prop(into)] problem: Signal<models::Problem>) -> impl IntoView
|
|||||||
fn WithWall(
|
fn WithWall(
|
||||||
#[prop(into)] wall: Signal<models::Wall>,
|
#[prop(into)] wall: Signal<models::Wall>,
|
||||||
#[prop(into)] problems: Signal<BTreeMap<models::ProblemUid, models::Problem>>,
|
#[prop(into)] problems: Signal<BTreeMap<models::ProblemUid, models::Problem>>,
|
||||||
#[prop(into)] user_interactions: Signal<BTreeMap<models::ProblemUid, models::UserInteraction>>,
|
#[prop(into)] user_interactions: RwSignal<BTreeMap<models::ProblemUid, models::UserInteraction>>,
|
||||||
) -> impl IntoView {
|
) -> impl IntoView {
|
||||||
tracing::trace!("Enter");
|
tracing::trace!("Enter");
|
||||||
|
|
||||||
@ -100,8 +101,21 @@ fn WithWall(
|
|||||||
|
|
||||||
let (problem_uid, set_problem_uid) = leptos_router::hooks::query_signal::<models::ProblemUid>("problem");
|
let (problem_uid, set_problem_uid) = leptos_router::hooks::query_signal::<models::ProblemUid>("problem");
|
||||||
|
|
||||||
|
let submit_attempt = ServerAction::<RonEncoded<server_functions::UpsertTodaysAttempt>>::new();
|
||||||
|
Effect::new(move || {
|
||||||
|
if let Some(Ok(v)) = submit_attempt.value().get() {
|
||||||
|
let v = v.into_inner();
|
||||||
|
user_interactions.update(|map| {
|
||||||
|
map.insert(v.problem_uid, v);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
let submit_attempt_cb = StoredValue::new(move |attempt: server_functions::UpsertTodaysAttempt| {
|
||||||
|
submit_attempt.dispatch(RonEncoded(attempt));
|
||||||
|
});
|
||||||
|
|
||||||
let problem = signals::problem(problems, problem_uid.into());
|
let problem = signals::problem(problems, problem_uid.into());
|
||||||
let user_interaction = signals::user_interaction(user_interactions, problem_uid.into());
|
let user_interaction = signals::user_interaction(user_interactions.into(), problem_uid.into());
|
||||||
|
|
||||||
// Filter
|
// Filter
|
||||||
let (filter_holds, set_filter_holds) = signal(BTreeSet::new());
|
let (filter_holds, set_filter_holds) = signal(BTreeSet::new());
|
||||||
@ -154,16 +168,9 @@ fn WithWall(
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
let grid = view! {
|
let grid = move || {
|
||||||
<Transition fallback=|| ()>
|
let wall = wall.get();
|
||||||
{move || {
|
view! { <Grid wall problem on_click_hold /> }
|
||||||
Suspend::new(async move {
|
|
||||||
tracing::debug!("executing grid suspend");
|
|
||||||
let view = view! { <Grid wall=wall.get() problem on_click_hold /> };
|
|
||||||
Ok::<_, ServerFnError>(view)
|
|
||||||
})
|
|
||||||
}}
|
|
||||||
</Transition>
|
|
||||||
};
|
};
|
||||||
|
|
||||||
let filter = move || {
|
let filter = move || {
|
||||||
@ -295,7 +302,14 @@ fn WithWall(
|
|||||||
let Some(problem_uid) = problem_uid.get() else {
|
let Some(problem_uid) = problem_uid.get() else {
|
||||||
return view! {}.into_any();
|
return view! {}.into_any();
|
||||||
};
|
};
|
||||||
view! { <WithUserInteraction wall_uid problem_uid user_interaction /> }
|
view! {
|
||||||
|
<WithUserInteraction
|
||||||
|
wall_uid
|
||||||
|
problem_uid
|
||||||
|
user_interaction
|
||||||
|
submit_attempt=submit_attempt_cb
|
||||||
|
/>
|
||||||
|
}
|
||||||
.into_any()
|
.into_any()
|
||||||
}}
|
}}
|
||||||
</div>
|
</div>
|
||||||
@ -309,39 +323,22 @@ fn WithUserInteraction(
|
|||||||
#[prop(into)] wall_uid: Signal<models::WallUid>,
|
#[prop(into)] wall_uid: Signal<models::WallUid>,
|
||||||
#[prop(into)] problem_uid: Signal<models::ProblemUid>,
|
#[prop(into)] problem_uid: Signal<models::ProblemUid>,
|
||||||
#[prop(into)] user_interaction: Signal<Option<models::UserInteraction>>,
|
#[prop(into)] user_interaction: Signal<Option<models::UserInteraction>>,
|
||||||
|
submit_attempt: StoredValue<impl Fn(server_functions::UpsertTodaysAttempt) + Sync + Send + 'static>,
|
||||||
) -> impl IntoView {
|
) -> impl IntoView {
|
||||||
tracing::debug!("Enter WithUserInteraction");
|
tracing::debug!("Enter WithUserInteraction");
|
||||||
|
|
||||||
let parent_user_interaction = user_interaction;
|
let todays_attempt = signals::todays_attempt(user_interaction);
|
||||||
|
|
||||||
let user_interaction = RwSignal::new(None);
|
|
||||||
Effect::new(move || {
|
|
||||||
let i = parent_user_interaction.get();
|
|
||||||
tracing::info!("setting user interaction to parent user interaction value: {i:?}");
|
|
||||||
user_interaction.set(i);
|
|
||||||
});
|
|
||||||
|
|
||||||
let submit_attempt = ServerAction::<RonEncoded<server_functions::UpsertTodaysAttempt>>::new();
|
|
||||||
let submit_attempt_value = submit_attempt.value();
|
|
||||||
Effect::new(move || {
|
|
||||||
if let Some(Ok(v)) = submit_attempt_value.get() {
|
|
||||||
tracing::info!("setting user interaction to action return value: {v:?}");
|
|
||||||
user_interaction.set(Some(v.into_inner()));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
let todays_attempt = signals::todays_attempt(user_interaction.into());
|
|
||||||
|
|
||||||
let mut attempt_radio_buttons = vec![];
|
let mut attempt_radio_buttons = vec![];
|
||||||
for variant in [models::Attempt::Flash, models::Attempt::Send, models::Attempt::Attempt] {
|
for variant in [models::Attempt::Flash, models::Attempt::Send, models::Attempt::Attempt] {
|
||||||
let ui_toggle = Signal::derive(move || todays_attempt.get() == Some(variant));
|
let ui_toggle = Signal::derive(move || todays_attempt.get() == Some(variant));
|
||||||
let onclick = move |_| {
|
let onclick = move |_| {
|
||||||
let attempt = if ui_toggle.get() { None } else { Some(variant) };
|
let attempt = if ui_toggle.get() { None } else { Some(variant) };
|
||||||
submit_attempt.dispatch(RonEncoded(server_functions::UpsertTodaysAttempt {
|
submit_attempt.read_value()(server_functions::UpsertTodaysAttempt {
|
||||||
wall_uid: wall_uid.get(),
|
wall_uid: wall_uid.get(),
|
||||||
problem_uid: problem_uid.get(),
|
problem_uid: problem_uid.get(),
|
||||||
attempt,
|
attempt,
|
||||||
}));
|
});
|
||||||
};
|
};
|
||||||
attempt_radio_buttons.push(view! { <AttemptRadioButton on:click=onclick variant selected=ui_toggle /> });
|
attempt_radio_buttons.push(view! { <AttemptRadioButton on:click=onclick variant selected=ui_toggle /> });
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user