@universis/ngx-tables 6.13.4 → 6.13.6

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.
Files changed (28) hide show
  1. package/bundles/universis-ngx-tables.umd.js +88 -8
  2. package/bundles/universis-ngx-tables.umd.js.map +1 -1
  3. package/bundles/universis-ngx-tables.umd.min.js +1 -1
  4. package/bundles/universis-ngx-tables.umd.min.js.map +1 -1
  5. package/esm2015/lib/components/advanced-aggregator/advanced-aggregator.component.js +6 -3
  6. package/esm2015/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +6 -3
  7. package/esm2015/lib/components/advanced-table/advanced-table.component.js +31 -4
  8. package/esm2015/lib/components/advanced-table/advanced-table.formatters.interface.js +6 -31
  9. package/esm2015/lib/components/advanced-table/custom-button.formatter.js +45 -0
  10. package/esm2015/universis-ngx-tables.js +5 -4
  11. package/esm5/lib/components/advanced-aggregator/advanced-aggregator.component.js +6 -3
  12. package/esm5/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.js +6 -3
  13. package/esm5/lib/components/advanced-table/advanced-table.component.js +31 -4
  14. package/esm5/lib/components/advanced-table/advanced-table.formatters.interface.js +6 -31
  15. package/esm5/lib/components/advanced-table/custom-button.formatter.js +56 -0
  16. package/esm5/universis-ngx-tables.js +5 -4
  17. package/fesm2015/universis-ngx-tables.js +77 -7
  18. package/fesm2015/universis-ngx-tables.js.map +1 -1
  19. package/fesm5/universis-ngx-tables.js +87 -8
  20. package/fesm5/universis-ngx-tables.js.map +1 -1
  21. package/lib/components/advanced-aggregator/advanced-aggregator.component.d.ts +2 -1
  22. package/lib/components/advanced-aggregator-list/advanced-aggregator-list.component.d.ts +2 -1
  23. package/lib/components/advanced-table/advanced-table.component.d.ts +3 -2
  24. package/lib/components/advanced-table/advanced-table.formatters.interface.d.ts +5 -17
  25. package/lib/components/advanced-table/custom-button.formatter.d.ts +11 -0
  26. package/package.json +2 -2
  27. package/universis-ngx-tables.d.ts +5 -4
  28. package/universis-ngx-tables.metadata.json +1 -1
@@ -3,36 +3,10 @@
3
3
  * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
4
4
  */
5
5
  import { ActionLinkFormatter, ButtonFormatter, DateTimeFormatter, LanguageFormatter, LinkFormatter, NestedPropertyFormatter, NgClassFormatter, SelectRowFormatter, TemplateFormatter, TranslationFormatter, TrueFalseFormatter, ActionButtonFormatter, ActionSplitButtonFormatter, } from './advanced-table.formatters';
6
- /**
7
- * @record
8
- */
9
- export function IAdvancedTableFormatters() { }
10
- /** @type {?|undefined} */
11
- IAdvancedTableFormatters.prototype.ActionLinkFormatter;
12
- /** @type {?|undefined} */
13
- IAdvancedTableFormatters.prototype.ButtonFormatter;
14
- /** @type {?|undefined} */
15
- IAdvancedTableFormatters.prototype.DateTimeFormatter;
16
- /** @type {?|undefined} */
17
- IAdvancedTableFormatters.prototype.LanguageFormatter;
18
- /** @type {?|undefined} */
19
- IAdvancedTableFormatters.prototype.LinkFormatter;
20
- /** @type {?|undefined} */
21
- IAdvancedTableFormatters.prototype.NestedPropertyFormatter;
22
- /** @type {?|undefined} */
23
- IAdvancedTableFormatters.prototype.NgClassFormatter;
24
- /** @type {?|undefined} */
25
- IAdvancedTableFormatters.prototype.SelectRowFormatter;
26
- /** @type {?|undefined} */
27
- IAdvancedTableFormatters.prototype.TemplateFormatter;
28
- /** @type {?|undefined} */
29
- IAdvancedTableFormatters.prototype.TranslationFormatter;
30
- /** @type {?|undefined} */
31
- IAdvancedTableFormatters.prototype.TrueFalseFormatter;
32
- /** @type {?|undefined} */
33
- IAdvancedTableFormatters.prototype.ActionButtonFormatter;
34
- /** @type {?|undefined} */
35
- IAdvancedTableFormatters.prototype.ActionSplitButtonFormatter;
6
+ import { CustomButtonFormatter } from './custom-button.formatter';
7
+ /** @typedef {?} */
8
+ var AdvancedTableFormatters;
9
+ export { AdvancedTableFormatters };
36
10
  /** @type {?} */
