Refactor calendar component into modular architecture with view switching
- Split monolithic Calendar component into focused sub-components: - CalendarHeader: Navigation buttons and title display - MonthView: Monthly calendar grid layout and event rendering - WeekView: Weekly calendar view with full-height day containers - Add ViewMode enum for Month/Week view switching in sidebar dropdown - Fix event styling by correcting CSS class from "event" to "event-box" - Implement proper week view layout with full-height day containers - Maintain all existing functionality: event handling, context menus, localStorage persistence 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
		| @@ -1,6 +1,6 @@ | ||||
| use yew::prelude::*; | ||||
| use yew_router::prelude::*; | ||||
| use crate::components::Login; | ||||
| use crate::components::{Login, ViewMode}; | ||||
| use crate::services::calendar_service::{UserInfo, CalendarEvent}; | ||||
|  | ||||
| #[derive(Clone, Routable, PartialEq)] | ||||
| @@ -22,6 +22,8 @@ pub struct RouteHandlerProps { | ||||
|     pub on_event_context_menu: Option<Callback<(web_sys::MouseEvent, CalendarEvent)>>, | ||||
|     #[prop_or_default] | ||||
|     pub on_calendar_context_menu: Option<Callback<(web_sys::MouseEvent, chrono::NaiveDate)>>, | ||||
|     #[prop_or_default] | ||||
|     pub view: ViewMode, | ||||
| } | ||||
|  | ||||
| #[function_component(RouteHandler)] | ||||
| @@ -31,6 +33,7 @@ pub fn route_handler(props: &RouteHandlerProps) -> Html { | ||||
|     let on_login = props.on_login.clone(); | ||||
|     let on_event_context_menu = props.on_event_context_menu.clone(); | ||||
|     let on_calendar_context_menu = props.on_calendar_context_menu.clone(); | ||||
|     let view = props.view.clone(); | ||||
|      | ||||
|     html! { | ||||
|         <Switch<Route> render={move |route| { | ||||
| @@ -39,6 +42,7 @@ pub fn route_handler(props: &RouteHandlerProps) -> Html { | ||||
|             let on_login = on_login.clone(); | ||||
|             let on_event_context_menu = on_event_context_menu.clone(); | ||||
|             let on_calendar_context_menu = on_calendar_context_menu.clone(); | ||||
|             let view = view.clone(); | ||||
|              | ||||
|             match route { | ||||
|                 Route::Home => { | ||||
| @@ -62,6 +66,7 @@ pub fn route_handler(props: &RouteHandlerProps) -> Html { | ||||
|                                 user_info={user_info}  | ||||
|                                 on_event_context_menu={on_event_context_menu} | ||||
|                                 on_calendar_context_menu={on_calendar_context_menu} | ||||
|                                 view={view} | ||||
|                             />  | ||||
|                         } | ||||
|                     } else { | ||||
| @@ -80,6 +85,8 @@ pub struct CalendarViewProps { | ||||
|     pub on_event_context_menu: Option<Callback<(web_sys::MouseEvent, CalendarEvent)>>, | ||||
|     #[prop_or_default] | ||||
|     pub on_calendar_context_menu: Option<Callback<(web_sys::MouseEvent, chrono::NaiveDate)>>, | ||||
|     #[prop_or_default] | ||||
|     pub view: ViewMode, | ||||
| } | ||||
|  | ||||
| use gloo_storage::{LocalStorage, Storage}; | ||||
| @@ -238,6 +245,7 @@ pub fn calendar_view(props: &CalendarViewProps) -> Html { | ||||
|                                 user_info={props.user_info.clone()} | ||||
|                                 on_event_context_menu={props.on_event_context_menu.clone()} | ||||
|                                 on_calendar_context_menu={props.on_calendar_context_menu.clone()} | ||||
|                                 view={props.view.clone()} | ||||
|                             /> | ||||
|                         </div> | ||||
|                     } | ||||
| @@ -250,6 +258,7 @@ pub fn calendar_view(props: &CalendarViewProps) -> Html { | ||||
|                             user_info={props.user_info.clone()} | ||||
|                             on_event_context_menu={props.on_event_context_menu.clone()} | ||||
|                             on_calendar_context_menu={props.on_calendar_context_menu.clone()} | ||||
|                             view={props.view.clone()} | ||||
|                         /> | ||||
|                     } | ||||
|                 } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Connor Johnstone
					Connor Johnstone