Authored by 张丽霞

基础店铺添加filter,review by Redding

... ... @@ -141,6 +141,7 @@ export default class BrandStore extends Component {
lastSelected={this.props.productList.isFilter}
moreFilter={this.props.productList.isMoreFilter}
selectOrder={this.props.productList.order}
lastSelectedPopular={this.props.lastSelectedPopular}
/>
</View>
);
... ... @@ -403,13 +404,15 @@ export default class BrandStore extends Component {
filterNameFactors={filterNameFactors}
onPressProductFilterRightItem={this.props.onPressProductFilterRightItem}
onPressCloseMoreFilter={this.props.onPressCloseMoreFilter}
onPressMoreFilter={this.props.onPressMoreFilter}/> : null}
onPressMoreFilter={this.props.onPressMoreFilter}
lastSelectedPopular={this.props.lastSelectedPopular}/> : null}
{productList.isMoreFilter ?
<BrandProductMoreFilter
productList={productList}
onPressCloseMoreFilter={this.props.onPressCloseMoreFilter}
onPressMoreFilter={this.props.onPressMoreFilter}/> : null}
onPressMoreFilter={this.props.onPressMoreFilter}
lastSelectedPopular={this.props.lastSelectedPopular}/> : null}
<LoadingIndicator
isVisible={isFetching}
... ...
... ... @@ -98,10 +98,42 @@ export default class BrandProductFilter extends React.Component {
}
componentWillReceiveProps(nextProps){
if(nextProps.selectOrder==''){
if(this.props.selectOrder=='' || this.props.selectOrder=='h_v_desc'){
this.setState({
selectedIndex: 0,
});
}else if (this.props.selectOrder =='s_t_desc') {
this.setState({
selectedIndex: 1,
});
}else if (this.props.selectOrder =='s_p_asc' || this.props.selectOrder =='s_p_desc') {
this.setState({
selectedIndex: 2,
});
}else if (this.props.selectOrder =='p_d_asc' || this.props.selectOrder =='p_d_desc') {
this.setState({
selectedIndex: 3,
});
}
}
componentDidMount() {
if(this.props.selectOrder=='' || this.props.selectOrder=='h_v_desc'){
this.setState({
selectedIndex: 0,
});
}else if (this.props.selectOrder =='s_t_desc') {
this.setState({
selectedIndex: 1,
});
}else if (this.props.selectOrder =='s_p_asc' || this.props.selectOrder =='s_p_desc') {
this.setState({
selectedIndex: 2,
});
}else if (this.props.selectOrder =='p_d_asc' || this.props.selectOrder =='p_d_desc') {
this.setState({
selectedIndex: 3,
});
}
}
... ... @@ -134,11 +166,9 @@ export default class BrandProductFilter extends React.Component {
}
if(rowID==0){
if(this.props.selectOrder=='h_v_desc'){
this.lastSelectedPopular = true;
if (this.props.lastSelectedPopular) {
rowData.name='人气';
}else if (this.props.selectOrder == '') {
this.lastSelectedPopular = false;
}else {
rowData.name='默认';
}
}
... ... @@ -156,7 +186,7 @@ export default class BrandProductFilter extends React.Component {
this.setState({
selectedIndex: rowID,
});
let value = this.lastSelectedPopular ? filter.value['popular'] : filter.value['normal'];
let value = this.props.lastSelectedPopular ? filter.value['popular'] : filter.value['normal'];
this.props.onPressFilter && this.props.onPressFilter(value);
} else {
this.props.onPressFilter && this.props.onPressFilter(filters[0].key);
... ...
... ... @@ -48,16 +48,24 @@ export default class BrandProductMoreFilter extends React.Component {
}
_renderImage(rowData, rowID) {
if(rowData.value!=this.props.productList.order){
let order = '';
if (this.props.lastSelectedPopular) {
order = 'h_v_desc';
}
if(rowData.value!=order){
return null;
}
return <Image style={styles.image} source={require('../../../../image/filter/brandstore_filter_selected.png')}/>;
}
_renderRow(rowData, sectionID, rowID) {
let order = '';
if (this.props.lastSelectedPopular) {
order = 'h_v_desc';
}
let colorStyle = {};
if(rowData.value != this.props.productList.order){
if(rowData.value != order){
colorStyle = {color: '#b0b0b0'};
}
return (
... ... @@ -67,7 +75,7 @@ export default class BrandProductMoreFilter extends React.Component {
this.props.onPressMoreFilter && this.props.onPressMoreFilter(filter.value);
}}>
<View key={'row' + rowID} style={styles.rowContainer}>
<Text style={[styles.name, colorStyle]}>{rowData.name}</Text>
<Text style={[styles.name,colorStyle]}>{rowData.name}</Text>
{this._renderImage(rowData, rowID)}
</View>
</TouchableOpacity>
... ...
... ... @@ -100,7 +100,9 @@ export default class ProductCategoryList extends React.Component {
onPressFilter={this.props.onPressFilter}
lastSelected={this.props.productList.isFilter}
moreFilter={this.props.productList.isMoreFilter}
selectOrder={this.props.productList.order}/>
selectOrder={this.props.productList.order}
lastSelectedPopular={this.props.lastSelectedPopular}
selectedIndex={this.props.productFilterSelectIndex}/>
<View style={styles.container}>
<ListView
... ... @@ -180,7 +182,7 @@ let styles = StyleSheet.create({
justifyContent: 'center',
height: 44,
width: rowWidth,
paddingLeft: 15,
paddingLeft: 15,
},
underline:{
width: rowWidth,
... ...
... ... @@ -63,4 +63,5 @@ export default keyMirror({
FILTER_MORE_VIEW:null,
SET_SIMILAR_PRODUCT_INDEX: null,
SET_SHOW_SIMILAR_GUIDER: null,
UPDATE_LAST_SELECTED_POPULAR: null,
});
... ...
... ... @@ -393,6 +393,11 @@ class BrandStoreContainer extends Component {
this.props.actions.getProductList(true);
}
_onPressMoreFilter(value){
let lastSelectedPopular = false;
if (value != '') {
lastSelectedPopular = true;
}
this.props.actions.updateLastSelectedPopular(lastSelectedPopular);
this.props.actions.setFilterMoreView(false);
this.props.actions.resetListPageInfo();
this.props.actions.setProductListFilter(value);
... ... @@ -418,6 +423,7 @@ class BrandStoreContainer extends Component {
filterCategoryDetailFilterList,
filterNameFactors,
filterFactors,
lastSelectedPopular,
} = this.props.brandStore;
let isFetching = (storeFilter == 0 && resource.isFetching)
... ... @@ -433,6 +439,7 @@ class BrandStoreContainer extends Component {
receiveCouponResult={receiveCouponResult}
resource={resource}
coupon={coupon}
lastSelectedPopular={lastSelectedPopular}
productList={productList}
productListForPerson={productListForPerson}
productListForNew={productListForNew}
... ...
... ... @@ -70,6 +70,8 @@ const {
SET_SHOW_SIMILAR_GUIDER,
UPDATE_LAST_SELECTED_POPULAR,
} = require('../../constants/actionTypes').default;
export function setSimilarIndex(rowID) {
... ... @@ -1255,6 +1257,13 @@ export function getCouponFailure(error) {
}
}
export function updateLastSelectedPopular(state) {
return {
type: UPDATE_LAST_SELECTED_POPULAR,
payload: state,
}
}
export function getCoupon(couponId) {
return (dispatch, getState) => {
... ...
'use strict';
import {Record, List, Map} from 'immutable';
import Immutable,{Record, List, Map} from 'immutable';
let filters = [
{
key: 'default',
name: '默认',
value: {
normal: '',
popular: 'h_v_desc',
},
isPopular: false,
radio: true,
},
{
key: 'new',
name: '最新',
value: {
asc: 's_t_desc',
desc: 's_t_desc',
},
isAsc: false,
radio: false,
},
{
key: 'price',
name: '价格',
value: {
asc: 's_p_asc',
desc: 's_p_desc',
},
isAsc: false,
radio: false,
},
{
key: 'discount',
name: '折扣',
value: {
asc: 'p_d_asc',
desc: 'p_d_desc',
},
isAsc: false,
radio: false,
},
{
key: 'filter',
name: '筛选',
value: {
asc: 'filter',
desc: 'filter',
},
isAsc: false,
radio: false,
},
];
let InitialState = Record({
shopId: 0,
... ... @@ -75,6 +128,7 @@ let InitialState = Record({
sourceType: 0, // 0 - 默认,1 - 购,全球2 - 奥莱
recId: 0,//请求id,唯一id,跟点击相对应, 曝光和打点使用
})),
productFilters: Immutable.fromJS(filters),
productListForPerson: new (Record({
isFetching: false,
error: null,
... ... @@ -120,6 +174,7 @@ let InitialState = Record({
similarIndex: -1,
showSimilarGuider: false,
lastSelectedPopular: false,
});
export default InitialState;
... ...
... ... @@ -59,6 +59,7 @@ const {
FILTER_MORE_VIEW,
SET_SIMILAR_PRODUCT_INDEX,
SET_SHOW_SIMILAR_GUIDER,
UPDATE_LAST_SELECTED_POPULAR,
} = require('../../constants/actionTypes').default;
... ... @@ -358,6 +359,10 @@ export default function brandStoreReducer(state=initialState, action) {
return state.setIn(['receiveCouponResult', 'showMessage'], '')
.setIn(['receiveCouponResult', 'isNeedShow'], false);
}
case UPDATE_LAST_SELECTED_POPULAR: {
return state.set('lastSelectedPopular', action.payload);
}
break;
}
... ...