Detail.js 3.29 KB
'use strict';

import React, {Component} from 'react';
import Immutable, {Map} from 'immutable';
import DetailBrand from './DetailBrand';
import OtherArticle from './OtherArticle';
import SingleImage from './SingleImage';
import DetailText from './DetailText';

import ReactNative, {
    View,
    Text,
    Image,
    ListView,
    StyleSheet,
    Dimensions,
    TouchableOpacity,
    InteractionManager,
    Platform,
} from 'react-native';



export default class Detail extends 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),
        });
    }

    shouldComponentUpdate(nextProps){

        if (Immutable.is(nextProps.resource, this.props.resource)) {
            return false;
        } else {
            return true;
        }
    }

    renderRow(rowData,sectionID,rowID,highlightRow) {

        if (sectionID == 'detailList') {
            let template_name = rowData.get('template_name');
            if (template_name == 'text') {
                return (
                    <DetailText resource={rowData}/>
                );
            }else if (template_name == 'single_image') {
                return (
                    <SingleImage resource={rowData}/>
                );
            }else if (template_name == 'small_image') {
                return (
                    <Text>small_image</Text>
                );
            }else if (template_name == 'weixinPublic') {
                return (
                    <Text>weixinPublic</Text>
                );
            }else if (template_name == 'collocation') {
                return (
                    <Text>collocation</Text>
                );
            }else if (template_name == 'moreLink') {
                return (
                    <Text>moreLink</Text>
                );
            }

        }else if (sectionID == 'detailBrand') {
            return (
                <DetailBrand resource={rowData}/>
            );
        }else if (sectionID == 'detailOtherArticle') {
            return (
                <OtherArticle resource={rowData}/>
            );
        }
        return null;
    }

    render() {

        let {resource} = this.props;
        let {
            articleId,
        	article,
            author,
            content,
            brand,
            otherArticle,
            weixin,
        } = resource;
        let list = content?content.get('data'):[];

        let dataSource = {
            detailList: list.size?list.toArray():[],
            detailBrand: [brand],
            detailOtherArticle: [otherArticle],
        };

        return (
            <ListView
                contentContainerStyle={styles.contentContainer}
                enableEmptySections={true}
                showsVerticalScrollIndicator={false}
                dataSource={this.dataSource.cloneWithRowsAndSections(dataSource)}
                renderRow={this.renderRow}
            />
        );
    }
}

let {width, height} = Dimensions.get('window');

let styles = StyleSheet.create({
    container: {
        flex: 1,
        backgroundColor: '#f0f0f0',
    },
    contentContainer:{

    },
});