lib/slack/block_kit/layout/input.rb in slack-ruby-block-kit-0.12.0 vs lib/slack/block_kit/layout/input.rb in slack-ruby-block-kit-0.13.0
- old
+ new
@@ -2,31 +2,226 @@
module Slack
module BlockKit
module Layout
# A block that collects information from users - it can hold a plain-text
- # input element, a select menu element, a multi-select menu element, or a
- # datepicker.
+ # input element, a checkbox element, a radio button element,
+ # a select menu element, a multi-select menu element, or a datepicker.
#
# https://api.slack.com/reference/block-kit/blocks#input
+ # rubocop:disable Metrics/ClassLength
class Input
+ # rubocop:enable Metrics/ClassLength
TYPE = 'input'
attr_accessor :label, :element, :block_id, :hint, :optional, :emoji
def initialize(
label:,
- element:,
+ element: nil,
block_id: nil,
hint: nil,
optional: nil,
emoji: nil
)
@label = Composition::PlainText.new(text: label, emoji: emoji) if label
@hint = Composition::PlainText.new(text: hint, emoji: emoji) if hint
@block_id = block_id
@optional = optional
@element = element
+ end
+
+ def conversation_select(placeholder:, action_id:, initial: nil, emoji: nil)
+ @element = Element::ConversationsSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ initial: initial,
+ emoji: emoji
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def multi_conversations_select(placeholder:, action_id:, initial: nil, emoji: nil, max_selected_items: nil)
+ @element = Element::MultiConversationsSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ initial: initial,
+ emoji: emoji,
+ max_selected_items: max_selected_items
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def channels_select(placeholder:, action_id:, initial: nil, emoji: nil)
+ @element = Element::ChannelsSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ initial: initial,
+ emoji: emoji
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def checkboxes(action_id:)
+ @element = Element::Checkboxes.new(action_id: action_id)
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def datepicker(action_id:, placeholder: nil, initial: nil, emoji: nil)
+ @element = Element::DatePicker.new(
+ action_id: action_id,
+ placeholder: placeholder,
+ initial: initial,
+ emoji: emoji
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def multi_channels_select(placeholder:, action_id:, initial: nil, emoji: nil, max_selected_items: nil)
+ @element = Element::MultiChannelsSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ initial: initial,
+ emoji: emoji,
+ max_selected_items: max_selected_items
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def static_select(placeholder:, action_id:, emoji: nil)
+ @element = Element::StaticSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ emoji: emoji
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def multi_static_select(placeholder:, action_id:, emoji: nil, max_selected_items: nil)
+ @element = Element::MultiStaticSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ emoji: emoji,
+ max_selected_items: max_selected_items
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def external_select(placeholder:, action_id:, initial: nil, min_query_length: nil, emoji: nil)
+ @element = Element::ExternalSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ initial: initial,
+ min_query_length: min_query_length,
+ emoji: emoji
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def multi_external_select(
+ placeholder:,
+ action_id:,
+ initial: nil,
+ min_query_length: nil,
+ emoji: nil,
+ max_selected_items: nil
+ )
+ @element = Element::MultiExternalSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ initial: initial,
+ min_query_length: min_query_length,
+ emoji: emoji,
+ max_selected_items: max_selected_items
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def plain_text_input(
+ action_id:,
+ placeholder: nil,
+ emoji: nil,
+ initial_value: nil,
+ multiline: nil,
+ min_length: nil,
+ max_length: nil
+ )
+ @element = Element::PlainTextInput.new(
+ action_id: action_id,
+ placeholder: placeholder,
+ emoji: emoji,
+ initial_value: initial_value,
+ multiline: multiline,
+ min_length: min_length,
+ max_length: max_length
+ )
+
+ self
+ end
+
+ def radio_buttons(action_id:)
+ @element = Element::RadioButtons.new(action_id: action_id)
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def users_select(placeholder:, action_id:, initial: nil, emoji: nil)
+ @element = Element::UsersSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ initial: initial,
+ emoji: emoji
+ )
+
+ yield(@element) if block_given?
+
+ self
+ end
+
+ def multi_users_select(placeholder:, action_id:, initial: nil, emoji: nil, max_selected_items: nil)
+ @element = Element::MultiUsersSelect.new(
+ placeholder: placeholder,
+ action_id: action_id,
+ initial: initial,
+ emoji: emoji,
+ max_selected_items: max_selected_items
+ )
+
+ yield(@element) if block_given?
+
+ self
end
def as_json(*)
{
type: TYPE,