feat(election): committee meeting UI — schedule/edit drawer, online/offline mode toggle, soft delete
- committee-board: collapsible meetings section per card, Schedule Meeting button, meeting list with status chips and join links - Meeting form drawer: ONLINE (platform, link, ID, password) vs OFFLINE (venue, address, city) mode toggle - Actions: edit/complete/cancel for SCHEDULED; delete (soft) for all statuses on active committees - election.service.ts: getMeetings, scheduleMeeting, updateMeeting, patchMeetingStatus, deleteMeeting - election-audit-log: meeting action metas (SCHEDULE_MEETING, UPDATE_MEETING, CANCEL_MEETING, COMPLETE_MEETING, DELETE_MEETING + FAILEDs), COMMITTEE entity action list updated Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
3e51eae4b5
commit
e952bc546f
@@ -95,7 +95,15 @@ const DETAIL_LABELS: Record<string, string> = {
|
||||
committeeId: 'Committee ID',
|
||||
members: 'Members',
|
||||
addedIds: 'Added IDs',
|
||||
removedAppointmentId: 'Removed Appointment ID'
|
||||
removedAppointmentId: 'Removed Appointment ID',
|
||||
// Committee Meeting
|
||||
meetingId: 'Meeting ID',
|
||||
meetingTitle: 'Meeting Title',
|
||||
meetingDate: 'Meeting Date',
|
||||
mode: 'Mode',
|
||||
platform: 'Platform',
|
||||
venue: 'Venue',
|
||||
city: 'City'
|
||||
};
|
||||
|
||||
const ACTION_META: Record<string, { label: string; icon: string; color: string }> = {
|
||||
@@ -156,7 +164,15 @@ const ACTION_META: Record<string, { label: string; icon: string; color: string }
|
||||
UPDATE_COMMITTEE: { label: 'Committee Updated', icon: 'edit_note', color: '#2563eb' },
|
||||
DISSOLVE_COMMITTEE: { label: 'Committee Dissolved', icon: 'group_off', color: '#dc2626' },
|
||||
ADD_COMMITTEE_MEMBER: { label: 'Member Added', icon: 'group_add', color: '#0891b2' },
|
||||
REMOVE_COMMITTEE_MEMBER: { label: 'Member Removed', icon: 'person_off', color: '#d97706' }
|
||||
REMOVE_COMMITTEE_MEMBER: { label: 'Member Removed', icon: 'person_off', color: '#d97706' },
|
||||
// Committee Meeting
|
||||
SCHEDULE_MEETING: { label: 'Meeting Scheduled', icon: 'event', color: '#16a34a' },
|
||||
UPDATE_MEETING: { label: 'Meeting Updated', icon: 'edit_calendar', color: '#2563eb' },
|
||||
CANCEL_MEETING: { label: 'Meeting Cancelled', icon: 'event_busy', color: '#dc2626' },
|
||||
COMPLETE_MEETING: { label: 'Meeting Completed', icon: 'event_available', color: '#10b981' },
|
||||
DELETE_MEETING: { label: 'Meeting Deleted', icon: 'delete_outline', color: '#94a3b8' },
|
||||
SCHEDULE_MEETING_FAILED: { label: 'Schedule Failed', icon: 'error_outline', color: '#dc2626' },
|
||||
UPDATE_MEETING_FAILED: { label: 'Update Meeting Failed', icon: 'error_outline', color: '#dc2626' }
|
||||
};
|
||||
|
||||
@Component({
|
||||
@@ -269,7 +285,14 @@ export class ElectionAuditLogComponent implements OnInit, OnDestroy {
|
||||
'UPDATE_COMMITTEE',
|
||||
'DISSOLVE_COMMITTEE',
|
||||
'ADD_COMMITTEE_MEMBER',
|
||||
'REMOVE_COMMITTEE_MEMBER'
|
||||
'REMOVE_COMMITTEE_MEMBER',
|
||||
'SCHEDULE_MEETING',
|
||||
'UPDATE_MEETING',
|
||||
'CANCEL_MEETING',
|
||||
'COMPLETE_MEETING',
|
||||
'DELETE_MEETING',
|
||||
'SCHEDULE_MEETING_FAILED',
|
||||
'UPDATE_MEETING_FAILED'
|
||||
]
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user