@firestitch/system 12.2.7 → 12.2.9

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 +42 -42
  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 +19 -19
  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 +14 -14
  36. package/app/enums/cron-state.enum.d.ts +9 -9
  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 -14
  40. package/app/fs-system.module.d.ts +47 -47
  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 +1586 -1586
  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 +74 -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 +229 -229
  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 +67 -67
  68. package/esm2015/app/components/processes/index.js +2 -2
  69. package/esm2015/app/components/processes/processes.component.js +170 -170
  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 +137 -137
  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 +15 -15
  80. package/esm2015/app/consts/cron-states.const.js +11 -11
  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 +15 -15
  85. package/esm2015/app/enums/cron-state.enum.js +11 -11
  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 -16
  89. package/esm2015/app/fs-system.module.js +181 -181
  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 +1218 -1218
  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
@@ -6,11 +6,11 @@ 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
- import * as i4$2 from '@angular/material/expansion';
9
+ import * as i4$3 from '@angular/material/expansion';
10
10
  import { MatExpansionModule } from '@angular/material/expansion';
11
11
  import * as i16 from '@angular/material/input';
12
12
  import { MatInputModule } from '@angular/material/input';
13
- import * as i8$1 from '@angular/material/select';
13
+ import * as i8 from '@angular/material/select';
14
14
  import { MatSelectModule } from '@angular/material/select';
15
15
  import * as i1$1 from '@angular/material/dialog';
16
16
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
@@ -21,7 +21,7 @@ import { MatIconModule } from '@angular/material/icon';
21
21
  import { FlexLayoutModule } from '@angular/flex-layout';
22
22
  import * as i4 from '@angular/material/button';
23
23
  import { MatButtonModule } from '@angular/material/button';
24
- import * as i3 from '@firestitch/date';
24
+ import * as i4$2 from '@firestitch/date';
25
25
  import { parse, FsDateModule } from '@firestitch/date';
26
26
  import * as i10$1 from '@firestitch/datepicker';
27
27
  import { FsDatePickerModule } from '@firestitch/datepicker';
@@ -48,1282 +48,1282 @@ import * as i2 from '@firestitch/build';
48
48
  import { takeUntil, map, tap, switchMap } from 'rxjs/operators';
49
49
  import { Subject } from 'rxjs';
50
50
  import { differenceInMinutes, differenceInSeconds } from 'date-fns';
51
- import * as i8 from '@angular/flex-layout/flex';
51
+ import * as i6$1 from '@angular/flex-layout/flex';
52
52
  import * as i10 from '@angular/flex-layout/extended';
53
53
  import { ItemType } from '@firestitch/filter';
54
- import * as i3$1 from '@angular/material/tabs';
54
+ import * as i3 from '@angular/material/tabs';
55
55
  import { MatTabsModule } from '@angular/material/tabs';
56
56
  import { SelectionActionType } from '@firestitch/selection';
57
- import * as i3$2 from '@firestitch/prompt';
57
+ import * as i3$1 from '@firestitch/prompt';
58
58
  import * as i2$4 from '@firestitch/clipboard';
59
59
  import * as i9$1 from '@angular/material/core';
60
60
 
61
61
  const FS_SYSTEM_CONFIG = new InjectionToken('fs-system-config');
62
62
 
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: i8.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: i8.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: i8.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": i3.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
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.build$
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\">\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 });
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
133
133
  }] } });
134
134
 
135
- function indexNameValue(arry) {
136
- const obj = {};
137
- arry.forEach(item => {
138
- obj[item.value] = item.name;
139
- });
140
- return obj;
135
+ function indexNameValue(arry) {
136
+ const obj = {};
137
+ arry.forEach(item => {
138
+ obj[item.value] = item.name;
139
+ });
140
+ return obj;
141
141
  }
142
142
 
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";
150
- CronState["Enabled"] = "enabled";
151
- CronState["Killing"] = "killing";
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";
150
+ CronState["Enabled"] = "enabled";
151
+ CronState["Killing"] = "killing";
152
152
  })(CronState || (CronState = {}));
153
153
 
