@firestitch/system 18.0.2 → 18.0.4

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.
@@ -0,0 +1,45 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { FsApi } from '@firestitch/api';
3
+ import * as i0 from "@angular/core";
4
+ import * as i1 from "@firestitch/api";
5
+ export class ProcessData {
6
+ _api;
7
+ constructor(_api) {
8
+ this._api = _api;
9
+ }
10
+ gets(data = {}, config = {}) {
11
+ return this._api.get('processes', data, { key: 'processes', ...config });
12
+ }
13
+ post(data = {}, config = {}) {
14
+ return this._api.post('processes', data, { key: 'process', ...config });
15
+ }
16
+ run(data = {}, config = {}) {
17
+ return this._api.post(`processes/${data.id}/run`, data, { key: 'process', ...config });
18
+ }
19
+ get(id, config = {}) {
20
+ return this._api.get(`processes/${id}`, {}, { key: 'process', ...config });
21
+ }
22
+ kill(data = {}, config = {}) {
23
+ return this._api.post(`processes/${data.id}/kill`, data, { key: 'process', ...config });
24
+ }
25
+ delete(data = {}, config = {}) {
26
+ return this._api.delete(`processes/${data.id}`, data, { key: 'process', ...config });
27
+ }
28
+ queue(data = {}, config = {}) {
29
+ return this._api.post(`processes/${data.id}/queue`, data, { key: 'process', ...config });
30
+ }
31
+ download(data = {}) {
32
+ this._api
33
+ .createApiFile(`processes/${data.id}/download`)
34
+ .download();
35
+ }
36
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessData, deps: [{ token: i1.FsApi }], target: i0.ɵɵFactoryTarget.Injectable });
37
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessData, providedIn: 'root' });
38
+ }
39
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessData, decorators: [{
40
+ type: Injectable,
41
+ args: [{
42
+ providedIn: 'root',
43
+ }]
44
+ }], ctorParameters: () => [{ type: i1.FsApi }] });
45
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy5kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwcC9tb2R1bGVzL3N5c3RlbS9kYXRhL3Byb2Nlc3MuZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRTNDLE9BQU8sRUFBRSxLQUFLLEVBQWlCLE1BQU0saUJBQWlCLENBQUM7OztBQVF2RCxNQUFNLE9BQU8sV0FBVztJQUVGO0lBQXBCLFlBQW9CLElBQVc7UUFBWCxTQUFJLEdBQUosSUFBSSxDQUFPO0lBQUksQ0FBQztJQUU3QixJQUFJLENBQUMsT0FBWSxFQUFFLEVBQUUsU0FBd0IsRUFBRTtRQUNwRCxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUMzRSxDQUFDO0lBRU0sSUFBSSxDQUFDLE9BQVksRUFBRSxFQUFFLFNBQXdCLEVBQUU7UUFDcEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLEdBQUcsQ0FBQyxPQUFZLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ25ELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUVNLEdBQUcsQ0FBQyxFQUFVLEVBQUUsU0FBd0IsRUFBRTtRQUMvQyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDN0UsQ0FBQztJQUVNLElBQUksQ0FBQyxPQUFZLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ3BELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztJQUVNLE1BQU0sQ0FBQyxPQUFZLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ3RELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDdkYsQ0FBQztJQUVNLEtBQUssQ0FBQyxPQUFZLEVBQUUsRUFBRSxTQUF3QixFQUFFO1FBQ3JELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDM0YsQ0FBQztJQUVNLFFBQVEsQ0FBQyxPQUFZLEVBQUU7UUFDNUIsSUFBSSxDQUFDLElBQUk7YUFDTixhQUFhLENBQUMsYUFBYSxJQUFJLENBQUMsRUFBRSxXQUFXLENBQUM7YUFDOUMsUUFBUSxFQUFFLENBQUM7SUFDaEIsQ0FBQzt1R0FwQ1UsV0FBVzsyR0FBWCxXQUFXLGNBRlYsTUFBTTs7MkZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IEZzQXBpLCBSZXF1ZXN0Q29uZmlnIH0gZnJvbSAnQGZpcmVzdGl0Y2gvYXBpJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBQcm9jZXNzRGF0YSB7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXBpOiBGc0FwaSkgeyB9XG5cbiAgcHVibGljIGdldHMoZGF0YTogYW55ID0ge30sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmdldCgncHJvY2Vzc2VzJywgZGF0YSwgeyBrZXk6ICdwcm9jZXNzZXMnLCAuLi5jb25maWcgfSk7XG4gIH1cblxuICBwdWJsaWMgcG9zdChkYXRhOiBhbnkgPSB7fSwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdCgncHJvY2Vzc2VzJywgZGF0YSwgeyBrZXk6ICdwcm9jZXNzJywgLi4uY29uZmlnIH0pO1xuICB9XG5cbiAgcHVibGljIHJ1bihkYXRhOiBhbnkgPSB7fSwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChgcHJvY2Vzc2VzLyR7ZGF0YS5pZH0vcnVuYCwgZGF0YSwgeyBrZXk6ICdwcm9jZXNzJywgLi4uY29uZmlnIH0pO1xuICB9XG5cbiAgcHVibGljIGdldChpZDogbnVtYmVyLCBjb25maWc6IFJlcXVlc3RDb25maWcgPSB7fSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuX2FwaS5nZXQoYHByb2Nlc3Nlcy8ke2lkfWAsIHt9LCB7IGtleTogJ3Byb2Nlc3MnLCAuLi5jb25maWcgfSk7XG4gIH1cblxuICBwdWJsaWMga2lsbChkYXRhOiBhbnkgPSB7fSwgY29uZmlnOiBSZXF1ZXN0Q29uZmlnID0ge30pOiBPYnNlcnZhYmxlPGFueT4ge1xuICAgIHJldHVybiB0aGlzLl9hcGkucG9zdChgcHJvY2Vzc2VzLyR7ZGF0YS5pZH0va2lsbGAsIGRhdGEsIHsga2V5OiAncHJvY2VzcycsIC4uLmNvbmZpZyB9KTtcbiAgfVxuXG4gIHB1YmxpYyBkZWxldGUoZGF0YTogYW55ID0ge30sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLmRlbGV0ZShgcHJvY2Vzc2VzLyR7ZGF0YS5pZH1gLCBkYXRhLCB7IGtleTogJ3Byb2Nlc3MnLCAuLi5jb25maWcgfSk7XG4gIH1cblxuICBwdWJsaWMgcXVldWUoZGF0YTogYW55ID0ge30sIGNvbmZpZzogUmVxdWVzdENvbmZpZyA9IHt9KTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy5fYXBpLnBvc3QoYHByb2Nlc3Nlcy8ke2RhdGEuaWR9L3F1ZXVlYCwgZGF0YSwgeyBrZXk6ICdwcm9jZXNzJywgLi4uY29uZmlnIH0pO1xuICB9XG5cbiAgcHVibGljIGRvd25sb2FkKGRhdGE6IGFueSA9IHt9KTogdm9pZCB7XG4gICAgdGhpcy5fYXBpXG4gICAgICAuY3JlYXRlQXBpRmlsZShgcHJvY2Vzc2VzLyR7ZGF0YS5pZH0vZG93bmxvYWRgKVxuICAgICAgLmRvd25sb2FkKCk7XG4gIH1cbn1cbiJdfQ==
@@ -1,7 +1,7 @@
1
1
  import * as i2 from '@angular/common';
