feat: implement correct display of values on init for text field

This commit is contained in:
alphafetus committed 2025-09-25 10:52:26 -04:00
1 parent 1adeb5e07f
commit b460c3b3fd
2 files changed
+16 -3

No files matched your search

+10 -2
View File
@@ -9,7 +9,7 @@ pub fn OutlinedTextField(
// #[prop()] value: Subfield<TStore, TInner, ValueType>,
#[prop(into)] data_member: String, // should this be an RwSignal??
#[prop(optional)] data_map: RwSignal<HashMap<String, ValueType>>,
#[prop()] value: RwSignal<ValueType>,
#[prop(optional)] value: RwSignal<ValueType>,
#[prop(default = "text".to_owned(), into)] input_type: String,
#[prop(optional)] disabled: RwSignal<bool>,
#[prop(optional)] error: RwSignal<bool>,
@@ -21,6 +21,7 @@ pub fn OutlinedTextField(
// valid types, and parses them accordingly.
let on_input = {
let input_type = input_type.clone();
let data_member = data_member.clone();
move |e| {
let to_parse = event_target_value(&e);
match input_type.as_str() {
@@ -31,6 +32,7 @@ pub fn OutlinedTextField(
value.set(ValueType::String(Some(to_parse.clone())));
data_map.update(|map| {
if let Some(val) = map.get_mut(&data_member) {
*val = ValueType::String(Some(to_parse));
} else {
map.insert(data_member.clone(), ValueType::String(Some(to_parse)));
@@ -84,7 +86,13 @@ pub fn OutlinedTextField(
disabled={disabled}
placeholder={placeholder}
prop:name=name
prop:value={move || value.get().to_string()} // Sets the initial value.
prop:value={
data_map
.get() // HashMap
.get(&data_member) // Option<ValueType>
.unwrap_or(&ValueType::String(None)) // ValueType
.to_string()
}
on:input=on_input
/>
<div
+6 -1
View File
@@ -8,7 +8,7 @@ use serde_dynamo::{from_item, to_item};
use crate::app::Unauthenticated;
use crate::common::{ExpandableInfo, StudentInfo, UserClaims};
use crate::components::{ActionButton, Loading, OutlinedTextField, Panel, RadioList, Row, Select};
use crate::components::{ActionButton, Loading, OutlinedTextField, Panel, RadioList, Row, Select, ValueType};
use leptos::leptos_dom::logging::console_log;
use leptos::prelude::*;
use leptos_oidc::{Algorithm, AuthLoaded, AuthSignal, Authenticated};
@@ -140,6 +140,11 @@ pub fn HomePage() -> impl IntoView {
let store_info = Store::new(submission.clone());
let expandable = ExpandableInfo::new("email".into());
let expandable_react = expandable.as_reactive();
expandable_react.data.update(|map| {
map.insert("email".into(), ValueType::String(Some("test@region15.org".into())));
map.insert("phone_number".into(), ValueType::String(Some("123456789-10".into())));
map.insert("math_sat".into(), ValueType::Number(Some(1234)));
});
let reactive_info = submission.as_reactive();
let elements_disabled = RwSignal::new(false);
let result_msg = Signal::derive(move || {