## Calendar Empty State Rendering Improvement **Status:** Completed ### Background The current Calendar Workspace renders a full-page empty state when no Calendar events are returned. Current behavior: ```text No scheduled work in this period Try changing filters or create an Activity from the owning CRM record. ``` This behavior is acceptable for an Agenda (list) view but is not appropriate for graphical calendar views. A calendar should remain a calendar even when there are no events. Users still need to: * understand the selected date range * navigate between dates * visualize available time slots * click an empty day or time slot * create a new Activity * understand that the schedule is empty rather than the Calendar failing --- ## Required UX Change ### Day View Always render the complete Calendar grid. When there are no events: * render the timeline/grid normally * show an inline empty-state hint inside the calendar body * keep toolbar, navigation, and date controls visible * allow selecting a time slot * allow creating a new Activity Do **NOT** replace the Calendar with a full-page empty screen. --- ### Week View Always render the Week grid. When there are no events: * render all days * render working hours * render current time indicator where applicable * render an inline empty hint only * preserve drag target areas for future Activity creation Do **NOT** hide the calendar grid. --- ### Month View Always render the Month calendar. When there are no events: * render the entire month * render all weeks * render date cells * render navigation * optionally display a small "No events" message inside the month body The Month view should always look like a usable calendar. --- ### Agenda View Agenda is different. Agenda is a list-based presentation. When there are no scheduled items: Show the existing empty state: ```text No scheduled work in this period. Try changing filters or create an Activity. ``` This behavior remains correct. --- ## Rendering Rules Preferred rendering logic: ```text Day ↓ Always render Calendar Grid Week ↓ Always render Calendar Grid Month ↓ Always render Calendar Grid Agenda ↓ If empty Show Empty State Else Show Agenda List ``` The Calendar component should never disappear simply because there are zero events. --- ## Empty Calendar Overlay Instead of replacing the Calendar component, render a lightweight overlay or inline message. Example: ```text ────────────────────────────── No scheduled work Your schedule is free. [+ Add Activity] ────────────────────────────── ``` The overlay must not block: * changing dates * changing view * selecting days * selecting time slots * opening filters --- ## Add Activity Entry Point When the Calendar contains no events, provide a visible primary action: ```text + Add Activity ``` The button must reuse the existing Activity form and Activity API. Do not introduce a Calendar-specific create flow. --- ## Calendar Interaction Even when empty, users must still be able to: * navigate month/week/day * click a date * click a time slot * switch views * change filters * search * create Activities The Calendar should remain fully interactive. --- ## Big Calendar Integration Because the project uses **lramos33/big-calendar** as the UI foundation: * always render the Big Calendar component for Day, Week, and Month * pass an empty event array when appropriate * never short-circuit rendering based on `events.length === 0` * use the Calendar's native layout even when there are no events Avoid patterns such as: ```tsx if (events.length === 0) { return ; } ``` Instead: ```tsx {events.length === 0 && view === "agenda" && ( )} {events.length === 0 && view !== "agenda" && ( )} ``` --- ## UX Principles The Calendar is a navigation surface, not only an event list. Users should always understand: * where they are * which dates are visible * which time slots are available * where new Activities can be scheduled An empty schedule should feel like available capacity—not like a missing screen. --- ## Acceptance Criteria * Day view always renders the calendar grid. * Week view always renders the calendar grid. * Month view always renders the calendar grid. * Agenda keeps the existing list-style empty state. * Empty Day/Week/Month views display a lightweight overlay instead of replacing the Calendar. * Calendar navigation remains available when no events exist. * Date and time slots remain clickable. * Users can create Activities directly from an empty calendar. * No full-page empty state is shown for Day, Week, or Month views. * The implementation remains compatible with `lramos33/big-calendar` and ALLA OS projection architecture.