@angular/material
Version:
Angular Material
66 lines • 10.5 kB
JavaScript
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
/**
* Class that tracks the error state of a component.
* @docs-private
*/
export class _ErrorStateTracker {
constructor(_defaultMatcher, ngControl, _parentFormGroup, _parentForm, _stateChanges) {
this._defaultMatcher = _defaultMatcher;
this.ngControl = ngControl;
this._parentFormGroup = _parentFormGroup;
this._parentForm = _parentForm;
this._stateChanges = _stateChanges;
/** Whether the tracker is currently in an error state. */
this.errorState = false;
}
/** Updates the error state based on the provided error state matcher. */
updateErrorState() {
const oldState = this.errorState;
const parent = this._parentFormGroup || this._parentForm;
const matcher = this.matcher || this._defaultMatcher;
const control = this.ngControl ? this.ngControl.control : null;
const newState = matcher?.isErrorState(control, parent) ?? false;
if (newState !== oldState) {
this.errorState = newState;
this._stateChanges.next();
}
}
}
export function mixinErrorState(base) {
return class extends base {
/** Whether the component is in an error state. */
get errorState() {
return this._getTracker().errorState;
}
set errorState(value) {
this._getTracker().errorState = value;
}
/** An object used to control the error state of the component. */
get errorStateMatcher() {
return this._getTracker().matcher;
}
set errorStateMatcher(value) {
this._getTracker().matcher = value;
}
/** Updates the error state based on the provided error state matcher. */
updateErrorState() {
this._getTracker().updateErrorState();
}
_getTracker() {
if (!this._tracker) {
this._tracker = new _ErrorStateTracker(this._defaultErrorStateMatcher, this.ngControl, this._parentFormGroup, this._parentForm, this.stateChanges);
}
return this._tracker;
}
constructor(...args) {
super(...args);
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3Itc3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbWF0ZXJpYWwvY29yZS9jb21tb24tYmVoYXZpb3JzL2Vycm9yLXN0YXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQW9DSDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sa0JBQWtCO0lBTzdCLFlBQ1UsZUFBeUMsRUFDMUMsU0FBMkIsRUFDMUIsZ0JBQTJDLEVBQzNDLFdBQTBCLEVBQzFCLGFBQTRCO1FBSjVCLG9CQUFlLEdBQWYsZUFBZSxDQUEwQjtRQUMxQyxjQUFTLEdBQVQsU0FBUyxDQUFrQjtRQUMxQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQTJCO1FBQzNDLGdCQUFXLEdBQVgsV0FBVyxDQUFlO1FBQzFCLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBWHRDLDBEQUEwRDtRQUMxRCxlQUFVLEdBQUcsS0FBSyxDQUFDO0lBV2hCLENBQUM7SUFFSix5RUFBeUU7SUFDekUsZ0JBQWdCO1FBQ2QsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUN6RCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUM7UUFDckQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUEyQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDcEYsTUFBTSxRQUFRLEdBQUcsT0FBTyxFQUFFLFlBQVksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLElBQUksS0FBSyxDQUFDO1FBRWpFLElBQUksUUFBUSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksQ0FBQyxVQUFVLEdBQUcsUUFBUSxDQUFDO1lBQzNCLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDNUIsQ0FBQztJQUNILENBQUM7Q0FDRjtBQVNELE1BQU0sVUFBVSxlQUFlLENBQzdCLElBQU87SUFFUCxPQUFPLEtBQU0sU0FBUSxJQUFJO1FBR3ZCLGtEQUFrRDtRQUNsRCxJQUFJLFVBQVU7WUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxVQUFVLENBQUM7UUFDdkMsQ0FBQztRQUNELElBQUksVUFBVSxDQUFDLEtBQWM7WUFDM0IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEMsQ0FBQztRQUVELGtFQUFrRTtRQUNsRSxJQUFJLGlCQUFpQjtZQUNuQixPQUFPLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxPQUFPLENBQUM7UUFDcEMsQ0FBQztRQUNELElBQUksaUJBQWlCLENBQUMsS0FBd0I7WUFDNUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDckMsQ0FBQztRQUVELHlFQUF5RTtRQUN6RSxnQkFBZ0I7WUFDZCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN4QyxDQUFDO1FBRU8sV0FBVztZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUNuQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksa0JBQWtCLENBQ3BDLElBQUksQ0FBQyx5QkFBeUIsRUFDOUIsSUFBSSxDQUFDLFNBQVMsRUFDZCxJQUFJLENBQUMsZ0JBQWdCLEVBQ3JCLElBQUksQ0FBQyxXQUFXLEVBQ2hCLElBQUksQ0FBQyxZQUFZLENBQ2xCLENBQUM7WUFDSixDQUFDO1lBRUQsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCxZQUFZLEdBQUcsSUFBVztZQUN4QixLQUFLLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNqQixDQUFDO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtBYnN0cmFjdENvbnRyb2wsIEZvcm1Hcm91cERpcmVjdGl2ZSwgTmdDb250cm9sLCBOZ0Zvcm19IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7U3ViamVjdH0gZnJvbSAncnhqcyc7XG5pbXBvcnQge0Vycm9yU3RhdGVNYXRjaGVyIGFzIF9FcnJvclN0YXRlTWF0Y2hlcn0gZnJvbSAnLi4vZXJyb3IvZXJyb3Itb3B0aW9ucyc7XG5pbXBvcnQge0Fic3RyYWN0Q29uc3RydWN0b3IsIENvbnN0cnVjdG9yfSBmcm9tICcuL2NvbnN0cnVjdG9yJztcblxuLy8gRGVjbGFyZSBFcnJvclN0YXRlTWF0Y2hlciBhcyBhbiBpbnRlcmZhY2UgdG8gaGF2ZSBjb21wYXRpYmlsaXR5IHdpdGggQ2xvc3VyZSBDb21waWxlci5cbmludGVyZmFjZSBFcnJvclN0YXRlTWF0Y2hlciBleHRlbmRzIF9FcnJvclN0YXRlTWF0Y2hlciB7fVxuXG4vKiogQGRvY3MtcHJpdmF0ZSAqL1xuZXhwb3J0IGludGVyZmFjZSBDYW5VcGRhdGVFcnJvclN0YXRlIHtcbiAgLyoqIFVwZGF0ZXMgdGhlIGVycm9yIHN0YXRlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBlcnJvciBzdGF0ZSBtYXRjaGVyLiAqL1xuICB1cGRhdGVFcnJvclN0YXRlKCk6IHZvaWQ7XG4gIC8qKiBXaGV0aGVyIHRoZSBjb21wb25lbnQgaXMgaW4gYW4gZXJyb3Igc3RhdGUuICovXG4gIGVycm9yU3RhdGU6IGJvb2xlYW47XG4gIC8qKiBBbiBvYmplY3QgdXNlZCB0byBjb250cm9sIHRoZSBlcnJvciBzdGF0ZSBvZiB0aGUgY29tcG9uZW50LiAqL1xuICBlcnJvclN0YXRlTWF0Y2hlcjogRXJyb3JTdGF0ZU1hdGNoZXI7XG59XG5cbnR5cGUgQ2FuVXBkYXRlRXJyb3JTdGF0ZUN0b3IgPSBDb25zdHJ1Y3RvcjxDYW5VcGRhdGVFcnJvclN0YXRlPiAmXG4gIEFic3RyYWN0Q29uc3RydWN0b3I8Q2FuVXBkYXRlRXJyb3JTdGF0ZT47XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5leHBvcnQgaW50ZXJmYWNlIEhhc0Vycm9yU3RhdGUge1xuICBfcGFyZW50Rm9ybUdyb3VwOiBGb3JtR3JvdXBEaXJlY3RpdmU7XG4gIF9wYXJlbnRGb3JtOiBOZ0Zvcm07XG4gIF9kZWZhdWx0RXJyb3JTdGF0ZU1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyO1xuXG4gIC8vIFRoZXNlIHByb3BlcnRpZXMgYXJlIGRlZmluZWQgYXMgcGVyIHRoZSBgTWF0Rm9ybUZpZWxkQ29udHJvbGAgaW50ZXJmYWNlLiBTaW5jZVxuICAvLyB0aGlzIG1peGluIGlzIGNvbW1vbmx5IHVzZWQgd2l0aCBjdXN0b20gZm9ybS1maWVsZCBjb250cm9scywgd2UgcmVzcGVjdCB0aGVcbiAgLy8gcHJvcGVydGllcyAoYWxzbyB3aXRoIHRoZSBwdWJsaWMgbmFtZSB0aGV5IG5lZWQgYWNjb3JkaW5nIHRvIGBNYXRGb3JtRmllbGRDb250cm9sYCkuXG4gIG5nQ29udHJvbDogTmdDb250cm9sO1xuICBzdGF0ZUNoYW5nZXM6IFN1YmplY3Q8dm9pZD47XG59XG5cbi8qKlxuICogQ2xhc3MgdGhhdCB0cmFja3MgdGhlIGVycm9yIHN0YXRlIG9mIGEgY29tcG9uZW50LlxuICogQGRvY3MtcHJpdmF0ZVxuICovXG5leHBvcnQgY2xhc3MgX0Vycm9yU3RhdGVUcmFja2VyIHtcbiAgLyoqIFdoZXRoZXIgdGhlIHRyYWNrZXIgaXMgY3VycmVudGx5IGluIGFuIGVycm9yIHN0YXRlLiAqL1xuICBlcnJvclN0YXRlID0gZmFsc2U7XG5cbiAgLyoqIFVzZXItZGVmaW5lZCBtYXRjaGVyIGZvciB0aGUgZXJyb3Igc3RhdGUuICovXG4gIG1hdGNoZXI6IEVycm9yU3RhdGVNYXRjaGVyO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2RlZmF1bHRNYXRjaGVyOiBFcnJvclN0YXRlTWF0Y2hlciB8IG51bGwsXG4gICAgcHVibGljIG5nQ29udHJvbDogTmdDb250cm9sIHwgbnVsbCxcbiAgICBwcml2YXRlIF9wYXJlbnRGb3JtR3JvdXA6IEZvcm1Hcm91cERpcmVjdGl2ZSB8IG51bGwsXG4gICAgcHJpdmF0ZSBfcGFyZW50Rm9ybTogTmdGb3JtIHwgbnVsbCxcbiAgICBwcml2YXRlIF9zdGF0ZUNoYW5nZXM6IFN1YmplY3Q8dm9pZD4sXG4gICkge31cblxuICAvKiogVXBkYXRlcyB0aGUgZXJyb3Igc3RhdGUgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGVycm9yIHN0YXRlIG1hdGNoZXIuICovXG4gIHVwZGF0ZUVycm9yU3RhdGUoKSB7XG4gICAgY29uc3Qgb2xkU3RhdGUgPSB0aGlzLmVycm9yU3RhdGU7XG4gICAgY29uc3QgcGFyZW50ID0gdGhpcy5fcGFyZW50Rm9ybUdyb3VwIHx8IHRoaXMuX3BhcmVudEZvcm07XG4gICAgY29uc3QgbWF0Y2hlciA9IHRoaXMubWF0Y2hlciB8fCB0aGlzLl9kZWZhdWx0TWF0Y2hlcjtcbiAgICBjb25zdCBjb250cm9sID0gdGhpcy5uZ0NvbnRyb2wgPyAodGhpcy5uZ0NvbnRyb2wuY29udHJvbCBhcyBBYnN0cmFjdENvbnRyb2wpIDogbnVsbDtcbiAgICBjb25zdCBuZXdTdGF0ZSA9IG1hdGNoZXI/LmlzRXJyb3JTdGF0ZShjb250cm9sLCBwYXJlbnQpID8/IGZhbHNlO1xuXG4gICAgaWYgKG5ld1N0YXRlICE9PSBvbGRTdGF0ZSkge1xuICAgICAgdGhpcy5lcnJvclN0YXRlID0gbmV3U3RhdGU7XG4gICAgICB0aGlzLl9zdGF0ZUNoYW5nZXMubmV4dCgpO1xuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIE1peGluIHRvIGF1Z21lbnQgYSBkaXJlY3RpdmUgd2l0aCB1cGRhdGVFcnJvclN0YXRlIG1ldGhvZC5cbiAqIEZvciBjb21wb25lbnQgd2l0aCBgZXJyb3JTdGF0ZWAgYW5kIG5lZWQgdG8gdXBkYXRlIGBlcnJvclN0YXRlYC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG1peGluRXJyb3JTdGF0ZTxUIGV4dGVuZHMgQWJzdHJhY3RDb25zdHJ1Y3RvcjxIYXNFcnJvclN0YXRlPj4oXG4gIGJhc2U6IFQsXG4pOiBDYW5VcGRhdGVFcnJvclN0YXRlQ3RvciAmIFQ7XG5leHBvcnQgZnVuY3Rpb24gbWl4aW5FcnJvclN0YXRlPFQgZXh0ZW5kcyBDb25zdHJ1Y3RvcjxIYXNFcnJvclN0YXRlPj4oXG4gIGJhc2U6IFQsXG4pOiBDYW5VcGRhdGVFcnJvclN0YXRlQ3RvciAmIFQge1xuICByZXR1cm4gY2xhc3MgZXh0ZW5kcyBiYXNlIHtcbiAgICBwcml2YXRlIF90cmFja2VyOiBfRXJyb3JTdGF0ZVRyYWNrZXIgfCB1bmRlZmluZWQ7XG5cbiAgICAvKiogV2hldGhlciB0aGUgY29tcG9uZW50IGlzIGluIGFuIGVycm9yIHN0YXRlLiAqL1xuICAgIGdldCBlcnJvclN0YXRlKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2dldFRyYWNrZXIoKS5lcnJvclN0YXRlO1xuICAgIH1cbiAgICBzZXQgZXJyb3JTdGF0ZSh2YWx1ZTogYm9vbGVhbikge1xuICAgICAgdGhpcy5fZ2V0VHJhY2tlcigpLmVycm9yU3RhdGUgPSB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKiogQW4gb2JqZWN0IHVzZWQgdG8gY29udHJvbCB0aGUgZXJyb3Igc3RhdGUgb2YgdGhlIGNvbXBvbmVudC4gKi9cbiAgICBnZXQgZXJyb3JTdGF0ZU1hdGNoZXIoKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0VHJhY2tlcigpLm1hdGNoZXI7XG4gICAgfVxuICAgIHNldCBlcnJvclN0YXRlTWF0Y2hlcih2YWx1ZTogRXJyb3JTdGF0ZU1hdGNoZXIpIHtcbiAgICAgIHRoaXMuX2dldFRyYWNrZXIoKS5tYXRjaGVyID0gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqIFVwZGF0ZXMgdGhlIGVycm9yIHN0YXRlIGJhc2VkIG9uIHRoZSBwcm92aWRlZCBlcnJvciBzdGF0ZSBtYXRjaGVyLiAqL1xuICAgIHVwZGF0ZUVycm9yU3RhdGUoKSB7XG4gICAgICB0aGlzLl9nZXRUcmFja2VyKCkudXBkYXRlRXJyb3JTdGF0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFRyYWNrZXIoKSB7XG4gICAgICBpZiAoIXRoaXMuX3RyYWNrZXIpIHtcbiAgICAgICAgdGhpcy5fdHJhY2tlciA9IG5ldyBfRXJyb3JTdGF0ZVRyYWNrZXIoXG4gICAgICAgICAgdGhpcy5fZGVmYXVsdEVycm9yU3RhdGVNYXRjaGVyLFxuICAgICAgICAgIHRoaXMubmdDb250cm9sLFxuICAgICAgICAgIHRoaXMuX3BhcmVudEZvcm1Hcm91cCxcbiAgICAgICAgICB0aGlzLl9wYXJlbnRGb3JtLFxuICAgICAgICAgIHRoaXMuc3RhdGVDaGFuZ2VzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5fdHJhY2tlcjtcbiAgICB9XG5cbiAgICBjb25zdHJ1Y3RvciguLi5hcmdzOiBhbnlbXSkge1xuICAgICAgc3VwZXIoLi4uYXJncyk7XG4gICAgfVxuICB9O1xufVxuIl19