defmodule DalaDev.Server.WebLive do @moduledoc """ Main web UI layout for dala.web - provides navigation and integration for all dala_dev features in a single interface. """ use Phoenix.LiveView @features [ %{id: :dashboard, name: "Dashboard", icon: "dashboard", path: "/dashboard"}, %{id: :devices, name: "Devices", icon: "devices", path: "/devices"}, %{id: :deploy, name: "Deploy", icon: "deploy", path: "/deploy"}, %{id: :emulators, name: "Emulators", icon: "emulators", path: "/emulators"}, %{id: :observer, name: "Observer", icon: "observer", path: "/observer"}, %{id: :provision, name: "Provision", icon: "provision", path: "/provision"}, %{id: :release, name: "Release", icon: "release", path: "/release"}, %{id: :profiling, name: "Profiling", icon: "profiling", path: "/profiling"}, %{id: :ci, name: "CI Testing", icon: "ci", path: "/ci"}, %{id: :logs, name: "Logs", icon: "logs", path: "/logs"}, %{id: :settings, name: "Settings", icon: "settings", path: "/settings"} ] def render(assigns) do ~H"""

<%= @page_title %>

<%= render_quick_actions(assigns) %>
<%= render_content(@active_feature, assigns) %>
""" end def mount(_params, _session, socket) do socket = socket |> assign(:features, @features) |> assign(:active_feature, :dashboard) |> assign(:page_title, "Dashboard") |> assign(:node_connected, Node.alive?()) |> assign(:device_count, 0) |> assign(:emulator_count, 0) {:ok, socket} end def handle_params(%{"feature" => feature_id}, _uri, socket) do feature_id = String.to_atom(feature_id) feature = Enum.find(@features, &(&1.id == feature_id)) socket = if feature do socket |> assign(:active_feature, feature.id) |> assign(:page_title, feature.name) else socket end {:noreply, socket} end def handle_params(_params, %URI{path: path}, socket) do # Extract feature from path feature_id = case path do "/devices" -> :devices "/deploy" -> :deploy "/emulators" -> :emulators "/provision" -> :provision "/release" -> :release "/profiling" -> :profiling "/ci" -> :ci "/logs" -> :logs "/settings" -> :settings _ -> :dashboard end feature = Enum.find(@features, &(&1.id == feature_id)) socket = if feature do socket |> assign(:active_feature, feature.id) |> assign(:page_title, feature.name) else socket end {:noreply, socket} end defp render_icon(:dashboard), do: "" defp render_icon(:devices), do: "" defp render_icon(:deploy), do: "" defp render_icon(:emulators), do: "" defp render_icon(:observer), do: "" defp render_icon(:provision), do: "" defp render_icon(:release), do: "" defp render_icon(:profiling), do: "" defp render_icon(:ci), do: "" defp render_icon(:logs), do: "" defp render_icon(:settings), do: "" defp render_quick_actions(assigns) do ~H""" """ end defp render_content(:dashboard, assigns) do ~H"""

Devices

<%= @device_count %>

Emulators

<%= @emulator_count %>

Status

Online

Recent Activity

Activity feed coming soon...

""" end defp render_content(:devices, assigns) do ~H"""

Device Management

Android and iOS device management interface.

""" end defp render_content(:deploy, assigns) do ~H"""

Deploy Applications

Deploy to connected devices and emulators.

""" end defp render_content(:emulators, assigns) do ~H"""

Emulator Management

Manage Android AVDs and iOS simulators.

""" end defp render_content(:observer, assigns) do ~H"""

Observer

Remote node monitoring. Open Full Observer

""" end defp render_content(:provision, assigns) do ~H"""

Provisioning

Code signing and provisioning profile management.

""" end defp render_content(:release, assigns) do ~H"""

Release Management

Build and manage releases for Android and iOS.

""" end defp render_content(:profiling, assigns) do ~H"""

Profiling

Performance profiling and analysis tools.

""" end defp render_content(:ci, assigns) do ~H"""

CI Testing

Continuous integration test management.

""" end defp render_content(:logs, assigns) do ~H"""

Logs

Centralized log viewing and filtering.

""" end defp render_content(:settings, assigns) do ~H"""

Settings

Configuration and preferences.

""" end defp render_content(_, assigns) do ~H"""

Feature not found

""" end end