mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2026-09-09 18:02:54 +00:00
[ACA-1591] Load extensions from multiple files (#521)
* rework extension service, separate file with config * improve loading, optional entries * simplify config and unify content actions * load and merge multiple files * improve plugin loading, introduce second demo * move demo stuff to a plugin * rework navbar to make it pluggable * code and naming convention cleanup * extension schema * switch off custom navbar group by default * hotfix for facetQueries issue * consolidate files, final renames
This commit is contained in:
@@ -0,0 +1,300 @@
|
||||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"$id": "https://github.com/Alfresco/alfresco-content-app/blob/development/extension.schema.json",
|
||||
"title": "ACA Extension Schema",
|
||||
"description": "Provides a validation schema for ACA extensions",
|
||||
|
||||
"definitions": {
|
||||
"ruleRef": {
|
||||
"type": "object",
|
||||
"required": ["id", "type"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"description": "Unique rule definition id",
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"description": "Rule evaluator type",
|
||||
"type": "string"
|
||||
},
|
||||
"parameters": {
|
||||
"description": "Rule evaluator parameters",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/ruleParameter" },
|
||||
"minItems": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"ruleParameter": {
|
||||
"type": "object",
|
||||
"required": ["type", "value"],
|
||||
"properties": {
|
||||
"type": {
|
||||
"description": "Rule parameter type",
|
||||
"type": "string"
|
||||
},
|
||||
"value": {
|
||||
"description": "Rule parameter value",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"routeRef": {
|
||||
"type": "object",
|
||||
"required": ["id", "path", "component"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"description": "Unique route reference identifier.",
|
||||
"type": "string"
|
||||
},
|
||||
"path": {
|
||||
"description": "Route path to register.",
|
||||
"type": "string"
|
||||
},
|
||||
"component": {
|
||||
"description": "Unique identifier for the Component to use with the route.",
|
||||
"type": "string"
|
||||
},
|
||||
"layout": {
|
||||
"description": "Unique identifier for the custom layout component to use.",
|
||||
"type": "string"
|
||||
},
|
||||
"auth": {
|
||||
"description": "List of the authentication guards to use with the route.",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"minLength": 1,
|
||||
"uniqueItems": true
|
||||
},
|
||||
"data": {
|
||||
"description": "Custom data to pass to the activated route so that your components can access it",
|
||||
"type": "object"
|
||||
}
|
||||
}
|
||||
},
|
||||
"actionRef": {
|
||||
"type": "object",
|
||||
"required": ["id", "type"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"description": "Unique action identifier",
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"description": "Action type",
|
||||
"type": "string"
|
||||
},
|
||||
"payload": {
|
||||
"description": "Action payload value (string or expression)",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"contentActionRef": {
|
||||
"type": "object",
|
||||
"required": ["id", "type"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"description": "Unique action identifier.",
|
||||
"type": "string"
|
||||
},
|
||||
"type": {
|
||||
"description": "Element type",
|
||||
"type": "string",
|
||||
"enum": ["default", "button", "separator", "menu"]
|
||||
},
|
||||
"title": {
|
||||
"description": "Element title",
|
||||
"type": "string"
|
||||
},
|
||||
"order": {
|
||||
"description": "Element order",
|
||||
"type": "number"
|
||||
},
|
||||
"icon": {
|
||||
"description": "Element icon",
|
||||
"type": "string"
|
||||
},
|
||||
"disabled": {
|
||||
"description": "Toggles disabled state",
|
||||
"type": "boolean"
|
||||
},
|
||||
"children": {
|
||||
"description": "Child entries for the container types.",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/contentActionRef" },
|
||||
"minItems": 1
|
||||
},
|
||||
"actions": {
|
||||
"description": "Element actions",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"click": {
|
||||
"description": "Action reference for the click handler",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
},
|
||||
"rules": {
|
||||
"description": "Element rules",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"enabled": {
|
||||
"description": "Rule to evaluate the enabled state",
|
||||
"type": "string"
|
||||
},
|
||||
"visible": {
|
||||
"description": "Rule to evaluate the visibility state",
|
||||
"type": "string"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"navBarLinkRef": {
|
||||
"type": "object",
|
||||
"required": ["id", "icon", "title", "route"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"description": "Unique identifier",
|
||||
"type": "string"
|
||||
},
|
||||
"icon": {
|
||||
"description": "Element icon",
|
||||
"type": "string"
|
||||
},
|
||||
"title": {
|
||||
"description": "Element title",
|
||||
"type": "string"
|
||||
},
|
||||
"route": {
|
||||
"description": "Route reference identifier",
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"description": "Element description or tooltip",
|
||||
"type": "string"
|
||||
},
|
||||
"order": {
|
||||
"description": "Element order",
|
||||
"type": "number"
|
||||
},
|
||||
"disabled": {
|
||||
"description": "Toggles the disabled state",
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
},
|
||||
"navBarGroupRef": {
|
||||
"type": "object",
|
||||
"required": ["id", "items"],
|
||||
"properties": {
|
||||
"id": {
|
||||
"description": "Unique identifier for the navigation group",
|
||||
"type": "string"
|
||||
},
|
||||
"items": {
|
||||
"description": "Navigation group items",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/navBarLinkRef" },
|
||||
"minItems": 1
|
||||
},
|
||||
"order": {
|
||||
"description": "Group order",
|
||||
"type": "number"
|
||||
},
|
||||
"disabled": {
|
||||
"description": "Toggles the disabled state",
|
||||
"type": "boolean"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
"type": "object",
|
||||
"required": ["name", "version"],
|
||||
"properties": {
|
||||
"name": {
|
||||
"description": "Extension name",
|
||||
"type": "string"
|
||||
},
|
||||
"version": {
|
||||
"description": "Extension version",
|
||||
"type": "string"
|
||||
},
|
||||
"description": {
|
||||
"description": "Brief description on what the extension does"
|
||||
},
|
||||
"references": {
|
||||
"description": "References to external files",
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "string"
|
||||
},
|
||||
"minItems": 1,
|
||||
"uniqueItems": true
|
||||
},
|
||||
"rules": {
|
||||
"description": "List of rule definitions",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/ruleRef" },
|
||||
"minItems": 1
|
||||
},
|
||||
"routes": {
|
||||
"description": "List of custom application routes",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/routeRef" },
|
||||
"minItems": 1
|
||||
},
|
||||
"actions": {
|
||||
"description": "List of action definitions",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/actionRef" },
|
||||
"minItems": 1
|
||||
},
|
||||
"features": {
|
||||
"description": "Application-specific features and extensions",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"create": {
|
||||
"description": "The [New] menu component extensions",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/contentActionRef" },
|
||||
"minItems": 1
|
||||
},
|
||||
"viewer": {
|
||||
"description": "Viewer component extensions",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"openWith": {
|
||||
"description": "The [Open With] menu extensions",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/contentActionRef" },
|
||||
"minItems": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"navbar": {
|
||||
"description": "Navigation bar extensions",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/navBarGroupRef" },
|
||||
"minItems": 1
|
||||
},
|
||||
"content": {
|
||||
"description": "Main application content extensions",
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"actions": {
|
||||
"description": "Content actions (toolbar, context menus, etc.)",
|
||||
"type": "array",
|
||||
"items": { "$ref": "#/definitions/contentActionRef" },
|
||||
"minItems": 1
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user