ng-halfmoon
Version:
Angular Library to build upon the halfmoon-framework
45 lines • 5.34 kB
JavaScript
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs';
import { distinctUntilChanged } from 'rxjs/operators';
/**
* This logic with managing the control-status is adopted from Clarity Design. All props go to their team and contributors
*/
export var ControlStatus;
(function (ControlStatus) {
ControlStatus["NONE"] = "NONE";
ControlStatus["INVALID"] = "INVALID";
ControlStatus["VALID"] = "VALID";
})(ControlStatus || (ControlStatus = {}));
export class ControlService {
constructor() {
this._currentStatus$ = new Subject();
}
get currentStatus$() {
return this._currentStatus$.asObservable();
}
ngOnDestroy() {
var _a;
(_a = this.subscription) === null || _a === void 0 ? void 0 : _a.unsubscribe();
}
init(control) {
var _a;
this.currentControl = control;
this.subscription = (_a = this.currentControl.statusChanges) === null || _a === void 0 ? void 0 : _a.pipe(distinctUntilChanged()).subscribe(() => {
this.triggerStatusChange();
});
}
triggerStatusChange() {
if ((this.currentControl.touched || this.currentControl.dirty) &&
[ControlStatus.INVALID, ControlStatus.VALID].includes(this.currentControl.status)) {
this._currentStatus$.next(this.currentControl.status);
}
else {
this._currentStatus$.next(ControlStatus.NONE);
}
}
}
ControlService.decorators = [
{ type: Injectable }
];
ControlService.ctorParameters = () => [];
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmctaGFsZm1vb24vc3JjL2xpYi9mb3JtL3NlcnZpY2VzL2NvbnRyb2wuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsVUFBVSxFQUFZLE1BQU0sZUFBZSxDQUFDO0FBRXBELE9BQU8sRUFBYSxPQUFPLEVBQWUsTUFBTSxNQUFNLENBQUM7QUFDdkQsT0FBTyxFQUFDLG9CQUFvQixFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFFcEQ7O0dBRUc7QUFDSCxNQUFNLENBQU4sSUFBWSxhQUlYO0FBSkQsV0FBWSxhQUFhO0lBQ3ZCLDhCQUFhLENBQUE7SUFDYixvQ0FBbUIsQ0FBQTtJQUNuQixnQ0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxhQUFhLEtBQWIsYUFBYSxRQUl4QjtBQUdELE1BQU0sT0FBTyxjQUFjO0lBV3pCO1FBSlEsb0JBQWUsR0FDckIsSUFBSSxPQUFPLEVBQWlCLENBQUM7SUFHaEIsQ0FBQztJQVJoQixJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzdDLENBQUM7SUFRRCxXQUFXOztRQUNULE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsV0FBVyxFQUFFLENBQUM7SUFDbkMsQ0FBQztJQUVELElBQUksQ0FBQyxPQUFvQjs7UUFDdkIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7UUFDOUIsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFBLElBQUksQ0FBQyxjQUFjLENBQUMsYUFBYSwwQ0FDakQsSUFBSSxDQUFDLG9CQUFvQixFQUFFLEVBQzVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDZCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxtQkFBbUI7UUFDakIsSUFDRSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDO1lBQzFELENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUNuRCxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQXVCLENBQzVDLEVBQ0Q7WUFDQSxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQXVCLENBQUMsQ0FBQztTQUN4RTthQUFNO1lBQ0wsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQy9DO0lBQ0gsQ0FBQzs7O1lBdENGLFVBQVUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdGFibGUsIE9uRGVzdHJveX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge0Zvcm1Db250cm9sfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQge09ic2VydmFibGUsIFN1YmplY3QsIFN1YnNjcmlwdGlvbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge2Rpc3RpbmN0VW50aWxDaGFuZ2VkfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbi8qKlxuICogVGhpcyBsb2dpYyB3aXRoIG1hbmFnaW5nIHRoZSBjb250cm9sLXN0YXR1cyBpcyBhZG9wdGVkIGZyb20gQ2xhcml0eSBEZXNpZ24uIEFsbCBwcm9wcyBnbyB0byB0aGVpciB0ZWFtIGFuZCBjb250cmlidXRvcnNcbiAqL1xuZXhwb3J0IGVudW0gQ29udHJvbFN0YXR1cyB7XG4gIE5PTkUgPSAnTk9ORScsXG4gIElOVkFMSUQgPSAnSU5WQUxJRCcsXG4gIFZBTElEID0gJ1ZBTElEJ1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ29udHJvbFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICBjdXJyZW50Q29udHJvbDogRm9ybUNvbnRyb2w7XG5cbiAgZ2V0IGN1cnJlbnRTdGF0dXMkKCk6IE9ic2VydmFibGU8Q29udHJvbFN0YXR1cz4ge1xuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3RhdHVzJC5hc09ic2VydmFibGUoKTtcbiAgfVxuXG4gIHByaXZhdGUgX2N1cnJlbnRTdGF0dXMkOiBTdWJqZWN0PENvbnRyb2xTdGF0dXM+ID1cbiAgICBuZXcgU3ViamVjdDxDb250cm9sU3RhdHVzPigpO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge31cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIGluaXQoY29udHJvbDogRm9ybUNvbnRyb2wpOiB2b2lkIHtcbiAgICB0aGlzLmN1cnJlbnRDb250cm9sID0gY29udHJvbDtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuY3VycmVudENvbnRyb2wuc3RhdHVzQ2hhbmdlc1xuICAgICAgPy5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy50cmlnZ2VyU3RhdHVzQ2hhbmdlKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHRyaWdnZXJTdGF0dXNDaGFuZ2UoKSB7XG4gICAgaWYgKFxuICAgICAgKHRoaXMuY3VycmVudENvbnRyb2wudG91Y2hlZCB8fCB0aGlzLmN1cnJlbnRDb250cm9sLmRpcnR5KSAmJlxuICAgICAgW0NvbnRyb2xTdGF0dXMuSU5WQUxJRCwgQ29udHJvbFN0YXR1cy5WQUxJRF0uaW5jbHVkZXMoXG4gICAgICAgIHRoaXMuY3VycmVudENvbnRyb2wuc3RhdHVzIGFzIENvbnRyb2xTdGF0dXNcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0dXMkLm5leHQodGhpcy5jdXJyZW50Q29udHJvbC5zdGF0dXMgYXMgQ29udHJvbFN0YXR1cyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2N1cnJlbnRTdGF0dXMkLm5leHQoQ29udHJvbFN0YXR1cy5OT05FKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==