@ngxs/form-plugin 3.8.1 → 3.8.2-dev.master-a75608e

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/README.md CHANGED
@@ -1,3 +1,3 @@
1
- # @ngxs/forms-plugin
1
+ # @ngxs/form-plugin
2
2
 
3
3
  Forms plugin for NGXS. See [repo](https://github.com/ngxs/store) for more info.
@@ -0,0 +1,61 @@
1
+ export class UpdateFormStatus {
2
+ constructor(payload) {
3
+ this.payload = payload;
4
+ }
5
+ }
6
+ UpdateFormStatus.type = '[Forms] Update Form Status';
7
+ export class UpdateFormValue {
8
+ constructor(payload) {
9
+ this.payload = payload;
10
+ }
11
+ }
12
+ UpdateFormValue.type = '[Forms] Update Form Value';
13
+ export class UpdateForm {
14
+ constructor(payload) {
15
+ this.payload = payload;
16
+ }
17
+ }
18
+ UpdateForm.type = '[Forms] Update Form';
19
+ export class UpdateFormDirty {
20
+ constructor(payload) {
21
+ this.payload = payload;
22
+ }
23
+ }
24
+ UpdateFormDirty.type = '[Forms] Update Form Dirty';
25
+ export class SetFormDirty {
26
+ constructor(payload) {
27
+ this.payload = payload;
28
+ }
29
+ }
30
+ SetFormDirty.type = '[Forms] Set Form Dirty';
31
+ export class SetFormPristine {
32
+ constructor(payload) {
33
+ this.payload = payload;
34
+ }
35
+ }
36
+ SetFormPristine.type = '[Forms] Set Form Pristine';
37
+ export class UpdateFormErrors {
38
+ constructor(payload) {
39
+ this.payload = payload;
40
+ }
41
+ }
42
+ UpdateFormErrors.type = '[Forms] Update Form Errors';
43
+ export class SetFormDisabled {
44
+ constructor(payload) {
45
+ this.payload = payload;
46
+ }
47
+ }
48
+ SetFormDisabled.type = '[Forms] Set Form Disabled';
49
+ export class SetFormEnabled {
50
+ constructor(payload) {
51
+ this.payload = payload;
52
+ }
53
+ }
54
+ SetFormEnabled.type = '[Forms] Set Form Enabled';
55
+ export class ResetForm {
56
+ constructor(payload) {
57
+ this.payload = payload;
58
+ }
59
+ }
60
+ ResetForm.type = '[Forms] Reset Form';
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0tcGx1Z2luL3NyYy9hY3Rpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFDUyxPQUdOO1FBSE0sWUFBTyxHQUFQLE9BQU8sQ0FHYjtJQUNBLENBQUM7O0FBUFkscUJBQUksR0FBRyw0QkFBNEIsQ0FBQztBQVV0RCxNQUFNLE9BQU8sZUFBZTtJQUcxQixZQUFtQixPQUE0RDtRQUE1RCxZQUFPLEdBQVAsT0FBTyxDQUFxRDtJQUFHLENBQUM7O0FBRm5FLG9CQUFJLEdBQUcsMkJBQTJCLENBQUM7QUFLckQsTUFBTSxPQUFPLFVBQVU7SUFHckIsWUFDUyxPQU1OO1FBTk0sWUFBTyxHQUFQLE9BQU8sQ0FNYjtJQUNBLENBQUM7O0FBVlksZUFBSSxHQUFHLHFCQUFxQixDQUFDO0FBYS9DLE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBQW1CLE9BQWdEO1FBQWhELFlBQU8sR0FBUCxPQUFPLENBQXlDO0lBQUcsQ0FBQzs7QUFGdkQsb0JBQUksR0FBRywyQkFBMkIsQ0FBQztBQUtyRCxNQUFNLE9BQU8sWUFBWTtJQUd2QixZQUFtQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7O0FBRnRCLGlCQUFJLEdBQUcsd0JBQXdCLENBQUM7QUFLbEQsTUFBTSxPQUFPLGVBQWU7SUFHMUIsWUFBbUIsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7SUFBRyxDQUFDOztBQUZ0QixvQkFBSSxHQUFHLDJCQUEyQixDQUFDO0FBS3JELE1BQU0sT0FBTyxnQkFBZ0I7SUFHM0IsWUFBbUIsT0FBaUU7UUFBakUsWUFBTyxHQUFQLE9BQU8sQ0FBMEQ7SUFBRyxDQUFDOztBQUZ4RSxxQkFBSSxHQUFHLDRCQUE0QixDQUFDO0FBS3RELE1BQU0sT0FBTyxlQUFlO0lBRzFCLFlBQW1CLE9BQWU7UUFBZixZQUFPLEdBQVAsT0FBTyxDQUFRO0lBQUcsQ0FBQzs7QUFGdEIsb0JBQUksR0FBRywyQkFBMkIsQ0FBQztBQUtyRCxNQUFNLE9BQU8sY0FBYztJQUd6QixZQUFtQixPQUFlO1FBQWYsWUFBTyxHQUFQLE9BQU8sQ0FBUTtJQUFHLENBQUM7O0FBRnRCLG1CQUFJLEdBQUcsMEJBQTBCLENBQUM7QUFLcEQsTUFBTSxPQUFPLFNBQVM7SUFHcEIsWUFBbUIsT0FBc0M7UUFBdEMsWUFBTyxHQUFQLE9BQU8sQ0FBK0I7SUFBRyxDQUFDOztBQUY3QyxjQUFJLEdBQUcsb0JBQW9CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY2xhc3MgVXBkYXRlRm9ybVN0YXR1cyB7XG4gIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tGb3Jtc10gVXBkYXRlIEZvcm0gU3RhdHVzJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcGF5bG9hZDoge1xuICAgICAgc3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgIH1cbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRm9ybVZhbHVlIHtcbiAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW0Zvcm1zXSBVcGRhdGUgRm9ybSBWYWx1ZSc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IHsgdmFsdWU6IGFueTsgcGF0aDogc3RyaW5nOyBwcm9wZXJ0eVBhdGg/OiBzdHJpbmcgfSkge31cbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZUZvcm0ge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbRm9ybXNdIFVwZGF0ZSBGb3JtJztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgcGF5bG9hZDoge1xuICAgICAgdmFsdWU6IGFueTtcbiAgICAgIGVycm9yczogeyBbazogc3RyaW5nXTogc3RyaW5nIH0gfCBudWxsO1xuICAgICAgZGlydHk6IGJvb2xlYW4gfCBudWxsO1xuICAgICAgc3RhdHVzOiBzdHJpbmcgfCBudWxsO1xuICAgICAgcGF0aDogc3RyaW5nO1xuICAgIH1cbiAgKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRm9ybURpcnR5IHtcbiAgc3RhdGljIHJlYWRvbmx5IHR5cGUgPSAnW0Zvcm1zXSBVcGRhdGUgRm9ybSBEaXJ0eSc7XG5cbiAgY29uc3RydWN0b3IocHVibGljIHBheWxvYWQ6IHsgZGlydHk6IGJvb2xlYW4gfCBudWxsOyBwYXRoOiBzdHJpbmcgfSkge31cbn1cblxuZXhwb3J0IGNsYXNzIFNldEZvcm1EaXJ0eSB7XG4gIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tGb3Jtc10gU2V0IEZvcm0gRGlydHknO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiBzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRGb3JtUHJpc3RpbmUge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbRm9ybXNdIFNldCBGb3JtIFByaXN0aW5lJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogc3RyaW5nKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlRm9ybUVycm9ycyB7XG4gIHN0YXRpYyByZWFkb25seSB0eXBlID0gJ1tGb3Jtc10gVXBkYXRlIEZvcm0gRXJyb3JzJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogeyBlcnJvcnM6IHsgW2s6IHN0cmluZ106IHN0cmluZyB9IHwgbnVsbDsgcGF0aDogc3RyaW5nIH0pIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBTZXRGb3JtRGlzYWJsZWQge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbRm9ybXNdIFNldCBGb3JtIERpc2FibGVkJztcblxuICBjb25zdHJ1Y3RvcihwdWJsaWMgcGF5bG9hZDogc3RyaW5nKSB7fVxufVxuXG5leHBvcnQgY2xhc3MgU2V0Rm9ybUVuYWJsZWQge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbRm9ybXNdIFNldCBGb3JtIEVuYWJsZWQnO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiBzdHJpbmcpIHt9XG59XG5cbmV4cG9ydCBjbGFzcyBSZXNldEZvcm0ge1xuICBzdGF0aWMgcmVhZG9ubHkgdHlwZSA9ICdbRm9ybXNdIFJlc2V0IEZvcm0nO1xuXG4gIGNvbnN0cnVjdG9yKHB1YmxpYyBwYXlsb2FkOiB7IHBhdGg6IHN0cmluZzsgdmFsdWU/OiBhbnkgfSkge31cbn1cbiJdfQ==
@@ -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 { ReplaySubject } 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 NgxsFormDirective {
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 ReplaySubject(1);
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 */ NgxsFormDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormDirective, deps: [{ token: i1.Actions }, { token: i1.Store }, { token: i2.FormGroupDirective }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
162
+ /** @nocollapse */ NgxsFormDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.4", type: NgxsFormDirective, isStandalone: true, selector: "[ngxsForm]", inputs: { path: ["ngxsForm", "path"], debounce: ["ngxsFormDebounce", "debounce"], clearDestroy: ["ngxsFormClearOnDestroy", "clearDestroy"] }, ngImport: i0 });
163
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormDirective, decorators: [{
164
+ type: Directive,
165
+ args: [{ selector: '[ngxsForm]', standalone: true }]
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvZm9ybS1wbHVnaW4vc3JjL2RpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFhLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0QsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUUsS0FBSyxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQzNFLE9BQU8sRUFBYyxhQUFhLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLFlBQVksRUFBRSxvQkFBb0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkYsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsZUFBZSxFQUNmLGdCQUFnQixFQUNoQixnQkFBZ0IsRUFDaEIsZUFBZSxFQUNoQixNQUFNLFdBQVcsQ0FBQzs7OztBQUduQixNQUFNLE9BQU8saUJBQWlCO0lBMEI1QixZQUNVLFNBQWtCLEVBQ2xCLE1BQWEsRUFDYixtQkFBdUMsRUFDdkMsR0FBc0I7UUFIdEIsY0FBUyxHQUFULFNBQVMsQ0FBUztRQUNsQixXQUFNLEdBQU4sTUFBTSxDQUFPO1FBQ2Isd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFvQjtRQUN2QyxRQUFHLEdBQUgsR0FBRyxDQUFtQjtRQTVCaEMsU0FBSSxHQUFXLElBQUssQ0FBQztRQVNiLGNBQVMsR0FBRyxHQUFHLENBQUM7UUFTaEIsa0JBQWEsR0FBRyxLQUFLLENBQUM7UUFFdEIsY0FBUyxHQUFHLEtBQUssQ0FBQztRQUVULGNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBTyxDQUFDLENBQUMsQ0FBQztJQU9yRCxDQUFDO0lBM0JKLElBQ0ksUUFBUSxD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SSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1RixDQUFDOztpSUFoTVUsaUJBQWlCO3FIQUFqQixpQkFBaUI7MkZBQWpCLGlCQUFpQjtrQkFEN0IsU0FBUzttQkFBQyxFQUFFLFFBQVEsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRTttTEFHckQsSUFBSTtzQkFESCxLQUFLO3VCQUFDLFVBQVU7Z0JBSWIsUUFBUTtzQkFEWCxLQUFLO3VCQUFDLGtCQUFrQjtnQkFVckIsWUFBWTtzQkFEZixLQUFLO3VCQUFDLHdCQUF3QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBEaXJlY3RpdmUsIElucHV0LCBPbkRlc3Ryb3ksIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwLCBGb3JtR3JvdXBEaXJlY3RpdmUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBBY3Rpb25zLCBnZXRWYWx1ZSwgb2ZBY3Rpb25EaXNwYXRjaGVkLCBTdG9yZSB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcbmltcG9ydCB7IE9ic2VydmFibGUsIFJlcGxheVN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgZGlzdGluY3RVbnRpbENoYW5nZWQsIGZpbHRlciwgdGFrZVVudGlsIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHtcbiAgUmVzZXRGb3JtLFxuICBVcGRhdGVGb3JtLFxuICBVcGRhdGVGb3JtRGlydHksXG4gIFVwZGF0ZUZvcm1FcnJvcnMsXG4gIFVwZGF0ZUZvcm1TdGF0dXMsXG4gIFVwZGF0ZUZvcm1WYWx1ZVxufSBmcm9tICcuL2FjdGlvbnMnO1xuXG5ARGlyZWN0aXZlKHsgc2VsZWN0b3I6ICdbbmd4c0Zvcm1dJywgc3RhbmRhbG9uZTogdHJ1ZSB9KVxuZXhwb3J0IGNsYXNzIE5neHNGb3JtRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICBASW5wdXQoJ25neHNGb3JtJylcbiAgcGF0aDogc3RyaW5nID0gbnVsbCE7XG5cbiAgQElucHV0KCduZ3hzRm9ybURlYm91bmNlJylcbiAgc2V0IGRlYm91bmNlKGRlYm91bmNlOiBzdHJpbmcgfCBudW1iZXIpIHtcbiAgICB0aGlzLl9kZWJvdW5jZSA9IE51bWJlcihkZWJvdW5jZSk7XG4gIH1cbiAgZ2V0IGRlYm91bmNlKCkge1xuICAgIHJldHVybiB0aGlzLl9kZWJvdW5jZTtcbiAgfVxuICBwcml2YXRlIF9kZWJvdW5jZSA9IDEwMDtcblxuICBASW5wdXQoJ25neHNGb3JtQ2xlYXJPbkRlc3Ryb3knKVxuICBzZXQgY2xlYXJEZXN0cm95KHZhbDogYm9vbGVhbikge1xuICAgIHRoaXMuX2NsZWFyRGVzdHJveSA9IHZhbCAhPSBudWxsICYmIGAke3ZhbH1gICE9PSAnZmFsc2UnO1xuICB9XG4gIGdldCBjbGVhckRlc3Ryb3koKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuX2NsZWFyRGVzdHJveTtcbiAgfVxuICBwcml2YXRlIF9jbGVhckRlc3Ryb3kgPSBmYWxzZTtcblxuICBwcml2YXRlIF91cGRhdGluZyA9IGZhbHNlO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgX2Rlc3Ryb3kkID0gbmV3IFJlcGxheVN1YmplY3Q8dm9pZD4oMSk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfYWN0aW9ucyQ6IEFjdGlvbnMsXG4gICAgcHJpdmF0ZSBfc3RvcmU6IFN0b3JlLFxuICAgIHByaXZhdGUgX2Zvcm1Hcm91cERpcmVjdGl2ZTogRm9ybUdyb3VwRGlyZWN0aXZlLFxuICAgIHByaXZhdGUgX2NkOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5fYWN0aW9ucyRcbiAgICAgIC5waXBlKFxuICAgICAgICBvZkFjdGlvbkRpc3BhdGNoZWQoUmVzZXRGb3JtKSxcbiAgICAgICAgZmlsdGVyKChhY3Rpb246IFJlc2V0Rm9ybSkgPT4gYWN0aW9uLnBheWxvYWQucGF0aCA9PT0gdGhpcy5wYXRoKSxcbiAgICAgICAgdGFrZVVudGlsKHRoaXMuX2Rlc3Ryb3kkKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoeyBwYXlsb2FkOiB7IHZhbHVlIH0gfTogUmVzZXRGb3JtKSA9PiB7XG4gICAgICAgIHRoaXMuZm9ybS5yZXNldCh2YWx1ZSk7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlV2l0aFJhd1ZhbHVlKHRydWUpO1xuICAgICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICAgIH0pO1xuXG4gICAgdGhpcy5nZXRTdGF0ZVN0cmVhbShgJHt0aGlzLnBhdGh9Lm1vZGVsYCkuc3Vic2NyaWJlKG1vZGVsID0+IHtcbiAgICAgIGlmICh0aGlzLl91cGRhdGluZyB8fCAhbW9kZWwpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmZvcm0ucGF0Y2hWYWx1ZShtb2RlbCk7XG4gICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuZ2V0U3RhdGVTdHJlYW0oYCR7dGhpcy5wYXRofS5kaXJ0eWApLnN1YnNjcmliZShkaXJ0eSA9PiB7XG4gICAgICBpZiAodGhpcy5mb3JtLmRpcnR5ID09PSBkaXJ0eSB8fCB0eXBlb2YgZGlydHkgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXJ0eSkge1xuICAgICAgICB0aGlzLmZvcm0ubWFya0FzRGlydHkoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZm9ybS5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIC8vIE9uIGZpcnN0IHN0YXRlIGNoYW5nZSwgc3luYyBmb3JtIG1vZGVsLCBzdGF0dXMgYW5kIGRpcnR5IHdpdGggc3RhdGVcbiAgICB0aGlzLl9zdG9yZVxuICAgICAgLnNlbGVjdE9uY2Uoc3RhdGUgPT4gZ2V0VmFsdWUoc3RhdGUsIHRoaXMucGF0aCkpXG4gICAgICAuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goW1xuICAgICAgICAgIG5ldyBVcGRhdGVGb3JtVmFsdWUoe1xuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgICAgdmFsdWU6IHRoaXMuZm9ybS5nZXRSYXdWYWx1ZSgpXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IFVwZGF0ZUZvcm1TdGF0dXMoe1xuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLmZvcm0uc3RhdHVzXG4gICAgICAgICAgfSksXG4gICAgICAgICAgbmV3IFVwZGF0ZUZvcm1EaXJ0eSh7XG4gICAgICAgICAgICBwYXRoOiB0aGlzLnBhdGgsXG4gICAgICAgICAgICBkaXJ0eTogdGhpcy5mb3JtLmRpcnR5XG4gICAgICAgICAgfSlcbiAgICAgICAgXSk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuZ2V0U3RhdGVTdHJlYW0oYCR7dGhpcy5wYXRofS5kaXNhYmxlZGApLnN1YnNjcmliZShkaXNhYmxlZCA9PiB7XG4gICAgICBpZiAodGhpcy5mb3JtLmRpc2FibGVkID09PSBkaXNhYmxlZCB8fCB0eXBlb2YgZGlzYWJsZWQgIT09ICdib29sZWFuJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgICB0aGlzLmZvcm0uZGlzYWJsZSgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5mb3JtLmVuYWJsZSgpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jZC5tYXJrRm9yQ2hlY2soKTtcbiAgICB9KTtcblxuICAgIHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZVxuICAgICAgLnZhbHVlQ2hhbmdlcyEucGlwZShcbiAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKGEsIGIpID0+IEpTT04uc3RyaW5naWZ5KGEpID09PSBKU09OLnN0cmluZ2lmeShiKSksXG4gICAgICAgIHRoaXMuZGVib3VuY2VDaGFuZ2UoKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIHRoaXMudXBkYXRlRm9ybVN0YXRlV2l0aFJhd1ZhbHVlKCk7XG4gICAgICB9KTtcblxuICAgIHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZVxuICAgICAgLnN0YXR1c0NoYW5nZXMhLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdGhpcy5kZWJvdW5jZUNoYW5nZSgpKVxuICAgICAgLnN1YnNjcmliZSgoc3RhdHVzOiBzdHJpbmcpID0+IHtcbiAgICAgICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goXG4gICAgICAgICAgbmV3IFVwZGF0ZUZvcm1TdGF0dXMoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgcGF0aDogdGhpcy5wYXRoXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgdXBkYXRlRm9ybVN0YXRlV2l0aFJhd1ZhbHVlKHdpdGhGb3JtU3RhdHVzPzogYm9vbGVhbikge1xuICAgIGlmICh0aGlzLl91cGRhdGluZykgcmV0dXJuO1xuXG4gICAgY29uc3QgdmFsdWUgPSB0aGlzLl9mb3JtR3JvdXBEaXJlY3RpdmUuY29udHJvbC5nZXRSYXdWYWx1ZSgpO1xuXG4gICAgY29uc3QgYWN0aW9uczogYW55W10gPSBbXG4gICAgICBuZXcgVXBkYXRlRm9ybVZhbHVlKHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICB2YWx1ZVxuICAgICAgfSksXG4gICAgICBuZXcgVXBkYXRlRm9ybURpcnR5KHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICBkaXJ0eTogdGhpcy5fZm9ybUdyb3VwRGlyZWN0aXZlLmRpcnR5XG4gICAgICB9KSxcbiAgICAgIG5ldyBVcGRhdGVGb3JtRXJyb3JzKHtcbiAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICBlcnJvcnM6IHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZS5lcnJvcnNcbiAgICAgIH0pXG4gICAgXTtcblxuICAgIGlmICh3aXRoRm9ybVN0YXR1cykge1xuICAgICAgYWN0aW9ucy5wdXNoKFxuICAgICAgICBuZXcgVXBkYXRlRm9ybVN0YXR1cyh7XG4gICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgIHN0YXR1czogdGhpcy5fZm9ybUdyb3VwRGlyZWN0aXZlLnN0YXR1c1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGluZyA9IHRydWU7XG4gICAgdGhpcy5fc3RvcmUuZGlzcGF0Y2goYWN0aW9ucykuc3Vic2NyaWJlKHtcbiAgICAgIGVycm9yOiAoKSA9PiAodGhpcy5fdXBkYXRpbmcgPSBmYWxzZSksXG4gICAgICBjb21wbGV0ZTogKCkgPT4gKHRoaXMuX3VwZGF0aW5nID0gZmFsc2UpXG4gICAgfSk7XG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICB0aGlzLl9kZXN0cm95JC5uZXh0KCk7XG5cbiAgICBpZiAodGhpcy5jbGVhckRlc3Ryb3kpIHtcbiAgICAgIHRoaXMuX3N0b3JlLmRpc3BhdGNoKFxuICAgICAgICBuZXcgVXBkYXRlRm9ybSh7XG4gICAgICAgICAgcGF0aDogdGhpcy5wYXRoLFxuICAgICAgICAgIHZhbHVlOiBudWxsLFxuICAgICAgICAgIGRpcnR5OiBudWxsLFxuICAgICAgICAgIHN0YXR1czogbnVsbCxcbiAgICAgICAgICBlcnJvcnM6IG51bGxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWJvdW5jZUNoYW5nZSgpIHtcbiAgICBjb25zdCBza2lwRGVib3VuY2VUaW1lID1cbiAgICAgIHRoaXMuX2Zvcm1Hcm91cERpcmVjdGl2ZS5jb250cm9sLnVwZGF0ZU9uICE9PSAnY2hhbmdlJyB8fCB0aGlzLl9kZWJvdW5jZSA8IDA7XG5cbiAgICByZXR1cm4gc2tpcERlYm91bmNlVGltZVxuICAgICAgPyAoY2hhbmdlOiBPYnNlcnZhYmxlPGFueT4pID0+IGNoYW5nZS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpXG4gICAgICA6IChjaGFuZ2U6IE9ic2VydmFibGU8YW55PikgPT5cbiAgICAgICAgICBjaGFuZ2UucGlwZShkZWJvdW5jZVRpbWUodGhpcy5fZGVib3VuY2UpLCB0YWtlVW50aWwodGhpcy5fZGVzdHJveSQpKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0IGZvcm0oKTogRm9ybUdyb3VwIHtcbiAgICByZXR1cm4gdGhpcy5fZm9ybUdyb3VwRGlyZWN0aXZlLmZvcm07XG4gIH1cblxuICBwcml2YXRlIGdldFN0YXRlU3RyZWFtKHBhdGg6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLl9zdG9yZS5zZWxlY3Qoc3RhdGUgPT4gZ2V0VmFsdWUoc3RhdGUsIHBhdGgpKS5waXBlKHRha2VVbnRpbCh0aGlzLl9kZXN0cm95JCkpO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,33 @@
1
+ import { NgModule, makeEnvironmentProviders } from '@angular/core';
2
+ import { NGXS_PLUGINS, withNgxsPlugin } from '@ngxs/store';
3
+ import { NgxsFormPlugin } from './form.plugin';
4
+ import { NgxsFormDirective } from './directive';
5
+ import * as i0 from "@angular/core";
6
+ export class NgxsFormPluginModule {
7
+ static forRoot() {
8
+ return {
9
+ ngModule: NgxsFormPluginModule,
10
+ providers: [
11
+ {
12
+ provide: NGXS_PLUGINS,
13
+ useClass: NgxsFormPlugin,
14
+ multi: true
15
+ }
16
+ ]
17
+ };
18
+ }
19
+ }
20
+ /** @nocollapse */ NgxsFormPluginModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
21
+ /** @nocollapse */ NgxsFormPluginModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPluginModule, imports: [NgxsFormDirective], exports: [NgxsFormDirective] });
22
+ /** @nocollapse */ NgxsFormPluginModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPluginModule });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPluginModule, decorators: [{
24
+ type: NgModule,
25
+ args: [{
26
+ imports: [NgxsFormDirective],
27
+ exports: [NgxsFormDirective]
28
+ }]
29
+ }] });
30
+ export function withNgxsFormPlugin() {
31
+ return makeEnvironmentProviders([withNgxsPlugin(NgxsFormPlugin)]);
32
+ }
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9mb3JtLXBsdWdpbi9zcmMvZm9ybS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFHUix3QkFBd0IsRUFDekIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxjQUFjLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFM0QsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMvQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxhQUFhLENBQUM7O0FBTWhELE1BQU0sT0FBTyxvQkFBb0I7SUFDL0IsTUFBTSxDQUFDLE9BQU87UUFDWixPQUFPO1lBQ0wsUUFBUSxFQUFFLG9CQUFvQjtZQUM5QixTQUFTLEVBQUU7Z0JBQ1Q7b0JBQ0UsT0FBTyxFQUFFLFlBQVk7b0JBQ3JCLFFBQVEsRUFBRSxjQUFjO29CQUN4QixLQUFLLEVBQUUsSUFBSTtpQkFDWjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7O29JQVpVLG9CQUFvQjtxSUFBcEIsb0JBQW9CLFlBSHJCLGlCQUFpQixhQUNqQixpQkFBaUI7cUlBRWhCLG9CQUFvQjsyRkFBcEIsb0JBQW9CO2tCQUpoQyxRQUFRO21CQUFDO29CQUNSLE9BQU8sRUFBRSxDQUFDLGlCQUFpQixDQUFDO29CQUM1QixPQUFPLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQztpQkFDN0I7O0FBZ0JELE1BQU0sVUFBVSxrQkFBa0I7SUFDaEMsT0FBTyx3QkFBd0IsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIE5nTW9kdWxlLFxuICBNb2R1bGVXaXRoUHJvdmlkZXJzLFxuICBFbnZpcm9ubWVudFByb3ZpZGVycyxcbiAgbWFrZUVudmlyb25tZW50UHJvdmlkZXJzXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdYU19QTFVHSU5TLCB3aXRoTmd4c1BsdWdpbiB9IGZyb20gJ0BuZ3hzL3N0b3JlJztcblxuaW1wb3J0IHsgTmd4c0Zvcm1QbHVnaW4gfSBmcm9tICcuL2Zvcm0ucGx1Z2luJztcbmltcG9ydCB7IE5neHNGb3JtRGlyZWN0aXZlIH0gZnJvbSAnLi9kaXJlY3RpdmUnO1xuXG5ATmdNb2R1bGUoe1xuICBpbXBvcnRzOiBbTmd4c0Zvcm1EaXJlY3RpdmVdLFxuICBleHBvcnRzOiBbTmd4c0Zvcm1EaXJlY3RpdmVdXG59KVxuZXhwb3J0IGNsYXNzIE5neHNGb3JtUGx1Z2luTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoKTogTW9kdWxlV2l0aFByb3ZpZGVyczxOZ3hzRm9ybVBsdWdpbk1vZHVsZT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuZ01vZHVsZTogTmd4c0Zvcm1QbHVnaW5Nb2R1bGUsXG4gICAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIHByb3ZpZGU6IE5HWFNfUExVR0lOUyxcbiAgICAgICAgICB1c2VDbGFzczogTmd4c0Zvcm1QbHVnaW4sXG4gICAgICAgICAgbXVsdGk6IHRydWVcbiAgICAgICAgfVxuICAgICAgXVxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHdpdGhOZ3hzRm9ybVBsdWdpbigpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW3dpdGhOZ3hzUGx1Z2luKE5neHNGb3JtUGx1Z2luKV0pO1xufVxuIl19
@@ -0,0 +1,64 @@
1
+ import { Injectable } from '@angular/core';
2
+ import { getActionTypeFromInstance, getValue, setValue } from '@ngxs/store';
3
+ import { ResetForm, SetFormDirty, SetFormDisabled, SetFormEnabled, SetFormPristine, UpdateForm, UpdateFormDirty, UpdateFormErrors, UpdateFormStatus, UpdateFormValue } from './actions';
4
+ import * as i0 from "@angular/core";
5
+ export class NgxsFormPlugin {
6
+ handle(state, event, next) {
7
+ const type = getActionTypeFromInstance(event);
8
+ let nextState = state;
9
+ if (type === UpdateFormValue.type || type === UpdateForm.type || type === ResetForm.type) {
10
+ const { value } = event.payload;
11
+ const payloadValue = Array.isArray(value)
12
+ ? value.slice()
13
+ : isObjectLike(value)
14
+ ? { ...value }
15
+ : value;
16
+ const path = this.joinPathWithPropertyPath(event);
17
+ nextState = setValue(nextState, path, payloadValue);
18
+ }
19
+ if (type === ResetForm.type) {
20
+ const model = getValue(nextState, `${event.payload.path}.model`);
21
+ nextState = setValue(nextState, `${event.payload.path}`, { model: model });
22
+ }
23
+ if (type === UpdateFormStatus.type || type === UpdateForm.type) {
24
+ nextState = setValue(nextState, `${event.payload.path}.status`, event.payload.status);
25
+ }
26
+ if (type === UpdateFormErrors.type || type === UpdateForm.type) {
27
+ nextState = setValue(nextState, `${event.payload.path}.errors`, {
28
+ ...event.payload.errors
29
+ });
30
+ }
31
+ if (type === UpdateFormDirty.type || type === UpdateForm.type) {
32
+ nextState = setValue(nextState, `${event.payload.path}.dirty`, event.payload.dirty);
33
+ }
34
+ if (type === SetFormDirty.type) {
35
+ nextState = setValue(nextState, `${event.payload}.dirty`, true);
36
+ }
37
+ if (type === SetFormPristine.type) {
38
+ nextState = setValue(nextState, `${event.payload}.dirty`, false);
39
+ }
40
+ if (type === SetFormDisabled.type) {
41
+ nextState = setValue(nextState, `${event.payload}.disabled`, true);
42
+ }
43
+ if (type === SetFormEnabled.type) {
44
+ nextState = setValue(nextState, `${event.payload}.disabled`, false);
45
+ }
46
+ return next(nextState, event);
47
+ }
48
+ joinPathWithPropertyPath({ payload }) {
49
+ let path = `${payload.path}.model`;
50
+ if (payload.propertyPath) {
51
+ path += `.${payload.propertyPath}`;
52
+ }
53
+ return path;
54
+ }
55
+ }
56
+ /** @nocollapse */ NgxsFormPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPlugin, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
57
+ /** @nocollapse */ NgxsFormPlugin.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPlugin });
58
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPlugin, decorators: [{
59
+ type: Injectable
60
+ }] });
61
+ function isObjectLike(target) {
62
+ return target !== null && typeof target === 'object';
63
+ }
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5wbHVnaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9mb3JtLXBsdWdpbi9zcmMvZm9ybS5wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQ0wseUJBQXlCLEVBQ3pCLFFBQVEsRUFHUixRQUFRLEVBQ1QsTUFBTSxhQUFhLENBQUM7QUFDckIsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBQ1osZUFBZSxFQUNmLGNBQWMsRUFDZCxlQUFlLEVBQ2YsVUFBVSxFQUNWLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDaEIsTUFBTSxXQUFXLENBQUM7O0FBR25CLE1BQU0sT0FBTyxjQUFjO0lBQ3pCLE1BQU0sQ0FBQyxLQUFVLEVBQUUsS0FBVSxFQUFFLElBQXNCO1FBQ25ELE1BQU0sSUFBSSxHQUFHLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRTlDLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztRQUV0QixJQUFJLElBQUksS0FBSyxlQUFlLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxVQUFVLENBQUMsSUFBSSxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQ3hGLE1BQU0sRUFBRSxLQUFLLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO1lBQ2hDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO2dCQUN2QyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRTtnQkFDZixDQUFDLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztvQkFDckIsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLEVBQUU7b0JBQ2QsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNWLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNsRCxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7U0FDckQ7UUFFRCxJQUFJLElBQUksS0FBSyxTQUFTLENBQUMsSUFBSSxFQUFFO1lBQzNCLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxDQUFDLENBQUM7WUFDakUsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDNUU7UUFFRCxJQUFJLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDOUQsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDdkY7UUFFRCxJQUFJLElBQUksS0FBSyxnQkFBZ0IsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDOUQsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksU0FBUyxFQUFFO2dCQUM5RCxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsTUFBTTthQUN4QixDQUFDLENBQUM7U0FDSjtRQUVELElBQUksSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLElBQUksSUFBSSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7WUFDN0QsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksUUFBUSxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDckY7UUFFRCxJQUFJLElBQUksS0FBSyxZQUFZLENBQUMsSUFBSSxFQUFFO1lBQzlCLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1NBQ2pFO1FBRUQsSUFBSSxJQUFJLEtBQUssZUFBZSxDQUFDLElBQUksRUFBRTtZQUNqQyxTQUFTLEdBQUcsUUFBUSxDQUFDLFNBQVMsRUFBRSxHQUFHLEtBQUssQ0FBQyxPQUFPLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztTQUNsRTtRQUVELElBQUksSUFBSSxLQUFLLGVBQWUsQ0FBQyxJQUFJLEVBQUU7WUFDakMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxTQUFTLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxXQUFXLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDcEU7UUFFRCxJQUFJLElBQUksS0FBSyxjQUFjLENBQUMsSUFBSSxFQUFFO1lBQ2hDLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxFQUFFLEdBQUcsS0FBSyxDQUFDLE9BQU8sV0FBVyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ3JFO1FBRUQsT0FBTyxJQUFJLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFTyx3QkFBd0IsQ0FBQyxFQUFFLE9BQU8sRUFBbUI7UUFDM0QsSUFBSSxJQUFJLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxRQUFRLENBQUM7UUFFbkMsSUFBSSxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQ3hCLElBQUksSUFBSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUUsQ0FBQztTQUNwQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQzs7OEhBL0RVLGNBQWM7a0lBQWQsY0FBYzsyRkFBZCxjQUFjO2tCQUQxQixVQUFVOztBQW1FWCxTQUFTLFlBQVksQ0FBQyxNQUFlO0lBQ25DLE9BQU8sTUFBTSxLQUFLLElBQUksSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRLENBQUM7QUFDdkQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIGdldEFjdGlvblR5cGVGcm9tSW5zdGFuY2UsXG4gIGdldFZhbHVlLFxuICBOZ3hzTmV4dFBsdWdpbkZuLFxuICBOZ3hzUGx1Z2luLFxuICBzZXRWYWx1ZVxufSBmcm9tICdAbmd4cy9zdG9yZSc7XG5pbXBvcnQge1xuICBSZXNldEZvcm0sXG4gIFNldEZvcm1EaXJ0eSxcbiAgU2V0Rm9ybURpc2FibGVkLFxuICBTZXRGb3JtRW5hYmxlZCxcbiAgU2V0Rm9ybVByaXN0aW5lLFxuICBVcGRhdGVGb3JtLFxuICBVcGRhdGVGb3JtRGlydHksXG4gIFVwZGF0ZUZvcm1FcnJvcnMsXG4gIFVwZGF0ZUZvcm1TdGF0dXMsXG4gIFVwZGF0ZUZvcm1WYWx1ZVxufSBmcm9tICcuL2FjdGlvbnMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgTmd4c0Zvcm1QbHVnaW4gaW1wbGVtZW50cyBOZ3hzUGx1Z2luIHtcbiAgaGFuZGxlKHN0YXRlOiBhbnksIGV2ZW50OiBhbnksIG5leHQ6IE5neHNOZXh0UGx1Z2luRm4pIHtcbiAgICBjb25zdCB0eXBlID0gZ2V0QWN0aW9uVHlwZUZyb21JbnN0YW5jZShldmVudCk7XG5cbiAgICBsZXQgbmV4dFN0YXRlID0gc3RhdGU7XG5cbiAgICBpZiAodHlwZSA9PT0gVXBkYXRlRm9ybVZhbHVlLnR5cGUgfHwgdHlwZSA9PT0gVXBkYXRlRm9ybS50eXBlIHx8IHR5cGUgPT09IFJlc2V0Rm9ybS50eXBlKSB7XG4gICAgICBjb25zdCB7IHZhbHVlIH0gPSBldmVudC5wYXlsb2FkO1xuICAgICAgY29uc3QgcGF5bG9hZFZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWx1ZSlcbiAgICAgICAgPyB2YWx1ZS5zbGljZSgpXG4gICAgICAgIDogaXNPYmplY3RMaWtlKHZhbHVlKVxuICAgICAgICA/IHsgLi4udmFsdWUgfVxuICAgICAgICA6IHZhbHVlO1xuICAgICAgY29uc3QgcGF0aCA9IHRoaXMuam9pblBhdGhXaXRoUHJvcGVydHlQYXRoKGV2ZW50KTtcbiAgICAgIG5leHRTdGF0ZSA9IHNldFZhbHVlKG5leHRTdGF0ZSwgcGF0aCwgcGF5bG9hZFZhbHVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gUmVzZXRGb3JtLnR5cGUpIHtcbiAgICAgIGNvbnN0IG1vZGVsID0gZ2V0VmFsdWUobmV4dFN0YXRlLCBgJHtldmVudC5wYXlsb2FkLnBhdGh9Lm1vZGVsYCk7XG4gICAgICBuZXh0U3RhdGUgPSBzZXRWYWx1ZShuZXh0U3RhdGUsIGAke2V2ZW50LnBheWxvYWQucGF0aH1gLCB7IG1vZGVsOiBtb2RlbCB9KTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gVXBkYXRlRm9ybVN0YXR1cy50eXBlIHx8IHR5cGUgPT09IFVwZGF0ZUZvcm0udHlwZSkge1xuICAgICAgbmV4dFN0YXRlID0gc2V0VmFsdWUobmV4dFN0YXRlLCBgJHtldmVudC5wYXlsb2FkLnBhdGh9LnN0YXR1c2AsIGV2ZW50LnBheWxvYWQuc3RhdHVzKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gVXBkYXRlRm9ybUVycm9ycy50eXBlIHx8IHR5cGUgPT09IFVwZGF0ZUZvcm0udHlwZSkge1xuICAgICAgbmV4dFN0YXRlID0gc2V0VmFsdWUobmV4dFN0YXRlLCBgJHtldmVudC5wYXlsb2FkLnBhdGh9LmVycm9yc2AsIHtcbiAgICAgICAgLi4uZXZlbnQucGF5bG9hZC5lcnJvcnNcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBVcGRhdGVGb3JtRGlydHkudHlwZSB8fCB0eXBlID09PSBVcGRhdGVGb3JtLnR5cGUpIHtcbiAgICAgIG5leHRTdGF0ZSA9IHNldFZhbHVlKG5leHRTdGF0ZSwgYCR7ZXZlbnQucGF5bG9hZC5wYXRofS5kaXJ0eWAsIGV2ZW50LnBheWxvYWQuZGlydHkpO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBTZXRGb3JtRGlydHkudHlwZSkge1xuICAgICAgbmV4dFN0YXRlID0gc2V0VmFsdWUobmV4dFN0YXRlLCBgJHtldmVudC5wYXlsb2FkfS5kaXJ0eWAsIHRydWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlID09PSBTZXRGb3JtUHJpc3RpbmUudHlwZSkge1xuICAgICAgbmV4dFN0YXRlID0gc2V0VmFsdWUobmV4dFN0YXRlLCBgJHtldmVudC5wYXlsb2FkfS5kaXJ0eWAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gU2V0Rm9ybURpc2FibGVkLnR5cGUpIHtcbiAgICAgIG5leHRTdGF0ZSA9IHNldFZhbHVlKG5leHRTdGF0ZSwgYCR7ZXZlbnQucGF5bG9hZH0uZGlzYWJsZWRgLCB0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZSA9PT0gU2V0Rm9ybUVuYWJsZWQudHlwZSkge1xuICAgICAgbmV4dFN0YXRlID0gc2V0VmFsdWUobmV4dFN0YXRlLCBgJHtldmVudC5wYXlsb2FkfS5kaXNhYmxlZGAsIGZhbHNlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dChuZXh0U3RhdGUsIGV2ZW50KTtcbiAgfVxuXG4gIHByaXZhdGUgam9pblBhdGhXaXRoUHJvcGVydHlQYXRoKHsgcGF5bG9hZCB9OiBVcGRhdGVGb3JtVmFsdWUpOiBzdHJpbmcge1xuICAgIGxldCBwYXRoID0gYCR7cGF5bG9hZC5wYXRofS5tb2RlbGA7XG5cbiAgICBpZiAocGF5bG9hZC5wcm9wZXJ0eVBhdGgpIHtcbiAgICAgIHBhdGggKz0gYC4ke3BheWxvYWQucHJvcGVydHlQYXRofWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBhdGg7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNPYmplY3RMaWtlKHRhcmdldDogdW5rbm93bik6IHRhcmdldCBpcyBvYmplY3Qge1xuICByZXR1cm4gdGFyZ2V0ICE9PSBudWxsICYmIHR5cGVvZiB0YXJnZXQgPT09ICdvYmplY3QnO1xufVxuIl19
@@ -0,0 +1,5 @@
1
+ export { NgxsFormPluginModule, withNgxsFormPlugin } from './form.module';
2
+ export { NgxsFormPlugin } from './form.plugin';
3
+ export { NgxsFormDirective } from './directive';
4
+ export * from './actions';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2Zvcm0tcGx1Z2luL3NyYy9wdWJsaWNfYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN6RSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUNoRCxjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IE5neHNGb3JtUGx1Z2luTW9kdWxlLCB3aXRoTmd4c0Zvcm1QbHVnaW4gfSBmcm9tICcuL2Zvcm0ubW9kdWxlJztcbmV4cG9ydCB7IE5neHNGb3JtUGx1Z2luIH0gZnJvbSAnLi9mb3JtLnBsdWdpbic7XG5leHBvcnQgeyBOZ3hzRm9ybURpcmVjdGl2ZSB9IGZyb20gJy4vZGlyZWN0aXZlJztcbmV4cG9ydCAqIGZyb20gJy4vYWN0aW9ucyc7XG4iXX0=
@@ -1,102 +1,71 @@
1
1
  import * as i0 from '@angular/core';
