@ngxs/form-plugin 3.7.4 → 3.7.5

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.
@@ -1,299 +1,306 @@
1
- /**
2
- * @fileoverview added by tsickle
3
- * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
- */
5
- import { ChangeDetectorRef, Directive, Input } from '@angular/core';
6
- import { FormGroupDirective } from '@angular/forms';
7
- import { Actions, getValue, ofActionDispatched, Store } from '@ngxs/store';
8
- import { Subject } from 'rxjs';
9
- import { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';
10
- import { ResetForm, UpdateForm, UpdateFormDirty, UpdateFormErrors, UpdateFormStatus, UpdateFormValue } from './actions';
11
- export class FormDirective {
12
- /**
13
- * @param {?} _actions$
14
- * @param {?} _store
15
- * @param {?} _formGroupDirective
16
- * @param {?} _cd
17
- */
18
- constructor(_actions$, _store, _formGroupDirective, _cd) {
19
- this._actions$ = _actions$;
20
- this._store = _store;
21
- this._formGroupDirective = _formGroupDirective;
22
- this._cd = _cd;
23
- this.path = (/** @type {?} */ (null));
24
- this.debounce = 100;
25
- this._clearDestroy = false;
26
- this._destroy$ = new Subject();
27
- this._updating = false;
28
- }
29
- /**
30
- * @param {?} val
31
- * @return {?}
32
- */
33
- set clearDestroy(val) {
34
- this._clearDestroy = val != null && `${val}` !== 'false';
35
- }
36
- /**
37
- * @return {?}
38
- */
39
- get clearDestroy() {
40
- return this._clearDestroy;
41
- }
42
- /**
43
- * @return {?}
44
- */
45
- ngOnInit() {
46
- this._actions$
47
- .pipe(ofActionDispatched(ResetForm), filter((/**
48
- * @param {?} action
49
- * @return {?}
50
- */
51
- (action) => action.payload.path === this.path)), takeUntil(this._destroy$))
52
- .subscribe((/**
53
- * @param {?} __0
54
- * @return {?}
55
- */
56
- ({ payload: { value } }) => {
57
- this.form.reset(value);
58
- this.updateFormStateWithRawValue(true);
59
- this._cd.markForCheck();
60
- }));
61
- this.getStateStream(`${this.path}.model`).subscribe((/**
62
- * @param {?} model
63
- * @return {?}
64
- */
65
- model => {
66
- if (this._updating || !model) {
67
- return;
68
- }
69
- this.form.patchValue(model);
70
- this._cd.markForCheck();
71
- }));
72
- this.getStateStream(`${this.path}.dirty`).subscribe((/**
73
- * @param {?} dirty
74
- * @return {?}
75
- */
76
- dirty => {
77
- if (this.form.dirty === dirty || typeof dirty !== 'boolean') {
78
- return;
79
- }
80
- if (dirty) {
81
- this.form.markAsDirty();
82
- }
83
- else {
84
- this.form.markAsPristine();
85
- }
86
- this._cd.markForCheck();
87
- }));
88
- // On first state change, sync form model, status and dirty with state
89
- this._store
90
- .selectOnce((/**
91
- * @param {?} state
92
- * @return {?}
93
- */
94
- state => getValue(state, this.path)))
95
- .subscribe((/**
96
- * @return {?}
97
- */
98
- () => {
99
- this._store.dispatch([
100
- new UpdateFormValue({
101
- path: this.path,
102
- value: this.form.getRawValue()
103
- }),
104
- new UpdateFormStatus({
105
- path: this.path,
106
- status: this.form.status
107
- }),
108
- new UpdateFormDirty({
109
- path: this.path,
110
- dirty: this.form.dirty
111
- })
112
- ]);
113
- }));
114
- this.getStateStream(`${this.path}.disabled`).subscribe((/**
115
- * @param {?} disabled
116
- * @return {?}
117
- */
118
- disabled => {
119
- if (this.form.disabled === disabled || typeof disabled !== 'boolean') {
120
- return;
121
- }
122
- if (disabled) {
123
- this.form.disable();
124
- }
125
- else {
126
- this.form.enable();
127
- }
128
- this._cd.markForCheck();
129
- }));
130
- (/** @type {?} */ (this._formGroupDirective.valueChanges)).pipe(this.debounceChange()).subscribe((/**
131
- * @return {?}
132
- */
133
- () => {
134
- this.updateFormStateWithRawValue();
135
- }));
136
- (/** @type {?} */ (this._formGroupDirective
137
- .statusChanges)).pipe(distinctUntilChanged(), this.debounceChange())
138
- .subscribe((/**
139
- * @param {?} status
140
- * @return {?}
141
- */
142
- (status) => {
143
- this._store.dispatch(new UpdateFormStatus({
144
- status,
145
- path: this.path
146
- }));
147
- }));
148
- }
149
- /**
150
- * @param {?=} withFormStatus
151
- * @return {?}
152
- */
153
- updateFormStateWithRawValue(withFormStatus) {
154
- if (this._updating)
155
- return;
156
- /** @type {?} */
157
- const value = this._formGroupDirective.control.getRawValue();
158
- /** @type {?} */
159
- const actions = [
160
- new UpdateFormValue({
161
- path: this.path,
162
- value
163
- }),
164
- new UpdateFormDirty({
165
- path: this.path,
166
- dirty: this._formGroupDirective.dirty
167
- }),
168
- new UpdateFormErrors({
169
- path: this.path,
170
- errors: this._formGroupDirective.errors
171
- })
172
- ];
173
- if (withFormStatus) {
174
- actions.push(new UpdateFormStatus({
175
- path: this.path,
176
- status: this._formGroupDirective.status
177
- }));
178
- }
179
- this._updating = true;
180
- this._store.dispatch(actions).subscribe({
181
- error: (/**
182
- * @return {?}
183
- */
184
- () => (this._updating = false)),
185
- complete: (/**
186
- * @return {?}
187
- */
188
- () => (this._updating = false))
189
- });
190
- }
191
- /**
192
- * @return {?}
193
- */
194
- ngOnDestroy() {
195
- this._destroy$.next();
196
- this._destroy$.complete();
197
- if (this.clearDestroy) {
198
- this._store.dispatch(new UpdateForm({
199
- path: this.path,
200
- value: null,
201
- dirty: null,
202
- status: null,
203
- errors: null
204
- }));
205
- }
206
- }
207
- /**
208
- * @private
209
- * @return {?}
210
- */
211
- debounceChange() {
212
- /** @type {?} */
213
- const skipDebounceTime = this._formGroupDirective.control.updateOn !== 'change' || this.debounce < 0;
214
- return skipDebounceTime
215
- ? (/**
216
- * @param {?} change
217
- * @return {?}
218
- */
219
- (change) => change.pipe(takeUntil(this._destroy$)))
220
- : (/**
221
- * @param {?} change
222
- * @return {?}
223
- */
224
- (change) => change.pipe(debounceTime(this.debounce), takeUntil(this._destroy$)));
225
- }
226
- /**
227
- * @private
228
- * @return {?}
229
- */
230
- get form() {
231
- return this._formGroupDirective.form;
232
- }
233
- /**
234
- * @private
235
- * @param {?} path
236
- * @return {?}
237
- */
238
- getStateStream(path) {
239
- return this._store.select((/**
240
- * @param {?} state
241
- * @return {?}
242
- */
243
- state => getValue(state, path))).pipe(takeUntil(this._destroy$));
244
- }
245
- }
246
- FormDirective.decorators = [
247
- { type: Directive, args: [{ selector: '[ngxsForm]' },] }
248
- ];
249
- /** @nocollapse */
250
- FormDirective.ctorParameters = () => [
251
- { type: Actions },
252
- { type: Store },
253
- { type: FormGroupDirective },
254
- { type: ChangeDetectorRef }
255
- ];
256
- FormDirective.propDecorators = {
257
- path: [{ type: Input, args: ['ngxsForm',] }],
258
- debounce: [{ type: Input, args: ['ngxsFormDebounce',] }],
259
- clearDestroy: [{ type: Input, args: ['ngxsFormClearOnDestroy',] }]
260
- };
261
- if (false) {
262
- /** @type {?} */
263
- FormDirective.prototype.path;
264
- /** @type {?} */
265
- FormDirective.prototype.debounce;
266
- /** @type {?} */
267
- FormDirective.prototype._clearDestroy;
268
- /**
269
- * @type {?}
270
- * @private
271
- */
272
- FormDirective.prototype._destroy$;
273
- /**
274
- * @type {?}
275
- * @private
276
- */
277
- FormDirective.prototype._updating;
278
- /**
279
- * @type {?}
280
- * @private
281
- */
282
- FormDirective.prototype._actions$;
283
- /**
284
- * @type {?}
285
- * @private
286
- */
287
- FormDirective.prototype._store;
288
- /**
289
- * @type {?}
290
- * @private
291
- */
292
- FormDirective.prototype._formGroupDirective;
293
- /**
294
- * @type {?}
295
- * @private
296
- */
297
- FormDirective.prototype._cd;
298
- }
299
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMvZm9ybS1wbHVnaW4vIiwic291cmNlcyI6WyJzcmMvZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFhLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNoQixNQUFNLFdBQVcsQ0FBQztBQUduQixNQUFNLE9BQU8sYUFBYTs7Ozs7OztJQXFCeEIsWUFDVSxTQUFrQixFQUNsQixNQUFhLEVBQ2IsbUJBQXVDLEVBQ3ZDLEdBQXNCO1FBSHRCLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF2QmhDLFNBQUksR0FBVyxtQkFBQSxJQUFJLEVBQUMsQ0FBQztRQUdyQixhQUFRLEdBQUcsR0FBRyxDQUFDO1FBV2Ysa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFTCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN6QyxjQUFTLEdBQUcsS0FBSyxDQUFDO0lBT3ZCLENBQUM7Ozs7O0lBbkJKLElBQ0ksWUFBWSxDQUFDLEdBQVk7UUFDM0IsSUFBSSxDQUFDLGFBQWEsR0FBRyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsR0FBRyxFQUFFLEtBQUssT0FBTyxDQUFDO0lBQzNELENBQUM7Ozs7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQzs7OztJQWNELFFBQVE7UUFDTixJQUFJLENBQUMsU0FBUzthQUNYLElBQUksQ0FDSCxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsRUFDN0IsTUFBTTs7OztRQUFDLENBQUMsTUFBaUIsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssSUFBSSxDQUFDLElBQUksRUFBQyxFQUNoRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUMxQjthQUNBLFNBQVM7Ozs7UUFBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEVBQWEsRUFBRSxFQUFFO1lBQy9DLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3ZCLElBQUksQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN2QyxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFBQyxDQUFDO1FBRUwsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLFFBQVEsQ0FBQyxDQUFDLFNBQVM7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRTtZQUMxRCxJQUFJLElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxLQUFLLEVBQUU7Z0JBQzVCLE9BQU87YUFDUjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzVCLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7UUFDMUIsQ0FBQyxFQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksUUFBUSxDQUFDLENBQUMsU0FBUzs7OztRQUFDLEtBQUssQ0FBQyxFQUFFO1lBQzFELElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEtBQUssS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFNBQVMsRUFBRTtnQkFDM0QsT0FBTzthQUNSO1lBRUQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1QsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQzthQUN6QjtpQkFBTTtnQkFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQzVCO1lBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUMxQixDQUFDLEVBQUMsQ0FBQztRQUVILHNFQUFzRTtRQUN0RSxJQUFJLENBQUMsTUFBTTthQUNSLFVBQVU7Ozs7UUFBQyxLQUFLLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFDO2FBQy9DLFNBQVM7OztRQUFDLEdBQUcsRUFBRTtZQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDO2dCQUNuQixJQUFJLGVBQWUsQ0FBQztvQkFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtpQkFDL0IsQ0FBQztnQkFDRixJQUFJLGdCQUFnQixDQUFDO29CQUNuQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7b0JBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtpQkFDekIsQ0FBQztnQkFDRixJQUFJLGVBQWUsQ0FBQztvQkFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO29CQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7aUJBQ3ZCLENBQUM7YUFDSCxDQUFDLENBQUM7UUFDTCxDQUFDLEVBQUMsQ0FBQztRQUVMLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxXQUFXLENBQUMsQ0FBQyxTQUFTOzs7O1FBQUMsUUFBUSxDQUFDLEVBQUU7WUFDaEUsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsS0FBSyxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssU0FBUyxFQUFFO2dCQUNwRSxPQUFPO2FBQ1I7WUFFRCxJQUFJLFFBQVEsRUFBRTtnQkFDWixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQ3JCO2lCQUFNO2dCQUNMLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7YUFDcEI7WUFFRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQzFCLENBQUMsRUFBQyxDQUFDO1FBRUgsbUJBQUEsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksRUFBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQyxTQUFTOzs7UUFBQyxHQUFHLEVBQUU7WUFDaEYsSUFBSSxDQUFDLDJCQUEyQixFQUFFLENBQUM7UUFDckMsQ0FBQyxFQUFDLENBQUM7UUFFSCxtQkFBQSxJQUFJLENBQUMsbUJBQW1CO2FBQ3JCLGFBQWEsRUFBQyxDQUFDLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQzthQUNsRSxTQUFTOzs7O1FBQUMsQ0FBQyxNQUFjLEVBQUUsRUFBRTtZQUM1QixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDbkIsTUFBTTtnQkFDTixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7YUFDaEIsQ0FBQyxDQUNILENBQUM7UUFDSixDQUFDLEVBQUMsQ0FBQztJQUNQLENBQUM7Ozs7O0lBRUQsMkJBQTJCLENBQUMsY0FBd0I7UUFDbEQsSUFBSSxJQUFJLENBQUMsU0FBUztZQUFFLE9BQU87O2NBRXJCLEtBQUssR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRTs7Y0FFdEQsT0FBTyxHQUFVO1lBQ3JCLElBQUksZUFBZSxDQUFDO2dCQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7Z0JBQ2YsS0FBSzthQUNOLENBQUM7WUFDRixJQUFJLGVBQWUsQ0FBQztnQkFDbEIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSzthQUN0QyxDQUFDO1lBQ0YsSUFBSSxnQkFBZ0IsQ0FBQztnQkFDbkIsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLE1BQU0sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsTUFBTTthQUN4QyxDQUFDO1NBQ0g7UUFFRCxJQUFJLGNBQWMsRUFBRTtZQUNsQixPQUFPLENBQUMsSUFBSSxDQUNWLElBQUksZ0JBQWdCLENBQUM7Z0JBQ25CLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE1BQU07YUFDeEMsQ0FBQyxDQUNILENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsQ0FBQztZQUN0QyxLQUFLOzs7WUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLENBQUE7WUFDckMsUUFBUTs7O1lBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxDQUFBO1NBQ3pDLENBQUMsQ0FBQztJQUNMLENBQUM7Ozs7SUFDRCxXQUFXO1FBQ1QsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBRTFCLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtZQUNyQixJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FDbEIsSUFBSSxVQUFVLENBQUM7Z0JBQ2IsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJO2dCQUNmLEtBQUssRUFBRSxJQUFJO2dCQUNYLEtBQUssRUFBRSxJQUFJO2dCQUNYLE1BQU0sRUFBRSxJQUFJO2dCQUNaLE1BQU0sRUFBRSxJQUFJO2FBQ2IsQ0FBQyxDQUNILENBQUM7U0FDSDtJQUNILENBQUM7Ozs7O0lBRU8sY0FBYzs7Y0FDZCxnQkFBZ0IsR0FDcEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQztRQUU3RSxPQUFPLGdCQUFnQjtZQUNyQixDQUFDOzs7O1lBQUMsQ0FBQyxNQUF1QixFQUFFLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDckUsQ0FBQzs7OztZQUFDLENBQUMsTUFBdUIsRUFBRSxFQUFFLENBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUEsQ0FBQztJQUM1RSxDQUFDOzs7OztJQUVELElBQVksSUFBSTtRQUNkLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQztJQUN2QyxDQUFDOzs7Ozs7SUFFTyxjQUFjLENBQUMsSUFBWTtRQUNqQyxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTTs7OztRQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsRUFBQyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQzs7O1lBdkxGLFNBQVMsU0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUU7Ozs7WUFaNUIsT0FBTztZQUFnQyxLQUFLO1lBRGpDLGtCQUFrQjtZQUQ3QixpQkFBaUI7OzttQkFnQnZCLEtBQUssU0FBQyxVQUFVO3VCQUdoQixLQUFLLFNBQUMsa0JBQWtCOzJCQUd4QixLQUFLLFNBQUMsd0JBQXdCOzs7O0lBTi9CLDZCQUNxQjs7SUFFckIsaUNBQ2U7O0lBV2Ysc0NBQXNCOzs7OztJQUV0QixrQ0FBaUQ7Ozs7O0lBQ2pELGtDQUEwQjs7Ozs7SUFHeEIsa0NBQTBCOzs7OztJQUMxQiwrQkFBcUI7Ozs7O0lBQ3JCLDRDQUErQzs7Ozs7SUFDL0MsNEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCwgRm9ybUdyb3VwRGlyZWN0aXZlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBBY3Rpb25zLCBnZXRWYWx1ZSwgb2ZBY3Rpb25EaXNwYXRjaGVkLCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcclxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuaW1wb3J0IHtcclxuICBSZXNldEZvcm0sXHJcbiAgVXBkYXRlRm9ybSxcclxuICBVcGRhdGVGb3JtRGlydHksXHJcbiAgVXBkYXRlRm9ybUVycm9ycyxcclxuICBVcGRhdGVGb3JtU3RhdHVzLFxyXG4gIFVwZGF0ZUZvcm1WYWx1ZVxyXG59IGZyb20gJy4vYWN0aW9ucyc7XHJcblxyXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbmd4c0Zvcm1dJyB9KVxyXG5leHBvcnQgY2xhc3MgRm9ybURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcclxuICBASW5wdXQoJ25neHNGb3JtJylcclxuICBwYXRoOiBzdHJpbmcgPSBudWxsITtcclxuXHJcbiAgQElucHV0KCduZ3hzRm9ybURlYm91bmNlJylcclxuICBkZWJvdW5jZSA9IDEwMDtcclxuXHJcbiAgQElucHV0KCduZ3hzRm9ybUNsZWFyT25EZXN0cm95JylcclxuICBzZXQgY2xlYXJEZXN0cm95KHZhbDogYm9vbGVhbikge1xyXG4gICAgdGhpcy5fY2xlYXJEZXN0cm95ID0gdmFsICE9IG51bGwgJiYgYCR7dmFsfWAgIT09ICdmYWxzZSc7XHJcbiAgfVxyXG5cclxuICBnZXQgY2xlYXJEZXN0cm95KCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyRGVzdHJveTtcclxuICB9XHJcblxyXG4gIF9jbGVhckRlc3Ryb3kgPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xyXG4gIHByaXZhdGUgX3VwZGF0aW5nID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBfYWN0aW9ucyQ6IEFjdGlvbnMsXHJcbiAgICBwcml2YXRlIF9zdG9yZTogU3RvcmUsXHJcbiAgICBwcml2YXRlIF9mb3JtR3JvdXBEaXJlY3RpdmU6IEZvcm1Hcm91cERpcmVjdGl2ZSxcclxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZlxyXG4gICkge31cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICB0aGlzLl9hY3Rpb25zJFxyXG4gICAgICAucGlwZShcclxuICAgICAgICBvZkFjdGlvbkRpc3BhdGNoZWQoUmVzZXRGb3JtKSxcclxuICAgICAgICBmaWx0ZXIoKGFjdGlvbjogUmVzZXRGb3JtKSA9PiBhY3Rpb24ucGF5bG9hZC5wYXRoID09PSB0aGlzLnBhdGgpLFxyXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcclxuICAgICAgKVxyXG4gICAgICAuc3Vic2NyaWJlKCh7IHBheWxvYWQ6IHsgdmFsdWUgfSB9OiBSZXNldEZvcm0pID0+IHtcclxuICAgICAgICB0aGlzLmZvcm0ucmVzZXQodmFsdWUpO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlV2l0aFJhd1ZhbHVlKHRydWUpO1xyXG4gICAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdldFN0YXRlU3RyZWFtKGAke3RoaXMucGF0aH0ubW9kZWxgKS5zdWJzY3JpYmUobW9kZWwgPT4ge1xyXG4gICAgICBpZiAodGhpcy5fdXBkYXRpbmcgfHwgIW1vZGVsKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShtb2RlbCk7XHJcbiAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5nZXRTdGF0ZVN0cmVhbShgJHt0aGlzLnBhdGh9LmRpcnR5YCkuc3Vic2NyaWJlKGRpcnR5ID0+IHtcclxuICAgICAgaWYgKHRoaXMuZm9ybS5kaXJ0eSA9PT0gZGlydHkgfHwgdHlwZW9mIGRpcnR5ICE9PSAnYm9vbGVhbicpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChkaXJ0eSkge1xyXG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQXNEaXJ0eSgpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIE9uIGZpcnN0IHN0YXRlIGNoYW5nZSwgc3luYyBmb3JtIG1vZGVsLCBzdGF0dXMgYW5kIGRpcnR5IHdpdGggc3RhdGVcclxuICAgIHRoaXMuX3N0b3JlXHJcbiAgICAgIC5zZWxlY3RPbmNlKHN0YXRlID0+IGdldFZhbHVlKHN0YXRlLCB0aGlzLnBhdGgpKVxyXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChbXHJcbiAgICAgICAgICBuZXcgVXBkYXRlRm9ybVZhbHVlKHtcclxuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxyXG4gICAgICAgICAgICB2YWx1ZTogdGhpcy5mb3JtLmdldFJhd1ZhbHVlKClcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbmV3IFVwZGF0ZUZvcm1TdGF0dXMoe1xyXG4gICAgICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXHJcbiAgICAgICAgICAgIHN0YXR1czogdGhpcy5mb3JtLnN0YXR1c1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBuZXcgVXBkYXRlRm9ybURpcnR5KHtcclxuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxyXG4gICAgICAgICAgICBkaXJ0eTogdGhpcy5mb3JtLmRpcnR5XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIF0pO1xyXG4gICAgICB9KTtcclxuXHJcbiAgICB0aGlzLmdldFN0YXRlU3RyZWFtKGAke3RoaXMucGF0aH0uZGlzYWJsZWRgKS5zdWJzY3JpYmUoZGlzYWJsZWQgPT4ge1xyXG4gICAgICBpZiAodGhpcy5mb3JtLmRpc2FibGVkID09PSBkaXNhYmxlZCB8fCB0eXBlb2YgZGlzYWJsZWQgIT09ICdib29sZWFuJykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRpc2FibGVkKSB7XHJcbiAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZvcm0uZW5hYmxlKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuX2NkLm1hcmtGb3JDaGVjaygpO1xyXG4gICAgfSk7XHJcblxyXG4gICAgdGhpcy5fZm9ybUdyb3VwRGlyZWN0aXZlLnZhbHVlQ2hhbmdlcyEucGlwZSh0aGlzLmRlYm91bmNlQ2hhbmdlKCkpLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlV2l0aFJhd1ZhbHVlKCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmVcclxuICAgICAgLnN0YXR1c0NoYW5nZXMhLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGhpcy5kZWJvdW5jZUNoYW5nZSgpKVxyXG4gICAgICAuc3Vic2NyaWJlKChzdGF0dXM6IHN0cmluZykgPT4ge1xyXG4gICAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKFxyXG4gICAgICAgICAgbmV3IFVwZGF0ZUZvcm1TdGF0dXMoe1xyXG4gICAgICAgICAgICBzdGF0dXMsXHJcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9KTtcclxuICB9XHJcblxyXG4gIHVwZGF0ZUZvcm1TdGF0ZVdpdGhSYXdWYWx1ZSh3aXRoRm9ybVN0YXR1cz86IGJvb2xlYW4pIHtcclxuICAgIGlmICh0aGlzLl91cGRhdGluZykgcmV0dXJuO1xyXG5cclxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZm9ybUdyb3VwRGlyZWN0aXZlLmNvbnRyb2wuZ2V0UmF3VmFsdWUoKTtcclxuXHJcbiAgICBjb25zdCBhY3Rpb25zOiBhbnlbXSA9IFtcclxuICAgICAgbmV3IFVwZGF0ZUZvcm1WYWx1ZSh7XHJcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxyXG4gICAgICAgIHZhbHVlXHJcbiAgICAgIH0pLFxyXG4gICAgICBuZXcgVXBkYXRlRm9ybURpcnR5KHtcclxuICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXHJcbiAgICAgICAgZGlydHk6IHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZS5kaXJ0eVxyXG4gICAgICB9KSxcclxuICAgICAgbmV3IFVwZGF0ZUZvcm1FcnJvcnMoe1xyXG4gICAgICAgIHBhdGg6IHRoaXMucGF0aCxcclxuICAgICAgICBlcnJvcnM6IHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZS5lcnJvcnNcclxuICAgICAgfSlcclxuICAgIF07XHJcblxyXG4gICAgaWYgKHdpdGhGb3JtU3RhdHVzKSB7XHJcbiAgICAgIGFjdGlvbnMucHVzaChcclxuICAgICAgICBuZXcgVXBkYXRlRm9ybVN0YXR1cyh7XHJcbiAgICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXHJcbiAgICAgICAgICBzdGF0dXM6IHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZS5zdGF0dXNcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3VwZGF0aW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKGFjdGlvbnMpLnN1YnNjcmliZSh7XHJcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5fdXBkYXRpbmcgPSBmYWxzZSksXHJcbiAgICAgIGNvbXBsZXRlOiAoKSA9PiAodGhpcy5fdXBkYXRpbmcgPSBmYWxzZSlcclxuICAgIH0pO1xyXG4gIH1cclxuICBuZ09uRGVzdHJveSgpIHtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcclxuICAgIHRoaXMuX2Rlc3Ryb3kkLmNvbXBsZXRlKCk7XHJcblxyXG4gICAgaWYgKHRoaXMuY2xlYXJEZXN0cm95KSB7XHJcbiAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKFxyXG4gICAgICAgIG5ldyBVcGRhdGVGb3JtKHtcclxuICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcclxuICAgICAgICAgIHZhbHVlOiBudWxsLFxyXG4gICAgICAgICAgZGlydHk6IG51bGwsXHJcbiAgICAgICAgICBzdGF0dXM6IG51bGwsXHJcbiAgICAgICAgICBlcnJvcnM6IG51bGxcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBkZWJvdW5jZUNoYW5nZSgpIHtcclxuICAgIGNvbnN0IHNraXBEZWJvdW5jZVRpbWUgPVxyXG4gICAgICB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmUuY29udHJvbC51cGRhdGVPbiAhPT0gJ2NoYW5nZScgfHwgdGhpcy5kZWJvdW5jZSA8IDA7XHJcblxyXG4gICAgcmV0dXJuIHNraXBEZWJvdW5jZVRpbWVcclxuICAgICAgPyAoY2hhbmdlOiBPYnNlcnZhYmxlPGFueT4pID0+IGNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXHJcbiAgICAgIDogKGNoYW5nZTogT2JzZXJ2YWJsZTxhbnk+KSA9PlxyXG4gICAgICAgICAgY2hhbmdlLnBpcGUoZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2UpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0IGZvcm0oKTogRm9ybUdyb3VwIHtcclxuICAgIHJldHVybiB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmUuZm9ybTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2V0U3RhdGVTdHJlYW0ocGF0aDogc3RyaW5nKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RvcmUuc2VsZWN0KHN0YXRlID0+IGdldFZhbHVlKHN0YXRlLCBwYXRoKSkucGlwZSh0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKTtcclxuICB9XHJcbn1cclxuIl19
1
+ /**
2
+ * @fileoverview added by tsickle
3
+ * @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
4
+ */
5
+ import { ChangeDetectorRef, Directive, Input } from '@angular/core';
6
+ import { FormGroupDirective } from '@angular/forms';
7
+ import { Actions, getValue, ofActionDispatched, Store } from '@ngxs/store';
8
+ import { Subject } from 'rxjs';
9
+ import { debounceTime, distinctUntilChanged, filter, takeUntil } from 'rxjs/operators';
10
+ import { ResetForm, UpdateForm, UpdateFormDirty, UpdateFormErrors, UpdateFormStatus, UpdateFormValue } from './actions';
11
+ export class FormDirective {
12
+ /**
13
+ * @param {?} _actions$
14
+ * @param {?} _store
15
+ * @param {?} _formGroupDirective
16
+ * @param {?} _cd
17
+ */
18
+ constructor(_actions$, _store, _formGroupDirective, _cd) {
19
+ this._actions$ = _actions$;
20
+ this._store = _store;
21
+ this._formGroupDirective = _formGroupDirective;
22
+ this._cd = _cd;
23
+ this.path = (/** @type {?} */ (null));
24
+ this.debounce = 100;
25
+ this._clearDestroy = false;
26
+ this._destroy$ = new Subject();
27
+ this._updating = false;
28
+ }
29
+ /**
30
+ * @param {?} val
31
+ * @return {?}
32
+ */
33
+ set clearDestroy(val) {
34
+ this._clearDestroy = val != null && `${val}` !== 'false';
35
+ }
36
+ /**
37
+ * @return {?}
38
+ */
39
+ get clearDestroy() {
40
+ return this._clearDestroy;
41
+ }
42
+ /**
43
+ * @return {?}
44
+ */
45
+ ngOnInit() {
46
+ this._actions$
47
+ .pipe(ofActionDispatched(ResetForm), filter((/**
48
+ * @param {?} action
49
+ * @return {?}
50
+ */
51
+ (action) => action.payload.path === this.path)), takeUntil(this._destroy$))
52
+ .subscribe((/**
53
+ * @param {?} __0
54
+ * @return {?}
55
+ */
56
+ ({ payload: { value } }) => {
57
+ this.form.reset(value);
58
+ this.updateFormStateWithRawValue(true);
59
+ this._cd.markForCheck();
60
+ }));
61
+ this.getStateStream(`${this.path}.model`).subscribe((/**
62
+ * @param {?} model
63
+ * @return {?}
64
+ */
65
+ model => {
66
+ if (this._updating || !model) {
67
+ return;
68
+ }
69
+ this.form.patchValue(model);
70
+ this._cd.markForCheck();
71
+ }));
72
+ this.getStateStream(`${this.path}.dirty`).subscribe((/**
73
+ * @param {?} dirty
74
+ * @return {?}
75
+ */
76
+ dirty => {
77
+ if (this.form.dirty === dirty || typeof dirty !== 'boolean') {
78
+ return;
79
+ }
80
+ if (dirty) {
81
+ this.form.markAsDirty();
82
+ }
83
+ else {
84
+ this.form.markAsPristine();
85
+ }
86
+ this._cd.markForCheck();
87
+ }));
88
+ // On first state change, sync form model, status and dirty with state
89
+ this._store
90
+ .selectOnce((/**
91
+ * @param {?} state
92
+ * @return {?}
93
+ */
94
+ state => getValue(state, this.path)))
95
+ .subscribe((/**
96
+ * @return {?}
97
+ */
98
+ () => {
99
+ this._store.dispatch([
100
+ new UpdateFormValue({
101
+ path: this.path,
102
+ value: this.form.getRawValue()
103
+ }),
104
+ new UpdateFormStatus({
105
+ path: this.path,
106
+ status: this.form.status
107
+ }),
108
+ new UpdateFormDirty({
109
+ path: this.path,
110
+ dirty: this.form.dirty
111
+ })
112
+ ]);
113
+ }));
114
+ this.getStateStream(`${this.path}.disabled`).subscribe((/**
115
+ * @param {?} disabled
116
+ * @return {?}
117
+ */
118
+ disabled => {
119
+ if (this.form.disabled === disabled || typeof disabled !== 'boolean') {
120
+ return;
121
+ }
122
+ if (disabled) {
123
+ this.form.disable();
124
+ }
125
+ else {
126
+ this.form.enable();
127
+ }
128
+ this._cd.markForCheck();
129
+ }));
130
+ (/** @type {?} */ (this._formGroupDirective
131
+ .valueChanges)).pipe(distinctUntilChanged((/**
132
+ * @param {?} a
133
+ * @param {?} b
134
+ * @return {?}
135
+ */
136
+ (a, b) => JSON.stringify(a) === JSON.stringify(b))), this.debounceChange())
137
+ .subscribe((/**
138
+ * @return {?}
139
+ */
140
+ () => {
141
+ this.updateFormStateWithRawValue();
142
+ }));
143
+ (/** @type {?} */ (this._formGroupDirective
144
+ .statusChanges)).pipe(distinctUntilChanged(), this.debounceChange())
145
+ .subscribe((/**
146
+ * @param {?} status
147
+ * @return {?}
148
+ */
149
+ (status) => {
150
+ this._store.dispatch(new UpdateFormStatus({
151
+ status,
152
+ path: this.path
153
+ }));
154
+ }));
155
+ }
156
+ /**
157
+ * @param {?=} withFormStatus
158
+ * @return {?}
159
+ */
160
+ updateFormStateWithRawValue(withFormStatus) {
161
+ if (this._updating)
162
+ return;
163
+ /** @type {?} */
164
+ const value = this._formGroupDirective.control.getRawValue();
165
+ /** @type {?} */
166
+ const actions = [
167
+ new UpdateFormValue({
168
+ path: this.path,
169
+ value
170
+ }),
171
+ new UpdateFormDirty({
172
+ path: this.path,
173
+ dirty: this._formGroupDirective.dirty
174
+ }),
175
+ new UpdateFormErrors({
176
+ path: this.path,
177
+ errors: this._formGroupDirective.errors
178
+ })
179
+ ];
180
+ if (withFormStatus) {
181
+ actions.push(new UpdateFormStatus({
182
+ path: this.path,
183
+ status: this._formGroupDirective.status
184
+ }));
185
+ }
186
+ this._updating = true;
187
+ this._store.dispatch(actions).subscribe({
188
+ error: (/**
189
+ * @return {?}
190
+ */
191
+ () => (this._updating = false)),
192
+ complete: (/**
193
+ * @return {?}
194
+ */
195
+ () => (this._updating = false))
196
+ });
197
+ }
198
+ /**
199
+ * @return {?}
200
+ */
201
+ ngOnDestroy() {
202
+ this._destroy$.next();
203
+ this._destroy$.complete();
204
+ if (this.clearDestroy) {
205
+ this._store.dispatch(new UpdateForm({
206
+ path: this.path,
207
+ value: null,
208
+ dirty: null,
209
+ status: null,
210
+ errors: null
211
+ }));
212
+ }
213
+ }
214
+ /**
215
+ * @private
216
+ * @return {?}
217
+ */
218
+ debounceChange() {
219
+ /** @type {?} */
220
+ const skipDebounceTime = this._formGroupDirective.control.updateOn !== 'change' || this.debounce < 0;
221
+ return skipDebounceTime
222
+ ? (/**
223
+ * @param {?} change
224
+ * @return {?}
225
+ */
226
+ (change) => change.pipe(takeUntil(this._destroy$)))
227
+ : (/**
228
+ * @param {?} change
229
+ * @return {?}
230
+ */
231
+ (change) => change.pipe(debounceTime(this.debounce), takeUntil(this._destroy$)));
232
+ }
233
+ /**
234
+ * @private
235
+ * @return {?}
236
+ */
237
+ get form() {
238
+ return this._formGroupDirective.form;
239
+ }
240
+ /**
241
+ * @private
242
+ * @param {?} path
243
+ * @return {?}
244
+ */
245
+ getStateStream(path) {
246
+ return this._store.select((/**
247
+ * @param {?} state
248
+ * @return {?}
249
+ */
250
+ state => getValue(state, path))).pipe(takeUntil(this._destroy$));
251
+ }
252
+ }
253
+ FormDirective.decorators = [
254
+ { type: Directive, args: [{ selector: '[ngxsForm]' },] }
255
+ ];
256
+ /** @nocollapse */
257
+ FormDirective.ctorParameters = () => [
258
+ { type: Actions },
259
+ { type: Store },
260
+ { type: FormGroupDirective },
261
+ { type: ChangeDetectorRef }
262
+ ];
263
+ FormDirective.propDecorators = {
264
+ path: [{ type: Input, args: ['ngxsForm',] }],
265
+ debounce: [{ type: Input, args: ['ngxsFormDebounce',] }],
266
+ clearDestroy: [{ type: Input, args: ['ngxsFormClearOnDestroy',] }]
267
+ };
268
+ if (false) {
269
+ /** @type {?} */
270
+ FormDirective.prototype.path;
271
+ /** @type {?} */
272
+ FormDirective.prototype.debounce;
273
+ /** @type {?} */
274
+ FormDirective.prototype._clearDestroy;
275
+ /**
276
+ * @type {?}
277
+ * @private
278
+ */
279
+ FormDirective.prototype._destroy$;
280
+ /**
281
+ * @type {?}
282
+ * @private
283
+ */
284
+ FormDirective.prototype._updating;
285
+ /**
286
+ * @type {?}
287
+ * @private
288
+ */
289
+ FormDirective.prototype._actions$;
290
+ /**
291
+ * @type {?}
292
+ * @private
293
+ */
294
+ FormDirective.prototype._store;
295
+ /**
296
+ * @type {?}
297
+ * @private
298
+ */
299
+ FormDirective.prototype._formGroupDirective;
300
+ /**
301
+ * @type {?}
302
+ * @private
303
+ */
304
+ FormDirective.prototype._cd;
305
+ }
306
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6Im5nOi8vQG5neHMvZm9ybS1wbHVnaW4vIiwic291cmNlcyI6WyJzcmMvZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFhLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBYyxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDM0MsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNoQixNQUFNLFdBQVcsQ0FBQztBQUduQixNQUFNLE9BQU8sYUFBYTs7Ozs7OztJQXFCeEIsWUFDVSxTQUFrQixFQUNsQixNQUFhLEVBQ2IsbUJBQXVDLEVBQ3ZDLEdBQXNCO1FBSHRCLGNBQVMsR0FBVCxTQUFTLENBQVM7UUFDbEIsV0FBTSxHQUFOLE1BQU0sQ0FBTztRQUNiLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBb0I7UUFDdkMsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUF2QmhDLFNBQUksR0FBVyxtQkFBQSxJQUFJLEVBQUMsQ0FBQztRQUdyQixhQUFRLEdBQUcsR0FBRyxDQUFDO1FBV2Ysa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFTCxjQUFTLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUN6QyxjQUFTLEdBQUcsS0FBSyxDQUFDO0lBT3ZCLENBQUM7Ozs7O0lBbkJKLElBQ0ksWUFBWSxD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LFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDNUYsQ0FBQzs7O1lBNUxGLFNBQVMsU0FBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUU7Ozs7WUFaNUIsT0FBTztZQUFnQyxLQUFLO1lBRGpDLGtCQUFrQjtZQUQ3QixpQkFBaUI7OzttQkFnQnZCLEtBQUssU0FBQyxVQUFVO3VCQUdoQixLQUFLLFNBQUMsa0JBQWtCOzJCQUd4QixLQUFLLFNBQUMsd0JBQXdCOzs7O0lBTi9CLDZCQUNxQjs7SUFFckIsaUNBQ2U7O0lBV2Ysc0NBQXNCOzs7OztJQUV0QixrQ0FBaUQ7Ozs7O0lBQ2pELGtDQUEwQjs7Ozs7SUFHeEIsa0NBQTBCOzs7OztJQUMxQiwrQkFBcUI7Ozs7O0lBQ3JCLDRDQUErQzs7Ozs7SUFDL0MsNEJBQThCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIERpcmVjdGl2ZSwgSW5wdXQsIE9uRGVzdHJveSwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1Hcm91cERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEFjdGlvbnMsIGdldFZhbHVlLCBvZkFjdGlvbkRpc3BhdGNoZWQsIFN0b3JlIH0gZnJvbSAnQG5neHMvc3RvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCB0YWtlVW50aWwgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQge1xuICBSZXNldEZvcm0sXG4gIFVwZGF0ZUZvcm0sXG4gIFVwZGF0ZUZvcm1EaXJ0eSxcbiAgVXBkYXRlRm9ybUVycm9ycyxcbiAgVXBkYXRlRm9ybVN0YXR1cyxcbiAgVXBkYXRlRm9ybVZhbHVlXG59IGZyb20gJy4vYWN0aW9ucyc7XG5cbkBEaXJlY3RpdmUoeyBzZWxlY3RvcjogJ1tuZ3hzRm9ybV0nIH0pXG5leHBvcnQgY2xhc3MgRm9ybURpcmVjdGl2ZSBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCduZ3hzRm9ybScpXG4gIHBhdGg6IHN0cmluZyA9IG51bGwhO1xuXG4gIEBJbnB1dCgnbmd4c0Zvcm1EZWJvdW5jZScpXG4gIGRlYm91bmNlID0gMTAwO1xuXG4gIEBJbnB1dCgnbmd4c0Zvcm1DbGVhck9uRGVzdHJveScpXG4gIHNldCBjbGVhckRlc3Ryb3kodmFsOiBib29sZWFuKSB7XG4gICAgdGhpcy5fY2xlYXJEZXN0cm95ID0gdmFsICE9IG51bGwgJiYgYCR7dmFsfWAgIT09ICdmYWxzZSc7XG4gIH1cblxuICBnZXQgY2xlYXJEZXN0cm95KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLl9jbGVhckRlc3Ryb3k7XG4gIH1cblxuICBfY2xlYXJEZXN0cm95ID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBfZGVzdHJveSQgPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuICBwcml2YXRlIF91cGRhdGluZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgX2FjdGlvbnMkOiBBY3Rpb25zLFxuICAgIHByaXZhdGUgX3N0b3JlOiBTdG9yZSxcbiAgICBwcml2YXRlIF9mb3JtR3JvdXBEaXJlY3RpdmU6IEZvcm1Hcm91cERpcmVjdGl2ZSxcbiAgICBwcml2YXRlIF9jZDogQ2hhbmdlRGV0ZWN0b3JSZWZcbiAgKSB7fVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuX2FjdGlvbnMkXG4gICAgICAucGlwZShcbiAgICAgICAgb2ZBY3Rpb25EaXNwYXRjaGVkKFJlc2V0Rm9ybSksXG4gICAgICAgIGZpbHRlcigoYWN0aW9uOiBSZXNldEZvcm0pID0+IGFjdGlvbi5wYXlsb2FkLnBhdGggPT09IHRoaXMucGF0aCksXG4gICAgICAgIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKHsgcGF5bG9hZDogeyB2YWx1ZSB9IH06IFJlc2V0Rm9ybSkgPT4ge1xuICAgICAgICB0aGlzLmZvcm0ucmVzZXQodmFsdWUpO1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1TdGF0ZVdpdGhSYXdWYWx1ZSh0cnVlKTtcbiAgICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZ2V0U3RhdGVTdHJlYW0oYCR7dGhpcy5wYXRofS5tb2RlbGApLnN1YnNjcmliZShtb2RlbCA9PiB7XG4gICAgICBpZiAodGhpcy5fdXBkYXRpbmcgfHwgIW1vZGVsKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5mb3JtLnBhdGNoVmFsdWUobW9kZWwpO1xuICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLmdldFN0YXRlU3RyZWFtKGAke3RoaXMucGF0aH0uZGlydHlgKS5zdWJzY3JpYmUoZGlydHkgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9ybS5kaXJ0eSA9PT0gZGlydHkgfHwgdHlwZW9mIGRpcnR5ICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlydHkpIHtcbiAgICAgICAgdGhpcy5mb3JtLm1hcmtBc0RpcnR5KCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmZvcm0ubWFya0FzUHJpc3RpbmUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICAvLyBPbiBmaXJzdCBzdGF0ZSBjaGFuZ2UsIHN5bmMgZm9ybSBtb2RlbCwgc3RhdHVzIGFuZCBkaXJ0eSB3aXRoIHN0YXRlXG4gICAgdGhpcy5fc3RvcmVcbiAgICAgIC5zZWxlY3RPbmNlKHN0YXRlID0+IGdldFZhbHVlKHN0YXRlLCB0aGlzLnBhdGgpKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKFtcbiAgICAgICAgICBuZXcgVXBkYXRlRm9ybVZhbHVlKHtcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIHZhbHVlOiB0aGlzLmZvcm0uZ2V0UmF3VmFsdWUoKVxuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5ldyBVcGRhdGVGb3JtU3RhdHVzKHtcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICAgIHN0YXR1czogdGhpcy5mb3JtLnN0YXR1c1xuICAgICAgICAgIH0pLFxuICAgICAgICAgIG5ldyBVcGRhdGVGb3JtRGlydHkoe1xuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgICAgZGlydHk6IHRoaXMuZm9ybS5kaXJ0eVxuICAgICAgICAgIH0pXG4gICAgICAgIF0pO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLmdldFN0YXRlU3RyZWFtKGAke3RoaXMucGF0aH0uZGlzYWJsZWRgKS5zdWJzY3JpYmUoZGlzYWJsZWQgPT4ge1xuICAgICAgaWYgKHRoaXMuZm9ybS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHwgdHlwZW9mIGRpc2FibGVkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBpZiAoZGlzYWJsZWQpIHtcbiAgICAgICAgdGhpcy5mb3JtLmRpc2FibGUoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybS5lbmFibGUoKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2QubWFya0ZvckNoZWNrKCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmVcbiAgICAgIC52YWx1ZUNoYW5nZXMhLnBpcGUoXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChhLCBiKSA9PiBKU09OLnN0cmluZ2lmeShhKSA9PT0gSlNPTi5zdHJpbmdpZnkoYikpLFxuICAgICAgICB0aGlzLmRlYm91bmNlQ2hhbmdlKClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLnVwZGF0ZUZvcm1TdGF0ZVdpdGhSYXdWYWx1ZSgpO1xuICAgICAgfSk7XG5cbiAgICB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmVcbiAgICAgIC5zdGF0dXNDaGFuZ2VzIS5waXBlKGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksIHRoaXMuZGVib3VuY2VDaGFuZ2UoKSlcbiAgICAgIC5zdWJzY3JpYmUoKHN0YXR1czogc3RyaW5nKSA9PiB7XG4gICAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKFxuICAgICAgICAgIG5ldyBVcGRhdGVGb3JtU3RhdHVzKHtcbiAgICAgICAgICAgIHN0YXR1cyxcbiAgICAgICAgICAgIHBhdGg6IHRoaXMucGF0aFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHVwZGF0ZUZvcm1TdGF0ZVdpdGhSYXdWYWx1ZSh3aXRoRm9ybVN0YXR1cz86IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5fdXBkYXRpbmcpIHJldHVybjtcblxuICAgIGNvbnN0IHZhbHVlID0gdGhpcy5fZm9ybUdyb3VwRGlyZWN0aXZlLmNvbnRyb2wuZ2V0UmF3VmFsdWUoKTtcblxuICAgIGNvbnN0IGFjdGlvbnM6IGFueVtdID0gW1xuICAgICAgbmV3IFVwZGF0ZUZvcm1WYWx1ZSh7XG4gICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgdmFsdWVcbiAgICAgIH0pLFxuICAgICAgbmV3IFVwZGF0ZUZvcm1EaXJ0eSh7XG4gICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgZGlydHk6IHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZS5kaXJ0eVxuICAgICAgfSksXG4gICAgICBuZXcgVXBkYXRlRm9ybUVycm9ycyh7XG4gICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgZXJyb3JzOiB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmUuZXJyb3JzXG4gICAgICB9KVxuICAgIF07XG5cbiAgICBpZiAod2l0aEZvcm1TdGF0dXMpIHtcbiAgICAgIGFjdGlvbnMucHVzaChcbiAgICAgICAgbmV3IFVwZGF0ZUZvcm1TdGF0dXMoe1xuICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICBzdGF0dXM6IHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZS5zdGF0dXNcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5fdXBkYXRpbmcgPSB0cnVlO1xuICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKGFjdGlvbnMpLnN1YnNjcmliZSh7XG4gICAgICBlcnJvcjogKCkgPT4gKHRoaXMuX3VwZGF0aW5nID0gZmFsc2UpLFxuICAgICAgY29tcGxldGU6ICgpID0+ICh0aGlzLl91cGRhdGluZyA9IGZhbHNlKVxuICAgIH0pO1xuICB9XG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMuX2Rlc3Ryb3kkLm5leHQoKTtcbiAgICB0aGlzLl9kZXN0cm95JC5jb21wbGV0ZSgpO1xuXG4gICAgaWYgKHRoaXMuY2xlYXJEZXN0cm95KSB7XG4gICAgICB0aGlzLl9zdG9yZS5kaXNwYXRjaChcbiAgICAgICAgbmV3IFVwZGF0ZUZvcm0oe1xuICAgICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgICB2YWx1ZTogbnVsbCxcbiAgICAgICAgICBkaXJ0eTogbnVsbCxcbiAgICAgICAgICBzdGF0dXM6IG51bGwsXG4gICAgICAgICAgZXJyb3JzOiBudWxsXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGVib3VuY2VDaGFuZ2UoKSB7XG4gICAgY29uc3Qgc2tpcERlYm91bmNlVGltZSA9XG4gICAgICB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmUuY29udHJvbC51cGRhdGVPbiAhPT0gJ2NoYW5nZScgfHwgdGhpcy5kZWJvdW5jZSA8IDA7XG5cbiAgICByZXR1cm4gc2tpcERlYm91bmNlVGltZVxuICAgICAgPyAoY2hhbmdlOiBPYnNlcnZhYmxlPGFueT4pID0+IGNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICA6IChjaGFuZ2U6IE9ic2VydmFibGU8YW55PikgPT5cbiAgICAgICAgICBjaGFuZ2UucGlwZShkZWJvdW5jZVRpbWUodGhpcy5kZWJvdW5jZSksIHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXQgZm9ybSgpOiBGb3JtR3JvdXAge1xuICAgIHJldHVybiB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmUuZm9ybTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0U3RhdGVTdHJlYW0ocGF0aDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0b3JlLnNlbGVjdChzdGF0ZSA9PiBnZXRWYWx1ZShzdGF0ZSwgcGF0aCkpLnBpcGUodGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKSk7XG4gIH1cbn1cbiJdfQ==