ngx-mat-lib
Version:
A bunch of utilities and components to use in your Angular 7+ apps!
171 lines (170 loc) • 16 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
*/
import { Component, ComponentFactoryResolver, Input, ViewContainerRef, ViewEncapsulation } from "@angular/core";
import { XmatLegendItemContentComponent } from "./xmat-legend-item-content.component";
import { XmatLegendLayouts } from "./xmat-legend.model";
import { coerceBooleanProperty } from "@angular/cdk/coercion";
import { each } from "lodash";
/** @type {?} */
const xmatLegendDefaultCols = 4;
export class XmatLegendComponent {
/**
* @param {?} _resolver
* @param {?} _viewContainerRef
*/
constructor(_resolver, _viewContainerRef) {
this._resolver = _resolver;
this._viewContainerRef = _viewContainerRef;
this.layout = XmatLegendLayouts.GRID;
this.itemStyle = {
"flex": `1 0 ${100 / xmatLegendDefaultCols}%`
};
this._columns = xmatLegendDefaultCols;
this._fillColumns = !0;
this._itemContentClass = XmatLegendItemContentComponent;
}
/**
* @return {?}
*/
get fillColumns() {
return this._fillColumns;
}
/**
* @param {?} newValue
* @return {?}
*/
set fillColumns(newValue) {
this._fillColumns = coerceBooleanProperty(newValue);
}
/**
* @return {?}
*/
get columns() {
return this._columns;
}
/**
* @param {?} newValue
* @return {?}
*/
set columns(newValue) {
if (!isNaN(+newValue) && +newValue > 0) {
this._columns = Math.floor(+newValue);
this._updateItemStyle();
this._legendInit();
}
else {
this._columns = xmatLegendDefaultCols;
console.error("XmatLegend invalid length provided, setting to default", newValue);
}
}
/**
* @return {?}
*/
get items() {
return this._items;
}
/**
* @param {?} newValue
* @return {?}
*/
set items(newValue) {
this._items = newValue;
this._legendInit();
}
/**
* @return {?}
*/
_constructContent() {
/** @type {?} */
const factory = this._resolver.resolveComponentFactory(this._itemContentClass);
this._itemContentRef = this._viewContainerRef.createComponent(factory);
return /** @type {?} */ (this._itemContentRef.instance);
}
/**
* @return {?}
*/
_legendInit() {
if (!Array.isArray(this.items)) {
console.warn("XmatLegend list was not ready. Init prevented.");
return !1;
}
if (this._fillColumns) {
/** @type {?} */
const fillerCount = (this._columns - (this.items.length % this._columns)) % this._columns;
each(new Array(fillerCount), () => {
this.items.push(/** @type {?} */ ({
content: `<span style="display: none"></span>`,
className: "xmat-grid-fill"
}));
});
}
each(this.items, (item) => {
if (typeof item.content === "string") {
/** @type {?} */
const tmpCompInstance = this._constructContent();
// this._xmatFunctions.logWithStyle("XmatLegend", "Was String Content", "#006699", item.content);
tmpCompInstance.content = item.content;
item.content = tmpCompInstance;
}
else if (item.content instanceof XmatLegendItemContentComponent) {
// Valid
// this._xmatFunctions.logWithStyle("XmatLegend", "Was Instance Content", "#336699", item.content);
}
else {
// this._xmatFunctions.logWithStyle("XmatLegend", "Was INVALID Content", "#CC0000", item.content);
// Hide broken ones?
}
});
}
/**
* @return {?}
*/
_updateItemStyle() {
this.itemStyle = {
"flex": `1 0 ${100 / this._columns}%`
};
return this.itemStyle;
}
}
XmatLegendComponent.decorators = [
{ type: Component, args: [{
selector: "xmat-legend",
template: "<ul class=\"xmat-legend xmat-legend-{{layout}}\" *ngIf=\"items?.length\">\n <li [ngStyle]=\"itemStyle\" class=\"{{item.className}}\" *ngFor=\"let item of items\">\n <div class=\"xmat-legend-color\" [style.backgroundColor]=\"item.color\" *ngIf=\"!!item.color\"></div>\n <img class=\"xmat-legend-image\" *ngIf=\"!!item?.image\" [src]=\"item.image\" />\n <div *ngTemplateOutlet=\"item.content.xMatLegendItemContent\">\n\n </div>\n </li>\n</ul>\n",
encapsulation: ViewEncapsulation.None,
styles: ["ul.xmat-legend{list-style-type:none;padding:0;margin:0}ul.xmat-legend.xmat-legend-grid{display:-webkit-box;display:flex;flex-wrap:wrap}ul.xmat-legend.xmat-legend-grid>li{padding:8px;margin:0;box-sizing:border-box}ul.xmat-legend.xmat-legend-grid>li.xmat-grid-fill{padding:0}ul.xmat-legend>li{line-height:24px;font-size:12px;margin:5px 10px;display:-webkit-box;display:flex;-webkit-box-align:center;align-items:center}ul.xmat-legend>li>*{margin-right:8px}ul.xmat-legend>li>div.xmat-legend-color{width:8px;height:8px;flex-shrink:0}ul.xmat-legend>li>img.xmat-legend-image{flex-shrink:0;height:24px}"]
}] }
];
/** @nocollapse */
XmatLegendComponent.ctorParameters = () => [
{ type: ComponentFactoryResolver },
{ type: ViewContainerRef }
];
XmatLegendComponent.propDecorators = {
fillColumns: [{ type: Input }],
columns: [{ type: Input }],
items: [{ type: Input }],
layout: [{ type: Input }]
};
if (false) {
/** @type {?} */
XmatLegendComponent.prototype.layout;
/** @type {?} */
XmatLegendComponent.prototype.itemStyle;
/** @type {?} */
XmatLegendComponent.prototype._columns;
/** @type {?} */
XmatLegendComponent.prototype._fillColumns;
/** @type {?} */
XmatLegendComponent.prototype._items;
/** @type {?} */
XmatLegendComponent.prototype._itemContentClass;
/** @type {?} */
XmatLegendComponent.prototype._itemContentRef;
/** @type {?} */
XmatLegendComponent.prototype._resolver;
/** @type {?} */
XmatLegendComponent.prototype._viewContainerRef;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoieG1hdC1sZWdlbmQuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LW1hdC1saWIvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy94bWF0LWxlZ2VuZC94bWF0LWxlZ2VuZC5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLE9BQU8sRUFDSCxTQUFTLEVBRVQsd0JBQXdCLEVBQ3hCLEtBQUssRUFDTCxnQkFBZ0IsRUFDaEIsaUJBQWlCLEVBQ3BCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBQyw4QkFBOEIsRUFBQyxNQUFNLHNDQUFzQyxDQUFDO0FBQ3BGLE9BQU8sRUFBbUMsaUJBQWlCLEVBQUMsTUFBTSxxQkFBcUIsQ0FBQztBQUN4RixPQUFPLEVBQUMscUJBQXFCLEVBQUMsTUFBTSx1QkFBdUIsQ0FBQztBQUc1RCxPQUFPLEVBQUMsSUFBSSxFQUFDLE1BQU0sUUFBUSxDQUFDOztBQUU1QixNQUFNLHFCQUFxQixHQUFXLENBQUMsQ0FBQztBQVN4QyxNQUFNLE9BQU8sbUJBQW1COzs7OztJQW1ENUIsWUFBb0IsU0FBbUMsRUFDbkM7UUFEQSxjQUFTLEdBQVQsU0FBUyxDQUEwQjtRQUNuQyxzQkFBaUIsR0FBakIsaUJBQWlCO1FBYnJDLGNBQW9DLGlCQUFpQixDQUFDLElBQUksQ0FBQztRQUUzRCxpQkFBaUM7WUFDN0IsTUFBTSxFQUFFLE9BQU8sR0FBRyxHQUFHLHFCQUFxQixHQUFHO1NBQ2hELENBQUM7d0JBRXlCLHFCQUFxQjs0QkFDaEIsQ0FBQyxDQUFDO2lDQUVOLDhCQUE4QjtLQU16RDs7OztJQW5ERCxJQUNJLFdBQVc7UUFDWCxPQUFPLElBQUksQ0FBQyxZQUFZLENBQUM7S0FDNUI7Ozs7O0lBRUQsSUFBSSxXQUFXLENBQUMsUUFBaUI7UUFDN0IsSUFBSSxDQUFDLFlBQVksR0FBRyxxQkFBcUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUN2RDs7OztJQUVELElBQ0ksT0FBTztRQUNQLE9BQU8s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LGdCQUFnQjs7OzBCQXVCZixLQUFLO3NCQVNMLEtBQUs7b0JBaUJMLEtBQUs7cUJBVUwsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgQ29tcG9uZW50LFxuICAgIENvbXBvbmVudFJlZixcbiAgICBDb21wb25lbnRGYWN0b3J5UmVzb2x2ZXIsXG4gICAgSW5wdXQsXG4gICAgVmlld0NvbnRhaW5lclJlZixcbiAgICBWaWV3RW5jYXBzdWxhdGlvblxufSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xuLy9cbmltcG9ydCB7WG1hdExlZ2VuZEl0ZW1Db250ZW50Q29tcG9uZW50fSBmcm9tIFwiLi94bWF0LWxlZ2VuZC1pdGVtLWNvbnRlbnQuY29tcG9uZW50XCI7XG5pbXBvcnQge1htYXRMZWdlbmRJdGVtLCBYbWF0TGVnZW5kTGF5b3V0LCBYbWF0TGVnZW5kTGF5b3V0c30gZnJvbSBcIi4veG1hdC1sZWdlbmQubW9kZWxcIjtcbmltcG9ydCB7Y29lcmNlQm9vbGVhblByb3BlcnR5fSBmcm9tIFwiQGFuZ3VsYXIvY2RrL2NvZXJjaW9uXCI7XG5pbXBvcnQge1htYXRMZWdlbmRJdGVtU3R5bGV9IGZyb20gXCIuL3htYXQtbGVnZW5kLm1vZGVsXCI7XG4vL1xuaW1wb3J0IHtlYWNofSBmcm9tIFwibG9kYXNoXCI7XG5cbmNvbnN0IHhtYXRMZWdlbmREZWZhdWx0Q29sczogbnVtYmVyID0gNDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6IFwieG1hdC1sZWdlbmRcIixcbiAgICB0ZW1wbGF0ZVVybDogXCIuL3htYXQtbGVnZW5kLmNvbXBvbmVudC5odG1sXCIsXG4gICAgc3R5bGVVcmxzOiBbXCIuL3htYXQtbGVnZW5kLmNvbXBvbmVudC5zY3NzXCJdLFxuICAgIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmVcbn0pXG5cbmV4cG9ydCBjbGFzcyBYbWF0TGVnZW5kQ29tcG9uZW50IHtcblxuXG4gICAgQElucHV0KClcbiAgICBnZXQgZmlsbENvbHVtbnMoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9maWxsQ29sdW1ucztcbiAgICB9XG5cbiAgICBzZXQgZmlsbENvbHVtbnMobmV3VmFsdWU6IGJvb2xlYW4pIHtcbiAgICAgICAgdGhpcy5fZmlsbENvbHVtbnMgPSBjb2VyY2VCb29sZWFuUHJvcGVydHkobmV3VmFsdWUpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpXG4gICAgZ2V0IGNvbHVtbnMoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbHVtbnM7XG4gICAgfVxuXG4gICAgc2V0IGNvbHVtbnMobmV3VmFsdWU6IG51bWJlcikge1xuICAgICAgICBpZiAoIWlzTmFOKCtuZXdWYWx1ZSkgJiYgK25ld1ZhbHVlID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IE1hdGguZmxvb3IoK25ld1ZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUl0ZW1TdHlsZSgpO1xuICAgICAgICAgICAgdGhpcy5fbGVnZW5kSW5pdCgpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY29sdW1ucyA9IHhtYXRMZWdlbmREZWZhdWx0Q29scztcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJYbWF0TGVnZW5kIGludmFsaWQgbGVuZ3RoIHByb3ZpZGVkLCBzZXR0aW5nIHRvIGRlZmF1bHRcIiwgbmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgQElucHV0KClcbiAgICBnZXQgaXRlbXMoKTogWG1hdExlZ2VuZEl0ZW1bXSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pdGVtcztcbiAgICB9XG5cbiAgICBzZXQgaXRlbXMobmV3VmFsdWU6IFhtYXRMZWdlbmRJdGVtW10pIHtcbiAgICAgICAgdGhpcy5faXRlbXMgPSBuZXdWYWx1ZTtcbiAgICAgICAgdGhpcy5fbGVnZW5kSW5pdCgpO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIGxheW91dDogWG1hdExlZ2VuZExheW91dCA9IFhtYXRMZWdlbmRMYXlvdXRzLkdSSUQ7XG5cbiAgICBpdGVtU3R5bGU6IFhtYXRMZWdlbmRJdGVtU3R5bGUgPSB7XG4gICAgICAgIFwiZmxleFwiOiBgMSAwICR7MTAwIC8geG1hdExlZ2VuZERlZmF1bHRDb2xzfSVgXG4gICAgfTtcblxuICAgIHByaXZhdGUgX2NvbHVtbnM6IG51bWJlciA9IHhtYXRMZWdlbmREZWZhdWx0Q29scztcbiAgICBwcml2YXRlIF9maWxsQ29sdW1uczogYm9vbGVhbiA9ICEwO1xuICAgIHByaXZhdGUgX2l0ZW1zOiBYbWF0TGVnZW5kSXRlbVtdO1xuICAgIHByaXZhdGUgX2l0ZW1Db250ZW50Q2xhc3MgPSBYbWF0TGVnZW5kSXRlbUNvbnRlbnRDb21wb25lbnQ7XG4gICAgcHJpdmF0ZSBfaXRlbUNvbnRlbnRSZWY6IENvbXBvbmVudFJlZjxYbWF0TGVnZW5kSXRlbUNvbnRlbnRDb21wb25lbnQ+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfcmVzb2x2ZXI6IENvbXBvbmVudEZhY3RvcnlSZXNvbHZlcixcbiAgICAgICAgICAgICAgICBwcml2YXRlIF92aWV3Q29udGFpbmVyUmVmOiBWaWV3Q29udGFpbmVyUmVmKSB7XG5cbiAgICB9XG5cbiAgICBwcml2YXRlIF9jb25zdHJ1Y3RDb250ZW50KCk6IFhtYXRMZWdlbmRJdGVtQ29udGVudENvbXBvbmVudCB7XG4gICAgICAgIGNvbnN0IGZhY3RvcnkgPSB0aGlzLl9yZXNvbHZlci5yZXNvbHZlQ29tcG9uZW50RmFjdG9yeSh0aGlzLl9pdGVtQ29udGVudENsYXNzKTtcbiAgICAgICAgdGhpcy5faXRlbUNvbnRlbnRSZWYgPSB0aGlzLl92aWV3Q29udGFpbmVyUmVmLmNyZWF0ZUNvbXBvbmVudChmYWN0b3J5KTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2l0ZW1Db250ZW50UmVmLmluc3RhbmNlIGFzIFhtYXRMZWdlbmRJdGVtQ29udGVudENvbXBvbmVudDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9sZWdlbmRJbml0KCkge1xuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodGhpcy5pdGVtcykpIHtcbiAgICAgICAgICAgIGNvbnNvbGUud2FybihcIlhtYXRMZWdlbmQgbGlzdCB3YXMgbm90IHJlYWR5LiBJbml0IHByZXZlbnRlZC5cIik7XG4gICAgICAgICAgICByZXR1cm4gITE7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2ZpbGxDb2x1bW5zKSB7XG4gICAgICAgICAgICBjb25zdCBmaWxsZXJDb3VudCA9ICh0aGlzLl9jb2x1bW5zIC0gKHRoaXMuaXRlbXMubGVuZ3RoICUgdGhpcy5fY29sdW1ucykpICUgdGhpcy5fY29sdW1ucztcbiAgICAgICAgICAgIGVhY2gobmV3IEFycmF5KGZpbGxlckNvdW50KSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudDogYDxzcGFuIHN0eWxlPVwiZGlzcGxheTogbm9uZVwiPjwvc3Bhbj5gLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lOiBcInhtYXQtZ3JpZC1maWxsXCJcbiAgICAgICAgICAgICAgICAgICAgfSBhcyBYbWF0TGVnZW5kSXRlbSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgICBlYWNoKHRoaXMuaXRlbXMsIChpdGVtOiBYbWF0TGVnZW5kSXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpdGVtLmNvbnRlbnQgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0bXBDb21wSW5zdGFuY2UgPSB0aGlzLl9jb25zdHJ1Y3RDb250ZW50KCk7XG4gICAgICAgICAgICAgICAgLy8gdGhpcy5feG1hdEZ1bmN0aW9ucy5sb2dXaXRoU3R5bGUoXCJYbWF0TGVnZW5kXCIsIFwiV2FzIFN0cmluZyBDb250ZW50XCIsIFwiIzAwNjY5OVwiLCBpdGVtLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIHRtcENvbXBJbnN0YW5jZS5jb250ZW50ID0gaXRlbS5jb250ZW50O1xuICAgICAgICAgICAgICAgIGl0ZW0uY29udGVudCA9IHRtcENvbXBJbnN0YW5jZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGl0ZW0uY29udGVudCBpbnN0YW5jZW9mIFhtYXRMZWdlbmRJdGVtQ29udGVudENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAgIC8vIFZhbGlkXG4gICAgICAgICAgICAgICAgLy8gdGhpcy5feG1hdEZ1bmN0aW9ucy5sb2dXaXRoU3R5bGUoXCJYbWF0TGVnZW5kXCIsIFwiV2FzIEluc3RhbmNlIENvbnRlbnRcIiwgXCIjMzM2Njk5XCIsIGl0ZW0uY29udGVudCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyB0aGlzLl94bWF0RnVuY3Rpb25zLmxvZ1dpdGhTdHlsZShcIlhtYXRMZWdlbmRcIiwgXCJXYXMgSU5WQUxJRCBDb250ZW50XCIsIFwiI0NDMDAwMFwiLCBpdGVtLmNvbnRlbnQpO1xuICAgICAgICAgICAgICAgIC8vIEhpZGUgYnJva2VuIG9uZXM/XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfdXBkYXRlSXRlbVN0eWxlKCk6IFhtYXRMZWdlbmRJdGVtU3R5bGUge1xuICAgICAgICB0aGlzLml0ZW1TdHlsZSA9IHtcbiAgICAgICAgICAgIFwiZmxleFwiOiBgMSAwICR7MTAwIC8gdGhpcy5fY29sdW1uc30lYFxuICAgICAgICB9O1xuICAgICAgICByZXR1cm4gdGhpcy5pdGVtU3R5bGU7XG4gICAgfVxuXG59XG4iXX0=