@alfresco/adf-content-services
Version:
Alfresco ADF content services
106 lines • 14.8 kB
JavaScript
/*!
* @license
* Copyright © 2005-2025 Hyland Software, Inc. and its affiliates. All rights reserved.
*
* 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 { getGroup, getProperty } from './property-group-reader';
export class AspectOrientedConfigService {
constructor(config) {
this.config = config;
}
isGroupAllowed(groupName) {
if (this.isIncludeAllEnabled()) {
return true;
}
const groupNames = Object.keys(this.config);
return groupNames.indexOf(groupName) !== -1;
}
reorganiseByConfig(propertyGroups) {
const aspects = this.config;
const 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);
}
appendAllPreset(propertyGroups) {
const groups = Object.keys(propertyGroups).map((groupName) => {
const propertyGroup = propertyGroups[groupName];
const properties = propertyGroup.properties;
if (this.isAspectReadOnly(groupName)) {
Object.keys(properties).map((propertyName) => this.setReadOnlyProperty(properties[propertyName]));
}
return Object.assign({}, propertyGroup, {
properties: Object.keys(properties).map((propertyName) => {
if (this.isPropertyReadOnly(propertyName)) {
this.setReadOnlyProperty(properties[propertyName]);
}
return properties[propertyName];
})
});
});
return groups;
}
setReadOnlyProperty(property) {
property.editable = false;
}
isPropertyReadOnly(propertyName) {
const readOnlyAspects = this.config.readOnlyProperties;
if (Array.isArray(readOnlyAspects)) {
return readOnlyAspects.includes(propertyName);
}
else {
return readOnlyAspects === propertyName;
}
}
isAspectReadOnly(propertyGroupName) {
const readOnlyAspects = this.config.readOnlyAspects;
if (Array.isArray(readOnlyAspects)) {
return readOnlyAspects.includes(propertyGroupName);
}
else {
return readOnlyAspects === propertyGroupName;
}
}
filterExcludedPreset(propertyGroups) {
if (this.config.exclude) {
return propertyGroups.filter((preset) => !this.config.exclude.includes(preset.name));
}
return propertyGroups;
}
isIncludeAllEnabled() {
return this.config.includeAll;
}
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 = aspectProperties
.map((propertyName) => getProperty(propertyGroups, aspectName, propertyName))
.filter((props) => props !== undefined);
}
newGroup = [{ title: group.title, properties }];
}
return newGroup;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNwZWN0LW9yaWVudGVkLWNvbmZpZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGliL2NvbnRlbnQtc2VydmljZXMvc3JjL2xpYi9jb250ZW50LW1ldGFkYXRhL3NlcnZpY2VzL2NvbmZpZy9hc3BlY3Qtb3JpZW50ZWQtY29uZmlnLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBR0gsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVoRSxNQUFNLE9BQU8sMkJBQTJCO0lBQ3BDLFlBQW9CLE1BQVc7UUFBWCxXQUFNLEdBQU4sTUFBTSxDQUFLO0lBQUcsQ0FBQztJQUU1QixjQUFjLENBQUMsU0FBaUI7UUFDbkMsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsRUFBRSxDQUFDO1lBQzdCLE9BQU8sSUFBSSxDQUFDO1FBQ2hCLENBQUM7UUFDRCxNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM1QyxPQUFPLFVBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7SUFDaEQsQ0FBQztJQUVNLGtCQUFrQixDQUFDLGNBQXNDO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7UUFDNUIsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6QyxPQUFPLFdBQVc7YUFDYixNQUFNLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxVQUFVLEVBQUUsRUFBRTtZQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMseUJBQXlCLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1lBQzVFLE9BQU8sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFFB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QUUsVUFBVTtRQUN4RCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsY0FBYyxFQUFFLFVBQVUsQ0FBQyxDQUFDO1FBQ25ELElBQUksUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVsQixJQUFJLEtBQUssRUFBRSxDQUFDO1lBQ1IsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ2pELElBQUksVUFBVSxDQUFDO1lBRWYsSUFBSSxnQkFBZ0IsS0FBSyxHQUFHLEVBQUUsQ0FBQztnQkFDM0IsVUFBVSxHQUFHLFdBQVcsQ0FBQyxjQUFjLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixDQUFDLENBQUM7WUFDM0UsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLFVBQVUsR0FBRyxnQkFBZ0I7cUJBQ3hCLEdBQUcsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxVQUFVLEVBQUUsWUFBWSxDQUFDLENBQUM7cUJBQzVFLE1BQU0sQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ2hELENBQUM7WUFFRCxRQUFRLEdBQUcsQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUM7UUFDcEQsQ0FBQztRQUVELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuaW1wb3J0IHsgQ29udGVudE1ldGFkYXRhQ29uZmlnLCBPcmdhbmlzZWRQcm9wZXJ0eUdyb3VwLCBQcm9wZXJ0eUdyb3VwQ29udGFpbmVyLCBQcm9wZXJ0eSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvY29udGVudC1tZXRhZGF0YS5pbnRlcmZhY2VzJztcbmltcG9ydCB7IGdldEdyb3VwLCBnZXRQcm9wZXJ0eSB9IGZyb20gJy4vcHJvcGVydHktZ3JvdXAtcmVhZGVyJztcblxuZXhwb3J0IGNsYXNzIEFzcGVjdE9yaWVudGVkQ29uZmlnU2VydmljZSBpbXBsZW1lbnRzIENvbnRlbnRNZXRhZGF0YUNvbmZpZyB7XG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBjb25maWc6IGFueSkge31cblxuICAgIHB1YmxpYyBpc0dyb3VwQWxsb3dlZChncm91cE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAodGhpcy5pc0luY2x1ZGVBbGxFbmFibGVkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGdyb3VwTmFtZXMgPSBPYmplY3Qua2V5cyh0aGlzLmNvbmZpZyk7XG4gICAgICAgIHJldHVybiBncm91cE5hbWVzLmluZGV4T2YoZ3JvdXBOYW1lKSAhPT0gLTE7XG4gICAgfVxuXG4gICAgcHVibGljIHJlb3JnYW5pc2VCeUNvbmZpZyhwcm9wZXJ0eUdyb3VwczogUHJvcGVydHlHcm91cENvbnRhaW5lcik6IE9yZ2FuaXNlZFByb3BlcnR5R3JvdXBbXSB7XG4gICAgICAgIGNvbnN0IGFzcGVjdHMgPSB0aGlzLmNvbmZpZztcbiAgICAgICAgY29uc3QgYXNwZWN0TmFtZXMgPSBPYmplY3Qua2V5cyhhc3BlY3RzKTtcblxuICAgICAgICByZXR1cm4gYXNwZWN0TmFtZXNcbiAgICAgICAgICAgIC5yZWR1Y2UoKGdyb3VwQWNjdW11bGF0b3IsIGFzcGVjdE5hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdHcm91cCA9IHRoaXMuZ2V0T3JnYW5pc2VkUHJvcGVydHlHcm91cChwcm9wZXJ0eUdyb3VwcywgYXNwZWN0TmFtZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdyb3VwQWNjdW11bGF0b3IuY29uY2F0KG5ld0dyb3VwKTtcbiAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgLmZpbHRlcigob3JnYW5pc2VkUHJvcGVydHlHcm91cCkgPT4gb3JnYW5pc2VkUHJvcGVydHlHcm91cC5wcm9wZXJ0aWVzLmxlbmd0aCA+IDApO1xuICAgIH1cblxuICAgIHB1YmxpYyBhcHBlbmRBbGxQcmVzZXQocHJvcGVydHlHcm91cHM6IFByb3BlcnR5R3JvdXBDb250YWluZXIpOiBPcmdhbmlzZWRQcm9wZXJ0eUdyb3VwW10ge1xuICAgICAgICBjb25zdCBncm91cHMgPSBPYmplY3Qua2V5cyhwcm9wZXJ0eUdyb3VwcykubWFwKChncm91cE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHByb3BlcnR5R3JvdXAgPSBwcm9wZXJ0eUdyb3Vwc1tncm91cE5hbWVdO1xuICAgICAgICAgICAgY29uc3QgcHJvcGVydGllcyA9IHByb3BlcnR5R3JvdXAucHJvcGVydGllcztcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNBc3BlY3RSZWFkT25seShncm91cE5hbWUpKSB7XG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcGVydGllcykubWFwKChwcm9wZXJ0eU5hbWUpID0+IHRoaXMuc2V0UmVhZE9ubHlQcm9wZXJ0eShwcm9wZXJ0aWVzW3Byb3BlcnR5TmFtZV0pKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHByb3BlcnR5R3JvdXAsIHtcbiAgICAgICAgICAgICAgICBwcm9wZXJ0aWVzOiBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5tYXAoKHByb3BlcnR5TmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc1Byb3BlcnR5UmVhZE9ubHkocHJvcGVydHlOYW1lKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRSZWFkT25seVByb3BlcnR5KHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHByb3BlcnRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBncm91cHM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRSZWFkT25seVByb3BlcnR5KHByb3BlcnR5OiBQcm9wZXJ0eSkge1xuICAgICAgICBwcm9wZXJ0eS5lZGl0YWJsZSA9IGZhbHNlO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNQcm9wZXJ0eVJlYWRPbmx5KHByb3BlcnR5TmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGNvbnN0IHJlYWRPbmx5QXNwZWN0cyA9IHRoaXMuY29uZmlnLnJlYWRPbmx5UHJvcGVydGllcztcblxuICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWFkT25seUFzcGVjdHMpKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZE9ubHlBc3BlY3RzLmluY2x1ZGVzKHByb3BlcnR5TmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZE9ubHlBc3BlY3RzID09PSBwcm9wZXJ0eU5hbWU7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXNwZWN0UmVhZE9ubHkocHJvcGVydHlHcm91cE5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCByZWFkT25seUFzcGVjdHMgPSB0aGlzLmNvbmZpZy5yZWFkT25seUFzcGVjdHM7XG5cbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVhZE9ubHlBc3BlY3RzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRPbmx5QXNwZWN0cy5pbmNsdWRlcyhwcm9wZXJ0eUdyb3VwTmFtZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gcmVhZE9ubHlBc3BlY3RzID09PSBwcm9wZXJ0eUdyb3VwTmFtZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBmaWx0ZXJFeGNsdWRlZFByZXNldChwcm9wZXJ0eUdyb3VwczogT3JnYW5pc2VkUHJvcGVydHlHcm91cFtdKTogT3JnYW5pc2VkUHJvcGVydHlHcm91cFtdIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmV4Y2x1ZGUpIHtcbiAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eUdyb3Vwcy5maWx0ZXIoKHByZXNldCkgPT4gIXRoaXMuY29uZmlnLmV4Y2x1ZGUuaW5jbHVkZXMocHJlc2V0Lm5hbWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcHJvcGVydHlHcm91cHM7XG4gICAgfVxuXG4gICAgcHVibGljIGlzSW5jbHVkZUFsbEVuYWJsZWQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpZy5pbmNsdWRlQWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T3JnYW5pc2VkUHJvcGVydHlHcm91cChwcm9wZXJ0eUdyb3VwcywgYXNwZWN0TmFtZSkge1xuICAgICAgICBjb25zdCBncm91cCA9IGdldEdyb3VwKHByb3BlcnR5R3JvdXBzLCBhc3BlY3ROYW1lKTtcbiAgICAgICAgbGV0IG5ld0dyb3VwID0gW107XG5cbiAgICAgICAgaWYgKGdyb3VwKSB7XG4gICAgICAgICAgICBjb25zdCBhc3BlY3RQcm9wZXJ0aWVzID0gdGhpcy5jb25maWdbYXNwZWN0TmFtZV07XG4gICAgICAgICAgICBsZXQgcHJvcGVydGllcztcblxuICAgICAgICAgICAgaWYgKGFzcGVjdFByb3BlcnRpZXMgPT09ICcqJykge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBnZXRQcm9wZXJ0eShwcm9wZXJ0eUdyb3VwcywgYXNwZWN0TmFtZSwgYXNwZWN0UHJvcGVydGllcyk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHByb3BlcnRpZXMgPSBhc3BlY3RQcm9wZXJ0aWVzXG4gICAgICAgICAgICAgICAgICAgIC5tYXAoKHByb3BlcnR5TmFtZSkgPT4gZ2V0UHJvcGVydHkocHJvcGVydHlHcm91cHMsIGFzcGVjdE5hbWUsIHByb3BlcnR5TmFtZSkpXG4gICAgICAgICAgICAgICAgICAgIC5maWx0ZXIoKHByb3BzKSA9PiBwcm9wcyAhPT0gdW5kZWZpbmVkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbmV3R3JvdXAgPSBbeyB0aXRsZTogZ3JvdXAudGl0bGUsIHByb3BlcnRpZXMgfV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbmV3R3JvdXA7XG4gICAgfVxufVxuIl19