@conform-to/react 1.2.1 → 1.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/helpers.d.ts +1 -1
- package/helpers.js +1 -0
- package/helpers.mjs +1 -0
- package/hooks.js +1 -52
- package/hooks.mjs +1 -52
- package/integrations.js +16 -3
- package/integrations.mjs +16 -3
- package/package.json +2 -2
package/helpers.d.ts
CHANGED
package/helpers.js
CHANGED
|
@@ -73,6 +73,7 @@ function getFieldsetProps(metadata, options) {
|
|
|
73
73
|
*/
|
|
74
74
|
function getFormControlProps(metadata, options) {
|
|
75
75
|
return simplify(_rollupPluginBabelHelpers.objectSpread2({
|
|
76
|
+
key: metadata.key,
|
|
76
77
|
required: metadata.required || undefined
|
|
77
78
|
}, getFieldsetProps(metadata, options)));
|
|
78
79
|
}
|
package/helpers.mjs
CHANGED
package/hooks.js
CHANGED
|
@@ -56,61 +56,10 @@ function useForm(options) {
|
|
|
56
56
|
formId
|
|
57
57
|
}));
|
|
58
58
|
});
|
|
59
|
-
var subjectRef = context.useSubjectRef(
|
|
60
|
-
key: {
|
|
61
|
-
// Subscribe to all key changes so it will re-render and
|
|
62
|
-
// update the field value as soon as the DOM is updated
|
|
63
|
-
prefix: ['']
|
|
64
|
-
}
|
|
65
|
-
});
|
|
59
|
+
var subjectRef = context.useSubjectRef();
|
|
66
60
|
var stateSnapshot = context.useFormState(context$1, subjectRef);
|
|
67
61
|
var noValidate = useNoValidate(options.defaultNoValidate);
|
|
68
62
|
var form = context.getFormMetadata(context$1, subjectRef, stateSnapshot, noValidate);
|
|
69
|
-
react.useEffect(() => {
|
|
70
|
-
var formElement = document.forms.namedItem(formId);
|
|
71
|
-
if (!formElement) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
var getAll = value => {
|
|
75
|
-
if (typeof value === 'string') {
|
|
76
|
-
return [value];
|
|
77
|
-
}
|
|
78
|
-
if (Array.isArray(value) && value.every(item => typeof item === 'string')) {
|
|
79
|
-
return value;
|
|
80
|
-
}
|
|
81
|
-
return undefined;
|
|
82
|
-
};
|
|
83
|
-
var get = value => {
|
|
84
|
-
var _getAll;
|
|
85
|
-
return (_getAll = getAll(value)) === null || _getAll === void 0 ? void 0 : _getAll[0];
|
|
86
|
-
};
|
|
87
|
-
for (var element of formElement.elements) {
|
|
88
|
-
if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement) {
|
|
89
|
-
var prev = element.dataset.conform;
|
|
90
|
-
var next = stateSnapshot.key[element.name];
|
|
91
|
-
var defaultValue = stateSnapshot.initialValue[element.name];
|
|
92
|
-
if (prev === 'managed' || element.type === 'submit' || element.type === 'reset' || element.type === 'button') {
|
|
93
|
-
// Skip buttons and fields managed by useInputControl()
|
|
94
|
-
continue;
|
|
95
|
-
}
|
|
96
|
-
if (typeof prev === 'undefined' || prev !== next) {
|
|
97
|
-
element.dataset.conform = next;
|
|
98
|
-
if ('options' in element) {
|
|
99
|
-
var _getAll2;
|
|
100
|
-
var value = (_getAll2 = getAll(defaultValue)) !== null && _getAll2 !== void 0 ? _getAll2 : [];
|
|
101
|
-
for (var option of element.options) {
|
|
102
|
-
option.selected = value.includes(option.value);
|
|
103
|
-
}
|
|
104
|
-
} else if ('checked' in element && (element.type === 'checkbox' || element.type === 'radio')) {
|
|
105
|
-
element.checked = get(defaultValue) === element.value;
|
|
106
|
-
} else {
|
|
107
|
-
var _get;
|
|
108
|
-
element.value = (_get = get(defaultValue)) !== null && _get !== void 0 ? _get : '';
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
}, [formId, stateSnapshot]);
|
|
114
63
|
return [form, form.getFieldset()];
|
|
115
64
|
}
|
|
116
65
|
function useFormMetadata(formId) {
|
package/hooks.mjs
CHANGED
|
@@ -52,61 +52,10 @@ function useForm(options) {
|
|
|
52
52
|
formId
|
|
53
53
|
}));
|
|
54
54
|
});
|
|
55
|
-
var subjectRef = useSubjectRef(
|
|
56
|
-
key: {
|
|
57
|
-
// Subscribe to all key changes so it will re-render and
|
|
58
|
-
// update the field value as soon as the DOM is updated
|
|
59
|
-
prefix: ['']
|
|
60
|
-
}
|
|
61
|
-
});
|
|
55
|
+
var subjectRef = useSubjectRef();
|
|
62
56
|
var stateSnapshot = useFormState(context, subjectRef);
|
|
63
57
|
var noValidate = useNoValidate(options.defaultNoValidate);
|
|
64
58
|
var form = getFormMetadata(context, subjectRef, stateSnapshot, noValidate);
|
|
65
|
-
useEffect(() => {
|
|
66
|
-
var formElement = document.forms.namedItem(formId);
|
|
67
|
-
if (!formElement) {
|
|
68
|
-
return;
|
|
69
|
-
}
|
|
70
|
-
var getAll = value => {
|
|
71
|
-
if (typeof value === 'string') {
|
|
72
|
-
return [value];
|
|
73
|
-
}
|
|
74
|
-
if (Array.isArray(value) && value.every(item => typeof item === 'string')) {
|
|
75
|
-
return value;
|
|
76
|
-
}
|
|
77
|
-
return undefined;
|
|
78
|
-
};
|
|
79
|
-
var get = value => {
|
|
80
|
-
var _getAll;
|
|
81
|
-
return (_getAll = getAll(value)) === null || _getAll === void 0 ? void 0 : _getAll[0];
|
|
82
|
-
};
|
|
83
|
-
for (var element of formElement.elements) {
|
|
84
|
-
if (element instanceof HTMLInputElement || element instanceof HTMLTextAreaElement || element instanceof HTMLSelectElement) {
|
|
85
|
-
var prev = element.dataset.conform;
|
|
86
|
-
var next = stateSnapshot.key[element.name];
|
|
87
|
-
var defaultValue = stateSnapshot.initialValue[element.name];
|
|
88
|
-
if (prev === 'managed' || element.type === 'submit' || element.type === 'reset' || element.type === 'button') {
|
|
89
|
-
// Skip buttons and fields managed by useInputControl()
|
|
90
|
-
continue;
|
|
91
|
-
}
|
|
92
|
-
if (typeof prev === 'undefined' || prev !== next) {
|
|
93
|
-
element.dataset.conform = next;
|
|
94
|
-
if ('options' in element) {
|
|
95
|
-
var _getAll2;
|
|
96
|
-
var value = (_getAll2 = getAll(defaultValue)) !== null && _getAll2 !== void 0 ? _getAll2 : [];
|
|
97
|
-
for (var option of element.options) {
|
|
98
|
-
option.selected = value.includes(option.value);
|
|
99
|
-
}
|
|
100
|
-
} else if ('checked' in element && (element.type === 'checkbox' || element.type === 'radio')) {
|
|
101
|
-
element.checked = get(defaultValue) === element.value;
|
|
102
|
-
} else {
|
|
103
|
-
var _get;
|
|
104
|
-
element.value = (_get = get(defaultValue)) !== null && _get !== void 0 ? _get : '';
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
}, [formId, stateSnapshot]);
|
|
110
59
|
return [form, form.getFieldset()];
|
|
111
60
|
}
|
|
112
61
|
function useFormMetadata(formId) {
|
package/integrations.js
CHANGED
|
@@ -31,7 +31,7 @@ function createDummySelect(form, name, value) {
|
|
|
31
31
|
var options = typeof value === 'string' ? [value] : value !== null && value !== void 0 ? value : [];
|
|
32
32
|
select.name = name;
|
|
33
33
|
select.multiple = true;
|
|
34
|
-
select.dataset.conform = '
|
|
34
|
+
select.dataset.conform = 'true';
|
|
35
35
|
|
|
36
36
|
// To make sure the input is hidden but still focusable
|
|
37
37
|
select.setAttribute('aria-hidden', 'true');
|
|
@@ -52,7 +52,7 @@ function createDummySelect(form, name, value) {
|
|
|
52
52
|
return select;
|
|
53
53
|
}
|
|
54
54
|
function isDummySelect(element) {
|
|
55
|
-
return element.dataset.conform === '
|
|
55
|
+
return element.dataset.conform === 'true';
|
|
56
56
|
}
|
|
57
57
|
function updateFieldValue(element, value) {
|
|
58
58
|
if (element instanceof HTMLInputElement && (element.type === 'checkbox' || element.type === 'radio')) {
|
|
@@ -216,8 +216,21 @@ function useControl(meta) {
|
|
|
216
216
|
setValue(value);
|
|
217
217
|
change(value);
|
|
218
218
|
};
|
|
219
|
+
var refCallback = element => {
|
|
220
|
+
var _meta$key;
|
|
221
|
+
register(element);
|
|
222
|
+
if (!element) {
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
var prevKey = element.dataset.conform;
|
|
226
|
+
var nextKey = "".concat((_meta$key = meta.key) !== null && _meta$key !== void 0 ? _meta$key : '');
|
|
227
|
+
if (prevKey !== nextKey) {
|
|
228
|
+
element.dataset.conform = nextKey;
|
|
229
|
+
updateFieldValue(element, value !== null && value !== void 0 ? value : '');
|
|
230
|
+
}
|
|
231
|
+
};
|
|
219
232
|
return {
|
|
220
|
-
register,
|
|
233
|
+
register: refCallback,
|
|
221
234
|
value,
|
|
222
235
|
change: handleChange,
|
|
223
236
|
focus,
|
package/integrations.mjs
CHANGED
|
@@ -27,7 +27,7 @@ function createDummySelect(form, name, value) {
|
|
|
27
27
|
var options = typeof value === 'string' ? [value] : value !== null && value !== void 0 ? value : [];
|
|
28
28
|
select.name = name;
|
|
29
29
|
select.multiple = true;
|
|
30
|
-
select.dataset.conform = '
|
|
30
|
+
select.dataset.conform = 'true';
|
|
31
31
|
|
|
32
32
|
// To make sure the input is hidden but still focusable
|
|
33
33
|
select.setAttribute('aria-hidden', 'true');
|
|
@@ -48,7 +48,7 @@ function createDummySelect(form, name, value) {
|
|
|
48
48
|
return select;
|
|
49
49
|
}
|
|
50
50
|
function isDummySelect(element) {
|
|
51
|
-
return element.dataset.conform === '
|
|
51
|
+
return element.dataset.conform === 'true';
|
|
52
52
|
}
|
|
53
53
|
function updateFieldValue(element, value) {
|
|
54
54
|
if (element instanceof HTMLInputElement && (element.type === 'checkbox' || element.type === 'radio')) {
|
|
@@ -212,8 +212,21 @@ function useControl(meta) {
|
|
|
212
212
|
setValue(value);
|
|
213
213
|
change(value);
|
|
214
214
|
};
|
|
215
|
+
var refCallback = element => {
|
|
216
|
+
var _meta$key;
|
|
217
|
+
register(element);
|
|
218
|
+
if (!element) {
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
var prevKey = element.dataset.conform;
|
|
222
|
+
var nextKey = "".concat((_meta$key = meta.key) !== null && _meta$key !== void 0 ? _meta$key : '');
|
|
223
|
+
if (prevKey !== nextKey) {
|
|
224
|
+
element.dataset.conform = nextKey;
|
|
225
|
+
updateFieldValue(element, value !== null && value !== void 0 ? value : '');
|
|
226
|
+
}
|
|
227
|
+
};
|
|
215
228
|
return {
|
|
216
|
-
register,
|
|
229
|
+
register: refCallback,
|
|
217
230
|
value,
|
|
218
231
|
change: handleChange,
|
|
219
232
|
focus,
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"description": "Conform view adapter for react",
|
|
4
4
|
"homepage": "https://conform.guide",
|
|
5
5
|
"license": "MIT",
|
|
6
|
-
"version": "1.
|
|
6
|
+
"version": "1.3.0",
|
|
7
7
|
"main": "index.js",
|
|
8
8
|
"module": "index.mjs",
|
|
9
9
|
"types": "index.d.ts",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"url": "https://github.com/edmundhung/conform/issues"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@conform-to/dom": "1.
|
|
33
|
+
"@conform-to/dom": "1.3.0"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@babel/core": "^7.17.8",
|