2
2
  import { CommonModule } from '@angular/common';
3
3
  import * as i0 from '@angular/core';
4
- import { Component, ChangeDetectionStrategy, Inject, ViewChild, Input, NgModule, Pipe, Injectable, EventEmitter, Output, InjectionToken } from '@angular/core';
4
+ import { Component, ChangeDetectionStrategy, Inject, ViewChild, Input, NgModule, Injectable, inject, Pipe, EventEmitter, Output, InjectionToken } from '@angular/core';
5
5
  import * as i5$2 from '@angular/forms';
6
6
  import { FormsModule } from '@angular/forms';
7
7
  import { RouterModule } from '@angular/router';
@@ -60,6 +60,7 @@ import * as i1$1 from '@firestitch/message';
60
60
  import * as i3$2 from '@firestitch/prompt';
61
61
  import { SelectionActionType } from '@firestitch/selection';
62
62
  import * as i2$2 from '@firestitch/build';
63
+ import * as i1$2 from '@firestitch/api';
63
64
  import * as i13 from '@angular/material/core';
64
65
 
65
66
  class ExplainComponent {
@@ -1038,6 +1039,47 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1038
1039
  type: Input
1039
1040
  }] } });
1040
1041
 
1042
+ class ProcessData {
1043
+ _api;
1044
+ constructor(_api) {
1045
+ this._api = _api;
1046
+ }
1047
+ gets(data = {}, config = {}) {
1048
+ return this._api.get('processes', data, { key: 'processes', ...config });
1049
+ }
1050
+ post(data = {}, config = {}) {
1051
+ return this._api.post('processes', data, { key: 'process', ...config });
1052
+ }
1053
+ run(data = {}, config = {}) {
1054
+ return this._api.post(`processes/${data.id}/run`, data, { key: 'process', ...config });
1055
+ }
1056
+ get(id, config = {}) {
1057
+ return this._api.get(`processes/${id}`, {}, { key: 'process', ...config });
1058
+ }
1059
+ kill(data = {}, config = {}) {
1060
+ return this._api.post(`processes/${data.id}/kill`, data, { key: 'process', ...config });
1061
+ }
1062
+ delete(data = {}, config = {}) {
1063
+ return this._api.delete(`processes/${data.id}`, data, { key: 'process', ...config });
1064
+ }
1065
+ queue(data = {}, config = {}) {
1066
+ return this._api.post(`processes/${data.id}/queue`, data, { key: 'process', ...config });
1067
+ }
1068
+ download(data = {}) {
1069
+ this._api
1070
+ .createApiFile(`processes/${data.id}/download`)
1071
+ .download();
1072
+ }
1073
+ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessData, deps: [{ token: i1$2.FsApi }], target: i0.ɵɵFactoryTarget.Injectable });
1074
+ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessData, providedIn: 'root' });
1075
+ }
1076
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessData, decorators: [{
1077
+ type: Injectable,
1078
+ args: [{
1079
+ providedIn: 'root',
1080
+ }]
1081
+ }], ctorParameters: () => [{ type: i1$2.FsApi }] });
1082
+
1041
1083
  class ProcessComponent {
1042
1084
  data;
1043
1085
  _message;
@@ -1048,6 +1090,7 @@ class ProcessComponent {
1048
1090
  ProcessProcessStates = indexNameValue(ProcessProcessStates);
1049
1091
  ProcessState = ProcessState;
1050
1092
  _destroy$ = new Subject();
1093
+ _processData = inject(ProcessData);
1051
1094
  constructor(data, _message, _cdRef, _prompt) {
1052
1095
  this.data = data;
1053
1096
  this._message = _message;
@@ -1055,19 +1098,13 @@ class ProcessComponent {
1055
1098
  this._prompt = _prompt;
1056
1099
  }
1057
1100
  ngOnInit() {
1058
- if (this.data.loadProcess) {
1059
- this.load$()
1060
- .subscribe(() => {
1061
- this.runningRefresh();
1062
- });
1063
- }
1064
- else {
1065
- this.process = this.data.process;
1066
- }
1101
+ this.load$()
1102
+ .subscribe(() => {
1103
+ this.runningRefresh();
1104
+ });
1067
1105
  }
1068
1106
  load$() {
1069
- return this.data
1070
- .loadProcess(this.data.process)
1107
+ return this._processData.get(this.data.process.id)
1071
1108
  .pipe(tap((process) => {
1072
1109
  this.process = process;
1073
1110
  this._cdRef.markForCheck();
@@ -1083,14 +1120,14 @@ class ProcessComponent {
1083
1120
  title: 'Kill process',
1084
1121
  template: 'Are you sure you would like to kill the process?',
1085
1122
  })
1086
- .pipe(switchMap(() => this.data.kill(this.data.process)), switchMap(() => this.load$()))
1123
+ .pipe(switchMap(() => this._processData.kill(this.data.process)), switchMap(() => this.load$()))
1087
1124
  .subscribe(() => {
1088
1125
  this._message.success('Killed process');
1089
1126
  });
1090
1127
  }
1091
1128
  run() {
1092
1129
  this._message.success('Running process');
1093
- this.data.run(this.data.process)
1130
+ this._processData.run(this.data.process)
1094
1131
  .pipe(switchMap(() => this.load$()))
1095
1132
  .subscribe(() => {
1096
1133
  this.runningRefresh();
@@ -1098,23 +1135,23 @@ class ProcessComponent {
1098
1135
  }
1099
1136
  queue() {
1100
1137
  this._message.success('Running process');
1101
- this.data.queue(this.data.process)
1138
+ this._processData.queue(this.data.process)
1102
1139
  .pipe(switchMap(() => this.load$()))
1103
1140
  .subscribe();
1104
1141
  }
1105
1142
  download() {
1106
- this.data.download(this.data.process);
1143
+ this._processData.download(this.data.process);
1107
1144
  }
1108
1145
  ngOnDestroy() {
1109
1146
  this._destroy$.next(null);
1110
1147
  this._destroy$.complete();
1111
1148
  }
1112
1149
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessComponent, deps: [{ token: MAT_DIALOG_DATA }, { token: i1$1.FsMessage }, { token: i0.ChangeDetectorRef }, { token: i3$2.FsPrompt }], target: i0.ɵɵFactoryTarget.Component });
1113
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", 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 class=\"column\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{process.prettyName}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div class=\"status\" [ngClass]=\"{ 'running': process.state === ProcessState.Running }\">\n {{ProcessStates[process.state]}} \n <ng-container *ngIf=\"process.state === ProcessState.Running\">\n <mat-progress-spinner [diameter]=\"20\" [mode]=\"'indeterminate'\"></mat-progress-spinner>\n </ng-container>\n </div>\n \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>\n <fs-label>\n Process ID\n </fs-label>\n {{process.pid || 'None'}}\n <ng-container *ngIf=\"process.pid\">\n <div class=\"small\">\n {{ProcessProcessStates[process.processState] || 'Unknown'}}\n </div>\n </ng-container>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.createDate\">\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.startDate\">\n <fs-label>\n Start Date\n </fs-label>\n {{ process.startDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.endDate\">\n <fs-label>\n Complete Date\n </fs-label>\n {{ process.endDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.duration\">\n <fs-label>\n Duration\n </fs-label>\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </fs-label-field>\n </div>\n\n <fs-label-field *ngIf=\"process.message\">\n <fs-label>\n Message\n </fs-label>\n {{process.message}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.log\">\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{process.log}}\n </div>\n </fs-label-field>\n\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button \n mat-button \n [mat-dialog-close]=\"true\" \n color=\"primary\">\n Close\n </button>\n <button\n *ngIf=\"process.state === ProcessState.Running && data.kill\"\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n <button \n *ngIf=\"process.state !== ProcessState.Running && data.run\" \n mat-button \n (click)=\"run()\">\n Run\n </button>\n <button \n *ngIf=\"(\n process.state !== ProcessState.Running && \n process.state !== ProcessState.Queued\n ) && data.queue\" \n mat-button \n (click)=\"queue()\">\n Queue\n </button>\n <button\n *ngIf=\"process.filename\"\n mat-button\n (click)=\"download()\">\n Download\n </button> \n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".log{white-space:pre-line;font-family:monospace;font-size:95%;line-height:130%}.status{display:flex}.status.running{margin-right:28px}.status.running mat-progress-spinner{position:absolute;right:0}\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: i4.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: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { 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: i4$2.FsDateDurationPipe, name: "fsDateDuration" }, { kind: "pipe", type: i4$2.FsDateFormatPipe, name: "fsDateFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1150
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ProcessComponent, selector: "ng-component", ngImport: i0, template: "<fs-dialog *fsSkeleton=\"process\">\n <div mat-dialog-title>\n Process\n </div>\n <mat-dialog-content>\n <div class=\"column\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{ process.prettyName }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div\n class=\"status\"\n [ngClass]=\"{ 'running': process.state === ProcessState.Running }\">\n {{ ProcessStates[process.state] }}\n <ng-container *ngIf=\"process.state === ProcessState.Running\">\n <mat-progress-spinner\n [diameter]=\"20\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n </ng-container>\n </div>\n </fs-label-field>\n <fs-label-field *ngIf=\"process.notify\">\n <fs-label>\n Notification Email\n </fs-label>\n {{ process.notify }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ process.pid || 'None' }}\n <ng-container *ngIf=\"process.pid\">\n <div class=\"small\">\n {{ ProcessProcessStates[process.processState] || 'Unknown' }}\n </div>\n </ng-container>\n </fs-label-field>\n <fs-label-field *ngIf=\"process.createDate\">\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <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 <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 <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 <fs-label-field *ngIf=\"process.message\">\n <fs-label>\n Message\n </fs-label>\n {{ process.message }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.log\">\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{ process.log }}\n </div>\n </fs-label-field>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Close\n </button>\n <button\n *ngIf=\"process.state === ProcessState.Running\"\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n <button\n *ngIf=\"process.state !== ProcessState.Running\"\n mat-button\n (click)=\"run()\">\n Run\n </button>\n <button\n *ngIf=\"(\n process.state !== ProcessState.Running && \n process.state !== ProcessState.Queued\n )\"\n mat-button\n (click)=\"queue()\">\n Queue\n </button>\n <button\n *ngIf=\"process.filename\"\n mat-button\n (click)=\"download()\">\n Download\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".log{white-space:pre-line;font-family:monospace;font-size:95%;line-height:130%}.status{display:flex}.status.running{margin-right:28px}.status.running mat-progress-spinner{position:absolute;right:0}\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: i4.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: "component", type: i6.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "mode", "value", "diameter", "strokeWidth"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i7$1.FsSkeletonContentDirective, selector: "[fsSkeleton]", inputs: ["fsSkeleton", "fsSkeletonPattern"] }, { 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: i4$2.FsDateDurationPipe, name: "fsDateDuration" }, { kind: "pipe", type: i4$2.FsDateFormatPipe, name: "fsDateFormat" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1114
1151
  }
1115
1152
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessComponent, decorators: [{
1116
1153
  type: Component,
1117
- args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog *fsSkeleton=\"process\">\n <div mat-dialog-title>Process</div>\n <mat-dialog-content>\n <div class=\"column\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{process.prettyName}}\n </fs-label-field>\n\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div class=\"status\" [ngClass]=\"{ 'running': process.state === ProcessState.Running }\">\n {{ProcessStates[process.state]}} \n <ng-container *ngIf=\"process.state === ProcessState.Running\">\n <mat-progress-spinner [diameter]=\"20\" [mode]=\"'indeterminate'\"></mat-progress-spinner>\n </ng-container>\n </div>\n \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>\n <fs-label>\n Process ID\n </fs-label>\n {{process.pid || 'None'}}\n <ng-container *ngIf=\"process.pid\">\n <div class=\"small\">\n {{ProcessProcessStates[process.processState] || 'Unknown'}}\n </div>\n </ng-container>\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.createDate\">\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.startDate\">\n <fs-label>\n Start Date\n </fs-label>\n {{ process.startDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.endDate\">\n <fs-label>\n Complete Date\n </fs-label>\n {{ process.endDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.duration\">\n <fs-label>\n Duration\n </fs-label>\n {{ process.duration | fsDateDuration: {hours: true, minutes: true, seconds: true} }}\n </fs-label-field>\n </div>\n\n <fs-label-field *ngIf=\"process.message\">\n <fs-label>\n Message\n </fs-label>\n {{process.message}}\n </fs-label-field>\n\n <fs-label-field *ngIf=\"process.log\">\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{process.log}}\n </div>\n </fs-label-field>\n\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button \n mat-button \n [mat-dialog-close]=\"true\" \n color=\"primary\">\n Close\n </button>\n <button\n *ngIf=\"process.state === ProcessState.Running && data.kill\"\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n <button \n *ngIf=\"process.state !== ProcessState.Running && data.run\" \n mat-button \n (click)=\"run()\">\n Run\n </button>\n <button \n *ngIf=\"(\n process.state !== ProcessState.Running && \n process.state !== ProcessState.Queued\n ) && data.queue\" \n mat-button \n (click)=\"queue()\">\n Queue\n </button>\n <button\n *ngIf=\"process.filename\"\n mat-button\n (click)=\"download()\">\n Download\n </button> \n </mat-dialog-actions>\n</fs-dialog>\n", styles: [".log{white-space:pre-line;font-family:monospace;font-size:95%;line-height:130%}.status{display:flex}.status.running{margin-right:28px}.status.running mat-progress-spinner{position:absolute;right:0}\n"] }]
1154
+ args: [{ changeDetection: ChangeDetectionStrategy.OnPush, template: "<fs-dialog *fsSkeleton=\"process\">\n <div mat-dialog-title>\n Process\n </div>\n <mat-dialog-content>\n <div class=\"column\">\n <div class=\"fs-row.gap-lg.wrap.align-start\">\n <fs-label-field>\n <fs-label>\n Name\n </fs-label>\n {{ process.prettyName }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Status\n </fs-label>\n <div\n class=\"status\"\n [ngClass]=\"{ 'running': process.state === ProcessState.Running }\">\n {{ ProcessStates[process.state] }}\n <ng-container *ngIf=\"process.state === ProcessState.Running\">\n <mat-progress-spinner\n [diameter]=\"20\"\n [mode]=\"'indeterminate'\">\n </mat-progress-spinner>\n </ng-container>\n </div>\n </fs-label-field>\n <fs-label-field *ngIf=\"process.notify\">\n <fs-label>\n Notification Email\n </fs-label>\n {{ process.notify }}\n </fs-label-field>\n <fs-label-field>\n <fs-label>\n Process ID\n </fs-label>\n {{ process.pid || 'None' }}\n <ng-container *ngIf=\"process.pid\">\n <div class=\"small\">\n {{ ProcessProcessStates[process.processState] || 'Unknown' }}\n </div>\n </ng-container>\n </fs-label-field>\n <fs-label-field *ngIf=\"process.createDate\">\n <fs-label>\n Create Date\n </fs-label>\n {{ process.createDate | fsDateFormat: 'date-time' }}\n </fs-label-field>\n <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 <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 <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 <fs-label-field *ngIf=\"process.message\">\n <fs-label>\n Message\n </fs-label>\n {{ process.message }}\n </fs-label-field>\n <fs-label-field *ngIf=\"process.log\">\n <fs-label>\n Log\n </fs-label>\n <div class=\"log\">\n {{ process.log }}\n </div>\n </fs-label-field>\n </div>\n </mat-dialog-content>\n <mat-dialog-actions>\n <button\n mat-button\n [mat-dialog-close]=\"true\"\n color=\"primary\">\n Close\n </button>\n <button\n *ngIf=\"process.state === ProcessState.Running\"\n mat-button\n (click)=\"kill()\">\n Kill\n </button>\n <button\n *ngIf=\"process.state !== ProcessState.Running\"\n mat-button\n (click)=\"run()\">\n Run\n </button>\n <button\n *ngIf=\"(\n process.state !== ProcessState.Running && \n process.state !== ProcessState.Queued\n )\"\n mat-button\n (click)=\"queue()\">\n Queue\n </button>\n <button\n *ngIf=\"process.filename\"\n mat-button\n (click)=\"download()\">\n Download\n </button>\n </mat-dialog-actions>\n</fs-dialog>", styles: [".log{white-space:pre-line;font-family:monospace;font-size:95%;line-height:130%}.status{display:flex}.status.running{margin-right:28px}.status.running mat-progress-spinner{position:absolute;right:0}\n"] }]
1118
1155
  }], ctorParameters: () => [{ type: undefined, decorators: [{
1119
1156
  type: Inject,
1120
1157
  args: [MAT_DIALOG_DATA]
@@ -1124,18 +1161,12 @@ class ProcessesComponent {
1124
1161
  _dialog;
1125
1162
  _message;
1126
1163
  list;
1127
- loadProcesses;
1128
- loadProcess;
1129
- run;
1130
- kill;
1131
- delete;
1132
- download;
1133
- queue;
1134
1164
  actions = [];
1135
1165
  config = null;
1136
1166
  ProcessStates = indexNameValue(ProcessStates);
1137
1167
  ProcessState = ProcessState;
1138
1168
  _destroy$ = new Subject();
1169
+ _processData = inject(ProcessData);
1139
1170
  constructor(_dialog, _message) {
1140
1171
  this._dialog = _dialog;
1141
1172
  this._message = _message;
@@ -1147,14 +1178,10 @@ class ProcessesComponent {
1147
1178
  this.list.reload();
1148
1179
  }
1149
1180
  open(process) {
1150
- this._dialog.open(ProcessComponent, {
1181
+ this._dialog
1182
+ .open(ProcessComponent, {
1151
1183
  data: {
1152
1184
  process,
1153
- download: this.download,
1154
- run: this.run,
1155
- loadProcess: this.loadProcess,
1156
- queue: this.queue,
1157
- kill: this.kill,
1158
1185
  },
1159
1186
  width: '85%',
1160
1187
  })
@@ -1168,10 +1195,66 @@ class ProcessesComponent {
1168
1195
  this._destroy$.next(null);
1169
1196
  this._destroy$.complete();
1170
1197
  }
1198
+ download(process) {
1199
+ this._processData.download(process);
1200
+ }
1171
1201
  _configList() {
1172
1202
  this.config = {
1173
1203
  actions: [],
1174
- rowActions: [],
1204
+ rowActions: [
1205
+ {
1206
+ label: 'Run',
1207
+ show: (process) => {
1208
+ return process.state !== ProcessState.Running;
1209
+ },
1210
+ click: (data) => {
1211
+ this._message.info('Running process...');
1212
+ this._processData.run(data)
1213
+ .subscribe(() => {
1214
+ this.reload();
1215
+ this._message.success('Ran process');
1216
+ });
1217
+ },
1218
+ },
1219
+ {
1220
+ label: 'Queue',
1221
+ show: (process) => {
1222
+ return process.state !== ProcessState.Running &&
1223
+ process.state !== ProcessState.Queued;
1224
+ },
1225
+ click: (data) => {
1226
+ this._processData.queue(data)
1227
+ .subscribe(() => {
1228
+ this.reload();
1229
+ this._message.success('Queued process');
1230
+ });
1231
+ },
1232
+ },
1233
+ {
1234
+ label: 'Kill',
1235
+ show: (data) => {
1236
+ return !!data.pid;
1237
+ },
1238
+ click: (data) => {
1239
+ this._message.info('Killing process...');
1240
+ this._processData.kill(data)
1241
+ .subscribe(() => {
1242
+ this.reload();
1243
+ this._message.success('Killed process');
1244
+ });
1245
+ },
1246
+ },
1247
+ {
1248
+ label: 'Delete',
1249
+ click: (data) => {
1250
+ this._processData.delete(data)
1251
+ .subscribe(() => {
1252
+ this.reload();
1253
+ this._message.success('Deleted process');
1254
+ });
1255
+ },
1256
+ },
1257
+ ],
1175
1258
  filters: [
1176
1259
  {
1177
1260
  type: ItemType.Keyword,
@@ -1186,61 +1269,10 @@ class ProcessesComponent {
1186
1269
  },
1187
1270
  ],
1188
1271
  fetch: (query) => {
1189
- return this.loadProcesses(query)
1272
+ return this._processData.gets(query, { key: null })
1190
1273
  .pipe(map((response) => ({ data: response.data, paging: response.paging })));
1191
1274
  },
1192
1275
  };
1193
- if (this.run) {
1194
- this.config.rowActions
1195
- .push({
1196
- label: 'Run',
1197
- show: (process) => {
1198
- return process.state !== ProcessState.Running;
1199
- },
1200
- click: (data) => {
1201
- this._message.info('Running process...');
1202
- this.run(data)
1203
- .subscribe(() => {
1204
- this.reload();
1205
- this._message.success('Succesfully ran process');
1206
- });
1207
- setTimeout(() => {
1208
- this.reload();
1209
- }, 500);
1210
- },
1211
- });
1212
- }
1213
- if (this.kill) {
1214
- this.config.rowActions.push({
1215
- label: 'Kill',
1216
- show: (data) => {
1217
- return !!data.pid;
1218
- },
1219
- click: (data) => {
1220
- this._message.info('Killing process...');
1221
- this.kill(data)
1222
- .subscribe(() => {
1223
- this.reload();
1224
- this._message.success('Succesfully killed process');
1225
- });
1226
- setTimeout(() => {
1227
- this.reload();
1228
- }, 500);
1229
- },
1230
- });
1231
- }
1232
- if (this.delete) {
1233
- this.config.rowActions.push({
1234
- label: 'Delete',
1235
- click: (data) => {
1236
- this.delete(data)
1237
- .subscribe(() => {
1238
- this.reload();
1239
- this._message.success('Deleted process');
1240
- });
1241
- },
1242
- });
1243
- }
1244
1276
  this.actions.forEach((action) => {
1245
1277
  this.config.actions.push({
1246
1278
  primary: false,
@@ -1265,7 +1297,7 @@ class ProcessesComponent {
1265
1297
  });
1266
1298
  }
1267
1299
  static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessesComponent, deps: [{ token: i1.MatDialog }, { token: i1$1.FsMessage }], target: i0.ɵɵFactoryTarget.Component });
1268
- static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ProcessesComponent, selector: "fs-system-processes", inputs: { loadProcesses: "loadProcesses", loadProcess: "loadProcess", run: "run", kill: "kill", delete: "delete", download: "download", queue: "queue", 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 <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: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$2.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$2.FsDateDurationPipe, name: "fsDateDuration" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1300
+ static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.7", type: ProcessesComponent, selector: "fs-system-processes", inputs: { 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 <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: [""], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i4$2.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$2.FsDateDurationPipe, name: "fsDateDuration" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
1269
1301
  }
1270
1302
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImport: i0, type: ProcessesComponent, decorators: [{
1271
1303
  type: Component,
@@ -1273,20 +1305,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.7", ngImpor
1273
1305
  }], ctorParameters: () => [{ type: i1.MatDialog }, { type: i1$1.FsMessage }], propDecorators: { list: [{
1274
1306
  type: ViewChild,
1275
1307
  args: [FsListComponent]
1276
- }], loadProcesses: [{
1277
- type: Input
1278
- }], loadProcess: [{
1279
- type: Input
1280
- }], run: [{
1281
- type: Input
1282
- }], kill: [{
1283
- type: Input
1284
- }], delete: [{
1285
- type: Input
1286
- }], download: [{
1287
- type: Input
1288
- }], queue: [{
1289
- type: Input
1290
1308
  }], actions: [{
1291
1309
  type: Input
1292
1310
  }] } });