Authored by 张丽霞

plaster内容结构调整,review by redding

'use strict'
import React, {Component} from 'react';
import ReactNative, {
StyleSheet,
Dimensions,
Platform,
View,
NativeModules,
InteractionManager,
NativeAppEventEmitter,
ListView,
} from 'react-native'
import {Map} from 'immutable';
import BrandIntro from './BrandIntro'
import BrandArticleList from './BrandArticleList'
import BrandArticleCell from './BrandArticleCell'
import NewArrival from './NewArrival'
import Prompt from '../../../coupon/components/coupon/Prompt';
export default class Detail extends React.Component{
constructor(props) {
super(props);
this.renderRow = this.renderRow.bind(this);
this.dataSource = new ListView.DataSource({
rowHasChanged: (r1, r2) => !Immutable.is(r1, r2),
sectionHeaderHasChanged: (s1, s2) => !Immutable.is(s1, s2),
});
}
componentWillReceiveProps(nextProps) {
if (this.props.detail.get('brandInfo').get('titleUnfold') && !nextProps.detail.get('brandInfo').get('titleUnfold')) {
this.listView.scrollTo({x: 0, y: 0, animated: false, });
}
}
renderRow(rowData, sectionID, rowID, highlightRow) {
if (!rowData && rowData.length == 0) {
return null;
}
switch (rowID) {
case 'brandInfo':
return(
<BrandIntro
brandIntro={rowData}
brandFav={this.props.detail.get('brandFav')}
onPressFav={this.props.onPressFav}
onPressBrandIntroMore={this.props.onPressBrandIntroMore}
addCanelFavTipRemove={this.props.addCanelFavTipRemove}
/>
);
case 'productList':
console.log(rowData);
console.log('rowData');
return (
<NewArrival
prodcutList={rowData}
onPressMoreProducts={this.props.onPressMoreProducts}
onPressProduct={this.props.onPressProduct}
moreProductUrl={this.props.detail.get('moreProductUrl')}
/>
);
case 'articleList':
return(
<BrandArticleList
articleList={rowData}
onPressArticle={this.props.onPressArticle}
onPressArticleLike={this.props.onPressArticleLike} />
);
default:
return null;
}
}
render() {
let {detail} = this.props;
let dataSource = {
brandInfo: detail.get('brandInfo'),
productList: detail.get('productList').toArray(),
articleList: detail.get('articleList').toArray(),
};
return (
<View style={styles.container}>
<ListView
ref={(c) => {
this.listView = c;
}}
contentContainerStyle={styles.contentContainer}
enableEmptySections={true}
dataSource={this.dataSource.cloneWithRows(dataSource)}
renderRow={this.renderRow}
/>
{detail.get('brandInfo').get('addCancelTip') !== '' ? <Prompt
text={detail.get('brandInfo').get('addCancelTip')}
duration={800}
onPromptHidden={this.props.addCanelFavTipRemove}
/> : null}
</View>
);
}
};
let styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#f0f0f0',
},
contentContainer:{
flexDirection: 'column',
flexWrap: 'wrap',
},
});
... ...
... ... @@ -16,11 +16,7 @@ import {bindActionCreators} from 'redux';
import {connect} from 'react-redux';
import {Map} from 'immutable';
import * as detailActions from '../reducers/detail/detailActions';
import BrandIntro from '../components/detail/BrandIntro'
import BrandArticleList from '../components/detail/BrandArticleList'
import BrandArticleCell from '../components/detail/BrandArticleCell'
import NewArrival from '../components/detail/NewArrival'
import Prompt from '../../coupon/components/coupon/Prompt';
import Detail from '../components/detail/Detail'
const actions = [
detailActions,
... ... @@ -46,9 +42,12 @@ function mapDispatchToProps(dispatch) {
}
class DetailContainer extends Component {
componentDidMount() {
this.props.actions.getBrandInfo();
this.props.actions.uidBrandFav();
this.props.actions.brandInfo();
}
constructor(props) {
super(props);
this._onPressArticle = this._onPressArticle.bind(this);
... ... @@ -57,23 +56,7 @@ class DetailContainer extends Component {
this._onPressBrandIntroMore = this._onPressBrandIntroMore.bind(this);
this._onPressMoreProducts = this._onPressMoreProducts.bind(this);
this._addCanelFavTipRemove = this._addCanelFavTipRemove.bind(this);
this.renderRow = this.renderRow.bind(this);
this.dataSource = new ListView.DataSource({
rowHasChanged: (r1, r2) => !Immutable.is(r1, r2),
sectionHeaderHasChanged: (s1, s2) => !Immutable.is(s1, s2),
});
}
componentDidMount() {
this.props.actions.uidBrandFav();
this.props.actions.brandInfo();
}
componentWillReceiveProps(nextProps) {
if (this.props.detail.get('brandInfo').get('titleUnfold') && !nextProps.detail.get('brandInfo').get('titleUnfold')) {
this.listView.scrollTo({x: 0, y: 0, animated: false, });
}
this._onPressProduct = this._onPressProduct.bind(this);
}
_onPressArticle(url) {
... ... @@ -115,73 +98,21 @@ class DetailContainer extends Component {
this.props.actions.addCanelFavTipRemove();
}
renderRow(rowData, sectionID, rowID, highlightRow) {
if (!rowData && rowData.length == 0) {
return null;
}
switch (rowID) {
case 'brandInfo':
return(
<BrandIntro
brandIntro={rowData}
brandFav={this.props.detail.get('brandFav')}
onPressFav={this._onPressFav}
onPressBrandIntroMore={this._onPressBrandIntroMore}
addCanelFavTipRemove={this._addCanelFavTipRemove}
/>
);
case 'productList':
console.log(rowData);
console.log('rowData');
return (
<NewArrival
prodcutList={rowData}
onPressMoreProducts={this._onPressMoreProducts}
onPressProduct={this._onPressProduct}
moreProductUrl={this.props.detail.get('moreProductUrl')}
/>
);
case 'articleList':
return(
<BrandArticleList
articleList={rowData}
onPressArticle={this._onPressArticle}
onPressArticleLike={this._onPressArticleLike} />
);
default:
return null;
}
}
render() {
let {detail} = this.props;
let dataSource = {
brandInfo: detail.get('brandInfo'),
productList: detail.get('productList').toArray(),
articleList: detail.get('articleList').toArray(),
};
return (
<View style={styles.container}>
<ListView
ref={(c) => {
this.listView = c;
}}
contentContainerStyle={styles.contentContainer}
enableEmptySections={true}
dataSource={this.dataSource.cloneWithRows(dataSource)}
renderRow={this.renderRow}
<Detail
detail={detail}
onPressArticle={this._onPressArticle}
onPressArticleLike={this._onPressArticleLike}
onPressFav={this._onPressFav}
onPressBrandIntroMore={this._onPressBrandIntroMore}
onPressMoreProducts={this._onPressMoreProducts}
addCanelFavTipRemove={this._addCanelFavTipRemove}
onPressProduct={this._onPressProduct}
/>
{detail.get('brandInfo').get('addCancelTip') !== '' ? <Prompt
text={detail.get('brandInfo').get('addCancelTip')}
duration={800}
onPromptHidden={this._addCanelFavTipRemove}
/> : null}
</View>
);
}
... ...