ExUssd.Menu (ExUssd v0.1.2) View Source

This struct enables USSD customization by modifying its fields.

Link to this section Summary

Types

t()
  • name: (Public) This is the value display when Menu is rendered as menu_list. check more on menu_list,
  • handler: (Public) A callback that modifies the current menu struct. Implemented via ExUssd.Handler
  • callback: (Internal) A callback function that takes the handler callback. This function is triggered when the client is at that menu position.
  • title: (Public) Outputs the ussd's title,
  • menu_list: (Public) Takes a list of Ussd Menu struct,
  • error: (Public) A custom validation error message for validation_menu,
  • show_navigation: (Public) set to false to hide navigation menu,
  • next: (Public) navigate's the next menu chunk, default %{name: "MORE", input_match: "98", display_style: ":"},
  • previous: (Public) navigate's the previous menu chunk or the previous menu struct default %{name: "BACK", input_match: "0", display_style: ":"},,
  • split: (Public) This is used to set the chunk size value when rendering menu_list. default value size 7,
  • should_close: (Public) This triggers ExUssd to end the current registry session,
  • display_style: (Public) This is used to change default's display style, default ":"
  • parent: (Internal) saves the previous menu struct to the current menu in order to facilitate navigation,
  • validation_menu: (Public) Its a special Menu struct that enables the developer to validate the client input,
  • data: (Public) takes data as Props that will be attached to the children menu struct,
  • default_error_message:(Public) This the default error message shown on invalid input. default "Invalid Choice "

Functions

Render Function is used to create a ussd Menu.

Link to this section Types

Specs

t() :: %ExUssd.Menu{
  callback: (... -> any()),
  data: any(),
  default_error_message: String.t(),
  display_style: String.t(),
  error: String.t(),
  handle: term(),
  handler: (... -> any()),
  home: term(),
  menu_list: [
    %ExUssd.Menu{
      callback: term(),
      data: term(),
      default_error_message: term(),
      display_style: term(),
      error: term(),
      handle: term(),
      handler: term(),
      home: term(),
      menu_list: term(),
      name: term(),
      next: term(),
      parent: term(),
      previous: term(),
      should_close: term(),
      show_navigation: term(),
      split: term(),
      success: term(),
      title: term(),
      validation_menu: term()
    }
  ],
  name: String.t(),
  next: String.t(),
  parent: %ExUssd.Menu{
    callback: term(),
    data: term(),
    default_error_message: term(),
    display_style: term(),
    error: term(),
    handle: term(),
    handler: term(),
    home: term(),
    menu_list: term(),
    name: term(),
    next: term(),
    parent: term(),
    previous: term(),
    should_close: term(),
    show_navigation: term(),
    split: term(),
    success: term(),
    title: term(),
    validation_menu: term()
  },
  previous: String.t(),
  should_close: boolean(),
  show_navigation: boolean(),
  split: integer(),
  success: term(),
  title: String.t(),
  validation_menu: %ExUssd.Menu{
    callback: term(),
    data: term(),
    default_error_message: term(),
    display_style: term(),
    error: term(),
    handle: term(),
    handler: term(),
    home: term(),
    menu_list: term(),
    name: term(),
    next: term(),
    parent: term(),
    previous: term(),
    should_close: term(),
    show_navigation: term(),
    split: term(),
    success: term(),
    title: term(),
    validation_menu: term()
  }
}
  • name: (Public) This is the value display when Menu is rendered as menu_list. check more on menu_list,
  • handler: (Public) A callback that modifies the current menu struct. Implemented via ExUssd.Handler
  • callback: (Internal) A callback function that takes the handler callback. This function is triggered when the client is at that menu position.
  • title: (Public) Outputs the ussd's title,
  • menu_list: (Public) Takes a list of Ussd Menu struct,
  • error: (Public) A custom validation error message for validation_menu,
  • show_navigation: (Public) set to false to hide navigation menu,
  • next: (Public) navigate's the next menu chunk, default %{name: "MORE", input_match: "98", display_style: ":"},
  • previous: (Public) navigate's the previous menu chunk or the previous menu struct default %{name: "BACK", input_match: "0", display_style: ":"},,
  • split: (Public) This is used to set the chunk size value when rendering menu_list. default value size 7,
  • should_close: (Public) This triggers ExUssd to end the current registry session,
  • display_style: (Public) This is used to change default's display style, default ":"
  • parent: (Internal) saves the previous menu struct to the current menu in order to facilitate navigation,
  • validation_menu: (Public) Its a special Menu struct that enables the developer to validate the client input,
  • data: (Public) takes data as Props that will be attached to the children menu struct,
  • default_error_message:(Public) This the default error message shown on invalid input. default "Invalid Choice "

Link to this section Functions

Render Function is used to create a ussd Menu.

## Params The function requires two keys as parameters :name - Name of the ussd component :data - Optional data prop that will be attached to the menu struct :handler - A callback handler ExUssd.Handler

Returns %ExUssd.Menu{} .

## Examples

  iex> defmodule MyHomeHandler do
  ...>   @behaviour ExUssd.Handler
  ...>   def handle_menu(menu, api_parameters) do
  ...>     menu |> Map.put(:title, "Welcome")
  ...>   end
  ...> end

  iex> ExUssd.Menu.render(name: "Home", handler: MyHomeHandler)

  %ExUssd.Menu{
    callback: #Function<1.49663807/1 in ExUssd.Menu.render/1>,
    error: nil,
    handle: false,
    handler: #Function<43.97283095/2 in :erl_eval.expr/5>,
    menu_list: [],
    name: "Home",
    next: %{name: "MORE", input_match: "98", display_style: ":"},
    previous: %{name: "BACK", input_match: "0", display_style: ":"},
    should_close: false,
    show_options: true,
    split: 7,
    success: false,
    title: nil
  }

  iex> defmodule MyHomeHandler do
  ...>   @behaviour ExUssd.Handler
  ...>   def handle_menu(menu, api_parameters) do
  ...>    %{language: language} = Map.get(menu, data, nil)
  ...>     case language do
  ...>      "Swahili" -> menu |> Map.put(:title, "Karibu")
  ...>      _-> menu |> Map.put(:title, "Welcome")
  ...>     end
  ...>   end
  ...> end

  iex> ExUssd.Menu.render(name: "Home", data: %{language: "Swahili"}, handler: MyHomeHandler)
  %ExUssd.Menu{
  callback: #Function<2.57249658/2 in ExUssd.Menu.render/1>,
  data: nil,
  default_error_message: "Invalid Choice\n",
  display_style: ":",
  error: nil,
  handler: MyHomeHandler,
  menu_list: [],
  name: "Home",
  next: %{name: "MORE", input_match: "98", display_style: ":"},
  parent: nil,
  previous: %{name: "BACK", input_match: "0", display_style: ":"},
  should_close: false,
  show_navigation: true,
  show_options: true,
  split: 7,
  title: nil,
  validation_menu: nil
}