Created
December 16, 2019 14:16
-
-
Save jm-maniego/ae80dd60a8eb5bb4bba81c4ecdce0662 to your computer and use it in GitHub Desktop.
Append formdata to form data
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// <form id="form"> | |
// <input type="text" value="John Snow" name="first_name" /> | |
// <input type="file" name="image" /> | |
// </form> | |
// const formElement = document.getElementById("form") | |
// const formData = new FormData(formElement); | |
// const builder = new FormDataBuilder(); | |
// builder.append("values", formData); | |
// builder.data.get("values[first_name]"); == "John Snow" #=> "true" | |
// builder.data.get("values[file]"); #=> "File" | |
class FormDataBuilder { | |
constructor(data) { | |
this.data = new FormData(); | |
} | |
append(key, value) { | |
switch (value.constructor.name) { | |
case "FormData": | |
this.append(key, Object.fromEntries(value)); | |
break; | |
case "HTMLFormElement": | |
this.append(key, $(data).serializeObject()); | |
break; | |
case "Object": | |
case "Array": | |
_.each(value, (item, indexOrKey) => { | |
this.append(`${key}[${indexOrKey}]`, item); | |
}); | |
break; | |
default: | |
this.data.append(key, value); | |
} | |
return this; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment