ngx-firebase-cms
Version:
Angular Content Management System using Google Firebase (Authentication, Storage & Firestore)
229 lines • 16.6 kB
JavaScript
/**
* @fileoverview added by tsickle
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
*/
import { Component, Input } from '@angular/core';
import { getInterpolation } from '../../service/helper.service';
import { Router, ActivatedRoute } from '@angular/router';
var TableComponent = /** @class */ (function () {
function TableComponent(router, route) {
this.router = router;
this.route = route;
this.headers = [];
this.fullData = [];
this.displayData = [];
this.tableLoading = true;
this.noPerPage = 10;
this.listOfSearchValue = [];
this.filterList = {};
}
Object.defineProperty(TableComponent.prototype, "data", {
set: /**
* @param {?} value
* @return {?}
*/
function (value) {
this.fullData = value;
this.displayData = value;
this.tableLoading = false;
this.getFilterList();
},
enumerable: true,
configurable: true
});
/**
* @return {?}
*/
TableComponent.prototype.ngOnInit = /**
* @return {?}
*/
function () {
};
/* Filtering & Sorting */
/* Filtering & Sorting */
/**
* @return {?}
*/
TableComponent.prototype.getFilterList = /* Filtering & Sorting */
/**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var filterKeys = this.headers.filter((/**
* @param {?} res
* @return {?}
*/
function (res) { return res['canFilter']; })).map((/**
* @param {?} res
* @return {?}
*/
function (res) { return res['key']; }));
filterKeys.forEach((/**
* @param {?} key
* @return {?}
*/
function (key) {
_this.filterList[key] = _this.fullData.map((/**
* @param {?} res
* @return {?}
*/
function (res) { return res[key]; })).filter((/**
* @param {?} value
* @param {?} index
* @param {?} self
* @return {?}
*/
function (value, index, self) { return self.indexOf(value) === index; })).sort((/**
* @param {?} a
* @param {?} b
* @return {?}
*/
function (a, b) { return (a > b ? 1 : -1); })).map((/**
* @param {?} res
* @return {?}
*/
function (res) { return { "text": res, "value": res }; }));
}));
};
/**
* @param {?} sort
* @return {?}
*/
TableComponent.prototype.sort = /**
* @param {?} sort
* @return {?}
*/
function (sort) {
this.sortName = sort.key;
this.sortValue = sort.value;
this.search();
};
/**
* @param {?} event
* @param {?} uuid
* @return {?}
*/
TableComponent.prototype.filter = /**
* @param {?} event
* @param {?} uuid
* @return {?}
*/
function (event, uuid) {
this.listOfSearchValue = event;
this.searchKey = uuid;
this.search();
};
/**
* @return {?}
*/
TableComponent.prototype.search = /**
* @return {?}
*/
function () {
var _this = this;
/** @type {?} */
var filterFunc = (/**
* @param {?} item
* @return {?}
*/
function (item) { return _this.listOfSearchValue.length ? _this.listOfSearchValue.some((/**
* @param {?} name
* @return {?}
*/
function (name) { return item[_this.searchKey].indexOf(name) !== -1; })) : true; });
/** @type {?} */
var data = this.fullData.filter((/**
* @param {?} item
* @return {?}
*/
function (item) { return filterFunc(item); }));
if (this.sortName && this.sortValue) {
this.displayData = data.sort((/**
* @param {?} a
* @param {?} b
* @return {?}
*/
function (a, b) { return (_this.sortValue === 'ascend') ? (a[_this.sortName] > b[_this.sortName] ? 1 : -1) : (b[_this.sortName] > a[_this.sortName] ? 1 : -1); }));
}
else {
this.displayData = data;
}
};
/**
* @param {?} url
* @param {?} data
* @return {?}
*/
TableComponent.prototype.goTo = /**
* @param {?} url
* @param {?} data
* @return {?}
*/
function (url, data) {
if (url) {
getInterpolation(url).forEach((/**
* @param {?} key
* @return {?}
*/
function (key) {
/** @type {?} */
var replacement = data[key] || "";
url = url.split("${" + key + "}").join(replacement);
}));
this.router.navigate([url], { relativeTo: this.route });
}
};
TableComponent.decorators = [
{ type: Component, args: [{
selector: 'aq-table',
template: "<nz-table #basicTable [nzData]=\"displayData\" class=\"table\" [nzPageSize]=\"noPerPage\">\n <thead (nzSortChange)=\"sort($event)\" nzSingleSort>\n <tr>\n <ng-template ngFor let-header [ngForOf]=\"headers\">\n <th *ngIf=\"!header.canSort && !header.canFilter\">{{ header?.label }}</th>\n <th *ngIf=\"!header.canSort && header.canFilter\" nzShowFilter [nzFilters]=\"filterList[header?.key] || []\"\n (nzFilterChange)=\"filter($event, header?.key)\">{{ header?.label }}</th>\n <th *ngIf=\"header.canSort && !header.canFilter\" [nzSortKey]=\"header?.key\" nzShowSort>{{ header?.label }}</th>\n <th *ngIf=\"header.canSort && header.canFilter\" [nzSortKey]=\"header?.key\" nzShowSort nzShowFilter\n [nzFilters]=\"filterList[header?.key] || []\" (nzFilterChange)=\"filter($event, header?.key)\">{{ header?.label }}\n </th>\n </ng-template>\n </tr>\n </thead>\n <tbody>\n <ng-template ngFor let-data [ngForOf]=\"basicTable.data\">\n <tr>\n <td *ngFor=\"let header of headers\">\n <a [ngClass]='{\"disableLink\": !header.routerLink }' (click)=\"goTo(header.routerLink, data)\">\n <ng-template [ngIf]=\"header.pipe == 'date'\">{{ data[header.key].toDate() | date : header.pipeParameter}}\n </ng-template>\n <ng-template [ngIf]=\"header.pipe == 'user'\">\n <ng-container *ngIf=\"data[header.key] | user : header.pipeParameter | async as user; else loading\">\n <ng-container *ngIf=\"user; else noItems\">{{ user }}</ng-container>\n <ng-template #noItems>{{data[header.key]}}</ng-template>\n </ng-container>\n <ng-template #loading><i nz-icon type=\"loading\" theme=\"outline\"></i></ng-template>\n </ng-template>\n <ng-template [ngIf]=\"!header.pipe\">{{ data[header.key]}}</ng-template>\n </a>\n </td>\n </tr>\n </ng-template>\n </tbody>\n</nz-table>",
styles: [".table{margin-top:20px}::ng-deep .table table{background-color:#fff}::ng-deep .ant-table-pagination.ant-pagination{margin-right:20px}::ng-deep .disableLink,::ng-deep .disableLink:active,::ng-deep .disableLink:focus,::ng-deep .disableLink:focus-within,::ng-deep .disableLink:hover,::ng-deep .disableLink:visited{color:rgba(0,0,0,.65);cursor:auto;text-decoration:none}"]
}] }
];
/** @nocollapse */
TableComponent.ctorParameters = function () { return [
{ type: Router },
{ type: ActivatedRoute }
]; };
TableComponent.propDecorators = {
data: [{ type: Input }],
headers: [{ type: Input }]
};
return TableComponent;
}());
export { TableComponent };
if (false) {
/** @type {?} */
TableComponent.prototype.headers;
/** @type {?} */
TableComponent.prototype.fullData;
/** @type {?} */
TableComponent.prototype.displayData;
/** @type {?} */
TableComponent.prototype.tableLoading;
/** @type {?} */
TableComponent.prototype.noPerPage;
/** @type {?} */
TableComponent.prototype.sortName;
/** @type {?} */
TableComponent.prototype.sortValue;
/** @type {?} */
TableComponent.prototype.listOfSearchValue;
/** @type {?} */
TableComponent.prototype.searchKey;
/** @type {?} */
TableComponent.prototype.filterList;
/**
* @type {?}
* @private
*/
TableComponent.prototype.router;
/**
* @type {?}
* @private
*/
TableComponent.prototype.route;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWZpcmViYXNlLWNtcy8iLCJzb3VyY2VzIjpbImxpYi9zaGFyZWQvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXpEO0lBMkJFLHdCQUNVLE1BQWMsRUFDZCxLQUFxQjtRQURyQixXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsVUFBSyxHQUFMLEtBQUssQ0FBZ0I7UUFoQnRCLFlBQU8sR0FBRyxFQUFFLENBQUE7UUFDckIsYUFBUSxHQUFHLEVBQUUsQ0FBQTtRQUNiLGdCQUFXLEdBQUcsRUFBRSxDQUFBO1FBQ2hCLGlCQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ25CLGNBQVMsR0FBRyxFQUFFLENBQUE7UUFLZCxzQkFBaUIsR0FBRyxFQUFFLENBQUE7UUFFdEIsZUFBVSxHQUFHLEVBQUUsQ0FBQTtJQU1YLENBQUM7SUF2Qkwsc0JBQWEsZ0NBQUk7Ozs7O1FBQWpCLFVBQWtCLEtBQVU7WUFDMUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUE7WUFDckIsSUFBSSxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUE7WUFDeEIsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUE7WUFDekIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFBO1FBQ3RCLENBQUM7OztPQUFBOzs7O0lBb0JELGlDQUFROzs7SUFBUjtJQUNBLENBQUM7SUFFRCx5QkFBeUI7Ozs7O0lBQ3pCLHNDQUFhOzs7O0lBQWI7UUFBQSxpQkFLQzs7WUFKSyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFN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ZW50LCBPbkluaXQsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBnZXRJbnRlcnBvbGF0aW9uIH0gZnJvbSAnLi4vLi4vc2VydmljZS9oZWxwZXIuc2VydmljZSc7XG5pbXBvcnQgeyBSb3V0ZXIsIEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYXEtdGFibGUnLFxuICB0ZW1wbGF0ZVVybDogJy4vdGFibGUuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuY3NzJ11cbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBcbiAgQElucHV0KCkgc2V0IGRhdGEodmFsdWU6IGFueSkge1xuICAgIHRoaXMuZnVsbERhdGEgPSB2YWx1ZVxuICAgIHRoaXMuZGlzcGxheURhdGEgPSB2YWx1ZVxuICAgIHRoaXMudGFibGVMb2FkaW5nID0gZmFsc2VcbiAgICB0aGlzLmdldEZpbHRlckxpc3QoKVxuICB9XG4gIEBJbnB1dCgpIGhlYWRlcnMgPSBbXVxuICBmdWxsRGF0YSA9IFtdXG4gIGRpc3BsYXlEYXRhID0gW11cbiAgdGFibGVMb2FkaW5nID0gdHJ1ZVxuICBub1BlclBhZ2UgPSAxMFxuXG4gIC8vIHNvcnQgJiBmaWx0ZXJcbiAgc29ydE5hbWVcbiAgc29ydFZhbHVlXG4gIGxpc3RPZlNlYXJjaFZhbHVlID0gW11cbiAgc2VhcmNoS2V5XG4gIGZpbHRlckxpc3QgPSB7fVxuIFxuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSByb3V0ZTogQWN0aXZhdGVkUm91dGVcbiAgKSB7IH1cblxuICBuZ09uSW5pdCgpIHtcbiAgfVxuXG4gIC8qIEZpbHRlcmluZyAmIFNvcnRpbmcgKi9cbiAgZ2V0RmlsdGVyTGlzdCgpIHtcbiAgICBsZXQgZmlsdGVyS2V5cyA9IHRoaXMuaGVhZGVycy5maWx0ZXIocmVzID0+IHJlc1snY2FuRmlsdGVyJ10pLm1hcChyZXMgPT4gcmVzWydrZXknXSlcbiAgICBmaWx0ZXJLZXlzLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIHRoaXMuZmlsdGVyTGlzdFtrZXldID0gdGhpcy5mdWxsRGF0YS5tYXAocmVzID0+IHJlc1trZXldKS5maWx0ZXIoKHZhbHVlLCBpbmRleCwgc2VsZikgPT4gc2VsZi5pbmRleE9mKHZhbHVlKSA9PT0gaW5kZXgpLnNvcnQoKGEsIGIpID0+IChhID4gYiA/IDEgOiAtMSkpLm1hcChyZXMgPT4ge3JldHVybiB7IFwidGV4dFwiOiByZXMsIFwidmFsdWVcIjogcmVzIH19KVxuICAgIH0pXG4gIH1cblxuICBzb3J0KHNvcnQ6IHsga2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcgfSkge1xuICAgIHRoaXMuc29ydE5hbWUgPSBzb3J0LmtleTtcbiAgICB0aGlzLnNvcnRWYWx1ZSA9IHNvcnQudmFsdWU7XG4gICAgdGhpcy5zZWFyY2goKTtcbiAgfVxuXG4gIGZpbHRlcihldmVudCwgdXVpZCkge1xuICAgIHRoaXMubGlzdE9mU2VhcmNoVmFsdWUgPSBldmVudDtcbiAgICB0aGlzLnNlYXJjaEtleSA9IHV1aWQ7XG4gICAgdGhpcy5zZWFyY2goKTtcbiAgfVxuXG4gIHNlYXJjaCgpIHtcbiAgICBjb25zdCBmaWx0ZXJGdW5jID0gaXRlbSA9PiB0aGlzLmxpc3RPZlNlYXJjaFZhbHVlLmxlbmd0aCA/IHRoaXMubGlzdE9mU2VhcmNoVmFsdWUuc29tZShuYW1lID0+IGl0ZW1bdGhpcy5zZWFyY2hLZXldLmluZGV4T2YobmFtZSkgIT09IC0xKSA6IHRydWU7XG4gICAgY29uc3QgZGF0YSA9IHRoaXMuZnVsbERhdGEuZmlsdGVyKGl0ZW0gPT4gZmlsdGVyRnVuYyhpdGVtKSlcbiAgICBpZiAodGhpcy5zb3J0TmFtZSAmJiB0aGlzLnNvcnRWYWx1ZSkge1xuICAgICAgdGhpcy5kaXNwbGF5RGF0YSA9IGRhdGEuc29ydCgoYSwgYikgPT4gKHRoaXMuc29ydFZhbHVlID09PSAnYXNjZW5kJykgPyAoYVt0aGlzLnNvcnROYW1lXSA+IGJbdGhpcy5zb3J0TmFtZV0gPyAxIDogLTEpIDogKGJbdGhpcy5zb3J0TmFtZV0gPiBhW3RoaXMuc29ydE5hbWVdID8gMSA6IC0xKSlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kaXNwbGF5RGF0YSA9IGRhdGFcbiAgICB9XG4gIH1cblxuICBnb1RvKHVybCwgZGF0YSkge1xuICAgIGlmICh1cmwpIHtcbiAgICAgIGdldEludGVycG9sYXRpb24odXJsKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGxldCByZXBsYWNlbWVudCA9IGRhdGFba2V5XSB8fCBcIlwiXG4gICAgICAgIHVybCA9IHVybC5zcGxpdChcIiR7XCIra2V5K1wifVwiKS5qb2luKHJlcGxhY2VtZW50KVxuICAgICAgfSlcbiAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdLCB7cmVsYXRpdmVUbzogdGhpcy5yb3V0ZX0pXG4gICAgfVxuICB9XG4gIFxuXG59XG4iXX0=