Skip to content

Commit d821fad

Browse files
authored
Merge pull request #437 from seratch/option-text
Update composition.OptionObject to have mrkdwn for some cases
2 parents 721d1f3 + 44418d4 commit d821fad

6 files changed

Lines changed: 44 additions & 14 deletions

File tree

slack-api-client/src/test/java/util/sample_json_generation/SampleObjects.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import com.slack.api.model.*;
55
import com.slack.api.model.block.*;
66
import com.slack.api.model.block.composition.ConfirmationDialogObject;
7+
import com.slack.api.model.block.composition.OptionObject;
78
import com.slack.api.model.block.composition.PlainTextObject;
89
import com.slack.api.model.block.composition.TextObject;
910
import com.slack.api.model.block.element.BlockElement;
@@ -65,17 +66,22 @@ private Json() {
6566

6667
public static TextObject TextObject = initProperties(PlainTextObject.builder().build());
6768

69+
public static OptionObject Option = initProperties(OptionObject.builder()
70+
.text(TextObject)
71+
.description(PlainTextObject.builder().build())
72+
.build());
73+
6874
public static ConfirmationDialogObject Confirm = ConfirmationDialogObject.builder().text(TextObject).build();
6975

7076
public static List<BlockElement> BlockElements = asElements(
7177
initProperties(button(b -> b.confirm(Confirm))),
7278
initProperties(channelsSelect(c -> c.confirm(Confirm))),
7379
initProperties(conversationsSelect(c -> c.confirm(Confirm))),
7480
initProperties(datePicker(d -> d.confirm(Confirm))),
75-
initProperties(externalSelect(e -> e.confirm(Confirm))),
81+
initProperties(externalSelect(e -> e.initialOption(Option).confirm(Confirm))),
7682
initProperties(com.slack.api.model.block.element.BlockElements.image(i -> i)),
7783
initProperties(overflowMenu(o -> o.confirm(Confirm))),
78-
initProperties(staticSelect(s -> s.confirm(Confirm))),
84+
initProperties(staticSelect(s -> s.initialOption(Option).confirm(Confirm))),
7985
initProperties(usersSelect(u -> u.confirm(Confirm)))
8086
);
8187
public static List<ContextBlockElement> ContextBlockElements = asContextElements(

slack-api-model/src/main/java/com/slack/api/model/block/composition/BlockCompositions.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ public static OptionObject option(ModelConfigurator<OptionObject.OptionObjectBui
6666
return configurator.configure(OptionObject.builder()).build();
6767
}
6868

69-
public static OptionObject option(PlainTextObject text, String value) {
69+
public static OptionObject option(TextObject text, String value) {
7070
return OptionObject.builder().text(text).value(value).build();
7171
}
7272

slack-api-model/src/main/java/com/slack/api/model/block/composition/OptionObject.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,22 @@
1515
public class OptionObject {
1616

1717
/**
18-
* The formatting to use for this text object. Can be one of plain_text or mrkdwn.
18+
* A text object that defines the text shown in the option on the menu.
19+
* Overflow, select, and multi-select menus can only use plain_text objects,
20+
* while radio buttons and checkboxes can use mrkdwn text objects.
21+
* Maximum length for the text in this field is 75 characters.
1922
*/
20-
private PlainTextObject text;
23+
private TextObject text;
2124

2225
/**
23-
* The text for the block. This field accepts any of the standard text formatting markup when type is mrkdwn.
26+
* The string value that will be passed to your app when this option is chosen.
27+
* Maximum length for this field is 75 characters.
2428
*/
2529
private String value;
2630

2731
/**
28-
* A plain_text https://api.slack.com/reference/block-kit/composition-objects#text
29-
* only text object that defines a line of descriptive text shown below the text field beside the radio button.
32+
* A plain_text only text object that defines a line of descriptive text shown
33+
* below the text field beside the radio button.
3034
* Maximum length for the text object within this field is 75 characters.
3135
*/
3236
private PlainTextObject description;
@@ -38,6 +42,7 @@ public class OptionObject {
3842
* <p>
3943
* Maximum length for this field is 3000 characters.
4044
* If you're using url, you'll still receive an interaction payload and will need to send an acknowledgement response.
45+
* A URL to load in the user's browser when the option is clicked.
4146
*/
4247
private String url;
4348
}

slack-api-model/src/test/java/test_locally/api/model/ModelsTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import com.slack.api.model.view.ViewState;
1313
import org.junit.Test;
1414

15+
import java.util.Arrays;
1516
import java.util.HashMap;
1617
import java.util.List;
1718
import java.util.Map;
@@ -231,4 +232,19 @@ public void blockCompositions() {
231232
assertNotNull(confirmationDialog);
232233
}
233234

235+
@Test
236+
public void blockCompositions_radio_buttons_checkboxes() {
237+
MarkdownTextObject mto = markdownText(r -> r.text("foo").verbatim(false));
238+
assertNotNull(mto);
239+
240+
OptionObject opt = option(mto, "value");
241+
assertNotNull(opt);
242+
243+
RadioButtonsElement radioButtons = radioButtons(r -> r.actionId("a").initialOption(opt).options(Arrays.asList(opt)));
244+
assertNotNull(radioButtons);
245+
246+
CheckboxesElement checkboxes = checkboxes(r -> r.actionId("a").initialOptions(Arrays.asList(opt)).options(Arrays.asList(opt)));
247+
assertNotNull(checkboxes);
248+
}
249+
234250
}

slack-app-backend/src/test/java/test_locally/sample_json_generation/InteractiveMessagesPayloadDumpTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ private BlockActionPayload buildBlockActionPayload() {
5555
action.getConfirm().setDeny(new PlainTextObject());
5656
action.getConfirm().setTitle(new PlainTextObject());
5757
action.getConfirm().setText(new PlainTextObject());
58+
action.setInitialOption(SampleObjects.Option);
5859
List<BlockActionPayload.Action> actions = Arrays.asList(action);
5960
return BlockActionPayload.builder()
6061
.team(new BlockActionPayload.Team())

slack-app-backend/src/test/java/util/sample_json_generation/SampleObjects.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,7 @@
33
import com.google.gson.JsonElement;
44
import com.slack.api.model.*;
55
import com.slack.api.model.block.*;
6-
import com.slack.api.model.block.composition.ConfirmationDialogObject;
7-
import com.slack.api.model.block.composition.MarkdownTextObject;
8-
import com.slack.api.model.block.composition.PlainTextObject;
9-
import com.slack.api.model.block.composition.TextObject;
6+
import com.slack.api.model.block.composition.*;
107
import com.slack.api.model.block.element.*;
118
import com.slack.api.util.json.GsonFactory;
129

@@ -58,6 +55,11 @@ private Json() {
5855

5956
public static TextObject TextObject = initProperties(PlainTextObject.builder().build());
6057

58+
public static OptionObject Option = initProperties(OptionObject.builder()
59+
.text(TextObject)
60+
.description(PlainTextObject.builder().build())
61+
.build());
62+
6163
public static ConfirmationDialogObject Confirm = ConfirmationDialogObject.builder().text(TextObject).build();
6264

6365
public static ConversationsFilter conversationsFilter = ConversationsFilter.builder().include(Arrays.asList("")).build();
@@ -68,11 +70,11 @@ private Json() {
6870
initProperties(ConversationsSelectElement.builder().confirm(Confirm).filter(conversationsFilter).build()),
6971
initProperties(MultiConversationsSelectElement.builder().confirm(Confirm).filter(conversationsFilter).build()),
7072
initProperties(DatePickerElement.builder().confirm(Confirm).build()),
71-
initProperties(ExternalSelectElement.builder().confirm(Confirm).build()),
73+
initProperties(ExternalSelectElement.builder().initialOption(Option).confirm(Confirm).build()),
7274
initProperties(MultiExternalSelectElement.builder().confirm(Confirm).build()),
7375
initProperties(ImageElement.builder().build()),
7476
initProperties(OverflowMenuElement.builder().confirm(Confirm).build()),
75-
initProperties(StaticSelectElement.builder().confirm(Confirm).build()),
77+
initProperties(StaticSelectElement.builder().initialOption(Option).confirm(Confirm).build()),
7678
initProperties(MultiStaticSelectElement.builder().confirm(Confirm).build()),
7779
initProperties(UsersSelectElement.builder().confirm(Confirm).build()),
7880
initProperties(MultiUsersSelectElement.builder().confirm(Confirm).build())

0 commit comments

Comments
 (0)