IndexListView.js 2.89 KB
'use strict';

import React from 'react';
import ReactNative from 'react-native';
import {isEmptyObject} from '../../utils/Utils';
import Immutable, {Map} from 'immutable';
import * as _ from 'lodash';

const {
    View,
    Image,
    Text,
    TouchableOpacity,
    Dimensions,
    StyleSheet,
} = ReactNative;

export default class IndexListView extends React.Component {

    constructor(props) {
        super (props);
        this.onTouchMove = this.onTouchMove.bind(this);

        this.state = {
            list:[]
        };
    }

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

    onTouchMove(e) {
        let {dataSource} = this.props;
        let Y =  e.nativeEvent.pageY;
        for (var i = 0; i < this.state.list.length; i++) {
            if (Y > this.state.list[i].y && Y < this.state.list[i].y + 12) {
                let name = this.state.list[i].name;
                if (name == '0') {
    				name = '0-9';
    			}
                this.props.onLetterPress && this.props.onLetterPress(i,name);
                break;
            }
        }
    }

    onLayout(name,e) {
        let {y} = e.nativeEvent.layout;
        let Y = {'name':name,'y':y}
        let list = this.state.list;
        list.push(Y);
        this.setState(list)
    }

    render() {

        let {dataSource} = this.props;
        if (dataSource.length == 0) {
            return null;
        }

 		let keyData = [];

        keyData.push(<Image key={'search'} style={styles.image} source={require('../../images/search.png')}/>);
        for (var i = 0; i < dataSource.length; i++) {
            let name = dataSource[i];
            if (name == '0-9') {
				name = '0';
			}


            keyData.push(<View key={i} style={styles.TV} onLayout={this.onLayout.bind(this, name)}><Text style={styles.text}>{name}</Text></View>);
        }

        return (
            <View style={styles.container} onTouchStart={this.onTouchMove} onTouchMove={this.onTouchMove} >
				{keyData.map((elem, index) => {return elem;})}
            </View>
        );
    }
}

let {width, height} = Dimensions.get('window');
let itemHeight = 12;
let viewHeight = height - 112;

let styles = StyleSheet.create({
    container: {
		position: 'absolute',
		width: 20,
        height: viewHeight,
		bottom : 1,
		right: 1,
		backgroundColor: 'rgba(255,255,255,0.2)',
        alignItems: 'center',
		justifyContent: 'center',
    },
    TV: {
        width: 12,
        height: 12,
        backgroundColor: 'transparent',
        marginTop: 2,
        justifyContent: 'center',
    },
	text: {
		justifyContent: 'center',
		textAlign: 'center',
		fontSize: 11,
		color: 'black',
		backgroundColor: 'transparent',

        fontWeight: 'bold',
	},
    image: {
        width: 8,
        height: 8,
    },
});