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
|