2
- import { Injectable, Directive, Input, NgModule } from '@angular/core';
2
+ import { Injectable, Directive, Input, NgModule, makeEnvironmentProviders } from '@angular/core';
3
3
  import * as i1 from '@ngxs/store';
4
- import { getActionTypeFromInstance, setValue, getValue, ofActionDispatched, NGXS_PLUGINS } from '@ngxs/store';
5
- import * as i2 from '@angular/forms';
6
- import { ReactiveFormsModule } from '@angular/forms';
7
- import { Subject } from 'rxjs';
4
+ import { getActionTypeFromInstance, setValue, getValue, ofActionDispatched, NGXS_PLUGINS, withNgxsPlugin } from '@ngxs/store';
5
+ import { ReplaySubject } from 'rxjs';
8
6
  import { filter, takeUntil, distinctUntilChanged, debounceTime } from 'rxjs/operators';
7
+ import * as i2 from '@angular/forms';
9
8
 
10
9
  class UpdateFormStatus {
11
10
  constructor(payload) {
12
11
  this.payload = payload;
13
12
  }
14
- static get type() {
15
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
16
- return '[Forms] Update Form Status';
17
- }
18
13
  }
14
+ UpdateFormStatus.type = '[Forms] Update Form Status';
19
15
  class UpdateFormValue {
20
16
  constructor(payload) {
21
17
  this.payload = payload;
22
18
  }
23
- static get type() {
24
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
25
- return '[Forms] Update Form Value';
26
- }
27
19
  }
