Skip to content

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