import React from 'react'; import debounce from 'lodash.debounce' import { PrizeItem, AwardActivityVO } from '@type/missions'; import * as Styled from './index.style' import { convertSimplePrize } from '../actions' import { formatMonthDate, formatImageSize } from '../../utils/format'; import { UnionIcon } from '../../common/icons' import log from '../../utils/lofter-log'; import { goToLogin } from '../../utils/login'; import { BlogInfo } from '../type'; import { AwardsModal } from '../awards-modal' interface AwardListProps { activityCode: string, list: PrizeItem[], awardData: AwardActivityVO, innerRef?: any, points: number, pointsIcon: string, refreshData: () => Promise, color?: string, showAddressModal: (data: { activityCode: string, prizeActivityCode: string, prizeCode: string, }) => void, blogInfo: BlogInfo, } interface AwardItemProps { activityCode: string, awardInfo: PrizeItem, awardData: AwardActivityVO, points: number, pointsIcon: string, refreshData: () => void, color?: string, showAddressModal: (data: { activityCode: string, prizeActivityCode: string, prizeCode: string, }) => void, blogInfo: BlogInfo, } const computeActionText = (awardInfo: PrizeItem) => { const { userStatus } = awardInfo; let text = '未知'; switch (userStatus) { case 0: text = '兑换' break; case -1: text = '抢光啦' break; case -2: text = '已兑换' break; default: break; } return text; } class AwardItem extends React.Component { currentPrizeCode: string | undefined state ={ showDetailImg: false } showModal = (data: { activityCode: string, prizeActivityCode: string, prizeCode: string, }) => { this.props.showAddressModal(data) } handle = debounce(async () => { const { awardData, awardInfo, refreshData, points, activityCode, blogInfo } = this.props; if (!blogInfo.blogNickName) { goToLogin(refreshData, 'default', true) return; } const { activityCode: prizeActivityCode } = awardData; console.log('handle mission', activityCode, prizeActivityCode, awardInfo); if (points < awardInfo.prizeBizConfigDTO.consumables.prizeNum) { return; } const { userStatus } = awardInfo; if (userStatus === 0) { log.capture('cpnote-15', { category: 'cpnote', action: 101, scene: 'cpnote', activityId: 'cpnote-' + activityCode, type: awardInfo.type, title: awardInfo.name, }) if (awardInfo.type === 'GOODS') { // 实物兑换奖品需要填地址 this.currentPrizeCode = awardInfo.itemCode; this.showModal({ prizeActivityCode, activityCode, prizeCode: this.currentPrizeCode }); } else { await convertSimplePrize({ prizeActivityCode, activityCode, prizeCode: awardInfo.itemCode }) await refreshData(); } } }, 1000, { leading: true, tailing: false }) render() { const { awardInfo, points, color, pointsIcon } = this.props; const { image, name, description, prizeBizConfigDTO, userStatus } = awardInfo; return(
{ console.log('showDetailImg', this.state.showDetailImg) this.setState({ showDetailImg: true }) }} > 奖品图片
{name}
{description}
图标 {prizeBizConfigDTO.consumables.prizeNum}
{ this.setState({ showDetailImg: false }) }} handleClick={this.handle} />
) } } class AwardListCom extends React.Component { render() { const { list, innerRef, ...resetProps } = this.props; // console.log('list', list); return( { list && list.map(item => ( )) } ) } } const AwardList = React.forwardRef((props: AwardListProps, ref: any) => { return }) export { AwardList, }