Skip to content

Commit

Permalink
Merge branch 'master' into issue-405
Browse files Browse the repository at this point in the history
  • Loading branch information
seratch authored Feb 19, 2020
2 parents d45f209 + a2f546d commit 4f3f3ea
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 5 deletions.
7 changes: 6 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -36,14 +36,19 @@ event, there's a method to attach a listener function.
// Listen for an event from the Events API
app.event(eventType, fn);

// Listen for an action from a block element (buttons, menus, etc), dialog submission, message action, or legacy action
// Listen for an action from a block element (buttons, menus, etc)
app.action(actionId, fn);
// Listen for dialog submission, message action, or legacy action
app.action({ callback_id: callbackId }, fn);

// Listen for a slash command
app.command(commandName, fn);

// Listen for options requests (from menus with an external data source)
app.options(actionId, fn);

// Listen for modal view requests
app.view(callbackId, fn);
```

There's a special method that's provided as a convenience to handle Events API events with the type `message`. Also, you
Expand Down
12 changes: 11 additions & 1 deletion src/types/actions/block-action.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ export type BlockElementAction =
| MultiExternalSelectAction
| OverflowAction
| DatepickerAction
| RadioButtonsAction;
| RadioButtonsAction
| CheckboxesAction;

/**
* Any action from Slack's interactive elements
Expand Down Expand Up @@ -185,6 +186,15 @@ export interface RadioButtonsAction extends BasicElementAction<'radio_buttons'>
confirm?: Confirmation;
}

/**
* An action from a checkboxes element
*/
export interface CheckboxesAction extends BasicElementAction<'checkboxes'> {
selected_options: Option[];
initial_options?: Option[];
confirm?: Confirmation;
}

/**
* A Slack Block Kit element action wrapped in the standard metadata.
*
Expand Down
47 changes: 44 additions & 3 deletions src/types/view/index.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { StringIndexed } from '../helpers';
import { RespondArguments, AckFn } from '../utilities';
import { AckFn } from '../utilities';
import { View } from '@slack/types';

/**
* Known view action types
Expand All @@ -13,7 +14,7 @@ export interface SlackViewMiddlewareArgs<ViewActionType extends SlackViewAction
payload: ViewOutput;
view: this['payload'];
body: ViewActionType;
ack: AckFn<string | RespondArguments>;
ack: ViewAckFn<ViewActionType>;
}

interface PlainTextElementOutput {
Expand Down Expand Up @@ -80,7 +81,13 @@ export interface ViewOutput {
blocks: StringIndexed; // TODO: should this just be any?
close: PlainTextElementOutput | null;
submit: PlainTextElementOutput | null;
state: object; // TODO: this should probably be expanded in the future
state: {
values: {
[blockId: string]: {
[actionId: string]: any; // TODO: a union of all the input elements' output payload
};
};
};
hash: string;
private_metadata: string;
root_view_id: string | null;
Expand All @@ -89,3 +96,37 @@ export interface ViewOutput {
notify_on_close: boolean;
external_id?: string;
}

export interface ViewUpdateResponseAction {
response_action: 'update';
view: View;
}

export interface ViewPushResponseAction {
response_action: 'push';
view: View;
}

export interface ViewClearResponseAction {
response_action: 'clear';
}

export interface ViewErrorsResponseAction {
response_action: 'errors';
errors: {
[blockId: string]: string;
};
}

export type ViewResponseAction =
ViewUpdateResponseAction | ViewPushResponseAction | ViewClearResponseAction | ViewErrorsResponseAction;

/**
* Type function which given a view action `VA` returns a corresponding type for the `ack()` function. The function is
* used to acknowledge the receipt (and possibly signal failure) of an view submission or closure from a listener or
* middleware.
*/
type ViewAckFn<VA extends SlackViewAction = SlackViewAction> =
VA extends ViewSubmitAction ? AckFn<ViewResponseAction> :
// ViewClosedActions can only be acknowledged, there are no arguments
AckFn<void>;

0 comments on commit 4f3f3ea

Please sign in to comment.