# <%= f = form_for @changeset, "#", phx_hook: "SavedForm", phx_change: :validate, phx_submit: :save %>
def mount(_session, socket) do
changeset =
case get_connect_params(socket) do
%{"stashed_form" => encoded} ->
%User{}
|> Accounts.change_user(Plug.Conn.Query.decode(encoded)["user"])
|> Map.put(:action, :insert)
_ ->
Accounts.change_user(%User{})
end
{:ok, assign(socket, changeset: changeset)}
end
let serializeForm = (form) => {
let formData = new FormData(form)
let params = new URLSearchParams()
for(let [key, val] of formData.entries()){ params.append(key, val) }
return params.toString()
}
let Params = {
data: {},
set(namespace, key, val){
if(!this.data[namespace]){ this.data[namespace] = {}}
this.data[namespace][key] = val
},
get(namespace){ return this.data[namespace] || {} }
}
let Hooks = {}
Hooks.SavedForm = {
mounted(){
this.el.addEventListener("input", e => {
Params.set(this.viewName, "stashed_form", serializeForm(this.el))
})
}
}
let socket = new LiveSocket("/live", {hooks: Hooks, params: (view) => Params.get(view)})
socket.connect()