@alfresco/adf-content-services
Version:
Alfresco ADF content services
126 lines • 13.6 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.
*/
/* eslint-disable @angular-eslint/no-input-rename */
import { ChangeDetectorRef, Directive, ElementRef, Host, Inject, Input, Optional, Renderer2 } from '@angular/core';
import { EXTENDIBLE_COMPONENT } from '@alfresco/adf-core';
import { ContentService } from '../common/services/content.service';
import * as i0 from "@angular/core";
import * as i1 from "../common/services/content.service";
export class CheckAllowableOperationDirective {
constructor(elementRef, renderer, contentService, changeDetector, parentComponent) {
this.elementRef = elementRef;
this.renderer = renderer;
this.contentService = contentService;
this.changeDetector = changeDetector;
this.parentComponent = parentComponent;
/**
* Node permission to check (create, delete, update, updatePermissions,
* !create, !delete, !update, !updatePermissions).
*/
this.permission = null;
/** Nodes to check permission for. */
this.nodes = [];
}
ngOnChanges(changes) {
if (changes.nodes && !changes.nodes.firstChange) {
this.updateElement();
}
}
/**
* Updates disabled state for the decorated element
*
* @returns the new state
*/
updateElement() {
const enable = this.hasAllowableOperations(this.nodes, this.permission);
if (enable) {
this.enable();
}
else {
this.disable();
}
return enable;
}
enable() {
if (this.parentComponent) {
this.parentComponent.disabled = false;
this.changeDetector.detectChanges();
}
else {
this.enableElement();
}
}
disable() {
if (this.parentComponent) {
this.parentComponent.disabled = true;
this.changeDetector.detectChanges();
}
else {
this.disableElement();
}
}
/**
* Enables decorated element
*
*/
enableElement() {
this.renderer.removeAttribute(this.elementRef.nativeElement, 'disabled');
}
/**
* Disables decorated element
*
*/
disableElement() {
this.renderer.setAttribute(this.elementRef.nativeElement, 'disabled', 'true');
}
/**
* Checks whether all nodes have a particular permission
*
* @param nodes Node collection to check
* @param permission Permission to check for each node
* @returns `true` if there are allowable operations, otherwise `false`
*/
hasAllowableOperations(nodes, permission) {
if (nodes && nodes.length > 0) {
return nodes.every((node) => this.contentService.hasAllowableOperations(node.entry, permission));
}
return false;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CheckAllowableOperationDirective, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: i1.ContentService }, { token: i0.ChangeDetectorRef }, { token: EXTENDIBLE_COMPONENT, host: true, optional: true }], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: CheckAllowableOperationDirective, isStandalone: true, selector: "[adf-check-allowable-operation]", inputs: { permission: ["adf-check-allowable-operation", "permission"], nodes: ["adf-nodes", "nodes"] }, usesOnChanges: true, ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: CheckAllowableOperationDirective, decorators: [{
type: Directive,
args: [{
standalone: true,
selector: '[adf-check-allowable-operation]'
}]
}], ctorParameters: () => [{ type: i0.ElementRef }, { type: i0.Renderer2 }, { type: i1.ContentService }, { type: i0.ChangeDetectorRef }, { type: undefined, decorators: [{
type: Host
}, {
type: Optional
}, {
type: Inject,
args: [EXTENDIBLE_COMPONENT]
}] }], propDecorators: { permission: [{
type: Input,
args: ['adf-check-allowable-operation']
}], nodes: [{
type: Input,
args: ['adf-nodes']
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stYWxsb3dhYmxlLW9wZXJhdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWIvY29udGVudC1zZXJ2aWNlcy9zcmMvbGliL2RpcmVjdGl2ZXMvY2hlY2stYWxsb3dhYmxlLW9wZXJhdGlvbi5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7Ozs7OztHQWVHO0FBRUgsb0RBQW9EO0FBRXBELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFhLFFBQVEsRUFBRSxTQUFTLEVBQWlCLE1BQU0sZUFBZSxDQUFDO0FBRTdJLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzFELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQzs7O0FBT3BFLE1BQU0sT0FBTyxnQ0FBZ0M7SUFZekMsWUFDWSxVQUFzQixFQUN0QixRQUFtQixFQUNuQixjQUE4QixFQUM5QixjQUFpQyxFQUtqQyxlQUErQztRQVIvQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGFBQVEsR0FBUixRQUFRLENBQVc7UUFDbkIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUtqQyxvQkFBZSxHQUFmLGVBQWUsQ0FBZ0M7UUFwQjNEOzs7V0FHRztRQUVILGVBQVUsR0FBVyxJQUFJLENBQUM7UUFFMUIscUNBQXFDO1FBRXJDLFVBQUssR0FBZ0IsRUFBRSxDQUFDO0lBWXJCLENBQUM7SUFFSixXQUFXLENBQUMsT0FBc0I7UUFDOUIsSUFBSSxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUM5QyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNMLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsYUFBYTtRQUNULE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUV4RSxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1QsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ25CLENBQUM7UUFFRCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRU8sTUFBTTtRQUNWLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztZQUN0QyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3pCLENBQUM7SUFDTCxDQUFDO0lBRU8sT0FBTztRQUNYLElBQUksSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3ZCLElBQUksQ0FBQyxlQUFlLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztZQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3hDLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFCLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsYUFBYTtRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFVBQVUsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFRDs7O09BR0c7SUFDSCxjQUFjO1FBQ1YsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLEVBQUUsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSCxzQkFBc0IsQ0FBQyxLQUFrQixFQUFFLFVBQWtCO1FBQ3pELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDNUIsT0FBTyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUNyRyxDQUFDO1FBRUQsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQzs4R0E5RlEsZ0NBQWdDLG9JQW9CN0Isb0JBQW9CO2tHQXBCdkIsZ0NBQWdDOzsyRkFBaEMsZ0NBQWdDO2tCQUo1QyxTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsaUNBQWlDO2lCQUM5Qzs7MEJBbUJRLElBQUk7OzBCQUNKLFFBQVE7OzBCQUNSLE1BQU07MkJBQUMsb0JBQW9CO3lDQWRoQyxVQUFVO3NCQURULEtBQUs7dUJBQUMsK0JBQStCO2dCQUt0QyxLQUFLO3NCQURKLEtBQUs7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCDCqSAyMDA1LTIwMjUgSHlsYW5kIFNvZnR3YXJlLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKi9cblxuLyogZXNsaW50LWRpc2FibGUgQGFuZ3VsYXItZXNsaW50L25vLWlucHV0LXJlbmFtZSAqL1xuXG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBIb3N0LCBJbmplY3QsIElucHV0LCBPbkNoYW5nZXMsIE9wdGlvbmFsLCBSZW5kZXJlcjIsIFNpbXBsZUNoYW5nZXMgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5vZGVFbnRyeSB9IGZyb20gJ0BhbGZyZXNjby9qcy1hcGknO1xuaW1wb3J0IHsgRVhURU5ESUJMRV9DT01QT05FTlQgfSBmcm9tICdAYWxmcmVzY28vYWRmLWNvcmUnO1xuaW1wb3J0IHsgQ29udGVudFNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vc2VydmljZXMvY29udGVudC5zZXJ2aWNlJztcbmltcG9ydCB7IE5vZGVBbGxvd2FibGVPcGVyYXRpb25TdWJqZWN0IH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9ub2RlLWFsbG93YWJsZS1vcGVyYXRpb24tc3ViamVjdC5pbnRlcmZhY2UnO1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnW2FkZi1jaGVjay1hbGxvd2FibGUtb3BlcmF0aW9uXSdcbn0pXG5leHBvcnQgY2xhc3MgQ2hlY2tBbGxvd2FibGVPcGVyYXRpb25EaXJlY3RpdmUgaW1wbGVtZW50cyBPbkNoYW5nZXMge1xuICAgIC8qKlxuICAgICAqIE5vZGUgcGVybWlzc2lvbiB0byBjaGVjayAoY3JlYXRlLCBkZWxldGUsIHVwZGF0ZSwgdXBkYXRlUGVybWlzc2lvbnMsXG4gICAgICogIWNyZWF0ZSwgIWRlbGV0ZSwgIXVwZGF0ZSwgIXVwZGF0ZVBlcm1pc3Npb25zKS5cbiAgICAgKi9cbiAgICBASW5wdXQoJ2FkZi1jaGVjay1hbGxvd2FibGUtb3BlcmF0aW9uJylcbiAgICBwZXJtaXNzaW9uOiBzdHJpbmcgPSBudWxsO1xuXG4gICAgLyoqIE5vZGVzIHRvIGNoZWNrIHBlcm1pc3Npb24gZm9yLiAqL1xuICAgIEBJbnB1dCgnYWRmLW5vZGVzJylcbiAgICBub2RlczogTm9kZUVudHJ5W10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGVsZW1lbnRSZWY6IEVsZW1lbnRSZWYsXG4gICAgICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICAgICAgcHJpdmF0ZSBjb250ZW50U2VydmljZTogQ29udGVudFNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgY2hhbmdlRGV0ZWN0b3I6IENoYW5nZURldGVjdG9yUmVmLFxuXG4gICAgICAgIEBIb3N0KClcbiAgICAgICAgQE9wdGlvbmFsKClcbiAgICAgICAgQEluamVjdChFWFRFTkRJQkxFX0NPTVBPTkVOVClcbiAgICAgICAgcHJpdmF0ZSBwYXJlbnRDb21wb25lbnQ/OiBOb2RlQWxsb3dhYmxlT3BlcmF0aW9uU3ViamVjdFxuICAgICkge31cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICAgICAgaWYgKGNoYW5nZXMubm9kZXMgJiYgIWNoYW5nZXMubm9kZXMuZmlyc3RDaGFuZ2UpIHtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRWxlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogVXBkYXRlcyBkaXNhYmxlZCBzdGF0ZSBmb3IgdGhlIGRlY29yYXRlZCBlbGVtZW50XG4gICAgICpcbiAgICAgKiBAcmV0dXJucyB0aGUgbmV3IHN0YXRlXG4gICAgICovXG4gICAgdXBkYXRlRWxlbWVudCgpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgZW5hYmxlID0gdGhpcy5oYXNBbGxvd2FibGVPcGVyYXRpb25zKHRoaXMubm9kZXMsIHRoaXMucGVybWlzc2lvbik7XG5cbiAgICAgICAgaWYgKGVuYWJsZSkge1xuICAgICAgICAgICAgdGhpcy5lbmFibGUoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVuYWJsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGVuYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Q29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudENvbXBvbmVudC5kaXNhYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmVuYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZGlzYWJsZSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMucGFyZW50Q29tcG9uZW50KSB7XG4gICAgICAgICAgICB0aGlzLnBhcmVudENvbXBvbmVudC5kaXNhYmxlZCA9IHRydWU7XG4gICAgICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzYWJsZUVsZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEVuYWJsZXMgZGVjb3JhdGVkIGVsZW1lbnRcbiAgICAgKlxuICAgICAqL1xuICAgIGVuYWJsZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBEaXNhYmxlcyBkZWNvcmF0ZWQgZWxlbWVudFxuICAgICAqXG4gICAgICovXG4gICAgZGlzYWJsZUVsZW1lbnQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVuZGVyZXIuc2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LCAnZGlzYWJsZWQnLCAndHJ1ZScpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENoZWNrcyB3aGV0aGVyIGFsbCBub2RlcyBoYXZlIGEgcGFydGljdWxhciBwZXJtaXNzaW9uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIG5vZGVzIE5vZGUgY29sbGVjdGlvbiB0byBjaGVja1xuICAgICAqIEBwYXJhbSAgcGVybWlzc2lvbiBQZXJtaXNzaW9uIHRvIGNoZWNrIGZvciBlYWNoIG5vZGVcbiAgICAgKiBAcmV0dXJucyBgdHJ1ZWAgaWYgdGhlcmUgYXJlIGFsbG93YWJsZSBvcGVyYXRpb25zLCBvdGhlcndpc2UgYGZhbHNlYFxuICAgICAqL1xuICAgIGhhc0FsbG93YWJsZU9wZXJhdGlvbnMobm9kZXM6IE5vZGVFbnRyeVtdLCBwZXJtaXNzaW9uOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICAgICAgaWYgKG5vZGVzICYmIG5vZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgIHJldHVybiBub2Rlcy5ldmVyeSgobm9kZSkgPT4gdGhpcy5jb250ZW50U2VydmljZS5oYXNBbGxvd2FibGVPcGVyYXRpb25zKG5vZGUuZW50cnksIHBlcm1pc3Npb24pKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG59XG4iXX0=