@firestitch/system 15.0.0 → 17.0.0
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.
- package/app/modules/query-logs/components/query-logs/query-logs.component.d.ts +1 -1
- package/app/modules/system/components/api-logs/api-logs.component.d.ts +1 -1
- package/app/modules/system/components/cron-next-run/cron-next-run.component.d.ts +1 -1
- package/app/modules/system/components/crons/crons.component.d.ts +1 -1
- package/app/modules/system/components/dashboard/dashboard.component.d.ts +1 -1
- package/app/modules/system/components/info/info.component.d.ts +1 -1
- package/app/modules/system/components/processes/processes.component.d.ts +1 -1
- package/app/modules/system/components/server-logs/server-logs.component.d.ts +1 -1
- package/app/modules/system/components/settings/settings.component.d.ts +1 -1
- package/app/modules/system/components/upgrade-logs/upgrade-logs.component.d.ts +1 -1
- package/esm2022/app/modules/query-logs/components/explain/explain.component.mjs +26 -0
- package/esm2022/app/modules/query-logs/components/query-log/query-log.component.mjs +61 -0
- package/esm2022/app/modules/query-logs/components/query-logs/query-logs.component.mjs +89 -0
- package/{esm2020 → esm2022}/app/modules/query-logs/query-logs.module.mjs +35 -35
- package/esm2022/app/modules/system/components/api-log/api-log.component.mjs +38 -0
- package/esm2022/app/modules/system/components/api-logs/api-logs.component.mjs +72 -0
- package/esm2022/app/modules/system/components/cron/cron.component.mjs +111 -0
- package/esm2022/app/modules/system/components/cron-log/cron-log.component.mjs +39 -0
- package/esm2022/app/modules/system/components/cron-next-run/cron-next-run.component.mjs +102 -0
- package/esm2022/app/modules/system/components/crons/crons.component.mjs +249 -0
- package/esm2022/app/modules/system/components/dashboard/dashboard.component.mjs +92 -0
- package/esm2022/app/modules/system/components/info/info.component.mjs +33 -0
- package/esm2022/app/modules/system/components/process/process.component.mjs +103 -0
- package/esm2022/app/modules/system/components/processes/processes.component.mjs +188 -0
- package/esm2022/app/modules/system/components/server-log/server-log.component.mjs +40 -0
- package/esm2022/app/modules/system/components/server-logs/server-logs.component.mjs +56 -0
- package/esm2022/app/modules/system/components/settings/settings.component.mjs +144 -0
- package/esm2022/app/modules/system/components/upgrade-logs/upgrade-logs.component.mjs +44 -0
- package/{esm2020 → esm2022}/app/modules/system/fs-system.module.mjs +70 -70
- package/{esm2020 → esm2022}/app/modules/system/pipes/key-name-value.pipe.mjs +5 -5
- package/{fesm2020 → fesm2022}/firestitch-system.mjs +315 -238
- package/fesm2022/firestitch-system.mjs.map +1 -0
- package/package.json +5 -11
- package/esm2020/app/modules/query-logs/components/explain/explain.component.mjs +0 -24
- package/esm2020/app/modules/query-logs/components/query-log/query-log.component.mjs +0 -58
- package/esm2020/app/modules/query-logs/components/query-logs/query-logs.component.mjs +0 -84
- package/esm2020/app/modules/system/components/api-log/api-log.component.mjs +0 -34
- package/esm2020/app/modules/system/components/api-logs/api-logs.component.mjs +0 -69
- package/esm2020/app/modules/system/components/cron/cron.component.mjs +0 -105
- package/esm2020/app/modules/system/components/cron-log/cron-log.component.mjs +0 -37
- package/esm2020/app/modules/system/components/cron-next-run/cron-next-run.component.mjs +0 -99
- package/esm2020/app/modules/system/components/crons/crons.component.mjs +0 -236
- package/esm2020/app/modules/system/components/dashboard/dashboard.component.mjs +0 -84
- package/esm2020/app/modules/system/components/info/info.component.mjs +0 -31
- package/esm2020/app/modules/system/components/process/process.component.mjs +0 -98
- package/esm2020/app/modules/system/components/processes/processes.component.mjs +0 -178
- package/esm2020/app/modules/system/components/server-log/server-log.component.mjs +0 -38
- package/esm2020/app/modules/system/components/server-logs/server-logs.component.mjs +0 -53
- package/esm2020/app/modules/system/components/settings/settings.component.mjs +0 -138
- package/esm2020/app/modules/system/components/upgrade-logs/upgrade-logs.component.mjs +0 -44
- package/fesm2015/firestitch-system.mjs +0 -1600
- package/fesm2015/firestitch-system.mjs.map +0 -1
- package/fesm2020/firestitch-system.mjs.map +0 -1
- /package/{esm2020 → esm2022}/app/modules/query-logs/components/explain/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/query-logs/components/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/query-logs/components/query-log/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/query-logs/components/query-logs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/api-log/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/api-logs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/cron/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/cron-log/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/cron-next-run/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/crons/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/dashboard/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/info/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/process/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/processes/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/server-log/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/server-logs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/settings/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/components/upgrade-logs/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/consts/api-log-states.const.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/consts/cron-log-states.const.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/consts/cron-process-states.const.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/consts/cron-states.const.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/consts/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/consts/process-process-states.const.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/consts/process-states.const.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/consts/setting-interface-types.const.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/enums/api-log-state.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/enums/cron-log-state.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/enums/cron-state.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/enums/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/enums/process-state.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/enums/setting-interface-type.enum.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/helpers/index-name-value.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/injectors/system-config.injector.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/interfaces/dashboard-action.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/interfaces/index.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/interfaces/process-action.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/interfaces/process.mjs +0 -0
- /package/{esm2020 → esm2022}/app/modules/system/interfaces/system-config.mjs +0 -0
- /package/{esm2020 → esm2022}/firestitch-system.mjs +0 -0
- /package/{esm2020 → esm2022}/public_api.mjs +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { Component, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { MatDialog } from '@angular/material/dialog';
|
|
3
|
+
import { ItemType } from '@firestitch/filter';
|
|
4
|
+
import { FsListComponent } from '@firestitch/list';
|
|
5
|
+
import { map } from 'rxjs/operators';
|
|
6
|
+
import { ApiLogStates } from '../../consts';
|
|
7
|
+
import { indexNameValue } from '../../helpers/index-name-value';
|
|
8
|
+
import { ApiLogComponent } from '../api-log/api-log.component';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "@angular/material/dialog";
|
|
11
|
+
import * as i2 from "@angular/common";
|
|
12
|
+
import * as i3 from "@angular/material/icon";
|
|
13
|
+
import * as i4 from "@firestitch/date";
|
|
14
|
+
import * as i5 from "@firestitch/list";
|
|
15
|
+
export class ApiLogsComponent {
|
|
16
|
+
_dialog;
|
|
17
|
+
list;
|
|
18
|
+
loadApiLogs;
|
|
19
|
+
config = null;
|
|
20
|
+
apiLogStates = indexNameValue(ApiLogStates);
|
|
21
|
+
constructor(_dialog) {
|
|
22
|
+
this._dialog = _dialog;
|
|
23
|
+
}
|
|
24
|
+
ngOnInit() {
|
|
25
|
+
this._configList();
|
|
26
|
+
}
|
|
27
|
+
_configList() {
|
|
28
|
+
this.config = {
|
|
29
|
+
filters: [
|
|
30
|
+
{
|
|
31
|
+
type: ItemType.Keyword,
|
|
32
|
+
name: 'keyword',
|
|
33
|
+
label: 'Search',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
type: ItemType.Select,
|
|
37
|
+
name: 'state',
|
|
38
|
+
label: 'Status',
|
|
39
|
+
values: ApiLogStates,
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
name: 'createDate',
|
|
43
|
+
type: ItemType.DateRange,
|
|
44
|
+
label: ['From Date', 'To Date'],
|
|
45
|
+
},
|
|
46
|
+
],
|
|
47
|
+
fetch: (query) => {
|
|
48
|
+
Object.assign(query, {});
|
|
49
|
+
return this.loadApiLogs(query)
|
|
50
|
+
.pipe(map((response) => ({ data: response.data, paging: response.paging })));
|
|
51
|
+
},
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
open(apiLog) {
|
|
55
|
+
this._dialog.open(ApiLogComponent, {
|
|
56
|
+
data: { apiLog },
|
|
57
|
+
width: '85%',
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiLogsComponent, deps: [{ token: i1.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
61
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ApiLogsComponent, selector: "fs-system-api-logs", inputs: { loadApiLogs: "loadApiLogs" }, viewQueries: [{ propertyName: "list", first: true, predicate: FsListComponent, descendants: true, static: true }], ngImport: i0, template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='outgoing'\">arrow_upward</mat-icon>\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='incoming'\">arrow_downward</mat-icon>\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n <span *ngIf=\"row.code\" class=\"code\" [ngClass]=\"{'success': row.code==200,'error': row.code!=200 }\">[{{row.code}}]</span>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div><small *ngIf=\"row.length\">Duration: {{ row.length | fsDateDuration }}</small></div>\n </ng-template>\n </fs-list-column>\n </fs-list>\n", styles: [".code.success{color:green}.code.error{color:red}.direction{font-size:14px;height:14px;line-height:14px;width:14px}\n"], dependencies: [{ kind: "directive", type: i2.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i4.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "component", type: i5.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i5.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i5.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "directive", type: i5.FsListHeaderDirective, selector: "[fs-list-header]", inputs: ["colspan", "align", "class"] }, { kind: "pipe", type: i4.FsDateDurationPipe, name: "fsDateDuration" }] });
|
|
62
|
+
}
|
|
63
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ApiLogsComponent, decorators: [{
|
|
64
|
+
type: Component,
|
|
65
|
+
args: [{ selector: 'fs-system-api-logs', template: "<fs-list [config]=\"config\">\n <fs-list-column>\n <ng-template fs-list-header>Name</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <a href=\"javascript:;\" (click)=\"open(row)\">\n {{row.type || 'Unknown'}}\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='outgoing'\">arrow_upward</mat-icon>\n <mat-icon class=\"direction\" *ngIf=\"row.direction=='incoming'\">arrow_downward</mat-icon>\n </a>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Status</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{apiLogStates[row.state]}}\n <span *ngIf=\"row.code\" class=\"code\" [ngClass]=\"{'success': row.code==200,'error': row.code!=200 }\">[{{row.code}}]</span>\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Message</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n {{row.message}}\n </ng-template>\n </fs-list-column>\n <fs-list-column>\n <ng-template fs-list-header>Date</ng-template>\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n <div><small *ngIf=\"row.length\">Duration: {{ row.length | fsDateDuration }}</small></div>\n </ng-template>\n </fs-list-column>\n </fs-list>\n", styles: [".code.success{color:green}.code.error{color:red}.direction{font-size:14px;height:14px;line-height:14px;width:14px}\n"] }]
|
|
66
|
+
}], ctorParameters: () => [{ type: i1.MatDialog }], propDecorators: { list: [{
|
|
67
|
+
type: ViewChild,
|
|
68
|
+
args: [FsListComponent, { static: true }]
|
|
69
|
+
}], loadApiLogs: [{
|
|
70
|
+
type: Input
|
|
71
|
+
}] } });
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBpLWxvZ3MuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL2FwaS1sb2dzL2FwaS1sb2dzLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9hcGktbG9ncy9hcGktbG9ncy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFcEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRXJELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUsZUFBZSxFQUFnQixNQUFNLGtCQUFrQixDQUFDO0FBR2pFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVyQyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzVDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNoRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7Ozs7Ozs7QUFRL0QsTUFBTSxPQUFPLGdCQUFnQjtJQVdqQjtJQVJILElBQUksQ0FBa0I7SUFFYixXQUFXLENBQTBEO0lBRTlFLE1BQU0sR0FBaUIsSUFBSSxDQUFDO0lBQzVCLFlBQVksR0FBRyxjQUFjLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFbkQsWUFDVSxPQUFrQjtRQUFsQixZQUFPLEdBQVAsT0FBTyxDQUFXO0lBQ3hCLENBQUM7SUFFRSxRQUFRO1FBQ2IsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTyxXQUFXO1FBRWpCLElBQUksQ0FBQyxNQUFNLEdBQUc7WUFDWixPQUFPLEVBQUU7Z0JBQ1A7b0JBQ0UsSUFBSSxFQUFFLFFBQVEsQ0FBQyxPQUFPO29CQUN0QixJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsUUFBUTtpQkFDaEI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFFBQVEsQ0FBQyxNQUFNO29CQUNyQixJQUFJLEVBQUUsT0FBTztvQkFDYixLQUFLLEVBQUUsUUFBUTtvQkFDZixNQUFNLEVBQUUsWUFBWTtpQkFDckI7Z0JBQ0Q7b0JBQ0UsSUFBSSxFQUFFLFlBQVk7b0JBQ2xCLElBQUksRUFBRSxRQUFRLENBQUMsU0FBUztvQkFDeEIsS0FBSyxFQUFFLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQztpQkFDaEM7YUFDRjtZQUNELEtBQUssRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO2dCQUNmLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLEVBQUcsQ0FBQyxDQUFDO2dCQUUxQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO3FCQUMzQixJQUFJLENBQ0gsR0FBRyxDQUFDLENBQUMsUUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLENBQzNFLENBQUM7WUFDTixDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFTSxJQUFJLENBQUMsTUFBTTtRQUNoQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxlQUFlLEVBQUU7WUFDakMsSUFBSSxFQUFFLEVBQUUsTUFBTSxFQUFFO1lBQ2hCLEtBQUssRUFBRSxLQUFLO1NBQ2IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQzt3R0F2RFUsZ0JBQWdCOzRGQUFoQixnQkFBZ0Isd0lBRWhCLGVBQWUsOERDdEI1QiwyNENBZ0NBOzs0RkRaYSxnQkFBZ0I7a0JBTDVCLFNBQVM7K0JBQ0Usb0JBQW9COzhFQU92QixJQUFJO3NCQURWLFNBQVM7dUJBQUMsZUFBZSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQkFHNUIsV0FBVztzQkFBMUIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1hdERpYWxvZyB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IEl0ZW1UeXBlIH0gZnJvbSAnQGZpcmVzdGl0Y2gvZmlsdGVyJztcbmltcG9ydCB7IEZzTGlzdENvbXBvbmVudCwgRnNMaXN0Q29uZmlnIH0gZnJvbSAnQGZpcmVzdGl0Y2gvbGlzdCc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQXBpTG9nU3RhdGVzIH0gZnJvbSAnLi4vLi4vY29uc3RzJztcbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9pbmRleC1uYW1lLXZhbHVlJztcbmltcG9ydCB7IEFwaUxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2FwaS1sb2cvYXBpLWxvZy5jb21wb25lbnQnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2ZzLXN5c3RlbS1hcGktbG9ncycsXG4gIHRlbXBsYXRlVXJsOiAnLi9hcGktbG9ncy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2FwaS1sb2dzLmNvbXBvbmVudC5zY3NzJ10sXG59KVxuZXhwb3J0IGNsYXNzIEFwaUxvZ3NDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuXG4gIEBWaWV3Q2hpbGQoRnNMaXN0Q29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBwdWJsaWMgbGlzdDogRnNMaXN0Q29tcG9uZW50O1xuXG4gIEBJbnB1dCgpIHB1YmxpYyBsb2FkQXBpTG9nczogKGRhdGE6IGFueSkgPT4gT2JzZXJ2YWJsZTx7IGRhdGE6IGFueVtdOyBwYWdpbmc6IGFueSB9PjtcblxuICBwdWJsaWMgY29uZmlnOiBGc0xpc3RDb25maWcgPSBudWxsO1xuICBwdWJsaWMgYXBpTG9nU3RhdGVzID0gaW5kZXhOYW1lVmFsdWUoQXBpTG9nU3RhdGVzKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcbiAgKSB7IH1cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fY29uZmlnTGlzdCgpO1xuICB9XG5cbiAgcHJpdmF0ZSBfY29uZmlnTGlzdCgpIHtcblxuICAgIHRoaXMuY29uZmlnID0ge1xuICAgICAgZmlsdGVyczogW1xuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuS2V5d29yZCxcbiAgICAgICAgICBuYW1lOiAna2V5d29yZCcsXG4gICAgICAgICAgbGFiZWw6ICdTZWFyY2gnLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgdHlwZTogSXRlbVR5cGUuU2VsZWN0LFxuICAgICAgICAgIG5hbWU6ICdzdGF0ZScsXG4gICAgICAgICAgbGFiZWw6ICdTdGF0dXMnLFxuICAgICAgICAgIHZhbHVlczogQXBpTG9nU3RhdGVzLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ2NyZWF0ZURhdGUnLFxuICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLkRhdGVSYW5nZSxcbiAgICAgICAgICBsYWJlbDogWydGcm9tIERhdGUnLCAnVG8gRGF0ZSddLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIGZldGNoOiAocXVlcnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmFzc2lnbihxdWVyeSwgeyB9KTtcblxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkQXBpTG9ncyhxdWVyeSlcbiAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4gKHsgZGF0YTogcmVzcG9uc2UuZGF0YSwgcGFnaW5nOiByZXNwb25zZS5wYWdpbmcgfSkpLFxuICAgICAgICAgICk7XG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgb3BlbihhcGlMb2cpIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihBcGlMb2dDb21wb25lbnQsIHtcbiAgICAgIGRhdGE6IHsgYXBpTG9nIH0sXG4gICAgICB3aWR0aDogJzg1JScsXG4gICAgfSk7XG4gIH1cbn1cbiIsIjxmcy1saXN0IFtjb25maWddPVwiY29uZmlnXCI+XG4gICAgPGZzLWxpc3QtY29sdW1uPlxuICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPk5hbWU8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiAoY2xpY2spPVwib3Blbihyb3cpXCI+XG4gICAgICAgICAge3tyb3cudHlwZSB8fCAnVW5rbm93bid9fVxuICAgICAgICAgIDxtYXQtaWNvbiBjbGFzcz1cImRpcmVjdGlvblwiICpuZ0lmPVwicm93LmRpcmVjdGlvbj09J291dGdvaW5nJ1wiPmFycm93X3Vwd2FyZDwvbWF0LWljb24+XG4gICAgICAgICAgPG1hdC1pY29uIGNsYXNzPVwiZGlyZWN0aW9uXCIgKm5nSWY9XCJyb3cuZGlyZWN0aW9uPT0naW5jb21pbmcnXCI+YXJyb3dfZG93bndhcmQ8L21hdC1pY29uPlxuICAgICAgICA8L2E+XG4gICAgICA8L25nLXRlbXBsYXRlPlxuICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgPGZzLWxpc3QtY29sdW1uPlxuICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPlN0YXR1czwvbmctdGVtcGxhdGU+XG4gICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAge3thcGlMb2dTdGF0ZXNbcm93LnN0YXRlXX19XG4gICAgICAgIDxzcGFuICpuZ0lmPVwicm93LmNvZGVcIiBjbGFzcz1cImNvZGVcIiBbbmdDbGFzc109XCJ7J3N1Y2Nlc3MnOiByb3cuY29kZT09MjAwLCdlcnJvcic6IHJvdy5jb2RlIT0yMDAgfVwiPlt7e3Jvdy5jb2RlfX1dPC9zcGFuPlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgIDxmcy1saXN0LWNvbHVtbj5cbiAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPk1lc3NhZ2U8L25nLXRlbXBsYXRlPlxuICAgICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICB7e3Jvdy5tZXNzYWdlfX1cbiAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG4gICAgPGZzLWxpc3QtY29sdW1uPlxuICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtaGVhZGVyPkRhdGU8L25nLXRlbXBsYXRlPlxuICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XG4gICAgICAgIDxkaXY+PHNtYWxsICpuZ0lmPVwicm93Lmxlbmd0aFwiPkR1cmF0aW9uOiB7eyByb3cubGVuZ3RoIHwgZnNEYXRlRHVyYXRpb24gfX08L3NtYWxsPjwvZGl2PlxuICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICA8L2ZzLWxpc3Q+XG4iXX0=
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Inject } from '@angular/core';
|
|
2
|
+
import { MAT_DIALOG_DATA, MatDialog } from '@angular/material/dialog';
|
|
3
|
+
import { ItemType } from '@firestitch/filter';
|
|
4
|
+
import { CronProcessStates, CronStates } from '../../consts';
|
|
5
|
+
import { CronLogStates } from '../../consts/cron-log-states.const';
|
|
6
|
+
import { indexNameValue } from '../../helpers/index-name-value';
|
|
7
|
+
import { CronLogComponent } from '../cron-log';
|
|
8
|
+
import * as i0 from "@angular/core";
|
|
9
|
+
import * as i1 from "@angular/material/dialog";
|
|
10
|
+
import * as i2 from "@angular/common";
|
|
11
|
+
import * as i3 from "@angular/material/button";
|
|
12
|
+
import * as i4 from "@angular/material/tabs";
|
|
13
|
+
import * as i5 from "@firestitch/date";
|
|
14
|
+
import * as i6 from "@firestitch/skeleton";
|
|
15
|
+
import * as i7 from "@firestitch/list";
|
|
16
|
+
import * as i8 from "@firestitch/label";
|
|
17
|
+
import * as i9 from "@firestitch/dialog";
|
|
18
|
+
export class CronComponent {
|
|
19
|
+
_data;
|
|
20
|
+
_dialog;
|
|
21
|
+
_cdRef;
|
|
22
|
+
cron;
|
|
23
|
+
tabIndex = 0;
|
|
24
|
+
CronStates = indexNameValue(CronStates);
|
|
25
|
+
CronProcessStates = indexNameValue(CronProcessStates);
|
|
26
|
+
CronLogStates = indexNameValue(CronLogStates);
|
|
27
|
+
CronLogStateColors = {};
|
|
28
|
+
config;
|
|
29
|
+
cronActions;
|
|
30
|
+
constructor(_data, _dialog, _cdRef) {
|
|
31
|
+
this._data = _data;
|
|
32
|
+
this._dialog = _dialog;
|
|
33
|
+
this._cdRef = _cdRef;
|
|
34
|
+
}
|
|
35
|
+
ngOnInit() {
|
|
36
|
+
this.load();
|
|
37
|
+
this.CronLogStateColors = CronLogStates
|
|
38
|
+
.reduce((accum, cronLogState) => {
|
|
39
|
+
accum[cronLogState.value] = cronLogState.color;
|
|
40
|
+
return accum;
|
|
41
|
+
}, {});
|
|
42
|
+
}
|
|
43
|
+
cronLogOpen(cronLog) {
|
|
44
|
+
this._dialog.open(CronLogComponent, {
|
|
45
|
+
data: {
|
|
46
|
+
cronLog,
|
|
47
|
+
},
|
|
48
|
+
width: '85%',
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
cronActionClick(cronAction) {
|
|
52
|
+
cronAction.action(this.cron)
|
|
53
|
+
.subscribe(() => {
|
|
54
|
+
this.load();
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
selectedIndexChange(index) {
|
|
58
|
+
this.tabIndex = index;
|
|
59
|
+
}
|
|
60
|
+
load() {
|
|
61
|
+
this._data.loadCron(this._data.cron)
|
|
62
|
+
.subscribe((cron) => {
|
|
63
|
+
this.cron = {
|
|
64
|
+
...this._data.cron,
|
|
65
|
+
...cron,
|
|
66
|
+
};
|
|
67
|
+
if (this._data.loadCronLogs) {
|
|
68
|
+
this.config = {
|
|
69
|
+
filters: [
|
|
70
|
+
{
|
|
71
|
+
type: ItemType.Select,
|
|
72
|
+
name: 'state',
|
|
73
|
+
label: 'Status',
|
|
74
|
+
values: [
|
|
75
|
+
{ name: 'All', value: null },
|
|
76
|
+
...CronLogStates,
|
|
77
|
+
],
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
type: ItemType.DateRange,
|
|
81
|
+
name: 'date',
|
|
82
|
+
label: ['From Date', 'To Date'],
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
fetch: (query) => {
|
|
86
|
+
query = {
|
|
87
|
+
...query,
|
|
88
|
+
cronId: this.cron.id,
|
|
89
|
+
};
|
|
90
|
+
return this._data.loadCronLogs(query);
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
this.cronActions = this._data.cronActions
|
|
95
|
+
.filter((cronLogAction) => {
|
|
96
|
+
return cronLogAction.show(this.cron);
|
|
97
|
+
});
|
|
98
|
+
this._cdRef.markForCheck();
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CronComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1.MatDialog }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
102
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", 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=\"fs-row.gap-lg.wrap.align-start\">\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 Process ID\n </fs-label>\n {{cron.processId || 'None'}}\n <ng-container *ngIf=\"cron.processId\">\n <div class=\"small\">\n {{CronProcessStates[cron.processState] || 'Unknown'}}\n </div>\n </ng-container>\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\n <fs-label-field>\n <fs-label>\n Timeout hours\n </fs-label>\n {{cron.cronSetting?.timeout || 'N/A'}}\n </fs-label-field>\n </div>\n\n <fs-label-field *ngIf=\"cron.message\">\n <fs-label>\n Last Message\n </fs-label>\n <div class=\"message\">{{cron.message}}</div>\n </fs-label-field>\n </mat-tab>\n <mat-tab label=\"Logs\" *ngIf=\"config\">\n <ng-template matTabContent>\n <fs-list [config]=\"config\">\n <fs-list-column name=\"state\" title=\"Status\">\n <ng-template fs-list-cell let-row=\"row\">\n <a \n (click)=\"cronLogOpen(row)\"\n [ngStyle]=\"{ color: CronLogStateColors[row.state] }\">\n {{CronLogStates[row.state] || row.state}}\n </a>\n </ng-template>\n </fs-list-column>\n \n <fs-list-column title=\"Message\" class=\"col-message\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"message\">{{row.message}}</div>\n </ng-template>\n </fs-list-column>\n \n <fs-list-column title=\"Duration\" class=\"col-message\">\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.duration\">\n {{row.duration | fsDateDuration: 'hour-minute-second'}}\n </ng-container>\n </ng-template>\n </fs-list-column>\n\n <fs-list-column name=\"create_date\" title=\"Date\" class=\"col-date\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list> \n </ng-template>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions> \n <button \n mat-button \n [mat-dialog-close]=\"true\" \n color=\"primary\">\n Done\n </button>\n <ng-container *ngIf=\"tabIndex === 0\">\n <button \n *ngFor=\"let cronAction of cronActions\"\n mat-button \n (click)=\"cronActionClick(cronAction)\">\n {{cronAction.label}}\n </button> \n </ng-container>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [":host ::ng-deep .col-message .message{white-space:break-spaces;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}:host ::ng-deep .col-date{white-space:nowrap}h1 .small{line-height:normal}.row{display:flex;flex-wrap:wrap}.row fs-label-field:not(:last-child){margin-right:40px}.message{white-space:pre-line}\n"], dependencies: [{ kind: "directive", type: i2.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i1.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i1.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i1.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i4.MatTabContent, selector: "[matTabContent]" }, { kind: "component", type: i4.MatTab, selector: "mat-tab", inputs: ["disabled", "label", "aria-label", "aria-labelledby", "labelClass", "bodyClass"], exportAs: ["matTab"] }, { kind: "component", type: i4.MatTabGroup, selector: "mat-tab-group", inputs: ["color", "fitInkBarToContent", "mat-stretch-tabs", "dynamicHeight", "selectedIndex", "headerPosition", "animationDuration", "contentTabIndex", "disablePagination", "disableRipple", "preserveContent", "backgroundColor"], outputs: ["selectedIndexChange", "focusChange", "animationDone", "selectedTabChange"], exportAs: ["matTabGroup"] }, { kind: "component", type: i5.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "directive", type: i6.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "component", type: i7.FsListComponent, selector: "fs-list", inputs: ["config", "loaderLines"], outputs: ["filtersReady"] }, { kind: "directive", type: i7.FsListColumnDirective, selector: "fs-list-column", inputs: ["show", "title", "name", "customize", "sortable", "sortableDefault", "sortableDirection", "direction", "align", "width", "class"] }, { kind: "directive", type: i7.FsListCellDirective, selector: "[fs-list-cell]", inputs: ["colspan", "align", "class"] }, { kind: "component", type: i8.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i8.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { kind: "component", type: i9.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }, { kind: "pipe", type: i5.FsDateDurationPipe, name: "fsDateDuration" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
103
|
+
}
|
|
104
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CronComponent, decorators: [{
|
|
105
|
+
type: Component,
|
|
106
|
+
args: [{ changeDetection: ChangeDetectionStrategy.OnPush, 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=\"fs-row.gap-lg.wrap.align-start\">\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 Process ID\n </fs-label>\n {{cron.processId || 'None'}}\n <ng-container *ngIf=\"cron.processId\">\n <div class=\"small\">\n {{CronProcessStates[cron.processState] || 'Unknown'}}\n </div>\n </ng-container>\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\n <fs-label-field>\n <fs-label>\n Timeout hours\n </fs-label>\n {{cron.cronSetting?.timeout || 'N/A'}}\n </fs-label-field>\n </div>\n\n <fs-label-field *ngIf=\"cron.message\">\n <fs-label>\n Last Message\n </fs-label>\n <div class=\"message\">{{cron.message}}</div>\n </fs-label-field>\n </mat-tab>\n <mat-tab label=\"Logs\" *ngIf=\"config\">\n <ng-template matTabContent>\n <fs-list [config]=\"config\">\n <fs-list-column name=\"state\" title=\"Status\">\n <ng-template fs-list-cell let-row=\"row\">\n <a \n (click)=\"cronLogOpen(row)\"\n [ngStyle]=\"{ color: CronLogStateColors[row.state] }\">\n {{CronLogStates[row.state] || row.state}}\n </a>\n </ng-template>\n </fs-list-column>\n \n <fs-list-column title=\"Message\" class=\"col-message\">\n <ng-template fs-list-cell let-row=\"row\">\n <div class=\"message\">{{row.message}}</div>\n </ng-template>\n </fs-list-column>\n \n <fs-list-column title=\"Duration\" class=\"col-message\">\n <ng-template fs-list-cell let-row=\"row\">\n <ng-container *ngIf=\"row.duration\">\n {{row.duration | fsDateDuration: 'hour-minute-second'}}\n </ng-container>\n </ng-template>\n </fs-list-column>\n\n <fs-list-column name=\"create_date\" title=\"Date\" class=\"col-date\">\n <ng-template fs-list-cell let-row=\"row\">\n <fs-date-ago [date]=\"row.createDate\"></fs-date-ago>\n </ng-template>\n </fs-list-column>\n </fs-list> \n </ng-template>\n </mat-tab>\n </mat-tab-group>\n\n </mat-dialog-content>\n <mat-dialog-actions> \n <button \n mat-button \n [mat-dialog-close]=\"true\" \n color=\"primary\">\n Done\n </button>\n <ng-container *ngIf=\"tabIndex === 0\">\n <button \n *ngFor=\"let cronAction of cronActions\"\n mat-button \n (click)=\"cronActionClick(cronAction)\">\n {{cronAction.label}}\n </button> \n </ng-container>\n </mat-dialog-actions>\n</fs-dialog>\n", styles: [":host ::ng-deep .col-message .message{white-space:break-spaces;display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}:host ::ng-deep .col-date{white-space:nowrap}h1 .small{line-height:normal}.row{display:flex;flex-wrap:wrap}.row fs-label-field:not(:last-child){margin-right:40px}.message{white-space:pre-line}\n"] }]
|
|
107
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
108
|
+
type: Inject,
|
|
109
|
+
args: [MAT_DIALOG_DATA]
|
|
110
|
+
}] }, { type: i1.MatDialog }, { type: i0.ChangeDetectorRef }] });
|
|
111
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvY3Jvbi9jcm9uLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9jcm9uL2Nyb24uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFFdEcsT0FBTyxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUV0RSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFHOUMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUM3RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDbkUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQzs7Ozs7Ozs7Ozs7QUFRL0MsTUFBTSxPQUFPLGFBQWE7SUFhVztJQUN6QjtJQUNBO0lBYkgsSUFBSSxDQUFDO0lBQ0wsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNiLFVBQVUsR0FBRyxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDeEMsaUJBQWlCLEdBQUcsY0FBYyxDQUFDLGlCQUFpQixDQUFDLENBQUM7SUFDdEQsYUFBYSxHQUFHLGNBQWMsQ0FBQyxhQUFhLENBQUMsQ0FBQztJQUM5QyxrQkFBa0IsR0FBRyxFQUFFLENBQUM7SUFFeEIsTUFBTSxDQUFlO0lBQ3JCLFdBQVcsQ0FBQztJQUVuQixZQUNtQyxLQUFLLEVBQzlC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O2tCQUx6QixTQUFTO3NDQUdTLHVCQUF1QixDQUFDLE1BQU07OzBCQWU1QyxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ2hhbmdlRGV0ZWN0b3JSZWYsIENvbXBvbmVudCwgSW5qZWN0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgTUFUX0RJQUxPR19EQVRBLCBNYXREaWFsb2cgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9kaWFsb2cnO1xuXG5pbXBvcnQgeyBJdGVtVHlwZSB9IGZyb20gJ0BmaXJlc3RpdGNoL2ZpbHRlcic7XG5pbXBvcnQgeyBGc0xpc3RDb25maWcgfSBmcm9tICdAZmlyZXN0aXRjaC9saXN0JztcblxuaW1wb3J0IHsgQ3JvblByb2Nlc3NTdGF0ZXMsIENyb25TdGF0ZXMgfSBmcm9tICcuLi8uLi9jb25zdHMnO1xuaW1wb3J0IHsgQ3JvbkxvZ1N0YXRlcyB9IGZyb20gJy4uLy4uL2NvbnN0cy9jcm9uLWxvZy1zdGF0ZXMuY29uc3QnO1xuaW1wb3J0IHsgaW5kZXhOYW1lVmFsdWUgfSBmcm9tICcuLi8uLi9oZWxwZXJzL2luZGV4LW5hbWUtdmFsdWUnO1xuaW1wb3J0IHsgQ3JvbkxvZ0NvbXBvbmVudCB9IGZyb20gJy4uL2Nyb24tbG9nJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2Nyb24uY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jcm9uLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBDcm9uQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcblxuICBwdWJsaWMgY3JvbjtcbiAgcHVibGljIHRhYkluZGV4ID0gMDtcbiAgcHVibGljIENyb25TdGF0ZXMgPSBpbmRleE5hbWVWYWx1ZShDcm9uU3RhdGVzKTtcbiAgcHVibGljIENyb25Qcm9jZXNzU3RhdGVzID0gaW5kZXhOYW1lVmFsdWUoQ3JvblByb2Nlc3NTdGF0ZXMpO1xuICBwdWJsaWMgQ3JvbkxvZ1N0YXRlcyA9IGluZGV4TmFtZVZhbHVlKENyb25Mb2dTdGF0ZXMpO1xuICBwdWJsaWMgQ3JvbkxvZ1N0YXRlQ29sb3JzID0ge307XG5cbiAgcHVibGljIGNvbmZpZzogRnNMaXN0Q29uZmlnO1xuICBwdWJsaWMgY3JvbkFjdGlvbnM7XG4gIFxuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KE1BVF9ESUFMT0dfREFUQSkgcHJpdmF0ZSBfZGF0YSxcbiAgICBwcml2YXRlIF9kaWFsb2c6IE1hdERpYWxvZyxcbiAgICBwcml2YXRlIF9jZFJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICkge31cblxuICBwdWJsaWMgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgdGhpcy5sb2FkKCk7XG4gICAgdGhpcy5Dcm9uTG9nU3RhdGVDb2xvcnMgPSBDcm9uTG9nU3RhdGVzXG4gICAgICAucmVkdWNlKChhY2N1bSwgY3JvbkxvZ1N0YXRlKSA9PiB7XG4gICAgICAgIGFjY3VtW2Nyb25Mb2dTdGF0ZS52YWx1ZV0gPSBjcm9uTG9nU3RhdGUuY29sb3I7XG5cbiAgICAgICAgcmV0dXJuIGFjY3VtO1xuICAgICAgfSwge30pO1xuICB9XG5cbiAgcHVibGljIGNyb25Mb2dPcGVuKGNyb25Mb2cpOiB2b2lkIHtcbiAgICB0aGlzLl9kaWFsb2cub3BlbihDcm9uTG9nQ29tcG9uZW50LCB7XG4gICAgICBkYXRhOiB7IFxuICAgICAgICBjcm9uTG9nLFxuICAgICAgfSxcbiAgICAgIHdpZHRoOiAnODUlJyxcbiAgICB9KTsgICAgXG4gIH1cblxuICBwdWJsaWMgY3JvbkFjdGlvbkNsaWNrKGNyb25BY3Rpb24pIHtcbiAgICBjcm9uQWN0aW9uLmFjdGlvbih0aGlzLmNyb24pXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5sb2FkKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3RlZEluZGV4Q2hhbmdlKGluZGV4KSB7XG4gICAgdGhpcy50YWJJbmRleCA9IGluZGV4O1xuICB9XG4gICAgXG4gIHB1YmxpYyBsb2FkKCk6IHZvaWQge1xuICAgIHRoaXMuX2RhdGEubG9hZENyb24odGhpcy5fZGF0YS5jcm9uKVxuICAgICAgLnN1YnNjcmliZSgoY3JvbikgPT4ge1xuICAgICAgICB0aGlzLmNyb24gPSB7XG4gICAgICAgICAgLi4udGhpcy5fZGF0YS5jcm9uLFxuICAgICAgICAgIC4uLmNyb24sXG4gICAgICAgIH07XG5cbiAgICAgICAgaWYodGhpcy5fZGF0YS5sb2FkQ3JvbkxvZ3MpIHtcbiAgICAgICAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgICAgICAgIGZpbHRlcnM6IFtcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIHR5cGU6IEl0ZW1UeXBlLlNlbGVjdCxcbiAgICAgICAgICAgICAgICBuYW1lOiAnc3RhdGUnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiAnU3RhdHVzJyxcbiAgICAgICAgICAgICAgICB2YWx1ZXM6IFtcbiAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ0FsbCcsIHZhbHVlOiBudWxsIH0sXG4gICAgICAgICAgICAgICAgICAuLi5Dcm9uTG9nU3RhdGVzLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBJdGVtVHlwZS5EYXRlUmFuZ2UsXG4gICAgICAgICAgICAgICAgbmFtZTogJ2RhdGUnLFxuICAgICAgICAgICAgICAgIGxhYmVsOiBbJ0Zyb20gRGF0ZScsICdUbyBEYXRlJ10sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdLCAgICAgICAgICBcbiAgICAgICAgICAgIGZldGNoOiAocXVlcnkpID0+IHtcbiAgICAgICAgICAgICAgcXVlcnkgPSB7XG4gICAgICAgICAgICAgICAgLi4ucXVlcnksXG4gICAgICAgICAgICAgICAgY3JvbklkOiB0aGlzLmNyb24uaWQsXG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGEubG9hZENyb25Mb2dzKHF1ZXJ5KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuY3JvbkFjdGlvbnMgPSB0aGlzLl9kYXRhLmNyb25BY3Rpb25zXG4gICAgICAgICAgLmZpbHRlcigoY3JvbkxvZ0FjdGlvbikgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGNyb25Mb2dBY3Rpb24uc2hvdyh0aGlzLmNyb24pO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgfSk7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2cgKmZzU2tlbGV0b249XCJjcm9uXCI+XG4gIDxoMSBtYXQtZGlhbG9nLXRpdGxlPlxuICAgIENyb25cbiAgICA8ZGl2IGNsYXNzPVwic21hbGxcIj57e2Nyb24ubmFtZX19PC9kaXY+XG4gIDwvaDE+XG4gIDxtYXQtZGlhbG9nLWNvbnRlbnQ+XG4gICAgPG1hdC10YWItZ3JvdXAgKHNlbGVjdGVkSW5kZXhDaGFuZ2UpPVwic2VsZWN0ZWRJbmRleENoYW5nZSgkZXZlbnQpXCI+XG4gICAgICA8bWF0LXRhYiBsYWJlbD1cIk92ZXJ2aWV3XCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmcy1yb3cuZ2FwLWxnLndyYXAuYWxpZ24tc3RhcnRcIj5cbiAgICAgICAgICA8ZnMtbGFiZWwtZmllbGQ+XG4gICAgICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgICAgIFN0YXR1c1xuICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIHt7Q3JvblN0YXRlc1tjcm9uLnN0YXRlXX19XG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cImNyb24uY3JvblNldHRpbmdcIj5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgUnVuIEZyZXF1ZW5jeVxuICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIHt7Y3Jvbi5jcm9uU2V0dGluZy5zdW1tYXJ5fX1cbiAgICAgICAgICA8L2ZzLWxhYmVsLWZpZWxkPlxuXG4gICAgICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgICBQcm9jZXNzIElEXG4gICAgICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICAgICAge3tjcm9uLnByb2Nlc3NJZCB8fCAnTm9uZSd9fVxuICAgICAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImNyb24ucHJvY2Vzc0lkXCI+XG4gICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJzbWFsbFwiPlxuICAgICAgICAgICAgICAgIHt7Q3JvblByb2Nlc3NTdGF0ZXNbY3Jvbi5wcm9jZXNzU3RhdGVdIHx8ICdVbmtub3duJ319XG4gICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgTGFzdCBSYW5cbiAgICAgICAgICAgIDwvZnMtbGFiZWw+XG4gICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwiY3Jvbi5kdXJhdGlvbj09PW51bGw7IGVsc2UgbGFzdFJhblwiPlxuICAgICAgICAgICAgICBOZXZlclxuICAgICAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICA8bmctdGVtcGxhdGUgI2xhc3RSYW4+XG4gICAgICAgICAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJjcm9uLmNyZWF0ZURhdGVcIj48L2ZzLWRhdGUtYWdvPlxuICAgICAgICAgICAgICA8ZGl2PjxzbWFsbCAqbmdJZj1cImNyb24uZHVyYXRpb25cIj5EdXJhdGlvbjoge3sgY3Jvbi5kdXJhdGlvbiB8IGZzRGF0ZUR1cmF0aW9uIH19PC9zbWFsbD48L2Rpdj5cbiAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgICAgIDxmcy1sYWJlbD5cbiAgICAgICAgICAgICAgVGltZW91dCBob3Vyc1xuICAgICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICAgIHt7Y3Jvbi5jcm9uU2V0dGluZz8udGltZW91dCB8fCAnTi9BJ319XG4gICAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPC9kaXY+XG5cbiAgICAgICAgPGZzLWxhYmVsLWZpZWxkICpuZ0lmPVwiY3Jvbi5tZXNzYWdlXCI+XG4gICAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgICAgTGFzdCBNZXNzYWdlXG4gICAgICAgICAgPC9mcy1sYWJlbD5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPnt7Y3Jvbi5tZXNzYWdlfX08L2Rpdj5cbiAgICAgICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgICAgIDwvbWF0LXRhYj5cbiAgICAgIDxtYXQtdGFiIGxhYmVsPVwiTG9nc1wiICpuZ0lmPVwiY29uZmlnXCI+XG4gICAgICAgIDxuZy10ZW1wbGF0ZSBtYXRUYWJDb250ZW50PlxuICAgICAgICAgIDxmcy1saXN0IFtjb25maWddPVwiY29uZmlnXCI+XG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gbmFtZT1cInN0YXRlXCIgdGl0bGU9XCJTdGF0dXNcIj5cbiAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlIGZzLWxpc3QtY2VsbCBsZXQtcm93PVwicm93XCI+XG4gICAgICAgICAgICAgICAgPGEgXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjcm9uTG9nT3Blbihyb3cpXCJcbiAgICAgICAgICAgICAgICAgICAgW25nU3R5bGVdPVwieyBjb2xvcjogQ3JvbkxvZ1N0YXRlQ29sb3JzW3Jvdy5zdGF0ZV0gfVwiPlxuICAgICAgICAgICAgICAgICAge3tDcm9uTG9nU3RhdGVzW3Jvdy5zdGF0ZV0gfHwgcm93LnN0YXRlfX1cbiAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgICAgXG4gICAgICAgICAgICA8ZnMtbGlzdC1jb2x1bW4gdGl0bGU9XCJNZXNzYWdlXCIgY2xhc3M9XCJjb2wtbWVzc2FnZVwiPlxuICAgICAgICAgICAgICA8bmctdGVtcGxhdGUgZnMtbGlzdC1jZWxsIGxldC1yb3c9XCJyb3dcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVzc2FnZVwiPnt7cm93Lm1lc3NhZ2V9fTwvZGl2PlxuICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgPC9mcy1saXN0LWNvbHVtbj5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGZzLWxpc3QtY29sdW1uIHRpdGxlPVwiRHVyYXRpb25cIiBjbGFzcz1cImNvbC1tZXNzYWdlXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nSWY9XCJyb3cuZHVyYXRpb25cIj5cbiAgICAgICAgICAgICAgICAgIHt7cm93LmR1cmF0aW9uIHwgZnNEYXRlRHVyYXRpb246ICdob3VyLW1pbnV0ZS1zZWNvbmQnfX1cbiAgICAgICAgICAgICAgICA8L25nLWNvbnRhaW5lcj5cbiAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgIDwvZnMtbGlzdC1jb2x1bW4+XG5cbiAgICAgICAgICAgIDxmcy1saXN0LWNvbHVtbiBuYW1lPVwiY3JlYXRlX2RhdGVcIiB0aXRsZT1cIkRhdGVcIiBjbGFzcz1cImNvbC1kYXRlXCI+XG4gICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSBmcy1saXN0LWNlbGwgbGV0LXJvdz1cInJvd1wiPlxuICAgICAgICAgICAgICAgIDxmcy1kYXRlLWFnbyBbZGF0ZV09XCJyb3cuY3JlYXRlRGF0ZVwiPjwvZnMtZGF0ZS1hZ28+XG4gICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICA8L2ZzLWxpc3QtY29sdW1uPlxuICAgICAgICAgIDwvZnMtbGlzdD4gXG4gICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICA8L21hdC10YWI+XG4gICAgPC9tYXQtdGFiLWdyb3VwPlxuXG4gIDwvbWF0LWRpYWxvZy1jb250ZW50PlxuICA8bWF0LWRpYWxvZy1hY3Rpb25zPiAgIFxuICAgIDxidXR0b24gXG4gICAgICAgIG1hdC1idXR0b24gXG4gICAgICAgIFttYXQtZGlhbG9nLWNsb3NlXT1cInRydWVcIiBcbiAgICAgICAgY29sb3I9XCJwcmltYXJ5XCI+XG4gICAgICBEb25lXG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdJZj1cInRhYkluZGV4ID09PSAwXCI+XG4gICAgICA8YnV0dG9uICAgXG4gICAgICAgICAgKm5nRm9yPVwibGV0IGNyb25BY3Rpb24gb2YgY3JvbkFjdGlvbnNcIlxuICAgICAgICAgIG1hdC1idXR0b24gXG4gICAgICAgICAgKGNsaWNrKT1cImNyb25BY3Rpb25DbGljayhjcm9uQWN0aW9uKVwiPlxuICAgICAgICB7e2Nyb25BY3Rpb24ubGFiZWx9fVxuICAgICAgPC9idXR0b24+ICBcbiAgICA8L25nLWNvbnRhaW5lcj5cbiAgPC9tYXQtZGlhbG9nLWFjdGlvbnM+XG48L2ZzLWRpYWxvZz5cbiJdfQ==
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Component, Inject } from '@angular/core';
|
|
2
|
+
import { MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
3
|
+
import { CronLogStates } from '../../consts/cron-log-states.const';
|
|
4
|
+
import { indexNameValue } from '../../helpers/index-name-value';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@angular/material/button";
|
|
8
|
+
import * as i3 from "@angular/material/dialog";
|
|
9
|
+
import * as i4 from "@firestitch/date";
|
|
10
|
+
import * as i5 from "@firestitch/skeleton";
|
|
11
|
+
import * as i6 from "@firestitch/label";
|
|
12
|
+
import * as i7 from "@firestitch/dialog";
|
|
13
|
+
export class CronLogComponent {
|
|
14
|
+
_data;
|
|
15
|
+
cronLog;
|
|
16
|
+
CronLogStates = indexNameValue(CronLogStates);
|
|
17
|
+
CronLogStateColors = {};
|
|
18
|
+
constructor(_data) {
|
|
19
|
+
this._data = _data;
|
|
20
|
+
}
|
|
21
|
+
ngOnInit() {
|
|
22
|
+
this.cronLog = this._data.cronLog;
|
|
23
|
+
this.CronLogStateColors = CronLogStates
|
|
24
|
+
.reduce((accum, cronLogState) => {
|
|
25
|
+
accum[cronLogState.value] = cronLogState.color;
|
|
26
|
+
return accum;
|
|
27
|
+
}, {});
|
|
28
|
+
}
|
|
29
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CronLogComponent, deps: [{ token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
30
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", 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"], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i2.MatButton, selector: " button[mat-button], button[mat-raised-button], button[mat-flat-button], button[mat-stroked-button] ", exportAs: ["matButton"] }, { kind: "directive", type: i3.MatDialogClose, selector: "[mat-dialog-close], [matDialogClose]", inputs: ["aria-label", "type", "mat-dialog-close", "matDialogClose"], exportAs: ["matDialogClose"] }, { kind: "directive", type: i3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }, { kind: "directive", type: i3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "component", type: i4.FsDateAgoComponent, selector: "fs-date-ago", inputs: ["date", "showTime", "format", "showTooltip", "tooltipDateFormat"] }, { kind: "directive", type: i5.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { kind: "component", type: i6.FsLabelComponent, selector: "fs-label" }, { kind: "component", type: i6.FsLabelFieldComponent, selector: "fs-label-field", inputs: ["bottomMargin", "topMargin", "labelMargin"] }, { kind: "component", type: i7.FsDialogComponent, selector: "fs-dialog", inputs: ["mobileMode", "mobileButtonPlacement", "mobileWidth", "mode", "buttonLayout", "dock", "dockable", "fullscreenPercent"] }] });
|
|
31
|
+
}
|
|
32
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CronLogComponent, decorators: [{
|
|
33
|
+
type: Component,
|
|
34
|
+
args: [{ 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"] }]
|
|
35
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
36
|
+
type: Inject,
|
|
37
|
+
args: [MAT_DIALOG_DATA]
|
|
38
|
+
}] }] });
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi1sb2cuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9jb21wb25lbnRzL2Nyb24tbG9nL2Nyb24tbG9nLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9jcm9uLWxvZy9jcm9uLWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFFM0QsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQzs7Ozs7Ozs7O0FBT2hFLE1BQU0sT0FBTyxnQkFBZ0I7SUFPUTtJQUw1QixPQUFPLENBQUM7SUFDUixhQUFhLEdBQUcsY0FBYyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzlDLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztJQUUvQixZQUNtQyxLQUFLO1FBQUwsVUFBSyxHQUFMLEtBQUssQ0FBQTtJQUNyQyxDQUFDO0lBRUcsUUFBUTtRQUNiLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDbEMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLGFBQWE7YUFDcEMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLFlBQVksRUFBRSxFQUFFO1lBQzlCLEtBQUssQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDLEdBQUcsWUFBWSxDQUFDLEtBQUssQ0FBQztZQUUvQyxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNYLENBQUM7d0dBbEJVLGdCQUFnQixrQkFPakIsZUFBZTs0RkFQZCxnQkFBZ0Isb0RDWjdCLG83QkFrQ0E7OzRGRHRCYSxnQkFBZ0I7a0JBSjVCLFNBQVM7OzswQkFXTCxNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEluamVjdCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IE1BVF9ESUFMT0dfREFUQSB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsL2RpYWxvZyc7XG5cbmltcG9ydCB7IENyb25Mb2dTdGF0ZXMgfSBmcm9tICcuLi8uLi9jb25zdHMvY3Jvbi1sb2ctc3RhdGVzLmNvbnN0JztcbmltcG9ydCB7IGluZGV4TmFtZVZhbHVlIH0gZnJvbSAnLi4vLi4vaGVscGVycy9pbmRleC1uYW1lLXZhbHVlJztcblxuXG5AQ29tcG9uZW50KHtcbiAgdGVtcGxhdGVVcmw6ICcuL2Nyb24tbG9nLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3Jvbi1sb2cuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ3JvbkxvZ0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XG5cbiAgcHVibGljIGNyb25Mb2c7XG4gIHB1YmxpYyBDcm9uTG9nU3RhdGVzID0gaW5kZXhOYW1lVmFsdWUoQ3JvbkxvZ1N0YXRlcyk7XG4gIHB1YmxpYyBDcm9uTG9nU3RhdGVDb2xvcnMgPSB7fTtcbiAgXG4gIGNvbnN0cnVjdG9yKFxuICAgIEBJbmplY3QoTUFUX0RJQUxPR19EQVRBKSBwcml2YXRlIF9kYXRhLFxuICApIHt9XG5cbiAgcHVibGljIG5nT25Jbml0KCk6IHZvaWQge1xuICAgIHRoaXMuY3JvbkxvZyA9IHRoaXMuX2RhdGEuY3JvbkxvZztcbiAgICB0aGlzLkNyb25Mb2dTdGF0ZUNvbG9ycyA9IENyb25Mb2dTdGF0ZXNcbiAgICAgIC5yZWR1Y2UoKGFjY3VtLCBjcm9uTG9nU3RhdGUpID0+IHtcbiAgICAgICAgYWNjdW1bY3JvbkxvZ1N0YXRlLnZhbHVlXSA9IGNyb25Mb2dTdGF0ZS5jb2xvcjtcblxuICAgICAgICByZXR1cm4gYWNjdW07XG4gICAgICB9LCB7fSk7XG4gIH1cbn1cbiIsIjxmcy1kaWFsb2cgKmZzU2tlbGV0b249XCJjcm9uTG9nXCI+XG4gIDxkaXYgbWF0LWRpYWxvZy10aXRsZT5Dcm9uIExvZzwvZGl2PlxuICA8bWF0LWRpYWxvZy1jb250ZW50PlxuICAgIDxkaXYgY2xhc3M9XCJyb3dcIj5cbiAgICAgIDxmcy1sYWJlbC1maWVsZD5cbiAgICAgICAgPGZzLWxhYmVsPlxuICAgICAgICAgIFN0YXR1c1xuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICA8ZGl2IFtuZ1N0eWxlXT1cInsgY29sb3I6IENyb25Mb2dTdGF0ZUNvbG9yc1tjcm9uTG9nLnN0YXRlXX1cIj5cbiAgICAgICAgICB7e0Nyb25Mb2dTdGF0ZXNbY3JvbkxvZy5zdGF0ZV0gfHwgY3JvbkxvZy5zdGF0ZX19XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9mcy1sYWJlbC1maWVsZD5cblxuICAgICAgPGZzLWxhYmVsLWZpZWxkPlxuICAgICAgICA8ZnMtbGFiZWw+XG4gICAgICAgICAgRGF0ZVxuICAgICAgICA8L2ZzLWxhYmVsPlxuICAgICAgICA8ZnMtZGF0ZS1hZ28gW2RhdGVdPVwiY3JvbkxvZy5jcmVhdGVEYXRlXCI+PC9mcy1kYXRlLWFnbz5cbiAgICAgIDwvZnMtbGFiZWwtZmllbGQ+XG4gICAgPC9kaXY+XG4gIFxuICAgIDxmcy1sYWJlbC1maWVsZCAqbmdJZj1cImNyb25Mb2cubWVzc2FnZVwiPlxuICAgICAgPGZzLWxhYmVsPlxuICAgICAgICBNZXNzYWdlXG4gICAgICA8L2ZzLWxhYmVsPlxuICAgICAgPGRpdiBjbGFzcz1cIm1lc3NhZ2VcIj5cbiAgICAgICAge3tjcm9uTG9nLm1lc3NhZ2V9fVxuICAgICAgPC9kaXY+XG4gICAgPC9mcy1sYWJlbC1maWVsZD5cbiAgPC9tYXQtZGlhbG9nLWNvbnRlbnQ+XG4gIDxtYXQtZGlhbG9nLWFjdGlvbnM+XG4gICAgPGJ1dHRvbiBtYXQtYnV0dG9uIFttYXQtZGlhbG9nLWNsb3NlXT1cInRydWVcIiBjb2xvcj1cInByaW1hcnlcIj5Eb25lPC9idXR0b24+XG4gIDwvbWF0LWRpYWxvZy1hY3Rpb25zPlxuPC9mcy1kaWFsb2c+XG4iXX0=
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, Input, } from '@angular/core';
|
|
2
|
+
import { Subject, timer } from 'rxjs';
|
|
3
|
+
import { takeUntil, tap } from 'rxjs/operators';
|
|
4
|
+
import { addDays, addHours, addMinutes, differenceInSeconds, getDaysInMonth, subSeconds } from 'date-fns';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/common";
|
|
7
|
+
import * as i2 from "@firestitch/date";
|
|
8
|
+
export class CronNextRunComponent {
|
|
9
|
+
_cdRef;
|
|
10
|
+
cron;
|
|
11
|
+
duration;
|
|
12
|
+
_destroy$ = new Subject();
|
|
13
|
+
constructor(_cdRef) {
|
|
14
|
+
this._cdRef = _cdRef;
|
|
15
|
+
}
|
|
16
|
+
ngOnInit() {
|
|
17
|
+
this.update();
|
|
18
|
+
}
|
|
19
|
+
calculateDuration() {
|
|
20
|
+
const now = new Date();
|
|
21
|
+
const nextMinutes = this._getNextMinutes(now);
|
|
22
|
+
const nextHours = this._getNextHours(now);
|
|
23
|
+
const nextDays = this._getNextDays(now);
|
|
24
|
+
if (this.cron.cronSetting.minutes.length ||
|
|
25
|
+
this.cron.cronSetting.hours.length ||
|
|
26
|
+
this.cron.cronSetting.days.length) {
|
|
27
|
+
let next = new Date();
|
|
28
|
+
next = addMinutes(next, nextMinutes);
|
|
29
|
+
next = addHours(next, nextHours);
|
|
30
|
+
next = addDays(next, nextDays);
|
|
31
|
+
next = subSeconds(next, next.getSeconds());
|
|
32
|
+
this.duration = differenceInSeconds(next, now);
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
this.duration = 60 - now.getSeconds();
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
update() {
|
|
39
|
+
this.calculateDuration();
|
|
40
|
+
timer(0, 1000)
|
|
41
|
+
.pipe(tap(() => {
|
|
42
|
+
this.duration -= 1;
|
|
43
|
+
if (this.duration % 60 === 0 || this.duration < (60 * 5)) {
|
|
44
|
+
this._cdRef.markForCheck();
|
|
45
|
+
}
|
|
46
|
+
if (this.duration <= 0) {
|
|
47
|
+
this.calculateDuration();
|
|
48
|
+
this._cdRef.markForCheck();
|
|
49
|
+
}
|
|
50
|
+
}), takeUntil(this._destroy$))
|
|
51
|
+
.subscribe();
|
|
52
|
+
}
|
|
53
|
+
ngOnDestroy() {
|
|
54
|
+
this._destroy$.next(null);
|
|
55
|
+
this._destroy$.complete();
|
|
56
|
+
}
|
|
57
|
+
_getNextMinutes(now) {
|
|
58
|
+
const minutes = this.cron.cronSetting.minutes;
|
|
59
|
+
if (minutes.length) {
|
|
60
|
+
for (let i = minutes.length - 1; i >= 0; i--) {
|
|
61
|
+
if (now.getUTCMinutes() >= minutes[i]) {
|
|
62
|
+
return (minutes[i + 1] ? minutes[i + 1] - now.getUTCMinutes() : (60 - now.getUTCMinutes() + minutes[i]));
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return minutes[0] - now.getMinutes();
|
|
66
|
+
}
|
|
67
|
+
return 0;
|
|
68
|
+
}
|
|
69
|
+
_getNextHours(now) {
|
|
70
|
+
const hours = this.cron.cronSetting.hours;
|
|
71
|
+
if (hours.length) {
|
|
72
|
+
for (let i = hours.length - 1; i >= 0; i--) {
|
|
73
|
+
if (now.getUTCHours() >= hours[i]) {
|
|
74
|
+
return (hours[i + 1] ? hours[i + 1] - now.getUTCHours() : (24 - now.getUTCHours() + hours[i]));
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
return hours[0] - now.getUTCHours();
|
|
78
|
+
}
|
|
79
|
+
return 0;
|
|
80
|
+
}
|
|
81
|
+
_getNextDays(now) {
|
|
82
|
+
const days = this.cron.cronSetting.days;
|
|
83
|
+
if (days.length) {
|
|
84
|
+
for (let i = days.length - 1; i >= 0; i--) {
|
|
85
|
+
if (now.getDate() >= days[i]) {
|
|
86
|
+
return (days[i + 1] ? days[i + 1] : getDaysInMonth(now)) - now.getDate();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
return days[0] - getDaysInMonth(now);
|
|
90
|
+
}
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CronNextRunComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
94
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: CronNextRunComponent, selector: "app-next-run", inputs: { cron: "cron" }, ngImport: i0, template: "<ng-container *ngIf=\"duration > 60; else seconds\">\n {{duration | fsDateDuration: { hours: true, seconds: true, minutes: true, days: true} }}\n</ng-container>\n\n<ng-template #seconds>\n {{duration}}s\n</ng-template>\n\n", styles: [""], dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i2.FsDateDurationPipe, name: "fsDateDuration" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
95
|
+
}
|
|
96
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: CronNextRunComponent, decorators: [{
|
|
97
|
+
type: Component,
|
|
98
|
+
args: [{ selector: 'app-next-run', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"duration > 60; else seconds\">\n {{duration | fsDateDuration: { hours: true, seconds: true, minutes: true, days: true} }}\n</ng-container>\n\n<ng-template #seconds>\n {{duration}}s\n</ng-template>\n\n" }]
|
|
99
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { cron: [{
|
|
100
|
+
type: Input
|
|
101
|
+
}] } });
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3Jvbi1uZXh0LXJ1bi5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL21vZHVsZXMvc3lzdGVtL2NvbXBvbmVudHMvY3Jvbi1uZXh0LXJ1bi9jcm9uLW5leHQtcnVuLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcHAvbW9kdWxlcy9zeXN0ZW0vY29tcG9uZW50cy9jcm9uLW5leHQtcnVuL2Nyb24tbmV4dC1ydW4uY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLHVCQUF1QixFQUFFLGlCQUFpQixFQUFFLFNBQVMsRUFBRSxLQUFLLEdBQzdELE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3RDLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsVUFBVSxFQUFFLG1CQUFtQixFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxVQUFVLENBQUM7Ozs7QUFTMUcsTUFBTSxPQUFPLG9CQUFvQjtJQVVyQjtJQVJNLElBQUksQ0FBQztJQUVkLFFBQVEsQ0FBQztJQUVSLFNBQVMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0lBR2xDLFlBQ1UsTUFBeUI7UUFBekIsV0FBTSxHQUFOLE1BQU0sQ0FBbUI7SUFDaEMsQ0FBQztJQUdHLFFBQVE7UUFDYixJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDaEIsQ0FBQztJQUVNLGlCQUFpQjtRQUN0QixNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDOUMsTUFBTSxTQUFTLEdB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QU0sR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUN6QyxJQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztvQkFDNUIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQztnQkFDM0UsQ0FBQztZQUNILENBQUM7WUFFRCxPQUFPLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDdkMsQ0FBQztRQUVELE9BQU8sQ0FBQyxDQUFDO0lBQ1gsQ0FBQzt3R0EvR1Usb0JBQW9COzRGQUFwQixvQkFBb0IsOEVDakJqQyxrT0FRQTs7NEZEU2Esb0JBQW9CO2tCQU5oQyxTQUFTOytCQUNFLGNBQWMsbUJBR1AsdUJBQXVCLENBQUMsTUFBTTtzRkFJL0IsSUFBSTtzQkFBbkIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDaGFuZ2VEZXRlY3RvclJlZiwgQ29tcG9uZW50LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5cbmltcG9ydCB7IFN1YmplY3QsIHRpbWVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyB0YWtlVW50aWwsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgYWRkRGF5cywgYWRkSG91cnMsIGFkZE1pbnV0ZXMsIGRpZmZlcmVuY2VJblNlY29uZHMsIGdldERheXNJbk1vbnRoLCBzdWJTZWNvbmRzIH0gZnJvbSAnZGF0ZS1mbnMnO1xuXG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2FwcC1uZXh0LXJ1bicsXG4gIHRlbXBsYXRlVXJsOiAnLi9jcm9uLW5leHQtcnVuLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vY3Jvbi1uZXh0LXJ1bi5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQ3Jvbk5leHRSdW5Db21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XG5cbiAgQElucHV0KCkgcHVibGljIGNyb247XG5cbiAgcHVibGljIGR1cmF0aW9uO1xuXG4gIHByaXZhdGUgX2Rlc3Ryb3kkID0gbmV3IFN1YmplY3QoKTtcbiAgXG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY2RSZWY6IENoYW5nZURldGVjdG9yUmVmLFxuICApIHt9XG5cblxuICBwdWJsaWMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy51cGRhdGUoKTtcbiAgfVxuXG4gIHB1YmxpYyBjYWxjdWxhdGVEdXJhdGlvbigpIHtcbiAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpO1xuICAgIGNvbnN0IG5leHRNaW51dGVzID0gdGhpcy5fZ2V0TmV4dE1pbnV0ZXMobm93KTtcbiAgICBjb25zdCBuZXh0SG91cnMgPSB0aGlzLl9nZXROZXh0SG91cnMobm93KTtcbiAgICBjb25zdCBuZXh0RGF5cyA9IHRoaXMuX2dldE5leHREYXlzKG5vdyk7XG5cbiAgICBpZihcbiAgICAgIHRoaXMuY3Jvbi5jcm9uU2V0dGluZy5taW51dGVzLmxlbmd0aCB8fFxuICAgICAgdGhpcy5jcm9uLmNyb25TZXR0aW5nLmhvdXJzLmxlbmd0aCB8fFxuICAgICAgdGhpcy5jcm9uLmNyb25TZXR0aW5nLmRheXMubGVuZ3RoIFxuICAgICkge1xuICAgICAgbGV0IG5leHQgPSBuZXcgRGF0ZSgpO1xuICAgICAgbmV4dCA9IGFkZE1pbnV0ZXMobmV4dCwgbmV4dE1pbnV0ZXMpO1xuICAgICAgbmV4dCA9IGFkZEhvdXJzKG5leHQsIG5leHRIb3Vycyk7XG4gICAgICBuZXh0ID0gYWRkRGF5cyhuZXh0LCBuZXh0RGF5cyk7XG4gICAgICBuZXh0ID0gc3ViU2Vjb25kcyhuZXh0LCBuZXh0LmdldFNlY29uZHMoKSk7XG5cbiAgICAgIHRoaXMuZHVyYXRpb24gPSBkaWZmZXJlbmNlSW5TZWNvbmRzKG5leHQsIG5vdyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZHVyYXRpb24gPSA2MCAtIG5vdy5nZXRTZWNvbmRzKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIHVwZGF0ZSgpIHtcbiAgICB0aGlzLmNhbGN1bGF0ZUR1cmF0aW9uKCk7XG4gICAgdGltZXIoMCwgMTAwMClcbiAgICAgIC5waXBlKFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZHVyYXRpb24gLT0gMTsgICAgXG5cbiAgICAgICAgICBpZih0aGlzLmR1cmF0aW9uICUgNjAgPT09IDAgfHwgdGhpcy5kdXJhdGlvbiA8ICg2MCAqIDUpKSB7XG4gICAgICAgICAgICB0aGlzLl9jZFJlZi5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZih0aGlzLmR1cmF0aW9uIDw9IDApIHtcbiAgICAgICAgICAgIHRoaXMuY2FsY3VsYXRlRHVyYXRpb24oKTtcbiAgICAgICAgICAgIHRoaXMuX2NkUmVmLm1hcmtGb3JDaGVjaygpO1xuICAgICAgICAgIH1cblxuICAgICAgICB9KSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSxcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KG51bGwpO1xuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XG4gIH1cblxuICBwcml2YXRlIF9nZXROZXh0TWludXRlcyhub3c6IERhdGUpIHtcbiAgICBjb25zdCBtaW51dGVzOiBudW1iZXJbXSA9IHRoaXMuY3Jvbi5jcm9uU2V0dGluZy5taW51dGVzO1xuICAgIGlmKG1pbnV0ZXMubGVuZ3RoKSB7XG4gICAgICBmb3IobGV0IGkgPSBtaW51dGVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgIGlmKG5vdy5nZXRVVENNaW51dGVzKCkgPj0gbWludXRlc1tpXSkge1xuICAgICAgICAgIHJldHVybiAobWludXRlc1tpICsgMV0gPyBtaW51dGVzW2kgKyAxXSAtIG5vdy5nZXRVVENNaW51dGVzKCkgOiAoNjAgLSBub3cuZ2V0VVRDTWludXRlcygpICsgbWludXRlc1tpXSkpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBtaW51dGVzWzBdIC0gbm93LmdldE1pbnV0ZXMoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5leHRIb3Vycyhub3c6IERhdGUpIHtcbiAgICBjb25zdCBob3VyczogbnVtYmVyW10gPSB0aGlzLmNyb24uY3JvblNldHRpbmcuaG91cnM7XG4gICAgaWYoaG91cnMubGVuZ3RoKSB7XG4gICAgICBmb3IobGV0IGkgPSBob3Vycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgICAgICBpZihub3cuZ2V0VVRDSG91cnMoKSA+PSBob3Vyc1tpXSkge1xuICAgICAgICAgIHJldHVybiAoaG91cnNbaSArIDFdID8gaG91cnNbaSArIDFdIC0gbm93LmdldFVUQ0hvdXJzKCkgOiAoMjQgLSBub3cuZ2V0VVRDSG91cnMoKSArIGhvdXJzW2ldKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhvdXJzWzBdIC0gbm93LmdldFVUQ0hvdXJzKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIDA7XG4gIH1cblxuICBwcml2YXRlIF9nZXROZXh0RGF5cyhub3c6IERhdGUpIHtcbiAgICBjb25zdCBkYXlzID0gdGhpcy5jcm9uLmNyb25TZXR0aW5nLmRheXM7XG4gICAgaWYoZGF5cy5sZW5ndGgpIHtcbiAgICAgIGZvcihsZXQgaSA9IGRheXMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgaWYobm93LmdldERhdGUoKSA+PSBkYXlzW2ldKSB7XG4gICAgICAgICAgcmV0dXJuIChkYXlzW2kgKyAxXSA/IGRheXNbaSArIDFdIDogZ2V0RGF5c0luTW9udGgobm93KSkgLSBub3cuZ2V0RGF0ZSgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBkYXlzWzBdIC0gZ2V0RGF5c0luTW9udGgobm93KTtcbiAgICB9XG5cbiAgICByZXR1cm4gMDtcbiAgfVxufVxuIiwiPG5nLWNvbnRhaW5lciAqbmdJZj1cImR1cmF0aW9uID4gNjA7IGVsc2Ugc2Vjb25kc1wiPlxuICB7e2R1cmF0aW9uIHwgZnNEYXRlRHVyYXRpb246IHsgaG91cnM6IHRydWUsIHNlY29uZHM6IHRydWUsIG1pbnV0ZXM6IHRydWUsIGRheXM6IHRydWV9IH19XG48L25nLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNzZWNvbmRzPlxuICB7e2R1cmF0aW9ufX1zXG48L25nLXRlbXBsYXRlPlxuXG4iXX0=
|