diff --git a/apps/fz_http/lib/fz_http_web/live/device_live/admin/index.html.heex b/apps/fz_http/lib/fz_http_web/live/device_live/admin/index.html.heex index d9d8c44a1..adf3b8c47 100644 --- a/apps/fz_http/lib/fz_http_web/live/device_live/admin/index.html.heex +++ b/apps/fz_http/lib/fz_http_web/live/device_live/admin/index.html.heex @@ -4,7 +4,8 @@ <%= render FzHttpWeb.SharedView, "flash.html", assigns %>
- <%= render FzHttpWeb.SharedView, "devices_table.html", devices: @devices, socket: @socket %> + <%= render FzHttpWeb.SharedView, "devices_table.html", + devices: @devices, show_user: true, socket: @socket %>

diff --git a/apps/fz_http/lib/fz_http_web/live/device_live/admin/index_live.ex b/apps/fz_http/lib/fz_http_web/live/device_live/admin/index_live.ex index 9c2339371..8c9b92297 100644 --- a/apps/fz_http/lib/fz_http_web/live/device_live/admin/index_live.ex +++ b/apps/fz_http/lib/fz_http_web/live/device_live/admin/index_live.ex @@ -3,13 +3,18 @@ defmodule FzHttpWeb.DeviceLive.Admin.Index do Handles Device LiveViews. """ use FzHttpWeb, :live_view - alias FzHttp.Devices + alias FzHttp.{Devices, Repo} @impl Phoenix.LiveView def mount(_params, _session, socket) do + devices = + Devices.list_devices() + |> Repo.preload(:user) + |> Enum.sort_by(& &1.user_id) + {:ok, socket - |> assign(:devices, Devices.list_devices()) + |> assign(:devices, devices) |> assign(:page_title, "All Devices")} end diff --git a/apps/fz_http/lib/fz_http_web/live/user_live/show.html.heex b/apps/fz_http/lib/fz_http_web/live/user_live/show.html.heex index 29f7f81dc..45924f991 100644 --- a/apps/fz_http/lib/fz_http_web/live/user_live/show.html.heex +++ b/apps/fz_http/lib/fz_http_web/live/user_live/show.html.heex @@ -45,7 +45,8 @@

<%= if length(@devices) > 0 do %> - <%= render FzHttpWeb.SharedView, "devices_table.html", devices: @devices, socket: @socket %> + <%= render FzHttpWeb.SharedView, "devices_table.html", + devices: @devices, show_user: false, socket: @socket %> <% else %> No devices. <% end %> diff --git a/apps/fz_http/lib/fz_http_web/templates/shared/devices_table.html.heex b/apps/fz_http/lib/fz_http_web/templates/shared/devices_table.html.heex index e89c6727d..03fd9e3dc 100644 --- a/apps/fz_http/lib/fz_http_web/templates/shared/devices_table.html.heex +++ b/apps/fz_http/lib/fz_http_web/templates/shared/devices_table.html.heex @@ -2,6 +2,7 @@ Name + <%= if @show_user do %>User<% end %> WireGuard IP Remote IP Latest Handshake @@ -17,6 +18,11 @@ <%= live_patch(device.name, to: Routes.device_admin_show_path(@socket, :show, device)) %> + <%= if @show_user do %> + + <%= link(device.user.email, to: Routes.user_show_path(@socket, :show, device.user)) %> + + <% end %> <%= device.ipv4 %>
diff --git a/apps/fz_http/test/fz_http_web/live/device_live/admin/index_test.exs b/apps/fz_http/test/fz_http_web/live/device_live/admin/index_test.exs index 510e75717..7ab71ffe7 100644 --- a/apps/fz_http/test/fz_http_web/live/device_live/admin/index_test.exs +++ b/apps/fz_http/test/fz_http_web/live/device_live/admin/index_test.exs @@ -14,6 +14,20 @@ defmodule FzHttpWeb.DeviceLive.Admin.IndexTest do assert html =~ device.name end end + + test "includes the user in the list", %{admin_conn: conn, devices: devices} do + path = Routes.device_admin_index_path(conn, :index) + {:ok, _view, html} = live(conn, path) + + assert html =~ "User" + + devices = FzHttp.Repo.preload(devices, :user) + + for device <- devices do + assert html =~ device.user.email + assert html =~ ~s[href="/users/#{device.user.id}"] + end + end end describe "authenticated but user deleted" do