@molecule/app-react 2.1.0 → 3.0.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 +28 -12
- package/dist/hooks/useForm.d.ts +6 -6
- package/dist/hooks/useForm.d.ts.map +1 -1
- package/dist/hooks/useForm.js.map +1 -1
- package/dist/hooks/useProfileForm.d.ts +10 -5
- package/dist/hooks/useProfileForm.d.ts.map +1 -1
- package/dist/hooks/useProfileForm.js +18 -5
- package/dist/hooks/useProfileForm.js.map +1 -1
- package/dist/hooks/usePromise.d.ts +11 -0
- package/dist/hooks/usePromise.d.ts.map +1 -1
- package/dist/hooks/usePromise.js +11 -0
- package/dist/hooks/usePromise.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -3,7 +3,7 @@ AUTO-GENERATED — DO NOT EDIT THIS FILE.
|
|
|
3
3
|
Generated by `mlcl sync-docs` from the package's src/index.ts JSDoc + mlcl/registry.json.
|
|
4
4
|
Edits here are overwritten on the next commit (molecule's pre-commit hook regenerates).
|
|
5
5
|
To change this document, edit the module-level JSDoc in src/index.ts.
|
|
6
|
-
Generated: 2026-10-
|
|
6
|
+
Generated: 2026-10-28T08:44:20.660Z
|
|
7
7
|
-->
|
|
8
8
|
|
|
9
9
|
# @molecule/app-react
|
|
@@ -321,7 +321,7 @@ Form controller interface.
|
|
|
321
321
|
All form providers must implement this interface.
|
|
322
322
|
|
|
323
323
|
```typescript
|
|
324
|
-
interface FormController<T extends
|
|
324
|
+
interface FormController<T extends FormValuesConstraint<T> = Record<string, unknown>> {
|
|
325
325
|
/**
|
|
326
326
|
* Gets the current form state.
|
|
327
327
|
*/
|
|
@@ -429,7 +429,7 @@ interface FormController<T extends Record<string, unknown> = Record<string, unkn
|
|
|
429
429
|
Form creation options.
|
|
430
430
|
|
|
431
431
|
```typescript
|
|
432
|
-
interface FormOptions<T extends
|
|
432
|
+
interface FormOptions<T extends FormValuesConstraint<T>> {
|
|
433
433
|
/**
|
|
434
434
|
* Default values, captured as the form's clean baseline when the controller
|
|
435
435
|
* is created. Mutating this object afterwards does not change the baseline.
|
|
@@ -844,7 +844,7 @@ provider (`createForm` from `@molecule/app-forms`), which uses the built-in
|
|
|
844
844
|
native provider until the app bonds its own.
|
|
845
845
|
|
|
846
846
|
```typescript
|
|
847
|
-
interface UseFormOptions<T extends
|
|
847
|
+
interface UseFormOptions<T extends FormValuesConstraint<T>> extends FormOptions<T> {
|
|
848
848
|
/**
|
|
849
849
|
* Explicit form factory for this one form. Defaults to the bonded forms
|
|
850
850
|
* provider; pass it only to pin a specific provider instance.
|
|
@@ -858,7 +858,7 @@ interface UseFormOptions<T extends Record<string, unknown>> extends FormOptions<
|
|
|
858
858
|
Result of useForm hook.
|
|
859
859
|
|
|
860
860
|
```typescript
|
|
861
|
-
interface UseFormResult<T extends
|
|
861
|
+
interface UseFormResult<T extends FormValuesConstraint<T>> {
|
|
862
862
|
// State
|
|
863
863
|
formState: FormState<T>
|
|
864
864
|
isValid: boolean
|
|
@@ -1010,8 +1010,11 @@ interface UsePlatformResult {
|
|
|
1010
1010
|
|
|
1011
1011
|
Configuration for a profile form; transport stays in the auth bond.
|
|
1012
1012
|
|
|
1013
|
+
`TValues` is the page's own controlled-values type, named once as an
|
|
1014
|
+
`interface` or a type alias — both satisfy the shared form-values constraint.
|
|
1015
|
+
|
|
1013
1016
|
```typescript
|
|
1014
|
-
interface UseProfileFormOptions<TUser, TValues extends
|
|
1017
|
+
interface UseProfileFormOptions<TUser, TValues extends FormValuesConstraint<TValues>> extends Omit<
|
|
1015
1018
|
UseFormOptions<TValues>,
|
|
1016
1019
|
'defaultValues'
|
|
1017
1020
|
> {
|
|
@@ -1046,7 +1049,7 @@ interface UseProfileFormOptions<TUser, TValues extends Record<string, unknown>>
|
|
|
1046
1049
|
Controlled profile form state and native form bindings.
|
|
1047
1050
|
|
|
1048
1051
|
```typescript
|
|
1049
|
-
interface UseProfileFormResult<TUser, TValues extends
|
|
1052
|
+
interface UseProfileFormResult<TUser, TValues extends FormValuesConstraint<TValues>> extends Omit<
|
|
1050
1053
|
UseFormResult<TValues>,
|
|
1051
1054
|
'register' | 'handleSubmit' | 'reset'
|
|
1052
1055
|
> {
|
|
@@ -2175,7 +2178,9 @@ wires a form library once (`setProvider` from `@molecule/app-forms`) and
|
|
|
2175
2178
|
every form picks it up. Passing `createForm` overrides that for one form.
|
|
2176
2179
|
|
|
2177
2180
|
```typescript
|
|
2178
|
-
function useForm<T extends Record<string, unknown>>(
|
|
2181
|
+
function useForm<T extends FormValuesConstraint<T> = Record<string, unknown>>(
|
|
2182
|
+
options?: UseFormOptions<T>,
|
|
2183
|
+
): UseFormResult<T>
|
|
2179
2184
|
```
|
|
2180
2185
|
|
|
2181
2186
|
- `options` — Form options. `defaultValues`, `mode` and the form-level `validate` are forwarded to the provider; omit the options entirely for a form whose fields are registered with their own defaults.
|
|
@@ -2187,7 +2192,7 @@ function useForm<T extends Record<string, unknown>>(options?: UseFormOptions<T>)
|
|
|
2187
2192
|
Hook to watch a specific field value.
|
|
2188
2193
|
|
|
2189
2194
|
```typescript
|
|
2190
|
-
function useWatch<T extends
|
|
2195
|
+
function useWatch<T extends FormValuesConstraint<T>, K extends keyof T>(
|
|
2191
2196
|
form: FormController<T>,
|
|
2192
2197
|
name: K,
|
|
2193
2198
|
): T[K]
|
|
@@ -2203,7 +2208,7 @@ function useWatch<T extends Record<string, unknown>, K extends keyof T>(
|
|
|
2203
2208
|
Hook to get field-level state.
|
|
2204
2209
|
|
|
2205
2210
|
```typescript
|
|
2206
|
-
function useFieldState<T extends
|
|
2211
|
+
function useFieldState<T extends FormValuesConstraint<T>>(
|
|
2207
2212
|
form: FormController<T>,
|
|
2208
2213
|
name: keyof T,
|
|
2209
2214
|
): FieldState<T[keyof T]>
|
|
@@ -2466,7 +2471,7 @@ the clean baseline; edits made while saving remain dirty. No request is made
|
|
|
2466
2471
|
for a patch with no fields. A failed request retains the edits and shared user.
|
|
2467
2472
|
|
|
2468
2473
|
```typescript
|
|
2469
|
-
function useProfileForm<TUser, TValues extends
|
|
2474
|
+
function useProfileForm<TUser, TValues extends FormValuesConstraint<TValues>>(
|
|
2470
2475
|
options: UseProfileFormOptions<TUser, TValues>,
|
|
2471
2476
|
): UseProfileFormResult<TUser, TValues>
|
|
2472
2477
|
```
|
|
@@ -2479,6 +2484,17 @@ function useProfileForm<TUser, TValues extends Record<string, unknown>>(
|
|
|
2479
2484
|
|
|
2480
2485
|
Hook that wraps an async function with state tracking.
|
|
2481
2486
|
|
|
2487
|
+
For one UI action, pass `state.status === 'pending'` to `Button loading`
|
|
2488
|
+
from `@molecule/app-ui-react` (or to a native control's `disabled` prop).
|
|
2489
|
+
The control then refuses input while the request is pending and re-enables
|
|
2490
|
+
when the tracked call settles. Handle the returned promise's rejection;
|
|
2491
|
+
the hook also records the failure in `state.error`.
|
|
2492
|
+
|
|
2493
|
+
This hook tracks the latest call: it does not serialize invocations or
|
|
2494
|
+
cancel their network requests. An explicit reset/cancel changes the tracked
|
|
2495
|
+
state, so it is not proof that an outstanding request has stopped. Use an
|
|
2496
|
+
app-owned queue when every click must be accepted in order.
|
|
2497
|
+
|
|
2482
2498
|
```typescript
|
|
2483
2499
|
function usePromise<T extends (...args: any[]) => Promise<any>>(
|
|
2484
2500
|
asyncFn: T,
|
|
@@ -3234,7 +3250,7 @@ Peer dependencies:
|
|
|
3234
3250
|
|
|
3235
3251
|
- `@molecule/app-auth` ^3.0.0
|
|
3236
3252
|
- `@molecule/app-ai-models` ^1.0.1
|
|
3237
|
-
- `@molecule/app-forms` ^
|
|
3253
|
+
- `@molecule/app-forms` ^2.0.0
|
|
3238
3254
|
- `@molecule/app-utilities` ^1.0.1
|
|
3239
3255
|
- `@molecule/app-http` ^1.0.1
|
|
3240
3256
|
- `@molecule/app-i18n` ^1.0.1
|
package/dist/hooks/useForm.d.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import type { FieldRegistration, FieldState, FormController, FormOptions, FormState, RegisterOptions } from '@molecule/app-forms';
|
|
6
|
+
import type { FieldRegistration, FieldState, FormController, FormOptions, FormState, FormValuesConstraint, RegisterOptions } from '@molecule/app-forms';
|
|
7
7
|
/**
|
|
8
8
|
* Options for useForm hook.
|
|
9
9
|
*
|
|
@@ -12,7 +12,7 @@ import type { FieldRegistration, FieldState, FormController, FormOptions, FormSt
|
|
|
12
12
|
* provider (`createForm` from `@molecule/app-forms`), which uses the built-in
|
|
13
13
|
* native provider until the app bonds its own.
|
|
14
14
|
*/
|
|
15
|
-
export interface UseFormOptions<T extends
|
|
15
|
+
export interface UseFormOptions<T extends FormValuesConstraint<T>> extends FormOptions<T> {
|
|
16
16
|
/**
|
|
17
17
|
* Explicit form factory for this one form. Defaults to the bonded forms
|
|
18
18
|
* provider; pass it only to pin a specific provider instance.
|
|
@@ -22,7 +22,7 @@ export interface UseFormOptions<T extends Record<string, unknown>> extends FormO
|
|
|
22
22
|
/**
|
|
23
23
|
* Result of useForm hook.
|
|
24
24
|
*/
|
|
25
|
-
export interface UseFormResult<T extends
|
|
25
|
+
export interface UseFormResult<T extends FormValuesConstraint<T>> {
|
|
26
26
|
formState: FormState<T>;
|
|
27
27
|
isValid: boolean;
|
|
28
28
|
isDirty: boolean;
|
|
@@ -80,7 +80,7 @@ export interface UseFormResult<T extends Record<string, unknown>> {
|
|
|
80
80
|
* }
|
|
81
81
|
* ```
|
|
82
82
|
*/
|
|
83
|
-
export declare function useForm<T extends Record<string, unknown>>(options?: UseFormOptions<T>): UseFormResult<T>;
|
|
83
|
+
export declare function useForm<T extends FormValuesConstraint<T> = Record<string, unknown>>(options?: UseFormOptions<T>): UseFormResult<T>;
|
|
84
84
|
/**
|
|
85
85
|
* Hook to watch a specific field value.
|
|
86
86
|
*
|
|
@@ -88,7 +88,7 @@ export declare function useForm<T extends Record<string, unknown>>(options?: Use
|
|
|
88
88
|
* @param name - Field name to watch
|
|
89
89
|
* @returns Current field value
|
|
90
90
|
*/
|
|
91
|
-
export declare function useWatch<T extends
|
|
91
|
+
export declare function useWatch<T extends FormValuesConstraint<T>, K extends keyof T>(form: FormController<T>, name: K): T[K];
|
|
92
92
|
/**
|
|
93
93
|
* Hook to get field-level state.
|
|
94
94
|
*
|
|
@@ -96,5 +96,5 @@ export declare function useWatch<T extends Record<string, unknown>, K extends ke
|
|
|
96
96
|
* @param name - Field name
|
|
97
97
|
* @returns Field state (value, error, touched, dirty, valid)
|
|
98
98
|
*/
|
|
99
|
-
export declare function useFieldState<T extends
|
|
99
|
+
export declare function useFieldState<T extends FormValuesConstraint<T>>(form: FormController<T>, name: keyof T): FieldState<T[keyof T]>;
|
|
100
100
|
//# sourceMappingURL=useForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../src/hooks/useForm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,WAAW,EACX,SAAS,EACT,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAmC5B;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,
|
|
1
|
+
{"version":3,"file":"useForm.d.ts","sourceRoot":"","sources":["../../src/hooks/useForm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EACV,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,WAAW,EACX,SAAS,EACT,oBAAoB,EACpB,eAAe,EAChB,MAAM,qBAAqB,CAAA;AAmC5B;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc,CAAC,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC,CAAE,SAAQ,WAAW,CAAC,CAAC,CAAC;IACvF;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,CAAA;CAC5D;AAED;;GAEG;AACH,MAAM,WAAW,aAAa,CAAC,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC;IAE9D,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,YAAY,EAAE,OAAO,CAAA;IAGrB,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,CAAC,EACb,OAAO,CAAC,EAAE,IAAI,CAAC,eAAe,EAAE,MAAM,CAAC,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,KACxD,iBAAiB,CAAA;IACtB,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;IAC9C,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IAC3D,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,MAAM,GAAG,SAAS,CAAA;IAC/C,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAA;IAC5D,WAAW,EAAE,MAAM,IAAI,CAAA;IAGvB,YAAY,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAA;IAClG,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,IAAI,CAAA;IACpC,QAAQ,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;CACjC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AACH,wBAAgB,OAAO,CAAC,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjF,OAAO,GAAE,cAAc,CAAC,CAAC,CAAM,GAC9B,aAAa,CAAC,CAAC,CAAC,CAwElB;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EAC3E,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,CAAC,GACN,CAAC,CAAC,CAAC,CAAC,CAGN;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,CAAC,SAAS,oBAAoB,CAAC,CAAC,CAAC,EAC7D,IAAI,EAAE,cAAc,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,MAAM,CAAC,GACZ,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAGxB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useForm.js","sourceRoot":"","sources":["../../src/hooks/useForm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAA;
|
|
1
|
+
{"version":3,"file":"useForm.js","sourceRoot":"","sources":["../../src/hooks/useForm.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,15 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module
|
|
5
5
|
*/
|
|
6
|
-
import type { FieldRegistration } from '@molecule/app-forms';
|
|
6
|
+
import type { FieldRegistration, FormValuesConstraint } from '@molecule/app-forms';
|
|
7
7
|
import { type UseFormOptions, type UseFormResult } from './useForm.js';
|
|
8
|
-
/**
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Configuration for a profile form; transport stays in the auth bond.
|
|
10
|
+
*
|
|
11
|
+
* `TValues` is the page's own controlled-values type, named once as an
|
|
12
|
+
* `interface` or a type alias — both satisfy the shared form-values constraint.
|
|
13
|
+
*/
|
|
14
|
+
export interface UseProfileFormOptions<TUser, TValues extends FormValuesConstraint<TValues>> extends Omit<UseFormOptions<TValues>, 'defaultValues'> {
|
|
10
15
|
/** Complete controlled-field defaults, including blank write-only fields. */
|
|
11
16
|
defaultValues: TValues;
|
|
12
17
|
/**
|
|
@@ -32,7 +37,7 @@ export interface UseProfileFormOptions<TUser, TValues extends Record<string, unk
|
|
|
32
37
|
onSaved?: (user: TUser) => void | Promise<void>;
|
|
33
38
|
}
|
|
34
39
|
/** Controlled profile form state and native form bindings. */
|
|
35
|
-
export interface UseProfileFormResult<TUser, TValues extends
|
|
40
|
+
export interface UseProfileFormResult<TUser, TValues extends FormValuesConstraint<TValues>> extends Omit<UseFormResult<TValues>, 'register' | 'handleSubmit' | 'reset'> {
|
|
36
41
|
/** The shared auth user's current profile. */
|
|
37
42
|
user: TUser | null;
|
|
38
43
|
/** A user has been loaded; disable submission until this is true. */
|
|
@@ -73,5 +78,5 @@ export interface UseProfileFormResult<TUser, TValues extends Record<string, unkn
|
|
|
73
78
|
* @param options - Controlled defaults, identity and wire adapters, optional cache/navigation callback.
|
|
74
79
|
* @returns Form state, typed control bindings, native submit binding and save error.
|
|
75
80
|
*/
|
|
76
|
-
export declare function useProfileForm<TUser, TValues extends
|
|
81
|
+
export declare function useProfileForm<TUser, TValues extends FormValuesConstraint<TValues>>(options: UseProfileFormOptions<TUser, TValues>): UseProfileFormResult<TUser, TValues>;
|
|
77
82
|
//# sourceMappingURL=useProfileForm.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProfileForm.d.ts","sourceRoot":"","sources":["../../src/hooks/useProfileForm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"useProfileForm.d.ts","sourceRoot":"","sources":["../../src/hooks/useProfileForm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAGlF,OAAO,EAAW,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAA;AAgB/E;;;;;GAKG;AACH,MAAM,WAAW,qBAAqB,CACpC,KAAK,EACL,OAAO,SAAS,oBAAoB,CAAC,OAAO,CAAC,CAC7C,SAAQ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,EAAE,eAAe,CAAC;IACtD,6EAA6E;IAC7E,aAAa,EAAE,OAAO,CAAA;IACtB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,MAAM,CAAA;IACrC,oFAAoF;IACpF,QAAQ,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAA;IAClC;;;;OAIG;IACH,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,OAAO,CAAC,KAAK,CAAC,CAAA;IACjF;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAChD;AAED,8DAA8D;AAC9D,MAAM,WAAW,oBAAoB,CACnC,KAAK,EACL,OAAO,SAAS,oBAAoB,CAAC,OAAO,CAAC,CAC7C,SAAQ,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,UAAU,GAAG,cAAc,GAAG,OAAO,CAAC;IAC3E,8CAA8C;IAC9C,IAAI,EAAE,KAAK,GAAG,IAAI,CAAA;IAClB,qEAAqE;IACrE,KAAK,EAAE,OAAO,CAAA;IACd;;;OAGG;IACH,KAAK,EAAE,OAAO,CAAA;IACd,2EAA2E;IAC3E,QAAQ,EAAE,CAAC,CAAC,SAAS,MAAM,OAAO,EAChC,IAAI,EAAE,CAAC,EACP,OAAO,CAAC,EAAE,UAAU,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,KACxD,IAAI,CAAC,iBAAiB,EAAE,OAAO,CAAC,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;KAAE,CAAA;IAC7D,sEAAsE;IACtE,SAAS,EAAE;QAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,SAAS,CAAC,eAAe,CAAC,KAAK,IAAI,CAAA;KAAE,CAAA;IAC1E;;;OAGG;IACH,MAAM,EAAE,MAAM,OAAO,CAAC,KAAK,GAAG,SAAS,CAAC,CAAA;IACxC,4EAA4E;IAC5E,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,SAAS,oBAAoB,CAAC,OAAO,CAAC,EACjF,OAAO,EAAE,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,GAC7C,oBAAoB,CAAC,KAAK,EAAE,OAAO,CAAC,CAsMtC"}
|
|
@@ -6,6 +6,19 @@
|
|
|
6
6
|
import { useCallback, useInsertionEffect, useLayoutEffect, useRef, useState } from 'react';
|
|
7
7
|
import { useAuth, useAuthClient } from './useAuth.js';
|
|
8
8
|
import { useForm } from './useForm.js';
|
|
9
|
+
/**
|
|
10
|
+
* Copies the shallow value snapshot the hook keeps as its baseline.
|
|
11
|
+
*
|
|
12
|
+
* Form values are a plain string-keyed object at runtime; the caller's values
|
|
13
|
+
* TYPE may be an `interface`, which has no index signature to spread from, so
|
|
14
|
+
* the copy goes through the record view and comes back as `TValues`.
|
|
15
|
+
*
|
|
16
|
+
* @param values - The values object to snapshot.
|
|
17
|
+
* @returns A new object with the same own fields.
|
|
18
|
+
*/
|
|
19
|
+
function copyValues(values) {
|
|
20
|
+
return { ...values };
|
|
21
|
+
}
|
|
9
22
|
/**
|
|
10
23
|
* Owns load → edit → submit → publish for the signed-in user's profile.
|
|
11
24
|
*
|
|
@@ -30,7 +43,7 @@ export function useProfileForm(options) {
|
|
|
30
43
|
const [isSaving, setIsSaving] = useState(false);
|
|
31
44
|
const optionsRef = useRef(options);
|
|
32
45
|
const committedClient = useRef(client);
|
|
33
|
-
const baseline = useRef(
|
|
46
|
+
const baseline = useRef(copyValues(defaultValues));
|
|
34
47
|
const owner = useRef(null);
|
|
35
48
|
const activeSave = useRef(null);
|
|
36
49
|
const pendingPropagation = useRef(undefined);
|
|
@@ -47,14 +60,14 @@ export function useProfileForm(options) {
|
|
|
47
60
|
};
|
|
48
61
|
}, []);
|
|
49
62
|
const readValues = useCallback(() => {
|
|
50
|
-
const values =
|
|
63
|
+
const values = copyValues(baseline.current);
|
|
51
64
|
for (const key of Object.keys(values))
|
|
52
65
|
values[key] = form.getValue(key);
|
|
53
66
|
return values;
|
|
54
67
|
}, [form.getValue]);
|
|
55
68
|
const rebase = useCallback((next, preserveAgainst) => {
|
|
56
69
|
const current = readValues();
|
|
57
|
-
baseline.current =
|
|
70
|
+
baseline.current = copyValues(next);
|
|
58
71
|
form.reset(next);
|
|
59
72
|
if (preserveAgainst) {
|
|
60
73
|
for (const key of Object.keys(current)) {
|
|
@@ -69,7 +82,7 @@ export function useProfileForm(options) {
|
|
|
69
82
|
if (owner.current) {
|
|
70
83
|
owner.current = null;
|
|
71
84
|
pendingPropagation.current = undefined;
|
|
72
|
-
rebase(
|
|
85
|
+
rebase(copyValues(config.defaultValues));
|
|
73
86
|
setError(undefined);
|
|
74
87
|
}
|
|
75
88
|
return;
|
|
@@ -115,7 +128,7 @@ export function useProfileForm(options) {
|
|
|
115
128
|
config.getIdentity?.(current) === identity);
|
|
116
129
|
};
|
|
117
130
|
const snapshot = readValues();
|
|
118
|
-
const before =
|
|
131
|
+
const before = copyValues(baseline.current);
|
|
119
132
|
const changes = {};
|
|
120
133
|
for (const key of Object.keys(snapshot)) {
|
|
121
134
|
if (!Object.is(snapshot[key], before[key]))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProfileForm.js","sourceRoot":"","sources":["../../src/hooks/useProfileForm.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAI1F,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,OAAO,EAA2C,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"useProfileForm.js","sourceRoot":"","sources":["../../src/hooks/useProfileForm.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,17 @@ export interface UsePromiseState<T> {
|
|
|
17
17
|
/**
|
|
18
18
|
* Hook that wraps an async function with state tracking.
|
|
19
19
|
*
|
|
20
|
+
* For one UI action, pass `state.status === 'pending'` to `Button loading`
|
|
21
|
+
* from `@molecule/app-ui-react` (or to a native control's `disabled` prop).
|
|
22
|
+
* The control then refuses input while the request is pending and re-enables
|
|
23
|
+
* when the tracked call settles. Handle the returned promise's rejection;
|
|
24
|
+
* the hook also records the failure in `state.error`.
|
|
25
|
+
*
|
|
26
|
+
* This hook tracks the latest call: it does not serialize invocations or
|
|
27
|
+
* cancel their network requests. An explicit reset/cancel changes the tracked
|
|
28
|
+
* state, so it is not proof that an outstanding request has stopped. Use an
|
|
29
|
+
* app-owned queue when every click must be accepted in order.
|
|
30
|
+
*
|
|
20
31
|
* @param asyncFn - The async function to wrap
|
|
21
32
|
* @returns Tuple of [state, wrappedFunction]
|
|
22
33
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePromise.d.ts","sourceRoot":"","sources":["../../src/hooks/usePromise.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED
|
|
1
|
+
{"version":3,"file":"usePromise.d.ts","sourceRoot":"","sources":["../../src/hooks/usePromise.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AAE5D;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,CAAC;IAChC,MAAM,EAAE,aAAa,CAAA;IACrB,KAAK,EAAE,CAAC,GAAG,IAAI,CAAA;IACf,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;IACnB,MAAM,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAClC,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AACH,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,OAAO,CAAC,GAAG,CAAC,EACnE,SAAS,CAAC,KACT,CACD,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,EACvC,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CA+F5D,CAAA"}
|
package/dist/hooks/usePromise.js
CHANGED
|
@@ -8,6 +8,17 @@ import { useEffect, useMemo, useRef, useState } from 'react';
|
|
|
8
8
|
/**
|
|
9
9
|
* Hook that wraps an async function with state tracking.
|
|
10
10
|
*
|
|
11
|
+
* For one UI action, pass `state.status === 'pending'` to `Button loading`
|
|
12
|
+
* from `@molecule/app-ui-react` (or to a native control's `disabled` prop).
|
|
13
|
+
* The control then refuses input while the request is pending and re-enables
|
|
14
|
+
* when the tracked call settles. Handle the returned promise's rejection;
|
|
15
|
+
* the hook also records the failure in `state.error`.
|
|
16
|
+
*
|
|
17
|
+
* This hook tracks the latest call: it does not serialize invocations or
|
|
18
|
+
* cancel their network requests. An explicit reset/cancel changes the tracked
|
|
19
|
+
* state, so it is not proof that an outstanding request has stopped. Use an
|
|
20
|
+
* app-owned queue when every click must be accepted in order.
|
|
21
|
+
*
|
|
11
22
|
* @param asyncFn - The async function to wrap
|
|
12
23
|
* @returns Tuple of [state, wrappedFunction]
|
|
13
24
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePromise.js","sourceRoot":"","sources":["../../src/hooks/usePromise.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAe5D
|
|
1
|
+
{"version":3,"file":"usePromise.js","sourceRoot":"","sources":["../../src/hooks/usePromise.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@molecule/app-react",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "3.0.1",
|
|
4
4
|
"description": "React framework bindings for molecule.dev",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -25,7 +25,7 @@
|
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"@molecule/app-auth": "^3.0.0",
|
|
27
27
|
"@molecule/app-ai-models": "^1.0.1",
|
|
28
|
-
"@molecule/app-forms": "^
|
|
28
|
+
"@molecule/app-forms": "^2.0.0",
|
|
29
29
|
"@molecule/app-utilities": "^1.0.1",
|
|
30
30
|
"@molecule/app-http": "^1.0.1",
|
|
31
31
|
"@molecule/app-i18n": "^1.0.1",
|