154
- var SettingInterfaceType;
155
- (function (SettingInterfaceType) {
156
- SettingInterfaceType["RadioButton"] = "R";
157
- SettingInterfaceType["InputBox"] = "I";
158
- SettingInterfaceType["Textarea"] = "T";
159
- SettingInterfaceType["Select"] = "D";
160
- SettingInterfaceType["SelectMultiple"] = "W";
161
- SettingInterfaceType["Date"] = "A";
162
- SettingInterfaceType["File"] = "F";
163
- SettingInterfaceType["Static"] = "S";
164
- SettingInterfaceType["Password"] = "P";
165
- SettingInterfaceType["Time"] = "M";
166
- SettingInterfaceType["None"] = "N";
167
- SettingInterfaceType["Color"] = "C";
154
+ var SettingInterfaceType;
155
+ (function (SettingInterfaceType) {
156
+ SettingInterfaceType["RadioButton"] = "R";
157
+ SettingInterfaceType["InputBox"] = "I";
158
+ SettingInterfaceType["Textarea"] = "T";
159
+ SettingInterfaceType["Select"] = "D";
160
+ SettingInterfaceType["SelectMultiple"] = "W";
161
+ SettingInterfaceType["Date"] = "A";
162
+ SettingInterfaceType["File"] = "F";
163
+ SettingInterfaceType["Static"] = "S";
164
+ SettingInterfaceType["Password"] = "P";
165
+ SettingInterfaceType["Time"] = "M";
166
+ SettingInterfaceType["None"] = "N";
167
+ SettingInterfaceType["Color"] = "C";
168
168
  })(SettingInterfaceType || (SettingInterfaceType = {}));
169
169
 
170
- var ApiLogState;
171
- (function (ApiLogState) {
172
- ApiLogState["Success"] = "success";
173
- ApiLogState["Failed"] = "failed";
174
- ApiLogState["Deleted"] = "deleted";
170
+ var ApiLogState;
171
+ (function (ApiLogState) {
172
+ ApiLogState["Success"] = "success";
173
+ ApiLogState["Failed"] = "failed";
174
+ ApiLogState["Deleted"] = "deleted";
175
175
  })(ApiLogState || (ApiLogState = {}));
176
176
 
177
- var ProcessState;
178
- (function (ProcessState) {
179
- ProcessState["Queued"] = "Q";
180
- ProcessState["Running"] = "R";
181
- ProcessState["Completed"] = "C";
182
- ProcessState["Killed"] = "K";
183
- ProcessState["Deleted"] = "D";
184
- ProcessState["Failed"] = "F";
177
+ var ProcessState;
178
+ (function (ProcessState) {
179
+ ProcessState["Queued"] = "Q";
180
+ ProcessState["Running"] = "R";
181
+ ProcessState["Completed"] = "C";
182
+ ProcessState["Killed"] = "K";
183
+ ProcessState["Deleted"] = "D";
184
+ ProcessState["Failed"] = "F";
185
185
  })(ProcessState || (ProcessState = {}));
186
186
 
187
- var CronLogState;
188
- (function (CronLogState) {
189
- CronLogState["Message"] = "message";
190
- CronLogState["Disabled"] = "disabled";
191
- CronLogState["Enabled"] = "enabled";
192
- CronLogState["Started"] = "started";
193
- CronLogState["Running"] = "running";
194
- CronLogState["Completed"] = "completed";
195
- CronLogState["Failed"] = "failed";
196
- CronLogState["Killed"] = "killed";
197
- CronLogState["Queued"] = "queued";
198
- CronLogState["Reset"] = "reset";
199
- CronLogState["Stagnant"] = "stagnant";
200
- CronLogState["LongRunning"] = "long_running";
187
+ var CronLogState;
188
+ (function (CronLogState) {
189
+ CronLogState["Message"] = "message";
190
+ CronLogState["Disabled"] = "disabled";
191
+ CronLogState["Enabled"] = "enabled";
192
+ CronLogState["Started"] = "started";
193
+ CronLogState["Running"] = "running";
194
+ CronLogState["Completed"] = "completed";
195
+ CronLogState["Failed"] = "failed";
196
+ CronLogState["Killed"] = "killed";
197
+ CronLogState["Queued"] = "queued";
198
+ CronLogState["Reset"] = "reset";
199
+ CronLogState["Stagnant"] = "stagnant";
200
+ CronLogState["LongRunning"] = "long_running";
201
201
  })(CronLogState || (CronLogState = {}));
202
202
 
203
- const CronLogStates = [
204
- { name: 'Message', value: CronLogState.Message, color: '#29B7FF' },
205
- { name: 'Disabled', value: CronLogState.Disabled, color: '#29B7FF' },
206
- { name: 'Reset', value: CronLogState.Reset, color: '#29B7FF' },
207
- { name: 'Enabled', value: CronLogState.Enabled, color: '#29B7FF' },
208
- { name: 'Queued', value: CronLogState.Queued, color: '#29B7FF' },
209
- { name: 'Started', value: CronLogState.Started, color: '#D17333' },
210
- { name: 'Running', value: CronLogState.Running, color: '#34BD43' },
211
- { name: 'Completed', value: CronLogState.Completed, color: '#34BD43' },
212
- { name: 'Failed', value: CronLogState.Failed, color: '#FA7567' },
213
- { name: 'Killed', value: CronLogState.Killed, color: '#FA7567' },
214
- { name: 'Stagnant', value: CronLogState.Stagnant, color: '#FA7567' },
215
- { name: 'Long Running', value: CronLogState.LongRunning, color: '#FA7567' },
203
+ const CronLogStates = [
204
+ { name: 'Message', value: CronLogState.Message, color: '#29B7FF' },
205
+ { name: 'Disabled', value: CronLogState.Disabled, color: '#29B7FF' },
206
+ { name: 'Reset', value: CronLogState.Reset, color: '#29B7FF' },
207
+ { name: 'Enabled', value: CronLogState.Enabled, color: '#29B7FF' },
208
+ { name: 'Queued', value: CronLogState.Queued, color: '#29B7FF' },
209
+ { name: 'Started', value: CronLogState.Started, color: '#D17333' },
210
+ { name: 'Running', value: CronLogState.Running, color: '#34BD43' },
211
+ { name: 'Completed', value: CronLogState.Completed, color: '#34BD43' },
212
+ { name: 'Failed', value: CronLogState.Failed, color: '#FA7567' },
213
+ { name: 'Killed', value: CronLogState.Killed, color: '#FA7567' },
214
+ { name: 'Stagnant', value: CronLogState.Stagnant, color: '#FA7567' },
215
+ { name: 'Long Running', value: CronLogState.LongRunning, color: '#FA7567' },
216
216
  ];
217
217
 
218
- const CronStates = [
219
- { name: 'Running', value: CronState.Running },
220
- { name: 'Idle', value: CronState.Idle },
221
- { name: 'Failed', value: CronState.Failed },
222
- { name: 'Queued', value: CronState.Queued },
223
- { name: 'Disabled', value: CronState.Disabled },
224
- { name: 'Killing', value: CronState.Killing },
225
- { name: 'Enabled', value: CronState.Enabled },
218
+ const CronStates = [
219
+ { name: 'Running', value: CronState.Running },
220
+ { name: 'Idle', value: CronState.Idle },
221
+ { name: 'Failed', value: CronState.Failed },
222
+ { name: 'Queued', value: CronState.Queued },
223
+ { name: 'Disabled', value: CronState.Disabled },
224
+ { name: 'Killing', value: CronState.Killing },
225
+ { name: 'Enabled', value: CronState.Enabled },
226
226
  ];
227
227
 
228
- const ApiLogStates = [
229
- { name: 'Success', value: ApiLogState.Success },
230
- { name: 'Failed', value: ApiLogState.Failed },
231
- { name: 'Deleted', value: ApiLogState.Deleted }
228
+ const ApiLogStates = [
229
+ { name: 'Success', value: ApiLogState.Success },
230
+ { name: 'Failed', value: ApiLogState.Failed },
231
+ { name: 'Deleted', value: ApiLogState.Deleted }
232
232
  ];
233
233
 
234
- const ProcessStates = [
235
- { name: 'Queued', value: ProcessState.Queued },
236
- { name: 'Running', value: ProcessState.Running },
237
- { name: 'Completed', value: ProcessState.Completed },
238
- { name: 'Killed', value: ProcessState.Killed },
239
- { name: 'Failed', value: ProcessState.Failed },
240
- { name: 'Deleted', value: ProcessState.Deleted }
234
+ const ProcessStates = [
235
+ { name: 'Queued', value: ProcessState.Queued },
236
+ { name: 'Running', value: ProcessState.Running },
237
+ { name: 'Completed', value: ProcessState.Completed },
238
+ { name: 'Killed', value: ProcessState.Killed },
239
+ { name: 'Failed', value: ProcessState.Failed },
240
+ { name: 'Deleted', value: ProcessState.Deleted }
241
241
  ];
242
242
 
243
- class CronLogComponent {
244
- constructor(_data) {
245
- this._data = _data;
246
- this.CronLogStates = indexNameValue(CronLogStates);
247
- this.CronLogStateColors = {};
248
- }
249
- ngOnInit() {
250
- this.cronLog = this._data.cronLog;
251
- this.CronLogStateColors = CronLogStates
252
- .reduce((accum, cronLogState) => {
253
- accum[cronLogState.value] = cronLogState.color;
254
- return accum;
255
- }, {});
256
- }
257
- }
258
- 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 });
259
- 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: i3.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"] }] });
260
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronLogComponent, decorators: [{
261
- type: Component,
262
- args: [{
263
- templateUrl: './cron-log.component.html',
264
- styleUrls: ['./cron-log.component.scss']
265
- }]
266
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
267
- type: Inject,
268
- args: [MAT_DIALOG_DATA]
243
+ class CronLogComponent {
244
+ constructor(_data) {
245
+ this._data = _data;
246
+ this.CronLogStates = indexNameValue(CronLogStates);
247
+ this.CronLogStateColors = {};
248
+ }
249
+ ngOnInit() {
250
+ this.cronLog = this._data.cronLog;
251
+ this.CronLogStateColors = CronLogStates
252
+ .reduce((accum, cronLogState) => {
253
+ accum[cronLogState.value] = cronLogState.color;
254
+ return accum;
255
+ }, {});
256
+ }
257
+ }
258
+ 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 });
259
+ 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"] }] });
260
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronLogComponent, decorators: [{
261
+ type: Component,
262
+ args: [{
263
+ templateUrl: './cron-log.component.html',
264
+ styleUrls: ['./cron-log.component.scss']
265
+ }]
266
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
267
+ type: Inject,
268
+ args: [MAT_DIALOG_DATA]
269
269
  }] }]; } });
270
270
 
271
- class CronComponent {
272
- constructor(_data, _dialog, _cdRef) {
273
- this._data = _data;
274
- this._dialog = _dialog;
275
- this._cdRef = _cdRef;
276
- this.tabIndex = 0;
277
- this.CronStates = indexNameValue(CronStates);
278
- this.CronLogStates = indexNameValue(CronLogStates);
279
- this.CronLogStateColors = {};
280
- }
281
- ngOnInit() {
282
- this.load();
283
- this.CronLogStateColors = CronLogStates
284
- .reduce((accum, cronLogState) => {
285
- accum[cronLogState.value] = cronLogState.color;
286
- return accum;
287
- }, {});
288
- }
289
- cronLogOpen(cronLog) {
290
- this._dialog.open(CronLogComponent, {
291
- data: {
292
- cronLog,
293
- },
294
- width: '85%'
295
- });
296
- }
297
- cronActionClick(cronAction) {
298
- cronAction.action(this.cron)
299
- .subscribe(() => {
300
- this.load();
301
- });
302
- }
303
- selectedIndexChange(index) {
304
- this.tabIndex = index;
305
- }
306
- load() {
307
- this._data.loadCron(this._data.cron)
308
- .subscribe((cron) => {
309
- this.cron = Object.assign(Object.assign({}, this._data.cron), cron);
310
- if (this._data.loadCronLogs) {
311
- this.config = {
312
- filters: [
313
- {
314
- type: ItemType.Select,
315
- name: 'state',
316
- label: 'Status',
317
- values: [
318
- { name: 'All', value: null },
319
- ...CronLogStates,
320
- ],
321
- },
322
- {
323
- type: ItemType.DateRange,
324
- name: 'date',
325
- label: ['From Date', 'To Date'],
326
- },
327
- ],
328
- fetch: (query) => {
329
- query = Object.assign(Object.assign({}, query), { cronId: this.cron.id });
330
- return this._data.loadCronLogs(query);
331
- },
332
- };
333
- }
334
- this.cronActions = this._data.cronActions
335
- .filter((cronLogAction) => {
336
- return cronLogAction.show(this.cron);
337
- });
338
- this._cdRef.markForCheck();
339
- });
340
- }
341
- }
342
- 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 });
343
- 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 title=\"Duration\" class=\"col-message\">\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <ng-container *ngIf=\"row.duration\">\r\n {{row.duration | fsDateDuration: 'hour-minute-second'}}\r\n </ng-container>\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$1.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "disableRipple"], exportAs: ["matTabGroup"] }, { type: i3$1.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: i3.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { type: i2$3.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$1.MatTabContent, selector: "[matTabContent]" }, { type: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.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": i3.FsDateDurationPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
344
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronComponent, decorators: [{
345
- type: Component,
346
- args: [{
347
- templateUrl: './cron.component.html',
348
- styleUrls: ['./cron.component.scss'],
349
- changeDetection: ChangeDetectionStrategy.OnPush,
350
- }]
351
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
352
- type: Inject,
353
- args: [MAT_DIALOG_DATA]
271
+ class CronComponent {
272
+ constructor(_data, _dialog, _cdRef) {
273
+ this._data = _data;
274
+ this._dialog = _dialog;
275
+ this._cdRef = _cdRef;
276
+ this.tabIndex = 0;
277
+ this.CronStates = indexNameValue(CronStates);
278
+ this.CronLogStates = indexNameValue(CronLogStates);
279
+ this.CronLogStateColors = {};
280
+ }
281
+ ngOnInit() {
282
+ this.load();
283
+ this.CronLogStateColors = CronLogStates
284
+ .reduce((accum, cronLogState) => {
285
+ accum[cronLogState.value] = cronLogState.color;
286
+ return accum;
287
+ }, {});
288
+ }
289
+ cronLogOpen(cronLog) {
290
+ this._dialog.open(CronLogComponent, {
291
+ data: {
292
+ cronLog,
293
+ },
294
+ width: '85%'
295
+ });
296
+ }
297
+ cronActionClick(cronAction) {
298
+ cronAction.action(this.cron)
299
+ .subscribe(() => {
300
+ this.load();
301
+ });
302
+ }
303
+ selectedIndexChange(index) {
304
+ this.tabIndex = index;
305
+ }
306
+ load() {
307
+ this._data.loadCron(this._data.cron)
308
+ .subscribe((cron) => {
309
+ this.cron = Object.assign(Object.assign({}, this._data.cron), cron);
310
+ if (this._data.loadCronLogs) {
311
+ this.config = {
312
+ filters: [
313
+ {
314
+ type: ItemType.Select,
315
+ name: 'state',
316
+ label: 'Status',
317
+ values: [
318
+ { name: 'All', value: null },
319
+ ...CronLogStates,
320
+ ],
321
+ },
322
+ {
323
+ type: ItemType.DateRange,
324
+ name: 'date',
325
+ label: ['From Date', 'To Date'],
326
+ },
327
+ ],
328
+ fetch: (query) => {
329
+ query = Object.assign(Object.assign({}, query), { cronId: this.cron.id });
330
+ return this._data.loadCronLogs(query);
331
+ },
332
+ };
333
+ }
334
+ this.cronActions = this._data.cronActions
335
+ .filter((cronLogAction) => {
336
+ return cronLogAction.show(this.cron);
337
+ });
338
+ this._cdRef.markForCheck();
339
+ });
340
+ }
341
+ }
342
+ 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 });
343
+ 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 title=\"Duration\" class=\"col-message\">\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.duration\">\n {{row.duration | fsDateDuration: 'hour-minute-second'}}\n </ng-container>\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: i2$3.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: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.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 });
344
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronComponent, decorators: [{
345
+ type: Component,
346
+ args: [{
347
+ templateUrl: './cron.component.html',
348
+ styleUrls: ['./cron.component.scss'],
349
+ changeDetection: ChangeDetectionStrategy.OnPush,
350
+ }]
351
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
352
+ type: Inject,
353
+ args: [MAT_DIALOG_DATA]
354
354
  }] }, { type: i1$1.MatDialog }, { type: i0.ChangeDetectorRef }]; } });
355
355
 
