@blox/material
Version:
Material Components for Angular
50 lines • 4.52 kB
JavaScript
import { Directive, HostBinding, Input } from '@angular/core';
import { Subject } from 'rxjs';
let nextId = 1;
/** @docs-private */
export class HasId {
constructor() {
this._id = null;
this.cachedId = null;
this._idChange = new Subject();
}
// TODO: member assignments above are never executed...
/** @internal */
initId() {
// Force setter to be called in case id was not specified.
this.id = this.id;
this._idChange = new Subject();
}
/**
* Mirrors the <code>id</code> attribute. If no id is assigned, this directive will
* assign a unique id by itself.
*/
get id() {
return this._id;
}
set id(value) {
this._id = value || this._newId();
if (this._idChange)
this._idChange.next();
}
/** @internal */
_newId() {
this.cachedId = this.cachedId || `mdc-u-id-${nextId++}`;
return this.cachedId;
}
/**
* @internal
*
* Subscribe to this observable to be informed of id changes.
*/
idChange() {
return this._idChange.asObservable();
}
}
HasId.decorators = [
{ type: Directive }
];
HasId.propDecorators = {
id: [{ type: HostBinding }, { type: Input }]
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWl4aW4ubWRjLmhhc2lkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2NvbXBvbmVudHMvYWJzdHJhY3QvbWl4aW4ubWRjLmhhc2lkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM5RCxPQUFPLEVBQUUsT0FBTyxFQUFjLE1BQU0sTUFBTSxDQUFDO0FBRTNDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUVmLG9CQUFvQjtBQUVwQixNQUFNLE9BQU8sS0FBSztJQURsQjtRQUVZLFFBQUcsR0FBa0IsSUFBSSxDQUFDO1FBQzFCLGFBQVEsR0FBa0IsSUFBSSxDQUFDO1FBQy9CLGNBQVMsR0FBb0IsSUFBSSxPQUFPLEVBQVUsQ0FBQztJQXVDL0QsQ0FBQztJQXRDRyx1REFBdUQ7SUFFdkQsZ0JBQWdCO0lBQ2hCLE1BQU07UUFDRiwwREFBMEQ7UUFDMUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsSUFDYSxFQUFFO1FBQ1gsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDO0lBQ3BCLENBQUM7SUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFvQjtRQUN2QixJQUFJLENBQUMsR0FBRyxHQUFHLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDbEMsSUFBSSxJQUFJLENBQUMsU0FBUztZQUNkLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDOUIsQ0FBQztJQUVELGdCQUFnQjtJQUNoQixNQUFNO1FBQ0YsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxJQUFJLFlBQVksTUFBTSxFQUFFLEVBQUUsQ0FBQztRQUN4RCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDekIsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxRQUFRO1FBQ0osT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQ3pDLENBQUM7OztZQTFDSixTQUFTOzs7aUJBa0JMLFdBQVcsWUFDWCxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBIb3N0QmluZGluZywgSW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN1YmplY3QsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcblxubGV0IG5leHRJZCA9IDE7XG5cbi8qKiBAZG9jcy1wcml2YXRlICovXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBjbGFzcyBIYXNJZCB7XG4gICAgcHJpdmF0ZSBfaWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgY2FjaGVkSWQ6IHN0cmluZyB8IG51bGwgPSBudWxsO1xuICAgIHByaXZhdGUgX2lkQ2hhbmdlOiBTdWJqZWN0PHN0cmluZz4gPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG4gICAgLy8gVE9ETzogbWVtYmVyIGFzc2lnbm1lbnRzIGFib3ZlIGFyZSBuZXZlciBleGVjdXRlZC4uLlxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIGluaXRJZCgpIHtcbiAgICAgICAgLy8gRm9yY2Ugc2V0dGVyIHRvIGJlIGNhbGxlZCBpbiBjYXNlIGlkIHdhcyBub3Qgc3BlY2lmaWVkLlxuICAgICAgICB0aGlzLmlkID0gdGhpcy5pZDtcbiAgICAgICAgdGhpcy5faWRDaGFuZ2UgPSBuZXcgU3ViamVjdCgpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE1pcnJvcnMgdGhlIDxjb2RlPmlkPC9jb2RlPiBhdHRyaWJ1dGUuIElmIG5vIGlkIGlzIGFzc2lnbmVkLCB0aGlzIGRpcmVjdGl2ZSB3aWxsXG4gICAgICogYXNzaWduIGEgdW5pcXVlIGlkIGJ5IGl0c2VsZi5cbiAgICAgKi9cbiAgICBASG9zdEJpbmRpbmcoKVxuICAgIEBJbnB1dCgpIGdldCBpZCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lkO1xuICAgIH1cblxuICAgIHNldCBpZCh2YWx1ZTogc3RyaW5nIHwgbnVsbCkge1xuICAgICAgICB0aGlzLl9pZCA9IHZhbHVlIHx8IHRoaXMuX25ld0lkKCk7XG4gICAgICAgIGlmICh0aGlzLl9pZENoYW5nZSlcbiAgICAgICAgICAgIHRoaXMuX2lkQ2hhbmdlLm5leHQoKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX25ld0lkKCk6IHN0cmluZyB7XG4gICAgICAgIHRoaXMuY2FjaGVkSWQgPSB0aGlzLmNhY2hlZElkIHx8IGBtZGMtdS1pZC0ke25leHRJZCsrfWA7XG4gICAgICAgIHJldHVybiB0aGlzLmNhY2hlZElkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqIFxuICAgICAqIFN1YnNjcmliZSB0byB0aGlzIG9ic2VydmFibGUgdG8gYmUgaW5mb3JtZWQgb2YgaWQgY2hhbmdlcy5cbiAgICAgKi9cbiAgICBpZENoYW5nZSgpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgICAgICByZXR1cm4gdGhpcy5faWRDaGFuZ2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgfVxufVxuIl19