mirror of
https://github.com/Monadical-SAS/reflector.git
synced 2025-12-21 20:59:05 +00:00
Calendar Integration Tasks: - Update upcoming meetings window from 30 to 120 minutes - Include currently happening events in upcoming meetings API - Create shared time utility functions (formatDateTime, formatCountdown, formatStartedAgo) - Improve ongoing meetings UI logic with proper time detection - Fix backend code organization and remove excessive documentation UI/UX Improvements: - Restructure room page layout using MinimalHeader pattern - Remove borders from header and footer elements - Change button text from "Leave Meeting" to "Leave Room" - Remove "Back to Reflector" footer for cleaner design - Extract WaitPageClient component for better separation Backend Changes: - calendar_events.py: Fix import organization and extend timing window - rooms.py: Update API default from 30 to 120 minutes - Enhanced test coverage for ongoing meeting scenarios Frontend Changes: - MinimalHeader: Add onLeave prop for custom navigation - MeetingSelection: Complete layout restructure with shared utilities - timeUtils: New shared utility file for consistent time formatting 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
42 lines
1.3 KiB
TypeScript
42 lines
1.3 KiB
TypeScript
export const formatDateTime = (date: string | Date): string => {
|
|
const d = new Date(date);
|
|
return d.toLocaleString("en-US", {
|
|
month: "short",
|
|
day: "numeric",
|
|
hour: "2-digit",
|
|
minute: "2-digit",
|
|
});
|
|
};
|
|
|
|
export const formatCountdown = (startTime: string | Date): string => {
|
|
const now = new Date();
|
|
const start = new Date(startTime);
|
|
const diff = start.getTime() - now.getTime();
|
|
|
|
if (diff <= 0) return "Starting now";
|
|
|
|
const minutes = Math.floor(diff / 60000);
|
|
const hours = Math.floor(minutes / 60);
|
|
const days = Math.floor(hours / 24);
|
|
|
|
if (days > 0) return `Starts in ${days}d ${hours % 24}h ${minutes % 60}m`;
|
|
if (hours > 0) return `Starts in ${hours}h ${minutes % 60}m`;
|
|
return `Starts in ${minutes} minutes`;
|
|
};
|
|
|
|
export const formatStartedAgo = (startTime: string | Date): string => {
|
|
const now = new Date();
|
|
const start = new Date(startTime);
|
|
const diff = now.getTime() - start.getTime();
|
|
|
|
if (diff <= 0) return "Starting now";
|
|
|
|
const minutes = Math.floor(diff / 60000);
|
|
const hours = Math.floor(minutes / 60);
|
|
const days = Math.floor(hours / 24);
|
|
|
|
if (days > 0) return `Started ${days}d ${hours % 24}h ${minutes % 60}m ago`;
|
|
if (hours > 0) return `Started ${hours}h ${minutes % 60}m ago`;
|
|
return `Started ${minutes} minutes ago`;
|
|
};
|