356
- class CronsComponent {
357
- constructor(_message, _dialog, _prompt) {
358
- this._message = _message;
359
- this._dialog = _dialog;
360
- this._prompt = _prompt;
361
- this.config = null;
362
- this.cronStates = indexNameValue(CronStates);
363
- this.CronState = CronState;
364
- this._destroy$ = new Subject();
365
- }
366
- ngOnInit() {
367
- this._configList();
368
- }
369
- _configList() {
370
- this.config = {
371
- paging: false,
372
- filters: [
373
- {
374
- type: ItemType.Keyword,
375
- name: 'keyword',
376
- label: 'Search'
377
- }
378
- ],
379
- rowActions: this.getCronActions()
380
- .map((rowAction) => {
381
- return Object.assign(Object.assign({}, rowAction), { click: (cron) => {
382
- rowAction.action(cron)
383
- .subscribe();
384
- } });
385
- }),
386
- fetch: query => {
387
- query.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
388
- return this.loadCrons(query)
389
- .pipe(map((crons) => ({
390
- data: crons
391
- .map((cron) => {
392
- return Object.assign(Object.assign({}, cron), { runningDuration: differenceInSeconds(parse(cron.createDate), new Date()) });
393
- })
394
- })));
395
- },
396
- };
397
- if (this.bulk) {
398
- this.config.selection = {
399
- selectAll: false,
400
- actions: [
401
- {
402
- type: SelectionActionType.Action,
403
- name: 'disable',
404
- label: 'Disable'
405
- },
406
- {
407
- type: SelectionActionType.Action,
408
- name: 'enable',
409
- label: 'Enable'
410
- },
411
- ],
412
- actionSelected: (action) => {
413
- return this.bulk(action.action.name, action.selected)
414
- .pipe(tap(() => {
415
- this.list.reload();
416
- this._message.success('Applied Changes');
417
- }));
418
- },
419
- };
420
- }
421
- }
422
- open(cron) {
423
- this._dialog.open(CronComponent, {
424
- data: {
425
- cron,
426
- loadCronLogs: this.loadCronLogs,
427
- loadCron: this.loadCron,
428
- cronActions: this.getCronActions(),
429
- },
430
- width: '85%'
431
- });
432
- }
433
- getCronActions() {
434
- return [
435
- {
436
- action: (data) => {
437
- return this.queue(data)
438
- .pipe(tap(() => {
439
- this._message.success('Queued cron');
440
- this.list.reload();
441
- }));
442
- },
443
- label: 'Queue',
444
- show: (cron) => {
445
- return cron.state === CronState.Idle || cron.state === CronState.Failed;
446
- },
447
- },
448
- {
449
- action: (data) => {
450
- return this.run(data)
451
- .pipe(tap(() => {
452
- this._message.success('Cron ran');
453
- this.list.reload();
454
- }));
455
- },
456
- label: 'Run',
457
- show: (cron) => {
458
- return cron.state === CronState.Idle || cron.state === CronState.Failed;
459
- },
460
- },
461
- {
462
- action: (data) => {
463
- return this.enable(data)
464
- .pipe(tap(() => {
465
- this._message.success('Enabled cron');
466
- this.list.reload();
467
- }));
468
- },
469
- label: 'Enable',
470
- show: (cron) => {
471
- return cron.state === CronState.Disabled;
472
- },
473
- },
474
- {
475
- action: (data) => {
476
- return this.disable(data)
477
- .pipe(tap(() => {
478
- this._message.success('Disabled cron');
479
- this.list.reload();
480
- }));
481
- },
482
- label: 'Disable',
483
- show: (cron) => {
484
- return cron.state === CronState.Idle || cron.state === CronState.Failed;
485
- },
486
- },
487
- {
488
- action: (data) => {
489
- return this._prompt.confirm({
490
- title: 'Confirm',
491
- template: 'Are you sure you would like to kill the cron?',
492
- })
493
- .pipe(switchMap(() => {
494
- return this.kill(data);
495
- }), tap(() => {
496
- this._message.success('Killed cron');
497
- this.list.reload();
498
- }), takeUntil(this._destroy$));
499
- },
500
- label: 'Kill',
501
- show: (cron) => {
502
- return cron.state === CronState.Running;
503
- },
504
- },
505
- {
506
- action: (data) => {
507
- return this._prompt.confirm({
508
- title: 'Confirm',
509
- template: 'Are you sure you would like to reset the cron?',
510
- })
511
- .pipe(switchMap(() => {
512
- return this.enable(data);
513
- }), tap(() => {
514
- this._message.success('Reset cron');
515
- this.list.reload();
516
- }), takeUntil(this._destroy$));
517
- },
518
- label: 'Reset',
519
- show: (cron) => {
520
- return cron.state === CronState.Killing || cron.state === CronState.Running || cron.state === CronState.Failed || cron.state === CronState.Queued;
521
- },
522
- },
523
- ];
524
- }
525
- ngOnDestroy() {
526
- this._destroy$.next();
527
- this._destroy$.complete();
528
- }
529
- }
530
- CronsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, deps: [{ token: i1.FsMessage }, { token: i1$1.MatDialog }, { token: i3$2.FsPrompt }], target: i0.ɵɵFactoryTarget.Component });
531
- 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 align=\"center\">\r\n <ng-template fs-list-header>Status</ng-template>\r\n <ng-template fs-list-cell let-row=\"row\">\r\n <ng-container *ngIf=\"row.host || row.processId; else status\">\r\n <fs-popover \r\n [maxWidth]=\"null\"\r\n [template]=\"statusPopover\" \r\n size=\"small\">\r\n <ng-container *ngTemplateOutlet=\"status\"></ng-container>\r\n </fs-popover>\r\n <ng-template #statusPopover>\r\n <div *ngIf=\"row.host\">Host: {{row.host}}</div>\r\n <div *ngIf=\"row.processId\">Process ID: {{row.processId}}</div>\r\n </ng-template>\r\n </ng-container>\r\n <ng-template #status>\r\n {{cronStates[row.state]}}\r\n </ng-template>\r\n <ng-container *ngIf=\"row.state === CronState.Running\">\r\n <div class=\"small\">\r\n Duration: {{ row.runningDuration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\r\n </div>\r\n </ng-container> \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 class=\"small\" *ngIf=\"row.duration\">\r\n Duration: {{ row.duration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\r\n </div>\r\n </ng-template>\r\n </ng-template>\r\n </fs-list-column>\r\n</fs-list>\r\n", styles: [""], components: [{ type: i2$3.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i5$1.FsPopoverComponent, selector: "fs-popover", inputs: ["template", "data", "leaveDelay", "showDelay", "maxWidth", "wrapperClass", "autoShow", "autoClose", "loadingDiameter", "loading", "indication", "position", "theme", "size", "trigger"] }, { type: i3.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "fsDateDuration": i3.FsDateDurationPipe } });
532
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, decorators: [{
533
- type: Component,
534
- args: [{
535
- selector: 'fs-system-crons',
536
- templateUrl: './crons.component.html',
537
- styleUrls: ['./crons.component.scss'],
538
- }]
539
- }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i1$1.MatDialog }, { type: i3$2.FsPrompt }]; }, propDecorators: { list: [{
540
- type: ViewChild,
541
- args: [FsListComponent, { static: true }]
542
- }], enable: [{
543
- type: Input
544
- }], disable: [{
545
- type: Input
546
- }], kill: [{
547
- type: Input
548
- }], queue: [{
549
- type: Input
550
- }], run: [{
551
- type: Input
552
- }], loadCrons: [{
553
- type: Input
554
- }], loadCron: [{
555
- type: Input
556
- }], loadCronLogs: [{
557
- type: Input
558
- }], bulk: [{
559
- type: Input
356
+ class CronsComponent {
357
+ constructor(_message, _dialog, _prompt) {
358
+ this._message = _message;
359
+ this._dialog = _dialog;
360
+ this._prompt = _prompt;
361
+ this.config = null;
362
+ this.cronStates = indexNameValue(CronStates);
363
+ this.CronState = CronState;
364
+ this._destroy$ = new Subject();
365
+ }
366
+ ngOnInit() {
367
+ this._configList();
368
+ }
369
+ _configList() {
370
+ this.config = {
371
+ paging: false,
372
+ filters: [
373
+ {
374
+ type: ItemType.Keyword,
375
+ name: 'keyword',
376
+ label: 'Search'
377
+ }
378
+ ],
379
+ rowActions: this.getCronActions()
380
+ .map((rowAction) => {
381
+ return Object.assign(Object.assign({}, rowAction), { click: (cron) => {
382
+ rowAction.action(cron)
383
+ .subscribe();
384
+ } });
385
+ }),
386
+ fetch: query => {
387
+ query.timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
388
+ return this.loadCrons(query)
389
+ .pipe(map((crons) => ({
390
+ data: crons
391
+ .map((cron) => {
392
+ return Object.assign(Object.assign({}, cron), { runningDuration: differenceInSeconds(parse(cron.createDate), new Date()) });
393
+ })
394
+ })));
395
+ },
396
+ };
397
+ if (this.bulk) {
398
+ this.config.selection = {
399
+ selectAll: false,
400
+ actions: [
401
+ {
402
+ type: SelectionActionType.Action,
403
+ name: 'disable',
404
+ label: 'Disable'
405
+ },
406
+ {
407
+ type: SelectionActionType.Action,
408
+ name: 'enable',
409
+ label: 'Enable'
410
+ },
411
+ ],
412
+ actionSelected: (action) => {
413
+ return this.bulk(action.action.name, action.selected)
414
+ .pipe(tap(() => {
415
+ this.list.reload();
416
+ this._message.success('Applied Changes');
417
+ }));
418
+ },
419
+ };
420
+ }
421
+ }
422
+ open(cron) {
423
+ this._dialog.open(CronComponent, {
424
+ data: {
425
+ cron,
426
+ loadCronLogs: this.loadCronLogs,
427
+ loadCron: this.loadCron,
428
+ cronActions: this.getCronActions(),
429
+ },
430
+ width: '85%'
431
+ });
432
+ }
433
+ getCronActions() {
434
+ return [
435
+ {
436
+ action: (data) => {
437
+ return this.queue(data)
438
+ .pipe(tap(() => {
439
+ this._message.success('Queued cron');
440
+ this.list.reload();
441
+ }));
442
+ },
443
+ label: 'Queue',
444
+ show: (cron) => {
445
+ return cron.state === CronState.Idle || cron.state === CronState.Failed;
446
+ },
447
+ },
448
+ {
449
+ action: (data) => {
450
+ return this.run(data)
451
+ .pipe(tap(() => {
452
+ this._message.success('Cron ran');
453
+ this.list.reload();
454
+ }));
455
+ },
456
+ label: 'Run',
457
+ show: (cron) => {
458
+ return cron.state === CronState.Idle || cron.state === CronState.Failed;
459
+ },
460
+ },
461
+ {
462
+ action: (data) => {
463
+ return this.enable(data)
464
+ .pipe(tap(() => {
465
+ this._message.success('Enabled cron');
466
+ this.list.reload();
467
+ }));
468
+ },
469
+ label: 'Enable',
470
+ show: (cron) => {
471
+ return cron.state === CronState.Disabled;
472
+ },
473
+ },
474
+ {
475
+ action: (data) => {
476
+ return this.disable(data)
477
+ .pipe(tap(() => {
478
+ this._message.success('Disabled cron');
479
+ this.list.reload();
480
+ }));
481
+ },
482
+ label: 'Disable',
483
+ show: (cron) => {
484
+ return cron.state === CronState.Idle || cron.state === CronState.Failed;
485
+ },
486
+ },
487
+ {
488
+ action: (data) => {
489
+ return this._prompt.confirm({
490
+ title: 'Confirm',
491
+ template: 'Are you sure you would like to kill the cron?',
492
+ })
493
+ .pipe(switchMap(() => {
494
+ return this.kill(data);
495
+ }), tap(() => {
496
+ this._message.success('Killed cron');
497
+ this.list.reload();
498
+ }), takeUntil(this._destroy$));
499
+ },
500
+ label: 'Kill',
501
+ show: (cron) => {
502
+ return cron.state === CronState.Running;
503
+ },
504
+ },
505
+ {
506
+ action: (data) => {
507
+ return this._prompt.confirm({
508
+ title: 'Confirm',
509
+ template: 'Are you sure you would like to reset the cron?',
510
+ })
511
+ .pipe(switchMap(() => {
512
+ return this.enable(data);
513
+ }), tap(() => {
514
+ this._message.success('Reset cron');
515
+ this.list.reload();
516
+ }), takeUntil(this._destroy$));
517
+ },
518
+ label: 'Reset',
519
+ show: (cron) => {
520
+ return cron.state === CronState.Killing || cron.state === CronState.Running || cron.state === CronState.Failed || cron.state === CronState.Queued;
521
+ },
522
+ },
523
+ ];
524
+ }
525
+ ngOnDestroy() {
526
+ this._destroy$.next();
527
+ this._destroy$.complete();
528
+ }
529
+ }
530
+ CronsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, deps: [{ token: i1.FsMessage }, { token: i1$1.MatDialog }, { token: i3$1.FsPrompt }], target: i0.ɵɵFactoryTarget.Component });
531
+ 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 align=\"center\">\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.host || row.processId; else status\">\n <fs-popover \n [maxWidth]=\"null\"\n [template]=\"statusPopover\" \n size=\"small\">\n <ng-container *ngTemplateOutlet=\"status\"></ng-container>\n </fs-popover>\n <ng-template #statusPopover>\n <div *ngIf=\"row.host\">Host: {{row.host}}</div>\n <div *ngIf=\"row.processId\">Process ID: {{row.processId}}</div>\n </ng-template>\n </ng-container>\n <ng-template #status>\n {{cronStates[row.state]}}\n </ng-template>\n <ng-container *ngIf=\"row.state === CronState.Running\">\n <div class=\"small\">\n Duration: {{ row.runningDuration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\n </div>\n </ng-container> \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 class=\"small\" *ngIf=\"row.duration\">\n Duration: {{ row.duration | fsDateDuration: { hours: true, minutes: true, seconds: true } }}\n </div>\n </ng-template>\n </ng-template>\n </fs-list-column>\n</fs-list>\n", styles: [""], components: [{ type: i2$3.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i5$1.FsPopoverComponent, selector: "fs-popover", inputs: ["template", "data", "leaveDelay", "showDelay", "maxWidth", "wrapperClass", "autoShow", "autoClose", "loadingDiameter", "loading", "indication", "position", "theme", "size", "trigger"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i9.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe } });
532
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: CronsComponent, decorators: [{
533
+ type: Component,
534
+ args: [{
535
+ selector: 'fs-system-crons',
536
+ templateUrl: './crons.component.html',
537
+ styleUrls: ['./crons.component.scss'],
538
+ }]
539
+ }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i1$1.MatDialog }, { type: i3$1.FsPrompt }]; }, propDecorators: { list: [{
540
+ type: ViewChild,
541
+ args: [FsListComponent, { static: true }]
542
+ }], enable: [{
543
+ type: Input
544
+ }], disable: [{
545
+ type: Input
546
+ }], kill: [{
547
+ type: Input
548
+ }], queue: [{
549
+ type: Input
550
+ }], run: [{
551
+ type: Input
552
+ }], loadCrons: [{
553
+ type: Input
554
+ }], loadCron: [{
555
+ type: Input
556
+ }], loadCronLogs: [{
557
+ type: Input
558
+ }], bulk: [{
559
+ type: Input
560
560
  }] } });
