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"""
<%= 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 %>
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"""
"""
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