Implement new structure-based comparison system #20

Merged
BobdaFett merged 12 commits from feature/form-schema into main 2025-12-12 16:46:29 +00:00
2 changed files with 38 additions and 34 deletions
Showing only changes of commit 298c897036 - Show all commits

No files matched your search

+11 -8
View File
@@ -22,6 +22,7 @@ use crate::common::ValueType;
/// ``` /// ```
#[component] #[component]
pub fn Chip( pub fn Chip(
#[prop(into)] display_text: String,
#[prop(into)] value: String, #[prop(into)] value: String,
#[prop(into)] name: String, #[prop(into)] name: String,
#[prop(into)] on_change: Callback<(), ()>, #[prop(into)] on_change: Callback<(), ()>,
@@ -38,7 +39,7 @@ pub fn Chip(
view! { view! {
<label for=id> <label for=id>
<input <input
type="checkbox" r#type="checkbox"
class="relative peer shrink-0 hidden" class="relative peer shrink-0 hidden"
name=name.clone() name=name.clone()
id=id.clone() id=id.clone()
@@ -54,7 +55,7 @@ pub fn Chip(
peer-disabled:peer-checked:border-gray-700 peer-disabled:peer-checked:border-gray-700
peer-disabled:cursor-default peer-disabled:cursor-default
transition-all duration-150"> transition-all duration-150">
<span>{value.clone()}</span> <span>{display_text.clone()}</span>
</div> </div>
</label> </label>
} }
@@ -71,7 +72,8 @@ pub fn Chip(
pub fn ChipsList( pub fn ChipsList(
#[prop(into)] data_member: String, #[prop(into)] data_member: String,
#[prop()] data_map: RwSignal<HashMap<String, ValueType>>, #[prop()] data_map: RwSignal<HashMap<String, ValueType>>,
#[prop()] items: Vec<String>, #[prop()] displayed_text: Vec<String>,
#[prop()] values: Vec<String>,
#[prop(default = RwSignal::new(false))] disabled: RwSignal<bool>, #[prop(default = RwSignal::new(false))] disabled: RwSignal<bool>,
#[prop(optional, into)] label: String, #[prop(optional, into)] label: String,
) -> impl IntoView { ) -> impl IntoView {
@@ -79,11 +81,11 @@ pub fn ChipsList(
<div class="m-1.5 mt-0 mb-0"> <div class="m-1.5 mt-0 mb-0">
<span class="font-bold">{label}</span> <span class="font-bold">{label}</span>
<div class="flex flex-row flex-wrap gap-2 mt-1"> <div class="flex flex-row flex-wrap gap-2 mt-1">
{items {displayed_text.into_iter().zip(values)
.into_iter() .into_iter()
.map(|item| { .map(|(text, value)| {
let checked_signal = Signal::derive({ let checked_signal = Signal::derive({
let item_name = item.clone(); let item_name = value.clone();
let data_member = data_member.clone(); let data_member = data_member.clone();
move || { move || {
data_map.get() data_map.get()
@@ -97,7 +99,7 @@ pub fn ChipsList(
}); });
let on_change = { let on_change = {
let item_name = item.clone(); let item_name = value.clone();
let data_member = data_member.clone(); let data_member = data_member.clone();
move || { move || {
let result = ValueType::String(Some(item_name.clone())); let result = ValueType::String(Some(item_name.clone()));
@@ -133,7 +135,8 @@ pub fn ChipsList(
checked=checked_signal checked=checked_signal
name=data_member.clone() name=data_member.clone()
on_change=on_change on_change=on_change
value=item.clone() value=value.clone()
display_text=text.clone()
disabled=disabled disabled=disabled
/> />
} }
+27 -26
View File
@@ -1,6 +1,7 @@
// Server dependencies // Server dependencies
#[cfg(feature = "ssr")] #[cfg(feature = "ssr")]
use aws_sdk_dynamodb::{Client, error::ProvideErrorMetadata, types::AttributeValue}; use aws_sdk_dynamodb::{Client, error::ProvideErrorMetadata, types::AttributeValue};
#[cfg(feature = "ssr")] #[cfg(feature = "ssr")]
use serde_dynamo::{from_item, to_item}; use serde_dynamo::{from_item, to_item};
#[cfg(feature = "ssr")] #[cfg(feature = "ssr")]
@@ -275,7 +276,7 @@ pub fn HomePage() -> impl IntoView {
.collect() .collect()
disabled=elements_disabled disabled=elements_disabled
data_member="town" data_member="town"
data_map=expandable_react.data data_map = expandable_react.data
/> />
</Row> </Row>
<Row> <Row>
@@ -308,24 +309,21 @@ pub fn HomePage() -> impl IntoView {
<ChipsList <ChipsList
data_member="athletic_requirements" data_member="athletic_requirements"
data_map=expandable_react.data data_map=expandable_react.data
items=vec![ displayed_text=vec!(
"Football", "Football", "Soccer", "Cross Country", "Cheerleading",
"Soccer", "Swimming", "Wrestling", "Ski", "Basketball",
"Cross Country", "Lacrosse", "Softball", "Indoor/Outdoor Track",
"Cheerleading", "Golf", "Tennis", "Volleyball"
"Swimming", )
"Wrestling", .into_iter().map(|s| s.to_owned())
"Ski", .collect()
"Basketball", values=vec!(
"Lacrosse", "football", "soccer", "cross_country", "cheerleading",
"Softball", "swimming", "wrestling", "ski", "basketball",
"Indoor/Outdoor Track", "lacrosse", "softball", "track",
"Golf", "golf", "tennis", "volleyball"
"Tennis", )
"Volleyball", .into_iter().map(|s| s.to_owned())
]
.into_iter()
.map(|s| s.to_owned())
.collect() .collect()
disabled=elements_disabled disabled=elements_disabled
label="Sports/Athletic Requirements" label="Sports/Athletic Requirements"
@@ -335,13 +333,16 @@ pub fn HomePage() -> impl IntoView {
<ChipsList <ChipsList
data_member="community_involvement" data_member="community_involvement"
data_map=expandable_react.data data_map=expandable_react.data
items=vec![ displayed_text=vec!(
"Lion's Club", "Lion's Club", "Knights of Columbus",
"Knights of Columbus", "Community Service > 20hrs"
"Community Service > 20hrs", )
] .into_iter().map(|s| s.to_owned())
.into_iter() .collect()
.map(|s| s.to_owned()) values=vec!(
"lions_club", "koc", "serv_20h"
)
.into_iter().map(|s| s.to_owned())
.collect() .collect()
disabled=elements_disabled disabled=elements_disabled
label="Required Community Involvement" label="Required Community Involvement"