561
561
 
562
- class KeyNameValuePipe {
563
- transform(values) {
564
- return Object.keys(values).map((key) => {
565
- return { value: key, name: values[key] };
566
- });
567
- }
568
- }
569
- KeyNameValuePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
570
- KeyNameValuePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, name: "keyNameValue" });
571
- KeyNameValuePipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe });
572
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, decorators: [{
573
- type: Pipe,
574
- args: [{
575
- name: 'keyNameValue'
576
- }]
577
- }, {
578
- type: Injectable
562
+ class KeyNameValuePipe {
563
+ transform(values) {
564
+ return Object.keys(values).map((key) => {
565
+ return { value: key, name: values[key] };
566
+ });
567
+ }
568
+ }
569
+ KeyNameValuePipe.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe });
570
+ KeyNameValuePipe.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, name: "keyNameValue" });
571
+ KeyNameValuePipe.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe });
572
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: KeyNameValuePipe, decorators: [{
573
+ type: Pipe,
574
+ args: [{
575
+ name: 'keyNameValue'
576
+ }]
577
+ }, {
578
+ type: Injectable
579
579
  }] });
580
580
 
581
- class SettingsComponent {
582
- constructor(_message, _clipboard, _prompt, _cdRef) {
583
- this._message = _message;
584
- this._clipboard = _clipboard;
585
- this._prompt = _prompt;
586
- this._cdRef = _cdRef;
587
- this.fileRemove = new EventEmitter();
588
- this.fileSelect = new EventEmitter();
589
- this.groupedSettings = [];
590
- this.groups = [];
591
- this.SettingInterfaceType = SettingInterfaceType;
592
- }
593
- ngOnInit() {
594
- this.loadSettings()
595
- .subscribe((settings) => {
596
- settings = settings
597
- .filter((setting) => {
598
- return setting.interfaceType !== SettingInterfaceType.None;
599
- })
600
- .map((setting) => {
601
- switch (setting.interfaceType) {
602
- case SettingInterfaceType.Date:
603
- case SettingInterfaceType.Time:
604
- setting.value = parse(setting.value);
605
- case SettingInterfaceType.SelectMultiple:
606
- setting.value = Array.isArray(setting.value) ? setting.value : [];
607
- break;
608
- }
609
- return setting;
610
- });
611
- this.groupedSettings = settings.reduce((accum, item) => {
612
- if (accum[item.group] === undefined) {
613
- accum[item.group] = [];
614
- }
615
- accum[item.group].push(item);
616
- return accum;
617
- }, {});
618
- this.groups = Object.keys(this.groupedSettings);
619
- this._cdRef.markForCheck();
620
- });
621
- }
622
- export(event, settings) {
623
- event.stopPropagation();
624
- const data = settings.map((setting) => {
625
- return {
626
- name: setting.name,
627
- value: setting.value,
628
- group: setting.group,
629
- };
630
- });
631
- this._clipboard.copy(JSON.stringify(data));
632
- this._message.success('Copied to clipboard');
633
- }
634
- import(event, group) {
635
- event.stopPropagation();
636
- this._prompt.input({
637
- label: 'JSON Import',
638
- title: 'Import Settings',
639
- commitLabel: 'Import',
640
- required: true,
641
- }).subscribe((value) => {
642
- if (value) {
643
- try {
644
- const settings = this.groupedSettings[group];
645
- const data = JSON.parse(value);
646
- data.forEach((item) => {
647
- const setting = settings.find((s) => {
648
- return item.name === s.name;
649
- });
650
- if (setting) {
651
- Object.assign(setting, item);
652
- }
653
- });
654
- this._cdRef.markForCheck();
655
- }
656
- catch (e) {
657
- this._message.error(e);
658
- }
659
- }
660
- });
661
- }
662
- saveGroup(group) {
663
- const settings = this.groupedSettings[group];
664
- const values = settings.reduce((result, value) => {
665
- return (result[value.name] = value.value, result);
666
- }, {});
667
- this.save(group, values)
668
- .subscribe(() => {
669
- this._message.success('Changes Saved');
670
- });
671
- }
672
- }
673
- SettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SettingsComponent, deps: [{ token: i1.FsMessage }, { token: i2$4.FsClipboard }, { token: i3$2.FsPrompt }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
674
- 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$2.MatExpansionPanel, selector: "mat-expansion-panel", inputs: ["disabled", "expanded", "hideToggle", "togglePosition"], outputs: ["opened", "closed", "expandedChange", "afterExpand", "afterCollapse"], exportAs: ["matExpansionPanel"] }, { type: i4$2.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$1.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: ["minWidth", "minHeight", "imageWidth", "imageHeight", "imageQuality", "label", "showFilename", "allowDownload", "allowReupload", "allowRemove", "url", "file", "accept", "disabled", "previewWidth", "previewHeight"], outputs: ["select", "remove"] }], directives: [{ type: i4$2.MatAccordion, selector: "mat-accordion", inputs: ["multi", "displayMode", "togglePosition", "hideToggle"], exportAs: ["matAccordion"] }, { type: i9.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i4$2.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"] }, { type: i12.FsFileLabelDirective, selector: "[fsFileLabel]" }], pipes: { "keyNameValue": KeyNameValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
675
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SettingsComponent, decorators: [{
676
- type: Component,
677
- args: [{
678
- selector: 'fs-system-settings',
679
- templateUrl: './settings.component.html',
680
- styleUrls: ['./settings.component.scss'],
681
- changeDetection: ChangeDetectionStrategy.OnPush,
682
- }]
683
- }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i2$4.FsClipboard }, { type: i3$2.FsPrompt }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { loadSettings: [{
684
- type: Input
685
- }], save: [{
686
- type: Input
687
- }], fileRemove: [{
688
- type: Output
689
- }], fileSelect: [{
690
- type: Output
581
+ class SettingsComponent {
582
+ constructor(_message, _clipboard, _prompt, _cdRef) {
583
+ this._message = _message;
584
+ this._clipboard = _clipboard;
585
+ this._prompt = _prompt;
586
+ this._cdRef = _cdRef;
587
+ this.fileRemove = new EventEmitter();
588
+ this.fileSelect = new EventEmitter();
589
+ this.groupedSettings = [];
590
+ this.groups = [];
591
+ this.SettingInterfaceType = SettingInterfaceType;
592
+ }
593
+ ngOnInit() {
594
+ this.loadSettings()
595
+ .subscribe((settings) => {
596
+ settings = settings
597
+ .filter((setting) => {
598
+ return setting.interfaceType !== SettingInterfaceType.None;
599
+ })
600
+ .map((setting) => {
601
+ switch (setting.interfaceType) {
602
+ case SettingInterfaceType.Date:
603
+ case SettingInterfaceType.Time:
604
+ setting.value = parse(setting.value);
605
+ case SettingInterfaceType.SelectMultiple:
606
+ setting.value = Array.isArray(setting.value) ? setting.value : [];
607
+ break;
608
+ }
609
+ return setting;
610
+ });
611
+ this.groupedSettings = settings.reduce((accum, item) => {
612
+ if (accum[item.group] === undefined) {
613
+ accum[item.group] = [];
614
+ }
615
+ accum[item.group].push(item);
616
+ return accum;
617
+ }, {});
618
+ this.groups = Object.keys(this.groupedSettings);
619
+ this._cdRef.markForCheck();
620
+ });
621
+ }
622
+ export(event, settings) {
623
+ event.stopPropagation();
624
+ const data = settings.map((setting) => {
625
+ return {
626
+ name: setting.name,
627
+ value: setting.value,
628
+ group: setting.group,
629
+ };
630
+ });
631
+ this._clipboard.copy(JSON.stringify(data));
632
+ this._message.success('Copied to clipboard');
633
+ }
634
+ import(event, group) {
635
+ event.stopPropagation();
636
+ this._prompt.input({
637
+ label: 'JSON Import',
638
+ title: 'Import Settings',
639
+ commitLabel: 'Import',
640
+ required: true,
641
+ }).subscribe((value) => {
642
+ if (value) {
643
+ try {
644
+ const settings = this.groupedSettings[group];
645
+ const data = JSON.parse(value);
646
+ data.forEach((item) => {
647
+ const setting = settings.find((s) => {
648
+ return item.name === s.name;
649
+ });
650
+ if (setting) {
651
+ Object.assign(setting, item);
652
+ }
653
+ });
654
+ this._cdRef.markForCheck();
655
+ }
656
+ catch (e) {
657
+ this._message.error(e);
658
+ }
659
+ }
660
+ });
661
+ }
662
+ saveGroup(group) {
663
+ const settings = this.groupedSettings[group];
664
+ const values = settings.reduce((result, value) => {
665
+ return (result[value.name] = value.value, result);
666
+ }, {});
667
+ this.save(group, values)
668
+ .subscribe(() => {
669
+ this._message.success('Changes Saved');
670
+ });
671
+ }
672
+ }
673
+ SettingsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SettingsComponent, deps: [{ token: i1.FsMessage }, { token: i2$4.FsClipboard }, { token: i3$1.FsPrompt }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
674
+ 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 \n hideToggle \n *ngFor=\"let setting of groupedSettings[group]\" \n class=\"setting\"\n [ngClass]=\"{ 'has-instruction': !! setting.instruction }\">\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.Color\">\n <input\n matInput\n fsColorPicker\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 <div fsFileHint>{{setting.instruction}}</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}: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: ["minWidth", "minHeight", "imageWidth", "imageHeight", "imageQuality", "label", "showFilename", "allowDownload", "allowReupload", "allowRemove", "url", "file", "accept", "disabled", "previewWidth", "previewHeight"], outputs: ["select", "remove", "download"] }], 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"] }, { type: i12.FsFileLabelDirective, selector: "[fsFileLabel]" }], pipes: { "keyNameValue": KeyNameValuePipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: SettingsComponent, decorators: [{
676
+ type: Component,
677
+ args: [{
678
+ selector: 'fs-system-settings',
679
+ templateUrl: './settings.component.html',
680
+ styleUrls: ['./settings.component.scss'],
681
+ changeDetection: ChangeDetectionStrategy.OnPush,
682
+ }]
683
+ }], ctorParameters: function () { return [{ type: i1.FsMessage }, { type: i2$4.FsClipboard }, { type: i3$1.FsPrompt }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { loadSettings: [{
684
+ type: Input
685
+ }], save: [{
686
+ type: Input
687
+ }], fileRemove: [{
688
+ type: Output
689
+ }], fileSelect: [{
690
+ type: Output
691
691
  }] } });
692
692
 
693
- class FileManagerComponent {
694
- constructor() { }
695
- ngOnInit() {
696
- this._configFileManager();
697
- }
698
- _configFileManager() {
699
- this.config = {
700
- fetch: (path) => {
701
- return this.fetch(path);
702
- },
703
- deleteFile: (path) => {
704
- return this.deleteFile(path);
705
- },
706
- deleteDirectory: (path) => {
707
- return this.deleteDirectory(path);
708
- },
709
- createDirectory: (path) => {
710
- return this.createDirectory(path);
711
- },
712
- download: (path) => {
713
- return this.download(path);
714
- },
715
- upload: (path, file) => {
716
- return this.upload(path, file);
717
- }
718
- };
719
- }
720
- }
721
- FileManagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileManagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
722
- 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"] }] });
723
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileManagerComponent, decorators: [{
724
- type: Component,
725
- args: [{
726
- selector: 'fs-system-file-manager',
727
- templateUrl: './file-manager.component.html',
728
- styleUrls: ['./file-manager.component.scss']
729
- }]
730
- }], ctorParameters: function () { return []; }, propDecorators: { fetch: [{
731
- type: Input
732
- }], deleteFile: [{
733
- type: Input
734
- }], deleteDirectory: [{
735
- type: Input
736
- }], createDirectory: [{
737
- type: Input
738
- }], download: [{
739
- type: Input
740
- }], upload: [{
741
- type: Input
693
+ class FileManagerComponent {
694
+ constructor() { }
695
+ ngOnInit() {
696
+ this._configFileManager();
697
+ }
698
+ _configFileManager() {
699
+ this.config = {
700
+ fetch: (path) => {
701
+ return this.fetch(path);
702
+ },
703
+ deleteFile: (path) => {
704
+ return this.deleteFile(path);
705
+ },
706
+ deleteDirectory: (path) => {
707
+ return this.deleteDirectory(path);
708
+ },
709
+ createDirectory: (path) => {
710
+ return this.createDirectory(path);
711
+ },
712
+ download: (path) => {
713
+ return this.download(path);
714
+ },
715
+ upload: (path, file) => {
716
+ return this.upload(path, file);
717
+ }
718
+ };
719
+ }
720
+ }
721
+ FileManagerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileManagerComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
722
+ 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"] }] });
723
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FileManagerComponent, decorators: [{
724
+ type: Component,
725
+ args: [{
726
+ selector: 'fs-system-file-manager',
727
+ templateUrl: './file-manager.component.html',
728
+ styleUrls: ['./file-manager.component.scss']
729
+ }]
730
+ }], ctorParameters: function () { return []; }, propDecorators: { fetch: [{
731
+ type: Input
732
+ }], deleteFile: [{
733
+ type: Input
734
+ }], deleteDirectory: [{
735
+ type: Input
736
+ }], createDirectory: [{
737
+ type: Input
738
+ }], download: [{
739
+ type: Input
740
+ }], upload: [{
741
+ type: Input
742
742
  }] } });
743
743
 
744
- class ProcessComponent {
745
- constructor(data, _message, _cdRef) {
746
- this.data = data;
747
- this._message = _message;
748
- this._cdRef = _cdRef;
749
- this.ProcessStates = indexNameValue(ProcessStates);
750
- this.ProcessState = ProcessState;
751
- }
752
- ngOnInit() {
753
- if (this.data.loadProcess) {
754
- this.load();
755
- }
756
- else {
757
- this.process = this.data.process;
758
- }
759
- }
760
- load() {
761
- this.data.loadProcess(this.data.process)
762
- .subscribe((process) => {
763
- this.process = process;
764
- this._cdRef.markForCheck();
765
- });
766
- }
767
- run() {
768
- this._message.success('Running process');
769
- this.data.run(this.data.process)
770
- .subscribe(() => {
771
- this.load();
772
- });
773
- setTimeout(() => {
774
- this.load();
775
- }, 1000);
776
- }
777
- download() {
778
- this.data.download(this.data.process);
779
- }
780
- }
781
- ProcessComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.FsMessage }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
782
- 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 <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 *ngIf=\"process.createDate\">\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 \r\n mat-button \r\n [mat-dialog-close]=\"true\" \r\n color=\"primary\">\r\n Close\r\n </button>\r\n <button\r\n *ngIf=\"process.state === ProcessState.Running && data.loadProcess\"\r\n mat-button\r\n (click)=\"load()\">\r\n Refresh\r\n </button>\r\n <button \r\n *ngIf=\"process.state !== ProcessState.Running && data.run\" \r\n mat-button \r\n (click)=\"run()\">\r\n Run\r\n </button>\r\n <button\r\n *ngIf=\"process.filename\"\r\n mat-button\r\n (click)=\"download()\">\r\n Download\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: i8.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: i8.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": i3.FsDateFormatPipe, "fsDateDuration": i3.FsDateDurationPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
783
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessComponent, decorators: [{
784
- type: Component,
785
- args: [{
786
- templateUrl: './process.component.html',
787
- styleUrls: ['./process.component.scss'],
788
- changeDetection: ChangeDetectionStrategy.OnPush,
789
- }]
790
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
791
- type: Inject,
792
- args: [MAT_DIALOG_DATA]
744
+ class ProcessComponent {
745
+ constructor(data, _message, _cdRef) {
746
+ this.data = data;
747
+ this._message = _message;
748
+ this._cdRef = _cdRef;
749
+ this.ProcessStates = indexNameValue(ProcessStates);
750
+ this.ProcessState = ProcessState;
751
+ }
752
+ ngOnInit() {
753
+ if (this.data.loadProcess) {
754
+ this.load();
755
+ }
756
+ else {
757
+ this.process = this.data.process;
758
+ }
759
+ }
760
+ load() {
761
+ this.data.loadProcess(this.data.process)
762
+ .subscribe((process) => {
763
+ this.process = process;
764
+ this._cdRef.markForCheck();
765
+ });
766
+ }
767
+ run() {
768
+ this._message.success('Running process');
769
+ this.data.run(this.data.process)
770
+ .subscribe(() => {
771
+ this.load();
772
+ });
773
+ setTimeout(() => {
774
+ this.load();
775
+ }, 1000);
776
+ }
777
+ download() {
778
+ this.data.download(this.data.process);
779
+ }
780
+ }
781
+ ProcessComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.FsMessage }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
782
+ 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 <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 *ngIf=\"process.createDate\">\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 \n mat-button \n [mat-dialog-close]=\"true\" \n color=\"primary\">\n Close\n </button>\n <button\n *ngIf=\"process.state === ProcessState.Running && data.loadProcess\"\n mat-button\n (click)=\"load()\">\n Refresh\n </button>\n <button \n *ngIf=\"process.state !== ProcessState.Running && data.run\" \n mat-button \n (click)=\"run()\">\n Run\n </button>\n <button\n *ngIf=\"process.filename\"\n mat-button\n (click)=\"download()\">\n Download\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 }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
783
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessComponent, decorators: [{
784
+ type: Component,
785
+ args: [{
786
+ templateUrl: './process.component.html',
787
+ styleUrls: ['./process.component.scss'],
788
+ changeDetection: ChangeDetectionStrategy.OnPush,
789
+ }]
790
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
791
+ type: Inject,
792
+ args: [MAT_DIALOG_DATA]
793
793
  }] }, { type: i1.FsMessage }, { type: i0.ChangeDetectorRef }]; } });
