import type { FC } from '../../../lib/teact/teact'; import { memo, useCallback, useMemo, useRef, } from '../../../lib/teact/teact'; import { getActions, withGlobal } from '../../../global'; import type { ApiAvailableReaction, ApiReaction, ApiSticker, ApiStickerSet, } from '../../../api/types'; import type { AccountSettings } from '../../../types'; import { SettingsScreens } from '../../../types'; import { selectCanPlayAnimatedEmojis } from '../../../global/selectors'; import { pick } from '../../../util/iteratees'; import { REM } from '../../common/helpers/mediaDimensions'; import renderText from '../../common/helpers/renderText'; import useHistoryBack from '../../../hooks/useHistoryBack'; import { useIntersectionObserver } from '../../../hooks/useIntersectionObserver'; import useOldLang from '../../../hooks/useOldLang'; import ReactionStaticEmoji from '../../common/reactions/ReactionStaticEmoji'; import StickerSetCard from '../../common/StickerSetCard'; import Checkbox from '../../ui/Checkbox'; import ListItem from '../../ui/ListItem'; const DEFAULT_REACTION_SIZE = 1.5 * REM; type OwnProps = { isActive?: boolean; onReset: () => void; }; type StateProps = Pick & { addedSetIds?: string[]; customEmojiSetIds?: string[]; stickerSetsById: Record; defaultReaction?: ApiReaction; availableReactions?: ApiAvailableReaction[]; canPlayAnimatedEmojis: boolean; }; const SettingsStickers: FC = ({ isActive, addedSetIds, customEmojiSetIds, stickerSetsById, defaultReaction, shouldSuggestStickers, shouldUpdateStickerSetOrder, availableReactions, canPlayAnimatedEmojis, onReset, }) => { const { setSettingOption, openStickerSet, openSettingsScreen, } = getActions(); const lang = useOldLang(); const stickerSettingsRef = useRef(); const { observe: observeIntersectionForCovers } = useIntersectionObserver({ rootRef: stickerSettingsRef }); const handleStickerSetClick = useCallback((sticker: ApiSticker) => { openStickerSet({ stickerSetInfo: sticker.stickerSetInfo, }); }, [openStickerSet]); const handleSuggestStickerSetOrderChange = useCallback((newValue: boolean) => { setSettingOption({ shouldUpdateStickerSetOrder: newValue }); }, [setSettingOption]); const handleSuggestStickersChange = useCallback((newValue: boolean) => { setSettingOption({ shouldSuggestStickers: newValue }); }, [setSettingOption]); const stickerSets = useMemo(() => ( addedSetIds && Object.values(pick(stickerSetsById, addedSetIds)) ), [addedSetIds, stickerSetsById]); useHistoryBack({ isActive, onBack: onReset, }); return (
openSettingsScreen({ screen: SettingsScreens.CustomEmoji })} icon="smile" > {lang('StickersList.EmojiItem')} {customEmojiSetIds && {customEmojiSetIds.length}} {defaultReaction && ( openSettingsScreen({ screen: SettingsScreens.QuickReaction })} >
{lang('DoubleTapSetting')}
)}

{lang('InstalledStickers.DynamicPackOrder')}

{lang('InstalledStickers.DynamicPackOrderInfo')}

{stickerSets && (

{lang('ChooseStickerMyStickerSets')}

{stickerSets.map((stickerSet: ApiStickerSet) => ( ))}

{renderText(lang('StickersBotInfo'), ['links'])}

)}
); }; export default memo(withGlobal( (global): Complete => { return { ...pick(global.settings.byKey, [ 'shouldSuggestStickers', 'shouldUpdateStickerSetOrder', ]), addedSetIds: global.stickers.added.setIds, customEmojiSetIds: global.customEmojis.added.setIds, stickerSetsById: global.stickers.setsById, defaultReaction: global.config?.defaultReaction, availableReactions: global.reactions.availableReactions, canPlayAnimatedEmojis: selectCanPlayAnimatedEmojis(global), }; }, )(SettingsStickers));