Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions block-kit/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Read the [docs](https://docs.slack.dev/block-kit/) to learn concepts behind thes
- **[Broadcast](https://docs.slack.dev/reference/block-kit/block-elements/broadcast-element)**: Displays a broadcast mention such as here, channel, or everyone. [Implementation](./src/main/java/elements/Broadcast.java).
- **[Button](https://docs.slack.dev/reference/block-kit/block-elements/button-element)**: Allows users a direct path to performing basic actions. [Implementation](./src/main/java/elements/Button.java).
- **[Channel](https://docs.slack.dev/reference/block-kit/block-elements/channel-element)**: Renders as a mention of a channel. [Implementation](./src/main/java/elements/Channel.java).
- **[Checkboxes](https://docs.slack.dev/reference/block-kit/block-elements/checkboxes-element)**: Allows users to choose multiple items from a list of options. [Implementation](./src/main/java/elements/Checkboxes.java).
- **[Color](https://docs.slack.dev/reference/block-kit/block-elements/color-element)**: Displays a color swatch from a hex value. [Implementation](./src/main/java/elements/Color.java).
- **[Date](https://docs.slack.dev/reference/block-kit/block-elements/date-element)**: Displays a formatted, localized date. [Implementation](./src/main/java/elements/Date.java).
- **[Date picker](https://docs.slack.dev/reference/block-kit/block-elements/date-picker-element)**: Allows users to select a date from a calendar style UI. [Implementation](./src/main/java/elements/DatePicker.java).
Expand Down
60 changes: 60 additions & 0 deletions block-kit/src/main/java/elements/Checkboxes.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package elements;

import com.slack.api.model.block.Blocks;
import com.slack.api.model.block.composition.BlockCompositions;
import com.slack.api.model.block.composition.OptionObject;
import com.slack.api.model.block.element.BlockElements;
import com.slack.api.model.view.View;
import com.slack.api.model.view.ViewClose;
import com.slack.api.model.view.ViewSubmit;
import com.slack.api.model.view.ViewTitle;
import java.util.List;

/**
* Allows users to choose multiple items from a list of options.
* {@link https://docs.slack.dev/reference/block-kit/block-elements/checkboxes-element/}
*/
public class Checkboxes {
/**
* A section block containing a group of checkboxes.
*/
public static View example01() {
View view = View.builder()
.type("modal")
.title(ViewTitle.builder()
.type("plain_text")
.text("My App")
.emoji(true)
.build())
.submit(ViewSubmit.builder()
.type("plain_text")
.text("Submit")
.emoji(true)
.build())
.close(ViewClose.builder()
.type("plain_text")
.text("Cancel")
.emoji(true)
.build())
.blocks(List.of(Blocks.section(s -> s.text(
BlockCompositions.plainText("Check out these charming checkboxes"))
.accessory(BlockElements.checkboxes(c -> c.actionId("this_is_an_action_id")
.initialOptions(List.of(OptionObject.builder()
.value("A1")
.text(BlockCompositions.plainText("Checkbox 1"))
.build()))
.options(List.of(
OptionObject.builder()
.value("A1")
.text(BlockCompositions.plainText("Checkbox 1"))
.build(),
OptionObject.builder()
.value("A2")
.text(BlockCompositions.plainText("Checkbox 2"))
.description(
BlockCompositions.markdownText("*A description of option two*"))

Check failure on line 55 in block-kit/src/main/java/elements/Checkboxes.java

View workflow job for this annotation

GitHub Actions / maven@java17 (block-kit)

incompatible types: com.slack.api.model.block.composition.MarkdownTextObject cannot be converted to com.slack.api.model.block.composition.PlainTextObject

Check failure on line 55 in block-kit/src/main/java/elements/Checkboxes.java

View workflow job for this annotation

GitHub Actions / maven@java17 (block-kit)

incompatible types: com.slack.api.model.block.composition.MarkdownTextObject cannot be converted to com.slack.api.model.block.composition.PlainTextObject
.build())))))))
.build();
return view;
}
}
79 changes: 79 additions & 0 deletions block-kit/src/test/java/elements/CheckboxesTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package elements;

import static org.junit.jupiter.api.Assertions.assertEquals;

import com.google.gson.JsonParser;
import com.slack.api.model.view.View;
import com.slack.api.util.json.GsonFactory;
import org.junit.jupiter.api.Test;

public class CheckboxesTest {
@Test
public void testExample01() {
View view = Checkboxes.example01();
String actual = GsonFactory.createSnakeCase().toJson(view);
String expected = """
{
"type": "modal",
"title": {
"type": "plain_text",
"text": "My App",
"emoji": true
},
"submit": {
"type": "plain_text",
"text": "Submit",
"emoji": true
},
"close": {
"type": "plain_text",
"text": "Cancel",
"emoji": true
},
"blocks": [
{
"type": "section",
"text": {
"type": "plain_text",
"text": "Check out these charming checkboxes"
},
"accessory": {
"type": "checkboxes",
"action_id": "this_is_an_action_id",
"initial_options": [
{
"value": "A1",
"text": {
"type": "plain_text",
"text": "Checkbox 1"
}
}
],
"options": [
{
"value": "A1",
"text": {
"type": "plain_text",
"text": "Checkbox 1"
}
},
{
"value": "A2",
"text": {
"type": "plain_text",
"text": "Checkbox 2"
},
"description": {
"type": "mrkdwn",
"text": "*A description of option two*"
}
}
]
}
}
]
}
""";
assertEquals(JsonParser.parseString(expected), JsonParser.parseString(actual));
}
}
Loading