diff --git a/aep-schedule-website/src/frontend/components/common/checkbox.rs b/aep-schedule-website/src/frontend/components/common/checkbox.rs deleted file mode 100644 index 7e689b3dc4d7d3a4625a7eaee76bf53a2dc15a6b..0000000000000000000000000000000000000000 --- a/aep-schedule-website/src/frontend/components/common/checkbox.rs +++ /dev/null @@ -1,25 +0,0 @@ -use leptos::*; - -#[component] -pub fn CheckboxChip<F>( - #[prop(optional, into)] value: RwSignal<bool>, - #[prop(optional, into)] class: &'static str, - submit: F, - children: Children, -) -> impl IntoView -where - F: Fn() + Copy + 'static, -{ - view! { - <div on:click=move |_| { - value.update(|b| *b = !*b); - submit(); - } class="chips ".to_owned() + class> - <input - type="checkbox" - prop:checked=value - /> - {children()} - </div> - } -} diff --git a/aep-schedule-website/src/frontend/components/common/mod.rs b/aep-schedule-website/src/frontend/components/common/mod.rs index 6480e0174490976dbf0c5abb5ed088439e09337a..31ba3d955fa8cc7ab7bc736b367e2c3cd83efbc2 100644 --- a/aep-schedule-website/src/frontend/components/common/mod.rs +++ b/aep-schedule-website/src/frontend/components/common/mod.rs @@ -1,5 +1,4 @@ pub mod autocomplete; -pub mod checkbox; pub mod number_input; pub mod schedule; pub mod tab; diff --git a/aep-schedule-website/src/frontend/components/options/courses_selector.rs b/aep-schedule-website/src/frontend/components/options/courses_selector.rs index ca0c25e19405ae6df5661207f7b535805bff16a2..1186d8e14100cfd2ec90789b8286f763d793fa9a 100644 --- a/aep-schedule-website/src/frontend/components/options/courses_selector.rs +++ b/aep-schedule-website/src/frontend/components/options/courses_selector.rs @@ -1,7 +1,6 @@ use super::state::OptionState; use super::state::ReactiveCourse; use crate::backend::routes::get_courses; -use crate::frontend::components::common::checkbox::CheckboxChip; use crate::frontend::components::common::tab::Tab; use crate::frontend::components::icons::bell_ringing::BellRinging; use crate::frontend::components::icons::calendar_x::CalendarX; @@ -21,7 +20,6 @@ use leptos::*; #[component] fn GroupsChips<F>( open: RwSignal<bool>, - open_style: &'static str, group: Group, course_sigle: CompactString, group_type: GroupType, @@ -33,12 +31,19 @@ where let set_modal = use_context::<SetModal>().unwrap().0; view! { - <CheckboxChip value=open class=open_style submit> - <span>{group.number.to_string()}</span> - <div class="col-container group-text-col"> + <div on:click=move |_| { + open.update(|b| *b = !*b); + submit(); + } + class="chips gap-2" + class=("bg-green-500", move || {open.get()}) + class=("bg-red-500", move || {!open.get()}) + > + <span class="text-lg text-bold text-sans">{group.number.to_string()}</span> + <div class="flex flex-col group-text-col"> {group.periods.iter().map(|p| { view!{ - <div class="row-container group-text"> + <div class="flex group-text"> <span>{p.day.to_string()}</span> <span class="period-group">{p.hours.to_string()}</span> </div> @@ -57,7 +62,7 @@ where }), true => None, }} - </CheckboxChip> + </div> } } @@ -74,10 +79,9 @@ where { view! { {groups.into_iter().enumerate().map(|(i, group)| { - let open_style = if group.open {"group-chip"} else {"group-chip closed-group"}; let open = open[i]; view! { - <GroupsChips open open_style group course_sigle=course_sigle.clone() group_type submit/> + <GroupsChips open group course_sigle=course_sigle.clone() group_type submit/> } }).collect_view() } @@ -93,13 +97,13 @@ where view! { <Tab active_tab tab_id=course.sigle.to_string()> <p>{course.name}</p> - <div class="row-container row-evenly"> + <div class="flex justify-around"> { match course.course_type { ReactiveCourseType::TheoOnly { theo_open, theo_groups } => { let groups = theo_groups; view!{ - <div> + <div class="flex gap-2 flex-col pb-2"> <h3>"Théorie"</h3> <GroupsSettings groups open=theo_open course_sigle group_type=GroupType::TheoGroup submit/> </div> @@ -108,7 +112,7 @@ where ReactiveCourseType::LabOnly { lab_open, lab_groups } => { let groups = lab_groups; view!{ - <div> + <div class="flex gap-2 flex-col pb-2"> <h3>"Laboratoire"</h3> <GroupsSettings groups open=lab_open course_sigle=course_sigle.clone() group_type=GroupType::LabGroup submit/> </div> @@ -118,12 +122,12 @@ where let theo_groups = theo_groups; let lab_groups = lab_groups; view!{ - <div> + <div class="flex gap-2 flex-col pb-2"> <h3>"Théorie"</h3> <GroupsSettings groups=theo_groups open=theo_open course_sigle=course_sigle.clone() group_type=GroupType::TheoGroup submit/> </div> <div class="vertical-bar"></div> - <div> + <div class="flex gap-2 flex-col pb-2"> <h3>"Laboratoire"</h3> <GroupsSettings groups=lab_groups open=lab_open course_sigle=course_sigle.clone() group_type=GroupType::LabGroup submit/> </div> @@ -132,7 +136,7 @@ where ReactiveCourseType::Linked { both_open, theo_groups, lab_groups } => { let groups = theo_groups.merge(lab_groups); view!{ - <div> + <div class="flex gap-2 flex-col pb-2"> <h3>"Théorie et laboratoire lié"</h3> <GroupsSettings groups open=both_open course_sigle=course_sigle group_type=GroupType::LabGroup submit/> </div> @@ -161,7 +165,7 @@ where > <SearchCourse courses=courses.clone() action_courses set_active_tab/> </Await> - <div class="row-container tab-width"> + <div class="flex tab-width"> <button class="tab-button chips" class=("tab-selected", move || active_tab.get() == "") id="personal" on:click={ move |_| set_active_tab.set("".to_string()) }> diff --git a/aep-schedule-website/src/frontend/components/options/optimizations.rs b/aep-schedule-website/src/frontend/components/options/optimizations.rs index 3c27cd8c7e0d30a7caf16a8297205991b74bcafd..ffffefa8fec163acbfe74fda7b1a85750ba91517 100644 --- a/aep-schedule-website/src/frontend/components/options/optimizations.rs +++ b/aep-schedule-website/src/frontend/components/options/optimizations.rs @@ -27,29 +27,29 @@ where view! { <div class="three-col"> - <div class="col-container"> + <div class="flex flex-col items-center"> <House weight=weight_house size="10vh"/> <p class="font-sans font-medium tracking-tight">"Plus de congés"</p> - <input type="range" min="0" max="4" class="opti-slider accent-amber-500" prop:value=state.day_off on:input=move |ev| { + <input type="range" min="0" max="4" class="w-24 accent-amber-500" prop:value=state.day_off on:input=move |ev| { state.day_off.set(event_target_value(&ev).parse::<u8>().unwrap()); submit(); }/> </div> - <div class="col-container"> - <div class="row-container"> + <div class="flex flex-col items-center"> + <div class="flex"> <SunHorizon weight=weight_early size="10vh"/> <Sun weight=weight_morning size="10vh"/> </div> <p class="font-sans font-medium tracking-tight">"Cours plus tôt ou plus tard"</p> - <input type="range" min="-4" max="4" class="opti-slider accent-amber-500" prop:value=state.morning on:input=move |ev| { + <input type="range" min="-4" max="4" class="w-48 accent-amber-500" prop:value=state.morning on:input=move |ev| { state.morning.set(event_target_value(&ev).parse::<i8>().unwrap()); submit(); }/> </div> - <div class="col-container"> + <div class="flex flex-col items-center"> <CalendarCheck weight=weight_finish size="10vh"/> <p class="font-sans font-medium tracking-tight">"Finir plus tôt"</p> - <input type="range" min="0" max="4" class="opti-slider accent-amber-500" prop:value=state.finish_early on:input=move |ev| { + <input type="range" min="0" max="4" class="w-24 accent-amber-500" prop:value=state.finish_early on:input=move |ev| { state.finish_early.set(event_target_value(&ev).parse::<u8>().unwrap()); submit(); }/> diff --git a/aep-schedule-website/style/options.scss b/aep-schedule-website/style/options.scss index 5fea310c4c6df1d9c46edfa4b0f69fa3a20ac44a..4028cd207d1a1def2101f24cc2ecc05f1aab0302 100644 --- a/aep-schedule-website/style/options.scss +++ b/aep-schedule-website/style/options.scss @@ -21,31 +21,10 @@ right: 2px; } -.row-container { - display: flex; - flex-direction: row; -} - -.col-container { - display: flex; - flex-direction: column; - width: 100%; - align-items: center; -} - -.row-center { - justify-content: center; - flex-wrap: wrap; -} - -.row-evenly { - justify-content: space-evenly; -} - .three-col { display: grid; grid-template-columns: 1fr 2fr 1fr; - width: 98%; + width: 100%; } .bottom { @@ -61,23 +40,10 @@ padding: 0px; } -.opti-slider { - width: 70%; -} - .auto-bottom { margin-top: auto; } -.group-chip { - background-color: $highlight-color; - color: $background-color; - margin: 4px; - gap: 7px; - font-weight: normal; - overflow: hidden; -} - .group-text-col { justify-content: space-between; }