From a2fe5734e1ecc2a05bdd9d83d84969e09ccdad31 Mon Sep 17 00:00:00 2001 From: Alexander Zinchuk Date: Fri, 24 Sep 2021 14:37:45 +0300 Subject: [PATCH] Sticker Modal: Check ability to send stickers in current chat (#1466) --- src/components/common/StickerButton.scss | 22 +++++++++++++--------- src/components/common/StickerButton.tsx | 1 + src/components/common/StickerSetModal.tsx | 22 ++++++++++++++++++---- 3 files changed, 32 insertions(+), 13 deletions(-) diff --git a/src/components/common/StickerButton.scss b/src/components/common/StickerButton.scss index 7e231f053..427103036 100644 --- a/src/components/common/StickerButton.scss +++ b/src/components/common/StickerButton.scss @@ -6,10 +6,22 @@ border-radius: var(--border-radius-messages-small); background: transparent no-repeat center; background-size: contain; - cursor: pointer; transition: background-color .15s ease, opacity .3s ease !important; position: relative; + &.interactive { + cursor: pointer; + + &:hover { + background-color: var(--color-interactive-element-hover); + + .sticker-unfave-button { + opacity: 1; + } + } + + } + @media (max-width: 600px) { margin: 0.25rem; } @@ -52,12 +64,4 @@ opacity: 0; } - - &:hover { - background-color: var(--color-interactive-element-hover); - - .sticker-unfave-button { - opacity: 1; - } - } } diff --git a/src/components/common/StickerButton.tsx b/src/components/common/StickerButton.tsx index 29f613dce..7d505aabf 100644 --- a/src/components/common/StickerButton.tsx +++ b/src/components/common/StickerButton.tsx @@ -76,6 +76,7 @@ const StickerButton: FC = ({ const fullClassName = buildClassName( 'StickerButton', + onClick && 'interactive', sticker.isAnimated && 'animated', stickerSelector, className, diff --git a/src/components/common/StickerSetModal.tsx b/src/components/common/StickerSetModal.tsx index 3ea487a0c..ddcad5370 100644 --- a/src/components/common/StickerSetModal.tsx +++ b/src/components/common/StickerSetModal.tsx @@ -8,10 +8,13 @@ import { GlobalActions } from '../../global/types'; import { STICKER_SIZE_MODAL } from '../../config'; import { pick } from '../../util/iteratees'; -import { selectStickerSet, selectStickerSetByShortName } from '../../modules/selectors'; +import { + selectChat, selectCurrentMessageList, selectStickerSet, selectStickerSetByShortName, +} from '../../modules/selectors'; import { useIntersectionObserver } from '../../hooks/useIntersectionObserver'; import useLang from '../../hooks/useLang'; import renderText from './helpers/renderText'; +import { getAllowedAttachmentOptions, getCanPostInChat } from '../../modules/helpers'; import Modal from '../ui/Modal'; import Button from '../ui/Button'; @@ -28,6 +31,7 @@ export type OwnProps = { }; type StateProps = { + canSendStickers?: boolean; stickerSet?: ApiStickerSet; }; @@ -40,6 +44,7 @@ const StickerSetModal: FC = ({ fromSticker, stickerSetShortName, stickerSet, + canSendStickers, onClose, loadStickers, toggleStickerSet, @@ -102,7 +107,7 @@ const StickerSetModal: FC = ({ sticker={sticker} size={STICKER_SIZE_MODAL} observeIntersection={observeIntersection} - onClick={handleSelect} + onClick={canSendStickers ? handleSelect : undefined} clickArg={sticker} /> ))} @@ -129,9 +134,18 @@ const StickerSetModal: FC = ({ ); }; -export default memo(withGlobal( - (global, { fromSticker, stickerSetShortName }: OwnProps) => { +export default memo(withGlobal( + (global, { fromSticker, stickerSetShortName }): StateProps => { + const currentMessageList = selectCurrentMessageList(global); + const { chatId, threadId } = currentMessageList || {}; + const chat = chatId && selectChat(global, chatId); + const sendOptions = chat ? getAllowedAttachmentOptions(chat) : undefined; + const canSendStickers = Boolean( + chat && threadId && getCanPostInChat(chat, threadId) && sendOptions?.canSendStickers, + ); + return { + canSendStickers, stickerSet: fromSticker ? selectStickerSet(global, fromSticker.stickerSetId) : stickerSetShortName