mirror of
https://github.com/Alfresco/alfresco-content-app.git
synced 2025-07-31 17:38:28 +00:00
[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:
committed by
Denys Vuika
parent
457fa74048
commit
6e9109930b
@@ -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', () => {
|
||||
|
@@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user