20
+ UpdateFormValue.type = '[Forms] Update Form Value';
28
21
  class UpdateForm {
29
22
  constructor(payload) {
30
23
  this.payload = payload;
31
24
  }
32
- static get type() {
33
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
34
- return '[Forms] Update Form';
35
- }
36
25
  }
26
+ UpdateForm.type = '[Forms] Update Form';
37
27
  class UpdateFormDirty {
38
28
  constructor(payload) {
39
29
  this.payload = payload;
40
30
  }
41
- static get type() {
42
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
43
- return '[Forms] Update Form Dirty';
44
- }
45
31
  }
32
+ UpdateFormDirty.type = '[Forms] Update Form Dirty';
46
33
  class SetFormDirty {
47
34
  constructor(payload) {
48
35
  this.payload = payload;
49
36
  }
50
- static get type() {
51
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
52
- return '[Forms] Set Form Dirty';
53
- }
54
37
  }
38
+ SetFormDirty.type = '[Forms] Set Form Dirty';
55
39
  class SetFormPristine {
56
40
  constructor(payload) {
57
41
  this.payload = payload;
58
42
  }
59
- static get type() {
60
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
61
- return '[Forms] Set Form Pristine';
62
- }
63
43
  }
44
+ SetFormPristine.type = '[Forms] Set Form Pristine';
64
45
  class UpdateFormErrors {
65
46
  constructor(payload) {
66
47
  this.payload = payload;
67
48
  }
68
- static get type() {
69
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
70
- return '[Forms] Update Form Errors';
71
- }
72
49
  }
