-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* feat: public channels multi-select * fix multi-select validation comments * fix tests
- Loading branch information
1 parent
cce7397
commit ba6307a
Showing
7 changed files
with
368 additions
and
21 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,75 @@ | ||
use std::borrow::Cow; | ||
|
||
use serde::{Deserialize, Serialize}; | ||
use validator::Validate; | ||
|
||
use crate::{compose::Confirm, | ||
elems::select::public_channel::build, | ||
text, | ||
val_helpr::ValidationResult}; | ||
|
||
/// # Public Channel Select | ||
/// [slack api docs 🔗](https://api.slack.com/reference/block-kit/block-elements#channel_select) | ||
/// | ||
/// This select menu will populate its options with a list of | ||
/// public channels visible to the current user in the active workspace. | ||
#[derive(Clone, Debug, Deserialize, Hash, PartialEq, Serialize, Validate)] | ||
pub struct PublicChannel<'a> { | ||
#[validate(custom = "crate::elems::select::validate::placeholder")] | ||
pub(in crate::elems::select) placeholder: text::Text, | ||
|
||
#[validate(length(max = 255))] | ||
pub(in crate::elems::select) action_id: Cow<'a, str>, | ||
|
||
#[serde(skip_serializing_if = "Option::is_none")] | ||
#[validate] | ||
pub(in crate::elems::select) confirm: Option<Confirm>, | ||
|
||
#[serde(skip_serializing_if = "Option::is_none")] | ||
pub(in crate::elems::select) initial_channels: Option<Cow<'a, [String]>>, | ||
|
||
#[validate(range(min = 1))] | ||
pub(in crate::elems::select) max_selected_items: Option<u32>, | ||
} | ||
|
||
impl<'a> PublicChannel<'a> { | ||
/// Build a new conversation multi-select element | ||
/// | ||
/// # Examples | ||
/// ``` | ||
/// // TODO(#130) | ||
/// ``` | ||
pub fn builder() -> build::MultiPublicChannelBuilderInit<'a> { | ||
build::MultiPublicChannelBuilderInit::new() | ||
} | ||
|
||
/// Validate that this Public Channel Select element | ||
/// agrees with Slack's model requirements | ||
/// | ||
/// # Errors | ||
/// - If `from_placeholder_and_action_id` was called with | ||
/// `placeholder` longer than 150 chars | ||
/// - If `from_placeholder_and_action_id` was called with | ||
/// `action_id` longer than 255 chars | ||
/// | ||
/// # Example | ||
/// ``` | ||
/// use slack_blocks::block_elements::select; | ||
/// | ||
/// let select = select::multi::PublicChannel::builder().placeholder( | ||
/// r#"Hey I really would appreciate it if you chose | ||
/// a channel relatively soon, so that we can figure out | ||
/// where we need to send this poll, ok? it's kind of | ||
/// important that you specify where this poll should be | ||
/// sent, in case we haven't made that super clear. | ||
/// If you understand, could you pick a channel, already??"#, | ||
/// ) | ||
/// .action_id("ABC123") | ||
/// .build(); | ||
/// | ||
/// assert!(matches!(select.validate(), Err(_))) | ||
/// ``` | ||
pub fn validate(&self) -> ValidationResult { | ||
Validate::validate(&self) | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.