support "disabled" rules for Viewer extensions

This commit is contained in:
Denys Vuika 2019-03-20 15:56:54 +00:00
parent 82649955f0
commit dd02a8ddd6
2 changed files with 35 additions and 4 deletions

View File

@ -420,6 +420,22 @@ Every custom component receives the following properties at runtime:
| url | string | File content URL. |
| extension | string | File name extension. |
#### Rules
You can also provide a rule for the `disabled` state.
That allows to provide conditional availability for Viewer extensions based on external factors.
```json
{
"id": "app.viewer.pdf",
"fileExtension": "png",
"component": "app.components.tabs.metadata",
"rules": {
"disabled": "isViewerDisabled"
}
}
```
### Toolbar actions
The default toolbar actions from the ACA viewer can be customized through extensions to be replaced, modified or disabled.

View File

@ -153,10 +153,11 @@ export class AppExtensionService implements AppRuleContext {
config,
'features.viewer.shared.toolbarActions'
);
this.viewerContentExtensions = this.loader.getElements<ViewerExtensionRef>(
config,
'features.viewer.content'
);
this.viewerContentExtensions = this.loader
.getElements<ViewerExtensionRef>(config, 'features.viewer.content')
.filter(ref => !this.isViewerExtensionDisabled(ref));
this.contextMenuActions = this.loader.getContentActions(
config,
'features.contextMenu'
@ -457,6 +458,20 @@ export class AppExtensionService implements AppRuleContext {
return true;
}
isViewerExtensionDisabled(extension: any): boolean {
if (extension) {
if (extension.disabled) {
return true;
}
if (extension.rules && extension.rules.disabled) {
return this.extensions.evaluateRule(extension.rules.disabled, this);
}
}
return false;
}
runActionById(id: string) {
const action = this.extensions.getActionById(id);
if (action) {