Skip to content

Instantly share code, notes, and snippets.

@jokernix
Last active July 16, 2018 11:32
Show Gist options
  • Save jokernix/30457ac9f7356f599e6e9457c1074b31 to your computer and use it in GitHub Desktop.
Save jokernix/30457ac9f7356f599e6e9457c1074b31 to your computer and use it in GitHub Desktop.
Convert Model to FormData
export function isEmpty(obj) {
if (typeof obj === 'string' || obj === '') {
return false;
}
if (typeof obj === 'number' || obj === 0) {
return false;
}
if (typeof obj === 'boolean') {
return false;
}
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
return false;
}
}
return true;
}
export function convertModelToFormData(
model: any,
form: FormData = null,
namespace = ''
): FormData {
const formData = form || new FormData();
for (const propertyName in model) {
if (!model.hasOwnProperty(propertyName) || isEmpty(model[propertyName])) {
continue;
}
const formKey = namespace ? `${namespace}[${propertyName}]` : propertyName;
if (model[propertyName] instanceof Date) {
formData.append(formKey, model[propertyName].toISOString());
} else if (model[propertyName] instanceof Array) {
model[propertyName].forEach((element, index) => {
const tempFormKey = `${formKey}[${index}]`;
convertModelToFormData(element, formData, tempFormKey);
});
} else if (typeof model[propertyName] === 'object' && !(model[propertyName] instanceof File)) {
convertModelToFormData(model[propertyName], formData, formKey);
} else {
console.log(formKey, model[propertyName].toString());
formData.append(formKey, model[propertyName].toString());
}
}
return formData;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment