Refactor all components to use expandable data #10

Merged
BobdaFett merged 11 commits from feature/multi-entry-data into main 2025-09-26 16:13:29 +00:00
2 changed files with 16 additions and 3 deletions
Showing only changes of commit b460c3b3fd - Show all commits

No files matched your search

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