<.header> {gettext("Members")} <:actions> <.button :if={Enum.any?(@members, &MapSet.member?(@selected_members, &1.id))} id="copy-emails-btn" phx-hook="CopyToClipboard" phx-click="copy_emails" aria-label={gettext("Copy email addresses of selected members")} > <.icon name="hero-clipboard-document" /> {gettext("Copy emails")} ({Enum.count(@members, &MapSet.member?(@selected_members, &1.id))}) <.button :if={Enum.any?(@members, &MapSet.member?(@selected_members, &1.id))} href={ "mailto:?bcc=" <> (MvWeb.MemberLive.Index.format_selected_member_emails(@members, @selected_members) |> Enum.join(", ") |> URI.encode()) } aria-label={gettext("Open email program with BCC recipients")} > <.icon name="hero-envelope" /> {gettext("Open in email program")} <.button variant="primary" navigate={~p"/members/new"}> <.icon name="hero-plus" /> {gettext("New Member")}
<.live_component module={MvWeb.Components.SearchBarComponent} id="search-bar" query={@query} placeholder={gettext("Search...")} /> <.live_component module={MvWeb.Components.PaymentFilterComponent} id="payment-filter" paid_filter={@paid_filter} member_count={length(@members)} />
<.table id="members" rows={@members} row_click={fn member -> JS.navigate(~p"/members/#{member}") end} dynamic_cols={@dynamic_cols} sort_field={@sort_field} sort_order={@sort_order} > <:col :let={member} label={ ~H""" <.input type="checkbox" name="select_all" phx-click="select_all" checked={MapSet.equal?(@selected_members, @members |> Enum.map(& &1.id) |> MapSet.new())} aria-label={gettext("Select all members")} role="checkbox" /> """ } > <.input type="checkbox" name={member.id} phx-click="select_member" phx-value-id={member.id} checked={MapSet.member?(@selected_members, member.id)} phx-capture-click phx-stop-propagation aria-label={gettext("Select member")} role="checkbox" /> <:col :let={member} label={ ~H""" <.live_component module={MvWeb.Components.SortHeaderComponent} id={:sort_first_name} field={:first_name} label={gettext("First name")} sort_field={@sort_field} sort_order={@sort_order} /> """ } > {member.first_name} {member.last_name} <:col :let={member} :if={:email in @member_fields_visible} label={ ~H""" <.live_component module={MvWeb.Components.SortHeaderComponent} id={:sort_email} field={:email} label={gettext("Email")} sort_field={@sort_field} sort_order={@sort_order} /> """ } > {member.email} <:col :let={member} :if={:street in @member_fields_visible} label={ ~H""" <.live_component module={MvWeb.Components.SortHeaderComponent} id={:sort_street} field={:street} label={gettext("Street")} sort_field={@sort_field} sort_order={@sort_order} /> """ } > {member.street} <:col :let={member} :if={:house_number in @member_fields_visible} label={ ~H""" <.live_component module={MvWeb.Components.SortHeaderComponent} id={:sort_house_number} field={:house_number} label={gettext("House Number")} sort_field={@sort_field} sort_order={@sort_order} /> """ } > {member.house_number} <:col :let={member} :if={:postal_code in @member_fields_visible} label={ ~H""" <.live_component module={MvWeb.Components.SortHeaderComponent} id={:sort_postal_code} field={:postal_code} label={gettext("Postal Code")} sort_field={@sort_field} sort_order={@sort_order} /> """ } > {member.postal_code} <:col :let={member} :if={:city in @member_fields_visible} label={ ~H""" <.live_component module={MvWeb.Components.SortHeaderComponent} id={:sort_city} field={:city} label={gettext("City")} sort_field={@sort_field} sort_order={@sort_order} /> """ } > {member.city} <:col :let={member} :if={:phone_number in @member_fields_visible} label={ ~H""" <.live_component module={MvWeb.Components.SortHeaderComponent} id={:sort_phone_number} field={:phone_number} label={gettext("Phone Number")} sort_field={@sort_field} sort_order={@sort_order} /> """ } > {member.phone_number} <:col :let={member} :if={:join_date in @member_fields_visible} label={ ~H""" <.live_component module={MvWeb.Components.SortHeaderComponent} id={:sort_join_date} field={:join_date} label={gettext("Join Date")} sort_field={@sort_field} sort_order={@sort_order} /> """ } > {MvWeb.MemberLive.Index.format_date(member.join_date)} <:col :let={member} label={gettext("Paid")}> {if member.paid == true, do: gettext("Yes"), else: gettext("No")} <:action :let={member}>
<.link navigate={~p"/members/#{member}"}>{gettext("Show")}
<.link navigate={~p"/members/#{member}/edit"}>{gettext("Edit")} <:action :let={member}> <.link phx-click={JS.push("delete", value: %{id: member.id}) |> hide("#row-#{member.id}")} data-confirm={gettext("Are you sure?")} > {gettext("Delete")}