Skip to content

Comments

feat: implement delete meeting functionality with safeguards#13

Merged
asithade merged 13 commits intomainfrom
feat/delete-meeting-functionality
Jul 29, 2025
Merged

feat: implement delete meeting functionality with safeguards#13
asithade merged 13 commits intomainfrom
feat/delete-meeting-functionality

Conversation

@asithade
Copy link
Contributor

Summary

Implements complete delete meeting functionality as specified in LFXV2-115 with proper safeguards and user experience enhancements.

Features Implemented

🗑️ Delete Meeting Functionality

  • Enhanced confirmation dialog displaying:
    • Meeting title, date, and time
    • Participant count
    • Recurrence status
  • Recurrence handling with options to:
    • Delete only single occurrence
    • Delete entire series
  • Proper safeguards to prevent accidental deletions

🎛️ Dynamic Menu System

  • Contextual menu items that automatically:
    • Show "Edit" option only for upcoming meetings
    • Hide "Edit" option for past meetings
    • Always show "View" and "Delete" options
  • Reactive updates when switching between upcoming/past views

🔧 Full Stack Implementation

  • Backend: DELETE endpoint with validation and error handling
  • Service layer: Complete CRUD operations for meetings
  • Frontend: Enhanced UI with loading states and user feedback
  • Type safety: Proper TypeScript interfaces throughout

User Experience

  • Loading indicators during deletion process
  • Detailed confirmation showing exactly what will be deleted
  • Error handling with proper user feedback
  • Automatic data refresh after successful operations

Technical Details

Backend Changes

  • Added DELETE route in /api/meetings/:id with deleteType query parameter
  • Enhanced SupabaseService with deleteMeeting method
  • Proper validation for recurring meeting deletion options

Frontend Changes

  • Enhanced meeting dashboard with computed menu items
  • Improved confirmation dialogs with meeting details
  • Added recurrence-aware deletion options
  • Dynamic menu filtering based on meeting context

Code Quality

  • ✅ All linting passes
  • ✅ TypeScript compilation successful
  • ✅ Follows project patterns and standards
  • ✅ Comprehensive error handling

Test Plan

  • Delete single meetings with confirmation
  • Delete recurring meetings with single/series options
  • Menu items update correctly for past vs upcoming meetings
  • Loading states work during deletion
  • Error handling prevents system crashes
  • Data refreshes after successful deletion

🤖 Generated with Claude Code

asithade and others added 6 commits July 25, 2025 15:16
- Add MeetingFormComponent with comprehensive form validation and tooltips
- Create backend endpoints for meeting CRUD operations (POST/PUT/GET)
- Add TypeScript interfaces for CreateMeetingRequest and UpdateMeetingRequest
- Implement proper datetime conversion from 12-hour format to ISO
- Integrate meeting form into modal component with create/edit modes
- Add meeting creation functionality to dashboard with form modal
- Update SupabaseService with meeting management methods
- Fix time picker integration and validation

Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Asitha de Silva <asithade@gmail.com>
- Add comprehensive timezone list with 80+ timezones covering all regions
- Implement form validation to ensure meetings are scheduled in the future
- Add calendar date restriction to only allow dates from yesterday onwards
- Default start date/time to current time + 1 hour (rounded to 15 min)
- Show all validation errors when submit is clicked
- Add minDate/maxDate support to calendar component wrapper
- Create timezone constants in shared package with helper functions
- Fix nested ternary expressions per linting rules
- Update meeting type validation and default values

Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Asitha de Silva <asithade@gmail.com>
- Fix meeting_type default value to use 'None' instead of empty string
- Ensure consistent default values across create and edit modes
- Update form patchValue to handle meeting data properly

Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Asitha de Silva <asithade@gmail.com>
Implement comprehensive recurring meeting functionality with 6
predefined recurrence patterns:
- Does not repeat (default)
- Daily
- Weekly on [current day]
- Monthly on the [nth] [day]
- Monthly on the last [day]
- Every weekday

Key features:
- Dynamic options based on selected meeting date
- Smart UI that only shows relevant options (no duplicate monthly options)
- Proper memory management with takeUntilDestroyed()
- Full TypeScript support with new MeetingRecurrence interface
- Generates correct Zoom API recurrence objects
- Edit support for existing recurring meetings

Technical implementation:
- Added RecurrenceType enum to shared enums package
- Enhanced MeetingRecurrence interface with proper typing
- Updated CreateMeetingRequest and UpdateMeetingRequest interfaces
- Intelligent date calculation for monthly recurrence patterns
- Subscription cleanup to prevent memory leaks

Addresses LFXV2-138: Add Recurring Meeting Options to Meeting Form

Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Asitha de Silva <asithade@gmail.com>
…nums folder

