@firestitch/system 12.1.0 → 12.1.3

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 (103) hide show
  1. package/app/components/api-log/api-log.component.d.ts +13 -13
  2. package/app/components/api-log/index.d.ts +1 -1
  3. package/app/components/api-logs/api-logs.component.d.ts +21 -21
  4. package/app/components/api-logs/index.d.ts +1 -1
  5. package/app/components/cron/cron.component.d.ts +24 -24
  6. package/app/components/cron/index.d.ts +1 -1
  7. package/app/components/cron-log/cron-log.component.d.ts +12 -12
  8. package/app/components/cron-log/index.d.ts +1 -1
  9. package/app/components/crons/crons.component.d.ts +36 -36
  10. package/app/components/crons/index.d.ts +1 -1
  11. package/app/components/dashboard/dashboard.component.d.ts +28 -28
  12. package/app/components/dashboard/index.d.ts +1 -1
  13. package/app/components/file-manager/file-manager.component.d.ts +17 -17
  14. package/app/components/file-manager/index.d.ts +1 -1
  15. package/app/components/info/index.d.ts +1 -1
  16. package/app/components/info/info.component.d.ts +11 -11
  17. package/app/components/process/index.d.ts +1 -1
  18. package/app/components/process/process.component.d.ts +16 -16
  19. package/app/components/processes/index.d.ts +1 -1
  20. package/app/components/processes/processes.component.d.ts +34 -34
  21. package/app/components/server-log/index.d.ts +1 -1
  22. package/app/components/server-log/server-log.component.d.ts +10 -10
  23. package/app/components/server-logs/index.d.ts +1 -1
  24. package/app/components/server-logs/server-logs.component.d.ts +21 -21
  25. package/app/components/settings/index.d.ts +1 -1
  26. package/app/components/settings/settings.component.d.ts +30 -30
  27. package/app/components/upgrade-logs/index.d.ts +1 -1
  28. package/app/components/upgrade-logs/upgrade-logs.component.d.ts +17 -17
  29. package/app/consts/api-log-states.const.d.ts +5 -5
  30. package/app/consts/cron-log-states.const.d.ts +6 -6
  31. package/app/consts/cron-states.const.d.ts +5 -5
  32. package/app/consts/index.d.ts +3 -3
  33. package/app/consts/process-states.const.d.ts +5 -5
  34. package/app/enums/api-log-state.enum.d.ts +5 -5
  35. package/app/enums/cron-log-state.enum.d.ts +13 -13
  36. package/app/enums/cron-state.enum.d.ts +7 -7
  37. package/app/enums/index.d.ts +5 -5
  38. package/app/enums/process-state.enum.d.ts +8 -8
  39. package/app/enums/setting-interface-type.enum.d.ts +14 -13
  40. package/app/fs-system.module.d.ts +47 -46
  41. package/app/helpers/index-name-value.d.ts +1 -1
  42. package/app/injectors/system-config.injector.d.ts +2 -2
  43. package/app/interfaces/dashboard-action.d.ts +5 -5
  44. package/app/interfaces/index.d.ts +3 -3
  45. package/app/interfaces/process-action.d.ts +6 -6
  46. package/app/interfaces/system-config.d.ts +2 -2
  47. package/app/pipes/key-name-value.pipe.d.ts +8 -8
  48. package/bundles/firestitch-system.umd.js +1519 -1514
  49. package/bundles/firestitch-system.umd.js.map +1 -1
  50. package/esm2015/app/components/api-log/api-log.component.js +38 -38
  51. package/esm2015/app/components/api-log/index.js +2 -2
  52. package/esm2015/app/components/api-logs/api-logs.component.js +72 -72
  53. package/esm2015/app/components/api-logs/index.js +2 -2
  54. package/esm2015/app/components/cron/cron.component.js +103 -103
  55. package/esm2015/app/components/cron/index.js +2 -2
  56. package/esm2015/app/components/cron-log/cron-log.component.js +41 -41
  57. package/esm2015/app/components/cron-log/index.js +2 -2
  58. package/esm2015/app/components/crons/crons.component.js +188 -188
  59. package/esm2015/app/components/crons/index.js +2 -2
  60. package/esm2015/app/components/dashboard/dashboard.component.js +91 -91
  61. package/esm2015/app/components/dashboard/index.js +2 -2
  62. package/esm2015/app/components/file-manager/file-manager.component.js +54 -54
  63. package/esm2015/app/components/file-manager/index.js +2 -2
  64. package/esm2015/app/components/info/index.js +2 -2
  65. package/esm2015/app/components/info/info.component.js +36 -36
  66. package/esm2015/app/components/process/index.js +2 -2
  67. package/esm2015/app/components/process/process.component.js +49 -49
  68. package/esm2015/app/components/processes/index.js +2 -2
  69. package/esm2015/app/components/processes/processes.component.js +164 -164
  70. package/esm2015/app/components/server-log/index.js +2 -2
  71. package/esm2015/app/components/server-log/server-log.component.js +42 -42
  72. package/esm2015/app/components/server-logs/index.js +2 -2
  73. package/esm2015/app/components/server-logs/server-logs.component.js +57 -57
  74. package/esm2015/app/components/settings/index.js +2 -2
  75. package/esm2015/app/components/settings/settings.component.js +134 -132
  76. package/esm2015/app/components/upgrade-logs/index.js +2 -2
  77. package/esm2015/app/components/upgrade-logs/upgrade-logs.component.js +48 -48
  78. package/esm2015/app/consts/api-log-states.const.js +7 -7
  79. package/esm2015/app/consts/cron-log-states.const.js +14 -14
  80. package/esm2015/app/consts/cron-states.const.js +9 -9
  81. package/esm2015/app/consts/index.js +4 -4
  82. package/esm2015/app/consts/process-states.const.js +10 -10
  83. package/esm2015/app/enums/api-log-state.enum.js +7 -7
  84. package/esm2015/app/enums/cron-log-state.enum.js +14 -14
  85. package/esm2015/app/enums/cron-state.enum.js +9 -9
  86. package/esm2015/app/enums/index.js +6 -6
  87. package/esm2015/app/enums/process-state.enum.js +10 -10
  88. package/esm2015/app/enums/setting-interface-type.enum.js +16 -15
  89. package/esm2015/app/fs-system.module.js +181 -177
  90. package/esm2015/app/helpers/index-name-value.js +8 -8
  91. package/esm2015/app/injectors/system-config.injector.js +3 -3
  92. package/esm2015/app/interfaces/dashboard-action.js +2 -2
  93. package/esm2015/app/interfaces/index.js +4 -4
  94. package/esm2015/app/interfaces/process-action.js +2 -2
  95. package/esm2015/app/interfaces/system-config.js +2 -2
  96. package/esm2015/app/pipes/key-name-value.pipe.js +21 -21
  97. package/esm2015/firestitch-system.js +4 -4
  98. package/esm2015/public_api.js +19 -19
  99. package/fesm2015/firestitch-system.js +1150 -1144
  100. package/fesm2015/firestitch-system.js.map +1 -1
  101. package/firestitch-system.d.ts +5 -5
  102. package/package.json +1 -1
  103. package/public_api.d.ts +20 -20
@@ -2,13 +2,13 @@ import * as i0 from '@angular/core';
2
2
  import { InjectionToken, Component, ChangeDetectionStrategy, Input, Inject, ViewChild, Pipe, Injectable, EventEmitter, Output, NgModule } from '@angular/core';
3
3
  import * as i9 from '@angular/common';
4
4
  import { CommonModule } from '@angular/common';
5
- import * as i15 from '@angular/forms';
5
+ import * as i17 from '@angular/forms';
6
6
  import { FormsModule } from '@angular/forms';
7
7
  import * as i7 from '@angular/material/form-field';
8
8
  import { MatFormFieldModule } from '@angular/material/form-field';
9
9
  import * as i4$3 from '@angular/material/expansion';
10
10
  import { MatExpansionModule } from '@angular/material/expansion';
11
- import * as i14 from '@angular/material/input';
11
+ import * as i16 from '@angular/material/input';
12
12
  import { MatInputModule } from '@angular/material/input';
13
13
  import * as i8 from '@angular/material/select';
14
14
  import { MatSelectModule } from '@angular/material/select';
@@ -35,10 +35,12 @@ import * as i2$2 from '@firestitch/dialog';
35
35
  import { FsDialogModule } from '@firestitch/dialog';
36
36
  import * as i2$1 from '@firestitch/label';
37
37
  import { FsLabelModule } from '@firestitch/label';
38
- import * as i11$1 from '@firestitch/file';
38
+ import * as i12 from '@firestitch/file';
39
39
  import { FsFileModule } from '@firestitch/file';
40
40
  import * as i4$1 from '@firestitch/menu';
41
41
  import { FsMenuModule } from '@firestitch/menu';
42
+ import * as i11$1 from '@firestitch/colorpicker';
43
+ import { FsColorPickerModule } from '@firestitch/colorpicker';
42
44
  import * as i1 from '@firestitch/message';
43
45
  import * as i2 from '@firestitch/build';
44
46
  import { takeUntil, map, tap } from 'rxjs/operators';
@@ -58,1199 +60,1203 @@ import * as i9$1 from '@angular/material/core';
58
60
 
59
61
  const FS_SYSTEM_CONFIG = new InjectionToken('fs-system-config');
60
62
 
61
- class DashboardComponent {
62
- constructor(_message, _cdRef, _buildService) {
63
- this._message = _message;
64
- this._cdRef = _cdRef;
65
- this._buildService = _buildService;
66
- this.buttonActions = [];
67
- this.menuActions = [];
68
- this._destroy$ = new Subject();
69
- this.actions = [];
70
- }
71
- ngOnInit() {
72
- this._load();
73
- this.buttonActions = this.actions.filter(item => { return !item.menu; });
74
- this.menuActions = this.actions.filter(item => { return item.menu; });
75
- this.build = this._buildService.build;
76
- this._buildService.buildChange$
77
- .pipe(takeUntil(this._destroy$))
78
- .subscribe((build) => {
79
- this.build = build;
80
- this._cdRef.markForCheck();
81
- });
82
- }
83
- _load() {
84
- this.load()
85
- .subscribe((dashboard) => {
86
- this.dashboard = dashboard;
87
- this.dashboard.cronRanAttention = !dashboard.cronRan ||
88
- differenceInMinutes(new Date(), new Date(dashboard.cronRan)) > 15;
89
- this._cdRef.markForCheck();
90
- });
91
- }
92
- ngOnDestroy() {
93
- this._destroy$.next();
94
- this._destroy$.complete();
95
- }
96
- actionClick(action) {
97
- action.click();
98
- }
99
- initClick() {
100
- this.init()
101
- .subscribe(() => {
102
- this._message.success('Successfully initialized the system');
103
- });
104
- }
105
- upgradeClick() {
106
- this.upgrade()
107
- .subscribe(() => {
108
- this._load();
109
- this._message.success('Successfully upgraded the system');
110
- });
111
- }
112
- }
113
- DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.FsMessage }, { token: i0.ChangeDetectorRef }, { token: i2.FsBuildService }], target: i0.ɵɵFactoryTarget.Component });
114
- DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DashboardComponent, selector: "fs-system-dashboard", inputs: { init: "init", upgrade: "upgrade", load: "load", actions: "actions" }, ngImport: i0, template: "<div *fsSkeleton=\"dashboard\">\n\n <div class=\"h2-container\">\n\n <div class=\"actions\">\n <h2>Actions</h2>\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxLayout.xs=\"column\">\n <button mat-raised-button (click)=\"upgradeClick()\">Run Upgrades</button>\n <button mat-raised-button (click)=\"initClick()\">Init System</button>\n\n <button\n *ngFor=\"let action of buttonActions\"\n mat-raised-button\n (click)=\"actionClick(action)\">\n {{action.label}}\n </button>\n\n <ng-container *ngIf=\"menuActions.length\">\n\n <fs-menu buttonClass=\"mat-raised-button menu-button\">\n <ng-template\n *ngFor=\"let action of menuActions\"\n fs-menu-item\n (click)=\"actionClick(action)\">\n {{action.label}}\n </ng-template>\n </fs-menu>\n\n\n </ng-container>\n\n </div>\n </div>\n </div>\n\n <div\n fxLayout=\"row wrap\"\n fxLayout.xs=\"column\"\n fxLayoutGap.xs=\"0px\"\n fxLayoutAlign=\"start start\"\n fxLayoutGap=\"50px\">\n\n <div>\n <h2>Server</h2>\n\n <fs-label-field>\n <fs-label>Date/Time</fs-label>\n {{dashboard.serverTime | fsDateFormat: 'date-time'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Timezone</fs-label>\n {{dashboard.serverTimezone}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Hostname</fs-label>\n {{dashboard.serverHostname}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Directory</fs-label>\n {{dashboard.appDirectory}}\n </fs-label-field>\n </div>\n\n <div>\n <h2>System</h2>\n <fs-label-field>\n <fs-label>Mode</fs-label>\n {{dashboard.appMode}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Notification Recipients</fs-label>\n {{dashboard.notifyRecipients.join(', ')}}\n </fs-label-field>\n </div>\n\n <div>\n <h2>Database</h2>\n\n <fs-label-field>\n <fs-label>Name</fs-label>\n {{dashboard.databaseName}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Date/Time</fs-label>\n {{dashboard.databaseTime | fsDateFormat: 'date-time'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Timezone</fs-label>\n {{dashboard.databaseTimezone}}\n </fs-label-field>\n </div>\n\n <div *ngIf=\"build || dashboard.upgrades.length\">\n <h2>Build</h2>\n\n <ng-container *ngIf=\"build\">\n <fs-label-field>\n <fs-label>Version</fs-label>\n {{build.version}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>Date</fs-label>\n {{ build.date | fsDateFormat: 'date-time' }}\n </fs-label-field>\n </ng-container>\n\n <fs-label-field *ngIf=\"dashboard.upgrades.length\">\n <fs-label>Pending Upgrades</fs-label>\n <span class=\"attention\" [ngClass]=\"{ 'needs-attention': !!dashboard.upgrades.length }\">\n {{dashboard.upgrades.length}}\n <mat-icon\n [matTooltip]=\"dashboard.upgrades.join('\\n')\"\n matTooltipClass=\"tooltip-pending-upgrades\"\n >\n warning\n </mat-icon>\n </span>\n </fs-label-field>\n </div>\n\n <div>\n <h2>Cron</h2>\n\n <fs-label-field>\n <fs-label>Last Ran</fs-label>\n <span class=\"attention\" [ngClass]=\"{ 'needs-attention': dashboard.cronRanAttention }\">\n <span *ngIf=\"!dashboard.cronRan\">Never</span>\n <span *ngIf=\"dashboard.cronRan\">{{dashboard.cronRan | fsDateFormat: 'date-time'}}</span>\n <mat-icon>warning</mat-icon>\n </span>\n </fs-label-field>\n </div>\n </div>\n</div>\n", styles: [".actions{margin-bottom:1.25em}table td{padding:3px}.attention{display:flex;align-items:center}.attention mat-icon{display:none;margin-left:2px}.attention.needs-attention{color:#c00}.attention.needs-attention mat-icon{display:inline}::ng-deep .tooltip-pending-upgrades{white-space:pre-line}@media (max-width: 600px){:host ::ng-deep .menu-button{width:100%;border-radius:4px}}@media (min-width: 600px){:host ::ng-deep .menu-button{box-shadow:none}}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4$1.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass"], outputs: ["opened", "closed"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i6$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i6$1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]", inputs: ["fsClass", "class", "id", "label", "hidden", "groupHidden", "dismissAfterClick", "link", "target", "queryParams"], outputs: ["click"] }, { type: i6$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "fsDateFormat": i4$2.FsDateFormatPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
115
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DashboardComponent, decorators: [{
116
- type: Component,
117
- args: [{
118
- selector: 'fs-system-dashboard',
119
- templateUrl: 'dashboard.component.html',
120
- styleUrls: ['dashboard.component.scss'],
121
- changeDetection: ChangeDetectionStrategy.OnPush,
122
- }]
123
- }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i0.ChangeDetectorRef }, { type: i2.FsBuildService }]; }, propDecorators: { init: [{
124
- type: Input
125
- }], upgrade: [{
126
- type: Input
127
- }], load: [{
128
- type: Input
129
- }], actions: [{
130
- type: Input
63
+ class DashboardComponent {
64
+ constructor(_message, _cdRef, _buildService) {
65
+ this._message = _message;
66
+ this._cdRef = _cdRef;
67
+ this._buildService = _buildService;
68
+ this.buttonActions = [];
69
+ this.menuActions = [];
70
+ this._destroy$ = new Subject();
71
+ this.actions = [];
72
+ }
73
+ ngOnInit() {
74
+ this._load();
75
+ this.buttonActions = this.actions.filter(item => { return !item.menu; });
76
+ this.menuActions = this.actions.filter(item => { return item.menu; });
77
+ this.build = this._buildService.build;
78
+ this._buildService.buildChange$
79
+ .pipe(takeUntil(this._destroy$))
80
+ .subscribe((build) => {
81
+ this.build = build;
82
+ this._cdRef.markForCheck();
83
+ });
84
+ }
85
+ _load() {
86
+ this.load()
87
+ .subscribe((dashboard) => {
88
+ this.dashboard = dashboard;
89
+ this.dashboard.cronRanAttention = !dashboard.cronRan ||
90
+ differenceInMinutes(new Date(), new Date(dashboard.cronRan)) > 15;
91
+ this._cdRef.markForCheck();
92
+ });
93
+ }
94
+ ngOnDestroy() {
95
+ this._destroy$.next();
96
+ this._destroy$.complete();
97
+ }
98
+ actionClick(action) {
99
+ action.click();
100
+ }
101
+ initClick() {
102
+ this.init()
103
+ .subscribe(() => {
104
+ this._message.success('Successfully initialized the system');
105
+ });
106
+ }
107
+ upgradeClick() {
108
+ this.upgrade()
109
+ .subscribe(() => {
110
+ this._load();
111
+ this._message.success('Successfully upgraded the system');
112
+ });
113
+ }
114
+ }
115
+ DashboardComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DashboardComponent, deps: [{ token: i1.FsMessage }, { token: i0.ChangeDetectorRef }, { token: i2.FsBuildService }], target: i0.ɵɵFactoryTarget.Component });
116
+ DashboardComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: DashboardComponent, selector: "fs-system-dashboard", inputs: { init: "init", upgrade: "upgrade", load: "load", actions: "actions" }, ngImport: i0, template: "<div *fsSkeleton=\"dashboard\">\r\n\r\n <div class=\"h2-container\">\r\n\r\n <div class=\"actions\">\r\n <h2>Actions</h2>\r\n <div fxLayout=\"row\" fxLayoutGap=\"5px\" fxLayout.xs=\"column\">\r\n <button mat-raised-button (click)=\"upgradeClick()\">Run Upgrades</button>\r\n <button mat-raised-button (click)=\"initClick()\">Init System</button>\r\n\r\n <button\r\n *ngFor=\"let action of buttonActions\"\r\n mat-raised-button\r\n (click)=\"actionClick(action)\">\r\n {{action.label}}\r\n </button>\r\n\r\n <ng-container *ngIf=\"menuActions.length\">\r\n\r\n <fs-menu buttonClass=\"mat-raised-button menu-button\">\r\n <ng-template\r\n *ngFor=\"let action of menuActions\"\r\n fs-menu-item\r\n (click)=\"actionClick(action)\">\r\n {{action.label}}\r\n </ng-template>\r\n </fs-menu>\r\n\r\n\r\n </ng-container>\r\n\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div\r\n fxLayout=\"row wrap\"\r\n fxLayout.xs=\"column\"\r\n fxLayoutGap.xs=\"0px\"\r\n fxLayoutAlign=\"start start\"\r\n fxLayoutGap=\"50px\">\r\n\r\n <div>\r\n <h2>Server</h2>\r\n\r\n <fs-label-field>\r\n <fs-label>Date/Time</fs-label>\r\n {{dashboard.serverTime | fsDateFormat: 'date-time'}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Timezone</fs-label>\r\n {{dashboard.serverTimezone}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Hostname</fs-label>\r\n {{dashboard.serverHostname}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Directory</fs-label>\r\n {{dashboard.appDirectory}}\r\n </fs-label-field>\r\n </div>\r\n\r\n <div>\r\n <h2>System</h2>\r\n <fs-label-field>\r\n <fs-label>Mode</fs-label>\r\n {{dashboard.appMode}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Notification Recipients</fs-label>\r\n {{dashboard.notifyRecipients.join(', ')}}\r\n </fs-label-field>\r\n </div>\r\n\r\n <div>\r\n <h2>Database</h2>\r\n\r\n <fs-label-field>\r\n <fs-label>Name</fs-label>\r\n {{dashboard.databaseName}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Date/Time</fs-label>\r\n {{dashboard.databaseTime | fsDateFormat: 'date-time'}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Timezone</fs-label>\r\n {{dashboard.databaseTimezone}}\r\n </fs-label-field>\r\n </div>\r\n\r\n <div *ngIf=\"build || dashboard.upgrades.length\">\r\n <h2>Build</h2>\r\n\r\n <ng-container *ngIf=\"build\">\r\n <fs-label-field>\r\n <fs-label>Version</fs-label>\r\n {{build.version}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>Date</fs-label>\r\n {{ build.date | fsDateFormat: 'date-time' }}\r\n </fs-label-field>\r\n </ng-container>\r\n\r\n <fs-label-field *ngIf=\"dashboard.upgrades.length\">\r\n <fs-label>Pending Upgrades</fs-label>\r\n <span class=\"attention\" [ngClass]=\"{ 'needs-attention': !!dashboard.upgrades.length }\">\r\n {{dashboard.upgrades.length}}\r\n <mat-icon\r\n [matTooltip]=\"dashboard.upgrades.join('\\n')\"\r\n matTooltipClass=\"tooltip-pending-upgrades\"\r\n >\r\n warning\r\n </mat-icon>\r\n </span>\r\n </fs-label-field>\r\n </div>\r\n\r\n <div>\r\n <h2>Cron</h2>\r\n\r\n <fs-label-field>\r\n <fs-label>Last Ran</fs-label>\r\n <span class=\"attention\" [ngClass]=\"{ 'needs-attention': dashboard.cronRanAttention }\">\r\n <span *ngIf=\"!dashboard.cronRan\">Never</span>\r\n <span *ngIf=\"dashboard.cronRan\">{{dashboard.cronRan | fsDateFormat: 'date-time'}}</span>\r\n <mat-icon>warning</mat-icon>\r\n </span>\r\n </fs-label-field>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".actions{margin-bottom:1.25em}table td{padding:3px}.attention{display:flex;align-items:center}.attention mat-icon{display:none;margin-left:2px}.attention.needs-attention{color:#c00}.attention.needs-attention mat-icon{display:inline}::ng-deep .tooltip-pending-upgrades{white-space:pre-line}@media (max-width: 600px){:host ::ng-deep .menu-button{width:100%;border-radius:4px}}@media (min-width: 600px){:host ::ng-deep .menu-button{box-shadow:none}}\n"], components: [{ type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i4$1.FsMenuComponent, selector: "fs-menu", inputs: ["class", "buttonClass"], outputs: ["opened", "closed"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i6$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i6$1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4$1.FsMenuItemDirective, selector: "fs-menu-group,[fs-menu-item]", inputs: ["fsClass", "class", "id", "label", "hidden", "groupHidden", "dismissAfterClick", "link", "target", "queryParams"], outputs: ["click"] }, { type: i6$1.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }], pipes: { "fsDateFormat": i4$2.FsDateFormatPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
117
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: DashboardComponent, decorators: [{
118
+ type: Component,
119
+ args: [{
120
+ selector: 'fs-system-dashboard',
121
+ templateUrl: 'dashboard.component.html',
122
+ styleUrls: ['dashboard.component.scss'],
123
+ changeDetection: ChangeDetectionStrategy.OnPush,
124
+ }]
125
+ }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i0.ChangeDetectorRef }, { type: i2.FsBuildService }]; }, propDecorators: { init: [{
126
+ type: Input
127
+ }], upgrade: [{
128
+ type: Input
129
+ }], load: [{
130
+ type: Input
131
+ }], actions: [{
132
+ type: Input
131
133
  }] } });
