[ACA-1550] Metadata Card configuration from an extension plugin (#668)

* [ACA-1550] use local component for metadata

* [ACA-1550] get component local for metadata properties

* [ACA-1550] test metadata-plugin

* [ACA-1550] overwrite content-metadata settings from app.config.json

* [ACA-1550] fix and remove test content

* [ACA-1550] have the app default metadata config in the app.extensions.json

* [ACA-1550] there can be only one presets for content-metadata

* [ACA-1550] filter disabled

* [ACA-1550] rebase fixes

* [ACA-1550] prettier fix

* [ACA-1550] unit test

* [ACA-1550] manage app config directly from the App Extension Service
This commit is contained in:
Suzana Dirla
2018-09-27 18:32:03 +03:00
committed by Denys Vuika
parent 457fa74048
commit 6e9109930b
5 changed files with 301 additions and 3 deletions

View File

@@ -540,6 +540,35 @@ describe('AppExtensionService', () => {
expect(items.length).toBe(1);
expect(items[0].id).toBe(2);
});
it('should filter out all disabled items', () => {
const items = [
{ id: '1', disabled: true },
{
id: '2',
someItems: [
{ id: '21', disabled: true },
{ id: '22', disabled: false },
{ id: '23' }
],
someObjectProp: {
innerItems: [{ id: '24' }, { id: '25', disabled: true }]
}
},
{ id: 3, disabled: true }
];
const result = service.filterDisabled(items);
expect(result.length).toBe(1);
expect(result[0].id).toBe('2');
expect(result[0].someItems.length).toBe(2);
expect(result[0].someItems[0].id).toBe('22');
expect(result[0].someItems[1].id).toBe('23');
expect(result[0].someObjectProp).not.toBeNull();
expect(result[0].someObjectProp.innerItems.length).toBe(1);
expect(result[0].someObjectProp.innerItems[0].id).toBe('24');
});
});
it('should reduce duplicate separators', () => {

View File

@@ -46,8 +46,10 @@ import {
reduceSeparators,
reduceEmptyMenus,
ExtensionService,
ProfileState
ProfileState,
mergeObjects
} from '@alfresco/adf-extensions';
import { AppConfigService } from '@alfresco/adf-core';
@Injectable({
providedIn: 'root'
@@ -68,6 +70,7 @@ export class AppExtensionService implements RuleContext {
createActions: Array<ContentActionRef> = [];
navbar: Array<NavBarGroupRef> = [];
sidebar: Array<SidebarTabRef> = [];
contentMetadata: any;
selection: SelectionState;
navigation: NavigationState;
@@ -77,7 +80,8 @@ export class AppExtensionService implements RuleContext {
private store: Store<AppStore>,
private loader: ExtensionLoaderService,
private extensions: ExtensionService,
public permissions: NodePermissionService
public permissions: NodePermissionService,
private appConfig: AppConfigService
) {
this.store.select(ruleContext).subscribe(result => {
this.selection = result.selection;
@@ -133,6 +137,7 @@ export class AppExtensionService implements RuleContext {
config,
'features.sidebar'
);
this.contentMetadata = this.loadContentMetadata(config);
}
protected loadNavBar(config: ExtensionConfig): Array<NavBarGroupRef> {
@@ -159,6 +164,40 @@ export class AppExtensionService implements RuleContext {
});
}
loadContentMetadata(config: ExtensionConfig): any {
const elements = this.loader.getElements<any>(
config,
'features.content-metadata-presets'
);
let presets = {};
presets = this.filterDisabled(mergeObjects(presets, ...elements));
try {
this.appConfig.config['content-metadata'] = { presets };
} catch (error) {
console.error(error);
}
return presets;
}
filterDisabled(object) {
if (Array.isArray(object)) {
return object
.filter(item => !item.disabled)
.map(item => this.filterDisabled(item));
} else if (typeof object === 'object') {
if (!object.disabled) {
Object.keys(object).forEach(prop => {
object[prop] = this.filterDisabled(object[prop]);
});
return object;
}
} else {
return object;
}
}
getNavigationGroups(): Array<NavBarGroupRef> {
return this.navbar;
}