mstate-angular 0.2.1 → 0.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/action-form/action-form.component.mjs +149 -0
- package/esm2022/lib/common/constant.mjs +5 -0
- package/esm2022/lib/common/enum.mjs +48 -0
- package/esm2022/lib/components/action-card/action-card.component.mjs +24 -0
- package/esm2022/lib/components/button/button.component.mjs +20 -0
- package/esm2022/lib/components/dropdown/dropdown.component.mjs +50 -0
- package/esm2022/lib/components/error-card/error-card.component.mjs +23 -0
- package/esm2022/lib/components/input-field/input-field.component.mjs +27 -0
- package/esm2022/lib/components/loader/loader.component.mjs +12 -0
- package/esm2022/lib/components/select/select.component.mjs +50 -0
- package/esm2022/lib/components/workflow-end-card/workflow-end-card.component.mjs +11 -0
- package/esm2022/lib/input-selector/input-selector.component.mjs +42 -0
- package/esm2022/lib/interfaces/api.interface.mjs +2 -0
- package/esm2022/lib/interfaces/interface.mjs +2 -0
- package/esm2022/lib/mstate-angular/mstate-angular.component.mjs +155 -0
- package/esm2022/lib/mstate-angular.helper.mjs +61 -0
- package/esm2022/lib/mstate-angular.module.mjs +18 -0
- package/esm2022/lib/mstate-angular.service.mjs +50 -0
- package/esm2022/mstate-angular.mjs +5 -0
- package/esm2022/public-api.mjs +6 -0
- package/fesm2022/mstate-angular.mjs +673 -0
- package/fesm2022/mstate-angular.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/action-form/action-form.component.d.ts +33 -0
- package/lib/common/constant.d.ts +2 -0
- package/lib/common/enum.d.ts +41 -0
- package/lib/components/action-card/action-card.component.d.ts +11 -0
- package/lib/components/button/button.component.d.ts +7 -0
- package/lib/components/dropdown/dropdown.component.d.ts +22 -0
- package/lib/components/error-card/error-card.component.d.ts +9 -0
- package/lib/components/input-field/input-field.component.d.ts +16 -0
- package/lib/components/loader/loader.component.d.ts +5 -0
- package/lib/components/select/select.component.d.ts +22 -0
- package/lib/components/workflow-end-card/workflow-end-card.component.d.ts +5 -0
- package/lib/input-selector/input-selector.component.d.ts +21 -0
- package/{src/lib/interfaces/api.interface.ts → lib/interfaces/api.interface.d.ts} +42 -51
- package/lib/interfaces/interface.d.ts +73 -0
- package/lib/mstate-angular/mstate-angular.component.d.ts +72 -0
- package/lib/mstate-angular.helper.d.ts +18 -0
- package/lib/mstate-angular.module.d.ts +9 -0
- package/lib/mstate-angular.service.d.ts +17 -0
- package/package.json +27 -14
- package/{src/public-api.ts → public-api.d.ts} +2 -6
- package/ng-package.json +0 -7
- package/src/lib/action-form/action-form.component.html +0 -13
- package/src/lib/action-form/action-form.component.scss +0 -0
- package/src/lib/action-form/action-form.component.spec.ts +0 -23
- package/src/lib/action-form/action-form.component.ts +0 -124
- package/src/lib/common/constant.ts +0 -4
- package/src/lib/common/enum.ts +0 -46
- package/src/lib/components/action-card/action-card.component.html +0 -1
- package/src/lib/components/action-card/action-card.component.scss +0 -0
- package/src/lib/components/action-card/action-card.component.spec.ts +0 -21
- package/src/lib/components/action-card/action-card.component.ts +0 -21
- package/src/lib/components/button/button.component.html +0 -3
- package/src/lib/components/button/button.component.scss +0 -0
- package/src/lib/components/button/button.component.spec.ts +0 -21
- package/src/lib/components/button/button.component.ts +0 -11
- package/src/lib/components/dropdown/dropdown.component.html +0 -10
- package/src/lib/components/dropdown/dropdown.component.scss +0 -0
- package/src/lib/components/dropdown/dropdown.component.spec.ts +0 -21
- package/src/lib/components/dropdown/dropdown.component.ts +0 -46
- package/src/lib/components/input-field/input-field.component.html +0 -9
- package/src/lib/components/input-field/input-field.component.scss +0 -0
- package/src/lib/components/input-field/input-field.component.spec.ts +0 -21
- package/src/lib/components/input-field/input-field.component.ts +0 -16
- package/src/lib/components/loader/loader.component.html +0 -1
- package/src/lib/components/loader/loader.component.scss +0 -0
- package/src/lib/components/loader/loader.component.spec.ts +0 -21
- package/src/lib/components/loader/loader.component.ts +0 -11
- package/src/lib/components/select/select.component.html +0 -10
- package/src/lib/components/select/select.component.scss +0 -43
- package/src/lib/components/select/select.component.spec.ts +0 -21
- package/src/lib/components/select/select.component.ts +0 -46
- package/src/lib/input-selector/input-selector.component.html +0 -23
- package/src/lib/input-selector/input-selector.component.scss +0 -0
- package/src/lib/input-selector/input-selector.component.spec.ts +0 -21
- package/src/lib/input-selector/input-selector.component.ts +0 -38
- package/src/lib/interfaces/interface.ts +0 -81
- package/src/lib/material.scss +0 -439
- package/src/lib/mstate-angular/mstate-angular.component.html +0 -40
- package/src/lib/mstate-angular/mstate-angular.component.scss +0 -36
- package/src/lib/mstate-angular/mstate-angular.component.spec.ts +0 -21
- package/src/lib/mstate-angular/mstate-angular.component.ts +0 -186
- package/src/lib/mstate-angular.helper.ts +0 -35
- package/src/lib/mstate-angular.module.ts +0 -9
- package/src/lib/mstate-angular.service.ts +0 -77
- package/tsconfig.lib.json +0 -14
- package/tsconfig.lib.prod.json +0 -10
- package/tsconfig.spec.json +0 -14
@@ -0,0 +1,673 @@
|
|
1
|
+
import * as i0 from '@angular/core';
|
2
|
+
import { Injectable, Component, Input, EventEmitter, Output, NgModule } from '@angular/core';
|
3
|
+
import { CommonModule } from '@angular/common';
|
4
|
+
import * as i1 from '@angular/common/http';
|
5
|
+
import { HttpHeaders } from '@angular/common/http';
|
6
|
+
import axios from 'axios';
|
7
|
+
import { catchError, finalize } from 'rxjs';
|
8
|
+
import * as i3 from '@angular/forms';
|
9
|
+
import { ReactiveFormsModule, Validators } from '@angular/forms';
|
10
|
+
import * as i4 from '@ng-select/ng-select';
|
11
|
+
import { NgSelectModule } from '@ng-select/ng-select';
|
12
|
+
|
13
|
+
var Route;
|
14
|
+
(function (Route) {
|
15
|
+
Route["EXECUTE_ACTION"] = "workflow/v2/execute";
|
16
|
+
Route["GET_WORKFLOW_CONFIG"] = "workflow/config";
|
17
|
+
Route["GET_CURRENT_ACTIONS_WITHOUT_INSTANCE"] = "workflow/v2/actions";
|
18
|
+
Route["GET_CURRENT_ACTIONS_WITH_INSTANCE"] = "workflow/actions";
|
19
|
+
})(Route || (Route = {}));
|
20
|
+
var FieldType;
|
21
|
+
(function (FieldType) {
|
22
|
+
FieldType["DATE_PICKER"] = "datePicker";
|
23
|
+
FieldType["TIME_PICKER"] = "timePicker";
|
24
|
+
FieldType["INPUT_FIELD"] = "inputField";
|
25
|
+
FieldType["TEXT_AREA"] = "textArea";
|
26
|
+
FieldType["CHECKBOX"] = "checkBox";
|
27
|
+
FieldType["RADIO_LIST"] = "radioList";
|
28
|
+
FieldType["DROP_DOWN"] = "dropDown";
|
29
|
+
FieldType["SUMMARY"] = "summary";
|
30
|
+
FieldType["CONTEXT_FIELD"] = "CONTEXT_FIELD";
|
31
|
+
FieldType["CUSTOM_FIELD"] = "CUSTOM_FIELD";
|
32
|
+
})(FieldType || (FieldType = {}));
|
33
|
+
var ManualStepModule;
|
34
|
+
(function (ManualStepModule) {
|
35
|
+
ManualStepModule["CONTEXT_FIELD"] = "CONTEXT_FIELD";
|
36
|
+
ManualStepModule["CUSTOM_FIELD"] = "CUSTOM_FIELD";
|
37
|
+
ManualStepModule["USER_INPUT"] = "USER_INPUT";
|
38
|
+
})(ManualStepModule || (ManualStepModule = {}));
|
39
|
+
var Theme;
|
40
|
+
(function (Theme) {
|
41
|
+
Theme["DARK"] = "dark";
|
42
|
+
Theme["LIGHT"] = "light";
|
43
|
+
Theme["SYSTEM"] = "system";
|
44
|
+
})(Theme || (Theme = {}));
|
45
|
+
var Variable;
|
46
|
+
(function (Variable) {
|
47
|
+
Variable["WORKFLOW"] = "workflow";
|
48
|
+
Variable["TOKEN"] = "token";
|
49
|
+
Variable["INSTANCE_ID"] = "instanceID";
|
50
|
+
Variable["START"] = "start";
|
51
|
+
Variable["TRIGGER_AGAIN"] = "triggerAgain";
|
52
|
+
Variable["ERRORS"] = "errors";
|
53
|
+
})(Variable || (Variable = {}));
|
54
|
+
var ActionType;
|
55
|
+
(function (ActionType) {
|
56
|
+
ActionType["MANUAL"] = "MANUAL";
|
57
|
+
ActionType["AUTO"] = "AUTO";
|
58
|
+
ActionType["CHAINED"] = "CHAINED";
|
59
|
+
})(ActionType || (ActionType = {}));
|
60
|
+
|
61
|
+
// export const MSTATE_URL: string = 'https://dev.mstate.mobioffice.io/api';
|
62
|
+
// export const MSTATE_URL = 'http://localhost:3000/api';
|
63
|
+
const MSTATE_URL = 'https://api.mstate.mobioffice.io/api';
|
64
|
+
const TOKEN_KEY = 'secret-key';
|
65
|
+
|
66
|
+
class MstateAngularHelper {
|
67
|
+
detectChange(change, keys) {
|
68
|
+
for (const key of keys) {
|
69
|
+
if (change[key] && change[key].currentValue !== change[key].previousValue)
|
70
|
+
return true;
|
71
|
+
}
|
72
|
+
return false;
|
73
|
+
}
|
74
|
+
formatString(str = '') {
|
75
|
+
return str.toUpperCase().replace(/_/gi, ' ');
|
76
|
+
}
|
77
|
+
getObjectValue(obj, target) {
|
78
|
+
const keys = target ? target.split('.') : [];
|
79
|
+
let cur = obj;
|
80
|
+
for (const key of keys) {
|
81
|
+
cur = cur?.[key];
|
82
|
+
}
|
83
|
+
return cur;
|
84
|
+
}
|
85
|
+
checkIsStep(step) {
|
86
|
+
return step?.config !== undefined;
|
87
|
+
}
|
88
|
+
checkIsHandledStep(module) {
|
89
|
+
switch (module) {
|
90
|
+
case FieldType.CHECKBOX:
|
91
|
+
case FieldType.DROP_DOWN:
|
92
|
+
case FieldType.INPUT_FIELD:
|
93
|
+
case FieldType.RADIO_LIST:
|
94
|
+
return true;
|
95
|
+
default:
|
96
|
+
return false;
|
97
|
+
}
|
98
|
+
}
|
99
|
+
checkInputError(form, key) {
|
100
|
+
switch ((form.controls[key].status === 'INVALID' && form.controls[key].touched) ||
|
101
|
+
(form.controls[key].status === 'INVALID' && form.controls[key].dirty)) {
|
102
|
+
case true:
|
103
|
+
return {
|
104
|
+
isError: true,
|
105
|
+
message: `${key} is required`,
|
106
|
+
};
|
107
|
+
default:
|
108
|
+
return {
|
109
|
+
isError: false,
|
110
|
+
message: '',
|
111
|
+
};
|
112
|
+
}
|
113
|
+
}
|
114
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularHelper, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
115
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularHelper, providedIn: 'root' }); }
|
116
|
+
}
|
117
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularHelper, decorators: [{
|
118
|
+
type: Injectable,
|
119
|
+
args: [{
|
120
|
+
providedIn: 'root',
|
121
|
+
}]
|
122
|
+
}] });
|
123
|
+
|
124
|
+
class MstateAngularService {
|
125
|
+
getHeaders(token) {
|
126
|
+
return new HttpHeaders({
|
127
|
+
'Content-Type': 'application/json',
|
128
|
+
[TOKEN_KEY]: token,
|
129
|
+
});
|
130
|
+
}
|
131
|
+
constructor(http, mstateHelper) {
|
132
|
+
this.http = http;
|
133
|
+
this.mstateHelper = mstateHelper;
|
134
|
+
}
|
135
|
+
executeAction(payload) {
|
136
|
+
return this.http.post(`${MSTATE_URL}/${Route.EXECUTE_ACTION}`, {
|
137
|
+
instanceID: payload.instanceID ?? '',
|
138
|
+
name: payload.workflow,
|
139
|
+
action: payload.action,
|
140
|
+
}, { headers: this.getHeaders(payload.token) });
|
141
|
+
}
|
142
|
+
getCurrentActionsWithInstanceID(payload) {
|
143
|
+
return this.http.get(`${MSTATE_URL}/${Route.GET_CURRENT_ACTIONS_WITH_INSTANCE}/${payload.instanceID}`, {
|
144
|
+
headers: this.getHeaders(payload.token),
|
145
|
+
});
|
146
|
+
}
|
147
|
+
getCurrentActionsWithoutInstanceID(payload) {
|
148
|
+
return this.http.get(`${MSTATE_URL}/${Route.GET_CURRENT_ACTIONS_WITHOUT_INSTANCE}?name=${payload.workflow}`, {
|
149
|
+
headers: this.getHeaders(payload.token),
|
150
|
+
});
|
151
|
+
}
|
152
|
+
async handleDropdownAPI(request, target) {
|
153
|
+
const response = await axios(request);
|
154
|
+
return this.mstateHelper.getObjectValue(response?.data, target) ?? [];
|
155
|
+
}
|
156
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularService, deps: [{ token: i1.HttpClient }, { token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
157
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularService, providedIn: 'root' }); }
|
158
|
+
}
|
159
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularService, decorators: [{
|
160
|
+
type: Injectable,
|
161
|
+
args: [{
|
162
|
+
providedIn: 'root',
|
163
|
+
}]
|
164
|
+
}], ctorParameters: () => [{ type: i1.HttpClient }, { type: MstateAngularHelper }] });
|
165
|
+
|
166
|
+
class InputFieldComponent {
|
167
|
+
constructor(mstateHelper) {
|
168
|
+
this.mstateHelper = mstateHelper;
|
169
|
+
}
|
170
|
+
checkInputError(form, key) {
|
171
|
+
return this.mstateHelper.checkInputError(form, key);
|
172
|
+
}
|
173
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputFieldComponent, deps: [{ token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
|
174
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InputFieldComponent, isStandalone: true, selector: "mobi-office-input-field", inputs: { config: "config", mstateModel: "mstateModel" }, ngImport: i0, template: "<div\n class=\"form-group\"\n [formGroup]=\"mstateModel\"\n style=\"display: flex; flex-direction: column\"\n>\n <label>{{ config.label }}</label>\n <input\n style=\"flex: 1\"\n [required]=\"config.field.isRequired || false\"\n [type]=\"config.inputType\"\n [name]=\"config.field.keyForAPI\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n class=\"form-control\"\n />\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }] }); }
|
175
|
+
}
|
176
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputFieldComponent, decorators: [{
|
177
|
+
type: Component,
|
178
|
+
args: [{ selector: 'mobi-office-input-field', standalone: true, imports: [CommonModule, ReactiveFormsModule], template: "<div\n class=\"form-group\"\n [formGroup]=\"mstateModel\"\n style=\"display: flex; flex-direction: column\"\n>\n <label>{{ config.label }}</label>\n <input\n style=\"flex: 1\"\n [required]=\"config.field.isRequired || false\"\n [type]=\"config.inputType\"\n [name]=\"config.field.keyForAPI\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n class=\"form-control\"\n />\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n" }]
|
179
|
+
}], ctorParameters: () => [{ type: MstateAngularHelper }], propDecorators: { config: [{
|
180
|
+
type: Input,
|
181
|
+
args: [{ required: true }]
|
182
|
+
}], mstateModel: [{
|
183
|
+
type: Input,
|
184
|
+
args: [{ required: true }]
|
185
|
+
}] } });
|
186
|
+
|
187
|
+
class SelectComponent {
|
188
|
+
constructor(mstateService, mstateHelper) {
|
189
|
+
this.mstateService = mstateService;
|
190
|
+
this.mstateHelper = mstateHelper;
|
191
|
+
this.list = [];
|
192
|
+
}
|
193
|
+
ngOnInit() {
|
194
|
+
const field = this.config.field ?? {};
|
195
|
+
if (field.request) {
|
196
|
+
this.mstateService
|
197
|
+
.handleDropdownAPI(field.request, field?.mapper?.target ?? '')
|
198
|
+
.then((data) => {
|
199
|
+
this.list = data;
|
200
|
+
})
|
201
|
+
.catch((e) => console.log(e));
|
202
|
+
}
|
203
|
+
else {
|
204
|
+
this.list = field.itemList ?? [];
|
205
|
+
}
|
206
|
+
}
|
207
|
+
getObjectValue(obj, target) {
|
208
|
+
return this.mstateHelper.getObjectValue(obj, target);
|
209
|
+
}
|
210
|
+
checkInputError(form, key) {
|
211
|
+
return this.mstateHelper.checkInputError(form, key);
|
212
|
+
}
|
213
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectComponent, deps: [{ token: MstateAngularService }, { token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
|
214
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: SelectComponent, isStandalone: true, selector: "mobi-office-select", inputs: { config: "config", mstateModel: "mstateModel" }, providers: [MstateAngularService], ngImport: i0, template: "<div class=\"form-group\" [formGroup]=\"mstateModel\">\n <label>{{ config.label }}</label>\n\n <ng-select\n [required]=\"config.field.isRequired || false\"\n [items]=\"list\"\n [multiple]=\"true\"\n [bindLabel]=\"this.config.field.mapper?.label ?? 'label'\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n >\n </ng-select>\n\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n", styles: [".dropdown{position:relative;width:300px}.search-input{width:100%;padding:8px;border:1px solid #ccc;border-radius:4px}.dropdown-menu{position:absolute;width:100%;max-height:150px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:4px;margin-top:5px;z-index:10}.dropdown-item{padding:8px;cursor:pointer}.dropdown-item:hover{background-color:#f0f0f0}.no-results{padding:8px;color:#888;text-align:center}.selected-option{margin-top:10px;font-weight:700}\n"], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "bindLabel", "bindValue", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick", "keyDownFn"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "ngmodule", type: CommonModule }] }); }
|
215
|
+
}
|
216
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: SelectComponent, decorators: [{
|
217
|
+
type: Component,
|
218
|
+
args: [{ selector: 'mobi-office-select', standalone: true, imports: [ReactiveFormsModule, NgSelectModule, CommonModule], providers: [MstateAngularService], template: "<div class=\"form-group\" [formGroup]=\"mstateModel\">\n <label>{{ config.label }}</label>\n\n <ng-select\n [required]=\"config.field.isRequired || false\"\n [items]=\"list\"\n [multiple]=\"true\"\n [bindLabel]=\"this.config.field.mapper?.label ?? 'label'\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n >\n </ng-select>\n\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n", styles: [".dropdown{position:relative;width:300px}.search-input{width:100%;padding:8px;border:1px solid #ccc;border-radius:4px}.dropdown-menu{position:absolute;width:100%;max-height:150px;overflow-y:auto;background:#fff;border:1px solid #ccc;border-radius:4px;margin-top:5px;z-index:10}.dropdown-item{padding:8px;cursor:pointer}.dropdown-item:hover{background-color:#f0f0f0}.no-results{padding:8px;color:#888;text-align:center}.selected-option{margin-top:10px;font-weight:700}\n"] }]
|
219
|
+
}], ctorParameters: () => [{ type: MstateAngularService }, { type: MstateAngularHelper }], propDecorators: { config: [{
|
220
|
+
type: Input,
|
221
|
+
args: [{ required: true }]
|
222
|
+
}], mstateModel: [{
|
223
|
+
type: Input,
|
224
|
+
args: [{ required: true }]
|
225
|
+
}] } });
|
226
|
+
|
227
|
+
class DropdownComponent {
|
228
|
+
constructor(mstateService, mstateHelper) {
|
229
|
+
this.mstateService = mstateService;
|
230
|
+
this.mstateHelper = mstateHelper;
|
231
|
+
this.list = [];
|
232
|
+
}
|
233
|
+
ngOnInit() {
|
234
|
+
const field = this.config.field ?? {};
|
235
|
+
if (field.request) {
|
236
|
+
this.mstateService
|
237
|
+
.handleDropdownAPI(field.request, field?.mapper?.target ?? '')
|
238
|
+
.then((data) => {
|
239
|
+
this.list = data;
|
240
|
+
})
|
241
|
+
.catch((e) => console.log(e));
|
242
|
+
}
|
243
|
+
else {
|
244
|
+
this.list = field.itemList ?? [];
|
245
|
+
}
|
246
|
+
}
|
247
|
+
getObjectValue(obj, target) {
|
248
|
+
return this.mstateHelper.getObjectValue(obj, target);
|
249
|
+
}
|
250
|
+
checkInputError(form, key) {
|
251
|
+
return this.mstateHelper.checkInputError(form, key);
|
252
|
+
}
|
253
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownComponent, deps: [{ token: MstateAngularService }, { token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
|
254
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: DropdownComponent, isStandalone: true, selector: "mobi-office-dropdown", inputs: { config: "config", mstateModel: "mstateModel" }, providers: [MstateAngularService], ngImport: i0, template: "<div class=\"form-group\" [formGroup]=\"mstateModel\">\n <label>{{ config.label }}</label>\n\n <ng-select\n [items]=\"list\"\n [multiple]=\"false\"\n [bindLabel]=\"this.config.field.mapper?.label ?? 'label'\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n [required]=\"config.field.isRequired || false\"\n >\n </ng-select>\n\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i3.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: NgSelectModule }, { kind: "component", type: i4.NgSelectComponent, selector: "ng-select", inputs: ["ariaLabelDropdown", "bindLabel", "bindValue", "ariaLabel", "markFirst", "placeholder", "fixedPlaceholder", "notFoundText", "typeToSearchText", "preventToggleOnRightClick", "addTagText", "loadingText", "clearAllText", "appearance", "dropdownPosition", "appendTo", "loading", "closeOnSelect", "hideSelected", "selectOnTab", "openOnEnter", "maxSelectedItems", "groupBy", "groupValue", "bufferAmount", "virtualScroll", "selectableGroup", "selectableGroupAsModel", "searchFn", "trackByFn", "clearOnBackspace", "labelForId", "inputAttrs", "tabIndex", "readonly", "searchWhileComposing", "minTermLength", "editableSearchTerm", "ngClass", "typeahead", "multiple", "addTag", "searchable", "clearable", "isOpen", "items", "compareWith", "clearSearchOnAdd", "deselectOnClick", "keyDownFn"], outputs: ["blur", "focus", "change", "open", "close", "search", "clear", "add", "remove", "scroll", "scrollToEnd"] }, { kind: "ngmodule", type: CommonModule }] }); }
|
255
|
+
}
|
256
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: DropdownComponent, decorators: [{
|
257
|
+
type: Component,
|
258
|
+
args: [{ selector: 'mobi-office-dropdown', standalone: true, imports: [ReactiveFormsModule, NgSelectModule, CommonModule], providers: [MstateAngularService], template: "<div class=\"form-group\" [formGroup]=\"mstateModel\">\n <label>{{ config.label }}</label>\n\n <ng-select\n [items]=\"list\"\n [multiple]=\"false\"\n [bindLabel]=\"this.config.field.mapper?.label ?? 'label'\"\n [placeholder]=\"config.field.placeholder\"\n [formControlName]=\"config.field.keyForAPI\"\n [required]=\"config.field.isRequired || false\"\n >\n </ng-select>\n\n @if (checkInputError(mstateModel, config.field.keyForAPI).isError) {\n <small>{{\n checkInputError(mstateModel, config.field.keyForAPI).message\n }}</small>\n }\n</div>\n" }]
|
259
|
+
}], ctorParameters: () => [{ type: MstateAngularService }, { type: MstateAngularHelper }], propDecorators: { config: [{
|
260
|
+
type: Input,
|
261
|
+
args: [{ required: true }]
|
262
|
+
}], mstateModel: [{
|
263
|
+
type: Input,
|
264
|
+
args: [{ required: true }]
|
265
|
+
}] } });
|
266
|
+
|
267
|
+
class InputSelectorComponent {
|
268
|
+
constructor(mstateHelper) {
|
269
|
+
this.mstateHelper = mstateHelper;
|
270
|
+
this.FieldType = FieldType;
|
271
|
+
}
|
272
|
+
ngOnInit() {
|
273
|
+
this.config = this.mstateHelper.checkIsStep(this.step)
|
274
|
+
? this.step?.config?.data
|
275
|
+
: this.step;
|
276
|
+
}
|
277
|
+
checkInputError(form, key) {
|
278
|
+
return this.mstateHelper.checkInputError(form, key);
|
279
|
+
}
|
280
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputSelectorComponent, deps: [{ token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
|
281
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: InputSelectorComponent, isStandalone: true, selector: "mobi-office-input-selector", inputs: { step: "step", mstateModel: "mstateModel" }, providers: [MstateAngularHelper, MstateAngularService], ngImport: i0, template: "@switch (config.fieldType) { @case (FieldType.INPUT_FIELD) {\n<mobi-office-input-field [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.TEXT_AREA) {\n<mobi-office-input-field [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.DROP_DOWN) {\n<mobi-office-dropdown [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.RADIO_LIST) {\n<mobi-office-dropdown [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.CHECKBOX) {\n<mobi-office-select [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @default { } }\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: InputFieldComponent, selector: "mobi-office-input-field", inputs: ["config", "mstateModel"] }, { kind: "component", type: SelectComponent, selector: "mobi-office-select", inputs: ["config", "mstateModel"] }, { kind: "component", type: DropdownComponent, selector: "mobi-office-dropdown", inputs: ["config", "mstateModel"] }] }); }
|
282
|
+
}
|
283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: InputSelectorComponent, decorators: [{
|
284
|
+
type: Component,
|
285
|
+
args: [{ selector: 'mobi-office-input-selector', standalone: true, imports: [
|
286
|
+
CommonModule,
|
287
|
+
InputFieldComponent,
|
288
|
+
SelectComponent,
|
289
|
+
DropdownComponent,
|
290
|
+
], providers: [MstateAngularHelper, MstateAngularService], template: "@switch (config.fieldType) { @case (FieldType.INPUT_FIELD) {\n<mobi-office-input-field [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.TEXT_AREA) {\n<mobi-office-input-field [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.DROP_DOWN) {\n<mobi-office-dropdown [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.RADIO_LIST) {\n<mobi-office-dropdown [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @case (FieldType.CHECKBOX) {\n<mobi-office-select [config]=\"config\" [mstateModel]=\"mstateModel\" />\n} @default { } }\n" }]
|
291
|
+
}], ctorParameters: () => [{ type: MstateAngularHelper }], propDecorators: { step: [{
|
292
|
+
type: Input,
|
293
|
+
args: [{ required: true }]
|
294
|
+
}], mstateModel: [{
|
295
|
+
type: Input,
|
296
|
+
args: [{ required: true }]
|
297
|
+
}] } });
|
298
|
+
|
299
|
+
class ButtonComponent {
|
300
|
+
constructor() {
|
301
|
+
this.type = 'submit';
|
302
|
+
this.onClick = () => { };
|
303
|
+
}
|
304
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
305
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ButtonComponent, isStandalone: true, selector: "mobi-office-button", inputs: { type: "type", onClick: "onClick" }, ngImport: i0, template: "<button [type]=\"type\" (click)=\"onClick()\" class=\"btn\">\n <ng-content></ng-content>\n</button>\n", styles: [".btn{width:100%;display:flex;align-items:center;justify-content:center;background-color:#007bff;color:#fff;border:1px solid #007bff;padding:10px 20px;font-size:16px;border-radius:4px;text-align:center;cursor:pointer;transition:all .3s ease}.btn:hover{background-color:#0056b3;border-color:#0056b3}.btn:focus{outline:none;box-shadow:0 0 0 .2rem #007bff40}.btn:active{background-color:#004085;border-color:#036}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
306
|
+
}
|
307
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ButtonComponent, decorators: [{
|
308
|
+
type: Component,
|
309
|
+
args: [{ selector: 'mobi-office-button', standalone: true, imports: [CommonModule], template: "<button [type]=\"type\" (click)=\"onClick()\" class=\"btn\">\n <ng-content></ng-content>\n</button>\n", styles: [".btn{width:100%;display:flex;align-items:center;justify-content:center;background-color:#007bff;color:#fff;border:1px solid #007bff;padding:10px 20px;font-size:16px;border-radius:4px;text-align:center;cursor:pointer;transition:all .3s ease}.btn:hover{background-color:#0056b3;border-color:#0056b3}.btn:focus{outline:none;box-shadow:0 0 0 .2rem #007bff40}.btn:active{background-color:#004085;border-color:#036}\n"] }]
|
310
|
+
}], propDecorators: { type: [{
|
311
|
+
type: Input
|
312
|
+
}], onClick: [{
|
313
|
+
type: Input
|
314
|
+
}] } });
|
315
|
+
|
316
|
+
class LoaderComponent {
|
317
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoaderComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
318
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: LoaderComponent, isStandalone: true, selector: "mobi-office-loader", ngImport: i0, template: "<span>Loading...</span>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }] }); }
|
319
|
+
}
|
320
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: LoaderComponent, decorators: [{
|
321
|
+
type: Component,
|
322
|
+
args: [{ selector: 'mobi-office-loader', standalone: true, imports: [CommonModule], template: "<span>Loading...</span>\n" }]
|
323
|
+
}] });
|
324
|
+
|
325
|
+
class ActionFormComponent {
|
326
|
+
constructor(fb, mstateAngularService, mstateHelper) {
|
327
|
+
this.fb = fb;
|
328
|
+
this.mstateAngularService = mstateAngularService;
|
329
|
+
this.mstateHelper = mstateHelper;
|
330
|
+
this.token = '';
|
331
|
+
this.workflow = '';
|
332
|
+
this.config = {
|
333
|
+
name: '',
|
334
|
+
type: ActionType.MANUAL,
|
335
|
+
steps: [],
|
336
|
+
};
|
337
|
+
this.onExecuteAction = new EventEmitter();
|
338
|
+
this.isLoading = false;
|
339
|
+
this.nonUserInputField = {};
|
340
|
+
this.handleStepConfigFilter = () => {
|
341
|
+
const keyForAPISet = new Set();
|
342
|
+
this.config.steps = this.config?.steps?.filter((stepConfig) => {
|
343
|
+
const step = stepConfig;
|
344
|
+
switch (step?.module) {
|
345
|
+
case ManualStepModule.CUSTOM_FIELD: {
|
346
|
+
if (this.updateCustomFieldValue) {
|
347
|
+
this.nonUserInputField[step?.context?.as] =
|
348
|
+
this.updateCustomFieldValue(step?.context?.key);
|
349
|
+
}
|
350
|
+
return true;
|
351
|
+
}
|
352
|
+
case ManualStepModule.CONTEXT_FIELD:
|
353
|
+
this.nonUserInputField[step?.context?.as] = step?.context?.value;
|
354
|
+
return true;
|
355
|
+
default: {
|
356
|
+
const isDuplicate = keyForAPISet.has(step?.field?.keyForAPI);
|
357
|
+
keyForAPISet.add(step?.field?.keyForAPI);
|
358
|
+
return isDuplicate === false;
|
359
|
+
}
|
360
|
+
}
|
361
|
+
});
|
362
|
+
};
|
363
|
+
}
|
364
|
+
ngOnInit() {
|
365
|
+
if (Boolean(this.config?.steps?.length) === false) {
|
366
|
+
this.handleExecuteAction();
|
367
|
+
return;
|
368
|
+
}
|
369
|
+
this.assignFormBuilder();
|
370
|
+
this.handleStepConfigFilter();
|
371
|
+
}
|
372
|
+
//#region handlers
|
373
|
+
handleExecuteAction() {
|
374
|
+
if (this.form.status === 'VALID') {
|
375
|
+
this.isLoading = true;
|
376
|
+
this.mstateAngularService
|
377
|
+
.executeAction({
|
378
|
+
action: {
|
379
|
+
name: this.config.name,
|
380
|
+
payload: {
|
381
|
+
...this.form.value,
|
382
|
+
...this.nonUserInputField,
|
383
|
+
},
|
384
|
+
},
|
385
|
+
token: this.token,
|
386
|
+
workflow: this.workflow,
|
387
|
+
})
|
388
|
+
.pipe(catchError((e) => {
|
389
|
+
this.onExecuteAction.emit({
|
390
|
+
value: {},
|
391
|
+
errors: e.error?.errors ?? [],
|
392
|
+
});
|
393
|
+
throw e;
|
394
|
+
}), finalize(() => {
|
395
|
+
this.isLoading = false;
|
396
|
+
}))
|
397
|
+
.subscribe((data) => {
|
398
|
+
this.onExecuteAction.emit({
|
399
|
+
value: data.data,
|
400
|
+
errors: [],
|
401
|
+
});
|
402
|
+
if (this.onSuccess) {
|
403
|
+
this.onSuccess(this.config.name);
|
404
|
+
}
|
405
|
+
});
|
406
|
+
}
|
407
|
+
else {
|
408
|
+
this.markAllAsTouched(this.form);
|
409
|
+
}
|
410
|
+
}
|
411
|
+
markAllAsTouched(formGroup) {
|
412
|
+
Object.keys(formGroup.controls).forEach((key) => {
|
413
|
+
const control = formGroup.get(key);
|
414
|
+
if (control?.markAsTouched) {
|
415
|
+
control?.markAsTouched();
|
416
|
+
}
|
417
|
+
});
|
418
|
+
}
|
419
|
+
assignFormBuilder() {
|
420
|
+
const validators = this.config.steps.reduce((acc, data) => Object.assign(acc, this.mstateHelper.checkIsStep(data) === false &&
|
421
|
+
this.mstateHelper.checkIsHandledStep(data.fieldType)
|
422
|
+
? {
|
423
|
+
[data?.field?.keyForAPI]: [
|
424
|
+
data?.field.multiple ? [] : '',
|
425
|
+
data?.field?.isRequired ? [Validators.required] : undefined,
|
426
|
+
],
|
427
|
+
}
|
428
|
+
: {}), {});
|
429
|
+
this.form = this.fb.group(validators);
|
430
|
+
}
|
431
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionFormComponent, deps: [{ token: i3.FormBuilder }, { token: MstateAngularService }, { token: MstateAngularHelper }], target: i0.ɵɵFactoryTarget.Component }); }
|
432
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ActionFormComponent, isStandalone: true, selector: "lib-action-form", inputs: { token: "token", workflow: "workflow", config: "config", updateCustomFieldValue: "updateCustomFieldValue", instanceID: "instanceID", onSuccess: "onSuccess" }, outputs: { onExecuteAction: "onExecuteAction" }, providers: [MstateAngularService, MstateAngularHelper], ngImport: i0, template: "<div>\r\n <p style=\"font-size: 2rem; text-align: center\">\r\n {{ config.meta?.title ?? config.name }}\r\n </p>\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"handleExecuteAction()\">\r\n @for (step of config.steps; track $index) {\r\n <mobi-office-input-selector [step]=\"step\" [mstateModel]=\"form\" />\r\n }\r\n\r\n <div style=\"margin-top: 10px\">\r\n <mobi-office-button type=\"submit\">\r\n @if (isLoading) {\r\n <mobi-office-loader></mobi-office-loader>\r\n } @else {\r\n Submit\r\n }\r\n </mobi-office-button>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: ["form{display:flex;flex-direction:column}label{margin-bottom:5px}\n"], dependencies: [{ kind: "component", type: InputSelectorComponent, selector: "mobi-office-input-selector", inputs: ["step", "mstateModel"] }, { kind: "component", type: ButtonComponent, selector: "mobi-office-button", inputs: ["type", "onClick"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i3.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i3.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "component", type: LoaderComponent, selector: "mobi-office-loader" }] }); }
|
433
|
+
}
|
434
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionFormComponent, decorators: [{
|
435
|
+
type: Component,
|
436
|
+
args: [{ selector: 'lib-action-form', standalone: true, imports: [
|
437
|
+
InputSelectorComponent,
|
438
|
+
ButtonComponent,
|
439
|
+
ReactiveFormsModule,
|
440
|
+
LoaderComponent,
|
441
|
+
], providers: [MstateAngularService, MstateAngularHelper], template: "<div>\r\n <p style=\"font-size: 2rem; text-align: center\">\r\n {{ config.meta?.title ?? config.name }}\r\n </p>\r\n\r\n <form [formGroup]=\"form\" (ngSubmit)=\"handleExecuteAction()\">\r\n @for (step of config.steps; track $index) {\r\n <mobi-office-input-selector [step]=\"step\" [mstateModel]=\"form\" />\r\n }\r\n\r\n <div style=\"margin-top: 10px\">\r\n <mobi-office-button type=\"submit\">\r\n @if (isLoading) {\r\n <mobi-office-loader></mobi-office-loader>\r\n } @else {\r\n Submit\r\n }\r\n </mobi-office-button>\r\n </div>\r\n </form>\r\n</div>\r\n", styles: ["form{display:flex;flex-direction:column}label{margin-bottom:5px}\n"] }]
|
442
|
+
}], ctorParameters: () => [{ type: i3.FormBuilder }, { type: MstateAngularService }, { type: MstateAngularHelper }], propDecorators: { token: [{
|
443
|
+
type: Input,
|
444
|
+
args: [{ required: true }]
|
445
|
+
}], workflow: [{
|
446
|
+
type: Input,
|
447
|
+
args: [{ required: true }]
|
448
|
+
}], config: [{
|
449
|
+
type: Input,
|
450
|
+
args: [{ required: true }]
|
451
|
+
}], onExecuteAction: [{
|
452
|
+
type: Output
|
453
|
+
}], updateCustomFieldValue: [{
|
454
|
+
type: Input
|
455
|
+
}], instanceID: [{
|
456
|
+
type: Input
|
457
|
+
}], onSuccess: [{
|
458
|
+
type: Input
|
459
|
+
}] } });
|
460
|
+
|
461
|
+
class ActionCardComponent {
|
462
|
+
constructor() {
|
463
|
+
this.executeAction = new EventEmitter();
|
464
|
+
}
|
465
|
+
triggerExecuteAction() {
|
466
|
+
this.executeAction.emit(this.config);
|
467
|
+
}
|
468
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
469
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: ActionCardComponent, isStandalone: true, selector: "mobi-office-action-card", inputs: { config: "config" }, outputs: { executeAction: "executeAction" }, ngImport: i0, template: "<div class=\"card\">\n <div class=\"img\"></div>\n <div class=\"card-action\">\n <mobi-office-button (click)=\"triggerExecuteAction()\">\n perform\n </mobi-office-button>\n </div>\n</div>\n", styles: [""], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ButtonComponent, selector: "mobi-office-button", inputs: ["type", "onClick"] }] }); }
|
470
|
+
}
|
471
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ActionCardComponent, decorators: [{
|
472
|
+
type: Component,
|
473
|
+
args: [{ selector: 'mobi-office-action-card', standalone: true, imports: [CommonModule, ButtonComponent], template: "<div class=\"card\">\n <div class=\"img\"></div>\n <div class=\"card-action\">\n <mobi-office-button (click)=\"triggerExecuteAction()\">\n perform\n </mobi-office-button>\n </div>\n</div>\n" }]
|
474
|
+
}], propDecorators: { config: [{
|
475
|
+
type: Input,
|
476
|
+
args: [{ required: true }]
|
477
|
+
}], executeAction: [{
|
478
|
+
type: Output
|
479
|
+
}] } });
|
480
|
+
|
481
|
+
class ErrorCardComponent {
|
482
|
+
constructor() {
|
483
|
+
this.retry = new EventEmitter();
|
484
|
+
}
|
485
|
+
handleRetryError() {
|
486
|
+
this.retry.emit();
|
487
|
+
}
|
488
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ErrorCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
489
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: ErrorCardComponent, isStandalone: true, selector: "lib-error-card", inputs: { errors: "errors" }, outputs: { retry: "retry" }, ngImport: i0, template: "<div class=\"error\">\r\n <p style=\"font-size: 2rem; text-align: center\">Error</p>\r\n\r\n @for (message of errors; track message) {\r\n <small>\r\n {{ message }}\r\n </small>\r\n }\r\n <mobi-office-button (click)=\"handleRetryError()\">Retry</mobi-office-button>\r\n</div>\r\n", styles: [""], dependencies: [{ kind: "component", type: ButtonComponent, selector: "mobi-office-button", inputs: ["type", "onClick"] }] }); }
|
490
|
+
}
|
491
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: ErrorCardComponent, decorators: [{
|
492
|
+
type: Component,
|
493
|
+
args: [{ selector: 'lib-error-card', standalone: true, imports: [ButtonComponent], template: "<div class=\"error\">\r\n <p style=\"font-size: 2rem; text-align: center\">Error</p>\r\n\r\n @for (message of errors; track message) {\r\n <small>\r\n {{ message }}\r\n </small>\r\n }\r\n <mobi-office-button (click)=\"handleRetryError()\">Retry</mobi-office-button>\r\n</div>\r\n" }]
|
494
|
+
}], propDecorators: { errors: [{
|
495
|
+
type: Input,
|
496
|
+
args: [{ required: true }]
|
497
|
+
}], retry: [{
|
498
|
+
type: Output
|
499
|
+
}] } });
|
500
|
+
|
501
|
+
class WorkflowEndCardComponent {
|
502
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WorkflowEndCardComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
503
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.3.12", type: WorkflowEndCardComponent, isStandalone: true, selector: "lib-workflow-end-card", ngImport: i0, template: "<p>Workflow Ended</p>\r\n", styles: [""] }); }
|
504
|
+
}
|
505
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: WorkflowEndCardComponent, decorators: [{
|
506
|
+
type: Component,
|
507
|
+
args: [{ selector: 'lib-workflow-end-card', standalone: true, imports: [], template: "<p>Workflow Ended</p>\r\n" }]
|
508
|
+
}] });
|
509
|
+
|
510
|
+
class MstateAngularComponent {
|
511
|
+
constructor(mstateAngularHelper, mstateAngularService) {
|
512
|
+
this.mstateAngularHelper = mstateAngularHelper;
|
513
|
+
this.mstateAngularService = mstateAngularService;
|
514
|
+
this.token = '';
|
515
|
+
this.workflow = '';
|
516
|
+
/**
|
517
|
+
* @type {boolean}
|
518
|
+
* @default true
|
519
|
+
* @description Trigger if to start workflow.
|
520
|
+
*/
|
521
|
+
this.start = true;
|
522
|
+
//#region Variables & Events
|
523
|
+
this.isLoading = true;
|
524
|
+
this.errors = [];
|
525
|
+
this.errorMessages = [];
|
526
|
+
this.allowedActions = [];
|
527
|
+
}
|
528
|
+
ngOnInit() {
|
529
|
+
if (this.start)
|
530
|
+
this.setAllowedActions();
|
531
|
+
}
|
532
|
+
ngOnChanges(changes) {
|
533
|
+
if (this.mstateAngularHelper.detectChange(changes, [Variable.START])) {
|
534
|
+
if (this.start)
|
535
|
+
this.setAllowedActions();
|
536
|
+
}
|
537
|
+
}
|
538
|
+
//#endregion
|
539
|
+
//#region Handlers
|
540
|
+
setAllowedActions() {
|
541
|
+
this.isLoading = true;
|
542
|
+
if (this.instanceID) {
|
543
|
+
this.mstateAngularService
|
544
|
+
.getCurrentActionsWithInstanceID({
|
545
|
+
instanceID: this.instanceID,
|
546
|
+
token: this.token,
|
547
|
+
})
|
548
|
+
.pipe(catchError((err) => {
|
549
|
+
this.handleError({}, err.error?.errors);
|
550
|
+
throw err;
|
551
|
+
}), finalize(() => {
|
552
|
+
this.isLoading = false;
|
553
|
+
}))
|
554
|
+
.subscribe((data) => {
|
555
|
+
this.allowedActions = Object.values(data.data);
|
556
|
+
});
|
557
|
+
}
|
558
|
+
else {
|
559
|
+
this.mstateAngularService
|
560
|
+
.getCurrentActionsWithoutInstanceID({
|
561
|
+
workflow: this.workflow,
|
562
|
+
token: this.token,
|
563
|
+
})
|
564
|
+
.pipe(catchError((err) => {
|
565
|
+
this.handleError({}, err.error?.errors);
|
566
|
+
throw err;
|
567
|
+
}), finalize(() => {
|
568
|
+
this.isLoading = false;
|
569
|
+
}))
|
570
|
+
.subscribe((data) => {
|
571
|
+
this.allowedActions = Object.values(data.data);
|
572
|
+
});
|
573
|
+
}
|
574
|
+
}
|
575
|
+
handleExecuteAction(response) {
|
576
|
+
const { value, errors = [] } = response;
|
577
|
+
if (errors?.length) {
|
578
|
+
this.handleError(value, errors);
|
579
|
+
}
|
580
|
+
else {
|
581
|
+
this.allowedActions = value.actions;
|
582
|
+
}
|
583
|
+
if (value?.instanceID &&
|
584
|
+
value?.instanceID !== this.instanceID &&
|
585
|
+
!errors?.length) {
|
586
|
+
this.instanceID = value?.instanceID;
|
587
|
+
if (this.onInstanceChange) {
|
588
|
+
this.onInstanceChange(value?.instanceID);
|
589
|
+
}
|
590
|
+
}
|
591
|
+
}
|
592
|
+
handleActionExecution(config) {
|
593
|
+
this.allowedActions = [config];
|
594
|
+
}
|
595
|
+
handleRetryAction() {
|
596
|
+
if (this.allowedActions.length === 0) {
|
597
|
+
if (this.start)
|
598
|
+
this.setAllowedActions();
|
599
|
+
}
|
600
|
+
this.errors = [];
|
601
|
+
this.errorMessages = [];
|
602
|
+
}
|
603
|
+
handleError(value, errors) {
|
604
|
+
this.errors = errors;
|
605
|
+
value.instanceID = errors[0]
|
606
|
+
?.split("instanceID='")
|
607
|
+
?.pop()
|
608
|
+
?.replace("'", '');
|
609
|
+
this.errorMessages = this.errors.filter((e) => typeof e === 'string');
|
610
|
+
if (this.onError) {
|
611
|
+
this.onError(this.errors);
|
612
|
+
}
|
613
|
+
}
|
614
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularComponent, deps: [{ token: MstateAngularHelper }, { token: MstateAngularService }], target: i0.ɵɵFactoryTarget.Component }); }
|
615
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "17.3.12", type: MstateAngularComponent, isStandalone: true, selector: "mstate-angular", inputs: { token: "token", workflow: "workflow", instanceID: "instanceID", start: "start", theme: "theme", who: "who", onInstanceChange: "onInstanceChange", onSuccess: "onSuccess", onError: "onError", handleCustomField: "handleCustomField" }, providers: [MstateAngularHelper, MstateAngularService], usesOnChanges: true, ngImport: i0, template: "<div class=\"mstate-angular\">\n <img\n src=\"https://firebasestorage.googleapis.com/v0/b/mobioffice-dev.appspot.com/o/companies_logo%2Flogo.png?alt=media&token=e5f238f0-c373-4c76-9168-37fbe7da1de0\"\n alt=\"logo\"\n width=\"100%\"\n class=\"logo\"\n />\n\n @if (isLoading) {\n <mobi-office-loader />\n } @else if (errorMessages.length) {\n <lib-error-card [errors]=\"errorMessages\" (retry)=\"handleRetryAction()\" />\n } @else {\n @switch (allowedActions.length) {\n @case (0) {\n <lib-workflow-end-card />\n }\n @case (1) {\n <lib-action-form\n [workflow]=\"workflow\"\n [token]=\"token\"\n [instanceID]=\"instanceID\"\n [config]=\"allowedActions[0]\"\n (onExecuteAction)=\"handleExecuteAction($event)\"\n [updateCustomFieldValue]=\"handleCustomField\"\n [onSuccess]=\"onSuccess\"\n ></lib-action-form>\n }\n @default {\n @for (item of allowedActions; track $index) {\n <mobi-office-action-card\n [config]=\"item\"\n (executeAction)=\"handleActionExecution($event)\"\n />\n }\n }\n }\n }\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap\";.mstate-angular *{font-family:Poppins,serif}.mstate-angular ::ng-deep small{color:red}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container:after{background-image:linear-gradient(to right,rgba(0,0,0,.42) 0%,rgba(0,0,0,.42) 33%,transparent 0%);background-size:4px 1px;background-repeat:repeat-x}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-value{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-placeholder{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-arrow-wrapper .ng-arrow,.mstate-angular .ng-select.ng-select-disabled .ng-clear-wrapper{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container:after{border-color:#3f51b5;border-width:2px}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container.ng-appearance-outline:after,.mstate-angular .ng-select.ng-select-focused .ng-select-container.ng-appearance-outline:hover:after{border-color:#3f51b5;border-width:2px}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container .ng-value-container .ng-placeholder{display:none}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container .ng-arrow-wrapper .ng-arrow{color:#3f51b5}.mstate-angular ::ng-deep .ng-select .ng-has-value .ng-placeholder,.mstate-angular .ng-select.ng-select-filtered .ng-select-container .ng-placeholder{display:initial}.mstate-angular ::ng-deep .ng-select .ng-has-value .ng-placeholder,.mstate-angular .ng-select.ng-select-opened .ng-placeholder{display:none}.mstate-angular ::ng-deep .ng-select .ng-select-container{color:#000000de;align-items:center;min-height:45px;padding-bottom:3px;padding-inline:.5rem}.mstate-angular ::ng-deep .ng-select .ng-select-container:after{content:\"\";bottom:0;left:0;right:0;position:absolute;transition:border-color .3s cubic-bezier(.55,0,.55,.2)}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline{padding:0 .5em;min-height:60px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline:after{border:solid 1px rgba(0,0,0,.12);border-radius:5px;height:calc(100% - .5em);pointer-events:none;transition:border-color .3s cubic-bezier(.25,.8,.25,1)}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline:hover:after{border-color:#000000de;border-width:2px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline .ng-placeholder{padding:0 .25em;background-color:#fff;z-index:1}.mstate-angular ::ng-deep .ng-select-container{border:1px solid #ced4da;border-radius:5px;padding-left:5px}.mstate-angular ::ng-deep .ng-input input{height:100%;font-size:14px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline .ng-value{padding-left:.25em}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:stretch;padding:.4375em 0}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{position:absolute;color:#0000008a;transform-origin:left 0;transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1)}.mstate-angular ::ng-deep [dir=rtl] .ng-select .ng-select-container .ng-value-container .ng-placeholder{transform-origin:right 0}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input{bottom:.4375em}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container.ng-appearance-outline .ng-arrow-wrapper{bottom:17px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container.ng-appearance-outline .ng-clear-wrapper{bottom:14px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-arrow-wrapper{align-self:flex-end;bottom:9px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-clear-wrapper{align-self:flex-end;bottom:7px}.mstate-angular ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled .ng-select-container .ng-value-container .ng-value{background-color:#0000001f;color:#00000042}.mstate-angular ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled .ng-appearance-outline:after,.mstate-angular .ng-select.ng-select-multiple.ng-select-disabled .ng-appearance-outline:hover:after{background-image:none;border:dotted 1px rgba(0,0,0,.12)}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline.ng-has-value .ng-arrow-wrapper,.mstate-angular .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline.ng-has-value .ng-clear-wrapper{border-top:none}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline .ng-arrow-wrapper{top:0}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline .ng-clear-wrapper{top:4px}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:#3f51b5;border-radius:2px;color:#fff;padding:2px .75em;margin:.4375em .4375em 5px}.mstate-angular ::ng-deep [dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin:0 0 .4375em .4375em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#0000001f;color:#00000042}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:14px;font-weight:500}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{color:#ffffff8a;padding-right:5px}.mstate-angular ::ng-deep [dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{padding-left:5px;padding-right:0}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{color:#ffffffde}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{line-height:1.375em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value{align-items:center}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-value-container{padding-bottom:0;padding-top:.1875em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-clear-wrapper,.mstate-angular .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-arrow-wrapper{border-top:.84375em solid rgba(0,0,0,0)}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper{color:#0000008a}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper:hover{color:#000000de}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper:focus{color:#000000de;outline:none}.mstate-angular ::ng-deep .ng-select .ng-arrow-wrapper{bottom:2px}.mstate-angular ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;margin:0 4px;color:#0000008a}.mstate-angular ::ng-deep .ng-select .ng-spinner-zone{top:3px}.mstate-angular ::ng-deep .ng-dropdown-panel{background:#fff;left:0}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-top{bottom:calc(100% - .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-right{left:100%;top:calc(0% + .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f;margin-left:4px}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-bottom{top:100%;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-left{left:calc(-100% - 4px);top:calc(0% + .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.multiple .ng-option.selected{background:#fff}.mstate-angular ::ng-deep .ng-dropdown-panel.multiple .ng-option.marked{background:#0000000a}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-header{padding:0 16px;line-height:3em;min-height:3em}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid rgba(0,0,0,.12);padding:0 16px;line-height:3em;min-height:3em}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;cursor:pointer;line-height:3em;height:3em;padding:0 16px;color:#0000008a;font-weight:500}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background:#0000000a}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background:#0000001f;color:#3f51b5}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{line-height:3em;min-height:3em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 16px;text-decoration:none;position:relative;color:#000000de;text-align:left}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{text-align:right}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background:#0000000a;color:#000000de}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background:#0000001f;color:#3f51b5}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#00000061}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:32px}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:32px;padding-left:0}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-right:5px;font-size:80%;font-weight:400;color:#00000061}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}.mstate-angular .logo{width:70%;margin:auto;max-width:300px;margin-block:12px;display:flex}.mstate-angular ::ng-deep .form-control{display:block;min-height:35px;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;outline:none;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.mstate-angular ::ng-deep .form-group{padding-block:8px}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "component", type: ActionFormComponent, selector: "lib-action-form", inputs: ["token", "workflow", "config", "updateCustomFieldValue", "instanceID", "onSuccess"], outputs: ["onExecuteAction"] }, { kind: "component", type: ActionCardComponent, selector: "mobi-office-action-card", inputs: ["config"], outputs: ["executeAction"] }, { kind: "component", type: LoaderComponent, selector: "mobi-office-loader" }, { kind: "component", type: ErrorCardComponent, selector: "lib-error-card", inputs: ["errors"], outputs: ["retry"] }, { kind: "component", type: WorkflowEndCardComponent, selector: "lib-workflow-end-card" }] }); }
|
616
|
+
}
|
617
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularComponent, decorators: [{
|
618
|
+
type: Component,
|
619
|
+
args: [{ selector: 'mstate-angular', standalone: true, imports: [
|
620
|
+
CommonModule,
|
621
|
+
ActionFormComponent,
|
622
|
+
ActionCardComponent,
|
623
|
+
LoaderComponent,
|
624
|
+
ErrorCardComponent,
|
625
|
+
WorkflowEndCardComponent,
|
626
|
+
], providers: [MstateAngularHelper, MstateAngularService], template: "<div class=\"mstate-angular\">\n <img\n src=\"https://firebasestorage.googleapis.com/v0/b/mobioffice-dev.appspot.com/o/companies_logo%2Flogo.png?alt=media&token=e5f238f0-c373-4c76-9168-37fbe7da1de0\"\n alt=\"logo\"\n width=\"100%\"\n class=\"logo\"\n />\n\n @if (isLoading) {\n <mobi-office-loader />\n } @else if (errorMessages.length) {\n <lib-error-card [errors]=\"errorMessages\" (retry)=\"handleRetryAction()\" />\n } @else {\n @switch (allowedActions.length) {\n @case (0) {\n <lib-workflow-end-card />\n }\n @case (1) {\n <lib-action-form\n [workflow]=\"workflow\"\n [token]=\"token\"\n [instanceID]=\"instanceID\"\n [config]=\"allowedActions[0]\"\n (onExecuteAction)=\"handleExecuteAction($event)\"\n [updateCustomFieldValue]=\"handleCustomField\"\n [onSuccess]=\"onSuccess\"\n ></lib-action-form>\n }\n @default {\n @for (item of allowedActions; track $index) {\n <mobi-office-action-card\n [config]=\"item\"\n (executeAction)=\"handleActionExecution($event)\"\n />\n }\n }\n }\n }\n</div>\n", styles: ["@import\"https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap\";.mstate-angular *{font-family:Poppins,serif}.mstate-angular ::ng-deep small{color:red}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container:after{background-image:linear-gradient(to right,rgba(0,0,0,.42) 0%,rgba(0,0,0,.42) 33%,transparent 0%);background-size:4px 1px;background-repeat:repeat-x}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-value{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-select-container .ng-value-container .ng-placeholder{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-disabled .ng-arrow-wrapper .ng-arrow,.mstate-angular .ng-select.ng-select-disabled .ng-clear-wrapper{color:#00000061}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container:after{border-color:#3f51b5;border-width:2px}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container.ng-appearance-outline:after,.mstate-angular .ng-select.ng-select-focused .ng-select-container.ng-appearance-outline:hover:after{border-color:#3f51b5;border-width:2px}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container .ng-value-container .ng-placeholder{display:none}.mstate-angular ::ng-deep .ng-select.ng-select-focused .ng-select-container .ng-arrow-wrapper .ng-arrow{color:#3f51b5}.mstate-angular ::ng-deep .ng-select .ng-has-value .ng-placeholder,.mstate-angular .ng-select.ng-select-filtered .ng-select-container .ng-placeholder{display:initial}.mstate-angular ::ng-deep .ng-select .ng-has-value .ng-placeholder,.mstate-angular .ng-select.ng-select-opened .ng-placeholder{display:none}.mstate-angular ::ng-deep .ng-select .ng-select-container{color:#000000de;align-items:center;min-height:45px;padding-bottom:3px;padding-inline:.5rem}.mstate-angular ::ng-deep .ng-select .ng-select-container:after{content:\"\";bottom:0;left:0;right:0;position:absolute;transition:border-color .3s cubic-bezier(.55,0,.55,.2)}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline{padding:0 .5em;min-height:60px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline:after{border:solid 1px rgba(0,0,0,.12);border-radius:5px;height:calc(100% - .5em);pointer-events:none;transition:border-color .3s cubic-bezier(.25,.8,.25,1)}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline:hover:after{border-color:#000000de;border-width:2px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline .ng-placeholder{padding:0 .25em;background-color:#fff;z-index:1}.mstate-angular ::ng-deep .ng-select-container{border:1px solid #ced4da;border-radius:5px;padding-left:5px}.mstate-angular ::ng-deep .ng-input input{height:100%;font-size:14px}.mstate-angular ::ng-deep .ng-select .ng-select-container.ng-appearance-outline .ng-value{padding-left:.25em}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container{align-items:stretch;padding:.4375em 0}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-placeholder{position:absolute;color:#0000008a;transform-origin:left 0;transition:transform .4s cubic-bezier(.25,.8,.25,1),color .4s cubic-bezier(.25,.8,.25,1),width .4s cubic-bezier(.25,.8,.25,1)}.mstate-angular ::ng-deep [dir=rtl] .ng-select .ng-select-container .ng-value-container .ng-placeholder{transform-origin:right 0}.mstate-angular ::ng-deep .ng-select .ng-select-container .ng-value-container .ng-input{bottom:.4375em}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container.ng-appearance-outline .ng-arrow-wrapper{bottom:17px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container.ng-appearance-outline .ng-clear-wrapper{bottom:14px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-arrow-wrapper{align-self:flex-end;bottom:9px}.mstate-angular ::ng-deep .ng-select.ng-select-single .ng-select-container .ng-clear-wrapper{align-self:flex-end;bottom:7px}.mstate-angular ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled .ng-select-container .ng-value-container .ng-value{background-color:#0000001f;color:#00000042}.mstate-angular ::ng-deep .ng-select.ng-select-multiple.ng-select-disabled .ng-appearance-outline:after,.mstate-angular .ng-select.ng-select-multiple.ng-select-disabled .ng-appearance-outline:hover:after{background-image:none;border:dotted 1px rgba(0,0,0,.12)}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline.ng-has-value .ng-arrow-wrapper,.mstate-angular .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline.ng-has-value .ng-clear-wrapper{border-top:none}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline .ng-arrow-wrapper{top:0}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-appearance-outline .ng-clear-wrapper{top:4px}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{background-color:#3f51b5;border-radius:2px;color:#fff;padding:2px .75em;margin:.4375em .4375em 5px}.mstate-angular ::ng-deep [dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value{margin:0 0 .4375em .4375em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value.ng-value-disabled{background-color:#0000001f;color:#00000042}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-label{font-size:14px;font-weight:500}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{color:#ffffff8a;padding-right:5px}.mstate-angular ::ng-deep [dir=rtl] .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon{padding-left:5px;padding-right:0}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-value .ng-value-icon:hover{color:#ffffffde}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container .ng-value-container .ng-input{line-height:1.375em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value{align-items:center}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-value-container{padding-bottom:0;padding-top:.1875em}.mstate-angular ::ng-deep .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-clear-wrapper,.mstate-angular .ng-select.ng-select-multiple .ng-select-container.ng-has-value .ng-arrow-wrapper{border-top:.84375em solid rgba(0,0,0,0)}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper{color:#0000008a}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper:hover{color:#000000de}.mstate-angular ::ng-deep .ng-select .ng-clear-wrapper:focus{color:#000000de;outline:none}.mstate-angular ::ng-deep .ng-select .ng-arrow-wrapper{bottom:2px}.mstate-angular ::ng-deep .ng-select .ng-arrow-wrapper .ng-arrow{border-left:5px solid rgba(0,0,0,0);border-right:5px solid rgba(0,0,0,0);border-top:5px solid;margin:0 4px;color:#0000008a}.mstate-angular ::ng-deep .ng-select .ng-spinner-zone{top:3px}.mstate-angular ::ng-deep .ng-dropdown-panel{background:#fff;left:0}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-top{bottom:calc(100% - .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-right{left:100%;top:calc(0% + .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f;margin-left:4px}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-bottom{top:100%;box-shadow:0 5px 5px -3px #0003,0 8px 10px 1px #00000024,0 3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.ng-select-left{left:calc(-100% - 4px);top:calc(0% + .84375em);box-shadow:0 -5px 5px -3px #0003,0 -8px 10px 1px #00000024,0 -3px 14px 2px #0000001f}.mstate-angular ::ng-deep .ng-dropdown-panel.multiple .ng-option.selected{background:#fff}.mstate-angular ::ng-deep .ng-dropdown-panel.multiple .ng-option.marked{background:#0000000a}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-header{padding:0 16px;line-height:3em;min-height:3em}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-footer{border-top:1px solid rgba(0,0,0,.12);padding:0 16px;line-height:3em;min-height:3em}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup{-webkit-user-select:none;user-select:none;cursor:pointer;line-height:3em;height:3em;padding:0 16px;color:#0000008a;font-weight:500}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-marked{background:#0000000a}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-disabled{cursor:default}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-optgroup.ng-option-selected{background:#0000001f;color:#3f51b5}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{line-height:3em;min-height:3em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;padding:0 16px;text-decoration:none;position:relative;color:#000000de;text-align:left}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option{text-align:right}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-marked{background:#0000000a;color:#000000de}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-selected{background:#0000001f;color:#3f51b5}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-disabled{color:#00000061}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-left:32px}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option.ng-option-child{padding-right:32px;padding-left:0}.mstate-angular ::ng-deep .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-right:5px;font-size:80%;font-weight:400;color:#00000061}.mstate-angular ::ng-deep [dir=rtl] .ng-dropdown-panel .ng-dropdown-panel-items .ng-option .ng-tag-label{padding-left:5px;padding-right:0}.mstate-angular .logo{width:70%;margin:auto;max-width:300px;margin-block:12px;display:flex}.mstate-angular ::ng-deep .form-control{display:block;min-height:35px;padding:.375rem .75rem;font-size:1rem;font-weight:400;line-height:1.5;color:#495057;outline:none;background-color:#fff;background-clip:padding-box;border:1px solid #ced4da;border-radius:.25rem;transition:border-color .15s ease-in-out,box-shadow .15s ease-in-out}.mstate-angular ::ng-deep .form-group{padding-block:8px}\n"] }]
|
627
|
+
}], ctorParameters: () => [{ type: MstateAngularHelper }, { type: MstateAngularService }], propDecorators: { token: [{
|
628
|
+
type: Input,
|
629
|
+
args: [{ required: true }]
|
630
|
+
}], workflow: [{
|
631
|
+
type: Input,
|
632
|
+
args: [{ required: true }]
|
633
|
+
}], instanceID: [{
|
634
|
+
type: Input
|
635
|
+
}], start: [{
|
636
|
+
type: Input
|
637
|
+
}], theme: [{
|
638
|
+
type: Input
|
639
|
+
}], who: [{
|
640
|
+
type: Input
|
641
|
+
}], onInstanceChange: [{
|
642
|
+
type: Input
|
643
|
+
}], onSuccess: [{
|
644
|
+
type: Input
|
645
|
+
}], onError: [{
|
646
|
+
type: Input
|
647
|
+
}], handleCustomField: [{
|
648
|
+
type: Input
|
649
|
+
}] } });
|
650
|
+
|
651
|
+
class MstateAngularModule {
|
652
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
653
|
+
static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularModule, imports: [CommonModule, MstateAngularComponent, ReactiveFormsModule], exports: [MstateAngularComponent] }); }
|
654
|
+
static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularModule, imports: [CommonModule, MstateAngularComponent, ReactiveFormsModule] }); }
|
655
|
+
}
|
656
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.12", ngImport: i0, type: MstateAngularModule, decorators: [{
|
657
|
+
type: NgModule,
|
658
|
+
args: [{
|
659
|
+
imports: [CommonModule, MstateAngularComponent, ReactiveFormsModule], // Import other necessary modules like CommonModule
|
660
|
+
exports: [MstateAngularComponent], // Export the pipe so it can be used externally
|
661
|
+
}]
|
662
|
+
}] });
|
663
|
+
|
664
|
+
/*
|
665
|
+
* Public API Surface of mstate-angular
|
666
|
+
*/
|
667
|
+
|
668
|
+
/**
|
669
|
+
* Generated bundle index. Do not edit.
|
670
|
+
*/
|
671
|
+
|
672
|
+
export { MstateAngularComponent, MstateAngularModule };
|
673
|
+
//# sourceMappingURL=mstate-angular.mjs.map
|