@universis/ngx-tables 6.1.2 → 6.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["node_modules/tslib/tslib.es6.js","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table.formatters.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-filter-value-provider.service.ts","ng://@universis/ngx-tables/lib/components/column-selector/column-selector.component.ts","ng://@universis/ngx-tables/lib/components/column-selector/column-selector.service.ts","ng://@universis/ngx-tables/lib/tables.activated-table.service.ts","ng://@universis/ngx-tables/lib/directives/btnexp.directive.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table.component.ts","ng://@universis/ngx-tables/lib/components/advanced-list/advanced-list.component.ts","ng://@universis/ngx-tables/lib/components/advanced-row-action/advanced-row-action.component.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table-search-base.ts","ng://@universis/ngx-tables/lib/components/advanced-search-form/advanced-search-form.component.ts","ng://@universis/ngx-tables/lib/components/advanced-table-modal/advanced-table-modal-base.component.ts","ng://@universis/ngx-tables/lib/components/advanced-select/advanced-select.component.ts","ng://@universis/ngx-tables/lib/components/advanced-select/advanced-select.service.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table-resolvers.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table-settings.component.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table-search.component.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table.formatters.interface.ts","ng://@universis/ngx-tables/lib/components/table-simple-header/table-simple-header.component.ts","ng://@universis/ngx-tables/lib/directives/advanced-table-editor.directive.ts","ng://@universis/ngx-tables/lib/services/advanced-aggregator/advanced-aggregator.service.ts","ng://@universis/ngx-tables/lib/components/advanced-aggregator/advanced-aggregator.component.ts","ng://@universis/ngx-tables/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.ts","ng://@universis/ngx-tables/lib/components/add-items/add-items.component.ts","ng://@universis/ngx-tables/lib/pipes/advanced-aggregator.pipe.ts","ng://@universis/ngx-tables/lib/pipes/advansed-aggregator-list-title-parse.pipe.ts","ng://@universis/ngx-tables/lib/i18n/tables.el.ts","ng://@universis/ngx-tables/lib/i18n/tables.en.ts","ng://@universis/ngx-tables/lib/actions/table.actions.ts","ng://@universis/ngx-tables/lib/reducers/index.ts","ng://@universis/ngx-tables/lib/directives/advance-table-state.directive.ts","ng://@universis/ngx-tables/lib/directives/advance-search-state.directive.ts","ng://@universis/ngx-tables/lib/directives/advanced-search-router-state.directive.ts","ng://@universis/ngx-tables/lib/tables.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { template, at } from 'lodash';\nimport { TableColumnConfiguration } from './advanced-table.interfaces';\nimport { Injector } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DatePipe } from '@angular/common';\nimport * as ISO6391 from 'iso-639-1/build';\nimport { ActivatedRoute, NavigationExtras, Router, UrlTree } from '@angular/router';\ndeclare var jQuery: any;\nexport abstract class AdvancedColumnFormatter implements TableColumnConfiguration {\n\n public static templateCache = new Map<string, (data: any) => string>();\n\n protected injector?: Injector;\n public className?: string;\n public defaultContent?: string;\n public formatString?: string;\n public formatter?: string;\n public hidden?: boolean;\n public name?: string;\n public order?: string;\n public property?: string;\n public sortable?: boolean;\n public title = '';\n public formatOptions?: any;\n public actions?: Array<any>;\n\n public static template(expr: string): (data: any) => string {\n let result = AdvancedColumnFormatter.templateCache.get(expr);\n if (typeof result === 'function') {\n return result;\n }\n result = template(expr);\n AdvancedColumnFormatter.templateCache.set(expr, result);\n return result;\n }\n\n public abstract render(data: any, type: string, row: any, meta: any): any;\n\n protected createUrlTree(data: any, options: { commands: any[], navigationExtras?: NavigationExtras }): UrlTree | undefined {\n if (Array.isArray(options.commands) && this.injector) {\n const activatedRoute: ActivatedRoute = this.injector.get(ActivatedRoute);\n const router: Router = this.injector.get(Router);\n const commands = options.commands.map((command) => {\n if (typeof command === 'string') {\n return AdvancedColumnFormatter.template(command)(data);\n }\n if (command.outlets) {\n const commandOutlets = {};\n Object.keys(command.outlets).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(command.outlets, key)) {\n const outlet = command.outlets[key];\n if (Array.isArray(outlet)) {\n Object.defineProperty(commandOutlets, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: outlet.map((x) => {\n return AdvancedColumnFormatter.template(x)(data);\n }),\n });\n } else {\n Object.defineProperty(commandOutlets, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: outlet,\n });\n }\n }\n });\n return {\n outlets: commandOutlets,\n };\n }\n return command;\n });\n const queryParams = {};\n let replaceUrl = true;\n const queryParamExtras = options.navigationExtras && options.navigationExtras.queryParams;\n if (queryParamExtras) {\n Object.keys(queryParamExtras).map((key) => {\n const text = queryParamExtras[key];\n queryParams[key] = AdvancedColumnFormatter.template(text)(data);\n });\n }\n if (options.navigationExtras && typeof options.navigationExtras.replaceUrl !== 'undefined') {\n replaceUrl = options.navigationExtras.replaceUrl;\n }\n let skipLocationChange = false;\n if (options.navigationExtras && typeof options.navigationExtras.skipLocationChange !== 'undefined') {\n skipLocationChange = options.navigationExtras.skipLocationChange;\n }\n\n let fragment: string | undefined;\n if (options.navigationExtras && typeof options.navigationExtras.fragment !== 'undefined') {\n fragment = options.navigationExtras.fragment;\n }\n\n return router.createUrlTree(commands,\n {\n fragment,\n relativeTo: activatedRoute,\n queryParams,\n replaceUrl,\n skipLocationChange,\n }\n );\n }\n }\n}\n\nexport interface OnAdvancedColumnAfterRender {\n afterRender(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number): void;\n}\n\nexport class NestedPropertyFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n return at(row, column.data.replace(/\\//g, '.'));\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class ButtonFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n if (data == null || this.injector == null) {\n return '';\n }\n // get format options\n const formatOptions = Object.assign({\n buttonClass: 'btn btn-default',\n }, this.formatOptions);\n // get text content\n let buttonText: string;\n let buttonTitle = '';\n if (formatOptions.buttonText) {\n buttonText = this.injector.get(TranslateService).instant(formatOptions.buttonText);\n } else {\n buttonText = formatOptions.buttonContent;\n }\n if (formatOptions.buttonTitle) {\n buttonTitle = this.injector.get(TranslateService).instant(formatOptions.buttonTitle);\n }\n if (Array.isArray(this.formatOptions.commands)) {\n const routerLink = this.createUrlTree(row, this.formatOptions);\n return `<a class=\"${formatOptions.buttonClass}\" title=\"${buttonTitle}\" href=\"#${routerLink}\">${buttonText}</a>`;\n }\n // and return button\n const href = AdvancedColumnFormatter.template(this.formatString as string)(row);\n return `<a class=\"${formatOptions.buttonClass}\" title=\"${buttonTitle}\" href=\"${href}\">${buttonText}</a>`;\n }\n constructor() {\n super();\n }\n}\n\nexport class LinkFormatter extends AdvancedColumnFormatter {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n return `<a href=\"${(AdvancedColumnFormatter.template(this.formatString as string)(row))}\">${data}</a>`;\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class ActionLinkFormatter extends AdvancedColumnFormatter\n implements OnAdvancedColumnAfterRender {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n\n if (column && column.data) {\n const actions = this.actions || [];\n let index = 1;\n for (const action of actions) {\n Object.assign(action, {\n name: action.name || `action${index}`,\n });\n index += 1;\n }\n // return the dropdown menu with 3 dots\n return `<div class='dropdown details-control' data-id='${data}' data-type='student' >\n <a id=\"dropdownMenuButton-${data}\"\n data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span class=\"fa-2x text-dots\"></span>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton-${data}\">\n ${actions.map((x) => {\n if (x.type === 'divider') {\n return `<div class=\"dropdown-divider\"></div>`;\n }\n if (x.formatOptions && x.formatOptions.commands) {\n const urlTree = this.createUrlTree(row, x.formatOptions);\n return `<a data-name='${x.name}' class=\"dropdown-item${typeof x.className === 'string' && x.className.length\n ? ` ${x.className.trim()}` : ''}\" href=\"#${urlTree && urlTree.toString()}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n }\n return `<a data-name='${x.name}' class=\"dropdown-item${typeof x.className === 'string' && x.className.length\n ? ` ${x.className.trim()}` : ''}\" href=\"${AdvancedColumnFormatter.template(x.href)(row)}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n })\n .join('')}\n </div>\n </div>`;\n }\n return data;\n }\n\n constructor() {\n super();\n }\n public afterRender(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number): void {\n // assign bootstrap dropdown (?)\n }\n}\n\nexport class ActionButtonFormatter extends AdvancedColumnFormatter\n implements OnAdvancedColumnAfterRender {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n\n if (column && column.data && this.injector) {\n const actions = this.actions || [];\n let index = 1;\n for (const action of actions) {\n Object.assign(action, {\n name: action.name || `action${index}`,\n });\n index += 1;\n }\n let buttonText: string | undefined;\n if (this.formatOptions && this.formatOptions.buttonText) {\n // if button text is a literal expression\n if (this.formatOptions.buttonText.includes('${')) {\n // use template\n buttonText = AdvancedColumnFormatter.template(this.formatOptions.buttonText)(row);\n } else {\n // otherwise translate it\n buttonText = this.injector.get(TranslateService).instant(this.formatOptions.buttonText);\n }\n }\n let buttonTitle: string | undefined;\n if (this.formatOptions && this.formatOptions.buttonTitle) {\n buttonTitle = this.injector.get(TranslateService).instant(this.formatOptions.buttonTbuttonTitleext);\n }\n const buttonClass = (this.formatOptions && this.formatOptions.buttonClass) || 'btn btn-light';\n // return the dropdown menu with 3 dots\n return `<div class='dropdown details-control' data-id='${data}'>\n <a class=\"${buttonClass} dropdown-toggle\" href=\"#\" role=\"button\" title=\"${buttonTitle}\"\n id=\"dropdownMenuButton-${data}\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n ${buttonText}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton-${data}\">\n ${actions.map((x) => {\n if (x.type === 'divider') {\n return `<div class=\"dropdown-divider\"></div>`;\n }\n if (x.commands) {\n const urlTree = this.createUrlTree(row, x);\n return `<a class=\"dropdown-item\" href=\"#${urlTree && urlTree.toString()}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n }\n return `<a class=\"dropdown-item\" href=\"${AdvancedColumnFormatter.template(x.href)(row)}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n })\n .join('')}\n </div>\n </div>`;\n }\n return data;\n }\n\n constructor() {\n super();\n }\n public afterRender(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number): void {\n // assign bootstrap dropdown (?)\n }\n}\n\nexport class ActionSplitButtonFormatter extends AdvancedColumnFormatter\n implements OnAdvancedColumnAfterRender {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n\n if (column && column.data) {\n const actions = this.actions || [];\n let index = 1;\n for (const action of actions) {\n Object.assign(action, {\n name: action.name || `action${index}`,\n });\n index += 1;\n }\n if (actions.length === 0) {\n return;\n }\n const buttonClass = (this.formatOptions && this.formatOptions.buttonClass) || 'btn btn-light';\n // return the dropdown menu with 3 dots\n const defaultAction = actions[0];\n let defaultActionHref: string;\n if (defaultAction && defaultAction.commands) {\n const urlTree = this.createUrlTree(row, defaultAction);\n defaultActionHref = '#' + (urlTree && urlTree.toString());\n } else {\n defaultActionHref = AdvancedColumnFormatter.template(defaultAction.href)(row);\n }\n return `<div class=\"btn-group\">\n <a type=\"button\" class=\"${buttonClass}\" href=\"${defaultActionHref}\">\n ${this.injector && this.injector.get(TranslateService).instant(defaultAction.title)}\n </a>\n <button type=\"button\" class=\"${buttonClass} dropdown-toggle dropdown-toggle-split\"\n data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span class=\"sr-only\">${this.injector && this.injector.get(TranslateService).instant('Toggle Dropdown')}</span>\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton-${data}\">\n ${actions.map((x) => {\n if (x.title === '-') {\n return `<div class=\"dropdown-divider\"></div>`;\n }\n if (x.commands) {\n const urlTree = this.createUrlTree(row, x);\n return `<a class=\"dropdown-item\" href=\"#${urlTree && urlTree.toString()}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n }\n return `<a class=\"dropdown-item\" href=\"${AdvancedColumnFormatter.template(x.href)(row)}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n })\n .join('')}\n </div>\n </div>`;\n }\n return data;\n }\n\n constructor() {\n super();\n }\n public afterRender(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number): void {\n // assign bootstrap dropdown (?)\n }\n}\n\nexport class SelectRowFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n const _tpl = `<input class=\"checkbox checkbox-theme\" type=\"checkbox\"\n id=\"s-${meta.row}\" /><label for=\"s-${meta.row}\">&nbsp;</label>`;\n return AdvancedColumnFormatter.template(_tpl)(row);\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class TemplateFormatter extends AdvancedColumnFormatter {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n return AdvancedColumnFormatter.template(this.formatString as string)(row);\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class TrueFalseFormatter extends AdvancedColumnFormatter {\n\n public render(data, type, row, meta) {\n return data ? (this.injector && this.injector.get(TranslateService).instant('TrueFalse.long.Yes')) :\n (this.injector && this.injector.get(TranslateService).instant('TrueFalse.long.No'));\n }\n\n constructor() {\n super();\n }\n}\n\ndeclare interface TranslationFormatterTemplate {\n translateTemplate?: (data: any) => string;\n}\n\nexport class TranslationFormatter extends AdvancedColumnFormatter {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column: TranslationFormatterTemplate = meta.settings.aoColumns[meta.col];\n if (column && data != null) {\n return this.injector && this.injector.get(TranslateService).instant(\n AdvancedColumnFormatter.template(this.formatString as string)({\n value: data,\n }));\n }\n return this.injector && this.injector.get(TranslateService).instant('Unknown');\n }\n constructor() {\n super();\n }\n}\n\nexport class DateTimeFormatter extends AdvancedColumnFormatter {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data && this.injector) {\n const datePipe: DatePipe = new DatePipe(this.injector.get(TranslateService).currentLang);\n if (typeof data === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\+\\d{2}$/.test(data)) {\n return datePipe.transform(new Date(data + ':00'), this.formatString);\n }\n return datePipe.transform(data, this.formatString);\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class NgClassFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n // get formatOptions\n if (this.formatOptions) {\n const ngClass = this.formatOptions.ngClass;\n // check condition for each key\n column.ngClassTemplates = column.ngClassTemplates || {};\n for (const key of Object.keys(ngClass)) {\n const result = AdvancedColumnFormatter.template(ngClass[key])(row);\n const fn = new Function(`return ${result};`);\n // if condition returns true add class\n if (fn() === true) {\n return `<span class=\"${key}\">${data}</span>`;\n }\n }\n }\n return data;\n }\n return data;\n }\n constructor() {\n super();\n }\n}\nexport class LanguageFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n if (data) {\n return ISO6391.getNativeName(data);\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TemplatePipe } from '@universis/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AdvancedFilterValueProvider {\n\n public values = { };\n private _template: TemplatePipe;\n\n constructor() {\n this._template = new TemplatePipe();\n }\n\n buildFilter(filter) {\n if (filter) {\n return this._template.transform(filter, this.values);\n }\n }\n\n async asyncBuildFilter(filter) {\n if (filter) {\n return this._template.transform(filter, await this.getValues());\n }\n }\n\n async getValues() {\n return this.values;\n }\n\n}\n","// tslint:disable-next-line:max-line-length\nimport { Component, OnInit, OnDestroy, Input, EventEmitter, ViewEncapsulation, OnChanges, SimpleChanges, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { RouterModalOkCancel } from '@universis/common/routing';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-column-selector',\n templateUrl: './column-selector.component.html',\n encapsulation: ViewEncapsulation.Emulated,\n styles: [\n `\n .form-select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 5px;\n }\n .form-select * {\n padding: 5px 5px;\n }\n .btn.disabled, .btn:disabled {\n border-color: transparent !important;\n }\n `\n ]\n})\nexport class ColumnSelectorComponent extends RouterModalOkCancel implements OnInit, OnDestroy, OnChanges {\n\n @Input() columns?: { key: string, title: string, visible: boolean, index: number }[];\n public dismiss: EventEmitter<any> = new EventEmitter();\n\n @Input() selectedColumns?: { key: string, title: string }[];\n\n @ViewChild('moveUpButton') moveUpButton?: ElementRef;\n @ViewChild('moveDownButton') moveDownButton?: ElementRef;\n\n availableColumnsControl = new FormControl();\n selectedColumnsControl = new FormControl();\n\n public changing = false;\n\n ok(): Promise<any> {\n this._changeDetector.detectChanges();\n setTimeout(() => {\n this.changing = true;\n this._modalRef.hide();\n }, 0);\n try {\n this.applyChanges();\n } catch (err) {\n throw err;\n } finally {\n this.changing = false;\n }\n this.dismiss.emit('ok');\n return Promise.resolve('ok');\n }\n cancel(): Promise<any> {\n this._modalRef.hide();\n this.dismiss.emit('cancel');\n return Promise.resolve('cancel');\n }\n\n constructor(router: Router,\n activatedRoute: ActivatedRoute,\n private _modalRef: BsModalRef,\n private _changeDetector: ChangeDetectorRef) {\n super(router, activatedRoute);\n }\n ngOnChanges(changes: SimpleChanges): void {\n //\n }\n ngOnDestroy(): void {\n //\n }\n ngOnInit(): void {\n if (Array.isArray(this.columns)) {\n this.selectedColumns = this.columns.filter((item) => {\n return item.visible;\n }).sort((a, b) => {\n if (a.index < b.index) {\n return -1;\n }\n if (a.index > b.index) {\n return 1;\n }\n return 0;\n }).map((item) => {\n return {\n key: item.key,\n title: item.title\n };\n });\n }\n }\n\n private applyChanges() {\n if (this.selectedColumns && this.columns) {\n let moveIndex = this.selectedColumns.length - 1;\n for (const column of this.columns) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === column.key;\n });\n if (findIndex < 0) {\n column.visible = false;\n moveIndex += 1;\n column.index = moveIndex;\n } else {\n column.visible = true;\n column.index = findIndex;\n }\n }\n }\n }\n\n removeColumns() {\n if (this.selectedColumns) {\n const selected = this.selectedColumnsControl.value as string[];\n if (selected.length > 0) {\n for (const value of selected) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === value;\n });\n if (findIndex >= 0) {\n this.selectedColumns.splice(findIndex, 1);\n }\n }\n // reset column\n this.selectedColumnsControl.reset();\n }\n }\n }\n\n addColumns() {\n if (this.columns && this.selectedColumns) {\n const selected = this.availableColumnsControl.value as string[];\n if (selected.length > 0) {\n for (const value of selected) {\n const findColumn = this.columns.find((item) => {\n return item.key === value;\n });\n if (findColumn) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === value;\n });\n if (findIndex < 0) {\n this.selectedColumns.push({\n key: findColumn.key,\n title: findColumn.title\n });\n }\n }\n }\n // find the last index of the selected items\n const lastSelectedIndex = this.columns.findIndex((item) => {\n return item.key === selected[selected.length - 1];\n });\n // reset control\n this.availableColumnsControl.reset();\n if (lastSelectedIndex > -1 && lastSelectedIndex < this.columns.length - 1) {\n this.availableColumnsControl.patchValue([\n this.columns[lastSelectedIndex + 1].key\n ]);\n }\n }\n }\n }\n\n moveUp() {\n if (this.moveUpButton) {\n this.moveUpButton.nativeElement.disabled = true;\n }\n if (this.selectedColumns) {\n const selected = this.selectedColumnsControl.value as string[];\n if (selected.length > 0) {\n for (const value of selected) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === value;\n });\n if (findIndex > 0) {\n const column = this.selectedColumns[findIndex];\n this.selectedColumns.splice(findIndex, 1);\n this.selectedColumns.splice(findIndex - 1 , 0, column);\n }\n }\n }\n }\n if (this.moveUpButton) {\n this.moveUpButton.nativeElement.disabled = false;\n }\n }\n\n moveDown() {\n if (this.moveDownButton) {\n this.moveDownButton.nativeElement.disabled = true;\n }\n if (this.selectedColumns && this.columns) {\n const selected = this.selectedColumnsControl.value as string[];\n if (selected.length > 0) {\n for (const value of selected) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === value;\n });\n const length = this.columns.length;\n if (findIndex >= 0 && findIndex < length) {\n const column = this.selectedColumns[findIndex];\n this.selectedColumns.splice(findIndex, 1);\n this.selectedColumns.splice(findIndex + 1 , 0, column);\n }\n }\n }\n }\n if (this.moveDownButton) {\n this.moveDownButton.nativeElement.disabled = false;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ModalService } from '@universis/common';\nimport { ColumnSelectorComponent } from './column-selector.component';\n\n@Injectable()\nexport class ColumnSelectorService {\n\n constructor(private _modal: ModalService) {\n //\n }\n\n selectColumns(columns: { key: string, title: string, visible: boolean, index: number }):\n Promise<{result: string, columns?: { key: string, title: string,\n visible: boolean, index: number }[]}> {\n return new Promise((resolve, reject) => {\n try {\n const modalRef = this._modal.openModalComponent(ColumnSelectorComponent, {\n class: 'modal-lg modal-table',\n ignoreBackdropClick: true,\n animated: true,\n initialState: {\n columns: columns,\n }\n });\n const componentRef: ColumnSelectorComponent = modalRef.content;\n componentRef.dismiss.subscribe((result: string) => {\n if (result === 'ok') {\n return resolve({\n result: result,\n columns: componentRef.columns\n });\n }\n return resolve({\n result: result\n });\n });\n } catch (err) {\n return reject(err);\n }\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRoute, NavigationStart, Router } from '@angular/router';\r\nimport { AdvancedTableComponent } from './components/advanced-table/advanced-table.component';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { skip } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ActivatedTableService {\r\n private _activeTable?: AdvancedTableComponent;\r\n /**\r\n * Get the last table that was set as active\r\n * Note: Emitted value may be undefined (e.g. reset on route changes)\r\n */\r\n public readonly lastActiveTable:\r\n BehaviorSubject<AdvancedTableComponent | undefined> = new BehaviorSubject<AdvancedTableComponent | undefined>(undefined);\r\n /**\r\n * Omit the last emitted value to observe only new active table changes\r\n * Note: Emitted value may be undefined (e.g. reset on route changes)\r\n */\r\n public readonly nextActiveTable:\r\n Observable<AdvancedTableComponent | undefined> = this.lastActiveTable.pipe(skip(1));\r\n\r\n constructor(private _router: Router, private _activatedRoute: ActivatedRoute) {\r\n _router.events.forEach((event) => {\r\n if (event instanceof NavigationStart) {\r\n if (this._activeTable) {\r\n this.activeTable = undefined;\r\n }\r\n }\r\n });\r\n }\r\n\r\n get activeTable(): AdvancedTableComponent | undefined {\r\n return this._activeTable;\r\n }\r\n\r\n set activeTable(tableComponent: AdvancedTableComponent | undefined) {\r\n this._activeTable = tableComponent;\r\n // provide change to observers\r\n this.lastActiveTable.next(this._activeTable);\r\n }\r\n}\r\n","import {Directive, HostListener} from '@angular/core';\nimport {ActivatedTableService} from '../tables.activated-table.service';\nimport {AngularDataContext} from '@themost/angular';\nimport {ConfigurationService, ErrorService, LoadingService} from '@universis/common';\nimport {TranslateService} from '@ngx-translate/core';\nimport {ClientDataQueryable, ResponseError} from '@themost/client';\nimport { TableConfiguration } from '../components/advanced-table/advanced-table.interfaces';\n\nexport const MAX_EXPORT_ITEMS = 500;\n\nexport declare interface ExportLimitConfiguration {\n tables?: {\n exportLimit?: number\n };\n}\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '.universis-btn-export'\n})\nexport class BtnExpDirective {\n constructor(private _activatedTable: ActivatedTableService,\n private _context: AngularDataContext,\n private _config: ConfigurationService,\n private _translate: TranslateService,\n private _loadingService: LoadingService,\n private _errorService: ErrorService) {\n }\n\n @HostListener('click', ['$event'])\n async clickEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n if (this._activatedTable.activeTable) {\n return this._activatedTable.activeTable.exportView();\n /*\n const lastQuery = this._activatedTable.activeTable.lastQuery;\n const tableConfig = this._activatedTable.activeTable.config;\n const serviceHeaders = this._context.getService().getHeaders();\n const queryModel = lastQuery.getModel();\n let query = this._context.model(queryModel).asQueryable();\n const queryParams = lastQuery.getParams();\n query = this.constructQuery(query, queryParams, tableConfig, serviceHeaders);\n // get export settings\n const exportSettings = this._config.settings as ExportLimitConfiguration;\n // get export limit\n const maxExportItems = exportSettings && exportSettings.tables && exportSettings.tables.exportLimit;\n if (maxExportItems && typeof maxExportItems === 'number' && maxExportItems > 0) {\n query.skip(0).take(maxExportItems);\n } else {\n query.skip(0).take(MAX_EXPORT_ITEMS);\n }\n // This constructs the URI based on the way @themost does\n const url = this.constructURL(query);\n this.downloadFile(url, query.getService().getHeaders(), query.getModel()); */\n }\n }\n\n /**\n * Sets the parameters to the query based on\n * the active filters of the activated table\n * @param query\n * @param params: The filters of the last query of the activated table\n * @return ClientDataQueryable\n */\n setParams(query: ClientDataQueryable, params): ClientDataQueryable {\n if (params && typeof params === 'object') {\n Object.keys(params).forEach((key) => {\n query.setParam(key, params[key]);\n });\n }\n return query;\n }\n\n /**\n * Sets the headers to the query based on\n * the default headers of the DataContext\n * and appending the accept header to get\n * an xlsx file from the API\n * @param query\n * @param headers: The headers to append to the query\n * @return ClientDataQueryable\n */\n setHeaders(query: ClientDataQueryable, headers: Headers): ClientDataQueryable {\n Object.keys(headers).forEach((key) => {\n if (headers.hasOwnProperty(key)) {\n query.getService().setHeader(key, headers[key]);\n }\n });\n // sets a header to accept xlsx files\n query.getService().setHeader('Accept', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n return query;\n }\n\n /**\n * Constructs the select parameter of the\n * ClientDataQuery by replacing the target name\n * of the field based on the localized translation\n * of that property on the advanced tabled\n * @param query\n * @param tableConfig: The configuration of the activated table\n * @return ClientDataQueryable\n */\n constructQueryParam(query: ClientDataQueryable, tableConfig: TableConfiguration): ClientDataQueryable {\n let selectQuery = query.getParams().$select;\n let selectQueryArray = selectQuery.split(',');\n selectQueryArray = selectQueryArray.map((select) => {\n const words = select.split(' ');\n if (words.length === 3) {\n if (tableConfig && tableConfig.columns) {\n for (const column of tableConfig.columns) {\n if (column.property === words[2] && column.title) {\n words[2] = `\"${this._translate.instant(column.title)}\"`;\n } else if (column.property === words[2]) {\n words[2] = `\"${this._translate.instant(words[2])}\"`;\n }\n }\n }\n }\n if (words.length === 1) {\n if (tableConfig && tableConfig.columns) {\n for (const column of tableConfig.columns) {\n if (column.name === words[0] && column.title) {\n words[0] = `${words[0]} as \"${this._translate.instant(column.title)}\"`;\n break;\n } else if (column.name === words[0] && column.property) {\n words[0] = `${words[0]} as \"${this._translate.instant(column.property)}\"`;\n break;\n } else if (words[0] === column.name && words[0] === 'id' && column.hidden) {\n break;\n // tslint:disable-next-line:triple-equals\n } else if (words[0] == column.name || words[0] === column.property) {\n words[0] = `${words[0]} as \"${this._translate.instant(words[0])}\"`;\n }\n }\n }\n return words[0];\n }\n return words.join(' ');\n });\n selectQuery = selectQueryArray.join(',');\n query.setParam('$select', selectQuery );\n return query;\n }\n\n /**\n * Constructs the fetch URL based the query parameters\n * @param query\n * @return String\n */\n constructURL(query): String {\n const baseURL = query.getService().getBase();\n let url = baseURL.endsWith('/') ? (baseURL + query.getModel() + '?') : (baseURL + '/' + query.getModel() + '?');\n Object.keys(query.getParams()).forEach((key, index) => {\n if (index === 0) {\n url += key + '=' + query.getParams()[key];\n } else {\n url += '&' + key + '=' + query.getParams()[key];\n }\n });\n return url;\n }\n\n /**\n * Constructs the query by setting the parameters of the\n * advanced table's active filters, sets the necessary headers\n * and build the select parameter of the query\n * @param query\n * @param params: The filters of the last query of the activated table\n * @param tableConfig: The configuration of the activated table\n * @param headers: The headers to append to the query\n * @return ClientDataQueryable\n */\n constructQuery(query, params, tableConfig, headers: Headers) {\n let _query = this.setParams(query, params);\n _query = this.setHeaders(_query, headers);\n _query = this.constructQueryParam(_query, tableConfig);\n return _query;\n }\n\n /**\n * Fetches and saves the xlsx file\n * @param url\n * @param serviceHeaders: The headers to append to the query\n * @param modelName: The model name of the advanced table\n */\n downloadFile(url, serviceHeaders: Headers, modelName) {\n this._loadingService.showLoading();\n fetch(encodeURI(url), {\n headers: serviceHeaders,\n credentials: 'include'\n }).then(response => {\n if (response && !response.ok) {\n throw new ResponseError(response.statusText, response.status);\n }\n return response.blob();\n }).then(blob => {\n const objectUrl = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.setAttribute('style', 'display: none');\n a.href = objectUrl;\n const downloadName = `${modelName}.xlsx`;\n a.download = downloadName;\n // this adds support for IE and MS Edge (up to version 44.19041)\n if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) {\n (window.navigator as any).msSaveOrOpenBlob(blob, downloadName);\n } else {\n // for all other browsers\n a.click();\n }\n window.URL.revokeObjectURL(objectUrl);\n a.remove();\n this._loadingService.hideLoading();\n }).catch(err => {\n this._loadingService.hideLoading();\n this._errorService.showError(err, {\n continueLink: '.'\n });\n });\n }\n\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef, EventEmitter,\n Inject,\n InjectionToken,\n Injector,\n Input, OnDestroy,\n OnInit, Output,\n ViewChild,\n ViewEncapsulation,\n OnChanges,\n SimpleChanges,\n ContentChild,\n TemplateRef,\n ViewContainerRef,\n AfterViewInit\n} from '@angular/core';\nimport {AngularDataContext} from '@themost/angular';\nimport {TranslatePipe, TranslateService} from '@ngx-translate/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {TableConfiguration} from './advanced-table.interfaces';\nimport {DataServiceQueryParams} from '@themost/client';\nimport {AdvancedColumnFormatter} from './advanced-table.formatters';\nimport {ClientDataQueryable} from '@themost/client';\nimport {AdvancedFilterValueProvider} from './advanced-filter-value-provider.service';\nimport {Subscription, BehaviorSubject} from 'rxjs';\nimport {TemplatePipe, LoadingService, ConfigurationService,\n ModalService, DIALOG_BUTTONS, ErrorService, ExportSpreadsheetService} from '@universis/common';\nimport {IAdvancedTableFormatters} from './advanced-table.formatters.interface';\n// important note: use this import to avoid Cannot call a namespace ('jquery') error\nimport * as jQuery_ from 'jquery';\nimport 'datatables.net';\nimport {template} from 'lodash';\nimport 'datatables.net-rowgroup'; // this plugin import line must come before the following datatables plugin imports\nimport 'datatables.net-scroller'; \nimport 'datatables.net-colreorder';\nimport 'datatables.net-buttons';\nimport { HttpClient } from '@angular/common/http';\nimport { ColumnSelectorService } from '../column-selector/column-selector.service';\nimport { ExportLimitConfiguration, MAX_EXPORT_ITEMS } from '../../directives/btnexp.directive';\n\n// restore jquery import to avoid Cannot call a namespace ('jquery') error\nconst jQuery = jQuery_;\nexport interface AdvancedTableDataResult {\n recordsTotal: number;\n recordsFiltered: number;\n data: Array<any>;\n}\n\nconst DataTablesApi: any = jQuery.fn.dataTable.Api;\nDataTablesApi.register( 'processing()', function( show: any ) {\n return this.iterator('table', ( ctx: any ) => {\n ctx.oApi._fnProcessingDisplay( ctx, show );\n } );\n});\n\nconst EMPTY_DATASET = {\n recordsTotal: 0,\n recordsFiltered: 0,\n data: [],\n};\n\nclass TableTranslationChangeDetector extends ChangeDetectorRef {\n public checkNoChanges(): void {\n }\n\n public detach(): void {\n }\n\n public detectChanges(): void {\n }\n\n public markForCheck(): void {\n }\n\n public reattach(): void {\n }\n\n}\n\nexport let COLUMN_FORMATTERS = new InjectionToken('column.formatters');\n\nexport class ExportLimitExceededError extends RangeError {\n constructor(message: string) {\n super(message);\n this.name = 'ExportLimitExceededError';\n }\n}\n\nclass ColumnFormatter extends AdvancedColumnFormatter {\n constructor(protected injector: Injector) {\n super();\n }\n\n public class?: string;\n public className?: string;\n public defaultContent?: string;\n public formatString?: string;\n public formatter?: string;\n public hidden?: boolean;\n public name?: string;\n public order?: string;\n public property?: string;\n public sortable?: boolean;\n public title = '';\n\n public render(data: any, type: any, row: any, meta: any) {\n //\n }\n}\n\nfunction forceCast<T>(input: any): T {\n return input;\n}\n\nexport class AdvancedTableConfiguration {\n public static cast(input: any, clone?: boolean): TableConfiguration {\n if (clone) {\n return forceCast<TableConfiguration>(JSON.parse(JSON.stringify(input)));\n }\n return forceCast<TableConfiguration>(input);\n }\n}\n\nfunction getRandomIdentifier() {\n return (\n Number(String(Math.random()).slice(2))\n ).toString(36);\n}\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-advanced-table',\n template: `\n <table #table class=\"dataTable\">\n </table>\n <div #emptyTable class=\"d-none\">\n <div>\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-gray-300 border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-dark\" [translate]=\"'Tables.EmptyTableTitle'\"></h4>\n <p class=\"font-lg text-dark\" [translate]=\"'Tables.EmptyTableMessage'\"></p>\n </div>\n </div>\n </div>\n <div #errorTemplate class=\"d-none error-message\">\n <div class=\"text-center\">\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-danger border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-secondary\" [translate]=\"'Tables.DataError.Title'\"></h4>\n <p class=\"font-lg text-secondary mb-1\" [translate]=\"'Tables.DataError.Message'\"></p>\n <p class=\"font-lg text-secondary error-inner-message\">\n <small></small>\n </p>\n </div>\n </div>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./advanced-table.component.scss'],\n})\nexport class AdvancedTableComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit {\n\n private _query?: ClientDataQueryable;\n private _config?: TableConfiguration;\n private _firstLoad = true;\n private _showFooter = false;\n private _showHeader = true;\n private _showPaging = false;\n private _id = getRandomIdentifier();\n public smartSelect = false;\n public configChanges = new BehaviorSubject<any>(null);\n\n @ViewChild('table') public table?: ElementRef;\n @ViewChild('emptyTable') public emptyTable?: ElementRef;\n @ViewChild('errorTemplate') public errorTemplate?: ElementRef;\n @ViewChild('loadingTable') public loadingTable?: ElementRef;\n @Input() public height = 800;\n @Input() public showActions = true;\n @Input() public autoLoad = true;\n @Output('load') public load: EventEmitter<AdvancedTableDataResult> = new EventEmitter<AdvancedTableDataResult>();\n @Output('init') public init: EventEmitter<any> = new EventEmitter<any>();\n @Input('reload') public reload: EventEmitter<any> = new EventEmitter<any>();\n @Output('select') public select: EventEmitter<any> = new EventEmitter<any>();\n @Output('draw') public draw: EventEmitter<any> = new EventEmitter<any>();\n @Output('page') public page: EventEmitter<any> = new EventEmitter<any>();\n @Output('order') public order: EventEmitter<any[][]> = new EventEmitter<any[][]>();\n @Output('scroll') public scroll: EventEmitter<{ top: number; left: number }> = new EventEmitter<{ top: number; left: number }>();\n @Output('selectedItems') public selectedItems: EventEmitter<any> = new EventEmitter<any>();\n @Output('loading') public loading: EventEmitter<{\n target: AdvancedTableComponent\n }> = new EventEmitter<{\n target: AdvancedTableComponent\n }>();\n\n @Input() public scrollable = true;\n @Input() public serverSide = true;\n @Input() public lengthMenu = [50, 100, 200, 500];\n @Input() public paging = true;\n @Input() public pageLength = 25;\n @Input() public columnOrdering = false;\n @Input() public stateSave = false;\n @Input() public stateLoadCallback?: (settings: any, callback: (state: any) => void) => void;\n @Input() public stateSaveCallback?: (settings: any, state: any) => void;\n\n @Input() public scrollY = 800;\n @Input() public scrollX = true;\n /**\n * Enables row selection. The defaulr value is false\n */\n @Input() public selectable: boolean | undefined = false;\n /**\n * Enables or disable multiple selection. The default values is true.\n */\n @Input() public multipleSelect: boolean | undefined = true;\n /**\n * Enables custom selection and hides select column. The default value is false\n */\n @Input() public customSelect = false;\n @Input() public selected: any[] = [];\n public unselected: any[] = [];\n /**\n * Gets or sets a URL to load table configuration from\n */\n @Input() public configSrc?: string;\n public lastError: any;\n\n /**\n * Accepts array of properties as row group factors and displays grouped table. \n */\n @Input() rowGroup: string[] = [];\n private lastRowGroupOrder?: { column: number; direction: string; } | null;\n\n @Input() headerTemplate?: TemplateRef<any>;\n @Input() footerTemplate?: TemplateRef<any>;\n @ViewChild('header') header?: ElementRef;\n @ViewChild('footer') footer?: ElementRef;\n\n /**\n * Gets or sets table configuration\n */\n @Input('config')\n public set config(value: TableConfiguration) {\n this._config = value;\n // raise subscription\n this.configChanges.next(this._config);\n }\n\n public get config() {\n return this._config as TableConfiguration;\n }\n\n public get lastQueryTotalItems() {\n return this._lastQueryTotalItems;\n }\n\n /**\n * Indicates whether table footer will be visible or not\n */\n @Input('showFooter')\n public set showFooter(value: boolean) {\n this._showFooter = value;\n // show or hide footer\n if (this._element && this._element.nativeElement) {\n const element = ( this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTables_info');\n if (element == null) {\n return;\n }\n if (value) {\n element.classList.remove('d-none');\n } else {\n element.classList.add('d-none');\n }\n }\n }\n\n public get showFooter() {\n return this._showFooter;\n }\n\n /**\n * Indicates whether table footer will be visible or not\n */\n @Input('showHeader')\n public set showHeader(value: boolean) {\n this._showHeader = value;\n // show or hide footer\n if (this._element && this._element.nativeElement) {\n const element = ( this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTable>thead');\n if (element == null) {\n return;\n }\n const dataTable = ( this._element.nativeElement as HTMLDivElement).querySelector('.dataTable');\n if (dataTable == null) {\n return;\n }\n if (value) {\n element.classList.remove('d-none');\n // add top margin\n dataTable.classList.remove('mt-2');\n } else {\n element.classList.add('d-none');\n // remove top margin\n dataTable.classList.add('mt-2');\n }\n }\n }\n\n public get showHeader() {\n return this._showHeader;\n }\n\n /**\n * Indicates whether paging information will be visible or not\n */\n @Input('showPaging')\n public set showPaging(value: boolean) {\n this._showPaging = value;\n // show or hide footer\n if (this._element && this._element.nativeElement) {\n const element = ( this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTables_paginate');\n if (element == null) {\n return;\n }\n if (value) {\n jQuery(element).show();\n } else {\n jQuery(element).hide();\n }\n }\n }\n\n public get showPaging() {\n return this._showPaging;\n }\n\n /**\n * Gets or sets an active query for this table\n */\n @Input('query')\n public set query(value: ClientDataQueryable | undefined) {\n this._query = value;\n }\n\n public get query() {\n return this._query as ClientDataQueryable;\n }\n\n public readonly translator: TranslatePipe;\n public dataTable: any;\n public dtOptions: any;\n private lastQueryParams?: DataServiceQueryParams;\n private _lastQueryTotalItems = 0;\n private reloadSubscription: Subscription;\n\n\n constructor(private _context: AngularDataContext,\n @Inject(COLUMN_FORMATTERS) private _columnFormatters: IAdvancedTableFormatters,\n private _activatedRoute: ActivatedRoute,\n private _translateService: TranslateService,\n private _injector: Injector,\n private _advancedFilterValueProvider: AdvancedFilterValueProvider,\n private _element: ElementRef,\n private _template: TemplatePipe,\n private _loading: LoadingService,\n private _http: HttpClient,\n private _columnSelector: ColumnSelectorService,\n private _configuration: ConfigurationService,\n private _exportSpreadsheet: ExportSpreadsheetService,\n private _modalService: ModalService,\n private _errorService: ErrorService, \n private _viewContainerRef: ViewContainerRef) {\n // initialize translate pipe\n this.translator = new TranslatePipe(this._translateService, new TableTranslationChangeDetector());\n jQuery.fn.dataTable.ext.classes.sPageButton = 'btn';\n jQuery.fn.dataTable.ext.classes.sPageButtonActive = 'btn btn-light';\n this.reloadSubscription = this.reload.subscribe((data) => {\n this.fetch();\n });\n }\n\n // simple search\n public search(searchText) {\n this.query = this.query || this._context.model(this.config.model).asQueryable();\n if (this.serverSide) {\n if (searchText && this.config.searchExpression) {\n // validate search text in double quotes\n if (/^\"(.*?)\"$/.test(searchText)) {\n this.query.setParam('$filter',\n this._template.transform(this.config.searchExpression, {\n text: searchText.replace(/^\"|\"$/g, ''),\n }));\n } else {\n // try to split words\n const words = searchText.split(' ');\n // join words to a single filter\n const filter = words.map((word) => {\n return this._template.transform((this.config && this.config.searchExpression) as string, {\n text: word,\n });\n }).join(' and ');\n // set filter\n this.query.setParam('$filter', filter);\n }\n } else {\n // clear filter\n this.query.setParam('$filter', null);\n }\n this._firstLoad = false;\n this.dataTable.draw();\n } else {\n // ensure empty table layout\n this.resetEmptyTable();\n // search locally\n this.dataTable.search(searchText.trim()).draw();\n // get indexes of filtered rows\n const indexes = Array.from(this.dataTable.context[0].aiDisplay);\n // set recordsFiltered\n const recordsFiltered = indexes.length;\n // set recordsTotal\n const recordsTotal = indexes.length;\n // retrieve data from indexes\n const rows = Array.from(this.dataTable.rows().data());\n const data = indexes.map(index => rows[<number>index]);\n // emit results to load output\n this.load.emit({\n data: data,\n recordsFiltered: recordsFiltered,\n recordsTotal: recordsTotal\n });\n }\n }\n\n public fetch(clearSelected?: boolean) {\n // if data table is null\n if (this.dataTable == null) {\n // initialize data table\n return this.ngOnInit();\n }\n // clear selection if parameter is not declared or it's true\n if (clearSelected == null || clearSelected === true) {\n // set smart select to false\n this.smartSelect = false;\n // clear selected items\n if (this.selected.length) {\n this.selected.splice(0, this.selected.length);\n }\n // clear unselected items\n if (this.unselected.length) {\n this.unselected.splice(0, this.unselected.length);\n }\n }\n // otherwise load data only\n this.dataTable.draw();\n }\n\n public destroy() {\n if (this.dataTable) {\n this.dataTable.destroy();\n this._firstLoad = true;\n if (this.table) {\n jQuery(this.table.nativeElement).empty();\n }\n this.dataTable = null;\n // clear selected items\n if (this.selected.length) {\n this.selected.splice(0, this.selected.length);\n }\n // clear unselected items\n if (this.unselected.length) {\n this.unselected.splice(0, this.unselected.length);\n }\n // set smart select to false\n this.smartSelect = false;\n }\n }\n\n /**\n * Selects the specified data row\n */\n public selectRow(row: any, silent?: boolean) {\n if (row) {\n // get row\n const rowNode = row.node();\n // if multiple select is false\n if (this.multipleSelect === false) {\n if (this.customSelect === false) {\n // enumerate row\n this.dataTable.rows().nodes().each((node: any) => {\n if (node !== rowNode) {\n jQuery(node).find(':checkbox').prop('checked', false);\n }\n });\n } else {\n this.dataTable.rows('.selected').nodes().each((node: any) => {\n if (node !== rowNode) {\n jQuery(node).removeClass('selected');\n }\n });\n }\n // clear selected\n this.selected.splice(0, this.selected.length);\n }\n // if custom select mode is off\n if (this.customSelect === false) {\n jQuery(rowNode).find(':checkbox').prop('checked', true);\n } else {\n // otherwise add class\n jQuery(row.node()).addClass('selected');\n }\n // get row data\n const key = this.config.columns[0].property || this.config.columns[0].name || '';\n const data = row.data();\n // search selected items\n let findIndex = this.selected.findIndex((x) => {\n return x[key] === data[key];\n });\n if (findIndex >= 0) {\n // remove previously selected row\n this.selected.splice(findIndex, 1);\n }\n this.selected.push(data);\n // validate unselected data\n findIndex = this.unselected.findIndex((x) => {\n return x[key] === data[key];\n });\n if (findIndex >= 0) {\n // remove previously selected row\n this.unselected.splice(findIndex, 1);\n }\n if (silent) {\n return;\n }\n this.selectedItems.emit(this.selected);\n }\n }\n\n /**\n * Unselects the specified data row if it's selected\n */\n public unSelectRow(row: any, silent?: boolean) {\n if (row) {\n // if custom select mode is off\n if (this.customSelect === false) {\n jQuery(row.node()).find(':checkbox').prop('checked', false);\n } else {\n // otherwise add class\n jQuery(row.node()).removeClass('selected');\n }\n // get first column key\n const key = this.config.columns[0].property || this.config.columns[0].name || '';\n const data = row.data();\n const id = data[key];\n let findIndex = this.selected.findIndex((x) => {\n return x[key] === id;\n });\n if (findIndex >= 0) {\n this.selected.splice(findIndex, 1);\n if (this.smartSelect) {\n // add this row to unselected rows\n findIndex = this.unselected.findIndex((x) => {\n return x[key] === id;\n });\n if (findIndex < 0) {\n this.unselected.push(data);\n }\n }\n if (silent) {\n return;\n }\n this.selectedItems.emit(this.selected);\n }\n }\n }\n\n public selectAny() {\n if (this.dataTable && this.selectable) {\n // set smart select flag\n this.smartSelect = true;\n // select any row\n this.dataTable.rows().every((index: any) => {\n const row = this.dataTable.row( index );\n this.selectRow(row, true);\n });\n // emit selection event\n this.selectedItems.emit(this.selected);\n }\n }\n\n public selectNone() {\n if (this.dataTable && this.selectable) {\n // set smart select flag\n this.smartSelect = false;\n this.unselected.splice(0, this.unselected.length);\n // select any row\n this.dataTable.rows().every((index: any) => {\n const row = this.dataTable.row( index );\n this.unSelectRow(row, true);\n });\n this.selected.splice(0, this.selected.length);\n // emit selection event\n this.selectedItems.emit(this.selected);\n }\n }\n\n public toggleSelectRow(row: any) {\n if (row) {\n const data = row.data();\n // get first column key\n const key = this.config.columns[0].property || this.config.columns[0].name || '';\n // get id\n const id = data[key];\n // find if row is selected\n const findIndex = this.selected.find((x) => {\n return x[key] === id;\n });\n // if row is selected\n if (findIndex >= 0) {\n // unselect\n this.unSelectRow(row);\n } else {\n this.selectRow(row);\n }\n }\n }\n\n // noinspection JSMethodCanBeStatic\n /**\n * Datatables column renderer for select checkbox\n * @param data\n * @param type\n * @param row\n * @param meta\n */\n private _renderSelect(data, type, row, meta) {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (typeof column.selectTemplate !== 'function') {\n Object.assign(column, {\n selectTemplate: template(`<input class=\"checkbox checkbox-theme s-row\" type=\"checkbox\"\n id=\"s-${this._id}-\\${meta.row}\" data-id=\"\\${data}\" /><label for=\"s-${this._id}-\\${meta.row}\">&nbsp;</label>\n `),\n });\n }\n // render template\n return column.selectTemplate({\n meta,\n data,\n });\n }\n\n public ngOnInit() {\n const self = this;\n if (this.dataTable) {\n this.destroy();\n }\n if (this.config) {\n this.loading.emit({\n target: this\n });\n // parse properties\n if (Object.prototype.hasOwnProperty.call(this.config, 'selectable')) {\n this.selectable = this.config.selectable;\n }\n if (Object.prototype.hasOwnProperty.call(this.config, 'multipleSelect')) {\n this.multipleSelect = this.config.multipleSelect;\n }\n // prepare configuration for columns\n const tableColumns = this.config.columns\n // filter action link column\n .filter((column) => {\n if (column.formatter && column.formatter === 'ActionLinkFormatter' && this.showActions === false) {\n return false;\n }\n return true;\n }).map((column) => {\n // convert column to advance table column\n return Object.assign(new ColumnFormatter(this._injector), column);\n }).map((column) => {\n const columnDefinition = {\n data: column.property || column.name,\n defaultContent: column.defaultContent != null ? column.defaultContent : '',\n title: this.translator.transform(column.title),\n sortable: column.hasOwnProperty('sortable') ? column.sortable : true,\n visible: column.hasOwnProperty('hidden') ? !column.hidden : true,\n name: column.name,\n };\n\n if (column.className) {\n Object.assign(columnDefinition, {\n className: column.className,\n });\n } else {\n Object.assign(columnDefinition, {\n className: '',\n });\n }\n\n if (column.formatters) {\n Object.assign(columnDefinition, {\n render(data: any, type: string, row: any, meta: any) {\n let result = data;\n (column.formatters as any[]).forEach((columnFormatter) => {\n const formatter = self._columnFormatters[columnFormatter.formatter];\n if (formatter && typeof formatter.render === 'function') {\n column.formatString = columnFormatter.formatString;\n column.formatOptions = columnFormatter.formatOptions;\n }\n result = formatter.render.bind(column)(result, type, row, meta);\n });\n delete column.formatString;\n delete column.formatOptions;\n return result;\n },\n });\n // check if column formatters export createdCell event\n const items = column.formatters.filter((columnFormatter) => {\n return typeof columnFormatter.afterRender === 'function';\n });\n if (items.length > 0) {\n Object.assign(columnDefinition, {\n createdCell(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number) {\n items.forEach((columnFormatter) => {\n const formatter = self._columnFormatters[columnFormatter.formatter];\n if (formatter && typeof formatter.afterRender === 'function') {\n formatter.afterRender.bind(column)(cell, cellData, rowData, rowIndex, colIndex);\n }\n });\n }\n });\n }\n }\n if (column.formatter) {\n const formatter = self._columnFormatters[column.formatter];\n if (formatter && typeof formatter.render === 'function') {\n Object.assign(columnDefinition, {\n render: formatter.render.bind(column),\n });\n }\n if (formatter && typeof formatter.afterRender === 'function') {\n Object.assign(columnDefinition, {\n render: formatter.render.bind(column),\n });\n Object.assign(columnDefinition, {\n createdCell: formatter.afterRender.bind(column),\n });\n }\n }\n return columnDefinition;\n });\n // get table element\n const tableElement = jQuery(this.table && this.table.nativeElement);\n jQuery(window).on('resize', () => {\n setTimeout(() => {\n if (this.dataTable) {\n this.dataTable.columns.adjust();\n }\n }, 1);\n });\n // tslint:disable-next-line: no-shadowed-variable\n tableElement.on('processing.dt', (event, settings, processing) => {\n if (processing) {\n // clear empty table element\n tableElement.find('.dataTables_empty').html('');\n setTimeout(() => {\n tableElement.addClass('processing');\n }, 0);\n } else {\n setTimeout(() => {\n tableElement.removeClass('processing');\n }, 0);\n }\n });\n let drawIndex = 1;\n tableElement.on('order.dt', (event: any) => {\n if (this.dataTable) {\n const order = this.dataTable.order();\n const columns = tableColumns;\n if (order && order.length) {\n this.order.emit(order);\n }\n }\n }).on('draw.dt', (event) => {\n this.draw.emit();\n if (this.dataTable) {\n const info: { page: number; pages: number } = this.dataTable.page.info();\n this.page.emit(info);\n if (drawIndex > 1) {\n return;\n }\n try {\n drawIndex++;\n setTimeout(() => {this.dataTable.columns.adjust(); }, 1);\n } catch (err) {\n console.error('ERROR', 'An error occurred while adjusting table columns');\n console.error(err);\n }\n }\n });\n\n // allow selection\n if (this.selectable) {\n // get first column (as row primary key)\n // todo::allow row primary key configuration\n const firstColumn = this.config.columns[0];\n // add select column\n const selectColumnDefinition = {\n className: 'text-center pl-4 pr-0',\n data: firstColumn.property || firstColumn.name,\n defaultContent: '',\n title: '',\n sortable: false,\n visible: !this.customSelect,\n name: firstColumn.name,\n };\n // assign renderer\n Object.assign(selectColumnDefinition, {\n render: this._renderSelect.bind(this),\n });\n // and finally add column\n tableColumns.unshift(selectColumnDefinition);\n // user interface additions\n // handle page change event (a trick for firing draw.dt events)\n tableElement\n // handle draw events\n .on('draw.dt', () => {\n\n if (this.customSelect) {\n // enable row selection event\n tableElement.find('tbody').on('click', 'tr', function() {\n // select row\n const row = self.dataTable.row(this);\n // add row\n self.select.emit(row);\n });\n }\n const elements = tableElement.find('input.s-row');\n elements.off('click').on('click', this.onSelectionChange.bind(this));\n // make selection on current page\n const key = this.config.columns[0].property || '';\n if (this.selected.length > 0) {\n // enumerate selected items\n this.selected.forEach((item) => {\n // find row identifier\n const id = item[key];\n // if identifier is defined\n if (id != null) {\n // try to find check element with this identifier in attribute data-id\n tableElement.find(`input[data-id='${id}']`).prop('checked', true);\n }\n });\n }\n if (this.smartSelect) {\n // select rows that are not selected\n // and do not included in unselected collection\n tableElement.find('input[data-id]').each((index, element) => {\n // get data id\n if (this.unselected.findIndex((x) => {\n // tslint:disable-next-line:triple-equals\n return x[key] == jQuery(element).attr('data-id');\n }) < 0) {\n this.selectRow(this.dataTable.row(index));\n }\n });\n } else if (this.selected.length === 0) {\n tableElement.find('input[data-id]').prop('checked', false);\n }\n });\n }\n // initialize data table\n const settings = {\n // set length menu\n lengthMenu: [5, 10, 50, 100, 200, 500],\n // hide length menu\n lengthChange: false,\n // enable search but hide search box (css)\n searching: true,\n // enable data processing\n processing: true,\n // enable getting server side data\n serverSide: this.serverSide,\n // enumerate table columns\n columns: tableColumns,\n colReorder: this.columnOrdering,\n order: [],\n // set scroll x\n scrollX: this.scrollX,\n dom: 'Bfrtip',\n autoWidth: false,\n buttons: [\n {\n extend: 'excel',\n filename: this.config.title,\n className: 'd-none',\n exportOptions: {\n columns: 'th:not(:first-child)',\n },\n },\n ],\n // define server data callback\n fnServerData(sSource: any, aoData: any, fnCallback: any, oSettings: any) {\n // if method is invoked for the first time\n if (self._firstLoad) {\n // disabled first load flag\n self._firstLoad = false;\n // if auto load is disabled\n if (self.autoLoad === false) {\n const emptyDataSet = {\n recordsTotal: 0,\n recordsFiltered: 0,\n data: [],\n };\n self._lastQueryTotalItems = 0;\n // emit empty data\n self.load.emit(emptyDataSet);\n // return empty data\n return fnCallback(emptyDataSet);\n }\n }\n // reset error\n self.toggleError();\n // get activated route params\n const queryParams = self._activatedRoute.snapshot.queryParams;\n // get columns\n const columns = aoData[1].value;\n // get order expression\n let order = aoData[2].value;\n // get skip records param\n const skip = aoData[3].value;\n // get page size param\n const top = aoData[4].value;\n // get search value\n const search = aoData[5].value;\n // get data queryable\n const q = self._query instanceof ClientDataQueryable ? self._query : self._context.model(self.config.model).asQueryable();\n // apply paging params\n if (top) {\n q.take(top).skip(skip);\n }\n // initialize parameters (rowGroup and order) if there is row group input\n let rowGroupOrder: any[] = [];\n if (self.rowGroup && self.rowGroup.length) {\n let colOrder = [];\n \n // find index of the rowGroup column\n let cols = self.rowGroup.map(x => tableColumns.findIndex(tableColumn => tableColumn.data === x)).filter(index => index >= 0);\n // find new index of the rowGroup column in case of table offers the column reordering capability \n // i.e. settings.colReorder === false (columnOrdering === false)\n if (self.dataTable && self.dataTable.colReorder && this.columnOrdering === true) {\n colOrder = self.dataTable.colReorder.order();\n cols = cols.map( (col: any) => colOrder.indexOf(col as never)).filter(index => index > -1);\n }\n \n let column = -1;\n let direction = 'asc';\n \n // set column and order direction \n if (order && order.length) {\n column = order[0].column;\n direction = order[0].dir;\n }\n rowGroupOrder = cols.map((x) => { \n // check if column order has been changed\n // and find the new index (column-index) of the row group column\n if (x != column && self.lastRowGroupOrder != null) {\n if (x === self.lastRowGroupOrder.column) {\n column = self.lastRowGroupOrder.column;\n direction = self.lastRowGroupOrder.direction;\n }\n }\n return { \n column: x, \n dir: x === column ? direction : 'asc'\n } \n });\n order = order || [];\n // set the row group column query param always first and before table ordering query params \n order.unshift(...rowGroupOrder);\n \n // save ordering column and direction (regardless rowGrouping)\n if (column > -1) {\n self.lastRowGroupOrder = { column, direction };\n }\n }\n // apply order params\n if (order && order.length) {\n // get order query expression\n const orderByStr = order.map((expr: any) => {\n let columnIndex: number;\n if (self.columnOrdering === false) {\n columnIndex = expr.column;\n } else if (self.dataTable.colReorder) {\n // get the current column order (from colReorder)\n const columnOrder: number[] = self.dataTable.colReorder.order();\n // and match the dataTable index to the config columns index\n // expr.column should always be valid (e.g. in range), but perform a minor validation\n if (expr.column >= 0 && expr.column < columnOrder.length) {\n columnIndex = columnOrder[expr.column];\n } else {\n // use the first column as a fallback (won't happen, just for safety)\n columnIndex = 0;\n }\n } else {\n columnIndex = expr.column;\n }\n return tableColumns[columnIndex].name + ' ' + expr.dir || 'asc';\n }).join(',');\n // set order\n q.setParam('$orderby', orderByStr);\n }\n // ensure self.stateLoadCallback\n if (self.stateLoadCallback == null) {\n self.stateLoadCallback = ((_, callback) => {\n return callback(null);\n });\n }\n self.stateLoadCallback(null, (state) => {\n // configure $select parameter\n const select = self.config.columns.filter( (column) => {\n if (column.virtual === true) {\n return false;\n }\n if (column.optional === true) {\n if (state && state.columns) {\n const index = tableColumns.findIndex((tableColumn) => tableColumn.name === column.name);\n if (index >= 0) {\n return state.columns[index].visible;\n }\n }\n return false;\n }\n return true;\n }).map((column) => {\n if (column.property) {\n return column.name + ' as ' + column.property;\n } else {\n return column.name;\n }\n });\n q.select.apply(q, select);\n // configure $filter\n if (queryParams.$filter && queryParams.$filter.length) {\n // set route filter\n const qParams = q.getParams();\n q.setParam('$filter', null);\n const expressions = [ queryParams.$filter ];\n if (qParams.$filter) { expressions.push('(' + qParams.$filter + ')' ); }\n q.filter(expressions.join(' and '));\n }\n // check if query parameters contain filter\n if (queryParams.$expand && queryParams.$expand.length) {\n // set route $expand\n q.setParam('$expand', queryParams.$expand);\n } else if (self.config && self.config.defaults && self.config.defaults.expand) {\n q.setParam('$expand', self.config.defaults.expand);\n }\n if (!q.getParams()['$orderby'] && self.config && self.config.defaults && self.config.defaults.orderBy) {\n q.setParam('$orderby', self.config.defaults.orderBy);\n }\n if (self.config && self.config.defaults && self.config.defaults.groupBy) {\n q.setParam('$groupby', self.config.defaults.groupBy);\n }\n // append default filter\n if (self.config && self.config.defaults && self.config.defaults.filter) {\n return self._advancedFilterValueProvider.asyncBuildFilter(self.config.defaults.filter).then((defaultFilterString) => {\n if (defaultFilterString) {\n const qParams = q.getParams();\n q.setParam('$filter', null);\n const expressions = [ defaultFilterString ];\n if (qParams.$filter) { expressions.push('(' + qParams.$filter + ')' ); }\n q.filter(expressions.join(' and '));\n }\n self.lastQueryParams = q.getParams();\n return q.getList().then((items) => {\n const dataSet = {\n recordsTotal: items.total,\n recordsFiltered: items.total,\n data: items.value,\n };\n self._lastQueryTotalItems = items.total;\n if (items.total === 0) {\n self.resetEmptyTable();\n }\n // emit load event\n self.load.emit(dataSet);\n // return data\n return fnCallback(dataSet);\n });\n }).catch((err) => {\n // log error to console\n console.error('TABLES', err);\n // show error\n self.toggleError(err);\n self._lastQueryTotalItems = 0;\n // by returning empty dataset\n self.load.emit(EMPTY_DATASET);\n return fnCallback(EMPTY_DATASET);\n });\n }\n self.lastQueryParams = q.getParams();\n q.getList().then((items) => {\n const dataSet = {\n recordsTotal: items.total,\n recordsFiltered: items.total,\n data: items.value,\n };\n self._lastQueryTotalItems = items.total;\n if (items.total === 0) {\n self.resetEmptyTable();\n }\n // emit load event\n self.load.emit(dataSet);\n // return data\n return fnCallback(dataSet);\n }).catch((err) => {\n // log error to console\n console.error('TABLES', err);\n // show error\n self.toggleError(err);\n // by returning empty dataset\n self.load.emit(EMPTY_DATASET);\n return fnCallback(EMPTY_DATASET);\n });\n });\n },\n language: Object.assign({ }, self.translator.transform('Tables.DataTable'),\n {emptyTable: ' ' }),\n };\n // check if there is a rowGroup input and assign it to table\n if (this.rowGroup.length) {\n const cols = this.rowGroup.map(x => tableColumns.findIndex(tableColumn => tableColumn.data === x)).filter(index => index >= 0);\n const dataSrc = cols.map(x => tableColumns[x].data);\n const startRender = function (rows, group) {\n const headerViewRef = self._viewContainerRef.createEmbeddedView(\n self.headerTemplate as any,\n {\n group,\n rows\n }\n );\n headerViewRef.detectChanges();\n if (headerViewRef.rootNodes.length > 1) {\n throw new Error('HeaderTemplate must have exactly one root node.')\n }\n return headerViewRef.rootNodes[0];\n }\n // endRender property \n const endRender = function (rows, group) {\n const footerViewRef = self._viewContainerRef.createEmbeddedView(\n self.footerTemplate as any,\n {\n group,\n rows\n }\n );\n footerViewRef.detectChanges();\n if (footerViewRef.rootNodes.length > 1) {\n throw new Error('FooterTemplate must have exactly one root node.')\n }\n return footerViewRef.rootNodes[0];\n }\n Object.assign(settings, { rowGroup: { dataSrc, endRender, startRender } }, {}); \n }\n const stateSettings = {\n stateSave: this.stateSave\n };\n if (this.stateLoadCallback) {\n Object.assign(stateSettings, {\n stateLoadCallback: this.stateLoadCallback\n });\n }\n if (this.stateSaveCallback) {\n Object.assign(stateSettings, {\n stateSaveCallback: this.stateSaveCallback\n });\n }\n Object.assign(settings, stateSettings);\n\n if (this.scrollable) {\n // set continuous scrolling\n Object.assign(settings, {\n scrollY: this.scrollY,\n scrollCollapse: false,\n scroller: {\n loadingIndicator: false,\n displayBuffer: Array.isArray(this.rowGroup) && this.rowGroup.length > 0 ? 100 : 10,\n },\n });\n } else {\n Object.assign(settings, {\n scrollY: this.scrollY,\n paging: this.paging,\n pageLength: this.pageLength,\n });\n }\n if (this.selectable) {\n\n }\n // handle init.dt event and emit local event\n this.dataTable = tableElement.on('init.dt', (event) => {\n const scroller = jQuery(event.target).parent();\n // handle scrolling\n scroller.on('scroll', (scrollEvent) => {\n const target = jQuery(scrollEvent.target);\n const top = target.scrollTop() as number;\n const left = target.scrollLeft() as number;\n if (this.dataTable) {\n this.scroll.emit({\n top,\n left\n });\n }\n });\n }).DataTable(settings);\n this.init.emit();\n // show or hide header\n if (!this.showHeader && this._element && this._element.nativeElement) {\n const hideSelector = (this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTable>thead');\n if (hideSelector) {\n hideSelector.classList.add('d-none');\n }\n const adjustSelector = (this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTable');\n if (adjustSelector) {\n adjustSelector.classList.add('mt-2');\n }\n }\n // show or hide footer\n if (!this.showFooter && this._element && this._element.nativeElement) {\n const infoSelector = (this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTables_info');\n if (infoSelector) {\n infoSelector.classList.add('d-none');\n }\n }\n // show or hide pager\n if (this.showPaging) {\n this.showPaging = true;\n }\n }\n }\n\n ngAfterViewInit(): void {\n if (this.headerTemplate) {\n const headerViewRef = this._viewContainerRef.createEmbeddedView(\n this.headerTemplate,\n {\n group: '',\n }\n );\n headerViewRef.detectChanges();\n for (var node of headerViewRef.rootNodes) {\n this.header? this.header.nativeElement.appendChild(node) : null;\n }\n }\n\n if (this.footerTemplate) {\n const footerViewRef = this._viewContainerRef.createEmbeddedView(\n this.footerTemplate,\n {\n group: '',\n rows: []\n }\n );\n footerViewRef.detectChanges();\n for (var node of footerViewRef.rootNodes) {\n this.footer? this.footer.nativeElement.appendChild(node) : null;\n }\n }\n }\n\n scrollTop(value: number) {\n if (this.dataTable) {\n this.dataTable.parent().scrollTop(value);\n }\n }\n\n scrollLeft(value: number) {\n if (this.dataTable) {\n this.dataTable.parent().scrollLeft(value);\n }\n }\n\n get lastQuery(): ClientDataQueryable | undefined {\n if (this.config == null) {\n return;\n }\n if (this.lastQueryParams == null) {\n return;\n }\n const q = this._context.model(this.config.model).asQueryable();\n Object.keys(this.lastQueryParams).forEach( (key) => {\n q.setParam(key, this.lastQueryParams && this.lastQueryParams[key]);\n });\n // return query\n return q;\n }\n\n /**\n * Fetches and updates a single row\n * @param find - Any object which is being converted to a query\n */\n public fetchOne(find: any) {\n if (find == null) {\n return;\n }\n if (this.dataTable == null) {\n return;\n }\n if (this.lastQueryParams == null) {\n return;\n }\n // get rows\n const rows = Array.from(this.dataTable.rows().data());\n if (rows && rows.length) {\n // find result\n const findKeys = Object.keys(find);\n if (findKeys.length === 0) {\n // do nothing\n return;\n }\n // find row index by searching each property\n const rowIndex = rows.findIndex((row: any) => {\n return findKeys.map( (key) => {\n return row[key] === find[key];\n }).filter( (res) => {\n return res === false;\n }).length === 0;\n });\n // if row has been found\n if (rowIndex >= 0) {\n const query = this._context.model(this.config.model).asQueryable();\n // select attributes\n query.setParam('$select', this.lastQueryParams.$select);\n if (this.lastQueryParams.$expand) {\n // apply expand attributes\n query.setParam('$expand', this.lastQueryParams.$expand);\n }\n // apply filter for row\n findKeys.forEach( (key) => {\n const column = this.config.columns.find( (col) => {\n return col.property === key || col.name === key;\n });\n if (column) {\n // get property or name\n const property = column.property || column.name;\n query.and(property as string).equal(find[key]);\n } else {\n query.and(key).equal(find[key]);\n }\n });\n // and finally get item\n return query.getItem().then( (item) => {\n // if item exists\n const row = this.dataTable.row(rowIndex);\n const checked = jQuery(row.node()).find(':checkbox').prop('checked');\n if (item) {\n // redraw row\n row.data(item);\n jQuery(row.node()).find(':checkbox').off('click').on('click', this.onSelectionChange.bind(this));\n // if row is already selected\n if (checked) {\n this.selectRow(row, true);\n }\n }\n return Promise.resolve();\n });\n }\n }\n return Promise.resolve();\n }\n\n public ngOnDestroy(): void {\n if (this.reloadSubscription) {\n this.reloadSubscription.unsubscribe();\n }\n }\n\n /**\n * Handle selection change\n * @param $event\n */\n public onSelectionChange($event) {\n const input = $event.target as HTMLInputElement;\n const execRegex = /-(\\d+)$/g.exec(input.id);\n // get row from id\n const rowIndex = parseInt((execRegex && execRegex[1]) as string, 10);\n // get row\n const row = this.dataTable.row(rowIndex).data();\n // get row identifier\n if (row) {\n const key = this.config.columns[0].property || '';\n const id = row[key];\n let findItemIndex = this.selected.findIndex((item) => {\n return item[key] === id;\n });\n if (input.checked) {\n if (findItemIndex < 0) {\n // add row to selected rows\n this.selected.push(row);\n this.selectedItems.emit(this.selected);\n }\n } else {\n if (findItemIndex >= 0) {\n // remove selected item\n this.selected.splice(findItemIndex, 1);\n if (this.smartSelect) {\n // add row to unselected rows\n findItemIndex = this.unselected.findIndex((item) => {\n return item[key] === id;\n });\n if (findItemIndex < 0) {\n this.unselected.push(row);\n this.selectedItems.emit(this.selected);\n }\n }\n }\n }\n }\n }\n\n private resetEmptyTable() {\n // this operation is important\n // due to ng data binding\n // empty table template has no translated text during ngOnInit()\n if (this.dataTable && this.dataTable.context[0]) {\n this.dataTable.context[0].oLanguage.sEmptyTable =\n this.dataTable.context[0].oLanguage.sZeroRecords = this.emptyTable && this.emptyTable.nativeElement.innerHTML;\n }\n }\n\n private toggleError(err?: any) {\n if (this.dataTable && this.dataTable.context[0]) {\n const element = (this.errorTemplate && this.errorTemplate.nativeElement as HTMLDivElement);\n let innerMessage: any;\n if (element) {\n innerMessage = element.getElementsByTagName('small').item(0);\n }\n if (err) {\n this.lastError = err;\n if (innerMessage) {\n innerMessage.innerHTML = err.error && err.error.message ? err.error.message : err.message;\n }\n this.dataTable.context[0].oLanguage.sEmptyTable =\n this.dataTable.context[0].oLanguage.sZeroRecords = this.errorTemplate && this.errorTemplate.nativeElement.innerHTML;\n } else {\n if (innerMessage) {\n innerMessage.innerHTML = '';\n }\n this.dataTable.context[0].oLanguage.sEmptyTable = this.dataTable.context[0].oLanguage.sZeroRecords = '';\n }\n }\n }\n\n private clearEmptyTable() {\n if (this.dataTable && this.dataTable.context[0]) {\n this.dataTable.context[0].oLanguage.sEmptyTable = this.dataTable.context[0].oLanguage.sZeroRecords = '';\n }\n }\n\n public export() {\n const element: HTMLElement = document.querySelector('.dt-buttons .buttons-excel') as HTMLElement;\n element.click();\n }\n\n public handleColumns(columnsToShow) {\n const table = this.dataTable;\n this.config.columns.slice(1).forEach((column, i) => {\n if (!column.hidden) {\n if (columnsToShow.includes(column.name)) {\n // noinspection TypeScriptValidateJSTypes\n table.column(column.name + ':name').visible(true);\n } else {\n // noinspection TypeScriptValidateJSTypes\n table.column(column.name + ':name').visible(false);\n }\n }\n });\n }\n\n public getConfig() {\n return this.config;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (Object.prototype.hasOwnProperty.call(changes, 'configSrc')) {\n if (changes.configSrc != null) {\n // load table configuration on change\n // tslint:disable-next-line: triple-equals\n if (changes.configSrc.currentValue && (changes.configSrc.currentValue != changes.configSrc.previousValue)) {\n this._http.get(changes.configSrc.currentValue).toPromise().then((config: TableConfiguration) => {\n // set configuration\n this.config = config;\n this.destroy();\n // fetch and redraw\n this.fetch();\n }).catch((err) => {\n console.error('TABLES', 'An error occurred while loading table configuration.');\n console.error(err);\n });\n }\n }\n }\n }\n\n public reset(load?: boolean): void {\n this.query = undefined;\n this.destroy();\n this.autoLoad = !!load;\n this.ngOnInit();\n }\n\n selectColumns() {\n // get column order e.g. [0, 4, 1, 2, 3]\n const columnOrder: number[] = this.dataTable.colReorder.order();\n // get column definitions\n const columnDefs = this.dataTable.settings().init().columns;\n const columns = columnDefs.map((\n columnDef: { key: string, title: string | undefined, visible: boolean,\n sortable: boolean, index: number }, i: number) => {\n const key = `column-${i}`;\n let title = columnDef.title;\n // get column index\n const index = columnOrder.indexOf(i);\n const visible = this.dataTable.column(index).visible();\n // set title for select column\n if (i === 0 && this.selectable) {\n title = '<' + this._translateService.instant('Tables.SelectColumn') + '>';\n }\n // get column title\n if (title != null && title.length === 0) {\n title = undefined;\n }\n if (title == null) {\n // try to find column placeholder\n let placeholder: string | undefined;\n if (this.selectable) {\n if (i > 0) {\n placeholder = this.config.columns[i - 1].placeholder;\n }\n } else {\n placeholder = this.config.columns[i].placeholder;\n }\n if (placeholder != null) {\n title = '<' + this._translateService.instant(placeholder) + '>';\n }\n }\n if (title == null) {\n title = '<' + this._translateService.instant('Tables.UnknownColumn') + '>';\n }\n return {\n key,\n title,\n visible,\n index\n };\n });\n this._columnSelector.selectColumns(columns).then((event) => {\n if (event.result === 'ok') {\n const sorted = (event.columns as any[])\n .map((col) => {\n return {\n key: col.key,\n index: col.index\n };\n })\n .sort((a, b) => a.index - b.index);\n // get column order e.g. [3, 1, 2, 0, 4]\n const indexes = sorted\n .map((item) => {\n return (event.columns as any[]).findIndex((next) => item.key === next.key);\n });\n // reset column visibilty\n for (let index = 0; index < (event.columns as any[]).length; index++) {\n const element = (event.columns as any[])[index];\n const colIndex = columnOrder.indexOf(index);\n // set visibilty with redraw (=true)\n this.dataTable.column(colIndex).visible(element.visible, true);\n }\n // finally apply column order\n this.dataTable.colReorder.order(indexes, true);\n // simply redraw the table\n this.dataTable.draw();\n }\n });\n }\n\n /**\n *\n * @param options to pass an errorHandler callback, if desired\n * @returns void\n */\n public async exportView(options?: {errorHandler?: (reason?: any) => any}): Promise<void> {\n try {\n this._loading.showLoading();\n // validate query items and config\n if (!(this.lastQuery && this._lastQueryTotalItems && this.config)) {\n // do nothing\n return;\n }\n // get export settings\n const exportSettings = this._configuration.settings as ExportLimitConfiguration;\n // and export limit\n const exportLimit =\n (exportSettings && exportSettings.tables && exportSettings.tables.exportLimit && exportSettings.tables.exportLimit > 0)\n ? exportSettings.tables.exportLimit : MAX_EXPORT_ITEMS;\n // and validate it\n if (this._lastQueryTotalItems > exportLimit) {\n // call error handler\n // provide a recognizible error type\n if (options && options.errorHandler) {\n options.errorHandler(new ExportLimitExceededError('Export limit exceeded'));\n return;\n }\n // or show warning modal and exit\n this._modalService.showWarningDialog(this._translateService.instant('Tables.ExportList'),\n this._translateService.instant('Tables.ExportLimitExceeded',\n {dataLength: this._lastQueryTotalItems, exportLimit}), DIALOG_BUTTONS.Ok);\n return;\n }\n // get total displayed items\n const totalDisplayedItems = Array.from(this.dataTable.context[0].aiDisplay).length;\n // if they already satisfy the last query total\n if (totalDisplayedItems === this._lastQueryTotalItems) {\n // prepare excel data immediately\n const {body, header} = this.getExportableData();\n // and export them to excel\n this._exportSpreadsheet.export(body, `${this._translateService.instant(this.config.title || 'Tables.ExportResults')}.xlsx`, {\n header,\n skipHeader: false\n });\n } else {\n // at this point, more data need to be fetched\n // hold previous data state\n const previousDataState = this.dataTable.rows().data().toArray();\n // get target data state by executing the last query\n // note: taking the exportLimit amount of items will always satisfy the results,\n // because it has been validated\n const targetDataState = await this.lastQuery.take(exportLimit).getItems();\n // change table data on the fly, but do not redraw\n this.dataTable.clear().rows.add(targetDataState);\n // prepare excel data\n const {body, header} = this.getExportableData();\n // reset table data\n this.dataTable.clear().rows.add(previousDataState);\n // and export target data to excel\n this._exportSpreadsheet.export(body, `${this._translateService.instant(this.config.title || 'Tables.ExportResults')}.xlsx`, {\n header,\n skipHeader: false\n });\n }\n // exit\n return;\n } catch (err) {\n // log error\n console.error(err);\n // call error handler, if defined\n if (options && options.errorHandler) {\n options.errorHandler(err);\n } else {\n // use default error service\n this._errorService.showError(err, {\n continueLink: '.'\n });\n }\n } finally {\n this._loading.hideLoading();\n }\n }\n\n public getExportableData(): {body: any[], header: any[]} {\n if (!(this.dataTable && this.dataTable.buttons\n && typeof this.dataTable.buttons.exportData === 'function' && this.config)) {\n return {body: [], header: []};\n }\n // fetch exportable excel data\n let {body, header} = this.dataTable.buttons.exportData();\n const cleanupIndexes: number[] = [];\n // clean up headers\n header = header.filter((headerItem: string, index: number) => {\n // exclude empty headers\n if (headerItem.trim().length === 0) {\n cleanupIndexes.push(index);\n return false;\n }\n // exclude hidden columns\n // note: use the datatable visible() function\n // instead of the hidden config property, to satisfy the column selector\n if (!this.dataTable.column(index).visible()) {\n cleanupIndexes.push(index);\n return false;\n }\n return true;\n });\n // clean up body\n body = body.map((row: any []) => {\n return row.filter((_, rowIndex: number) => {\n return cleanupIndexes.indexOf(rowIndex) === -1;\n });\n });\n return {body, header};\n }\n}\n\n// const endRender = function (rows, group) { var count = rows.data(); rows.count(); \n// return (`<ng-container [ngTemplateOutlet]=\"rowGroupTemplate\" [ngTemplateOutletContext]=\"{ data: ${group} }\"></ng-container>`); };\n // <ng-container [ngTemplateOutlet]=\"rowGroupTemplate\" [ngTemplateOutletContext]=\"{ data: }\"></ng-container>\n // return ('<span align=\"left\"\"><strong>'+ group + ' ' + `(${totalHeader} ` + count.length + ')</strong></span>'); };\n","import { Component, OnInit, ViewChild, OnDestroy, Input } from '@angular/core';\nimport { AngularDataContext } from '@themost/angular';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\n// tslint:disable-next-line: max-line-length\nimport { AdvancedTableComponent, AdvancedTableDataResult, AdvancedTableConfiguration } from '../advanced-table/advanced-table.component';\nimport { ErrorService, DIALOG_BUTTONS, ModalService, UserActivityService } from '@universis/common';\nimport { ResponseError } from '@themost/client';\nimport { TableConfiguration } from '../advanced-table/advanced-table.interfaces';\nimport { ToastService } from '@universis/common';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-list',\n templateUrl: './advanced-list.component.html'\n})\nexport class AdvancedListComponent implements OnInit, OnDestroy {\n\n public recordsTotal?: number;\n public config?: TableConfiguration;\n private subscription?: Subscription;\n private dataSubscription?: Subscription;\n private reloadSubscription?: Subscription;\n @Input('entitySet') entitySet?: string;\n @Input('category') category?: string;\n @Input('description') description?: string;\n @Input('longDescription') longDescription?: string;\n @Input('tableConfiguration') tableConfiguration: any;\n @Input('searchConfiguration') searchConfiguration: any;\n @ViewChild('table') table?: AdvancedTableComponent;\n @Input('allowSaveOption') allowSaveOption = true;\n\n constructor(private _context: AngularDataContext,\n private _translateService: TranslateService,\n private _activatedRoute: ActivatedRoute,\n private _errorService: ErrorService,\n private _toastService: ToastService,\n private _modalService: ModalService,\n private _userActivityService: UserActivityService\n ) { }\n ngOnDestroy(): void {\n if (this.dataSubscription) {\n this.dataSubscription.unsubscribe();\n }\n if (this.reloadSubscription) {\n this.reloadSubscription.unsubscribe();\n }\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n async ngOnInit() {\n try {\n if (this.table == null) {\n return;\n }\n const table = this.table;\n // get metadata\n const metadata = await this._context.getMetadata();\n // get route data\n this.dataSubscription = this._activatedRoute.data.subscribe( routeData => {\n // get entityType\n const re = new RegExp(`^${routeData.model}$`, 'ig');\n const entitySet = metadata.EntityContainer.EntitySet.find( x => {\n return re.test(x.Name);\n });\n // if entity type is null\n if (entitySet == null) {\n // navigate to error\n return this._errorService.navigateToError(new ResponseError('EntitySet Not Found', 404));\n }\n // get entity type\n const entityType = metadata.EntityType.find( x => {\n return x.Name === entitySet.EntityType;\n });\n if (entityType == null) {\n return this._errorService.navigateToError(new ResponseError('EntityType Not Found', 404));\n }\n if (routeData.searchConfiguration) {\n if (Object.prototype.hasOwnProperty.call(routeData.searchConfiguration, 'allowSave')) {\n this.allowSaveOption = routeData.searchConfiguration.allowSave;\n }\n this.searchConfiguration = routeData.searchConfiguration;\n }\n if (routeData.tableConfiguration) {\n this.tableConfiguration = routeData.tableConfiguration;\n }\n if (routeData.description) {\n this.description = this._translateService.instant(routeData.description);\n }\n if (routeData.longDescription) {\n this.longDescription = this._translateService.instant(routeData.longDescription);\n }\n if (routeData.category) {\n this.category = this._translateService.instant(routeData.category);\n }\n // clone default configuration\n const defaultConfiguration = AdvancedTableConfiguration.cast(this.tableConfiguration, true);\n // correct edit button link\n const column = defaultConfiguration.columns.find( col => {\n return col.formatter === 'ButtonFormatter' && col.formatString === '(modal:edit)';\n });\n if (column) {\n const url: Array<string> = [];\n this._activatedRoute.snapshot.pathFromRoot.forEach( route => {\n url.push.apply(url, route.url);\n });\n column.formatString = `#/${url.join('/')}/(modal:\\$\\{id\\}/edit)`;\n }\n // create list configuration by assigning list entity set\n table.config = Object.assign({\n model: entitySet.Name\n }, defaultConfiguration);\n // fetch data\n table.fetch(true);\n // do reload by using hidden fragment e.g. /classes#reload\n this.reloadSubscription = this._activatedRoute.fragment.subscribe(fragment => {\n if (fragment && fragment === 'reload') {\n this._toastService.show(\n this.description as string,\n this._translateService.instant('Settings.OperationCompleted')\n );\n table.fetch(true);\n }\n });\n // finally add user activity\n this._userActivityService.setItem({\n category: this.category as string,\n description: this.description as string,\n url: window.location.hash.substring(1),\n dateCreated: new Date\n });\n });\n } catch (err) {\n console.error(err);\n return this._errorService.showError(err);\n }\n }\n\n\n /**\n * Data load event handler of advanced table component\n * @param data\n */\n onDataLoad(data: AdvancedTableDataResult) {\n this.recordsTotal = data.recordsTotal;\n }\n\n /**\n * Remove selected items\n */\n remove() {\n const table = this.table;\n if (table && table.selected && table.selected.length) {\n // get items to remove\n const items = table.selected;\n return this._modalService.showWarningDialog(\n this._translateService.instant('Tables.RemoveItemsTitle'),\n this._translateService.instant('Tables.RemoveItemsMessage'),\n DIALOG_BUTTONS.OkCancel).then(result => {\n if (result === 'ok') {\n this._context.model(table.config.model).remove(items).then(() => {\n this._toastService.show(\n this.description + ':' + this._translateService.instant('Tables.RemoveItemMessage.title'),\n this._translateService.instant((items.length === 1 ?\n 'Tables.RemoveItemMessage.one' : 'Tables.RemoveItemMessage.many')\n , { value: items.length })\n );\n table.fetch(true);\n }).catch(err => {\n this._errorService.showError(err, {\n continueLink: '.'\n });\n });\n }\n });\n }\n }\n}\n","import {Component, OnInit, OnDestroy, Input, EventEmitter,\n ViewChild, ElementRef, ViewEncapsulation, AfterViewInit, Output} from '@angular/core';\nimport {TranslateService} from '@ngx-translate/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport 'rxjs/add/observable/combineLatest';\nimport {ModalService} from '@universis/common';\nimport {RouterModalOkCancel} from '@universis/common/routing';\nimport {Observable, Subscription} from 'rxjs';\nimport {AdvancedFormComponent} from '@universis/forms';\nimport { ProgressbarComponent } from 'ngx-bootstrap/progressbar';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-row-action',\n templateUrl: './advanced-row-action.component.html',\n styles: [\n `\n .fa-1_5x {\n font-size: 1.5rem;\n }\n .form-control:disabled, .form-control[readonly] {\n background-color: inherit;\n }\n .form-check.checkbox {\n position: relative\n }\n `\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class AdvancedRowActionComponent extends RouterModalOkCancel implements OnInit, AfterViewInit, OnDestroy {\n\n invalidSubscription: any;\n\n\n @Input() items: any;\n @Input() modalIcon = 'fas fa-project-diagram';\n @Input() description?: string;\n @Input() formTemplate?: string;\n @Input() progressType = 'indigo';\n @Output() data: any;\n @Input() additionalMessage?: string;\n @Input() errorMessage = 'Tables.Actions.CompletedWithErrors';\n public lastError: any;\n public loading = false;\n @ViewChild('progress') progressComponent?: ProgressbarComponent;\n @ViewChild('progressContainer') progressContainer?: ElementRef;\n @ViewChild('formComponent') formComponent?: AdvancedFormComponent;\n @Input() refresh: any = new EventEmitter<any>();\n @Input() execute?: Observable<any>;\n private refreshSubscription?: Subscription;\n private executeSubscription?: Subscription;\n\n constructor(router: Router,\n activatedRoute: ActivatedRoute,\n private _translateService: TranslateService,\n private _modalService: ModalService) {\n super(router, activatedRoute);\n // set modal size\n this.modalClass = 'modal-lg';\n // set modal title\n this.modalTitle = 'Tables.Actions.Label';\n // disable ok button\n this.okButtonDisabled = false;\n // set button text\n this.okButtonText = 'Tables.Actions.Start';\n }\n\n get form() {\n return this.formComponent;\n }\n ngOnInit() {\n this.refreshSubscription = this.refresh.subscribe((value) => {\n if (this.progressComponent == null) {\n return;\n }\n if (value && value.progress) {\n let progress = 0;\n if (value.progress < 0) {\n progress = 0;\n } else if (value.progress > 100) {\n progress = 100;\n } else {\n progress = value.progress;\n }\n this.progressComponent.value = progress;\n this.showProgress();\n }\n });\n\n }\n\n ngAfterViewInit(): void {\n if (this.formComponent && this.formComponent.form) {\n this.okButtonDisabled = true;\n this.invalidSubscription = this.formComponent.form.change.subscribe((event: any) => {\n if (Object.prototype.hasOwnProperty.call(event, 'isValid') && (event.changed != null)) {\n this.okButtonDisabled = !event.isValid;\n }\n });\n }\n }\n\n ngOnDestroy() {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n }\n if (this.executeSubscription) {\n this.executeSubscription.unsubscribe();\n }\n if (this.invalidSubscription) {\n this.invalidSubscription.unsubscribe();\n }\n }\n\n cancel(): Promise<any> {\n if (this.loading) {\n return Promise.resolve();\n }\n // close\n if (this._modalService.modalRef) {\n return this._modalService.modalRef.hide();\n }\n return Promise.resolve();\n }\n\n async ok() {\n try {\n if (this.execute == null) {\n return;\n }\n this.loading = true;\n this.lastError = null;\n if (this.formComponent && this.formComponent.form &&\n this.formComponent.form.formio && this.formComponent.form.formio.data) {\n // set data\n this.data = this.formComponent.form.formio.data;\n }\n // do action\n this.execute.subscribe((result) => {\n this.loading = false;\n this.refresh.emit({\n progress: 100\n });\n if (result && result.errors && result.errors > 0) {\n // show message for partial success\n if (result.errors === 1) {\n this.lastError = new Error(this._translateService.instant(\n `${this.errorMessage}.Description.One`));\n } else {\n this.lastError = new Error(this._translateService.instant(\n `${this.errorMessage}.Description.Many`,\n result));\n }\n this.refresh.emit({\n progress: 1\n });\n this.hideProgress();\n return;\n }\n if (this._modalService.modalRef) {\n this._modalService.modalRef.hide();\n }\n }, (err) => {\n this.loading = false;\n this.lastError = err;\n this.refresh.emit({\n progress: 0\n });\n });\n } catch (err) {\n this.loading = false;\n this.lastError = err;\n }\n }\n\n showProgress() {\n if (this.progressContainer) {\n this.progressContainer.nativeElement.classList.replace('invisible', 'visible');\n }\n }\n\n hideProgress() {\n if (this.progressContainer) {\n this.progressContainer.nativeElement.classList.replace('visible', 'invisible');\n }\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\n@Component({\n template: ''\n })\nexport class AdvancedTableSearchBaseComponent {\n private _filter: any;\n @Output() filterChange = new EventEmitter();\n\n @Input()\n get filter() {\n return this._filter;\n }\n\n set filter(value) {\n this._filter = value;\n }\n\n onKeyEnter(event: KeyboardEvent) {\n if (event.code === 'Enter') {\n this.filterChange.emit(this._filter);\n }\n }\n}\n","// tslint:disable-next-line:max-line-length\nimport {AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, ViewEncapsulation, OnChanges, SimpleChanges} from '@angular/core';\nimport {FormioComponent, FormioForm} from 'angular-formio';\nimport {AngularDataContext} from '@themost/angular';\nimport {ActivatedRoute} from '@angular/router';\nimport {ServiceUrlPreProcessor, TranslatePreProcessor} from '@universis/forms';\nimport {AdvancedTableSearchBaseComponent} from '../advanced-table/advanced-table-search-base';\nimport {TranslateService} from '@ngx-translate/core';\nimport {Subscription} from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-search-form',\n template: `\n <div class=\"p-4\">\n <formio #formioComponent class=\"formio-search\"\n (keydown)=\"onKeyEnter($event)\" (change)=\"onChange($event)\" (formLoad)=\"onFormLoad($event)\"\n [refresh]=\"refreshForm\" [submission]=\"submission\" [form]=\"form\"></formio>\n </div>\n `,\n styleUrls: ['./advanced-search-form.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AdvancedSearchFormComponent extends AdvancedTableSearchBaseComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges {\n\n\n @ViewChild('formioComponent') formComponent?: FormioComponent;\n @Input() form: any = {};\n @Input() formSrc?: string;\n @Output() refreshForm = new EventEmitter<any>();\n @Output() loading = new EventEmitter<{ target: AdvancedSearchFormComponent}>();\n submission: any = { data: {} };\n private filterSubscription?: Subscription;\n public componentLoading = true;\n\n constructor(private _context: AngularDataContext,\n private _translateService: TranslateService,\n private _activatedRoute: ActivatedRoute,\n private _http: HttpClient\n ) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (Object.prototype.hasOwnProperty.call(changes, 'form')) {\n if (changes.form != null) {\n if (changes.form.currentValue &&\n // tslint:disable-next-line:triple-equals\n changes.form.currentValue != changes.form.previousValue) {\n this.ngOnInit();\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(changes, 'formSrc')) {\n if (changes.formSrc != null) {\n if (changes.formSrc.currentValue &&\n // tslint:disable-next-line:triple-equals\n changes.formSrc.currentValue != changes.formSrc.previousValue) {\n this._http.get(changes.formSrc.currentValue).toPromise().then((form) => {\n // set form\n this.form = form;\n // and init\n this.ngOnInit();\n }).catch((err) => {\n console.error('An error occurred while loading search configuration');\n console.error(err);\n });\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(changes, 'filter')) {\n if (changes.filter != null) {\n this.submission.data = changes.filter.currentValue || {};\n this.refreshForm.emit({\n submission: this.submission\n });\n }\n }\n }\n\n ngOnInit(): void {\n if (this.form) {\n new ServiceUrlPreProcessor(this._context).parse(this.form);\n new TranslatePreProcessor(this._translateService).parse(this.form);\n this.submission = {\n data: this.filter\n };\n this.loading.emit({\n target: this\n });\n this.refreshForm.emit({\n form: this.form\n });\n this.componentLoading = false;\n this.filterSubscription = this.filterChange.subscribe( filter => {\n this.submission.data = filter;\n this.refreshForm.emit({\n submission: this.submission\n });\n });\n }\n }\n\n onChange(event: object) {\n if (this.formComponent == null) {\n return;\n }\n const formComponent = this.formComponent;\n Object.keys(formComponent.submission.data).forEach(key => {\n if (Object.prototype.hasOwnProperty.call(formComponent.submission.data, key)) {\n const value = formComponent.submission.data[key];\n // the filter with type is a string and is not empty\n const isEmptyString = typeof value === 'string' && value.length === 0;\n // do not include empty objects in filter\n const isEmptyObject = typeof value === 'object' && Object.keys(value).length === 0;\n // make isEmptyString, isEmptyObject mutex\n if (!isEmptyString && !isEmptyObject) {\n Object.defineProperty(this.filter, key, {\n configurable : true,\n enumerable: true,\n value : value\n });\n } else {\n delete this.filter[key];\n }\n }\n });\n }\n\n onFormLoad(form: FormioForm) {\n if (this.formComponent == null) {\n return;\n }\n const currentLang = this._translateService.currentLang;\n this.formComponent.formio.i18next.options.resources[currentLang] = { translation : this._translateService.instant(`Forms`) };\n this.formComponent.formio.language = currentLang;\n }\n\n ngAfterViewInit(): void {\n //\n }\n\n ngOnDestroy(): void {\n if (this.filterSubscription) {\n this.filterSubscription.unsubscribe();\n }\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild, AfterViewInit, DoCheck } from '@angular/core';\nimport { RouterModalOkCancel } from '@universis/common/routing';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TableConfiguration } from '../advanced-table/advanced-table.interfaces';\nimport { Subscription } from 'rxjs';\nimport { AdvancedTableComponent, AdvancedTableDataResult } from '../advanced-table/advanced-table.component';\nimport { AngularDataContext } from '@themost/angular';\nimport { AdvancedFilterValueProvider } from './../advanced-table/advanced-filter-value-provider.service';\nimport { DatePipe } from '@angular/common';\nimport { TemplatePipe } from '@universis/common';\nexport declare interface PageInfo {\n page: number;\n pages: number;\n start: number;\n end: number;\n length: number;\n recordsTotal: number;\n recordsDisplay: number;\n serverSide?: boolean;\n}\n\n// important: export this const due to AOT compilation errors\n// see more https://angular.io/guide/aot-metadata-errors#only-initialized-variables\nexport const AdvancedTableModalBaseTemplate = `\n<div>\n <!-- search -->\n <div class=\"row mt-3\">\n <div class=\"col-12 col-lg-3\">\n <div class=\"input-group mb-3\">\n <input spellcheck=\"false\" type=\"text\" #searchElement\n (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"searchText\"\n class=\"form-control bg-gray-100 border-0\"\n placeholder=\"{{'Tables.SearchPlaceholder' | translate}}\" aria-label=\"Search\" aria-describedby=\"basic-addon2\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-default bg-gray-100 border-0\" type=\"button\" (click)=\"onSearch()\">\n <i class=\"fa fa-search text-secondary\"></i>\n </button>\n </div>\n </div>\n </div>\n <div #emptyTable class=\"d-none\">\n <div>\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-gray-300 border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-dark\" [translate]=\"'Tables.EmptyTableTitle'\"></h4>\n <p class=\"font-lg text-dark\" [translate]=\"'Tables.EmptyTableMessage'\"></p>\n </div>\n\n </div>\n </div>\n <div class=\"col-12 col-lg-5\">\n <div class=\"btn-toolbar\">\n <button class=\"btn btn-gray-100\">\n <i class=\"fa fa-sliders-h pr-2 text-secondary\" aria-hidden=\"true\"></i>{{'Tables.Filters' | translate}}\n </button>\n <div #dropdownFilter class=\"dropdown ml-3\">\n <button class=\"btn btn-gray-100 dropdown-toggle\"\n type=\"button\" id=\"dropdownDefaultFilters\"\n data-toggle=\"dropdown\" dropdownToggle>\n {{ this.defaultFilter.name | translate }}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownDefaultFilters\">\n <button type=\"button\" class=\"dropdown-item\" *ngFor=\"let filter of defaultFilters\" (click)=\"onFilterSelect(filter)\">\n {{ filter.name | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col text-lg-right mt-3 mt-lg-0 d-none\">\n <button [disabled]=\"true\" class=\"btn rounded-pill btn-outline-theme\">\n <span class=\"pr-2 font-lg\">+</span><span [translate]=\"'Tables.AddItem'\"></span>\n </button>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\" [ngClass]=\"{ 'component-loading': loading}\">\n <app-advanced-table #advancedTable (init)=\"onTableInit()\"\n (load)=\"onDataLoad($event)\"\n [selectable]=\"true\"\n [multipleSelect]=\"true\"\n [scrollX]=\"false\" [scrollY]=\"320\"\n [pageLength]=\"pageLength\"\n [scrollable]=\"false\" [showFooter]=\"false\"\n [showActions]=\"false\" [lengthMenu]=\"lengthMenu\"\n [config]=\"tableConfig\" [configSrc]=\"tableConfigSrc\"></app-advanced-table>\n </div>\n </div>\n <div class=\"row mt-3 table-custom-pager\">\n <div class=\"col-12 d-flex\" *ngIf=\"recordsTotal\">\n <div class=\"mt-2 ml-auto mr-3 text-secondary\" [translate]=\"'Tables.RecordsPerPage'\"></div>\n <div #dropdownLength class=\"dropdown mr-3\">\n <button class=\"btn btn-gray-100 dropdown-toggle\"\n type=\"button\" id=\"dropdownPageSize\" data-toggle=\"dropdown\"\n dropdownToggle>\n {{pageLength}}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownPageSize\">\n <button (click)=\"setLength(item)\"\n class=\"dropdown-item dropdown-item-theme\"\n type=\"button\" *ngFor=\"let item of lengthMenu\">{{item}}</button>\n </div>\n </div>\n <div class=\"mt-2 mr-2\" [translate]=\"'Tables.PageInfo'\" [translateParams]=\"pageInfo\"></div>\n <button [disabled]=\"pageInfo && pageInfo.page === 0\" class=\"btn text-nowrap\" (click)=\"firstPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===0\" class=\"btn\" (click)=\"previousPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn\" (click)=\"nextPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn text-nowrap\" (click)=\"lastPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n </div>\n </div>\n </div>\n`;\n\n/**\n *\n * A specific value for a criterion\n *\n */\ninterface SearchItem {\n filter: any;\n name: string;\n}\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-advanced-table-modal',\n template: AdvancedTableModalBaseTemplate,\n styles: [\n `\n\n `\n ]\n})\nexport class AdvancedTableModalBaseComponent extends RouterModalOkCancel implements OnInit, OnDestroy, AfterViewInit {\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (this.searchElement && this.searchElement.nativeElement) {\n this.searchElement.nativeElement.focus();\n }\n }, 0);\n }\n\n private static readonly DEFAULT_ALL_FILTER = {\n name: 'Tables.All',\n filter: null\n };\n\n @ViewChild('advancedTable') advancedTable?: AdvancedTableComponent;\n @ViewChild('emptyTable') emptyTable?: ElementRef;\n @ViewChild('dropdownFilter') dropdownFilter?: ElementRef;\n @ViewChild('dropdownLength') dropdownLength?: ElementRef;\n @ViewChild('searchElement') searchElement: any;\n @Input('tableConfig') tableConfig?: TableConfiguration;\n @Input('tableConfigSrc') tableConfigSrc?: string;\n @Input('pageLength') pageLength = 25;\n @Input('searchText') searchText?: string;\n @Input('lengthMenu') lengthMenu: Array<number> = [5, 10, 25, 50, 100];\n private subscription?: Subscription;\n public recordsTotal = 0;\n public loading = false;\n public recordsFiltered = 0;\n public defaultFilters: Array<any> = [AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER];\n @Input('defaultFilter') defaultFilter = AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER;\n\n\n public pageInfo = <PageInfo>{\n serverSide: true\n };\n private _template: TemplatePipe;\n configChangesSubscription?: Subscription;\n\n constructor(\n _router: Router,\n _activatedRoute: ActivatedRoute,\n protected _context: AngularDataContext,\n protected advancedFilterValueProvider: AdvancedFilterValueProvider,\n protected datePipe: DatePipe\n ) {\n super(_router, _activatedRoute);\n this.modalClass = 'modal-xl modal-table';\n this._template = new TemplatePipe();\n }\n\n private _getInputs(componentType): Array<any> {\n const props = componentType.__prop__metadata__;\n const inputs: any[] = [];\n if (props == null) {\n return inputs;\n }\n Object.keys(props).forEach(prop => {\n const member = props[prop][0];\n if (member.ngMetadataName === 'Input') {\n inputs.push(prop);\n }\n });\n return inputs.sort();\n }\n\n public hasInputs(): Array<string> {\n return [];\n }\n\n ngOnInit() {\n\n this.okButtonText = 'Tables.Apply';\n this.cancelButtonText = 'Tables.Cancel';\n // get route data\n this.subscription = this.activatedRoute.data.subscribe(data => {\n // set modal title if any\n if (data.title) {\n this.modalTitle = data.title;\n }\n\n if (data.config) {\n this.tableConfig = data.config;\n }\n if (this.tableConfig) {\n this.defaultFilters.push.apply(this.defaultFilters, this.tableConfig.searches);\n }\n // important: use hasInputs due to AOT compilation. Metadata properties cannot be used (e.g. @Input())\n // because there are empty during runtime\n // so we need to define manually input properties that are going to be bind through this process\n // bind all inputs\n const inputs = this.hasInputs();\n inputs.forEach(input => {\n if (Object.prototype.hasOwnProperty.call(data, input)) {\n this[input] = data[input];\n }\n });\n if (this.advancedTable) {\n this.configChangesSubscription = this.advancedTable.configChanges.subscribe((config) => {\n if (this.tableConfig) {\n // reset default filter\n this.defaultFilter = AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER;\n // init filter\n this.defaultFilters = [AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER];\n // add extra filters\n this.defaultFilters.push.apply(this.defaultFilters, this.tableConfig.searches);\n }\n });\n }\n });\n }\n\n cancel(): Promise<any> {\n return this.close();\n }\n\n ok(): Promise<any> {\n return this.close();\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n onDataLoad(data: AdvancedTableDataResult) {\n this.recordsTotal = data.recordsTotal;\n this.recordsFiltered = data.recordsFiltered;\n // get first page info (because page is not going to be fired for first page)\n if (data.recordsTotal > 0 && this.pageInfo.recordsTotal === 0) {\n this.pageInfo.recordsTotal = data.recordsTotal;\n }\n const self = this;\n }\n\n previousPage() {\n if (this.advancedTable) {\n // go to next page\n // noinspection TypeScriptValidateJSTypes\n this.advancedTable.dataTable.page('previous').draw('page');\n }\n }\n\n nextPage() {\n if (this.advancedTable) {\n // go to next page\n // noinspection TypeScriptValidateJSTypes\n this.advancedTable.dataTable.page('next').draw('page');\n }\n }\n\n onTableInit() {\n const self = this;\n const dataTable = self.advancedTable && self.advancedTable.dataTable;\n // get initial page info\n const initialPageInfo = <PageInfo>dataTable.page.info();\n initialPageInfo.start += 1;\n self.pageInfo = initialPageInfo;\n // change emptyTableMessage\n dataTable.context[0].oLanguage.sEmptyTable = this.emptyTable && this.emptyTable.nativeElement.innerHTML;\n // bind page change event\n dataTable.on('page.dt', function () {\n const pageInfo = <PageInfo>dataTable.page.info();\n pageInfo.start += 1;\n self.pageInfo = pageInfo;\n });\n // bind draw change event\n dataTable.on('draw.dt', function () {\n // for future use\n self.loading = false;\n const pageInfo = <PageInfo>dataTable.page.info();\n pageInfo.start += 1;\n self.pageInfo = pageInfo;\n });\n }\n\n firstPage() {\n if (this.advancedTable) {\n // go to first page\n // noinspection TypeScriptValidateJSTypes\n this.advancedTable.dataTable.page('first').draw('page');\n }\n }\n\n lastPage() {\n if (this.advancedTable) {\n // go to last page\n // noinspection TypeScriptValidateJSTypes\n this.advancedTable.dataTable.page('last').draw('page');\n }\n }\n\n setLength(value: number) {\n if (this.advancedTable) {\n this.pageLength = value;\n this.advancedTable.dataTable.page.len(value).draw();\n }\n }\n\n onKeyUp(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === 'Return') {\n if (this.advancedTable) {\n // loading\n this.loading = true;\n this.advancedTable.search((<HTMLInputElement>event.target).value);\n }\n }\n }\n\n onSearch() {\n if (this.advancedTable) {\n // loading\n this.loading = true;\n this.advancedTable.search(this.searchText);\n }\n }\n\n /**\n *\n * Reads the modal table and returns a list of filters to use in the table\n * query.\n *\n * @param tableConfig {object} The table configuration from json file\n * @param defaultFilterValues {object} A list of default filters\n * @param searchItem The searchItem to use\n *\n */\n getFilters(\n tableConfig: any,\n defaultFilterValues = {},\n searchItem: any\n ): Array<string> {\n // Do nothing in absence of configuration.\n if (!tableConfig || !Array.isArray(tableConfig.criteria)) {\n return [];\n }\n\n if (searchItem.filter == null) {\n return [];\n }\n\n const matchedCriterion = tableConfig.criteria.find(criterion =>\n Object.prototype.hasOwnProperty.call(searchItem.filter, criterion.name)\n );\n\n if (matchedCriterion == null) {\n return [];\n }\n\n const value = searchItem.filter[matchedCriterion.name];\n\n const criterionSafeName = matchedCriterion.name !== null\n ? matchedCriterion.name.toString()\n : '';\n\n let applicableFilter: string;\n\n // Raw dates should be transformed to a specific format\n if (criterionSafeName.includes('GMT')) {\n const newDate = this.datePipe.transform(criterionSafeName, 'MM/dd/yyyy');\n applicableFilter = this._template.transform(matchedCriterion.filter, {\n value: newDate\n });\n\n } else if (criterionSafeName !== 'undefined') {\n applicableFilter = (this._template.transform(matchedCriterion.filter, Object.assign({\n value: value\n }, defaultFilterValues)));\n } else {\n applicableFilter = '';\n }\n\n return [applicableFilter];\n }\n\n onFilterSelect(value: { filter: any; name: string } | any) {\n this.advancedSearch(value);\n }\n\n /**\n *\n * Runs a filter against the modal table\n *\n * @param filter The filter to use in the search\n *\n */\n async advancedSearch(filter): Promise<any> {\n // Do nothing in absence of configuration.\n if (!this.tableConfig || !Array.isArray(this.tableConfig.criteria) || !this.advancedTable) {\n console.warn('No table configuration available', this.tableConfig);\n return;\n }\n\n // An advanced table has some filters by default\n let defaultFilterValues;\n try {\n defaultFilterValues = await this.advancedFilterValueProvider.getValues();\n } catch (err) {\n defaultFilterValues = {};\n }\n\n const expressions: any[] = [];\n let predefinedCriteria;\n if (filter) {\n this.defaultFilter = filter;\n predefinedCriteria = this.getFilters(\n this.tableConfig,\n defaultFilterValues,\n filter\n );\n } else {\n // Empty a falsy filter resets the results\n this.defaultFilter = AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER;\n }\n\n // search filter is applied separately, there is no need to add here.\n expressions.push(predefinedCriteria);\n\n const query = this._context.model(this.advancedTable.config.model).asQueryable();\n query.setParam('filter', expressions.join(' and ')).prepare();\n this.advancedTable.query = query;\n this.advancedTable.fetch();\n }\n}\n\n","import { AdvancedTableModalBaseComponent } from '../advanced-table-modal/advanced-table-modal-base.component';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AdvancedFilterValueProvider } from '../advanced-table/advanced-filter-value-provider.service';\nimport { AngularDataContext } from '@themost/angular';\nimport { AfterViewInit, Component, ElementRef, EventEmitter, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DatePipe } from '@angular/common';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-advanced-select',\n templateUrl: './advanced-select.component.html',\n styles: [\n `\n .modal-table .dataTables_wrapper {\n height: 50vh;\n overflow-y: auto;\n }\n `,\n ],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AdvancedSelectComponent extends AdvancedTableModalBaseComponent implements AfterViewInit {\n\n public dismiss: EventEmitter<any> = new EventEmitter();\n @ViewChild('searchElement') searchElement: any;\n\n constructor(router: Router,\n activatedRoute: ActivatedRoute,\n context: AngularDataContext,\n advancedFilterValueProvider: AdvancedFilterValueProvider,\n datePipe: DatePipe,\n private _modalRef: BsModalRef,\n private el: ElementRef) {\n super(router, activatedRoute, context, advancedFilterValueProvider, datePipe);\n }\n\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n setTimeout(() => {\n if (this.searchElement && this.searchElement.nativeElement) {\n this.searchElement.nativeElement.focus();\n }\n }, 0);\n }\n\n public async ok() {\n this._modalRef.hide();\n this.dismiss.emit('ok');\n }\n\n public async cancel() {\n this._modalRef.hide();\n this.dismiss.emit('cancel');\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ModalService } from '@universis/common';\nimport { AdvancedSelectComponent } from './advanced-select.component';\n@Injectable()\nexport class AdvancedSelectService {\n\n constructor(private _modal: ModalService) {\n //\n }\n\n select(initialState: any): Promise<{result: string, items: Array<any>}> {\n return new Promise((resolve, reject) => {\n try {\n const modalRef = this._modal.openModalComponent(AdvancedSelectComponent, {\n class: 'modal-xl modal-table',\n ignoreBackdropClick: true,\n animated: true,\n initialState: initialState\n });\n const componentRef: AdvancedSelectComponent = modalRef.content;\n componentRef.dismiss.subscribe((result) => {\n return resolve({\n result: result,\n items: (componentRef.advancedTable && componentRef.advancedTable.selected) as any[]\n });\n });\n } catch (err) {\n return reject(err);\n }\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router';\nimport {HttpClient} from '@angular/common/http';\n\n@Injectable()\nexport class AdvancedTableConfigurationResolver implements Resolve<string> {\n constructor(private _http: HttpClient) {}\n resolve(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Promise<any>|any {\n // get list\n const list = route.data.list || route.params.list;\n // get model\n const model = route.data.model || route.params.model;\n // get configuration\n return this._http.get(`assets/lists/${model}/${list}.json`).toPromise();\n }\n}\n\n@Injectable()\nexport class AdvancedSearchConfigurationResolver implements Resolve<string> {\n constructor(private _http: HttpClient) {}\n resolve(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Promise<any>|any {\n // get list\n const list = route.data.list || route.params.list;\n // get model\n const model = route.data.model || route.params.model;\n // get configuration\n return this._http.get(`assets/lists/${model}/search.${list}.json`).toPromise();\n }\n}\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { AdvancedTableComponent } from './advanced-table.component';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { AngularDataContext } from '@themost/angular';\r\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\r\nimport { ActivatedTableService } from '../../tables.activated-table.service';\r\nimport { UserStorageService } from '@universis/common';\r\nimport { FormArray, FormBuilder, FormControl, FormGroup, ValidatorFn } from '@angular/forms';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'app-advanced-table-settings',\r\n templateUrl: './advanced-table-settings.component.html',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\n\r\nexport class AdvancedTableSettingsComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() table?: AdvancedTableComponent;\r\n @ViewChild('modal_settings_template') modal_settings_template?: ElementRef;\r\n modalRef?: BsModalRef;\r\n storageKey: any;\r\n params: any = this._activatedRoute.params;\r\n private savedTableSettings: any;\r\n form?: FormGroup;\r\n columns: any[] = [];\r\n tableColumns: any;\r\n activeTableConfig: any;\r\n\r\n constructor(protected _context: AngularDataContext,\r\n protected _activatedRoute: ActivatedRoute,\r\n private modalService: BsModalService,\r\n private userStorage: UserStorageService,\r\n private formBuilder: FormBuilder,\r\n private _activatedTable: ActivatedTableService) {\r\n }\r\n ngOnInit(): void {\r\n }\r\n ngAfterViewInit(): void {\r\n this.activeTableConfig = this._activatedTable.activeTable && this._activatedTable.activeTable.getConfig();\r\n this.storageKey = 'registrar/settings/' + this.activeTableConfig.title + '/table/columns';\r\n this.form = this.formBuilder.group({columns: new FormArray([], this.minSelectedColumns(1))});\r\n this.userStorage.getItem(this.storageKey).then((data) => {\r\n if (data) {\r\n this.savedTableSettings = data.value;\r\n if (this.savedTableSettings) {\r\n if (this._activatedTable.activeTable) {\r\n this._activatedTable.activeTable.handleColumns(this.savedTableSettings);\r\n }\r\n }\r\n this.addCheckboxes();\r\n }\r\n });\r\n }\r\n private addCheckboxes() {\r\n this.tableColumns = this.activeTableConfig.columns.slice(1);\r\n this.tableColumns.forEach ((column, i) => {\r\n if (!column.hidden) {\r\n const control = {\r\n id: column.name,\r\n name: column.title\r\n };\r\n this.columns.push(control);\r\n }\r\n });\r\n if (this.savedTableSettings) {\r\n this.columns.forEach ((column, i) => {\r\n column.check = false;\r\n column.check = this.savedTableSettings.includes(column.id);\r\n });\r\n this.columns.map((column, i) => {\r\n const control = new FormControl(column.check);\r\n if (this.form) {\r\n (this.form.controls.columns as FormArray).push(control);\r\n }\r\n });\r\n }\r\n }\r\n\r\n openTableSettings(table_settings_modal: TemplateRef<any>) {\r\n this.modalRef = this.modalService.show(table_settings_modal);\r\n }\r\n\r\n saveTableSettings() {\r\n if (this.form == null) {\r\n return;\r\n }\r\n const selectedColumnsIds = this.form.value.columns\r\n .map((v, i) => v ? this.columns[i].id : null)\r\n .filter(v => v !== null);\r\n this.userStorage.setItem(this.storageKey, selectedColumnsIds);\r\n if (this._activatedTable.activeTable) {\r\n this._activatedTable.activeTable.handleColumns(selectedColumnsIds);\r\n }\r\n if (this.modalRef) {\r\n this.modalRef.hide();\r\n }\r\n }\r\n\r\n dismiss() {\r\n if (this.modalRef) {\r\n this.modalRef.hide();\r\n }\r\n }\r\n\r\n minSelectedColumns(min = 1) {\r\n const validator: ValidatorFn = (formArray: FormArray) => {\r\n const totalSelected = formArray.controls\r\n .map(control => control.value)\r\n .reduce((prev, next) => next ? prev + next : prev, 0);\r\n\r\n return totalSelected >= min ? null : { required: true };\r\n };\r\n\r\n return validator;\r\n }\r\n}\r\n","import {Component, Input, OnInit, Output, ViewChild,\n ViewEncapsulation, EventEmitter, AfterViewInit, TemplateRef, OnDestroy} from '@angular/core';\nimport { AdvancedTableComponent } from './advanced-table.component';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AngularDataContext } from '@themost/angular';\nimport { DatePipe } from '@angular/common';\nimport { UserStorageService, ModalService, DIALOG_BUTTONS } from '@universis/common';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { TranslateService } from '@ngx-translate/core';\nimport {AdvancedFilterValueProvider} from './advanced-filter-value-provider.service';\nimport { AdvancedTableSearchBaseComponent } from './advanced-table-search-base';\nimport {TemplatePipe} from '@universis/common';\nimport { Subscription } from 'rxjs';\nimport { TextUtils } from '@themost/client';\n\nexport interface AdvancedSearchViewStatus {\n advancedView: boolean;\n}\n\nexport interface AdvancedSearchList {\n name: string;\n}\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-advanced-table-search',\n templateUrl: './advanced-table-search.component.html',\n encapsulation: ViewEncapsulation.None,\n})\n\nexport class AdvancedTableSearchComponent extends AdvancedTableSearchBaseComponent implements OnInit, AfterViewInit, OnDestroy {\n\n private queryParamSubscription?: Subscription;\n private configChangesSubscription?: Subscription;\n @Input() public table?: AdvancedTableComponent;\n @Input() public collapsed = true;\n @Input() public allowSave = true;\n @Input() public showMore = true;\n @Input() public mergeQueryParams = false;\n @ViewChild('searchText') public searchText: any;\n @Output('viewChange') public viewChange: EventEmitter<AdvancedSearchViewStatus> = new EventEmitter<AdvancedSearchViewStatus>();\n @Output('listChange') public listChange: EventEmitter<AdvancedSearchList> = new EventEmitter<AdvancedSearchList>();\n public set text(value: string) {\n if (this.searchText) {\n this.searchText.nativeElement.value = value;\n }\n }\n\n public get text(): string {\n return (this.searchText && this.searchText.nativeElement && this.searchText.nativeElement.value) as string;\n }\n\n public modalRef?: BsModalRef;\n public storageKey: any;\n public storageValue: any;\n public userSearchList: any = [];\n public selectedList: any = null;\n\n constructor( protected _context: AngularDataContext,\n protected _activatedRoute: ActivatedRoute,\n protected datePipe: DatePipe,\n private _modalService: BsModalService,\n private _userStorage: UserStorageService,\n private _translate: TranslateService,\n private _advancedSearchValueProvider: AdvancedFilterValueProvider,\n private _template: TemplatePipe,\n private _router: Router,\n private _modal: ModalService) { super(); }\n\n public ngOnInit(): void {\n if (this.table == null) {\n return;\n }\n this.configChangesSubscription = this.table.configChanges.subscribe((config) => {\n if (config == null) {\n return;\n }\n // load user searches\n this.loadUserSearchList().then(() => {\n // if search component merges query params\n // (uses queryParams to apply filter)\n if (this.mergeQueryParams) {\n this.queryParamSubscription = this._activatedRoute.queryParams.subscribe((queryParams) => {\n this.applyQueryParams(queryParams);\n });\n }\n });\n });\n }\n\n /**\n * Applies query given by the queryParams of the activated route\n * @param queryParams\n */\n private applyQueryParams(queryParams: any) {\n if (this.table == null) {\n return;\n }\n const table = this.table;\n this.filter = {};\n if (Object.prototype.hasOwnProperty.call(queryParams, 'q')) {\n // set collapsed\n this.collapsed = true;\n // search text\n this.text = queryParams.q;\n return table.search(this.text);\n } else {\n this.text = '';\n }\n\n let filterParams = Object.assign({}, queryParams);\n\n if (Object.prototype.hasOwnProperty.call(queryParams, 's')) {\n // set collapsed\n this.collapsed = false;\n // find user search by name\n if (this.userSearchList) {\n this.selectedList = this.userSearchList.find((item) => {\n return item.name === queryParams.s;\n });\n if (this.selectedList) {\n filterParams = this.selectedList.filter;\n }\n }\n } else {\n this.selectedList = null;\n }\n\n Object.keys(filterParams).filter((key) => {\n // search criteria\n if (table.config && table.config.criteria) {\n return table.config.criteria.find((item) => {\n return item.name === key;\n });\n }\n }).forEach((key) => {\n let value = filterParams[key];\n if (TextUtils.isNumber(value)) {\n value = parseFloat(filterParams[key]);\n }\n if (this.filter[key] !== value) {\n // set value\n Object.defineProperty(this.filter, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value,\n });\n }\n if (this.filter[key] != null) {\n this.collapsed = false;\n }\n });\n\n // call filterChange event to apply change to advanced search children\n this.filterChange.emit(this.filter);\n // apply query\n this.getQuery().then((query) => {\n // if table query is null\n if (table.query == null) {\n // set query\n table.query = query;\n } else {\n if (query != null && query.getParams()['$filter']) {\n const params = query.getParams();\n // otherwise set filter params\n table.query.setParam('$filter', params.$filter);\n } else {\n table.query.setParam('$filter', null);\n }\n }\n // and finally fetch data\n table.fetch(true);\n });\n }\n\n public ngOnDestroy(): void {\n if (this.queryParamSubscription) {\n this.queryParamSubscription.unsubscribe();\n }\n if (this.configChangesSubscription) {\n this.configChangesSubscription.unsubscribe();\n }\n }\n\n public ngAfterViewInit(): void {\n\n }\n\n public onSearchKeyDown(event: any) {\n if (this.table && event.keyCode === 13) {\n // get search text\n const searchText = ( event.target as HTMLInputElement).value;\n // merge query params ?\n if (this.mergeQueryParams) {\n const queryParams = {\n q: searchText,\n };\n if (this.table.config && this.table.config.criteria) {\n this.table.config.criteria.forEach((item) => {\n Object.defineProperty(queryParams, item.name, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: null,\n });\n });\n }\n // try to apply filter by appending query params\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n this.filterChange.emit({\n q: searchText\n });\n // otherwise do search\n this.table.search(searchText);\n return false;\n }\n }\n\n public transformDate(date) {\n date = this.datePipe.transform(date, 'MM/dd/yyyy'); // whatever format you need.\n return date;\n }\n\n public convertToString(nameFilter) {\n let name = '';\n if (nameFilter != null) {\n name = nameFilter.toString();\n }\n return name;\n }\n\n// Load saved criteria searches user has stored before\n private loadUserSearchList(): Promise<void> {\n if (this.table == null) {\n return Promise.resolve();\n }\n this.storageKey = 'tables/' + this.table.config.model + '/searches';\n return this._userStorage.getItem(this.storageKey).then((data) => {\n const list = data.value || [];\n // if table configuration has pre-defined searches\n if (this.table && this.table.config.searches && this.table.config.searches.length) {\n // add pre-defined lists\n list.push.apply(list, this.table.config.searches.map ( (x) => {\n x.readOnly = true; // as readonly\n x.name = this._translate.instant(x.name);\n return x;\n }));\n }\n // set user search list\n this.userSearchList = list;\n return Promise.resolve();\n }).catch((err) => {\n // DO NOT THROW ERROR\n // todo: notify component for this error in order to disable some actions\n console.error('An error occurred while getting user search list');\n console.error(err);\n return Promise.resolve();\n });\n }\n\n public onSelectUserSearch(event: any): any {\n if (this.selectedList && this.table) {\n const listFound = this.searchInListByName(this.selectedList.name);\n if (listFound) {\n if (this.mergeQueryParams) {\n const queryParams = { q: null, s: this.selectedList.name };\n // clear criteria if any\n this.table.config.criteria.forEach((item) => {\n if (Object.prototype.hasOwnProperty.call(queryParams, item.name) === false) {\n // set null value\n Object.defineProperty(queryParams, item.name, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: null,\n });\n }\n });\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n this.selectedList = listFound;\n this.filter = this.selectedList.filter;\n this.filterChange.emit(this.filter);\n return true;\n }\n } else {\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams: { s: null },\n queryParamsHandling: 'merge',\n });\n }\n return false;\n }\n\n public searchInListByName(name: string): any {\n if ( Array.isArray(this.userSearchList) ) {\n const listFound = this.userSearchList.find( (x) => x.name === name);\n if ( listFound ) {\n return listFound;\n } else {\n return false;\n }\n }\n }\n\n// Update list item contents with given content (Search by object name property)\n public updateSavedSearchListItemByName( name: string, newItem: any ) {\n const itemInList = this.userSearchList.find( (x) => x.name === name );\n const index = this.userSearchList.indexOf(itemInList);\n this.userSearchList[index] = newItem;\n this.selectedList = this.userSearchList[index];\n }\n\n// Update list item contents with given content (Search by object)\n public updateSavedSearchListItemByObject( itemInList: any, newItem: any ) {\n const index = this.userSearchList.indexOf(itemInList);\n this.userSearchList[index] = newItem;\n this.selectedList = this.userSearchList[index];\n }\n\n// Delete list item from list\n public deleteItemFromSavedSearchListByObject( itemInList: any) {\n this.userSearchList = this.userSearchList.filter((item) => item !== itemInList);\n this.selectedList = null;\n this.filter = {};\n this.advancedSearch(true);\n this.uploadListOnUserStorage();\n }\n\n// User chose to save its advanced form search criteria\n public saveSearch( templateToLoad: TemplateRef<any>, newList: boolean = true) {\n if (this.table && this.table.config.model) {\n// Set the corresponding key to its list and show a confirmation modal window\n this.storageKey = `tables/${this.table.config.model}/searches`;\n if (this.filter && Object.keys(this.filter).length) {\n// User wants to save an existing list from the dropdown\n if ( !newList && this.selectedList ) {\n const newItem = { name : this.selectedList.name, filter : { ... this.filter } };\n this.updateSavedSearchListItemByObject ( this.selectedList, newItem );\n this.uploadListOnUserStorage();\n// User wants to save a new list\n } else {\n this.modalRef = this._modalService.show(templateToLoad);\n }\n } else {\n// User did not define any criteria\n this._modal.showWarningDialog(\n this._translate.instant('AdvancedSearch.Modal.Title'),\n this._translate.instant('AdvancedSearch.Modal.EmptyCriteriaList'),\n DIALOG_BUTTONS.Ok);\n }\n } else {\n this._modal.showWarningDialog(\n this._translate.instant('AdvancedSearch.Modal.Title'),\n this._translate.instant('AdvancedSearch.Modal.NoListDefined'),\n DIALOG_BUTTONS.Ok);\n }\n }\n\n// User Accepted => Save list and Close modal\n public confirmModal( saveFormName ): void {\n// name given and list name is unique\n if ( saveFormName && !(this.searchInListByName(saveFormName)) ) {\n const newInsertedValue = { name : saveFormName, filter : { ... this.filter } };\n if ( this.userSearchList && this.userSearchList.length !== 0 ) {\n this.userSearchList.push(newInsertedValue);\n this.storageValue = this.userSearchList;\n this.selectedList = newInsertedValue;\n } else {\n this.storageValue = [newInsertedValue];\n this.userSearchList = this.storageValue;\n this.selectedList = newInsertedValue;\n }\n this.uploadListOnUserStorage();\n if (this.modalRef) {\n this.modalRef.hide();\n }\n } else if ( saveFormName && (this.searchInListByName(saveFormName)) ) {\n// User should insert a different name cause this one is already in use\n alert(this._translate.instant('AdvancedSearch.Modal.TitleOnListAlreadyCreated'));\n } else {\n// User did not insert any text\n alert(this._translate.instant('AdvancedSearch.Modal.TitleOnUserError'));\n }\n }\n\n// User declined => Close modal\n public closeModal(): void {\n if (this.modalRef) {\n this.modalRef.hide();\n }\n }\n\n// Upload user's criteria on User Storage\n public uploadListOnUserStorage() {\n this._userStorage.setItem(this.storageKey, this.userSearchList.filter((x) => {\n return !x.readOnly;\n }));\n }\n\n /**\n * @deprecated This method is going to be deprecated. Use search() method instead.\n * @param event\n */\n public async asyncAdvancedSearch(event?: any) {\n if ( this.table && this.table.config && Array.isArray(this.table.config.criteria)) {\n const query = await this.getQuery();\n if (this.mergeQueryParams) {\n this.selectedList = null;\n const queryParams = Object.assign({ q: null, s: null }, this.filter);\n // enumerate criteria\n this.table.config.criteria.forEach((item) => {\n if (Object.prototype.hasOwnProperty.call(queryParams, item.name) === false) {\n // set null value\n Object.defineProperty(queryParams, item.name, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: null,\n });\n }\n });\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n\n if (this.table.query && query && query.getParams()['$filter']) {\n this.table.query.setParam('$filter', query.getParams()['$filter']);\n } else {\n this.table.query = query;\n }\n this.filterChange.emit(this.filter);\n this.table.fetch();\n }\n }\n\n public search(): Promise<void> {\n return this.asyncAdvancedSearch().then(() => {\n // do nothing\n });\n }\n\n public async getQuery() {\n // on simple search return null\n if (this.collapsed) {\n return null;\n }\n if ( this.table && this.table.config && Array.isArray(this.table.config.criteria)) {\n const expressions: any[] = [];\n const values = await this._advancedSearchValueProvider.getValues();\n this.table.config.criteria.forEach((x) => {\n if (Object.prototype.hasOwnProperty.call(this.filter, x.name)) {\n const nameFilter = this.convertToString(this.filter[x.name]);\n if (nameFilter.includes('GMT')) {\n const newDate = this.transformDate(this.filter[x.name]);\n expressions.push(this._template.transform(x.filter, {\n value: newDate,\n }));\n } else if (this.filter[x.name] !== 'undefined') {\n expressions.push(this._template.transform(x.filter, Object.assign({\n value: this.filter[x.name],\n }, values)));\n }\n }\n });\n let query;\n if (expressions && expressions.length) {\n // create client query\n query = this._context.model(this.table.config.model).asQueryable();\n query.setParam('filter', expressions.join(' and '));\n } else {\n query = this._context.model(this.table.config.model).asQueryable();\n }\n return query;\n }\n }\n\n public advancedSearch(event: any) {\n return this.asyncAdvancedSearch(event);\n }\n\n public clear() {\n if (this.mergeQueryParams && this.table) {\n this.selectedList = null;\n const queryParams = { q: null, s: null };\n // enumerate criteria\n this.table.config.criteria.forEach((item) => {\n if (Object.prototype.hasOwnProperty.call(queryParams, item.name) === false) {\n // set null value\n Object.defineProperty(queryParams, item.name, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: null,\n });\n }\n });\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams,\n queryParamsHandling: 'merge',\n });\n } else {\n // clear filter\n this.filter = {};\n // clear list\n this.selectedList = null;\n // raise filter change event\n this.filterChange.emit(this.filter);\n }\n }\n\n /**\n * Gets the view state of search control\n */\n public get viewState(): AdvancedSearchViewStatus {\n return {\n advancedView: !this.collapsed,\n };\n }\n\n /**\n * Switches view between simple and advanced search\n */\n public async toggleView() {\n this.collapsed = !this.collapsed;\n // emit event for view status change\n this.viewChange.emit(this.viewState);\n }\n}\n","import {\n ActionLinkFormatter, ButtonFormatter, DateTimeFormatter, LanguageFormatter,\n LinkFormatter,\n NestedPropertyFormatter, NgClassFormatter, SelectRowFormatter,\n TemplateFormatter, TranslationFormatter,\n TrueFalseFormatter, ActionButtonFormatter, ActionSplitButtonFormatter,\n} from './advanced-table.formatters';\n\nexport interface IAdvancedTableFormatters {\n ActionLinkFormatter?: ActionLinkFormatter;\n ButtonFormatter?: ButtonFormatter;\n DateTimeFormatter?: DateTimeFormatter;\n LanguageFormatter?: LanguageFormatter;\n LinkFormatter?: LinkFormatter;\n NestedPropertyFormatter?: NestedPropertyFormatter;\n NgClassFormatter?: NgClassFormatter;\n SelectRowFormatter?: SelectRowFormatter;\n TemplateFormatter?: TemplateFormatter;\n TranslationFormatter?: TranslationFormatter;\n TrueFalseFormatter?: TrueFalseFormatter;\n ActionButtonFormatter?: ActionButtonFormatter;\n ActionSplitButtonFormatter?: ActionSplitButtonFormatter;\n}\nexport const FORMATTERS: IAdvancedTableFormatters = {\n ActionLinkFormatter: new ActionLinkFormatter(),\n ButtonFormatter: new ButtonFormatter(),\n DateTimeFormatter: new DateTimeFormatter(),\n LanguageFormatter: new LanguageFormatter(),\n LinkFormatter: new LinkFormatter(),\n NestedPropertyFormatter: new NestedPropertyFormatter(),\n NgClassFormatter: new NgClassFormatter(),\n SelectRowFormatter: new SelectRowFormatter(),\n TemplateFormatter: new TemplateFormatter(),\n TranslationFormatter: new TranslationFormatter(),\n TrueFalseFormatter: new TrueFalseFormatter(),\n ActionButtonFormatter: new ActionButtonFormatter(),\n ActionSplitButtonFormatter: new ActionSplitButtonFormatter(),\n};\n","import { Component, OnInit, Input, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\nimport { AdvancedTableComponent, AdvancedTableDataResult } from '../advanced-table/advanced-table.component';\nimport { Subscription } from 'rxjs';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'table-simple-header-tools',\n template: `\n <ng-content></ng-content>\n `,\n styles: []\n})\nexport class SimpleHeaderToolsComponent {\n //\n}\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-table-simple-header',\n templateUrl: './table-simple-header.component.html',\n styles: []\n})\nexport class TableSimpleHeaderComponent implements OnInit, OnDestroy, OnChanges {\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.table) {\n if (changes.table.currentValue == null) {\n if (this.dataLoadSubscription) {\n this.dataLoadSubscription.unsubscribe();\n return;\n }\n }\n // tslint:disable-next-line:triple-equals\n if (changes.table.currentValue != changes.table.previousValue) {\n this.dataLoadSubscription = changes.table.currentValue.load.subscribe((data: AdvancedTableDataResult) => {\n this.recordsTotal = data.recordsTotal;\n });\n }\n }\n }\n ngOnDestroy(): void {\n if (this.dataLoadSubscription) {\n this.dataLoadSubscription.unsubscribe();\n }\n }\n\n @Input() table?: AdvancedTableComponent;\n public recordsTotal?: number;\n public dataLoadSubscription?: Subscription;\n constructor() { }\n\n ngOnInit() {\n //\n }\n\n}\n","import {\n Directive, Output, EventEmitter,\n} from '@angular/core';\nimport { AdvancedTableComponent } from '../components/advanced-table/advanced-table.component';\n\nexport class AdvancedTableNotNullError extends Error {\n constructor() {\n super('Advanced table component cannot be empty at this context.');\n }\n}\n\n@Directive(\n {\n // tslint:disable-next-line: directive-selector\n selector: '[tableEditor]',\n },\n)\nexport class AdvancedTableEditorDirective {\n\n public dirty = false;\n @Output() public dirtyChange: EventEmitter<boolean> = new EventEmitter<boolean>(false);\n\n constructor(private table: AdvancedTableComponent) {\n //\n }\n\n /**\n * Add rows to table and mark them as added rows\n */\n public add(...addItems: any[]) {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n // decorate items\n const key = this.table.config.columns[0].property || this.table.config.columns[0].name || '';\n for (const element of addItems) {\n let tr = this.table.dataTable.rows(':has(input[data-id=\"' + element[key] + '\"])').nodes().to$();\n if (tr.hasClass('removed')) {\n tr.toggleClass('removed text-gray-400 text-decoration-line-through');\n } else {\n this.table.dataTable.rows.add([element]);\n tr = this.table.dataTable.rows(':has(input[data-id=\"' + element[key] + '\"])').nodes().to$();\n tr.toggleClass('added font-weight-bold text-success');\n }\n }\n this.table.dataTable.draw();\n // find removed\n const removedLength = this.table.dataTable.rows('.removed')[0].length;\n // find added\n const addedLength = this.table.dataTable.rows('.added')[0].length;\n // and emit event\n const items = this.table.dataTable.rows().data();\n this.table.load.emit({\n data: items,\n recordsFiltered: items.length - removedLength,\n recordsTotal: items.length - removedLength,\n });\n this.dirty = (removedLength > 0 || addedLength > 0);\n this.dirtyChange.emit(this.dirty);\n }\n\n /**\n * Marks rows as removed rows\n */\n public remove(...removeItems: any[]) {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n // get key\n const key = this.table.config.columns[0].property || this.table.config.columns[0].name || '';\n // loop items\n for (const element of removeItems) {\n const tr = this.table.dataTable.rows(':has(input[data-id=\"' + element[key] + '\"])').nodes().to$();\n // if row is marked as added\n if (tr.hasClass('added')) {\n // remove this dirty row\n this.table.dataTable.rows(tr).remove();\n } else {\n // otherwise unmarked row\n tr.toggleClass('removed text-gray-400 text-decoration-line-through');\n }\n // check if item is selected\n const selectedIndex = this.table.selected.findIndex((item) => {\n return item[key] === element[key];\n });\n // and remove it from selected collection\n if (selectedIndex >= 0) {\n this.table.selected.splice(selectedIndex, 1);\n }\n }\n // re-draw table\n this.table.dataTable.draw();\n // get number of table items\n const items = this.table.dataTable.rows().data();\n // get number of removed items\n const removedLength = this.table.dataTable.rows('.removed')[0].length;\n // get number of added items\n const addedLength = this.table.dataTable.rows('.added')[0].length;\n // refresh\n this.table.load.emit({\n data: items,\n recordsFiltered: items.length - removedLength,\n recordsTotal: items.length - removedLength,\n });\n this.dirty = (removedLength > 0 || addedLength > 0);\n this.dirtyChange.emit(this.dirty);\n }\n\n public set(items: any[]) {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n // clear rows\n this.table.selected = [];\n this.table.dataTable.clear();\n // set items\n this.table.dataTable.rows.add(items).draw();\n this.table.load.emit({\n data: items,\n recordsFiltered: items.length,\n recordsTotal: items.length,\n });\n }\n\n /**\n * Undo changes\n */\n public undo() {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n // reset removed rows\n this.table.dataTable.rows('.removed').nodes().to$().toggleClass('removed text-gray-400 text-decoration-line-through');\n // remove added rows\n this.table.dataTable.rows('.added').remove();\n // clear selected items\n this.table.selected = [];\n const items = this.table.dataTable.rows().data();\n this.table.dataTable.draw();\n this.table.load.emit({\n data: items,\n recordsFiltered: items.length,\n recordsTotal: items.length,\n });\n this.dirty = false;\n this.dirtyChange.emit(this.dirty);\n }\n\n public rows() {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n return Array.from(this.table.dataTable.rows(':not(.removed)').data());\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { AngularDataContext } from '@themost/angular';\nimport { TemplatePipe } from '@universis/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AdvancedAggregatorService {\n\n constructor(\n private _context: AngularDataContext,\n private _template: TemplatePipe\n ) { }\n\n /**\n *\n * Formats and executes the data query\n *\n * @param model The target model\n * @param fixedParams Pairs of parameters to always be applied\n * @param queryStatement The default query to use for fetching the data (e.g. expands etc)\n * @param filters A list of filter expressions to append at the query\n * @param searchTemplate The template to use for searching expressions\n * @param searchValue The value of the user search\n *\n * @returns The response of the query execution\n */\n // tslint:disable-next-line:max-line-length\n async fetchData(model: string, fixedParams: object, queryStatement: string = '', filters: string[], searchTemplate?: string, searchValue?: string): Promise<any> {\n const query = this._context.model(model).asQueryable();\n\n if (!fixedParams || typeof fixedParams !== 'object') {\n fixedParams = {};\n }\n\n let filterExpressions: any[] = [];\n\n if (fixedParams) {\n for (const param of Object.keys(fixedParams)) {\n filterExpressions.push(`${param} eq ${fixedParams[param]}`);\n }\n }\n\n if (filters && Array.isArray(filters)) {\n filterExpressions = [\n ...filterExpressions,\n ...filters\n ];\n }\n\n if (searchTemplate && searchValue) {\n let evaluatedSearch;\n if (/^\"(.*?)\"$/.test(searchValue)) { // validate search text in double quotes\n evaluatedSearch = this._template.transform(searchTemplate, {\n ...fixedParams,\n text: searchValue.replace(/^\"|\"$/g, '')\n });\n } else {\n // try to split words\n const words = searchValue.split(' ');\n // join words to a single filter\n evaluatedSearch = words.map(word => {\n return this._template.transform(searchTemplate, {\n ...fixedParams,\n text: word\n });\n }).join(' and ');\n\n }\n filterExpressions.push(evaluatedSearch);\n }\n\n query.setParam('$filter', filterExpressions.join('and'));\n return query.expand(queryStatement).take(-1).getItems();\n }\n\n /**\n *\n * Formats the received data to use flat keys\n *\n * @param config The applied configuration\n * @param data The raw data\n *\n * @returns The flat-key object list\n *\n */\n formatData(config, data) {\n try {\n return data.map((entry) => {\n if (entry.subitems && Array.isArray(entry.subitems)) {\n entry.subitems = this.formatData(config, entry.subitems);\n }\n const entryObject = {} as any;\n for (let i = 0; i < config.columns.length; i++) {\n const keys = config.columns[i].name.split('/');\n let helperObject = entry[keys[0]];\n\n if (helperObject && keys.length > 1) {\n // tslint:disable-next-line:no-shadowed-variable\n for (let i = 1; i < keys.length; i++) {\n if (helperObject === undefined || helperObject === null) {\n break;\n } else {\n helperObject = helperObject[keys[i]] !== undefined && helperObject[keys[i]] !== null\n ? helperObject[keys[i]]\n : undefined;\n }\n }\n }\n\n entryObject[config.columns[i].name] = helperObject;\n }\n\n if (entry.subitems) {\n entryObject.subitems = entry.subitems;\n }\n\n return entryObject;\n });\n } catch (err) {\n console.error(err);\n }\n }\n}\n","import { Component, Input, OnInit, Output, EventEmitter, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { AdvancedAggregatorService } from '../../services/advanced-aggregator/advanced-aggregator.service';\nimport { AdvancedAggregatorConfig, AdvancedAggregatorFilters } from '../../advanced-aggregator';\nimport { LoadingService } from '@universis/common';\n\n/**\n *\n * \n * @classdesc An advanced list with the capability of aggregate data based on configurable filters\n *\n */\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-aggregator',\n templateUrl: './advanced-aggregator.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdvancedAggregatorComponent implements OnInit, OnDestroy {\n\n private _config?: AdvancedAggregatorConfig;\n private _aggregators;\n private _postProcessors;\n\n public body;\n public groups: any[] = [];\n\n @Input('config')\n public set config(value: AdvancedAggregatorConfig) {\n this._config = value;\n }\n\n @Input('aggregators')\n public set aggregators(value) {\n this._aggregators = value;\n }\n\n @Input('postProcessors')\n public set postProcessors(value) {\n this._postProcessors = value;\n }\n\n @Input('params') params;\n // tslint:disable-next-line:no-input-rename\n @Input('selectedGroups') selectedGroups$;\n // tslint:disable-next-line:no-input-rename\n @Input('filters') filters$;\n @Input('searchExpression') searchExpression?: string;\n\n @Output() eventHandler = new EventEmitter();\n\n constructor(\n private _changeDetector: ChangeDetectorRef,\n private _advancedAggregatorService: AdvancedAggregatorService,\n private _loadingService: LoadingService\n ) { }\n\n public get config() {\n return this._config as AdvancedAggregatorConfig;\n }\n\n public get aggregators() {\n return this._aggregators;\n }\n\n public get postProcessors() {\n return this._postProcessors;\n }\n\n async ngOnInit() {\n this.selectedGroups$.subscribe((data) => {\n this.groups = data;\n this._changeDetector.markForCheck();\n });\n\n this.filters$.subscribe(async (filters: AdvancedAggregatorFilters) => {\n try {\n await this.fetch(filters);\n } catch (err) {\n console.error(err);\n }\n });\n }\n\n async ngOnDestroy() {\n this.selectedGroups$.unsubscribe();\n this.filters$.unsubscribe();\n }\n\n /**\n *\n * Retrieves the data\n *\n */\n async fetch(filters: AdvancedAggregatorFilters) {\n try {\n this._loadingService.showLoading();\n let data = await this._advancedAggregatorService.fetchData(this.config.model,\n this.params,\n this.config.query,\n filters.filters,\n this.searchExpression,\n filters.text\n );\n\n // tslint:disable-next-line:max-line-length\n if (this.postProcessors && Object.keys(this.postProcessors).length > 0 && this.config.postProcessors && this.config.postProcessors.length > 0) {\n for (let i = 0; i < this.config.postProcessors.length; i++) {\n data = await this.postProcessors[this.config.postProcessors[i].name](data);\n }\n }\n\n this.body = this._advancedAggregatorService.formatData(this.config, data);\n this._changeDetector.markForCheck();\n } catch (err) {\n console.error(err);\n } finally {\n this._loadingService.hideLoading();\n }\n }\n\n /**\n *\n * Triggers the event handler event\n *\n * @param event The event data\n *\n */\n onActionEvent(event) {\n this.eventHandler.emit(event);\n }\n}\n","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { TemplatePipe} from '@universis/common';\n\nenum Lengths {\n XL= 'xl',\n LG= 'lg',\n MD= 'md',\n SM= 'sm',\n XS= 'xs'\n}\n\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-aggregator-list',\n templateUrl: './advanced-aggregator-list.component.html'\n})\nexport class AdvancedAggregatorListComponent implements OnInit {\n\n /**\n * @property {AdvancedAggregatorConfig} config The configuration object to use\n */\n @Input() config: any;\n\n /**\n * @property {Array<Array<any>>} body The list of data entries to show as the list body\n */\n @Input() body;\n\n @Output() clickEvent = new EventEmitter();\n\n constructor(private _template: TemplatePipe) { }\n\n ngOnInit() {\n this.config.columns.forEach(x => {\n x.length = Object.values(Lengths).includes(x.length) ? this._template.transform(`sis--list-group-item_${x.length}_column`, x ) :\n !x.length ? 'sis--list-group-item_sm_column' : x.length ;\n });\n }\n\n /**\n *\n * Triggers the output event emitter\n *\n * @param type The type of the event as it's declared in the configuration\n * @param item The value of the current item\n * }\n */\n callCallback(type: string, data: any): void {\n this.clickEvent.emit({\n type,\n data\n });\n }\n}\n","import {Component, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {RouterModalOkCancel} from '@universis/common/routing';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {Observable, Subscription} from 'rxjs';\nimport {AdvancedTableModalBaseComponent} from '../advanced-table-modal/advanced-table-modal-base.component';\nimport {AdvancedFormComponent} from '@universis/forms';\nimport {LoadingService, ModalService} from '@universis/common';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-add-items',\n templateUrl: './add-items.component.html'\n})\nexport class AddItemsComponent extends RouterModalOkCancel implements OnInit, OnDestroy {\n\n public loading = false;\n public lastError;\n @Input() execute?: Observable<any>;\n @Input() items: Array<any> = [];\n @Input() target: any;\n // @Input() selected: any;\n @Input() tableConfiguration: any;\n @Input() formName: any;\n @Input() messages: Array<any> = [];\n @ViewChild('formComponent') formComponent?: AdvancedFormComponent;\n @ViewChild('selectComponent') selectComponent?: AdvancedTableModalBaseComponent;\n private formLoadSubscription?: Subscription;\n private formChangeSubscription?: Subscription;\n private selectedSubscription?: Subscription;\n\n constructor(router: Router,\n activatedRoute: ActivatedRoute,\n private _modalService: ModalService,\n private _loadingService: LoadingService) {\n super(router, activatedRoute);\n // set modal size\n this.modalClass = 'modal-lg';\n this.okButtonDisabled = true;\n }\n\n ngOnInit() {\n if (this.selectComponent && this.selectComponent.advancedTable) {\n this.selectedSubscription = this.selectComponent.advancedTable.selectedItems.subscribe((items) => {\n if (this.formName == null) {\n this.okButtonDisabled = items.length === 0;\n }\n });\n }\n if (this.formName != null && this.formComponent) {\n this.formChangeSubscription = this.formComponent.form.change.subscribe((event: any) => {\n if (Object.prototype.hasOwnProperty.call(event, 'isValid')) {\n // enable or disable button based on form status\n this.okButtonDisabled = (!event.isValid);\n }\n });\n }\n\n if (this.target) {\n const target = this.target;\n }\n }\n\n cancel(): Promise<any> {\n this.clearMessages();\n if (this.loading) {\n return Promise.resolve();\n }\n // close\n if (this._modalService.modalRef) {\n return this._modalService.modalRef.hide();\n }\n return Promise.resolve();\n }\n\n ngOnDestroy(): void {\n if (this.formLoadSubscription) {\n this.formLoadSubscription.unsubscribe();\n }\n if (this.formChangeSubscription) {\n this.formChangeSubscription.unsubscribe();\n }\n if (this.selectedSubscription) {\n this.selectedSubscription.unsubscribe();\n }\n }\n\n // get form data\n private executeSubscription?: Subscription;\n public get formData(): any {\n if (this.formComponent === null) {\n return null;\n }\n return this.formComponent && this.formComponent.form.formio.data;\n }\n\n ok(): Promise<any> {\n try {\n this.clearMessages();\n return new Promise((resolve) => {\n if (this.selectComponent == null || this.selectComponent.advancedTable == null || this.execute == null) {\n return resolve(null);\n }\n this.loading = false;\n this.lastError = null;\n // set courses\n this.items = this.selectComponent.advancedTable.selected;\n // execute add\n this.executeSubscription = this.execute.subscribe((result) => {\n this.loading = false;\n if (this.executeSubscription) {\n this.executeSubscription.unsubscribe();\n }\n // close modal\n if (this._modalService.modalRef) {\n this._modalService.modalRef.hide();\n }\n return resolve(null);\n }, (err) => {\n this.loading = false;\n // ensure that loading is hidden\n this._loadingService.hideLoading();\n // set last error\n this.lastError = err;\n return resolve(null);\n });\n });\n } catch (err) {\n this.loading = false;\n this._loadingService.hideLoading();\n this.lastError = err;\n return Promise.resolve();\n }\n }\n\n onChange($event: any) {}\n\n clearMessages() {\n this.messages = [];\n }\n\n onFilterChange(event: { name: string, emit: boolean }) {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n *\n *\n * @classdesc Given a list of items runs a user defined function against that list\n *\n */\n\n@Pipe({\n name: 'callAggregator'\n})\nexport class AdvancedAggregatorPipe implements PipeTransform {\n\n /**\n *\n * @override\n *\n * @param items The list of items to run the aggregator against\n * @param functionPool The functions that are available from the list caller\n * @param functionName The name of the function to be called\n *\n * @returns The value to show at the UI\n *\n */\n transform(items: any[], functionPool: any, functionName: string): any {\n if (Array.isArray(items) && functionName && functionName in functionPool) {\n return functionPool[functionName](items);\n } else {\n return '-';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n *\n * \n * @classdesc Given a title of an aggregator list, translates and evaluates the parameter if any\n *\n */\n\n@Pipe({\n name: 'aggregatorListTitle'\n})\nexport class ParseTitlePipe implements PipeTransform {\n\n constructor(\n private _translateService: TranslateService\n ) {}\n\n /**\n *\n * @override\n *\n * @param title The title of the list\n * @param key The current list key that is being used\n *\n */\n transform(title: string, key: string): any {\n if (!title) {\n return '';\n } else {\n if (key === undefined || key === null || key === 'undefined' || key === 'null') {\n key = this._translateService.instant('Tables.NotDefined');\n }\n return title.split(' ')\n .map((part) => this._translateService.instant(part))\n .map((part) => part.replace('${param}', key))\n .join(' ');\n }\n }\n}\n","// tslint:disable: quotemark\n// tslint:disable: max-line-length\nexport const TABLES_EL = {\n \"Tables\": {\n \"Export\": \"Εξαγωγή\",\n \"More\": \"Περισσότερα\",\n \"Search\": \"Αναζήτηση\",\n \"SearchPlaceholder\": \"Αναζήτηση...\",\n \"GroupBy\": \"Ομαδοποίηση ανά\",\n \"NotDefined\": \"Μη προσδιορισμένο\",\n \"DataTable\": {\n \"paginate\": {\n \"first\": \"Πρώτη σελίδα\",\n \"last\": \"Τελεταία σελίδα\",\n \"next\": \"Επόμενη\",\n \"previous\": \"Προηγούμενη\"\n },\n \"info\": \"Εμφάνιση _START_ έως _END_ από _TOTAL_ εγγραφές\",\n \"infoEmpty\": \"Δεν βρέθηκαν εγγραφές\",\n \"loading\": \"Εμφάνιση δεδομένων...\",\n \"processing\": \"Παραλαβή δεδομένων...\",\n \"emptyTable\": \"Δεν βρέθηκαν αποτελέσματα.\"\n },\n \"ColumnDisplay\": \"Επιλογή Εμφάνισης στηλών\",\n \"ColumnDisplayInfo\": \"Επιλέξτε τις στήλες που θέλετε να εμφανίζονται.\",\n \"Save\": \"Εφαρμογή\",\n \"Apply\": \"Εφαρμογή\",\n \"Cancel\": \"Ακύρωση\",\n \"RecordsPerPage\": \"Εγγραφές ανά σελίδα\",\n \"PageInfo\": \"{{start}}-{{end}} από {{recordsTotal}}\",\n \"SearchListPlaceholder\": \"Αναζητήστε στη λίστα...\",\n \"Filters\": \"Φίλτρα\",\n \"All\": \"Όλα\",\n \"AddItem\": \"Προσθήκη στοιχείου\",\n \"EmptyTableTitle\": \"Δεν βρέθηκαν αποτελέσματα.\",\n \"EmptyTableMessage\": \"Προσπαθήστε να χρησιμοποιήσετε άλλες λέξεις κλειδιά.\",\n \"RemoveItem\": \"Διαγραφή στοιχείου\",\n \"Items\": \"στοιχεία\",\n \"Item\": \"στοιχείο\",\n \"AddItemMessage\": {\n \"title\": \"Προσθήκη στοιχείων\",\n \"one\": \"Ένα νέο στοιχείο προστέθηκε με επιτυχία.\",\n \"many\": \"{{value}} νέα στοιχεία προστέθηκαν με επιτυχία.\"\n },\n \"RemoveItemMessage\": {\n \"title\": \"Αφαίρεση στοιχείων\",\n \"one\": \"Ένα στοιχείο αφαιρέθηκε με επιτυχία.\",\n \"many\": \"{{value}} στοιχεία αφαιρέθηκαν με επιτυχία.\"\n },\n \"RemoveItemsTitle\": \"Διαγραφή στοιχείου\",\n \"RemoveItemsMessage\": \"Πρόκειται να διαγράψετε ένα ή περισσότερα στοιχεία. Θέλετε να προχωρήσετε?\",\n \"SelectAll\": \"Επιλογή όλων\",\n \"ClearSelection\": \"Αναίρεση επιλογής\",\n \"Actions\": {\n \"Label\": \"Επεξεργασία\",\n \"Start\": \"Έναρξη\",\n \"ActionMessage\": {\n \"None\": \"Δεν έχετε επιλέξει κανένα στοιχείο που να ακολουθεί τις προϋποθέσεις της ενέργειας.\",\n \"One\": \"Έχετε επιλέξει ένα στοιχείο που ακολουθεί τις προϋποθέσεις της ενέργειας. Πατήστε το πλήκτρο Έναρξη για να ξεκινήσει η διαδικασία.\",\n \"Many\": \"Έχετε επιλέξει {{length}} στοιχεία που ακολουθούν τις προϋποθέσεις της ενέργειας. Πατήστε το πλήκτρο Έναρξη για να ξεκινήσει η διαδικασία.\"\n },\n \"CompletedWithErrors\": {\n \"Title\": \"Η διαδικασία ολοκληρώθηκε με σφάλματα.\",\n \"Description\": {\n \"One\": \"Ένα στοιχείο δεν ανανεώθηκε λόγω ενός σφάλματος που συνέβη κατά την εκτέλεση της διαδικασίας.\",\n \"Many\": \"{{errors}} στοιχεία δεν ανανεώθηκαν λόγω ενός σφάλματος που συνέβη κατά την εκτέλεση της διαδικασίας.\"\n }\n },\n \"CompletedWithSuccess\": {\n \"Title\": \"Η διαδικασία ολοκληρώθηκε με επιτυχία.\"\n }\n },\n \"SelectColumns\": \"Επιλογή στηλών\",\n \"MoveUp\": \"Επάνω\",\n \"MoveDown\": \"Κάτω\",\n \"AddColumn\": \"Επιλογή\",\n \"RemoveColumn\": \"Αφαίρεση\",\n \"SelectColumnHelp\": \"Επιλέξτε μία ή περισσότερες από τις διαθέσιμες στήλες και πατήστε το πλήκτρο 'Επιλογή' για να τις εμφανίσετε. Χρησιμοποιήστε το πλήκτρο 'Αφαίρεση' για να αφαιρέσετε τις επιλεγμένες στήλες.\",\n \"MoveColumnHelp\": \"Χρησιμοποιήστε τα πλήκτρα 'Επάνω' και 'Κάτω' για να αλλάξετε την σειρά εμφάνισης των στηλών του πίνακα.\",\n \"UnknownColumn\": \"Άγνωστο\",\n \"SelectColumn\": \"Επιλογή\",\n \"ActionLinkColumn\": \"Ενέργειες\",\n \"DataError\": {\n \"Title\": \"Σφάλμα κατά την παραλαβή των δεδομένων\",\n \"Message\": \"Συνέβη σφάλμα κατά την παραλαβή των δεδομένων. Προσπαθήστε ξανά ή τροποποιήστε τα στοιχεία αναζήτησης.\"\n },\n \"ExportList\": \"Εξαγωγή λίστας\",\n \"ExportLimitExceeded\": \"Το πλήθος των στοιχείων προς εξαγωγή ({{dataLength}}) ξεπερνάει το μέγιστο επιτρεπτό ({{exportLimit}}). Παρακαλούμε προσαρμόστε τα φίλτρα της αναζήτησης και προσπαθήστε ξανά.\",\n \"ExportResults\": \"Δεδομένα λίστας\"\n },\n \"TrueFalse\": {\n \"long\": {\n \"Yes\": \"Ναι\",\n \"No\": \"Όχι\"\n }\n },\n \"Settings\": {\n \"OperationCompleted\": \"Η διαδικασία ολοκληρώθηκε με επιτυχία.\"\n },\n \"AdvancedSearch\": {\n \"Choose\": \"<Επιλέξτε μια αναζήτηση>\",\n \"ChooseDate\": \"Επιλογή ημερομηνίας\",\n \"SavedSearches\": \"Αποθηκευμένες αναζητήσεις\",\n \"ToggleDropdown\" : \"Εμφάνιση λίστας\",\n \"SaveCurrentSearch\": \"Αποθήκευση αναζήτησης\",\n \"SaveAs\" : \"Αποθήκευση ως\",\n \"Save\" : \"Αποθήκευση\",\n \"Delete\" : \"Διαγραφή\",\n \"More\": \"Περισσότερα\",\n \"Less\": \"Λιγότερα\",\n \"Modal\" : {\n \"Title\" : \"Αποθήκευση κριτηρίων αναζήτησης\",\n \"Help\" : \"Ορίστε έναν τίτλο για τα επιλεγμένα κριτήρια αναζήτησης. Αυτός ο τίτλος θα σας βοηθήσει να τα χρησιμοποιήσετε ξανά στο μέλλον.\",\n \"TitleOnUserError\" : \"Παρακαλώ εισάγετε έναν τίτλο\",\n \"TitleOnListAlreadyCreated\" : \"Το όνομα αυτό χρησιμοποιείται ήδη. Διαλέξτε ένα διαφορετικό.\",\n \"NoListDefined\" : \"Δεν έχει οριστεί το σημείο αποθήκευσης της λίστας\",\n \"EmptyCriteriaList\" : \"Δεν έχετε καθορίσει κανένα κριτήριο για αποθήκευση\",\n \"SaveNameLabel\" : \"Ονομασία λίστας\",\n \"SaveNamePlaceholder\" : \"Εισάγετε έναν τίτλο\",\n \"Accept\" : \"Αποθήκευση\",\n \"Decline\" : \"Απόρριψη\",\n \"Close\" : \"Κλείσιμο\"\n }\n },\n \"AddItems\" : {\n \"SelectItems\": \"Επιλέξτε στοιχεία\",\n }\n};\n","// tslint:disable: quotemark\n// tslint:disable: max-line-length\nexport const TABLES_EN = {\n \"Tables\": {\n \"Export\": \"Export\",\n \"More\": \"More\",\n \"Search\": \"Search\",\n \"SearchPlaceholder\": \"Search...\",\n \"GroupBy\": \"Group by\",\n \"NotDefined\": \"Not defined\",\n \"DataTable\": {\n \"paginate\": {\n \"first\": \"First\",\n \"last\": \"Last\",\n \"next\": \"Next\",\n \"previous\": \"Previous\"\n },\n \"info\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n \"infoEmpty\": \"Showing 0 to 0 of 0 entries\",\n \"processing\": \"Processing data...\",\n \"emptyTable\": \"There are no matching records.\"\n },\n \"ColumnDisplay\": \"Column Display\",\n \"ColumnDisplayInfo\": \"Επιλέξτε τις στήλες που θέλετε να εμφανίζονται.\",\n \"Save\": \"Save\",\n \"Apply\": \"Apply\",\n \"Cancel\": \"Cancel\",\n \"RecordsPerPage\": \"Items per page\",\n \"PageInfo\": \"{{start}}-{{end}} of {{recordsTotal}}\",\n \"SearchListPlaceHolder\": \"Search in list...\",\n \"Filters\": \"Filters\",\n \"All\": \"All\",\n \"AddItem\": \"Add item\",\n \"EmptyTableTitle\": \"There are no matching records.\",\n \"EmptyTableMessage\": \"Please try to use other keywords or search parameters.\",\n \"RemoveItem\": \"Remove item\",\n \"Items\": \"items\",\n \"Item\": \"item\",\n \"AddItemMessage\": {\n \"title\": \"Add item\",\n \"one\": \"A new item has been added successfully.\",\n \"many\": \"{{value}} new items have been added successfully.\"\n },\n \"RemoveItemMessage\": {\n \"title\": \"Remove items\",\n \"one\": \"An item has been successfully removed.\",\n \"many\": \"{{value}} items have been successfully removed.\"\n },\n \"RemoveItemsTitle\": \"Remove items\",\n \"RemoveItemsMessage\": \"You are going to remove one or more instructor courses. Do you want to proceed?\",\n \"SelectAll\": \"Select all\",\n \"ClearSelection\": \"Clear selection\",\n \"Actions\": {\n \"Label\": \"Edit\",\n \"Start\": \"Start\",\n \"ActionMessage\": {\n \"None\": \"There is no selected item that meets action requirements.\",\n \"One\": \"You have selected one item that meets action requirements.\",\n \"Many\": \"You have selected {{length}} items that meet action requirements.\"\n },\n \"CompletedWithErrors\": {\n \"Title\": \"The operation was completed with errors.\",\n \"Description\": {\n \"One\": \"One item has not been updated due to an error occurred while executing process.\",\n \"Many\": \"{{errors}} items have not been updated due to an error occurred while executing process.\"\n }\n },\n \"CompletedWithSuccess\": {\n \"Title\": \"The operation was completed successfully.\"\n }\n },\n \"SelectColumns\": \"Select columns\",\n \"MoveUp\": \"Move up\",\n \"MoveDown\": \"Move down\",\n \"AddColumn\": \"Add\",\n \"RemoveColumn\": \"Remove\",\n \"SelectColumnHelp\": \"Select one or more columns and press 'Add' button to include them in table. Use 'Remove' button to exclude one or more columns from view.\",\n \"MoveColumnHelp\": \"Use 'Move up' and 'Move down' buttons to change column order.\",\n \"UnknownColumn\": \"Unknown\",\n \"SelectColumn\": \"Select\",\n \"ActionLinkColumn\": \"Actions\",\n \"DataError\": {\n \"Title\": \"Error while getting data\",\n \"Message\": \"An error occurred while getting data. Please try again or change your criteria.\"\n },\n \"ExportList\": \"Export list\",\n \"ExportLimitExceeded\": \"The number of items that are to be exported ({{dataLength}}) exceeds the export limit ({{exportLimit}}). Please apply more specific filters to the search.\",\n \"ExportResults\": \"Exported list\"\n },\n \"TrueFalse\": {\n \"long\": {\n \"Yes\": \"Yes\",\n \"No\": \"No\"\n }\n },\n \"Settings\": {\n \"OperationCompleted\": \"The operation was completed successfully.\"\n },\n \"AdvancedSearch\": {\n \"Choose\": \"<Select a saved search>\",\n \"ChooseDate\": \"Choose date\",\n \"SavedSearches\": \"Saved searches\",\n \"ToggleDropdown\" : \"Toggle Dropdown\",\n \"SaveCurrentSearch\": \"Save search\",\n \"SaveAs\" : \"Save as...\",\n \"Save\" : \"Save\",\n \"Delete\" : \"Remove\",\n \"More\": \"More\",\n \"Less\": \"Less\",\n \"Modal\" : {\n \"Title\" : \"Save current search criteria\",\n \"Help\" : \"Please add a title for the given search criteria. This title will help you to use those criteria again in the future.\",\n \"TitleOnUserError\" : \"Please use a valid name for your list\",\n \"TitleOnListAlreadyCreated\" : \"Name already in use. Please choose a different one\",\n \"NoListDefined\" : \"Cannot define user storage key.\",\n \"EmptyCriteriaList\" : \"Please define search criteria before save.\",\n \"SaveNameLabel\" : \"List name\",\n \"SaveNamePlaceholder\" : \"Type a title here...\",\n \"Accept\" : \"Save\",\n \"Decline\" : \"Decline\",\n \"Close\" : \"Close\"\n }\n },\n \"AddItems\" : {\n \"SelectItems\": \"Select items\",\n }\n};\n","import { Action } from '@ngrx/store';\n\nexport enum TableActionTypes {\n LoadFilter = '[Table] Load Filter',\n AppendFilter = '[Table] Append Filter',\n AppendState = '[Table] Append State'\n}\n\nexport class LoadFilter implements Action {\n readonly type = TableActionTypes.LoadFilter;\n constructor(public readonly id: string) {}\n}\n\nexport class AppendFilter implements Action {\n readonly type = TableActionTypes.AppendFilter;\n constructor(public readonly id: string, public readonly filter: any) {}\n}\n\nexport class AppendState implements Action {\n readonly type = TableActionTypes.AppendState;\n constructor(public readonly id: string, public readonly data: any) {}\n}\n\nexport type TableActions = LoadFilter | AppendFilter | AppendState;\n","import {\n ActionReducerMap,\n createFeatureSelector,\n createSelector,\n} from '@ngrx/store';\nimport { cloneDeep } from 'lodash';\nimport { TableActions, TableActionTypes } from '../actions/table.actions';\n\nexport interface TableState {\n filter?: any;\n order?: any;\n table?: any;\n}\n\nexport const initialState = {\n};\n\nexport const tableInitialState: TableState = {\n filter: {},\n order: []\n};\n\nexport function tableReducer(state = initialState, action: TableActions): { [id: string]: TableState; } {\n switch (action.type) {\n\n case TableActionTypes.LoadFilter:\n return state[action.id];\n case TableActionTypes.AppendFilter:\n state[action.id] = {\n ...state[action.id],\n filter: cloneDeep(action.filter)\n };\n return state;\n\n case TableActionTypes.AppendState:\n state[action.id] = {\n ...state[action.id],\n table: action.data\n };\n return state;\n default:\n return state;\n }\n}\n\nexport interface NgxTablesState {\n tables: {\n [id: string]: TableState;\n };\n}\n\nexport const tableReducers: ActionReducerMap<NgxTablesState> = {\n tables: tableReducer,\n};\n\nexport const featureName = 'tables';\n\nexport const getTablesState = createFeatureSelector(featureName);\n\nexport const selectTable = createSelector(\n getTablesState,\n (state: NgxTablesState, props: { id: string }) => {\n return state.tables[props.id];\n }\n);\n","import {\n Directive, Optional, Input, OnInit,\n} from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { NgxTablesState } from '../reducers';\nimport { AdvancedTableComponent } from '../components/advanced-table/advanced-table.component';\nimport * as fromTables from '../reducers';\nimport { first } from 'rxjs/operators';\nimport { AppendState } from '../actions/table.actions';\n\n@Directive(\n {\n // tslint:disable-next-line: directive-selector\n selector: '[tableState]',\n },\n)\n// tslint:disable-next-line:directive-class-suffix\nexport class AdvancedTableState implements OnInit {\n\n @Input() tableState?: string;\n\n constructor(private table: AdvancedTableComponent,\n @Optional() private store: Store<NgxTablesState>) {\n }\n ngOnInit(): void {\n if (this.store == null) {\n return;\n }\n this.table.stateSave = true;\n this.table.stateLoadCallback = (settings, callback) => {\n this.store.pipe(select(fromTables.selectTable, { id: this.tableState as string }), first()).subscribe((state: any) => {\n callback(state && state.table);\n if (state && state.table && state.table.ColReorder) {\n this.table.dataTable.colReorder.order(state.table.ColReorder, true);\n }\n });\n };\n let firstDraw = true;\n this.table.draw.subscribe(() => {\n if (firstDraw === false) {\n return;\n }\n if (this.table.dataTable == null) {\n return;\n }\n firstDraw = false;\n const loadeStateSettings: {\n oSavedState?: {\n ColReorder?: number[];\n scroller: {\n topRow: number,\n baseScrollTop: number,\n baseRowTop: number\n }\n }\n } = this.table.dataTable.settings()[0];\n const scrollerSettings = loadeStateSettings.oSavedState &&\n loadeStateSettings.oSavedState.scroller;\n if (scrollerSettings && scrollerSettings.topRow) {\n const scroller = this.table.dataTable.scroller();\n scroller.scrollToRow(scrollerSettings.topRow, true);\n }\n });\n this.table.stateSaveCallback = (settings, data) => {\n this.store.dispatch(new AppendState(this.tableState as string, data));\n };\n }\n}\n","import {\n Directive, Optional, Input, OnInit, OnDestroy\n } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { AppendFilter } from '../actions/table.actions';\nimport { AdvancedTableSearchComponent } from '../components/advanced-table/advanced-table-search.component';\nimport { NgxTablesState, selectTable } from '../reducers';\nimport { first } from 'rxjs/operators';\nimport { AdvancedTableState } from './advance-table-state.directive';\nimport { Subscription } from 'rxjs';\nimport { isEmpty } from 'lodash';\n\n export class AdvancedTableSearchComponentNotNull extends Error {\n constructor() {\n super('Advanced table search component cannot be empty at this context.');\n }\n }\n\n @Directive(\n {\n // tslint:disable-next-line: directive-selector\n selector: '[searchState]',\n },\n )\n // tslint:disable-next-line:directive-class-suffix\n export class AdvancedSearchState implements OnInit, OnDestroy {\n\n @Input() searchState?: string;\n private filterChangeSubscription?: Subscription;\n private tableInitSubscription?: Subscription;\n\n constructor(protected search: AdvancedTableSearchComponent,\n @Optional() protected store: Store<NgxTablesState>) {\n }\n ngOnInit(): void {\n if (this.store == null) {\n return;\n }\n if (this.search == null) {\n throw new AdvancedTableSearchComponentNotNull();\n }\n if (this.search.table) {\n // set auto load to false\n this.search.table.autoLoad = false;\n // handle filtering\n this.filterChangeSubscription = this.search.filterChange.subscribe((filter) => {\n this.onSearchFilter(filter);\n });\n // apply table state\n this.applyTableState();\n // handle table init\n this.tableInitSubscription = this.search.table.init.subscribe(() => {\n return this.onTableInit();\n });\n }\n }\n\n protected applyTableState() {\n if (this.search.table) {\n // handle table state (via directive)\n const tableState = new AdvancedTableState(this.search.table, this.store);\n tableState.tableState = this.searchState as string;\n tableState.ngOnInit();\n }\n }\n\n public onTableInit() {\n this.store.pipe(select(selectTable, { id: this.searchState as string}), first()).subscribe((state: any) => {\n // use order\n if (state) {\n if (state.order && state.order.length && this.search.table) {\n this.search.table.dataTable.order(state.order);\n }\n // use text search\n if (state.filter && state.filter.q && this.search.table) {\n this.search.text = state.filter.q;\n this.search.collapsed = true;\n return this.search.table.search(this.search.text);\n }\n // use predefined search\n if (state.filter && state.filter.s) {\n this.search.selectedList = this.search.userSearchList.find((item: { name: string }) => {\n return item.name === state.filter.s;\n });\n return this.search.search();\n }\n if (state.filter) {\n if (Object.keys(state.filter).length) {\n // set collapsed to false (advanced search)\n this.search.collapsed = false;\n this.search.filter = state.filter;\n return this.search.search();\n }\n }\n // ensure empty filter at this moment\n // because search() function triggers a store dispatch\n this.search.filter = {};\n return this.search.search();\n }\n });\n }\n\n private onSearchFilter(filter: any) {\n filter = isEmpty(filter) ? null : filter;\n this.store.dispatch(new AppendFilter(this.searchState as string, filter));\n }\n\n ngOnDestroy(): void {\n if (this.filterChangeSubscription) {\n this.filterChangeSubscription.unsubscribe();\n }\n if (this.tableInitSubscription) {\n this.tableInitSubscription.unsubscribe();\n }\n }\n}\n","import { Directive, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { Store } from '@ngrx/store';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { AdvancedTableSearchComponent } from '../components/advanced-table/advanced-table-search.component';\nimport { NgxTablesState } from '../reducers';\nimport { AdvancedSearchState } from './advance-search-state.directive';\n\n@Directive({\n // tslint:disable-next-line: directive-selector\n selector: '[routerSearchState]'\n})\n// tslint:disable-next-line:directive-class-suffix\nexport class AdvancedSearchRouterState extends AdvancedSearchState implements OnDestroy, OnInit {\n private _routerSubscription: Subscription;\n private _enteringState = true;\n private _applyState = false;\n\n constructor(\n protected search: AdvancedTableSearchComponent,\n @Optional() protected store: Store<NgxTablesState>,\n private readonly _router: Router\n ) {\n // call super constructor\n super(search, store);\n // set search state dynamically according to route\n this._routerSubscription = this._router.events\n .pipe(filter((event) => event instanceof NavigationStart || event instanceof NavigationEnd))\n .subscribe((event: NavigationStart | NavigationEnd) => {\n // capture urls regarding tab changing while the component is active\n if (event instanceof NavigationStart && !this._enteringState) {\n try {\n // set search state\n this.searchState = new URL(event.url, location.origin).pathname;\n } catch (err) {\n console.error('An error occured while trying to set search state for the current table', err);\n // fallback to event url\n this.searchState = event.url;\n }\n // toogle applyState\n this._applyState = true;\n }\n // capture url of the first activation of the component (e.g. coming from another route)\n if (event instanceof NavigationEnd && this._enteringState) {\n try {\n // set search state\n this.searchState = new URL(event.urlAfterRedirects, location.origin).pathname;\n } catch (err) {\n console.error('An error occured while trying to set search state for the current table', err);\n // fallback to event urlAfterRedirects\n this.searchState = event.urlAfterRedirects;\n }\n // toggle enteringState\n this._enteringState = false;\n }\n if (this._applyState) {\n // apply new table state\n super.applyTableState();\n this._applyState = false;\n }\n });\n }\n\n ngOnDestroy(): void {\n // destroy own subscriptions\n if (this._routerSubscription) {\n this._routerSubscription.unsubscribe();\n }\n // destroy parent subscriptions\n return super.ngOnDestroy();\n }\n}\n","import {NgModule, OnInit, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AdvancedTableComponent, COLUMN_FORMATTERS} from './components/advanced-table/advanced-table.component';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {AdvancedTableSearchComponent} from './components/advanced-table/advanced-table-search.component';\nimport { DatePipe } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport {BtnExpDirective} from './directives/btnexp.directive';\nimport {AdvancedTableSettingsComponent} from './components/advanced-table/advanced-table-settings.component';\nimport {SharedModule, TemplatePipe} from '@universis/common';\nimport { AdvancedTableModalBaseComponent } from './components/advanced-table-modal/advanced-table-modal-base.component';\nimport {RouterModalModule} from '@universis/common/routing';\nimport { AdvancedSearchFormComponent } from './components/advanced-search-form/advanced-search-form.component';\nimport {AdvancedFormsModule} from '@universis/forms';\nimport {FormioModule} from 'angular-formio';\nimport { AdvancedListComponent } from './components/advanced-list/advanced-list.component';\nimport {RouterModule} from '@angular/router';\nimport {\n AdvancedSearchConfigurationResolver,\n AdvancedTableConfigurationResolver\n} from './components/advanced-table/advanced-table-resolvers';\nimport {AdvancedRowActionComponent} from './components/advanced-row-action/advanced-row-action.component';\nimport {FORMATTERS} from './components/advanced-table/advanced-table.formatters.interface';\n\nimport {TABLES_EL} from './i18n/tables.el';\nimport {TABLES_EN} from './i18n/tables.en';\nimport { TableSimpleHeaderComponent, SimpleHeaderToolsComponent } from './components/table-simple-header/table-simple-header.component';\nimport { ModalModule } from 'ngx-bootstrap/modal';\nimport { ProgressbarModule } from 'ngx-bootstrap/progressbar';\nimport { AdvancedSelectComponent } from './components/advanced-select/advanced-select.component';\nimport { AdvancedSelectService } from './components/advanced-select/advanced-select.service';\nimport { AdvancedTableEditorDirective } from './directives/advanced-table-editor.directive';\nimport {AdvancedAggregatorComponent} from './components/advanced-aggregator/advanced-aggregator.component';\nimport {AdvancedAggregatorListComponent} from './components/advanced-aggregator-list/advanced-aggregator-list.component';\nimport {AdvancedAggregatorService} from './services/advanced-aggregator/advanced-aggregator.service';\nimport {AdvancedAggregatorPipe} from './pipes/advanced-aggregator.pipe';\nimport {GroupByPipe, NgPipesModule} from 'ngx-pipes';\nimport {ParseTitlePipe} from './pipes/advansed-aggregator-list-title-parse.pipe';\nimport {AddItemsComponent} from './components/add-items/add-items.component';\nimport { AdvancedSearchState } from './directives/advance-search-state.directive';\nimport { AdvancedTableState } from './directives/advance-table-state.directive';\nimport { AdvancedSearchRouterState } from './directives/advanced-search-router-state.directive';\nimport { AdvancedTableSearchBaseComponent } from './components/advanced-table/advanced-table-search-base';\nimport { ColumnSelectorComponent } from './components/column-selector/column-selector.component';\nimport { ColumnSelectorService } from './components/column-selector/column-selector.service';\n\n@NgModule({\n imports: [\n CommonModule,\n SharedModule,\n TranslateModule,\n FormsModule,\n ReactiveFormsModule,\n RouterModule,\n RouterModalModule,\n FormioModule,\n AdvancedFormsModule,\n SharedModule,\n ModalModule,\n ProgressbarModule,\n NgPipesModule\n ],\n providers: [DatePipe, TemplatePipe,\n {\n provide: COLUMN_FORMATTERS,\n useValue: FORMATTERS\n },\n\n AdvancedTableConfigurationResolver,\n AdvancedSearchConfigurationResolver,\n AdvancedSelectService,\n AdvancedAggregatorService,\n ColumnSelectorService,\n GroupByPipe\n ],\n declarations: [\n AdvancedTableComponent,\n AdvancedTableSearchBaseComponent,\n AdvancedTableSearchComponent,\n BtnExpDirective,\n AdvancedTableSettingsComponent,\n AdvancedTableModalBaseComponent,\n AdvancedSearchFormComponent,\n AdvancedListComponent,\n AdvancedRowActionComponent,\n TableSimpleHeaderComponent,\n SimpleHeaderToolsComponent,\n AdvancedSelectComponent,\n AdvancedTableEditorDirective,\n AdvancedAggregatorComponent,\n AdvancedAggregatorListComponent,\n AdvancedAggregatorPipe,\n ParseTitlePipe,\n AddItemsComponent,\n AdvancedSearchState,\n AdvancedTableState,\n AdvancedSearchRouterState,\n ColumnSelectorComponent\n ],\n exports: [\n AdvancedTableComponent,\n AdvancedTableSearchComponent,\n BtnExpDirective,\n AdvancedTableSettingsComponent,\n AdvancedSearchFormComponent,\n AdvancedListComponent,\n AdvancedRowActionComponent,\n TableSimpleHeaderComponent,\n SimpleHeaderToolsComponent,\n AdvancedSelectComponent,\n AdvancedTableEditorDirective,\n AdvancedAggregatorComponent,\n AdvancedAggregatorListComponent,\n AddItemsComponent,\n AdvancedSearchState,\n AdvancedTableState,\n AdvancedSearchRouterState,\n ColumnSelectorComponent\n ],\n entryComponents: [\n AdvancedTableModalBaseComponent,\n AdvancedTableSettingsComponent,\n AdvancedRowActionComponent,\n AdvancedSelectComponent,\n AddItemsComponent,\n ColumnSelectorComponent\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class TablesModule implements OnInit {\n constructor(private _translateService: TranslateService) {\n this.ngOnInit().catch(err => {\n console.error('An error occurred while loading tables module');\n console.error(err);\n });\n }\n\n async ngOnInit() {\n this._translateService.setTranslation('en', TABLES_EN, true);\n this._translateService.setTranslation('el', TABLES_EL, true);\n }\n\n}\n"],"names":["extendStatics","Object","setPrototypeOf","__proto__","Array","d","b","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","_","label","sent","trys","ops","g","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__values","o","m","__read","r","ar","error","__spread","concat","AdvancedColumnFormatter","template","expr","templateCache","get","set","createUrlTree","data","options","activatedRoute","router","commands","queryParams_1","replaceUrl","queryParamExtras_1","skipLocationChange","fragment","isArray","injector","ActivatedRoute","Router","map","command","commandOutlets_1","outlets","keys","forEach","key","outlet","defineProperty","enumerable","configurable","writable","x","navigationExtras","queryParams","text","relativeTo","Map","tslib_1.__extends","_super","NestedPropertyFormatter","render","type","row","meta","column","settings","aoColumns","col","at","replace","ButtonFormatter","formatOptions","buttonText","href","buttonTitle","buttonClass","TranslateService","instant","buttonContent","routerLink","LinkFormatter","ActionLinkFormatter","actions","index","actions_1","tslib_1.__values","actions_1_1","action","name","urlTree","_this","className","trim","toString","title","join","afterRender","cell","cellData","rowData","rowIndex","colIndex","ActionButtonFormatter","actions_2","actions_2_1","includes","buttonTbuttonTitleext","ActionSplitButtonFormatter","defaultAction","actions_3","actions_3_1","SelectRowFormatter","_tpl","TemplateFormatter","TrueFalseFormatter","TranslationFormatter","DateTimeFormatter","datePipe","DatePipe","currentLang","test","transform","Date","formatString","NgClassFormatter","ngClass","ngClassTemplates","_b","_c","Function","LanguageFormatter","ISO6391.getNativeName","AdvancedFilterValueProvider","buildFilter","filter","_template","values","asyncBuildFilter","_a","getValues","_d","Injectable","args","providedIn","TemplatePipe","RouterModalOkCancel","ColumnSelectorComponent","ok","_changeDetector","detectChanges","setTimeout","changing","_modalRef","hide","applyChanges","err","dismiss","emit","cancel","ngOnChanges","changes","ngOnDestroy","ngOnInit","columns","selectedColumns","item","visible","sort","a","moveIndex","findIndex","this_1","removeColumns","selected","selectedColumnsControl","selected_1","selected_1_1","this_2","splice","reset","addColumns","selected_3","availableColumnsControl","selected_2","selected_2_1","findColumn","this_3","find","lastSelectedIndex","patchValue","moveUp","moveUpButton","nativeElement","disabled","selected_4","selected_4_1","this_4","moveDown","moveDownButton","selected_5","selected_5_1","this_5","length_1","Component","selector","encapsulation","ViewEncapsulation","Emulated","BsModalRef","ChangeDetectorRef","Input","ViewChild","EventEmitter","FormControl","ColumnSelectorService","selectColumns","componentRef_1","_modal","openModalComponent","class","ignoreBackdropClick","animated","initialState","content","subscribe","ModalService","ActivatedTableService","_activeTable","tableComponent","lastActiveTable","_router","_activatedRoute","BehaviorSubject","undefined","pipe","skip","events","event","NavigationStart","activeTable","BtnExpDirective","clickEvent","preventDefault","stopPropagation","_activatedTable","exportView","setParams","query","params","setParam","setHeaders","headers","getService","setHeader","constructQueryParam","tableConfig","selectQuery","getParams","$select","split","select","words","property","_translate","_e","_f","hidden","constructURL","baseURL","getBase","url","endsWith","getModel","constructQuery","_query","downloadFile","serviceHeaders","modelName","_loadingService","showLoading","fetch","encodeURI","credentials","response","ResponseError","statusText","status","blob","objectUrl","window","URL","createObjectURL","document","createElement","downloadName","appendChild","setAttribute","download","navigator","msSaveOrOpenBlob","click","revokeObjectURL","remove","hideLoading","catch","_errorService","showError","continueLink","Directive","AngularDataContext","ConfigurationService","LoadingService","ErrorService","HostListener","_context","_config","jQuery","jQuery_","EMPTY_DATASET","fn","dataTable","Api","register","show","ctx","oApi","_fnProcessingDisplay","recordsTotal","recordsFiltered","TableTranslationChangeDetector","checkNoChanges","detach","markForCheck","reattach","COLUMN_FORMATTERS","InjectionToken","ExportLimitExceededError","RangeError","message","ColumnFormatter","AdvancedTableConfiguration","cast","input","clone","JSON","parse","stringify","AdvancedTableComponent","configChanges","_lastQueryTotalItems","_showFooter","element","_element","querySelector","classList","add","_showHeader","_showPaging","search","searchText","rows_1","model","config","asQueryable","serverSide","searchExpression","word","_firstLoad","draw","resetEmptyTable","indexes","from","context","aiDisplay","rows","load","clearSelected","smartSelect","unselected","destroy","table","empty","selectRow","silent","rowNode_1","key_1","data_1","node","multipleSelect","customSelect","nodes","each","prop","removeClass","addClass","selectedItems","unSelectRow","key_2","id_1","selectAny","selectable","every","selectNone","toggleSelectRow","key_3","id_2","_renderSelect","selectTemplate","_id","tableColumns_1","tableElement_1","drawIndex_1","adjustSelector","infoSelector","self","loading","target","formatter","showActions","_injector","items_1","columnDefinition","defaultContent","translator","sortable","formatters","columnFormatter","_columnFormatters","bind","createdCell","on","adjust","processing","html","order","info","page","console","selectColumnDefinition","firstColumn","unshift","off","onSelectionChange","id","attr","lengthMenu","lengthChange","searching","colReorder","columnOrdering","scrollX","dom","autoWidth","buttons","extend","filename","exportOptions","fnServerData","sSource","aoData","fnCallback","oSettings","autoLoad","emptyDataSet","toggleError","colOrder_1","column_1","direction_1","snapshot","top","q","ClientDataQueryable","take","rowGroup","cols","tableColumn","indexOf","dir","rowGroupOrder","lastRowGroupOrder","direction","orderByStr","columnIndex","columnOrder","stateLoadCallback","callback","state","expressions","virtual","optional","qParams","$filter","defaults","expand","orderBy","groupBy","_advancedFilterValueProvider","defaultFilterString","lastQueryParams","getList","items","dataSet","total","language","emptyTable","dataSrc","endRender","group","footerViewRef","_viewContainerRef","createEmbeddedView","rootNodes","Error","startRender","headerViewRef","stateSettings","stateSave","stateSaveCallback","scrollable","scrollY","scrollCollapse","scroller","loadingIndicator","displayBuffer","paging","pageLength","parent","scrollEvent","scrollTop","left","scrollLeft","scroll","DataTable","init","showHeader","hideSelector","showFooter","showPaging","ngAfterViewInit","headerTemplate","header","footerTemplate","footer","fetchOne","findKeys_1","query_1","rowIndex_1","res","$expand","and","equal","getItem","checked","reloadSubscription","unsubscribe","$event","key_4","id_3","findItemIndex","execRegex","exec","parseInt","oLanguage","sEmptyTable","sZeroRecords","innerHTML","innerMessage","errorTemplate","getElementsByTagName","lastError","clearEmptyTable","export","handleColumns","columnsToShow","slice","getConfig","currentValue","previousValue","_http","toPromise","columnDef","_translateService","placeholder","_columnSelector","_loading","lastQuery","exportSettings","_configuration","exportLimit","tables","errorHandler","_modalService","showWarningDialog","dataLength","DIALOG_BUTTONS","Ok","getExportableData","_exportSpreadsheet","skipHeader","previousDataState","toArray","getItems","targetDataState","clear","err_1","cleanupIndexes","exportData","headerItem","None","Inject","Injector","ElementRef","HttpClient","ExportSpreadsheetService","ViewContainerRef","Output","Number","String","Math","random","TranslatePipe","ext","classes","sPageButton","sPageButtonActive","reload","AdvancedListComponent","dataSubscription","subscription","table_1","getMetadata","routeData","re","RegExp","entitySet","metadata_1","EntityContainer","EntitySet","Name","navigateToError","EntityType","allowSaveOption","allowSave","searchConfiguration","tableConfiguration","description","longDescription","category","url_1","defaultConfiguration","pathFromRoot","route","_toastService","_userActivityService","setItem","location","hash","substring","dateCreated","onDataLoad","OkCancel","ToastService","UserActivityService","AdvancedRowActionComponent","formComponent","refreshSubscription","refresh","progress","progressComponent","showProgress","form","okButtonDisabled","invalidSubscription","change","changed","isValid","executeSubscription","modalRef","execute","formio","errors","errorMessage","hideProgress","progressContainer","modalClass","modalTitle","okButtonText","AdvancedTableSearchBaseComponent","_filter","onKeyEnter","code","filterChange","AdvancedSearchFormComponent","submission","refreshForm","ServiceUrlPreProcessor","TranslatePreProcessor","componentLoading","filterSubscription","onChange","isEmptyString","isEmptyObject","onFormLoad","i18next","resources","translation","AdvancedTableModalBaseTemplate","AdvancedTableModalBaseComponent","searchElement","focus","_getInputs","componentType","props","__prop__metadata__","inputs","ngMetadataName","hasInputs","cancelButtonText","defaultFilters","searches","advancedTable","configChangesSubscription","defaultFilter","DEFAULT_ALL_FILTER","close","pageInfo","previousPage","nextPage","onTableInit","initialPageInfo","start","firstPage","lastPage","setLength","len","onKeyUp","onSearch","getFilters","defaultFilterValues","searchItem","criterionSafeName","newDate","criteria","matchedCriterion","criterion","onFilterSelect","advancedSearch","warn","advancedFilterValueProvider","predefinedCriteria","prepare","AdvancedSelectComponent","el","AdvancedSelectService","AdvancedTableConfigurationResolver","list","AdvancedSearchConfigurationResolver","AdvancedTableSettingsComponent","activeTableConfig","storageKey","formBuilder","FormArray","minSelectedColumns","userStorage","savedTableSettings","addCheckboxes","tableColumns","control","check","controls","openTableSettings","table_settings_modal","modalService","saveTableSettings","selectedColumnsIds","min","formArray","totalSelected","reduce","prev","required","BsModalService","UserStorageService","FormBuilder","AdvancedTableSearchComponent","loadUserSearchList","mergeQueryParams","queryParamSubscription","applyQueryParams","collapsed","filterParams","userSearchList","selectedList","TextUtils","isNumber","parseFloat","getQuery","onSearchKeyDown","keyCode","navigate","queryParamsHandling","transformDate","date","convertToString","nameFilter","_userStorage","readOnly","onSelectUserSearch","listFound","queryParams_2","searchInListByName","updateSavedSearchListItemByName","newItem","itemInList","updateSavedSearchListItemByObject","deleteItemFromSavedSearchListByObject","uploadListOnUserStorage","saveSearch","templateToLoad","newList","confirmModal","saveFormName","newInsertedValue","storageValue","alert","closeModal","asyncAdvancedSearch","queryParams_3","expressions_1","_advancedSearchValueProvider","values_1","queryParams_4","advancedView","toggleView","viewChange","viewState","FORMATTERS","SimpleHeaderToolsComponent","TableSimpleHeaderComponent","dataLoadSubscription","AdvancedTableNotNullError","AdvancedTableEditorDirective","addItems","_i","addItems_1","addItems_1_1","tr","to$","hasClass","toggleClass","removedLength","addedLength","dirty","dirtyChange","removeItems","removeItems_1","removeItems_1_1","selectedIndex","undo","AdvancedAggregatorService","fetchData","fixedParams","queryStatement","filters","searchTemplate","searchValue","filterExpressions","param","evaluatedSearch","formatData","entry","subitems","entryObject","helperObject","i_1","AdvancedAggregatorComponent","_aggregators","_postProcessors","selectedGroups$","groups","filters$","_advancedAggregatorService","postProcessors","err_2","onActionEvent","eventHandler","changeDetection","ChangeDetectionStrategy","OnPush","XL","LG","MD","SM","XS","AdvancedAggregatorListComponent","Lengths","callCallback","AddItemsComponent","selectComponent","selectedSubscription","formName","formChangeSubscription","clearMessages","formLoadSubscription","messages","onFilterChange","AdvancedAggregatorPipe","functionPool","functionName","Pipe","ParseTitlePipe","part","TABLES_EL","Tables","Export","More","Search","SearchPlaceholder","GroupBy","NotDefined","paginate","first","last","previous","infoEmpty","ColumnDisplay","ColumnDisplayInfo","Save","Apply","Cancel","RecordsPerPage","PageInfo","SearchListPlaceholder","Filters","All","AddItem","EmptyTableTitle","EmptyTableMessage","RemoveItem","Items","Item","AddItemMessage","one","many","RemoveItemMessage","RemoveItemsTitle","RemoveItemsMessage","SelectAll","ClearSelection","Actions","Label","Start","ActionMessage","One","Many","CompletedWithErrors","Title","Description","CompletedWithSuccess","SelectColumns","MoveUp","MoveDown","AddColumn","RemoveColumn","SelectColumnHelp","MoveColumnHelp","UnknownColumn","SelectColumn","ActionLinkColumn","DataError","Message","ExportList","ExportLimitExceeded","ExportResults","TrueFalse","long","Yes","No","Settings","OperationCompleted","AdvancedSearch","Choose","ChooseDate","SavedSearches","ToggleDropdown","SaveCurrentSearch","SaveAs","Delete","Less","Modal","Help","TitleOnUserError","TitleOnListAlreadyCreated","NoListDefined","EmptyCriteriaList","SaveNameLabel","SaveNamePlaceholder","Accept","Decline","Close","AddItems","SelectItems","TABLES_EN","SearchListPlaceHolder","AppendFilter","TableActionTypes","AppendState","tableReducer","cloneDeep","tableReducers","getTablesState","createFeatureSelector","selectTable","createSelector","AdvancedTableState","firstDraw","store","fromTables.selectTable","ColReorder","scrollerSettings","loadeStateSettings","oSavedState","topRow","scrollToRow","dispatch","Store","decorators","Optional","AdvancedTableSearchComponentNotNull","AdvancedSearchState","filterChangeSubscription","onSearchFilter","applyTableState","tableInitSubscription","tableState","isEmpty","AdvancedSearchRouterState","_routerSubscription","NavigationEnd","_enteringState","searchState","origin","pathname","_applyState","urlAfterRedirects","TablesModule","setTranslation","NgModule","imports","CommonModule","SharedModule","TranslateModule","FormsModule","ReactiveFormsModule","RouterModule","RouterModalModule","FormioModule","AdvancedFormsModule","ModalModule","ProgressbarModule","NgPipesModule","providers","provide","useValue","ɵ0$1","GroupByPipe","declarations","exports","entryComponents","schemas","CUSTOM_ELEMENTS_SCHEMA"],"mappings":"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"}
1
+ {"version":3,"sources":["node_modules/tslib/tslib.es6.js","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table.formatters.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-filter-value-provider.service.ts","ng://@universis/ngx-tables/lib/components/column-selector/column-selector.component.ts","ng://@universis/ngx-tables/lib/components/column-selector/column-selector.service.ts","ng://@universis/ngx-tables/lib/tables.activated-table.service.ts","ng://@universis/ngx-tables/lib/directives/btnexp.directive.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table.component.ts","ng://@universis/ngx-tables/lib/components/advanced-list/advanced-list.component.ts","ng://@universis/ngx-tables/lib/components/advanced-row-action/advanced-row-action.component.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table-search-base.ts","ng://@universis/ngx-tables/lib/components/advanced-search-form/advanced-search-form.component.ts","ng://@universis/ngx-tables/lib/components/advanced-table-modal/advanced-table-modal-base.component.ts","ng://@universis/ngx-tables/lib/components/advanced-select/advanced-select.component.ts","ng://@universis/ngx-tables/lib/components/advanced-select/advanced-select.service.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table-resolvers.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table-settings.component.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table-search.component.ts","ng://@universis/ngx-tables/lib/components/advanced-table/advanced-table.formatters.interface.ts","ng://@universis/ngx-tables/lib/components/table-simple-header/table-simple-header.component.ts","ng://@universis/ngx-tables/lib/directives/advanced-table-editor.directive.ts","ng://@universis/ngx-tables/lib/services/advanced-aggregator/advanced-aggregator.service.ts","ng://@universis/ngx-tables/lib/components/advanced-aggregator/advanced-aggregator.component.ts","ng://@universis/ngx-tables/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.ts","ng://@universis/ngx-tables/lib/components/add-items/add-items.component.ts","ng://@universis/ngx-tables/lib/pipes/advanced-aggregator.pipe.ts","ng://@universis/ngx-tables/lib/pipes/advansed-aggregator-list-title-parse.pipe.ts","ng://@universis/ngx-tables/lib/i18n/tables.el.ts","ng://@universis/ngx-tables/lib/i18n/tables.en.ts","ng://@universis/ngx-tables/lib/actions/table.actions.ts","ng://@universis/ngx-tables/lib/reducers/index.ts","ng://@universis/ngx-tables/lib/directives/advance-table-state.directive.ts","ng://@universis/ngx-tables/lib/directives/advance-search-state.directive.ts","ng://@universis/ngx-tables/lib/directives/advanced-search-router-state.directive.ts","ng://@universis/ngx-tables/lib/tables.module.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation. All rights reserved.\r\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not use\r\nthis file except in compliance with the License. You may obtain a copy of the\r\nLicense at http://www.apache.org/licenses/LICENSE-2.0\r\n\r\nTHIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\r\nKIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED\r\nWARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,\r\nMERCHANTABLITY OR NON-INFRINGEMENT.\r\n\r\nSee the Apache Version 2.0 License for specific language governing permissions\r\nand limitations under the License.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) if (e.indexOf(p[i]) < 0)\r\n t[p[i]] = s[p[i]];\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = y[op[0] & 2 ? \"return\" : op[0] ? \"throw\" : \"next\"]) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [0, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator], i = 0;\r\n if (m) return m.call(o);\r\n return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { if (o[n]) i[n] = function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; }; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator];\r\n return m ? m.call(o) : typeof __values === \"function\" ? __values(o) : o[Symbol.iterator]();\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n","import { template, at } from 'lodash';\nimport { TableColumnConfiguration } from './advanced-table.interfaces';\nimport { Injector } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\nimport { DatePipe } from '@angular/common';\nimport * as ISO6391 from 'iso-639-1/build';\nimport { ActivatedRoute, NavigationExtras, Router, UrlTree } from '@angular/router';\ndeclare var jQuery: any;\nexport abstract class AdvancedColumnFormatter implements TableColumnConfiguration {\n\n public static templateCache = new Map<string, (data: any) => string>();\n\n protected injector?: Injector;\n public className?: string;\n public defaultContent?: string;\n public formatString?: string;\n public formatter?: string;\n public hidden?: boolean;\n public name?: string;\n public order?: string;\n public property?: string;\n public sortable?: boolean;\n public title = '';\n public formatOptions?: any;\n public actions?: Array<any>;\n\n public static template(expr: string): (data: any) => string {\n let result = AdvancedColumnFormatter.templateCache.get(expr);\n if (typeof result === 'function') {\n return result;\n }\n result = template(expr);\n AdvancedColumnFormatter.templateCache.set(expr, result);\n return result;\n }\n\n public abstract render(data: any, type: string, row: any, meta: any): any;\n\n protected createUrlTree(data: any, options: { commands: any[], navigationExtras?: NavigationExtras }): UrlTree | undefined {\n if (Array.isArray(options.commands) && this.injector) {\n const activatedRoute: ActivatedRoute = this.injector.get(ActivatedRoute);\n const router: Router = this.injector.get(Router);\n const commands = options.commands.map((command) => {\n if (typeof command === 'string') {\n return AdvancedColumnFormatter.template(command)(data);\n }\n if (command.outlets) {\n const commandOutlets = {};\n Object.keys(command.outlets).forEach((key) => {\n if (Object.prototype.hasOwnProperty.call(command.outlets, key)) {\n const outlet = command.outlets[key];\n if (Array.isArray(outlet)) {\n Object.defineProperty(commandOutlets, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: outlet.map((x) => {\n return AdvancedColumnFormatter.template(x)(data);\n }),\n });\n } else {\n Object.defineProperty(commandOutlets, key, {\n enumerable: true,\n configurable: true,\n writable: true,\n value: outlet,\n });\n }\n }\n });\n return {\n outlets: commandOutlets,\n };\n }\n return command;\n });\n const queryParams = {};\n let replaceUrl = true;\n const queryParamExtras = options.navigationExtras && options.navigationExtras.queryParams;\n if (queryParamExtras) {\n Object.keys(queryParamExtras).map((key) => {\n const text = queryParamExtras[key];\n queryParams[key] = AdvancedColumnFormatter.template(text)(data);\n });\n }\n if (options.navigationExtras && typeof options.navigationExtras.replaceUrl !== 'undefined') {\n replaceUrl = options.navigationExtras.replaceUrl;\n }\n let skipLocationChange = false;\n if (options.navigationExtras && typeof options.navigationExtras.skipLocationChange !== 'undefined') {\n skipLocationChange = options.navigationExtras.skipLocationChange;\n }\n\n let fragment: string | undefined;\n if (options.navigationExtras && typeof options.navigationExtras.fragment !== 'undefined') {\n fragment = options.navigationExtras.fragment;\n }\n\n return router.createUrlTree(commands,\n {\n fragment,\n relativeTo: activatedRoute,\n queryParams,\n replaceUrl,\n skipLocationChange,\n }\n );\n }\n }\n}\n\nexport interface OnAdvancedColumnAfterRender {\n afterRender(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number): void;\n}\n\nexport class NestedPropertyFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n return at(row, column.data.replace(/\\//g, '.'));\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class ButtonFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n if (data == null || this.injector == null) {\n return '';\n }\n // get format options\n const formatOptions = Object.assign({\n buttonClass: 'btn btn-default',\n }, this.formatOptions);\n // get text content\n let buttonText: string;\n let buttonTitle = '';\n if (formatOptions.buttonText) {\n buttonText = this.injector.get(TranslateService).instant(formatOptions.buttonText);\n } else {\n buttonText = formatOptions.buttonContent;\n }\n if (formatOptions.buttonTitle) {\n buttonTitle = this.injector.get(TranslateService).instant(formatOptions.buttonTitle);\n }\n if (Array.isArray(this.formatOptions.commands)) {\n const routerLink = this.createUrlTree(row, this.formatOptions);\n return `<a class=\"${formatOptions.buttonClass}\" title=\"${buttonTitle}\" href=\"#${routerLink}\">${buttonText}</a>`;\n }\n // and return button\n const href = AdvancedColumnFormatter.template(this.formatString as string)(row);\n return `<a class=\"${formatOptions.buttonClass}\" title=\"${buttonTitle}\" href=\"${href}\">${buttonText}</a>`;\n }\n constructor() {\n super();\n }\n}\n\nexport class LinkFormatter extends AdvancedColumnFormatter {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n return `<a href=\"${(AdvancedColumnFormatter.template(this.formatString as string)(row))}\">${data}</a>`;\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class ActionLinkFormatter extends AdvancedColumnFormatter\n implements OnAdvancedColumnAfterRender {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n\n if (column && column.data) {\n const actions = this.actions || [];\n let index = 1;\n for (const action of actions) {\n Object.assign(action, {\n name: action.name || `action${index}`,\n });\n index += 1;\n }\n // return the dropdown menu with 3 dots\n return `<div class='dropdown details-control' data-id='${data}' data-type='student' >\n <a id=\"dropdownMenuButton-${data}\"\n data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span class=\"fa-2x text-dots\"></span>\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton-${data}\">\n ${actions.map((x) => {\n if (x.type === 'divider') {\n return `<div class=\"dropdown-divider\"></div>`;\n }\n if (x.formatOptions && x.formatOptions.commands) {\n const urlTree = this.createUrlTree(row, x.formatOptions);\n return `<a data-name='${x.name}' class=\"dropdown-item${typeof x.className === 'string' && x.className.length\n ? ` ${x.className.trim()}` : ''}\" href=\"#${urlTree && urlTree.toString()}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n }\n return `<a data-name='${x.name}' class=\"dropdown-item${typeof x.className === 'string' && x.className.length\n ? ` ${x.className.trim()}` : ''}\" href=\"${AdvancedColumnFormatter.template(x.href)(row)}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n })\n .join('')}\n </div>\n </div>`;\n }\n return data;\n }\n\n constructor() {\n super();\n }\n public afterRender(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number): void {\n // assign bootstrap dropdown (?)\n }\n}\n\nexport class ActionButtonFormatter extends AdvancedColumnFormatter\n implements OnAdvancedColumnAfterRender {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n\n if (column && column.data && this.injector) {\n const actions = this.actions || [];\n let index = 1;\n for (const action of actions) {\n Object.assign(action, {\n name: action.name || `action${index}`,\n });\n index += 1;\n }\n let buttonText: string | undefined;\n if (this.formatOptions && this.formatOptions.buttonText) {\n // if button text is a literal expression\n if (this.formatOptions.buttonText.includes('${')) {\n // use template\n buttonText = AdvancedColumnFormatter.template(this.formatOptions.buttonText)(row);\n } else {\n // otherwise translate it\n buttonText = this.injector.get(TranslateService).instant(this.formatOptions.buttonText);\n }\n }\n let buttonTitle: string | undefined;\n if (this.formatOptions && this.formatOptions.buttonTitle) {\n buttonTitle = this.injector.get(TranslateService).instant(this.formatOptions.buttonTbuttonTitleext);\n }\n const buttonClass = (this.formatOptions && this.formatOptions.buttonClass) || 'btn btn-light';\n // return the dropdown menu with 3 dots\n return `<div class='dropdown details-control' data-id='${data}'>\n <a class=\"${buttonClass} dropdown-toggle\" href=\"#\" role=\"button\" title=\"${buttonTitle}\"\n id=\"dropdownMenuButton-${data}\" data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n ${buttonText}\n </a>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton-${data}\">\n ${actions.map((x) => {\n if (x.type === 'divider') {\n return `<div class=\"dropdown-divider\"></div>`;\n }\n if (x.commands) {\n const urlTree = this.createUrlTree(row, x);\n return `<a class=\"dropdown-item\" href=\"#${urlTree && urlTree.toString()}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n }\n return `<a class=\"dropdown-item\" href=\"${AdvancedColumnFormatter.template(x.href)(row)}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n })\n .join('')}\n </div>\n </div>`;\n }\n return data;\n }\n\n constructor() {\n super();\n }\n public afterRender(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number): void {\n // assign bootstrap dropdown (?)\n }\n}\n\nexport class ActionSplitButtonFormatter extends AdvancedColumnFormatter\n implements OnAdvancedColumnAfterRender {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n\n if (column && column.data) {\n const actions = this.actions || [];\n let index = 1;\n for (const action of actions) {\n Object.assign(action, {\n name: action.name || `action${index}`,\n });\n index += 1;\n }\n if (actions.length === 0) {\n return;\n }\n const buttonClass = (this.formatOptions && this.formatOptions.buttonClass) || 'btn btn-light';\n // return the dropdown menu with 3 dots\n const defaultAction = actions[0];\n let defaultActionHref: string;\n if (defaultAction && defaultAction.commands) {\n const urlTree = this.createUrlTree(row, defaultAction);\n defaultActionHref = '#' + (urlTree && urlTree.toString());\n } else {\n defaultActionHref = AdvancedColumnFormatter.template(defaultAction.href)(row);\n }\n return `<div class=\"btn-group\">\n <a type=\"button\" class=\"${buttonClass}\" href=\"${defaultActionHref}\">\n ${this.injector && this.injector.get(TranslateService).instant(defaultAction.title)}\n </a>\n <button type=\"button\" class=\"${buttonClass} dropdown-toggle dropdown-toggle-split\"\n data-toggle=\"dropdown\" aria-haspopup=\"true\" aria-expanded=\"false\">\n <span class=\"sr-only\">${this.injector && this.injector.get(TranslateService).instant('Toggle Dropdown')}</span>\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownMenuButton-${data}\">\n ${actions.map((x) => {\n if (x.title === '-') {\n return `<div class=\"dropdown-divider\"></div>`;\n }\n if (x.commands) {\n const urlTree = this.createUrlTree(row, x);\n return `<a class=\"dropdown-item\" href=\"#${urlTree && urlTree.toString()}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n }\n return `<a class=\"dropdown-item\" href=\"${AdvancedColumnFormatter.template(x.href)(row)}\">\n ${this.injector && this.injector.get(TranslateService).instant(x.title)}\n </a>`;\n })\n .join('')}\n </div>\n </div>`;\n }\n return data;\n }\n\n constructor() {\n super();\n }\n public afterRender(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number): void {\n // assign bootstrap dropdown (?)\n }\n}\n\nexport class SelectRowFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n const _tpl = `<input class=\"checkbox checkbox-theme\" type=\"checkbox\"\n id=\"s-${meta.row}\" /><label for=\"s-${meta.row}\">&nbsp;</label>`;\n return AdvancedColumnFormatter.template(_tpl)(row);\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class TemplateFormatter extends AdvancedColumnFormatter {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n return AdvancedColumnFormatter.template(this.formatString as string)(row);\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class TrueFalseFormatter extends AdvancedColumnFormatter {\n\n public render(data, type, row, meta) {\n return data ? (this.injector && this.injector.get(TranslateService).instant('TrueFalse.long.Yes')) :\n (this.injector && this.injector.get(TranslateService).instant('TrueFalse.long.No'));\n }\n\n constructor() {\n super();\n }\n}\n\ndeclare interface TranslationFormatterTemplate {\n translateTemplate?: (data: any) => string;\n}\n\nexport class TranslationFormatter extends AdvancedColumnFormatter {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column: TranslationFormatterTemplate = meta.settings.aoColumns[meta.col];\n if (column && data != null) {\n return this.injector && this.injector.get(TranslateService).instant(\n AdvancedColumnFormatter.template(this.formatString as string)({\n value: data,\n }));\n }\n return this.injector && this.injector.get(TranslateService).instant('Unknown');\n }\n constructor() {\n super();\n }\n}\n\nexport class DateTimeFormatter extends AdvancedColumnFormatter {\n public render(data: any, type: string, row: any, meta: any): any {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data && this.injector) {\n const datePipe: DatePipe = new DatePipe(this.injector.get(TranslateService).currentLang);\n if (typeof data === 'string' && /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\+\\d{2}$/.test(data)) {\n return datePipe.transform(new Date(data + ':00'), this.formatString);\n }\n return datePipe.transform(data, this.formatString);\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n\nexport class NgClassFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (column && column.data) {\n // get formatOptions\n if (this.formatOptions) {\n const ngClass = this.formatOptions.ngClass;\n // check condition for each key\n column.ngClassTemplates = column.ngClassTemplates || {};\n for (const key of Object.keys(ngClass)) {\n const result = AdvancedColumnFormatter.template(ngClass[key])(row);\n const fn = new Function(`return ${result};`);\n // if condition returns true add class\n if (fn() === true) {\n return `<span class=\"${key}\">${data}</span>`;\n }\n }\n }\n return data;\n }\n return data;\n }\n constructor() {\n super();\n }\n}\nexport class LanguageFormatter extends AdvancedColumnFormatter {\n public render(data, type, row, meta) {\n if (data) {\n return ISO6391.getNativeName(data);\n }\n return data;\n }\n constructor() {\n super();\n }\n}\n","import { Injectable } from '@angular/core';\nimport { TemplatePipe } from '@universis/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AdvancedFilterValueProvider {\n\n public values = { };\n private _template: TemplatePipe;\n\n constructor() {\n this._template = new TemplatePipe();\n }\n\n buildFilter(filter) {\n if (filter) {\n return this._template.transform(filter, this.values);\n }\n }\n\n async asyncBuildFilter(filter) {\n if (filter) {\n return this._template.transform(filter, await this.getValues());\n }\n }\n\n async getValues() {\n return this.values;\n }\n\n}\n","// tslint:disable-next-line:max-line-length\nimport { Component, OnInit, OnDestroy, Input, EventEmitter, ViewEncapsulation, OnChanges, SimpleChanges, ViewChild, ElementRef, ChangeDetectorRef } from '@angular/core';\nimport { FormControl } from '@angular/forms';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { RouterModalOkCancel } from '@universis/common/routing';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-column-selector',\n templateUrl: './column-selector.component.html',\n encapsulation: ViewEncapsulation.Emulated,\n styles: [\n `\n .form-select {\n -webkit-appearance: none;\n -moz-appearance: none;\n appearance: none;\n padding: 5px;\n }\n .form-select * {\n padding: 5px 5px;\n }\n .btn.disabled, .btn:disabled {\n border-color: transparent !important;\n }\n `\n ]\n})\nexport class ColumnSelectorComponent extends RouterModalOkCancel implements OnInit, OnDestroy, OnChanges {\n\n @Input() columns?: { key: string, title: string, visible: boolean, index: number }[];\n public dismiss: EventEmitter<any> = new EventEmitter();\n\n @Input() selectedColumns?: { key: string, title: string }[];\n\n @ViewChild('moveUpButton') moveUpButton?: ElementRef;\n @ViewChild('moveDownButton') moveDownButton?: ElementRef;\n\n availableColumnsControl = new FormControl();\n selectedColumnsControl = new FormControl();\n\n public changing = false;\n\n ok(): Promise<any> {\n this._changeDetector.detectChanges();\n setTimeout(() => {\n this.changing = true;\n this._modalRef.hide();\n }, 0);\n try {\n this.applyChanges();\n } catch (err) {\n throw err;\n } finally {\n this.changing = false;\n }\n this.dismiss.emit('ok');\n return Promise.resolve('ok');\n }\n cancel(): Promise<any> {\n this._modalRef.hide();\n this.dismiss.emit('cancel');\n return Promise.resolve('cancel');\n }\n\n constructor(router: Router,\n activatedRoute: ActivatedRoute,\n private _modalRef: BsModalRef,\n private _changeDetector: ChangeDetectorRef) {\n super(router, activatedRoute);\n }\n ngOnChanges(changes: SimpleChanges): void {\n //\n }\n ngOnDestroy(): void {\n //\n }\n ngOnInit(): void {\n if (Array.isArray(this.columns)) {\n this.selectedColumns = this.columns.filter((item) => {\n return item.visible;\n }).sort((a, b) => {\n if (a.index < b.index) {\n return -1;\n }\n if (a.index > b.index) {\n return 1;\n }\n return 0;\n }).map((item) => {\n return {\n key: item.key,\n title: item.title\n };\n });\n }\n }\n\n private applyChanges() {\n if (this.selectedColumns && this.columns) {\n let moveIndex = this.selectedColumns.length - 1;\n for (const column of this.columns) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === column.key;\n });\n if (findIndex < 0) {\n column.visible = false;\n moveIndex += 1;\n column.index = moveIndex;\n } else {\n column.visible = true;\n column.index = findIndex;\n }\n }\n }\n }\n\n removeColumns() {\n if (this.selectedColumns) {\n const selected = this.selectedColumnsControl.value as string[];\n if (selected.length > 0) {\n for (const value of selected) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === value;\n });\n if (findIndex >= 0) {\n this.selectedColumns.splice(findIndex, 1);\n }\n }\n // reset column\n this.selectedColumnsControl.reset();\n }\n }\n }\n\n addColumns() {\n if (this.columns && this.selectedColumns) {\n const selected = this.availableColumnsControl.value as string[];\n if (selected.length > 0) {\n for (const value of selected) {\n const findColumn = this.columns.find((item) => {\n return item.key === value;\n });\n if (findColumn) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === value;\n });\n if (findIndex < 0) {\n this.selectedColumns.push({\n key: findColumn.key,\n title: findColumn.title\n });\n }\n }\n }\n // find the last index of the selected items\n const lastSelectedIndex = this.columns.findIndex((item) => {\n return item.key === selected[selected.length - 1];\n });\n // reset control\n this.availableColumnsControl.reset();\n if (lastSelectedIndex > -1 && lastSelectedIndex < this.columns.length - 1) {\n this.availableColumnsControl.patchValue([\n this.columns[lastSelectedIndex + 1].key\n ]);\n }\n }\n }\n }\n\n moveUp() {\n if (this.moveUpButton) {\n this.moveUpButton.nativeElement.disabled = true;\n }\n if (this.selectedColumns) {\n const selected = this.selectedColumnsControl.value as string[];\n if (selected.length > 0) {\n for (const value of selected) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === value;\n });\n if (findIndex > 0) {\n const column = this.selectedColumns[findIndex];\n this.selectedColumns.splice(findIndex, 1);\n this.selectedColumns.splice(findIndex - 1 , 0, column);\n }\n }\n }\n }\n if (this.moveUpButton) {\n this.moveUpButton.nativeElement.disabled = false;\n }\n }\n\n moveDown() {\n if (this.moveDownButton) {\n this.moveDownButton.nativeElement.disabled = true;\n }\n if (this.selectedColumns && this.columns) {\n const selected = this.selectedColumnsControl.value as string[];\n if (selected.length > 0) {\n for (const value of selected) {\n const findIndex = this.selectedColumns.findIndex((item) => {\n return item.key === value;\n });\n const length = this.columns.length;\n if (findIndex >= 0 && findIndex < length) {\n const column = this.selectedColumns[findIndex];\n this.selectedColumns.splice(findIndex, 1);\n this.selectedColumns.splice(findIndex + 1 , 0, column);\n }\n }\n }\n }\n if (this.moveDownButton) {\n this.moveDownButton.nativeElement.disabled = false;\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { ModalService } from '@universis/common';\nimport { ColumnSelectorComponent } from './column-selector.component';\n\n@Injectable()\nexport class ColumnSelectorService {\n\n constructor(private _modal: ModalService) {\n //\n }\n\n selectColumns(columns: { key: string, title: string, visible: boolean, index: number }):\n Promise<{result: string, columns?: { key: string, title: string,\n visible: boolean, index: number }[]}> {\n return new Promise((resolve, reject) => {\n try {\n const modalRef = this._modal.openModalComponent(ColumnSelectorComponent, {\n class: 'modal-lg modal-table',\n ignoreBackdropClick: true,\n animated: true,\n initialState: {\n columns: columns,\n }\n });\n const componentRef: ColumnSelectorComponent = modalRef.content;\n componentRef.dismiss.subscribe((result: string) => {\n if (result === 'ok') {\n return resolve({\n result: result,\n columns: componentRef.columns\n });\n }\n return resolve({\n result: result\n });\n });\n } catch (err) {\n return reject(err);\n }\n });\n }\n\n}\n","import { Injectable } from '@angular/core';\r\nimport { ActivatedRoute, NavigationStart, Router } from '@angular/router';\r\nimport { AdvancedTableComponent } from './components/advanced-table/advanced-table.component';\r\nimport { BehaviorSubject, Observable } from 'rxjs';\r\nimport { skip } from 'rxjs/operators';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class ActivatedTableService {\r\n private _activeTable?: AdvancedTableComponent;\r\n /**\r\n * Get the last table that was set as active\r\n * Note: Emitted value may be undefined (e.g. reset on route changes)\r\n */\r\n public readonly lastActiveTable:\r\n BehaviorSubject<AdvancedTableComponent | undefined> = new BehaviorSubject<AdvancedTableComponent | undefined>(undefined);\r\n /**\r\n * Omit the last emitted value to observe only new active table changes\r\n * Note: Emitted value may be undefined (e.g. reset on route changes)\r\n */\r\n public readonly nextActiveTable:\r\n Observable<AdvancedTableComponent | undefined> = this.lastActiveTable.pipe(skip(1));\r\n\r\n constructor(private _router: Router, private _activatedRoute: ActivatedRoute) {\r\n _router.events.forEach((event) => {\r\n if (event instanceof NavigationStart) {\r\n if (this._activeTable) {\r\n this.activeTable = undefined;\r\n }\r\n }\r\n });\r\n }\r\n\r\n get activeTable(): AdvancedTableComponent | undefined {\r\n return this._activeTable;\r\n }\r\n\r\n set activeTable(tableComponent: AdvancedTableComponent | undefined) {\r\n this._activeTable = tableComponent;\r\n // provide change to observers\r\n this.lastActiveTable.next(this._activeTable);\r\n }\r\n}\r\n","import {Directive, HostListener} from '@angular/core';\nimport {ActivatedTableService} from '../tables.activated-table.service';\nimport {AngularDataContext} from '@themost/angular';\nimport {ConfigurationService, ErrorService, LoadingService} from '@universis/common';\nimport {TranslateService} from '@ngx-translate/core';\nimport {ClientDataQueryable, ResponseError} from '@themost/client';\nimport { TableConfiguration } from '../components/advanced-table/advanced-table.interfaces';\n\nexport const MAX_EXPORT_ITEMS = 500;\n\nexport declare interface ExportLimitConfiguration {\n tables?: {\n exportLimit?: number\n };\n}\n\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: '.universis-btn-export'\n})\nexport class BtnExpDirective {\n constructor(private _activatedTable: ActivatedTableService,\n private _context: AngularDataContext,\n private _config: ConfigurationService,\n private _translate: TranslateService,\n private _loadingService: LoadingService,\n private _errorService: ErrorService) {\n }\n\n @HostListener('click', ['$event'])\n async clickEvent(event) {\n event.preventDefault();\n event.stopPropagation();\n if (this._activatedTable.activeTable) {\n return this._activatedTable.activeTable.exportView();\n /*\n const lastQuery = this._activatedTable.activeTable.lastQuery;\n const tableConfig = this._activatedTable.activeTable.config;\n const serviceHeaders = this._context.getService().getHeaders();\n const queryModel = lastQuery.getModel();\n let query = this._context.model(queryModel).asQueryable();\n const queryParams = lastQuery.getParams();\n query = this.constructQuery(query, queryParams, tableConfig, serviceHeaders);\n // get export settings\n const exportSettings = this._config.settings as ExportLimitConfiguration;\n // get export limit\n const maxExportItems = exportSettings && exportSettings.tables && exportSettings.tables.exportLimit;\n if (maxExportItems && typeof maxExportItems === 'number' && maxExportItems > 0) {\n query.skip(0).take(maxExportItems);\n } else {\n query.skip(0).take(MAX_EXPORT_ITEMS);\n }\n // This constructs the URI based on the way @themost does\n const url = this.constructURL(query);\n this.downloadFile(url, query.getService().getHeaders(), query.getModel()); */\n }\n }\n\n /**\n * Sets the parameters to the query based on\n * the active filters of the activated table\n * @param query\n * @param params: The filters of the last query of the activated table\n * @return ClientDataQueryable\n */\n setParams(query: ClientDataQueryable, params): ClientDataQueryable {\n if (params && typeof params === 'object') {\n Object.keys(params).forEach((key) => {\n query.setParam(key, params[key]);\n });\n }\n return query;\n }\n\n /**\n * Sets the headers to the query based on\n * the default headers of the DataContext\n * and appending the accept header to get\n * an xlsx file from the API\n * @param query\n * @param headers: The headers to append to the query\n * @return ClientDataQueryable\n */\n setHeaders(query: ClientDataQueryable, headers: Headers): ClientDataQueryable {\n Object.keys(headers).forEach((key) => {\n if (headers.hasOwnProperty(key)) {\n query.getService().setHeader(key, headers[key]);\n }\n });\n // sets a header to accept xlsx files\n query.getService().setHeader('Accept', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n return query;\n }\n\n /**\n * Constructs the select parameter of the\n * ClientDataQuery by replacing the target name\n * of the field based on the localized translation\n * of that property on the advanced tabled\n * @param query\n * @param tableConfig: The configuration of the activated table\n * @return ClientDataQueryable\n */\n constructQueryParam(query: ClientDataQueryable, tableConfig: TableConfiguration): ClientDataQueryable {\n let selectQuery = query.getParams().$select;\n let selectQueryArray = selectQuery.split(',');\n selectQueryArray = selectQueryArray.map((select) => {\n const words = select.split(' ');\n if (words.length === 3) {\n if (tableConfig && tableConfig.columns) {\n for (const column of tableConfig.columns) {\n if (column.property === words[2] && column.title) {\n words[2] = `\"${this._translate.instant(column.title)}\"`;\n } else if (column.property === words[2]) {\n words[2] = `\"${this._translate.instant(words[2])}\"`;\n }\n }\n }\n }\n if (words.length === 1) {\n if (tableConfig && tableConfig.columns) {\n for (const column of tableConfig.columns) {\n if (column.name === words[0] && column.title) {\n words[0] = `${words[0]} as \"${this._translate.instant(column.title)}\"`;\n break;\n } else if (column.name === words[0] && column.property) {\n words[0] = `${words[0]} as \"${this._translate.instant(column.property)}\"`;\n break;\n } else if (words[0] === column.name && words[0] === 'id' && column.hidden) {\n break;\n // tslint:disable-next-line:triple-equals\n } else if (words[0] == column.name || words[0] === column.property) {\n words[0] = `${words[0]} as \"${this._translate.instant(words[0])}\"`;\n }\n }\n }\n return words[0];\n }\n return words.join(' ');\n });\n selectQuery = selectQueryArray.join(',');\n query.setParam('$select', selectQuery );\n return query;\n }\n\n /**\n * Constructs the fetch URL based the query parameters\n * @param query\n * @return String\n */\n constructURL(query): String {\n const baseURL = query.getService().getBase();\n let url = baseURL.endsWith('/') ? (baseURL + query.getModel() + '?') : (baseURL + '/' + query.getModel() + '?');\n Object.keys(query.getParams()).forEach((key, index) => {\n if (index === 0) {\n url += key + '=' + query.getParams()[key];\n } else {\n url += '&' + key + '=' + query.getParams()[key];\n }\n });\n return url;\n }\n\n /**\n * Constructs the query by setting the parameters of the\n * advanced table's active filters, sets the necessary headers\n * and build the select parameter of the query\n * @param query\n * @param params: The filters of the last query of the activated table\n * @param tableConfig: The configuration of the activated table\n * @param headers: The headers to append to the query\n * @return ClientDataQueryable\n */\n constructQuery(query, params, tableConfig, headers: Headers) {\n let _query = this.setParams(query, params);\n _query = this.setHeaders(_query, headers);\n _query = this.constructQueryParam(_query, tableConfig);\n return _query;\n }\n\n /**\n * Fetches and saves the xlsx file\n * @param url\n * @param serviceHeaders: The headers to append to the query\n * @param modelName: The model name of the advanced table\n */\n downloadFile(url, serviceHeaders: Headers, modelName) {\n this._loadingService.showLoading();\n fetch(encodeURI(url), {\n headers: serviceHeaders,\n credentials: 'include'\n }).then(response => {\n if (response && !response.ok) {\n throw new ResponseError(response.statusText, response.status);\n }\n return response.blob();\n }).then(blob => {\n const objectUrl = window.URL.createObjectURL(blob);\n const a = document.createElement('a');\n document.body.appendChild(a);\n a.setAttribute('style', 'display: none');\n a.href = objectUrl;\n const downloadName = `${modelName}.xlsx`;\n a.download = downloadName;\n // this adds support for IE and MS Edge (up to version 44.19041)\n if (window.navigator && (window.navigator as any).msSaveOrOpenBlob) {\n (window.navigator as any).msSaveOrOpenBlob(blob, downloadName);\n } else {\n // for all other browsers\n a.click();\n }\n window.URL.revokeObjectURL(objectUrl);\n a.remove();\n this._loadingService.hideLoading();\n }).catch(err => {\n this._loadingService.hideLoading();\n this._errorService.showError(err, {\n continueLink: '.'\n });\n });\n }\n\n}\n","import {\n ChangeDetectorRef,\n Component,\n ElementRef, EventEmitter,\n Inject,\n InjectionToken,\n Injector,\n Input, OnDestroy,\n OnInit, Output,\n ViewChild,\n ViewEncapsulation,\n OnChanges,\n SimpleChanges,\n ContentChild,\n TemplateRef,\n ViewContainerRef,\n AfterViewInit\n} from '@angular/core';\nimport {AngularDataContext} from '@themost/angular';\nimport {TranslatePipe, TranslateService} from '@ngx-translate/core';\nimport {ActivatedRoute} from '@angular/router';\nimport {TableConfiguration} from './advanced-table.interfaces';\nimport {DataServiceQueryParams} from '@themost/client';\nimport {AdvancedColumnFormatter} from './advanced-table.formatters';\nimport {ClientDataQueryable} from '@themost/client';\nimport {AdvancedFilterValueProvider} from './advanced-filter-value-provider.service';\nimport {Subscription, BehaviorSubject} from 'rxjs';\nimport {TemplatePipe, LoadingService, ConfigurationService,\n ModalService, DIALOG_BUTTONS, ErrorService, ExportSpreadsheetService} from '@universis/common';\nimport {IAdvancedTableFormatters} from './advanced-table.formatters.interface';\n// important note: use this import to avoid Cannot call a namespace ('jquery') error\nimport * as jQuery_ from 'jquery';\nimport 'datatables.net';\nimport {template} from 'lodash';\nimport 'datatables.net-rowgroup'; // this plugin import line must come before the following datatables plugin imports\nimport 'datatables.net-scroller'; \nimport 'datatables.net-colreorder';\nimport 'datatables.net-buttons';\nimport { HttpClient } from '@angular/common/http';\nimport { ColumnSelectorService } from '../column-selector/column-selector.service';\nimport { ExportLimitConfiguration, MAX_EXPORT_ITEMS } from '../../directives/btnexp.directive';\n\n// restore jquery import to avoid Cannot call a namespace ('jquery') error\nconst jQuery = jQuery_;\nexport interface AdvancedTableDataResult {\n recordsTotal: number;\n recordsFiltered: number;\n data: Array<any>;\n}\n\nconst DataTablesApi: any = jQuery.fn.dataTable.Api;\nDataTablesApi.register( 'processing()', function( show: any ) {\n return this.iterator('table', ( ctx: any ) => {\n ctx.oApi._fnProcessingDisplay( ctx, show );\n } );\n});\n\nconst EMPTY_DATASET = {\n recordsTotal: 0,\n recordsFiltered: 0,\n data: [],\n};\n\nclass TableTranslationChangeDetector extends ChangeDetectorRef {\n public checkNoChanges(): void {\n }\n\n public detach(): void {\n }\n\n public detectChanges(): void {\n }\n\n public markForCheck(): void {\n }\n\n public reattach(): void {\n }\n\n}\n\nexport let COLUMN_FORMATTERS = new InjectionToken('column.formatters');\n\nexport class ExportLimitExceededError extends RangeError {\n constructor(message: string) {\n super(message);\n this.name = 'ExportLimitExceededError';\n }\n}\n\nclass ColumnFormatter extends AdvancedColumnFormatter {\n constructor(protected injector: Injector) {\n super();\n }\n\n public class?: string;\n public className?: string;\n public defaultContent?: string;\n public formatString?: string;\n public formatter?: string;\n public hidden?: boolean;\n public name?: string;\n public order?: string;\n public property?: string;\n public sortable?: boolean;\n public title = '';\n\n public render(data: any, type: any, row: any, meta: any) {\n //\n }\n}\n\nfunction forceCast<T>(input: any): T {\n return input;\n}\n\nexport class AdvancedTableConfiguration {\n public static cast(input: any, clone?: boolean): TableConfiguration {\n if (clone) {\n return forceCast<TableConfiguration>(JSON.parse(JSON.stringify(input)));\n }\n return forceCast<TableConfiguration>(input);\n }\n}\n\nfunction getRandomIdentifier() {\n return (\n Number(String(Math.random()).slice(2))\n ).toString(36);\n}\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-advanced-table',\n template: `\n <table #table class=\"dataTable\">\n </table>\n <div #emptyTable class=\"d-none\">\n <div>\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-gray-300 border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-dark\" [translate]=\"'Tables.EmptyTableTitle'\"></h4>\n <p class=\"font-lg text-dark\" [translate]=\"'Tables.EmptyTableMessage'\"></p>\n </div>\n </div>\n </div>\n <div #errorTemplate class=\"d-none error-message\">\n <div class=\"text-center\">\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-danger border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-secondary\" [translate]=\"'Tables.DataError.Title'\"></h4>\n <p class=\"font-lg text-secondary mb-1\" [translate]=\"'Tables.DataError.Message'\"></p>\n <p class=\"font-lg text-secondary error-inner-message\">\n <small></small>\n </p>\n </div>\n </div>\n </div>\n `,\n encapsulation: ViewEncapsulation.None,\n styleUrls: ['./advanced-table.component.scss'],\n})\nexport class AdvancedTableComponent implements OnInit, OnDestroy, OnChanges, AfterViewInit {\n\n private _query?: ClientDataQueryable;\n private _config?: TableConfiguration;\n private _firstLoad = true;\n private _showFooter = false;\n private _showHeader = true;\n private _showPaging = false;\n private _id = getRandomIdentifier();\n public smartSelect = false;\n public configChanges = new BehaviorSubject<any>(null);\n\n @ViewChild('table') public table?: ElementRef;\n @ViewChild('emptyTable') public emptyTable?: ElementRef;\n @ViewChild('errorTemplate') public errorTemplate?: ElementRef;\n @ViewChild('loadingTable') public loadingTable?: ElementRef;\n @Input() public height = 800;\n @Input() public showActions = true;\n @Input() public autoLoad = true;\n @Output('load') public load: EventEmitter<AdvancedTableDataResult> = new EventEmitter<AdvancedTableDataResult>();\n @Output('init') public init: EventEmitter<any> = new EventEmitter<any>();\n @Input('reload') public reload: EventEmitter<any> = new EventEmitter<any>();\n @Output('select') public select: EventEmitter<any> = new EventEmitter<any>();\n @Output('draw') public draw: EventEmitter<any> = new EventEmitter<any>();\n @Output('page') public page: EventEmitter<any> = new EventEmitter<any>();\n @Output('order') public order: EventEmitter<any[][]> = new EventEmitter<any[][]>();\n @Output('scroll') public scroll: EventEmitter<{ top: number; left: number }> = new EventEmitter<{ top: number; left: number }>();\n @Output('selectedItems') public selectedItems: EventEmitter<any> = new EventEmitter<any>();\n @Output('loading') public loading: EventEmitter<{\n target: AdvancedTableComponent\n }> = new EventEmitter<{\n target: AdvancedTableComponent\n }>();\n\n @Input() public scrollable = true;\n @Input() public serverSide = true;\n @Input() public lengthMenu = [50, 100, 200, 500];\n @Input() public paging = true;\n @Input() public pageLength = 25;\n @Input() public columnOrdering = false;\n @Input() public stateSave = false;\n @Input() public stateLoadCallback?: (settings: any, callback: (state: any) => void) => void;\n @Input() public stateSaveCallback?: (settings: any, state: any) => void;\n\n @Input() public scrollY = 800;\n @Input() public scrollX = true;\n /**\n * Enables row selection. The defaulr value is false\n */\n @Input() public selectable: boolean | undefined = false;\n /**\n * Enables or disable multiple selection. The default values is true.\n */\n @Input() public multipleSelect: boolean | undefined = true;\n /**\n * Enables custom selection and hides select column. The default value is false\n */\n @Input() public customSelect = false;\n @Input() public selected: any[] = [];\n public unselected: any[] = [];\n /**\n * Gets or sets a URL to load table configuration from\n */\n @Input() public configSrc?: string;\n public lastError: any;\n\n /**\n * Accepts array of properties as row group factors and displays grouped table. \n */\n @Input() rowGroup: string[] = [];\n private lastRowGroupOrder?: { column: number; direction: string; } | null;\n\n @Input() headerTemplate?: TemplateRef<any>;\n @Input() footerTemplate?: TemplateRef<any>;\n @ViewChild('header') header?: ElementRef;\n @ViewChild('footer') footer?: ElementRef;\n\n /**\n * Gets or sets table configuration\n */\n @Input('config')\n public set config(value: TableConfiguration) {\n this._config = value;\n // raise subscription\n this.configChanges.next(this._config);\n }\n\n public get config() {\n return this._config as TableConfiguration;\n }\n\n public get lastQueryTotalItems() {\n return this._lastQueryTotalItems;\n }\n\n /**\n * Indicates whether table footer will be visible or not\n */\n @Input('showFooter')\n public set showFooter(value: boolean) {\n this._showFooter = value;\n // show or hide footer\n if (this._element && this._element.nativeElement) {\n const element = ( this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTables_info');\n if (element == null) {\n return;\n }\n if (value) {\n element.classList.remove('d-none');\n } else {\n element.classList.add('d-none');\n }\n }\n }\n\n public get showFooter() {\n return this._showFooter;\n }\n\n /**\n * Indicates whether table footer will be visible or not\n */\n @Input('showHeader')\n public set showHeader(value: boolean) {\n this._showHeader = value;\n // show or hide footer\n if (this._element && this._element.nativeElement) {\n const element = ( this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTable>thead');\n if (element == null) {\n return;\n }\n const dataTable = ( this._element.nativeElement as HTMLDivElement).querySelector('.dataTable');\n if (dataTable == null) {\n return;\n }\n if (value) {\n element.classList.remove('d-none');\n // add top margin\n dataTable.classList.remove('mt-2');\n } else {\n element.classList.add('d-none');\n // remove top margin\n dataTable.classList.add('mt-2');\n }\n }\n }\n\n public get showHeader() {\n return this._showHeader;\n }\n\n /**\n * Indicates whether paging information will be visible or not\n */\n @Input('showPaging')\n public set showPaging(value: boolean) {\n this._showPaging = value;\n // show or hide footer\n if (this._element && this._element.nativeElement) {\n const element = ( this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTables_paginate');\n if (element == null) {\n return;\n }\n if (value) {\n jQuery(element).show();\n } else {\n jQuery(element).hide();\n }\n }\n }\n\n public get showPaging() {\n return this._showPaging;\n }\n\n /**\n * Gets or sets an active query for this table\n */\n @Input('query')\n public set query(value: ClientDataQueryable | undefined) {\n this._query = value;\n }\n\n public get query() {\n return this._query as ClientDataQueryable;\n }\n\n public readonly translator: TranslatePipe;\n public dataTable: any;\n public dtOptions: any;\n private lastQueryParams?: DataServiceQueryParams;\n private _lastQueryTotalItems = 0;\n private reloadSubscription: Subscription;\n\n\n constructor(private _context: AngularDataContext,\n @Inject(COLUMN_FORMATTERS) private _columnFormatters: IAdvancedTableFormatters,\n private _activatedRoute: ActivatedRoute,\n private _translateService: TranslateService,\n private _injector: Injector,\n private _advancedFilterValueProvider: AdvancedFilterValueProvider,\n private _element: ElementRef,\n private _template: TemplatePipe,\n private _loading: LoadingService,\n private _http: HttpClient,\n private _columnSelector: ColumnSelectorService,\n private _configuration: ConfigurationService,\n private _exportSpreadsheet: ExportSpreadsheetService,\n private _modalService: ModalService,\n private _errorService: ErrorService, \n private _viewContainerRef: ViewContainerRef) {\n // initialize translate pipe\n this.translator = new TranslatePipe(this._translateService, new TableTranslationChangeDetector());\n jQuery.fn.dataTable.ext.classes.sPageButton = 'btn';\n jQuery.fn.dataTable.ext.classes.sPageButtonActive = 'btn btn-light';\n this.reloadSubscription = this.reload.subscribe((data) => {\n this.fetch();\n });\n }\n\n // simple search\n public search(searchText) {\n this.query = this.query || this._context.model(this.config.model).asQueryable();\n if (this.serverSide) {\n if (searchText && this.config.searchExpression) {\n // validate search text in double quotes\n if (/^\"(.*?)\"$/.test(searchText)) {\n this.query.setParam('$filter',\n this._template.transform(this.config.searchExpression, {\n text: searchText.replace(/^\"|\"$/g, ''),\n }));\n } else {\n // try to split words\n const words = searchText.split(' ');\n // join words to a single filter\n const filter = words.map((word) => {\n return this._template.transform((this.config && this.config.searchExpression) as string, {\n text: word,\n });\n }).join(' and ');\n // set filter\n this.query.setParam('$filter', filter);\n }\n } else {\n // clear filter\n this.query.setParam('$filter', null);\n }\n this._firstLoad = false;\n this.dataTable.draw();\n } else {\n // ensure empty table layout\n this.resetEmptyTable();\n // search locally\n this.dataTable.search(searchText.trim()).draw();\n // get indexes of filtered rows\n const indexes = Array.from(this.dataTable.context[0].aiDisplay);\n // set recordsFiltered\n const recordsFiltered = indexes.length;\n // set recordsTotal\n const recordsTotal = indexes.length;\n // retrieve data from indexes\n const rows = Array.from(this.dataTable.rows().data());\n const data = indexes.map(index => rows[<number>index]);\n // emit results to load output\n this.load.emit({\n data: data,\n recordsFiltered: recordsFiltered,\n recordsTotal: recordsTotal\n });\n }\n }\n\n public fetch(clearSelected?: boolean) {\n // if data table is null\n if (this.dataTable == null) {\n // initialize data table\n return this.ngOnInit();\n }\n // clear selection if parameter is not declared or it's true\n if (clearSelected == null || clearSelected === true) {\n // set smart select to false\n this.smartSelect = false;\n // clear selected items\n if (this.selected.length) {\n this.selected.splice(0, this.selected.length);\n }\n // clear unselected items\n if (this.unselected.length) {\n this.unselected.splice(0, this.unselected.length);\n }\n }\n // otherwise load data only\n this.dataTable.draw();\n }\n\n public destroy() {\n if (this.dataTable) {\n this.dataTable.destroy();\n this._firstLoad = true;\n if (this.table) {\n jQuery(this.table.nativeElement).empty();\n }\n this.dataTable = null;\n // clear selected items\n if (this.selected.length) {\n this.selected.splice(0, this.selected.length);\n }\n // clear unselected items\n if (this.unselected.length) {\n this.unselected.splice(0, this.unselected.length);\n }\n // set smart select to false\n this.smartSelect = false;\n }\n }\n\n /**\n * Selects the specified data row\n */\n public selectRow(row: any, silent?: boolean) {\n if (row) {\n // get row\n const rowNode = row.node();\n // if multiple select is false\n if (this.multipleSelect === false) {\n if (this.customSelect === false) {\n // enumerate row\n this.dataTable.rows().nodes().each((node: any) => {\n if (node !== rowNode) {\n jQuery(node).find(':checkbox').prop('checked', false);\n }\n });\n } else {\n this.dataTable.rows('.selected').nodes().each((node: any) => {\n if (node !== rowNode) {\n jQuery(node).removeClass('selected');\n }\n });\n }\n // clear selected\n this.selected.splice(0, this.selected.length);\n }\n // if custom select mode is off\n if (this.customSelect === false) {\n jQuery(rowNode).find(':checkbox').prop('checked', true);\n } else {\n // otherwise add class\n jQuery(row.node()).addClass('selected');\n }\n // get row data\n const key = this.config.columns[0].property || this.config.columns[0].name || '';\n const data = row.data();\n // search selected items\n let findIndex = this.selected.findIndex((x) => {\n return x[key] === data[key];\n });\n if (findIndex >= 0) {\n // remove previously selected row\n this.selected.splice(findIndex, 1);\n }\n this.selected.push(data);\n // validate unselected data\n findIndex = this.unselected.findIndex((x) => {\n return x[key] === data[key];\n });\n if (findIndex >= 0) {\n // remove previously selected row\n this.unselected.splice(findIndex, 1);\n }\n if (silent) {\n return;\n }\n this.selectedItems.emit(this.selected);\n }\n }\n\n /**\n * Unselects the specified data row if it's selected\n */\n public unSelectRow(row: any, silent?: boolean) {\n if (row) {\n // if custom select mode is off\n if (this.customSelect === false) {\n jQuery(row.node()).find(':checkbox').prop('checked', false);\n } else {\n // otherwise add class\n jQuery(row.node()).removeClass('selected');\n }\n // get first column key\n const key = this.config.columns[0].property || this.config.columns[0].name || '';\n const data = row.data();\n const id = data[key];\n let findIndex = this.selected.findIndex((x) => {\n return x[key] === id;\n });\n if (findIndex >= 0) {\n this.selected.splice(findIndex, 1);\n if (this.smartSelect) {\n // add this row to unselected rows\n findIndex = this.unselected.findIndex((x) => {\n return x[key] === id;\n });\n if (findIndex < 0) {\n this.unselected.push(data);\n }\n }\n if (silent) {\n return;\n }\n this.selectedItems.emit(this.selected);\n }\n }\n }\n\n public selectAny() {\n if (this.dataTable && this.selectable) {\n // set smart select flag\n this.smartSelect = true;\n // select any row\n this.dataTable.rows().every((index: any) => {\n const row = this.dataTable.row( index );\n this.selectRow(row, true);\n });\n // emit selection event\n this.selectedItems.emit(this.selected);\n }\n }\n\n public selectNone() {\n if (this.dataTable && this.selectable) {\n // set smart select flag\n this.smartSelect = false;\n this.unselected.splice(0, this.unselected.length);\n // select any row\n this.dataTable.rows().every((index: any) => {\n const row = this.dataTable.row( index );\n this.unSelectRow(row, true);\n });\n this.selected.splice(0, this.selected.length);\n // emit selection event\n this.selectedItems.emit(this.selected);\n }\n }\n\n public toggleSelectRow(row: any) {\n if (row) {\n const data = row.data();\n // get first column key\n const key = this.config.columns[0].property || this.config.columns[0].name || '';\n // get id\n const id = data[key];\n // find if row is selected\n const findIndex = this.selected.find((x) => {\n return x[key] === id;\n });\n // if row is selected\n if (findIndex >= 0) {\n // unselect\n this.unSelectRow(row);\n } else {\n this.selectRow(row);\n }\n }\n }\n\n // noinspection JSMethodCanBeStatic\n /**\n * Datatables column renderer for select checkbox\n * @param data\n * @param type\n * @param row\n * @param meta\n */\n private _renderSelect(data, type, row, meta) {\n // get column\n const column = meta.settings.aoColumns[meta.col];\n if (typeof column.selectTemplate !== 'function') {\n Object.assign(column, {\n selectTemplate: template(`<input class=\"checkbox checkbox-theme s-row\" type=\"checkbox\"\n id=\"s-${this._id}-\\${meta.row}\" data-id=\"\\${data}\" /><label for=\"s-${this._id}-\\${meta.row}\">&nbsp;</label>\n `),\n });\n }\n // render template\n return column.selectTemplate({\n meta,\n data,\n });\n }\n\n public ngOnInit() {\n const self = this;\n if (this.dataTable) {\n this.destroy();\n }\n if (this.config) {\n this.loading.emit({\n target: this\n });\n // parse properties\n if (Object.prototype.hasOwnProperty.call(this.config, 'selectable')) {\n this.selectable = this.config.selectable;\n }\n if (Object.prototype.hasOwnProperty.call(this.config, 'multipleSelect')) {\n this.multipleSelect = this.config.multipleSelect;\n }\n // prepare configuration for columns\n const tableColumns = this.config.columns\n // filter action link column\n .filter((column) => {\n if (column.formatter && column.formatter === 'ActionLinkFormatter' && this.showActions === false) {\n return false;\n }\n return true;\n }).map((column) => {\n // convert column to advance table column\n return Object.assign(new ColumnFormatter(this._injector), column);\n }).map((column) => {\n const columnDefinition = {\n data: column.property || column.name,\n defaultContent: column.defaultContent != null ? column.defaultContent : '',\n title: this.translator.transform(column.title),\n sortable: column.hasOwnProperty('sortable') ? column.sortable : true,\n visible: column.hasOwnProperty('hidden') ? !column.hidden : true,\n name: column.name,\n };\n\n if (column.className) {\n Object.assign(columnDefinition, {\n className: column.className,\n });\n } else {\n Object.assign(columnDefinition, {\n className: '',\n });\n }\n\n if (column.formatters) {\n Object.assign(columnDefinition, {\n render(data: any, type: string, row: any, meta: any) {\n let result = data;\n (column.formatters as any[]).forEach((columnFormatter) => {\n const formatter = self._columnFormatters[columnFormatter.formatter];\n if (formatter && typeof formatter.render === 'function') {\n column.formatString = columnFormatter.formatString;\n column.formatOptions = columnFormatter.formatOptions;\n }\n result = formatter.render.bind(column)(result, type, row, meta);\n });\n delete column.formatString;\n delete column.formatOptions;\n return result;\n },\n });\n // check if column formatters export createdCell event\n const items = column.formatters.filter((columnFormatter) => {\n return typeof columnFormatter.afterRender === 'function';\n });\n if (items.length > 0) {\n Object.assign(columnDefinition, {\n createdCell(cell: any, cellData: any, rowData: any, rowIndex: number, colIndex: number) {\n items.forEach((columnFormatter) => {\n const formatter = self._columnFormatters[columnFormatter.formatter];\n if (formatter && typeof formatter.afterRender === 'function') {\n formatter.afterRender.bind(column)(cell, cellData, rowData, rowIndex, colIndex);\n }\n });\n }\n });\n }\n }\n if (column.formatter) {\n const formatter = self._columnFormatters[column.formatter];\n if (formatter && typeof formatter.render === 'function') {\n Object.assign(columnDefinition, {\n render: formatter.render.bind(column),\n });\n }\n if (formatter && typeof formatter.afterRender === 'function') {\n Object.assign(columnDefinition, {\n render: formatter.render.bind(column),\n });\n Object.assign(columnDefinition, {\n createdCell: formatter.afterRender.bind(column),\n });\n }\n }\n return columnDefinition;\n });\n // get table element\n const tableElement = jQuery(this.table && this.table.nativeElement);\n jQuery(window).on('resize', () => {\n setTimeout(() => {\n if (this.dataTable) {\n this.dataTable.columns.adjust();\n }\n }, 1);\n });\n // tslint:disable-next-line: no-shadowed-variable\n tableElement.on('processing.dt', (event, settings, processing) => {\n if (processing) {\n // clear empty table element\n tableElement.find('.dataTables_empty').html('');\n setTimeout(() => {\n tableElement.addClass('processing');\n }, 0);\n } else {\n setTimeout(() => {\n tableElement.removeClass('processing');\n }, 0);\n }\n });\n let drawIndex = 1;\n tableElement.on('order.dt', (event: any) => {\n if (this.dataTable) {\n const order = this.dataTable.order();\n const columns = tableColumns;\n if (order && order.length) {\n this.order.emit(order);\n }\n }\n }).on('draw.dt', (event) => {\n this.draw.emit();\n if (this.dataTable) {\n const info: { page: number; pages: number } = this.dataTable.page.info();\n this.page.emit(info);\n if (drawIndex > 1) {\n return;\n }\n try {\n drawIndex++;\n setTimeout(() => {this.dataTable.columns.adjust(); }, 1);\n } catch (err) {\n console.error('ERROR', 'An error occurred while adjusting table columns');\n console.error(err);\n }\n }\n });\n\n // allow selection\n if (this.selectable) {\n // get first column (as row primary key)\n // todo::allow row primary key configuration\n const firstColumn = this.config.columns[0];\n // add select column\n const selectColumnDefinition = {\n className: 'text-center pl-4 pr-0',\n data: firstColumn.property || firstColumn.name,\n defaultContent: '',\n title: '',\n sortable: false,\n visible: !this.customSelect,\n name: firstColumn.name,\n };\n // assign renderer\n Object.assign(selectColumnDefinition, {\n render: this._renderSelect.bind(this),\n });\n // and finally add column\n tableColumns.unshift(selectColumnDefinition);\n // user interface additions\n // handle page change event (a trick for firing draw.dt events)\n tableElement\n // handle draw events\n .on('draw.dt', () => {\n\n if (this.customSelect) {\n // enable row selection event\n tableElement.find('tbody').on('click', 'tr', function() {\n // select row\n const row = self.dataTable.row(this);\n // add row\n self.select.emit(row);\n });\n }\n const elements = tableElement.find('input.s-row');\n elements.off('click').on('click', this.onSelectionChange.bind(this));\n // make selection on current page\n const key = this.config.columns[0].property || '';\n if (this.selected.length > 0) {\n // enumerate selected items\n this.selected.forEach((item) => {\n // find row identifier\n const id = item[key];\n // if identifier is defined\n if (id != null) {\n // try to find check element with this identifier in attribute data-id\n tableElement.find(`input[data-id='${id}']`).prop('checked', true);\n }\n });\n }\n if (this.smartSelect) {\n // select rows that are not selected\n // and do not included in unselected collection\n tableElement.find('input[data-id]').each((index, element) => {\n // get data id\n if (this.unselected.findIndex((x) => {\n // tslint:disable-next-line:triple-equals\n return x[key] == jQuery(element).attr('data-id');\n }) < 0) {\n this.selectRow(this.dataTable.row(index));\n }\n });\n } else if (this.selected.length === 0) {\n tableElement.find('input[data-id]').prop('checked', false);\n }\n });\n }\n // initialize data table\n const settings = {\n // set length menu\n lengthMenu: [5, 10, 50, 100, 200, 500],\n // hide length menu\n lengthChange: false,\n // enable search but hide search box (css)\n searching: true,\n // enable data processing\n processing: true,\n // enable getting server side data\n serverSide: this.serverSide,\n // enumerate table columns\n columns: tableColumns,\n colReorder: this.columnOrdering,\n order: [],\n // set scroll x\n scrollX: this.scrollX,\n dom: 'Bfrtip',\n autoWidth: false,\n buttons: [\n {\n extend: 'excel',\n filename: this.config.title,\n className: 'd-none',\n exportOptions: {\n columns: 'th:not(:first-child)',\n },\n },\n ],\n // define server data callback\n fnServerData(sSource: any, aoData: any, fnCallback: any, oSettings: any) {\n // if method is invoked for the first time\n if (self._firstLoad) {\n // disabled first load flag\n self._firstLoad = false;\n // if auto load is disabled\n if (self.autoLoad === false) {\n const emptyDataSet = {\n recordsTotal: 0,\n recordsFiltered: 0,\n data: [],\n };\n self._lastQueryTotalItems = 0;\n // emit empty data\n self.load.emit(emptyDataSet);\n // return empty data\n return fnCallback(emptyDataSet);\n }\n }\n // reset error\n self.toggleError();\n // get activated route params\n const queryParams = self._activatedRoute.snapshot.queryParams;\n // get columns\n const columns = aoData[1].value;\n // get order expression\n let order = aoData[2].value;\n // get skip records param\n const skip = aoData[3].value;\n // get page size param\n const top = aoData[4].value;\n // get search value\n const search = aoData[5].value;\n // get data queryable\n const q = self._query instanceof ClientDataQueryable ? self._query : self._context.model(self.config.model).asQueryable();\n // apply paging params\n if (top) {\n q.take(top).skip(skip);\n }\n // initialize parameters (rowGroup and order) if there is row group input\n let rowGroupOrder: any[] = [];\n if (self.rowGroup && self.rowGroup.length) {\n let colOrder = [];\n \n // find index of the rowGroup column\n let cols = self.rowGroup.map(x => tableColumns.findIndex(tableColumn => tableColumn.data === x)).filter(index => index >= 0);\n // find new index of the rowGroup column in case of table offers the column reordering capability \n // i.e. settings.colReorder === false (columnOrdering === false)\n if (self.dataTable && self.dataTable.colReorder && this.columnOrdering === true) {\n colOrder = self.dataTable.colReorder.order();\n cols = cols.map( (col: any) => colOrder.indexOf(col as never)).filter(index => index > -1);\n }\n \n let column = -1;\n let direction = 'asc';\n \n // set column and order direction \n if (order && order.length) {\n column = order[0].column;\n direction = order[0].dir;\n }\n rowGroupOrder = cols.map((x) => { \n // check if column order has been changed\n // and find the new index (column-index) of the row group column\n if (x != column && self.lastRowGroupOrder != null) {\n if (x === self.lastRowGroupOrder.column) {\n column = self.lastRowGroupOrder.column;\n direction = self.lastRowGroupOrder.direction;\n }\n }\n return { \n column: x, \n dir: x === column ? direction : 'asc'\n } \n });\n order = order || [];\n // set the row group column query param always first and before table ordering query params \n order.unshift(...rowGroupOrder);\n \n // save ordering column and direction (regardless rowGrouping)\n if (column > -1) {\n self.lastRowGroupOrder = { column, direction };\n }\n }\n // apply order params\n if (order && order.length) {\n // get order query expression\n const orderByStr = order.map((expr: any) => {\n let columnIndex: number;\n if (self.columnOrdering === false) {\n columnIndex = expr.column;\n } else if (self.dataTable.colReorder) {\n // get the current column order (from colReorder)\n const columnOrder: number[] = self.dataTable.colReorder.order();\n // and match the dataTable index to the config columns index\n // expr.column should always be valid (e.g. in range), but perform a minor validation\n if (expr.column >= 0 && expr.column < columnOrder.length) {\n columnIndex = columnOrder[expr.column];\n } else {\n // use the first column as a fallback (won't happen, just for safety)\n columnIndex = 0;\n }\n } else {\n columnIndex = expr.column;\n }\n return tableColumns[columnIndex].name + ' ' + expr.dir || 'asc';\n }).join(',');\n // set order\n q.setParam('$orderby', orderByStr);\n }\n // ensure self.stateLoadCallback\n if (self.stateLoadCallback == null) {\n self.stateLoadCallback = ((_, callback) => {\n return callback(null);\n });\n }\n self.stateLoadCallback(null, (state) => {\n // configure $select parameter\n const select = self.config.columns.filter( (column) => {\n if (column.virtual === true) {\n return false;\n }\n if (column.optional === true) {\n if (state && state.columns) {\n const index = tableColumns.findIndex((tableColumn) => tableColumn.name === column.name);\n if (index >= 0) {\n return state.columns[index].visible;\n }\n }\n return false;\n }\n return true;\n }).map((column) => {\n if (column.property) {\n return column.name + ' as ' + column.property;\n } else {\n return column.name;\n }\n });\n q.select.apply(q, select);\n // configure $filter\n if (queryParams.$filter && queryParams.$filter.length) {\n // set route filter\n const qParams = q.getParams();\n q.setParam('$filter', null);\n const expressions = [ queryParams.$filter ];\n if (qParams.$filter) { expressions.push('(' + qParams.$filter + ')' ); }\n q.filter(expressions.join(' and '));\n }\n // check if query parameters contain filter\n if (queryParams.$expand && queryParams.$expand.length) {\n // set route $expand\n q.setParam('$expand', queryParams.$expand);\n } else if (self.config && self.config.defaults && self.config.defaults.expand) {\n q.setParam('$expand', self.config.defaults.expand);\n }\n if (!q.getParams()['$orderby'] && self.config && self.config.defaults && self.config.defaults.orderBy) {\n q.setParam('$orderby', self.config.defaults.orderBy);\n }\n if (self.config && self.config.defaults && self.config.defaults.groupBy) {\n q.setParam('$groupby', self.config.defaults.groupBy);\n }\n // append default filter\n if (self.config && self.config.defaults && self.config.defaults.filter) {\n return self._advancedFilterValueProvider.asyncBuildFilter(self.config.defaults.filter).then((defaultFilterString) => {\n if (defaultFilterString) {\n const qParams = q.getParams();\n q.setParam('$filter', null);\n const expressions = [ defaultFilterString ];\n if (qParams.$filter) { expressions.push('(' + qParams.$filter + ')' ); }\n q.filter(expressions.join(' and '));\n }\n self.lastQueryParams = q.getParams();\n return q.getList().then((items) => {\n const dataSet = {\n recordsTotal: items.total,\n recordsFiltered: items.total,\n data: items.value,\n };\n self._lastQueryTotalItems = items.total;\n if (items.total === 0) {\n self.resetEmptyTable();\n }\n // emit load event\n self.load.emit(dataSet);\n // return data\n return fnCallback(dataSet);\n });\n }).catch((err) => {\n // log error to console\n console.error('TABLES', err);\n // show error\n self.toggleError(err);\n self._lastQueryTotalItems = 0;\n // by returning empty dataset\n self.load.emit(EMPTY_DATASET);\n return fnCallback(EMPTY_DATASET);\n });\n }\n self.lastQueryParams = q.getParams();\n q.getList().then((items) => {\n const dataSet = {\n recordsTotal: items.total,\n recordsFiltered: items.total,\n data: items.value,\n };\n self._lastQueryTotalItems = items.total;\n if (items.total === 0) {\n self.resetEmptyTable();\n }\n // emit load event\n self.load.emit(dataSet);\n // return data\n return fnCallback(dataSet);\n }).catch((err) => {\n // log error to console\n console.error('TABLES', err);\n // show error\n self.toggleError(err);\n // by returning empty dataset\n self.load.emit(EMPTY_DATASET);\n return fnCallback(EMPTY_DATASET);\n });\n });\n },\n language: Object.assign({ }, self.translator.transform('Tables.DataTable'),\n {emptyTable: ' ' }),\n };\n // check if there is a rowGroup input and assign it to table\n if (this.rowGroup.length) {\n const cols = this.rowGroup.map(x => tableColumns.findIndex(tableColumn => tableColumn.data === x)).filter(index => index >= 0);\n const dataSrc = cols.map(x => tableColumns[x].data);\n const startRender = function (rows, group) {\n const headerViewRef = self._viewContainerRef.createEmbeddedView(\n self.headerTemplate as any,\n {\n group,\n rows\n }\n );\n headerViewRef.detectChanges();\n if (headerViewRef.rootNodes.length > 1) {\n throw new Error('HeaderTemplate must have exactly one root node.')\n }\n return headerViewRef.rootNodes[0];\n }\n // endRender property \n const endRender = function (rows, group) {\n const footerViewRef = self._viewContainerRef.createEmbeddedView(\n self.footerTemplate as any,\n {\n group,\n rows\n }\n );\n footerViewRef.detectChanges();\n if (footerViewRef.rootNodes.length > 1) {\n throw new Error('FooterTemplate must have exactly one root node.')\n }\n return footerViewRef.rootNodes[0];\n }\n Object.assign(settings, { rowGroup: { dataSrc, endRender, startRender } }, {}); \n }\n const stateSettings = {\n stateSave: this.stateSave\n };\n if (this.stateLoadCallback) {\n Object.assign(stateSettings, {\n stateLoadCallback: this.stateLoadCallback\n });\n }\n if (this.stateSaveCallback) {\n Object.assign(stateSettings, {\n stateSaveCallback: this.stateSaveCallback\n });\n }\n Object.assign(settings, stateSettings);\n\n if (this.scrollable) {\n // set continuous scrolling\n Object.assign(settings, {\n scrollY: this.scrollY,\n scrollCollapse: false,\n scroller: {\n loadingIndicator: false,\n displayBuffer: Array.isArray(this.rowGroup) && this.rowGroup.length > 0 ? 100 : 10,\n },\n });\n } else {\n Object.assign(settings, {\n scrollY: this.scrollY,\n paging: this.paging,\n pageLength: this.pageLength,\n });\n }\n if (this.selectable) {\n\n }\n // handle init.dt event and emit local event\n this.dataTable = tableElement.on('init.dt', (event) => {\n const scroller = jQuery(event.target).parent();\n // handle scrolling\n scroller.on('scroll', (scrollEvent) => {\n const target = jQuery(scrollEvent.target);\n const top = target.scrollTop() as number;\n const left = target.scrollLeft() as number;\n if (this.dataTable) {\n this.scroll.emit({\n top,\n left\n });\n }\n });\n }).DataTable(settings);\n this.init.emit();\n // show or hide header\n if (!this.showHeader && this._element && this._element.nativeElement) {\n const hideSelector = (this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTable>thead');\n if (hideSelector) {\n hideSelector.classList.add('d-none');\n }\n const adjustSelector = (this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTable');\n if (adjustSelector) {\n adjustSelector.classList.add('mt-2');\n }\n }\n // show or hide footer\n if (!this.showFooter && this._element && this._element.nativeElement) {\n const infoSelector = (this._element.nativeElement as HTMLDivElement)\n .querySelector('.dataTables_info');\n if (infoSelector) {\n infoSelector.classList.add('d-none');\n }\n }\n // show or hide pager\n if (this.showPaging) {\n this.showPaging = true;\n }\n }\n }\n\n ngAfterViewInit(): void {\n if (this.headerTemplate) {\n const headerViewRef = this._viewContainerRef.createEmbeddedView(\n this.headerTemplate,\n {\n group: '',\n }\n );\n headerViewRef.detectChanges();\n for (var node of headerViewRef.rootNodes) {\n this.header? this.header.nativeElement.appendChild(node) : null;\n }\n }\n\n if (this.footerTemplate) {\n const footerViewRef = this._viewContainerRef.createEmbeddedView(\n this.footerTemplate,\n {\n group: '',\n rows: []\n }\n );\n footerViewRef.detectChanges();\n for (var node of footerViewRef.rootNodes) {\n this.footer? this.footer.nativeElement.appendChild(node) : null;\n }\n }\n }\n\n scrollTop(value: number) {\n if (this.dataTable) {\n this.dataTable.parent().scrollTop(value);\n }\n }\n\n scrollLeft(value: number) {\n if (this.dataTable) {\n this.dataTable.parent().scrollLeft(value);\n }\n }\n\n get lastQuery(): ClientDataQueryable | undefined {\n if (this.config == null) {\n return;\n }\n if (this.lastQueryParams == null) {\n return;\n }\n const q = this._context.model(this.config.model).asQueryable();\n Object.keys(this.lastQueryParams).forEach( (key) => {\n q.setParam(key, this.lastQueryParams && this.lastQueryParams[key]);\n });\n // return query\n return q;\n }\n\n /**\n * Fetches and updates a single row\n * @param find - Any object which is being converted to a query\n */\n public fetchOne(find: any) {\n if (find == null) {\n return;\n }\n if (this.dataTable == null) {\n return;\n }\n if (this.lastQueryParams == null) {\n return;\n }\n // get rows\n const rows = Array.from(this.dataTable.rows().data());\n if (rows && rows.length) {\n // find result\n const findKeys = Object.keys(find);\n if (findKeys.length === 0) {\n // do nothing\n return;\n }\n // find row index by searching each property\n const rowIndex = rows.findIndex((row: any) => {\n return findKeys.map( (key) => {\n return row[key] === find[key];\n }).filter( (res) => {\n return res === false;\n }).length === 0;\n });\n // if row has been found\n if (rowIndex >= 0) {\n const query = this._context.model(this.config.model).asQueryable();\n // select attributes\n query.setParam('$select', this.lastQueryParams.$select);\n if (this.lastQueryParams.$expand) {\n // apply expand attributes\n query.setParam('$expand', this.lastQueryParams.$expand);\n }\n // apply filter for row\n findKeys.forEach( (key) => {\n const column = this.config.columns.find( (col) => {\n return col.property === key || col.name === key;\n });\n if (column) {\n // get property or name\n const property = column.property || column.name;\n query.and(property as string).equal(find[key]);\n } else {\n query.and(key).equal(find[key]);\n }\n });\n // and finally get item\n return query.getItem().then( (item) => {\n // if item exists\n const row = this.dataTable.row(rowIndex);\n const checked = jQuery(row.node()).find(':checkbox').prop('checked');\n if (item) {\n // redraw row\n row.data(item);\n jQuery(row.node()).find(':checkbox').off('click').on('click', this.onSelectionChange.bind(this));\n // if row is already selected\n if (checked) {\n this.selectRow(row, true);\n }\n }\n return Promise.resolve();\n });\n }\n }\n return Promise.resolve();\n }\n\n public ngOnDestroy(): void {\n if (this.reloadSubscription) {\n this.reloadSubscription.unsubscribe();\n }\n }\n\n /**\n * Handle selection change\n * @param $event\n */\n public onSelectionChange($event) {\n const input = $event.target as HTMLInputElement;\n const execRegex = /-(\\d+)$/g.exec(input.id);\n // get row from id\n const rowIndex = parseInt((execRegex && execRegex[1]) as string, 10);\n // get row\n const row = this.dataTable.row(rowIndex).data();\n // get row identifier\n if (row) {\n const key = this.config.columns[0].property || '';\n const id = row[key];\n let findItemIndex = this.selected.findIndex((item) => {\n return item[key] === id;\n });\n if (input.checked) {\n if (findItemIndex < 0) {\n // add row to selected rows\n this.selected.push(row);\n this.selectedItems.emit(this.selected);\n }\n } else {\n if (findItemIndex >= 0) {\n // remove selected item\n this.selected.splice(findItemIndex, 1);\n if (this.smartSelect) {\n // add row to unselected rows\n findItemIndex = this.unselected.findIndex((item) => {\n return item[key] === id;\n });\n if (findItemIndex < 0) {\n this.unselected.push(row);\n this.selectedItems.emit(this.selected);\n }\n }\n }\n }\n }\n }\n\n private resetEmptyTable() {\n // this operation is important\n // due to ng data binding\n // empty table template has no translated text during ngOnInit()\n if (this.dataTable && this.dataTable.context[0]) {\n this.dataTable.context[0].oLanguage.sEmptyTable =\n this.dataTable.context[0].oLanguage.sZeroRecords = this.emptyTable && this.emptyTable.nativeElement.innerHTML;\n }\n }\n\n private toggleError(err?: any) {\n if (this.dataTable && this.dataTable.context[0]) {\n const element = (this.errorTemplate && this.errorTemplate.nativeElement as HTMLDivElement);\n let innerMessage: any;\n if (element) {\n innerMessage = element.getElementsByTagName('small').item(0);\n }\n if (err) {\n this.lastError = err;\n if (innerMessage) {\n innerMessage.innerHTML = err.error && err.error.message ? err.error.message : err.message;\n }\n this.dataTable.context[0].oLanguage.sEmptyTable =\n this.dataTable.context[0].oLanguage.sZeroRecords = this.errorTemplate && this.errorTemplate.nativeElement.innerHTML;\n } else {\n if (innerMessage) {\n innerMessage.innerHTML = '';\n }\n this.dataTable.context[0].oLanguage.sEmptyTable = this.dataTable.context[0].oLanguage.sZeroRecords = '';\n }\n }\n }\n\n private clearEmptyTable() {\n if (this.dataTable && this.dataTable.context[0]) {\n this.dataTable.context[0].oLanguage.sEmptyTable = this.dataTable.context[0].oLanguage.sZeroRecords = '';\n }\n }\n\n public export() {\n const element: HTMLElement = document.querySelector('.dt-buttons .buttons-excel') as HTMLElement;\n element.click();\n }\n\n public handleColumns(columnsToShow) {\n const table = this.dataTable;\n this.config.columns.slice(1).forEach((column, i) => {\n if (!column.hidden) {\n if (columnsToShow.includes(column.name)) {\n // noinspection TypeScriptValidateJSTypes\n table.column(column.name + ':name').visible(true);\n } else {\n // noinspection TypeScriptValidateJSTypes\n table.column(column.name + ':name').visible(false);\n }\n }\n });\n }\n\n public getConfig() {\n return this.config;\n }\n\n public ngOnChanges(changes: SimpleChanges): void {\n if (Object.prototype.hasOwnProperty.call(changes, 'configSrc')) {\n if (changes.configSrc != null) {\n // load table configuration on change\n // tslint:disable-next-line: triple-equals\n if (changes.configSrc.currentValue && (changes.configSrc.currentValue != changes.configSrc.previousValue)) {\n this._http.get(changes.configSrc.currentValue).toPromise().then((config: TableConfiguration) => {\n // set configuration\n this.config = config;\n this.destroy();\n // fetch and redraw\n this.fetch();\n }).catch((err) => {\n console.error('TABLES', 'An error occurred while loading table configuration.');\n console.error(err);\n });\n }\n }\n }\n }\n\n public reset(load?: boolean): void {\n this.query = undefined;\n this.destroy();\n this.autoLoad = !!load;\n this.ngOnInit();\n }\n\n selectColumns() {\n // get column order e.g. [0, 4, 1, 2, 3]\n const columnOrder: number[] = this.dataTable.colReorder.order();\n // get column definitions\n const columnDefs = this.dataTable.settings().init().columns;\n const columns = columnDefs.map((\n columnDef: { key: string, title: string | undefined, visible: boolean,\n sortable: boolean, index: number }, i: number) => {\n const key = `column-${i}`;\n let title = columnDef.title;\n // get column index\n const index = columnOrder.indexOf(i);\n const visible = this.dataTable.column(index).visible();\n // set title for select column\n if (i === 0 && this.selectable) {\n title = '<' + this._translateService.instant('Tables.SelectColumn') + '>';\n }\n // get column title\n if (title != null && title.length === 0) {\n title = undefined;\n }\n if (title == null) {\n // try to find column placeholder\n let placeholder: string | undefined;\n if (this.selectable) {\n if (i > 0) {\n placeholder = this.config.columns[i - 1].placeholder;\n }\n } else {\n placeholder = this.config.columns[i].placeholder;\n }\n if (placeholder != null) {\n title = '<' + this._translateService.instant(placeholder) + '>';\n }\n }\n if (title == null) {\n title = '<' + this._translateService.instant('Tables.UnknownColumn') + '>';\n }\n return {\n key,\n title,\n visible,\n index\n };\n });\n this._columnSelector.selectColumns(columns).then((event) => {\n if (event.result === 'ok') {\n const sorted = (event.columns as any[])\n .map((col) => {\n return {\n key: col.key,\n index: col.index\n };\n })\n .sort((a, b) => a.index - b.index);\n // get column order e.g. [3, 1, 2, 0, 4]\n const indexes = sorted\n .map((item) => {\n return (event.columns as any[]).findIndex((next) => item.key === next.key);\n });\n // reset column visibilty\n for (let index = 0; index < (event.columns as any[]).length; index++) {\n const element = (event.columns as any[])[index];\n const colIndex = columnOrder.indexOf(index);\n // set visibilty with redraw (=true)\n this.dataTable.column(colIndex).visible(element.visible, true);\n }\n // finally apply column order\n this.dataTable.colReorder.order(indexes, true);\n // simply redraw the table\n this.dataTable.draw();\n }\n });\n }\n\n /**\n *\n * @param options to pass an errorHandler callback, if desired\n * @returns void\n */\n public async exportView(options?: {errorHandler?: (reason?: any) => any}): Promise<void> {\n try {\n this._loading.showLoading();\n // validate query items and config\n if (!(this.lastQuery && this._lastQueryTotalItems && this.config)) {\n // do nothing\n return;\n }\n // get export settings\n const exportSettings = this._configuration.settings as ExportLimitConfiguration;\n // and export limit\n const exportLimit =\n (exportSettings && exportSettings.tables && exportSettings.tables.exportLimit && exportSettings.tables.exportLimit > 0)\n ? exportSettings.tables.exportLimit : MAX_EXPORT_ITEMS;\n // and validate it\n if (this._lastQueryTotalItems > exportLimit) {\n // call error handler\n // provide a recognizible error type\n if (options && options.errorHandler) {\n options.errorHandler(new ExportLimitExceededError('Export limit exceeded'));\n return;\n }\n // or show warning modal and exit\n this._modalService.showWarningDialog(this._translateService.instant('Tables.ExportList'),\n this._translateService.instant('Tables.ExportLimitExceeded',\n {dataLength: this._lastQueryTotalItems, exportLimit}), DIALOG_BUTTONS.Ok);\n return;\n }\n // get total displayed items\n const totalDisplayedItems = Array.from(this.dataTable.context[0].aiDisplay).length;\n // if they already satisfy the last query total\n if (totalDisplayedItems === this._lastQueryTotalItems) {\n // prepare excel data immediately\n const {body, header} = this.getExportableData();\n // and export them to excel\n this._exportSpreadsheet.export(body, `${this._translateService.instant(this.config.title || 'Tables.ExportResults')}.xlsx`, {\n header,\n skipHeader: false\n });\n } else {\n // at this point, more data need to be fetched\n // hold previous data state\n const previousDataState = this.dataTable.rows().data().toArray();\n // get target data state by executing the last query\n // note: taking the exportLimit amount of items will always satisfy the results,\n // because it has been validated\n const targetDataState = await this.lastQuery.take(exportLimit).getItems();\n // change table data on the fly, but do not redraw\n this.dataTable.clear().rows.add(targetDataState);\n // prepare excel data\n const {body, header} = this.getExportableData();\n // reset table data\n this.dataTable.clear().rows.add(previousDataState);\n // and export target data to excel\n this._exportSpreadsheet.export(body, `${this._translateService.instant(this.config.title || 'Tables.ExportResults')}.xlsx`, {\n header,\n skipHeader: false\n });\n }\n // exit\n return;\n } catch (err) {\n // log error\n console.error(err);\n // call error handler, if defined\n if (options && options.errorHandler) {\n options.errorHandler(err);\n } else {\n // use default error service\n this._errorService.showError(err, {\n continueLink: '.'\n });\n }\n } finally {\n this._loading.hideLoading();\n }\n }\n\n public getExportableData(): {body: any[], header: any[]} {\n if (!(this.dataTable && this.dataTable.buttons\n && typeof this.dataTable.buttons.exportData === 'function' && this.config)) {\n return {body: [], header: []};\n }\n // fetch exportable excel data\n let {body, header} = this.dataTable.buttons.exportData();\n const cleanupIndexes: number[] = [];\n // clean up headers\n header = header.filter((headerItem: string, index: number) => {\n // exclude empty headers\n if (headerItem.trim().length === 0) {\n cleanupIndexes.push(index);\n return false;\n }\n // exclude hidden columns\n // note: use the datatable visible() function\n // instead of the hidden config property, to satisfy the column selector\n if (!this.dataTable.column(index).visible()) {\n cleanupIndexes.push(index);\n return false;\n }\n return true;\n });\n // clean up body\n body = body.map((row: any []) => {\n return row.filter((_, rowIndex: number) => {\n return cleanupIndexes.indexOf(rowIndex) === -1;\n });\n });\n return {body, header};\n }\n}\n\n// const endRender = function (rows, group) { var count = rows.data(); rows.count(); \n// return (`<ng-container [ngTemplateOutlet]=\"rowGroupTemplate\" [ngTemplateOutletContext]=\"{ data: ${group} }\"></ng-container>`); };\n // <ng-container [ngTemplateOutlet]=\"rowGroupTemplate\" [ngTemplateOutletContext]=\"{ data: }\"></ng-container>\n // return ('<span align=\"left\"\"><strong>'+ group + ' ' + `(${totalHeader} ` + count.length + ')</strong></span>'); };\n","import { Component, OnInit, ViewChild, OnDestroy, Input } from '@angular/core';\nimport { AngularDataContext } from '@themost/angular';\nimport { TranslateService } from '@ngx-translate/core';\nimport { Subscription } from 'rxjs';\nimport { ActivatedRoute } from '@angular/router';\n// tslint:disable-next-line: max-line-length\nimport { AdvancedTableComponent, AdvancedTableDataResult, AdvancedTableConfiguration } from '../advanced-table/advanced-table.component';\nimport { ErrorService, DIALOG_BUTTONS, ModalService, UserActivityService } from '@universis/common';\nimport { ResponseError } from '@themost/client';\nimport { TableConfiguration } from '../advanced-table/advanced-table.interfaces';\nimport { ToastService } from '@universis/common';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-list',\n templateUrl: './advanced-list.component.html'\n})\nexport class AdvancedListComponent implements OnInit, OnDestroy {\n\n public recordsTotal: number = NaN;\n public config?: TableConfiguration;\n private subscription?: Subscription;\n private dataSubscription?: Subscription;\n private reloadSubscription?: Subscription;\n @Input('entitySet') entitySet?: string;\n @Input('category') category?: string;\n @Input('description') description?: string;\n @Input('longDescription') longDescription?: string;\n @Input('tableConfiguration') tableConfiguration: any;\n @Input('searchConfiguration') searchConfiguration: any;\n @ViewChild('table') table?: AdvancedTableComponent;\n @Input('allowSaveOption') allowSaveOption = true;\n @Input('readonly') readonly: boolean = false;\n\n constructor(private _context: AngularDataContext,\n private _translateService: TranslateService,\n private _activatedRoute: ActivatedRoute,\n private _errorService: ErrorService,\n private _toastService: ToastService,\n private _modalService: ModalService,\n private _userActivityService: UserActivityService\n ) { }\n ngOnDestroy(): void {\n if (this.dataSubscription) {\n this.dataSubscription.unsubscribe();\n }\n if (this.reloadSubscription) {\n this.reloadSubscription.unsubscribe();\n }\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n async ngOnInit() {\n try {\n if (this.table == null) {\n return;\n }\n const table = this.table;\n // get metadata\n const metadata = await this._context.getMetadata();\n // get route data\n this.dataSubscription = this._activatedRoute.data.subscribe( routeData => {\n // get entityType\n const re = new RegExp(`^${routeData.model}$`, 'ig');\n const entitySet = metadata.EntityContainer.EntitySet.find( x => {\n return re.test(x.Name);\n });\n // if entity type is null\n if (entitySet == null) {\n // navigate to error\n return this._errorService.navigateToError(new ResponseError('EntitySet Not Found', 404));\n }\n // get entity type\n const entityType = metadata.EntityType.find( x => {\n return x.Name === entitySet.EntityType;\n });\n if (entityType == null) {\n return this._errorService.navigateToError(new ResponseError('EntityType Not Found', 404));\n }\n if (routeData.searchConfiguration) {\n if (Object.prototype.hasOwnProperty.call(routeData.searchConfiguration, 'allowSave')) {\n this.allowSaveOption = routeData.searchConfiguration.allowSave;\n }\n this.searchConfiguration = routeData.searchConfiguration;\n }\n if (routeData.tableConfiguration) {\n this.tableConfiguration = routeData.tableConfiguration;\n }\n if (routeData.description) {\n this.description = this._translateService.instant(routeData.description);\n }\n if (routeData.longDescription) {\n this.longDescription = this._translateService.instant(routeData.longDescription);\n }\n if (routeData.category) {\n this.category = this._translateService.instant(routeData.category);\n }\n if (Object.prototype.hasOwnProperty.call(routeData, 'readonly')) {\n this.readonly = routeData.readonly;\n }\n // clone default configuration\n const defaultConfiguration = AdvancedTableConfiguration.cast(this.tableConfiguration, true);\n // correct edit button link\n const column = defaultConfiguration.columns.find( col => {\n return col.formatter === 'ButtonFormatter' && col.formatString === '(modal:edit)';\n });\n if (column) {\n const url: Array<string> = [];\n this._activatedRoute.snapshot.pathFromRoot.forEach( route => {\n url.push.apply(url, route.url);\n });\n column.formatString = `#/${url.join('/')}/(modal:\\$\\{id\\}/edit)`;\n }\n // create list configuration by assigning list entity set\n const setConfig = Object.assign({\n model: entitySet.Name\n }, defaultConfiguration);\n if (Object.prototype.hasOwnProperty.call(setConfig, 'selectable')) {\n setConfig.selectable = !this.readonly;\n }\n table.config = setConfig;\n // fetch data\n table.fetch(true);\n // do reload by using hidden fragment e.g. /classes#reload\n this.reloadSubscription = this._activatedRoute.fragment.subscribe(fragment => {\n if (fragment && fragment === 'reload') {\n this._toastService.show(\n this.description as string,\n this._translateService.instant('Settings.OperationCompleted')\n );\n table.fetch(true);\n }\n });\n // finally add user activity\n this._userActivityService.setItem({\n category: this.category as string,\n description: this.description as string,\n url: window.location.hash.substring(1),\n dateCreated: new Date\n });\n });\n } catch (err) {\n console.error(err);\n return this._errorService.showError(err);\n }\n }\n\n\n /**\n * Data load event handler of advanced table component\n * @param data\n */\n onDataLoad(data: AdvancedTableDataResult) {\n this.recordsTotal = data.recordsTotal;\n }\n\n /**\n * Remove selected items\n */\n remove() {\n const table = this.table;\n if (table && table.selected && table.selected.length) {\n // get items to remove\n const items = table.selected;\n return this._modalService.showWarningDialog(\n this._translateService.instant('Tables.RemoveItemsTitle'),\n this._translateService.instant('Tables.RemoveItemsMessage'),\n DIALOG_BUTTONS.OkCancel).then(result => {\n if (result === 'ok') {\n this._context.model(table.config.model).remove(items).then(() => {\n this._toastService.show(\n this.description + ':' + this._translateService.instant('Tables.RemoveItemMessage.title'),\n this._translateService.instant((items.length === 1 ?\n 'Tables.RemoveItemMessage.one' : 'Tables.RemoveItemMessage.many')\n , { value: items.length })\n );\n table.fetch(true);\n }).catch(err => {\n this._errorService.showError(err, {\n continueLink: '.'\n });\n });\n }\n });\n }\n }\n}\n","import {Component, OnInit, OnDestroy, Input, EventEmitter,\n ViewChild, ElementRef, ViewEncapsulation, AfterViewInit, Output} from '@angular/core';\nimport {TranslateService} from '@ngx-translate/core';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport 'rxjs/add/observable/combineLatest';\nimport {ModalService} from '@universis/common';\nimport {RouterModalOkCancel} from '@universis/common/routing';\nimport {Observable, Subscription} from 'rxjs';\nimport {AdvancedFormComponent} from '@universis/forms';\nimport { ProgressbarComponent } from 'ngx-bootstrap/progressbar';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-row-action',\n templateUrl: './advanced-row-action.component.html',\n styles: [\n `\n .fa-1_5x {\n font-size: 1.5rem;\n }\n .form-control:disabled, .form-control[readonly] {\n background-color: inherit;\n }\n .form-check.checkbox {\n position: relative\n }\n `\n ],\n encapsulation: ViewEncapsulation.None\n})\nexport class AdvancedRowActionComponent extends RouterModalOkCancel implements OnInit, AfterViewInit, OnDestroy {\n\n invalidSubscription: any;\n\n\n @Input() items: any;\n @Input() modalIcon = 'fas fa-project-diagram';\n @Input() description?: string;\n @Input() formTemplate?: string;\n @Input() progressType = 'indigo';\n @Output() data: any;\n @Input() additionalMessage?: string;\n @Input() errorMessage = 'Tables.Actions.CompletedWithErrors';\n public lastError: any;\n public loading = false;\n @ViewChild('progress') progressComponent?: ProgressbarComponent;\n @ViewChild('progressContainer') progressContainer?: ElementRef;\n @ViewChild('formComponent') formComponent?: AdvancedFormComponent;\n @Input() refresh: any = new EventEmitter<any>();\n @Input() execute?: Observable<any>;\n private refreshSubscription?: Subscription;\n private executeSubscription?: Subscription;\n\n constructor(router: Router,\n activatedRoute: ActivatedRoute,\n private _translateService: TranslateService,\n private _modalService: ModalService) {\n super(router, activatedRoute);\n // set modal size\n this.modalClass = 'modal-lg';\n // set modal title\n this.modalTitle = 'Tables.Actions.Label';\n // disable ok button\n this.okButtonDisabled = false;\n // set button text\n this.okButtonText = 'Tables.Actions.Start';\n }\n\n get form() {\n return this.formComponent;\n }\n ngOnInit() {\n this.refreshSubscription = this.refresh.subscribe((value) => {\n if (this.progressComponent == null) {\n return;\n }\n if (value && value.progress) {\n let progress = 0;\n if (value.progress < 0) {\n progress = 0;\n } else if (value.progress > 100) {\n progress = 100;\n } else {\n progress = value.progress;\n }\n this.progressComponent.value = progress;\n this.showProgress();\n }\n });\n\n }\n\n ngAfterViewInit(): void {\n if (this.formComponent && this.formComponent.form) {\n this.okButtonDisabled = true;\n this.invalidSubscription = this.formComponent.form.change.subscribe((event: any) => {\n if (Object.prototype.hasOwnProperty.call(event, 'isValid') && (event.changed != null)) {\n this.okButtonDisabled = !event.isValid;\n }\n });\n }\n }\n\n ngOnDestroy() {\n if (this.refreshSubscription) {\n this.refreshSubscription.unsubscribe();\n }\n if (this.executeSubscription) {\n this.executeSubscription.unsubscribe();\n }\n if (this.invalidSubscription) {\n this.invalidSubscription.unsubscribe();\n }\n }\n\n cancel(): Promise<any> {\n if (this.loading) {\n return Promise.resolve();\n }\n // close\n if (this._modalService.modalRef) {\n return this._modalService.modalRef.hide();\n }\n return Promise.resolve();\n }\n\n async ok() {\n try {\n if (this.execute == null) {\n return;\n }\n this.loading = true;\n this.lastError = null;\n if (this.formComponent && this.formComponent.form &&\n this.formComponent.form.formio && this.formComponent.form.formio.data) {\n // set data\n this.data = this.formComponent.form.formio.data;\n }\n // do action\n this.execute.subscribe((result) => {\n this.loading = false;\n this.refresh.emit({\n progress: 100\n });\n if (result && result.errors && result.errors > 0) {\n // show message for partial success\n if (result.errors === 1) {\n this.lastError = new Error(this._translateService.instant(\n `${this.errorMessage}.Description.One`));\n } else {\n this.lastError = new Error(this._translateService.instant(\n `${this.errorMessage}.Description.Many`,\n result));\n }\n this.refresh.emit({\n progress: 1\n });\n this.hideProgress();\n return;\n }\n if (this._modalService.modalRef) {\n this._modalService.modalRef.hide();\n }\n }, (err) => {\n this.loading = false;\n this.lastError = err;\n this.refresh.emit({\n progress: 0\n });\n });\n } catch (err) {\n this.loading = false;\n this.lastError = err;\n }\n }\n\n showProgress() {\n if (this.progressContainer) {\n this.progressContainer.nativeElement.classList.replace('invisible', 'visible');\n }\n }\n\n hideProgress() {\n if (this.progressContainer) {\n this.progressContainer.nativeElement.classList.replace('visible', 'invisible');\n }\n }\n}\n","import {Component, EventEmitter, Input, Output} from '@angular/core';\n@Component({\n template: ''\n })\nexport class AdvancedTableSearchBaseComponent {\n private _filter: any;\n @Output() filterChange = new EventEmitter();\n\n @Input()\n get filter() {\n return this._filter;\n }\n\n set filter(value) {\n this._filter = value;\n }\n\n onKeyEnter(event: KeyboardEvent) {\n if (event.code === 'Enter') {\n this.filterChange.emit(this._filter);\n }\n }\n}\n","// tslint:disable-next-line:max-line-length\nimport {AfterViewInit, Component, EventEmitter, Input, OnDestroy, OnInit, Output, ViewChild, ViewEncapsulation, OnChanges, SimpleChanges} from '@angular/core';\nimport {FormioComponent, FormioForm} from 'angular-formio';\nimport {AngularDataContext} from '@themost/angular';\nimport {ActivatedRoute} from '@angular/router';\nimport {ServiceUrlPreProcessor, TranslatePreProcessor} from '@universis/forms';\nimport {AdvancedTableSearchBaseComponent} from '../advanced-table/advanced-table-search-base';\nimport {TranslateService} from '@ngx-translate/core';\nimport {Subscription} from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-search-form',\n template: `\n <div class=\"p-4\">\n <formio #formioComponent class=\"formio-search\"\n (keydown)=\"onKeyEnter($event)\" (change)=\"onChange($event)\" (formLoad)=\"onFormLoad($event)\"\n [refresh]=\"refreshForm\" [submission]=\"submission\" [form]=\"form\"></formio>\n </div>\n `,\n styleUrls: ['./advanced-search-form.component.scss'],\n encapsulation: ViewEncapsulation.None\n})\nexport class AdvancedSearchFormComponent extends AdvancedTableSearchBaseComponent implements OnInit, OnDestroy, AfterViewInit, OnChanges {\n\n\n @ViewChild('formioComponent') formComponent?: FormioComponent;\n @Input() form: any = {};\n @Input() formSrc?: string;\n @Output() refreshForm = new EventEmitter<any>();\n @Output() loading = new EventEmitter<{ target: AdvancedSearchFormComponent}>();\n submission: any = { data: {} };\n private filterSubscription?: Subscription;\n public componentLoading = true;\n\n constructor(private _context: AngularDataContext,\n private _translateService: TranslateService,\n private _activatedRoute: ActivatedRoute,\n private _http: HttpClient\n ) {\n super();\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n if (Object.prototype.hasOwnProperty.call(changes, 'form')) {\n if (changes.form != null) {\n if (changes.form.currentValue &&\n // tslint:disable-next-line:triple-equals\n changes.form.currentValue != changes.form.previousValue) {\n this.ngOnInit();\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(changes, 'formSrc')) {\n if (changes.formSrc != null) {\n if (changes.formSrc.currentValue &&\n // tslint:disable-next-line:triple-equals\n changes.formSrc.currentValue != changes.formSrc.previousValue) {\n this._http.get(changes.formSrc.currentValue).toPromise().then((form) => {\n // set form\n this.form = form;\n // and init\n this.ngOnInit();\n }).catch((err) => {\n console.error('An error occurred while loading search configuration');\n console.error(err);\n });\n }\n }\n }\n if (Object.prototype.hasOwnProperty.call(changes, 'filter')) {\n if (changes.filter != null) {\n this.submission.data = changes.filter.currentValue || {};\n this.refreshForm.emit({\n submission: this.submission\n });\n }\n }\n }\n\n ngOnInit(): void {\n if (this.form) {\n new ServiceUrlPreProcessor(this._context).parse(this.form);\n new TranslatePreProcessor(this._translateService).parse(this.form);\n this.submission = {\n data: this.filter\n };\n this.loading.emit({\n target: this\n });\n this.refreshForm.emit({\n form: this.form\n });\n this.componentLoading = false;\n this.filterSubscription = this.filterChange.subscribe( filter => {\n this.submission.data = filter;\n this.refreshForm.emit({\n submission: this.submission\n });\n });\n }\n }\n\n onChange(event: object) {\n if (this.formComponent == null) {\n return;\n }\n const formComponent = this.formComponent;\n Object.keys(formComponent.submission.data).forEach(key => {\n if (Object.prototype.hasOwnProperty.call(formComponent.submission.data, key)) {\n const value = formComponent.submission.data[key];\n // the filter with type is a string and is not empty\n const isEmptyString = typeof value === 'string' && value.length === 0;\n // do not include empty objects in filter\n const isEmptyObject = typeof value === 'object' && Object.keys(value).length === 0;\n // make isEmptyString, isEmptyObject mutex\n if (!isEmptyString && !isEmptyObject) {\n Object.defineProperty(this.filter, key, {\n configurable : true,\n enumerable: true,\n value : value\n });\n } else {\n delete this.filter[key];\n }\n }\n });\n }\n\n onFormLoad(form: FormioForm) {\n if (this.formComponent == null) {\n return;\n }\n const currentLang = this._translateService.currentLang;\n this.formComponent.formio.i18next.options.resources[currentLang] = { translation : this._translateService.instant(`Forms`) };\n this.formComponent.formio.language = currentLang;\n }\n\n ngAfterViewInit(): void {\n //\n }\n\n ngOnDestroy(): void {\n if (this.filterSubscription) {\n this.filterSubscription.unsubscribe();\n }\n }\n}\n","import { Component, ElementRef, Input, OnDestroy, OnInit, ViewChild, AfterViewInit, DoCheck } from '@angular/core';\nimport { RouterModalOkCancel } from '@universis/common/routing';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { TableConfiguration } from '../advanced-table/advanced-table.interfaces';\nimport { Subscription } from 'rxjs';\nimport { AdvancedTableComponent, AdvancedTableDataResult } from '../advanced-table/advanced-table.component';\nimport { AngularDataContext } from '@themost/angular';\nimport { AdvancedFilterValueProvider } from './../advanced-table/advanced-filter-value-provider.service';\nimport { DatePipe } from '@angular/common';\nimport { TemplatePipe } from '@universis/common';\nexport declare interface PageInfo {\n page: number;\n pages: number;\n start: number;\n end: number;\n length: number;\n recordsTotal: number;\n recordsDisplay: number;\n serverSide?: boolean;\n}\n\n// important: export this const due to AOT compilation errors\n// see more https://angular.io/guide/aot-metadata-errors#only-initialized-variables\nexport const AdvancedTableModalBaseTemplate = `\n<div>\n <!-- search -->\n <div class=\"row mt-3\">\n <div class=\"col-12 col-lg-3\">\n <div class=\"input-group mb-3\">\n <input spellcheck=\"false\" type=\"text\" #searchElement\n (keyup)=\"onKeyUp($event)\" [(ngModel)]=\"searchText\"\n class=\"form-control bg-gray-100 border-0\"\n placeholder=\"{{'Tables.SearchPlaceholder' | translate}}\" aria-label=\"Search\" aria-describedby=\"basic-addon2\">\n <div class=\"input-group-append\">\n <button class=\"btn btn-default bg-gray-100 border-0\" type=\"button\" (click)=\"onSearch()\">\n <i class=\"fa fa-search text-secondary\"></i>\n </button>\n </div>\n </div>\n </div>\n <div #emptyTable class=\"d-none\">\n <div>\n <div class=\"mt-4\">\n <div class=\"icon-circle bg-gray-300 border-gray-100\"></div>\n </div>\n <div class=\"mt-4\">\n <h4 class=\"font-3xl text-dark\" [translate]=\"'Tables.EmptyTableTitle'\"></h4>\n <p class=\"font-lg text-dark\" [translate]=\"'Tables.EmptyTableMessage'\"></p>\n </div>\n\n </div>\n </div>\n <div class=\"col-12 col-lg-5\">\n <div class=\"btn-toolbar\">\n <button class=\"btn btn-gray-100\">\n <i class=\"fa fa-sliders-h pr-2 text-secondary\" aria-hidden=\"true\"></i>{{'Tables.Filters' | translate}}\n </button>\n <div #dropdownFilter class=\"dropdown ml-3\">\n <button class=\"btn btn-gray-100 dropdown-toggle\"\n type=\"button\" id=\"dropdownDefaultFilters\"\n data-toggle=\"dropdown\" dropdownToggle>\n {{ this.defaultFilter.name | translate }}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownDefaultFilters\">\n <button type=\"button\" class=\"dropdown-item\" *ngFor=\"let filter of defaultFilters\" (click)=\"onFilterSelect(filter)\">\n {{ filter.name | translate }}\n </button>\n </div>\n </div>\n </div>\n </div>\n <div class=\"col text-lg-right mt-3 mt-lg-0 d-none\">\n <button [disabled]=\"true\" class=\"btn rounded-pill btn-outline-theme\">\n <span class=\"pr-2 font-lg\">+</span><span [translate]=\"'Tables.AddItem'\"></span>\n </button>\n </div>\n </div>\n <div class=\"row\">\n <div class=\"col-12\" [ngClass]=\"{ 'component-loading': loading}\">\n <app-advanced-table #advancedTable (init)=\"onTableInit()\"\n (load)=\"onDataLoad($event)\"\n [selectable]=\"true\"\n [multipleSelect]=\"true\"\n [scrollX]=\"false\" [scrollY]=\"320\"\n [pageLength]=\"pageLength\"\n [scrollable]=\"false\" [showFooter]=\"false\"\n [showActions]=\"false\" [lengthMenu]=\"lengthMenu\"\n [config]=\"tableConfig\" [configSrc]=\"tableConfigSrc\"></app-advanced-table>\n </div>\n </div>\n <div class=\"row mt-3 table-custom-pager\">\n <div class=\"col-12 d-flex\" *ngIf=\"recordsTotal\">\n <div class=\"mt-2 ml-auto mr-3 text-secondary\" [translate]=\"'Tables.RecordsPerPage'\"></div>\n <div #dropdownLength class=\"dropdown mr-3\">\n <button class=\"btn btn-gray-100 dropdown-toggle\"\n type=\"button\" id=\"dropdownPageSize\" data-toggle=\"dropdown\"\n dropdownToggle>\n {{pageLength}}\n </button>\n <div class=\"dropdown-menu\" aria-labelledby=\"dropdownPageSize\">\n <button (click)=\"setLength(item)\"\n class=\"dropdown-item dropdown-item-theme\"\n type=\"button\" *ngFor=\"let item of lengthMenu\">{{item}}</button>\n </div>\n </div>\n <div class=\"mt-2 mr-2\" [translate]=\"'Tables.PageInfo'\" [translateParams]=\"pageInfo\"></div>\n <button [disabled]=\"pageInfo && pageInfo.page === 0\" class=\"btn text-nowrap\" (click)=\"firstPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===0\" class=\"btn\" (click)=\"previousPage()\">\n <i class=\"fa fa-chevron-left text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn\" (click)=\"nextPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n <button [disabled]=\"pageInfo && pageInfo.page===pageInfo.pages-1\" class=\"btn text-nowrap\" (click)=\"lastPage()\">\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n <i class=\"fa fa-chevron-right text-color-theme\"></i>\n </button>\n </div>\n </div>\n </div>\n`;\n\n/**\n *\n * A specific value for a criterion\n *\n */\ninterface SearchItem {\n filter: any;\n name: string;\n}\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-advanced-table-modal',\n template: AdvancedTableModalBaseTemplate,\n styles: [\n `\n\n `\n ]\n})\nexport class AdvancedTableModalBaseComponent extends RouterModalOkCancel implements OnInit, OnDestroy, AfterViewInit {\n ngAfterViewInit(): void {\n setTimeout(() => {\n if (this.searchElement && this.searchElement.nativeElement) {\n this.searchElement.nativeElement.focus();\n }\n }, 0);\n }\n\n private static readonly DEFAULT_ALL_FILTER = {\n name: 'Tables.All',\n filter: null\n };\n\n @ViewChild('advancedTable') advancedTable?: AdvancedTableComponent;\n @ViewChild('emptyTable') emptyTable?: ElementRef;\n @ViewChild('dropdownFilter') dropdownFilter?: ElementRef;\n @ViewChild('dropdownLength') dropdownLength?: ElementRef;\n @ViewChild('searchElement') searchElement: any;\n @Input('tableConfig') tableConfig?: TableConfiguration;\n @Input('tableConfigSrc') tableConfigSrc?: string;\n @Input('pageLength') pageLength = 25;\n @Input('searchText') searchText?: string;\n @Input('lengthMenu') lengthMenu: Array<number> = [5, 10, 25, 50, 100];\n private subscription?: Subscription;\n public recordsTotal = 0;\n public loading = false;\n public recordsFiltered = 0;\n public defaultFilters: Array<any> = [AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER];\n @Input('defaultFilter') defaultFilter = AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER;\n\n\n public pageInfo = <PageInfo>{\n serverSide: true\n };\n private _template: TemplatePipe;\n configChangesSubscription?: Subscription;\n\n constructor(\n _router: Router,\n _activatedRoute: ActivatedRoute,\n protected _context: AngularDataContext,\n protected advancedFilterValueProvider: AdvancedFilterValueProvider,\n protected datePipe: DatePipe\n ) {\n super(_router, _activatedRoute);\n this.modalClass = 'modal-xl modal-table';\n this._template = new TemplatePipe();\n }\n\n private _getInputs(componentType): Array<any> {\n const props = componentType.__prop__metadata__;\n const inputs: any[] = [];\n if (props == null) {\n return inputs;\n }\n Object.keys(props).forEach(prop => {\n const member = props[prop][0];\n if (member.ngMetadataName === 'Input') {\n inputs.push(prop);\n }\n });\n return inputs.sort();\n }\n\n public hasInputs(): Array<string> {\n return [];\n }\n\n ngOnInit() {\n\n this.okButtonText = 'Tables.Apply';\n this.cancelButtonText = 'Tables.Cancel';\n // get route data\n this.subscription = this.activatedRoute.data.subscribe(data => {\n // set modal title if any\n if (data.title) {\n this.modalTitle = data.title;\n }\n\n if (data.config) {\n this.tableConfig = data.config;\n }\n if (this.tableConfig) {\n this.defaultFilters.push.apply(this.defaultFilters, this.tableConfig.searches);\n }\n // important: use hasInputs due to AOT compilation. Metadata properties cannot be used (e.g. @Input())\n // because there are empty during runtime\n // so we need to define manually input properties that are going to be bind through this process\n // bind all inputs\n const inputs = this.hasInputs();\n inputs.forEach(input => {\n if (Object.prototype.hasOwnProperty.call(data, input)) {\n this[input] = data[input];\n }\n });\n if (this.advancedTable) {\n this.configChangesSubscription = this.advancedTable.configChanges.subscribe((config) => {\n if (this.tableConfig) {\n // reset default filter\n this.defaultFilter = AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER;\n // init filter\n this.defaultFilters = [AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER];\n // add extra filters\n this.defaultFilters.push.apply(this.defaultFilters, this.tableConfig.searches);\n }\n });\n }\n });\n }\n\n cancel(): Promise<any> {\n return this.close();\n }\n\n ok(): Promise<any> {\n return this.close();\n }\n\n ngOnDestroy(): void {\n if (this.subscription) {\n this.subscription.unsubscribe();\n }\n }\n\n onDataLoad(data: AdvancedTableDataResult) {\n this.recordsTotal = data.recordsTotal;\n this.recordsFiltered = data.recordsFiltered;\n // get first page info (because page is not going to be fired for first page)\n if (data.recordsTotal > 0 && this.pageInfo.recordsTotal === 0) {\n this.pageInfo.recordsTotal = data.recordsTotal;\n }\n const self = this;\n }\n\n previousPage() {\n if (this.advancedTable) {\n // go to next page\n // noinspection TypeScriptValidateJSTypes\n this.advancedTable.dataTable.page('previous').draw('page');\n }\n }\n\n nextPage() {\n if (this.advancedTable) {\n // go to next page\n // noinspection TypeScriptValidateJSTypes\n this.advancedTable.dataTable.page('next').draw('page');\n }\n }\n\n onTableInit() {\n const self = this;\n const dataTable = self.advancedTable && self.advancedTable.dataTable;\n // get initial page info\n const initialPageInfo = <PageInfo>dataTable.page.info();\n initialPageInfo.start += 1;\n self.pageInfo = initialPageInfo;\n // change emptyTableMessage\n dataTable.context[0].oLanguage.sEmptyTable = this.emptyTable && this.emptyTable.nativeElement.innerHTML;\n // bind page change event\n dataTable.on('page.dt', function () {\n const pageInfo = <PageInfo>dataTable.page.info();\n pageInfo.start += 1;\n self.pageInfo = pageInfo;\n });\n // bind draw change event\n dataTable.on('draw.dt', function () {\n // for future use\n self.loading = false;\n const pageInfo = <PageInfo>dataTable.page.info();\n pageInfo.start += 1;\n self.pageInfo = pageInfo;\n });\n }\n\n firstPage() {\n if (this.advancedTable) {\n // go to first page\n // noinspection TypeScriptValidateJSTypes\n this.advancedTable.dataTable.page('first').draw('page');\n }\n }\n\n lastPage() {\n if (this.advancedTable) {\n // go to last page\n // noinspection TypeScriptValidateJSTypes\n this.advancedTable.dataTable.page('last').draw('page');\n }\n }\n\n setLength(value: number) {\n if (this.advancedTable) {\n this.pageLength = value;\n this.advancedTable.dataTable.page.len(value).draw();\n }\n }\n\n onKeyUp(event: KeyboardEvent) {\n if (event.key === 'Enter' || event.key === 'Return') {\n if (this.advancedTable) {\n // loading\n this.loading = true;\n this.advancedTable.search((<HTMLInputElement>event.target).value);\n }\n }\n }\n\n onSearch() {\n if (this.advancedTable) {\n // loading\n this.loading = true;\n this.advancedTable.search(this.searchText);\n }\n }\n\n /**\n *\n * Reads the modal table and returns a list of filters to use in the table\n * query.\n *\n * @param tableConfig {object} The table configuration from json file\n * @param defaultFilterValues {object} A list of default filters\n * @param searchItem The searchItem to use\n *\n */\n getFilters(\n tableConfig: any,\n defaultFilterValues = {},\n searchItem: any\n ): Array<string> {\n // Do nothing in absence of configuration.\n if (!tableConfig || !Array.isArray(tableConfig.criteria)) {\n return [];\n }\n\n if (searchItem.filter == null) {\n return [];\n }\n\n const matchedCriterion = tableConfig.criteria.find(criterion =>\n Object.prototype.hasOwnProperty.call(searchItem.filter, criterion.name)\n );\n\n if (matchedCriterion == null) {\n return [];\n }\n\n const value = searchItem.filter[matchedCriterion.name];\n\n const criterionSafeName = matchedCriterion.name !== null\n ? matchedCriterion.name.toString()\n : '';\n\n let applicableFilter: string;\n\n // Raw dates should be transformed to a specific format\n if (criterionSafeName.includes('GMT')) {\n const newDate = this.datePipe.transform(criterionSafeName, 'MM/dd/yyyy');\n applicableFilter = this._template.transform(matchedCriterion.filter, {\n value: newDate\n });\n\n } else if (criterionSafeName !== 'undefined') {\n applicableFilter = (this._template.transform(matchedCriterion.filter, Object.assign({\n value: value\n }, defaultFilterValues)));\n } else {\n applicableFilter = '';\n }\n\n return [applicableFilter];\n }\n\n onFilterSelect(value: { filter: any; name: string } | any) {\n this.advancedSearch(value);\n }\n\n /**\n *\n * Runs a filter against the modal table\n *\n * @param filter The filter to use in the search\n *\n */\n async advancedSearch(filter): Promise<any> {\n // Do nothing in absence of configuration.\n if (!this.tableConfig || !Array.isArray(this.tableConfig.criteria) || !this.advancedTable) {\n console.warn('No table configuration available', this.tableConfig);\n return;\n }\n\n // An advanced table has some filters by default\n let defaultFilterValues;\n try {\n defaultFilterValues = await this.advancedFilterValueProvider.getValues();\n } catch (err) {\n defaultFilterValues = {};\n }\n\n const expressions: any[] = [];\n let predefinedCriteria;\n if (filter) {\n this.defaultFilter = filter;\n predefinedCriteria = this.getFilters(\n this.tableConfig,\n defaultFilterValues,\n filter\n );\n } else {\n // Empty a falsy filter resets the results\n this.defaultFilter = AdvancedTableModalBaseComponent.DEFAULT_ALL_FILTER;\n }\n\n // search filter is applied separately, there is no need to add here.\n expressions.push(predefinedCriteria);\n\n const query = this._context.model(this.advancedTable.config.model).asQueryable();\n query.setParam('filter', expressions.join(' and ')).prepare();\n this.advancedTable.query = query;\n this.advancedTable.fetch();\n }\n}\n\n","import { AdvancedTableModalBaseComponent } from '../advanced-table-modal/advanced-table-modal-base.component';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AdvancedFilterValueProvider } from '../advanced-table/advanced-filter-value-provider.service';\nimport { AngularDataContext } from '@themost/angular';\nimport { AfterViewInit, Component, ElementRef, EventEmitter, ViewChild, ViewEncapsulation } from '@angular/core';\nimport { BsModalRef } from 'ngx-bootstrap/modal';\nimport { DatePipe } from '@angular/common';\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-advanced-select',\n templateUrl: './advanced-select.component.html',\n styles: [\n `\n .modal-table .dataTables_wrapper {\n height: 50vh;\n overflow-y: auto;\n }\n `,\n ],\n encapsulation: ViewEncapsulation.None,\n})\nexport class AdvancedSelectComponent extends AdvancedTableModalBaseComponent implements AfterViewInit {\n\n public dismiss: EventEmitter<any> = new EventEmitter();\n @ViewChild('searchElement') searchElement: any;\n\n constructor(router: Router,\n activatedRoute: ActivatedRoute,\n context: AngularDataContext,\n advancedFilterValueProvider: AdvancedFilterValueProvider,\n datePipe: DatePipe,\n private _modalRef: BsModalRef,\n private el: ElementRef) {\n super(router, activatedRoute, context, advancedFilterValueProvider, datePipe);\n }\n\n ngAfterViewInit(): void {\n super.ngAfterViewInit();\n setTimeout(() => {\n if (this.searchElement && this.searchElement.nativeElement) {\n this.searchElement.nativeElement.focus();\n }\n }, 0);\n }\n\n public async ok() {\n this._modalRef.hide();\n this.dismiss.emit('ok');\n }\n\n public async cancel() {\n this._modalRef.hide();\n this.dismiss.emit('cancel');\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { ModalService } from '@universis/common';\nimport { AdvancedSelectComponent } from './advanced-select.component';\n@Injectable()\nexport class AdvancedSelectService {\n\n constructor(private _modal: ModalService) {\n //\n }\n\n select(initialState: any): Promise<{result: string, items: Array<any>}> {\n return new Promise((resolve, reject) => {\n try {\n const modalRef = this._modal.openModalComponent(AdvancedSelectComponent, {\n class: 'modal-xl modal-table',\n ignoreBackdropClick: true,\n animated: true,\n initialState: initialState\n });\n const componentRef: AdvancedSelectComponent = modalRef.content;\n componentRef.dismiss.subscribe((result) => {\n return resolve({\n result: result,\n items: (componentRef.advancedTable && componentRef.advancedTable.selected) as any[]\n });\n });\n } catch (err) {\n return reject(err);\n }\n });\n }\n}\n","import {Injectable} from '@angular/core';\nimport {ActivatedRouteSnapshot, Resolve, RouterStateSnapshot} from '@angular/router';\nimport {HttpClient} from '@angular/common/http';\n\n@Injectable()\nexport class AdvancedTableConfigurationResolver implements Resolve<string> {\n constructor(private _http: HttpClient) {}\n resolve(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Promise<any>|any {\n // get list\n const list = route.data.list || route.params.list;\n // get model\n const model = route.data.model || route.params.model;\n // get configuration\n return this._http.get(`assets/lists/${model}/${list}.json`).toPromise();\n }\n}\n\n@Injectable()\nexport class AdvancedSearchConfigurationResolver implements Resolve<string> {\n constructor(private _http: HttpClient) {}\n resolve(\n route: ActivatedRouteSnapshot,\n state: RouterStateSnapshot\n ): Promise<any>|any {\n // get list\n const list = route.data.list || route.params.list;\n // get model\n const model = route.data.model || route.params.model;\n // get configuration\n return this._http.get(`assets/lists/${model}/search.${list}.json`).toPromise();\n }\n}\n","import {\r\n AfterViewInit,\r\n Component,\r\n ElementRef,\r\n Input,\r\n OnInit,\r\n TemplateRef,\r\n ViewChild,\r\n ViewEncapsulation\r\n} from '@angular/core';\r\nimport { AdvancedTableComponent } from './advanced-table.component';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { AngularDataContext } from '@themost/angular';\r\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\r\nimport { ActivatedTableService } from '../../tables.activated-table.service';\r\nimport { UserStorageService } from '@universis/common';\r\nimport { FormArray, FormBuilder, FormControl, FormGroup, ValidatorFn } from '@angular/forms';\r\n\r\n@Component({\r\n // tslint:disable-next-line:component-selector\r\n selector: 'app-advanced-table-settings',\r\n templateUrl: './advanced-table-settings.component.html',\r\n encapsulation: ViewEncapsulation.None\r\n})\r\n\r\nexport class AdvancedTableSettingsComponent implements OnInit, AfterViewInit {\r\n\r\n @Input() table?: AdvancedTableComponent;\r\n @ViewChild('modal_settings_template') modal_settings_template?: ElementRef;\r\n modalRef?: BsModalRef;\r\n storageKey: any;\r\n params: any = this._activatedRoute.params;\r\n private savedTableSettings: any;\r\n form?: FormGroup;\r\n columns: any[] = [];\r\n tableColumns: any;\r\n activeTableConfig: any;\r\n\r\n constructor(protected _context: AngularDataContext,\r\n protected _activatedRoute: ActivatedRoute,\r\n private modalService: BsModalService,\r\n private userStorage: UserStorageService,\r\n private formBuilder: FormBuilder,\r\n private _activatedTable: ActivatedTableService) {\r\n }\r\n ngOnInit(): void {\r\n }\r\n ngAfterViewInit(): void {\r\n this.activeTableConfig = this._activatedTable.activeTable && this._activatedTable.activeTable.getConfig();\r\n this.storageKey = 'registrar/settings/' + this.activeTableConfig.title + '/table/columns';\r\n this.form = this.formBuilder.group({columns: new FormArray([], this.minSelectedColumns(1))});\r\n this.userStorage.getItem(this.storageKey).then((data) => {\r\n if (data) {\r\n this.savedTableSettings = data.value;\r\n if (this.savedTableSettings) {\r\n if (this._activatedTable.activeTable) {\r\n this._activatedTable.activeTable.handleColumns(this.savedTableSettings);\r\n }\r\n }\r\n this.addCheckboxes();\r\n }\r\n });\r\n }\r\n private addCheckboxes() {\r\n this.tableColumns = this.activeTableConfig.columns.slice(1);\r\n this.tableColumns.forEach ((column, i) => {\r\n if (!column.hidden) {\r\n const control = {\r\n id: column.name,\r\n name: column.title\r\n };\r\n this.columns.push(control);\r\n }\r\n });\r\n if (this.savedTableSettings) {\r\n this.columns.forEach ((column, i) => {\r\n column.check = false;\r\n column.check = this.savedTableSettings.includes(column.id);\r\n });\r\n this.columns.map((column, i) => {\r\n const control = new FormControl(column.check);\r\n if (this.form) {\r\n (this.form.controls.columns as FormArray).push(control);\r\n }\r\n });\r\n }\r\n }\r\n\r\n openTableSettings(table_settings_modal: TemplateRef<any>) {\r\n this.modalRef = this.modalService.show(table_settings_modal);\r\n }\r\n\r\n saveTableSettings() {\r\n if (this.form == null) {\r\n return;\r\n }\r\n const selectedColumnsIds = this.form.value.columns\r\n .map((v, i) => v ? this.columns[i].id : null)\r\n .filter(v => v !== null);\r\n this.userStorage.setItem(this.storageKey, selectedColumnsIds);\r\n if (this._activatedTable.activeTable) {\r\n this._activatedTable.activeTable.handleColumns(selectedColumnsIds);\r\n }\r\n if (this.modalRef) {\r\n this.modalRef.hide();\r\n }\r\n }\r\n\r\n dismiss() {\r\n if (this.modalRef) {\r\n this.modalRef.hide();\r\n }\r\n }\r\n\r\n minSelectedColumns(min = 1) {\r\n const validator: ValidatorFn = (formArray: FormArray) => {\r\n const totalSelected = formArray.controls\r\n .map(control => control.value)\r\n .reduce((prev, next) => next ? prev + next : prev, 0);\r\n\r\n return totalSelected >= min ? null : { required: true };\r\n };\r\n\r\n return validator;\r\n }\r\n}\r\n","import {Component, Input, OnInit, Output, ViewChild,\n ViewEncapsulation, EventEmitter, AfterViewInit, TemplateRef, OnDestroy} from '@angular/core';\nimport { AdvancedTableComponent } from './advanced-table.component';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { AngularDataContext } from '@themost/angular';\nimport { DatePipe } from '@angular/common';\nimport { UserStorageService, ModalService, DIALOG_BUTTONS } from '@universis/common';\nimport { BsModalService, BsModalRef } from 'ngx-bootstrap/modal';\nimport { TranslateService } from '@ngx-translate/core';\nimport {AdvancedFilterValueProvider} from './advanced-filter-value-provider.service';\nimport { AdvancedTableSearchBaseComponent } from './advanced-table-search-base';\nimport {TemplatePipe} from '@universis/common';\nimport { Subscription } from 'rxjs';\nimport { TextUtils } from '@themost/client';\n\nexport interface AdvancedSearchViewStatus {\n advancedView: boolean;\n}\n\nexport interface AdvancedSearchList {\n name: string;\n}\n\n@Component({\n // tslint:disable-next-line: component-selector\n selector: 'app-advanced-table-search',\n templateUrl: './advanced-table-search.component.html',\n encapsulation: ViewEncapsulation.None,\n})\n\nexport class AdvancedTableSearchComponent extends AdvancedTableSearchBaseComponent implements OnInit, AfterViewInit, OnDestroy {\n\n private queryParamSubscription?: Subscription;\n private configChangesSubscription?: Subscription;\n @Input() public table?: AdvancedTableComponent;\n @Input() public collapsed = true;\n @Input() public allowSave = true;\n @Input() public showMore = true;\n @Input() public mergeQueryParams = false;\n @ViewChild('searchText') public searchText: any;\n @Output('viewChange') public viewChange: EventEmitter<AdvancedSearchViewStatus> = new EventEmitter<AdvancedSearchViewStatus>();\n @Output('listChange') public listChange: EventEmitter<AdvancedSearchList> = new EventEmitter<AdvancedSearchList>();\n public set text(value: string) {\n if (this.searchText) {\n this.searchText.nativeElement.value = value;\n }\n }\n\n public get text(): string {\n return (this.searchText && this.searchText.nativeElement && this.searchText.nativeElement.value) as string;\n }\n\n public modalRef?: BsModalRef;\n public storageKey: any;\n public storageValue: any;\n public userSearchList: any = [];\n public selectedList: any = null;\n\n constructor( protected _context: AngularDataContext,\n protected _activatedRoute: ActivatedRoute,\n protected datePipe: DatePipe,\n private _modalService: BsModalService,\n private _userStorage: UserStorageService,\n private _translate: TranslateService,\n private _advancedSearchValueProvider: AdvancedFilterValueProvider,\n private _template: TemplatePipe,\n private _router: Router,\n private _modal: ModalService) { super(); }\n\n public ngOnInit(): void {\n if (this.table == null) {\n return;\n }\n this.configChangesSubscription = this.table.configChanges.subscribe((config) => {\n if (config == null) {\n return;\n }\n // load user searches\n this.loadUserSearchList().then(() => {\n // if search component merges query params\n // (uses queryParams to apply filter)\n if (this.mergeQueryParams) {\n this.queryParamSubscription = this._activatedRoute.queryParams.subscribe((queryParams) => {\n this.applyQueryParams(queryParams);\n });\n }\n });\n });\n }\n\n /**\n * Applies query given by the queryParams of the activated route\n * @param queryParams\n */\n private applyQueryParams(queryParams: any) {\n if (this.table == null) {\n return;\n }\n const table = this.table;\n this.filter = {};\n if (Object.prototype.hasOwnProperty.call(queryParams, 'q')) {\n // set collapsed\n this.collapsed = true;\n // search text\n this.text = queryParams.q;\n return table.search(this.text);\n } else {\n this.text = '';\n }\n\n let filterParams = Object.assign({}, queryParams);\n\n if (Object.prototype.hasOwnProperty.call(queryParams, 's')) {\n // set collapsed\n this.collapsed = false;\n // find user search by name\n if (this.userSearchList) {\n this.selectedList = this.userSearchList.find((item) => {\n return item.name === queryParams.s;\n });\n if (this.selectedList) {\n filterParams = this.selectedList.filter;\n }\n }\n } else {\n this.selectedList = null;\n }\n\n Object.keys(filterParams).filter((key) => {\n // search criteria\n if (table.config && table.config.criteria) {\n return table.config.criteria.find((item) => {\n return item.name === key;\n });\n }\n }).forEach((key) => {\n let value = filterParams[key];\n if (TextUtils.isNumber(value)) {\n value = parseFloat(filterParams[key]);\n }\n if (this.filter[key] !== value) {\n // set value\n Object.defineProperty(this.filter, key, {\n configurable: true,\n enumerable: true,\n writable: true,\n value,\n });\n }\n if (this.filter[key] != null) {\n this.collapsed = false;\n }\n });\n\n // call filterChange event to apply change to advanced search children\n this.filterChange.emit(this.filter);\n // apply query\n this.getQuery().then((query) => {\n // if table query is null\n if (table.query == null) {\n // set query\n table.query = query;\n } else {\n if (query != null && query.getParams()['$filter']) {\n const params = query.getParams();\n // otherwise set filter params\n table.query.setParam('$filter', params.$filter);\n } else {\n table.query.setParam('$filter', null);\n }\n }\n // and finally fetch data\n table.fetch(true);\n });\n }\n\n public ngOnDestroy(): void {\n if (this.queryParamSubscription) {\n this.queryParamSubscription.unsubscribe();\n }\n if (this.configChangesSubscription) {\n this.configChangesSubscription.unsubscribe();\n }\n }\n\n public ngAfterViewInit(): void {\n\n }\n\n public onSearchKeyDown(event: any) {\n if (this.table && event.keyCode === 13) {\n // get search text\n const searchText = ( event.target as HTMLInputElement).value;\n // merge query params ?\n if (this.mergeQueryParams) {\n const queryParams = {\n q: searchText,\n };\n if (this.table.config && this.table.config.criteria) {\n this.table.config.criteria.forEach((item) => {\n Object.defineProperty(queryParams, item.name, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: null,\n });\n });\n }\n // try to apply filter by appending query params\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n this.filterChange.emit({\n q: searchText\n });\n // otherwise do search\n this.table.search(searchText);\n return false;\n }\n }\n\n public transformDate(date) {\n date = this.datePipe.transform(date, 'MM/dd/yyyy'); // whatever format you need.\n return date;\n }\n\n public convertToString(nameFilter) {\n let name = '';\n if (nameFilter != null) {\n name = nameFilter.toString();\n }\n return name;\n }\n\n// Load saved criteria searches user has stored before\n private loadUserSearchList(): Promise<void> {\n if (this.table == null) {\n return Promise.resolve();\n }\n this.storageKey = 'tables/' + this.table.config.model + '/searches';\n return this._userStorage.getItem(this.storageKey).then((data) => {\n const list = data.value || [];\n // if table configuration has pre-defined searches\n if (this.table && this.table.config.searches && this.table.config.searches.length) {\n // add pre-defined lists\n list.push.apply(list, this.table.config.searches.map ( (x) => {\n x.readOnly = true; // as readonly\n x.name = this._translate.instant(x.name);\n return x;\n }));\n }\n // set user search list\n this.userSearchList = list;\n return Promise.resolve();\n }).catch((err) => {\n // DO NOT THROW ERROR\n // todo: notify component for this error in order to disable some actions\n console.error('An error occurred while getting user search list');\n console.error(err);\n return Promise.resolve();\n });\n }\n\n public onSelectUserSearch(event: any): any {\n if (this.selectedList && this.table) {\n const listFound = this.searchInListByName(this.selectedList.name);\n if (listFound) {\n if (this.mergeQueryParams) {\n const queryParams = { q: null, s: this.selectedList.name };\n // clear criteria if any\n this.table.config.criteria.forEach((item) => {\n if (Object.prototype.hasOwnProperty.call(queryParams, item.name) === false) {\n // set null value\n Object.defineProperty(queryParams, item.name, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: null,\n });\n }\n });\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n this.selectedList = listFound;\n this.filter = this.selectedList.filter;\n this.filterChange.emit(this.filter);\n return true;\n }\n } else {\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams: { s: null },\n queryParamsHandling: 'merge',\n });\n }\n return false;\n }\n\n public searchInListByName(name: string): any {\n if ( Array.isArray(this.userSearchList) ) {\n const listFound = this.userSearchList.find( (x) => x.name === name);\n if ( listFound ) {\n return listFound;\n } else {\n return false;\n }\n }\n }\n\n// Update list item contents with given content (Search by object name property)\n public updateSavedSearchListItemByName( name: string, newItem: any ) {\n const itemInList = this.userSearchList.find( (x) => x.name === name );\n const index = this.userSearchList.indexOf(itemInList);\n this.userSearchList[index] = newItem;\n this.selectedList = this.userSearchList[index];\n }\n\n// Update list item contents with given content (Search by object)\n public updateSavedSearchListItemByObject( itemInList: any, newItem: any ) {\n const index = this.userSearchList.indexOf(itemInList);\n this.userSearchList[index] = newItem;\n this.selectedList = this.userSearchList[index];\n }\n\n// Delete list item from list\n public deleteItemFromSavedSearchListByObject( itemInList: any) {\n this.userSearchList = this.userSearchList.filter((item) => item !== itemInList);\n this.selectedList = null;\n this.filter = {};\n this.advancedSearch(true);\n this.uploadListOnUserStorage();\n }\n\n// User chose to save its advanced form search criteria\n public saveSearch( templateToLoad: TemplateRef<any>, newList: boolean = true) {\n if (this.table && this.table.config.model) {\n// Set the corresponding key to its list and show a confirmation modal window\n this.storageKey = `tables/${this.table.config.model}/searches`;\n if (this.filter && Object.keys(this.filter).length) {\n// User wants to save an existing list from the dropdown\n if ( !newList && this.selectedList ) {\n const newItem = { name : this.selectedList.name, filter : { ... this.filter } };\n this.updateSavedSearchListItemByObject ( this.selectedList, newItem );\n this.uploadListOnUserStorage();\n// User wants to save a new list\n } else {\n this.modalRef = this._modalService.show(templateToLoad);\n }\n } else {\n// User did not define any criteria\n this._modal.showWarningDialog(\n this._translate.instant('AdvancedSearch.Modal.Title'),\n this._translate.instant('AdvancedSearch.Modal.EmptyCriteriaList'),\n DIALOG_BUTTONS.Ok);\n }\n } else {\n this._modal.showWarningDialog(\n this._translate.instant('AdvancedSearch.Modal.Title'),\n this._translate.instant('AdvancedSearch.Modal.NoListDefined'),\n DIALOG_BUTTONS.Ok);\n }\n }\n\n// User Accepted => Save list and Close modal\n public confirmModal( saveFormName ): void {\n// name given and list name is unique\n if ( saveFormName && !(this.searchInListByName(saveFormName)) ) {\n const newInsertedValue = { name : saveFormName, filter : { ... this.filter } };\n if ( this.userSearchList && this.userSearchList.length !== 0 ) {\n this.userSearchList.push(newInsertedValue);\n this.storageValue = this.userSearchList;\n this.selectedList = newInsertedValue;\n } else {\n this.storageValue = [newInsertedValue];\n this.userSearchList = this.storageValue;\n this.selectedList = newInsertedValue;\n }\n this.uploadListOnUserStorage();\n if (this.modalRef) {\n this.modalRef.hide();\n }\n } else if ( saveFormName && (this.searchInListByName(saveFormName)) ) {\n// User should insert a different name cause this one is already in use\n alert(this._translate.instant('AdvancedSearch.Modal.TitleOnListAlreadyCreated'));\n } else {\n// User did not insert any text\n alert(this._translate.instant('AdvancedSearch.Modal.TitleOnUserError'));\n }\n }\n\n// User declined => Close modal\n public closeModal(): void {\n if (this.modalRef) {\n this.modalRef.hide();\n }\n }\n\n// Upload user's criteria on User Storage\n public uploadListOnUserStorage() {\n this._userStorage.setItem(this.storageKey, this.userSearchList.filter((x) => {\n return !x.readOnly;\n }));\n }\n\n /**\n * @deprecated This method is going to be deprecated. Use search() method instead.\n * @param event\n */\n public async asyncAdvancedSearch(event?: any) {\n if ( this.table && this.table.config && Array.isArray(this.table.config.criteria)) {\n const query = await this.getQuery();\n if (this.mergeQueryParams) {\n this.selectedList = null;\n const queryParams = Object.assign({ q: null, s: null }, this.filter);\n // enumerate criteria\n this.table.config.criteria.forEach((item) => {\n if (Object.prototype.hasOwnProperty.call(queryParams, item.name) === false) {\n // set null value\n Object.defineProperty(queryParams, item.name, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: null,\n });\n }\n });\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams,\n queryParamsHandling: 'merge',\n });\n }\n\n if (this.table.query && query && query.getParams()['$filter']) {\n this.table.query.setParam('$filter', query.getParams()['$filter']);\n } else {\n this.table.query = query;\n }\n this.filterChange.emit(this.filter);\n this.table.fetch();\n }\n }\n\n public search(): Promise<void> {\n return this.asyncAdvancedSearch().then(() => {\n // do nothing\n });\n }\n\n public async getQuery() {\n // on simple search return null\n if (this.collapsed) {\n return null;\n }\n if ( this.table && this.table.config && Array.isArray(this.table.config.criteria)) {\n const expressions: any[] = [];\n const values = await this._advancedSearchValueProvider.getValues();\n this.table.config.criteria.forEach((x) => {\n if (Object.prototype.hasOwnProperty.call(this.filter, x.name)) {\n const nameFilter = this.convertToString(this.filter[x.name]);\n if (nameFilter.includes('GMT')) {\n const newDate = this.transformDate(this.filter[x.name]);\n expressions.push(this._template.transform(x.filter, {\n value: newDate,\n }));\n } else if (this.filter[x.name] !== 'undefined') {\n expressions.push(this._template.transform(x.filter, Object.assign({\n value: this.filter[x.name],\n }, values)));\n }\n }\n });\n let query;\n if (expressions && expressions.length) {\n // create client query\n query = this._context.model(this.table.config.model).asQueryable();\n query.setParam('filter', expressions.join(' and '));\n } else {\n query = this._context.model(this.table.config.model).asQueryable();\n }\n return query;\n }\n }\n\n public advancedSearch(event: any) {\n return this.asyncAdvancedSearch(event);\n }\n\n public clear() {\n if (this.mergeQueryParams && this.table) {\n this.selectedList = null;\n const queryParams = { q: null, s: null };\n // enumerate criteria\n this.table.config.criteria.forEach((item) => {\n if (Object.prototype.hasOwnProperty.call(queryParams, item.name) === false) {\n // set null value\n Object.defineProperty(queryParams, item.name, {\n configurable: true,\n enumerable: true,\n writable: true,\n value: null,\n });\n }\n });\n return this._router.navigate([], {\n relativeTo: this._activatedRoute,\n queryParams,\n queryParamsHandling: 'merge',\n });\n } else {\n // clear filter\n this.filter = {};\n // clear list\n this.selectedList = null;\n // raise filter change event\n this.filterChange.emit(this.filter);\n }\n }\n\n /**\n * Gets the view state of search control\n */\n public get viewState(): AdvancedSearchViewStatus {\n return {\n advancedView: !this.collapsed,\n };\n }\n\n /**\n * Switches view between simple and advanced search\n */\n public async toggleView() {\n this.collapsed = !this.collapsed;\n // emit event for view status change\n this.viewChange.emit(this.viewState);\n }\n}\n","import {\n ActionLinkFormatter, ButtonFormatter, DateTimeFormatter, LanguageFormatter,\n LinkFormatter,\n NestedPropertyFormatter, NgClassFormatter, SelectRowFormatter,\n TemplateFormatter, TranslationFormatter,\n TrueFalseFormatter, ActionButtonFormatter, ActionSplitButtonFormatter,\n} from './advanced-table.formatters';\n\nexport interface IAdvancedTableFormatters {\n ActionLinkFormatter?: ActionLinkFormatter;\n ButtonFormatter?: ButtonFormatter;\n DateTimeFormatter?: DateTimeFormatter;\n LanguageFormatter?: LanguageFormatter;\n LinkFormatter?: LinkFormatter;\n NestedPropertyFormatter?: NestedPropertyFormatter;\n NgClassFormatter?: NgClassFormatter;\n SelectRowFormatter?: SelectRowFormatter;\n TemplateFormatter?: TemplateFormatter;\n TranslationFormatter?: TranslationFormatter;\n TrueFalseFormatter?: TrueFalseFormatter;\n ActionButtonFormatter?: ActionButtonFormatter;\n ActionSplitButtonFormatter?: ActionSplitButtonFormatter;\n}\nexport const FORMATTERS: IAdvancedTableFormatters = {\n ActionLinkFormatter: new ActionLinkFormatter(),\n ButtonFormatter: new ButtonFormatter(),\n DateTimeFormatter: new DateTimeFormatter(),\n LanguageFormatter: new LanguageFormatter(),\n LinkFormatter: new LinkFormatter(),\n NestedPropertyFormatter: new NestedPropertyFormatter(),\n NgClassFormatter: new NgClassFormatter(),\n SelectRowFormatter: new SelectRowFormatter(),\n TemplateFormatter: new TemplateFormatter(),\n TranslationFormatter: new TranslationFormatter(),\n TrueFalseFormatter: new TrueFalseFormatter(),\n ActionButtonFormatter: new ActionButtonFormatter(),\n ActionSplitButtonFormatter: new ActionSplitButtonFormatter(),\n};\n","import { Component, OnInit, Input, OnDestroy, OnChanges, SimpleChanges } from '@angular/core';\nimport { AdvancedTableComponent, AdvancedTableDataResult } from '../advanced-table/advanced-table.component';\nimport { Subscription } from 'rxjs';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'table-simple-header-tools',\n template: `\n <ng-content></ng-content>\n `,\n styles: []\n})\nexport class SimpleHeaderToolsComponent {\n //\n}\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-table-simple-header',\n templateUrl: './table-simple-header.component.html',\n styles: []\n})\nexport class TableSimpleHeaderComponent implements OnInit, OnDestroy, OnChanges {\n ngOnChanges(changes: SimpleChanges): void {\n if (changes.table) {\n if (changes.table.currentValue == null) {\n if (this.dataLoadSubscription) {\n this.dataLoadSubscription.unsubscribe();\n return;\n }\n }\n // tslint:disable-next-line:triple-equals\n if (changes.table.currentValue != changes.table.previousValue) {\n this.dataLoadSubscription = changes.table.currentValue.load.subscribe((data: AdvancedTableDataResult) => {\n this.recordsTotal = data.recordsTotal;\n });\n }\n }\n }\n ngOnDestroy(): void {\n if (this.dataLoadSubscription) {\n this.dataLoadSubscription.unsubscribe();\n }\n }\n\n @Input() table?: AdvancedTableComponent;\n public recordsTotal?: number;\n public dataLoadSubscription?: Subscription;\n constructor() { }\n\n ngOnInit() {\n //\n }\n\n}\n","import {\n Directive, Output, EventEmitter,\n} from '@angular/core';\nimport { AdvancedTableComponent } from '../components/advanced-table/advanced-table.component';\n\nexport class AdvancedTableNotNullError extends Error {\n constructor() {\n super('Advanced table component cannot be empty at this context.');\n }\n}\n\n@Directive(\n {\n // tslint:disable-next-line: directive-selector\n selector: '[tableEditor]',\n },\n)\nexport class AdvancedTableEditorDirective {\n\n public dirty = false;\n @Output() public dirtyChange: EventEmitter<boolean> = new EventEmitter<boolean>(false);\n\n constructor(private table: AdvancedTableComponent) {\n //\n }\n\n /**\n * Add rows to table and mark them as added rows\n */\n public add(...addItems: any[]) {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n // decorate items\n const key = this.table.config.columns[0].property || this.table.config.columns[0].name || '';\n for (const element of addItems) {\n let tr = this.table.dataTable.rows(':has(input[data-id=\"' + element[key] + '\"])').nodes().to$();\n if (tr.hasClass('removed')) {\n tr.toggleClass('removed text-gray-400 text-decoration-line-through');\n } else {\n this.table.dataTable.rows.add([element]);\n tr = this.table.dataTable.rows(':has(input[data-id=\"' + element[key] + '\"])').nodes().to$();\n tr.toggleClass('added font-weight-bold text-success');\n }\n }\n this.table.dataTable.draw();\n // find removed\n const removedLength = this.table.dataTable.rows('.removed')[0].length;\n // find added\n const addedLength = this.table.dataTable.rows('.added')[0].length;\n // and emit event\n const items = this.table.dataTable.rows().data();\n this.table.load.emit({\n data: items,\n recordsFiltered: items.length - removedLength,\n recordsTotal: items.length - removedLength,\n });\n this.dirty = (removedLength > 0 || addedLength > 0);\n this.dirtyChange.emit(this.dirty);\n }\n\n /**\n * Marks rows as removed rows\n */\n public remove(...removeItems: any[]) {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n // get key\n const key = this.table.config.columns[0].property || this.table.config.columns[0].name || '';\n // loop items\n for (const element of removeItems) {\n const tr = this.table.dataTable.rows(':has(input[data-id=\"' + element[key] + '\"])').nodes().to$();\n // if row is marked as added\n if (tr.hasClass('added')) {\n // remove this dirty row\n this.table.dataTable.rows(tr).remove();\n } else {\n // otherwise unmarked row\n tr.toggleClass('removed text-gray-400 text-decoration-line-through');\n }\n // check if item is selected\n const selectedIndex = this.table.selected.findIndex((item) => {\n return item[key] === element[key];\n });\n // and remove it from selected collection\n if (selectedIndex >= 0) {\n this.table.selected.splice(selectedIndex, 1);\n }\n }\n // re-draw table\n this.table.dataTable.draw();\n // get number of table items\n const items = this.table.dataTable.rows().data();\n // get number of removed items\n const removedLength = this.table.dataTable.rows('.removed')[0].length;\n // get number of added items\n const addedLength = this.table.dataTable.rows('.added')[0].length;\n // refresh\n this.table.load.emit({\n data: items,\n recordsFiltered: items.length - removedLength,\n recordsTotal: items.length - removedLength,\n });\n this.dirty = (removedLength > 0 || addedLength > 0);\n this.dirtyChange.emit(this.dirty);\n }\n\n public set(items: any[]) {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n // clear rows\n this.table.selected = [];\n this.table.dataTable.clear();\n // set items\n this.table.dataTable.rows.add(items).draw();\n this.table.load.emit({\n data: items,\n recordsFiltered: items.length,\n recordsTotal: items.length,\n });\n }\n\n /**\n * Undo changes\n */\n public undo() {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n // reset removed rows\n this.table.dataTable.rows('.removed').nodes().to$().toggleClass('removed text-gray-400 text-decoration-line-through');\n // remove added rows\n this.table.dataTable.rows('.added').remove();\n // clear selected items\n this.table.selected = [];\n const items = this.table.dataTable.rows().data();\n this.table.dataTable.draw();\n this.table.load.emit({\n data: items,\n recordsFiltered: items.length,\n recordsTotal: items.length,\n });\n this.dirty = false;\n this.dirtyChange.emit(this.dirty);\n }\n\n public rows() {\n if (this.table == null) {\n throw new AdvancedTableNotNullError();\n }\n return Array.from(this.table.dataTable.rows(':not(.removed)').data());\n }\n\n}\n","import { Injectable } from '@angular/core';\nimport { AngularDataContext } from '@themost/angular';\nimport { TemplatePipe } from '@universis/common';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class AdvancedAggregatorService {\n\n constructor(\n private _context: AngularDataContext,\n private _template: TemplatePipe\n ) { }\n\n /**\n *\n * Formats and executes the data query\n *\n * @param model The target model\n * @param fixedParams Pairs of parameters to always be applied\n * @param queryStatement The default query to use for fetching the data (e.g. expands etc)\n * @param filters A list of filter expressions to append at the query\n * @param searchTemplate The template to use for searching expressions\n * @param searchValue The value of the user search\n *\n * @returns The response of the query execution\n */\n // tslint:disable-next-line:max-line-length\n async fetchData(model: string, fixedParams: object, queryStatement: string = '', filters: string[], searchTemplate?: string, searchValue?: string): Promise<any> {\n const query = this._context.model(model).asQueryable();\n\n if (!fixedParams || typeof fixedParams !== 'object') {\n fixedParams = {};\n }\n\n let filterExpressions: any[] = [];\n\n if (fixedParams) {\n for (const param of Object.keys(fixedParams)) {\n filterExpressions.push(`${param} eq ${fixedParams[param]}`);\n }\n }\n\n if (filters && Array.isArray(filters)) {\n filterExpressions = [\n ...filterExpressions,\n ...filters\n ];\n }\n\n if (searchTemplate && searchValue) {\n let evaluatedSearch;\n if (/^\"(.*?)\"$/.test(searchValue)) { // validate search text in double quotes\n evaluatedSearch = this._template.transform(searchTemplate, {\n ...fixedParams,\n text: searchValue.replace(/^\"|\"$/g, '')\n });\n } else {\n // try to split words\n const words = searchValue.split(' ');\n // join words to a single filter\n evaluatedSearch = words.map(word => {\n return this._template.transform(searchTemplate, {\n ...fixedParams,\n text: word\n });\n }).join(' and ');\n\n }\n filterExpressions.push(evaluatedSearch);\n }\n\n query.setParam('$filter', filterExpressions.join('and'));\n return query.expand(queryStatement).take(-1).getItems();\n }\n\n /**\n *\n * Formats the received data to use flat keys\n *\n * @param config The applied configuration\n * @param data The raw data\n *\n * @returns The flat-key object list\n *\n */\n formatData(config, data) {\n try {\n return data.map((entry) => {\n if (entry.subitems && Array.isArray(entry.subitems)) {\n entry.subitems = this.formatData(config, entry.subitems);\n }\n const entryObject = {} as any;\n for (let i = 0; i < config.columns.length; i++) {\n const keys = config.columns[i].name.split('/');\n let helperObject = entry[keys[0]];\n\n if (helperObject && keys.length > 1) {\n // tslint:disable-next-line:no-shadowed-variable\n for (let i = 1; i < keys.length; i++) {\n if (helperObject === undefined || helperObject === null) {\n break;\n } else {\n helperObject = helperObject[keys[i]] !== undefined && helperObject[keys[i]] !== null\n ? helperObject[keys[i]]\n : undefined;\n }\n }\n }\n\n entryObject[config.columns[i].name] = helperObject;\n }\n\n if (entry.subitems) {\n entryObject.subitems = entry.subitems;\n }\n\n return entryObject;\n });\n } catch (err) {\n console.error(err);\n }\n }\n}\n","import { Component, Input, OnInit, Output, EventEmitter, OnDestroy, ChangeDetectionStrategy, ChangeDetectorRef } from '@angular/core';\nimport { AdvancedAggregatorService } from '../../services/advanced-aggregator/advanced-aggregator.service';\nimport { AdvancedAggregatorConfig, AdvancedAggregatorFilters } from '../../advanced-aggregator';\nimport { LoadingService } from '@universis/common';\n\n/**\n *\n * \n * @classdesc An advanced list with the capability of aggregate data based on configurable filters\n *\n */\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-aggregator',\n templateUrl: './advanced-aggregator.component.html',\n changeDetection: ChangeDetectionStrategy.OnPush,\n})\nexport class AdvancedAggregatorComponent implements OnInit, OnDestroy {\n\n private _config?: AdvancedAggregatorConfig;\n private _aggregators;\n private _postProcessors;\n\n public body;\n public groups: any[] = [];\n\n @Input('config')\n public set config(value: AdvancedAggregatorConfig) {\n this._config = value;\n }\n\n @Input('aggregators')\n public set aggregators(value) {\n this._aggregators = value;\n }\n\n @Input('postProcessors')\n public set postProcessors(value) {\n this._postProcessors = value;\n }\n\n @Input('params') params;\n // tslint:disable-next-line:no-input-rename\n @Input('selectedGroups') selectedGroups$;\n // tslint:disable-next-line:no-input-rename\n @Input('filters') filters$;\n @Input('searchExpression') searchExpression?: string;\n\n @Output() eventHandler = new EventEmitter();\n\n constructor(\n private _changeDetector: ChangeDetectorRef,\n private _advancedAggregatorService: AdvancedAggregatorService,\n private _loadingService: LoadingService\n ) { }\n\n public get config() {\n return this._config as AdvancedAggregatorConfig;\n }\n\n public get aggregators() {\n return this._aggregators;\n }\n\n public get postProcessors() {\n return this._postProcessors;\n }\n\n async ngOnInit() {\n this.selectedGroups$.subscribe((data) => {\n this.groups = data;\n this._changeDetector.markForCheck();\n });\n\n this.filters$.subscribe(async (filters: AdvancedAggregatorFilters) => {\n try {\n await this.fetch(filters);\n } catch (err) {\n console.error(err);\n }\n });\n }\n\n async ngOnDestroy() {\n this.selectedGroups$.unsubscribe();\n this.filters$.unsubscribe();\n }\n\n /**\n *\n * Retrieves the data\n *\n */\n async fetch(filters: AdvancedAggregatorFilters) {\n try {\n this._loadingService.showLoading();\n let data = await this._advancedAggregatorService.fetchData(this.config.model,\n this.params,\n this.config.query,\n filters.filters,\n this.searchExpression,\n filters.text\n );\n\n // tslint:disable-next-line:max-line-length\n if (this.postProcessors && Object.keys(this.postProcessors).length > 0 && this.config.postProcessors && this.config.postProcessors.length > 0) {\n for (let i = 0; i < this.config.postProcessors.length; i++) {\n data = await this.postProcessors[this.config.postProcessors[i].name](data);\n }\n }\n\n this.body = this._advancedAggregatorService.formatData(this.config, data);\n this._changeDetector.markForCheck();\n } catch (err) {\n console.error(err);\n } finally {\n this._loadingService.hideLoading();\n }\n }\n\n /**\n *\n * Triggers the event handler event\n *\n * @param event The event data\n *\n */\n onActionEvent(event) {\n this.eventHandler.emit(event);\n }\n}\n","import { Component, Input, OnInit, Output, EventEmitter } from '@angular/core';\nimport { TemplatePipe} from '@universis/common';\n\nenum Lengths {\n XL= 'xl',\n LG= 'lg',\n MD= 'md',\n SM= 'sm',\n XS= 'xs'\n}\n\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-advanced-aggregator-list',\n templateUrl: './advanced-aggregator-list.component.html'\n})\nexport class AdvancedAggregatorListComponent implements OnInit {\n\n /**\n * @property {AdvancedAggregatorConfig} config The configuration object to use\n */\n @Input() config: any;\n\n /**\n * @property {Array<Array<any>>} body The list of data entries to show as the list body\n */\n @Input() body;\n\n @Output() clickEvent = new EventEmitter();\n\n constructor(private _template: TemplatePipe) { }\n\n ngOnInit() {\n this.config.columns.forEach(x => {\n x.length = Object.values(Lengths).includes(x.length) ? this._template.transform(`sis--list-group-item_${x.length}_column`, x ) :\n !x.length ? 'sis--list-group-item_sm_column' : x.length ;\n });\n }\n\n /**\n *\n * Triggers the output event emitter\n *\n * @param type The type of the event as it's declared in the configuration\n * @param item The value of the current item\n * }\n */\n callCallback(type: string, data: any): void {\n this.clickEvent.emit({\n type,\n data\n });\n }\n}\n","import {Component, Input, OnDestroy, OnInit, ViewChild} from '@angular/core';\nimport {RouterModalOkCancel} from '@universis/common/routing';\nimport {ActivatedRoute, Router} from '@angular/router';\nimport {Observable, Subscription} from 'rxjs';\nimport {AdvancedTableModalBaseComponent} from '../advanced-table-modal/advanced-table-modal-base.component';\nimport {AdvancedFormComponent} from '@universis/forms';\nimport {LoadingService, ModalService} from '@universis/common';\n\n@Component({\n // tslint:disable-next-line:component-selector\n selector: 'app-add-items',\n templateUrl: './add-items.component.html'\n})\nexport class AddItemsComponent extends RouterModalOkCancel implements OnInit, OnDestroy {\n\n public loading = false;\n public lastError;\n @Input() execute?: Observable<any>;\n @Input() items: Array<any> = [];\n @Input() target: any;\n // @Input() selected: any;\n @Input() tableConfiguration: any;\n @Input() formName: any;\n @Input() messages: Array<any> = [];\n @ViewChild('formComponent') formComponent?: AdvancedFormComponent;\n @ViewChild('selectComponent') selectComponent?: AdvancedTableModalBaseComponent;\n private formLoadSubscription?: Subscription;\n private formChangeSubscription?: Subscription;\n private selectedSubscription?: Subscription;\n\n constructor(router: Router,\n activatedRoute: ActivatedRoute,\n private _modalService: ModalService,\n private _loadingService: LoadingService) {\n super(router, activatedRoute);\n // set modal size\n this.modalClass = 'modal-lg';\n this.okButtonDisabled = true;\n }\n\n ngOnInit() {\n if (this.selectComponent && this.selectComponent.advancedTable) {\n this.selectedSubscription = this.selectComponent.advancedTable.selectedItems.subscribe((items) => {\n if (this.formName == null) {\n this.okButtonDisabled = items.length === 0;\n }\n });\n }\n if (this.formName != null && this.formComponent) {\n this.formChangeSubscription = this.formComponent.form.change.subscribe((event: any) => {\n if (Object.prototype.hasOwnProperty.call(event, 'isValid')) {\n // enable or disable button based on form status\n this.okButtonDisabled = (!event.isValid);\n }\n });\n }\n\n if (this.target) {\n const target = this.target;\n }\n }\n\n cancel(): Promise<any> {\n this.clearMessages();\n if (this.loading) {\n return Promise.resolve();\n }\n // close\n if (this._modalService.modalRef) {\n return this._modalService.modalRef.hide();\n }\n return Promise.resolve();\n }\n\n ngOnDestroy(): void {\n if (this.formLoadSubscription) {\n this.formLoadSubscription.unsubscribe();\n }\n if (this.formChangeSubscription) {\n this.formChangeSubscription.unsubscribe();\n }\n if (this.selectedSubscription) {\n this.selectedSubscription.unsubscribe();\n }\n }\n\n // get form data\n private executeSubscription?: Subscription;\n public get formData(): any {\n if (this.formComponent === null) {\n return null;\n }\n return this.formComponent && this.formComponent.form.formio.data;\n }\n\n ok(): Promise<any> {\n try {\n this.clearMessages();\n return new Promise((resolve) => {\n if (this.selectComponent == null || this.selectComponent.advancedTable == null || this.execute == null) {\n return resolve(null);\n }\n this.loading = false;\n this.lastError = null;\n // set courses\n this.items = this.selectComponent.advancedTable.selected;\n // execute add\n this.executeSubscription = this.execute.subscribe((result) => {\n this.loading = false;\n if (this.executeSubscription) {\n this.executeSubscription.unsubscribe();\n }\n // close modal\n if (this._modalService.modalRef) {\n this._modalService.modalRef.hide();\n }\n return resolve(null);\n }, (err) => {\n this.loading = false;\n // ensure that loading is hidden\n this._loadingService.hideLoading();\n // set last error\n this.lastError = err;\n return resolve(null);\n });\n });\n } catch (err) {\n this.loading = false;\n this._loadingService.hideLoading();\n this.lastError = err;\n return Promise.resolve();\n }\n }\n\n onChange($event: any) {}\n\n clearMessages() {\n this.messages = [];\n }\n\n onFilterChange(event: { name: string, emit: boolean }) {}\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n/**\n *\n *\n * @classdesc Given a list of items runs a user defined function against that list\n *\n */\n\n@Pipe({\n name: 'callAggregator'\n})\nexport class AdvancedAggregatorPipe implements PipeTransform {\n\n /**\n *\n * @override\n *\n * @param items The list of items to run the aggregator against\n * @param functionPool The functions that are available from the list caller\n * @param functionName The name of the function to be called\n *\n * @returns The value to show at the UI\n *\n */\n transform(items: any[], functionPool: any, functionName: string): any {\n if (Array.isArray(items) && functionName && functionName in functionPool) {\n return functionPool[functionName](items);\n } else {\n return '-';\n }\n }\n}\n","import { Pipe, PipeTransform } from '@angular/core';\nimport { TranslateService } from '@ngx-translate/core';\n\n/**\n *\n * \n * @classdesc Given a title of an aggregator list, translates and evaluates the parameter if any\n *\n */\n\n@Pipe({\n name: 'aggregatorListTitle'\n})\nexport class ParseTitlePipe implements PipeTransform {\n\n constructor(\n private _translateService: TranslateService\n ) {}\n\n /**\n *\n * @override\n *\n * @param title The title of the list\n * @param key The current list key that is being used\n *\n */\n transform(title: string, key: string): any {\n if (!title) {\n return '';\n } else {\n if (key === undefined || key === null || key === 'undefined' || key === 'null') {\n key = this._translateService.instant('Tables.NotDefined');\n }\n return title.split(' ')\n .map((part) => this._translateService.instant(part))\n .map((part) => part.replace('${param}', key))\n .join(' ');\n }\n }\n}\n","// tslint:disable: quotemark\n// tslint:disable: max-line-length\nexport const TABLES_EL = {\n \"Tables\": {\n \"Export\": \"Εξαγωγή\",\n \"More\": \"Περισσότερα\",\n \"Search\": \"Αναζήτηση\",\n \"SearchPlaceholder\": \"Αναζήτηση...\",\n \"GroupBy\": \"Ομαδοποίηση ανά\",\n \"NotDefined\": \"Μη προσδιορισμένο\",\n \"DataTable\": {\n \"paginate\": {\n \"first\": \"Πρώτη σελίδα\",\n \"last\": \"Τελεταία σελίδα\",\n \"next\": \"Επόμενη\",\n \"previous\": \"Προηγούμενη\"\n },\n \"info\": \"Εμφάνιση _START_ έως _END_ από _TOTAL_ εγγραφές\",\n \"infoEmpty\": \"Δεν βρέθηκαν εγγραφές\",\n \"loading\": \"Εμφάνιση δεδομένων...\",\n \"processing\": \"Παραλαβή δεδομένων...\",\n \"emptyTable\": \"Δεν βρέθηκαν αποτελέσματα.\"\n },\n \"ColumnDisplay\": \"Επιλογή Εμφάνισης στηλών\",\n \"ColumnDisplayInfo\": \"Επιλέξτε τις στήλες που θέλετε να εμφανίζονται.\",\n \"Save\": \"Εφαρμογή\",\n \"Apply\": \"Εφαρμογή\",\n \"Cancel\": \"Ακύρωση\",\n \"RecordsPerPage\": \"Εγγραφές ανά σελίδα\",\n \"PageInfo\": \"{{start}}-{{end}} από {{recordsTotal}}\",\n \"SearchListPlaceholder\": \"Αναζητήστε στη λίστα...\",\n \"Filters\": \"Φίλτρα\",\n \"All\": \"Όλα\",\n \"AddItem\": \"Προσθήκη στοιχείου\",\n \"EmptyTableTitle\": \"Δεν βρέθηκαν αποτελέσματα.\",\n \"EmptyTableMessage\": \"Προσπαθήστε να χρησιμοποιήσετε άλλες λέξεις κλειδιά.\",\n \"RemoveItem\": \"Διαγραφή στοιχείου\",\n \"Items\": \"στοιχεία\",\n \"Item\": \"στοιχείο\",\n \"AddItemMessage\": {\n \"title\": \"Προσθήκη στοιχείων\",\n \"one\": \"Ένα νέο στοιχείο προστέθηκε με επιτυχία.\",\n \"many\": \"{{value}} νέα στοιχεία προστέθηκαν με επιτυχία.\"\n },\n \"RemoveItemMessage\": {\n \"title\": \"Αφαίρεση στοιχείων\",\n \"one\": \"Ένα στοιχείο αφαιρέθηκε με επιτυχία.\",\n \"many\": \"{{value}} στοιχεία αφαιρέθηκαν με επιτυχία.\"\n },\n \"RemoveItemsTitle\": \"Διαγραφή στοιχείου\",\n \"RemoveItemsMessage\": \"Πρόκειται να διαγράψετε ένα ή περισσότερα στοιχεία. Θέλετε να προχωρήσετε?\",\n \"SelectAll\": \"Επιλογή όλων\",\n \"ClearSelection\": \"Αναίρεση επιλογής\",\n \"Actions\": {\n \"Label\": \"Επεξεργασία\",\n \"Start\": \"Έναρξη\",\n \"ActionMessage\": {\n \"None\": \"Δεν έχετε επιλέξει κανένα στοιχείο που να ακολουθεί τις προϋποθέσεις της ενέργειας.\",\n \"One\": \"Έχετε επιλέξει ένα στοιχείο που ακολουθεί τις προϋποθέσεις της ενέργειας. Πατήστε το πλήκτρο Έναρξη για να ξεκινήσει η διαδικασία.\",\n \"Many\": \"Έχετε επιλέξει {{length}} στοιχεία που ακολουθούν τις προϋποθέσεις της ενέργειας. Πατήστε το πλήκτρο Έναρξη για να ξεκινήσει η διαδικασία.\"\n },\n \"CompletedWithErrors\": {\n \"Title\": \"Η διαδικασία ολοκληρώθηκε με σφάλματα.\",\n \"Description\": {\n \"One\": \"Ένα στοιχείο δεν ανανεώθηκε λόγω ενός σφάλματος που συνέβη κατά την εκτέλεση της διαδικασίας.\",\n \"Many\": \"{{errors}} στοιχεία δεν ανανεώθηκαν λόγω ενός σφάλματος που συνέβη κατά την εκτέλεση της διαδικασίας.\"\n }\n },\n \"CompletedWithSuccess\": {\n \"Title\": \"Η διαδικασία ολοκληρώθηκε με επιτυχία.\"\n }\n },\n \"SelectColumns\": \"Επιλογή στηλών\",\n \"MoveUp\": \"Επάνω\",\n \"MoveDown\": \"Κάτω\",\n \"AddColumn\": \"Επιλογή\",\n \"RemoveColumn\": \"Αφαίρεση\",\n \"SelectColumnHelp\": \"Επιλέξτε μία ή περισσότερες από τις διαθέσιμες στήλες και πατήστε το πλήκτρο 'Επιλογή' για να τις εμφανίσετε. Χρησιμοποιήστε το πλήκτρο 'Αφαίρεση' για να αφαιρέσετε τις επιλεγμένες στήλες.\",\n \"MoveColumnHelp\": \"Χρησιμοποιήστε τα πλήκτρα 'Επάνω' και 'Κάτω' για να αλλάξετε την σειρά εμφάνισης των στηλών του πίνακα.\",\n \"UnknownColumn\": \"Άγνωστο\",\n \"SelectColumn\": \"Επιλογή\",\n \"ActionLinkColumn\": \"Ενέργειες\",\n \"DataError\": {\n \"Title\": \"Σφάλμα κατά την παραλαβή των δεδομένων\",\n \"Message\": \"Συνέβη σφάλμα κατά την παραλαβή των δεδομένων. Προσπαθήστε ξανά ή τροποποιήστε τα στοιχεία αναζήτησης.\"\n },\n \"ExportList\": \"Εξαγωγή λίστας\",\n \"ExportLimitExceeded\": \"Το πλήθος των στοιχείων προς εξαγωγή ({{dataLength}}) ξεπερνάει το μέγιστο επιτρεπτό ({{exportLimit}}). Παρακαλούμε προσαρμόστε τα φίλτρα της αναζήτησης και προσπαθήστε ξανά.\",\n \"ExportResults\": \"Δεδομένα λίστας\"\n },\n \"TrueFalse\": {\n \"long\": {\n \"Yes\": \"Ναι\",\n \"No\": \"Όχι\"\n }\n },\n \"Settings\": {\n \"OperationCompleted\": \"Η διαδικασία ολοκληρώθηκε με επιτυχία.\"\n },\n \"AdvancedSearch\": {\n \"Choose\": \"<Επιλέξτε μια αναζήτηση>\",\n \"ChooseDate\": \"Επιλογή ημερομηνίας\",\n \"SavedSearches\": \"Αποθηκευμένες αναζητήσεις\",\n \"ToggleDropdown\" : \"Εμφάνιση λίστας\",\n \"SaveCurrentSearch\": \"Αποθήκευση αναζήτησης\",\n \"SaveAs\" : \"Αποθήκευση ως\",\n \"Save\" : \"Αποθήκευση\",\n \"Delete\" : \"Διαγραφή\",\n \"More\": \"Περισσότερα\",\n \"Less\": \"Λιγότερα\",\n \"Modal\" : {\n \"Title\" : \"Αποθήκευση κριτηρίων αναζήτησης\",\n \"Help\" : \"Ορίστε έναν τίτλο για τα επιλεγμένα κριτήρια αναζήτησης. Αυτός ο τίτλος θα σας βοηθήσει να τα χρησιμοποιήσετε ξανά στο μέλλον.\",\n \"TitleOnUserError\" : \"Παρακαλώ εισάγετε έναν τίτλο\",\n \"TitleOnListAlreadyCreated\" : \"Το όνομα αυτό χρησιμοποιείται ήδη. Διαλέξτε ένα διαφορετικό.\",\n \"NoListDefined\" : \"Δεν έχει οριστεί το σημείο αποθήκευσης της λίστας\",\n \"EmptyCriteriaList\" : \"Δεν έχετε καθορίσει κανένα κριτήριο για αποθήκευση\",\n \"SaveNameLabel\" : \"Ονομασία λίστας\",\n \"SaveNamePlaceholder\" : \"Εισάγετε έναν τίτλο\",\n \"Accept\" : \"Αποθήκευση\",\n \"Decline\" : \"Απόρριψη\",\n \"Close\" : \"Κλείσιμο\"\n }\n },\n \"AddItems\" : {\n \"SelectItems\": \"Επιλέξτε στοιχεία\",\n }\n};\n","// tslint:disable: quotemark\n// tslint:disable: max-line-length\nexport const TABLES_EN = {\n \"Tables\": {\n \"Export\": \"Export\",\n \"More\": \"More\",\n \"Search\": \"Search\",\n \"SearchPlaceholder\": \"Search...\",\n \"GroupBy\": \"Group by\",\n \"NotDefined\": \"Not defined\",\n \"DataTable\": {\n \"paginate\": {\n \"first\": \"First\",\n \"last\": \"Last\",\n \"next\": \"Next\",\n \"previous\": \"Previous\"\n },\n \"info\": \"Showing _START_ to _END_ of _TOTAL_ entries\",\n \"infoEmpty\": \"Showing 0 to 0 of 0 entries\",\n \"processing\": \"Processing data...\",\n \"emptyTable\": \"There are no matching records.\"\n },\n \"ColumnDisplay\": \"Column Display\",\n \"ColumnDisplayInfo\": \"Επιλέξτε τις στήλες που θέλετε να εμφανίζονται.\",\n \"Save\": \"Save\",\n \"Apply\": \"Apply\",\n \"Cancel\": \"Cancel\",\n \"RecordsPerPage\": \"Items per page\",\n \"PageInfo\": \"{{start}}-{{end}} of {{recordsTotal}}\",\n \"SearchListPlaceHolder\": \"Search in list...\",\n \"Filters\": \"Filters\",\n \"All\": \"All\",\n \"AddItem\": \"Add item\",\n \"EmptyTableTitle\": \"There are no matching records.\",\n \"EmptyTableMessage\": \"Please try to use other keywords or search parameters.\",\n \"RemoveItem\": \"Remove item\",\n \"Items\": \"items\",\n \"Item\": \"item\",\n \"AddItemMessage\": {\n \"title\": \"Add item\",\n \"one\": \"A new item has been added successfully.\",\n \"many\": \"{{value}} new items have been added successfully.\"\n },\n \"RemoveItemMessage\": {\n \"title\": \"Remove items\",\n \"one\": \"An item has been successfully removed.\",\n \"many\": \"{{value}} items have been successfully removed.\"\n },\n \"RemoveItemsTitle\": \"Remove items\",\n \"RemoveItemsMessage\": \"You are going to remove one or more instructor courses. Do you want to proceed?\",\n \"SelectAll\": \"Select all\",\n \"ClearSelection\": \"Clear selection\",\n \"Actions\": {\n \"Label\": \"Edit\",\n \"Start\": \"Start\",\n \"ActionMessage\": {\n \"None\": \"There is no selected item that meets action requirements.\",\n \"One\": \"You have selected one item that meets action requirements.\",\n \"Many\": \"You have selected {{length}} items that meet action requirements.\"\n },\n \"CompletedWithErrors\": {\n \"Title\": \"The operation was completed with errors.\",\n \"Description\": {\n \"One\": \"One item has not been updated due to an error occurred while executing process.\",\n \"Many\": \"{{errors}} items have not been updated due to an error occurred while executing process.\"\n }\n },\n \"CompletedWithSuccess\": {\n \"Title\": \"The operation was completed successfully.\"\n }\n },\n \"SelectColumns\": \"Select columns\",\n \"MoveUp\": \"Move up\",\n \"MoveDown\": \"Move down\",\n \"AddColumn\": \"Add\",\n \"RemoveColumn\": \"Remove\",\n \"SelectColumnHelp\": \"Select one or more columns and press 'Add' button to include them in table. Use 'Remove' button to exclude one or more columns from view.\",\n \"MoveColumnHelp\": \"Use 'Move up' and 'Move down' buttons to change column order.\",\n \"UnknownColumn\": \"Unknown\",\n \"SelectColumn\": \"Select\",\n \"ActionLinkColumn\": \"Actions\",\n \"DataError\": {\n \"Title\": \"Error while getting data\",\n \"Message\": \"An error occurred while getting data. Please try again or change your criteria.\"\n },\n \"ExportList\": \"Export list\",\n \"ExportLimitExceeded\": \"The number of items that are to be exported ({{dataLength}}) exceeds the export limit ({{exportLimit}}). Please apply more specific filters to the search.\",\n \"ExportResults\": \"Exported list\"\n },\n \"TrueFalse\": {\n \"long\": {\n \"Yes\": \"Yes\",\n \"No\": \"No\"\n }\n },\n \"Settings\": {\n \"OperationCompleted\": \"The operation was completed successfully.\"\n },\n \"AdvancedSearch\": {\n \"Choose\": \"<Select a saved search>\",\n \"ChooseDate\": \"Choose date\",\n \"SavedSearches\": \"Saved searches\",\n \"ToggleDropdown\" : \"Toggle Dropdown\",\n \"SaveCurrentSearch\": \"Save search\",\n \"SaveAs\" : \"Save as...\",\n \"Save\" : \"Save\",\n \"Delete\" : \"Remove\",\n \"More\": \"More\",\n \"Less\": \"Less\",\n \"Modal\" : {\n \"Title\" : \"Save current search criteria\",\n \"Help\" : \"Please add a title for the given search criteria. This title will help you to use those criteria again in the future.\",\n \"TitleOnUserError\" : \"Please use a valid name for your list\",\n \"TitleOnListAlreadyCreated\" : \"Name already in use. Please choose a different one\",\n \"NoListDefined\" : \"Cannot define user storage key.\",\n \"EmptyCriteriaList\" : \"Please define search criteria before save.\",\n \"SaveNameLabel\" : \"List name\",\n \"SaveNamePlaceholder\" : \"Type a title here...\",\n \"Accept\" : \"Save\",\n \"Decline\" : \"Decline\",\n \"Close\" : \"Close\"\n }\n },\n \"AddItems\" : {\n \"SelectItems\": \"Select items\",\n }\n};\n","import { Action } from '@ngrx/store';\n\nexport enum TableActionTypes {\n LoadFilter = '[Table] Load Filter',\n AppendFilter = '[Table] Append Filter',\n AppendState = '[Table] Append State'\n}\n\nexport class LoadFilter implements Action {\n readonly type = TableActionTypes.LoadFilter;\n constructor(public readonly id: string) {}\n}\n\nexport class AppendFilter implements Action {\n readonly type = TableActionTypes.AppendFilter;\n constructor(public readonly id: string, public readonly filter: any) {}\n}\n\nexport class AppendState implements Action {\n readonly type = TableActionTypes.AppendState;\n constructor(public readonly id: string, public readonly data: any) {}\n}\n\nexport type TableActions = LoadFilter | AppendFilter | AppendState;\n","import {\n ActionReducerMap,\n createFeatureSelector,\n createSelector,\n} from '@ngrx/store';\nimport { cloneDeep } from 'lodash';\nimport { TableActions, TableActionTypes } from '../actions/table.actions';\n\nexport interface TableState {\n filter?: any;\n order?: any;\n table?: any;\n}\n\nexport const initialState = {\n};\n\nexport const tableInitialState: TableState = {\n filter: {},\n order: []\n};\n\nexport function tableReducer(state = initialState, action: TableActions): { [id: string]: TableState; } {\n switch (action.type) {\n\n case TableActionTypes.LoadFilter:\n return state[action.id];\n case TableActionTypes.AppendFilter:\n state[action.id] = {\n ...state[action.id],\n filter: cloneDeep(action.filter)\n };\n return state;\n\n case TableActionTypes.AppendState:\n state[action.id] = {\n ...state[action.id],\n table: action.data\n };\n return state;\n default:\n return state;\n }\n}\n\nexport interface NgxTablesState {\n tables: {\n [id: string]: TableState;\n };\n}\n\nexport const tableReducers: ActionReducerMap<NgxTablesState> = {\n tables: tableReducer,\n};\n\nexport const featureName = 'tables';\n\nexport const getTablesState = createFeatureSelector(featureName);\n\nexport const selectTable = createSelector(\n getTablesState,\n (state: NgxTablesState, props: { id: string }) => {\n return state.tables[props.id];\n }\n);\n","import {\n Directive, Optional, Input, OnInit,\n} from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { NgxTablesState } from '../reducers';\nimport { AdvancedTableComponent } from '../components/advanced-table/advanced-table.component';\nimport * as fromTables from '../reducers';\nimport { first } from 'rxjs/operators';\nimport { AppendState } from '../actions/table.actions';\n\n@Directive(\n {\n // tslint:disable-next-line: directive-selector\n selector: '[tableState]',\n },\n)\n// tslint:disable-next-line:directive-class-suffix\nexport class AdvancedTableState implements OnInit {\n\n @Input() tableState?: string;\n\n constructor(private table: AdvancedTableComponent,\n @Optional() private store: Store<NgxTablesState>) {\n }\n ngOnInit(): void {\n if (this.store == null) {\n return;\n }\n this.table.stateSave = true;\n this.table.stateLoadCallback = (settings, callback) => {\n this.store.pipe(select(fromTables.selectTable, { id: this.tableState as string }), first()).subscribe((state: any) => {\n callback(state && state.table);\n if (state && state.table && state.table.ColReorder) {\n this.table.dataTable.colReorder.order(state.table.ColReorder, true);\n }\n });\n };\n let firstDraw = true;\n this.table.draw.subscribe(() => {\n if (firstDraw === false) {\n return;\n }\n if (this.table.dataTable == null) {\n return;\n }\n firstDraw = false;\n const loadeStateSettings: {\n oSavedState?: {\n ColReorder?: number[];\n scroller: {\n topRow: number,\n baseScrollTop: number,\n baseRowTop: number\n }\n }\n } = this.table.dataTable.settings()[0];\n const scrollerSettings = loadeStateSettings.oSavedState &&\n loadeStateSettings.oSavedState.scroller;\n if (scrollerSettings && scrollerSettings.topRow) {\n const scroller = this.table.dataTable.scroller();\n scroller.scrollToRow(scrollerSettings.topRow, true);\n }\n });\n this.table.stateSaveCallback = (settings, data) => {\n this.store.dispatch(new AppendState(this.tableState as string, data));\n };\n }\n}\n","import {\n Directive, Optional, Input, OnInit, OnDestroy\n } from '@angular/core';\nimport { select, Store } from '@ngrx/store';\nimport { AppendFilter } from '../actions/table.actions';\nimport { AdvancedTableSearchComponent } from '../components/advanced-table/advanced-table-search.component';\nimport { NgxTablesState, selectTable } from '../reducers';\nimport { first } from 'rxjs/operators';\nimport { AdvancedTableState } from './advance-table-state.directive';\nimport { Subscription } from 'rxjs';\nimport { isEmpty } from 'lodash';\n\n export class AdvancedTableSearchComponentNotNull extends Error {\n constructor() {\n super('Advanced table search component cannot be empty at this context.');\n }\n }\n\n @Directive(\n {\n // tslint:disable-next-line: directive-selector\n selector: '[searchState]',\n },\n )\n // tslint:disable-next-line:directive-class-suffix\n export class AdvancedSearchState implements OnInit, OnDestroy {\n\n @Input() searchState?: string;\n private filterChangeSubscription?: Subscription;\n private tableInitSubscription?: Subscription;\n\n constructor(protected search: AdvancedTableSearchComponent,\n @Optional() protected store: Store<NgxTablesState>) {\n }\n ngOnInit(): void {\n if (this.store == null) {\n return;\n }\n if (this.search == null) {\n throw new AdvancedTableSearchComponentNotNull();\n }\n if (this.search.table) {\n // set auto load to false\n this.search.table.autoLoad = false;\n // handle filtering\n this.filterChangeSubscription = this.search.filterChange.subscribe((filter) => {\n this.onSearchFilter(filter);\n });\n // apply table state\n this.applyTableState();\n // handle table init\n this.tableInitSubscription = this.search.table.init.subscribe(() => {\n return this.onTableInit();\n });\n }\n }\n\n protected applyTableState() {\n if (this.search.table) {\n // handle table state (via directive)\n const tableState = new AdvancedTableState(this.search.table, this.store);\n tableState.tableState = this.searchState as string;\n tableState.ngOnInit();\n }\n }\n\n public onTableInit() {\n this.store.pipe(select(selectTable, { id: this.searchState as string}), first()).subscribe((state: any) => {\n // use order\n if (state) {\n if (state.order && state.order.length && this.search.table) {\n this.search.table.dataTable.order(state.order);\n }\n // use text search\n if (state.filter && state.filter.q && this.search.table) {\n this.search.text = state.filter.q;\n this.search.collapsed = true;\n return this.search.table.search(this.search.text);\n }\n // use predefined search\n if (state.filter && state.filter.s) {\n this.search.selectedList = this.search.userSearchList.find((item: { name: string }) => {\n return item.name === state.filter.s;\n });\n return this.search.search();\n }\n if (state.filter) {\n if (Object.keys(state.filter).length) {\n // set collapsed to false (advanced search)\n this.search.collapsed = false;\n this.search.filter = state.filter;\n return this.search.search();\n }\n }\n // ensure empty filter at this moment\n // because search() function triggers a store dispatch\n this.search.filter = {};\n return this.search.search();\n }\n });\n }\n\n private onSearchFilter(filter: any) {\n filter = isEmpty(filter) ? null : filter;\n this.store.dispatch(new AppendFilter(this.searchState as string, filter));\n }\n\n ngOnDestroy(): void {\n if (this.filterChangeSubscription) {\n this.filterChangeSubscription.unsubscribe();\n }\n if (this.tableInitSubscription) {\n this.tableInitSubscription.unsubscribe();\n }\n }\n}\n","import { Directive, OnDestroy, OnInit, Optional } from '@angular/core';\nimport { NavigationEnd, NavigationStart, Router } from '@angular/router';\nimport { Store } from '@ngrx/store';\nimport { Subscription } from 'rxjs';\nimport { filter } from 'rxjs/operators';\nimport { AdvancedTableSearchComponent } from '../components/advanced-table/advanced-table-search.component';\nimport { NgxTablesState } from '../reducers';\nimport { AdvancedSearchState } from './advance-search-state.directive';\n\n@Directive({\n // tslint:disable-next-line: directive-selector\n selector: '[routerSearchState]'\n})\n// tslint:disable-next-line:directive-class-suffix\nexport class AdvancedSearchRouterState extends AdvancedSearchState implements OnDestroy, OnInit {\n private _routerSubscription: Subscription;\n private _enteringState = true;\n private _applyState = false;\n\n constructor(\n protected search: AdvancedTableSearchComponent,\n @Optional() protected store: Store<NgxTablesState>,\n private readonly _router: Router\n ) {\n // call super constructor\n super(search, store);\n // set search state dynamically according to route\n this._routerSubscription = this._router.events\n .pipe(filter((event) => event instanceof NavigationStart || event instanceof NavigationEnd))\n .subscribe((event: NavigationStart | NavigationEnd) => {\n // capture urls regarding tab changing while the component is active\n if (event instanceof NavigationStart && !this._enteringState) {\n try {\n // set search state\n this.searchState = new URL(event.url, location.origin).pathname;\n } catch (err) {\n console.error('An error occured while trying to set search state for the current table', err);\n // fallback to event url\n this.searchState = event.url;\n }\n // toogle applyState\n this._applyState = true;\n }\n // capture url of the first activation of the component (e.g. coming from another route)\n if (event instanceof NavigationEnd && this._enteringState) {\n try {\n // set search state\n this.searchState = new URL(event.urlAfterRedirects, location.origin).pathname;\n } catch (err) {\n console.error('An error occured while trying to set search state for the current table', err);\n // fallback to event urlAfterRedirects\n this.searchState = event.urlAfterRedirects;\n }\n // toggle enteringState\n this._enteringState = false;\n }\n if (this._applyState) {\n // apply new table state\n super.applyTableState();\n this._applyState = false;\n }\n });\n }\n\n ngOnDestroy(): void {\n // destroy own subscriptions\n if (this._routerSubscription) {\n this._routerSubscription.unsubscribe();\n }\n // destroy parent subscriptions\n return super.ngOnDestroy();\n }\n}\n","import {NgModule, OnInit, CUSTOM_ELEMENTS_SCHEMA} from '@angular/core';\nimport {CommonModule} from '@angular/common';\nimport {AdvancedTableComponent, COLUMN_FORMATTERS} from './components/advanced-table/advanced-table.component';\nimport {TranslateModule, TranslateService} from '@ngx-translate/core';\nimport {AdvancedTableSearchComponent} from './components/advanced-table/advanced-table-search.component';\nimport { DatePipe } from '@angular/common';\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\n\nimport {BtnExpDirective} from './directives/btnexp.directive';\nimport {AdvancedTableSettingsComponent} from './components/advanced-table/advanced-table-settings.component';\nimport {SharedModule, TemplatePipe} from '@universis/common';\nimport { AdvancedTableModalBaseComponent } from './components/advanced-table-modal/advanced-table-modal-base.component';\nimport {RouterModalModule} from '@universis/common/routing';\nimport { AdvancedSearchFormComponent } from './components/advanced-search-form/advanced-search-form.component';\nimport {AdvancedFormsModule} from '@universis/forms';\nimport {FormioModule} from 'angular-formio';\nimport { AdvancedListComponent } from './components/advanced-list/advanced-list.component';\nimport {RouterModule} from '@angular/router';\nimport {\n AdvancedSearchConfigurationResolver,\n AdvancedTableConfigurationResolver\n} from './components/advanced-table/advanced-table-resolvers';\nimport {AdvancedRowActionComponent} from './components/advanced-row-action/advanced-row-action.component';\nimport {FORMATTERS} from './components/advanced-table/advanced-table.formatters.interface';\n\nimport {TABLES_EL} from './i18n/tables.el';\nimport {TABLES_EN} from './i18n/tables.en';\nimport { TableSimpleHeaderComponent, SimpleHeaderToolsComponent } from './components/table-simple-header/table-simple-header.component';\nimport { ModalModule } from 'ngx-bootstrap/modal';\nimport { ProgressbarModule } from 'ngx-bootstrap/progressbar';\nimport { AdvancedSelectComponent } from './components/advanced-select/advanced-select.component';\nimport { AdvancedSelectService } from './components/advanced-select/advanced-select.service';\nimport { AdvancedTableEditorDirective } from './directives/advanced-table-editor.directive';\nimport {AdvancedAggregatorComponent} from './components/advanced-aggregator/advanced-aggregator.component';\nimport {AdvancedAggregatorListComponent} from './components/advanced-aggregator-list/advanced-aggregator-list.component';\nimport {AdvancedAggregatorService} from './services/advanced-aggregator/advanced-aggregator.service';\nimport {AdvancedAggregatorPipe} from './pipes/advanced-aggregator.pipe';\nimport {GroupByPipe, NgPipesModule} from 'ngx-pipes';\nimport {ParseTitlePipe} from './pipes/advansed-aggregator-list-title-parse.pipe';\nimport {AddItemsComponent} from './components/add-items/add-items.component';\nimport { AdvancedSearchState } from './directives/advance-search-state.directive';\nimport { AdvancedTableState } from './directives/advance-table-state.directive';\nimport { AdvancedSearchRouterState } from './directives/advanced-search-router-state.directive';\nimport { AdvancedTableSearchBaseComponent } from './components/advanced-table/advanced-table-search-base';\nimport { ColumnSelectorComponent } from './components/column-selector/column-selector.component';\nimport { ColumnSelectorService } from './components/column-selector/column-selector.service';\n\n@NgModule({\n imports: [\n CommonModule,\n SharedModule,\n TranslateModule,\n FormsModule,\n ReactiveFormsModule,\n RouterModule,\n RouterModalModule,\n FormioModule,\n AdvancedFormsModule,\n SharedModule,\n ModalModule,\n ProgressbarModule,\n NgPipesModule\n ],\n providers: [DatePipe, TemplatePipe,\n {\n provide: COLUMN_FORMATTERS,\n useValue: FORMATTERS\n },\n\n AdvancedTableConfigurationResolver,\n AdvancedSearchConfigurationResolver,\n AdvancedSelectService,\n AdvancedAggregatorService,\n ColumnSelectorService,\n GroupByPipe\n ],\n declarations: [\n AdvancedTableComponent,\n AdvancedTableSearchBaseComponent,\n AdvancedTableSearchComponent,\n BtnExpDirective,\n AdvancedTableSettingsComponent,\n AdvancedTableModalBaseComponent,\n AdvancedSearchFormComponent,\n AdvancedListComponent,\n AdvancedRowActionComponent,\n TableSimpleHeaderComponent,\n SimpleHeaderToolsComponent,\n AdvancedSelectComponent,\n AdvancedTableEditorDirective,\n AdvancedAggregatorComponent,\n AdvancedAggregatorListComponent,\n AdvancedAggregatorPipe,\n ParseTitlePipe,\n AddItemsComponent,\n AdvancedSearchState,\n AdvancedTableState,\n AdvancedSearchRouterState,\n ColumnSelectorComponent\n ],\n exports: [\n AdvancedTableComponent,\n AdvancedTableSearchComponent,\n BtnExpDirective,\n AdvancedTableSettingsComponent,\n AdvancedSearchFormComponent,\n AdvancedListComponent,\n AdvancedRowActionComponent,\n TableSimpleHeaderComponent,\n SimpleHeaderToolsComponent,\n AdvancedSelectComponent,\n AdvancedTableEditorDirective,\n AdvancedAggregatorComponent,\n AdvancedAggregatorListComponent,\n AddItemsComponent,\n AdvancedSearchState,\n AdvancedTableState,\n AdvancedSearchRouterState,\n ColumnSelectorComponent\n ],\n entryComponents: [\n AdvancedTableModalBaseComponent,\n AdvancedTableSettingsComponent,\n AdvancedRowActionComponent,\n AdvancedSelectComponent,\n AddItemsComponent,\n ColumnSelectorComponent\n ],\n schemas: [CUSTOM_ELEMENTS_SCHEMA]\n})\nexport class TablesModule implements OnInit {\n constructor(private _translateService: TranslateService) {\n this.ngOnInit().catch(err => {\n console.error('An error occurred while loading tables module');\n console.error(err);\n });\n }\n\n async ngOnInit() {\n this._translateService.setTranslation('en', TABLES_EN, true);\n this._translateService.setTranslation('el', TABLES_EL, true);\n }\n\n}\n"],"names":["extendStatics","Object","setPrototypeOf","__proto__","Array","d","b","p","hasOwnProperty","__extends","__","this","constructor","prototype","create","__assign","assign","t","s","i","n","arguments","length","call","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","apply","__generator","body","f","y","_","label","sent","trys","ops","g","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","__values","o","m","__read","r","ar","error","__spread","concat","AdvancedColumnFormatter","template","expr","templateCache","get","set","createUrlTree","data","options","activatedRoute","router","commands","queryParams_1","replaceUrl","queryParamExtras_1","skipLocationChange","fragment","isArray","injector","ActivatedRoute","Router","map","command","commandOutlets_1","outlets","keys","forEach","key","outlet","defineProperty","enumerable","configurable","writable","x","navigationExtras","queryParams","text","relativeTo","Map","tslib_1.__extends","_super","NestedPropertyFormatter","render","type","row","meta","column","settings","aoColumns","col","at","replace","ButtonFormatter","formatOptions","buttonText","href","buttonTitle","buttonClass","TranslateService","instant","buttonContent","routerLink","LinkFormatter","ActionLinkFormatter","actions","index","actions_1","tslib_1.__values","actions_1_1","action","name","urlTree","_this","className","trim","toString","title","join","afterRender","cell","cellData","rowData","rowIndex","colIndex","ActionButtonFormatter","actions_2","actions_2_1","includes","buttonTbuttonTitleext","ActionSplitButtonFormatter","defaultAction","actions_3","actions_3_1","SelectRowFormatter","_tpl","TemplateFormatter","TrueFalseFormatter","TranslationFormatter","DateTimeFormatter","datePipe","DatePipe","currentLang","test","transform","Date","formatString","NgClassFormatter","ngClass","ngClassTemplates","_b","_c","Function","LanguageFormatter","ISO6391.getNativeName","AdvancedFilterValueProvider","buildFilter","filter","_template","values","asyncBuildFilter","_a","getValues","_d","Injectable","args","providedIn","TemplatePipe","RouterModalOkCancel","ColumnSelectorComponent","ok","_changeDetector","detectChanges","setTimeout","changing","_modalRef","hide","applyChanges","err","dismiss","emit","cancel","ngOnChanges","changes","ngOnDestroy","ngOnInit","columns","selectedColumns","item","visible","sort","a","moveIndex","findIndex","this_1","removeColumns","selected","selectedColumnsControl","selected_1","selected_1_1","this_2","splice","reset","addColumns","selected_3","availableColumnsControl","selected_2","selected_2_1","findColumn","this_3","find","lastSelectedIndex","patchValue","moveUp","moveUpButton","nativeElement","disabled","selected_4","selected_4_1","this_4","moveDown","moveDownButton","selected_5","selected_5_1","this_5","length_1","Component","selector","encapsulation","ViewEncapsulation","Emulated","BsModalRef","ChangeDetectorRef","Input","ViewChild","EventEmitter","FormControl","ColumnSelectorService","selectColumns","componentRef_1","_modal","openModalComponent","class","ignoreBackdropClick","animated","initialState","content","subscribe","ModalService","ActivatedTableService","_activeTable","tableComponent","lastActiveTable","_router","_activatedRoute","BehaviorSubject","undefined","pipe","skip","events","event","NavigationStart","activeTable","BtnExpDirective","clickEvent","preventDefault","stopPropagation","_activatedTable","exportView","setParams","query","params","setParam","setHeaders","headers","getService","setHeader","constructQueryParam","tableConfig","selectQuery","getParams","$select","split","select","words","property","_translate","_e","_f","hidden","constructURL","baseURL","getBase","url","endsWith","getModel","constructQuery","_query","downloadFile","serviceHeaders","modelName","_loadingService","showLoading","fetch","encodeURI","credentials","response","ResponseError","statusText","status","blob","objectUrl","window","URL","createObjectURL","document","createElement","downloadName","appendChild","setAttribute","download","navigator","msSaveOrOpenBlob","click","revokeObjectURL","remove","hideLoading","catch","_errorService","showError","continueLink","Directive","AngularDataContext","ConfigurationService","LoadingService","ErrorService","HostListener","_context","_config","jQuery","jQuery_","EMPTY_DATASET","fn","dataTable","Api","register","show","ctx","oApi","_fnProcessingDisplay","recordsTotal","recordsFiltered","TableTranslationChangeDetector","checkNoChanges","detach","markForCheck","reattach","COLUMN_FORMATTERS","InjectionToken","ExportLimitExceededError","RangeError","message","ColumnFormatter","AdvancedTableConfiguration","cast","input","clone","JSON","parse","stringify","AdvancedTableComponent","configChanges","_lastQueryTotalItems","_showFooter","element","_element","querySelector","classList","add","_showHeader","_showPaging","search","searchText","rows_1","model","config","asQueryable","serverSide","searchExpression","word","_firstLoad","draw","resetEmptyTable","indexes","from","context","aiDisplay","rows","load","clearSelected","smartSelect","unselected","destroy","table","empty","selectRow","silent","rowNode_1","key_1","data_1","node","multipleSelect","customSelect","nodes","each","prop","removeClass","addClass","selectedItems","unSelectRow","key_2","id_1","selectAny","selectable","every","selectNone","toggleSelectRow","key_3","id_2","_renderSelect","selectTemplate","_id","tableColumns_1","tableElement_1","drawIndex_1","adjustSelector","infoSelector","self","loading","target","formatter","showActions","_injector","items_1","columnDefinition","defaultContent","translator","sortable","formatters","columnFormatter","_columnFormatters","bind","createdCell","on","adjust","processing","html","order","info","page","console","selectColumnDefinition","firstColumn","unshift","off","onSelectionChange","id","attr","lengthMenu","lengthChange","searching","colReorder","columnOrdering","scrollX","dom","autoWidth","buttons","extend","filename","exportOptions","fnServerData","sSource","aoData","fnCallback","oSettings","autoLoad","emptyDataSet","toggleError","colOrder_1","column_1","direction_1","snapshot","top","q","ClientDataQueryable","take","rowGroup","cols","tableColumn","indexOf","dir","rowGroupOrder","lastRowGroupOrder","direction","orderByStr","columnIndex","columnOrder","stateLoadCallback","callback","state","expressions","virtual","optional","qParams","$filter","defaults","expand","orderBy","groupBy","_advancedFilterValueProvider","defaultFilterString","lastQueryParams","getList","items","dataSet","total","language","emptyTable","dataSrc","endRender","group","footerViewRef","_viewContainerRef","createEmbeddedView","rootNodes","Error","startRender","headerViewRef","stateSettings","stateSave","stateSaveCallback","scrollable","scrollY","scrollCollapse","scroller","loadingIndicator","displayBuffer","paging","pageLength","parent","scrollEvent","scrollTop","left","scrollLeft","scroll","DataTable","init","showHeader","hideSelector","showFooter","showPaging","ngAfterViewInit","headerTemplate","header","footerTemplate","footer","fetchOne","findKeys_1","query_1","rowIndex_1","res","$expand","and","equal","getItem","checked","reloadSubscription","unsubscribe","$event","key_4","id_3","findItemIndex","execRegex","exec","parseInt","oLanguage","sEmptyTable","sZeroRecords","innerHTML","innerMessage","errorTemplate","getElementsByTagName","lastError","clearEmptyTable","export","handleColumns","columnsToShow","slice","getConfig","currentValue","previousValue","_http","toPromise","columnDef","_translateService","placeholder","_columnSelector","_loading","lastQuery","exportSettings","_configuration","exportLimit","tables","errorHandler","_modalService","showWarningDialog","dataLength","DIALOG_BUTTONS","Ok","getExportableData","_exportSpreadsheet","skipHeader","previousDataState","toArray","getItems","targetDataState","clear","err_1","cleanupIndexes","exportData","headerItem","None","Inject","Injector","ElementRef","HttpClient","ExportSpreadsheetService","ViewContainerRef","Output","Number","String","Math","random","TranslatePipe","ext","classes","sPageButton","sPageButtonActive","reload","AdvancedListComponent","dataSubscription","subscription","table_1","getMetadata","routeData","re","RegExp","entitySet","metadata_1","EntityContainer","EntitySet","Name","navigateToError","EntityType","allowSaveOption","allowSave","searchConfiguration","tableConfiguration","description","longDescription","category","readonly","url_1","defaultConfiguration","setConfig","pathFromRoot","route","_toastService","_userActivityService","setItem","location","hash","substring","dateCreated","onDataLoad","OkCancel","ToastService","UserActivityService","NaN","AdvancedRowActionComponent","formComponent","refreshSubscription","refresh","progress","progressComponent","showProgress","form","okButtonDisabled","invalidSubscription","change","changed","isValid","executeSubscription","modalRef","execute","formio","errors","errorMessage","hideProgress","progressContainer","modalClass","modalTitle","okButtonText","AdvancedTableSearchBaseComponent","_filter","onKeyEnter","code","filterChange","AdvancedSearchFormComponent","submission","refreshForm","ServiceUrlPreProcessor","TranslatePreProcessor","componentLoading","filterSubscription","onChange","isEmptyString","isEmptyObject","onFormLoad","i18next","resources","translation","AdvancedTableModalBaseTemplate","AdvancedTableModalBaseComponent","searchElement","focus","_getInputs","componentType","props","__prop__metadata__","inputs","ngMetadataName","hasInputs","cancelButtonText","defaultFilters","searches","advancedTable","configChangesSubscription","defaultFilter","DEFAULT_ALL_FILTER","close","pageInfo","previousPage","nextPage","onTableInit","initialPageInfo","start","firstPage","lastPage","setLength","len","onKeyUp","onSearch","getFilters","defaultFilterValues","searchItem","criterionSafeName","newDate","criteria","matchedCriterion","criterion","onFilterSelect","advancedSearch","warn","advancedFilterValueProvider","predefinedCriteria","prepare","AdvancedSelectComponent","el","AdvancedSelectService","AdvancedTableConfigurationResolver","list","AdvancedSearchConfigurationResolver","AdvancedTableSettingsComponent","activeTableConfig","storageKey","formBuilder","FormArray","minSelectedColumns","userStorage","savedTableSettings","addCheckboxes","tableColumns","control","check","controls","openTableSettings","table_settings_modal","modalService","saveTableSettings","selectedColumnsIds","min","formArray","totalSelected","reduce","prev","required","BsModalService","UserStorageService","FormBuilder","AdvancedTableSearchComponent","loadUserSearchList","mergeQueryParams","queryParamSubscription","applyQueryParams","collapsed","filterParams","userSearchList","selectedList","TextUtils","isNumber","parseFloat","getQuery","onSearchKeyDown","keyCode","navigate","queryParamsHandling","transformDate","date","convertToString","nameFilter","_userStorage","readOnly","onSelectUserSearch","listFound","queryParams_2","searchInListByName","updateSavedSearchListItemByName","newItem","itemInList","updateSavedSearchListItemByObject","deleteItemFromSavedSearchListByObject","uploadListOnUserStorage","saveSearch","templateToLoad","newList","confirmModal","saveFormName","newInsertedValue","storageValue","alert","closeModal","asyncAdvancedSearch","queryParams_3","expressions_1","_advancedSearchValueProvider","values_1","queryParams_4","advancedView","toggleView","viewChange","viewState","FORMATTERS","SimpleHeaderToolsComponent","TableSimpleHeaderComponent","dataLoadSubscription","AdvancedTableNotNullError","AdvancedTableEditorDirective","addItems","_i","addItems_1","addItems_1_1","tr","to$","hasClass","toggleClass","removedLength","addedLength","dirty","dirtyChange","removeItems","removeItems_1","removeItems_1_1","selectedIndex","undo","AdvancedAggregatorService","fetchData","fixedParams","queryStatement","filters","searchTemplate","searchValue","filterExpressions","param","evaluatedSearch","formatData","entry","subitems","entryObject","helperObject","i_1","AdvancedAggregatorComponent","_aggregators","_postProcessors","selectedGroups$","groups","filters$","_advancedAggregatorService","postProcessors","err_2","onActionEvent","eventHandler","changeDetection","ChangeDetectionStrategy","OnPush","XL","LG","MD","SM","XS","AdvancedAggregatorListComponent","Lengths","callCallback","AddItemsComponent","selectComponent","selectedSubscription","formName","formChangeSubscription","clearMessages","formLoadSubscription","messages","onFilterChange","AdvancedAggregatorPipe","functionPool","functionName","Pipe","ParseTitlePipe","part","TABLES_EL","Tables","Export","More","Search","SearchPlaceholder","GroupBy","NotDefined","paginate","first","last","previous","infoEmpty","ColumnDisplay","ColumnDisplayInfo","Save","Apply","Cancel","RecordsPerPage","PageInfo","SearchListPlaceholder","Filters","All","AddItem","EmptyTableTitle","EmptyTableMessage","RemoveItem","Items","Item","AddItemMessage","one","many","RemoveItemMessage","RemoveItemsTitle","RemoveItemsMessage","SelectAll","ClearSelection","Actions","Label","Start","ActionMessage","One","Many","CompletedWithErrors","Title","Description","CompletedWithSuccess","SelectColumns","MoveUp","MoveDown","AddColumn","RemoveColumn","SelectColumnHelp","MoveColumnHelp","UnknownColumn","SelectColumn","ActionLinkColumn","DataError","Message","ExportList","ExportLimitExceeded","ExportResults","TrueFalse","long","Yes","No","Settings","OperationCompleted","AdvancedSearch","Choose","ChooseDate","SavedSearches","ToggleDropdown","SaveCurrentSearch","SaveAs","Delete","Less","Modal","Help","TitleOnUserError","TitleOnListAlreadyCreated","NoListDefined","EmptyCriteriaList","SaveNameLabel","SaveNamePlaceholder","Accept","Decline","Close","AddItems","SelectItems","TABLES_EN","SearchListPlaceHolder","AppendFilter","TableActionTypes","AppendState","tableReducer","cloneDeep","tableReducers","getTablesState","createFeatureSelector","selectTable","createSelector","AdvancedTableState","firstDraw","store","fromTables.selectTable","ColReorder","scrollerSettings","loadeStateSettings","oSavedState","topRow","scrollToRow","dispatch","Store","decorators","Optional","AdvancedTableSearchComponentNotNull","AdvancedSearchState","filterChangeSubscription","onSearchFilter","applyTableState","tableInitSubscription","tableState","isEmpty","AdvancedSearchRouterState","_routerSubscription","NavigationEnd","_enteringState","searchState","origin","pathname","_applyState","urlAfterRedirects","TablesModule","setTranslation","NgModule","imports","CommonModule","SharedModule","TranslateModule","FormsModule","ReactiveFormsModule","RouterModule","RouterModalModule","FormioModule","AdvancedFormsModule","ModalModule","ProgressbarModule","NgPipesModule","providers","provide","useValue","ɵ0$1","GroupByPipe","declarations","exports","entryComponents","schemas","CUSTOM_ELEMENTS_SCHEMA"],"mappings":"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"}