ngx-form-signal 1.18.0 → 1.18.1
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 +3 -20
- package/esm2022/lib/form-signal.mjs +45 -0
- package/esm2022/lib/helpers/form-dirty-signal.mjs +30 -0
- package/esm2022/lib/helpers/form-error-signal.mjs +10 -0
- package/esm2022/lib/helpers/form-snapshot-signal.mjs +27 -0
- package/esm2022/lib/helpers/form-status-signal.mjs +37 -0
- package/esm2022/lib/helpers/form-touched-signal.mjs +32 -0
- package/esm2022/lib/helpers/form-value-signal.mjs +27 -0
- package/esm2022/lib/types/form-signal-options.mjs +5 -0
- package/esm2022/lib/types/form-signal-type.mjs +2 -0
- package/esm2022/lib/types/form-type.mjs +2 -0
- package/esm2022/ngx-form-signal.mjs +5 -0
- package/esm2022/public-api.mjs +8 -0
- package/fesm2022/ngx-form-signal.mjs +209 -0
- package/fesm2022/ngx-form-signal.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/lib/form-signal.d.ts +5 -0
- package/lib/helpers/form-dirty-signal.d.ts +9 -0
- package/lib/helpers/form-error-signal.d.ts +5 -0
- package/lib/helpers/form-snapshot-signal.d.ts +2 -0
- package/lib/helpers/form-status-signal.d.ts +14 -0
- package/lib/helpers/form-touched-signal.d.ts +9 -0
- package/lib/helpers/form-value-signal.d.ts +9 -0
- package/lib/types/form-signal-options.d.ts +16 -0
- package/lib/types/form-signal-type.d.ts +36 -0
- package/lib/types/form-type.d.ts +7 -0
- package/package.json +45 -13
- package/{src/public-api.ts → public-api.d.ts} +4 -8
- package/ng-package.json +0 -7
- package/src/lib/form-signal.ts +0 -75
- package/src/lib/helpers/form-dirty-signal.ts +0 -46
- package/src/lib/helpers/form-error-signal.ts +0 -28
- package/src/lib/helpers/form-invalid-signal.ts +0 -23
- package/src/lib/helpers/form-snapshot-signal.ts +0 -37
- package/src/lib/helpers/form-status-signal.ts +0 -57
- package/src/lib/helpers/form-touched-signal.ts +0 -48
- package/src/lib/helpers/form-value-signal.ts +0 -48
- package/src/lib/types/form-signal-options.ts +0 -20
- package/src/lib/types/form-signal-type.ts +0 -68
- package/src/lib/types/form-type.ts +0 -18
- package/tsconfig.lib.json +0 -15
- package/tsconfig.lib.prod.json +0 -11
- package/tsconfig.spec.json +0 -15
package/README.md
CHANGED
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
# NgxFormSignal
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Signal based form api for angular.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
The goal of NgxFormSignal is to allow easy conversion from existing form objects to reactive signal primitives. This gives developers the ability to derive state off an existing form object as well as react to form state changes such as dirty, invalid, touched, etc... while remaining in the signal realm.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
> Note: Don't forget to add `--project ngx-form-signal` or else it will be added to the default project in your `angular.json` file.
|
|
9
|
-
|
|
10
|
-
## Build
|
|
11
|
-
|
|
12
|
-
Run `ng build ngx-form-signal` to build the project. The build artifacts will be stored in the `dist/` directory.
|
|
13
|
-
|
|
14
|
-
## Publishing
|
|
15
|
-
|
|
16
|
-
After building your library with `ng build ngx-form-signal`, go to the dist folder `cd dist/ngx-form-signal` and run `npm publish`.
|
|
17
|
-
|
|
18
|
-
## Running unit tests
|
|
19
|
-
|
|
20
|
-
Run `ng test ngx-form-signal` to execute the unit tests via [Karma](https://karma-runner.github.io).
|
|
21
|
-
|
|
22
|
-
## Further help
|
|
23
|
-
|
|
24
|
-
To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI Overview and Command Reference](https://angular.dev/tools/cli) page.
|
|
7
|
+
See full documentation on [github repository](https://github.com/Devin-Harris/ngx-form-signal)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { assertInInjectionContext, isSignal, signal, } from '@angular/core';
|
|
2
|
+
import { buildFormDirtySignal } from './helpers/form-dirty-signal';
|
|
3
|
+
import { buildFormErrorSignal } from './helpers/form-error-signal';
|
|
4
|
+
import { buildFormSnapshotSignal } from './helpers/form-snapshot-signal';
|
|
5
|
+
import { buildFormStatusSignal } from './helpers/form-status-signal';
|
|
6
|
+
import { buildFormTouchedSignal } from './helpers/form-touched-signal';
|
|
7
|
+
import { buildFormValueSignal } from './helpers/form-value-signal';
|
|
8
|
+
import { buildDefaultFormSignalOptions, } from './types/form-signal-options';
|
|
9
|
+
export function formSignal(form, options = buildDefaultFormSignalOptions()) {
|
|
10
|
+
const formAsSignal = isSignal(form) ? form : signal(form);
|
|
11
|
+
if (!options.injector) {
|
|
12
|
+
assertInInjectionContext(() => { });
|
|
13
|
+
}
|
|
14
|
+
const { value$, rawValue$, valueChangeSubscription$ } = buildFormValueSignal(formAsSignal, options);
|
|
15
|
+
const { status$, valid$, invalid$, pending$, disabled$, enabled$, statusChangeSubscription$, } = buildFormStatusSignal(formAsSignal, options);
|
|
16
|
+
const { touched$, untouched$, touchedChangeSubscription$ } = buildFormTouchedSignal(formAsSignal, options);
|
|
17
|
+
const { dirty$, pristine$, dirtyChangeSubscription$ } = buildFormDirtySignal(formAsSignal, options);
|
|
18
|
+
const errors$ = buildFormErrorSignal(formAsSignal, value$, status$, options);
|
|
19
|
+
const formSignals = {
|
|
20
|
+
status: status$.asReadonly(),
|
|
21
|
+
value: value$.asReadonly(),
|
|
22
|
+
rawValue: rawValue$.asReadonly(),
|
|
23
|
+
touched: touched$.asReadonly(),
|
|
24
|
+
untouched: untouched$,
|
|
25
|
+
dirty: dirty$.asReadonly(),
|
|
26
|
+
pristine: pristine$,
|
|
27
|
+
valid: valid$,
|
|
28
|
+
invalid: invalid$,
|
|
29
|
+
pending: pending$,
|
|
30
|
+
disabled: disabled$,
|
|
31
|
+
enabled: enabled$,
|
|
32
|
+
errors: errors$,
|
|
33
|
+
subscriptions: {
|
|
34
|
+
valueChangeSubscription: valueChangeSubscription$.asReadonly(),
|
|
35
|
+
statusChangeSubscription: statusChangeSubscription$.asReadonly(),
|
|
36
|
+
touchedChangeSubscription: touchedChangeSubscription$.asReadonly(),
|
|
37
|
+
dirtyChangeSubscription: dirtyChangeSubscription$.asReadonly(),
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
const snapshot$ = buildFormSnapshotSignal(formSignals);
|
|
41
|
+
const formSignalObj = (() => snapshot$());
|
|
42
|
+
Object.setPrototypeOf(formSignalObj, formSignals);
|
|
43
|
+
return formSignalObj;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9mb3JtLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0osd0JBQXdCLEVBQ3hCLFFBQVEsRUFFUixNQUFNLEdBQ1IsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDekUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDbkUsT0FBTyxFQUNKLDZCQUE2QixHQUUvQixNQUFNLDZCQUE2QixDQUFDO0FBSXJDLE1BQU0sVUFBVSxVQUFVLENBQ3ZCLElBQStELEVBQy9ELFVBQTZCLDZCQUE2QixFQUFLO0lBRS9ELE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDMUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyQix3QkFBd0IsQ0FBQyxHQUFHLEVBQUUsR0FBRSxDQUFDLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsR0FDbEQsb0JBQW9CLENBQUksWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2xELE1BQU0sRUFDSCxPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixRQUFRLEVBQ1IsU0FBUyxFQUNULFFBQVEsRUFDUix5QkFBeUIsR0FDM0IsR0FBRyxxQkFBcUIsQ0FBSSxZQUFZLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDcEQsTUFBTSxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsR0FDdkQsc0JBQXNCLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ2pELE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLEdBQUcsb0JBQW9CLENBQ3pFLFlBQVksRUFDWixPQUFPLENBQ1QsQ0FBQztJQUNGLE1BQU0sT0FBTyxHQUFHLG9CQUFvQixDQUFDLFlBQVksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBRTdFLE1BQU0sV0FBVyxHQUF1QjtRQUNyQyxNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVUsRUFBRTtRQUM1QixLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUMxQixRQUFRLEVBQUUsU0FBUyxDQUFDLFVBQVUsRUFBRTtRQUNoQyxPQUFPLEVBQUUsUUFBUSxDQUFDLFVBQVUsRUFBRTtRQUM5QixTQUFTLEVBQUUsVUFBVTtRQUNyQixLQUFLLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUMxQixRQUFRLEVBQUUsU0FBUztRQUNuQixLQUFLLEVBQUUsTUFBTTtRQUNiLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLFFBQVEsRUFBRSxTQUFTO1FBQ25CLE9BQU8sRUFBRSxRQUFRO1FBQ2pCLE1BQU0sRUFBRSxPQUFPO1FBQ2YsYUFBYSxFQUFFO1lBQ1osdUJBQXVCLEVBQUUsd0JBQXdCLENBQUMsVUFBVSxFQUFFO1lBQzlELHdCQUF3QixFQUFFLHlCQUF5QixDQUFDLFVBQVUsRUFBRTtZQUNoRSx5QkFBeUIsRUFBRSwwQkFBMEIsQ0FBQyxVQUFVLEVBQUU7WUFDbEUsdUJBQXVCLEVBQUUsd0JBQXdCLENBQUMsVUFBVSxFQUFFO1NBQ2hFO0tBQ0gsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3ZELE1BQU0sYUFBYSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUMsU0FBUyxFQUFFLENBQWtCLENBQUM7SUFFM0QsTUFBTSxDQUFDLGNBQWMsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLENBQUM7SUFFbEQsT0FBTyxhQUFhLENBQUM7QUFDeEIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCxcclxuICAgaXNTaWduYWwsXHJcbiAgIFNpZ25hbCxcclxuICAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBidWlsZEZvcm1EaXJ0eVNpZ25hbCB9IGZyb20gJy4vaGVscGVycy9mb3JtLWRpcnR5LXNpZ25hbCc7XHJcbmltcG9ydCB7IGJ1aWxkRm9ybUVycm9yU2lnbmFsIH0gZnJvbSAnLi9oZWxwZXJzL2Zvcm0tZXJyb3Itc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtU25hcHNob3RTaWduYWwgfSBmcm9tICcuL2hlbHBlcnMvZm9ybS1zbmFwc2hvdC1zaWduYWwnO1xyXG5pbXBvcnQgeyBidWlsZEZvcm1TdGF0dXNTaWduYWwgfSBmcm9tICcuL2hlbHBlcnMvZm9ybS1zdGF0dXMtc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtVG91Y2hlZFNpZ25hbCB9IGZyb20gJy4vaGVscGVycy9mb3JtLXRvdWNoZWQtc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtVmFsdWVTaWduYWwgfSBmcm9tICcuL2hlbHBlcnMvZm9ybS12YWx1ZS1zaWduYWwnO1xyXG5pbXBvcnQge1xyXG4gICBidWlsZERlZmF1bHRGb3JtU2lnbmFsT3B0aW9ucyxcclxuICAgRm9ybVNpZ25hbE9wdGlvbnMsXHJcbn0gZnJvbSAnLi90eXBlcy9mb3JtLXNpZ25hbC1vcHRpb25zJztcclxuaW1wb3J0IHsgRm9ybVNpZ25hbCwgRm9ybVNpZ25hbFN0YXRlIH0gZnJvbSAnLi90eXBlcy9mb3JtLXNpZ25hbC10eXBlJztcclxuaW1wb3J0IHsgT3B0aW9uYWxGb3JtRnJvbVR5cGUgfSBmcm9tICcuL3R5cGVzL2Zvcm0tdHlwZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZm9ybVNpZ25hbDxUID0gYW55PihcclxuICAgZm9ybTogU2lnbmFsPE9wdGlvbmFsRm9ybUZyb21UeXBlPFQ+PiB8IE9wdGlvbmFsRm9ybUZyb21UeXBlPFQ+LFxyXG4gICBvcHRpb25zOiBGb3JtU2lnbmFsT3B0aW9ucyA9IGJ1aWxkRGVmYXVsdEZvcm1TaWduYWxPcHRpb25zPFQ+KClcclxuKTogRm9ybVNpZ25hbDxUPiB7XHJcbiAgIGNvbnN0IGZvcm1Bc1NpZ25hbCA9IGlzU2lnbmFsKGZvcm0pID8gZm9ybSA6IHNpZ25hbChmb3JtKTtcclxuICAgaWYgKCFvcHRpb25zLmluamVjdG9yKSB7XHJcbiAgICAgIGFzc2VydEluSW5qZWN0aW9uQ29udGV4dCgoKSA9PiB7fSk7XHJcbiAgIH1cclxuICAgY29uc3QgeyB2YWx1ZSQsIHJhd1ZhbHVlJCwgdmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24kIH0gPVxyXG4gICAgICBidWlsZEZvcm1WYWx1ZVNpZ25hbDxUPihmb3JtQXNTaWduYWwsIG9wdGlvbnMpO1xyXG4gICBjb25zdCB7XHJcbiAgICAgIHN0YXR1cyQsXHJcbiAgICAgIHZhbGlkJCxcclxuICAgICAgaW52YWxpZCQsXHJcbiAgICAgIHBlbmRpbmckLFxyXG4gICAgICBkaXNhYmxlZCQsXHJcbiAgICAgIGVuYWJsZWQkLFxyXG4gICAgICBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kLFxyXG4gICB9ID0gYnVpbGRGb3JtU3RhdHVzU2lnbmFsPFQ+KGZvcm1Bc1NpZ25hbCwgb3B0aW9ucyk7XHJcbiAgIGNvbnN0IHsgdG91Y2hlZCQsIHVudG91Y2hlZCQsIHRvdWNoZWRDaGFuZ2VTdWJzY3JpcHRpb24kIH0gPVxyXG4gICAgICBidWlsZEZvcm1Ub3VjaGVkU2lnbmFsKGZvcm1Bc1NpZ25hbCwgb3B0aW9ucyk7XHJcbiAgIGNvbnN0IHsgZGlydHkkLCBwcmlzdGluZSQsIGRpcnR5Q2hhbmdlU3Vic2NyaXB0aW9uJCB9ID0gYnVpbGRGb3JtRGlydHlTaWduYWwoXHJcbiAgICAgIGZvcm1Bc1NpZ25hbCxcclxuICAgICAgb3B0aW9uc1xyXG4gICApO1xyXG4gICBjb25zdCBlcnJvcnMkID0gYnVpbGRGb3JtRXJyb3JTaWduYWwoZm9ybUFzU2lnbmFsLCB2YWx1ZSQsIHN0YXR1cyQsIG9wdGlvbnMpO1xyXG5cclxuICAgY29uc3QgZm9ybVNpZ25hbHM6IEZvcm1TaWduYWxTdGF0ZTxUPiA9IHtcclxuICAgICAgc3RhdHVzOiBzdGF0dXMkLmFzUmVhZG9ubHkoKSxcclxuICAgICAgdmFsdWU6IHZhbHVlJC5hc1JlYWRvbmx5KCksXHJcbiAgICAgIHJhd1ZhbHVlOiByYXdWYWx1ZSQuYXNSZWFkb25seSgpLFxyXG4gICAgICB0b3VjaGVkOiB0b3VjaGVkJC5hc1JlYWRvbmx5KCksXHJcbiAgICAgIHVudG91Y2hlZDogdW50b3VjaGVkJCxcclxuICAgICAgZGlydHk6IGRpcnR5JC5hc1JlYWRvbmx5KCksXHJcbiAgICAgIHByaXN0aW5lOiBwcmlzdGluZSQsXHJcbiAgICAgIHZhbGlkOiB2YWxpZCQsXHJcbiAgICAgIGludmFsaWQ6IGludmFsaWQkLFxyXG4gICAgICBwZW5kaW5nOiBwZW5kaW5nJCxcclxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkJCxcclxuICAgICAgZW5hYmxlZDogZW5hYmxlZCQsXHJcbiAgICAgIGVycm9yczogZXJyb3JzJCxcclxuICAgICAgc3Vic2NyaXB0aW9uczoge1xyXG4gICAgICAgICB2YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbjogdmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24kLmFzUmVhZG9ubHkoKSxcclxuICAgICAgICAgc3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uOiBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kLmFzUmVhZG9ubHkoKSxcclxuICAgICAgICAgdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbjogdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQuYXNSZWFkb25seSgpLFxyXG4gICAgICAgICBkaXJ0eUNoYW5nZVN1YnNjcmlwdGlvbjogZGlydHlDaGFuZ2VTdWJzY3JpcHRpb24kLmFzUmVhZG9ubHkoKSxcclxuICAgICAgfSxcclxuICAgfTtcclxuXHJcbiAgIGNvbnN0IHNuYXBzaG90JCA9IGJ1aWxkRm9ybVNuYXBzaG90U2lnbmFsKGZvcm1TaWduYWxzKTtcclxuICAgY29uc3QgZm9ybVNpZ25hbE9iaiA9ICgoKSA9PiBzbmFwc2hvdCQoKSkgYXMgRm9ybVNpZ25hbDxUPjtcclxuXHJcbiAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihmb3JtU2lnbmFsT2JqLCBmb3JtU2lnbmFscyk7XHJcblxyXG4gICByZXR1cm4gZm9ybVNpZ25hbE9iajtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { computed, effect, signal, untracked } from '@angular/core';
|
|
2
|
+
import { PristineChangeEvent } from '@angular/forms';
|
|
3
|
+
import { filter } from 'rxjs';
|
|
4
|
+
export function buildFormDirtySignal(formAsSignal, options) {
|
|
5
|
+
const dirty$ = signal(!!formAsSignal()?.dirty, {
|
|
6
|
+
equal: options.equalityFns?.dirtyEquality,
|
|
7
|
+
});
|
|
8
|
+
const dirtyChangeSubscription$ = signal(null);
|
|
9
|
+
const formDirtyChangeEffect = effect((onCleanup) => {
|
|
10
|
+
const form = formAsSignal();
|
|
11
|
+
untracked(() => {
|
|
12
|
+
const setDirty = () => {
|
|
13
|
+
untracked(() => {
|
|
14
|
+
dirty$.set(!!form?.dirty);
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
dirtyChangeSubscription$()?.unsubscribe();
|
|
18
|
+
dirtyChangeSubscription$.set(form?.events
|
|
19
|
+
.pipe(filter((e) => e instanceof PristineChangeEvent))
|
|
20
|
+
.subscribe((e) => {
|
|
21
|
+
setDirty();
|
|
22
|
+
}) ?? null);
|
|
23
|
+
setDirty();
|
|
24
|
+
});
|
|
25
|
+
onCleanup(() => untracked(() => dirtyChangeSubscription$())?.unsubscribe());
|
|
26
|
+
}, { injector: options.injector });
|
|
27
|
+
const pristine$ = computed(() => !dirty$());
|
|
28
|
+
return { dirty$, pristine$, dirtyChangeSubscription$ };
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1kaXJ0eS1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tZGlydHktc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFVLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLE1BQU0sRUFBZ0IsTUFBTSxNQUFNLENBQUM7QUFJNUMsTUFBTSxVQUFVLG9CQUFvQixDQUNqQyxZQUErQyxFQUMvQyxPQUEwQjtJQUUxQixNQUFNLE1BQU0sR0FBRyxNQUFNLENBQVUsQ0FBQyxDQUFDLFlBQVksRUFBRSxFQUFFLEtBQUssRUFBRTtRQUNyRCxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxhQUFhO0tBQzNDLENBQUMsQ0FBQztJQUNILE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztJQUVuRSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FDakMsQ0FBQyxTQUFtQixFQUFFLEVBQUU7UUFDckIsTUFBTSxJQUFJLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDNUIsU0FBUyxDQUFDLEdBQUcsRUFBRTtZQUNaLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRTtnQkFDbkIsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDWixNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7Z0JBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ04sQ0FBQyxDQUFDO1lBRUYsd0JBQXdCLEVBQUUsRUFBRSxXQUFXLEVBQUUsQ0FBQztZQUMxQyx3QkFBd0IsQ0FBQyxHQUFHLENBQ3pCLElBQUksRUFBRSxNQUFNO2lCQUNSLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxtQkFBbUIsQ0FBQyxDQUFDO2lCQUNyRCxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDZCxRQUFRLEVBQUUsQ0FBQztZQUNkLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDZixDQUFDO1lBQ0YsUUFBUSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FDTixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUNsRSxDQUFDO0lBQ0wsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FDaEMsQ0FBQztJQUVGLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFNUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsd0JBQXdCLEVBQUUsQ0FBQztBQUMxRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBQcmlzdGluZUNoYW5nZUV2ZW50IH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBmaWx0ZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtU2lnbmFsT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tc2lnbmFsLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBPcHRpb25hbEZvcm1Gcm9tVHlwZSB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tdHlwZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGb3JtRGlydHlTaWduYWwoXHJcbiAgIGZvcm1Bc1NpZ25hbDogU2lnbmFsPE9wdGlvbmFsRm9ybUZyb21UeXBlPGFueT4+LFxyXG4gICBvcHRpb25zOiBGb3JtU2lnbmFsT3B0aW9uc1xyXG4pIHtcclxuICAgY29uc3QgZGlydHkkID0gc2lnbmFsPGJvb2xlYW4+KCEhZm9ybUFzU2lnbmFsKCk/LmRpcnR5LCB7XHJcbiAgICAgIGVxdWFsOiBvcHRpb25zLmVxdWFsaXR5Rm5zPy5kaXJ0eUVxdWFsaXR5LFxyXG4gICB9KTtcclxuICAgY29uc3QgZGlydHlDaGFuZ2VTdWJzY3JpcHRpb24kID0gc2lnbmFsPFN1YnNjcmlwdGlvbiB8IG51bGw+KG51bGwpO1xyXG5cclxuICAgY29uc3QgZm9ybURpcnR5Q2hhbmdlRWZmZWN0ID0gZWZmZWN0KFxyXG4gICAgICAob25DbGVhbnVwOiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgICBjb25zdCBmb3JtID0gZm9ybUFzU2lnbmFsKCk7XHJcbiAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldERpcnR5ID0gKCkgPT4ge1xyXG4gICAgICAgICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBkaXJ0eSQuc2V0KCEhZm9ybT8uZGlydHkpO1xyXG4gICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIGRpcnR5Q2hhbmdlU3Vic2NyaXB0aW9uJCgpPy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICBkaXJ0eUNoYW5nZVN1YnNjcmlwdGlvbiQuc2V0KFxyXG4gICAgICAgICAgICAgICBmb3JtPy5ldmVudHNcclxuICAgICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgUHJpc3RpbmVDaGFuZ2VFdmVudCkpXHJcbiAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgc2V0RGlydHkoKTtcclxuICAgICAgICAgICAgICAgICAgfSkgPz8gbnVsbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBzZXREaXJ0eSgpO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgICAgb25DbGVhbnVwKFxyXG4gICAgICAgICAgICAoKSA9PiB1bnRyYWNrZWQoKCkgPT4gZGlydHlDaGFuZ2VTdWJzY3JpcHRpb24kKCkpPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaW5qZWN0b3I6IG9wdGlvbnMuaW5qZWN0b3IgfVxyXG4gICApO1xyXG5cclxuICAgY29uc3QgcHJpc3RpbmUkID0gY29tcHV0ZWQoKCkgPT4gIWRpcnR5JCgpKTtcclxuXHJcbiAgIHJldHVybiB7IGRpcnR5JCwgcHJpc3RpbmUkLCBkaXJ0eUNoYW5nZVN1YnNjcmlwdGlvbiQgfTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { computed, isSignal, signal, } from '@angular/core';
|
|
2
|
+
export function buildFormErrorSignal(form, valueSignal, statusSignal, options) {
|
|
3
|
+
const formAsSignal = isSignal(form) ? form : signal(form);
|
|
4
|
+
return computed(() => {
|
|
5
|
+
const v = valueSignal();
|
|
6
|
+
const s = statusSignal();
|
|
7
|
+
return formAsSignal()?.errors ?? null;
|
|
8
|
+
}, { equal: options.equalityFns?.errorsEquality });
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1lcnJvci1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tZXJyb3Itc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFHSixRQUFRLEVBQ1IsUUFBUSxFQUNSLE1BQU0sR0FDUixNQUFNLGVBQWUsQ0FBQztBQUt2QixNQUFNLFVBQVUsb0JBQW9CLENBQ2pDLElBQStELEVBQy9ELFdBQTRELEVBQzVELFlBQXNELEVBQ3RELE9BQTZCO0lBRTdCLE1BQU0sWUFBWSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFFMUQsT0FBTyxRQUFRLENBQ1osR0FBRyxFQUFFO1FBQ0YsTUFBTSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFDeEIsTUFBTSxDQUFDLEdBQUcsWUFBWSxFQUFFLENBQUM7UUFDekIsT0FBTyxZQUFZLEVBQUUsRUFBRSxNQUFNLElBQUksSUFBSSxDQUFDO0lBQ3pDLENBQUMsRUFDRCxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLGNBQWMsRUFBRSxDQUNoRCxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgIFNpZ25hbCxcclxuICAgV3JpdGFibGVTaWduYWwsXHJcbiAgIGNvbXB1dGVkLFxyXG4gICBpc1NpZ25hbCxcclxuICAgc2lnbmFsLFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbFN0YXR1cyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgRm9ybVNpZ25hbE9wdGlvbnMgfSBmcm9tICcuLi90eXBlcy9mb3JtLXNpZ25hbC1vcHRpb25zJztcclxuaW1wb3J0IHsgRm9ybUZyb21UeXBlLCBPcHRpb25hbEZvcm1Gcm9tVHlwZSB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tdHlwZSc7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRGb3JtRXJyb3JTaWduYWw8VCA9IGFueT4oXHJcbiAgIGZvcm06IFNpZ25hbDxPcHRpb25hbEZvcm1Gcm9tVHlwZTxUPj4gfCBPcHRpb25hbEZvcm1Gcm9tVHlwZTxUPixcclxuICAgdmFsdWVTaWduYWw6IFdyaXRhYmxlU2lnbmFsPEZvcm1Gcm9tVHlwZTxUPlsndmFsdWUnXSB8IG51bGw+LFxyXG4gICBzdGF0dXNTaWduYWw6IFdyaXRhYmxlU2lnbmFsPEZvcm1Db250cm9sU3RhdHVzIHwgbnVsbD4sXHJcbiAgIG9wdGlvbnM6IEZvcm1TaWduYWxPcHRpb25zPFQ+XHJcbikge1xyXG4gICBjb25zdCBmb3JtQXNTaWduYWwgPSBpc1NpZ25hbChmb3JtKSA/IGZvcm0gOiBzaWduYWwoZm9ybSk7XHJcblxyXG4gICByZXR1cm4gY29tcHV0ZWQoXHJcbiAgICAgICgpID0+IHtcclxuICAgICAgICAgY29uc3QgdiA9IHZhbHVlU2lnbmFsKCk7XHJcbiAgICAgICAgIGNvbnN0IHMgPSBzdGF0dXNTaWduYWwoKTtcclxuICAgICAgICAgcmV0dXJuIGZvcm1Bc1NpZ25hbCgpPy5lcnJvcnMgPz8gbnVsbDtcclxuICAgICAgfSxcclxuICAgICAgeyBlcXVhbDogb3B0aW9ucy5lcXVhbGl0eUZucz8uZXJyb3JzRXF1YWxpdHkgfVxyXG4gICApO1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { computed } from '@angular/core';
|
|
2
|
+
export function buildFormSnapshotSignal(formSignalState) {
|
|
3
|
+
return computed(() => {
|
|
4
|
+
return {
|
|
5
|
+
status: formSignalState.status(),
|
|
6
|
+
value: formSignalState.value(),
|
|
7
|
+
rawValue: formSignalState.rawValue(),
|
|
8
|
+
touched: formSignalState.touched(),
|
|
9
|
+
untouched: formSignalState.untouched(),
|
|
10
|
+
dirty: formSignalState.dirty(),
|
|
11
|
+
pristine: formSignalState.pristine(),
|
|
12
|
+
valid: formSignalState.valid(),
|
|
13
|
+
invalid: formSignalState.invalid(),
|
|
14
|
+
pending: formSignalState.pending(),
|
|
15
|
+
disabled: formSignalState.disabled(),
|
|
16
|
+
enabled: formSignalState.enabled(),
|
|
17
|
+
errors: formSignalState.errors(),
|
|
18
|
+
subscriptions: {
|
|
19
|
+
valueChangeSubscription: formSignalState.subscriptions.valueChangeSubscription(),
|
|
20
|
+
statusChangeSubscription: formSignalState.subscriptions.statusChangeSubscription(),
|
|
21
|
+
touchedChangeSubscription: formSignalState.subscriptions.touchedChangeSubscription(),
|
|
22
|
+
dirtyChangeSubscription: formSignalState.subscriptions.dirtyChangeSubscription(),
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zbmFwc2hvdC1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tc25hcHNob3Qtc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFNekMsTUFBTSxVQUFVLHVCQUF1QixDQUNwQyxlQUFtQztJQUVuQyxPQUFPLFFBQVEsQ0FBNkIsR0FBRyxFQUFFO1FBQzlDLE9BQU87WUFDSixNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUNoQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVMsRUFBRTtZQUN0QyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxLQUFLLEVBQUUsZUFBZSxDQUFDLEtBQUssRUFBRTtZQUM5QixPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxRQUFRLEVBQUUsZUFBZSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU8sRUFBRTtZQUNsQyxNQUFNLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRTtZQUNoQyxhQUFhLEVBQUU7Z0JBQ1osdUJBQXVCLEVBQ3BCLGVBQWUsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUU7Z0JBQzFELHdCQUF3QixFQUNyQixlQUFlLENBQUMsYUFBYSxDQUFDLHdCQUF3QixFQUFFO2dCQUMzRCx5QkFBeUIsRUFDdEIsZUFBZSxDQUFDLGFBQWEsQ0FBQyx5QkFBeUIsRUFBRTtnQkFDNUQsdUJBQXVCLEVBQ3BCLGVBQWUsQ0FBQyxhQUFhLENBQUMsdUJBQXVCLEVBQUU7YUFDNUQ7U0FDSCxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHtcclxuICAgRm9ybVNpZ25hbFN0YXRlLFxyXG4gICBGb3JtU25hcHNob3RTaWduYWxTdGF0ZSxcclxufSBmcm9tICcuLi90eXBlcy9mb3JtLXNpZ25hbC10eXBlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1TbmFwc2hvdFNpZ25hbDxUID0gYW55PihcclxuICAgZm9ybVNpZ25hbFN0YXRlOiBGb3JtU2lnbmFsU3RhdGU8VD5cclxuKSB7XHJcbiAgIHJldHVybiBjb21wdXRlZDxGb3JtU25hcHNob3RTaWduYWxTdGF0ZTxUPj4oKCkgPT4ge1xyXG4gICAgICByZXR1cm4ge1xyXG4gICAgICAgICBzdGF0dXM6IGZvcm1TaWduYWxTdGF0ZS5zdGF0dXMoKSxcclxuICAgICAgICAgdmFsdWU6IGZvcm1TaWduYWxTdGF0ZS52YWx1ZSgpLFxyXG4gICAgICAgICByYXdWYWx1ZTogZm9ybVNpZ25hbFN0YXRlLnJhd1ZhbHVlKCksXHJcbiAgICAgICAgIHRvdWNoZWQ6IGZvcm1TaWduYWxTdGF0ZS50b3VjaGVkKCksXHJcbiAgICAgICAgIHVudG91Y2hlZDogZm9ybVNpZ25hbFN0YXRlLnVudG91Y2hlZCgpLFxyXG4gICAgICAgICBkaXJ0eTogZm9ybVNpZ25hbFN0YXRlLmRpcnR5KCksXHJcbiAgICAgICAgIHByaXN0aW5lOiBmb3JtU2lnbmFsU3RhdGUucHJpc3RpbmUoKSxcclxuICAgICAgICAgdmFsaWQ6IGZvcm1TaWduYWxTdGF0ZS52YWxpZCgpLFxyXG4gICAgICAgICBpbnZhbGlkOiBmb3JtU2lnbmFsU3RhdGUuaW52YWxpZCgpLFxyXG4gICAgICAgICBwZW5kaW5nOiBmb3JtU2lnbmFsU3RhdGUucGVuZGluZygpLFxyXG4gICAgICAgICBkaXNhYmxlZDogZm9ybVNpZ25hbFN0YXRlLmRpc2FibGVkKCksXHJcbiAgICAgICAgIGVuYWJsZWQ6IGZvcm1TaWduYWxTdGF0ZS5lbmFibGVkKCksXHJcbiAgICAgICAgIGVycm9yczogZm9ybVNpZ25hbFN0YXRlLmVycm9ycygpLFxyXG4gICAgICAgICBzdWJzY3JpcHRpb25zOiB7XHJcbiAgICAgICAgICAgIHZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uOlxyXG4gICAgICAgICAgICAgICBmb3JtU2lnbmFsU3RhdGUuc3Vic2NyaXB0aW9ucy52YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbigpLFxyXG4gICAgICAgICAgICBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb246XHJcbiAgICAgICAgICAgICAgIGZvcm1TaWduYWxTdGF0ZS5zdWJzY3JpcHRpb25zLnN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbigpLFxyXG4gICAgICAgICAgICB0b3VjaGVkQ2hhbmdlU3Vic2NyaXB0aW9uOlxyXG4gICAgICAgICAgICAgICBmb3JtU2lnbmFsU3RhdGUuc3Vic2NyaXB0aW9ucy50b3VjaGVkQ2hhbmdlU3Vic2NyaXB0aW9uKCksXHJcbiAgICAgICAgICAgIGRpcnR5Q2hhbmdlU3Vic2NyaXB0aW9uOlxyXG4gICAgICAgICAgICAgICBmb3JtU2lnbmFsU3RhdGUuc3Vic2NyaXB0aW9ucy5kaXJ0eUNoYW5nZVN1YnNjcmlwdGlvbigpLFxyXG4gICAgICAgICB9LFxyXG4gICAgICB9O1xyXG4gICB9KTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { computed, effect, signal, untracked } from '@angular/core';
|
|
2
|
+
export function buildFormStatusSignal(formAsSignal, options) {
|
|
3
|
+
const equal = options.equalityFns?.statusEquality ?? (() => false);
|
|
4
|
+
const status$ = signal(formAsSignal()?.status ?? null, { equal });
|
|
5
|
+
const statusChangeSubscription$ = signal(null);
|
|
6
|
+
const formStatusChangeEffect = effect((onCleanup) => {
|
|
7
|
+
const form = formAsSignal();
|
|
8
|
+
untracked(() => {
|
|
9
|
+
const setStatus = () => {
|
|
10
|
+
untracked(() => {
|
|
11
|
+
status$.set(form?.status ?? null);
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
statusChangeSubscription$()?.unsubscribe();
|
|
15
|
+
statusChangeSubscription$.set(form?.statusChanges.subscribe(() => {
|
|
16
|
+
setStatus();
|
|
17
|
+
}) ?? null);
|
|
18
|
+
setStatus();
|
|
19
|
+
});
|
|
20
|
+
onCleanup(() => untracked(() => statusChangeSubscription$())?.unsubscribe());
|
|
21
|
+
}, { injector: options.injector });
|
|
22
|
+
const valid$ = computed(() => status$() === 'VALID');
|
|
23
|
+
const invalid$ = computed(() => status$() === 'INVALID');
|
|
24
|
+
const pending$ = computed(() => status$() == 'PENDING');
|
|
25
|
+
const disabled$ = computed(() => status$() === 'DISABLED');
|
|
26
|
+
const enabled$ = computed(() => status$() !== 'DISABLED');
|
|
27
|
+
return {
|
|
28
|
+
status$,
|
|
29
|
+
valid$,
|
|
30
|
+
invalid$,
|
|
31
|
+
pending$,
|
|
32
|
+
disabled$,
|
|
33
|
+
enabled$,
|
|
34
|
+
statusChangeSubscription$,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zdGF0dXMtc2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm0tc2lnbmFsL3NyYy9saWIvaGVscGVycy9mb3JtLXN0YXR1cy1zaWduYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU01RSxNQUFNLFVBQVUscUJBQXFCLENBQ2xDLFlBQTZDLEVBQzdDLE9BQTZCO0lBRTdCLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxXQUFXLEVBQUUsY0FBYyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUNuQixZQUFZLEVBQUUsRUFBRSxNQUFNLElBQUksSUFBSSxFQUM5QixFQUFFLEtBQUssRUFBRSxDQUNYLENBQUM7SUFDRixNQUFNLHlCQUF5QixHQUFHLE1BQU0sQ0FBc0IsSUFBSSxDQUFDLENBQUM7SUFDcEUsTUFBTSxzQkFBc0IsR0FBRyxNQUFNLENBQ2xDLENBQUMsU0FBbUIsRUFBRSxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLFNBQVMsR0FBRyxHQUFHLEVBQUU7Z0JBQ3BCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDO2dCQUNyQyxDQUFDLENBQUMsQ0FBQztZQUNOLENBQUMsQ0FBQztZQUVGLHlCQUF5QixFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDM0MseUJBQXlCLENBQUMsR0FBRyxDQUMxQixJQUFJLEVBQUUsYUFBYSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ2hDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNaLENBQUM7WUFDRixTQUFTLEVBQUUsQ0FBQztRQUNmLENBQUMsQ0FBQyxDQUFDO1FBQ0gsU0FBUyxDQUNOLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRSxDQUFDLEVBQUUsV0FBVyxFQUFFLENBQ25FLENBQUM7SUFDTCxDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLFFBQVEsRUFBRSxDQUNoQyxDQUFDO0lBRUYsTUFBTSxNQUFNLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLE9BQU8sQ0FBQyxDQUFDO0lBQ3JELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxTQUFTLENBQUMsQ0FBQztJQUN6RCxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxFQUFFLElBQUksU0FBUyxDQUFDLENBQUM7SUFDeEQsTUFBTSxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLE9BQU8sRUFBRSxLQUFLLFVBQVUsQ0FBQyxDQUFDO0lBQzNELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxVQUFVLENBQUMsQ0FBQztJQUUxRCxPQUFPO1FBQ0osT0FBTztRQUNQLE1BQU07UUFDTixRQUFRO1FBQ1IsUUFBUTtRQUNSLFNBQVM7UUFDVCxRQUFRO1FBQ1IseUJBQXlCO0tBQzNCLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbFN0YXR1cyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZvcm1TaWduYWxPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1zaWduYWwtb3B0aW9ucyc7XHJcbmltcG9ydCB7IE9wdGlvbmFsRm9ybUZyb21UeXBlIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS10eXBlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1TdGF0dXNTaWduYWw8VCA9IGFueT4oXHJcbiAgIGZvcm1Bc1NpZ25hbDogU2lnbmFsPE9wdGlvbmFsRm9ybUZyb21UeXBlPFQ+PixcclxuICAgb3B0aW9uczogRm9ybVNpZ25hbE9wdGlvbnM8VD5cclxuKSB7XHJcbiAgIGNvbnN0IGVxdWFsID0gb3B0aW9ucy5lcXVhbGl0eUZucz8uc3RhdHVzRXF1YWxpdHkgPz8gKCgpID0+IGZhbHNlKTtcclxuICAgY29uc3Qgc3RhdHVzJCA9IHNpZ25hbDxGb3JtQ29udHJvbFN0YXR1cyB8IG51bGw+KFxyXG4gICAgICBmb3JtQXNTaWduYWwoKT8uc3RhdHVzID8/IG51bGwsXHJcbiAgICAgIHsgZXF1YWwgfVxyXG4gICApO1xyXG4gICBjb25zdCBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kID0gc2lnbmFsPFN1YnNjcmlwdGlvbiB8IG51bGw+KG51bGwpO1xyXG4gICBjb25zdCBmb3JtU3RhdHVzQ2hhbmdlRWZmZWN0ID0gZWZmZWN0KFxyXG4gICAgICAob25DbGVhbnVwOiBGdW5jdGlvbikgPT4ge1xyXG4gICAgICAgICBjb25zdCBmb3JtID0gZm9ybUFzU2lnbmFsKCk7XHJcbiAgICAgICAgIHVudHJhY2tlZCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNldFN0YXR1cyA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgc3RhdHVzJC5zZXQoZm9ybT8uc3RhdHVzID8/IG51bGwpO1xyXG4gICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHN0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbiQoKT8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgc3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uJC5zZXQoXHJcbiAgICAgICAgICAgICAgIGZvcm0/LnN0YXR1c0NoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgc2V0U3RhdHVzKCk7XHJcbiAgICAgICAgICAgICAgIH0pID8/IG51bGxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgc2V0U3RhdHVzKCk7XHJcbiAgICAgICAgIH0pO1xyXG4gICAgICAgICBvbkNsZWFudXAoXHJcbiAgICAgICAgICAgICgpID0+IHVudHJhY2tlZCgoKSA9PiBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kKCkpPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaW5qZWN0b3I6IG9wdGlvbnMuaW5qZWN0b3IgfVxyXG4gICApO1xyXG5cclxuICAgY29uc3QgdmFsaWQkID0gY29tcHV0ZWQoKCkgPT4gc3RhdHVzJCgpID09PSAnVkFMSUQnKTtcclxuICAgY29uc3QgaW52YWxpZCQgPSBjb21wdXRlZCgoKSA9PiBzdGF0dXMkKCkgPT09ICdJTlZBTElEJyk7XHJcbiAgIGNvbnN0IHBlbmRpbmckID0gY29tcHV0ZWQoKCkgPT4gc3RhdHVzJCgpID09ICdQRU5ESU5HJyk7XHJcbiAgIGNvbnN0IGRpc2FibGVkJCA9IGNvbXB1dGVkKCgpID0+IHN0YXR1cyQoKSA9PT0gJ0RJU0FCTEVEJyk7XHJcbiAgIGNvbnN0IGVuYWJsZWQkID0gY29tcHV0ZWQoKCkgPT4gc3RhdHVzJCgpICE9PSAnRElTQUJMRUQnKTtcclxuXHJcbiAgIHJldHVybiB7XHJcbiAgICAgIHN0YXR1cyQsXHJcbiAgICAgIHZhbGlkJCxcclxuICAgICAgaW52YWxpZCQsXHJcbiAgICAgIHBlbmRpbmckLFxyXG4gICAgICBkaXNhYmxlZCQsXHJcbiAgICAgIGVuYWJsZWQkLFxyXG4gICAgICBzdGF0dXNDaGFuZ2VTdWJzY3JpcHRpb24kLFxyXG4gICB9O1xyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { computed, effect, signal, untracked } from '@angular/core';
|
|
2
|
+
import { TouchedChangeEvent } from '@angular/forms';
|
|
3
|
+
import { filter } from 'rxjs';
|
|
4
|
+
export function buildFormTouchedSignal(formAsSignal, options) {
|
|
5
|
+
const touched$ = signal(!!formAsSignal()?.touched, {
|
|
6
|
+
equal: options.equalityFns?.touchedEquality,
|
|
7
|
+
});
|
|
8
|
+
const touchedChangeSubscription$ = signal(null);
|
|
9
|
+
const formTouchedChangeEffect = effect((onCleanup) => {
|
|
10
|
+
const form = formAsSignal();
|
|
11
|
+
untracked(() => {
|
|
12
|
+
const setTouched = () => {
|
|
13
|
+
untracked(() => {
|
|
14
|
+
touched$.set(!!form?.touched);
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
touchedChangeSubscription$()?.unsubscribe();
|
|
18
|
+
touchedChangeSubscription$.set(form?.events
|
|
19
|
+
.pipe(filter((e) => e instanceof TouchedChangeEvent))
|
|
20
|
+
.subscribe((e) => {
|
|
21
|
+
setTouched();
|
|
22
|
+
}) ?? null);
|
|
23
|
+
setTouched();
|
|
24
|
+
});
|
|
25
|
+
onCleanup(() => untracked(() => touchedChangeSubscription$())?.unsubscribe());
|
|
26
|
+
}, { injector: options.injector });
|
|
27
|
+
const untouched$ = computed(() => !touched$(), {
|
|
28
|
+
equal: options.equalityFns?.touchedEquality,
|
|
29
|
+
});
|
|
30
|
+
return { touched$, untouched$, touchedChangeSubscription$ };
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10b3VjaGVkLXNpZ25hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtLXNpZ25hbC9zcmMvbGliL2hlbHBlcnMvZm9ybS10b3VjaGVkLXNpZ25hbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzVFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSxNQUFNLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBSTVDLE1BQU0sVUFBVSxzQkFBc0IsQ0FDbkMsWUFBK0MsRUFDL0MsT0FBMEI7SUFFMUIsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFVLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxPQUFPLEVBQUU7UUFDekQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsZUFBZTtLQUM3QyxDQUFDLENBQUM7SUFDSCxNQUFNLDBCQUEwQixHQUFHLE1BQU0sQ0FBc0IsSUFBSSxDQUFDLENBQUM7SUFFckUsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQ25DLENBQUMsU0FBbUIsRUFBRSxFQUFFO1FBQ3JCLE1BQU0sSUFBSSxHQUFHLFlBQVksRUFBRSxDQUFDO1FBQzVCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLFVBQVUsR0FBRyxHQUFHLEVBQUU7Z0JBQ3JCLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNqQyxDQUFDLENBQUMsQ0FBQztZQUNOLENBQUMsQ0FBQztZQUVGLDBCQUEwQixFQUFFLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDNUMsMEJBQTBCLENBQUMsR0FBRyxDQUMzQixJQUFJLEVBQUUsTUFBTTtpQkFDUixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksa0JBQWtCLENBQUMsQ0FBQztpQkFDcEQsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0JBQ2QsVUFBVSxFQUFFLENBQUM7WUFDaEIsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUNmLENBQUM7WUFDRixVQUFVLEVBQUUsQ0FBQztRQUNoQixDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FDTixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsMEJBQTBCLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUNwRSxDQUFDO0lBQ0wsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FDaEMsQ0FBQztJQUVGLE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQzVDLEtBQUssRUFBRSxPQUFPLENBQUMsV0FBVyxFQUFFLGVBQWU7S0FDN0MsQ0FBQyxDQUFDO0lBRUgsT0FBTyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsMEJBQTBCLEVBQUUsQ0FBQztBQUMvRCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY29tcHV0ZWQsIGVmZmVjdCwgU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBUb3VjaGVkQ2hhbmdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IGZpbHRlciwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IEZvcm1TaWduYWxPcHRpb25zIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS1zaWduYWwtb3B0aW9ucyc7XHJcbmltcG9ydCB7IE9wdGlvbmFsRm9ybUZyb21UeXBlIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS10eXBlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1Ub3VjaGVkU2lnbmFsKFxyXG4gICBmb3JtQXNTaWduYWw6IFNpZ25hbDxPcHRpb25hbEZvcm1Gcm9tVHlwZTxhbnk+PixcclxuICAgb3B0aW9uczogRm9ybVNpZ25hbE9wdGlvbnNcclxuKSB7XHJcbiAgIGNvbnN0IHRvdWNoZWQkID0gc2lnbmFsPGJvb2xlYW4+KCEhZm9ybUFzU2lnbmFsKCk/LnRvdWNoZWQsIHtcclxuICAgICAgZXF1YWw6IG9wdGlvbnMuZXF1YWxpdHlGbnM/LnRvdWNoZWRFcXVhbGl0eSxcclxuICAgfSk7XHJcbiAgIGNvbnN0IHRvdWNoZWRDaGFuZ2VTdWJzY3JpcHRpb24kID0gc2lnbmFsPFN1YnNjcmlwdGlvbiB8IG51bGw+KG51bGwpO1xyXG5cclxuICAgY29uc3QgZm9ybVRvdWNoZWRDaGFuZ2VFZmZlY3QgPSBlZmZlY3QoXHJcbiAgICAgIChvbkNsZWFudXA6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgIGNvbnN0IGZvcm0gPSBmb3JtQXNTaWduYWwoKTtcclxuICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc2V0VG91Y2hlZCA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdG91Y2hlZCQuc2V0KCEhZm9ybT8udG91Y2hlZCk7XHJcbiAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQoKT8udW5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQuc2V0KFxyXG4gICAgICAgICAgICAgICBmb3JtPy5ldmVudHNcclxuICAgICAgICAgICAgICAgICAgLnBpcGUoZmlsdGVyKChlKSA9PiBlIGluc3RhbmNlb2YgVG91Y2hlZENoYW5nZUV2ZW50KSlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICBzZXRUb3VjaGVkKCk7XHJcbiAgICAgICAgICAgICAgICAgIH0pID8/IG51bGxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgc2V0VG91Y2hlZCgpO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgICAgb25DbGVhbnVwKFxyXG4gICAgICAgICAgICAoKSA9PiB1bnRyYWNrZWQoKCkgPT4gdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQoKSk/LnVuc3Vic2NyaWJlKClcclxuICAgICAgICAgKTtcclxuICAgICAgfSxcclxuICAgICAgeyBpbmplY3Rvcjogb3B0aW9ucy5pbmplY3RvciB9XHJcbiAgICk7XHJcblxyXG4gICBjb25zdCB1bnRvdWNoZWQkID0gY29tcHV0ZWQoKCkgPT4gIXRvdWNoZWQkKCksIHtcclxuICAgICAgZXF1YWw6IG9wdGlvbnMuZXF1YWxpdHlGbnM/LnRvdWNoZWRFcXVhbGl0eSxcclxuICAgfSk7XHJcblxyXG4gICByZXR1cm4geyB0b3VjaGVkJCwgdW50b3VjaGVkJCwgdG91Y2hlZENoYW5nZVN1YnNjcmlwdGlvbiQgfTtcclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { effect, signal, untracked } from '@angular/core';
|
|
2
|
+
export function buildFormValueSignal(formAsSignal, options) {
|
|
3
|
+
const value$ = signal(formAsSignal()?.value ?? null, { equal: options.equalityFns?.valueEquality ?? (() => false) });
|
|
4
|
+
const rawValue$ = signal(formAsSignal()?.getRawValue() ?? null, {
|
|
5
|
+
equal: options.equalityFns?.valueEquality ?? (() => false),
|
|
6
|
+
});
|
|
7
|
+
const valueChangeSubscription$ = signal(null);
|
|
8
|
+
const formValueChangeEffect = effect((onCleanup) => {
|
|
9
|
+
const form = formAsSignal();
|
|
10
|
+
untracked(() => {
|
|
11
|
+
const setValue = () => {
|
|
12
|
+
untracked(() => {
|
|
13
|
+
value$.set(form?.value ?? null);
|
|
14
|
+
rawValue$.set(form?.getRawValue() ?? null);
|
|
15
|
+
});
|
|
16
|
+
};
|
|
17
|
+
valueChangeSubscription$()?.unsubscribe();
|
|
18
|
+
valueChangeSubscription$.set(form?.valueChanges.subscribe(() => {
|
|
19
|
+
setValue();
|
|
20
|
+
}) ?? null);
|
|
21
|
+
setValue();
|
|
22
|
+
});
|
|
23
|
+
onCleanup(() => untracked(() => valueChangeSubscription$())?.unsubscribe());
|
|
24
|
+
}, { injector: options.injector });
|
|
25
|
+
return { value$, rawValue$, valueChangeSubscription$ };
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS12YWx1ZS1zaWduYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtZm9ybS1zaWduYWwvc3JjL2xpYi9oZWxwZXJzL2Zvcm0tdmFsdWUtc2lnbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQVUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQU1sRSxNQUFNLFVBQVUsb0JBQW9CLENBQ2pDLFlBQTZDLEVBQzdDLE9BQTZCO0lBRTdCLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FDbEIsWUFBWSxFQUFFLEVBQUUsS0FBSyxJQUFJLElBQUksRUFDN0IsRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFBRSxhQUFhLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUNoRSxDQUFDO0lBQ0YsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUNyQixZQUFZLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLEVBQ3JDO1FBQ0csS0FBSyxFQUFFLE9BQU8sQ0FBQyxXQUFXLEVBQUUsYUFBYSxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDO0tBQzVELENBQ0gsQ0FBQztJQUNGLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxDQUFzQixJQUFJLENBQUMsQ0FBQztJQUNuRSxNQUFNLHFCQUFxQixHQUFHLE1BQU0sQ0FDakMsQ0FBQyxTQUFtQixFQUFFLEVBQUU7UUFDckIsTUFBTSxJQUFJLEdBQUcsWUFBWSxFQUErQixDQUFDO1FBQ3pELFNBQVMsQ0FBQyxHQUFHLEVBQUU7WUFDWixNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUU7Z0JBQ25CLFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ1osTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxJQUFJLElBQUksQ0FBQyxDQUFDO29CQUNoQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxJQUFJLENBQUMsQ0FBQztnQkFDOUMsQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDLENBQUM7WUFFRix3QkFBd0IsRUFBRSxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQzFDLHdCQUF3QixDQUFDLEdBQUcsQ0FDekIsSUFBSSxFQUFFLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMvQixRQUFRLEVBQUUsQ0FBQztZQUNkLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FDWixDQUFDO1lBQ0YsUUFBUSxFQUFFLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztRQUNILFNBQVMsQ0FDTixHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUNsRSxDQUFDO0lBQ0wsQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FDaEMsQ0FBQztJQUNGLE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLHdCQUF3QixFQUFFLENBQUM7QUFDMUQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGVmZmVjdCwgU2lnbmFsLCBzaWduYWwsIHVudHJhY2tlZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtU2lnbmFsT3B0aW9ucyB9IGZyb20gJy4uL3R5cGVzL2Zvcm0tc2lnbmFsLW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBGb3JtRnJvbVR5cGUsIE9wdGlvbmFsRm9ybUZyb21UeXBlIH0gZnJvbSAnLi4vdHlwZXMvZm9ybS10eXBlJztcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBidWlsZEZvcm1WYWx1ZVNpZ25hbDxUID0gYW55PihcclxuICAgZm9ybUFzU2lnbmFsOiBTaWduYWw8T3B0aW9uYWxGb3JtRnJvbVR5cGU8VD4+LFxyXG4gICBvcHRpb25zOiBGb3JtU2lnbmFsT3B0aW9uczxUPlxyXG4pIHtcclxuICAgY29uc3QgdmFsdWUkID0gc2lnbmFsPEZvcm1Gcm9tVHlwZTxUPlsndmFsdWUnXSB8IG51bGw+KFxyXG4gICAgICBmb3JtQXNTaWduYWwoKT8udmFsdWUgPz8gbnVsbCxcclxuICAgICAgeyBlcXVhbDogb3B0aW9ucy5lcXVhbGl0eUZucz8udmFsdWVFcXVhbGl0eSA/PyAoKCkgPT4gZmFsc2UpIH1cclxuICAgKTtcclxuICAgY29uc3QgcmF3VmFsdWUkID0gc2lnbmFsPEZvcm1Gcm9tVHlwZTxUPlsndmFsdWUnXSB8IG51bGw+KFxyXG4gICAgICBmb3JtQXNTaWduYWwoKT8uZ2V0UmF3VmFsdWUoKSA/PyBudWxsLFxyXG4gICAgICB7XHJcbiAgICAgICAgIGVxdWFsOiBvcHRpb25zLmVxdWFsaXR5Rm5zPy52YWx1ZUVxdWFsaXR5ID8/ICgoKSA9PiBmYWxzZSksXHJcbiAgICAgIH1cclxuICAgKTtcclxuICAgY29uc3QgdmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24kID0gc2lnbmFsPFN1YnNjcmlwdGlvbiB8IG51bGw+KG51bGwpO1xyXG4gICBjb25zdCBmb3JtVmFsdWVDaGFuZ2VFZmZlY3QgPSBlZmZlY3QoXHJcbiAgICAgIChvbkNsZWFudXA6IEZ1bmN0aW9uKSA9PiB7XHJcbiAgICAgICAgIGNvbnN0IGZvcm0gPSBmb3JtQXNTaWduYWwoKSBhcyBBYnN0cmFjdENvbnRyb2w8VD4gfCBudWxsO1xyXG4gICAgICAgICB1bnRyYWNrZWQoKCkgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXRWYWx1ZSA9ICgpID0+IHtcclxuICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdmFsdWUkLnNldChmb3JtPy52YWx1ZSA/PyBudWxsKTtcclxuICAgICAgICAgICAgICAgICAgcmF3VmFsdWUkLnNldChmb3JtPy5nZXRSYXdWYWx1ZSgpID8/IG51bGwpO1xyXG4gICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIHZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uJCgpPy51bnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgICB2YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbiQuc2V0KFxyXG4gICAgICAgICAgICAgICBmb3JtPy52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgc2V0VmFsdWUoKTtcclxuICAgICAgICAgICAgICAgfSkgPz8gbnVsbFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBzZXRWYWx1ZSgpO1xyXG4gICAgICAgICB9KTtcclxuICAgICAgICAgb25DbGVhbnVwKFxyXG4gICAgICAgICAgICAoKSA9PiB1bnRyYWNrZWQoKCkgPT4gdmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24kKCkpPy51bnN1YnNjcmliZSgpXHJcbiAgICAgICAgICk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHsgaW5qZWN0b3I6IG9wdGlvbnMuaW5qZWN0b3IgfVxyXG4gICApO1xyXG4gICByZXR1cm4geyB2YWx1ZSQsIHJhd1ZhbHVlJCwgdmFsdWVDaGFuZ2VTdWJzY3JpcHRpb24kIH07XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export const defaultFormSignalOptions = {};
|
|
2
|
+
export function buildDefaultFormSignalOptions() {
|
|
3
|
+
return structuredClone(defaultFormSignalOptions);
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zaWduYWwtb3B0aW9ucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtLXNpZ25hbC9zcmMvbGliL3R5cGVzL2Zvcm0tc2lnbmFsLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBZ0JBLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFzQixFQUFFLENBQUM7QUFDOUQsTUFBTSxVQUFVLDZCQUE2QjtJQUMxQyxPQUFPLGVBQWUsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDO0FBQ3BELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgVmFsdWVFcXVhbGl0eUZuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Db250cm9sU3RhdHVzLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBGb3JtRnJvbVR5cGUgfSBmcm9tICcuL2Zvcm0tdHlwZSc7XHJcblxyXG5leHBvcnQgdHlwZSBGb3JtU2lnbmFsRXF1YWxpdHlPcHRpb25zPFQgPSBhbnk+ID0ge1xyXG4gICBkaXJ0eUVxdWFsaXR5OiBWYWx1ZUVxdWFsaXR5Rm48Ym9vbGVhbj47XHJcbiAgIHRvdWNoZWRFcXVhbGl0eTogVmFsdWVFcXVhbGl0eUZuPGJvb2xlYW4+O1xyXG4gICB2YWx1ZUVxdWFsaXR5OiBWYWx1ZUVxdWFsaXR5Rm48Rm9ybUZyb21UeXBlPFQ+Wyd2YWx1ZSddIHwgbnVsbD47XHJcbiAgIHN0YXR1c0VxdWFsaXR5OiBWYWx1ZUVxdWFsaXR5Rm48Rm9ybUNvbnRyb2xTdGF0dXMgfCBudWxsPjtcclxuICAgZXJyb3JzRXF1YWxpdHk6IFZhbHVlRXF1YWxpdHlGbjxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD47XHJcbn07XHJcbmV4cG9ydCB0eXBlIEZvcm1TaWduYWxPcHRpb25zPFQgPSBhbnk+ID0ge1xyXG4gICBpbmplY3Rvcj86IEluamVjdG9yO1xyXG4gICBlcXVhbGl0eUZucz86IFBhcnRpYWw8Rm9ybVNpZ25hbEVxdWFsaXR5T3B0aW9uczxUPj47XHJcbn07XHJcblxyXG5leHBvcnQgY29uc3QgZGVmYXVsdEZvcm1TaWduYWxPcHRpb25zOiBGb3JtU2lnbmFsT3B0aW9ucyA9IHt9O1xyXG5leHBvcnQgZnVuY3Rpb24gYnVpbGREZWZhdWx0Rm9ybVNpZ25hbE9wdGlvbnM8VCA9IGFueT4oKTogRm9ybVNpZ25hbE9wdGlvbnM8VD4ge1xyXG4gICByZXR1cm4gc3RydWN0dXJlZENsb25lKGRlZmF1bHRGb3JtU2lnbmFsT3B0aW9ucyk7XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS1zaWduYWwtdHlwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtLXNpZ25hbC9zcmMvbGliL3R5cGVzL2Zvcm0tc2lnbmFsLXR5cGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGJ1aWxkRm9ybURpcnR5U2lnbmFsIH0gZnJvbSAnLi4vaGVscGVycy9mb3JtLWRpcnR5LXNpZ25hbCc7XHJcbmltcG9ydCB7IGJ1aWxkRm9ybUVycm9yU2lnbmFsIH0gZnJvbSAnLi4vaGVscGVycy9mb3JtLWVycm9yLXNpZ25hbCc7XHJcbmltcG9ydCB7IGJ1aWxkRm9ybVN0YXR1c1NpZ25hbCB9IGZyb20gJy4uL2hlbHBlcnMvZm9ybS1zdGF0dXMtc2lnbmFsJztcclxuaW1wb3J0IHsgYnVpbGRGb3JtVG91Y2hlZFNpZ25hbCB9IGZyb20gJy4uL2hlbHBlcnMvZm9ybS10b3VjaGVkLXNpZ25hbCc7XHJcbmltcG9ydCB7IGJ1aWxkRm9ybVZhbHVlU2lnbmFsIH0gZnJvbSAnLi4vaGVscGVycy9mb3JtLXZhbHVlLXNpZ25hbCc7XHJcblxyXG5leHBvcnQgdHlwZSBGb3JtU2lnbmFsU3Vic2NyaXB0aW9uc1N0YXRlPFQgPSBhbnk+ID0ge1xyXG4gICB2YWx1ZUNoYW5nZVN1YnNjcmlwdGlvbjogUmV0dXJuVHlwZTxcclxuICAgICAgUmV0dXJuVHlwZTxcclxuICAgICAgICAgdHlwZW9mIGJ1aWxkRm9ybVZhbHVlU2lnbmFsPFQ+XHJcbiAgICAgID5bJ3ZhbHVlQ2hhbmdlU3Vic2NyaXB0aW9uJCddWydhc1JlYWRvbmx5J11cclxuICAgPjtcclxuICAgc3RhdHVzQ2hhbmdlU3Vic2NyaXB0aW9uOiBSZXR1cm5UeXBlPFxyXG4gICAgICBSZXR1cm5UeXBlPFxyXG4gICAgICAgICB0eXBlb2YgYnVpbGRGb3JtU3RhdHVzU2lnbmFsXHJcbiAgICAgID5bJ3N0YXR1c0NoYW5nZVN1YnNjcmlwdGlvbiQnXVsnYXNSZWFkb25seSddXHJcbiAgID47XHJcbiAgIHRvdWNoZWRDaGFuZ2VTdWJzY3JpcHRpb246IFJldHVyblR5cGU8XHJcbiAgICAgIFJldHVyblR5cGU8XHJcbiAgICAgICAgIHR5cGVvZiBidWlsZEZvcm1Ub3VjaGVkU2lnbmFsXHJcbiAgICAgID5bJ3RvdWNoZWRDaGFuZ2VTdWJzY3JpcHRpb24kJ11bJ2FzUmVhZG9ubHknXVxyXG4gICA+O1xyXG4gICBkaXJ0eUNoYW5nZVN1YnNjcmlwdGlvbjogUmV0dXJuVHlwZTxcclxuICAgICAgUmV0dXJuVHlwZTxcclxuICAgICAgICAgdHlwZW9mIGJ1aWxkRm9ybURpcnR5U2lnbmFsXHJcbiAgICAgID5bJ2RpcnR5Q2hhbmdlU3Vic2NyaXB0aW9uJCddWydhc1JlYWRvbmx5J11cclxuICAgPjtcclxufTtcclxuZXhwb3J0IHR5cGUgRm9ybVNpZ25hbFN0YXRlPFQgPSBhbnk+ID0ge1xyXG4gICBzdGF0dXM6IFJldHVyblR5cGU8XHJcbiAgICAgIFJldHVyblR5cGU8dHlwZW9mIGJ1aWxkRm9ybVN0YXR1c1NpZ25hbD5bJ3N0YXR1cyQnXVsnYXNSZWFkb25seSddXHJcbiAgID47XHJcbiAgIHZhbHVlOiBSZXR1cm5UeXBlPFxyXG4gICAgICBSZXR1cm5UeXBlPHR5cGVvZiBidWlsZEZvcm1WYWx1ZVNpZ25hbDxUPj5bJ3ZhbHVlJCddWydhc1JlYWRvbmx5J11cclxuICAgPjtcclxuICAgcmF3VmFsdWU6IFJldHVyblR5cGU8XHJcbiAgICAgIFJldHVyblR5cGU8dHlwZW9mIGJ1aWxkRm9ybVZhbHVlU2lnbmFsPFQ+PlsncmF3VmFsdWUkJ11bJ2FzUmVhZG9ubHknXVxyXG4gICA+O1xyXG4gICB0b3VjaGVkOiBSZXR1cm5UeXBlPFxyXG4gICAgICBSZXR1cm5UeXBlPHR5cGVvZiBidWlsZEZvcm1Ub3VjaGVkU2lnbmFsPlsndG91Y2hlZCQnXVsnYXNSZWFkb25seSddXHJcbiAgID47XHJcbiAgIHVudG91Y2hlZDogUmV0dXJuVHlwZTx0eXBlb2YgYnVpbGRGb3JtVG91Y2hlZFNpZ25hbD5bJ3VudG91Y2hlZCQnXTtcclxuICAgZGlydHk6IFJldHVyblR5cGU8XHJcbiAgICAgIFJldHVyblR5cGU8dHlwZW9mIGJ1aWxkRm9ybURpcnR5U2lnbmFsPlsnZGlydHkkJ11bJ2FzUmVhZG9ubHknXVxyXG4gICA+O1xyXG4gICBwcmlzdGluZTogUmV0dXJuVHlwZTx0eXBlb2YgYnVpbGRGb3JtRGlydHlTaWduYWw+WydwcmlzdGluZSQnXTtcclxuICAgdmFsaWQ6IFJldHVyblR5cGU8dHlwZW9mIGJ1aWxkRm9ybVN0YXR1c1NpZ25hbD5bJ3ZhbGlkJCddO1xyXG4gICBpbnZhbGlkOiBSZXR1cm5UeXBlPHR5cGVvZiBidWlsZEZvcm1TdGF0dXNTaWduYWw+WydpbnZhbGlkJCddO1xyXG4gICBwZW5kaW5nOiBSZXR1cm5UeXBlPHR5cGVvZiBidWlsZEZvcm1TdGF0dXNTaWduYWw+WydwZW5kaW5nJCddO1xyXG4gICBkaXNhYmxlZDogUmV0dXJuVHlwZTx0eXBlb2YgYnVpbGRGb3JtU3RhdHVzU2lnbmFsPlsnZGlzYWJsZWQkJ107XHJcbiAgIGVuYWJsZWQ6IFJldHVyblR5cGU8dHlwZW9mIGJ1aWxkRm9ybVN0YXR1c1NpZ25hbD5bJ2VuYWJsZWQkJ107XHJcbiAgIGVycm9yczogUmV0dXJuVHlwZTx0eXBlb2YgYnVpbGRGb3JtRXJyb3JTaWduYWw+O1xyXG4gICBzdWJzY3JpcHRpb25zOiBGb3JtU2lnbmFsU3Vic2NyaXB0aW9uc1N0YXRlPFQ+O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgRm9ybVNuYXBzaG90U2lnbmFsU3Vic2NyaXB0aW9uc1N0YXRlPFQgPSBhbnk+ID0ge1xyXG4gICBbeCBpbiBrZXlvZiBGb3JtU2lnbmFsU3Vic2NyaXB0aW9uc1N0YXRlPFQ+XTogUmV0dXJuVHlwZTxcclxuICAgICAgRm9ybVNpZ25hbFN1YnNjcmlwdGlvbnNTdGF0ZTxUPlt4XVxyXG4gICA+O1xyXG59O1xyXG5leHBvcnQgdHlwZSBGb3JtU25hcHNob3RTaWduYWxTdGF0ZTxUID0gYW55PiA9IHtcclxuICAgW3ggaW4ga2V5b2YgT21pdDxGb3JtU2lnbmFsU3RhdGU8VD4sICdzdWJzY3JpcHRpb25zJz5dOiBSZXR1cm5UeXBlPFxyXG4gICAgICBGb3JtU2lnbmFsU3RhdGU8VD5beF1cclxuICAgPjtcclxufSAmIHsgc3Vic2NyaXB0aW9uczogRm9ybVNuYXBzaG90U2lnbmFsU3Vic2NyaXB0aW9uc1N0YXRlPFQ+IH07XHJcblxyXG5leHBvcnQgdHlwZSBGb3JtU2lnbmFsPFQgPSBhbnk+ID0gRm9ybVNpZ25hbFN0YXRlPFQ+ICZcclxuICAgKCgpID0+IEZvcm1TbmFwc2hvdFNpZ25hbFN0YXRlPFQ+KTtcclxuIl19
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS10eXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm0tc2lnbmFsL3NyYy9saWIvdHlwZXMvZm9ybS10eXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xyXG4gICBBYnN0cmFjdENvbnRyb2wsXHJcbiAgIEZvcm1BcnJheSxcclxuICAgRm9ybUNvbnRyb2wsXHJcbiAgIEZvcm1Hcm91cCxcclxufSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG5leHBvcnQgdHlwZSBGb3JtRnJvbVR5cGU8VD4gPSBUIGV4dGVuZHMgeyBbSyBpbiBrZXlvZiBUXTogQWJzdHJhY3RDb250cm9sPGFueT4gfVxyXG4gICA/IEZvcm1Hcm91cDxUPlxyXG4gICA6IFQgZXh0ZW5kcyBBYnN0cmFjdENvbnRyb2w8YW55PlxyXG4gICAgID8gRm9ybUFycmF5PFQ+XHJcbiAgICAgOiBGb3JtQ29udHJvbDxUPjtcclxuXHJcbmV4cG9ydCB0eXBlIE9wdGlvbmFsRm9ybUZyb21UeXBlPFQgPSBhbnk+ID1cclxuICAgfCAoVCBleHRlbmRzIHsgW0sgaW4ga2V5b2YgVF06IEFic3RyYWN0Q29udHJvbDxhbnk+IH0gPyBGb3JtR3JvdXA8VD4gOiBuZXZlcilcclxuICAgfCBGb3JtQ29udHJvbDxUPlxyXG4gICB8IChUIGV4dGVuZHMgQWJzdHJhY3RDb250cm9sPGFueT4gPyBGb3JtQXJyYXk8VD4gOiBuZXZlcilcclxuICAgfCBudWxsO1xyXG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmd4LWZvcm0tc2lnbmFsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcHJvamVjdHMvbmd4LWZvcm0tc2lnbmFsL3NyYy9uZ3gtZm9ybS1zaWduYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9wdWJsaWMtYXBpJztcbiJdfQ==
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Public API Surface of ngx-form-signal
|
|
3
|
+
*/
|
|
4
|
+
export * from './lib/form-signal';
|
|
5
|
+
export * from './lib/types/form-signal-options';
|
|
6
|
+
export * from './lib/types/form-signal-type';
|
|
7
|
+
export * from './lib/types/form-type';
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL25neC1mb3JtLXNpZ25hbC9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxpQ0FBaUMsQ0FBQztBQUNoRCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsdUJBQXVCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKlxyXG4gKiBQdWJsaWMgQVBJIFN1cmZhY2Ugb2Ygbmd4LWZvcm0tc2lnbmFsXHJcbiAqL1xyXG5cclxuZXhwb3J0ICogZnJvbSAnLi9saWIvZm9ybS1zaWduYWwnO1xyXG5leHBvcnQgKiBmcm9tICcuL2xpYi90eXBlcy9mb3JtLXNpZ25hbC1vcHRpb25zJztcclxuZXhwb3J0ICogZnJvbSAnLi9saWIvdHlwZXMvZm9ybS1zaWduYWwtdHlwZSc7XHJcbmV4cG9ydCAqIGZyb20gJy4vbGliL3R5cGVzL2Zvcm0tdHlwZSc7XHJcbiJdfQ==
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { signal, effect, untracked, computed, isSignal, assertInInjectionContext } from '@angular/core';
|
|
2
|
+
import { PristineChangeEvent, TouchedChangeEvent } from '@angular/forms';
|
|
3
|
+
import { filter } from 'rxjs';
|
|
4
|
+
|
|
5
|
+
function buildFormDirtySignal(formAsSignal, options) {
|
|
6
|
+
const dirty$ = signal(!!formAsSignal()?.dirty, {
|
|
7
|
+
equal: options.equalityFns?.dirtyEquality,
|
|
8
|
+
});
|
|
9
|
+
const dirtyChangeSubscription$ = signal(null);
|
|
10
|
+
const formDirtyChangeEffect = effect((onCleanup) => {
|
|
11
|
+
const form = formAsSignal();
|
|
12
|
+
untracked(() => {
|
|
13
|
+
const setDirty = () => {
|
|
14
|
+
untracked(() => {
|
|
15
|
+
dirty$.set(!!form?.dirty);
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
dirtyChangeSubscription$()?.unsubscribe();
|
|
19
|
+
dirtyChangeSubscription$.set(form?.events
|
|
20
|
+
.pipe(filter((e) => e instanceof PristineChangeEvent))
|
|
21
|
+
.subscribe((e) => {
|
|
22
|
+
setDirty();
|
|
23
|
+
}) ?? null);
|
|
24
|
+
setDirty();
|
|
25
|
+
});
|
|
26
|
+
onCleanup(() => untracked(() => dirtyChangeSubscription$())?.unsubscribe());
|
|
27
|
+
}, { injector: options.injector });
|
|
28
|
+
const pristine$ = computed(() => !dirty$());
|
|
29
|
+
return { dirty$, pristine$, dirtyChangeSubscription$ };
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
function buildFormErrorSignal(form, valueSignal, statusSignal, options) {
|
|
33
|
+
const formAsSignal = isSignal(form) ? form : signal(form);
|
|
34
|
+
return computed(() => {
|
|
35
|
+
const v = valueSignal();
|
|
36
|
+
const s = statusSignal();
|
|
37
|
+
return formAsSignal()?.errors ?? null;
|
|
38
|
+
}, { equal: options.equalityFns?.errorsEquality });
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function buildFormSnapshotSignal(formSignalState) {
|
|
42
|
+
return computed(() => {
|
|
43
|
+
return {
|
|
44
|
+
status: formSignalState.status(),
|
|
45
|
+
value: formSignalState.value(),
|
|
46
|
+
rawValue: formSignalState.rawValue(),
|
|
47
|
+
touched: formSignalState.touched(),
|
|
48
|
+
untouched: formSignalState.untouched(),
|
|
49
|
+
dirty: formSignalState.dirty(),
|
|
50
|
+
pristine: formSignalState.pristine(),
|
|
51
|
+
valid: formSignalState.valid(),
|
|
52
|
+
invalid: formSignalState.invalid(),
|
|
53
|
+
pending: formSignalState.pending(),
|
|
54
|
+
disabled: formSignalState.disabled(),
|
|
55
|
+
enabled: formSignalState.enabled(),
|
|
56
|
+
errors: formSignalState.errors(),
|
|
57
|
+
subscriptions: {
|
|
58
|
+
valueChangeSubscription: formSignalState.subscriptions.valueChangeSubscription(),
|
|
59
|
+
statusChangeSubscription: formSignalState.subscriptions.statusChangeSubscription(),
|
|
60
|
+
touchedChangeSubscription: formSignalState.subscriptions.touchedChangeSubscription(),
|
|
61
|
+
dirtyChangeSubscription: formSignalState.subscriptions.dirtyChangeSubscription(),
|
|
62
|
+
},
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function buildFormStatusSignal(formAsSignal, options) {
|
|
68
|
+
const equal = options.equalityFns?.statusEquality ?? (() => false);
|
|
69
|
+
const status$ = signal(formAsSignal()?.status ?? null, { equal });
|
|
70
|
+
const statusChangeSubscription$ = signal(null);
|
|
71
|
+
const formStatusChangeEffect = effect((onCleanup) => {
|
|
72
|
+
const form = formAsSignal();
|
|
73
|
+
untracked(() => {
|
|
74
|
+
const setStatus = () => {
|
|
75
|
+
untracked(() => {
|
|
76
|
+
status$.set(form?.status ?? null);
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
statusChangeSubscription$()?.unsubscribe();
|
|
80
|
+
statusChangeSubscription$.set(form?.statusChanges.subscribe(() => {
|
|
81
|
+
setStatus();
|
|
82
|
+
}) ?? null);
|
|
83
|
+
setStatus();
|
|
84
|
+
});
|
|
85
|
+
onCleanup(() => untracked(() => statusChangeSubscription$())?.unsubscribe());
|
|
86
|
+
}, { injector: options.injector });
|
|
87
|
+
const valid$ = computed(() => status$() === 'VALID');
|
|
88
|
+
const invalid$ = computed(() => status$() === 'INVALID');
|
|
89
|
+
const pending$ = computed(() => status$() == 'PENDING');
|
|
90
|
+
const disabled$ = computed(() => status$() === 'DISABLED');
|
|
91
|
+
const enabled$ = computed(() => status$() !== 'DISABLED');
|
|
92
|
+
return {
|
|
93
|
+
status$,
|
|
94
|
+
valid$,
|
|
95
|
+
invalid$,
|
|
96
|
+
pending$,
|
|
97
|
+
disabled$,
|
|
98
|
+
enabled$,
|
|
99
|
+
statusChangeSubscription$,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
function buildFormTouchedSignal(formAsSignal, options) {
|
|
104
|
+
const touched$ = signal(!!formAsSignal()?.touched, {
|
|
105
|
+
equal: options.equalityFns?.touchedEquality,
|
|
106
|
+
});
|
|
107
|
+
const touchedChangeSubscription$ = signal(null);
|
|
108
|
+
const formTouchedChangeEffect = effect((onCleanup) => {
|
|
109
|
+
const form = formAsSignal();
|
|
110
|
+
untracked(() => {
|
|
111
|
+
const setTouched = () => {
|
|
112
|
+
untracked(() => {
|
|
113
|
+
touched$.set(!!form?.touched);
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
touchedChangeSubscription$()?.unsubscribe();
|
|
117
|
+
touchedChangeSubscription$.set(form?.events
|
|
118
|
+
.pipe(filter((e) => e instanceof TouchedChangeEvent))
|
|
119
|
+
.subscribe((e) => {
|
|
120
|
+
setTouched();
|
|
121
|
+
}) ?? null);
|
|
122
|
+
setTouched();
|
|
123
|
+
});
|
|
124
|
+
onCleanup(() => untracked(() => touchedChangeSubscription$())?.unsubscribe());
|
|
125
|
+
}, { injector: options.injector });
|
|
126
|
+
const untouched$ = computed(() => !touched$(), {
|
|
127
|
+
equal: options.equalityFns?.touchedEquality,
|
|
128
|
+
});
|
|
129
|
+
return { touched$, untouched$, touchedChangeSubscription$ };
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
function buildFormValueSignal(formAsSignal, options) {
|
|
133
|
+
const value$ = signal(formAsSignal()?.value ?? null, { equal: options.equalityFns?.valueEquality ?? (() => false) });
|
|
134
|
+
const rawValue$ = signal(formAsSignal()?.getRawValue() ?? null, {
|
|
135
|
+
equal: options.equalityFns?.valueEquality ?? (() => false),
|
|
136
|
+
});
|
|
137
|
+
const valueChangeSubscription$ = signal(null);
|
|
138
|
+
const formValueChangeEffect = effect((onCleanup) => {
|
|
139
|
+
const form = formAsSignal();
|
|
140
|
+
untracked(() => {
|
|
141
|
+
const setValue = () => {
|
|
142
|
+
untracked(() => {
|
|
143
|
+
value$.set(form?.value ?? null);
|
|
144
|
+
rawValue$.set(form?.getRawValue() ?? null);
|
|
145
|
+
});
|
|
146
|
+
};
|
|
147
|
+
valueChangeSubscription$()?.unsubscribe();
|
|
148
|
+
valueChangeSubscription$.set(form?.valueChanges.subscribe(() => {
|
|
149
|
+
setValue();
|
|
150
|
+
}) ?? null);
|
|
151
|
+
setValue();
|
|
152
|
+
});
|
|
153
|
+
onCleanup(() => untracked(() => valueChangeSubscription$())?.unsubscribe());
|
|
154
|
+
}, { injector: options.injector });
|
|
155
|
+
return { value$, rawValue$, valueChangeSubscription$ };
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const defaultFormSignalOptions = {};
|
|
159
|
+
function buildDefaultFormSignalOptions() {
|
|
160
|
+
return structuredClone(defaultFormSignalOptions);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
function formSignal(form, options = buildDefaultFormSignalOptions()) {
|
|
164
|
+
const formAsSignal = isSignal(form) ? form : signal(form);
|
|
165
|
+
if (!options.injector) {
|
|
166
|
+
assertInInjectionContext(() => { });
|
|
167
|
+
}
|
|
168
|
+
const { value$, rawValue$, valueChangeSubscription$ } = buildFormValueSignal(formAsSignal, options);
|
|
169
|
+
const { status$, valid$, invalid$, pending$, disabled$, enabled$, statusChangeSubscription$, } = buildFormStatusSignal(formAsSignal, options);
|
|
170
|
+
const { touched$, untouched$, touchedChangeSubscription$ } = buildFormTouchedSignal(formAsSignal, options);
|
|
171
|
+
const { dirty$, pristine$, dirtyChangeSubscription$ } = buildFormDirtySignal(formAsSignal, options);
|
|
172
|
+
const errors$ = buildFormErrorSignal(formAsSignal, value$, status$, options);
|
|
173
|
+
const formSignals = {
|
|
174
|
+
status: status$.asReadonly(),
|
|
175
|
+
value: value$.asReadonly(),
|
|
176
|
+
rawValue: rawValue$.asReadonly(),
|
|
177
|
+
touched: touched$.asReadonly(),
|
|
178
|
+
untouched: untouched$,
|
|
179
|
+
dirty: dirty$.asReadonly(),
|
|
180
|
+
pristine: pristine$,
|
|
181
|
+
valid: valid$,
|
|
182
|
+
invalid: invalid$,
|
|
183
|
+
pending: pending$,
|
|
184
|
+
disabled: disabled$,
|
|
185
|
+
enabled: enabled$,
|
|
186
|
+
errors: errors$,
|
|
187
|
+
subscriptions: {
|
|
188
|
+
valueChangeSubscription: valueChangeSubscription$.asReadonly(),
|
|
189
|
+
statusChangeSubscription: statusChangeSubscription$.asReadonly(),
|
|
190
|
+
touchedChangeSubscription: touchedChangeSubscription$.asReadonly(),
|
|
191
|
+
dirtyChangeSubscription: dirtyChangeSubscription$.asReadonly(),
|
|
192
|
+
},
|
|
193
|
+
};
|
|
194
|
+
const snapshot$ = buildFormSnapshotSignal(formSignals);
|
|
195
|
+
const formSignalObj = (() => snapshot$());
|
|
196
|
+
Object.setPrototypeOf(formSignalObj, formSignals);
|
|
197
|
+
return formSignalObj;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/*
|
|
201
|
+
* Public API Surface of ngx-form-signal
|
|
202
|
+
*/
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Generated bundle index. Do not edit.
|
|
206
|
+
*/
|
|
207
|
+
|
|
208
|
+
export { buildDefaultFormSignalOptions, defaultFormSignalOptions, formSignal };
|
|
209
|
+
//# sourceMappingURL=ngx-form-signal.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ngx-form-signal.mjs","sources":["../../../projects/ngx-form-signal/src/lib/helpers/form-dirty-signal.ts","../../../projects/ngx-form-signal/src/lib/helpers/form-error-signal.ts","../../../projects/ngx-form-signal/src/lib/helpers/form-snapshot-signal.ts","../../../projects/ngx-form-signal/src/lib/helpers/form-status-signal.ts","../../../projects/ngx-form-signal/src/lib/helpers/form-touched-signal.ts","../../../projects/ngx-form-signal/src/lib/helpers/form-value-signal.ts","../../../projects/ngx-form-signal/src/lib/types/form-signal-options.ts","../../../projects/ngx-form-signal/src/lib/form-signal.ts","../../../projects/ngx-form-signal/src/public-api.ts","../../../projects/ngx-form-signal/src/ngx-form-signal.ts"],"sourcesContent":["import { computed, effect, Signal, signal, untracked } from '@angular/core';\r\nimport { PristineChangeEvent } from '@angular/forms';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { FormSignalOptions } from '../types/form-signal-options';\r\nimport { OptionalFormFromType } from '../types/form-type';\r\n\r\nexport function buildFormDirtySignal(\r\n formAsSignal: Signal<OptionalFormFromType<any>>,\r\n options: FormSignalOptions\r\n) {\r\n const dirty$ = signal<boolean>(!!formAsSignal()?.dirty, {\r\n equal: options.equalityFns?.dirtyEquality,\r\n });\r\n const dirtyChangeSubscription$ = signal<Subscription | null>(null);\r\n\r\n const formDirtyChangeEffect = effect(\r\n (onCleanup: Function) => {\r\n const form = formAsSignal();\r\n untracked(() => {\r\n const setDirty = () => {\r\n untracked(() => {\r\n dirty$.set(!!form?.dirty);\r\n });\r\n };\r\n\r\n dirtyChangeSubscription$()?.unsubscribe();\r\n dirtyChangeSubscription$.set(\r\n form?.events\r\n .pipe(filter((e) => e instanceof PristineChangeEvent))\r\n .subscribe((e) => {\r\n setDirty();\r\n }) ?? null\r\n );\r\n setDirty();\r\n });\r\n onCleanup(\r\n () => untracked(() => dirtyChangeSubscription$())?.unsubscribe()\r\n );\r\n },\r\n { injector: options.injector }\r\n );\r\n\r\n const pristine$ = computed(() => !dirty$());\r\n\r\n return { dirty$, pristine$, dirtyChangeSubscription$ };\r\n}\r\n","import {\r\n Signal,\r\n WritableSignal,\r\n computed,\r\n isSignal,\r\n signal,\r\n} from '@angular/core';\r\nimport { FormControlStatus } from '@angular/forms';\r\nimport { FormSignalOptions } from '../types/form-signal-options';\r\nimport { FormFromType, OptionalFormFromType } from '../types/form-type';\r\n\r\nexport function buildFormErrorSignal<T = any>(\r\n form: Signal<OptionalFormFromType<T>> | OptionalFormFromType<T>,\r\n valueSignal: WritableSignal<FormFromType<T>['value'] | null>,\r\n statusSignal: WritableSignal<FormControlStatus | null>,\r\n options: FormSignalOptions<T>\r\n) {\r\n const formAsSignal = isSignal(form) ? form : signal(form);\r\n\r\n return computed(\r\n () => {\r\n const v = valueSignal();\r\n const s = statusSignal();\r\n return formAsSignal()?.errors ?? null;\r\n },\r\n { equal: options.equalityFns?.errorsEquality }\r\n );\r\n}\r\n","import { computed } from '@angular/core';\r\nimport {\r\n FormSignalState,\r\n FormSnapshotSignalState,\r\n} from '../types/form-signal-type';\r\n\r\nexport function buildFormSnapshotSignal<T = any>(\r\n formSignalState: FormSignalState<T>\r\n) {\r\n return computed<FormSnapshotSignalState<T>>(() => {\r\n return {\r\n status: formSignalState.status(),\r\n value: formSignalState.value(),\r\n rawValue: formSignalState.rawValue(),\r\n touched: formSignalState.touched(),\r\n untouched: formSignalState.untouched(),\r\n dirty: formSignalState.dirty(),\r\n pristine: formSignalState.pristine(),\r\n valid: formSignalState.valid(),\r\n invalid: formSignalState.invalid(),\r\n pending: formSignalState.pending(),\r\n disabled: formSignalState.disabled(),\r\n enabled: formSignalState.enabled(),\r\n errors: formSignalState.errors(),\r\n subscriptions: {\r\n valueChangeSubscription:\r\n formSignalState.subscriptions.valueChangeSubscription(),\r\n statusChangeSubscription:\r\n formSignalState.subscriptions.statusChangeSubscription(),\r\n touchedChangeSubscription:\r\n formSignalState.subscriptions.touchedChangeSubscription(),\r\n dirtyChangeSubscription:\r\n formSignalState.subscriptions.dirtyChangeSubscription(),\r\n },\r\n };\r\n });\r\n}\r\n","import { computed, effect, Signal, signal, untracked } from '@angular/core';\r\nimport { FormControlStatus } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { FormSignalOptions } from '../types/form-signal-options';\r\nimport { OptionalFormFromType } from '../types/form-type';\r\n\r\nexport function buildFormStatusSignal<T = any>(\r\n formAsSignal: Signal<OptionalFormFromType<T>>,\r\n options: FormSignalOptions<T>\r\n) {\r\n const equal = options.equalityFns?.statusEquality ?? (() => false);\r\n const status$ = signal<FormControlStatus | null>(\r\n formAsSignal()?.status ?? null,\r\n { equal }\r\n );\r\n const statusChangeSubscription$ = signal<Subscription | null>(null);\r\n const formStatusChangeEffect = effect(\r\n (onCleanup: Function) => {\r\n const form = formAsSignal();\r\n untracked(() => {\r\n const setStatus = () => {\r\n untracked(() => {\r\n status$.set(form?.status ?? null);\r\n });\r\n };\r\n\r\n statusChangeSubscription$()?.unsubscribe();\r\n statusChangeSubscription$.set(\r\n form?.statusChanges.subscribe(() => {\r\n setStatus();\r\n }) ?? null\r\n );\r\n setStatus();\r\n });\r\n onCleanup(\r\n () => untracked(() => statusChangeSubscription$())?.unsubscribe()\r\n );\r\n },\r\n { injector: options.injector }\r\n );\r\n\r\n const valid$ = computed(() => status$() === 'VALID');\r\n const invalid$ = computed(() => status$() === 'INVALID');\r\n const pending$ = computed(() => status$() == 'PENDING');\r\n const disabled$ = computed(() => status$() === 'DISABLED');\r\n const enabled$ = computed(() => status$() !== 'DISABLED');\r\n\r\n return {\r\n status$,\r\n valid$,\r\n invalid$,\r\n pending$,\r\n disabled$,\r\n enabled$,\r\n statusChangeSubscription$,\r\n };\r\n}\r\n","import { computed, effect, Signal, signal, untracked } from '@angular/core';\r\nimport { TouchedChangeEvent } from '@angular/forms';\r\nimport { filter, Subscription } from 'rxjs';\r\nimport { FormSignalOptions } from '../types/form-signal-options';\r\nimport { OptionalFormFromType } from '../types/form-type';\r\n\r\nexport function buildFormTouchedSignal(\r\n formAsSignal: Signal<OptionalFormFromType<any>>,\r\n options: FormSignalOptions\r\n) {\r\n const touched$ = signal<boolean>(!!formAsSignal()?.touched, {\r\n equal: options.equalityFns?.touchedEquality,\r\n });\r\n const touchedChangeSubscription$ = signal<Subscription | null>(null);\r\n\r\n const formTouchedChangeEffect = effect(\r\n (onCleanup: Function) => {\r\n const form = formAsSignal();\r\n untracked(() => {\r\n const setTouched = () => {\r\n untracked(() => {\r\n touched$.set(!!form?.touched);\r\n });\r\n };\r\n\r\n touchedChangeSubscription$()?.unsubscribe();\r\n touchedChangeSubscription$.set(\r\n form?.events\r\n .pipe(filter((e) => e instanceof TouchedChangeEvent))\r\n .subscribe((e) => {\r\n setTouched();\r\n }) ?? null\r\n );\r\n setTouched();\r\n });\r\n onCleanup(\r\n () => untracked(() => touchedChangeSubscription$())?.unsubscribe()\r\n );\r\n },\r\n { injector: options.injector }\r\n );\r\n\r\n const untouched$ = computed(() => !touched$(), {\r\n equal: options.equalityFns?.touchedEquality,\r\n });\r\n\r\n return { touched$, untouched$, touchedChangeSubscription$ };\r\n}\r\n","import { effect, Signal, signal, untracked } from '@angular/core';\r\nimport { AbstractControl } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { FormSignalOptions } from '../types/form-signal-options';\r\nimport { FormFromType, OptionalFormFromType } from '../types/form-type';\r\n\r\nexport function buildFormValueSignal<T = any>(\r\n formAsSignal: Signal<OptionalFormFromType<T>>,\r\n options: FormSignalOptions<T>\r\n) {\r\n const value$ = signal<FormFromType<T>['value'] | null>(\r\n formAsSignal()?.value ?? null,\r\n { equal: options.equalityFns?.valueEquality ?? (() => false) }\r\n );\r\n const rawValue$ = signal<FormFromType<T>['value'] | null>(\r\n formAsSignal()?.getRawValue() ?? null,\r\n {\r\n equal: options.equalityFns?.valueEquality ?? (() => false),\r\n }\r\n );\r\n const valueChangeSubscription$ = signal<Subscription | null>(null);\r\n const formValueChangeEffect = effect(\r\n (onCleanup: Function) => {\r\n const form = formAsSignal() as AbstractControl<T> | null;\r\n untracked(() => {\r\n const setValue = () => {\r\n untracked(() => {\r\n value$.set(form?.value ?? null);\r\n rawValue$.set(form?.getRawValue() ?? null);\r\n });\r\n };\r\n\r\n valueChangeSubscription$()?.unsubscribe();\r\n valueChangeSubscription$.set(\r\n form?.valueChanges.subscribe(() => {\r\n setValue();\r\n }) ?? null\r\n );\r\n setValue();\r\n });\r\n onCleanup(\r\n () => untracked(() => valueChangeSubscription$())?.unsubscribe()\r\n );\r\n },\r\n { injector: options.injector }\r\n );\r\n return { value$, rawValue$, valueChangeSubscription$ };\r\n}\r\n","import { Injector, ValueEqualityFn } from '@angular/core';\r\nimport { FormControlStatus, ValidationErrors } from '@angular/forms';\r\nimport { FormFromType } from './form-type';\r\n\r\nexport type FormSignalEqualityOptions<T = any> = {\r\n dirtyEquality: ValueEqualityFn<boolean>;\r\n touchedEquality: ValueEqualityFn<boolean>;\r\n valueEquality: ValueEqualityFn<FormFromType<T>['value'] | null>;\r\n statusEquality: ValueEqualityFn<FormControlStatus | null>;\r\n errorsEquality: ValueEqualityFn<ValidationErrors | null>;\r\n};\r\nexport type FormSignalOptions<T = any> = {\r\n injector?: Injector;\r\n equalityFns?: Partial<FormSignalEqualityOptions<T>>;\r\n};\r\n\r\nexport const defaultFormSignalOptions: FormSignalOptions = {};\r\nexport function buildDefaultFormSignalOptions<T = any>(): FormSignalOptions<T> {\r\n return structuredClone(defaultFormSignalOptions);\r\n}\r\n","import {\r\n assertInInjectionContext,\r\n isSignal,\r\n Signal,\r\n signal,\r\n} from '@angular/core';\r\nimport { buildFormDirtySignal } from './helpers/form-dirty-signal';\r\nimport { buildFormErrorSignal } from './helpers/form-error-signal';\r\nimport { buildFormSnapshotSignal } from './helpers/form-snapshot-signal';\r\nimport { buildFormStatusSignal } from './helpers/form-status-signal';\r\nimport { buildFormTouchedSignal } from './helpers/form-touched-signal';\r\nimport { buildFormValueSignal } from './helpers/form-value-signal';\r\nimport {\r\n buildDefaultFormSignalOptions,\r\n FormSignalOptions,\r\n} from './types/form-signal-options';\r\nimport { FormSignal, FormSignalState } from './types/form-signal-type';\r\nimport { OptionalFormFromType } from './types/form-type';\r\n\r\nexport function formSignal<T = any>(\r\n form: Signal<OptionalFormFromType<T>> | OptionalFormFromType<T>,\r\n options: FormSignalOptions = buildDefaultFormSignalOptions<T>()\r\n): FormSignal<T> {\r\n const formAsSignal = isSignal(form) ? form : signal(form);\r\n if (!options.injector) {\r\n assertInInjectionContext(() => {});\r\n }\r\n const { value$, rawValue$, valueChangeSubscription$ } =\r\n buildFormValueSignal<T>(formAsSignal, options);\r\n const {\r\n status$,\r\n valid$,\r\n invalid$,\r\n pending$,\r\n disabled$,\r\n enabled$,\r\n statusChangeSubscription$,\r\n } = buildFormStatusSignal<T>(formAsSignal, options);\r\n const { touched$, untouched$, touchedChangeSubscription$ } =\r\n buildFormTouchedSignal(formAsSignal, options);\r\n const { dirty$, pristine$, dirtyChangeSubscription$ } = buildFormDirtySignal(\r\n formAsSignal,\r\n options\r\n );\r\n const errors$ = buildFormErrorSignal(formAsSignal, value$, status$, options);\r\n\r\n const formSignals: FormSignalState<T> = {\r\n status: status$.asReadonly(),\r\n value: value$.asReadonly(),\r\n rawValue: rawValue$.asReadonly(),\r\n touched: touched$.asReadonly(),\r\n untouched: untouched$,\r\n dirty: dirty$.asReadonly(),\r\n pristine: pristine$,\r\n valid: valid$,\r\n invalid: invalid$,\r\n pending: pending$,\r\n disabled: disabled$,\r\n enabled: enabled$,\r\n errors: errors$,\r\n subscriptions: {\r\n valueChangeSubscription: valueChangeSubscription$.asReadonly(),\r\n statusChangeSubscription: statusChangeSubscription$.asReadonly(),\r\n touchedChangeSubscription: touchedChangeSubscription$.asReadonly(),\r\n dirtyChangeSubscription: dirtyChangeSubscription$.asReadonly(),\r\n },\r\n };\r\n\r\n const snapshot$ = buildFormSnapshotSignal(formSignals);\r\n const formSignalObj = (() => snapshot$()) as FormSignal<T>;\r\n\r\n Object.setPrototypeOf(formSignalObj, formSignals);\r\n\r\n return formSignalObj;\r\n}\r\n","/*\r\n * Public API Surface of ngx-form-signal\r\n */\r\n\r\nexport * from './lib/form-signal';\r\nexport * from './lib/types/form-signal-options';\r\nexport * from './lib/types/form-signal-type';\r\nexport * from './lib/types/form-type';\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Signal } from '@angular/core';
|
|
2
|
+
import { FormSignalOptions } from './types/form-signal-options';
|
|
3
|
+
import { FormSignal } from './types/form-signal-type';
|
|
4
|
+
import { OptionalFormFromType } from './types/form-type';
|
|
5
|
+
export declare function formSignal<T = any>(form: Signal<OptionalFormFromType<T>> | OptionalFormFromType<T>, options?: FormSignalOptions): FormSignal<T>;
|