+def divider_block():
+ return {
+ "type": "divider"
+ }
+
def text_block(body):
return {
"text": {
}
}
-def section_block(block):
- return {
+def section_block(block, block_id=None):
+
+ block = {
"type": "section",
**block
}
+ if block_id:
+ block['block_id'] = block_id
+
+ return block
+
def actions_block(*elements):
return {
"type": "actions",
"elements": list(elements)
}
-def button_block(label, name):
+def checkbox_block(label, text, name, checked=False):
+
+ element = {
+ "type": "checkboxes",
+ "action_id": name,
+ "options": [
+ {
+ "value": name,
+ "text": {
+ "type": "plain_text",
+ "text": text
+ }
+ }
+ ]
+ }
+
+ if checked:
+ element["initial_options"] = [{
+ "value": name,
+ "text": {
+ "type": "plain_text",
+ "text": text
+ }
+ }]
+
return {
+ "type": "input",
+ "block_id": name,
+ "element": element,
+ "optional": True,
+ "label": {
+ "type": "plain_text",
+ "text": label
+ }
+ }
+
+def button_block(label, name, extra=None):
+
+ block = {
"type": "button",
"text": {
"type": "plain_text",
"value": name
}
-def input_block(label, name, placeholder, optional=False):
+ if extra:
+ block['action_id'] = extra
+
+ return block
+
+def accessory_block(main, accessory):
+ return {
+ **main,
+ "accessory": {
+ **accessory
+ }
+ }
+
+def input_block(label, name, placeholder, initial_value=None, optional=False):
+
+ element = {
+ "type": "plain_text_input",
+ "action_id": name,
+ "placeholder": {
+ "type": "plain_text",
+ "text": placeholder,
+ }
+ }
+
+ if initial_value:
+ element["initial_value"] = initial_value
+
return {
"type": "input",
"block_id": name,
"optional": optional,
- "element": {
- "type": "plain_text_input",
- "action_id": name,
- "placeholder": {
- "type": "plain_text",
- "text": placeholder,
- }
- },
+ "element": element,
"label": {
"type": "plain_text",
"text": label
}
}
+
+def multi_select_block(label, name, placeholder, options,
+ initial_options=None):
+
+ multi_select = {
+ "action_id": name,
+ "type": "multi_static_select",
+ "placeholder": {
+ "type": "plain_text",
+ "text": placeholder
+ },
+ "options": [
+ {
+ "text": {
+ "type": "plain_text",
+ "text": option
+ },
+ "value": option
+ } for option in options
+ ]
+ }
+
+ if initial_options:
+ multi_select["initial_options"] = [
+ {
+ "text": {
+ "type": "plain_text",
+ "text": option
+ },
+ "value": option
+ } for option in initial_options
+ ]
+
+ return accessory_block(
+ section_block(text_block("*{}*".format(label)), block_id=name),
+ multi_select
+ )