55 lines
2 KiB
Text
55 lines
2 KiB
Text
<div class="row justify-content-center">
|
|
<div class="col-11 col-sm-8 col-md-6 col-lg-5 col-xl-4 col-xxl-3">
|
|
|
|
<h2>
|
|
<i class="bi bi-shield-lock me-1"></i> Reset password
|
|
</h2>
|
|
<p class="lead">Hi <%= @user.email %> — tell us your new password, please.</p>
|
|
|
|
<.form :let={f} for={@changeset} phx-change="validate" phx-submit="save" novalidate id="pw_reset_form">
|
|
|
|
<%= label f, :password, "New password", class: "form-label" %>
|
|
<div class="inner-addon left-addon mb-3" phx-feedback-for={input_id(f, :password)}>
|
|
<i class="bi bi-key icon is-left text-muted fs-5"></i>
|
|
<%= password_input f, :password,
|
|
value: input_value(f, :password),
|
|
class: input_class(f, :password, "form-control"),
|
|
maxlength: User.max_password,
|
|
autofocus: true,
|
|
aria_describedby: error_ids(f, :password)
|
|
%>
|
|
<%= error_tag f, :password %>
|
|
</div>
|
|
|
|
<%= label f, :password_confirmation, "Confirm new password", class: "form-label" %>
|
|
<div class="inner-addon left-addon mb-3" phx-feedback-for={input_id(f, :password_confirmation)}>
|
|
<i class="bi bi-key-fill icon is-left text-muted fs-5"></i>
|
|
<%= password_input f, :password_confirmation,
|
|
value: input_value(f, :password_confirmation),
|
|
class: input_class(f, :password_confirmation, "form-control"),
|
|
maxlength: User.max_password,
|
|
aria_describedby: error_ids(f, :password_confirmation)
|
|
%>
|
|
<%= error_tag f, :password_confirmation %>
|
|
</div>
|
|
|
|
<div class="mb-3">
|
|
<%= submit "Reset password",
|
|
class: "btn btn-primary",
|
|
disabled: !@changeset.valid?,
|
|
aria_disabled: !@changeset.valid? && "true" || false,
|
|
phx_disable_with: "Saving..."
|
|
%>
|
|
</div>
|
|
|
|
</.form>
|
|
|
|
<p class="mt-3 is-pulled-right">
|
|
<%= if allow_registration() do %>
|
|
<%= link "Register", to: Routes.user_registration_path(@socket, :new) %> |
|
|
<% end %>
|
|
<%= link "Log in", to: Routes.user_session_path(@socket, :new) %>
|
|
</p>
|
|
|
|
</div>
|
|
</div>
|