web-ui-pack
Version:
Web package with UI elements
43 lines (42 loc) • 1.3 kB
JavaScript
export default function objectToFormData(fromObj, toForm, opts) {
toForm ||= new FormData();
const canNulls = opts?.includeNulls ?? false;
const isBracketNotation = opts?.bracketNotation ?? false;
function map(v, prop) {
if (Array.isArray(v)) {
v.forEach((val, index) => {
map(val, `${prop}[${index}]`);
});
}
else if (v == null) {
if (canNulls) {
toForm.append(prop, "");
}
}
else if (typeof v === "object") {
if (v instanceof Date) {
toForm.append(prop, v.toJSON());
}
else if (v instanceof File) {
toForm.append(prop, v, v.name);
}
else if (isBracketNotation) {
Object.keys(v).forEach((key) => {
const s = prop ? `${prop}[${key}]` : key;
map(v[key], s);
});
}
else {
Object.keys(v).forEach((key) => {
const s = `${prop ? `${prop}.` : ""}${key}`;
map(v[key], s);
});
}
}
else {
toForm.append(prop, v);
}
}
map(fromObj, "");
return toForm;
}