@formality-ui/react 0.2.5 → 0.3.0
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/index.cjs +69 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +184 -17
- package/dist/index.d.ts +184 -17
- package/dist/index.js +69 -26
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -164,12 +164,18 @@ function Form({
|
|
|
164
164
|
return result;
|
|
165
165
|
}, [providerConfig.inputs, formConfig.inputs]);
|
|
166
166
|
const defaultValues = react.useMemo(() => {
|
|
167
|
-
|
|
167
|
+
const resolved = core.resolveAllInitialValues(config, mergedInputs, record ?? {});
|
|
168
|
+
const baseline = { ...record ?? {}, ...resolved };
|
|
169
|
+
for (const fieldName of Object.keys(config)) {
|
|
170
|
+
if (!(fieldName in baseline)) baseline[fieldName] = void 0;
|
|
171
|
+
}
|
|
172
|
+
return baseline;
|
|
168
173
|
}, [config, mergedInputs, record]);
|
|
169
174
|
const methods = reactHookForm.useForm({
|
|
170
175
|
mode: mode ?? "onChange",
|
|
171
176
|
defaultValues,
|
|
172
|
-
values:
|
|
177
|
+
values: defaultValues
|
|
178
|
+
// was: `record as any` — see baseline comment above
|
|
173
179
|
});
|
|
174
180
|
const fieldRegistry = react.useRef(/* @__PURE__ */ new Set());
|
|
175
181
|
const [registeredFields, setRegisteredFields] = react.useState(
|
|
@@ -335,8 +341,10 @@ function Form({
|
|
|
335
341
|
}, [methods, config, record, defaultValues]);
|
|
336
342
|
const handleSubmit = react.useCallback(
|
|
337
343
|
async (values, overrideOnSubmit) => {
|
|
338
|
-
for (const [, isValidating] of validatingFields.current) {
|
|
339
|
-
if (isValidating)
|
|
344
|
+
for (const [fieldName, isValidating] of validatingFields.current) {
|
|
345
|
+
if (!isValidating) continue;
|
|
346
|
+
const subscribers = invertedSubscriptions.current.get(fieldName);
|
|
347
|
+
if (subscribers && subscribers.size > 0) return;
|
|
340
348
|
}
|
|
341
349
|
if (validate) {
|
|
342
350
|
const errors = await validate(values);
|
|
@@ -934,13 +942,12 @@ function useSubscriptions(fieldName, subscriptions) {
|
|
|
934
942
|
};
|
|
935
943
|
}, [fieldName, subscriptions, addSubscription, removeSubscription]);
|
|
936
944
|
}
|
|
937
|
-
function
|
|
945
|
+
function useField({
|
|
938
946
|
name,
|
|
939
947
|
type: typeProp,
|
|
940
948
|
disabled: disabledProp,
|
|
941
949
|
hidden: hiddenProp,
|
|
942
950
|
children,
|
|
943
|
-
shouldRegister = true,
|
|
944
951
|
inputConfig: inputConfigProp,
|
|
945
952
|
...restProps
|
|
946
953
|
}) {
|
|
@@ -948,8 +955,6 @@ function Field({
|
|
|
948
955
|
config,
|
|
949
956
|
formConfig,
|
|
950
957
|
methods,
|
|
951
|
-
registerField,
|
|
952
|
-
unregisterField,
|
|
953
958
|
registerWatcherSetter,
|
|
954
959
|
unregisterWatcherSetter,
|
|
955
960
|
changeField,
|
|
@@ -978,12 +983,6 @@ function Field({
|
|
|
978
983
|
};
|
|
979
984
|
return inputConfigProp ? { ...baseInputConfig, ...inputConfigProp } : baseInputConfig;
|
|
980
985
|
}, [type, providerConfig.inputs, formConfig.inputs, inputConfigProp]);
|
|
981
|
-
react.useEffect(() => {
|
|
982
|
-
if (shouldRegister) {
|
|
983
|
-
registerField(name);
|
|
984
|
-
return () => unregisterField(name);
|
|
985
|
-
}
|
|
986
|
-
}, [name, shouldRegister, registerField, unregisterField]);
|
|
987
986
|
const [watchers, setWatchers] = react.useState({});
|
|
988
987
|
react.useEffect(() => {
|
|
989
988
|
registerWatcherSetter(name, setWatchers);
|
|
@@ -1196,10 +1195,14 @@ function Field({
|
|
|
1196
1195
|
inputConfig
|
|
1197
1196
|
]
|
|
1198
1197
|
);
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1198
|
+
const fieldStateRef = react.useRef(
|
|
1199
|
+
{}
|
|
1200
|
+
);
|
|
1201
|
+
const formStateRef = react.useRef(
|
|
1202
|
+
{}
|
|
1203
|
+
);
|
|
1204
|
+
const fieldPropsRef = react.useRef({});
|
|
1205
|
+
const renderedField = isVisible ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
1203
1206
|
reactHookForm.Controller,
|
|
1204
1207
|
{
|
|
1205
1208
|
control: methods.control,
|
|
@@ -1250,13 +1253,16 @@ function Field({
|
|
|
1250
1253
|
...stateInjection
|
|
1251
1254
|
}
|
|
1252
1255
|
});
|
|
1256
|
+
fieldStateRef.current = fieldState;
|
|
1257
|
+
formStateRef.current = formState;
|
|
1258
|
+
fieldPropsRef.current = finalProps;
|
|
1253
1259
|
const Component = inputConfig.component;
|
|
1254
1260
|
const isHostComponent = typeof inputConfig.component === "string";
|
|
1255
1261
|
const template = inputConfig.template ?? providerConfig.inputTemplates[type] ?? providerConfig.defaultInputTemplate;
|
|
1256
1262
|
const TemplateComponent = template;
|
|
1257
|
-
let
|
|
1263
|
+
let renderedFieldEl;
|
|
1258
1264
|
if (TemplateComponent) {
|
|
1259
|
-
|
|
1265
|
+
renderedFieldEl = /* @__PURE__ */ jsxRuntime.jsx(
|
|
1260
1266
|
TemplateComponent,
|
|
1261
1267
|
{
|
|
1262
1268
|
Field: Component,
|
|
@@ -1279,27 +1285,64 @@ function Field({
|
|
|
1279
1285
|
strippedHostProps[key] = value;
|
|
1280
1286
|
}
|
|
1281
1287
|
}
|
|
1282
|
-
|
|
1288
|
+
renderedFieldEl = react.createElement(inputConfig.component, {
|
|
1283
1289
|
...strippedHostProps,
|
|
1284
1290
|
ref: finalProps.forwardRef
|
|
1285
1291
|
});
|
|
1286
1292
|
} else {
|
|
1287
|
-
|
|
1293
|
+
renderedFieldEl = /* @__PURE__ */ jsxRuntime.jsx(Component, { ...finalProps });
|
|
1288
1294
|
}
|
|
1289
1295
|
if (typeof children === "function") {
|
|
1290
1296
|
const result = children({
|
|
1291
1297
|
fieldState,
|
|
1292
|
-
renderedField,
|
|
1298
|
+
renderedField: renderedFieldEl,
|
|
1293
1299
|
fieldProps: finalProps,
|
|
1294
1300
|
watchers,
|
|
1295
1301
|
formState
|
|
1296
1302
|
});
|
|
1297
1303
|
return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: result });
|
|
1298
1304
|
}
|
|
1299
|
-
return
|
|
1305
|
+
return renderedFieldEl;
|
|
1300
1306
|
}
|
|
1301
1307
|
}
|
|
1302
|
-
);
|
|
1308
|
+
) : null;
|
|
1309
|
+
return {
|
|
1310
|
+
fieldState: fieldStateRef.current,
|
|
1311
|
+
renderedField,
|
|
1312
|
+
fieldProps: fieldPropsRef.current,
|
|
1313
|
+
watchers,
|
|
1314
|
+
formState: formStateRef.current
|
|
1315
|
+
};
|
|
1316
|
+
}
|
|
1317
|
+
|
|
1318
|
+
// src/components/Field.tsx
|
|
1319
|
+
function Field({
|
|
1320
|
+
name,
|
|
1321
|
+
type: typeProp,
|
|
1322
|
+
disabled: disabledProp,
|
|
1323
|
+
hidden: hiddenProp,
|
|
1324
|
+
children,
|
|
1325
|
+
shouldRegister = true,
|
|
1326
|
+
inputConfig: inputConfigProp,
|
|
1327
|
+
...restProps
|
|
1328
|
+
}) {
|
|
1329
|
+
const { registerField, unregisterField } = useFormContext();
|
|
1330
|
+
react.useEffect(() => {
|
|
1331
|
+
if (shouldRegister) {
|
|
1332
|
+
registerField(name);
|
|
1333
|
+
return () => unregisterField(name);
|
|
1334
|
+
}
|
|
1335
|
+
}, [name, shouldRegister, registerField, unregisterField]);
|
|
1336
|
+
const { renderedField } = useField({
|
|
1337
|
+
name,
|
|
1338
|
+
type: typeProp,
|
|
1339
|
+
disabled: disabledProp,
|
|
1340
|
+
hidden: hiddenProp,
|
|
1341
|
+
children,
|
|
1342
|
+
inputConfig: inputConfigProp,
|
|
1343
|
+
...restProps
|
|
1344
|
+
});
|
|
1345
|
+
return renderedField;
|
|
1303
1346
|
}
|
|
1304
1347
|
function FieldGroup({ name, children }) {
|
|
1305
1348
|
const { formConfig } = useFormContext();
|
|
@@ -1456,6 +1499,7 @@ exports.makeDeepProxyState = makeDeepProxyState;
|
|
|
1456
1499
|
exports.makeProxyState = makeProxyState;
|
|
1457
1500
|
exports.useConditions = useConditions;
|
|
1458
1501
|
exports.useConfigContext = useConfigContext;
|
|
1502
|
+
exports.useField = useField;
|
|
1459
1503
|
exports.useFormContext = useFormContext;
|
|
1460
1504
|
exports.useFormState = useFormState;
|
|
1461
1505
|
exports.useGroupContext = useGroupContext;
|