I think you might find this thread helpful.
I’m not totally following your question but your change_password_component.html.leex
(or equivalent) might look something similar to this:
<%= f = form_for @password_changeset, Routes.person_settings_path(@socket, :update_password),
id: "form-update-password",
phx_change: "validate_password",
phx_submit: "update_password",
phx_trigger_action: @password_trigger_action,
phx_target: @myself %>
...
<%= hidden_input f, :action, name: "action", value: "update_password" %>
<%= password_input f, :password, value: input_value(f, :password) %>
...
</form>
I’ve stripped out a lot, but the input_value/2 from Phoenix.HTML needs to be set on your password field.
And you use the update/2
callback for Phoenix.LiveComponent in your change_password_component.ex
file (or equivalent):
@impl true
def update(assigns, socket) do
if socket.assigns[:current_person] do
{:ok, socket}
else
{:ok,
socket
|> assign(:current_person, assigns.current_person)
|> assign(:password_changeset, Accounts.change_person_password(assigns.current_person))
|> assign(:current_password, nil)
|> assign(:password_trigger_action, false)
}
end
end
...
You’d also have handle_event/3
callbacks for "validate_password"
and "update_password"
, or whatever you’d like to call those actions.
I’m planning to add another Medium post on switching the settings page over to a Live View page as a continuation of my other two posts (which you can find in the aforementioned thread), and I will update @slouchpie’s thread accordingly.
Hope this helps