Configuration · Dashboard configuration
Defines the dashboards available in the app: a name, a category (general / home / traffic), a panel type (data-quality, custom, external URL) and — for custom panels — a JSON component and filter configuration, plus which staff roles may see it.
| Area | Configuration |
| Routes | configuration.dashboards · configuration.dashboards.index · configuration.dashboards.new · configuration.dashboards.edit |
| Centre modules | analytics |
| Staff levels | per dashboard ability canCreate/canDelete/canRead |
| Models | dashboard · dashboard-component · dashboard-config · dashboard-query |
| UI label | title.header.configuration.dashboard / menu.navbar.configuration.dashboards |
| Coverage | 4 use cases · 2 happy · 5 failure |
Known issues (1)
- 🟠 Medium — Dashboard component JSON is parsed unguarded
How it works
The category: 'home' dashboard is what the desktop renders, so this screen indirectly configures the landing page. Custom panels are authored as raw JSON: components is a JSON.stringify/JSON.parse round-trip in a getter/setter pair and filters is a comma-separated string split on , — powerful but completely unvalidated, so a syntax error in the components JSON throws inside the setter. onPanelChange seeds an empty config (styles, filters, components) when switching to custom, and switchDashboardType clears panel or bimeId depending on the type. Dashboards are attached to staff roles and injected into the navbar from auth.dashboards.
Use cases
Why someone opens this (4)
- Making the data-quality panel the centre’s home dashboard.
- Embedding an external BI dashboard by URL for the owners.
- Building a custom KPI panel from configured components.
- Giving a particular role its own dashboard in the menu.
Path map
flowchart LR F(["Dashboard configuration"]):::feat F --> H1["Home dashboard configured"]:::ok F --> H2["External URL dashboard"]:::ok F -.-> X1["Name, category or panel missing"]:::bad F -.-> X2["URL panel without a URL"]:::bad F -.-> X3["Malformed component JSON"]:::bad F -.-> X4["Unknown panel at render time"]:::bad F -.-> X5["External dashboard missing"]:::bad classDef feat fill:#566066,stroke:#566066,color:#ffffff,font-weight:bold classDef ok fill:#e3f1ea,stroke:#0d6b42,color:#0d4a2e classDef bad fill:#f7e6e2,stroke:#9a2d1c,color:#6e1f13
Happy paths
Home dashboard configured
- User creates a dashboard named e.g. ‘Registration quality’ with category
homeand paneldata-quality.- Roles that should see it are selected.
- It saves and appears in the navbar; the desktop now renders it after login.
External URL dashboard
- Panel is set to
urland the URL is entered inparameters.- Validation requires the URL for this panel type, so a blank is caught.
- The dashboard renders full-bleed with the page header hidden.
Failure paths
Name, category or panel missing
Cause — Any of the three blank.
What happens —
error.dashboard.name.required,error.dashboard.category.required,error.dashboard.panel.required.
URL panel without a URL
Cause —
panel === 'url'andparametersis an empty string.What happens —
error.dashboard.url.required.
Malformed component JSON
Cause — Invalid JSON typed into the components field.
What happens —
JSON.parsethrows inside the setter with no guard — the form breaks rather than showing a validation message. The most fragile input in Configuration.
Unknown panel at render time
Cause — Panel value not in
enums/dashboard-panels.What happens —
isValidDashboardis false on the viewer and nothing renders.
External dashboard missing
Cause — The configured URL is unreachable.
What happens —
dashboard.error.not-found-external-dashboard.
QA checklist
Tick these off while regression-testing this feature. The boxes are plain Markdown, so progress is visible in git diffs.
- ✅ Home dashboard configured
- ✅ External URL dashboard
- ⛔ Name, category or panel missing
- ⛔ URL panel without a URL
- ⛔ Malformed component JSON
- ⛔ Unknown panel at render time
- ⛔ External dashboard missing
Implementation
app/controllers/configuration/dashboards/index.jsapp/controllers/configuration/dashboards/new.jsapp/routes/configuration/dashboards/*.jsapp/models/dashboard.jsapp/models/dashboard-config.jsapp/models/dashboard-component.jsapp/models/dashboard-query.jsapp/enums/dashboard-panels.jsapp/enums/dashboard-categories.jsapp/enums/dashboard-filters.jsapp/abilities/dashboard.js
Translation keys (19)
Key English title.header.configuration.dashboardDashboard configuration menu.navbar.configuration.dashboardsDashboards dashboards.newNew dashboard dashboard.nameName dashboard.categoryCategory dashboard.panelPanel dashboard.typeType dashboard.internalInternal dashboard.external-urlExternal URL dashboard.data-qualityData quality dashboard.customCustom dashboard.category.generalGeneral dashboard.category.homeHome dashboard.category.trafficTraffic error.dashboard.name.requiredName is required error.dashboard.category.requiredCategory is required error.dashboard.panel.requiredDashboard panel is required error.dashboard.url.requiredURL is required dashboard.error.not-found-external-dashboardExternal dashboard not found
Related
- Same area — Centre list & export · Centre editor (modules, app config, integrations) · Staff member list, deletion & restore · Staff member editor (levels, scope, API token) · Channels · Extra attributes · Email template preview & test send · Influence zones · Server incidents · Server command runner (CLI) · Accessibility statement · Mobile app configuration · Customer login methods (Google, Facebook) · Third-party integrations & connectors · Social wifi & location services
- Shares data with — Dashboard viewer · Desktop (home dashboard)
- Behind the same module — CRM dashboard panels (overview, channels, demographic) · Dashboard viewer · Data-quality dashboard
Generated from doc/feature-inventory.json · id config-dashboards · commit 276788ca6