analytics/lib/plausible_web/flows.ex

65 lines
1.4 KiB
Elixir

defmodule PlausibleWeb.Flows do
@moduledoc """
Static compile-time definitions for user progress flows.
See `PlausibleWeb.Components.FlowProgress` for rendering capabilities.
"""
@flows %{
review: [
"Install Plausible",
"Verify installation"
],
domain_change: [
"Set up new domain",
"Install Plausible",
"Verify installation"
],
register: [
"Register",
"Activate account",
"Add site info",
"Install Plausible",
"Verify installation"
],
invitation: [
"Register",
"Activate account"
],
provisioning: [
"Add site info",
"Install Plausible",
"Verify installation"
]
}
@valid_values @flows
|> Enum.flat_map(fn {_, steps} -> steps end)
|> Enum.uniq()
@valid_keys @flows
|> Map.keys()
|> Enum.map(&to_string/1)
@spec steps(binary() | atom()) :: list(binary())
def steps(flow) when flow in @valid_keys do
steps(String.to_existing_atom(flow))
end
def steps(flow) when is_atom(flow) do
Map.get(@flows, flow, [])
end
def steps(_), do: []
@spec valid_values() :: list(binary())
def valid_values(), do: @valid_values
@spec valid_values() :: list(binary())
def valid_keys(), do: @valid_keys
for {flow, _} <- @flows do
@spec unquote(flow)() :: binary()
def unquote(flow)(), do: unquote(to_string(flow))
end
end