defmodule LambentExWeb.IndexLive.Index do
use LambentExWeb, :live_view
alias LambentExWeb.IndexLive.Index
@pubsub_name LambentEx.PubSub
@impl true
def mount(_params, _session, socket) do
Phoenix.PubSub.subscribe(@pubsub_name, "machines_idx")
Phoenix.PubSub.subscribe(@pubsub_name, "scan-82667777")
Phoenix.PubSub.subscribe(@pubsub_name, "links_idx")
{:ok, socket
|> assign(:links, %{})
|> assign(:machines, %{})
|> assign(:devices, %{})
|> assign(:selected_m, nil)
|> assign(:selected_d, [])
}
end
@impl true
def handle_params(params, _url, socket) do
{:noreply, apply_action(socket, socket.assigns.live_action, params)}
end
defp apply_action(socket, :index, _params) do
socket
|> assign(:page_link, "LambentEx")
|> assign(:page_title, "LambentEx")
end
def handle_info({:machines_pub, machine}, socket) do
{:noreply,
socket |> assign(:machines, socket.assigns.machines |> Map.put(machine[:name], machine))}
end
def handle_info({:links_pub, link}, socket) do
{:noreply, socket |> assign(:links, socket.assigns.links |> Map.put(link[:name], link))}
end
def handle_info({:devices_pub, devices}, socket) do
{:noreply,
socket |> assign(:devices, socket.assigns.devices |> Map.merge(devices))}
end
def handle_event("selectm", %{"name" => name}, socket) do
if socket.assigns.selected_m != name do
{:noreply, socket |> assign(:selected_m, name)}
else
{:noreply, socket |> assign(:selected_m, nil)}
end
end
def handle_event("selectd", %{"name" => name}, socket) do
if Enum.member?(socket.assigns.selected_d, name) do
{:noreply, socket |> assign(:selected_d, socket.assigns.selected_d |> List.delete(name))}
else
{:noreply, socket |> assign(:selected_d, socket.assigns.selected_d |> List.insert_at(0, name))}
end
end
# functions
def group_links(links) do
links |> Map.values |> Enum.filter(fn x -> x.enabled end) |> Enum.group_by(fn e -> e.source end)
end
def find_unlinked_machines(links, machines) do
used_machines = links |> Map.values |> Enum.filter(fn x -> x.enabled end) |> Enum.map(fn x -> x.source end) |> Enum.uniq |> MapSet.new
machine_ids = machines |> Map.values |> Enum.map(fn x -> x.id end) |> MapSet.new
MapSet.difference(machine_ids, used_machines)
end
def find_unlinked_devices(links, devices) do
used_sources = links |> Map.values |> Enum.map(fn x -> x.target end) |> MapSet.new
device_ids = devices |> Map.keys |> MapSet.new
MapSet.difference(device_ids, used_sources)
end
end
neiam
/lambent_ex
Lambent Aether 5
public · Issues · Pulls 1 · Labels · Forks · Compare · Actions success · Badges · Packages
⭐
Log in to mark this repository.
2.6 KiB · text
History
9c0fc16