UNPKG

1.49 kBJavaScriptView Raw
1function stringToNumber(value) {
2 if (!value) {
3 return value;
4 }
5
6 if (typeof value === "string") {
7 value = value.replace(",", ".");
8 value = value.replace("−", "-");
9 value = Number(value);
10 }
11
12 return value;
13}
14
15function getFormValue(value, type) {
16 if (value === "") {
17 return null;
18 } else if (type === "number") {
19 let numValue = stringToNumber(value);
20
21 return isNaN(numValue) ? undefined : numValue;
22 } else if (["date", "datetime"].includes(type)) {
23 let dateValue = new Date(value);
24
25 return isNaN(dateValue.getTime()) ? undefined : dateValue;
26 } else if (type === "boolean") {
27 return value.toLowerCase() === "true";
28 }
29
30 return value;
31}
32
33export function formDataToObject(form, typeMap = {}) {
34 let formData = new FormData(form);
35 let result = new Map();
36
37 for (let [field, value] of formData.entries()) {
38 let type = typeMap?.[field] ?? "string";
39 value = getFormValue(value, type);
40
41 if (result.has(field)) {
42 let current = result.get(field);
43
44 if (Array.isArray(current)) {
45 current.push(value);
46 } else {
47 result.set(field, [current, value]);
48 }
49 } else {
50 result.set(field, value);
51 }
52 }
53
54 return Object.fromEntries(result);
55}
56
57export function formDataToProcedureParameters(form, procedure) {
58 let parameters = procedure.getParameters();
59 let types = Object.fromEntries(parameters.map(param => [param.name, param.type]));
60
61 return formDataToObject(form, types);
62}