@tanstack/solid-form 1.32.1 → 1.33.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/dist/cjs/createField.cjs +7 -7
- package/dist/cjs/createField.cjs.map +1 -1
- package/dist/cjs/createFieldGroup.cjs +1 -1
- package/dist/cjs/createFieldGroup.cjs.map +1 -1
- package/dist/cjs/createForm.cjs +7 -2
- package/dist/cjs/createForm.cjs.map +1 -1
- package/dist/cjs/createForm.d.cts +6 -0
- package/dist/cjs/createFormGroup.cjs +48 -0
- package/dist/cjs/createFormGroup.cjs.map +1 -0
- package/dist/cjs/createFormGroup.d.cts +15 -0
- package/dist/cjs/index.cjs +7 -0
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/index.d.cts +2 -1
- package/dist/esm/createField.js +8 -8
- package/dist/esm/createField.js.map +1 -1
- package/dist/esm/createFieldGroup.js +2 -2
- package/dist/esm/createFieldGroup.js.map +1 -1
- package/dist/esm/createForm.d.ts +6 -0
- package/dist/esm/createForm.js +8 -3
- package/dist/esm/createForm.js.map +1 -1
- package/dist/esm/createFormGroup.d.ts +15 -0
- package/dist/esm/createFormGroup.js +48 -0
- package/dist/esm/createFormGroup.js.map +1 -0
- package/dist/esm/index.d.ts +2 -1
- package/dist/esm/index.js +5 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/source/createField.jsx +8 -8
- package/dist/source/createField.jsx.map +1 -1
- package/dist/source/createFieldGroup.jsx +2 -2
- package/dist/source/createFieldGroup.jsx.map +1 -1
- package/dist/source/createForm.d.ts +6 -0
- package/dist/source/createForm.jsx +7 -3
- package/dist/source/createForm.jsx.map +1 -1
- package/dist/source/createFormGroup.d.ts +16 -0
- package/dist/source/createFormGroup.jsx +50 -0
- package/dist/source/createFormGroup.jsx.map +1 -0
- package/dist/source/index.d.ts +2 -1
- package/dist/source/index.jsx +2 -1
- package/dist/source/index.jsx.map +1 -1
- package/package.json +3 -3
- package/src/createField.tsx +8 -8
- package/src/createFieldGroup.tsx +2 -2
- package/src/createForm.tsx +60 -3
- package/src/createFormGroup.tsx +622 -0
- package/src/index.tsx +2 -1
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { FormGroupApi } from '@tanstack/form-core';
|
|
2
|
+
import type { DeepKeys, DeepValue, FormAsyncValidateOrFn, FormGroupApiOptions, FormGroupAsyncValidateOrFn, FormGroupOptions, FormGroupValidateOrFn, FormValidateOrFn } from '@tanstack/form-core';
|
|
3
|
+
import type { Accessor, JSX, JSXElement } from 'solid-js';
|
|
4
|
+
export declare function createFormGroup<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TParentSubmitMeta>(opts: () => FormGroupApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>): () => FormGroupApi<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>;
|
|
5
|
+
interface FormGroupComponentBoundProps<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TParentSubmitMeta, ExtendedApi = {}> extends FormGroupOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta> {
|
|
6
|
+
children: (formGroupApi: Accessor<FormGroupApi<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>> & ExtendedApi) => JSX.Element;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* A type alias representing a form group component for a specific form data type.
|
|
10
|
+
*/
|
|
11
|
+
export type FormGroupComponent<in out TParentData, in out TFormOnMount extends undefined | FormValidateOrFn<TParentData>, in out TFormOnChange extends undefined | FormValidateOrFn<TParentData>, in out TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, in out TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, in out TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, in out TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, in out TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, in out TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, in out TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, in out TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, in out TParentSubmitMeta, in out ExtendedApi = {}> = <const TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta>(props: FormGroupComponentBoundProps<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta, ExtendedApi>) => JSXElement;
|
|
12
|
+
interface FormGroupComponentProps<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TParentSubmitMeta> extends FormGroupApiOptions<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta> {
|
|
13
|
+
children: (formGroupApi: () => FormGroupApi<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>) => JSXElement;
|
|
14
|
+
}
|
|
15
|
+
export declare function FormGroup<TParentData, TName extends DeepKeys<TParentData>, TData extends DeepValue<TParentData, TName>, TOnMount extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChange extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnChangeAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnBlur extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnBlurAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnSubmit extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnSubmitAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TOnDynamic extends undefined | FormGroupValidateOrFn<TParentData, TName, TData>, TOnDynamicAsync extends undefined | FormGroupAsyncValidateOrFn<TParentData, TName, TData>, TSubmitMeta, TFormOnMount extends undefined | FormValidateOrFn<TParentData>, TFormOnChange extends undefined | FormValidateOrFn<TParentData>, TFormOnChangeAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnBlur extends undefined | FormValidateOrFn<TParentData>, TFormOnBlurAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnSubmit extends undefined | FormValidateOrFn<TParentData>, TFormOnSubmitAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnDynamic extends undefined | FormValidateOrFn<TParentData>, TFormOnDynamicAsync extends undefined | FormAsyncValidateOrFn<TParentData>, TFormOnServer extends undefined | FormAsyncValidateOrFn<TParentData>, TParentSubmitMeta>(props: FormGroupComponentProps<TParentData, TName, TData, TOnMount, TOnChange, TOnChangeAsync, TOnBlur, TOnBlurAsync, TOnSubmit, TOnSubmitAsync, TOnDynamic, TOnDynamicAsync, TSubmitMeta, TFormOnMount, TFormOnChange, TFormOnChangeAsync, TFormOnBlur, TFormOnBlurAsync, TFormOnSubmit, TFormOnSubmitAsync, TFormOnDynamic, TFormOnDynamicAsync, TFormOnServer, TParentSubmitMeta>): JSX.Element;
|
|
16
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { FormGroupApi } from '@tanstack/form-core';
|
|
2
|
+
import { createComponent, createComputed, createSignal, onCleanup, onMount, } from 'solid-js';
|
|
3
|
+
import { useSelector } from '@tanstack/solid-store';
|
|
4
|
+
// ugly way to trick solid into triggering updates for changes on the formGroupApi
|
|
5
|
+
function makeFormGroupReactive(formGroupApi) {
|
|
6
|
+
const [group, setGroup] = createSignal(formGroupApi, { equals: false });
|
|
7
|
+
// Handle shallow comparison to make sure that Derived doesn't create a new setGroup call every time
|
|
8
|
+
const store = useSelector(formGroupApi.store, (store) => store);
|
|
9
|
+
// Run before initial render
|
|
10
|
+
createComputed(() => {
|
|
11
|
+
// Use the store to track dependencies
|
|
12
|
+
store();
|
|
13
|
+
setGroup(formGroupApi);
|
|
14
|
+
});
|
|
15
|
+
return group;
|
|
16
|
+
}
|
|
17
|
+
export function createFormGroup(opts) {
|
|
18
|
+
const options = opts();
|
|
19
|
+
const api = new FormGroupApi(options);
|
|
20
|
+
let mounted = false;
|
|
21
|
+
// Instantiates form group meta and removes it when unrendered
|
|
22
|
+
onMount(() => {
|
|
23
|
+
const cleanupFn = api.mount();
|
|
24
|
+
mounted = true;
|
|
25
|
+
onCleanup(() => {
|
|
26
|
+
cleanupFn();
|
|
27
|
+
mounted = false;
|
|
28
|
+
});
|
|
29
|
+
});
|
|
30
|
+
/**
|
|
31
|
+
* formGroupApi.update should not have any side effects. Think of it like a `useRef`
|
|
32
|
+
* that we need to keep updated every render with the most up-to-date information.
|
|
33
|
+
*
|
|
34
|
+
* createComputed to make sure this effect runs before render effects
|
|
35
|
+
*/
|
|
36
|
+
createComputed(() => {
|
|
37
|
+
if (!mounted)
|
|
38
|
+
return;
|
|
39
|
+
api.update(opts());
|
|
40
|
+
});
|
|
41
|
+
return makeFormGroupReactive(api);
|
|
42
|
+
}
|
|
43
|
+
export function FormGroup(props) {
|
|
44
|
+
const formGroupApi = createFormGroup(() => {
|
|
45
|
+
const { children, ...formGroupOptions } = props;
|
|
46
|
+
return formGroupOptions;
|
|
47
|
+
});
|
|
48
|
+
return <>{createComponent(() => props.children(formGroupApi), {})}</>;
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=createFormGroup.jsx.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createFormGroup.jsx","sourceRoot":"","sources":["../../src/createFormGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,qBAAqB,CAAA;AACpE,OAAO,EACL,eAAe,EACf,cAAc,EACd,YAAY,EACZ,SAAS,EACT,OAAO,GACR,MAAM,UAAU,CAAA;AACjB,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAanD,kFAAkF;AAClF,SAAS,qBAAqB,CAwC5B,YAyBC;IA2BD,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,YAAY,CAAC,YAAY,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;IACvE,oGAAoG;IACpG,MAAM,KAAK,GAAG,WAAW,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,CAAA;IAC/D,4BAA4B;IAC5B,cAAc,CAAC,GAAG,EAAE;QAClB,sCAAsC;QACtC,KAAK,EAAE,CAAA;QACP,QAAQ,CAAC,YAAY,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;IACF,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,eAAe,CAwC7B,IAyBC;IAED,MAAM,OAAO,GAAG,IAAI,EAAE,CAAA;IAEtB,MAAM,GAAG,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAA;IAErC,IAAI,OAAO,GAAG,KAAK,CAAA;IACnB,8DAA8D;IAC9D,OAAO,CAAC,GAAG,EAAE;QACX,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,EAAE,CAAA;QAC7B,OAAO,GAAG,IAAI,CAAA;QACd,SAAS,CAAC,GAAG,EAAE;YACb,SAAS,EAAE,CAAA;YACX,OAAO,GAAG,KAAK,CAAA;QACjB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF;;;;;OAKG;IACH,cAAc,CAAC,GAAG,EAAE;QAClB,IAAI,CAAC,OAAO;YAAE,OAAM;QACpB,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACpB,CAAC,CAAC,CAAA;IAEF,OAAO,qBAAqB,CAyB1B,GAAG,CAAC,CAAA;AACR,CAAC;AAsRD,MAAM,UAAU,SAAS,CAwCvB,KAyBC;IAED,MAAM,YAAY,GAAG,eAAe,CAyBlC,GAAG,EAAE;QACL,MAAM,EAAE,QAAQ,EAAE,GAAG,gBAAgB,EAAE,GAAG,KAAK,CAAA;QAC/C,OAAO,gBAAgB,CAAA;IACzB,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAA;AACvE,CAAC"}
|
package/dist/source/index.d.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export * from '@tanstack/form-core';
|
|
2
|
-
export { useStore } from '@tanstack/solid-store';
|
|
2
|
+
export { useSelector, useStore } from '@tanstack/solid-store';
|
|
3
3
|
export * from './createField';
|
|
4
4
|
export * from './createForm';
|
|
5
5
|
export * from './createFieldGroup';
|
|
6
|
+
export * from './createFormGroup';
|
|
6
7
|
export * from './createFormHook';
|
|
7
8
|
export * from './types';
|
package/dist/source/index.jsx
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export * from '@tanstack/form-core';
|
|
2
|
-
export { useStore } from '@tanstack/solid-store';
|
|
2
|
+
export { useSelector, useStore } from '@tanstack/solid-store';
|
|
3
3
|
export * from './createField';
|
|
4
4
|
export * from './createForm';
|
|
5
5
|
export * from './createFieldGroup';
|
|
6
|
+
export * from './createFormGroup';
|
|
6
7
|
export * from './createFormHook';
|
|
7
8
|
export * from './types';
|
|
8
9
|
//# sourceMappingURL=index.jsx.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AAEnC,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.jsx","sourceRoot":"","sources":["../../src/index.tsx"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAA;AAEnC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAE7D,cAAc,eAAe,CAAA;AAC7B,cAAc,cAAc,CAAA;AAC5B,cAAc,oBAAoB,CAAA;AAClC,cAAc,mBAAmB,CAAA;AACjC,cAAc,kBAAkB,CAAA;AAChC,cAAc,SAAS,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tanstack/solid-form",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.33.1",
|
|
4
4
|
"description": "Powerful, type-safe forms for Solid.",
|
|
5
5
|
"author": "tannerlinsley",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,8 +41,8 @@
|
|
|
41
41
|
"src"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@tanstack/solid-store": "^0.
|
|
45
|
-
"@tanstack/form-core": "1.
|
|
44
|
+
"@tanstack/solid-store": "^0.11.0",
|
|
45
|
+
"@tanstack/form-core": "1.33.1"
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
48
|
"solid-js": "^1.9.9",
|
package/src/createField.tsx
CHANGED
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
onCleanup,
|
|
7
7
|
onMount,
|
|
8
8
|
} from 'solid-js'
|
|
9
|
-
import {
|
|
9
|
+
import { useSelector } from '@tanstack/solid-store'
|
|
10
10
|
import type {
|
|
11
11
|
DeepKeys,
|
|
12
12
|
DeepValue,
|
|
@@ -173,30 +173,30 @@ function makeFieldReactive<
|
|
|
173
173
|
// avoid re-renders when child properties change. Meta is tracked piece by
|
|
174
174
|
// piece so that consumers re-render when any meta property updates.
|
|
175
175
|
// See: https://github.com/TanStack/form/issues/1961
|
|
176
|
-
const reactiveStateValue =
|
|
176
|
+
const reactiveStateValue = useSelector(fieldApi.store, (state) =>
|
|
177
177
|
mode === 'array' ? state.meta._arrayVersion || 0 : state.value,
|
|
178
178
|
)
|
|
179
|
-
const reactiveMetaIsTouched =
|
|
179
|
+
const reactiveMetaIsTouched = useSelector(
|
|
180
180
|
fieldApi.store,
|
|
181
181
|
(state) => state.meta.isTouched,
|
|
182
182
|
)
|
|
183
|
-
const reactiveMetaIsBlurred =
|
|
183
|
+
const reactiveMetaIsBlurred = useSelector(
|
|
184
184
|
fieldApi.store,
|
|
185
185
|
(state) => state.meta.isBlurred,
|
|
186
186
|
)
|
|
187
|
-
const reactiveMetaIsDirty =
|
|
187
|
+
const reactiveMetaIsDirty = useSelector(
|
|
188
188
|
fieldApi.store,
|
|
189
189
|
(state) => state.meta.isDirty,
|
|
190
190
|
)
|
|
191
|
-
const reactiveMetaErrorMap =
|
|
191
|
+
const reactiveMetaErrorMap = useSelector(
|
|
192
192
|
fieldApi.store,
|
|
193
193
|
(state) => state.meta.errorMap,
|
|
194
194
|
)
|
|
195
|
-
const reactiveMetaErrorSourceMap =
|
|
195
|
+
const reactiveMetaErrorSourceMap = useSelector(
|
|
196
196
|
fieldApi.store,
|
|
197
197
|
(state) => state.meta.errorSourceMap,
|
|
198
198
|
)
|
|
199
|
-
const reactiveMetaIsValidating =
|
|
199
|
+
const reactiveMetaIsValidating = useSelector(
|
|
200
200
|
fieldApi.store,
|
|
201
201
|
(state) => state.meta.isValidating,
|
|
202
202
|
)
|
package/src/createFieldGroup.tsx
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { FieldGroupApi, functionalUpdate } from '@tanstack/form-core'
|
|
2
|
-
import {
|
|
2
|
+
import { useSelector } from '@tanstack/solid-store'
|
|
3
3
|
import { onCleanup, onMount } from 'solid-js'
|
|
4
4
|
import type { Component, JSX, ParentProps } from 'solid-js'
|
|
5
5
|
import type {
|
|
@@ -201,7 +201,7 @@ export function createFieldGroup<
|
|
|
201
201
|
<form.Field {...(api.getFormFieldOptions(props) as any)} />
|
|
202
202
|
)
|
|
203
203
|
extendedApi.Subscribe = (props) => {
|
|
204
|
-
const data =
|
|
204
|
+
const data = useSelector(api.store, props.selector)
|
|
205
205
|
|
|
206
206
|
return functionalUpdate(props.children, data()) as Element
|
|
207
207
|
}
|
package/src/createForm.tsx
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { FormApi, functionalUpdate } from '@tanstack/form-core'
|
|
2
2
|
import { createComputed, onMount } from 'solid-js'
|
|
3
|
-
import {
|
|
3
|
+
import { useSelector } from '@tanstack/solid-store'
|
|
4
4
|
import { Field, createField } from './createField'
|
|
5
|
+
import { FormGroup } from './createFormGroup'
|
|
5
6
|
import type {
|
|
6
7
|
FormAsyncValidateOrFn,
|
|
7
8
|
FormOptions,
|
|
@@ -10,6 +11,7 @@ import type {
|
|
|
10
11
|
} from '@tanstack/form-core'
|
|
11
12
|
import type { JSXElement } from 'solid-js'
|
|
12
13
|
import type { FieldComponent } from './createField'
|
|
14
|
+
import type { FormGroupComponent } from './createFormGroup'
|
|
13
15
|
|
|
14
16
|
export interface SolidFormApi<
|
|
15
17
|
TParentData,
|
|
@@ -39,6 +41,58 @@ export interface SolidFormApi<
|
|
|
39
41
|
TFormOnServer,
|
|
40
42
|
TSubmitMeta
|
|
41
43
|
>
|
|
44
|
+
FormGroup: FormGroupComponent<
|
|
45
|
+
TParentData,
|
|
46
|
+
TFormOnMount,
|
|
47
|
+
TFormOnChange,
|
|
48
|
+
TFormOnChangeAsync,
|
|
49
|
+
TFormOnBlur,
|
|
50
|
+
TFormOnBlurAsync,
|
|
51
|
+
TFormOnSubmit,
|
|
52
|
+
TFormOnSubmitAsync,
|
|
53
|
+
TFormOnDynamic,
|
|
54
|
+
TFormOnDynamicAsync,
|
|
55
|
+
TFormOnServer,
|
|
56
|
+
TSubmitMeta
|
|
57
|
+
>
|
|
58
|
+
useSelector: <
|
|
59
|
+
TSelected = NoInfer<
|
|
60
|
+
FormState<
|
|
61
|
+
TParentData,
|
|
62
|
+
TFormOnMount,
|
|
63
|
+
TFormOnChange,
|
|
64
|
+
TFormOnChangeAsync,
|
|
65
|
+
TFormOnBlur,
|
|
66
|
+
TFormOnBlurAsync,
|
|
67
|
+
TFormOnSubmit,
|
|
68
|
+
TFormOnSubmitAsync,
|
|
69
|
+
TFormOnDynamic,
|
|
70
|
+
TFormOnDynamicAsync,
|
|
71
|
+
TFormOnServer
|
|
72
|
+
>
|
|
73
|
+
>,
|
|
74
|
+
>(
|
|
75
|
+
selector?: (
|
|
76
|
+
state: NoInfer<
|
|
77
|
+
FormState<
|
|
78
|
+
TParentData,
|
|
79
|
+
TFormOnMount,
|
|
80
|
+
TFormOnChange,
|
|
81
|
+
TFormOnChangeAsync,
|
|
82
|
+
TFormOnBlur,
|
|
83
|
+
TFormOnBlurAsync,
|
|
84
|
+
TFormOnSubmit,
|
|
85
|
+
TFormOnSubmitAsync,
|
|
86
|
+
TFormOnDynamic,
|
|
87
|
+
TFormOnDynamicAsync,
|
|
88
|
+
TFormOnServer
|
|
89
|
+
>
|
|
90
|
+
>,
|
|
91
|
+
) => TSelected,
|
|
92
|
+
) => () => TSelected
|
|
93
|
+
/**
|
|
94
|
+
* @deprecated Use `form.useSelector` instead.
|
|
95
|
+
*/
|
|
42
96
|
useStore: <
|
|
43
97
|
TSelected = NoInfer<
|
|
44
98
|
FormState<
|
|
@@ -217,9 +271,12 @@ export function createForm<
|
|
|
217
271
|
> = api as never
|
|
218
272
|
|
|
219
273
|
extendedApi.Field = (props) => <Field {...props} form={api} />
|
|
220
|
-
extendedApi.
|
|
274
|
+
extendedApi.FormGroup = (props) => <FormGroup {...props} form={api} />
|
|
275
|
+
extendedApi.useSelector = (selector) => useSelector(api.store, selector)
|
|
276
|
+
/** @deprecated Use `form.useSelector` instead. */
|
|
277
|
+
extendedApi.useStore = extendedApi.useSelector
|
|
221
278
|
extendedApi.Subscribe = (props) =>
|
|
222
|
-
functionalUpdate(props.children,
|
|
279
|
+
functionalUpdate(props.children, useSelector(api.store, props.selector))
|
|
223
280
|
|
|
224
281
|
onMount(api.mount)
|
|
225
282
|
|