50
+ UpdateFormErrors.type = '[Forms] Update Form Errors';
73
51
  class SetFormDisabled {
74
52
  constructor(payload) {
75
53
  this.payload = payload;
76
54
  }
77
- static get type() {
78
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
79
- return '[Forms] Set Form Disabled';
80
- }
81
55
  }
56
+ SetFormDisabled.type = '[Forms] Set Form Disabled';
82
57
  class SetFormEnabled {
83
58
  constructor(payload) {
84
59
  this.payload = payload;
85
60
  }
86
- static get type() {
87
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
88
- return '[Forms] Set Form Enabled';
89
- }
90
61
  }
62
+ SetFormEnabled.type = '[Forms] Set Form Enabled';
91
63
  class ResetForm {
92
64
  constructor(payload) {
93
65
  this.payload = payload;
94
66
  }
95
- static get type() {
96
- // NOTE: Not necessary to declare the type in this way in your code. See https://github.com/ngxs/store/pull/644#issuecomment-436003138
97
- return '[Forms] Reset Form';
98
- }
99
67
  }
68
+ ResetForm.type = '[Forms] Reset Form';
100
69
 
101
70
  class NgxsFormPlugin {
102
71
  handle(state, event, next) {
@@ -146,16 +115,16 @@ class NgxsFormPlugin {
146
115
  return path;
147
116
  }
148
117
  }
149
- /** @nocollapse */ NgxsFormPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsFormPlugin, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
150
- /** @nocollapse */ NgxsFormPlugin.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsFormPlugin });
151
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsFormPlugin, decorators: [{
118
+ /** @nocollapse */ NgxsFormPlugin.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPlugin, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
119
+ /** @nocollapse */ NgxsFormPlugin.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPlugin });
120
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPlugin, decorators: [{
152
121
  type: Injectable
153
122
  }] });
