feat: complete calendar integration with UI improvements and code cleanup

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>
This commit is contained in:
2025-09-09 08:51:40 -06:00
parent 7193b4dbba
commit 98e05e484a
9 changed files with 567 additions and 437 deletions

View File

@@ -9,17 +9,23 @@ interface MinimalHeaderProps {
roomName: string;
displayName?: string;
showLeaveButton?: boolean;
onLeave?: () => void;
}
export default function MinimalHeader({
roomName,
displayName,
showLeaveButton = true,
onLeave,
}: MinimalHeaderProps) {
const router = useRouter();
const handleLeaveMeeting = () => {
router.push(`/${roomName}`);
if (onLeave) {
onLeave();
} else {
router.push(`/${roomName}`);
}
};
const roomTitle = displayName
@@ -36,8 +42,6 @@ export default function MinimalHeader({
w="100%"
py="2"
px="4"
borderBottom="1px solid"
borderColor="gray.200"
bg="white"
position="sticky"
top="0"
@@ -59,7 +63,7 @@ export default function MinimalHeader({
</Text>
</Flex>
{/* Leave Meeting Button */}
{/* Leave Room Button */}
{showLeaveButton && (
<Button
variant="outline"
@@ -67,7 +71,7 @@ export default function MinimalHeader({
size="sm"
onClick={handleLeaveMeeting}
>
Leave Meeting
Leave Room
</Button>
)}
</Flex>