794
794
 
795
- class ProcessesComponent {
796
- constructor(_dialog, _message) {
797
- this._dialog = _dialog;
798
- this._message = _message;
799
- this.actions = [];
800
- this.config = null;
801
- this.ProcessStates = indexNameValue(ProcessStates);
802
- this.ProcessState = ProcessState;
803
- this._destroy$ = new Subject();
804
- }
805
- ngOnInit() {
806
- this._configList();
807
- }
808
- _configList() {
809
- this.config = {
810
- actions: [],
811
- rowActions: [],
812
- filters: [
813
- {
814
- type: ItemType.Keyword,
815
- name: 'keyword',
816
- label: 'Search'
817
- },
818
- {
819
- type: ItemType.Select,
820
- name: 'state',
821
- label: 'Status',
822
- values: ProcessStates
823
- },
824
- ],
825
- fetch: (query) => {
826
- return this.loadProcesses(query)
827
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
828
- }
829
- };
830
- if (this.run) {
831
- this.config.rowActions.push({
832
- label: 'Run',
833
- show: (process) => {
834
- return process.state !== ProcessState.Running;
835
- },
836
- click: (data) => {
837
- this._message.info('Running process...');
838
- this.run(data)
839
- .subscribe(() => {
840
- this.list.reload();
841
- this._message.success('Succesfully ran process');
842
- });
843
- setTimeout(() => {
844
- this.list.reload();
845
- }, 500);
846
- }
847
- });
848
- }
849
- if (this.kill) {
850
- this.config.rowActions.push({
851
- label: 'Kill',
852
- show: (data) => {
853
- return !!data.pid;
854
- },
855
- click: (data) => {
856
- this._message.info('Killing process...');
857
- this.kill(data)
858
- .subscribe(() => {
859
- this.list.reload();
860
- this._message.success('Succesfully killed process');
861
- });
862
- setTimeout(() => {
863
- this.list.reload();
864
- }, 500);
865
- }
866
- });
867
- }
868
- if (this.delete) {
869
- this.config.rowActions.push({
870
- label: 'Delete',
871
- click: (data) => {
872
- this.delete(data)
873
- .subscribe(() => {
874
- this.list.reload();
875
- this._message.success('Deleted process');
876
- });
877
- }
878
- });
879
- }
880
- this.actions.forEach(action => {
881
- this.config.actions.push({
882
- primary: false,
883
- label: action.label,
884
- menu: action.menu,
885
- click: () => {
886
- if (action.click) {
887
- action.click();
888
- }
889
- if (action.component) {
890
- const dialogRef = this._dialog.open(action.component, {
891
- width: '800px'
892
- });
893
- dialogRef.afterClosed()
894
- .pipe(takeUntil(this._destroy$))
895
- .subscribe(() => {
896
- this.list.reload();
897
- });
898
- }
899
- },
900
- });
901
- });
902
- }
903
- open(process) {
904
- this._dialog.open(ProcessComponent, {
905
- data: {
906
- process,
907
- download: this.download,
908
- run: this.run,
909
- loadProcess: this.loadProcess,
910
- },
911
- width: '85%'
912
- });
913
- }
914
- ngOnDestroy() {
915
- this._destroy$.next();
916
- this._destroy$.complete();
917
- }
918
- }
919
- 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 });
920
- 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: i2$3.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i3.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateDuration": i3.FsDateDurationPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
921
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessesComponent, decorators: [{
922
- type: Component,
923
- args: [{
924
- selector: 'fs-system-processes',
925
- templateUrl: './processes.component.html',
926
- styleUrls: ['./processes.component.scss'],
927
- changeDetection: ChangeDetectionStrategy.OnPush,
928
- }]
929
- }], ctorParameters: function () { return [{ type: i1$1.MatDialog }, { type: i1.FsMessage }]; }, propDecorators: { list: [{
930
- type: ViewChild,
931
- args: [FsListComponent]
932
- }], loadProcesses: [{
933
- type: Input
934
- }], loadProcess: [{
935
- type: Input
936
- }], run: [{
937
- type: Input
938
- }], kill: [{
939
- type: Input
940
- }], delete: [{
941
- type: Input
942
- }], download: [{
943
- type: Input
944
- }], actions: [{
945
- type: Input
795
+ class ProcessesComponent {
796
+ constructor(_dialog, _message) {
797
+ this._dialog = _dialog;
798
+ this._message = _message;
799
+ this.actions = [];
800
+ this.config = null;
801
+ this.ProcessStates = indexNameValue(ProcessStates);
802
+ this.ProcessState = ProcessState;
803
+ this._destroy$ = new Subject();
804
+ }
805
+ ngOnInit() {
806
+ this._configList();
807
+ }
808
+ _configList() {
809
+ this.config = {
810
+ actions: [],
811
+ rowActions: [],
812
+ filters: [
813
+ {
814
+ type: ItemType.Keyword,
815
+ name: 'keyword',
816
+ label: 'Search'
817
+ },
818
+ {
819
+ type: ItemType.Select,
820
+ name: 'state',
821
+ label: 'Status',
822
+ values: ProcessStates
823
+ },
824
+ ],
825
+ fetch: (query) => {
826
+ return this.loadProcesses(query)
827
+ .pipe(map((response) => ({ data: response.data, paging: response.paging })));
828
+ }
829
+ };
830
+ if (this.run) {
831
+ this.config.rowActions.push({
832
+ label: 'Run',
833
+ show: (process) => {
834
+ return process.state !== ProcessState.Running;
835
+ },
836
+ click: (data) => {
837
+ this._message.info('Running process...');
838
+ this.run(data)
839
+ .subscribe(() => {
840
+ this.list.reload();
841
+ this._message.success('Succesfully ran process');
842
+ });
843
+ setTimeout(() => {
844
+ this.list.reload();
845
+ }, 500);
846
+ }
847
+ });
848
+ }
849
+ if (this.kill) {
850
+ this.config.rowActions.push({
851
+ label: 'Kill',
852
+ show: (data) => {
853
+ return !!data.pid;
854
+ },
855
+ click: (data) => {
856
+ this._message.info('Killing process...');
857
+ this.kill(data)
858
+ .subscribe(() => {
859
+ this.list.reload();
860
+ this._message.success('Succesfully killed process');
861
+ });
862
+ setTimeout(() => {
863
+ this.list.reload();
864
+ }, 500);
865
+ }
866
+ });
867
+ }
868
+ if (this.delete) {
869
+ this.config.rowActions.push({
870
+ label: 'Delete',
871
+ click: (data) => {
872
+ this.delete(data)
873
+ .subscribe(() => {
874
+ this.list.reload();
875
+ this._message.success('Deleted process');
876
+ });
877
+ }
878
+ });
879
+ }
880
+ this.actions.forEach(action => {
881
+ this.config.actions.push({
882
+ primary: false,
883
+ label: action.label,
884
+ menu: action.menu,
885
+ click: () => {
886
+ if (action.click) {
887
+ action.click();
888
+ }
889
+ if (action.component) {
890
+ const dialogRef = this._dialog.open(action.component, {
891
+ width: '800px'
892
+ });
893
+ dialogRef.afterClosed()
894
+ .pipe(takeUntil(this._destroy$))
895
+ .subscribe(() => {
896
+ this.list.reload();
897
+ });
898
+ }
899
+ },
900
+ });
901
+ });
902
+ }
903
+ open(process) {
904
+ this._dialog.open(ProcessComponent, {
905
+ data: {
906
+ process,
907
+ download: this.download,
908
+ run: this.run,
909
+ loadProcess: this.loadProcess,
910
+ },
911
+ width: '85%'
912
+ });
913
+ }
914
+ ngOnDestroy() {
915
+ this._destroy$.next();
916
+ this._destroy$.complete();
917
+ }
918
+ }
919
+ 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 });
920
+ 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: i2$3.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: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe }, changeDetection: i0.ChangeDetectionStrategy.OnPush });
921
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ProcessesComponent, decorators: [{
922
+ type: Component,
923
+ args: [{
924
+ selector: 'fs-system-processes',
925
+ templateUrl: './processes.component.html',
926
+ styleUrls: ['./processes.component.scss'],
927
+ changeDetection: ChangeDetectionStrategy.OnPush,
928
+ }]
929
+ }], ctorParameters: function () { return [{ type: i1$1.MatDialog }, { type: i1.FsMessage }]; }, propDecorators: { list: [{
930
+ type: ViewChild,
931
+ args: [FsListComponent]
932
+ }], loadProcesses: [{
933
+ type: Input
934
+ }], loadProcess: [{
935
+ type: Input
936
+ }], run: [{
937
+ type: Input
938
+ }], kill: [{
939
+ type: Input
940
+ }], delete: [{
941
+ type: Input
942
+ }], download: [{
943
+ type: Input
944
+ }], actions: [{
945
+ type: Input
946
946
  }] } });
