Files
workforce-pay-bill-p/DASHBOARD_CONFIG.md

248 lines
6.1 KiB
Markdown

# Dashboard JSON Configuration
The dashboard layout, data, and translations are now loaded from JSON files, making it easy to customize and configure the dashboard without modifying React components.
## Files
- **`/src/data/dashboard.json`** - Dashboard layout and configuration
- **`/src/data/translations/en.json`** - English translations (including dashboard keys)
- **`/src/data/translations/fr.json`** - French translations
- **`/src/data/translations/es.json`** - Spanish translations
## Dashboard Configuration Structure
### Layout Sections
The dashboard is divided into three main sections:
#### 1. Metrics Grid
Displays key performance indicators (KPIs) in a grid layout.
```json
{
"id": "metrics",
"type": "metrics-grid",
"columns": {
"mobile": 1,
"tablet": 2,
"desktop": 4
},
"metrics": [
{
"id": "pendingApprovals",
"titleKey": "dashboard.pendingApprovals",
"dataSource": "metrics.pendingApprovals",
"icon": "ClockCounterClockwise",
"iconColor": "text-warning",
"variant": "warning",
"trend": {
"enabled": true,
"direction": "up",
"value": 12,
"textKey": "dashboard.vsLastWeek",
"textParams": { "value": "12" }
}
}
]
}
```
#### 2. Financial Summary Cards
Shows financial metrics like revenue, payroll, and margins.
```json
{
"id": "financial-summary",
"type": "cards-grid",
"columns": {
"mobile": 1,
"tablet": 1,
"desktop": 3
},
"cards": [
{
"id": "monthlyRevenue",
"titleKey": "dashboard.monthlyRevenue",
"descriptionKey": "dashboard.monthlyRevenueDescription",
"dataSource": "metrics.monthlyRevenue",
"format": "currency",
"currencySymbol": "£",
"trend": {
"enabled": true,
"direction": "up",
"value": 12.5,
"textKey": "dashboard.vsLastMonth",
"textParams": { "value": "12.5" },
"color": "text-success"
}
}
]
}
```
#### 3. Activity Feed & Quick Actions
Two-column layout showing recent activities and quick action buttons.
```json
{
"id": "activity-and-actions",
"type": "two-column-cards",
"columns": {
"mobile": 1,
"tablet": 1,
"desktop": 2
},
"cards": [
{
"id": "recentActivity",
"type": "activity-feed",
"titleKey": "dashboard.recentActivity",
"descriptionKey": "dashboard.recentActivityDescription",
"dataSource": "recentActivities",
"maxItems": 4
},
{
"id": "quickActions",
"type": "action-list",
"titleKey": "dashboard.quickActions",
"descriptionKey": "dashboard.quickActionsDescription",
"actions": [
{
"id": "createTimesheet",
"labelKey": "dashboard.createTimesheet",
"icon": "Clock",
"action": "navigate",
"target": "timesheets"
}
]
}
]
}
```
### Recent Activities
Activity feed items are defined separately:
```json
{
"recentActivities": [
{
"id": "activity-1",
"icon": "CheckCircle",
"iconColor": "text-success",
"titleKey": "dashboard.timesheetApproved",
"description": "John Smith - Week ending 15 Jan 2025",
"timeKey": "dashboard.minutesAgo",
"timeParams": { "value": "5" },
"timestamp": "2025-01-15T14:55:00Z"
}
]
}
```
## Data Sources
The `dataSource` field references metrics from the application's state:
- `metrics.pendingApprovals` → Dashboard metrics object
- `metrics.monthlyRevenue` → Financial data
- `metrics.complianceAlerts` → Compliance tracking
The hook automatically resolves nested paths like `metrics.pendingApprovals` by traversing the metrics object.
## Available Icons
Icons are mapped from Phosphor Icons library:
- Clock
- Receipt
- CurrencyDollar
- ClockCounterClockwise
- CheckCircle
- Warning
- Notepad
- Download
- ArrowUp
- ArrowDown
## Variants
Metric cards support visual variants:
- `default` - Standard border
- `success` - Green accent border
- `warning` - Yellow/orange accent border
- `error` - Red accent border
## Formats
Financial cards support multiple formats:
- `currency` - Displays with currency symbol (e.g., £1,234)
- `percentage` - Displays with % symbol (e.g., 15.5%)
- `number` - Plain number with locale formatting
## Translations
All text is loaded from translation files using translation keys:
```json
{
"dashboard": {
"title": "Dashboard",
"subtitle": "Real-time overview of your workforce operations",
"pendingApprovals": "Pending Approvals",
"monthlyRevenue": "Monthly Revenue",
"vsLastWeek": "{{value}}% vs last week",
"minutesAgo": "{{value}} minutes ago"
}
}
```
Translation keys support parameter interpolation using `{{paramName}}` syntax.
## Custom Hook
The `useDashboardConfig` hook provides easy access to the configuration:
```typescript
import { useDashboardConfig } from '@/hooks/use-dashboard-config'
const {
config, // Full configuration object
loading, // Loading state
error, // Error state
getMetricsSection, // Get metrics section config
getFinancialSection, // Get financial cards config
getRecentActivities, // Get activity feed (with optional limit)
getQuickActions // Get quick action buttons
} = useDashboardConfig()
```
## Adding New Metrics
To add a new metric:
1. Add the metric to `/src/data/dashboard.json` in the appropriate section
2. Add translation keys to all language files (`en.json`, `fr.json`, `es.json`)
3. Ensure the data source path matches your metrics object structure
Example:
```json
{
"id": "activeWorkers",
"titleKey": "dashboard.activeWorkers",
"dataSource": "metrics.activeWorkers",
"icon": "Users",
"iconColor": "text-info",
"variant": "default"
}
```
## Benefits
**No code changes needed** - Update dashboard by editing JSON
**Fully internationalized** - All text comes from translation files
**Flexible layout** - Responsive column configurations
**Type-safe** - TypeScript interfaces ensure correct structure
**Easy maintenance** - Centralized configuration
**Reusable** - Same pattern can be applied to other views