import type { Confirmation, Option, PlainTextElement, RichTextBlock } from '@slack/types'; import type { FunctionInputs } from '../events'; import type { StringIndexed } from '../utilities'; import type { ViewOutput, ViewStateValue } from '../view'; /** * All known actions from in Slack's interactive elements * * This is a discriminated union. The discriminant is the `type` property. */ export type BlockElementAction = ButtonAction | FeedbackButtonsAction | IconButtonAction | UsersSelectAction | MultiUsersSelectAction | StaticSelectAction | MultiStaticSelectAction | ConversationsSelectAction | MultiConversationsSelectAction | ChannelsSelectAction | MultiChannelsSelectAction | ExternalSelectAction | MultiExternalSelectAction | OverflowAction | DatepickerAction | TimepickerAction | RadioButtonsAction | CheckboxesAction | PlainTextInputAction | RichTextInputAction; /** * Any action from Slack's interactive elements * * This type is used to represent actions that aren't known ahead of time. Each of the known element actions also * implement this interface. */ export interface BasicElementAction { type: T; block_id: string; action_id: string; action_ts: string; } /** * An action from a button element */ export interface ButtonAction extends BasicElementAction<'button'> { value?: string; text: PlainTextElement; url?: string; confirm?: Confirmation; } /** * An action from feedback buttons */ export interface FeedbackButtonsAction extends BasicElementAction<'feedback_buttons'> { value: string; text: PlainTextElement; } /** * An action from icon button */ export interface IconButtonAction extends BasicElementAction<'icon_button'> { icon: string; value: string; text: PlainTextElement; } /** * An action from a select menu with static options */ export interface StaticSelectAction extends BasicElementAction<'static_select'> { selected_option: { text: PlainTextElement; value: string; }; initial_option?: Option; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a multi select menu with static options */ export interface MultiStaticSelectAction extends BasicElementAction<'multi_static_select'> { selected_options: { text: PlainTextElement; value: string; }[]; initial_options?: Option[]; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a select menu with user list */ export interface UsersSelectAction extends BasicElementAction<'users_select'> { selected_user: string; initial_user?: string; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a multi select menu with user list */ export interface MultiUsersSelectAction extends BasicElementAction<'multi_users_select'> { selected_users: string[]; initial_users?: string[]; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a select menu with conversations list */ export interface ConversationsSelectAction extends BasicElementAction<'conversations_select'> { selected_conversation: string; initial_conversation?: string; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a multi select menu with conversations list */ export interface MultiConversationsSelectAction extends BasicElementAction<'multi_conversations_select'> { selected_conversations: string[]; initial_conversations?: string[]; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a select menu with channels list */ export interface ChannelsSelectAction extends BasicElementAction<'channels_select'> { selected_channel: string; initial_channel?: string; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a multi select menu with channels list */ export interface MultiChannelsSelectAction extends BasicElementAction<'multi_channels_select'> { selected_channels: string[]; initial_channels?: string[]; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a select menu with external data source */ export interface ExternalSelectAction extends BasicElementAction<'external_select'> { selected_option?: Option; initial_option?: Option; placeholder?: PlainTextElement; min_query_length?: number; confirm?: Confirmation; } /** * An action from a multi select menu with external data source */ export interface MultiExternalSelectAction extends BasicElementAction<'multi_external_select'> { selected_options?: Option[]; initial_options?: Option[]; placeholder?: PlainTextElement; min_query_length?: number; confirm?: Confirmation; } /** * An action from an overflow menu element */ export interface OverflowAction extends BasicElementAction<'overflow'> { selected_option: { text: PlainTextElement; value: string; }; confirm?: Confirmation; } /** * An action from a date picker element */ export interface DatepickerAction extends BasicElementAction<'datepicker'> { selected_date: string | null; initial_date?: string; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a time picker element */ export interface TimepickerAction extends BasicElementAction<'timepicker'> { selected_time: string | null; initial_time?: string; placeholder?: PlainTextElement; confirm?: Confirmation; } /** * An action from a radio button element */ export interface RadioButtonsAction extends BasicElementAction<'radio_buttons'> { selected_option: Option | null; initial_option?: Option; confirm?: Confirmation; } /** * An action from a checkboxes element */ export interface CheckboxesAction extends BasicElementAction<'checkboxes'> { selected_options: Option[]; initial_options?: Option[]; confirm?: Confirmation; } /** * An action from a plain_text_input element (must use dispatch_action: true) */ export interface PlainTextInputAction extends BasicElementAction<'plain_text_input'> { value: string; } /** * An action from a rich_text_input element (must use dispatch_action: true) */ export interface RichTextInputAction extends BasicElementAction<'rich_text_input'> { rich_text_value: RichTextBlock; } /** * A Slack Block Kit element action wrapped in the standard metadata. * * This describes the entire JSON-encoded body of a request from Slack's Block Kit interactive components. */ export interface BlockAction { type: 'block_actions'; actions: ElementAction[]; team: { id: string; domain: string; enterprise_id?: string; enterprise_name?: string; } | null; user: { id: string; /** * name will be present if the block_action originates from the Home tab */ name?: string; username: string; team_id?: string; }; channel?: { id: string; name: string; }; message?: { type: 'message'; user?: string; ts: string; text?: string; [key: string]: any; }; view?: ViewOutput; state?: { values: { [blockId: string]: { [actionId: string]: ViewStateValue; }; }; }; token: string; response_url: string; trigger_id: string; api_app_id: string; container: StringIndexed; app_unfurl?: any; is_enterprise_install?: boolean; enterprise?: { id: string; name: string; }; /** * An expiring token generated for the context of a workflow step. * @see {@link https://docs.slack.dev/authentication/tokens/#wfb} */ bot_access_token?: string; /** * Information about the executed step. * @see {@link https://docs.slack.dev/workflows/workflow-steps/} * @see {@link https://docs.slack.dev/tools/bolt-js/concepts/custom-steps/} */ function_data?: { /** * A unique ID for the step being executed. * @see {@link https://docs.slack.dev/workflows/workflow-steps/} * @see {@link https://docs.slack.dev/tools/bolt-js/concepts/custom-steps/} */ execution_id: string; /** * Details about the step. * @see {@link https://docs.slack.dev/workflows/workflow-steps/} * @see {@link https://docs.slack.dev/tools/bolt-js/concepts/custom-steps/} */ function: { /** * The unique callback ID of the step. * @see {@link https://docs.slack.dev/workflows/workflow-steps/#create} * @see {@link https://docs.slack.dev/tools/bolt-js/concepts/custom-steps/} */ callback_id: string; }; /** * Values of input parameters for the executed step. * @see {@link https://docs.slack.dev/workflows/workflow-steps/} * @see {@link https://docs.slack.dev/tools/bolt-js/concepts/custom-steps/} * @see {@link https://docs.slack.dev/tools/bolt-js/tutorials/custom-steps/#inputs-outputs} */ inputs: FunctionInputs; }; } export type BlockButtonAction = BlockAction; export type BlockFeedbackButtonsAction = BlockAction; export type BlockIconButtonAction = BlockAction; export type BlockStaticSelectAction = BlockAction; export type BlockUsersSelectAction = BlockAction; export type BlockConversationsSelectAction = BlockAction; export type BlockChannelsSelectAction = BlockAction; export type BlockExternalSelectAction = BlockAction; export type BlockOverflowAction = BlockAction; export type BlockDatepickerAction = BlockAction; export type BlockTimepickerAction = BlockAction; export type BlockRadioButtonsAction = BlockAction; export type BlockCheckboxesAction = BlockAction; export type BlockPlainTextInputAction = BlockAction; //# sourceMappingURL=block-action.d.ts.map