154
123
  function isObjectLike(target) {
155
124
  return target !== null && typeof target === 'object';
156
125
  }
157
126
 
158
- class FormDirective {
127
+ class NgxsFormDirective {
159
128
  constructor(_actions$, _store, _formGroupDirective, _cd) {
160
129
  this._actions$ = _actions$;
161
130
  this._store = _store;
@@ -165,7 +134,7 @@ class FormDirective {
165
134
  this._debounce = 100;
166
135
  this._clearDestroy = false;
167
136
  this._updating = false;
168
- this._destroy$ = new Subject();
137
+ this._destroy$ = new ReplaySubject(1);
169
138
  }
170
139
  set debounce(debounce) {
171
140
  this._debounce = Number(debounce);
@@ -306,11 +275,11 @@ class FormDirective {
306
275
  return this._store.select(state => getValue(state, path)).pipe(takeUntil(this._destroy$));
307
276
  }
308
277
  }
309
- /** @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 });
310
- /** @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 });
311
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: FormDirective, decorators: [{
278
+ /** @nocollapse */ NgxsFormDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormDirective, deps: [{ token: i1.Actions }, { token: i1.Store }, { token: i2.FormGroupDirective }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Directive });
279
+ /** @nocollapse */ NgxsFormDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.2.4", type: NgxsFormDirective, isStandalone: true, selector: "[ngxsForm]", inputs: { path: ["ngxsForm", "path"], debounce: ["ngxsFormDebounce", "debounce"], clearDestroy: ["ngxsFormClearOnDestroy", "clearDestroy"] }, ngImport: i0 });
280
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormDirective, decorators: [{
312
281
  type: Directive,
313
- args: [{ selector: '[ngxsForm]' }]
282
+ args: [{ selector: '[ngxsForm]', standalone: true }]
314
283
  }], ctorParameters: function () { return [{ type: i1.Actions }, { type: i1.Store }, { type: i2.FormGroupDirective }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { path: [{
315
284
  type: Input,
316
285
  args: ['ngxsForm']
@@ -336,17 +305,19 @@ class NgxsFormPluginModule {
336
305
  };
337
306
  }
338
307
  }
339
- /** @nocollapse */ NgxsFormPluginModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsFormPluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
340
- /** @nocollapse */ NgxsFormPluginModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsFormPluginModule, declarations: [FormDirective], imports: [ReactiveFormsModule], exports: [FormDirective] });
341
- /** @nocollapse */ NgxsFormPluginModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsFormPluginModule, imports: [[ReactiveFormsModule]] });
342
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImport: i0, type: NgxsFormPluginModule, decorators: [{
308
+ /** @nocollapse */ NgxsFormPluginModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
309
+ /** @nocollapse */ NgxsFormPluginModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPluginModule, imports: [NgxsFormDirective], exports: [NgxsFormDirective] });
310
+ /** @nocollapse */ NgxsFormPluginModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPluginModule });
311
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.4", ngImport: i0, type: NgxsFormPluginModule, decorators: [{
343
312
  type: NgModule,
