inside that row (typically the Actions "View"
+// link). Clicks on interactive elements are ignored so inner links/buttons
+// still win.
+document.addEventListener("click", (e: MouseEvent) => {
+ const target = e.target as HTMLElement | null
+ if (!target) return
+ if (target.closest("a, button, input, select, label, [role='option'], [role='menuitem']")) return
+ const tr = target.closest("#live-table tbody tr[id]") as HTMLTableRowElement | null
+ if (!tr || tr.id === "empty-placeholder") return
+ const link = tr.querySelector("a[href]") as HTMLAnchorElement | null
+ if (link) link.click()
+})
+
// Show progress bar on live navigation and form submits
topbar.config({barColors: {0: "#29d"}, shadowColor: "rgba(0, 0, 0, .3)"})
window.addEventListener("phx:page-loading-start", _info => topbar.show(300))
diff --git a/config/config.exs b/config/config.exs
index a623e4cf..8f10a744 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -20,7 +20,10 @@ config :esbuild,
config :live_table,
app: :microwaveprop,
repo: Microwaveprop.Repo,
- pubsub: Microwaveprop.PubSub
+ pubsub: Microwaveprop.PubSub,
+ defaults: %{
+ custom_footer: {MicrowavepropWeb.LiveTableFooter, :render}
+ }
# Configure Elixir's Logger
config :logger, :default_formatter,
diff --git a/lib/microwaveprop_web/live_table_footer.ex b/lib/microwaveprop_web/live_table_footer.ex
new file mode 100644
index 00000000..288ab632
--- /dev/null
+++ b/lib/microwaveprop_web/live_table_footer.ex
@@ -0,0 +1,59 @@
+defmodule MicrowavepropWeb.LiveTableFooter do
+ @moduledoc false
+ use Phoenix.Component
+
+ def render(assigns) do
+ options = assigns.options
+ table_options = assigns.table_options
+ paginate? = get_in(options, ["pagination", "paginate?"])
+ mode = get_in(table_options, [:pagination, :mode])
+
+ assigns =
+ assigns
+ |> assign(:show_pagination?, paginate? && mode != :infinite_scroll)
+ |> assign(:page, parse_page(get_in(options, ["pagination", "page"])))
+ |> assign(:has_next_page?, get_in(options, ["pagination", :has_next_page]) || false)
+
+ ~H"""
+
+ """
+ end
+
+ defp parse_page(page) when is_integer(page), do: page
+ defp parse_page(page) when is_binary(page), do: String.to_integer(page)
+ defp parse_page(_), do: 1
+end