Current section

Files

Jump to
messenger_bot lib messenger_bot components message button.ex
Raw

lib/messenger_bot/components/message/button.ex

defmodule MessengerBot.Component.Message.Button do
@moduledoc """
Structure and type for button
"""
@derive [Poison.Encoder]
defstruct [:type, :title, :payload, :url, :webview_height_ratio,
:messenger_extensions, :fallback_url, :webview_share_button,
:payment_summary, :share_contents]
@type t :: %__MODULE__{
type: String.t,
title: String.t,
payload: String.t,
url: String.t,
webview_height_ratio: String.t,
messenger_extensions: boolean(),
fallback_url: String.t,
webview_share_button: String.t,
payment_summary: Map.t,
share_contents: Map.t
}
@doc """
Function to define url button with minimum requirements
"""
@spec url_button(Map.t) :: __MODULE__.t
def url_button(%{type: _, title: _, url: _} = fields) do
Map.merge(%__MODULE__{}, fields)
end
@doc """
Function to define postback button with exact requirements
"""
@spec postback_button(Map.t) :: __MODULE__.t
def postback_button(%{type: type, title: title, payload: payload}) do
%__MODULE__{type: type, title: title, payload: payload}
end
@doc """
Function to define call button with exact requirements
"""
@spec call_button(Map.t) :: __MODULE__.t
def call_button(%{title: title, payload: payload}) do
%__MODULE__{type: "phone_number", title: title, payload: payload}
end
@doc """
Function to define share button
"""
@spec share_button() :: __MODULE__.t
def share_button do
%__MODULE__{type: "element_share"}
end
@spec share_button(Map.t) :: __MODULE__.t
def share_button(%{share_contents: share_contents}) do
%__MODULE__{type: "element_share", share_contents: share_contents}
end
@doc """
Function to define postback button with exact requirements
"""
@spec buy_button(Map.t) :: __MODULE__.t
def buy_button(%{type: type, title: title, payload: payload,
payment_summary: payment_summary}) do
%__MODULE__{type: type, title: title, payload: payload,
payment_summary: payment_summary}
end
@doc """
Function to define postback button with exact requirements
"""
@spec login_button(Map.t) :: __MODULE__.t
def login_button(%{type: type, url: url}) do
%__MODULE__{type: type, url: url}
end
@doc """
Function to define logout button
"""
@spec logout_button() :: __MODULE__.t
def logout_button do
%__MODULE__{type: "account_unlink"}
end
end