132
134
 
133
- function indexNameValue(arry) {
134
- const obj = {};
135
- arry.forEach(item => {
136
- obj[item.value] = item.name;
137
- });
138
- return obj;
135
+ function indexNameValue(arry) {
136
+ const obj = {};
137
+ arry.forEach(item => {
138
+ obj[item.value] = item.name;
139
+ });
140
+ return obj;
139
141
  }
140
142
 
141
- var CronState;
142
- (function (CronState) {
143
- CronState["Running"] = "running";
144
- CronState["Idle"] = "idle";
145
- CronState["Failed"] = "failed";
146
- CronState["Queued"] = "queued";
147
- CronState["Disabled"] = "disabled";
143
+ var CronState;
144
+ (function (CronState) {
145
+ CronState["Running"] = "running";
146
+ CronState["Idle"] = "idle";
147
+ CronState["Failed"] = "failed";
148
+ CronState["Queued"] = "queued";
149
+ CronState["Disabled"] = "disabled";
148
150
  })(CronState || (CronState = {}));
149
151
 
150
- var SettingInterfaceType;
151
- (function (SettingInterfaceType) {
152
- SettingInterfaceType["RadioButton"] = "R";
153
- SettingInterfaceType["InputBox"] = "I";
154
- SettingInterfaceType["Textarea"] = "T";
155
- SettingInterfaceType["Select"] = "D";
156
- SettingInterfaceType["SelectMultiple"] = "W";
157
- SettingInterfaceType["Date"] = "A";
158
- SettingInterfaceType["File"] = "F";
159
- SettingInterfaceType["Static"] = "S";
160
- SettingInterfaceType["Password"] = "P";
161
- SettingInterfaceType["Time"] = "M";
162
- SettingInterfaceType["None"] = "N";
152
+ var SettingInterfaceType;
153
+ (function (SettingInterfaceType) {
154
+ SettingInterfaceType["RadioButton"] = "R";
155
+ SettingInterfaceType["InputBox"] = "I";
156
+ SettingInterfaceType["Textarea"] = "T";
157
+ SettingInterfaceType["Select"] = "D";
158
+ SettingInterfaceType["SelectMultiple"] = "W";
159
+ SettingInterfaceType["Date"] = "A";
160
+ SettingInterfaceType["File"] = "F";
161
+ SettingInterfaceType["Static"] = "S";
162
+ SettingInterfaceType["Password"] = "P";
163
+ SettingInterfaceType["Time"] = "M";
164
+ SettingInterfaceType["None"] = "N";
165
+ SettingInterfaceType["Color"] = "C";
163
166
  })(SettingInterfaceType || (SettingInterfaceType = {}));
164
167
 
165
- var ApiLogState;
166
- (function (ApiLogState) {
167
- ApiLogState["Success"] = "success";
168
- ApiLogState["Failed"] = "failed";
169
- ApiLogState["Deleted"] = "deleted";
168
+ var ApiLogState;
169
+ (function (ApiLogState) {
170
+ ApiLogState["Success"] = "success";
171
+ ApiLogState["Failed"] = "failed";
172
+ ApiLogState["Deleted"] = "deleted";
170
173
  })(ApiLogState || (ApiLogState = {}));
171
174
 
172
- var ProcessState;
173
- (function (ProcessState) {
174
- ProcessState["Queued"] = "Q";
175
- ProcessState["Running"] = "R";
176
- ProcessState["Completed"] = "C";
177
- ProcessState["Killed"] = "K";
178
- ProcessState["Deleted"] = "D";
179
- ProcessState["Failed"] = "F";
175
+ var ProcessState;
176
+ (function (ProcessState) {
177
+ ProcessState["Queued"] = "Q";
178
+ ProcessState["Running"] = "R";
179
+ ProcessState["Completed"] = "C";
180
+ ProcessState["Killed"] = "K";
181
+ ProcessState["Deleted"] = "D";
182
+ ProcessState["Failed"] = "F";
180
183
  })(ProcessState || (ProcessState = {}));
181
184
 
182
- var CronLogState;
183
- (function (CronLogState) {
184
- CronLogState["Message"] = "message";
185
- CronLogState["Disabled"] = "disabled";
186
- CronLogState["Started"] = "started";
187
- CronLogState["Running"] = "running";
188
- CronLogState["Completed"] = "completed";
189
- CronLogState["Failed"] = "failed";
190
- CronLogState["Killed"] = "killed";
191
- CronLogState["Queued"] = "queued";
192
- CronLogState["Reset"] = "reset";
193
- CronLogState["Stagnant"] = "stagnant";
194
- CronLogState["LongRunning"] = "long_running";
185
+ var CronLogState;
186
+ (function (CronLogState) {
187
+ CronLogState["Message"] = "message";
188
+ CronLogState["Disabled"] = "disabled";
189
+ CronLogState["Started"] = "started";
190
+ CronLogState["Running"] = "running";
191
+ CronLogState["Completed"] = "completed";
192
+ CronLogState["Failed"] = "failed";
193
+ CronLogState["Killed"] = "killed";
194
+ CronLogState["Queued"] = "queued";
195
+ CronLogState["Reset"] = "reset";
196
+ CronLogState["Stagnant"] = "stagnant";
197
+ CronLogState["LongRunning"] = "long_running";
195
198
  })(CronLogState || (CronLogState = {}));
196
199
 
197
- const CronLogStates = [
198
- { name: 'Message', value: CronLogState.Message, color: '#29B7FF' },
199
- { name: 'Disabled', value: CronLogState.Disabled, color: '#29B7FF' },
200
- { name: 'Started', value: CronLogState.Started, color: '#34BD43' },
201
- { name: 'Running', value: CronLogState.Running, color: '#34BD43' },
202
- { name: 'Completed', value: CronLogState.Completed, color: '#34BD43' },
203
- { name: 'Failed', value: CronLogState.Failed, color: '#FA7567' },
204
- { name: 'Killed', value: CronLogState.Killed, color: '#29B7FF' },
205
- { name: 'Queued', value: CronLogState.Queued, color: '#29B7FF' },
206
- { name: 'Reset', value: CronLogState.Reset, color: '#29B7FF' },
207
- { name: 'Stagnant', value: CronLogState.Stagnant, color: '#FA7567' },
208
- { name: 'Long Running', value: CronLogState.LongRunning, color: '#FA7567' },
200
+ const CronLogStates = [
201
+ { name: 'Message', value: CronLogState.Message, color: '#29B7FF' },
202
+ { name: 'Disabled', value: CronLogState.Disabled, color: '#29B7FF' },
203
+ { name: 'Started', value: CronLogState.Started, color: '#34BD43' },
204
+ { name: 'Running', value: CronLogState.Running, color: '#34BD43' },
205
+ { name: 'Completed', value: CronLogState.Completed, color: '#34BD43' },
206
+ { name: 'Failed', value: CronLogState.Failed, color: '#FA7567' },
207
+ { name: 'Killed', value: CronLogState.Killed, color: '#29B7FF' },
208
+ { name: 'Queued', value: CronLogState.Queued, color: '#29B7FF' },
209
+ { name: 'Reset', value: CronLogState.Reset, color: '#29B7FF' },
210
+ { name: 'Stagnant', value: CronLogState.Stagnant, color: '#FA7567' },
211
+ { name: 'Long Running', value: CronLogState.LongRunning, color: '#FA7567' },
209
212
  ];
210
213
 
211
- const CronStates = [
212
- { name: 'Running', value: CronState.Running },
213
- { name: 'Idle', value: CronState.Idle },
214
- { name: 'Failed', value: CronState.Failed },
215
- { name: 'Queued', value: CronState.Queued },
216
- { name: 'Disabled', value: CronState.Disabled }
214
+ const CronStates = [
215
+ { name: 'Running', value: CronState.Running },
216
+ { name: 'Idle', value: CronState.Idle },
217
+ { name: 'Failed', value: CronState.Failed },
218
+ { name: 'Queued', value: CronState.Queued },
219
+ { name: 'Disabled', value: CronState.Disabled }
217
220
  ];
218
221
 
219
- const ApiLogStates = [
220
- { name: 'Success', value: ApiLogState.Success },
221
- { name: 'Failed', value: ApiLogState.Failed },
222
- { name: 'Deleted', value: ApiLogState.Deleted }
222
+ const ApiLogStates = [
223
+ { name: 'Success', value: ApiLogState.Success },
224
+ { name: 'Failed', value: ApiLogState.Failed },
225
+ { name: 'Deleted', value: ApiLogState.Deleted }
223
226
  ];
224
227
 
225
- const ProcessStates = [
226
- { name: 'Queued', value: ProcessState.Queued },
227
- { name: 'Running', value: ProcessState.Running },
228
- { name: 'Completed', value: ProcessState.Completed },
229
- { name: 'Killed', value: ProcessState.Killed },
230
- { name: 'Failed', value: ProcessState.Failed },
231
- { name: 'Deleted', value: ProcessState.Deleted }
228
+ const ProcessStates = [
229
+ { name: 'Queued', value: ProcessState.Queued },
230
+ { name: 'Running', value: ProcessState.Running },
231
+ { name: 'Completed', value: ProcessState.Completed },
232
+ { name: 'Killed', value: ProcessState.Killed },
233
+ { name: 'Failed', value: ProcessState.Failed },
234
+ { name: 'Deleted', value: ProcessState.Deleted }
232
235
  ];
233
236
 
234
- class CronLogComponent {
235
- constructor(_data) {
236
- this._data = _data;
237
- this.CronLogStates = indexNameValue(CronLogStates);
238
- this.CronLogStateColors = {};
239
- }
240
- ngOnInit() {
241
- this.cronLog = this._data.cronLog;
242
- this.CronLogStateColors = CronLogStates
243
- .reduce((accum, cronLogState) => {
244
- accum[cronLogState.value] = cronLogState.color;
245
- return accum;
246
- }, {});
247
- }
248
- }
249
- CronLogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronLogComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
250
- CronLogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CronLogComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"cronLog\">\n <div mat-dialog-title>Cron Log</div>\n <mat-dialog-content>\n <div class=\"row\">\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div [ngStyle]=\"{ color: CronLogStateColors[cronLog.state]}\">\n {{CronLogStates[cronLog.state] || cronLog.state}}\n </div>\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n <fs-date-ago [date]=\"cronLog.createDate\"></fs-date-ago>\n </fs-label-field>\n </div>\n \n <fs-label-field *ngIf=\"cronLog.message\">\n <fs-label>\n Message\n </fs-label>\n <div class=\"message\">\n {{cronLog.message}}\n </div>\n </fs-label-field>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Done</button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".message{white-space:pre-line}.row{display:flex;flex-wrap:wrap}.row fs-label-field:not(:last-child){margin-right:40px}\n"], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i10.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }] });
251
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronLogComponent, decorators: [{
252
- type: Component,
253
- args: [{
254
- templateUrl: './cron-log.component.html',
255
- styleUrls: ['./cron-log.component.scss']
256
- }]
257
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
258
- type: Inject,
259
- args: [MAT_DIALOG_DATA]
237
+ class CronLogComponent {
238
+ constructor(_data) {
239
+ this._data = _data;
240
+ this.CronLogStates = indexNameValue(CronLogStates);
241
+ this.CronLogStateColors = {};
242
+ }
243
+ ngOnInit() {
244
+ this.cronLog = this._data.cronLog;
245
+ this.CronLogStateColors = CronLogStates
246
+ .reduce((accum, cronLogState) => {
247
+ accum[cronLogState.value] = cronLogState.color;
248
+ return accum;
249
+ }, {});
250
+ }
251
+ }
252
+ CronLogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronLogComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
253
+ CronLogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CronLogComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"cronLog\">\r\n <div mat-dialog-title>Cron Log</div>\r\n <mat-dialog-content>\r\n <div class=\"row\">\r\n <fs-label-field>\r\n <fs-label>\r\n Status\r\n </fs-label>\r\n <div [ngStyle]=\"{ color: CronLogStateColors[cronLog.state]}\">\r\n {{CronLogStates[cronLog.state] || cronLog.state}}\r\n </div>\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n Date\r\n </fs-label>\r\n <fs-date-ago [date]=\"cronLog.createDate\"></fs-date-ago>\r\n </fs-label-field>\r\n </div>\r\n \r\n <fs-label-field *ngIf=\"cronLog.message\">\r\n <fs-label>\r\n Message\r\n </fs-label>\r\n <div class=\"message\">\r\n {{cronLog.message}}\r\n </div>\r\n </fs-label-field>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Done</button>\r\n </mat-dialog-actions>\r\n</fs-dialog>\r\n", styles: [".message{white-space:pre-line}.row{display:flex;flex-wrap:wrap}.row fs-label-field:not(:last-child){margin-right:40px}\n"], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i10.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }] });
254
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronLogComponent, decorators: [{
255
+ type: Component,
256
+ args: [{
257
+ templateUrl: './cron-log.component.html',
258
+ styleUrls: ['./cron-log.component.scss']
259
+ }]
260
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
261
+ type: Inject,
262
+ args: [MAT_DIALOG_DATA]
260
263
  }] }]; } });
261
264
 
262
- class CronComponent {
263
- constructor(_data, _dialog, _cdRef) {
264
- this._data = _data;
265
- this._dialog = _dialog;
266
- this._cdRef = _cdRef;
267
- this.tabIndex = 0;
268
- this.CronStates = indexNameValue(CronStates);
269
- this.CronLogStates = indexNameValue(CronLogStates);
270
- this.CronLogStateColors = {};
271
- }
272
- ngOnInit() {
273
- this.load();
274
- this.CronLogStateColors = CronLogStates
275
- .reduce((accum, cronLogState) => {
276
- accum[cronLogState.value] = cronLogState.color;
277
- return accum;
278
- }, {});
279
- }
280
- cronLogOpen(cronLog) {
281
- this._dialog.open(CronLogComponent, {
282
- data: {
283
- cronLog,
284
- },
285
- width: '85%'
286
- });
287
- }
288
- cronActionClick(cronAction) {
289
- cronAction.action(this.cron)
290
- .subscribe(() => {
291
- this.load();
292
- });
293
- }
294
- selectedIndexChange(index) {
295
- this.tabIndex = index;
296
- }
297
- load() {
298
- this._data.loadCron(this._data.cron)
299
- .subscribe((cron) => {
300
- this.cron = Object.assign(Object.assign({}, this._data.cron), cron);
301
- if (this._data.loadCronLogs) {
302
- this.config = {
303
- filters: [
304
- {
305
- type: ItemType.Select,
306
- name: 'state',
307
- label: 'Status',
308
- values: [
309
- { name: 'All', value: null },
310
- ...CronLogStates,
311
- ],
312
- },
313
- {
314
- type: ItemType.DateRange,
315
- name: 'date',
316
- label: ['From Date', 'To Date'],
317
- },
318
- ],
319
- fetch: (query) => {
320
- query = Object.assign(Object.assign({}, query), { cronId: this.cron.id });
321
- return this._data.loadCronLogs(query);
322
- },
323
- };
324
- }
325
- this.cronActions = this._data.cronActions
326
- .filter((cronLogAction) => {
327
- return cronLogAction.show(this.cron);
328
- });
329
- this._cdRef.markForCheck();
330
- });
331
- }
332
- }
333
- CronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$1.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
334
- CronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CronComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"cron\">\n <h1 mat-dialog-title>\n Cron\n <div class=\"small\">{{cron.name}}</div>\n </h1>\n <mat-dialog-content>\n <mat-tab-group (selectedIndexChange)=\"selectedIndexChange($event)\">\n <mat-tab label=\"Overview\">\n <div class=\"row\">\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{CronStates[cron.state]}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"cron.cronSetting\">\n <fs-label>\n Run Frequency\n </fs-label>\n {{cron.cronSetting.summary}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Last Ran\n </fs-label>\n <ng-container *ngIf=\"cron.duration===null; else lastRan\">\n Never\n </ng-container>\n <ng-template #lastRan>\n <fs-date-ago [date]=\"cron.createDate\"></fs-date-ago>\n <div><small *ngIf=\"cron.duration\">Duration: {{ cron.duration | fsDateDuration }}</small></div>\n </ng-template>\n </fs-label-field>\n </div>\n\n <fs-label-field *ngIf=\"cron.message\">\n <fs-label>\n Last Message\n </fs-label>\n <div class=\"message\">{{cron.message}}</div>\n </fs-label-field>\n </mat-tab>\n <mat-tab label=\"Logs\" *ngIf=\"config\">\n <ng-template matTabContent>\n <fs-list [config]=\"config\">\n <fs-list-column name=\"state\" title=\"Status\">\n <ng-template fs-list-cell let-row=\"row\">\n <a \n (click)=\"cronLogOpen(row)\"\n [ngStyle]=\"{ color: CronLogStateColors[row.state] }\">\n {{CronLogStates[row.state] || row.state}}\n </a>\n </ng-template>\n </fs-list-column>\n \n <fs-list-column title=\"Message\" class=\"col-message\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"message\">{{row.message}}</div>\n </ng-template>\n </fs-list-column>\n\n <fs-list-column name=\"create_date\" title=\"Date\" class=\"col-date\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list> \n </ng-template>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions> \n <button \n mat-button \n [mat-dialog-close]=\"true\" \n color=\"primary\">\n Done\n </button>\n <ng-container *ngIf=\"tabIndex === 0\">\n <button \n *ngFor=\"let cronAction of cronActions\"\n mat-button \n (click)=\"cronActionClick(cronAction)\">\n {{cronAction.label}}\n </button> \n </ng-container>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [":host ::ng-deep .col-message .message{white-space:break-spaces;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}:host ::ng-deep .col-date{white-space:nowrap}h1 .small{line-height:normal}.row{display:flex;flex-wrap:wrap}.row fs-label-field:not(:last-child){margin-right:40px}.message{white-space:pre-line}\n"], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatTabContent, selector: "[matTabContent]" }, { type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i10.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
335
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronComponent, decorators: [{
336
- type: Component,
337
- args: [{
338
- templateUrl: './cron.component.html',
339
- styleUrls: ['./cron.component.scss'],
340
- changeDetection: ChangeDetectionStrategy.OnPush,
341
- }]
342
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
343
- type: Inject,
344
- args: [MAT_DIALOG_DATA]
265
+ class CronComponent {
266
+ constructor(_data, _dialog, _cdRef) {
267
+ this._data = _data;
268
+ this._dialog = _dialog;
269
+ this._cdRef = _cdRef;
270
+ this.tabIndex = 0;
271
+ this.CronStates = indexNameValue(CronStates);
272
+ this.CronLogStates = indexNameValue(CronLogStates);
273
+ this.CronLogStateColors = {};
274
+ }
275
+ ngOnInit() {
276
+ this.load();
277
+ this.CronLogStateColors = CronLogStates
278
+ .reduce((accum, cronLogState) => {
279
+ accum[cronLogState.value] = cronLogState.color;
280
+ return accum;
281
+ }, {});
282
+ }
283
+ cronLogOpen(cronLog) {
284
+ this._dialog.open(CronLogComponent, {
285
+ data: {
286
+ cronLog,
287
+ },
288
+ width: '85%'
289
+ });
290
+ }
291
+ cronActionClick(cronAction) {
292
+ cronAction.action(this.cron)
293
+ .subscribe(() => {
294
+ this.load();
295
+ });
296
+ }
297
+ selectedIndexChange(index) {
298
+ this.tabIndex = index;
299
+ }
300
+ load() {
301
+ this._data.loadCron(this._data.cron)
302
+ .subscribe((cron) => {
303
+ this.cron = Object.assign(Object.assign({}, this._data.cron), cron);
304
+ if (this._data.loadCronLogs) {
305
+ this.config = {
306
+ filters: [
307
+ {
308
+ type: ItemType.Select,
309
+ name: 'state',
310
+ label: 'Status',
311
+ values: [
312
+ { name: 'All', value: null },
313
+ ...CronLogStates,
314
+ ],
315
+ },
316
+ {
317
+ type: ItemType.DateRange,
318
+ name: 'date',
319
+ label: ['From Date', 'To Date'],
320
+ },
321
+ ],
322
+ fetch: (query) => {
323
+ query = Object.assign(Object.assign({}, query), { cronId: this.cron.id });
324
+ return this._data.loadCronLogs(query);
325
+ },
326
+ };
327
+ }
328
+ this.cronActions = this._data.cronActions
329
+ .filter((cronLogAction) => {
330
+ return cronLogAction.show(this.cron);
331
+ });
332
+ this._cdRef.markForCheck();
333
+ });
334
+ }
335
+ }
336
+ CronComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$1.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
337
+ CronComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CronComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"cron\">\r\n <h1 mat-dialog-title>\r\n Cron\r\n <div class=\"small\">{{cron.name}}</div>\r\n </h1>\r\n <mat-dialog-content>\r\n <mat-tab-group (selectedIndexChange)=\"selectedIndexChange($event)\">\r\n <mat-tab label=\"Overview\">\r\n <div class=\"row\">\r\n <fs-label-field>\r\n <fs-label>\r\n Status\r\n </fs-label>\r\n {{CronStates[cron.state]}}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"cron.cronSetting\">\r\n <fs-label>\r\n Run Frequency\r\n </fs-label>\r\n {{cron.cronSetting.summary}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n Last Ran\r\n </fs-label>\r\n <ng-container *ngIf=\"cron.duration===null; else lastRan\">\r\n Never\r\n </ng-container>\r\n <ng-template #lastRan>\r\n <fs-date-ago [date]=\"cron.createDate\"></fs-date-ago>\r\n <div><small *ngIf=\"cron.duration\">Duration: {{ cron.duration | fsDateDuration }}</small></div>\r\n </ng-template>\r\n </fs-label-field>\r\n </div>\r\n\r\n <fs-label-field *ngIf=\"cron.message\">\r\n <fs-label>\r\n Last Message\r\n </fs-label>\r\n <div class=\"message\">{{cron.message}}</div>\r\n </fs-label-field>\r\n </mat-tab>\r\n <mat-tab label=\"Logs\" *ngIf=\"config\">\r\n <ng-template matTabContent>\r\n <fs-list [config]=\"config\">\r\n <fs-list-column name=\"state\" title=\"Status\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <a \r\n (click)=\"cronLogOpen(row)\"\r\n [ngStyle]=\"{ color: CronLogStateColors[row.state] }\">\r\n {{CronLogStates[row.state] || row.state}}\r\n </a>\r\n </ng-template>\r\n </fs-list-column>\r\n \r\n <fs-list-column title=\"Message\" class=\"col-message\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <div class=\"message\">{{row.message}}</div>\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n <fs-list-column name=\"create_date\" title=\"Date\" class=\"col-date\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\r\n </ng-template>\r\n </fs-list-column>\r\n </fs-list> \r\n </ng-template>\r\n </mat-tab>\r\n </mat-tab-group>\r\n\r\n </mat-dialog-content>\r\n <mat-dialog-actions> \r\n <button \r\n mat-button \r\n [mat-dialog-close]=\"true\" \r\n color=\"primary\">\r\n Done\r\n </button>\r\n <ng-container *ngIf=\"tabIndex === 0\">\r\n <button \r\n *ngFor=\"let cronAction of cronActions\"\r\n mat-button \r\n (click)=\"cronActionClick(cronAction)\">\r\n {{cronAction.label}}\r\n </button> \r\n </ng-container>\r\n </mat-dialog-actions>\r\n</fs-dialog>\r\n", styles: [":host ::ng-deep .col-message .message{white-space:break-spaces;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}:host ::ng-deep .col-date{white-space:nowrap}h1 .small{line-height:normal}.row{display:flex;flex-wrap:wrap}.row fs-label-field:not(:last-child){margin-right:40px}.message{white-space:pre-line}\n"], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i3.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i3.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby"], exportAs: ["matTab"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3.MatTabContent, selector: "[matTabContent]" }, { type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i10.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
338
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronComponent, decorators: [{
339
+ type: Component,
340
+ args: [{
341
+ templateUrl: './cron.component.html',
342
+ styleUrls: ['./cron.component.scss'],
343
+ changeDetection: ChangeDetectionStrategy.OnPush,
344
+ }]
345
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
346
+ type: Inject,
347
+ args: [MAT_DIALOG_DATA]
345
348
  }] }, { type: i1$1.MatDialog }, { type: i0.ChangeDetectorRef }]; } });
346
349
 
347
- class CronsComponent {
348
- constructor(_message, _dialog) {
349
- this._message = _message;
350
- this._dialog = _dialog;
351
- this.config = null;
352
- this.cronStates = indexNameValue(CronStates);
353
- }
354
- ngOnInit() {
355
- this._configList();
356
- }
357
- _configList() {
358
- this.config = {
359
- paging: false,
360
- filters: [
361
- {
362
- type: ItemType.Keyword,
363
- name: 'keyword',
364
- label: 'Search'
365
- }
366
- ],
367
- rowActions: this.getCronActions()
368
- .map((rowAction) => {
369
- return Object.assign(Object.assign({}, rowAction), { click: (cron) => {
370
- rowAction.action(cron)
371
- .subscribe();
372
- } });
373
- }),
374
- fetch: query => {
375
- query.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
376
- return this.loadCrons(query)
377
- .pipe(map((response) => ({ data: response })));
378
- },
379
- };
380
- if (this.bulk) {
381
- this.config.selection = {
382
- selectAll: false,
383
- actions: [
384
- {
385
- type: SelectionActionType.Action,
386
- name: 'disable',
387
- label: 'Disable'
388
- },
389
- {
390
- type: SelectionActionType.Action,
391
- name: 'enable',
392
- label: 'Enable'
393
- },
394
- ],
395
- actionSelected: (action) => {
396
- return this.bulk(action.action.name, action.selected)
397
- .pipe(tap(() => {
398
- this.list.reload();
399
- this._message.success('Applied Changes');
400
- }));
401
- },
402
- };
403
- }
404
- }
405
- open(cron) {
406
- this._dialog.open(CronComponent, {
407
- data: {
408
- cron,
409
- loadCronLogs: this.loadCronLogs,
410
- loadCron: this.loadCron,
411
- cronActions: this.getCronActions(),
412
- },
413
- width: '85%'
414
- });
415
- }
416
- getCronActions() {
417
- return [
418
- {
419
- action: (data) => {
420
- return this.queue(data)
421
- .pipe(tap(() => {
422
- this._message.success('Queued cron');
423
- this.list.reload();
424
- }));
425
- },
426
- label: 'Queue',
427
- show: (cron) => {
428
- return cron.state === CronState.Idle || cron.state === CronState.Failed;
429
- },
430
- },
431
- {
432
- action: (data) => {
433
- return this.run(data)
434
- .pipe(tap(() => {
435
- this._message.success('Cron ran');
436
- this.list.reload();
437
- }));
438
- },
439
- label: 'Run',
440
- show: (cron) => {
441
- return cron.state === CronState.Idle || cron.state === CronState.Failed;
442
- },
443
- },
444
- {
445
- action: (data) => {
446
- return this.enable(data)
447
- .pipe(tap(() => {
448
- this._message.success('Enabled cron');
449
- this.list.reload();
450
- }));
451
- },
452
- label: 'Enable',
453
- show: (cron) => {
454
- return cron.state === CronState.Disabled;
455
- },
456
- },
457
- {
458
- action: (data) => {
459
- return this.disable(data)
460
- .pipe(tap(() => {
461
- this._message.success('Disabled cron');
462
- this.list.reload();
463
- }));
464
- },
465
- label: 'Disable',
466
- show: (cron) => {
467
- return cron.state === CronState.Idle || cron.state === CronState.Failed;
468
- },
469
- },
470
- {
471
- action: (data) => {
472
- return this.kill(data)
473
- .pipe(tap(() => {
474
- this._message.success('Killed cron');
475
- this.list.reload();
476
- }));
477
- },
478
- label: 'Kill',
479
- show: (cron) => {
480
- return cron.state === CronState.Running;
481
- },
482
- },
483
- ];
484
- }
485
- }
486
- CronsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, deps: [{ token: i1.FsMessage }, { token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
487
- CronsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CronsComponent, selector: "fs-system-crons", inputs: { enable: "enable", disable: "disable", kill: "kill", queue: "queue", run: "run", loadCrons: "loadCrons", loadCron: "loadCron", loadCronLogs: "loadCronLogs", bulk: "bulk" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"open(row)\">{{row.name}}</a>\n <div *ngIf=\"row.cronSetting\">\n <small>{{row.cronSetting.summary}}</small>\n </div>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{cronStates[row.state]}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Last Ran</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.duration===null; else lastRan\">\n Never\n </ng-container>\n <ng-template #lastRan>\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div><small *ngIf=\"row.duration\">Duration: {{ row.duration | fsDateDuration }}</small></div>\n </ng-template>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe } });
488
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, decorators: [{
489
- type: Component,
490
- args: [{
491
- selector: 'fs-system-crons',
492
- templateUrl: './crons.component.html',
493
- styleUrls: ['./crons.component.scss'],
494
- }]
495
- }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i1$1.MatDialog }]; }, propDecorators: { list: [{
496
- type: ViewChild,
497
- args: [FsListComponent, { static: true }]
498
- }], enable: [{
499
- type: Input
500
- }], disable: [{
501
- type: Input
502
- }], kill: [{
503
- type: Input
504
- }], queue: [{
505
- type: Input
506
- }], run: [{
507
- type: Input
508
- }], loadCrons: [{
509
- type: Input
510
- }], loadCron: [{
511
- type: Input
512
- }], loadCronLogs: [{
513
- type: Input
514
- }], bulk: [{
515
- type: Input
350
+ class CronsComponent {
351
+ constructor(_message, _dialog) {
352
+ this._message = _message;
353
+ this._dialog = _dialog;
354
+ this.config = null;
355
+ this.cronStates = indexNameValue(CronStates);
356
+ }
357
+ ngOnInit() {
358
+ this._configList();
359
+ }
360
+ _configList() {
361
+ this.config = {
362
+ paging: false,
363
+ filters: [
364
+ {
365
+ type: ItemType.Keyword,
366
+ name: 'keyword',
367
+ label: 'Search'
368
+ }
369
+ ],
370
+ rowActions: this.getCronActions()
371
+ .map((rowAction) => {
372
+ return Object.assign(Object.assign({}, rowAction), { click: (cron) => {
373
+ rowAction.action(cron)
374
+ .subscribe();
375
+ } });
376
+ }),
377
+ fetch: query => {
378
+ query.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
379
+ return this.loadCrons(query)
380
+ .pipe(map((response) => ({ data: response })));
381
+ },
382
+ };
383
+ if (this.bulk) {
384
+ this.config.selection = {
385
+ selectAll: false,
386
+ actions: [
387
+ {
388
+ type: SelectionActionType.Action,
389
+ name: 'disable',
390
+ label: 'Disable'
391
+ },
392
+ {
393
+ type: SelectionActionType.Action,
394
+ name: 'enable',
395
+ label: 'Enable'
396
+ },
397
+ ],
398
+ actionSelected: (action) => {
399
+ return this.bulk(action.action.name, action.selected)
400
+ .pipe(tap(() => {
401
+ this.list.reload();
402
+ this._message.success('Applied Changes');
403
+ }));
404
+ },
405
+ };
406
+ }
407
+ }
408
+ open(cron) {
409
+ this._dialog.open(CronComponent, {
410
+ data: {
411
+ cron,
412
+ loadCronLogs: this.loadCronLogs,
413
+ loadCron: this.loadCron,
414
+ cronActions: this.getCronActions(),
415
+ },
416
+ width: '85%'
417
+ });
418
+ }
419
+ getCronActions() {
420
+ return [
421
+ {
422
+ action: (data) => {
423
+ return this.queue(data)
424
+ .pipe(tap(() => {
425
+ this._message.success('Queued cron');
426
+ this.list.reload();
427
+ }));
428
+ },
429
+ label: 'Queue',
430
+ show: (cron) => {
431
+ return cron.state === CronState.Idle || cron.state === CronState.Failed;
432
+ },
433
+ },
434
+ {
435
+ action: (data) => {
436
+ return this.run(data)
437
+ .pipe(tap(() => {
438
+ this._message.success('Cron ran');
439
+ this.list.reload();
440
+ }));
441
+ },
442
+ label: 'Run',
443
+ show: (cron) => {
444
+ return cron.state === CronState.Idle || cron.state === CronState.Failed;
445
+ },
446
+ },
447
+ {
448
+ action: (data) => {
449
+ return this.enable(data)
450
+ .pipe(tap(() => {
451
+ this._message.success('Enabled cron');
452
+ this.list.reload();
453
+ }));
454
+ },
455
+ label: 'Enable',
456
+ show: (cron) => {
457
+ return cron.state === CronState.Disabled;
458
+ },
459
+ },
460
+ {
461
+ action: (data) => {
462
+ return this.disable(data)
463
+ .pipe(tap(() => {
464
+ this._message.success('Disabled cron');
465
+ this.list.reload();
466
+ }));
467
+ },
468
+ label: 'Disable',
469
+ show: (cron) => {
470
+ return cron.state === CronState.Idle || cron.state === CronState.Failed;
471
+ },
472
+ },
473
+ {
474
+ action: (data) => {
475
+ return this.kill(data)
476
+ .pipe(tap(() => {
477
+ this._message.success('Killed cron');
478
+ this.list.reload();
479
+ }));
480
+ },
481
+ label: 'Kill',
482
+ show: (cron) => {
483
+ return cron.state === CronState.Running;
484
+ },
485
+ },
486
+ ];
487
+ }
488
+ }
489
+ CronsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, deps: [{ token: i1.FsMessage }, { token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
490
+ CronsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: CronsComponent, selector: "fs-system-crons", inputs: { enable: "enable", disable: "disable", kill: "kill", queue: "queue", run: "run", loadCrons: "loadCrons", loadCron: "loadCron", loadCronLogs: "loadCronLogs", bulk: "bulk" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\r\n <fs-list-column>\r\n <ng-template fs-list-header>Name</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <a (click)=\"open(row)\">{{row.name}}</a>\r\n <div *ngIf=\"row.cronSetting\">\r\n <small>{{row.cronSetting.summary}}</small>\r\n </div>\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column>\r\n <ng-template fs-list-header>Status</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{cronStates[row.state]}}\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column>\r\n <ng-template fs-list-header>Last Ran</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <ng-container *ngIf=\"row.duration===null; else lastRan\">\r\n Never\r\n </ng-container>\r\n <ng-template #lastRan>\r\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\r\n <div><small *ngIf=\"row.duration\">Duration: {{ row.duration | fsDateDuration }}</small></div>\r\n </ng-template>\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>\r\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe } });
491
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, decorators: [{
492
+ type: Component,
493
+ args: [{
494
+ selector: 'fs-system-crons',
495
+ templateUrl: './crons.component.html',
496
+ styleUrls: ['./crons.component.scss'],
497
+ }]
498
+ }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i1$1.MatDialog }]; }, propDecorators: { list: [{
499
+ type: ViewChild,
500
+ args: [FsListComponent, { static: true }]
501
+ }], enable: [{
502
+ type: Input
503
+ }], disable: [{
504
+ type: Input
505
+ }], kill: [{
506
+ type: Input
507
+ }], queue: [{
508
+ type: Input
509
+ }], run: [{
510
+ type: Input
511
+ }], loadCrons: [{
512
+ type: Input
513
+ }], loadCron: [{
514
+ type: Input
515
+ }], loadCronLogs: [{
516
+ type: Input
517
+ }], bulk: [{
518
+ type: Input
516
519
  }] } });
517
520
 
518
- class KeyNameValuePipe {
519
- transform(values) {
520
- return Object.keys(values).map((key) => {
521
- return { value: key, name: values[key] };
522
- });
523
- }
524
- }
525
- KeyNameValuePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
526
- KeyNameValuePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, name: "keyNameValue" });
527
- KeyNameValuePipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe });
528
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, decorators: [{
529
- type: Pipe,
530
- args: [{
531
- name: 'keyNameValue'
532
- }]
533
- }, {
534
- type: Injectable
521
+ class KeyNameValuePipe {
522
+ transform(values) {
523
+ return Object.keys(values).map((key) => {
524
+ return { value: key, name: values[key] };
525
+ });
526
+ }
527
+ }
528
+ KeyNameValuePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
529
+ KeyNameValuePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, name: "keyNameValue" });
530
+ KeyNameValuePipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe });
531
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, decorators: [{
532
+ type: Pipe,
533
+ args: [{
534
+ name: 'keyNameValue'
535
+ }]
536
+ }, {
537
+ type: Injectable
535
538
  }] });
