import { memo, useMemo } from '../../../lib/teact/teact'; import { getActions, getGlobal, withGlobal } from '../../../global'; import type { ApiEmojiStatusCollectible, ApiEmojiStatusType, ApiSavedStarGift, } from '../../../api/types'; import { DEFAULT_STATUS_ICON_ID } from '../../../config'; import { STARS_CURRENCY_CODE } from '../../../config'; import { selectTabState, selectUser } from '../../../global/selectors'; import { formatDateAtTime } from '../../../util/dates/dateFormat'; import { getServerTime } from '../../../util/serverTime'; import useLang from '../../../hooks/useLang'; import useLastCallback from '../../../hooks/useLastCallback'; import useOldLang from '../../../hooks/useOldLang'; import Button from '../../ui/Button'; import styles from './UniqueGiftManageButtons.module.scss'; type OwnProps = { savedGift?: ApiSavedStarGift; }; type StateProps = { currentUserEmojiStatus?: ApiEmojiStatusType; collectibleEmojiStatuses?: ApiEmojiStatusType[]; }; const UniqueGiftManageButtons = ({ savedGift, currentUserEmojiStatus, collectibleEmojiStatuses, }: OwnProps & StateProps) => { const { openGiftTransferModal, openGiftResalePriceComposerModal, openGiftStatusInfoModal, setEmojiStatus, updateStarGiftPrice, showNotification, closeGiftInfoModal, } = getActions(); const lang = useLang(); const oldLang = useOldLang(); const gift = savedGift?.gift; const isGiftUnique = gift?.type === 'starGiftUnique'; const giftResalePrice = isGiftUnique ? gift.resellPrice : undefined; const global = getGlobal(); const modal = selectTabState(global).giftInfoModal; const peerId = modal?.peerId; const starGiftUniqueSlug = gift?.type === 'starGiftUnique' ? gift.slug : undefined; const userCollectibleStatus = useMemo(() => { if (!starGiftUniqueSlug) return undefined; return collectibleEmojiStatuses?.find((status) => status.type === 'collectible' && status.slug === starGiftUniqueSlug, ) as ApiEmojiStatusCollectible | undefined; }, [starGiftUniqueSlug, collectibleEmojiStatuses]); const currentUniqueEmojiStatusSlug = currentUserEmojiStatus?.type === 'collectible' ? currentUserEmojiStatus.slug : undefined; const canTakeOff = starGiftUniqueSlug !== undefined && currentUniqueEmojiStatusSlug === starGiftUniqueSlug; const canWear = Boolean(userCollectibleStatus) && !canTakeOff; const handleTransfer = useLastCallback(() => { if (!savedGift || savedGift?.gift.type !== 'starGiftUnique') return; if (savedGift.canTransferAt && savedGift.canTransferAt > getServerTime()) { showNotification({ message: { key: 'NotificationGiftCanTransferAt', variables: { date: formatDateAtTime(oldLang, savedGift.canTransferAt * 1000) }, }, }); return; } openGiftTransferModal({ gift: savedGift }); }); const handleWear = useLastCallback(() => { if (canTakeOff) { setEmojiStatus({ emojiStatus: { type: 'regular', documentId: DEFAULT_STATUS_ICON_ID }, }); } else if (userCollectibleStatus) { openGiftStatusInfoModal({ emojiStatus: userCollectibleStatus }); } }); const handleSell = useLastCallback(() => { if (!savedGift || !peerId) return; if (savedGift.canResellAt && savedGift.canResellAt > getServerTime()) { showNotification({ message: { key: 'NotificationGiftCanResellAt', variables: { date: formatDateAtTime(oldLang, savedGift.canResellAt * 1000) }, }, }); return; } openGiftResalePriceComposerModal({ peerId, gift: savedGift }); }); const handleUnlist = useLastCallback(() => { if (!savedGift || savedGift.gift.type !== 'starGiftUnique' || !savedGift.inputGift) return; closeGiftInfoModal(); updateStarGiftPrice({ gift: savedGift.inputGift, price: { currency: STARS_CURRENCY_CODE, amount: 0, nanos: 0, } }); showNotification({ icon: 'unlist-outline', message: { key: 'NotificationGiftIsUnlist', variables: { gift: lang('GiftUnique', { title: savedGift.gift.title, number: savedGift.gift.number }) }, }, }); }); return (