ADR-013 Phase 3: generic asset-panels renderer (Path A)
Wires the ADR-010 get_asset_panels hook to a generic frontend renderer so a plugin adds detail-page UI as JSON, no Vue. This is the Path A foundation that lets simple plugins ship UI without a frontend build. - components/PluginAssetPanels.vue + pluginAssetPanels.js: fetches /api/pluginui/asset-panels for an asset, then each panel's data endpoint, and renders by mode: list (title + status badge + meta lines via a field map), keyvalue, table (declared or inferred columns), badge. Pure mapping logic is in the .js module and unit tested (9 specs), same pattern as entryForm.js. - New 'list' render mode with a declarative field map (title/badge/meta), documented on the hook in base.py. - Warranty migrated to it: get_asset_panels now declares a 'list' panel + map that reproduces WarrantyPanel's output (vendor title, status badge with color + label map, servicelevel/ends/tag meta, manage link) with zero warranty-specific frontend code. - MachineDetail swapped from <WarrantyPanel> to <PluginAssetPanels> (pilot); the hero warranty badge is unchanged. Verified end to end: the API serves the list panel + map and the warranty rows; the page renders without error. Rollout of the other 4 detail pages (PCDetail, PrinterDetail, NetworkDeviceDetail, MeasuringToolDetail) and the map-overlays / asset-presentation renderers are follow-up Phase 3 commits. 58 vitest, build clean, 1067 backend pass, naming green.
This commit is contained in:
@@ -83,7 +83,33 @@ class WarrantyPlugin(BasePlugin):
|
||||
'title': 'Warranty',
|
||||
'assettypes': ['*'],
|
||||
'endpoint': '/api/warranty/asset/{assetid}',
|
||||
'render': 'table',
|
||||
'render': 'list',
|
||||
# Field map: the generic renderer builds each list item from the
|
||||
# warranty payload without any warranty-specific frontend code.
|
||||
'map': {
|
||||
'title': 'vendor',
|
||||
'badge': {
|
||||
'label': 'status',
|
||||
'color': 'statuscolor',
|
||||
'labelmap': {
|
||||
'active': 'Active',
|
||||
'expiring': 'Expiring Soon',
|
||||
'expired': 'Expired',
|
||||
'unknown': 'Unknown',
|
||||
},
|
||||
},
|
||||
'meta': [
|
||||
{'key': 'servicelevel'},
|
||||
{'key': 'enddate', 'label': 'Ends', 'format': 'date'},
|
||||
{'key': 'servicetag', 'label': 'Tag', 'mono': True},
|
||||
],
|
||||
},
|
||||
'empty': 'No warranty on record.',
|
||||
'manage': {
|
||||
'to': '/warranties?addfor={assetid}',
|
||||
'label': 'Add / manage',
|
||||
'emptylabel': 'Add one',
|
||||
},
|
||||
'position': 30,
|
||||
},
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user