@conform-to/react 0.9.1 → 1.0.0-pre.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/context.d.ts +64 -0
- package/context.js +196 -0
- package/context.mjs +183 -0
- package/helpers.d.ts +206 -50
- package/helpers.js +206 -101
- package/helpers.mjs +199 -85
- package/hooks.d.ts +33 -199
- package/hooks.js +83 -715
- package/hooks.mjs +81 -710
- package/index.d.ts +6 -3
- package/index.js +22 -15
- package/index.mjs +6 -4
- package/integrations.d.ts +18 -0
- package/integrations.js +161 -0
- package/integrations.mjs +155 -0
- package/package.json +3 -3
- package/validitystate.d.ts +12 -0
- package/validitystate.js +38 -0
- package/validitystate.mjs +34 -0
package/context.d.ts
ADDED
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { type Constraint, type FormId, type FieldName, type Form, type FormValue, type FormState, type SubscriptionScope, type SubscriptionSubject, type UnionKeyof, type UnionKeyType } from '@conform-to/dom';
|
|
2
|
+
import { type ReactElement, type ReactNode, type MutableRefObject } from 'react';
|
|
3
|
+
export type Pretty<T> = {
|
|
4
|
+
[K in keyof T]: T[K];
|
|
5
|
+
} & {};
|
|
6
|
+
export type Primitive = string | number | boolean | Date | File | null | undefined;
|
|
7
|
+
export type FieldProps<FieldSchema, Error = unknown, FormSchema extends Record<string, unknown> = Record<string, unknown>> = {
|
|
8
|
+
formId: FormId<FormSchema, Error>;
|
|
9
|
+
name: FieldName<FieldSchema>;
|
|
10
|
+
} | {
|
|
11
|
+
formId: FieldSchema extends Record<string, unknown> ? FormId<FieldSchema, Error> : never;
|
|
12
|
+
name?: undefined;
|
|
13
|
+
};
|
|
14
|
+
export type Metadata<Schema, Error> = {
|
|
15
|
+
key?: string;
|
|
16
|
+
id: string;
|
|
17
|
+
errorId: string;
|
|
18
|
+
descriptionId: string;
|
|
19
|
+
initialValue: FormValue<Schema>;
|
|
20
|
+
value: FormValue<Schema>;
|
|
21
|
+
error: Error | undefined;
|
|
22
|
+
allError: Record<string, Error>;
|
|
23
|
+
allValid: boolean;
|
|
24
|
+
valid: boolean;
|
|
25
|
+
dirty: boolean;
|
|
26
|
+
};
|
|
27
|
+
export type FormMetadata<Schema extends Record<string, unknown> = Record<string, unknown>, Error = unknown> = Omit<Metadata<Schema, Error>, 'id'> & {
|
|
28
|
+
id: FormId<Schema, Error>;
|
|
29
|
+
context: Form<Schema, Error>;
|
|
30
|
+
getFieldset: () => {
|
|
31
|
+
[Key in UnionKeyof<Schema>]: FieldMetadata<UnionKeyType<Schema, Key>, Error, Schema>;
|
|
32
|
+
};
|
|
33
|
+
onSubmit: (event: React.FormEvent<HTMLFormElement>) => ReturnType<Form<Schema>['submit']>;
|
|
34
|
+
onReset: (event: React.FormEvent<HTMLFormElement>) => void;
|
|
35
|
+
noValidate: boolean;
|
|
36
|
+
};
|
|
37
|
+
export type FieldMetadata<Schema = unknown, Error = unknown, FormSchema extends Record<string, any> = Record<string, unknown>> = Metadata<Schema, Error> & {
|
|
38
|
+
formId: FormId<FormSchema, Error>;
|
|
39
|
+
name: FieldName<Schema>;
|
|
40
|
+
constraint?: Constraint;
|
|
41
|
+
getFieldset: unknown extends Schema ? () => unknown : Schema extends Primitive | Array<any> ? never : () => {
|
|
42
|
+
[Key in UnionKeyof<Schema>]: FieldMetadata<UnionKeyType<Schema, Key>, Error>;
|
|
43
|
+
};
|
|
44
|
+
getFieldList: unknown extends Schema ? () => unknown : Schema extends Array<infer Item> ? () => Array<FieldMetadata<Item, Error>> : never;
|
|
45
|
+
};
|
|
46
|
+
export declare const Registry: import("react").Context<Record<string, Form>>;
|
|
47
|
+
export declare function useRegistry<Schema extends Record<string, any>, Error, Value = Schema>(formId: FormId<Schema, Error>, context?: Form<Schema, Error, Value>): Form<Schema, Error, Value>;
|
|
48
|
+
export declare function useFormState<Error>(form: Form<any, Error>, subjectRef?: MutableRefObject<SubscriptionSubject>): FormState<Error>;
|
|
49
|
+
export declare function FormProvider(props: {
|
|
50
|
+
context: Form<any, any, any>;
|
|
51
|
+
children: ReactNode;
|
|
52
|
+
}): ReactElement;
|
|
53
|
+
export declare function FormStateInput(props: {
|
|
54
|
+
formId: string;
|
|
55
|
+
context?: undefined;
|
|
56
|
+
} | {
|
|
57
|
+
formId?: undefined;
|
|
58
|
+
context: Form;
|
|
59
|
+
}): React.ReactElement;
|
|
60
|
+
export declare function useSubjectRef(initialSubject?: SubscriptionSubject): MutableRefObject<SubscriptionSubject>;
|
|
61
|
+
export declare function updateSubjectRef(ref: MutableRefObject<SubscriptionSubject>, name: string, subject: keyof SubscriptionSubject, scope: keyof SubscriptionScope): void;
|
|
62
|
+
export declare function getMetadata<Schema, Error, FormSchema extends Record<string, any>>(formId: FormId<FormSchema, Error>, state: FormState<Error>, subjectRef: MutableRefObject<SubscriptionSubject>, name?: FieldName<Schema>): Metadata<Schema, Error>;
|
|
63
|
+
export declare function getFieldMetadata<Schema, Error, FormSchema extends Record<string, any>>(formId: FormId<FormSchema, Error>, state: FormState<Error>, subjectRef: MutableRefObject<SubscriptionSubject>, prefix?: string, key?: string | number): FieldMetadata<Schema, Error, FormSchema>;
|
|
64
|
+
export declare function getFormMetadata<Schema extends Record<string, any>, Error>(formId: FormId<Schema, Error>, state: FormState<Error>, subjectRef: MutableRefObject<SubscriptionSubject>, form: Form<Schema, Error, any>, noValidate: boolean): FormMetadata<Schema, Error>;
|
package/context.js
ADDED
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var _rollupPluginBabelHelpers = require('./_virtual/_rollupPluginBabelHelpers.js');
|
|
6
|
+
var dom = require('@conform-to/dom');
|
|
7
|
+
var react = require('react');
|
|
8
|
+
var jsxRuntime = require('react/jsx-runtime');
|
|
9
|
+
|
|
10
|
+
var Registry = /*#__PURE__*/react.createContext({});
|
|
11
|
+
function useRegistry(formId, context) {
|
|
12
|
+
var registry = react.useContext(Registry);
|
|
13
|
+
var form = context !== null && context !== void 0 ? context : registry[formId];
|
|
14
|
+
if (!form) {
|
|
15
|
+
throw new Error('Form context is not available');
|
|
16
|
+
}
|
|
17
|
+
return form;
|
|
18
|
+
}
|
|
19
|
+
function useFormState(form, subjectRef) {
|
|
20
|
+
var subscribe = react.useCallback(callback => form.subscribe(callback, () => subjectRef === null || subjectRef === void 0 ? void 0 : subjectRef.current), [form, subjectRef]);
|
|
21
|
+
return react.useSyncExternalStore(subscribe, form.getState, form.getState);
|
|
22
|
+
}
|
|
23
|
+
function FormProvider(props) {
|
|
24
|
+
var registry = react.useContext(Registry);
|
|
25
|
+
var value = react.useMemo(() => _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, registry), {}, {
|
|
26
|
+
[props.context.id]: props.context
|
|
27
|
+
}), [registry, props.context]);
|
|
28
|
+
return /*#__PURE__*/jsxRuntime.jsx(Registry.Provider, {
|
|
29
|
+
value: value,
|
|
30
|
+
children: props.children
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function FormStateInput(props) {
|
|
34
|
+
var _props$formId;
|
|
35
|
+
var form = useRegistry((_props$formId = props.formId) !== null && _props$formId !== void 0 ? _props$formId : props.context.id, props.context);
|
|
36
|
+
return /*#__PURE__*/jsxRuntime.jsx("input", {
|
|
37
|
+
type: "hidden",
|
|
38
|
+
name: dom.STATE,
|
|
39
|
+
value: form.getSerializedState(),
|
|
40
|
+
form: props.formId
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
function useSubjectRef() {
|
|
44
|
+
var initialSubject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
45
|
+
var subjectRef = react.useRef(initialSubject);
|
|
46
|
+
|
|
47
|
+
// Reset the subject everytime the component is rerendered
|
|
48
|
+
// This let us subscribe to data used in the last render only
|
|
49
|
+
subjectRef.current = initialSubject;
|
|
50
|
+
return subjectRef;
|
|
51
|
+
}
|
|
52
|
+
function updateSubjectRef(ref, name, subject, scope) {
|
|
53
|
+
var _ref$current$subject$, _ref$current$subject;
|
|
54
|
+
ref.current[subject] = _rollupPluginBabelHelpers.objectSpread2(_rollupPluginBabelHelpers.objectSpread2({}, ref.current[subject]), {}, {
|
|
55
|
+
[scope]: ((_ref$current$subject$ = (_ref$current$subject = ref.current[subject]) === null || _ref$current$subject === void 0 ? void 0 : _ref$current$subject[scope]) !== null && _ref$current$subject$ !== void 0 ? _ref$current$subject$ : []).concat(name)
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function getMetadata(formId, state, subjectRef) {
|
|
59
|
+
var name = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
|
|
60
|
+
var id = name ? "".concat(formId, "-").concat(name) : formId;
|
|
61
|
+
return new Proxy({
|
|
62
|
+
id,
|
|
63
|
+
errorId: "".concat(id, "-error"),
|
|
64
|
+
descriptionId: "".concat(id, "-description"),
|
|
65
|
+
initialValue: state.initialValue[name],
|
|
66
|
+
value: state.value[name],
|
|
67
|
+
error: state.error[name],
|
|
68
|
+
get key() {
|
|
69
|
+
return state.key[name];
|
|
70
|
+
},
|
|
71
|
+
get valid() {
|
|
72
|
+
return state.valid[name];
|
|
73
|
+
},
|
|
74
|
+
get dirty() {
|
|
75
|
+
return state.dirty[name];
|
|
76
|
+
},
|
|
77
|
+
get allValid() {
|
|
78
|
+
var keys = Object.keys(state.error);
|
|
79
|
+
if (name === '') {
|
|
80
|
+
return keys.length === 0;
|
|
81
|
+
}
|
|
82
|
+
for (var key of Object.keys(state.error)) {
|
|
83
|
+
if (dom.isPrefix(key, name) && !state.valid[key]) {
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
},
|
|
89
|
+
get allError() {
|
|
90
|
+
if (name === '') {
|
|
91
|
+
return state.error;
|
|
92
|
+
}
|
|
93
|
+
var result = {};
|
|
94
|
+
for (var [key, error] of Object.entries(state.error)) {
|
|
95
|
+
if (dom.isPrefix(key, name)) {
|
|
96
|
+
result[key] = error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return result;
|
|
100
|
+
},
|
|
101
|
+
get getFieldset() {
|
|
102
|
+
return () => new Proxy({}, {
|
|
103
|
+
get(target, key, receiver) {
|
|
104
|
+
if (typeof key === 'string') {
|
|
105
|
+
return getFieldMetadata(formId, state, subjectRef, name, key);
|
|
106
|
+
}
|
|
107
|
+
return Reflect.get(target, key, receiver);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
}, {
|
|
112
|
+
get(target, key, receiver) {
|
|
113
|
+
switch (key) {
|
|
114
|
+
case 'key':
|
|
115
|
+
case 'error':
|
|
116
|
+
case 'initialValue':
|
|
117
|
+
case 'value':
|
|
118
|
+
case 'valid':
|
|
119
|
+
case 'dirty':
|
|
120
|
+
updateSubjectRef(subjectRef, name, key, 'name');
|
|
121
|
+
break;
|
|
122
|
+
case 'allError':
|
|
123
|
+
updateSubjectRef(subjectRef, name, 'error', 'prefix');
|
|
124
|
+
break;
|
|
125
|
+
case 'allValid':
|
|
126
|
+
updateSubjectRef(subjectRef, name, 'valid', 'prefix');
|
|
127
|
+
break;
|
|
128
|
+
}
|
|
129
|
+
return Reflect.get(target, key, receiver);
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
function getFieldMetadata(formId, state, subjectRef) {
|
|
134
|
+
var prefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
|
|
135
|
+
var key = arguments.length > 4 ? arguments[4] : undefined;
|
|
136
|
+
var name = typeof key === 'undefined' ? prefix : dom.formatPaths([...dom.getPaths(prefix), key]);
|
|
137
|
+
var metadata = getMetadata(formId, state, subjectRef, name);
|
|
138
|
+
return new Proxy(metadata, {
|
|
139
|
+
get(target, key, receiver) {
|
|
140
|
+
switch (key) {
|
|
141
|
+
case 'formId':
|
|
142
|
+
return formId;
|
|
143
|
+
case 'name':
|
|
144
|
+
return name;
|
|
145
|
+
case 'constraint':
|
|
146
|
+
return state.constraint[name];
|
|
147
|
+
case 'getFieldList':
|
|
148
|
+
{
|
|
149
|
+
return () => {
|
|
150
|
+
var _state$initialValue$n;
|
|
151
|
+
var initialValue = (_state$initialValue$n = state.initialValue[name]) !== null && _state$initialValue$n !== void 0 ? _state$initialValue$n : [];
|
|
152
|
+
updateSubjectRef(subjectRef, name, 'initialValue', 'name');
|
|
153
|
+
if (!Array.isArray(initialValue)) {
|
|
154
|
+
throw new Error('The initial value at the given name is not a list');
|
|
155
|
+
}
|
|
156
|
+
return Array(initialValue.length).fill(0).map((_, index) => getFieldMetadata(formId, state, subjectRef, name, index));
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
return Reflect.get(target, key, receiver);
|
|
161
|
+
}
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
function getFormMetadata(formId, state, subjectRef, form, noValidate) {
|
|
165
|
+
var metadata = getMetadata(formId, state, subjectRef);
|
|
166
|
+
return new Proxy(metadata, {
|
|
167
|
+
get(target, key, receiver) {
|
|
168
|
+
switch (key) {
|
|
169
|
+
case 'context':
|
|
170
|
+
return form;
|
|
171
|
+
case 'onSubmit':
|
|
172
|
+
return event => {
|
|
173
|
+
var submitEvent = event.nativeEvent;
|
|
174
|
+
form.submit(submitEvent);
|
|
175
|
+
if (submitEvent.defaultPrevented) {
|
|
176
|
+
event.preventDefault();
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
case 'noValidate':
|
|
180
|
+
return noValidate;
|
|
181
|
+
}
|
|
182
|
+
return Reflect.get(target, key, receiver);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
|
|
187
|
+
exports.FormProvider = FormProvider;
|
|
188
|
+
exports.FormStateInput = FormStateInput;
|
|
189
|
+
exports.Registry = Registry;
|
|
190
|
+
exports.getFieldMetadata = getFieldMetadata;
|
|
191
|
+
exports.getFormMetadata = getFormMetadata;
|
|
192
|
+
exports.getMetadata = getMetadata;
|
|
193
|
+
exports.updateSubjectRef = updateSubjectRef;
|
|
194
|
+
exports.useFormState = useFormState;
|
|
195
|
+
exports.useRegistry = useRegistry;
|
|
196
|
+
exports.useSubjectRef = useSubjectRef;
|
package/context.mjs
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { objectSpread2 as _objectSpread2 } from './_virtual/_rollupPluginBabelHelpers.mjs';
|
|
2
|
+
import { STATE, formatPaths, getPaths, isPrefix } from '@conform-to/dom';
|
|
3
|
+
import { useContext, useMemo, createContext, useCallback, useSyncExternalStore, useRef } from 'react';
|
|
4
|
+
import { jsx } from 'react/jsx-runtime';
|
|
5
|
+
|
|
6
|
+
var Registry = /*#__PURE__*/createContext({});
|
|
7
|
+
function useRegistry(formId, context) {
|
|
8
|
+
var registry = useContext(Registry);
|
|
9
|
+
var form = context !== null && context !== void 0 ? context : registry[formId];
|
|
10
|
+
if (!form) {
|
|
11
|
+
throw new Error('Form context is not available');
|
|
12
|
+
}
|
|
13
|
+
return form;
|
|
14
|
+
}
|
|
15
|
+
function useFormState(form, subjectRef) {
|
|
16
|
+
var subscribe = useCallback(callback => form.subscribe(callback, () => subjectRef === null || subjectRef === void 0 ? void 0 : subjectRef.current), [form, subjectRef]);
|
|
17
|
+
return useSyncExternalStore(subscribe, form.getState, form.getState);
|
|
18
|
+
}
|
|
19
|
+
function FormProvider(props) {
|
|
20
|
+
var registry = useContext(Registry);
|
|
21
|
+
var value = useMemo(() => _objectSpread2(_objectSpread2({}, registry), {}, {
|
|
22
|
+
[props.context.id]: props.context
|
|
23
|
+
}), [registry, props.context]);
|
|
24
|
+
return /*#__PURE__*/jsx(Registry.Provider, {
|
|
25
|
+
value: value,
|
|
26
|
+
children: props.children
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function FormStateInput(props) {
|
|
30
|
+
var _props$formId;
|
|
31
|
+
var form = useRegistry((_props$formId = props.formId) !== null && _props$formId !== void 0 ? _props$formId : props.context.id, props.context);
|
|
32
|
+
return /*#__PURE__*/jsx("input", {
|
|
33
|
+
type: "hidden",
|
|
34
|
+
name: STATE,
|
|
35
|
+
value: form.getSerializedState(),
|
|
36
|
+
form: props.formId
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
function useSubjectRef() {
|
|
40
|
+
var initialSubject = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
|
|
41
|
+
var subjectRef = useRef(initialSubject);
|
|
42
|
+
|
|
43
|
+
// Reset the subject everytime the component is rerendered
|
|
44
|
+
// This let us subscribe to data used in the last render only
|
|
45
|
+
subjectRef.current = initialSubject;
|
|
46
|
+
return subjectRef;
|
|
47
|
+
}
|
|
48
|
+
function updateSubjectRef(ref, name, subject, scope) {
|
|
49
|
+
var _ref$current$subject$, _ref$current$subject;
|
|
50
|
+
ref.current[subject] = _objectSpread2(_objectSpread2({}, ref.current[subject]), {}, {
|
|
51
|
+
[scope]: ((_ref$current$subject$ = (_ref$current$subject = ref.current[subject]) === null || _ref$current$subject === void 0 ? void 0 : _ref$current$subject[scope]) !== null && _ref$current$subject$ !== void 0 ? _ref$current$subject$ : []).concat(name)
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function getMetadata(formId, state, subjectRef) {
|
|
55
|
+
var name = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
|
|
56
|
+
var id = name ? "".concat(formId, "-").concat(name) : formId;
|
|
57
|
+
return new Proxy({
|
|
58
|
+
id,
|
|
59
|
+
errorId: "".concat(id, "-error"),
|
|
60
|
+
descriptionId: "".concat(id, "-description"),
|
|
61
|
+
initialValue: state.initialValue[name],
|
|
62
|
+
value: state.value[name],
|
|
63
|
+
error: state.error[name],
|
|
64
|
+
get key() {
|
|
65
|
+
return state.key[name];
|
|
66
|
+
},
|
|
67
|
+
get valid() {
|
|
68
|
+
return state.valid[name];
|
|
69
|
+
},
|
|
70
|
+
get dirty() {
|
|
71
|
+
return state.dirty[name];
|
|
72
|
+
},
|
|
73
|
+
get allValid() {
|
|
74
|
+
var keys = Object.keys(state.error);
|
|
75
|
+
if (name === '') {
|
|
76
|
+
return keys.length === 0;
|
|
77
|
+
}
|
|
78
|
+
for (var key of Object.keys(state.error)) {
|
|
79
|
+
if (isPrefix(key, name) && !state.valid[key]) {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return true;
|
|
84
|
+
},
|
|
85
|
+
get allError() {
|
|
86
|
+
if (name === '') {
|
|
87
|
+
return state.error;
|
|
88
|
+
}
|
|
89
|
+
var result = {};
|
|
90
|
+
for (var [key, error] of Object.entries(state.error)) {
|
|
91
|
+
if (isPrefix(key, name)) {
|
|
92
|
+
result[key] = error;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
return result;
|
|
96
|
+
},
|
|
97
|
+
get getFieldset() {
|
|
98
|
+
return () => new Proxy({}, {
|
|
99
|
+
get(target, key, receiver) {
|
|
100
|
+
if (typeof key === 'string') {
|
|
101
|
+
return getFieldMetadata(formId, state, subjectRef, name, key);
|
|
102
|
+
}
|
|
103
|
+
return Reflect.get(target, key, receiver);
|
|
104
|
+
}
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
}, {
|
|
108
|
+
get(target, key, receiver) {
|
|
109
|
+
switch (key) {
|
|
110
|
+
case 'key':
|
|
111
|
+
case 'error':
|
|
112
|
+
case 'initialValue':
|
|
113
|
+
case 'value':
|
|
114
|
+
case 'valid':
|
|
115
|
+
case 'dirty':
|
|
116
|
+
updateSubjectRef(subjectRef, name, key, 'name');
|
|
117
|
+
break;
|
|
118
|
+
case 'allError':
|
|
119
|
+
updateSubjectRef(subjectRef, name, 'error', 'prefix');
|
|
120
|
+
break;
|
|
121
|
+
case 'allValid':
|
|
122
|
+
updateSubjectRef(subjectRef, name, 'valid', 'prefix');
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
return Reflect.get(target, key, receiver);
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
function getFieldMetadata(formId, state, subjectRef) {
|
|
130
|
+
var prefix = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : '';
|
|
131
|
+
var key = arguments.length > 4 ? arguments[4] : undefined;
|
|
132
|
+
var name = typeof key === 'undefined' ? prefix : formatPaths([...getPaths(prefix), key]);
|
|
133
|
+
var metadata = getMetadata(formId, state, subjectRef, name);
|
|
134
|
+
return new Proxy(metadata, {
|
|
135
|
+
get(target, key, receiver) {
|
|
136
|
+
switch (key) {
|
|
137
|
+
case 'formId':
|
|
138
|
+
return formId;
|
|
139
|
+
case 'name':
|
|
140
|
+
return name;
|
|
141
|
+
case 'constraint':
|
|
142
|
+
return state.constraint[name];
|
|
143
|
+
case 'getFieldList':
|
|
144
|
+
{
|
|
145
|
+
return () => {
|
|
146
|
+
var _state$initialValue$n;
|
|
147
|
+
var initialValue = (_state$initialValue$n = state.initialValue[name]) !== null && _state$initialValue$n !== void 0 ? _state$initialValue$n : [];
|
|
148
|
+
updateSubjectRef(subjectRef, name, 'initialValue', 'name');
|
|
149
|
+
if (!Array.isArray(initialValue)) {
|
|
150
|
+
throw new Error('The initial value at the given name is not a list');
|
|
151
|
+
}
|
|
152
|
+
return Array(initialValue.length).fill(0).map((_, index) => getFieldMetadata(formId, state, subjectRef, name, index));
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
return Reflect.get(target, key, receiver);
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
function getFormMetadata(formId, state, subjectRef, form, noValidate) {
|
|
161
|
+
var metadata = getMetadata(formId, state, subjectRef);
|
|
162
|
+
return new Proxy(metadata, {
|
|
163
|
+
get(target, key, receiver) {
|
|
164
|
+
switch (key) {
|
|
165
|
+
case 'context':
|
|
166
|
+
return form;
|
|
167
|
+
case 'onSubmit':
|
|
168
|
+
return event => {
|
|
169
|
+
var submitEvent = event.nativeEvent;
|
|
170
|
+
form.submit(submitEvent);
|
|
171
|
+
if (submitEvent.defaultPrevented) {
|
|
172
|
+
event.preventDefault();
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
case 'noValidate':
|
|
176
|
+
return noValidate;
|
|
177
|
+
}
|
|
178
|
+
return Reflect.get(target, key, receiver);
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
export { FormProvider, FormStateInput, Registry, getFieldMetadata, getFormMetadata, getMetadata, updateSubjectRef, useFormState, useRegistry, useSubjectRef };
|