Skip to content

feat: Implement Calendar & Meeting Schedule Page closes #80#94

Open
M0izz wants to merge 3 commits into
imuniqueshiv:mainfrom
M0izz:feat/calendar-page
Open

feat: Implement Calendar & Meeting Schedule Page closes #80#94
M0izz wants to merge 3 commits into
imuniqueshiv:mainfrom
M0izz:feat/calendar-page

Conversation

@M0izz

@M0izz M0izz commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Implements a dedicated, responsive, and modern SaaS-style Calendar & Meeting Schedule dashboard page at /calendar, closing #80. This page integrates with existing meeting database records and lets users view, filter, and navigate their meetings across multiple layouts.

Backend

  • Extended the projection select in the getAllMeetings controller (meetingController.js) to include the time, duration, recordingType, and organization fields.
  • Chained .populate("organization", "name") to the getAllMeetings query so that organization names resolve correctly on the frontend for filter and detail queries.
  • Maintained strict formatting scope to avoid any noisy diffs.

Frontend

  • New Page (Calendar.jsx): Implemented a modern, light-themed calendar page supporting three distinct views:
  • Month View: Grid layout mapping events to days with color-coded status indicators (completed, processing, failed, uploaded).
  • Week View: Hourly schedule grid (08:00 to 20:00) where card heights and vertical offsets are positioned dynamically from meeting start times and durations.
  • Day View: Timeline view presenting an hourly scroll scale on the left and a chronological list agenda on the right.
  • Jump-to-Date Filter: Added an interactive inline <input type="date" /> picker in the filters row to instantly jump the calendar focus to any day.
  • Quick Actions Modal: Intersecting events opens a details dialog containing metadata (date, duration, organization, location, and description) and shortcuts (View full details, Join Live Room).
  • Filters Row: Dropdown selectors to filter by Status, Meeting Type, and Organization (Personal vs. Organization toggle).
  • Routing (App.jsx): Registered the /calendar route as a protected path under <ProtectedRoute>.
  • Navigation (Navbar.jsx): Added the "Calendar" link to desktop and mobile navigation headers using the CalendarDays icon.

Screenshots

calendar_ui_mockup_1783453799562

Testing & Verification

All validation requirements have been completed successfully:

  • Formatting Check*: Running npx prettier --check confirms all modified files are 100% formatted.
  • Linting Check*: Running npm run lint yields 0 compilation or linting errors.
  • Production Build*: Running npm run build compiles Vite assets successfully.
  • Functional Checks*: Verified Month/Week/Day layout shifting, filters, details modal overlays, calendar step-actions, and jump-to-date navigation bounds.

@vercel

vercel Bot commented Jul 7, 2026

Copy link
Copy Markdown

@M0izz is attempting to deploy a commit to the Shiv Raj Singh's projects Team on Vercel.

A member of the Team first needs to authorize it.

@coderabbitai

coderabbitai Bot commented Jul 7, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

This PR adds a new Calendar/Schedule page displaying meetings in month, week, and day views with filtering by status, type, and organization, and a details modal. It wires the page into routing and navbar navigation, and extends the meetings API response with additional fields including organization data.

Changes

Calendar Feature

Layer / File(s) Summary
Backend meetings API expansion
server/controllers/meetingController.js
getAllMeetings now selects time, duration, recordingType, and populates organization with its name.
Calendar state, fetching, and filtering
client/src/pages/Calendar.jsx
Sets up component state, fetches meetings from the backend, handles Escape-key modal close, and filters meetings by status/type/organization.
Date navigation and grid helpers
client/src/pages/Calendar.jsx
Adds prev/next/today navigation, week/day array helpers, month grid construction, time parsing/formatting, and view-based header titles.
Layout, toolbar, and view rendering
client/src/pages/Calendar.jsx
Renders the toolbar (navigation, view toggle, filters) and the month/week/day calendar views, plus loading and empty states.
Meeting details modal
client/src/pages/Calendar.jsx
Adds a modal showing meeting details with status styling and quick actions (including conditional live-room navigation), plus component export.
Routing and navbar wiring
client/src/App.jsx, client/src/components/Navbar.jsx
Registers a protected /calendar route and adds a "Calendar" navbar link with a CalendarDays icon.

Estimated code review effort: 3 (Moderate) | ~25 minutes

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant Navbar
    participant Calendar as Calendar Page
    participant Backend as Backend API
    participant DB as MongoDB

    User->>Navbar: Click "Calendar" link
    Navbar->>Calendar: Navigate to /calendar
    Calendar->>Backend: GET /api/meetings/all (with credentials)
    Backend->>DB: Query meetings with expanded fields + populate organization
    DB-->>Backend: Meetings data (time, duration, recordingType, organization)
    Backend-->>Calendar: Meetings JSON response
    Calendar->>Calendar: Apply status/type/organization filters
    Calendar-->>User: Render month/week/day view
    User->>Calendar: Click meeting card
    Calendar-->>User: Show "Quick Details" modal
Loading

Possibly related issues

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly summarizes the main change: adding a Calendar and meeting schedule page.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@server/controllers/meetingController.js`:
- Around line 588-591: The meetings list query is omitting fields that the UI
needs, so update the Meeting.find(...).select(...) projection in
meetingController so it also includes location and description alongside the
existing fields. Keep the same query shape and populate behavior, and make sure
the /api/meetings/all response preserves those two properties for Calendar.jsx
and the meeting-details modal.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: d3ae629e-7e5a-4211-9eb1-725744d712e5

📥 Commits

Reviewing files that changed from the base of the PR and between 3a34369 and 0b27cf9.

📒 Files selected for processing (4)
  • client/src/App.jsx
  • client/src/components/Navbar.jsx
  • client/src/pages/Calendar.jsx
  • server/controllers/meetingController.js

Comment on lines 588 to +591
const meetings = await Meeting.find({ uploadedBy: userId })
.sort({ createdAt: -1 })
.select("title summary structuredMoM createdAt date meetingType status");
.select("title summary structuredMoM createdAt date meetingType status time duration recordingType organization")
.populate("organization", "name");

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Include location and description in the meetings list projection. Calendar.jsx reads both fields from /api/meetings/all, but this .select() strips them out, so the meeting-details modal never shows those values even when they exist.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@server/controllers/meetingController.js` around lines 588 - 591, The meetings
list query is omitting fields that the UI needs, so update the
Meeting.find(...).select(...) projection in meetingController so it also
includes location and description alongside the existing fields. Keep the same
query shape and populate behavior, and make sure the /api/meetings/all response
preserves those two properties for Calendar.jsx and the meeting-details modal.

@M0izz

M0izz commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

Hi @imuniqueshiv I have done the work, looking for feedback :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant