Skip to content

Commit

Permalink
* Added ability to edit an app name
Browse files Browse the repository at this point in the history
  • Loading branch information
korsakovs committed Mar 12, 2024
1 parent 8dfc457 commit ab9f978
Show file tree
Hide file tree
Showing 15 changed files with 117 additions and 17 deletions.
7 changes: 7 additions & 0 deletions thankyou/core/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,17 @@ class Company:
enable_attaching_files: bool
enable_private_messages: bool
max_attached_files_num: int
custom_merci_app_name: str = None

uuid: UUID_Type = field(default_factory=lambda: str(uuid.uuid4()))
deleted: bool = False

@property
def merci_app_name(self) -> str:
if self.custom_merci_app_name and self.custom_merci_app_name.strip():
return self.custom_merci_app_name.strip()
return "Merci!"


@dataclass
class ThankYouType:
Expand Down
1 change: 1 addition & 0 deletions thankyou/dao/sqlalchemy.py
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ def __init__(self, encryption_secret_key: str = None, echo: bool = False):
Column("enable_attaching_files", Boolean, nullable=False),
Column("enable_private_messages", Boolean, nullable=False),
Column("max_attached_files_num", Integer, nullable=False),
Column("custom_merci_app_name", String(256), nullable=True),
)

self._thank_you_types_table = Table(
Expand Down
12 changes: 6 additions & 6 deletions thankyou/slackbot/blocks/homepage.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ def home_page_actions_block(selected: str = "my_updates") -> ActionsBlock:
return ActionsBlock(elements=elements)


def home_page_welcome_blocks() -> List[Block]:
def home_page_welcome_blocks(app_name: str) -> List[Block]:
return [
HeaderBlock(text="Welcome to the Merci! application"),
HeaderBlock(text=f"Welcome to the {app_name} application"),
SectionBlock(
text="Recognizing and appreciating your team is a cornerstone of a motivated workforce. "
"The Merci! Slack application provides a seamless way for you and your colleagues to express "
f"The {app_name} Slack application provides a seamless way for you and your colleagues to express "
"gratitude and foster a positive workplace culture."
),
SectionBlock(
Expand Down Expand Up @@ -123,8 +123,8 @@ def _format_date(d: date):
])


def home_page_hidden_messages_warn_block(slack_channel_with_all_messages: str = None, hidden_messages_num: int = None) \
-> Optional[ContextBlock]:
def home_page_hidden_messages_warn_block(app_name: str, slack_channel_with_all_messages: str = None,
hidden_messages_num: int = None) -> Optional[ContextBlock]:
if slack_channel_with_all_messages:
if hidden_messages_num and hidden_messages_num > 0:
text = (f"Only the latest messages are shown below. To read all the Thank You messages, "
Expand All @@ -135,7 +135,7 @@ def home_page_hidden_messages_warn_block(slack_channel_with_all_messages: str =
else:
if hidden_messages_num and hidden_messages_num > 0:
text = (f"Only the latest messages are shown below. To read all the Thank You messages, "
f"please ask your Slack administrator to configure the Merci! application, so the all "
f"please ask your Slack administrator to configure the {app_name} application, so the all "
f"Thank You messages are forwarded to a public slack channel.")
else:
text = None
Expand Down
6 changes: 4 additions & 2 deletions thankyou/slackbot/handlers/common.py
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,8 @@ def publish_configuration_view(client, company: Company, user_id: str):
is_admin = is_user_an_admin(client=client, company_admins=company.admins, slack_user_id=user_id)

if not is_admin:
view = configuration_no_access_view(admin_slack_ids=[admin.slack_user_id for admin in company.admins])
view = configuration_no_access_view(app_name=company.merci_app_name,
admin_slack_ids=[admin.slack_user_id for admin in company.admins])
else:
view = configuration_view(
thank_you_types=dao.read_thank_you_types(company_uuid=company.uuid),
Expand All @@ -165,7 +166,8 @@ def publish_configuration_view(client, company: Company, user_id: str):
enable_attaching_files=company.enable_attaching_files,
max_attached_files_num=company.max_attached_files_num,
enable_private_messages=company.enable_private_messages,
enable_private_message_counting_in_leaderboard=company.enable_private_message_counting_in_leaderboard
enable_private_message_counting_in_leaderboard=company.enable_private_message_counting_in_leaderboard,
app_name=company.merci_app_name
)

client.views_publish(
Expand Down
31 changes: 31 additions & 0 deletions thankyou/slackbot/handlers/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from thankyou.dao import dao
from thankyou.slackbot.handlers.common import publish_configuration_view
from thankyou.slackbot.utils.company import get_or_create_company_by_body
from thankyou.slackbot.views.appnamedialog import app_name_dialog
from thankyou.slackbot.views.thankyoutypedialog import thank_you_type_dialog


Expand Down Expand Up @@ -40,6 +41,36 @@ def home_page_configuration_admin_slack_user_ids_value_changed_action_handler(bo
)


def home_page_configuration_edit_app_name_button_clicked_handler(body, client, logger):
logger.info(body)
company = get_or_create_company_by_body(body)

client.views_open(
trigger_id=body["trigger_id"],
view=app_name_dialog(app_name=company.merci_app_name)
)


def edit_merci_app_name_dialog_save_button_clicked_handler(body, client, logger):
logger.info(body)
user_id = body["user"]["id"]
company = get_or_create_company_by_body(body)

new_company_name: str = body["view"]["state"]["values"]["edit_merci_app_name_dialog_app_name_block"][
"edit_merci_app_name_dialog_app_name_action"]["value"]

if new_company_name.strip():
company.custom_merci_app_name = new_company_name.strip()
else:
company.custom_merci_app_name = None

publish_configuration_view(
client=client,
company=company,
user_id=user_id
)


def home_page_configuration_enable_sharing_in_a_slack_channel_value_changed_action_handler(body, client, logger):
logger.info(body)
user_id = body["user"]["id"]
Expand Down
5 changes: 5 additions & 0 deletions thankyou/slackbot/handlers/homepage.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ def app_home_opened_action_handler(client: WebClient, event, logger):

view = home_page_company_thank_yous_view(
thank_you_messages=messages,
app_name=company.merci_app_name,
current_user_slack_id=user_id,
enable_leaderboard=company.enable_leaderboard,
slack_channel_with_all_messages=slack_channel_with_all_messages,
Expand Down Expand Up @@ -74,6 +75,7 @@ def home_page_company_thank_you_button_clicked_action_handler(body, client, logg
view=home_page_company_thank_yous_view(
thank_you_messages=dao.read_thank_you_messages(company_uuid=company.uuid, last_n=NUMBER_OF_MESSAGES_TO_SHOW,
private=False),
app_name=company.merci_app_name,
current_user_slack_id=user_id,
enable_leaderboard=company.enable_leaderboard,
slack_channel_with_all_messages=slack_channel_with_all_messages,
Expand Down Expand Up @@ -101,6 +103,7 @@ def home_page_show_leaders_button_clicked_action_handler(body, client, logger):
view=home_page_company_thank_yous_view(
thank_you_messages=dao.read_thank_you_messages(company_uuid=company.uuid, last_n=NUMBER_OF_MESSAGES_TO_SHOW,
private=False),
app_name=company.merci_app_name,
current_user_slack_id=user_id,
sender_leaders=senders_receivers_stats.sender_leaders,
receiver_leaders=senders_receivers_stats.receiver_leaders,
Expand Down Expand Up @@ -150,6 +153,7 @@ def home_page_say_thank_you_button_clicked_action_handler(body, client, logger):
client.views_open(
trigger_id=body["trigger_id"],
view=thank_you_dialog_view(
app_name=company.merci_app_name,
thank_you_types=dao.read_thank_you_types(company_uuid=company.uuid),
enable_rich_text=company.enable_rich_text_in_thank_you_messages,
enable_company_values=company.enable_company_values,
Expand Down Expand Up @@ -180,6 +184,7 @@ def home_page_hide_welcome_message_button_clicked_action_handler(body, client, l
view=home_page_company_thank_yous_view(
thank_you_messages=dao.read_thank_you_messages(company_uuid=company.uuid, last_n=NUMBER_OF_MESSAGES_TO_SHOW,
private=False),
app_name=company.merci_app_name,
current_user_slack_id=employee.slack_user_id,
enable_leaderboard=company.enable_leaderboard,
slack_channel_with_all_messages=company.share_messages_in_slack_channel,
Expand Down
2 changes: 2 additions & 0 deletions thankyou/slackbot/handlers/shortcuts.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ def say_thank_you_global_shortcut_action_handler(body, client, logger):
client.views_open(
trigger_id=body["trigger_id"],
view=thank_you_dialog_view(
app_name=company.merci_app_name,
thank_you_types=dao.read_thank_you_types(company_uuid=company.uuid),
enable_rich_text=company.enable_rich_text_in_thank_you_messages,
enable_company_values=company.enable_company_values,
Expand Down Expand Up @@ -63,6 +64,7 @@ def say_thank_you_message_shortcut_action_handler(body, client, logger):
client.views_open(
trigger_id=body["trigger_id"],
view=thank_you_dialog_view(
app_name=company.merci_app_name,
thank_you_types=dao.read_thank_you_types(company_uuid=company.uuid),
enable_rich_text=company.enable_rich_text_in_thank_you_messages,
enable_company_values=company.enable_company_values,
Expand Down
1 change: 1 addition & 0 deletions thankyou/slackbot/handlers/slashcommands.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ def merci_slash_command_action_handler(body, client, logger):
client.views_open(
trigger_id=body["trigger_id"],
view=thank_you_dialog_view(
app_name=company.merci_app_name,
thank_you_types=dao.read_thank_you_types(company_uuid=company.uuid),
enable_rich_text=company.enable_rich_text_in_thank_you_messages,
enable_company_values=company.enable_company_values,
Expand Down
4 changes: 3 additions & 1 deletion thankyou/slackbot/handlers/thankyoudialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,8 @@ def message_ts(response_: SlackResponse):
text=f"Your thank you message could not be "
f"delivered to the Slack channel "
f"<#{thank_you_message.slash_command_slack_channel_id}>. "
f"Are you sure that the Merci! application was invited to this channel? "
f"Are you sure that the {company.merci_app_name} application was invited "
f"to this channel? "
f"We will deliver your message directly to the receivers",
channel=thank_you_message.author_slack_user_id,
unfurl_links=False,
Expand Down Expand Up @@ -263,6 +264,7 @@ def invite_users():
user_id=user_id,
view=home_page_company_thank_yous_view(
thank_you_messages=dao.read_thank_you_messages(company_uuid=company.uuid, last_n=20, private=False),
app_name=company.merci_app_name,
current_user_slack_id=user_id,
enable_leaderboard=company.enable_leaderboard,
show_welcome_message=not employee.closed_welcome_message
Expand Down
2 changes: 2 additions & 0 deletions thankyou/slackbot/handlers/thankyoumessage.py
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ def thank_you_message_overflow_menu_clicked_handler(client, body, logger):
message.images = []
try:
client.views_open(trigger_id=body["trigger_id"], view=thank_you_dialog_view(
app_name=company.merci_app_name,
state=message,
thank_you_types=dao.read_thank_you_types(company_uuid=company.uuid),
enable_rich_text=company.enable_rich_text_in_thank_you_messages,
Expand Down Expand Up @@ -240,6 +241,7 @@ def thank_you_deletion_dialog_delete_button_clicked(client: WebClient, body, log
user_id=user_id,
view=home_page_company_thank_yous_view(
thank_you_messages=dao.read_thank_you_messages(company_uuid=company.uuid, last_n=20, private=False),
app_name=company.merci_app_name,
current_user_slack_id=user_id,
enable_leaderboard=company.enable_leaderboard,
show_welcome_message=not employee.closed_welcome_message
Expand Down
15 changes: 14 additions & 1 deletion thankyou/slackbot/utils/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,8 @@
home_page_configuration_enable_weekly_thank_you_limit_value_changed_action_handler, \
home_page_configuration_enable_sharing_in_a_slack_channel_value_changed_action_handler, \
home_page_configuration_enable_private_messages_value_changed_action_handler, \
handle_home_page_configuration_enable_private_message_counting_in_leaderboard_value_changed_action_handler
handle_home_page_configuration_enable_private_message_counting_in_leaderboard_value_changed_action_handler, \
home_page_configuration_edit_app_name_button_clicked_handler, edit_merci_app_name_dialog_save_button_clicked_handler
from thankyou.slackbot.handlers.homepage import app_home_opened_action_handler, \
home_page_company_thank_you_button_clicked_action_handler, home_page_my_thank_you_button_clicked_action_handler, \
home_page_say_thank_you_button_clicked_action_handler, home_page_show_leaders_button_clicked_action_handler, \
Expand Down Expand Up @@ -203,6 +204,18 @@ def _home_page_configuration_admin_slack_user_ids_value_changed_action_handler(a
home_page_configuration_admin_slack_user_ids_value_changed_action_handler(body, client, logger)


@app_event(EventType.Action, "home_page_configuration_edit_app_name_button_clicked")
def _home_page_configuration_edit_app_name_button_clicked_handler(ack, client, body, logger):
ack()
home_page_configuration_edit_app_name_button_clicked_handler(body, client, logger)


@app_event(EventType.View, "edit_merci_app_name_dialog_save_button_clicked")
def _edit_merci_app_name_dialog_save_button_clicked_handler(ack, client, body, logger):
ack()
edit_merci_app_name_dialog_save_button_clicked_handler(body, client, logger)


@app_event(EventType.Action, "home_page_configuration_enable_sharing_in_a_slack_channel_value_changed")
def _home_page_configuration_enable_sharing_in_a_slack_channel_value_changed_action_handler(ack, client, body, logger):
ack()
Expand Down
22 changes: 22 additions & 0 deletions thankyou/slackbot/views/appnamedialog.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
from slack_sdk.models.blocks import InputBlock, PlainTextInputElement
from slack_sdk.models.views import View


def app_name_dialog(app_name: str):
return View(
type="modal",
callback_id="edit_merci_app_name_dialog_save_button_clicked",
title="Edit the app name",
submit="Save",
close="Cancel",
blocks=[
InputBlock(
label="Name",
block_id="edit_merci_app_name_dialog_app_name_block",
element=PlainTextInputElement(
action_id="edit_merci_app_name_dialog_app_name_action",
initial_value=app_name
)
),
]
)
16 changes: 13 additions & 3 deletions thankyou/slackbot/views/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from thankyou.slackbot.blocks.homepage import home_page_actions_block


def configuration_no_access_view(admin_slack_ids: List[str] = None):
def configuration_no_access_view(app_name: str, admin_slack_ids: List[str] = None):
admins_str = ""
if admin_slack_ids:
admins_str = (" You can also ask " + ", ".join(f"<@{admin_slack_id}>" for admin_slack_id in admin_slack_ids)
Expand All @@ -31,7 +31,7 @@ def configuration_no_access_view(admin_slack_ids: List[str] = None):
DividerBlock(),
SectionBlock(
text="Unfortunately, you don't have access to the app configuration. Are you sure you need "
"to configure the \"Merci!\" application? If so, ask you Slack admins to add you "
f"to configure the \"{app_name}\" application? If so, ask you Slack admins to add you "
"to the list of administrators." + admins_str
),
],
Expand All @@ -45,7 +45,7 @@ def configuration_view(admin_slack_user_ids: List[Slack_User_ID_Type], enable_sh
enable_rich_text_in_thank_you_messages: bool, enable_company_values: bool,
enable_leaderboard: bool, max_thank_you_receivers_num: int, enable_attaching_files: bool,
enable_private_messages: bool, max_attached_files_num: int,
enable_private_message_counting_in_leaderboard: bool):
enable_private_message_counting_in_leaderboard: bool, app_name: str):
stats_time_period_to_use_options = []
stats_time_period_to_use_selected_option = None
for enum, option in (
Expand Down Expand Up @@ -96,6 +96,16 @@ def configuration_view(admin_slack_user_ids: List[Slack_User_ID_Type], enable_sh
action_id="home_page_configuration_admin_slack_user_ids_value_changed"
)
),
HeaderBlock(
text="Custom App name"
),
SectionBlock(
text=f"Current Slack App name: {app_name}",
accessory=ButtonElement(
text="Edit...",
action_id="home_page_configuration_edit_app_name_button_clicked"
)
),
HeaderBlock(
text="Notification Settings"
),
Expand Down
5 changes: 3 additions & 2 deletions thankyou/slackbot/views/homepage.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ def home_page_my_thank_yous_view(
)


def home_page_company_thank_yous_view(thank_you_messages: List[ThankYouMessage],
def home_page_company_thank_yous_view(thank_you_messages: List[ThankYouMessage], app_name: str,
sender_leaders: List[Tuple[ThankYouType, List[Tuple[Slack_User_ID_Type, int]]]]
= None,
receiver_leaders: List[Tuple[ThankYouType, List[Tuple[Slack_User_ID_Type, int]]]]
Expand All @@ -58,14 +58,15 @@ def home_page_company_thank_yous_view(thank_you_messages: List[ThankYouMessage],
elif enable_leaderboard:
leaders_blocks.append(home_page_show_leaders_button_block())
hidden_messages_block = home_page_hidden_messages_warn_block(
app_name=app_name,
slack_channel_with_all_messages=slack_channel_with_all_messages,
hidden_messages_num=hidden_messages_num
)

blocks = [
home_page_actions_block(selected="company_thank_yous"),
DividerBlock(),
*([] if not show_welcome_message else [*home_page_welcome_blocks(), DividerBlock()]),
*([] if not show_welcome_message else [*home_page_welcome_blocks(app_name), DividerBlock()]),
*leaders_blocks,
*([] if not hidden_messages_block else [hidden_messages_block])
]
Expand Down
5 changes: 3 additions & 2 deletions thankyou/slackbot/views/thankyoudialog.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from thankyou.slackbot.utils.privatemetadata import PrivateMetadata


def thank_you_dialog_view(thank_you_types: List[ThankYouType], state: ThankYouMessage = None,
def thank_you_dialog_view(app_name: str, thank_you_types: List[ThankYouType], state: ThankYouMessage = None,
enable_rich_text: bool = False, enable_company_values: bool = True,
max_receivers_num: int = 10, enable_attaching_files: bool = True,
max_attached_files_num: int = 10,
Expand Down Expand Up @@ -49,7 +49,8 @@ def thank_you_dialog_view(thank_you_types: List[ThankYouType], state: ThankYouMe
*([] if not slash_command_slack_channel_id else [
SectionBlock(text=TextObject(
text=f"This Thank you message will be posted in <#{slash_command_slack_channel_id}> slack channel. "
f"*Do not forget to invite Merci! application to this channel if this channel is private!*",
f"*Do not forget to invite {app_name} application to this channel if this channel "
f"is private!*",
type="mrkdwn"
))
]),
Expand Down

0 comments on commit ab9f978

Please sign in to comment.