Move MeetingVisibility and MeetingType enums from interfaces to the proper shared enums folder structure for better organization and consistency.

🤖 Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Asitha de Silva <asithade@gmail.com>
- Add DELETE endpoint with recurrence handling support
- Enhanced confirmation dialog with meeting details preview
- Options for recurring meetings (single occurrence vs entire series)
- Dynamic menu items that exclude edit option for past meetings
- Proper loading states and error handling throughout deletion flow
- Complete backend and frontend integration with proper validation

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Asitha de Silva <asithade@gmail.com>
Copilot AI review requested due to automatic review settings July 28, 2025 19:50
@asithade asithade requested a review from jordane as a code owner July 28, 2025 19:50

This comment was marked as outdated.

- Create MeetingDeleteConfirmationComponent for better HTML control
- Add shared RadioButtonComponent following checkbox pattern
- Replace inline HTML confirmation with structured component
- Implement form-controlled radio buttons for recurring meeting options
- Clean up meeting dashboard by removing multiple helper methods
- Add proper TypeScript interfaces for component data/results

🤖 Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Asitha de Silva <asithade@gmail.com>
@asithade asithade requested a review from Copilot July 28, 2025 20:20

This comment was marked as outdated.

@asithade asithade changed the base branch from main to feat/meeting-creation-flow July 28, 2025 20:33
asithade added 2 commits July 28, 2025 13:33
- Move meeting deletion logic from dashboard to confirmation component
- Add comprehensive error handling with specific HTTP status messages
- Implement loading states with disabled buttons and spinner icons
- Add success/error toast notifications for user feedback
- Keep dialog open on error to allow retry, close only on success
- Simplify meeting dashboard by removing deletion state management
- Improve separation of concerns and component self-containment

🤖 Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Asitha de Silva <asithade@gmail.com>
- Add 'future' delete type for recurring meetings to delete from current date forward
- Hide radio button options for past meetings (only show single delete option implicitly)
- Update backend and frontend services to support new 'future' delete type
- Add conditional UI logic based on meeting start_time vs current time
- Enhanced warning messages for different delete scenarios
- Improved UX by showing only relevant options based on meeting timing

🤖 Generated with [Claude Code](https://claude.ai/code)

Signed-off-by: Asitha de Silva <asithade@gmail.com>
@asithade asithade requested review from bramwelt and Copilot July 28, 2025 20:44
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull Request Overview

This PR implements comprehensive delete meeting functionality with proper safeguards and user experience enhancements. The implementation includes backend validation, frontend confirmation dialogs with recurrence handling, and dynamic menu systems.

  • Full-stack delete meeting implementation with proper error handling and validation
  • Enhanced confirmation dialog displaying meeting details and recurrence options
  • Dynamic menu system that shows contextually appropriate actions based on meeting status

Reviewed Changes

Copilot reviewed 14 out of 14 changed files in this pull request and generated 2 comments.

Show a summary per file
File Description
packages/shared/src/interfaces/meeting.interface.ts Adds DeleteMeetingRequest interface for delete type specification
apps/lfx-pcc/src/server/services/supabase.service.ts Implements deleteMeeting service method with recurrence type parameter
apps/lfx-pcc/src/server/routes/meetings.ts Adds DELETE endpoint with validation for delete types
apps/lfx-pcc/src/app/shared/services/meeting.service.ts Adds frontend service method for meeting deletion
apps/lfx-pcc/src/app/shared/components/radio-button/* Creates reusable radio button component for recurrence options
apps/lfx-pcc/src/app/shared/components/meeting-delete-confirmation/* Implements comprehensive delete confirmation component
apps/lfx-pcc/src/app/shared/components/meeting-card/* Adds loading state support for action menu
apps/lfx-pcc/src/app/modules/project/components/meeting-dashboard/* Integrates delete functionality with dynamic menu system
apps/lfx-pcc/src/app/modules/project/components/committee-members/* Adds take(1) operator to subscription cleanup
Comments suppressed due to low confidence (1)

apps/lfx-pcc/src/app/shared/components/meeting-delete-confirmation/meeting-delete-confirmation.component.ts:56

  • Creating a new instance of MeetingTimePipe in the component class could be inefficient. Consider injecting the pipe or using it directly in the template since Angular's built-in pipes are optimized for template usage.
          });

Signed-off-by: Asitha de Silva <asithade@gmail.com>
Base automatically changed from feat/meeting-creation-flow to main July 29, 2025 16:21
@asithade asithade merged commit b5988dc into main Jul 29, 2025
3 checks passed
@asithade asithade deleted the feat/delete-meeting-functionality branch July 29, 2025 17:59
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.

3 participants