947
947
 
948
- class ServerLogComponent {
949
- constructor(data) {
950
- this.data = data;
951
- }
952
- ngOnInit() {
953
- if (this.data.log) {
954
- this.log = this.data.log;
955
- try {
956
- this.log.backtrace = JSON.parse(this.log.backtrace);
957
- }
958
- catch (e) { }
959
- try {
960
- this.log.server = JSON.parse(this.log.server);
961
- }
962
- catch (e) { }
963
- }
964
- }
965
- }
966
- 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 });
967
- 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: i8.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": i3.FsDateFormatPipe, "json": i9.JsonPipe } });
968
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogComponent, decorators: [{
969
- type: Component,
970
- args: [{
971
- templateUrl: './server-log.component.html',
972
- styleUrls: ['./server-log.component.scss']
973
- }]
974
- }], ctorParameters: function () { return [{ type: undefined, decorators: [{
975
- type: Inject,
976
- args: [MAT_DIALOG_DATA]
948
+ class ServerLogComponent {
949
+ constructor(data) {
950
+ this.data = data;
951
+ }
952
+ ngOnInit() {
953
+ if (this.data.log) {
954
+ this.log = this.data.log;
955
+ try {
956
+ this.log.backtrace = JSON.parse(this.log.backtrace);
957
+ }
958
+ catch (e) { }
959
+ try {
960
+ this.log.server = JSON.parse(this.log.server);
961
+ }
962
+ catch (e) { }
963
+ }
964
+ }
965
+ }
966
+ 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 });
967
+ 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 } });
968
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogComponent, decorators: [{
969
+ type: Component,
970
+ args: [{
971
+ templateUrl: './server-log.component.html',
972
+ styleUrls: ['./server-log.component.scss']
973
+ }]
974
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
975
+ type: Inject,
976
+ args: [MAT_DIALOG_DATA]
977
977
  }] }]; } });
978
978
 
979
- class ServerLogsComponent {
980
- constructor(_dialog) {
981
- this._dialog = _dialog;
982
- this.config = null;
983
- this.logTypes = [];
984
- }
985
- ngOnInit() {
986
- this._configList();
987
- }
988
- _configList() {
989
- this.config = {
990
- filters: [
991
- {
992
- type: ItemType.Keyword,
993
- name: 'keyword',
994
- label: 'Search'
995
- }
996
- ],
997
- fetch: query => {
998
- return this.loadLogs(query)
999
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
1000
- }
1001
- };
1002
- }
1003
- open(log) {
1004
- this._dialog.open(ServerLogComponent, {
1005
- data: { log: log },
1006
- width: '85%'
1007
- });
1008
- }
1009
- }
1010
- 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 });
1011
- 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: i2$3.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i3.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
1012
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogsComponent, decorators: [{
1013
- type: Component,
1014
- args: [{
1015
- selector: 'fs-system-server-logs',
1016
- templateUrl: './server-logs.component.html',
1017
- styleUrls: ['./server-logs.component.scss']
1018
- }]
1019
- }], ctorParameters: function () { return [{ type: i1$1.MatDialog }]; }, propDecorators: { list: [{
1020
- type: ViewChild,
1021
- args: ['list', { static: true }]
1022
- }], loadLogs: [{
1023
- type: Input
979
+ class ServerLogsComponent {
980
+ constructor(_dialog) {
981
+ this._dialog = _dialog;
982
+ this.config = null;
983
+ this.logTypes = [];
984
+ }
985
+ ngOnInit() {
986
+ this._configList();
987
+ }
988
+ _configList() {
989
+ this.config = {
990
+ filters: [
991
+ {
992
+ type: ItemType.Keyword,
993
+ name: 'keyword',
994
+ label: 'Search'
995
+ }
996
+ ],
997
+ fetch: query => {
998
+ return this.loadLogs(query)
999
+ .pipe(map((response) => ({ data: response.data, paging: response.paging })));
1000
+ }
1001
+ };
1002
+ }
1003
+ open(log) {
1004
+ this._dialog.open(ServerLogComponent, {
1005
+ data: { log: log },
1006
+ width: '85%'
1007
+ });
1008
+ }
1009
+ }
1010
+ 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 });
1011
+ 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: i2$3.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: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
1012
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ServerLogsComponent, decorators: [{
1013
+ type: Component,
1014
+ args: [{
1015
+ selector: 'fs-system-server-logs',
1016
+ templateUrl: './server-logs.component.html',
1017
+ styleUrls: ['./server-logs.component.scss']
1018
+ }]
1019
+ }], ctorParameters: function () { return [{ type: i1$1.MatDialog }]; }, propDecorators: { list: [{
1020
+ type: ViewChild,
1021
+ args: ['list', { static: true }]
1022
+ }], loadLogs: [{
1023
+ type: Input
1024
1024
  }] } });
1025
1025
 
