<%= form_for @changeset, "#", [ phx_target: @myself, phx_change: "validate", phx_submit: "save" ], fn f -> %> <div class="mb-3" phx-feedback-for="<%= input_id(f, :email)%>"> <%= label f, :email, class: "form-label" %> <div class="input-group has-validation"> <span class="input-group-text"> <%= icon_div @socket, "bi-at", [class: "icon"] %> </span> <%= email_input f, :email, value: input_value(f, :email), class: input_class(f, :email, "form-control"), placeholder: "e.g., babka@73k.us", maxlength: User.max_email, autofocus: true, phx_debounce: "250", aria_describedby: error_id(f, :email) %> <%= error_tag f, :email %> </div> </div> <%= if Roles.can?(@current_user, %User{}, :edit_role) do %> <%= label f, :role, class: "form-label" %> <div class="input-group mb-3"> <span class="input-group-text"> <%= icon_div @socket, "bi-shield-shaded", [class: "icon"] %> </span> <%= select f, :role, Enum.map(User.roles(), fn {k, v} -> {String.capitalize(Atom.to_string(k)), k} end), class: "form-select" %> <span class="valid-feedback text-primary" style="display: block;"> <%= role_description(input_value(f, :role)) %> </span> </div> <% else %> <%= hidden_input f, :role, value: input_value(f, :role) %> <% end %> <div class="mb-3" phx-feedback-for="<%= input_id(f, :password) %>"> <%= label f, :password, class: "form-label" %> <div class="input-group has-validation"> <span class="input-group-text"> <%= icon_div @socket, "bi-key", [class: "icon"] %> </span> <%= password_input f, :password, value: input_value(f, :password), class: input_class(f, :password, "form-control"), maxlength: User.max_password, aria_describedby: error_id(f, :password) %> <%= error_tag f, :password %> </div> </div> <%= submit "Save", class: "btn btn-primary", disabled: !@changeset.valid?, aria_disabled: !@changeset.valid? && "true" || false, phx_disable_with: "Saving..." %> <% end %>