Authored by 陈林

Merge branch 'group_v1130' into 'V1130_Date'

Group v1130



See merge request !22
... ... @@ -140,7 +140,7 @@ export default class GroupDetailHeader extends React.Component {
tipTitlecolor = '#000000';
}else if (pageGo == 5) {
tipTitle = '你来晚了';
buttonText = '查看更多拼团活动';
buttonText = '我也要开团';
tipTitlecolor = '#000000';
}else if (pageGo == 6) {
tipTitle = '拼团失败';
... ...
... ... @@ -43,6 +43,34 @@ export default class GroupPurchaseDetail extends Component {
switch(sectionID) {
case 'productResourceInfo': {
if(!rowData || !rowData.get('data')){
return null;
}
let infoData = rowData.get('data');
let imageWidth = infoData.get('imageWidth');
let imageHeight = infoData.get('imageHeight');
let listInfo = infoData.get('list').toJS();
let item = listInfo[0];
let src = YH_Image.getSlicedUrl(item.src, imageWidth, imageHeight, 2);
return(
<View style={{width:width, height:70*DEVICE_WIDTH_RATIO+8, backgroundColor:'#f0f0f0'}}>
<View style={{width:width, height:70*DEVICE_WIDTH_RATIO}}>
<TouchableOpacity activeOpacity={1} onPress={() => {
this.props.didTouchBanner && this.props.didTouchBanner(item.url);
}}>
<YH_Image style={{width: '100%', height: '100%'}} url={src}></YH_Image>
</TouchableOpacity>
</View>
</View>
);
}
case 'productListTitle': {
return(
<View style={styles.productListheader}>
... ... @@ -52,6 +80,7 @@ export default class GroupPurchaseDetail extends Component {
</View>
);
}
case 'productList': {
return(
<GroupProductCell resource={rowData} didTouchProduct={this.props.didTouchProduct}/>
... ... @@ -65,9 +94,11 @@ export default class GroupPurchaseDetail extends Component {
render() {
let {
productList,
resource,
} = this.props;
let dataSource = {
productListTitle: [1],
productResourceInfo: resource.resourceList ? resource.resourceList.toArray() : [],
productListTitle: [2],
productList: productList.list ? productList.list.toArray() : [],
};
... ...
'use strict';
import React, {Component} from 'react';
import ReactNative, {Platform, StyleSheet, View,Dimensions,} from 'react-native'
import ReactNative, {Platform, StyleSheet, View, Dimensions, NativeAppEventEmitter} from 'react-native'
import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
... ... @@ -42,6 +42,7 @@ class GroupPurchaseDetailContainer extends Component {
constructor(props) {
super(props);
this._onEndReached = this._onEndReached.bind(this);
this._didTouchBanner = this._didTouchBanner.bind(this);
this.updateTime = this.updateTime.bind(this);
this.didTouchProduct = this.didTouchProduct.bind(this);
this.goComment = this.goComment.bind(this);
... ... @@ -51,15 +52,22 @@ class GroupPurchaseDetailContainer extends Component {
this.showSnapshootShare = this.showSnapshootShare.bind(this);
this.shareSnapshootAction = this.shareSnapshootAction.bind(this);
this.subscription = NativeAppEventEmitter.addListener(
'ShareCollageDetailEvent',
() => {
this.props.actions.showShareView(true);
}
);
}
async componentDidMount() {
this.props.actions.getProductList();
this.props.actions.fetchActivityGroupDetail();
this.props.actions.fetchResourceInfo();
}
componentWillUnmount() {
this.subscription && this.subscription.remove();
}
updateTime(leftTime) {
... ... @@ -74,7 +82,7 @@ class GroupPurchaseDetailContainer extends Component {
let { activityId, groupNo, groupDetail } = this.props.groupPurchaseDetail;
if(pageGo == 1) {
this.props.actions.showShareView(true);
}else if (pageGo == 2) {
}else if (pageGo == 2 || pageGo == 5) {
let membershipItems = groupDetail.get('membershipItems');
let productDetail = membershipItems.size > 0 ? membershipItems.get(0) : new Map();
let productSkn = productDetail.get('productSkn');
... ... @@ -91,7 +99,7 @@ class GroupPurchaseDetailContainer extends Component {
ReactNative.NativeModules.YH_CommonHelper.showBuyPicker(params);
}else if (pageGo == 3) {
this.props.actions.showShareView(true);
}else if (pageGo == 4 || pageGo == 5 || pageGo == 7 || pageGo == 6) {
}else if (pageGo == 4 || pageGo == 7 || pageGo == 6) {
let url = `http://m.yohobuy.com?openby:yohobuy={"action":"go.activitytemplate","params":{"type":"2", "activityId":"${activityId}"}}`;
ReactNative.NativeModules.YH_CommonHelper.jumpWithUrl(url);
}
... ... @@ -109,6 +117,10 @@ class GroupPurchaseDetailContainer extends Component {
this.props.actions.showSnapshootShare(false);
}
showShareView(show){
this.props.actions.showShareView(show);
}
didTouchProduct(productSkn,activityId,newSrc) {
if(newSrc){
let arr=newSrc.split("?");
... ... @@ -123,8 +135,15 @@ class GroupPurchaseDetailContainer extends Component {
ReactNative.NativeModules.YH_CommonHelper.goLinkUrl(url);
}
showShareView(show){
this.props.actions.showShareView(show);
_didTouchBanner(url) {
if (!url) {
return;
}
let params = {
URL: url,
};
ReactNative.NativeModules.YH_CommonHelper.logEvent('YB_GROUP_DEATIL_BANNER_C', params);
ReactNative.NativeModules.YH_CommonHelper.jumpWithUrl(url);
}
async shareMiniApp(){
... ... @@ -182,6 +201,7 @@ class GroupPurchaseDetailContainer extends Component {
showSnapshootShare,
groupDetail,
productList,
resourceInfo
} = this.props.groupPurchaseDetail;
let {
... ... @@ -211,11 +231,13 @@ class GroupPurchaseDetailContainer extends Component {
activityId={activityId}
productList={productList}
groupDetail={groupDetail}
resource={resourceInfo}
onEndReached={this._onEndReached}
updateTime={this.updateTime}
didTouchButton={this.didTouchButton}
didTouchProduct={this.didTouchProduct}
goComment={this.goComment}
didTouchBanner={this._didTouchBanner}
/>
</View>
);
... ...
... ... @@ -11,6 +11,9 @@ const {
PRODUCT_LIST_REQUEST,
PRODUCT_LIST_SUCCESS,
PRODUCT_LIST_FAILURE,
RESOURCEINFO_REQUEST,
RESOURCEINFO_SUCCESS,
RESOURCEINFO_FAILURE,
ACTIVITY_GROUP_DETAIL_REQUEST,
ACTIVITY_GROUP_DETAIL_SUCCESS,
ACTIVITY_GROUP_DETAIL_FAILURE,
... ... @@ -65,6 +68,26 @@ export function productListFailure(error) {
}
}
export function resourceInfoRequest() {
return {
type: RESOURCEINFO_REQUEST,
};
}
export function resourceInfoSuccess(json) {
return {
type: RESOURCEINFO_SUCCESS,
payload: json
}
}
export function resourceInfoFailure(error) {
return {
type: RESOURCEINFO_FAILURE,
payload: error
}
}
export function activityGroupDetailRequest() {
return {
type: ACTIVITY_GROUP_DETAIL_REQUEST,
... ... @@ -157,3 +180,18 @@ export function updateTime(leftTime) {
payload: leftTime
}
}
export function fetchResourceInfo() {
return (dispatch, getState) => {
let {app} = getState();
dispatch(resourceInfoRequest());
let content_code = 'cea0efae77f4e04c935beb1e87181247';
return new GroupPurchaseService(app.host).fetchDetailResourceInfo(content_code)
.then(json => {
dispatch(resourceInfoSuccess(json));
})
.catch(error => {
dispatch(resourceInfoFailure(error));
});
};
}
... ...
... ... @@ -17,6 +17,11 @@ let InitialState = Record({
pageSize: 20,//60,
endReached: false,
})),
resourceInfo: new (Record({
isFetching: false,
error: null,
resourceList: List(),
})),
groupDetail: new (Record({
isFetching: false,
error: null,
... ...
... ... @@ -9,6 +9,9 @@ const {
PRODUCT_LIST_REQUEST,
PRODUCT_LIST_SUCCESS,
PRODUCT_LIST_FAILURE,
RESOURCEINFO_REQUEST,
RESOURCEINFO_SUCCESS,
RESOURCEINFO_FAILURE,
ACTIVITY_GROUP_DETAIL_REQUEST,
ACTIVITY_GROUP_DETAIL_SUCCESS,
ACTIVITY_GROUP_DETAIL_FAILURE,
... ... @@ -62,6 +65,21 @@ export default function couponReducer(state = initialState, action) {
return state.setIn(['productList', 'isFetching'], false)
.setIn(['productList', 'error'], action.payload);
}
case RESOURCEINFO_REQUEST: {
return state.setIn(['resourceInfo', 'isFetching'], true)
.setIn(['resourceInfo', 'error'], null);
}
case RESOURCEINFO_SUCCESS: {
return state.setIn(['resourceInfo', 'isFetching'], false)
.setIn(['resourceInfo', 'resourceList'], Immutable.fromJS(action.payload))
.setIn(['resourceInfo', 'error'], null);
}
case RESOURCEINFO_FAILURE: {
return state.setIn(['resourceInfo', 'isFetching'], false)
.setIn(['resourceInfo', 'error'], action.payload);
}
case ACTIVITY_GROUP_DETAIL_REQUEST: {
return state.setIn(['groupDetail', 'isFetching'], true)
.setIn(['groupDetail', 'error'], null);
... ...
... ... @@ -68,6 +68,23 @@ export default class groupPurchaseService {
});
}
async fetchDetailResourceInfo(content_code) {
let fromPage = Platform.OS === 'android' ? 'aFP_GroupPurchaseDetail' : 'iFP_GroupPurchaseDetail';
return await this.api.get({
url: '/operations/api/v5/resource/get',
body: {
content_code,
fromPage,
}
})
.then((json) => {
return json;
})
.catch((error) => {
throw(error);
});
}
async fetchShareCodeInfo(params) {
return await this.api.get({
url: '/operations/api/v5/webshare/getShare',
... ...