use slack_morphism::prelude::*;
pub fn get_plain_text_input(
view_submission: &SlackInteractionViewSubmissionEvent,
action_id_str: &str,
) -> Option<String> {
let state = view_submission.view.state_params.state.as_ref()?;
let values = &state.values;
for (_block_id, actions_map) in values.iter() {
for (action_id, value) in actions_map.iter() {
if action_id.to_string() == action_id_str {
return value.value.as_ref().map(|s| s.to_string());
}
}
}
None
}
pub fn get_selected_option_value(
view_submission: &SlackInteractionViewSubmissionEvent,
action_id_str: &str,
) -> Option<String> {
let state = view_submission.view.state_params.state.as_ref()?;
let values = &state.values;
for (_block_id, actions_map) in values.iter() {
for (action_id, value) in actions_map.iter() {
if action_id.to_string() == action_id_str {
return value.selected_option.as_ref().map(|opt| opt.value.clone());
}
}
}
None
}
pub fn get_selected_option_text(
view_submission: &SlackInteractionViewSubmissionEvent,
action_id_str: &str,
) -> Option<String> {
let state = view_submission.view.state_params.state.as_ref()?;
let values = &state.values;
for (_block_id, actions_map) in values.iter() {
for (action_id, value) in actions_map.iter() {
if action_id.to_string() == action_id_str {
return value
.selected_option
.as_ref()
.map(|opt| opt.text.text.clone());
}
}
}
None
}
pub fn get_selected_date(
view_submission: &SlackInteractionViewSubmissionEvent,
action_id_str: &str,
) -> Option<String> {
let state = view_submission.view.state_params.state.as_ref()?;
let values = &state.values;
for (_block_id, actions_map) in values.iter() {
for (action_id, value) in actions_map.iter() {
if action_id.to_string() == action_id_str {
return value.selected_date.as_ref().map(|d| d.to_string());
}
}
}
None
}
pub fn get_selected_time(
view_submission: &SlackInteractionViewSubmissionEvent,
action_id_str: &str,
) -> Option<String> {
let state = view_submission.view.state_params.state.as_ref()?;
let values = &state.values;
for (_block_id, actions_map) in values.iter() {
for (action_id, value) in actions_map.iter() {
if action_id.to_string() == action_id_str {
return value.selected_time.as_ref().map(|t| t.to_string());
}
}
}
None
}
pub fn get_selected_options(
view_submission: &SlackInteractionViewSubmissionEvent,
action_id_str: &str,
) -> Vec<String> {
let Some(state) = &view_submission.view.state_params.state else {
return Vec::new();
};
let values = &state.values;
for (_block_id, actions_map) in values.iter() {
for (action_id, value) in actions_map.iter() {
if action_id.to_string() == action_id_str {
return value
.selected_options
.as_ref()
.map(|options| options.iter().map(|opt| opt.value.clone()).collect())
.unwrap_or_default();
}
}
}
Vec::new()
}
pub fn get_private_metadata(
view_submission: &SlackInteractionViewSubmissionEvent,
) -> Option<String> {
let SlackView::Modal(modal_view) = &view_submission.view.view else {
return None;
};
modal_view.private_metadata.as_ref().map(|s| s.to_string())
}
pub fn get_user_select(
view_submission: &SlackInteractionViewSubmissionEvent,
action_id_str: &str,
) -> Option<String> {
let state = view_submission.view.state_params.state.as_ref()?;
let values = &state.values;
for (_block_id, actions_map) in values.iter() {
for (action_id, value) in actions_map.iter() {
if action_id.to_string() == action_id_str {
return value.selected_user.as_ref().map(|u| u.to_string());
}
}
}
None
}