Current section
Files
Jump to
Current section
Files
lib/dala/socket.ex
defmodule Dala.Socket do
@moduledoc """
Public API for socket operations.
This module delegates to `Dala.Ui.Socket` for socket functionality.
"""
alias Dala.Ui.Socket
@doc """
Create a new socket for a screen module.
"""
@spec new(module(), keyword()) :: Dala.Ui.Socket.t()
defdelegate new(screen_module, opts \\ []), to: Socket
@doc """
Assign a value to the socket.
"""
@spec assign(Dala.Ui.Socket.t(), atom(), term()) :: Dala.Ui.Socket.t()
defdelegate assign(socket, key, value), to: Socket
@doc """
Assign multiple values to the socket.
"""
@spec assign(Dala.Ui.Socket.t(), keyword() | map()) :: Dala.Ui.Socket.t()
def assign(socket, assigns) when is_list(assigns) or is_map(assigns) do
Enum.reduce(assigns, socket, fn {key, value}, acc ->
assign(acc, key, value)
end)
end
@doc """
Get a value from the socket assigns.
"""
@spec get(Dala.Ui.Socket.t(), atom(), term()) :: term()
def get(%Dala.Ui.Socket{assigns: assigns}, key, default \\ nil) do
Map.get(assigns, key, default)
end
@doc """
Get the Dala metadata from the socket.
"""
@spec get_dala(Dala.Ui.Socket.t(), atom(), term()) :: term()
def get_dala(%Dala.Ui.Socket{__dala__: dala}, key, default \\ nil) do
Map.get(dala, key, default)
end
@doc """
Put Dala metadata into the socket.
"""
@spec put_dala(Dala.Ui.Socket.t(), atom(), term()) :: Dala.Ui.Socket.t()
defdelegate put_dala(socket, key, value), to: Socket
defdelegate push_screen(socket, dest, params \\ %{}), to: Socket
defdelegate pop_to_root(socket), to: Socket
defdelegate pop_to(socket, dest), to: Socket
defdelegate pop_screen(socket), to: Socket
defdelegate reset_to(socket, dest, params \\ %{}), to: Socket
@doc """
Check if specific key(s) have changed since the last render.
"""
@spec changed?(Dala.Ui.Socket.t(), atom() | [atom()]) :: boolean()
defdelegate changed?(socket, keys), to: Socket
@doc """
Store the root view ref in the socket.
"""
@spec put_root_view(Dala.Ui.Socket.t(), term()) :: Dala.Ui.Socket.t()
defdelegate put_root_view(socket, view), to: Socket
end