Packages

When you just need to show a loading spinner in scenic

Current section

Files

Jump to
scenic_loader lib scenic loader_component.ex
Raw

lib/scenic/loader_component.ex

defmodule Scenic.Loader.Component do
alias Scenic.{Loader, Graph, Primitive}
@moduledoc """
A helper to add a loading spinner to a scene
"""
@doc """
Add a loading spinner to your graph
"""
def loader(graph_or_primitive, options \\ [])
def loader(%Graph{} = g, options) do
add_to_graph(g, Loader, nil, options)
end
def loader(%Primitive{module: Primitive.SceneRef} = p, options) do
modify(p, Loader, nil, options)
end
@doc """
Stops (removes) the loader from graph.
"""
def stop_loader(%Graph{} = g, id \\ :loader) do
Graph.delete(g, id)
end
@doc """
See loader/2
"""
def loader_spec(options), do: &loader(&1, options)
defp add_to_graph(%Graph{} = g, mod, data, options) do
mod.verify!(data)
mod.add_to_graph(g, data, options)
end
defp modify(%Primitive{module: Primitive.SceneRef} = p, mod, data, options) do
mod.verify!(data)
Primitive.put(p, {mod, data}, options)
end
end