@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
JavaScript
/**
* @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=