mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-05-12 17:04:46 +00:00
[ACA-3257] Add actions extension capability to info drawer (#1471)
* info drawer action added * actions added * * improved docs * * added unit test * fixed e2e * * rename actions to toolbar * * minor changes * Update application-features.md Co-authored-by: Eugenio Romano <eromano@users.noreply.github.com>
This commit is contained in:
parent
234b41b917
commit
3b4579c19c
@ -200,6 +200,7 @@ You can provide the following customizations for the Sidebar (aka Info Drawer) c
|
|||||||
- Add extra tabs with custom components
|
- Add extra tabs with custom components
|
||||||
- Disable tabs from the main application or extensions
|
- Disable tabs from the main application or extensions
|
||||||
- Replace content or properties of existing tabs
|
- Replace content or properties of existing tabs
|
||||||
|
- Add toolbar buttons
|
||||||
|
|
||||||
```json
|
```json
|
||||||
{
|
{
|
||||||
@ -208,7 +209,16 @@ You can provide the following customizations for the Sidebar (aka Info Drawer) c
|
|||||||
"$name": "plugin1",
|
"$name": "plugin1",
|
||||||
|
|
||||||
"features": {
|
"features": {
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"toolbar": [
|
||||||
|
{
|
||||||
|
"id": "app.sidebar.close",
|
||||||
|
"order": 100,
|
||||||
|
"title": "close",
|
||||||
|
"icon": "highlight_off"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 100,
|
"order": 100,
|
||||||
@ -223,10 +233,11 @@ You can provide the following customizations for the Sidebar (aka Info Drawer) c
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
The example above renders two tabs:
|
The example above renders two tabs with `close` icon:
|
||||||
|
|
||||||
- `Properties` tab that references the `app.components.tabs.metadata` component
|
- `Properties` tab that references the `app.components.tabs.metadata` component
|
||||||
- `Comments` tab that references the `app.components.tabs.comments` component
|
- `Comments` tab that references the `app.components.tabs.comments` component
|
||||||
|
@ -209,7 +209,8 @@ export interface NavBarLinkRef {
|
|||||||
"$name": "plugin1",
|
"$name": "plugin1",
|
||||||
|
|
||||||
"features": {
|
"features": {
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 100,
|
"order": 100,
|
||||||
@ -224,6 +225,7 @@ export interface NavBarLinkRef {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
@ -903,7 +903,8 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 100,
|
"order": 100,
|
||||||
@ -923,7 +924,8 @@
|
|||||||
"title": "APP.INFO_DRAWER.TABS.VERSIONS",
|
"title": "APP.INFO_DRAWER.TABS.VERSIONS",
|
||||||
"component": "app.components.tabs.versions"
|
"component": "app.components.tabs.versions"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
|
},
|
||||||
"content-metadata-presets": [
|
"content-metadata-presets": [
|
||||||
{
|
{
|
||||||
"id": "app.content.metadata.custom",
|
"id": "app.content.metadata.custom",
|
||||||
|
@ -821,7 +821,8 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 100,
|
"order": 100,
|
||||||
@ -841,7 +842,8 @@
|
|||||||
"title": "APP.INFO_DRAWER.TABS.VERSIONS",
|
"title": "APP.INFO_DRAWER.TABS.VERSIONS",
|
||||||
"component": "app.components.tabs.versions"
|
"component": "app.components.tabs.versions"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
|
},
|
||||||
"content-metadata-presets": [
|
"content-metadata-presets": [
|
||||||
{
|
{
|
||||||
"id": "app.content.metadata.custom",
|
"id": "app.content.metadata.custom",
|
||||||
|
@ -806,7 +806,8 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 100,
|
"order": 100,
|
||||||
@ -829,3 +830,4 @@
|
|||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -842,7 +842,8 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 100,
|
"order": 100,
|
||||||
@ -862,7 +863,8 @@
|
|||||||
"title": "APP.INFO_DRAWER.TABS.VERSIONS",
|
"title": "APP.INFO_DRAWER.TABS.VERSIONS",
|
||||||
"component": "app.components.tabs.versions"
|
"component": "app.components.tabs.versions"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
|
},
|
||||||
"content-metadata-presets": [
|
"content-metadata-presets": [
|
||||||
{
|
{
|
||||||
"id": "app.content.metadata.custom",
|
"id": "app.content.metadata.custom",
|
||||||
|
@ -1220,7 +1220,8 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 1,
|
"order": 1,
|
||||||
@ -1247,7 +1248,8 @@
|
|||||||
"title": "APP.INFO_DRAWER.TABS.COMMENTS",
|
"title": "APP.INFO_DRAWER.TABS.COMMENTS",
|
||||||
"component": "app.components.tabs.comments"
|
"component": "app.components.tabs.comments"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
|
},
|
||||||
"content-metadata-presets": [
|
"content-metadata-presets": [
|
||||||
{
|
{
|
||||||
"id": "app.content.metadata.custom",
|
"id": "app.content.metadata.custom",
|
||||||
|
@ -841,7 +841,8 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 100,
|
"order": 100,
|
||||||
@ -861,7 +862,8 @@
|
|||||||
"title": "APP.INFO_DRAWER.TABS.VERSIONS",
|
"title": "APP.INFO_DRAWER.TABS.VERSIONS",
|
||||||
"component": "app.components.tabs.versions"
|
"component": "app.components.tabs.versions"
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
|
},
|
||||||
"content-metadata-presets": [
|
"content-metadata-presets": [
|
||||||
{
|
{
|
||||||
"id": "app.content.metadata.custom",
|
"id": "app.content.metadata.custom",
|
||||||
|
@ -1244,7 +1244,8 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 100,
|
"order": 100,
|
||||||
@ -1282,7 +1283,8 @@
|
|||||||
"visible": "app.libraries.toolbar"
|
"visible": "app.libraries.toolbar"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
|
},
|
||||||
"content-metadata-presets": [
|
"content-metadata-presets": [
|
||||||
{
|
{
|
||||||
"id": "app.content.metadata.custom",
|
"id": "app.content.metadata.custom",
|
||||||
|
@ -803,9 +803,20 @@
|
|||||||
},
|
},
|
||||||
"sidebar": {
|
"sidebar": {
|
||||||
"description": "Sidebar extensions",
|
"description": "Sidebar extensions",
|
||||||
|
"type": "object",
|
||||||
|
"properties": {
|
||||||
|
"toolbar": {
|
||||||
|
"description": "Toolbar entries",
|
||||||
|
"type": "array",
|
||||||
|
"items": { "$ref": "#/definitions/contentActionRef" }
|
||||||
|
},
|
||||||
|
"tabs": {
|
||||||
|
"description": "Tabs entries",
|
||||||
"type": "array",
|
"type": "array",
|
||||||
"items": { "$ref": "#/definitions/sidebarTabRef" },
|
"items": { "$ref": "#/definitions/sidebarTabRef" },
|
||||||
"minItems": 1
|
"minItems": 1
|
||||||
|
}
|
||||||
|
}
|
||||||
},
|
},
|
||||||
"toolbar": {
|
"toolbar": {
|
||||||
"description": "Toolbar entries",
|
"description": "Toolbar entries",
|
||||||
|
@ -7,6 +7,12 @@
|
|||||||
cdkTrapFocus
|
cdkTrapFocus
|
||||||
cdkTrapFocusAutoCapture
|
cdkTrapFocusAutoCapture
|
||||||
>
|
>
|
||||||
|
<adf-toolbar class="adf-toolbar--inline" info-drawer-buttons>
|
||||||
|
<ng-container *ngFor="let entry of actions; trackBy: trackByActionId">
|
||||||
|
<aca-toolbar-action [actionRef]="entry"></aca-toolbar-action>
|
||||||
|
</ng-container>
|
||||||
|
</adf-toolbar>
|
||||||
|
|
||||||
<adf-info-drawer-tab
|
<adf-info-drawer-tab
|
||||||
*ngFor="let tab of tabs"
|
*ngFor="let tab of tabs"
|
||||||
[icon]="tab.icon"
|
[icon]="tab.icon"
|
||||||
|
@ -22,18 +22,20 @@
|
|||||||
* You should have received a copy of the GNU Lesser General Public License
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
import { ContentActionRef } from '@alfresco/adf-extensions';
|
||||||
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
import { NO_ERRORS_SCHEMA } from '@angular/core';
|
||||||
import { InfoDrawerComponent } from './info-drawer.component';
|
import { async, ComponentFixture, TestBed } from '@angular/core/testing';
|
||||||
import { TestBed, ComponentFixture, async } from '@angular/core/testing';
|
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import {
|
import {
|
||||||
SetInfoDrawerStateAction,
|
SetInfoDrawerStateAction,
|
||||||
ToggleInfoDrawerAction
|
ToggleInfoDrawerAction
|
||||||
} from '@alfresco/aca-shared/store';
|
} from '@alfresco/aca-shared/store';
|
||||||
|
import { of, Subject } from 'rxjs';
|
||||||
|
import { InfoDrawerComponent } from './info-drawer.component';
|
||||||
import { LibTestingModule } from '../../testing/lib-testing-module';
|
import { LibTestingModule } from '../../testing/lib-testing-module';
|
||||||
import { AppExtensionService } from '../../services/app.extension.service';
|
import { AppExtensionService } from '../../services/app.extension.service';
|
||||||
import { ContentApiService } from '../../services/content-api.service';
|
import { ContentApiService } from '../../services/content-api.service';
|
||||||
import { of } from 'rxjs';
|
import { SharedToolbarModule } from '../tool-bar/shared-toolbar.module';
|
||||||
|
|
||||||
describe('InfoDrawerComponent', () => {
|
describe('InfoDrawerComponent', () => {
|
||||||
let fixture: ComponentFixture<InfoDrawerComponent>;
|
let fixture: ComponentFixture<InfoDrawerComponent>;
|
||||||
@ -41,16 +43,26 @@ describe('InfoDrawerComponent', () => {
|
|||||||
let contentApiService: ContentApiService;
|
let contentApiService: ContentApiService;
|
||||||
let tab;
|
let tab;
|
||||||
let appExtensionService: AppExtensionService;
|
let appExtensionService: AppExtensionService;
|
||||||
|
const mockStream = new Subject();
|
||||||
const storeMock = {
|
const storeMock = {
|
||||||
dispatch: jasmine.createSpy('dispatch')
|
dispatch: jasmine.createSpy('dispatch'),
|
||||||
|
select: () => mockStream
|
||||||
};
|
};
|
||||||
const extensionServiceMock = {
|
const extensionServiceMock = {
|
||||||
getSidebarTabs: () => {}
|
getSidebarTabs: () => {},
|
||||||
|
getAllowedSidebarActions: () => [
|
||||||
|
{
|
||||||
|
id: 'app.sidebar.close',
|
||||||
|
order: 100,
|
||||||
|
title: 'close',
|
||||||
|
icon: 'highlight_off'
|
||||||
|
}
|
||||||
|
]
|
||||||
};
|
};
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
TestBed.configureTestingModule({
|
TestBed.configureTestingModule({
|
||||||
imports: [LibTestingModule],
|
imports: [LibTestingModule, SharedToolbarModule],
|
||||||
declarations: [InfoDrawerComponent],
|
declarations: [InfoDrawerComponent],
|
||||||
providers: [
|
providers: [
|
||||||
ContentApiService,
|
ContentApiService,
|
||||||
@ -166,4 +178,17 @@ describe('InfoDrawerComponent', () => {
|
|||||||
new ToggleInfoDrawerAction()
|
new ToggleInfoDrawerAction()
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should show the icons from extension', () => {
|
||||||
|
fixture.detectChanges();
|
||||||
|
mockStream.next();
|
||||||
|
expect(component.actions).toEqual([
|
||||||
|
{
|
||||||
|
id: 'app.sidebar.close',
|
||||||
|
order: 100,
|
||||||
|
title: 'close',
|
||||||
|
icon: 'highlight_off'
|
||||||
|
} as ContentActionRef
|
||||||
|
]);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -36,14 +36,17 @@ import {
|
|||||||
MinimalNodeEntryEntity,
|
MinimalNodeEntryEntity,
|
||||||
SiteEntry
|
SiteEntry
|
||||||
} from '@alfresco/js-api';
|
} from '@alfresco/js-api';
|
||||||
import { SidebarTabRef } from '@alfresco/adf-extensions';
|
import { ContentActionRef, SidebarTabRef } from '@alfresco/adf-extensions';
|
||||||
import { Store } from '@ngrx/store';
|
import { Store } from '@ngrx/store';
|
||||||
import {
|
import {
|
||||||
|
getAppSelection,
|
||||||
SetInfoDrawerStateAction,
|
SetInfoDrawerStateAction,
|
||||||
ToggleInfoDrawerAction
|
ToggleInfoDrawerAction
|
||||||
} from '@alfresco/aca-shared/store';
|
} from '@alfresco/aca-shared/store';
|
||||||
import { AppExtensionService } from '../../services/app.extension.service';
|
import { AppExtensionService } from '../../services/app.extension.service';
|
||||||
import { ContentApiService } from '../../services/content-api.service';
|
import { ContentApiService } from '../../services/content-api.service';
|
||||||
|
import { takeUntil } from 'rxjs/operators';
|
||||||
|
import { Subject } from 'rxjs';
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
selector: 'aca-info-drawer',
|
selector: 'aca-info-drawer',
|
||||||
@ -58,6 +61,8 @@ export class InfoDrawerComponent implements OnChanges, OnInit, OnDestroy {
|
|||||||
isLoading = false;
|
isLoading = false;
|
||||||
displayNode: MinimalNodeEntryEntity | SiteEntry;
|
displayNode: MinimalNodeEntryEntity | SiteEntry;
|
||||||
tabs: Array<SidebarTabRef> = [];
|
tabs: Array<SidebarTabRef> = [];
|
||||||
|
actions: Array<ContentActionRef> = [];
|
||||||
|
onDestroy$ = new Subject<boolean>();
|
||||||
|
|
||||||
@HostListener('keydown.escape')
|
@HostListener('keydown.escape')
|
||||||
onEscapeKeyboardEvent(): void {
|
onEscapeKeyboardEvent(): void {
|
||||||
@ -72,9 +77,17 @@ export class InfoDrawerComponent implements OnChanges, OnInit, OnDestroy {
|
|||||||
|
|
||||||
ngOnInit() {
|
ngOnInit() {
|
||||||
this.tabs = this.extensions.getSidebarTabs();
|
this.tabs = this.extensions.getSidebarTabs();
|
||||||
|
this.store
|
||||||
|
.select(getAppSelection)
|
||||||
|
.pipe(takeUntil(this.onDestroy$))
|
||||||
|
.subscribe(() => {
|
||||||
|
this.actions = this.extensions.getAllowedSidebarActions();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
ngOnDestroy() {
|
ngOnDestroy() {
|
||||||
|
this.onDestroy$.next(true);
|
||||||
|
this.onDestroy$.complete();
|
||||||
this.store.dispatch(new SetInfoDrawerStateAction(false));
|
this.store.dispatch(new SetInfoDrawerStateAction(false));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -91,6 +104,10 @@ export class InfoDrawerComponent implements OnChanges, OnInit, OnDestroy {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
trackByActionId(_: number, action: ContentActionRef) {
|
||||||
|
return action.id;
|
||||||
|
}
|
||||||
|
|
||||||
private close() {
|
private close() {
|
||||||
this.store.dispatch(new ToggleInfoDrawerAction());
|
this.store.dispatch(new ToggleInfoDrawerAction());
|
||||||
}
|
}
|
||||||
|
@ -26,16 +26,19 @@
|
|||||||
import { NgModule } from '@angular/core';
|
import { NgModule } from '@angular/core';
|
||||||
import { CommonModule } from '@angular/common';
|
import { CommonModule } from '@angular/common';
|
||||||
import { InfoDrawerComponent } from './info-drawer.component';
|
import { InfoDrawerComponent } from './info-drawer.component';
|
||||||
import { InfoDrawerModule } from '@alfresco/adf-core';
|
import { InfoDrawerModule, ToolbarModule } from '@alfresco/adf-core';
|
||||||
import { ExtensionsModule } from '@alfresco/adf-extensions';
|
import { ExtensionsModule } from '@alfresco/adf-extensions';
|
||||||
import { MatProgressBarModule } from '@angular/material';
|
import { MatProgressBarModule } from '@angular/material';
|
||||||
|
import { SharedToolbarModule } from '../tool-bar/shared-toolbar.module';
|
||||||
|
|
||||||
@NgModule({
|
@NgModule({
|
||||||
imports: [
|
imports: [
|
||||||
CommonModule,
|
CommonModule,
|
||||||
InfoDrawerModule,
|
InfoDrawerModule,
|
||||||
MatProgressBarModule,
|
MatProgressBarModule,
|
||||||
ExtensionsModule
|
ExtensionsModule,
|
||||||
|
ToolbarModule,
|
||||||
|
SharedToolbarModule
|
||||||
],
|
],
|
||||||
declarations: [InfoDrawerComponent],
|
declarations: [InfoDrawerComponent],
|
||||||
exports: [InfoDrawerComponent]
|
exports: [InfoDrawerComponent]
|
||||||
|
@ -83,7 +83,8 @@ export class AppExtensionService implements RuleContext {
|
|||||||
openWithActions: Array<ContentActionRef> = [];
|
openWithActions: Array<ContentActionRef> = [];
|
||||||
createActions: Array<ContentActionRef> = [];
|
createActions: Array<ContentActionRef> = [];
|
||||||
navbar: Array<NavBarGroupRef> = [];
|
navbar: Array<NavBarGroupRef> = [];
|
||||||
sidebar: Array<SidebarTabRef> = [];
|
sidebarTabs: Array<SidebarTabRef> = [];
|
||||||
|
sidebarActions: Array<ContentActionRef> = [];
|
||||||
contentMetadata: any;
|
contentMetadata: any;
|
||||||
viewerRules: ViewerRules = {};
|
viewerRules: ViewerRules = {};
|
||||||
userActions: Array<ContentActionRef> = [];
|
userActions: Array<ContentActionRef> = [];
|
||||||
@ -163,6 +164,10 @@ export class AppExtensionService implements RuleContext {
|
|||||||
config,
|
config,
|
||||||
'features.header'
|
'features.header'
|
||||||
);
|
);
|
||||||
|
this.sidebarActions = this.loader.getContentActions(
|
||||||
|
config,
|
||||||
|
'features.sidebar.toolbar'
|
||||||
|
);
|
||||||
this.toolbarActions = this.loader.getContentActions(
|
this.toolbarActions = this.loader.getContentActions(
|
||||||
config,
|
config,
|
||||||
'features.toolbar'
|
'features.toolbar'
|
||||||
@ -189,9 +194,9 @@ export class AppExtensionService implements RuleContext {
|
|||||||
'features.create'
|
'features.create'
|
||||||
);
|
);
|
||||||
this.navbar = this.loadNavBar(config);
|
this.navbar = this.loadNavBar(config);
|
||||||
this.sidebar = this.loader.getElements<SidebarTabRef>(
|
this.sidebarTabs = this.loader.getElements<SidebarTabRef>(
|
||||||
config,
|
config,
|
||||||
'features.sidebar'
|
'features.sidebar.tabs'
|
||||||
);
|
);
|
||||||
this.userActions = this.loader.getContentActions(
|
this.userActions = this.loader.getContentActions(
|
||||||
config,
|
config,
|
||||||
@ -382,7 +387,7 @@ export class AppExtensionService implements RuleContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getSidebarTabs(): Array<SidebarTabRef> {
|
getSidebarTabs(): Array<SidebarTabRef> {
|
||||||
return this.sidebar.filter(action => this.filterVisible(action));
|
return this.sidebarTabs.filter(action => this.filterVisible(action));
|
||||||
}
|
}
|
||||||
|
|
||||||
getComponentById(id: string): Type<{}> {
|
getComponentById(id: string): Type<{}> {
|
||||||
@ -486,6 +491,10 @@ export class AppExtensionService implements RuleContext {
|
|||||||
.reduce(reduceSeparators, []);
|
.reduce(reduceSeparators, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
getAllowedSidebarActions(): Array<ContentActionRef> {
|
||||||
|
return this.getAllowedActions(this.sidebarActions);
|
||||||
|
}
|
||||||
|
|
||||||
getAllowedToolbarActions(): Array<ContentActionRef> {
|
getAllowedToolbarActions(): Array<ContentActionRef> {
|
||||||
return this.getAllowedActions(this.toolbarActions);
|
return this.getAllowedActions(this.toolbarActions);
|
||||||
}
|
}
|
||||||
|
@ -1007,7 +1007,8 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"sidebar": [
|
"sidebar": {
|
||||||
|
"tabs": [
|
||||||
{
|
{
|
||||||
"id": "app.sidebar.properties",
|
"id": "app.sidebar.properties",
|
||||||
"order": 100,
|
"order": 100,
|
||||||
@ -1045,7 +1046,8 @@
|
|||||||
"visible": "app.selection.library"
|
"visible": "app.selection.library"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
]
|
||||||
|
},
|
||||||
"content-metadata-presets": [
|
"content-metadata-presets": [
|
||||||
{
|
{
|
||||||
"id": "app.content.metadata.custom",
|
"id": "app.content.metadata.custom",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user