37
11
  export var FORMATTERS = {
38
12
  ActionLinkFormatter: new ActionLinkFormatter(),
@@ -48,6 +22,7 @@ export var FORMATTERS = {
48
22
  TrueFalseFormatter: new TrueFalseFormatter(),
49
23
  ActionButtonFormatter: new ActionButtonFormatter(),
50
24
  ActionSplitButtonFormatter: new ActionSplitButtonFormatter(),
25
+ CustomButtonFormatter: new CustomButtonFormatter(),
51
26
  };
52
27
 
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFDMUUsYUFBYSxFQUNiLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUM3RCxpQkFBaUIsRUFBRSxvQkFBb0IsRUFDdkMsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEdBQ3RFLE1BQU0sNkJBQTZCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBaUJyQyxXQUFhLFVBQVUsR0FBNkI7SUFDOUMsbUJBQW1CLEVBQUUsSUFBSSxtQkFBbUIsRUFBRTtJQUM5QyxlQUFlLEVBQUUsSUFBSSxlQUFlLEVBQUU7SUFDdEMsaUJBQWlCLEVBQUUsSUFBSSxpQkFBaUIsRUFBRTtJQUMxQyxpQkFBaUIsRUFBRSxJQUFJLGlCQUFpQixFQUFFO0lBQzFDLGFBQWEsRUFBRSxJQUFJLGFBQWEsRUFBRTtJQUNsQyx1QkFBdUIsRUFBRSxJQUFJLHVCQUF1QixFQUFFO0lBQ3RELGdCQUFnQixFQUFFLElBQUksZ0JBQWdCLEVBQUU7SUFDeEMsa0JBQWtCLEVBQUUsSUFBSSxrQkFBa0IsRUFBRTtJQUM1QyxpQkFBaUIsRUFBRSxJQUFJLGlCQUFpQixFQUFFO0lBQzFDLG9CQUFvQixFQUFFLElBQUksb0JBQW9CLEVBQUU7SUFDaEQsa0JBQWtCLEVBQUUsSUFBSSxrQkFBa0IsRUFBRTtJQUM1QyxxQkFBcUIsRUFBRSxJQUFJLHFCQUFxQixFQUFFO0lBQ2xELDBCQUEwQixFQUFFLElBQUksMEJBQTBCLEVBQUU7Q0FDakUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEFjdGlvbkxpbmtGb3JtYXR0ZXIsIEJ1dHRvbkZvcm1hdHRlciwgRGF0ZVRpbWVGb3JtYXR0ZXIsIExhbmd1YWdlRm9ybWF0dGVyLFxuICBMaW5rRm9ybWF0dGVyLFxuICBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlciwgTmdDbGFzc0Zvcm1hdHRlciwgU2VsZWN0Um93Rm9ybWF0dGVyLFxuICBUZW1wbGF0ZUZvcm1hdHRlciwgVHJhbnNsYXRpb25Gb3JtYXR0ZXIsXG4gIFRydWVGYWxzZUZvcm1hdHRlciwgQWN0aW9uQnV0dG9uRm9ybWF0dGVyLCBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcixcbn0gZnJvbSAnLi9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzJztcblxuZXhwb3J0IGludGVyZmFjZSBJQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMge1xuICBBY3Rpb25MaW5rRm9ybWF0dGVyPzogQWN0aW9uTGlua0Zvcm1hdHRlcjtcbiAgQnV0dG9uRm9ybWF0dGVyPzogQnV0dG9uRm9ybWF0dGVyO1xuICBEYXRlVGltZUZvcm1hdHRlcj86IERhdGVUaW1lRm9ybWF0dGVyO1xuICBMYW5ndWFnZUZvcm1hdHRlcj86IExhbmd1YWdlRm9ybWF0dGVyO1xuICBMaW5rRm9ybWF0dGVyPzogTGlua0Zvcm1hdHRlcjtcbiAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI/OiBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcjtcbiAgTmdDbGFzc0Zvcm1hdHRlcj86IE5nQ2xhc3NGb3JtYXR0ZXI7XG4gIFNlbGVjdFJvd0Zvcm1hdHRlcj86IFNlbGVjdFJvd0Zvcm1hdHRlcjtcbiAgVGVtcGxhdGVGb3JtYXR0ZXI/OiBUZW1wbGF0ZUZvcm1hdHRlcjtcbiAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI/OiBUcmFuc2xhdGlvbkZvcm1hdHRlcjtcbiAgVHJ1ZUZhbHNlRm9ybWF0dGVyPzogVHJ1ZUZhbHNlRm9ybWF0dGVyO1xuICBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI/OiBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI7XG4gIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyPzogQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXI7XG59XG5leHBvcnQgY29uc3QgRk9STUFUVEVSUzogSUFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzID0ge1xuICAgICAgQWN0aW9uTGlua0Zvcm1hdHRlcjogbmV3IEFjdGlvbkxpbmtGb3JtYXR0ZXIoKSxcbiAgICAgIEJ1dHRvbkZvcm1hdHRlcjogbmV3IEJ1dHRvbkZvcm1hdHRlcigpLFxuICAgICAgRGF0ZVRpbWVGb3JtYXR0ZXI6IG5ldyBEYXRlVGltZUZvcm1hdHRlcigpLFxuICAgICAgTGFuZ3VhZ2VGb3JtYXR0ZXI6IG5ldyBMYW5ndWFnZUZvcm1hdHRlcigpLFxuICAgICAgTGlua0Zvcm1hdHRlcjogbmV3IExpbmtGb3JtYXR0ZXIoKSxcbiAgICAgIE5lc3RlZFByb3BlcnR5Rm9ybWF0dGVyOiBuZXcgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIoKSxcbiAgICAgIE5nQ2xhc3NGb3JtYXR0ZXI6IG5ldyBOZ0NsYXNzRm9ybWF0dGVyKCksXG4gICAgICBTZWxlY3RSb3dGb3JtYXR0ZXI6IG5ldyBTZWxlY3RSb3dGb3JtYXR0ZXIoKSxcbiAgICAgIFRlbXBsYXRlRm9ybWF0dGVyOiBuZXcgVGVtcGxhdGVGb3JtYXR0ZXIoKSxcbiAgICAgIFRyYW5zbGF0aW9uRm9ybWF0dGVyOiBuZXcgVHJhbnNsYXRpb25Gb3JtYXR0ZXIoKSxcbiAgICAgIFRydWVGYWxzZUZvcm1hdHRlcjogbmV3IFRydWVGYWxzZUZvcm1hdHRlcigpLFxuICAgICAgQWN0aW9uQnV0dG9uRm9ybWF0dGVyOiBuZXcgQWN0aW9uQnV0dG9uRm9ybWF0dGVyKCksXG4gICAgICBBY3Rpb25TcGxpdEJ1dHRvbkZvcm1hdHRlcjogbmV3IEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyKCksXG59O1xuIl19
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWR2YW5jZWQtdGFibGUuZm9ybWF0dGVycy5pbnRlcmZhY2UuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9hZHZhbmNlZC10YWJsZS5mb3JtYXR0ZXJzLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUNMLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxpQkFBaUIsRUFBRSxpQkFBaUIsRUFDMUUsYUFBYSxFQUNiLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUM3RCxpQkFBaUIsRUFBRSxvQkFBb0IsRUFDdkMsa0JBQWtCLEVBQUUscUJBQXFCLEVBQUUsMEJBQTBCLEdBRXRFLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBSWxFLFdBQWEsVUFBVSxHQUE0QjtJQUM3QyxtQkFBbUIsRUFBRSxJQUFJLG1CQUFtQixFQUFFO0lBQzlDLGVBQWUsRUFBRSxJQUFJLGVBQWUsRUFBRTtJQUN0QyxpQkFBaUIsRUFBRSxJQUFJLGlCQUFpQixFQUFFO0lBQzFDLGlCQUFpQixFQUFFLElBQUksaUJBQWlCLEVBQUU7SUFDMUMsYUFBYSxFQUFFLElBQUksYUFBYSxFQUFFO0lBQ2xDLHVCQUF1QixFQUFFLElBQUksdUJBQXVCLEVBQUU7SUFDdEQsZ0JBQWdCLEVBQUUsSUFBSSxnQkFBZ0IsRUFBRTtJQUN4QyxrQkFBa0IsRUFBRSxJQUFJLGtCQUFrQixFQUFFO0lBQzVDLGlCQUFpQixFQUFFLElBQUksaUJBQWlCLEVBQUU7SUFDMUMsb0JBQW9CLEVBQUUsSUFBSSxvQkFBb0IsRUFBRTtJQUNoRCxrQkFBa0IsRUFBRSxJQUFJLGtCQUFrQixFQUFFO0lBQzVDLHFCQUFxQixFQUFFLElBQUkscUJBQXFCLEVBQUU7SUFDbEQsMEJBQTBCLEVBQUUsSUFBSSwwQkFBMEIsRUFBRTtJQUM1RCxxQkFBcUIsRUFBRSxJQUFJLHFCQUFxQixFQUFFO0NBQ3ZELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBY3Rpb25MaW5rRm9ybWF0dGVyLCBCdXR0b25Gb3JtYXR0ZXIsIERhdGVUaW1lRm9ybWF0dGVyLCBMYW5ndWFnZUZvcm1hdHRlcixcbiAgTGlua0Zvcm1hdHRlcixcbiAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXIsIE5nQ2xhc3NGb3JtYXR0ZXIsIFNlbGVjdFJvd0Zvcm1hdHRlcixcbiAgVGVtcGxhdGVGb3JtYXR0ZXIsIFRyYW5zbGF0aW9uRm9ybWF0dGVyLFxuICBUcnVlRmFsc2VGb3JtYXR0ZXIsIEFjdGlvbkJ1dHRvbkZvcm1hdHRlciwgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXIsXG4gIEFkdmFuY2VkQ29sdW1uRm9ybWF0dGVyLFxufSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMnO1xuaW1wb3J0IHsgQ3VzdG9tQnV0dG9uRm9ybWF0dGVyIH0gZnJvbSAnLi9jdXN0b20tYnV0dG9uLmZvcm1hdHRlcic7XG5cbmV4cG9ydCB0eXBlIEFkdmFuY2VkVGFibGVGb3JtYXR0ZXJzID0geyBbazogc3RyaW5nXTogQWR2YW5jZWRDb2x1bW5Gb3JtYXR0ZXIgfVxuXG5leHBvcnQgY29uc3QgRk9STUFUVEVSUzogQWR2YW5jZWRUYWJsZUZvcm1hdHRlcnMgPSB7XG4gICAgICBBY3Rpb25MaW5rRm9ybWF0dGVyOiBuZXcgQWN0aW9uTGlua0Zvcm1hdHRlcigpLFxuICAgICAgQnV0dG9uRm9ybWF0dGVyOiBuZXcgQnV0dG9uRm9ybWF0dGVyKCksXG4gICAgICBEYXRlVGltZUZvcm1hdHRlcjogbmV3IERhdGVUaW1lRm9ybWF0dGVyKCksXG4gICAgICBMYW5ndWFnZUZvcm1hdHRlcjogbmV3IExhbmd1YWdlRm9ybWF0dGVyKCksXG4gICAgICBMaW5rRm9ybWF0dGVyOiBuZXcgTGlua0Zvcm1hdHRlcigpLFxuICAgICAgTmVzdGVkUHJvcGVydHlGb3JtYXR0ZXI6IG5ldyBOZXN0ZWRQcm9wZXJ0eUZvcm1hdHRlcigpLFxuICAgICAgTmdDbGFzc0Zvcm1hdHRlcjogbmV3IE5nQ2xhc3NGb3JtYXR0ZXIoKSxcbiAgICAgIFNlbGVjdFJvd0Zvcm1hdHRlcjogbmV3IFNlbGVjdFJvd0Zvcm1hdHRlcigpLFxuICAgICAgVGVtcGxhdGVGb3JtYXR0ZXI6IG5ldyBUZW1wbGF0ZUZvcm1hdHRlcigpLFxuICAgICAgVHJhbnNsYXRpb25Gb3JtYXR0ZXI6IG5ldyBUcmFuc2xhdGlvbkZvcm1hdHRlcigpLFxuICAgICAgVHJ1ZUZhbHNlRm9ybWF0dGVyOiBuZXcgVHJ1ZUZhbHNlRm9ybWF0dGVyKCksXG4gICAgICBBY3Rpb25CdXR0b25Gb3JtYXR0ZXI6IG5ldyBBY3Rpb25CdXR0b25Gb3JtYXR0ZXIoKSxcbiAgICAgIEFjdGlvblNwbGl0QnV0dG9uRm9ybWF0dGVyOiBuZXcgQWN0aW9uU3BsaXRCdXR0b25Gb3JtYXR0ZXIoKSxcbiAgICAgIEN1c3RvbUJ1dHRvbkZvcm1hdHRlcjogbmV3IEN1c3RvbUJ1dHRvbkZvcm1hdHRlcigpLFxufTtcbiJdfQ==
@@ -0,0 +1,56 @@
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
4
+ */
5
+ import * as tslib_1 from "tslib";
6
+ import { TranslateService } from '@ngx-translate/core';
7
+ import { ButtonFormatter } from './advanced-table.formatters';
8
+ var CustomButtonFormatter = /** @class */ (function (_super) {
9
+ tslib_1.__extends(CustomButtonFormatter, _super);
10
+ function CustomButtonFormatter() {
11
+ return _super.call(this) || this;
12
+ }
13
+ /**
14
+ * @param {?} data
15
+ * @param {?} type
16
+ * @param {?} row
17
+ * @param {?} meta
18
+ * @return {?}
19
+ */
20
+ CustomButtonFormatter.prototype.render = /**
21
+ * @param {?} data
22
+ * @param {?} type
23
+ * @param {?} row
24
+ * @param {?} meta
25
+ * @return {?}
26
+ */
27
+ function (data, type, row, meta) {
28
+ if (data == null || this.injector == null) {
29
+ return '';
30
+ }
31
+ /** @type {?} */
32
+ var formatOptions = Object.assign({
33
+ buttonClass: 'btn btn-default',
34
+ }, this.formatOptions);
35
+ /** @type {?} */
36
+ var buttonText;
37
+ /** @type {?} */
38
+ var buttonTitle = '';
39
+ if (formatOptions.buttonText) {
40
+ buttonText = this.injector.get(TranslateService).instant(formatOptions.buttonText);
41
+ }
42
+ else {
43
+ buttonText = formatOptions.buttonContent;
44
+ }
45
+ if (formatOptions.buttonTitle) {
46
+ buttonTitle = this.injector.get(TranslateService).instant(formatOptions.buttonTitle);
47
+ }
48
+ /** @type {?} */
49
+ var customEvent = formatOptions.event || 'event';
50
+ return "<button style=\"cursor:pointer\" data-event=\"" + customEvent + "\" class=\"dt-custom " + formatOptions.buttonClass + "\" title=\"" + buttonTitle + "\">" + buttonText + "</button>";
51
+ };
52
+ return CustomButtonFormatter;
53
+ }(ButtonFormatter));
54
+ export { CustomButtonFormatter };
55
+
56
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLWJ1dHRvbi5mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJsaWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9jdXN0b20tYnV0dG9uLmZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQU85RCxJQUFBO0lBQTJDLGlEQUFlO0lBQ3REO2VBQ0ksaUJBQU87S0FDVjs7Ozs7Ozs7SUFFTSxzQ0FBTTs7Ozs7OztjQUFDLElBQVMsRUFBRSxJQUFZLEVBQUUsR0FBUSxFQUFFLElBQWlDO1FBQzlFLElBQUksSUFBSSxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksRUFBRTtZQUN2QyxPQUFPLEVBQUUsQ0FBQztTQUNiOztRQUVELElBQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7WUFDaEMsV0FBVyxFQUFFLGlCQUFpQjtTQUNqQyxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQzs7UUFFdkIsSUFBSSxVQUFVLENBQVM7O1FBQ3ZCLElBQUksV0FBVyxHQUFHLEVBQUUsQ0FBQztRQUNyQixJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUU7WUFDMUIsVUFBVSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQztTQUN0RjthQUFNO1lBQ0gsVUFBVSxHQUFHLGFBQWEsQ0FBQyxhQUFhLENBQUM7U0FDNUM7UUFDRCxJQUFJLGFBQWEsQ0FBQyxXQUFXLEVBQUU7WUFDM0IsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGdCQUFnQixDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxXQUFXLENBQUMsQ0FBQztTQUN4Rjs7UUFDRCxJQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQztRQUNuRCxPQUFPLG1EQUE4QyxXQUFXLDZCQUFzQixhQUFhLENBQUMsV0FBVyxtQkFBWSxXQUFXLFdBQUssVUFBVSxjQUFXLENBQUM7O2dDQWxDeks7RUFTMkMsZUFBZSxFQTRCekQsQ0FBQTtBQTVCRCxpQ0E0QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBCdXR0b25Gb3JtYXR0ZXIgfSBmcm9tICcuL2FkdmFuY2VkLXRhYmxlLmZvcm1hdHRlcnMnO1xuXG5kZWNsYXJlIGdsb2JhbCB7XG4gICAgaW50ZXJmYWNlIFdpbmRvdyB7XG4gICAgICAgIGRpc3BhdGNoQ3VzdG9tRXZlbnQ6ICh0eXBlOiBzdHJpbmcsIGV2ZW50OiBhbnkpID0+IHZvaWQ7XG4gICAgfVxufVxuZXhwb3J0IGNsYXNzIEN1c3RvbUJ1dHRvbkZvcm1hdHRlciBleHRlbmRzIEJ1dHRvbkZvcm1hdHRlciB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKClcbiAgICB9XG5cbiAgICBwdWJsaWMgcmVuZGVyKGRhdGE6IGFueSwgdHlwZTogc3RyaW5nLCByb3c6IGFueSwgbWV0YTogRGF0YVRhYmxlcy5DZWxsTWV0YVNldHRpbmdzKSB7XG4gICAgICAgIGlmIChkYXRhID09IG51bGwgfHwgdGhpcy5pbmplY3RvciA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gJyc7XG4gICAgICAgIH1cbiAgICAgICAgLy8gZ2V0IGZvcm1hdCBvcHRpb25zXG4gICAgICAgIGNvbnN0IGZvcm1hdE9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHtcbiAgICAgICAgICAgIGJ1dHRvbkNsYXNzOiAnYnRuIGJ0bi1kZWZhdWx0JyxcbiAgICAgICAgfSwgdGhpcy5mb3JtYXRPcHRpb25zKTtcbiAgICAgICAgLy8gZ2V0IHRleHQgY29udGVudFxuICAgICAgICBsZXQgYnV0dG9uVGV4dDogc3RyaW5nO1xuICAgICAgICBsZXQgYnV0dG9uVGl0bGUgPSAnJztcbiAgICAgICAgaWYgKGZvcm1hdE9wdGlvbnMuYnV0dG9uVGV4dCkge1xuICAgICAgICAgICAgYnV0dG9uVGV4dCA9IHRoaXMuaW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpLmluc3RhbnQoZm9ybWF0T3B0aW9ucy5idXR0b25UZXh0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGJ1dHRvblRleHQgPSBmb3JtYXRPcHRpb25zLmJ1dHRvbkNvbnRlbnQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGZvcm1hdE9wdGlvbnMuYnV0dG9uVGl0bGUpIHtcbiAgICAgICAgICAgIGJ1dHRvblRpdGxlID0gdGhpcy5pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSkuaW5zdGFudChmb3JtYXRPcHRpb25zLmJ1dHRvblRpdGxlKTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBjdXN0b21FdmVudCA9IGZvcm1hdE9wdGlvbnMuZXZlbnQgfHwgJ2V2ZW50JztcbiAgICAgICAgcmV0dXJuIGA8YnV0dG9uIHN0eWxlPVwiY3Vyc29yOnBvaW50ZXJcIiBkYXRhLWV2ZW50PVwiJHtjdXN0b21FdmVudH1cIiBjbGFzcz1cImR0LWN1c3RvbSAke2Zvcm1hdE9wdGlvbnMuYnV0dG9uQ2xhc3N9XCIgdGl0bGU9XCIke2J1dHRvblRpdGxlfVwiPiR7YnV0dG9uVGV4dH08L2J1dHRvbj5gO1xuICAgIH1cblxufVxuIl19
@@ -6,8 +6,9 @@
6
6
  * Generated bundle index. Do not edit.
7
7
  */
8
8
  export { AdvancedListComponent, AdvancedRowActionComponent, AdvancedSearchFormComponent, AdvancedSelectComponent, AdvancedSelectService, AdvancedTableConfigurationResolver, AdvancedSearchConfigurationResolver, AdvancedColumnFormatter, NestedPropertyFormatter, ButtonFormatter, LinkFormatter, ActionLinkFormatter, ActionButtonFormatter, ActionSplitButtonFormatter, SelectRowFormatter, TemplateFormatter, TrueFalseFormatter, TranslationFormatter, DateTimeFormatter, NgClassFormatter, LanguageFormatter, COLUMN_FORMATTERS, ExportLimitExceededError, AdvancedTableConfiguration, AdvancedTableComponent, AdvancedTableSettingsComponent, AdvancedTableSearchBaseComponent, AdvancedTableSearchComponent, FORMATTERS, AdvancedFilterValueProvider, AdvancedTableModalBaseTemplate, AdvancedTableModalBaseComponent, SimpleHeaderToolsComponent, TableSimpleHeaderComponent, AdvancedTableNotNullError, AdvancedTableEditorDirective, MAX_EXPORT_ITEMS, BtnExpDirective, AdvancedAggregatorComponent, AdvancedAggregatorListComponent, AddItemsComponent, AdvancedAggregatorPipe, ParseTitlePipe, AdvancedAggregatorService, TablesModule, ActivatedTableService, ColumnSelectorService, ColumnSelectorComponent, tableReducer, initialState, tableInitialState, tableReducers, featureName, getTablesState, selectTable } from './public_api';
9
- export { AdvancedSearchState as ɵa } from './lib/directives/advance-search-state.directive';
10
- export { AdvancedTableState as ɵc } from './lib/directives/advance-table-state.directive';
11
- export { AdvancedSearchRouterState as ɵd } from './lib/directives/advanced-search-router-state.directive';
9
+ export { CustomButtonFormatter as ɵa } from './lib/components/advanced-table/custom-button.formatter';
10
+ export { AdvancedSearchState as ɵb } from './lib/directives/advance-search-state.directive';
11
+ export { AdvancedTableState as ɵd } from './lib/directives/advance-table-state.directive';
12
+ export { AdvancedSearchRouterState as ɵe } from './lib/directives/advanced-search-router-state.directive';
12
13
 
13
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2lzLW5neC10YWJsZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJ1bml2ZXJzaXMtbmd4LXRhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsMndDQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMsbUJBQW1CLElBQUksRUFBRSxFQUFDLE1BQU0saURBQWlELENBQUM7QUFDMUYsT0FBTyxFQUFDLGtCQUFrQixJQUFJLEVBQUUsRUFBQyxNQUFNLGdEQUFnRCxDQUFDO0FBQ3hGLE9BQU8sRUFBQyx5QkFBeUIsSUFBSSxFQUFFLEVBQUMsTUFBTSx5REFBeUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWNfYXBpJztcblxuZXhwb3J0IHtBZHZhbmNlZFNlYXJjaFN0YXRlIGFzIMm1YX0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9hZHZhbmNlLXNlYXJjaC1zdGF0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0IHtBZHZhbmNlZFRhYmxlU3RhdGUgYXMgybVjfSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2UtdGFibGUtc3RhdGUuZGlyZWN0aXZlJztcbmV4cG9ydCB7QWR2YW5jZWRTZWFyY2hSb3V0ZXJTdGF0ZSBhcyDJtWR9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvYWR2YW5jZWQtc2VhcmNoLXJvdXRlci1zdGF0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0IHtOZ3hUYWJsZXNTdGF0ZSBhcyDJtWJ9IGZyb20gJy4vbGliL3JlZHVjZXJzJzsiXX0=
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5pdmVyc2lzLW5neC10YWJsZXMuanMiLCJzb3VyY2VSb290Ijoibmc6Ly9AdW5pdmVyc2lzL25neC10YWJsZXMvIiwic291cmNlcyI6WyJ1bml2ZXJzaXMtbmd4LXRhYmxlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBSUEsMndDQUFjLGNBQWMsQ0FBQztBQUU3QixPQUFPLEVBQUMscUJBQXFCLElBQUksRUFBRSxFQUFDLE1BQU0seURBQXlELENBQUM7QUFDcEcsT0FBTyxFQUFDLG1CQUFtQixJQUFJLEVBQUUsRUFBQyxNQUFNLGlEQUFpRCxDQUFDO0FBQzFGLE9BQU8sRUFBQyxrQkFBa0IsSUFBSSxFQUFFLEVBQUMsTUFBTSxnREFBZ0QsQ0FBQztBQUN4RixPQUFPLEVBQUMseUJBQXlCLElBQUksRUFBRSxFQUFDLE1BQU0seURBQXlELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG5cbmV4cG9ydCB7Q3VzdG9tQnV0dG9uRm9ybWF0dGVyIGFzIMm1YX0gZnJvbSAnLi9saWIvY29tcG9uZW50cy9hZHZhbmNlZC10YWJsZS9jdXN0b20tYnV0dG9uLmZvcm1hdHRlcic7XG5leHBvcnQge0FkdmFuY2VkU2VhcmNoU3RhdGUgYXMgybVifSBmcm9tICcuL2xpYi9kaXJlY3RpdmVzL2FkdmFuY2Utc2VhcmNoLXN0YXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQge0FkdmFuY2VkVGFibGVTdGF0ZSBhcyDJtWR9IGZyb20gJy4vbGliL2RpcmVjdGl2ZXMvYWR2YW5jZS10YWJsZS1zdGF0ZS5kaXJlY3RpdmUnO1xuZXhwb3J0IHtBZHZhbmNlZFNlYXJjaFJvdXRlclN0YXRlIGFzIMm1ZX0gZnJvbSAnLi9saWIvZGlyZWN0aXZlcy9hZHZhbmNlZC1zZWFyY2gtcm91dGVyLXN0YXRlLmRpcmVjdGl2ZSc7XG5leHBvcnQge05neFRhYmxlc1N0YXRlIGFzIMm1Y30gZnJvbSAnLi9saWIvcmVkdWNlcnMnOyJdfQ==
@@ -23,7 +23,7 @@ import { BsModalRef, BsModalService, ModalModule } from 'ngx-bootstrap/modal';
23
23
  import { ProgressbarModule } from 'ngx-bootstrap/progressbar';
24
24
  import { GroupByPipe, NgPipesModule } from 'ngx-pipes';
25
25
  import { template, at, cloneDeep, isEmpty } from 'lodash';
26
- import { Injectable, Directive, Optional, Input, Output, EventEmitter, Pipe, Component, ViewChild, ViewEncapsulation, ElementRef, ChangeDetectorRef, defineInjectable, inject, NgModule, CUSTOM_ELEMENTS_SCHEMA, HostListener, InjectionToken, Inject, Injector, ViewContainerRef, ChangeDetectionStrategy } from '@angular/core';
26
+ import { Injectable, Directive, Optional, Input, Output, EventEmitter, Component, ElementRef, ViewChild, ViewEncapsulation, Pipe, ChangeDetectorRef, NgModule, CUSTOM_ELEMENTS_SCHEMA, defineInjectable, inject, HostListener, InjectionToken, Inject, Injector, ViewContainerRef, ChangeDetectionStrategy } from '@angular/core';
27
27
  import { ActivatedRoute, Router, NavigationStart, NavigationEnd, RouterModule } from '@angular/router';
28
28
  import { createFeatureSelector, createSelector, select, Store } from '@ngrx/store';
29
29
  import { skip, first, filter } from 'rxjs/operators';
@@ -1449,6 +1449,7 @@ class AdvancedTableComponent {
1449
1449
  this.height = 800;
1450
1450
  this.showActions = true;
1451
1451
  this.autoLoad = true;
1452
+ this.customEvent = new EventEmitter();
1452
1453
  this.load = new EventEmitter();
1453
1454
  this.init = new EventEmitter();
1454
1455
  this.reload = new EventEmitter();
@@ -2026,7 +2027,7 @@ class AdvancedTableComponent {
2026
2027
  createdCell(cell, cellData, rowData, rowIndex, colIndex) {
2027
2028
  items.forEach((columnFormatter) => {
2028
2029
  /** @type {?} */
2029
- const formatter = self._columnFormatters[columnFormatter.formatter];
2030
+ const formatter = /** @type {?} */ ((self._columnFormatters[columnFormatter.formatter]));
2030
2031
  if (formatter && typeof formatter.afterRender === 'function') {
2031
2032
  formatter.afterRender.bind(column)(cell, cellData, rowData, rowIndex, colIndex);
2032
2033
  }
@@ -2043,12 +2044,14 @@ class AdvancedTableComponent {
2043
2044
  render: formatter.render.bind(column),
2044
2045
  });
2045
2046
  }
2046
- if (formatter && typeof formatter.afterRender === 'function') {
2047
+ /** @type {?} */
2048
+ const afterRenderFormatter = /** @type {?} */ ((formatter));
2049
+ if (afterRenderFormatter && typeof afterRenderFormatter.afterRender === 'function') {
2047
2050
  Object.assign(columnDefinition, {
2048
2051
  render: formatter.render.bind(column),
2049
2052
  });
2050
2053
  Object.assign(columnDefinition, {
2051
- createdCell: formatter.afterRender.bind(column),
2054
+ createdCell: afterRenderFormatter.afterRender.bind(column),
2052
2055
  });
2053
2056
  }
2054
2057
  }
@@ -2597,6 +2600,9 @@ class AdvancedTableComponent {
2597
2600
  });
2598
2601
  }
2599
2602
  if (this.selectable) ;
2603
+ if (this.dataTable) {
2604
+ this.dataTable.destroy();
2605
+ }
2600
2606
  // handle init.dt event and emit local event
2601
2607
  this.dataTable = tableElement.on('init.dt', (event) => {
2602
2608
  /** @type {?} */
@@ -2642,6 +2648,24 @@ class AdvancedTableComponent {
2642
2648
  infoSelector.classList.add('d-none');
2643
2649
  }
2644
2650
  }
2651
+ /** @type {?} */
2652
+ const onCustomEvent = (event) => {
2653
+ /** @type {?} */
2654
+ const target = /** @type {?} */ (event.currentTarget);
2655
+ /** @type {?} */
2656
+ const customEvent = target.dataset["event"] || 'event';
2657
+ /** @type {?} */
2658
+ const row = this.dataTable.row(target.closest('tr'));
2659
+ /** @type {?} */
2660
+ const data = row.data();
2661
+ this.customEvent.emit({
2662
+ name: customEvent,
2663
+ data,
2664
+ row: row.index()
2665
+ });
2666
+ };
2667
+ this.dataTable.off('click', '.dt-custom');
2668
+ this.dataTable.on('click', '.dt-custom', onCustomEvent);
2645
2669
  // show or hide pager
2646
2670
  if (this.showPaging) {
2647
2671
  this.showPaging = true;
@@ -3204,6 +3228,7 @@ AdvancedTableComponent.propDecorators = {
3204
3228
  height: [{ type: Input }],
3205
3229
  showActions: [{ type: Input }],
3206
3230
  autoLoad: [{ type: Input }],
3231
+ customEvent: [{ type: Output, args: ['customEvent',] }],
3207
3232
  load: [{ type: Output, args: ['load',] }],
3208
3233
  init: [{ type: Output, args: ['init',] }],
3209
3234
  reload: [{ type: Input, args: ['reload',] }],
@@ -5348,6 +5373,48 @@ AdvancedTableSearchComponent.propDecorators = {
5348
5373
  listChange: [{ type: Output, args: ['listChange',] }]
5349
5374
  };
5350
5375
 
5376
+ /**
5377
+ * @fileoverview added by tsickle
5378
+ * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
5379
+ */
5380
+ class CustomButtonFormatter extends ButtonFormatter {
5381
+ constructor() {
5382
+ super();
5383
+ }
5384
+ /**
5385
+ * @param {?} data
5386
+ * @param {?} type
5387
+ * @param {?} row
5388
+ * @param {?} meta
5389
+ * @return {?}
5390
+ */
5391
+ render(data, type, row, meta) {
5392
+ if (data == null || this.injector == null) {
5393
+ return '';
5394
+ }
5395
+ /** @type {?} */
5396
+ const formatOptions = Object.assign({
5397
+ buttonClass: 'btn btn-default',
5398
+ }, this.formatOptions);
5399
+ /** @type {?} */
5400
+ let buttonText;
5401
+ /** @type {?} */
5402
+ let buttonTitle = '';
5403
+ if (formatOptions.buttonText) {
5404
+ buttonText = this.injector.get(TranslateService).instant(formatOptions.buttonText);
5405
+ }
5406
+ else {
5407
+ buttonText = formatOptions.buttonContent;
5408
+ }
5409
+ if (formatOptions.buttonTitle) {
5410
+ buttonTitle = this.injector.get(TranslateService).instant(formatOptions.buttonTitle);
5411
+ }
5412
+ /** @type {?} */
5413
+ const customEvent = formatOptions.event || 'event';
5414
+ return `<button style="cursor:pointer" data-event="${customEvent}" class="dt-custom ${formatOptions.buttonClass}" title="${buttonTitle}">${buttonText}</button>`;
5415
+ }
5416
+ }
5417
+
5351
5418
  /**
5352
5419
  * @fileoverview added by tsickle
5353
5420
  * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
@@ -5367,6 +5434,7 @@ const FORMATTERS = {
5367
5434
  TrueFalseFormatter: new TrueFalseFormatter(),
5368
5435
  ActionButtonFormatter: new ActionButtonFormatter(),
5369
5436
  ActionSplitButtonFormatter: new ActionSplitButtonFormatter(),
5437
+ CustomButtonFormatter: new CustomButtonFormatter(),
5370
5438
  };
5371
5439
 
5372
5440
  /**
@@ -5873,7 +5941,7 @@ AdvancedAggregatorComponent.decorators = [
5873
5941
  { type: Component, args: [{
5874
5942
  // tslint:disable-next-line:component-selector
5875
5943
  selector: 'app-advanced-aggregator',
5876
- template: "<ng-container *ngIf=\"config && body\">\n <div class=\"w-100 text-center\" *ngIf=\"body && body.length === 0\">\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 <ng-container *ngIf=\"groups.length === 0\">\n <div class=\"row mt-4\">\n <app-advanced-aggregator-list [body]=\"body\" [config]=\"config\" (clickEvent)=\"onActionEvent($event)\" class=\"col-12\">\n </app-advanced-aggregator-list>\n <div *ngIf=\"config.aggregators && config.aggregators.length > 0\"\n class=\"footer-text text-dark font-weight-normal text-right font-sm mt-3 mr-2 w-100\">\n <div *ngFor=\"let aggregator of config.aggregators\">\n <span *ngIf=\"aggregator.label\"> {{ aggregator.label | translate }} </span>:\n <span class=\"font-weight-bold\"> {{ body | callAggregator: aggregators: aggregator.name }}\n </span>\n </div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"groups.length === 1\">\n <ng-container *ngFor=\"let group of body | groupBy: groups[0].name | keyvalue\">\n <div class=\"row mt-4\">\n <h4 class=\"col text-secondary\"> {{ groups[0].title | aggregatorListTitle: group.key }} </h4>\n <app-advanced-aggregator-list [body]=\"group.value\" [config]=\"config\" (clickEvent)=\"onActionEvent($event)\"\n class=\"col-12\">\n </app-advanced-aggregator-list>\n </div>\n\n <!-- Footer for the group -->\n <div *ngIf=\"config.aggregators && config.aggregators.length > 0\"\n class=\"footer-text text-dark font-weight-normal text-right font-sm mt-3 mr-2 w-100\">\n <div *ngFor=\"let aggregator of config.aggregators\">\n <span *ngIf=\"aggregator.label\"> {{ aggregator.label | translate }} </span>:\n <span class=\"font-weight-bold\"> {{ group.value | callAggregator: aggregators: aggregator.name }} </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"groups.length > 1\">\n <ng-container *ngFor=\"let group of body | groupBy: groups[0].name | keyvalue\">\n <div class=\"row mt-4\">\n <h4 class=\"col text-secondary\"> {{ groups[0].title | aggregatorListTitle: group.key }} </h4>\n <div *ngFor=\"let subgroup of group.value | groupBy: groups[1].name | keyvalue\" class=\"col-12 ml-4 pl-4\">\n <div class=\"row mt-4\">\n <h6 class=\"col-12 text-secondary\"> {{ groups[1].title | aggregatorListTitle: subgroup.key }} </h6>\n <app-advanced-aggregator-list [body]=\"subgroup.value\" [config]=\"config\" (clickEvent)=\"onActionEvent($event)\"\n class=\"col-12\">\n </app-advanced-aggregator-list>\n </div>\n\n <!-- Footer for each subgroup -->\n <div *ngIf=\"config.aggregators && config.aggregators.length > 0\"\n class=\"footer-text text-dark font-weight-normal text-right font-sm mt-3 mr-2 w-100\">\n <div *ngFor=\"let aggregator of config.aggregators\">\n <span *ngIf=\"aggregator.label\"> {{ aggregator.label | translate }} </span>:\n <span class=\"font-weight-bold\"> {{ subgroup.value | callAggregator: aggregators: aggregator.name }}\n </span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>",
5944
+ template: "<ng-container *ngIf=\"config && body\">\n <div class=\"w-100 text-center\" *ngIf=\"body && body.length === 0\">\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 <ng-container *ngIf=\"groups.length === 0\">\n <div class=\"row mt-4\">\n <app-advanced-aggregator-list [detailTemplate]=\"detailTemplate\" [body]=\"body\" [config]=\"config\" (clickEvent)=\"onActionEvent($event)\" class=\"col-12\">\n </app-advanced-aggregator-list>\n <div *ngIf=\"config.aggregators && config.aggregators.length > 0\"\n class=\"footer-text text-dark font-weight-normal text-right font-sm mt-3 mr-2 w-100\">\n <div *ngFor=\"let aggregator of config.aggregators\">\n <span *ngIf=\"aggregator.label\"> {{ aggregator.label | translate }} </span>:\n <span class=\"font-weight-bold\"> {{ body | callAggregator: aggregators: aggregator.name }}\n </span>\n </div>\n </div>\n </div>\n </ng-container>\n <ng-container *ngIf=\"groups.length === 1\">\n <ng-container *ngFor=\"let group of body | groupBy: groups[0].name | keyvalue\">\n <div class=\"row mt-4\">\n <h4 class=\"col text-secondary\"> {{ groups[0].title | aggregatorListTitle: group.key }} </h4>\n <app-advanced-aggregator-list [detailTemplate]=\"detailTemplate\" [body]=\"group.value\" [config]=\"config\" (clickEvent)=\"onActionEvent($event)\"\n class=\"col-12\">\n </app-advanced-aggregator-list>\n </div>\n\n <!-- Footer for the group -->\n <div *ngIf=\"config.aggregators && config.aggregators.length > 0\"\n class=\"footer-text text-dark font-weight-normal text-right font-sm mt-3 mr-2 w-100\">\n <div *ngFor=\"let aggregator of config.aggregators\">\n <span *ngIf=\"aggregator.label\"> {{ aggregator.label | translate }} </span>:\n <span class=\"font-weight-bold\"> {{ group.value | callAggregator: aggregators: aggregator.name }} </span>\n </div>\n </div>\n </ng-container>\n </ng-container>\n <ng-container *ngIf=\"groups.length > 1\">\n <ng-container *ngFor=\"let group of body | groupBy: groups[0].name | keyvalue\">\n <div class=\"row mt-4\">\n <h4 class=\"col text-secondary\"> {{ groups[0].title | aggregatorListTitle: group.key }} </h4>\n <div *ngFor=\"let subgroup of group.value | groupBy: groups[1].name | keyvalue\" class=\"col-12 ml-4 pl-4\">\n <div class=\"row mt-4\">\n <h6 class=\"col-12 text-secondary\"> {{ groups[1].title | aggregatorListTitle: subgroup.key }} </h6>\n <app-advanced-aggregator-list [detailTemplate]=\"detailTemplate\" [body]=\"subgroup.value\" [config]=\"config\" (clickEvent)=\"onActionEvent($event)\"\n class=\"col-12\">\n </app-advanced-aggregator-list>\n </div>\n\n <!-- Footer for each subgroup -->\n <div *ngIf=\"config.aggregators && config.aggregators.length > 0\"\n class=\"footer-text text-dark font-weight-normal text-right font-sm mt-3 mr-2 w-100\">\n <div *ngFor=\"let aggregator of config.aggregators\">\n <span *ngIf=\"aggregator.label\"> {{ aggregator.label | translate }} </span>:\n <span class=\"font-weight-bold\"> {{ subgroup.value | callAggregator: aggregators: aggregator.name }}\n </span>\n </div>\n </div>\n </div>\n </div>\n </ng-container>\n </ng-container>\n</ng-container>",
5877
5945
  changeDetection: ChangeDetectionStrategy.OnPush
5878
5946
  }] }
5879
5947
  ];
@@ -5891,6 +5959,7 @@ AdvancedAggregatorComponent.propDecorators = {
5891
5959
  selectedGroups$: [{ type: Input, args: ['selectedGroups',] }],
5892
5960
  filters$: [{ type: Input, args: ['filters',] }],
5893
5961
  searchExpression: [{ type: Input, args: ['searchExpression',] }],
5962
+ detailTemplate: [{ type: Input, args: ['detailTemplate',] }],
5894
5963
  eventHandler: [{ type: Output }]
5895
5964
  };
5896
5965
 
@@ -5942,7 +6011,7 @@ AdvancedAggregatorListComponent.decorators = [
5942
6011
  { type: Component, args: [{
5943
6012
  // tslint:disable-next-line:component-selector
5944
6013
  selector: 'app-advanced-aggregator-list',
5945
- template: "<div id=\"group-list\" class=\"flex-column\" *ngIf=\"config && config.columns\">\n <ul class=\"sis--list-group sis--list-group-header\">\n <li class=\"sis--list-group-item text-wrap\">\n <div class=\"d-flex justify-content-center align-items-center\" *ngIf=\"body && body.length > 0\">\n <div *ngIf=\"config.actions && config.actions.length > 0\" class=\"sis--list-group-item_sm_column\"></div>\n <div *ngFor=\"let column of config.columns; let i = index\" class=\"text-left\" [class]=\"config.columns[i].length\"\n [translate]=\"config.columns[i].type === 'action' ? '' : column.title\" [ngClass]=\"{\n 'd-none': config.columns[i].hidden\n }\"></div>\n </div>\n </li>\n </ul>\n\n <!-- The list of entries -->\n <ul class=\"sis--list-group sis--list-group-body\" *ngIf=\"body && body.length > 0\">\n <li class=\"sis--list-group-item text-wrap\" *ngFor=\"let entry of body | orderBy: config.orderBy\">\n <div class=\"d-flex justify-content-center align-items-center list-color\">\n <!-- The list of actions -->\n <div *ngIf=\"config.actions && config.actions.length > 0\" class=\"sis--list-group-item_sm_column text-left pr-0\">\n <button *ngFor=\"let action of config.actions\" (click)=\"callCallback(action.identifier, entry)\"\n [title]=\"(action.title ? action.title : '') | translate \" class=\"btn btn-default px-0\">\n <i class=\"\" [class]=\"'fas text-indigo ml-2 ' + 'fa-' + action.icon\"></i>\n </button>\n <span class=\"px-0\">\n <i class=\"fa fa-fw\">&nbsp;</i>\n </span>\n\n </div>\n <!-- The list of data -->\n <div *ngFor=\"let column of config.columns; let i=index\" [class]=\"config.columns[i].length\" class=\"text-left\"\n [ngClass]=\"{\n 'text-truncate': config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate,\n 'd-none': config.columns[i].hidden,\n 'd-md-block': !config.columns[i].hidden\n }\"\n [title]=\"config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate ? entry[column.name] : ''\">\n <span class=\"text-secondary\"\n *ngIf=\"!config.columns[i].hasOwnProperty('type') || (config.columns[i].hasOwnProperty('type') && config.columns[i].type === 'text')\"\n [ngClass]=\"{\n 'font-xs': config.columns[i].variant !== 'primary',\n 'text-body': config.columns[i].variant === 'primary',\n 'text-success': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && entry[config.columns[i].condition],\n 'text-danger': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && !entry[config.columns[i].condition],\n 'font-lg': config.columns[i].variant === 'redGreen' && entry[column.name] && entry[column.name].length > 3,\n 'font-2xl': config.columns[i].variant === 'redGreen' && entry[column.name] && entry[column.name].length <= 3\n }\">\n {{entry[column.name] || '-'}}\n </span>\n\n <span *ngIf=\"config.columns[i].type === 'boolean'\">\n <i class=\"fa font-lg\" [ngClass]=\"{\n 'fa-check text-success': !!entry[column.name],\n 'fa-times text-danger': !!entry[column.name] === false && config.columns[i].variant !== 'checkOrDash'\n }\"></i>\n <span\n *ngIf=\"entry[column.name].toString() !== config.columns[i].trueValue && config.columns[i].variant === 'checkOrDash'\"\n class=\"text-secondary font-xs\">-</span>\n </span>\n </div>\n </div>\n <div *ngIf=\"entry && entry.subitems\">\n <div *ngFor=\"let subitem of entry.subitems\" class=\"d-flex justify-content-center align-items-center list-color\">\n <div *ngIf=\"config.actions && config.actions.length > 0\"\n class=\"sis--list-group-item_sm_column text-left pr-0\">\n <span class=\"px-0\">\n <i class=\"fa fa-fw\">&nbsp;</i>\n </span>\n <button *ngFor=\"let action of config.actions\" (click)=\"callCallback(action.identifier, subitem)\"\n [title]=\"(action.title ? action.title : '') | translate \" class=\"btn btn-default px-0\">\n <i *ngIf=\"action.type === 'edit'\" class=\"fas fa-edit text-indigo\"></i>\n </button>\n </div>\n <div class=\"text-left\"></div>\n <div *ngFor=\"let column of config.columns; let i=index\" [class]=\"config.columns[i].length\" class=\"text-left\"\n [ngClass]=\"{\n 'text-truncate': config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate,\n 'd-none': config.columns[i].hidden,\n 'd-md-block': !config.columns[i].hidden\n }\"\n [title]=\"config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate ? entry[column.name] : ''\">\n <span class=\"text-secondary\"\n *ngIf=\"!config.columns[i].hasOwnProperty('type') || (config.columns[i].hasOwnProperty('type') && config.columns[i].type === 'text')\"\n [ngClass]=\"{\n 'font-xs': config.columns[i].variant !== 'primary',\n 'text-body': config.columns[i].variant === 'primary',\n 'text-success': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && subitem[config.columns[i].condition],\n 'text-danger': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && !subitem[config.columns[i].condition],\n 'font-lg': config.columns[i].variant === 'redGreen' && subitem[column.name] && subitem[column.name].length > 3,\n 'font-2xl': config.columns[i].variant === 'redGreen' && subitem[column.name] && subitem[column.name].length <= 3\n }\">\n {{subitem[column.name] || '-'}}\n </span>\n <span *ngIf=\"config.columns[i].type === 'boolean'\">\n <i class=\"fa font-lg\" [ngClass]=\"{\n 'fa-check text-success': !!subitem[column.name],\n 'fa-times text-danger': !!subitem[column.name] === false && config.columns[i].variant !== 'checkOrDash'\n }\"></i>\n <span\n *ngIf=\"subitem[column.name].toString() !== config.columns[i].trueValue && config.columns[i].variant === 'checkOrDash'\"\n class=\"text-secondary font-xs\">-</span>\n </span>\n </div>\n </div>\n </div>\n </li>\n </ul>\n</div>"
6014
+ template: "<div id=\"group-list\" class=\"flex-column\" *ngIf=\"config && config.columns\">\n <ul class=\"sis--list-group sis--list-group-header\">\n <li class=\"sis--list-group-item text-wrap\">\n <div class=\"d-flex justify-content-center align-items-center\" *ngIf=\"body && body.length > 0\">\n <div *ngIf=\"config.actions && config.actions.length > 0\" class=\"sis--list-group-item_sm_column\"></div>\n <div *ngFor=\"let column of config.columns; let i = index\" class=\"text-left\" [class]=\"config.columns[i].length\"\n [translate]=\"config.columns[i].type === 'action' ? '' : column.title\" [ngClass]=\"{\n 'd-none': config.columns[i].hidden\n }\"></div>\n </div>\n </li>\n </ul>\n\n <!-- The list of entries -->\n <ul class=\"sis--list-group sis--list-group-body\" *ngIf=\"body && body.length > 0\">\n <li class=\"sis--list-group-item text-wrap\" *ngFor=\"let entry of body | orderBy: config.orderBy\">\n <div class=\"d-flex justify-content-center align-items-center list-color\">\n <!-- The list of actions -->\n <div *ngIf=\"config.actions && config.actions.length > 0\" class=\"sis--list-group-item_sm_column text-left pr-0\">\n <button *ngFor=\"let action of config.actions\" (click)=\"callCallback(action.identifier, entry)\"\n [title]=\"(action.title ? action.title : '') | translate \" class=\"btn btn-default px-0\">\n <i class=\"\" [class]=\"'fas text-indigo ml-2 ' + 'fa-' + action.icon\"></i>\n </button>\n <span class=\"px-0\">\n <i class=\"fa fa-fw\">&nbsp;</i>\n </span>\n\n </div>\n <!-- The list of data -->\n <div *ngFor=\"let column of config.columns; let i=index\" [class]=\"config.columns[i].length\" class=\"text-left\"\n [ngClass]=\"{\n 'text-truncate': config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate,\n 'd-none': config.columns[i].hidden,\n 'd-md-block': !config.columns[i].hidden\n }\"\n [title]=\"config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate ? entry[column.name] : ''\">\n <span class=\"text-secondary\"\n *ngIf=\"!config.columns[i].hasOwnProperty('type') || (config.columns[i].hasOwnProperty('type') && config.columns[i].type === 'text')\"\n [ngClass]=\"{\n 'font-xs': config.columns[i].variant !== 'primary',\n 'text-body': config.columns[i].variant === 'primary',\n 'text-success': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && entry[config.columns[i].condition],\n 'text-danger': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && !entry[config.columns[i].condition],\n 'font-lg': config.columns[i].variant === 'redGreen' && entry[column.name] && entry[column.name].length > 3,\n 'font-2xl': config.columns[i].variant === 'redGreen' && entry[column.name] && entry[column.name].length <= 3\n }\">\n {{entry[column.name] || '-'}}\n </span>\n\n <span *ngIf=\"config.columns[i].type === 'boolean'\">\n <i class=\"fa font-lg\" [ngClass]=\"{\n 'fa-check text-success': !!entry[column.name],\n 'fa-times text-danger': !!entry[column.name] === false && config.columns[i].variant !== 'checkOrDash'\n }\"></i>\n <span\n *ngIf=\"entry[column.name].toString() !== config.columns[i].trueValue && config.columns[i].variant === 'checkOrDash'\"\n class=\"text-secondary font-xs\">-</span>\n </span>\n </div>\n </div>\n <ng-container *ngIf=\"detailTemplate\">\n <ng-container *ngTemplateOutlet=\"detailTemplate; context: { row: entry }\"></ng-container>\n </ng-container>\n <div *ngIf=\"entry && entry.subitems\">\n <ng-container *ngFor=\"let subitem of entry.subitems\">\n <div class=\"d-flex d-debug justify-content-center align-items-center list-color\">\n <div *ngIf=\"config.actions && config.actions.length > 0\" class=\"sis--list-group-item_sm_column text-left pr-0\">\n <span class=\"px-0\">\n <i class=\"fa fa-fw\">&nbsp;</i>\n </span>\n <button *ngFor=\"let action of config.actions\" (click)=\"callCallback(action.identifier, subitem)\"\n [title]=\"(action.title ? action.title : '') | translate \" class=\"btn btn-default px-0\">\n <i *ngIf=\"action.type === 'edit'\" class=\"fas fa-edit text-indigo\"></i>\n </button>\n </div>\n <div class=\"text-left\"></div>\n <div *ngFor=\"let column of config.columns; let i=index\" [class]=\"config.columns[i].length\" class=\"text-left\"\n [ngClass]=\"{\n 'text-truncate': config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate,\n 'd-none': config.columns[i].hidden,\n 'd-md-block': !config.columns[i].hidden\n }\"\n [title]=\"config.columns[i].hasOwnProperty('truncate') && config.columns[i].truncate ? entry[column.name] : ''\">\n <span class=\"text-secondary\"\n *ngIf=\"!config.columns[i].hasOwnProperty('type') || (config.columns[i].hasOwnProperty('type') && config.columns[i].type === 'text')\"\n [ngClass]=\"{\n 'font-xs': config.columns[i].variant !== 'primary',\n 'text-body': config.columns[i].variant === 'primary',\n 'text-success': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && subitem[config.columns[i].condition],\n 'text-danger': config.columns[i].variant === 'redGreen' && config.columns[i].hasOwnProperty('condition') && !subitem[config.columns[i].condition],\n 'font-lg': config.columns[i].variant === 'redGreen' && subitem[column.name] && subitem[column.name].length > 3,\n 'font-2xl': config.columns[i].variant === 'redGreen' && subitem[column.name] && subitem[column.name].length <= 3\n }\">\n {{subitem[column.name] || '-'}}\n </span>\n <span *ngIf=\"config.columns[i].type === 'boolean'\">\n <i class=\"fa font-lg\" [ngClass]=\"{\n 'fa-check text-success': !!subitem[column.name],\n 'fa-times text-danger': !!subitem[column.name] === false && config.columns[i].variant !== 'checkOrDash'\n }\"></i>\n <span\n *ngIf=\"subitem[column.name].toString() !== config.columns[i].trueValue && config.columns[i].variant === 'checkOrDash'\"\n class=\"text-secondary font-xs\">-</span>\n </span>\n </div>\n </div>\n </ng-container>\n </div>\n </li>\n </ul>\n</div>"
5946
6015
  }] }
5947
6016
  ];
5948
6017
  /** @nocollapse */
@@ -5952,6 +6021,7 @@ AdvancedAggregatorListComponent.ctorParameters = () => [
5952
6021
  AdvancedAggregatorListComponent.propDecorators = {
5953
6022
  config: [{ type: Input }],
5954
6023
  body: [{ type: Input }],
6024
+ detailTemplate: [{ type: Input, args: ['detailTemplate',] }],
5955
6025
  clickEvent: [{ type: Output }]
5956
6026
  };
5957
6027
 
@@ -6958,6 +7028,6 @@ TablesModule.ctorParameters = () => [
6958
7028
  * @suppress {checkTypes,extraRequire,uselessCode} checked by tsc
6959
7029
  */
6960
7030
 
6961
- export { AdvancedListComponent, AdvancedRowActionComponent, AdvancedSearchFormComponent, AdvancedSelectComponent, AdvancedSelectService, AdvancedTableConfigurationResolver, AdvancedSearchConfigurationResolver, AdvancedColumnFormatter, NestedPropertyFormatter, ButtonFormatter, LinkFormatter, ActionLinkFormatter, ActionButtonFormatter, ActionSplitButtonFormatter, SelectRowFormatter, TemplateFormatter, TrueFalseFormatter, TranslationFormatter, DateTimeFormatter, NgClassFormatter, LanguageFormatter, COLUMN_FORMATTERS, ExportLimitExceededError, AdvancedTableConfiguration, AdvancedTableComponent, AdvancedTableSettingsComponent, AdvancedTableSearchBaseComponent, AdvancedTableSearchComponent, FORMATTERS, AdvancedFilterValueProvider, AdvancedTableModalBaseTemplate, AdvancedTableModalBaseComponent, SimpleHeaderToolsComponent, TableSimpleHeaderComponent, AdvancedTableNotNullError, AdvancedTableEditorDirective, MAX_EXPORT_ITEMS, BtnExpDirective, AdvancedAggregatorComponent, AdvancedAggregatorListComponent, AddItemsComponent, AdvancedAggregatorPipe, ParseTitlePipe, AdvancedAggregatorService, TablesModule, ActivatedTableService, ColumnSelectorService, ColumnSelectorComponent, tableReducer, initialState, tableInitialState, tableReducers, featureName, getTablesState, selectTable, AdvancedSearchState as ɵa, AdvancedTableState as ɵc, AdvancedSearchRouterState as ɵd };
7031
+ export { AdvancedListComponent, AdvancedRowActionComponent, AdvancedSearchFormComponent, AdvancedSelectComponent, AdvancedSelectService, AdvancedTableConfigurationResolver, AdvancedSearchConfigurationResolver, AdvancedColumnFormatter, NestedPropertyFormatter, ButtonFormatter, LinkFormatter, ActionLinkFormatter, ActionButtonFormatter, ActionSplitButtonFormatter, SelectRowFormatter, TemplateFormatter, TrueFalseFormatter, TranslationFormatter, DateTimeFormatter, NgClassFormatter, LanguageFormatter, COLUMN_FORMATTERS, ExportLimitExceededError, AdvancedTableConfiguration, AdvancedTableComponent, AdvancedTableSettingsComponent, AdvancedTableSearchBaseComponent, AdvancedTableSearchComponent, FORMATTERS, AdvancedFilterValueProvider, AdvancedTableModalBaseTemplate, AdvancedTableModalBaseComponent, SimpleHeaderToolsComponent, TableSimpleHeaderComponent, AdvancedTableNotNullError, AdvancedTableEditorDirective, MAX_EXPORT_ITEMS, BtnExpDirective, AdvancedAggregatorComponent, AdvancedAggregatorListComponent, AddItemsComponent, AdvancedAggregatorPipe, ParseTitlePipe, AdvancedAggregatorService, TablesModule, ActivatedTableService, ColumnSelectorService, ColumnSelectorComponent, tableReducer, initialState, tableInitialState, tableReducers, featureName, getTablesState, selectTable, CustomButtonFormatter as ɵa, AdvancedSearchState as ɵb, AdvancedTableState as ɵd, AdvancedSearchRouterState as ɵe };
6962
7032
 
6963
7033
  //# sourceMappingURL=universis-ngx-tables.js.map