7.5 KiB

Frontend Components

Reusable UI components provide common functionality across the Changemaker Lite admin interface. Components are organized by feature area and follow React best practices.

Component Organization

admin/src/components/
├── map/                    # Leaflet map components
├── canvass/                # GPS tracking and visit recording
├── media/                  # Video library components
├── email-templates/        # Email template editor components
├── observability/          # Monitoring components
├── AppLayout.tsx           # Admin sidebar layout
├── PublicLayout.tsx        # Public dark theme layout
├── VolunteerLayout.tsx     # Volunteer portal layout
├── MediaPublicLayout.tsx   # Public media gallery layout
└── GrapesJSEditor.tsx      # Landing page WYSIWYG editor

Layout Components

AppLayout

Admin sidebar layout with role-based navigation:

  • Location: components/AppLayout.tsx
  • Features:
    • Collapsible sidebar
    • Role-based menu items
    • User dropdown menu
    • Breadcrumb navigation
    • Responsive mobile drawer

PublicLayout

Dark theme layout for public pages:

  • Location: components/PublicLayout.tsx
  • Features:
    • Dark blue/teal color scheme
    • Header with logo and navigation
    • Footer with links
    • Responsive grid breakpoints

VolunteerLayout

Top navigation layout for volunteer portal:

  • Location: components/VolunteerLayout.tsx
  • Features:
    • Horizontal navigation bar
    • Mobile hamburger menu
    • User status display
    • Active route highlighting

MediaPublicLayout

Minimal layout for public media gallery:

  • Location: components/MediaPublicLayout.tsx
  • Features:
    • Clean header with branding
    • Full-width content area
    • Dark theme consistency

Map Components

MapControls

Floating control buttons for map interactions:

  • Location: components/map/MapControls.tsx
  • Features:
    • Add location mode toggle
    • Move location mode toggle
    • Geolocate current position
    • Fullscreen toggle
    • Auto-refresh toggle

AddLocationMode

Click-to-add location drawing mode:

  • Location: components/map/AddLocationMode.tsx
  • Features:
    • Click map to add location
    • Reverse geocoding
    • Form modal for details
    • Marker placement

MoveLocationMode

Click-to-move existing locations:

  • Location: components/map/MoveLocationMode.tsx
  • Features:
    • Drag markers to new position
    • Update coordinates
    • Cancel/confirm actions

CutDrawingMode

Polygon drawing tool for geographic cuts:

  • Location: components/map/CutDrawingMode.tsx
  • Features:
    • Click vertices to draw polygon
    • Close polygon detection
    • Vertex editing
    • Save/cancel actions

CutOverlays

GeoJSON polygon rendering:

  • Location: components/map/CutOverlays.tsx
  • Features:
    • Multi-polygon support
    • Color-coded cuts
    • Click to select
    • Popup information

CutOverlayControls

Cut visibility toggle panel:

  • Location: components/map/CutOverlayControls.tsx
  • Features:
    • Show/hide individual cuts
    • Bulk toggle all
    • Color legend

CutEditorMap

Specialized map for cut editing:

  • Location: components/map/CutEditorMap.tsx
  • Features:
    • Drawing mode integration
    • Vertex editing
    • Polygon validation
    • Save to database

MapLegend

Floating legend overlay:

  • Location: components/map/MapLegend.tsx
  • Features:
    • Color-coded markers
    • Cut legend
    • Collapsible panel

Canvass Components

CanvassHeader

Session header with timer and status:

  • Location: components/canvass/CanvassHeader.tsx
  • Features:
    • Session timer
    • Start/end session
    • Cut information
    • Visit counter

SessionTimer

Elapsed time display:

  • Location: components/canvass/SessionTimer.tsx
  • Features:
    • Real-time countdown
    • Hours:minutes:seconds format
    • Auto-update

CanvassMarker

Location marker with visit status:

  • Location: components/canvass/CanvassMarker.tsx
  • Features:
    • Color-coded by visit status
    • Click to record visit
    • Popup with details
    • Next location highlighting

CanvassMarkerGroup

Optimized marker clustering:

  • Location: components/canvass/CanvassMarkerGroup.tsx
  • Features:
    • Performance optimization
    • Batch rendering
    • Click handlers

WalkingRouteLine

Polyline for walking route:

  • Location: components/canvass/WalkingRouteLine.tsx
  • Features:
    • Blue dashed line
    • Location-to-location path
    • Auto-update on visit

GPSTracker

GPS position tracking:

  • Location: components/canvass/GPSTracker.tsx
  • Features:
    • Watch position API
    • Blue GPS marker
    • Accuracy circle
    • Auto-center map

CanvassBottomToolbar

Bottom sheet with actions:

  • Location: components/canvass/CanvassBottomToolbar.tsx
  • Features:
    • Expandable drawer
    • Quick actions
    • Visit recording
    • Session controls

VisitRecordingForm

Visit outcome form:

  • Location: components/canvass/VisitRecordingForm.tsx
  • Features:
    • Outcome selection
    • Notes input
    • GPS coordinates
    • Submit with validation

CanvassLegend

Map legend for canvass status:

  • Location: components/canvass/CanvassLegend.tsx
  • Features:
    • Status color codes
    • Visit outcome legend
    • Collapsible panel

Media Components

VideoCard

Video item display card:

  • Location: components/media/VideoCard.tsx
  • Features:
    • Thumbnail preview
    • Title and description
    • Action buttons
    • Selection checkbox

BulkActions

Batch operation toolbar:

  • Location: components/media/BulkActions.tsx
  • Features:
    • Select all toggle
    • Delete selected
    • Lock/unlock selected
    • Share selected

UploadVideoModal

Video upload interface:

  • Location: components/media/UploadVideoModal.tsx
  • Features:
    • Drag-and-drop upload
    • Progress tracking
    • Metadata form
    • Single/batch upload

MediaGalleryGrid

Responsive video grid:

  • Location: components/media/MediaGalleryGrid.tsx
  • Features:
    • Masonry layout
    • Lazy loading
    • Infinite scroll
    • Filter/sort

Email Template Components

TemplateEditor

Email template WYSIWYG editor:

  • Location: components/email-templates/TemplateEditor.tsx
  • Features:
    • Rich text editing
    • Variable insertion
    • Preview mode
    • HTML source view

VariableInserter

Template variable selector:

  • Location: components/email-templates/VariableInserter.tsx
  • Features:
    • Variable dropdown
    • Click to insert
    • Variable documentation
    • Preview rendering

Observability Components

MetricsChart

Prometheus metrics visualization:

  • Location: components/observability/MetricsChart.tsx
  • Features:
    • Time-series charts
    • Multiple metrics
    • Auto-refresh
    • Zoom controls

ServiceHealthCard

Service status display:

  • Location: components/observability/ServiceHealthCard.tsx
  • Features:
    • Health indicator
    • Uptime display
    • Quick actions
    • Error messages

Editor Components

GrapesJSEditor

Landing page WYSIWYG editor:

  • Location: components/GrapesJSEditor.tsx
  • Features:
    • GrapesJS integration
    • Custom block library
    • Ctrl+S save handler
    • Error boundary
    • Forward ref support
    • Desktop-only warning