Improve UX of join requests and fix minor bugs #492
5 changed files with 49 additions and 44 deletions
|
|
@ -191,10 +191,10 @@ defmodule MvWeb.GlobalSettingsLive do
|
||||||
target="_blank"
|
target="_blank"
|
||||||
rel="noopener noreferrer"
|
rel="noopener noreferrer"
|
||||||
class="btn btn-secondary btn-sm"
|
class="btn btn-secondary btn-sm"
|
||||||
aria-label={gettext("Open join page URL in a new tab")}
|
|
||||||
>
|
>
|
||||||
<.icon name="hero-arrow-top-right-on-square" class="size-4" />
|
<.icon name="hero-arrow-top-right-on-square" class="size-4" aria-hidden="true" />
|
||||||
{pgettext("action", "Open")}
|
{pgettext("action", "Open")}
|
||||||
|
<span class="sr-only">{gettext("join page URL in a new tab")}</span>
|
||||||
</.link>
|
</.link>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -6,8 +6,8 @@ defmodule MvWeb.JoinLive do
|
||||||
use MvWeb, :live_view
|
use MvWeb, :live_view
|
||||||
|
|
||||||
alias Ash.Resource.Info
|
alias Ash.Resource.Info
|
||||||
alias Mv.Membership.CustomFieldLookup
|
|
||||||
alias Mv.Membership
|
alias Mv.Membership
|
||||||
|
alias Mv.Membership.CustomFieldLookup
|
||||||
alias MvWeb.JoinRateLimit
|
alias MvWeb.JoinRateLimit
|
||||||
alias MvWeb.Translations.MemberFields
|
alias MvWeb.Translations.MemberFields
|
||||||
|
|
||||||
|
|
@ -81,14 +81,12 @@ defmodule MvWeb.JoinLive do
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%= for field <- @join_fields do %>
|
<%= for field <- @join_fields do %>
|
||||||
<div class={
|
<%= if field.input_type == "checkbox" do %>
|
||||||
if field.input_type == "checkbox", do: "flex items-end gap-3", else: ""
|
<input type="hidden" name={field.id} value="off" />
|
||||||
}>
|
<label
|
||||||
<label for={"join-field-#{field.id}"} class="label">
|
for={"join-field-#{field.id}"}
|
||||||
<span class="label-text">{field.label}{if field.required, do: " *"}</span>
|
class="label cursor-pointer justify-start gap-3"
|
||||||
</label>
|
>
|
||||||
<%= if field.input_type == "checkbox" do %>
|
|
||||||
<input type="hidden" name={field.id} value="off" />
|
|
||||||
<input
|
<input
|
||||||
type="checkbox"
|
type="checkbox"
|
||||||
name={field.id}
|
name={field.id}
|
||||||
|
|
@ -97,7 +95,17 @@ defmodule MvWeb.JoinLive do
|
||||||
required={field.required}
|
required={field.required}
|
||||||
class="checkbox checkbox-sm"
|
class="checkbox checkbox-sm"
|
||||||
/>
|
/>
|
||||||
<% else %>
|
<span class="label-text">
|
||||||
|
{field.label}<span :if={field.required} aria-hidden="true"> *</span>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
|
<% else %>
|
||||||
|
<div>
|
||||||
|
<label for={"join-field-#{field.id}"} class="label">
|
||||||
|
<span class="label-text">
|
||||||
|
{field.label}<span :if={field.required} aria-hidden="true"> *</span>
|
||||||
|
</span>
|
||||||
|
</label>
|
||||||
<input
|
<input
|
||||||
type={field.input_type}
|
type={field.input_type}
|
||||||
name={field.id}
|
name={field.id}
|
||||||
|
|
@ -106,8 +114,8 @@ defmodule MvWeb.JoinLive do
|
||||||
required={field.required}
|
required={field.required}
|
||||||
class="input input-bordered w-full"
|
class="input input-bordered w-full"
|
||||||
/>
|
/>
|
||||||
<% end %>
|
</div>
|
||||||
</div>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
<%!--
|
<%!--
|
||||||
|
|
@ -274,7 +282,8 @@ defmodule MvWeb.JoinLive do
|
||||||
field_atom ->
|
field_atom ->
|
||||||
Mv.Membership.Member
|
Mv.Membership.Member
|
||||||
|> Info.attribute(field_atom)
|
|> Info.attribute(field_atom)
|
||||||
|> attribute_to_input_type()
|
|> Map.get(:type)
|
||||||
|
|> input_type_for()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
@ -285,21 +294,17 @@ defmodule MvWeb.JoinLive do
|
||||||
|> Enum.find(&(Atom.to_string(&1) == field_id))
|
|> Enum.find(&(Atom.to_string(&1) == field_id))
|
||||||
end
|
end
|
||||||
|
|
||||||
defp custom_field_input_type(type), do: attribute_to_input_type(%{type: type})
|
defp custom_field_input_type(type), do: input_type_for(type)
|
||||||
|
|
||||||
defp attribute_to_input_type(%{type: type}) when type in [:date, Ash.Type.Date], do: "date"
|
defp input_type_for(:date), do: "date"
|
||||||
|
defp input_type_for(Ash.Type.Date), do: "date"
|
||||||
defp attribute_to_input_type(%{type: type}) when type in [:integer, Ash.Type.Integer],
|
defp input_type_for(:integer), do: "number"
|
||||||
do: "number"
|
defp input_type_for(Ash.Type.Integer), do: "number"
|
||||||
|
defp input_type_for(:boolean), do: "checkbox"
|
||||||
defp attribute_to_input_type(%{type: type}) when type in [:boolean, Ash.Type.Boolean],
|
defp input_type_for(Ash.Type.Boolean), do: "checkbox"
|
||||||
do: "checkbox"
|
defp input_type_for(:email), do: "email"
|
||||||
|
defp input_type_for(Mv.Membership.Email), do: "email"
|
||||||
defp attribute_to_input_type(%{type: type}) when type in [:email, Mv.Membership.Email],
|
defp input_type_for(_), do: "text"
|
||||||
do: "email"
|
|
||||||
|
|
||||||
defp attribute_to_input_type(%{type: _}), do: "text"
|
|
||||||
defp attribute_to_input_type(nil), do: "text"
|
|
||||||
|
|
||||||
defp checkbox_checked?(value) when value in [true, "true", "on", "1"], do: true
|
defp checkbox_checked?(value) when value in [true, "true", "on", "1"], do: true
|
||||||
defp checkbox_checked?(_), do: false
|
defp checkbox_checked?(_), do: false
|
||||||
|
|
|
||||||
|
|
@ -3901,11 +3901,6 @@ msgstr "Nur OIDC-Anmeldung ist aktiv. Diese Option ist deaktiviert."
|
||||||
msgid "Only sign-in via Single Sign-On (SSO) is allowed."
|
msgid "Only sign-in via Single Sign-On (SSO) is allowed."
|
||||||
msgstr "Nur Anmeldung per Single Sign-On (SSO) ist erlaubt."
|
msgstr "Nur Anmeldung per Single Sign-On (SSO) ist erlaubt."
|
||||||
|
|
||||||
#: lib/mv_web/live/global_settings_live.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Open join page URL in a new tab"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: lib/mv_web/live/global_settings_live.ex
|
#: lib/mv_web/live/global_settings_live.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgctxt "action"
|
msgctxt "action"
|
||||||
|
|
@ -3917,3 +3912,8 @@ msgstr "Öffnen"
|
||||||
msgctxt "status"
|
msgctxt "status"
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Offen"
|
msgstr "Offen"
|
||||||
|
|
||||||
|
#: lib/mv_web/live/global_settings_live.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "join page URL in a new tab"
|
||||||
|
msgstr "Beitrittslink in einem neuen Tab"
|
||||||
|
|
|
||||||
|
|
@ -3901,11 +3901,6 @@ msgstr ""
|
||||||
msgid "Only sign-in via Single Sign-On (SSO) is allowed."
|
msgid "Only sign-in via Single Sign-On (SSO) is allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/live/global_settings_live.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Open join page URL in a new tab"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: lib/mv_web/live/global_settings_live.ex
|
#: lib/mv_web/live/global_settings_live.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgctxt "action"
|
msgctxt "action"
|
||||||
|
|
@ -3917,3 +3912,8 @@ msgstr ""
|
||||||
msgctxt "status"
|
msgctxt "status"
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/mv_web/live/global_settings_live.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "join page URL in a new tab"
|
||||||
|
msgstr ""
|
||||||
|
|
|
||||||
|
|
@ -3901,11 +3901,6 @@ msgstr ""
|
||||||
msgid "Only sign-in via Single Sign-On (SSO) is allowed."
|
msgid "Only sign-in via Single Sign-On (SSO) is allowed."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/mv_web/live/global_settings_live.ex
|
|
||||||
#, elixir-autogen, elixir-format
|
|
||||||
msgid "Open join page URL in a new tab"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: lib/mv_web/live/global_settings_live.ex
|
#: lib/mv_web/live/global_settings_live.ex
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgctxt "action"
|
msgctxt "action"
|
||||||
|
|
@ -3917,3 +3912,8 @@ msgstr "Open"
|
||||||
msgctxt "status"
|
msgctxt "status"
|
||||||
msgid "Open"
|
msgid "Open"
|
||||||
msgstr "Open"
|
msgstr "Open"
|
||||||
|
|
||||||
|
#: lib/mv_web/live/global_settings_live.ex
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "join page URL in a new tab"
|
||||||
|
msgstr "join page URL in a new tab"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue