From af973d6f20c24851f9ae8a468903a0b70fa40c8f Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Wed, 5 Jul 2023 13:15:04 +0200 Subject: [PATCH] Middle Header: Add edit button (#3449) --- src/components/middle/HeaderMenuContainer.tsx | 29 ++++++++++++++++++ src/components/right/RightHeader.tsx | 17 ++++------- src/components/ui/Menu.scss | 4 +++ src/components/ui/Menu.tsx | 3 ++ src/global/actions/ui/misc.ts | 4 +-- src/global/selectors/management.ts | 30 +++++++++++++++++-- src/global/types.ts | 4 ++- 7 files changed, 74 insertions(+), 17 deletions(-) diff --git a/src/components/middle/HeaderMenuContainer.tsx b/src/components/middle/HeaderMenuContainer.tsx index e80f79e50..abf46dbb4 100644 --- a/src/components/middle/HeaderMenuContainer.tsx +++ b/src/components/middle/HeaderMenuContainer.tsx @@ -21,6 +21,7 @@ import { selectTabState, selectUser, selectUserFullInfo, + selectCanManage, selectIsRightColumnShown, } from '../../global/selectors'; import { getCanAddContact, @@ -108,6 +109,8 @@ type StateProps = { canEditTopic?: boolean; hasLinkedChat?: boolean; isChatInfoShown?: boolean; + isRightColumnShown?: boolean; + canManage?: boolean; }; const CLOSE_MENU_ANIMATION_DURATION = 200; @@ -145,6 +148,8 @@ const HeaderMenuContainer: FC = ({ canAddContact, canCreateTopic, canEditTopic, + canManage, + isRightColumnShown, onJoinRequestsClick, onSubscribeChannel, onSearchClick, @@ -168,10 +173,12 @@ const HeaderMenuContainer: FC = ({ openCreateTopicPanel, openEditTopicPanel, openChat, + toggleManagement, } = getActions(); const { isMobile } = useAppLayout(); const [isMenuOpen, setIsMenuOpen] = useState(true); + const [shouldCloseFast, setShouldCloseFast] = useState(false); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const [isReportModalOpen, setIsReportModalOpen] = useState(false); const [isMuteModalOpen, setIsMuteModalOpen] = useState(false); @@ -210,6 +217,7 @@ const HeaderMenuContainer: FC = ({ const handleViewGroupInfo = useLastCallback(() => { openChatWithInfo({ id: chatId, threadId }); + setShouldCloseFast(!isRightColumnShown); closeMenu(); }); @@ -239,11 +247,19 @@ const HeaderMenuContainer: FC = ({ const handleCreateTopicClick = useLastCallback(() => { openCreateTopicPanel({ chatId }); + setShouldCloseFast(!isRightColumnShown); + closeMenu(); + }); + + const handleEditClick = useLastCallback(() => { + toggleManagement({ force: true }); + setShouldCloseFast(!isRightColumnShown); closeMenu(); }); const handleEditTopicClick = useLastCallback(() => { openEditTopicPanel({ chatId, topicId: threadId }); + setShouldCloseFast(!isRightColumnShown); closeMenu(); }); @@ -303,6 +319,7 @@ const HeaderMenuContainer: FC = ({ const handleStatisticsClick = useLastCallback(() => { toggleStatistics(); + setShouldCloseFast(!isRightColumnShown); closeMenu(); }); @@ -354,6 +371,7 @@ const HeaderMenuContainer: FC = ({ positionX="right" style={`left: ${x}px;top: ${y}px;`} onClose={closeMenu} + shouldCloseFast={shouldCloseFast} > {isMobile && canSearch && ( = ({ {isTopic ? lang('lng_context_view_topic') : lang('lng_context_view_group')} )} + {canManage && !canEditTopic && ( + + {lang('Edit')} + + )} {canEditTopic && ( ( chat.isCreator || !isUserRightBanned(chat, 'manageTopics') || getHasAdminRight(chat, 'manageTopics') ); const canEditTopic = topic && getCanManageTopic(chat, topic); + const canManage = selectCanManage(global, chatId); return { chat, @@ -615,6 +642,8 @@ export default memo(withGlobal( && currentChatId === chatId && currentThreadId === threadId, canCreateTopic, canEditTopic, + canManage, + isRightColumnShown: selectIsRightColumnShown(global), }; }, )(HeaderMenuContainer)); diff --git a/src/components/right/RightHeader.tsx b/src/components/right/RightHeader.tsx index 7db48387b..72a1b431c 100644 --- a/src/components/right/RightHeader.tsx +++ b/src/components/right/RightHeader.tsx @@ -12,17 +12,17 @@ import { ANIMATION_END_DELAY } from '../../config'; import { debounce } from '../../util/schedulers'; import buildClassName from '../../util/buildClassName'; import { + selectCanManage, selectChat, selectChatFullInfo, selectCurrentGifSearch, selectCurrentStickerSearch, selectCurrentTextSearch, - selectIsChatWithSelf, selectTabState, selectUser, } from '../../global/selectors'; import { - getCanAddContact, getCanManageTopic, isChatAdmin, isChatChannel, isUserBot, isUserId, + getCanAddContact, getCanManageTopic, isChatChannel, isUserBot, isUserId, } from '../../global/helpers'; import { getDayStartAt } from '../../util/dateFormat'; @@ -464,7 +464,7 @@ const RightHeader: FC = ({ )} - {canManage && !isInsideTopic && !isBot && ( + {canManage && !isInsideTopic && (