1026
- class UpgradeLogsComponent {
1027
- constructor() {
1028
- this.config = null;
1029
- this.logTypes = [];
1030
- }
1031
- ngOnInit() {
1032
- this._configList();
1033
- }
1034
- _configList() {
1035
- this.config = {
1036
- paging: false,
1037
- filters: [
1038
- {
1039
- type: ItemType.Keyword,
1040
- name: 'keyword',
1041
- label: 'Search'
1042
- }
1043
- ],
1044
- fetch: query => {
1045
- return this.loadUpgradeLogs(query)
1046
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
1047
- }
1048
- };
1049
- }
1050
- }
1051
- UpgradeLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: UpgradeLogsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1052
- 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: i2$3.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i3.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
1053
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: UpgradeLogsComponent, decorators: [{
1054
- type: Component,
1055
- args: [{
1056
- selector: 'fs-system-upgrade-logs',
1057
- templateUrl: './upgrade-logs.component.html',
1058
- styleUrls: ['./upgrade-logs.component.scss']
1059
- }]
1060
- }], propDecorators: { list: [{
1061
- type: ViewChild,
1062
- args: [FsListComponent, { static: true }]
1063
- }], loadUpgradeLogs: [{
1064
- type: Input
1026
+ class UpgradeLogsComponent {
1027
+ constructor() {
1028
+ this.config = null;
1029
+ this.logTypes = [];
1030
+ }
1031
+ ngOnInit() {
1032
+ this._configList();
1033
+ }
1034
+ _configList() {
1035
+ this.config = {
1036
+ paging: false,
1037
+ filters: [
1038
+ {
1039
+ type: ItemType.Keyword,
1040
+ name: 'keyword',
1041
+ label: 'Search'
1042
+ }
1043
+ ],
1044
+ fetch: query => {
1045
+ return this.loadUpgradeLogs(query)
1046
+ .pipe(map((response) => ({ data: response.data, paging: response.paging })));
1047
+ }
1048
+ };
1049
+ }
1050
+ }
1051
+ UpgradeLogsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: UpgradeLogsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1052
+ 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: i2$3.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: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }] });
1053
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: UpgradeLogsComponent, decorators: [{
1054
+ type: Component,
1055
+ args: [{
1056
+ selector: 'fs-system-upgrade-logs',
1057
+ templateUrl: './upgrade-logs.component.html',
1058
+ styleUrls: ['./upgrade-logs.component.scss']
1059
+ }]
1060
+ }], propDecorators: { list: [{
1061
+ type: ViewChild,
1062
+ args: [FsListComponent, { static: true }]
1063
+ }], loadUpgradeLogs: [{
1064
+ type: Input
1065
1065
  }] } });
1066
1066
 
1067
- class ApiLogComponent {
1068
- constructor(_dialogRef, data) {
1069
- this._dialogRef = _dialogRef;
1070
- this.data = data;
1071
- }
1072
- ngOnInit() {
1073
- this.apiLogStates = indexNameValue(ApiLogStates);
1074
- if (this.data.apiLog) {
1075
- this.apiLog = this.data.apiLog;
1076
- }
1077
- }
1078
- }
1079
- 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 });
1080
- 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: i8.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": i3.FsDateFormatPipe, "fsDateDuration": i3.FsDateDurationPipe, "json": i9.JsonPipe } });
1081
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogComponent, decorators: [{
1082
- type: Component,
1083
- args: [{
1084
- templateUrl: './api-log.component.html',
1085
- styleUrls: ['./api-log.component.scss']
1086
- }]
1087
- }], ctorParameters: function () { return [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
1088
- type: Inject,
1089
- args: [MAT_DIALOG_DATA]
1067
+ class ApiLogComponent {
1068
+ constructor(_dialogRef, data) {
1069
+ this._dialogRef = _dialogRef;
1070
+ this.data = data;
1071
+ }
1072
+ ngOnInit() {
1073
+ this.apiLogStates = indexNameValue(ApiLogStates);
1074
+ if (this.data.apiLog) {
1075
+ this.apiLog = this.data.apiLog;
1076
+ }
1077
+ }
1078
+ }
1079
+ 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 });
1080
+ 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\n <div mat-dialog-title>API Log</div>\n\n <mat-dialog-content>\n <div\n fxLayout=\"row wrap\"\n fxLayout.xs=\"column\"\n fxLayoutGap.xs=\"0px\"\n fxLayoutAlign=\"start start\"\n fxLayoutGap=\"100px\">\n\n <div>\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\n <fs-label-field *ngIf=\"apiLog.code\">\n <fs-label>\n Code\n </fs-label>\n {{apiLog.code}}\n </fs-label-field>\n\n </div>\n <div>\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\n <fs-label-field *ngIf=\"apiLog.direction\">\n <fs-label>\n Direction\n </fs-label>\n {{apiLog.direction}}\n </fs-label-field>\n\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 </div>\n </div>\n\n <div>\n <fs-label-field *ngIf=\"apiLog.message\">\n <fs-label>\n Message\n </fs-label>\n {{apiLog.message}}\n </fs-label-field>\n </div>\n\n\n <div\n fxLayout=\"row wrap\"\n fxLayout.xs=\"column\"\n fxLayoutGap.xs=\"0px\"\n fxLayoutAlign=\"start start\"\n fxLayoutGap=\"100px\">\n\n <div>\n <fs-label-field *ngIf=\"apiLog.method\">\n <fs-label>\n Method\n </fs-label>\n {{apiLog.method}}\n </fs-label-field>\n </div>\n <div>\n <fs-label-field *ngIf=\"apiLog.url\">\n <fs-label>\n URL\n </fs-label>\n {{apiLog.url}}\n </fs-label-field>\n </div>\n </div>\n\n <div>\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 </div>\n </mat-dialog-content>\n\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: 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: 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.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 } });
1081
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogComponent, decorators: [{
1082
+ type: Component,
1083
+ args: [{
1084
+ templateUrl: './api-log.component.html',
1085
+ styleUrls: ['./api-log.component.scss']
1086
+ }]
1087
+ }], ctorParameters: function () { return [{ type: i1$1.MatDialogRef }, { type: undefined, decorators: [{
1088
+ type: Inject,
1089
+ args: [MAT_DIALOG_DATA]
1090
1090
  }] }]; } });
1091
1091
 
1092
- class ApiLogsComponent {
1093
- constructor(_dialog) {
1094
- this._dialog = _dialog;
1095
- this.config = null;
1096
- this.apiLogStates = indexNameValue(ApiLogStates);
1097
- }
1098
- ngOnInit() {
1099
- this._configList();
1100
- }
1101
- _configList() {
1102
- this.config = {
1103
- filters: [
1104
- {
1105
- type: ItemType.Keyword,
1106
- name: 'keyword',
1107
- label: 'Search'
1108
- },
1109
- {
1110
- type: ItemType.Select,
1111
- name: 'state',
1112
- label: 'Status',
1113
- values: ApiLogStates
1114
- },
1115
- {
1116
- name: 'createDate',
1117
- type: ItemType.DateRange,
1118
- label: ['From Date', 'To Date'],
1119
- }
1120
- ],
1121
- fetch: query => {
1122
- Object.assign(query, {});
1123
- return this.loadApiLogs(query)
1124
- .pipe(map((response) => ({ data: response.data, paging: response.paging })));
1125
- }
1126
- };
1127
- }
1128
- open(apiLog) {
1129
- this._dialog.open(ApiLogComponent, {
1130
- data: { apiLog: apiLog },
1131
- width: '85%'
1132
- });
1133
- }
1134
- }
1135
- 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 });
1136
- 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: i2$3.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i3.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "fsDateDuration": i3.FsDateDurationPipe } });
1137
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogsComponent, decorators: [{
1138
- type: Component,
1139
- args: [{
1140
- selector: 'fs-system-api-logs',
1141
- templateUrl: './api-logs.component.html',
1142
- styleUrls: ['./api-logs.component.scss']
1143
- }]
1144
- }], ctorParameters: function () { return [{ type: i1$1.MatDialog }]; }, propDecorators: { list: [{
1145
- type: ViewChild,
1146
- args: [FsListComponent, { static: true }]
1147
- }], loadApiLogs: [{
1148
- type: Input
1092
+ class ApiLogsComponent {
1093
+ constructor(_dialog) {
1094
+ this._dialog = _dialog;
1095
+ this.config = null;
1096
+ this.apiLogStates = indexNameValue(ApiLogStates);
1097
+ }
1098
+ ngOnInit() {
1099
+ this._configList();
1100
+ }
1101
+ _configList() {
1102
+ this.config = {
1103
+ filters: [
1104
+ {
1105
+ type: ItemType.Keyword,
1106
+ name: 'keyword',
1107
+ label: 'Search'
1108
+ },
1109
+ {
1110
+ type: ItemType.Select,
1111
+ name: 'state',
1112
+ label: 'Status',
1113
+ values: ApiLogStates
1114
+ },
1115
+ {
1116
+ name: 'createDate',
1117
+ type: ItemType.DateRange,
1118
+ label: ['From Date', 'To Date'],
1119
+ }
1120
+ ],
1121
+ fetch: query => {
1122
+ Object.assign(query, {});
1123
+ return this.loadApiLogs(query)
1124
+ .pipe(map((response) => ({ data: response.data, paging: response.paging })));
1125
+ }
1126
+ };
1127
+ }
1128
+ open(apiLog) {
1129
+ this._dialog.open(ApiLogComponent, {
1130
+ data: { apiLog: apiLog },
1131
+ width: '85%'
1132
+ });
1133
+ }
1134
+ }
1135
+ 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 });
1136
+ 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)\">\n {{row.type || 'Unknown'}}\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='outgoing'\">arrow_upward</mat-icon>\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='incoming'\">arrow_downward</mat-icon>\n </a>\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 <span *ngIf=\"row.code\" class=\"code\" [ngClass]=\"{'success': row.code==200,'error': row.code!=200 }\">[{{row.code}}]</span>\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>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: [".code.success{color:green}.code.error{color:red}.direction{font-size:14px;height:14px;line-height:14px;width:14px}\n"], components: [{ type: i2$3.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { type: i6.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i4$2.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }], directives: [{ type: i2$3.FsListColumnDirective, selector: "fs-list-column", inputs: ["title", "name", "show", "customize", "sortable", "sortableDefault", "direction", "align", "width", "class"] }, { type: i2$3.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { type: i2$3.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { type: i9.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { 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"] }], pipes: { "fsDateDuration": i4$2.FsDateDurationPipe } });
1137
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: ApiLogsComponent, decorators: [{
1138
+ type: Component,
1139
+ args: [{
1140
+ selector: 'fs-system-api-logs',
1141
+ templateUrl: './api-logs.component.html',
1142
+ styleUrls: ['./api-logs.component.scss']
1143
+ }]
1144
+ }], ctorParameters: function () { return [{ type: i1$1.MatDialog }]; }, propDecorators: { list: [{
1145
+ type: ViewChild,
1146
+ args: [FsListComponent, { static: true }]
1147
+ }], loadApiLogs: [{
1148
+ type: Input
1149
1149
  }] } });
1150
1150
 
