From 077f8e5061ba095d449603175c4e2f14b126e2ac Mon Sep 17 00:00:00 2001 From: Scott Bishel Date: Tue, 29 Apr 2025 08:20:19 -0600 Subject: [PATCH] update menus for channel bookmarks (#30801) Co-authored-by: Mattermost Build --- .../channel_header_menu/channel_header_menu.tsx | 5 +++++ .../channel_header_direct_menu.tsx | 11 ++++++++++- .../channel_header_group_menu.tsx | 11 +++++++++-- .../channel_header_public_private_menu.tsx | 11 +++++++---- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/webapp/channels/src/components/channel_header_menu/channel_header_menu.tsx b/webapp/channels/src/components/channel_header_menu/channel_header_menu.tsx index 4cf1900eb3..ac795d1ec9 100644 --- a/webapp/channels/src/components/channel_header_menu/channel_header_menu.tsx +++ b/webapp/channels/src/components/channel_header_menu/channel_header_menu.tsx @@ -23,6 +23,7 @@ import { import {getChannelHeaderMenuPluginComponents} from 'selectors/plugins'; +import {getIsChannelBookmarksEnabled} from 'components/channel_bookmarks/utils'; import * as Menu from 'components/menu'; import {Constants} from 'utils/constants'; @@ -53,6 +54,7 @@ export default function ChannelHeaderMenu({dmUser, gmMembers, isMobile, archived const isMuted = useSelector(isCurrentChannelMuted); const isLicensedForLDAPGroups = useSelector(getLicense).LDAPGroups === 'true'; const pluginMenuItems = useSelector(getChannelHeaderMenuPluginComponents); + const isChannelBookmarksEnabled = useSelector(getIsChannelBookmarksEnabled); const isReadonly = false; @@ -144,6 +146,7 @@ export default function ChannelHeaderMenu({dmUser, gmMembers, isMobile, archived pluginItems={pluginItems} isFavorite={isFavorite} isMobile={isMobile || false} + isChannelBookmarksEnabled={isChannelBookmarksEnabled} /> )} {isGroup && ( @@ -154,6 +157,7 @@ export default function ChannelHeaderMenu({dmUser, gmMembers, isMobile, archived pluginItems={pluginItems} isFavorite={isFavorite} isMobile={isMobile || false} + isChannelBookmarksEnabled={isChannelBookmarksEnabled} /> )} {(!isDirect && !isGroup) && ( @@ -167,6 +171,7 @@ export default function ChannelHeaderMenu({dmUser, gmMembers, isMobile, archived isDefault={isDefault} isReadonly={isReadonly} isLicensedForLDAPGroups={isLicensedForLDAPGroups} + isChannelBookmarksEnabled={isChannelBookmarksEnabled} /> )} diff --git a/webapp/channels/src/components/channel_header_menu/channel_header_menu_items/channel_header_direct_menu.tsx b/webapp/channels/src/components/channel_header_menu/channel_header_menu_items/channel_header_direct_menu.tsx index e8c3d273a2..74e229b2e2 100644 --- a/webapp/channels/src/components/channel_header_menu/channel_header_menu_items/channel_header_direct_menu.tsx +++ b/webapp/channels/src/components/channel_header_menu/channel_header_menu_items/channel_header_direct_menu.tsx @@ -8,9 +8,12 @@ import {CogOutlineIcon} from '@mattermost/compass-icons/components'; import type {Channel} from '@mattermost/types/channels'; import type {UserProfile} from '@mattermost/types/users'; +import {isGuest} from 'mattermost-redux/utils/user_utils'; + import ChannelMoveToSubMenu from 'components/channel_move_to_sub_menu'; import * as Menu from 'components/menu'; +import MenuItemChannelBookmarks from '../menu_items/channel_bookmarks_submenu'; import CloseMessage from '../menu_items/close_message'; import EditConversationHeader from '../menu_items/edit_conversation_header'; import MenuItemPluginItems from '../menu_items/plugins_submenu'; @@ -26,9 +29,10 @@ interface Props extends Menu.FirstMenuItemProps { isMobile: boolean; isFavorite: boolean; pluginItems: ReactNode[]; + isChannelBookmarksEnabled: boolean; } -const ChannelHeaderDirectMenu = ({channel, user, isMuted, isMobile, isFavorite, pluginItems, ...rest}: Props) => { +const ChannelHeaderDirectMenu = ({channel, user, isMuted, isMobile, isFavorite, pluginItems, isChannelBookmarksEnabled, ...rest}: Props) => { return ( <> + {!isGuest(user.roles) && isChannelBookmarksEnabled && ( + + )} diff --git a/webapp/channels/src/components/channel_header_menu/channel_header_menu_items/channel_header_group_menu.tsx b/webapp/channels/src/components/channel_header_menu/channel_header_menu_items/channel_header_group_menu.tsx index 00b6340a40..d436e5d1d4 100644 --- a/webapp/channels/src/components/channel_header_menu/channel_header_menu_items/channel_header_group_menu.tsx +++ b/webapp/channels/src/components/channel_header_menu/channel_header_menu_items/channel_header_group_menu.tsx @@ -19,6 +19,7 @@ import ChannelMoveToSubMenu from 'components/channel_move_to_sub_menu'; import * as Menu from 'components/menu'; import ChannelPermissionGate from 'components/permissions_gates/channel_permission_gate'; +import MenuItemChannelBookmarks from '../menu_items/channel_bookmarks_submenu'; import CloseMessage from '../menu_items/close_message'; import MenuItemConvertToPrivate from '../menu_items/convert_gm_to_private'; import EditConversationHeader from '../menu_items/edit_conversation_header'; @@ -37,9 +38,10 @@ interface Props extends Menu.FirstMenuItemProps { isMobile: boolean; isFavorite: boolean; pluginItems: ReactNode[]; + isChannelBookmarksEnabled: boolean; } -const ChannelHeaderGroupMenu = ({channel, user, isMuted, isMobile, isFavorite, pluginItems, ...rest}: Props) => { +const ChannelHeaderGroupMenu = ({channel, user, isMuted, isMobile, isFavorite, pluginItems, isChannelBookmarksEnabled, ...rest}: Props) => { const isGroupConstrained = channel?.group_constrained === true; const isArchived = channel.delete_at !== 0; const {formatMessage} = useIntl(); @@ -72,7 +74,7 @@ const ChannelHeaderGroupMenu = ({channel, user, isMuted, isMobile, isFavorite, p channel={channel} /> )} - {(isArchived && isGroupConstrained && isGuest(user.roles)) && ( + {(!isArchived && isGuest(user.roles)) && ( } channel={channel} @@ -100,6 +102,11 @@ const ChannelHeaderGroupMenu = ({channel, user, isMuted, isMobile, isFavorite, p /> )} + {!isArchived && !isGuest(user.roles) && isChannelBookmarksEnabled && ( + + )} {(!isArchived && !isGroupConstrained) && ( { +const ChannelHeaderPublicMenu = ({channel, user, isMuted, isDefault, isMobile, isFavorite, isLicensedForLDAPGroups, pluginItems, isChannelBookmarksEnabled, ...rest}: Props) => { const isGroupConstrained = channel?.group_constrained === true; const isArchived = channel.delete_at !== 0; const isPrivate = channel?.type === Constants.PRIVATE_CHANNEL; @@ -73,9 +74,11 @@ const ChannelHeaderPublicMenu = ({channel, user, isMuted, isDefault, isMobile, i - + {isChannelBookmarksEnabled && ( + + )} )}