@firestitch/system 12.0.0 → 12.1.2

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