defmodule MvWeb.Components.ExportDropdown do @moduledoc """ Export dropdown component for member export (CSV/PDF). Provides an accessible dropdown menu with CSV and PDF export options. Uses the same export payload as the previous single-button export. """ use MvWeb, :live_component use Gettext, backend: MvWeb.Gettext # Same focus ring as CoreComponents button/dropdown (WCAG 2.4.7) defp dropdown_item_class do focus = MvWeb.CoreComponents.button_focus_classes() |> Kernel.++(["focus-visible:ring-inset"]) |> Enum.join(" ") "flex items-center gap-2 px-2 py-1 rounded cursor-pointer hover:bg-base-200 w-full text-left #{focus}" end @impl true def mount(socket) do {:ok, assign(socket, :open, false)} end @impl true def update(assigns, socket) do socket = socket |> assign(:id, assigns.id) |> assign(:export_payload_json, assigns[:export_payload_json] || "") |> assign(:selected_count, assigns[:selected_count] || 0) {:ok, socket} end @impl true def render(assigns) do button_label = gettext("Export") <> " (" <> if(assigns.selected_count == 0, do: gettext("all"), else: to_string(assigns.selected_count) ) <> ")" assigns = assign(assigns, :button_label, button_label) ~H"""