1151
- class InfoComponent {
1152
- ngAfterViewInit() {
1153
- this._load();
1154
- }
1155
- _load() {
1156
- this.load()
1157
- .subscribe((info) => {
1158
- info += '<style>body { background: transparent; }</style>';
1159
- const doc = this.iframe.nativeElement.contentDocument || this.iframe.nativeElement.contentWindow;
1160
- doc.open();
1161
- doc.write(info);
1162
- doc.close();
1163
- const scrollHeight = (this.iframe.nativeElement.contentWindow.document.documentElement.scrollHeight + 100);
1164
- this.iframe.nativeElement.style.height = `${scrollHeight}px`;
1165
- });
1166
- }
1167
- }
1168
- InfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: InfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1169
- 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 });
1170
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: InfoComponent, decorators: [{
1171
- type: Component,
1172
- args: [{
1173
- selector: 'fs-system-info',
1174
- templateUrl: 'info.component.html',
1175
- styleUrls: ['info.component.scss'],
1176
- changeDetection: ChangeDetectionStrategy.OnPush,
1177
- }]
1178
- }], propDecorators: { iframe: [{
1179
- type: ViewChild,
1180
- args: ['iframe']
1181
- }], load: [{
1182
- type: Input
1151
+ class InfoComponent {
1152
+ ngAfterViewInit() {
1153
+ this._load();
1154
+ }
1155
+ _load() {
1156
+ this.load()
1157
+ .subscribe((info) => {
1158
+ info += '<style>body { background: transparent; }</style>';
1159
+ const doc = this.iframe.nativeElement.contentDocument || this.iframe.nativeElement.contentWindow;
1160
+ doc.open();
1161
+ doc.write(info);
1162
+ doc.close();
1163
+ const scrollHeight = (this.iframe.nativeElement.contentWindow.document.documentElement.scrollHeight + 100);
1164
+ this.iframe.nativeElement.style.height = `${scrollHeight}px`;
1165
+ });
1166
+ }
1167
+ }
1168
+ InfoComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: InfoComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
1169
+ 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 });
1170
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: InfoComponent, decorators: [{
1171
+ type: Component,
1172
+ args: [{
1173
+ selector: 'fs-system-info',
1174
+ templateUrl: 'info.component.html',
1175
+ styleUrls: ['info.component.scss'],
1176
+ changeDetection: ChangeDetectionStrategy.OnPush,
1177
+ }]
1178
+ }], propDecorators: { iframe: [{
1179
+ type: ViewChild,
1180
+ args: ['iframe']
1181
+ }], load: [{
1182
+ type: Input
1183
1183
  }] } });
1184
1184
 
1185
- class FsSystemModule {
1186
- static forRoot(config) {
1187
- return {
1188
- ngModule: FsSystemModule,
1189
- providers: [
1190
- { provide: FS_SYSTEM_CONFIG, useValue: config || {} },
1191
- ]
1192
- };
1193
- }
1194
- }
1195
- FsSystemModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1196
- FsSystemModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, declarations: [DashboardComponent,
1197
- CronsComponent,
1198
- SettingsComponent,
1199
- KeyNameValuePipe,
1200
- FileManagerComponent,
1201
- ProcessesComponent,
1202
- ServerLogComponent,
1203
- ServerLogsComponent,
1204
- UpgradeLogsComponent,
1205
- ApiLogsComponent,
1206
- ApiLogComponent,
1207
- InfoComponent,
1208
- ProcessComponent,
1209
- CronComponent,
1210
- CronLogComponent], imports: [CommonModule,
1211
- FlexLayoutModule,
1212
- FormsModule,
1213
- MatButtonModule,
1214
- MatExpansionModule,
1215
- MatTooltipModule,
1216
- MatIconModule,
1217
- MatFormFieldModule,
1218
- MatInputModule,
1219
- MatSelectModule,
1220
- MatDialogModule,
1221
- MatTabsModule,
1222
- FsDateModule,
1223
- FsSkeletonModule,
1224
- FsListModule,
1225
- FsFileModule,
1226
- FsFileManagerModule,
1227
- FsLabelModule,
1228
- FsDialogModule,
1229
- FsDatePickerModule,
1230
- FsMenuModule,
1231
- FsPopoverModule,
1232
- FsColorPickerModule], exports: [DashboardComponent,
1233
- CronsComponent,
1234
- SettingsComponent,
1235
- FileManagerComponent,
1236
- ProcessesComponent,
1237
- ServerLogsComponent,
1238
- UpgradeLogsComponent,
1239
- ApiLogsComponent,
1240
- InfoComponent] });
1241
- FsSystemModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, imports: [[
1242
- CommonModule,
1243
- FlexLayoutModule,
1244
- FormsModule,
1245
- MatButtonModule,
1246
- MatExpansionModule,
1247
- MatTooltipModule,
1248
- MatIconModule,
1249
- MatFormFieldModule,
1250
- MatInputModule,
1251
- MatSelectModule,
1252
- MatDialogModule,
1253
- MatTabsModule,
1254
- FsDateModule,
1255
- FsSkeletonModule,
1256
- FsListModule,
1257
- FsFileModule,
1258
- FsFileManagerModule,
1259
- FsLabelModule,
1260
- FsDialogModule,
1261
- FsDatePickerModule,
1262
- FsMenuModule,
1263
- FsPopoverModule,
1264
- FsColorPickerModule,
1265
- ]] });
1266
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, decorators: [{
1267
- type: NgModule,
1268
- args: [{
1269
- imports: [
1270
- CommonModule,
1271
- FlexLayoutModule,
1272
- FormsModule,
1273
- MatButtonModule,
1274
- MatExpansionModule,
1275
- MatTooltipModule,
1276
- MatIconModule,
1277
- MatFormFieldModule,
1278
- MatInputModule,
1279
- MatSelectModule,
1280
- MatDialogModule,
1281
- MatTabsModule,
1282
- FsDateModule,
1283
- FsSkeletonModule,
1284
- FsListModule,
1285
- FsFileModule,
1286
- FsFileManagerModule,
1287
- FsLabelModule,
1288
- FsDialogModule,
1289
- FsDatePickerModule,
1290
- FsMenuModule,
1291
- FsPopoverModule,
1292
- FsColorPickerModule,
1293
- ],
1294
- exports: [
1295
- DashboardComponent,
1296
- CronsComponent,
1297
- SettingsComponent,
1298
- FileManagerComponent,
1299
- ProcessesComponent,
1300
- ServerLogsComponent,
1301
- UpgradeLogsComponent,
1302
- ApiLogsComponent,
1303
- InfoComponent,
1304
- ],
1305
- declarations: [
1306
- DashboardComponent,
1307
- CronsComponent,
1308
- SettingsComponent,
1309
- KeyNameValuePipe,
1310
- FileManagerComponent,
1311
- ProcessesComponent,
1312
- ServerLogComponent,
1313
- ServerLogsComponent,
1314
- UpgradeLogsComponent,
1315
- ApiLogsComponent,
1316
- ApiLogComponent,
1317
- InfoComponent,
1318
- ProcessComponent,
1319
- CronComponent,
1320
- CronLogComponent,
1321
- ],
1322
- }]
1185
+ class FsSystemModule {
1186
+ static forRoot(config) {
1187
+ return {
1188
+ ngModule: FsSystemModule,
1189
+ providers: [
1190
+ { provide: FS_SYSTEM_CONFIG, useValue: config || {} },
1191
+ ]
1192
+ };
1193
+ }
1194
+ }
1195
+ FsSystemModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
1196
+ FsSystemModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, declarations: [DashboardComponent,
1197
+ CronsComponent,
1198
+ SettingsComponent,
1199
+ KeyNameValuePipe,
1200
+ FileManagerComponent,
1201
+ ProcessesComponent,
1202
+ ServerLogComponent,
1203
+ ServerLogsComponent,
1204
+ UpgradeLogsComponent,
1205
+ ApiLogsComponent,
1206
+ ApiLogComponent,
1207
+ InfoComponent,
1208
+ ProcessComponent,
1209
+ CronComponent,
1210
+ CronLogComponent], imports: [CommonModule,
1211
+ FlexLayoutModule,
1212
+ FormsModule,
1213
+ MatButtonModule,
1214
+ MatExpansionModule,
1215
+ MatTooltipModule,
1216
+ MatIconModule,
1217
+ MatFormFieldModule,
1218
+ MatInputModule,
1219
+ MatSelectModule,
1220
+ MatDialogModule,
1221
+ MatTabsModule,
1222
+ FsDateModule,
1223
+ FsSkeletonModule,
1224
+ FsListModule,
1225
+ FsFileModule,
1226
+ FsFileManagerModule,
1227
+ FsLabelModule,
1228
+ FsDialogModule,
1229
+ FsDatePickerModule,
1230
+ FsMenuModule,
1231
+ FsPopoverModule,
1232
+ FsColorPickerModule], exports: [DashboardComponent,
1233
+ CronsComponent,
1234
+ SettingsComponent,
1235
+ FileManagerComponent,
1236
+ ProcessesComponent,
1237
+ ServerLogsComponent,
1238
+ UpgradeLogsComponent,
1239
+ ApiLogsComponent,
1240
+ InfoComponent] });
1241
+ FsSystemModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, imports: [[
1242
+ CommonModule,
1243
+ FlexLayoutModule,
1244
+ FormsModule,
1245
+ MatButtonModule,
1246
+ MatExpansionModule,
1247
+ MatTooltipModule,
1248
+ MatIconModule,
1249
+ MatFormFieldModule,
1250
+ MatInputModule,
1251
+ MatSelectModule,
1252
+ MatDialogModule,
1253
+ MatTabsModule,
1254
+ FsDateModule,
1255
+ FsSkeletonModule,
1256
+ FsListModule,
1257
+ FsFileModule,
1258
+ FsFileManagerModule,
1259
+ FsLabelModule,
1260
+ FsDialogModule,
1261
+ FsDatePickerModule,
1262
+ FsMenuModule,
1263
+ FsPopoverModule,
1264
+ FsColorPickerModule,
1265
+ ]] });
1266
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.16", ngImport: i0, type: FsSystemModule, decorators: [{
1267
+ type: NgModule,
1268
+ args: [{
1269
+ imports: [
1270
+ CommonModule,
1271
+ FlexLayoutModule,
1272
+ FormsModule,
1273
+ MatButtonModule,
1274
+ MatExpansionModule,
1275
+ MatTooltipModule,
1276
+ MatIconModule,
1277
+ MatFormFieldModule,
1278
+ MatInputModule,
1279
+ MatSelectModule,
1280
+ MatDialogModule,
1281
+ MatTabsModule,
1282
+ FsDateModule,
1283
+ FsSkeletonModule,
1284
+ FsListModule,
1285
+ FsFileModule,
1286
+ FsFileManagerModule,
1287
+ FsLabelModule,
1288
+ FsDialogModule,
1289
+ FsDatePickerModule,
1290
+ FsMenuModule,
1291
+ FsPopoverModule,
1292
+ FsColorPickerModule,
1293
+ ],
1294
+ exports: [
1295
+ DashboardComponent,
1296
+ CronsComponent,
1297
+ SettingsComponent,
1298
+ FileManagerComponent,
1299
+ ProcessesComponent,
1300
+ ServerLogsComponent,
1301
+ UpgradeLogsComponent,
1302
+ ApiLogsComponent,
1303
+ InfoComponent,
1304
+ ],
1305
+ declarations: [
1306
+ DashboardComponent,
1307
+ CronsComponent,
1308
+ SettingsComponent,
1309
+ KeyNameValuePipe,
1310
+ FileManagerComponent,
1311
+ ProcessesComponent,
1312
+ ServerLogComponent,
1313
+ ServerLogsComponent,
1314
+ UpgradeLogsComponent,
1315
+ ApiLogsComponent,
1316
+ ApiLogComponent,
1317
+ InfoComponent,
1318
+ ProcessComponent,
1319
+ CronComponent,
1320
+ CronLogComponent,
1321
+ ],
1322
+ }]
1323
1323
  }] });
1324
1324
 
1325
- /**
1326
- * Generated bundle index. Do not edit.
1325
+ /**
1326
+ * Generated bundle index. Do not edit.
1327
1327
  */
1328
1328
 
1329
1329
  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 };