@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
45 lines • 5.75 kB
JavaScript
import { Directive, Input } from '@angular/core';
import { NG_VALIDATORS } from '@angular/forms';
import { find, get, isEqualWith } from 'lodash-es';
import * as i0 from "@angular/core";
export function uniqueInCollectionByPathValidator(collection, path, comparator) {
return (control) => {
const match = find(collection, element => isEqualWith(get(element, path), control.value, comparator));
return !!match && !!control.value
? { uniqueByPath: { key: path, value: get(match, path) } }
: null;
};
}
export class UniqueInCollectionByPathValidationDirective {
validate(control) {
return uniqueInCollectionByPathValidator(this.collection, this.path, this.comparator)(control);
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UniqueInCollectionByPathValidationDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: UniqueInCollectionByPathValidationDirective, selector: "[uniqueByPath]", inputs: { collection: "collection", path: "path", comparator: "comparator" }, providers: [
{
provide: NG_VALIDATORS,
useExisting: UniqueInCollectionByPathValidationDirective,
multi: true
}
], ngImport: i0 }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: UniqueInCollectionByPathValidationDirective, decorators: [{
type: Directive,
args: [{
selector: '[uniqueByPath]',
providers: [
{
provide: NG_VALIDATORS,
useExisting: UniqueInCollectionByPathValidationDirective,
multi: true
}
]
}]
}], propDecorators: { collection: [{
type: Input
}], path: [{
type: Input
}], comparator: [{
type: Input
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pcXVlLWluLWNvbGxlY3Rpb24tYnktcGF0aC12YWxpZGF0aW9uLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvZm9ybXMvdW5pcXVlLWluLWNvbGxlY3Rpb24tYnktcGF0aC12YWxpZGF0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNqRCxPQUFPLEVBRUwsYUFBYSxFQUlkLE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLE1BQU0sV0FBVyxDQUFDOztBQUVuRCxNQUFNLFVBQVUsaUNBQWlDLENBQy9DLFVBQTRCLEVBQzVCLElBQVksRUFDWixVQUE4QztJQUU5QyxPQUFPLENBQUMsT0FBd0IsRUFBMkIsRUFBRTtRQUMzRCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxFQUFFLENBQ3ZDLFdBQVcsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxFQUFFLE9BQU8sQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQzNELENBQUM7UUFFRixPQUFPLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLO1lBQy9CLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRTtZQUMxRCxDQUFDLENBQUMsSUFBSSxDQUFDO0lBQ1gsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQVlELE1BQU0sT0FBTywyQ0FBMkM7SUFLdEQsUUFBUSxDQUFDLE9BQXdCO1FBQy9CLE9BQU8saUNBQWlDLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRyxDQUFDOytHQVBVLDJDQUEyQzttR0FBM0MsMkNBQTJDLHVIQVIzQztZQUNUO2dCQUNFLE9BQU8sRUFBRSxhQUFhO2dCQUN0QixXQUFXLEVBQUUsMkNBQTJDO2dCQUN4RCxLQUFLLEVBQUUsSUFBSTthQUNaO1NBQ0Y7OzRGQUVVLDJDQUEyQztrQkFWdkQsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsZ0JBQWdCO29CQUMxQixTQUFTLEVBQUU7d0JBQ1Q7NEJBQ0UsT0FBTyxFQUFFLGFBQWE7NEJBQ3RCLFdBQVcsNkNBQTZDOzRCQUN4RCxLQUFLLEVBQUUsSUFBSTt5QkFDWjtxQkFDRjtpQkFDRjs4QkFFVSxVQUFVO3NCQUFsQixLQUFLO2dCQUNHLElBQUk7c0JBQVosS0FBSztnQkFDRyxVQUFVO3NCQUFsQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQWJzdHJhY3RDb250cm9sLFxuICBOR19WQUxJREFUT1JTLFxuICBWYWxpZGF0aW9uRXJyb3JzLFxuICBWYWxpZGF0b3IsXG4gIFZhbGlkYXRvckZuXG59IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGZpbmQsIGdldCwgaXNFcXVhbFdpdGggfSBmcm9tICdsb2Rhc2gtZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gdW5pcXVlSW5Db2xsZWN0aW9uQnlQYXRoVmFsaWRhdG9yKFxuICBjb2xsZWN0aW9uOiBJdGVyYWJsZTxvYmplY3Q+LFxuICBwYXRoOiBzdHJpbmcsXG4gIGNvbXBhcmF0b3I/OiAodmFsMTogYW55LCB2YWwyOiBhbnkpID0+IGJvb2xlYW5cbik6IFZhbGlkYXRvckZuIHtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbCA9PiB7XG4gICAgY29uc3QgbWF0Y2ggPSBmaW5kKGNvbGxlY3Rpb24sIGVsZW1lbnQgPT5cbiAgICAgIGlzRXF1YWxXaXRoKGdldChlbGVtZW50LCBwYXRoKSwgY29udHJvbC52YWx1ZSwgY29tcGFyYXRvcilcbiAgICApO1xuXG4gICAgcmV0dXJuICEhbWF0Y2ggJiYgISFjb250cm9sLnZhbHVlXG4gICAgICA/IHsgdW5pcXVlQnlQYXRoOiB7IGtleTogcGF0aCwgdmFsdWU6IGdldChtYXRjaCwgcGF0aCkgfSB9XG4gICAgICA6IG51bGw7XG4gIH07XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t1bmlxdWVCeVBhdGhdJyxcbiAgcHJvdmlkZXJzOiBbXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBVbmlxdWVJbkNvbGxlY3Rpb25CeVBhdGhWYWxpZGF0aW9uRGlyZWN0aXZlLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgVW5pcXVlSW5Db2xsZWN0aW9uQnlQYXRoVmFsaWRhdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XG4gIEBJbnB1dCgpIGNvbGxlY3Rpb246IEl0ZXJhYmxlPG9iamVjdD47XG4gIEBJbnB1dCgpIHBhdGg6IHN0cmluZztcbiAgQElucHV0KCkgY29tcGFyYXRvcjogKHZhbDE6IGFueSwgdmFsMjogYW55KSA9PiBib29sZWFuO1xuXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMgfCBudWxsIHtcbiAgICByZXR1cm4gdW5pcXVlSW5Db2xsZWN0aW9uQnlQYXRoVmFsaWRhdG9yKHRoaXMuY29sbGVjdGlvbiwgdGhpcy5wYXRoLCB0aGlzLmNvbXBhcmF0b3IpKGNvbnRyb2wpO1xuICB9XG59XG4iXX0=