@ngxs/form-plugin 3.8.2-dev.master-0fd1fe5 → 3.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/ngxs-form-plugin.umd.js +399 -0
- package/bundles/ngxs-form-plugin.umd.js.map +1 -0
- package/esm2015/src/directive.js +176 -0
- package/esm2015/src/form.module.js +32 -0
- package/esm2015/src/form.plugin.js +61 -0
- package/esm2015/src/public_api.js +5 -0
- package/fesm2015/{ngxs-form-plugin.mjs → ngxs-form-plugin.js} +23 -24
- package/fesm2015/ngxs-form-plugin.js.map +1 -0
- package/ngxs-form-plugin.d.ts +5 -0
- package/package.json +12 -24
- package/src/directive.d.ts +3 -3
- package/src/form.module.d.ts +3 -3
- package/src/public_api.d.ts +2 -2
- package/esm2020/src/directive.mjs +0 -176
- package/esm2020/src/form.module.mjs +0 -33
- package/esm2020/src/form.plugin.mjs +0 -64
- package/esm2020/src/public_api.mjs +0 -5
- package/fesm2015/ngxs-form-plugin.mjs.map +0 -1
- package/fesm2020/ngxs-form-plugin.mjs +0 -334
- package/fesm2020/ngxs-form-plugin.mjs.map +0 -1
- /package/{esm2020/index.mjs → esm2015/index.js} +0 -0
- /package/{esm2020/ngxs-form-plugin.mjs → esm2015/ngxs-form-plugin.js} +0 -0
- /package/{esm2020/src/actions.mjs → esm2015/src/actions.js} +0 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
(function (global, factory) {
|
|
2
|
+
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('@angular/core'), require('@ngxs/store'), require('@angular/forms'), require('rxjs'), require('rxjs/operators')) :
|
|
3
|
+
typeof define === 'function' && define.amd ? define('@ngxs/form-plugin', ['exports', '@angular/core', '@ngxs/store', '@angular/forms', 'rxjs', 'rxjs/operators'], factory) :
|
|
4
|
+
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.ngxs = global.ngxs || {}, global.ngxs["form-plugin"] = {}), global.ng.core, global["ngxs-store"], global.ng.forms, global.rxjs, global.rxjs.operators));
|
|
5
|
+
})(this, (function (exports, i0, i1, i2, rxjs, operators) { 'use strict';
|
|
6
|
+
|
|
7
|
+
function _interopNamespace(e) {
|
|
8
|
+
if (e && e.__esModule) return e;
|
|
9
|
+
var n = Object.create(null);
|
|
10
|
+
if (e) {
|
|
11
|
+
Object.keys(e).forEach(function (k) {
|
|
12
|
+
if (k !== 'default') {
|
|
13
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
14
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
15
|
+
enumerable: true,
|
|
16
|
+
get: function () { return e[k]; }
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
n["default"] = e;
|
|
22
|
+
return Object.freeze(n);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var i0__namespace = /*#__PURE__*/_interopNamespace(i0);
|
|
26
|
+
var i1__namespace = /*#__PURE__*/_interopNamespace(i1);
|
|
27
|
+
var i2__namespace = /*#__PURE__*/_interopNamespace(i2);
|
|
28
|
+
|
|
29
|
+
var UpdateFormStatus = /** @class */ (function () {
|
|
30
|
+
function UpdateFormStatus(payload) {
|
|
31
|
+
this.payload = payload;
|
|
32
|
+
}
|
|
33
|
+
return UpdateFormStatus;
|
|
34
|
+
}());
|
|
35
|
+
UpdateFormStatus.type = '[Forms] Update Form Status';
|
|
36
|
+
var UpdateFormValue = /** @class */ (function () {
|
|
37
|
+
function UpdateFormValue(payload) {
|
|
38
|
+
this.payload = payload;
|
|
39
|
+
}
|
|
40
|
+
return UpdateFormValue;
|
|
41
|
+
}());
|
|
42
|
+
UpdateFormValue.type = '[Forms] Update Form Value';
|
|
43
|
+
var UpdateForm = /** @class */ (function () {
|
|
44
|
+
function UpdateForm(payload) {
|
|
45
|
+
this.payload = payload;
|
|
46
|
+
}
|
|
47
|
+
return UpdateForm;
|
|
48
|
+
}());
|
|
49
|
+
UpdateForm.type = '[Forms] Update Form';
|
|
50
|
+
var UpdateFormDirty = /** @class */ (function () {
|
|
51
|
+
function UpdateFormDirty(payload) {
|
|
52
|
+
this.payload = payload;
|
|
53
|
+
}
|
|
54
|
+
return UpdateFormDirty;
|
|
55
|
+
}());
|
|
56
|
+
UpdateFormDirty.type = '[Forms] Update Form Dirty';
|
|
57
|
+
var SetFormDirty = /** @class */ (function () {
|
|
58
|
+
function SetFormDirty(payload) {
|
|
59
|
+
this.payload = payload;
|
|
60
|
+
}
|
|
61
|
+
return SetFormDirty;
|
|
62
|
+
}());
|
|
63
|
+
SetFormDirty.type = '[Forms] Set Form Dirty';
|
|
64
|
+
var SetFormPristine = /** @class */ (function () {
|
|
65
|
+
function SetFormPristine(payload) {
|
|
66
|
+
this.payload = payload;
|
|
67
|
+
}
|
|
68
|
+
return SetFormPristine;
|
|
69
|
+
}());
|
|
70
|
+
SetFormPristine.type = '[Forms] Set Form Pristine';
|
|
71
|
+
var UpdateFormErrors = /** @class */ (function () {
|
|
72
|
+
function UpdateFormErrors(payload) {
|
|
73
|
+
this.payload = payload;
|
|
74
|
+
}
|
|
75
|
+
return UpdateFormErrors;
|
|
76
|
+
}());
|
|
77
|
+
UpdateFormErrors.type = '[Forms] Update Form Errors';
|
|
78
|
+
var SetFormDisabled = /** @class */ (function () {
|
|
79
|
+
function SetFormDisabled(payload) {
|
|
80
|
+
this.payload = payload;
|
|
81
|
+
}
|
|
82
|
+
return SetFormDisabled;
|
|
83
|
+
}());
|
|
84
|
+
SetFormDisabled.type = '[Forms] Set Form Disabled';
|
|
85
|
+
var SetFormEnabled = /** @class */ (function () {
|
|
86
|
+
function SetFormEnabled(payload) {
|
|
87
|
+
this.payload = payload;
|
|
88
|
+
}
|
|
89
|
+
return SetFormEnabled;
|
|
90
|
+
}());
|
|
91
|
+
SetFormEnabled.type = '[Forms] Set Form Enabled';
|
|
92
|
+
var ResetForm = /** @class */ (function () {
|
|
93
|
+
function ResetForm(payload) {
|
|
94
|
+
this.payload = payload;
|
|
95
|
+
}
|
|
96
|
+
return ResetForm;
|
|
97
|
+
}());
|
|
98
|
+
ResetForm.type = '[Forms] Reset Form';
|
|
99
|
+
|
|
100
|
+
var NgxsFormPlugin = /** @class */ (function () {
|
|
101
|
+
function NgxsFormPlugin() {
|
|
102
|
+
}
|
|
103
|
+
NgxsFormPlugin.prototype.handle = function (state, event, next) {
|
|
104
|
+
var type = i1.getActionTypeFromInstance(event);
|
|
105
|
+
var nextState = state;
|
|
106
|
+
if (type === UpdateFormValue.type || type === UpdateForm.type || type === ResetForm.type) {
|
|
107
|
+
var value = event.payload.value;
|
|
108
|
+
var payloadValue = Array.isArray(value)
|
|
109
|
+
? value.slice()
|
|
110
|
+
: isObjectLike(value)
|
|
111
|
+
? Object.assign({}, value) : value;
|
|
112
|
+
var path = this.joinPathWithPropertyPath(event);
|
|
113
|
+
nextState = i1.setValue(nextState, path, payloadValue);
|
|
114
|
+
}
|
|
115
|
+
if (type === ResetForm.type) {
|
|
116
|
+
var model = i1.getValue(nextState, event.payload.path + ".model");
|
|
117
|
+
nextState = i1.setValue(nextState, "" + event.payload.path, { model: model });
|
|
118
|
+
}
|
|
119
|
+
if (type === UpdateFormStatus.type || type === UpdateForm.type) {
|
|
120
|
+
nextState = i1.setValue(nextState, event.payload.path + ".status", event.payload.status);
|
|
121
|
+
}
|
|
122
|
+
if (type === UpdateFormErrors.type || type === UpdateForm.type) {
|
|
123
|
+
nextState = i1.setValue(nextState, event.payload.path + ".errors", Object.assign({}, event.payload.errors));
|
|
124
|
+
}
|
|
125
|
+
if (type === UpdateFormDirty.type || type === UpdateForm.type) {
|
|
126
|
+
nextState = i1.setValue(nextState, event.payload.path + ".dirty", event.payload.dirty);
|
|
127
|
+
}
|
|
128
|
+
if (type === SetFormDirty.type) {
|
|
129
|
+
nextState = i1.setValue(nextState, event.payload + ".dirty", true);
|
|
130
|
+
}
|
|
131
|
+
if (type === SetFormPristine.type) {
|
|
132
|
+
nextState = i1.setValue(nextState, event.payload + ".dirty", false);
|
|
133
|
+
}
|
|
134
|
+
if (type === SetFormDisabled.type) {
|
|
135
|
+
nextState = i1.setValue(nextState, event.payload + ".disabled", true);
|
|
136
|
+
}
|
|
137
|
+
if (type === SetFormEnabled.type) {
|
|
138
|
+
nextState = i1.setValue(nextState, event.payload + ".disabled", false);
|
|
139
|
+
}
|
|
140
|
+
return next(nextState, event);
|
|
141
|
+
};
|
|
142
|
+
NgxsFormPlugin.prototype.joinPathWithPropertyPath = function (_a) {
|
|
143
|
+
var payload = _a.payload;
|
|
144
|
+
var path = payload.path + ".model";
|
|
145
|
+
if (payload.propertyPath) {
|
|
146
|
+
path += "." + payload.propertyPath;
|
|
147
|
+
}
|
|
148
|
+
return path;
|
|
149
|
+
};
|
|
150
|
+
return NgxsFormPlugin;
|
|
151
|
+
}());
|
|
152
|
+
/** @nocollapse */ NgxsFormPlugin.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: NgxsFormPlugin, deps: [], target: i0__namespace.ɵɵFactoryTarget.Injectable });
|
|
153
|
+
/** @nocollapse */ NgxsFormPlugin.ɵprov = i0__namespace.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: NgxsFormPlugin });
|
|
154
|
+
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: NgxsFormPlugin, decorators: [{
|
|
155
|
+
type: i0.Injectable
|
|
156
|
+
}] });
|
|
157
|
+
function isObjectLike(target) {
|
|
158
|
+
return target !== null && typeof target === 'object';
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
var FormDirective = /** @class */ (function () {
|
|
162
|
+
function FormDirective(_actions$, _store, _formGroupDirective, _cd) {
|
|
163
|
+
this._actions$ = _actions$;
|
|
164
|
+
this._store = _store;
|
|
165
|
+
this._formGroupDirective = _formGroupDirective;
|
|
166
|
+
this._cd = _cd;
|
|
167
|
+
this.path = null;
|
|
168
|
+
this._debounce = 100;
|
|
169
|
+
this._clearDestroy = false;
|
|
170
|
+
this._updating = false;
|
|
171
|
+
this._destroy$ = new rxjs.Subject();
|
|
172
|
+
}
|
|
173
|
+
Object.defineProperty(FormDirective.prototype, "debounce", {
|
|
174
|
+
get: function () {
|
|
175
|
+
return this._debounce;
|
|
176
|
+
},
|
|
177
|
+
set: function (debounce) {
|
|
178
|
+
this._debounce = Number(debounce);
|
|
179
|
+
},
|
|
180
|
+
enumerable: false,
|
|
181
|
+
configurable: true
|
|
182
|
+
});
|
|
183
|
+
Object.defineProperty(FormDirective.prototype, "clearDestroy", {
|
|
184
|
+
get: function () {
|
|
185
|
+
return this._clearDestroy;
|
|
186
|
+
},
|
|
187
|
+
set: function (val) {
|
|
188
|
+
this._clearDestroy = val != null && "" + val !== 'false';
|
|
189
|
+
},
|
|
190
|
+
enumerable: false,
|
|
191
|
+
configurable: true
|
|
192
|
+
});
|
|
193
|
+
FormDirective.prototype.ngOnInit = function () {
|
|
194
|
+
var _this = this;
|
|
195
|
+
this._actions$
|
|
196
|
+
.pipe(i1.ofActionDispatched(ResetForm), operators.filter(function (action) { return action.payload.path === _this.path; }), operators.takeUntil(this._destroy$))
|
|
197
|
+
.subscribe(function (_a) {
|
|
198
|
+
var value = _a.payload.value;
|
|
199
|
+
_this.form.reset(value);
|
|
200
|
+
_this.updateFormStateWithRawValue(true);
|
|
201
|
+
_this._cd.markForCheck();
|
|
202
|
+
});
|
|
203
|
+
this.getStateStream(this.path + ".model").subscribe(function (model) {
|
|
204
|
+
if (_this._updating || !model) {
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
_this.form.patchValue(model);
|
|
208
|
+
_this._cd.markForCheck();
|
|
209
|
+
});
|
|
210
|
+
this.getStateStream(this.path + ".dirty").subscribe(function (dirty) {
|
|
211
|
+
if (_this.form.dirty === dirty || typeof dirty !== 'boolean') {
|
|
212
|
+
return;
|
|
213
|
+
}
|
|
214
|
+
if (dirty) {
|
|
215
|
+
_this.form.markAsDirty();
|
|
216
|
+
}
|
|
217
|
+
else {
|
|
218
|
+
_this.form.markAsPristine();
|
|
219
|
+
}
|
|
220
|
+
_this._cd.markForCheck();
|
|
221
|
+
});
|
|
222
|
+
// On first state change, sync form model, status and dirty with state
|
|
223
|
+
this._store
|
|
224
|
+
.selectOnce(function (state) { return i1.getValue(state, _this.path); })
|
|
225
|
+
.subscribe(function () {
|
|
226
|
+
_this._store.dispatch([
|
|
227
|
+
new UpdateFormValue({
|
|
228
|
+
path: _this.path,
|
|
229
|
+
value: _this.form.getRawValue()
|
|
230
|
+
}),
|
|
231
|
+
new UpdateFormStatus({
|
|
232
|
+
path: _this.path,
|
|
233
|
+
status: _this.form.status
|
|
234
|
+
}),
|
|
235
|
+
new UpdateFormDirty({
|
|
236
|
+
path: _this.path,
|
|
237
|
+
dirty: _this.form.dirty
|
|
238
|
+
})
|
|
239
|
+
]);
|
|
240
|
+
});
|
|
241
|
+
this.getStateStream(this.path + ".disabled").subscribe(function (disabled) {
|
|
242
|
+
if (_this.form.disabled === disabled || typeof disabled !== 'boolean') {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
if (disabled) {
|
|
246
|
+
_this.form.disable();
|
|
247
|
+
}
|
|
248
|
+
else {
|
|
249
|
+
_this.form.enable();
|
|
250
|
+
}
|
|
251
|
+
_this._cd.markForCheck();
|
|
252
|
+
});
|
|
253
|
+
this._formGroupDirective
|
|
254
|
+
.valueChanges.pipe(operators.distinctUntilChanged(function (a, b) { return JSON.stringify(a) === JSON.stringify(b); }), this.debounceChange())
|
|
255
|
+
.subscribe(function () {
|
|
256
|
+
_this.updateFormStateWithRawValue();
|
|
257
|
+
});
|
|
258
|
+
this._formGroupDirective
|
|
259
|
+
.statusChanges.pipe(operators.distinctUntilChanged(), this.debounceChange())
|
|
260
|
+
.subscribe(function (status) {
|
|
261
|
+
_this._store.dispatch(new UpdateFormStatus({
|
|
262
|
+
status: status,
|
|
263
|
+
path: _this.path
|
|
264
|
+
}));
|
|
265
|
+
});
|
|
266
|
+
};
|
|
267
|
+
FormDirective.prototype.updateFormStateWithRawValue = function (withFormStatus) {
|
|
268
|
+
var _this = this;
|
|
269
|
+
if (this._updating)
|
|
270
|
+
return;
|
|
271
|
+
var value = this._formGroupDirective.control.getRawValue();
|
|
272
|
+
var actions = [
|
|
273
|
+
new UpdateFormValue({
|
|
274
|
+
path: this.path,
|
|
275
|
+
value: value
|
|
276
|
+
}),
|
|
277
|
+
new UpdateFormDirty({
|
|
278
|
+
path: this.path,
|
|
279
|
+
dirty: this._formGroupDirective.dirty
|
|
280
|
+
}),
|
|
281
|
+
new UpdateFormErrors({
|
|
282
|
+
path: this.path,
|
|
283
|
+
errors: this._formGroupDirective.errors
|
|
284
|
+
})
|
|
285
|
+
];
|
|
286
|
+
if (withFormStatus) {
|
|
287
|
+
actions.push(new UpdateFormStatus({
|
|
288
|
+
path: this.path,
|
|
289
|
+
status: this._formGroupDirective.status
|
|
290
|
+
}));
|
|
291
|
+
}
|
|
292
|
+
this._updating = true;
|
|
293
|
+
this._store.dispatch(actions).subscribe({
|
|
294
|
+
error: function () { return (_this._updating = false); },
|
|
295
|
+
complete: function () { return (_this._updating = false); }
|
|
296
|
+
});
|
|
297
|
+
};
|
|
298
|
+
FormDirective.prototype.ngOnDestroy = function () {
|
|
299
|
+
this._destroy$.next();
|
|
300
|
+
if (this.clearDestroy) {
|
|
301
|
+
this._store.dispatch(new UpdateForm({
|
|
302
|
+
path: this.path,
|
|
303
|
+
value: null,
|
|
304
|
+
dirty: null,
|
|
305
|
+
status: null,
|
|
306
|
+
errors: null
|
|
307
|
+
}));
|
|
308
|
+
}
|
|
309
|
+
};
|
|
310
|
+
FormDirective.prototype.debounceChange = function () {
|
|
311
|
+
var _this = this;
|
|
312
|
+
var skipDebounceTime = this._formGroupDirective.control.updateOn !== 'change' || this._debounce < 0;
|
|
313
|
+
return skipDebounceTime
|
|
314
|
+
? function (change) { return change.pipe(operators.takeUntil(_this._destroy$)); }
|
|
315
|
+
: function (change) { return change.pipe(operators.debounceTime(_this._debounce), operators.takeUntil(_this._destroy$)); };
|
|
316
|
+
};
|
|
317
|
+
Object.defineProperty(FormDirective.prototype, "form", {
|
|
318
|
+
get: function () {
|
|
319
|
+
return this._formGroupDirective.form;
|
|
320
|
+
},
|
|
321
|
+
enumerable: false,
|
|
322
|
+
configurable: true
|
|
323
|
+
});
|
|
324
|
+
FormDirective.prototype.getStateStream = function (path) {
|
|
325
|
+
return this._store.select(function (state) { return i1.getValue(state, path); }).pipe(operators.takeUntil(this._destroy$));
|
|
326
|
+
};
|
|
327
|
+
return FormDirective;
|
|
328
|
+
}());
|
|
329
|
+
/** @nocollapse */ FormDirective.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FormDirective, deps: [{ token: i1__namespace.Actions }, { token: i1__namespace.Store }, { token: i2__namespace.FormGroupDirective }, { token: i0__namespace.ChangeDetectorRef }], target: i0__namespace.ɵɵFactoryTarget.Directive });
|
|
330
|
+
/** @nocollapse */ FormDirective.ɵdir = i0__namespace.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: FormDirective, selector: "[ngxsForm]", inputs: { path: ["ngxsForm", "path"], debounce: ["ngxsFormDebounce", "debounce"], clearDestroy: ["ngxsFormClearOnDestroy", "clearDestroy"] }, ngImport: i0__namespace });
|
|
331
|
+
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: FormDirective, decorators: [{
|
|
332
|
+
type: i0.Directive,
|
|
333
|
+
args: [{ selector: '[ngxsForm]' }]
|
|
334
|
+
}], ctorParameters: function () { return [{ type: i1__namespace.Actions }, { type: i1__namespace.Store }, { type: i2__namespace.FormGroupDirective }, { type: i0__namespace.ChangeDetectorRef }]; }, propDecorators: { path: [{
|
|
335
|
+
type: i0.Input,
|
|
336
|
+
args: ['ngxsForm']
|
|
337
|
+
}], debounce: [{
|
|
338
|
+
type: i0.Input,
|
|
339
|
+
args: ['ngxsFormDebounce']
|
|
340
|
+
}], clearDestroy: [{
|
|
341
|
+
type: i0.Input,
|
|
342
|
+
args: ['ngxsFormClearOnDestroy']
|
|
343
|
+
}] } });
|
|
344
|
+
|
|
345
|
+
var NgxsFormPluginModule = /** @class */ (function () {
|
|
346
|
+
function NgxsFormPluginModule() {
|
|
347
|
+
}
|
|
348
|
+
NgxsFormPluginModule.forRoot = function () {
|
|
349
|
+
return {
|
|
350
|
+
ngModule: NgxsFormPluginModule,
|
|
351
|
+
providers: [
|
|
352
|
+
{
|
|
353
|
+
provide: i1.NGXS_PLUGINS,
|
|
354
|
+
useClass: NgxsFormPlugin,
|
|
355
|
+
multi: true
|
|
356
|
+
}
|
|
357
|
+
]
|
|
358
|
+
};
|
|
359
|
+
};
|
|
360
|
+
return NgxsFormPluginModule;
|
|
361
|
+
}());
|
|
362
|
+
/** @nocollapse */ NgxsFormPluginModule.ɵfac = i0__namespace.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: NgxsFormPluginModule, deps: [], target: i0__namespace.ɵɵFactoryTarget.NgModule });
|
|
363
|
+
/** @nocollapse */ NgxsFormPluginModule.ɵmod = i0__namespace.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: NgxsFormPluginModule, declarations: [FormDirective], imports: [i2.ReactiveFormsModule], exports: [FormDirective] });
|
|
364
|
+
/** @nocollapse */ NgxsFormPluginModule.ɵinj = i0__namespace.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: NgxsFormPluginModule, imports: [[i2.ReactiveFormsModule]] });
|
|
365
|
+
i0__namespace.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0__namespace, type: NgxsFormPluginModule, decorators: [{
|
|
366
|
+
type: i0.NgModule,
|
|
367
|
+
args: [{
|
|
368
|
+
imports: [i2.ReactiveFormsModule],
|
|
369
|
+
declarations: [FormDirective],
|
|
370
|
+
exports: [FormDirective]
|
|
371
|
+
}]
|
|
372
|
+
}] });
|
|
373
|
+
|
|
374
|
+
/**
|
|
375
|
+
* The public api for consumers of @ngxs/form-plugin
|
|
376
|
+
*/
|
|
377
|
+
|
|
378
|
+
/**
|
|
379
|
+
* Generated bundle index. Do not edit.
|
|
380
|
+
*/
|
|
381
|
+
|
|
382
|
+
exports.NgxsFormPlugin = NgxsFormPlugin;
|
|
383
|
+
exports.NgxsFormPluginModule = NgxsFormPluginModule;
|
|
384
|
+
exports.ResetForm = ResetForm;
|
|
385
|
+
exports.SetFormDirty = SetFormDirty;
|
|
386
|
+
exports.SetFormDisabled = SetFormDisabled;
|
|
387
|
+
exports.SetFormEnabled = SetFormEnabled;
|
|
388
|
+
exports.SetFormPristine = SetFormPristine;
|
|
389
|
+
exports.UpdateForm = UpdateForm;
|
|
390
|
+
exports.UpdateFormDirty = UpdateFormDirty;
|
|
391
|
+
exports.UpdateFormErrors = UpdateFormErrors;
|
|
392
|
+
exports.UpdateFormStatus = UpdateFormStatus;
|
|
393
|
+
exports.UpdateFormValue = UpdateFormValue;
|
|
394
|
+
exports["ɵFormDirective"] = FormDirective;
|
|
395
|
+
|
|
396
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
397
|
+
|
|
398
|
+
}));
|
|
399
|
+
//# sourceMappingURL=ngxs-form-plugin.umd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngxs-form-plugin.umd.js","sources":["../../../packages/form-plugin/src/actions.ts","../../../packages/form-plugin/src/form.plugin.ts","../../../packages/form-plugin/src/directive.ts","../../../packages/form-plugin/src/form.module.ts","../../../packages/form-plugin/index.ts","../../../packages/form-plugin/ngxs-form-plugin.ts"],"sourcesContent":["export class UpdateFormStatus {\n static readonly type = '[Forms] Update Form Status';\n\n constructor(\n public payload: {\n status: string | null;\n path: string;\n }\n ) {}\n}\n\nexport class UpdateFormValue {\n static readonly type = '[Forms] Update Form Value';\n\n constructor(public payload: { value: any; path: string; propertyPath?: string }) {}\n}\n\nexport class UpdateForm {\n static readonly type = '[Forms] Update Form';\n\n constructor(\n public payload: {\n value: any;\n errors: { [k: string]: string } | null;\n dirty: boolean | null;\n status: string | null;\n path: string;\n }\n ) {}\n}\n\nexport class UpdateFormDirty {\n static readonly type = '[Forms] Update Form Dirty';\n\n constructor(public payload: { dirty: boolean | null; path: string }) {}\n}\n\nexport class SetFormDirty {\n static readonly type = '[Forms] Set Form Dirty';\n\n constructor(public payload: string) {}\n}\n\nexport class SetFormPristine {\n static readonly type = '[Forms] Set Form Pristine';\n\n constructor(public payload: string) {}\n}\n\nexport class UpdateFormErrors {\n static readonly type = '[Forms] Update Form Errors';\n\n constructor(public payload: { errors: { [k: string]: string } | null; path: string }) {}\n}\n\nexport class SetFormDisabled {\n static readonly type = '[Forms] Set Form Disabled';\n\n constructor(public payload: string) {}\n}\n\nexport class SetFormEnabled {\n static readonly type = '[Forms] Set Form Enabled';\n\n constructor(public payload: string) {}\n}\n\nexport class ResetForm {\n static readonly type = '[Forms] Reset Form';\n\n constructor(public payload: { path: string; value?: any }) {}\n}\n","import { Injectable } from '@angular/core';\nimport {\n getActionTypeFromInstance,\n getValue,\n NgxsNextPluginFn,\n NgxsPlugin,\n setValue\n} from '@ngxs/store';\nimport {\n ResetForm,\n SetFormDirty,\n SetFormDisabled,\n SetFormEnabled,\n SetFormPristine,\n UpdateForm,\n UpdateFormDirty,\n UpdateFormErrors,\n UpdateFormStatus,\n UpdateFormValue\n} from './actions';\n\n@Injectable()\nexport class NgxsFormPlugin implements NgxsPlugin {\n handle(state: any, event: any, next: NgxsNextPluginFn) {\n const type = getActionTypeFromInstance(event);\n\n let nextState = state;\n\n if (type === UpdateFormValue.type || type === UpdateForm.type || type === ResetForm.type) {\n const { value } = event.payload;\n const payloadValue = Array.isArray(value)\n ? value.slice()\n : isObjectLike(value)\n ? { ...value }\n : value;\n const path = this.joinPathWithPropertyPath(event);\n nextState = setValue(nextState, path, payloadValue);\n }\n\n if (type === ResetForm.type) {\n const model = getValue(nextState, `${event.payload.path}.model`);\n nextState = setValue(nextState, `${event.payload.path}`, { model: model });\n }\n\n if (type === UpdateFormStatus.type || type === UpdateForm.type) {\n nextState = setValue(nextState, `${event.payload.path}.status`, event.payload.status);\n }\n\n if (type === UpdateFormErrors.type || type === UpdateForm.type) {\n nextState = setValue(nextState, `${event.payload.path}.errors`, {\n ...event.payload.errors\n });\n }\n\n if (type === UpdateFormDirty.type || type === UpdateForm.type) {\n nextState = setValue(nextState, `${event.payload.path}.dirty`, event.payload.dirty);\n }\n\n if (type === SetFormDirty.type) {\n nextState = setValue(nextState, `${event.payload}.dirty`, true);\n }\n\n if (type === SetFormPristine.type) {\n nextState = setValue(nextState, `${event.payload}.dirty`, false);\n }\n\n if (type === SetFormDisabled.type) {\n nextState = setValue(nextState, `${event.payload}.disabled`, true);\n }\n\n if (type === SetFormEnabled.type) {\n nextState = setValue(nextState, `${event.payload}.disabled`, false);\n }\n\n return next(nextState, event);\n }\n\n private joinPathWithPropertyPath({ payload }: UpdateFormValue): string {\n let path = `${payload.path}.model`;\n\n if (payload.propertyPath) {\n path += `.${payload.propertyPath}`;\n }\n\n return path;\n }\n}\n\nfunction isObjectLike(target: unknown): target is object {\n return target !== null && typeof target === 'object';\n}\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { FormGroup, FormGroupDirective } from '@angular/forms';\nimport { Actions, getValue, ofActionDispatched, Store } from '@ngxs/store';\nimport { Observable, Subject } from 'rxjs';\nimport { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';\nimport {\n ResetForm,\n UpdateForm,\n UpdateFormDirty,\n UpdateFormErrors,\n UpdateFormStatus,\n UpdateFormValue\n} from './actions';\n\n@Directive({ selector: '[ngxsForm]' })\nexport class FormDirective implements OnInit, OnDestroy {\n @Input('ngxsForm')\n path: string = null!;\n\n @Input('ngxsFormDebounce')\n set debounce(debounce: string | number) {\n this._debounce = Number(debounce);\n }\n get debounce() {\n return this._debounce;\n }\n private _debounce = 100;\n\n @Input('ngxsFormClearOnDestroy')\n set clearDestroy(val: boolean) {\n this._clearDestroy = val != null && `${val}` !== 'false';\n }\n get clearDestroy(): boolean {\n return this._clearDestroy;\n }\n private _clearDestroy = false;\n\n private _updating = false;\n\n private readonly _destroy$ = new Subject<void>();\n\n constructor(\n private _actions$: Actions,\n private _store: Store,\n private _formGroupDirective: FormGroupDirective,\n private _cd: ChangeDetectorRef\n ) {}\n\n ngOnInit() {\n this._actions$\n .pipe(\n ofActionDispatched(ResetForm),\n filter((action: ResetForm) => action.payload.path === this.path),\n takeUntil(this._destroy$)\n )\n .subscribe(({ payload: { value } }: ResetForm) => {\n this.form.reset(value);\n this.updateFormStateWithRawValue(true);\n this._cd.markForCheck();\n });\n\n this.getStateStream(`${this.path}.model`).subscribe(model => {\n if (this._updating || !model) {\n return;\n }\n\n this.form.patchValue(model);\n this._cd.markForCheck();\n });\n\n this.getStateStream(`${this.path}.dirty`).subscribe(dirty => {\n if (this.form.dirty === dirty || typeof dirty !== 'boolean') {\n return;\n }\n\n if (dirty) {\n this.form.markAsDirty();\n } else {\n this.form.markAsPristine();\n }\n\n this._cd.markForCheck();\n });\n\n // On first state change, sync form model, status and dirty with state\n this._store\n .selectOnce(state => getValue(state, this.path))\n .subscribe(() => {\n this._store.dispatch([\n new UpdateFormValue({\n path: this.path,\n value: this.form.getRawValue()\n }),\n new UpdateFormStatus({\n path: this.path,\n status: this.form.status\n }),\n new UpdateFormDirty({\n path: this.path,\n dirty: this.form.dirty\n })\n ]);\n });\n\n this.getStateStream(`${this.path}.disabled`).subscribe(disabled => {\n if (this.form.disabled === disabled || typeof disabled !== 'boolean') {\n return;\n }\n\n if (disabled) {\n this.form.disable();\n } else {\n this.form.enable();\n }\n\n this._cd.markForCheck();\n });\n\n this._formGroupDirective\n .valueChanges!.pipe(\n distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)),\n this.debounceChange()\n )\n .subscribe(() => {\n this.updateFormStateWithRawValue();\n });\n\n this._formGroupDirective\n .statusChanges!.pipe(distinctUntilChanged(), this.debounceChange())\n .subscribe((status: string) => {\n this._store.dispatch(\n new UpdateFormStatus({\n status,\n path: this.path\n })\n );\n });\n }\n\n updateFormStateWithRawValue(withFormStatus?: boolean) {\n if (this._updating) return;\n\n const value = this._formGroupDirective.control.getRawValue();\n\n const actions: any[] = [\n new UpdateFormValue({\n path: this.path,\n value\n }),\n new UpdateFormDirty({\n path: this.path,\n dirty: this._formGroupDirective.dirty\n }),\n new UpdateFormErrors({\n path: this.path,\n errors: this._formGroupDirective.errors\n })\n ];\n\n if (withFormStatus) {\n actions.push(\n new UpdateFormStatus({\n path: this.path,\n status: this._formGroupDirective.status\n })\n );\n }\n\n this._updating = true;\n this._store.dispatch(actions).subscribe({\n error: () => (this._updating = false),\n complete: () => (this._updating = false)\n });\n }\n\n ngOnDestroy() {\n this._destroy$.next();\n\n if (this.clearDestroy) {\n this._store.dispatch(\n new UpdateForm({\n path: this.path,\n value: null,\n dirty: null,\n status: null,\n errors: null\n })\n );\n }\n }\n\n private debounceChange() {\n const skipDebounceTime =\n this._formGroupDirective.control.updateOn !== 'change' || this._debounce < 0;\n\n return skipDebounceTime\n ? (change: Observable<any>) => change.pipe(takeUntil(this._destroy$))\n : (change: Observable<any>) =>\n change.pipe(debounceTime(this._debounce), takeUntil(this._destroy$));\n }\n\n private get form(): FormGroup {\n return this._formGroupDirective.form;\n }\n\n private getStateStream(path: string) {\n return this._store.select(state => getValue(state, path)).pipe(takeUntil(this._destroy$));\n }\n}\n","import { NgModule, ModuleWithProviders } from '@angular/core';\nimport { NGXS_PLUGINS } from '@ngxs/store';\nimport { NgxsFormPlugin } from './form.plugin';\nimport { ReactiveFormsModule } from '@angular/forms';\nimport { FormDirective } from './directive';\n\n@NgModule({\n imports: [ReactiveFormsModule],\n declarations: [FormDirective],\n exports: [FormDirective]\n})\nexport class NgxsFormPluginModule {\n static forRoot(): ModuleWithProviders<NgxsFormPluginModule> {\n return {\n ngModule: NgxsFormPluginModule,\n providers: [\n {\n provide: NGXS_PLUGINS,\n useClass: NgxsFormPlugin,\n multi: true\n }\n ]\n };\n }\n}\n","/**\n * The public api for consumers of @ngxs/form-plugin\n */\nexport * from './src/public_api';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["getActionTypeFromInstance","setValue","getValue","i0","Injectable","Subject","ofActionDispatched","filter","takeUntil","distinctUntilChanged","debounceTime","i1","i2","Directive","Input","NGXS_PLUGINS","ReactiveFormsModule","NgModule"],"mappings":"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"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Directive, Input } from '@angular/core';
|
|
2
|
+
import { FormGroupDirective } from '@angular/forms';
|
|
3
|
+
import { Actions, getValue, ofActionDispatched, Store } from '@ngxs/store';
|
|
4
|
+
import { Subject } from 'rxjs';
|
|
5
|
+
import { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';
|
|
6
|
+
import { ResetForm, UpdateForm, UpdateFormDirty, UpdateFormErrors, UpdateFormStatus, UpdateFormValue } from './actions';
|
|
7
|
+
import * as i0 from "@angular/core";
|
|
8
|
+
import * as i1 from "@ngxs/store";
|
|
9
|
+
import * as i2 from "@angular/forms";
|
|
10
|
+
export class FormDirective {
|
|
11
|
+
constructor(_actions$, _store, _formGroupDirective, _cd) {
|
|
12
|
+
this._actions$ = _actions$;
|
|
13
|
+
this._store = _store;
|
|
14
|
+
this._formGroupDirective = _formGroupDirective;
|
|
15
|
+
this._cd = _cd;
|
|
16
|
+
this.path = null;
|
|
17
|
+
this._debounce = 100;
|
|
18
|
+
this._clearDestroy = false;
|
|
19
|
+
this._updating = false;
|
|
20
|
+
this._destroy$ = new Subject();
|
|
21
|
+
}
|
|
22
|
+
set debounce(debounce) {
|
|
23
|
+
this._debounce = Number(debounce);
|
|
24
|
+
}
|
|
25
|
+
get debounce() {
|
|
26
|
+
return this._debounce;
|
|
27
|
+
}
|
|
28
|
+
set clearDestroy(val) {
|
|
29
|
+
this._clearDestroy = val != null && `${val}` !== 'false';
|
|
30
|
+
}
|
|
31
|
+
get clearDestroy() {
|
|
32
|
+
return this._clearDestroy;
|
|
33
|
+
}
|
|
34
|
+
ngOnInit() {
|
|
35
|
+
this._actions$
|
|
36
|
+
.pipe(ofActionDispatched(ResetForm), filter((action) => action.payload.path === this.path), takeUntil(this._destroy$))
|
|
37
|
+
.subscribe(({ payload: { value } }) => {
|
|
38
|
+
this.form.reset(value);
|
|
39
|
+
this.updateFormStateWithRawValue(true);
|
|
40
|
+
this._cd.markForCheck();
|
|
41
|
+
});
|
|
42
|
+
this.getStateStream(`${this.path}.model`).subscribe(model => {
|
|
43
|
+
if (this._updating || !model) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
this.form.patchValue(model);
|
|
47
|
+
this._cd.markForCheck();
|
|
48
|
+
});
|
|
49
|
+
this.getStateStream(`${this.path}.dirty`).subscribe(dirty => {
|
|
50
|
+
if (this.form.dirty === dirty || typeof dirty !== 'boolean') {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (dirty) {
|
|
54
|
+
this.form.markAsDirty();
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
this.form.markAsPristine();
|
|
58
|
+
}
|
|
59
|
+
this._cd.markForCheck();
|
|
60
|
+
});
|
|
61
|
+
// On first state change, sync form model, status and dirty with state
|
|
62
|
+
this._store
|
|
63
|
+
.selectOnce(state => getValue(state, this.path))
|
|
64
|
+
.subscribe(() => {
|
|
65
|
+
this._store.dispatch([
|
|
66
|
+
new UpdateFormValue({
|
|
67
|
+
path: this.path,
|
|
68
|
+
value: this.form.getRawValue()
|
|
69
|
+
}),
|
|
70
|
+
new UpdateFormStatus({
|
|
71
|
+
path: this.path,
|
|
72
|
+
status: this.form.status
|
|
73
|
+
}),
|
|
74
|
+
new UpdateFormDirty({
|
|
75
|
+
path: this.path,
|
|
76
|
+
dirty: this.form.dirty
|
|
77
|
+
})
|
|
78
|
+
]);
|
|
79
|
+
});
|
|
80
|
+
this.getStateStream(`${this.path}.disabled`).subscribe(disabled => {
|
|
81
|
+
if (this.form.disabled === disabled || typeof disabled !== 'boolean') {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
if (disabled) {
|
|
85
|
+
this.form.disable();
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
this.form.enable();
|
|
89
|
+
}
|
|
90
|
+
this._cd.markForCheck();
|
|
91
|
+
});
|
|
92
|
+
this._formGroupDirective
|
|
93
|
+
.valueChanges.pipe(distinctUntilChanged((a, b) => JSON.stringify(a) === JSON.stringify(b)), this.debounceChange())
|
|
94
|
+
.subscribe(() => {
|
|
95
|
+
this.updateFormStateWithRawValue();
|
|
96
|
+
});
|
|
97
|
+
this._formGroupDirective
|
|
98
|
+
.statusChanges.pipe(distinctUntilChanged(), this.debounceChange())
|
|
99
|
+
.subscribe((status) => {
|
|
100
|
+
this._store.dispatch(new UpdateFormStatus({
|
|
101
|
+
status,
|
|
102
|
+
path: this.path
|
|
103
|
+
}));
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
updateFormStateWithRawValue(withFormStatus) {
|
|
107
|
+
if (this._updating)
|
|
108
|
+
return;
|
|
109
|
+
const value = this._formGroupDirective.control.getRawValue();
|
|
110
|
+
const actions = [
|
|
111
|
+
new UpdateFormValue({
|
|
112
|
+
path: this.path,
|
|
113
|
+
value
|
|
114
|
+
}),
|
|
115
|
+
new UpdateFormDirty({
|
|
116
|
+
path: this.path,
|
|
117
|
+
dirty: this._formGroupDirective.dirty
|
|
118
|
+
}),
|
|
119
|
+
new UpdateFormErrors({
|
|
120
|
+
path: this.path,
|
|
121
|
+
errors: this._formGroupDirective.errors
|
|
122
|
+
})
|
|
123
|
+
];
|
|
124
|
+
if (withFormStatus) {
|
|
125
|
+
actions.push(new UpdateFormStatus({
|
|
126
|
+
path: this.path,
|
|
127
|
+
status: this._formGroupDirective.status
|
|
128
|
+
}));
|
|
129
|
+
}
|
|
130
|
+
this._updating = true;
|
|
131
|
+
this._store.dispatch(actions).subscribe({
|
|
132
|
+
error: () => (this._updating = false),
|
|
133
|
+
complete: () => (this._updating = false)
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
ngOnDestroy() {
|
|
137
|
+
this._destroy$.next();
|
|
138
|
+
if (this.clearDestroy) {
|
|
139
|
+
this._store.dispatch(new UpdateForm({
|
|
140
|
+
path: this.path,
|
|
141
|
+
value: null,
|
|
142
|
+
dirty: null,
|
|
143
|
+
status: null,
|
|
144
|
+
errors: null
|
|
145
|
+
}));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
debounceChange() {
|
|
149
|
+
const skipDebounceTime = this._formGroupDirective.control.updateOn !== 'change' || this._debounce < 0;
|
|
150
|
+
return skipDebounceTime
|
|
151
|
+
? (change) => change.pipe(takeUntil(this._destroy$))
|
|
152
|
+
: (change) => change.pipe(debounceTime(this._debounce), takeUntil(this._destroy$));
|
|
153
|
+
}
|
|
154
|
+
get form() {
|
|
155
|
+
return this._formGroupDirective.form;
|
|
156
|
+
}
|
|
157
|
+
getStateStream(path) {
|
|
158
|
+
return this._store.select(state => getValue(state, path)).pipe(takeUntil(this._destroy$));
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
/** @nocollapse */ FormDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormDirective, deps: [{ token: i1.Actions }, { token: i1.Store }, { token: i2.FormGroupDirective }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
162
|
+
/** @nocollapse */ FormDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "12.2.17", type: FormDirective, selector: "[ngxsForm]", inputs: { path: ["ngxsForm", "path"], debounce: ["ngxsFormDebounce", "debounce"], clearDestroy: ["ngxsFormClearOnDestroy", "clearDestroy"] }, ngImport: i0 });
|
|
163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormDirective, decorators: [{
|
|
164
|
+
type: Directive,
|
|
165
|
+
args: [{ selector: '[ngxsForm]' }]
|
|
166
|
+
}], ctorParameters: function () { return [{ type: i1.Actions }, { type: i1.Store }, { type: i2.FormGroupDirective }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { path: [{
|
|
167
|
+
type: Input,
|
|
168
|
+
args: ['ngxsForm']
|
|
169
|
+
}], debounce: [{
|
|
170
|
+
type: Input,
|
|
171
|
+
args: ['ngxsFormDebounce']
|
|
172
|
+
}], clearDestroy: [{
|
|
173
|
+
type: Input,
|
|
174
|
+
args: ['ngxsFormClearOnDestroy']
|
|
175
|
+
}] } });
|
|
176
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS1wbHVnaW4vc3JjL2RpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFhLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNoQixNQUFNLFdBQVcsQ0FBQzs7OztBQUduQixNQUFNLE9BQU8sYUFBYTtJQTBCeEIsWUFDVSxTQUFrQixFQUNsQixNQUFhLEVBQ2IsbUJBQXVDLEVBQ3ZDLEdBQXNCO1FBSHRCLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE1QmhDLFNBQUksR0FBVyxJQUFLLENBQUM7UUFTYixjQUFTLEdBQUcsR0FBRyxDQUFDO1FBU2hCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBRXRCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFFVCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztJQU85QyxDQUFDO0lBM0JKLElBQ0ksUUFBUSxDQUFDLFFBQXlCO1FB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Q0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDOzs4SEFoTVUsYUFBYTtrSEFBYixhQUFhOzRGQUFiLGFBQWE7a0JBRHpCLFNBQVM7bUJBQUMsRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFFO21MQUduQyxJQUFJO3NCQURILEtBQUs7dUJBQUMsVUFBVTtnQkFJYixRQUFRO3NCQURYLEtBQUs7dUJBQUMsa0JBQWtCO2dCQVVyQixZQUFZO3NCQURmLEtBQUs7dUJBQUMsd0JBQXdCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGlvbnMsIGdldFZhbHVlLCBvZkFjdGlvbkRpc3BhdGNoZWQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBSZXNldEZvcm0sXG4gIFVwZGF0ZUZvcm0sXG4gIFVwZGF0ZUZvcm1EaXJ0eSxcbiAgVXBkYXRlRm9ybUVycm9ycyxcbiAgVXBkYXRlRm9ybVN0YXR1cyxcbiAgVXBkYXRlRm9ybVZhbHVlXG59IGZyb20gJy4vYWN0aW9ucyc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tuZ3hzRm9ybV0nIH0pXG5leHBvcnQgY2xhc3MgRm9ybURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCduZ3hzRm9ybScpXG4gIHBhdGg6IHN0cmluZyA9IG51bGwhO1xuXG4gIEBJbnB1dCgnbmd4c0Zvcm1EZWJvdW5jZScpXG4gIHNldCBkZWJvdW5jZShkZWJvdW5jZTogc3RyaW5nIHwgbnVtYmVyKSB7XG4gICAgdGhpcy5fZGVib3VuY2UgPSBOdW1iZXIoZGVib3VuY2UpO1xuICB9XG4gIGdldCBkZWJvdW5jZSgpIHtcbiAgICByZXR1cm4gdGhpcy5fZGVib3VuY2U7XG4gIH1cbiAgcHJpdmF0ZSBfZGVib3VuY2UgPSAxMDA7XG5cbiAgQElucHV0KCduZ3hzRm9ybUNsZWFyT25EZXN0cm95JylcbiAgc2V0IGNsZWFyRGVzdHJveSh2YWw6IGJvb2xlYW4pIHtcbiAgICB0aGlzLl9jbGVhckRlc3Ryb3kgPSB2YWwgIT0gbnVsbCAmJiBgJHt2YWx9YCAhPT0gJ2ZhbHNlJztcbiAgfVxuICBnZXQgY2xlYXJEZXN0cm95KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGVhckRlc3Ryb3k7XG4gIH1cbiAgcHJpdmF0ZSBfY2xlYXJEZXN0cm95ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfdXBkYXRpbmcgPSBmYWxzZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IF9kZXN0cm95JCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYWN0aW9ucyQ6IEFjdGlvbnMsXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgX2Zvcm1Hcm91cERpcmVjdGl2ZTogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fYWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBvZkFjdGlvbkRpc3BhdGNoZWQoUmVzZXRGb3JtKSxcbiAgICAgICAgZmlsdGVyKChhY3Rpb246IFJlc2V0Rm9ybSkgPT4gYWN0aW9uLnBheWxvYWQucGF0aCA9PT0gdGhpcy5wYXRoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBwYXlsb2FkOiB7IHZhbHVlIH0gfTogUmVzZXRGb3JtKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCh2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlV2l0aFJhd1ZhbHVlKHRydWUpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5nZXRTdGF0ZVN0cmVhbShgJHt0aGlzLnBhdGh9Lm1vZGVsYCkuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgIGlmICh0aGlzLl91cGRhdGluZyB8fCAhbW9kZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShtb2RlbCk7XG4gICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZ2V0U3RhdGVTdHJlYW0oYCR7dGhpcy5wYXRofS5kaXJ0eWApLnN1YnNjcmliZShkaXJ0eSA9PiB7XG4gICAgICBpZiAodGhpcy5mb3JtLmRpcnR5ID09PSBkaXJ0eSB8fCB0eXBlb2YgZGlydHkgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXJ0eSkge1xuICAgICAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIC8vIE9uIGZpcnN0IHN0YXRlIGNoYW5nZSwgc3luYyBmb3JtIG1vZGVsLCBzdGF0dXMgYW5kIGRpcnR5IHdpdGggc3RhdGVcbiAgICB0aGlzLl9zdG9yZVxuICAgICAgLnNlbGVjdE9uY2Uoc3RhdGUgPT4gZ2V0VmFsdWUoc3RhdGUsIHRoaXMucGF0aCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goW1xuICAgICAgICAgIG5ldyBVcGRhdGVGb3JtVmFsdWUoe1xuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IFVwZGF0ZUZvcm1TdGF0dXMoe1xuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLmZvcm0uc3RhdHVzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IFVwZGF0ZUZvcm1EaXJ0eSh7XG4gICAgICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXG4gICAgICAgICAgICBkaXJ0eTogdGhpcy5mb3JtLmRpcnR5XG4gICAgICAgICAgfSlcbiAgICAgICAgXSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZ2V0U3RhdGVTdHJlYW0oYCR7dGhpcy5wYXRofS5kaXNhYmxlZGApLnN1YnNjcmliZShkaXNhYmxlZCA9PiB7XG4gICAgICBpZiAodGhpcy5mb3JtLmRpc2FibGVkID09PSBkaXNhYmxlZCB8fCB0eXBlb2YgZGlzYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtLmVuYWJsZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZVxuICAgICAgLnZhbHVlQ2hhbmdlcyEucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKSksXG4gICAgICAgIHRoaXMuZGVib3VuY2VDaGFuZ2UoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlV2l0aFJhd1ZhbHVlKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZVxuICAgICAgLnN0YXR1c0NoYW5nZXMhLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGhpcy5kZWJvdW5jZUNoYW5nZSgpKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgbmV3IFVwZGF0ZUZvcm1TdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlRm9ybVN0YXRlV2l0aFJhd1ZhbHVlKHdpdGhGb3JtU3RhdHVzPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl91cGRhdGluZykgcmV0dXJuO1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmUuY29udHJvbC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgY29uc3QgYWN0aW9uczogYW55W10gPSBbXG4gICAgICBuZXcgVXBkYXRlRm9ybVZhbHVlKHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICB2YWx1ZVxuICAgICAgfSksXG4gICAgICBuZXcgVXBkYXRlRm9ybURpcnR5KHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICBkaXJ0eTogdGhpcy5fZm9ybUdyb3VwRGlyZWN0aXZlLmRpcnR5XG4gICAgICB9KSxcbiAgICAgIG5ldyBVcGRhdGVGb3JtRXJyb3JzKHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICBlcnJvcnM6IHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZS5lcnJvcnNcbiAgICAgIH0pXG4gICAgXTtcblxuICAgIGlmICh3aXRoRm9ybVN0YXR1cykge1xuICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICBuZXcgVXBkYXRlRm9ybVN0YXR1cyh7XG4gICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgIHN0YXR1czogdGhpcy5fZm9ybUdyb3VwRGlyZWN0aXZlLnN0YXR1c1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGluZyA9IHRydWU7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9ucykuc3Vic2NyaWJlKHtcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5fdXBkYXRpbmcgPSBmYWxzZSksXG4gICAgICBjb21wbGV0ZTogKCkgPT4gKHRoaXMuX3VwZGF0aW5nID0gZmFsc2UpXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG5cbiAgICBpZiAodGhpcy5jbGVhckRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKFxuICAgICAgICBuZXcgVXBkYXRlRm9ybSh7XG4gICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgIGRpcnR5OiBudWxsLFxuICAgICAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgICAgICBlcnJvcnM6IG51bGxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWJvdW5jZUNoYW5nZSgpIHtcbiAgICBjb25zdCBza2lwRGVib3VuY2VUaW1lID1cbiAgICAgIHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZS5jb250cm9sLnVwZGF0ZU9uICE9PSAnY2hhbmdlJyB8fCB0aGlzLl9kZWJvdW5jZSA8IDA7XG5cbiAgICByZXR1cm4gc2tpcERlYm91bmNlVGltZVxuICAgICAgPyAoY2hhbmdlOiBPYnNlcnZhYmxlPGFueT4pID0+IGNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICA6IChjaGFuZ2U6IE9ic2VydmFibGU8YW55PikgPT5cbiAgICAgICAgICBjaGFuZ2UucGlwZShkZWJvdW5jZVRpbWUodGhpcy5fZGVib3VuY2UpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwRGlyZWN0aXZlLmZvcm07XG4gIH1cblxuICBwcml2YXRlIGdldFN0YXRlU3RyZWFtKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdG9yZS5zZWxlY3Qoc3RhdGUgPT4gZ2V0VmFsdWUoc3RhdGUsIHBhdGgpKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpO1xuICB9XG59XG4iXX0=
|