UNPKG

ngx-firebase-cms

Version:

Angular Content Management System using Google Firebase (Authentication, Storage & Firestore)

229 lines 16.6 kB
/** * @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=