Refactor create_event_modal into modular components
- Split massive 27K line modal into focused components - Created event_form module with 6 tab components: * BasicDetailsTab - main event info with recurrence options properly positioned * AdvancedTab - status, privacy, priority * PeopleTab - organizer and attendees * CategoriesTab - event categories * LocationTab - location information * RemindersTab - reminder settings - Added shared types and data structures - Created new CreateEventModalV2 using modular architecture - Recurrence options now positioned directly after repeat/reminder pickers 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
39
frontend/src/components/event_form/location.rs
Normal file
39
frontend/src/components/event_form/location.rs
Normal file
@@ -0,0 +1,39 @@
|
||||
use super::types::*;
|
||||
use wasm_bindgen::JsCast;
|
||||
use web_sys::HtmlInputElement;
|
||||
use yew::prelude::*;
|
||||
|
||||
#[function_component(LocationTab)]
|
||||
pub fn location_tab(props: &TabProps) -> Html {
|
||||
let data = &props.data;
|
||||
|
||||
let on_location_input = {
|
||||
let data = data.clone();
|
||||
Callback::from(move |e: InputEvent| {
|
||||
if let Some(target) = e.target() {
|
||||
if let Ok(input) = target.dyn_into::<HtmlInputElement>() {
|
||||
let mut event_data = (*data).clone();
|
||||
event_data.location = input.value();
|
||||
data.set(event_data);
|
||||
}
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
html! {
|
||||
<div class="tab-panel">
|
||||
<div class="form-group">
|
||||
<label for="event-location">{"Location"}</label>
|
||||
<input
|
||||
type="text"
|
||||
id="event-location"
|
||||
class="form-input"
|
||||
value={data.location.clone()}
|
||||
oninput={on_location_input}
|
||||
placeholder="Enter event location"
|
||||
/>
|
||||
<p class="form-help-text">{"Add the location where the event will take place."}</p>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user