Current section
Files
Jump to
Current section
Files
lib/gateway/common.ex
defmodule EXUssd.Common do
alias ExUssd.Utils
# alias ExUssd.Routes
alias ExUssd.Navigation
alias ExUssd.Display
alias ExUssd.State.Registry
def goto(
internal_routing: internal_routing,
menu: menu,
api_parameters: api_parameters,
route: route
) do
Registry.start(internal_routing.session_id)
api_parameters = for {key, val} <- api_parameters, into: %{}, do: {String.to_atom(key), val}
response =
case ExUssd.State.Registry.get_home_menu(internal_routing.session_id) do
nil ->
home_menu = Utils.call_menu_callback(menu, api_parameters)
current_menu = %{home_menu | parent: fn -> %{home_menu | error: nil} end}
ExUssd.State.Registry.set_home_menu(internal_routing.session_id, current_menu)
home_menu
_ ->
ExUssd.State.Registry.get_current_menu(internal_routing.session_id)
end
ExUssd.State.Registry.set_current_menu(internal_routing.session_id, response)
ExUssd.State.Registry.set_menu(internal_routing.session_id, response)
current_menu =
Navigation.navigate(internal_routing.session_id, route, response, api_parameters)
current_routes = Registry.get(internal_routing.session_id)
{:ok, menu_string} = Display.generate(menu: current_menu, routes: current_routes)
%{menu: current_menu, display: menu_string}
end
end