344
313
  args: [{
345
- imports: [ReactiveFormsModule],
346
- declarations: [FormDirective],
347
- exports: [FormDirective]
314
+ imports: [NgxsFormDirective],
315
+ exports: [NgxsFormDirective]
348
316
  }]
349
317
  }] });
318
+ function withNgxsFormPlugin() {
319
+ return makeEnvironmentProviders([withNgxsPlugin(NgxsFormPlugin)]);
320
+ }
350
321
 
351
322
  /**
352
323
  * The public api for consumers of @ngxs/form-plugin
@@ -356,5 +327,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.17", ngImpo
356
327
  * Generated bundle index. Do not edit.
357
328
  */
358
329
 
359
- export { NgxsFormPlugin, NgxsFormPluginModule, ResetForm, SetFormDirty, SetFormDisabled, SetFormEnabled, SetFormPristine, UpdateForm, UpdateFormDirty, UpdateFormErrors, UpdateFormStatus, UpdateFormValue, FormDirective as ɵFormDirective };
360
- //# sourceMappingURL=ngxs-form-plugin.js.map
330
+ export { NgxsFormDirective, NgxsFormPlugin, NgxsFormPluginModule, ResetForm, SetFormDirty, SetFormDisabled, SetFormEnabled, SetFormPristine, UpdateForm, UpdateFormDirty, UpdateFormErrors, UpdateFormStatus, UpdateFormValue, withNgxsFormPlugin };
331
+ //# sourceMappingURL=ngxs-form-plugin.mjs.map