536
539
 
537
- class SettingsComponent {
538
- constructor(_message, _clipboardService, _prompt, _cdRef) {
539
- this._message = _message;
540
- this._clipboardService = _clipboardService;
541
- this._prompt = _prompt;
542
- this._cdRef = _cdRef;
543
- this.fileRemove = new EventEmitter();
544
- this.fileSelect = new EventEmitter();
545
- this.groupedSettings = [];
546
- this.groups = [];
547
- this.SettingInterfaceType = SettingInterfaceType;
548
- }
549
- ngOnInit() {
550
- this.loadSettings()
551
- .subscribe((settings) => {
552
- settings = settings
553
- .filter((setting) => {
554
- return setting.interfaceType !== SettingInterfaceType.None;
555
- })
556
- .map((setting) => {
557
- switch (setting.interfaceType) {
558
- case SettingInterfaceType.Date:
559
- case SettingInterfaceType.Time:
560
- setting.value = parse(setting.value);
561
- case SettingInterfaceType.SelectMultiple:
562
- setting.value = Array.isArray(setting.value) ? setting.value : [];
563
- break;
564
- }
565
- return setting;
566
- });
567
- this.groupedSettings = groupBy(settings, (item) => {
568
- return item.group;
569
- });
570
- this.groups = Object.keys(this.groupedSettings);
571
- this._cdRef.markForCheck();
572
- });
573
- }
574
- export(event, settings) {
575
- event.stopPropagation();
576
- const data = settings.map((setting) => {
577
- return {
578
- name: setting.name,
579
- value: setting.value,
580
- group: setting.group,
581
- };
582
- });
583
- this._clipboardService.copy(JSON.stringify(data));
584
- this._message.success('Copied to clipboard');
585
- }
586
- import(event, group) {
587
- event.stopPropagation();
588
- this._prompt.input({
589
- label: 'JSON Import',
590
- title: 'Import Settings',
591
- commitLabel: 'Import',
592
- required: true,
593
- }).subscribe((value) => {
594
- if (value) {
595
- try {
596
- const settings = this.groupedSettings[group];
597
- const data = JSON.parse(value);
598
- data.forEach((item) => {
599
- const setting = settings.find((s) => {
600
- return item.name === s.name;
601
- });
602
- if (setting) {
603
- Object.assign(setting, item);
604
- }
605
- });
606
- this._cdRef.markForCheck();
607
- }
608
- catch (e) {
609
- this._message.error(e);
610
- }
611
- }
612
- });
613
- }
614
- saveGroup(group) {
615
- const settings = this.groupedSettings[group];
616
- const values = reduce(settings, (result, value, key) => {
617
- return (result[value.name] = value.value, result);
618
- }, {});
619
- this.save(group, values)
620
- .subscribe(() => {
621
- this._message.success('Changes Saved');
622
- });
623
- }
624
- }
625
- SettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SettingsComponent, deps: [{ token: i1.FsMessage }, { token: i2$3.ClipboardService }, { token: i3$2.FsPrompt }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
626
- SettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SettingsComponent, selector: "fs-system-settings", inputs: { loadSettings: "loadSettings", save: "save" }, outputs: { fileRemove: "fileRemove", fileSelect: "fileSelect" }, ngImport: i0, template: "\n<mat-accordion>\n <mat-expansion-panel hideToggle *ngFor=\"let group of groups\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <div class=\"title-row\">\n <div class=\"title\">{{group || 'General'}}</div>\n <div class=\"actions\">\n <button\n type=\"button\"\n [matTooltip]=\"'Export ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"export($event, groupedSettings[group])\">\n <mat-icon>cloud_download</mat-icon>\n </button>\n <button\n type=\"button\"\n [matTooltip]=\"'Import ' + (group || 'General') + ' Settings'\"\n mat-icon-button\n (click)=\"import($event, group)\">\n <mat-icon>cloud_upload</mat-icon>\n </button>\n </div>\n </div>\n </mat-panel-title>\n </mat-expansion-panel-header>\n\n <div hideToggle *ngFor=\"let setting of groupedSettings[group]\">\n <mat-form-field \n class=\"full-width form-field-multiline-subscript\"\n *ngIf=\"setting.interfaceType===SettingInterfaceType.InputBox\">\n <input\n matInput\n [placeholder]=\"setting.label\"\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>{{setting.instruction}}</mat-hint>\n </mat-form-field>\n\n <mat-form-field \n class=\"full-width form-field-multiline-subscript\" \n *ngIf=\"setting.interfaceType===SettingInterfaceType.Textarea\">\n <textarea\n matInput\n [placeholder]=\"setting.label\"\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n </textarea>\n <mat-hint>{{setting.instruction}}</mat-hint>\n </mat-form-field>\n\n <mat-form-field \n class=\"full-width form-field-multiline-subscript\" \n *ngIf=\"setting.interfaceType===SettingInterfaceType.Select || setting.interfaceType===SettingInterfaceType.SelectMultiple\">\n <mat-select\n [placeholder]=\"setting.label\"\n [(ngModel)]=\"setting.value\"\n [multiple]=\"setting.interfaceType===SettingInterfaceType.SelectMultiple\"\n [name]=\"'setting' + setting.id\">\n <mat-option *ngFor=\"let item of setting.values | keyNameValue\" [value]=\"item.value\">\n {{item.name}}\n </mat-option>\n </mat-select>\n <mat-hint>{{setting.instruction}}</mat-hint>\n </mat-form-field>\n\n <mat-form-field \n class=\"full-width form-field-multiline-subscript\" \n *ngIf=\"setting.interfaceType===SettingInterfaceType.Date\">\n <input\n matInput\n fsDatePicker\n [placeholder]=\"setting.label\"\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>{{setting.instruction}}</mat-hint>\n </mat-form-field>\n\n <mat-form-field \n class=\"full-width form-field-multiline-subscript\" \n *ngIf=\"setting.interfaceType===SettingInterfaceType.Time\">\n <input\n matInput\n fsTimePicker\n [placeholder]=\"setting.label\"\n [(ngModel)]=\"setting.value\"\n [name]=\"'setting' + setting.id\">\n <mat-hint>{{setting.instruction}}</mat-hint>\n </mat-form-field>\n\n <fs-file-picker\n *ngIf=\"setting.interfaceType===SettingInterfaceType.File\"\n [allowRemove]=\"true\"\n [allowDownload]=\"true\"\n (select)=\"fileSelect.emit({ setting: setting, file: $event.file })\"\n (remove)=\"fileRemove.emit(setting)\"\n [url]=\"setting.value\">\n <div fsFileLabel>{{setting.label}}</div>\n </fs-file-picker>\n </div>\n\n <button mat-raised-button color=\"primary\" type=\"button\" (click)=\"saveGroup(group)\">Save</button>\n\n </mat-expansion-panel>\n\n</mat-accordion>\n", styles: [".mat-expansion-panel-header{font-size:19px}.full-width{width:100%}.title-row{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-start;align-items:center;width:100%}.title-row .title{display:flex;flex:1}:host ::ng-deep .mat-expansion-panel-header-title{margin:0}:host ::ng-deep .mat-expansion-panel .actions{display:none}:host ::ng-deep .mat-expansion-panel.mat-expanded .actions{display:block}\n"], components: [{ type: i4$3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i4$3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10$1.FsDatePickerComponent, selector: "[fsDatePicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "startOfDay", "view", "format", "minutes"], outputs: ["change"] }, { type: i10$1.FsTimePickerComponent, selector: "[fsTimePicker]", inputs: ["view"] }, { type: i11$1.FsFilePickerComponent, selector: "fs-file-picker", inputs: ["imageWidth", "imageHeight", "imageQuality", "showFilename", "url", "file", "accept", "disabled", "width", "height", "previewWidth", "previewHeight", "allowDownload", "allowReupload", "allowRemove"], outputs: ["select", "remove"] }], directives: [{ type: i4$3.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i14.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i15.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i15.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i15.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "keyNameValue": KeyNameValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
627
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SettingsComponent, decorators: [{
628
- type: Component,
629
- args: [{
630
- selector: 'fs-system-settings',
631
- templateUrl: './settings.component.html',
632
- styleUrls: ['./settings.component.scss'],
633
- changeDetection: ChangeDetectionStrategy.OnPush,
634
- }]
635
- }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i2$3.ClipboardService }, { type: i3$2.FsPrompt }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { loadSettings: [{
636
- type: Input
637
- }], save: [{
638
- type: Input
639
- }], fileRemove: [{
640
- type: Output
641
- }], fileSelect: [{
642
- type: Output
540
+ class SettingsComponent {
541
+ constructor(_message, _clipboardService, _prompt, _cdRef) {
542
+ this._message = _message;
543
+ this._clipboardService = _clipboardService;
544
+ this._prompt = _prompt;
545
+ this._cdRef = _cdRef;
546
+ this.fileRemove = new EventEmitter();
547
+ this.fileSelect = new EventEmitter();
548
+ this.groupedSettings = [];
549
+ this.groups = [];
550
+ this.SettingInterfaceType = SettingInterfaceType;
551
+ }
552
+ ngOnInit() {
553
+ this.loadSettings()
554
+ .subscribe((settings) => {
555
+ settings = settings
556
+ .filter((setting) => {
557
+ return setting.interfaceType !== SettingInterfaceType.None;
558
+ })
559
+ .map((setting) => {
560
+ switch (setting.interfaceType) {
561
+ case SettingInterfaceType.Date:
562
+ case SettingInterfaceType.Time:
563
+ setting.value = parse(setting.value);
564
+ case SettingInterfaceType.SelectMultiple:
565
+ setting.value = Array.isArray(setting.value) ? setting.value : [];
566
+ break;
567
+ }
568
+ return setting;
569
+ });
570
+ this.groupedSettings = groupBy(settings, (item) => {
571
+ return item.group;
572
+ });
573
+ this.groups = Object.keys(this.groupedSettings);
574
+ this._cdRef.markForCheck();
575
+ });
576
+ }
577
+ export(event, settings) {
578
+ event.stopPropagation();
579
+ const data = settings.map((setting) => {
580
+ return {
581
+ name: setting.name,
582
+ value: setting.value,
583
+ group: setting.group,
584
+ };
585
+ });
586
+ this._clipboardService.copy(JSON.stringify(data));
587
+ this._message.success('Copied to clipboard');
588
+ }
589
+ import(event, group) {
590
+ event.stopPropagation();
591
+ this._prompt.input({
592
+ label: 'JSON Import',
593
+ title: 'Import Settings',
594
+ commitLabel: 'Import',
595
+ required: true,
596
+ }).subscribe((value) => {
597
+ if (value) {
598
+ try {
599
+ const settings = this.groupedSettings[group];
600
+ const data = JSON.parse(value);
601
+ data.forEach((item) => {
602
+ const setting = settings.find((s) => {
603
+ return item.name === s.name;
604
+ });
605
+ if (setting) {
606
+ Object.assign(setting, item);
607
+ }
608
+ });
609
+ this._cdRef.markForCheck();
610
+ }
611
+ catch (e) {
612
+ this._message.error(e);
613
+ }
614
+ }
615
+ });
616
+ }
617
+ saveGroup(group) {
618
+ const settings = this.groupedSettings[group];
619
+ const values = reduce(settings, (result, value, key) => {
620
+ return (result[value.name] = value.value, result);
621
+ }, {});
622
+ this.save(group, values)
623
+ .subscribe(() => {
624
+ this._message.success('Changes Saved');
625
+ });
626
+ }
627
+ }
628
+ SettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SettingsComponent, deps: [{ token: i1.FsMessage }, { token: i2$3.ClipboardService }, { token: i3$2.FsPrompt }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
629
+ SettingsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: SettingsComponent, selector: "fs-system-settings", inputs: { loadSettings: "loadSettings", save: "save" }, outputs: { fileRemove: "fileRemove", fileSelect: "fileSelect" }, ngImport: i0, template: "\r\n<mat-accordion>\r\n <mat-expansion-panel hideToggle *ngFor=\"let group of groups\">\r\n <mat-expansion-panel-header>\r\n <mat-panel-title>\r\n <div class=\"title-row\">\r\n <div class=\"title\">{{group || 'General'}}</div>\r\n <div class=\"actions\">\r\n <button\r\n type=\"button\"\r\n [matTooltip]=\"'Export ' + (group || 'General') + ' Settings'\"\r\n mat-icon-button\r\n (click)=\"export($event, groupedSettings[group])\">\r\n <mat-icon>cloud_download</mat-icon>\r\n </button>\r\n <button\r\n type=\"button\"\r\n [matTooltip]=\"'Import ' + (group || 'General') + ' Settings'\"\r\n mat-icon-button\r\n (click)=\"import($event, group)\">\r\n <mat-icon>cloud_upload</mat-icon>\r\n </button>\r\n </div>\r\n </div>\r\n </mat-panel-title>\r\n </mat-expansion-panel-header>\r\n\r\n <div \r\n hideToggle \r\n *ngFor=\"let setting of groupedSettings[group]\" \r\n class=\"setting\"\r\n [ngClass]=\"{ 'has-instruction': !! setting.instruction }\">\r\n <mat-form-field \r\n class=\"full-width form-field-multiline-subscript\"\r\n *ngIf=\"setting.interfaceType===SettingInterfaceType.InputBox\">\r\n <input\r\n matInput\r\n [placeholder]=\"setting.label\"\r\n [(ngModel)]=\"setting.value\"\r\n [name]=\"'setting' + setting.id\">\r\n <mat-hint>{{setting.instruction}}</mat-hint>\r\n </mat-form-field>\r\n\r\n <mat-form-field \r\n class=\"full-width form-field-multiline-subscript\" \r\n *ngIf=\"setting.interfaceType===SettingInterfaceType.Textarea\">\r\n <textarea\r\n matInput\r\n [placeholder]=\"setting.label\"\r\n [(ngModel)]=\"setting.value\"\r\n [name]=\"'setting' + setting.id\">\r\n </textarea>\r\n <mat-hint>{{setting.instruction}}</mat-hint>\r\n </mat-form-field>\r\n\r\n <mat-form-field \r\n class=\"full-width form-field-multiline-subscript\" \r\n *ngIf=\"setting.interfaceType===SettingInterfaceType.Select || setting.interfaceType===SettingInterfaceType.SelectMultiple\">\r\n <mat-select\r\n [placeholder]=\"setting.label\"\r\n [(ngModel)]=\"setting.value\"\r\n [multiple]=\"setting.interfaceType===SettingInterfaceType.SelectMultiple\"\r\n [name]=\"'setting' + setting.id\">\r\n <mat-option *ngFor=\"let item of setting.values | keyNameValue\" [value]=\"item.value\">\r\n {{item.name}}\r\n </mat-option>\r\n </mat-select>\r\n <mat-hint>{{setting.instruction}}</mat-hint>\r\n </mat-form-field>\r\n\r\n <mat-form-field \r\n class=\"full-width form-field-multiline-subscript\" \r\n *ngIf=\"setting.interfaceType===SettingInterfaceType.Date\">\r\n <input\r\n matInput\r\n fsDatePicker\r\n [placeholder]=\"setting.label\"\r\n [(ngModel)]=\"setting.value\"\r\n [name]=\"'setting' + setting.id\">\r\n <mat-hint>{{setting.instruction}}</mat-hint>\r\n </mat-form-field>\r\n\r\n <mat-form-field \r\n class=\"full-width form-field-multiline-subscript\" \r\n *ngIf=\"setting.interfaceType===SettingInterfaceType.Color\">\r\n <input\r\n matInput\r\n fsColorPicker\r\n [placeholder]=\"setting.label\"\r\n [(ngModel)]=\"setting.value\"\r\n [name]=\"'setting' + setting.id\">\r\n <mat-hint>{{setting.instruction}}</mat-hint>\r\n </mat-form-field>\r\n\r\n <mat-form-field \r\n class=\"full-width form-field-multiline-subscript\" \r\n *ngIf=\"setting.interfaceType===SettingInterfaceType.Time\">\r\n <input\r\n matInput\r\n fsTimePicker\r\n [placeholder]=\"setting.label\"\r\n [(ngModel)]=\"setting.value\"\r\n [name]=\"'setting' + setting.id\">\r\n <mat-hint>{{setting.instruction}}</mat-hint>\r\n </mat-form-field>\r\n\r\n <fs-file-picker\r\n *ngIf=\"setting.interfaceType===SettingInterfaceType.File\"\r\n [allowRemove]=\"true\"\r\n [allowDownload]=\"true\"\r\n (select)=\"fileSelect.emit({ setting: setting, file: $event.file })\"\r\n (remove)=\"fileRemove.emit(setting)\"\r\n [url]=\"setting.value\">\r\n <div fsFileLabel>{{setting.label}}</div>\r\n <div fsFileHint>{{setting.instruction}}</div>\r\n </fs-file-picker>\r\n </div>\r\n\r\n <button mat-raised-button color=\"primary\" type=\"button\" (click)=\"saveGroup(group)\">Save</button>\r\n\r\n </mat-expansion-panel>\r\n\r\n</mat-accordion>\r\n", styles: [".mat-expansion-panel-header{font-size:19px}.full-width{width:100%}.title-row{flex-direction:row;box-sizing:border-box;display:flex;place-content:center flex-start;align-items:center;width:100%}.title-row .title{display:flex;flex:1}:host ::ng-deep .mat-expansion-panel-header-title{margin:0}:host ::ng-deep .mat-expansion-panel .actions{display:none}:host ::ng-deep .mat-expansion-panel.mat-expanded .actions{display:block}:host ::ng-deep .setting.has-instruction fs-file-picker fs-label-message{display:block;padding-bottom:1em}\n"], components: [{ type: i4$3.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i4$3.MatExpansionPanelHeader, selector: "mat-expansion-panel-header", inputs: ["tabIndex", "expandedHeight", "collapsedHeight"] }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i7.MatFormField, selector: "mat-form-field", inputs: ["color", "floatLabel", "appearance", "hideRequiredMarker", "hintLabel"], exportAs: ["matFormField"] }, { type: i8.MatSelect, selector: "mat-select", inputs: ["disabled", "disableRipple", "tabIndex"], exportAs: ["matSelect"] }, { type: i9$1.MatOption, selector: "mat-option", exportAs: ["matOption"] }, { type: i10$1.FsDatePickerComponent, selector: "[fsDatePicker]", inputs: ["minYear", "maxYear", "minDate", "maxDate", "startOfDay", "view", "format", "minutes"], outputs: ["change"] }, { type: i11$1.FsColorPickerComponent, selector: "[fsColorPicker]", inputs: ["showClear"] }, { type: i10$1.FsTimePickerComponent, selector: "[fsTimePicker]", inputs: ["view"] }, { type: i12.FsFilePickerComponent, selector: "fs-file-picker", inputs: ["imageWidth", "imageHeight", "imageQuality", "showFilename", "url", "file", "accept", "disabled", "width", "height", "previewWidth", "previewHeight", "allowDownload", "allowReupload", "allowRemove"], outputs: ["select", "remove"] }], directives: [{ type: i4$3.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$3.MatExpansionPanelTitle, selector: "mat-panel-title" }, { type: i11.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i9.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i10.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i16.MatInput, selector: "input[matInput], textarea[matInput], select[matNativeControl], input[matNativeControl], textarea[matNativeControl]", inputs: ["id", "disabled", "required", "type", "value", "readonly", "placeholder", "errorStateMatcher", "aria-describedby"], exportAs: ["matInput"] }, { type: i17.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { type: i17.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { type: i17.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { type: i7.MatHint, selector: "mat-hint", inputs: ["align", "id"] }], pipes: { "keyNameValue": KeyNameValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
630
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SettingsComponent, decorators: [{
631
+ type: Component,
632
+ args: [{
633
+ selector: 'fs-system-settings',
634
+ templateUrl: './settings.component.html',
635
+ styleUrls: ['./settings.component.scss'],
636
+ changeDetection: ChangeDetectionStrategy.OnPush,
637
+ }]
638
+ }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i2$3.ClipboardService }, { type: i3$2.FsPrompt }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { loadSettings: [{
639
+ type: Input
640
+ }], save: [{
641
+ type: Input
642
+ }], fileRemove: [{
643
+ type: Output
644
+ }], fileSelect: [{
645
+ type: Output
643
646
  }] } });
644
647
 
645
- class FileManagerComponent {
646
- constructor() { }
647
- ngOnInit() {
648
- this._configFileManager();
649
- }
650
- _configFileManager() {
651
- this.config = {
652
- fetch: (path) => {
653
- return this.fetch(path);
654
- },
655
- deleteFile: (path) => {
656
- return this.deleteFile(path);
657
- },
658
- deleteDirectory: (path) => {
659
- return this.deleteDirectory(path);
660
- },
661
- createDirectory: (path) => {
662
- return this.createDirectory(path);
663
- },
664
- download: (path) => {
665
- return this.download(path);
666
- },
667
- upload: (path, file) => {
668
- return this.upload(path, file);
669
- }
670
- };
671
- }
672
- }
673
- FileManagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileManagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
674
- FileManagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FileManagerComponent, selector: "fs-system-file-manager", inputs: { fetch: "fetch", deleteFile: "deleteFile", deleteDirectory: "deleteDirectory", createDirectory: "createDirectory", download: "download", upload: "upload" }, ngImport: i0, template: "<fs-file-manager [config]=\"config\"></fs-file-manager>", styles: [""], components: [{ type: i1$2.ɵa, selector: "fs-file-manager", inputs: ["config"] }] });
675
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileManagerComponent, decorators: [{
676
- type: Component,
677
- args: [{
678
- selector: 'fs-system-file-manager',
679
- templateUrl: './file-manager.component.html',
680
- styleUrls: ['./file-manager.component.scss']
681
- }]
682
- }], ctorParameters: function () { return []; }, propDecorators: { fetch: [{
683
- type: Input
684
- }], deleteFile: [{
685
- type: Input
686
- }], deleteDirectory: [{
687
- type: Input
688
- }], createDirectory: [{
689
- type: Input
690
- }], download: [{
691
- type: Input
692
- }], upload: [{
693
- type: Input
648
+ class FileManagerComponent {
649
+ constructor() { }
650
+ ngOnInit() {
651
+ this._configFileManager();
652
+ }
653
+ _configFileManager() {
654
+ this.config = {
655
+ fetch: (path) => {
656
+ return this.fetch(path);
657
+ },
658
+ deleteFile: (path) => {
659
+ return this.deleteFile(path);
660
+ },
661
+ deleteDirectory: (path) => {
662
+ return this.deleteDirectory(path);
663
+ },
664
+ createDirectory: (path) => {
665
+ return this.createDirectory(path);
666
+ },
667
+ download: (path) => {
668
+ return this.download(path);
669
+ },
670
+ upload: (path, file) => {
671
+ return this.upload(path, file);
672
+ }
673
+ };
674
+ }
675
+ }
676
+ FileManagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileManagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
677
+ FileManagerComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: FileManagerComponent, selector: "fs-system-file-manager", inputs: { fetch: "fetch", deleteFile: "deleteFile", deleteDirectory: "deleteDirectory", createDirectory: "createDirectory", download: "download", upload: "upload" }, ngImport: i0, template: "<fs-file-manager [config]=\"config\"></fs-file-manager>", styles: [""], components: [{ type: i1$2.FsFileManagerComponent, selector: "fs-file-manager", inputs: ["config"] }] });
678
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileManagerComponent, decorators: [{
679
+ type: Component,
680
+ args: [{
681
+ selector: 'fs-system-file-manager',
682
+ templateUrl: './file-manager.component.html',
683
+ styleUrls: ['./file-manager.component.scss']
684
+ }]
685
+ }], ctorParameters: function () { return []; }, propDecorators: { fetch: [{
686
+ type: Input
687
+ }], deleteFile: [{
688
+ type: Input
689
+ }], deleteDirectory: [{
690
+ type: Input
691
+ }], createDirectory: [{
692
+ type: Input
693
+ }], download: [{
694
+ type: Input
695
+ }], upload: [{
696
+ type: Input
694
697
  }] } });
695
698
 
696
- class ProcessComponent {
697
- constructor(_dialogRef, data) {
698
- this._dialogRef = _dialogRef;
699
- this.data = data;
700
- this.ProcessState = ProcessState;
701
- }
702
- ngOnInit() {
703
- this.ProcessStates = indexNameValue(ProcessStates);
704
- if (this.data.loadProcess) {
705
- this.load();
706
- }
707
- else {
708
- this.process = this.data.process;
709
- }
710
- }
711
- load() {
712
- this.data.loadProcess(this.data.process)
713
- .subscribe((process) => {
714
- this.process = process;
715
- });
716
- }
717
- }
718
- ProcessComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
719
- ProcessComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ProcessComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"process\">\n <div mat-dialog-title>Process</div>\n <mat-dialog-content>\n <div fxLayout=\"column\">\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{process.prettyName}}\n </fs-label-field>\n\n <div fxLayout=\"row\" fxLayoutGap=\"20px\">\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{ProcessStates[process.state]}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.notify\">\n <fs-label>\n Notification Email\n </fs-label>\n {{process.notify}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.pid\">\n <fs-label>\n PID\n </fs-label>\n {{process.pid}}\n </fs-label-field>\n </div>\n\n <div fxLayout=\"row\" fxLayoutGap=\"20px\">\n <fs-label-field>\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.startDate\">\n <fs-label>\n Start Date\n </fs-label>\n {{ process.startDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.endDate\">\n <fs-label>\n Complete Date\n </fs-label>\n {{ process.endDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.duration\">\n <fs-label>\n Duration\n </fs-label>\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </fs-label-field>\n </div>\n\n <fs-label-field *ngIf=\"process.message\">\n <fs-label>\n Message\n </fs-label>\n {{process.message}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.log\" class=\"log\">\n <fs-label>\n Log\n </fs-label>{{process.log}}\n </fs-label-field>\n\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Done</button>\n <button\n *ngIf=\"process.state===ProcessState.Running && data.loadProcess\"\n mat-button\n (click)=\"load()\">\n Reload\n </button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [":host ::ng-deep .log .field-content{white-space:pre-wrap;font-family:monospace;font-size:14px}\n"], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i6$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i6$1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "fsDateFormat": i4$2.FsDateFormatPipe, "fsDateDuration": i4$2.FsDateDurationPipe } });
720
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessComponent, decorators: [{
721
- type: Component,
722
- args: [{
723
- templateUrl: './process.component.html',
724
- styleUrls: ['./process.component.scss']
725
- }]
726
- }], ctorParameters: function () { return [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
727
- type: Inject,
728
- args: [MAT_DIALOG_DATA]
699
+ class ProcessComponent {
700
+ constructor(_dialogRef, data) {
701
+ this._dialogRef = _dialogRef;
702
+ this.data = data;
703
+ this.ProcessState = ProcessState;
704
+ }
705
+ ngOnInit() {
706
+ this.ProcessStates = indexNameValue(ProcessStates);
707
+ if (this.data.loadProcess) {
708
+ this.load();
709
+ }
710
+ else {
711
+ this.process = this.data.process;
712
+ }
713
+ }
714
+ load() {
715
+ this.data.loadProcess(this.data.process)
716
+ .subscribe((process) => {
717
+ this.process = process;
718
+ });
719
+ }
720
+ }
721
+ ProcessComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
722
+ ProcessComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ProcessComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"process\">\r\n <div mat-dialog-title>Process</div>\r\n <mat-dialog-content>\r\n <div fxLayout=\"column\">\r\n <fs-label-field>\r\n <fs-label>\r\n Name\r\n </fs-label>\r\n {{process.prettyName}}\r\n </fs-label-field>\r\n\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\">\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n Status\r\n </fs-label>\r\n {{ProcessStates[process.state]}}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"process.notify\">\r\n <fs-label>\r\n Notification Email\r\n </fs-label>\r\n {{process.notify}}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"process.pid\">\r\n <fs-label>\r\n PID\r\n </fs-label>\r\n {{process.pid}}\r\n </fs-label-field>\r\n </div>\r\n\r\n <div fxLayout=\"row\" fxLayoutGap=\"20px\">\r\n <fs-label-field>\r\n <fs-label>\r\n Create Date\r\n </fs-label>\r\n {{ process.createDate | fsDateFormat: 'date-time' }}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"process.startDate\">\r\n <fs-label>\r\n Start Date\r\n </fs-label>\r\n {{ process.startDate | fsDateFormat: 'date-time' }}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"process.endDate\">\r\n <fs-label>\r\n Complete Date\r\n </fs-label>\r\n {{ process.endDate | fsDateFormat: 'date-time' }}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"process.duration\">\r\n <fs-label>\r\n Duration\r\n </fs-label>\r\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\r\n </fs-label-field>\r\n </div>\r\n\r\n <fs-label-field *ngIf=\"process.message\">\r\n <fs-label>\r\n Message\r\n </fs-label>\r\n {{process.message}}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"process.log\" class=\"log\">\r\n <fs-label>\r\n Log\r\n </fs-label>{{process.log}}\r\n </fs-label-field>\r\n\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Done</button>\r\n <button\r\n *ngIf=\"process.state===ProcessState.Running && data.loadProcess\"\r\n mat-button\r\n (click)=\"load()\">\r\n Reload\r\n </button>\r\n </mat-dialog-actions>\r\n</fs-dialog>\r\n", styles: [":host ::ng-deep .log .field-content{white-space:pre-wrap;font-family:monospace;font-size:14px}\n"], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i6$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i6$1.DefaultLayoutGapDirective, selector: " [fxLayoutGap], [fxLayoutGap.xs], [fxLayoutGap.sm], [fxLayoutGap.md], [fxLayoutGap.lg], [fxLayoutGap.xl], [fxLayoutGap.lt-sm], [fxLayoutGap.lt-md], [fxLayoutGap.lt-lg], [fxLayoutGap.lt-xl], [fxLayoutGap.gt-xs], [fxLayoutGap.gt-sm], [fxLayoutGap.gt-md], [fxLayoutGap.gt-lg]", inputs: ["fxLayoutGap", "fxLayoutGap.xs", "fxLayoutGap.sm", "fxLayoutGap.md", "fxLayoutGap.lg", "fxLayoutGap.xl", "fxLayoutGap.lt-sm", "fxLayoutGap.lt-md", "fxLayoutGap.lt-lg", "fxLayoutGap.lt-xl", "fxLayoutGap.gt-xs", "fxLayoutGap.gt-sm", "fxLayoutGap.gt-md", "fxLayoutGap.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "fsDateFormat": i4$2.FsDateFormatPipe, "fsDateDuration": i4$2.FsDateDurationPipe } });
723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessComponent, decorators: [{
724
+ type: Component,
725
+ args: [{
726
+ templateUrl: './process.component.html',
727
+ styleUrls: ['./process.component.scss']
728
+ }]
729
+ }], ctorParameters: function () { return [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
730
+ type: Inject,
731
+ args: [MAT_DIALOG_DATA]
729
732
  }] }]; } });
730
733
 
731
- class ProcessesComponent {
732
- constructor(_dialog, _message) {
733
- this._dialog = _dialog;
734
- this._message = _message;
735
- this.actions = [];
736
- this.config = null;
737
- this.ProcessStates = indexNameValue(ProcessStates);
738
- this.ProcessState = ProcessState;
739
- this._destroy$ = new Subject();
740
- }
741
- ngOnInit() {
742
- this._configList();
743
- }
744
- _configList() {
745
- this.config = {
746
- actions: [],
747
- rowActions: [],
748
- filters: [
749
- {
750
- type: ItemType.Keyword,
751
- name: 'keyword',
752
- label: 'Search'
753
- },
754
- {
755
- type: ItemType.Select,
756
- name: 'state',
757
- label: 'Status',
758
- values: ProcessStates
759
- },
760
- ],
761
- fetch: query => {
762
- return this.loadProcesses(query)
763
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
764
- }
765
- };
766
- if (this.run) {
767
- this.config.rowActions.push({
768
- label: 'Run',
769
- click: (data) => {
770
- this._message.info('Running process...');
771
- this.run(data)
772
- .subscribe(() => {
773
- this.list.reload();
774
- this._message.success('Succesfully ran process');
775
- });
776
- setTimeout(() => {
777
- this.list.reload();
778
- }, 500);
779
- }
780
- });
781
- }
782
- if (this.kill) {
783
- this.config.rowActions.push({
784
- label: 'Kill',
785
- show: (data) => {
786
- return !!data.pid;
787
- },
788
- click: (data) => {
789
- this._message.info('Killing process...');
790
- this.kill(data)
791
- .subscribe(() => {
792
- this.list.reload();
793
- this._message.success('Succesfully killed process');
794
- });
795
- setTimeout(() => {
796
- this.list.reload();
797
- }, 500);
798
- }
799
- });
800
- }
801
- if (this.delete) {
802
- this.config.rowActions.push({
803
- label: 'Delete',
804
- click: (data) => {
805
- this.delete(data)
806
- .subscribe(() => {
807
- this.list.reload();
808
- this._message.success('Deleted process');
809
- });
810
- }
811
- });
812
- }
813
- this.actions.forEach(action => {
814
- this.config.actions.push({
815
- primary: false,
816
- label: action.label,
817
- menu: action.menu,
818
- click: () => {
819
- if (action.click) {
820
- action.click();
821
- }
822
- if (action.component) {
823
- const dialogRef = this._dialog.open(action.component, {
824
- width: '800px'
825
- });
826
- dialogRef.afterClosed()
827
- .pipe(takeUntil(this._destroy$))
828
- .subscribe(result => {
829
- this.list.reload();
830
- });
831
- }
832
- },
833
- });
834
- });
835
- }
836
- open(process) {
837
- this._dialog.open(ProcessComponent, {
838
- data: {
839
- process,
840
- loadProcess: this.loadProcess,
841
- },
842
- width: '85%'
843
- });
844
- }
845
- ngOnDestroy() {
846
- this._destroy$.next();
847
- this._destroy$.complete();
848
- }
849
- }
850
- ProcessesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessesComponent, deps: [{ token: i1$1.MatDialog }, { token: i1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
851
- ProcessesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ProcessesComponent, selector: "fs-system-processes", inputs: { loadProcesses: "loadProcesses", loadProcess: "loadProcess", run: "run", kill: "kill", delete: "delete", download: "download", actions: "actions" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a (click)=\"open(row)\">{{row.prettyName}}</a>\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{ProcessStates[row.state]}}\n <small>\n <div *ngIf=\"row.state===ProcessState.Running && row.percent\">Complete: {{ row.percent }}%</div>\n <div *ngIf=\"row.state===ProcessState.Completed && row.filename\">Download: <a href=\"javascript:;\" (click)=\"download(row)\">{{ row.filename }}</a></div>\n <div *ngIf=\"row.pid\">PID: {{ row.pid }}</div>\n <div *ngIf=\"row.state===ProcessState.Running && row.notify\">Notify: {{ row.notify }}</div>\n </small>\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Duration</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{ row.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </ng-template>\n </fs-list-column>\n\n\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Completed</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.endDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe } });
852
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessesComponent, decorators: [{
853
- type: Component,
854
- args: [{
855
- selector: 'fs-system-processes',
856
- templateUrl: './processes.component.html',
857
- styleUrls: ['./processes.component.scss']
858
- }]
859
- }], ctorParameters: function () { return [{ type: i1$1.MatDialog }, { type: i1.FsMessage }]; }, propDecorators: { list: [{
860
- type: ViewChild,
861
- args: [FsListComponent]
862
- }], loadProcesses: [{
863
- type: Input
864
- }], loadProcess: [{
865
- type: Input
866
- }], run: [{
867
- type: Input
868
- }], kill: [{
869
- type: Input
870
- }], delete: [{
871
- type: Input
872
- }], download: [{
873
- type: Input
874
- }], actions: [{
875
- type: Input
734
+ class ProcessesComponent {
735
+ constructor(_dialog, _message) {
736
+ this._dialog = _dialog;
737
+ this._message = _message;
738
+ this.actions = [];
739
+ this.config = null;
740
+ this.ProcessStates = indexNameValue(ProcessStates);
741
+ this.ProcessState = ProcessState;
742
+ this._destroy$ = new Subject();
743
+ }
744
+ ngOnInit() {
745
+ this._configList();
746
+ }
747
+ _configList() {
748
+ this.config = {
749
+ actions: [],
750
+ rowActions: [],
751
+ filters: [
752
+ {
753
+ type: ItemType.Keyword,
754
+ name: 'keyword',
755
+ label: 'Search'
756
+ },
757
+ {
758
+ type: ItemType.Select,
759
+ name: 'state',
760
+ label: 'Status',
761
+ values: ProcessStates
762
+ },
763
+ ],
764
+ fetch: query => {
765
+ return this.loadProcesses(query)
766
+ .pipe(map((response) => ({ data: response.data, paging: response.paging })));
767
+ }
768
+ };
769
+ if (this.run) {
770
+ this.config.rowActions.push({
771
+ label: 'Run',
772
+ click: (data) => {
773
+ this._message.info('Running process...');
774
+ this.run(data)
775
+ .subscribe(() => {
776
+ this.list.reload();
777
+ this._message.success('Succesfully ran process');
778
+ });
779
+ setTimeout(() => {
780
+ this.list.reload();
781
+ }, 500);
782
+ }
783
+ });
784
+ }
785
+ if (this.kill) {
786
+ this.config.rowActions.push({
787
+ label: 'Kill',
788
+ show: (data) => {
789
+ return !!data.pid;
790
+ },
791
+ click: (data) => {
792
+ this._message.info('Killing process...');
793
+ this.kill(data)
794
+ .subscribe(() => {
795
+ this.list.reload();
796
+ this._message.success('Succesfully killed process');
797
+ });
798
+ setTimeout(() => {
799
+ this.list.reload();
800
+ }, 500);
801
+ }
802
+ });
803
+ }
804
+ if (this.delete) {
805
+ this.config.rowActions.push({
806
+ label: 'Delete',
807
+ click: (data) => {
808
+ this.delete(data)
809
+ .subscribe(() => {
810
+ this.list.reload();
811
+ this._message.success('Deleted process');
812
+ });
813
+ }
814
+ });
815
+ }
816
+ this.actions.forEach(action => {
817
+ this.config.actions.push({
818
+ primary: false,
819
+ label: action.label,
820
+ menu: action.menu,
821
+ click: () => {
822
+ if (action.click) {
823
+ action.click();
824
+ }
825
+ if (action.component) {
826
+ const dialogRef = this._dialog.open(action.component, {
827
+ width: '800px'
828
+ });
829
+ dialogRef.afterClosed()
830
+ .pipe(takeUntil(this._destroy$))
831
+ .subscribe(result => {
832
+ this.list.reload();
833
+ });
834
+ }
835
+ },
836
+ });
837
+ });
838
+ }
839
+ open(process) {
840
+ this._dialog.open(ProcessComponent, {
841
+ data: {
842
+ process,
843
+ loadProcess: this.loadProcess,
844
+ },
845
+ width: '85%'
846
+ });
847
+ }
848
+ ngOnDestroy() {
849
+ this._destroy$.next();
850
+ this._destroy$.complete();
851
+ }
852
+ }
853
+ ProcessesComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessesComponent, deps: [{ token: i1$1.MatDialog }, { token: i1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
854
+ ProcessesComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ProcessesComponent, selector: "fs-system-processes", inputs: { loadProcesses: "loadProcesses", loadProcess: "loadProcess", run: "run", kill: "kill", delete: "delete", download: "download", actions: "actions" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\r\n <fs-list-column>\r\n <ng-template fs-list-header>Name</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <a (click)=\"open(row)\">{{row.prettyName}}</a>\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n <fs-list-column>\r\n <ng-template fs-list-header>Status</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{ProcessStates[row.state]}}\r\n <small>\r\n <div *ngIf=\"row.state===ProcessState.Running && row.percent\">Complete: {{ row.percent }}%</div>\r\n <div *ngIf=\"row.state===ProcessState.Completed && row.filename\">Download: <a href=\"javascript:;\" (click)=\"download(row)\">{{ row.filename }}</a></div>\r\n <div *ngIf=\"row.pid\">PID: {{ row.pid }}</div>\r\n <div *ngIf=\"row.state===ProcessState.Running && row.notify\">Notify: {{ row.notify }}</div>\r\n </small>\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n <fs-list-column>\r\n <ng-template fs-list-header>Duration</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{ row.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n\r\n <fs-list-column>\r\n <ng-template fs-list-header>Message</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.message}}\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n <fs-list-column>\r\n <ng-template fs-list-header>Completed</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <fs-date-ago [date]=\"row.endDate\"></fs-date-ago>\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>\r\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe } });
855
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessesComponent, decorators: [{
856
+ type: Component,
857
+ args: [{
858
+ selector: 'fs-system-processes',
859
+ templateUrl: './processes.component.html',
860
+ styleUrls: ['./processes.component.scss']
861
+ }]
862
+ }], ctorParameters: function () { return [{ type: i1$1.MatDialog }, { type: i1.FsMessage }]; }, propDecorators: { list: [{
863
+ type: ViewChild,
864
+ args: [FsListComponent]
865
+ }], loadProcesses: [{
866
+ type: Input
867
+ }], loadProcess: [{
868
+ type: Input
869
+ }], run: [{
870
+ type: Input
871
+ }], kill: [{
872
+ type: Input
873
+ }], delete: [{
874
+ type: Input
875
+ }], download: [{
876
+ type: Input
877
+ }], actions: [{
878
+ type: Input
876
879
  }] } });
877
880
 
878
- class ServerLogComponent {
879
- constructor(data) {
880
- this.data = data;
881
- }
882
- ngOnInit() {
883
- if (this.data.log) {
884
- this.log = this.data.log;
885
- try {
886
- this.log.backtrace = JSON.parse(this.log.backtrace);
887
- }
888
- catch (e) { }
889
- try {
890
- this.log.server = JSON.parse(this.log.server);
891
- }
892
- catch (e) { }
893
- }
894
- }
895
- }
896
- ServerLogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
897
- ServerLogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ServerLogComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"log\">\n <div mat-dialog-title>Log</div>\n <mat-dialog-content>\n <div fxLayout=\"column\">\n <fs-label-field>\n <fs-label>\n Error Type\n </fs-label>\n {{log.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Message\n </fs-label>\n {{log.message}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n URL\n </fs-label>\n {{log.url}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{log.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n File\n </fs-label>\n {{log.file}} @ {{log.line}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Backtrace\n </fs-label>\n <pre>{{log.backtrace|json}}</pre>\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n $_SERVER\n </fs-label>\n <pre>{{log.server|json}}</pre>\n </fs-label-field>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Done</button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [""], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i6$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "fsDateFormat": i4$2.FsDateFormatPipe, "json": i9.JsonPipe } });
898
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogComponent, decorators: [{
899
- type: Component,
900
- args: [{
901
- templateUrl: './server-log.component.html',
902
- styleUrls: ['./server-log.component.scss']
903
- }]
904
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
905
- type: Inject,
906
- args: [MAT_DIALOG_DATA]
881
+ class ServerLogComponent {
882
+ constructor(data) {
883
+ this.data = data;
884
+ }
885
+ ngOnInit() {
886
+ if (this.data.log) {
887
+ this.log = this.data.log;
888
+ try {
889
+ this.log.backtrace = JSON.parse(this.log.backtrace);
890
+ }
891
+ catch (e) { }
892
+ try {
893
+ this.log.server = JSON.parse(this.log.server);
894
+ }
895
+ catch (e) { }
896
+ }
897
+ }
898
+ }
899
+ ServerLogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
900
+ ServerLogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ServerLogComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"log\">\r\n <div mat-dialog-title>Log</div>\r\n <mat-dialog-content>\r\n <div fxLayout=\"column\">\r\n <fs-label-field>\r\n <fs-label>\r\n Error Type\r\n </fs-label>\r\n {{log.type}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n Message\r\n </fs-label>\r\n {{log.message}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n URL\r\n </fs-label>\r\n {{log.url}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n Date\r\n </fs-label>\r\n {{log.createDate|fsDateFormat: 'full-date-time'}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n File\r\n </fs-label>\r\n {{log.file}} @ {{log.line}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n Backtrace\r\n </fs-label>\r\n <pre>{{log.backtrace|json}}</pre>\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n $_SERVER\r\n </fs-label>\r\n <pre>{{log.server|json}}</pre>\r\n </fs-label-field>\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Done</button>\r\n </mat-dialog-actions>\r\n</fs-dialog>\r\n", styles: [""], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i6$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "fsDateFormat": i4$2.FsDateFormatPipe, "json": i9.JsonPipe } });
901
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogComponent, decorators: [{
902
+ type: Component,
903
+ args: [{
904
+ templateUrl: './server-log.component.html',
905
+ styleUrls: ['./server-log.component.scss']
906
+ }]
907
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
908
+ type: Inject,
909
+ args: [MAT_DIALOG_DATA]
907
910
  }] }]; } });
908
911
 
909
- class ServerLogsComponent {
910
- constructor(_dialog) {
911
- this._dialog = _dialog;
912
- this.config = null;
913
- this.logTypes = [];
914
- }
915
- ngOnInit() {
916
- this._configList();
917
- }
918
- _configList() {
919
- this.config = {
920
- filters: [
921
- {
922
- type: ItemType.Keyword,
923
- name: 'keyword',
924
- label: 'Search'
925
- }
926
- ],
927
- fetch: query => {
928
- return this.loadLogs(query)
929
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
930
- }
931
- };
932
- }
933
- open(log) {
934
- this._dialog.open(ServerLogComponent, {
935
- data: { log: log },
936
- width: '85%'
937
- });
938
- }
939
- }
940
- ServerLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogsComponent, deps: [{ token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
941
- ServerLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ServerLogsComponent, selector: "fs-system-server-logs", inputs: { loadLogs: "loadLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">{{row.message}}</a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Type</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.type}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list>\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
942
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogsComponent, decorators: [{
943
- type: Component,
944
- args: [{
945
- selector: 'fs-system-server-logs',
946
- templateUrl: './server-logs.component.html',
947
- styleUrls: ['./server-logs.component.scss']
948
- }]
949
- }], ctorParameters: function () { return [{ type: i1$1.MatDialog }]; }, propDecorators: { list: [{
950
- type: ViewChild,
951
- args: ['list', { static: true }]
952
- }], loadLogs: [{
953
- type: Input
912
+ class ServerLogsComponent {
913
+ constructor(_dialog) {
914
+ this._dialog = _dialog;
915
+ this.config = null;
916
+ this.logTypes = [];
917
+ }
918
+ ngOnInit() {
919
+ this._configList();
920
+ }
921
+ _configList() {
922
+ this.config = {
923
+ filters: [
924
+ {
925
+ type: ItemType.Keyword,
926
+ name: 'keyword',
927
+ label: 'Search'
928
+ }
929
+ ],
930
+ fetch: query => {
931
+ return this.loadLogs(query)
932
+ .pipe(map((response) => ({ data: response.data, paging: response.paging })));
933
+ }
934
+ };
935
+ }
936
+ open(log) {
937
+ this._dialog.open(ServerLogComponent, {
938
+ data: { log: log },
939
+ width: '85%'
940
+ });
941
+ }
942
+ }
943
+ ServerLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogsComponent, deps: [{ token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
944
+ ServerLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ServerLogsComponent, selector: "fs-system-server-logs", inputs: { loadLogs: "loadLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: ["list"], descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\r\n <fs-list-column>\r\n <ng-template fs-list-header>Message</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <a href=\"javascript:;\" (click)=\"open(row)\">{{row.message}}</a>\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column>\r\n <ng-template fs-list-header>Type</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.type}}\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column>\r\n <ng-template fs-list-header>Date</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\r\n </ng-template>\r\n </fs-list-column>\r\n </fs-list>\r\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
945
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogsComponent, decorators: [{
946
+ type: Component,
947
+ args: [{
948
+ selector: 'fs-system-server-logs',
949
+ templateUrl: './server-logs.component.html',
950
+ styleUrls: ['./server-logs.component.scss']
951
+ }]
952
+ }], ctorParameters: function () { return [{ type: i1$1.MatDialog }]; }, propDecorators: { list: [{
953
+ type: ViewChild,
954
+ args: ['list', { static: true }]
955
+ }], loadLogs: [{
956
+ type: Input
954
957
  }] } });
955
958
 
956
- class UpgradeLogsComponent {
957
- constructor() {
958
- this.config = null;
959
- this.logTypes = [];
960
- }
961
- ngOnInit() {
962
- this._configList();
963
- }
964
- _configList() {
965
- this.config = {
966
- paging: false,
967
- filters: [
968
- {
969
- type: ItemType.Keyword,
970
- name: 'keyword',
971
- label: 'Search'
972
- }
973
- ],
974
- fetch: query => {
975
- return this.loadUpgradeLogs(query)
976
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
977
- }
978
- };
979
- }
980
- }
981
- UpgradeLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: UpgradeLogsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
982
- UpgradeLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: UpgradeLogsComponent, selector: "fs-system-upgrade-logs", inputs: { loadUpgradeLogs: "loadUpgradeLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.name}}\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Function</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.function}}()\n </ng-template>\n </fs-list-column>\n\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
983
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: UpgradeLogsComponent, decorators: [{
984
- type: Component,
985
- args: [{
986
- selector: 'fs-system-upgrade-logs',
987
- templateUrl: './upgrade-logs.component.html',
988
- styleUrls: ['./upgrade-logs.component.scss']
989
- }]
990
- }], propDecorators: { list: [{
991
- type: ViewChild,
992
- args: [FsListComponent, { static: true }]
993
- }], loadUpgradeLogs: [{
994
- type: Input
959
+ class UpgradeLogsComponent {
960
+ constructor() {
961
+ this.config = null;
962
+ this.logTypes = [];
963
+ }
964
+ ngOnInit() {
965
+ this._configList();
966
+ }
967
+ _configList() {
968
+ this.config = {
969
+ paging: false,
970
+ filters: [
971
+ {
972
+ type: ItemType.Keyword,
973
+ name: 'keyword',
974
+ label: 'Search'
975
+ }
976
+ ],
977
+ fetch: query => {
978
+ return this.loadUpgradeLogs(query)
979
+ .pipe(map((response) => ({ data: response.data, paging: response.paging })));
980
+ }
981
+ };
982
+ }
983
+ }
984
+ UpgradeLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: UpgradeLogsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
985
+ UpgradeLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: UpgradeLogsComponent, selector: "fs-system-upgrade-logs", inputs: { loadUpgradeLogs: "loadUpgradeLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\r\n <fs-list-column>\r\n <ng-template fs-list-header>Name</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.name}}\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n <fs-list-column>\r\n <ng-template fs-list-header>Function</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.function}}()\r\n </ng-template>\r\n </fs-list-column>\r\n\r\n <fs-list-column>\r\n <ng-template fs-list-header>Date</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>\r\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
986
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: UpgradeLogsComponent, decorators: [{
987
+ type: Component,
988
+ args: [{
989
+ selector: 'fs-system-upgrade-logs',
990
+ templateUrl: './upgrade-logs.component.html',
991
+ styleUrls: ['./upgrade-logs.component.scss']
992
+ }]
993
+ }], propDecorators: { list: [{
994
+ type: ViewChild,
995
+ args: [FsListComponent, { static: true }]
996
+ }], loadUpgradeLogs: [{
997
+ type: Input
995
998
  }] } });
996
999
 
997
- class ApiLogComponent {
998
- constructor(_dialogRef, data) {
999
- this._dialogRef = _dialogRef;
1000
- this.data = data;
1001
- }
1002
- ngOnInit() {
1003
- this.apiLogStates = indexNameValue(ApiLogStates);
1004
- if (this.data.apiLog) {
1005
- this.apiLog = this.data.apiLog;
1006
- }
1007
- }
1008
- }
1009
- ApiLogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
1010
- ApiLogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ApiLogComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"apiLog\">\n <div mat-dialog-title>API Log</div>\n <mat-dialog-content>\n <div fxLayout=\"column\">\n <fs-label-field>\n <fs-label>\n Type\n </fs-label>\n {{apiLog.type}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n {{apiLogStates[apiLog.state]}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Date\n </fs-label>\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.length\">\n <fs-label>\n Duration\n </fs-label>\n {{ apiLog.length | fsDateDuration }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.code\">\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.message\">\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.url\">\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.request\">\n <fs-label>\n Request\n </fs-label>\n <pre>{{apiLog.request|json}}</pre>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"apiLog.response\">\n <fs-label>\n Response\n </fs-label>\n <pre>{{apiLog.response|json}}</pre>\n </fs-label-field>\n\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Done</button>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [""], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i6$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "fsDateFormat": i4$2.FsDateFormatPipe, "fsDateDuration": i4$2.FsDateDurationPipe, "json": i9.JsonPipe } });
1011
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogComponent, decorators: [{
1012
- type: Component,
1013
- args: [{
1014
- templateUrl: './api-log.component.html',
1015
- styleUrls: ['./api-log.component.scss']
1016
- }]
1017
- }], ctorParameters: function () { return [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
1018
- type: Inject,
1019
- args: [MAT_DIALOG_DATA]
1000
+ class ApiLogComponent {
1001
+ constructor(_dialogRef, data) {
1002
+ this._dialogRef = _dialogRef;
1003
+ this.data = data;
1004
+ }
1005
+ ngOnInit() {
1006
+ this.apiLogStates = indexNameValue(ApiLogStates);
1007
+ if (this.data.apiLog) {
1008
+ this.apiLog = this.data.apiLog;
1009
+ }
1010
+ }
1011
+ }
1012
+ ApiLogComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogComponent, deps: [{ token: i1$1.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
1013
+ ApiLogComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ApiLogComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"apiLog\">\r\n <div mat-dialog-title>API Log</div>\r\n <mat-dialog-content>\r\n <div fxLayout=\"column\">\r\n <fs-label-field>\r\n <fs-label>\r\n Type\r\n </fs-label>\r\n {{apiLog.type}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n Status\r\n </fs-label>\r\n {{apiLogStates[apiLog.state]}}\r\n </fs-label-field>\r\n\r\n <fs-label-field>\r\n <fs-label>\r\n Date\r\n </fs-label>\r\n {{apiLog.createDate|fsDateFormat: 'full-date-time'}}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"apiLog.length\">\r\n <fs-label>\r\n Duration\r\n </fs-label>\r\n {{ apiLog.length | fsDateDuration }}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"apiLog.code\">\r\n <fs-label>\r\n Code\r\n </fs-label>\r\n {{apiLog.code}}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"apiLog.message\">\r\n <fs-label>\r\n Message\r\n </fs-label>\r\n {{apiLog.message}}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"apiLog.url\">\r\n <fs-label>\r\n URL\r\n </fs-label>\r\n {{apiLog.url}}\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"apiLog.request\">\r\n <fs-label>\r\n Request\r\n </fs-label>\r\n <pre>{{apiLog.request|json}}</pre>\r\n </fs-label-field>\r\n\r\n <fs-label-field *ngIf=\"apiLog.response\">\r\n <fs-label>\r\n Response\r\n </fs-label>\r\n <pre>{{apiLog.response|json}}</pre>\r\n </fs-label-field>\r\n\r\n </div>\r\n </mat-dialog-content>\r\n <mat-dialog-actions>\r\n <button mat-button [mat-dialog-close]=\"true\" color=\"primary\">Done</button>\r\n </mat-dialog-actions>\r\n</fs-dialog>\r\n", styles: [""], components: [{ type: i2$2.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode"] }, { type: i2$1.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { type: i2$1.FsLabelComponent, selector: "fs-label" }, { type: i4.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }], directives: [{ type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { type: i1$1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i6$1.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }, { type: i1$1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["type", "mat-dialog-close", "aria-label", "matDialogClose"], exportAs: ["matDialogClose"] }], pipes: { "fsDateFormat": i4$2.FsDateFormatPipe, "fsDateDuration": i4$2.FsDateDurationPipe, "json": i9.JsonPipe } });
1014
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogComponent, decorators: [{
1015
+ type: Component,
1016
+ args: [{
1017
+ templateUrl: './api-log.component.html',
1018
+ styleUrls: ['./api-log.component.scss']
1019
+ }]
1020
+ }], ctorParameters: function () { return [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
1021
+ type: Inject,
1022
+ args: [MAT_DIALOG_DATA]
1020
1023
  }] }]; } });
1021
1024
 
1022
- class ApiLogsComponent {
1023
- constructor(_dialog) {
1024
- this._dialog = _dialog;
1025
- this.config = null;
1026
- this.apiLogStates = indexNameValue(ApiLogStates);
1027
- }
1028
- ngOnInit() {
1029
- this._configList();
1030
- }
1031
- _configList() {
1032
- this.config = {
1033
- filters: [
1034
- {
1035
- type: ItemType.Keyword,
1036
- name: 'keyword',
1037
- label: 'Search'
1038
- },
1039
- {
1040
- type: ItemType.Select,
1041
- name: 'state',
1042
- label: 'Status',
1043
- values: ApiLogStates
1044
- },
1045
- {
1046
- name: 'createDate',
1047
- type: ItemType.DateRange,
1048
- label: ['From Date', 'To Date'],
1049
- }
1050
- ],
1051
- fetch: query => {
1052
- Object.assign(query, {});
1053
- return this.loadApiLogs(query)
1054
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
1055
- }
1056
- };
1057
- }
1058
- open(apiLog) {
1059
- this._dialog.open(ApiLogComponent, {
1060
- data: { apiLog: apiLog },
1061
- width: '85%'
1062
- });
1063
- }
1064
- }
1065
- ApiLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogsComponent, deps: [{ token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1066
- ApiLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ApiLogsComponent, selector: "fs-system-api-logs", inputs: { loadApiLogs: "loadApiLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">{{row.type || 'Unknown'}}</a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div><small *ngIf=\"row.length\">Duration: {{ row.length | fsDateDuration }}</small></div>\n </ng-template>\n </fs-list-column>\n </fs-list>\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe } });
1067
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogsComponent, decorators: [{
1068
- type: Component,
1069
- args: [{
1070
- selector: 'fs-system-api-logs',
1071
- templateUrl: './api-logs.component.html',
1072
- styleUrls: ['./api-logs.component.scss']
1073
- }]
1074
- }], ctorParameters: function () { return [{ type: i1$1.MatDialog }]; }, propDecorators: { list: [{
1075
- type: ViewChild,
1076
- args: [FsListComponent, { static: true }]
1077
- }], loadApiLogs: [{
1078
- type: Input
1025
+ class ApiLogsComponent {
1026
+ constructor(_dialog) {
1027
+ this._dialog = _dialog;
1028
+ this.config = null;
1029
+ this.apiLogStates = indexNameValue(ApiLogStates);
1030
+ }
1031
+ ngOnInit() {
1032
+ this._configList();
1033
+ }
1034
+ _configList() {
1035
+ this.config = {
1036
+ filters: [
1037
+ {
1038
+ type: ItemType.Keyword,
1039
+ name: 'keyword',
1040
+ label: 'Search'
1041
+ },
1042
+ {
1043
+ type: ItemType.Select,
1044
+ name: 'state',
1045
+ label: 'Status',
1046
+ values: ApiLogStates
1047
+ },
1048
+ {
1049
+ name: 'createDate',
1050
+ type: ItemType.DateRange,
1051
+ label: ['From Date', 'To Date'],
1052
+ }
1053
+ ],
1054
+ fetch: query => {
1055
+ Object.assign(query, {});
1056
+ return this.loadApiLogs(query)
1057
+ .pipe(map((response) => ({ data: response.data, paging: response.paging })));
1058
+ }
1059
+ };
1060
+ }
1061
+ open(apiLog) {
1062
+ this._dialog.open(ApiLogComponent, {
1063
+ data: { apiLog: apiLog },
1064
+ width: '85%'
1065
+ });
1066
+ }
1067
+ }
1068
+ ApiLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogsComponent, deps: [{ token: i1$1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
1069
+ ApiLogsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: ApiLogsComponent, selector: "fs-system-api-logs", inputs: { loadApiLogs: "loadApiLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\r\n <fs-list-column>\r\n <ng-template fs-list-header>Name</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <a href=\"javascript:;\" (click)=\"open(row)\">{{row.type || 'Unknown'}}</a>\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column>\r\n <ng-template fs-list-header>Message</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{row.message}}\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column>\r\n <ng-template fs-list-header>Status</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n {{apiLogStates[row.state]}}\r\n </ng-template>\r\n </fs-list-column>\r\n <fs-list-column>\r\n <ng-template fs-list-header>Date</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\r\n <div><small *ngIf=\"row.length\">Duration: {{ row.length | fsDateDuration }}</small></div>\r\n </ng-template>\r\n </fs-list-column>\r\n </fs-list>\r\n", styles: [""], components: [{ type: i3$1.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i3$1.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i3$1.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i3$1.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe } });
1070
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogsComponent, decorators: [{
1071
+ type: Component,
1072
+ args: [{
1073
+ selector: 'fs-system-api-logs',
1074
+ templateUrl: './api-logs.component.html',
1075
+ styleUrls: ['./api-logs.component.scss']
1076
+ }]
1077
+ }], ctorParameters: function () { return [{ type: i1$1.MatDialog }]; }, propDecorators: { list: [{
1078
+ type: ViewChild,
1079
+ args: [FsListComponent, { static: true }]
1080
+ }], loadApiLogs: [{
1081
+ type: Input
1079
1082
  }] } });
1080
1083
 
1081
- class InfoComponent {
1082
- ngAfterViewInit() {
1083
- this._load();
1084
- }
1085
- _load() {
1086
- this.load()
1087
- .subscribe((info) => {
1088
- info += '<style>body { background: transparent; }</style>';
1089
- const doc = this.iframe.nativeElement.contentDocument || this.iframe.nativeElement.contentWindow;
1090
- doc.open();
1091
- doc.write(info);
1092
- doc.close();
1093
- const scrollHeight = (this.iframe.nativeElement.contentWindow.document.documentElement.scrollHeight + 100);
1094
- this.iframe.nativeElement.style.height = `${scrollHeight}px`;
1095
- });
1096
- }
1097
- }
1098
- InfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: InfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1099
- InfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: InfoComponent, selector: "fs-system-info", inputs: { load: "load" }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true }], ngImport: i0, template: "<iframe #iframe></iframe>\n", styles: ["iframe{width:100%;border:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1100
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: InfoComponent, decorators: [{
1101
- type: Component,
1102
- args: [{
1103
- selector: 'fs-system-info',
1104
- templateUrl: 'info.component.html',
1105
- styleUrls: ['info.component.scss'],
1106
- changeDetection: ChangeDetectionStrategy.OnPush,
1107
- }]
1108
- }], propDecorators: { iframe: [{
1109
- type: ViewChild,
1110
- args: ['iframe']
1111
- }], load: [{
1112
- type: Input
1084
+ class InfoComponent {
1085
+ ngAfterViewInit() {
1086
+ this._load();
1087
+ }
1088
+ _load() {
1089
+ this.load()
1090
+ .subscribe((info) => {
1091
+ info += '<style>body { background: transparent; }</style>';
1092
+ const doc = this.iframe.nativeElement.contentDocument || this.iframe.nativeElement.contentWindow;
1093
+ doc.open();
1094
+ doc.write(info);
1095
+ doc.close();
1096
+ const scrollHeight = (this.iframe.nativeElement.contentWindow.document.documentElement.scrollHeight + 100);
1097
+ this.iframe.nativeElement.style.height = `${scrollHeight}px`;
1098
+ });
1099
+ }
1100
+ }
1101
+ InfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: InfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1102
+ InfoComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "12.2.16", type: InfoComponent, selector: "fs-system-info", inputs: { load: "load" }, viewQueries: [{ propertyName: "iframe", first: true, predicate: ["iframe"], descendants: true }], ngImport: i0, template: "<iframe #iframe></iframe>\r\n", styles: ["iframe{width:100%;border:0}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1103
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: InfoComponent, decorators: [{
1104
+ type: Component,
1105
+ args: [{
1106
+ selector: 'fs-system-info',
1107
+ templateUrl: 'info.component.html',
1108
+ styleUrls: ['info.component.scss'],
1109
+ changeDetection: ChangeDetectionStrategy.OnPush,
1110
+ }]
1111
+ }], propDecorators: { iframe: [{
1112
+ type: ViewChild,
1113
+ args: ['iframe']
1114
+ }], load: [{
1115
+ type: Input
1113
1116
  }] } });
1114
1117
 
1115
- class FsSystemModule {
1116
- static forRoot(config) {
1117
- return {
1118
- ngModule: FsSystemModule,
1119
- providers: [
1120
- { provide: FS_SYSTEM_CONFIG, useValue: config || {} },
1121
- ]
1122
- };
1123
- }
1124
- }
1125
- FsSystemModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1126
- FsSystemModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, declarations: [DashboardComponent,
1127
- CronsComponent,
1128
- SettingsComponent,
1129
- KeyNameValuePipe,
1130
- FileManagerComponent,
1131
- ProcessesComponent,
1132
- ServerLogComponent,
1133
- ServerLogsComponent,
1134
- UpgradeLogsComponent,
1135
- ApiLogsComponent,
1136
- ApiLogComponent,
1137
- InfoComponent,
1138
- ProcessComponent,
1139
- CronComponent,
1140
- CronLogComponent], imports: [CommonModule,
1141
- FlexLayoutModule,
1142
- FormsModule,
1143
- MatButtonModule,
1144
- MatExpansionModule,
1145
- MatTooltipModule,
1146
- MatIconModule,
1147
- MatFormFieldModule,
1148
- MatInputModule,
1149
- MatSelectModule,
1150
- MatDialogModule,
1151
- MatTabsModule,
1152
- FsDateModule,
1153
- FsSkeletonModule,
1154
- FsListModule,
1155
- FsFileModule,
1156
- FsFileManagerModule,
1157
- FsLabelModule,
1158
- FsDialogModule,
1159
- FsDatePickerModule,
1160
- FsMenuModule,
1161
- ClipboardModule], exports: [DashboardComponent,
1162
- CronsComponent,
1163
- SettingsComponent,
1164
- FileManagerComponent,
1165
- ProcessesComponent,
1166
- ServerLogsComponent,
1167
- UpgradeLogsComponent,
1168
- ApiLogsComponent,
1169
- InfoComponent] });
1170
- FsSystemModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, imports: [[
1171
- CommonModule,
1172
- FlexLayoutModule,
1173
- FormsModule,
1174
- MatButtonModule,
1175
- MatExpansionModule,
1176
- MatTooltipModule,
1177
- MatIconModule,
1178
- MatFormFieldModule,
1179
- MatInputModule,
1180
- MatSelectModule,
1181
- MatDialogModule,
1182
- MatTabsModule,
1183
- FsDateModule,
1184
- FsSkeletonModule,
1185
- FsListModule,
1186
- FsFileModule,
1187
- FsFileManagerModule,
1188
- FsLabelModule,
1189
- FsDialogModule,
1190
- FsDatePickerModule,
1191
- FsMenuModule,
1192
- ClipboardModule,
1193
- ]] });
1194
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, decorators: [{
1195
- type: NgModule,
1196
- args: [{
1197
- imports: [
1198
- CommonModule,
1199
- FlexLayoutModule,
1200
- FormsModule,
1201
- MatButtonModule,
1202
- MatExpansionModule,
1203
- MatTooltipModule,
1204
- MatIconModule,
1205
- MatFormFieldModule,
1206
- MatInputModule,
1207
- MatSelectModule,
1208
- MatDialogModule,
1209
- MatTabsModule,
1210
- FsDateModule,
1211
- FsSkeletonModule,
1212
- FsListModule,
1213
- FsFileModule,
1214
- FsFileManagerModule,
1215
- FsLabelModule,
1216
- FsDialogModule,
1217
- FsDatePickerModule,
1218
- FsMenuModule,
1219
- ClipboardModule,
1220
- ],
1221
- exports: [
1222
- DashboardComponent,
1223
- CronsComponent,
1224
- SettingsComponent,
1225
- FileManagerComponent,
1226
- ProcessesComponent,
1227
- ServerLogsComponent,
1228
- UpgradeLogsComponent,
1229
- ApiLogsComponent,
1230
- InfoComponent,
1231
- ],
1232
- declarations: [
1233
- DashboardComponent,
1234
- CronsComponent,
1235
- SettingsComponent,
1236
- KeyNameValuePipe,
1237
- FileManagerComponent,
1238
- ProcessesComponent,
1239
- ServerLogComponent,
1240
- ServerLogsComponent,
1241
- UpgradeLogsComponent,
1242
- ApiLogsComponent,
1243
- ApiLogComponent,
1244
- InfoComponent,
1245
- ProcessComponent,
1246
- CronComponent,
1247
- CronLogComponent,
1248
- ],
1249
- }]
1118
+ class FsSystemModule {
1119
+ static forRoot(config) {
1120
+ return {
1121
+ ngModule: FsSystemModule,
1122
+ providers: [
1123
+ { provide: FS_SYSTEM_CONFIG, useValue: config || {} },
1124
+ ]
1125
+ };
1126
+ }
1127
+ }
1128
+ FsSystemModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1129
+ FsSystemModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, declarations: [DashboardComponent,
1130
+ CronsComponent,
1131
+ SettingsComponent,
1132
+ KeyNameValuePipe,
1133
+ FileManagerComponent,
1134
+ ProcessesComponent,
1135
+ ServerLogComponent,
1136
+ ServerLogsComponent,
1137
+ UpgradeLogsComponent,
1138
+ ApiLogsComponent,
1139
+ ApiLogComponent,
1140
+ InfoComponent,
1141
+ ProcessComponent,
1142
+ CronComponent,
1143
+ CronLogComponent], imports: [CommonModule,
1144
+ FlexLayoutModule,
1145
+ FormsModule,
1146
+ MatButtonModule,
1147
+ MatExpansionModule,
1148
+ MatTooltipModule,
1149
+ MatIconModule,
1150
+ MatFormFieldModule,
1151
+ MatInputModule,
1152
+ MatSelectModule,
1153
+ MatDialogModule,
1154
+ MatTabsModule,
1155
+ FsDateModule,
1156
+ FsSkeletonModule,
1157
+ FsListModule,
1158
+ FsFileModule,
1159
+ FsFileManagerModule,
1160
+ FsLabelModule,
1161
+ FsDialogModule,
1162
+ FsDatePickerModule,
1163
+ FsMenuModule,
1164
+ FsColorPickerModule,
1165
+ ClipboardModule], exports: [DashboardComponent,
1166
+ CronsComponent,
1167
+ SettingsComponent,
1168
+ FileManagerComponent,
1169
+ ProcessesComponent,
1170
+ ServerLogsComponent,
1171
+ UpgradeLogsComponent,
1172
+ ApiLogsComponent,
1173
+ InfoComponent] });
1174
+ FsSystemModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, imports: [[
1175
+ CommonModule,
1176
+ FlexLayoutModule,
1177
+ FormsModule,
1178
+ MatButtonModule,
1179
+ MatExpansionModule,
1180
+ MatTooltipModule,
1181
+ MatIconModule,
1182
+ MatFormFieldModule,
1183
+ MatInputModule,
1184
+ MatSelectModule,
1185
+ MatDialogModule,
1186
+ MatTabsModule,
1187
+ FsDateModule,
1188
+ FsSkeletonModule,
1189
+ FsListModule,
1190
+ FsFileModule,
1191
+ FsFileManagerModule,
1192
+ FsLabelModule,
1193
+ FsDialogModule,
1194
+ FsDatePickerModule,
1195
+ FsMenuModule,
1196
+ FsColorPickerModule,
1197
+ ClipboardModule,
1198
+ ]] });
1199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, decorators: [{
1200
+ type: NgModule,
1201
+ args: [{
1202
+ imports: [
1203
+ CommonModule,
1204
+ FlexLayoutModule,
1205
+ FormsModule,
1206
+ MatButtonModule,
1207
+ MatExpansionModule,
1208
+ MatTooltipModule,
1209
+ MatIconModule,
1210
+ MatFormFieldModule,
1211
+ MatInputModule,
1212
+ MatSelectModule,
1213
+ MatDialogModule,
1214
+ MatTabsModule,
1215
+ FsDateModule,
1216
+ FsSkeletonModule,
1217
+ FsListModule,
1218
+ FsFileModule,
1219
+ FsFileManagerModule,
1220
+ FsLabelModule,
1221
+ FsDialogModule,
1222
+ FsDatePickerModule,
1223
+ FsMenuModule,
1224
+ FsColorPickerModule,
1225
+ ClipboardModule,
1226
+ ],
1227
+ exports: [
1228
+ DashboardComponent,
1229
+ CronsComponent,
1230
+ SettingsComponent,
1231
+ FileManagerComponent,
1232
+ ProcessesComponent,
1233
+ ServerLogsComponent,
1234
+ UpgradeLogsComponent,
1235
+ ApiLogsComponent,
1236
+ InfoComponent,
1237
+ ],
1238
+ declarations: [
1239
+ DashboardComponent,
1240
+ CronsComponent,
1241
+ SettingsComponent,
1242
+ KeyNameValuePipe,
1243
+ FileManagerComponent,
1244
+ ProcessesComponent,
1245
+ ServerLogComponent,
1246
+ ServerLogsComponent,
1247
+ UpgradeLogsComponent,
1248
+ ApiLogsComponent,
1249
+ ApiLogComponent,
1250
+ InfoComponent,
1251
+ ProcessComponent,
1252
+ CronComponent,
1253
+ CronLogComponent,
1254
+ ],
1255
+ }]
1250
1256
  }] });
1251
1257
 
1252
- /**
1253
- * Generated bundle index. Do not edit.
1258
+ /**
1259
+ * Generated bundle index. Do not edit.
1254
1260
  */
1255
1261
 
1256
1262
  export { ApiLogComponent, ApiLogState, ApiLogStates, ApiLogsComponent, CronComponent, CronLogComponent, CronState, CronStates, CronsComponent, DashboardComponent, FS_SYSTEM_CONFIG, FileManagerComponent, FsSystemModule, InfoComponent, KeyNameValuePipe, ProcessComponent, ProcessState, ProcessStates, ProcessesComponent, ServerLogComponent, ServerLogsComponent, SettingsComponent, UpgradeLogsComponent };