mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-07-31 17:38:48 +00:00
[ADF-2232] Content metadata layout oriented configuration (#2918)
* Small refactoring I. * Small refactoring II. * On the way of implementing the soultion * Refactoring aspect to groups and supporting different type of configs * Fixed linter errors * Fix debug project runner * Fix linting errors * Fix and align tests * Config factory tests * Layout oriented config parser * Adding layout oriented config to the config factory * Update config schema * Layout oriented config * Aspect oriented and indifferent configs alignment to the new propertyGroups structure * Remove dead codes * Fixinfinite loading error and custom type properties * Add documentation * Fix tests
This commit is contained in:
committed by
Eugenio Romano
parent
a863631f0d
commit
c109b9f6f3
@@ -0,0 +1,65 @@
|
||||
/*!
|
||||
* @license
|
||||
* Copyright 2016 Alfresco Software, Ltd.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
import { Injectable } from '@angular/core';
|
||||
import { ContentMetadataConfig, AspectOrientedConfig, OrganisedPropertyGroup, PropertyGroupContainer } from '../../interfaces/content-metadata.interfaces';
|
||||
import { getGroup, getProperty } from './property-group-reader';
|
||||
|
||||
@Injectable()
|
||||
export class AspectOrientedConfigService implements ContentMetadataConfig {
|
||||
|
||||
constructor(private config: AspectOrientedConfig) {}
|
||||
|
||||
public isGroupAllowed(groupName: string): boolean {
|
||||
const groupNames = Object.keys(this.config);
|
||||
return groupNames.indexOf(groupName) !== -1;
|
||||
}
|
||||
|
||||
public reorganiseByConfig(propertyGroups: PropertyGroupContainer): OrganisedPropertyGroup[] {
|
||||
const aspects = this.config,
|
||||
aspectNames = Object.keys(aspects);
|
||||
|
||||
return aspectNames
|
||||
.reduce((groupAccumulator, aspectName) => {
|
||||
const newGroup = this.getOrganisedPropertyGroup(propertyGroups, aspectName);
|
||||
return groupAccumulator.concat(newGroup);
|
||||
}, [])
|
||||
.filter(organisedPropertyGroup => organisedPropertyGroup.properties.length > 0);
|
||||
}
|
||||
|
||||
private getOrganisedPropertyGroup(propertyGroups, aspectName) {
|
||||
const group = getGroup(propertyGroups, aspectName);
|
||||
let newGroup = [];
|
||||
|
||||
if (group) {
|
||||
const aspectProperties = this.config[aspectName];
|
||||
let properties;
|
||||
|
||||
if (aspectProperties === '*') {
|
||||
properties = getProperty(propertyGroups, aspectName, aspectProperties);
|
||||
} else {
|
||||
properties = (<string[]> aspectProperties)
|
||||
.map((propertyName) => getProperty(propertyGroups, aspectName, propertyName))
|
||||
.filter(props => props !== undefined);
|
||||
}
|
||||
|
||||
newGroup = [ { title: group.title, properties } ];
|
||||
}
|
||||
|
||||
return newGroup;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user