UNPKG

@asi-ngtools/lib

Version:

This project is a little components library, simple to use, which will help you to simplify your project.

204 lines (203 loc) 15.8 kB
/** * @fileoverview added by tsickle * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc */ import { Component, Output, ChangeDetectorRef, IterableDiffers, EventEmitter, Input, ElementRef, ViewChild, HostBinding } from '@angular/core'; /** * @template T */ var AsiBreadcrumbComponent = /** @class */ (function () { function AsiBreadcrumbComponent(ref, elRef, differs) { this.ref = ref; this.elRef = elRef; this.differs = differs; this.class = 'asi-component asi-breadcrumb'; this.hideElements = false; this.elementsDropdownOpened = false; /** * Data displayed on dom, doesn't interfere with input data * Needed because we sometimes hide some elements in GUI * But we don't want to remove them from data array */ this.shadowData = new Array(); this.hiddenElements = new Array(); this.clicked = new EventEmitter(); this.differ = this.differs.find([]).create(null); } /** * @return {?} */ AsiBreadcrumbComponent.prototype.checkInput = /** * @return {?} */ function () { if (null == this.trackBy) { throw new Error('AsiBreadcrumbComponent : @Input \'trackBy\' is required'); } if (!this.data) { throw new Error('AsiBreadcrumbComponent : @Input \'data\' is required'); } }; /** * @return {?} */ AsiBreadcrumbComponent.prototype.ngOnInit = /** * @return {?} */ function () { this.checkInput(); }; // Using ngDoCheck instead of ngChanges to update on deep change (push/pop into the array) /** * @return {?} */ AsiBreadcrumbComponent.prototype.ngDoCheck = /** * @return {?} */ function () { /** @type {?} */ var changes = this.differ.diff(this.data); if (changes) { this.ref.detectChanges(); if (changes._collection) { this.updateShadow(changes._collection); } else { this.updateShadow(changes.collection); } } }; /** * @return {?} */ AsiBreadcrumbComponent.prototype.ngAfterViewInit = /** * @return {?} */ function () { var _this = this; /** @type {?} */ var breadcrumbWidth = this.elRef.nativeElement.offsetWidth; // (width - (home width) - ('...' width)) / max elements size this.nbElementsMax = Math.floor((breadcrumbWidth - 30 - 50) / 130); // setTimeout() avoid "ExpressionChangedAfterItHasBeenCheckedError" exception in dev mode setTimeout(function () { return _this.updateShadow(_this.data); }); }; /** * @param {?} newStack * @return {?} */ AsiBreadcrumbComponent.prototype.updateShadow = /** * @param {?} newStack * @return {?} */ function (newStack) { if (newStack) { // true -> showing '...' this.hideElements = newStack.length > this.nbElementsMax; // just display the last 'nbElementsMax' this.shadowData = newStack.slice(0 - this.nbElementsMax); this.hiddenElements = newStack.slice(0, Math.max(newStack.length - this.nbElementsMax)); } }; /** * @param {?} element * @return {?} */ AsiBreadcrumbComponent.prototype.getTrackedValue = /** * @param {?} element * @return {?} */ function (element) { if (element) { /** @type {?} */ var trackedValue = element[this.trackBy]; return trackedValue; } else { return null; } }; /** * @param {?} element * @return {?} */ AsiBreadcrumbComponent.prototype.clickOnElement = /** * @param {?} element * @return {?} */ function (element) { this.elementsDropdownOpened = false; this.data = this.data.slice(0, this.data.indexOf(element) + 1); this.updateShadow(this.data); this.clicked.emit(this.data); }; AsiBreadcrumbComponent.decorators = [ { type: Component, args: [{ selector: 'asi-breadcrumb', template: "<ul class=\"breadcrumb\">\r\n <!-- Home -->\r\n <li *ngIf=\"!hideHome\">\r\n <a (click)=\"clickOnElement({})\">\r\n <i class=\"fa fa-home\"></i>\r\n </a>\r\n </li>\r\n <!-- Collapsing elements on mobile -->\r\n <li #asiBreadcrumbDropdownDots *ngIf=\"hideElements\" (click)=\"elementsDropdownOpened = true\">\r\n <a>...</a>\r\n </li>\r\n <asi-dropdown [relativeTo]=\"asiBreadcrumbDropdownDots\" [calculWidth]=\"false\" [open]=\"elementsDropdownOpened\" (onClose)=\"elementsDropdownOpened = false\">\r\n <div class=\"clickable drop-down-breadcrumb\">\r\n <div *ngFor=\"let elem of hiddenElements\" (click)=\"clickOnElement(elem)\">\r\n <span>{{ getTrackedValue(elem) }}</span>\r\n </div>\r\n </div>\r\n </asi-dropdown>\r\n <!-- Folders path -->\r\n <li *ngFor=\"let elem of shadowData\">\r\n <a (click)=\"clickOnElement(elem)\">\r\n <p ngClass.xs=\"shortText\">{{ getTrackedValue(elem) }}</p>\r\n </a>\r\n </li>\r\n</ul>" }] } ]; /** @nocollapse */ AsiBreadcrumbComponent.ctorParameters = function () { return [ { type: ChangeDetectorRef }, { type: ElementRef }, { type: IterableDiffers } ]; }; AsiBreadcrumbComponent.propDecorators = { class: [{ type: HostBinding, args: ['class',] }], data: [{ type: Input }], trackBy: [{ type: Input }], hideHome: [{ type: Input }], asiBreadcrumbDropdownDots: [{ type: ViewChild, args: ['asiBreadcrumbDropdownDots',] }], clicked: [{ type: Output, args: ['clicked',] }] }; return AsiBreadcrumbComponent; }()); export { AsiBreadcrumbComponent }; if (false) { /** @type {?} */ AsiBreadcrumbComponent.prototype.class; /** * List of items to be displayed * @type {?} */ AsiBreadcrumbComponent.prototype.data; /** * * @type {?} */ AsiBreadcrumbComponent.prototype.trackBy; /** * Allow you to add the home button * @type {?} */ AsiBreadcrumbComponent.prototype.hideHome; /** @type {?} */ AsiBreadcrumbComponent.prototype.asiBreadcrumbDropdownDots; /** @type {?} */ AsiBreadcrumbComponent.prototype.differ; /** @type {?} */ AsiBreadcrumbComponent.prototype.nbElementsMax; /** @type {?} */ AsiBreadcrumbComponent.prototype.hideElements; /** @type {?} */ AsiBreadcrumbComponent.prototype.elementsDropdownOpened; /** * Data displayed on dom, doesn't interfere with input data * Needed because we sometimes hide some elements in GUI * But we don't want to remove them from data array * @type {?} */ AsiBreadcrumbComponent.prototype.shadowData; /** @type {?} */ AsiBreadcrumbComponent.prototype.hiddenElements; /** @type {?} */ AsiBreadcrumbComponent.prototype.clicked; /** @type {?} */ AsiBreadcrumbComponent.prototype.ref; /** @type {?} */ AsiBreadcrumbComponent.prototype.elRef; /** @type {?} */ AsiBreadcrumbComponent.prototype.differs; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNpLWJyZWFkY3J1bWIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGFzaS1uZ3Rvb2xzL2xpYi8iLCJzb3VyY2VzIjpbImxpYi9jb21wb25lbnRzL2FzaS1icmVhZGNydW1iL2FzaS1icmVhZGNydW1iLmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLFNBQVMsRUFBVSxNQUFNLEVBQUUsaUJBQWlCLEVBQVcsZUFBZSxFQUM3RSxZQUFZLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQWlCLFdBQVcsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7Ozs7SUFvQzlGLGdDQUFvQixHQUFzQixFQUFVLEtBQWlCLEVBQVUsT0FBd0I7UUFBbkYsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUFZO1FBQVUsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7cUJBNUJ6RSw4QkFBOEI7NEJBZXRDLEtBQUs7c0NBQ0ssS0FBSzs7Ozs7OzBCQU1QLElBQUksS0FBSyxFQUFLOzhCQUNWLElBQUksS0FBSyxFQUFLO3VCQUdQLElBQUksWUFBWSxFQUFZO1FBR25FLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2xEOzs7O0lBRU8sMkNBQVU7Ozs7UUFDaEIsRUFBRSxDQUFDLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQUMseURBQXlELENBQUMsQ0FBQztTQUM1RTtRQUVELEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDZixNQUFNLElBQUksS0FBSyxDQUFDLHNEQUFzRCxDQUFDLENBQUM7U0FDekU7Ozs7O0lBR0gseUNBQVE7OztJQUFSO1FBQ0Us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QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0LCBPdXRwdXQsIENoYW5nZURldGVjdG9yUmVmLCBEb0NoZWNrLCBJdGVyYWJsZURpZmZlcnMsXHJcbiAgRXZlbnRFbWl0dGVyLCBJbnB1dCwgRWxlbWVudFJlZiwgVmlld0NoaWxkLCBBZnRlclZpZXdJbml0LCBIb3N0QmluZGluZyB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5cclxuQENvbXBvbmVudCh7XHJcbiAgc2VsZWN0b3I6ICdhc2ktYnJlYWRjcnVtYicsXHJcbiAgdGVtcGxhdGVVcmw6ICdhc2ktYnJlYWRjcnVtYi5jb21wb25lbnQuaHRtbCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBBc2lCcmVhZGNydW1iQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgT25Jbml0LCBEb0NoZWNrLCBBZnRlclZpZXdJbml0IHtcclxuXHJcbiAgQEhvc3RCaW5kaW5nKCdjbGFzcycpIGNsYXNzID0gJ2FzaS1jb21wb25lbnQgYXNpLWJyZWFkY3J1bWInO1xyXG5cclxuICAvKiogTGlzdCBvZiBpdGVtcyB0byBiZSBkaXNwbGF5ZWQgKi9cclxuICBASW5wdXQoKSBkYXRhOiBBcnJheTxUPjtcclxuXHJcbiAgLyoqICovXHJcbiAgQElucHV0KCkgdHJhY2tCeTogc3RyaW5nO1xyXG5cclxuICAvKiogQWxsb3cgeW91IHRvIGFkZCB0aGUgaG9tZSBidXR0b24gKi9cclxuICBASW5wdXQoKSBoaWRlSG9tZTogYm9vbGVhbjtcclxuXHJcbiAgQFZpZXdDaGlsZCgnYXNpQnJlYWRjcnVtYkRyb3Bkb3duRG90cycpIGFzaUJyZWFkY3J1bWJEcm9wZG93bkRvdHM6IEVsZW1lbnRSZWY7XHJcblxyXG4gIHByaXZhdGUgZGlmZmVyOiBhbnk7XHJcbiAgcHJpdmF0ZSBuYkVsZW1lbnRzTWF4OiBudW1iZXI7XHJcbiAgcHVibGljIGhpZGVFbGVtZW50cyA9IGZhbHNlO1xyXG4gIHB1YmxpYyBlbGVtZW50c0Ryb3Bkb3duT3BlbmVkID0gZmFsc2U7XHJcbiAgLyoqXHJcbiAgICogRGF0YSBkaXNwbGF5ZWQgb24gZG9tLCBkb2Vzbid0IGludGVyZmVyZSB3aXRoIGlucHV0IGRhdGFcclxuICAgKiBOZWVkZWQgYmVjYXVzZSB3ZSBzb21ldGltZXMgaGlkZSBzb21lIGVsZW1lbnRzIGluIEdVSVxyXG4gICAqIEJ1dCB3ZSBkb24ndCB3YW50IHRvIHJlbW92ZSB0aGVtIGZyb20gZGF0YSBhcnJheVxyXG4gICAqL1xyXG4gIHB1YmxpYyBzaGFkb3dEYXRhOiBBcnJheTxUPiA9IG5ldyBBcnJheTxUPigpO1xyXG4gIHB1YmxpYyBoaWRkZW5FbGVtZW50czogQXJyYXk8VD4gPSBuZXcgQXJyYXk8VD4oKTtcclxuXHJcbiAgQE91dHB1dCgnY2xpY2tlZCcpXHJcbiAgcHVibGljIGNsaWNrZWQ6IEV2ZW50RW1pdHRlcjxBcnJheTxUPj4gPSBuZXcgRXZlbnRFbWl0dGVyPEFycmF5PFQ+PigpO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsIHByaXZhdGUgZWxSZWY6IEVsZW1lbnRSZWYsIHByaXZhdGUgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzKSB7XHJcbiAgICB0aGlzLmRpZmZlciA9IHRoaXMuZGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGNoZWNrSW5wdXQoKSB7XHJcbiAgICBpZiAobnVsbCA9PSB0aGlzLnRyYWNrQnkpIHtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdBc2lCcmVhZGNydW1iQ29tcG9uZW50IDogQElucHV0IFxcJ3RyYWNrQnlcXCcgaXMgcmVxdWlyZWQnKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuZGF0YSkge1xyXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FzaUJyZWFkY3J1bWJDb21wb25lbnQgOiBASW5wdXQgXFwnZGF0YVxcJyBpcyByZXF1aXJlZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLmNoZWNrSW5wdXQoKTtcclxuICB9XHJcblxyXG4gIC8vIFVzaW5nIG5nRG9DaGVjayBpbnN0ZWFkIG9mIG5nQ2hhbmdlcyB0byB1cGRhdGUgb24gZGVlcCBjaGFuZ2UgKHB1c2gvcG9wIGludG8gdGhlIGFycmF5KVxyXG4gIG5nRG9DaGVjaygpIHtcclxuICAgIGxldCBjaGFuZ2VzID0gdGhpcy5kaWZmZXIuZGlmZih0aGlzLmRhdGEpO1xyXG4gICAgaWYgKGNoYW5nZXMpIHtcclxuICAgICAgdGhpcy5yZWYuZGV0ZWN0Q2hhbmdlcygpO1xyXG4gICAgICBpZiAoY2hhbmdlcy5fY29sbGVjdGlvbikge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2hhZG93KGNoYW5nZXMuX2NvbGxlY3Rpb24pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMudXBkYXRlU2hhZG93KGNoYW5nZXMuY29sbGVjdGlvbik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIC8vIENvbXB1dGUgaG93IG1hbnkgZWxlbWVudHMgY2FuIGJlIHJlbmRlcmVkIGRlcGVuZGluZyBvbiBpbml0IHdpZHRoXHJcbiAgICBsZXQgYnJlYWRjcnVtYldpZHRoID0gdGhpcy5lbFJlZi5uYXRpdmVFbGVtZW50Lm9mZnNldFdpZHRoO1xyXG4gICAgLy8gKHdpZHRoIC0gKGhvbWUgd2lkdGgpIC0gKCcuLi4nIHdpZHRoKSkgLyBtYXggZWxlbWVudHMgc2l6ZVxyXG4gICAgdGhpcy5uYkVsZW1lbnRzTWF4ID0gTWF0aC5mbG9vcigoYnJlYWRjcnVtYldpZHRoIC0gMzAgLSA1MCkgLyAxMzApO1xyXG4gICAgLy8gc2V0VGltZW91dCgpIGF2b2lkIFwiRXhwcmVzc2lvbkNoYW5nZWRBZnRlckl0SGFzQmVlbkNoZWNrZWRFcnJvclwiIGV4Y2VwdGlvbiBpbiBkZXYgbW9kZVxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLnVwZGF0ZVNoYWRvdyh0aGlzLmRhdGEpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlU2hhZG93KG5ld1N0YWNrOiBBcnJheTxUPikge1xyXG4gICAgaWYgKG5ld1N0YWNrKSB7XHJcbiAgICAgIC8vIHRydWUgLT4gc2hvd2luZyAnLi4uJ1xyXG4gICAgICB0aGlzLmhpZGVFbGVtZW50cyA9IG5ld1N0YWNrLmxlbmd0aCA+IHRoaXMubmJFbGVtZW50c01heDtcclxuICAgICAgLy8ganVzdCBkaXNwbGF5IHRoZSBsYXN0ICduYkVsZW1lbnRzTWF4J1xyXG4gICAgICB0aGlzLnNoYWRvd0RhdGEgPSBuZXdTdGFjay5zbGljZSgwIC0gdGhpcy5uYkVsZW1lbnRzTWF4KTtcclxuICAgICAgdGhpcy5oaWRkZW5FbGVtZW50cyA9IG5ld1N0YWNrLnNsaWNlKDAsIE1hdGgubWF4KG5ld1N0YWNrLmxlbmd0aCAtIHRoaXMubmJFbGVtZW50c01heCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIGdldFRyYWNrZWRWYWx1ZShlbGVtZW50OiBhbnkpIHtcclxuICAgIGlmIChlbGVtZW50KSB7XHJcbiAgICAgIGNvbnN0IHRyYWNrZWRWYWx1ZTogYW55ID0gZWxlbWVudFt0aGlzLnRyYWNrQnldO1xyXG4gICAgICByZXR1cm4gdHJhY2tlZFZhbHVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgY2xpY2tPbkVsZW1lbnQoZWxlbWVudDogVCkge1xyXG4gICAgdGhpcy5lbGVtZW50c0Ryb3Bkb3duT3BlbmVkID0gZmFsc2U7XHJcbiAgICB0aGlzLmRhdGEgPSB0aGlzLmRhdGEuc2xpY2UoMCwgdGhpcy5kYXRhLmluZGV4T2YoZWxlbWVudCkgKyAxKTtcclxuICAgIHRoaXMudXBkYXRlU2hhZG93KHRoaXMuZGF0YSk7XHJcbiAgICB0aGlzLmNsaWNrZWQuZW1pdCh0aGlzLmRhdGEpO1xyXG4gIH1cclxufVxyXG4iXX0=