No Description

EmotionsView.js 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. /**
  2. * Desc: 表情选择view
  3. *
  4. * Created by WangGanxin on 2018/1/31
  5. * Email: mail@wangganxin.me
  6. */
  7. import React, {Component,PureComponent} from 'react';
  8. import {
  9. View,
  10. StyleSheet,
  11. } from 'react-native';
  12. import PropTypes from 'prop-types';
  13. import {IndicatorViewPager, PagerDotIndicator} from 'rn-viewpager';
  14. import EmotionsChildView from './EmotionsChildView';
  15. import {EMOTIONS_DATA} from './DataSource';
  16. export default class EmotionsView extends PureComponent {
  17. constructor(props){
  18. super(props);
  19. this.state = ({
  20. });
  21. }
  22. _objToStrMap(obj) {
  23. let strMap = new Map();
  24. for (let key of Object.keys(obj)) {
  25. strMap.set(key, obj[key]);
  26. }
  27. return strMap;
  28. }
  29. _renderDotIndicator() {
  30. return <PagerDotIndicator pageCount={5} dotStyle={styles.dotStyle} selectedDotStyle={styles.selectedDotStyle}/>;
  31. }
  32. _renderPagerView(){
  33. let viewItems = [];
  34. let dataMaps = this._objToStrMap(EMOTIONS_DATA);
  35. let dataKeys = [];
  36. //抽取代表符
  37. let index = 0;
  38. for (let data of dataMaps.keys()) {
  39. dataKeys.push({
  40. key:index,
  41. value:data,
  42. });
  43. index++;
  44. }
  45. //分页
  46. let page0 = dataKeys.slice(0,20);
  47. let page1 = dataKeys.slice(20,40);
  48. let page2 = dataKeys.slice(40,60);
  49. let page3 = dataKeys.slice(60,80);
  50. let page4 = dataKeys.slice(80,100);
  51. //添加删除键
  52. page0.push({
  53. key:100,
  54. value:'/{del'
  55. });
  56. page1.push({
  57. key:101,
  58. value:'/{del'
  59. });
  60. page2.push({
  61. key:102,
  62. value:'/{del'
  63. });
  64. page3.push({
  65. key:103,
  66. value:'/{del'
  67. });
  68. page4.push({
  69. key:104,
  70. value:'/{del'
  71. });
  72. viewItems.push(<View key={0}><EmotionsChildView key={0} dataSource={page0} onPress={(code) => this.props.onSelected(code)}/></View>);
  73. viewItems.push(<View key={1}><EmotionsChildView key={1} dataSource={page1} onPress={(code) => this.props.onSelected(code)}/></View>);
  74. viewItems.push(<View key={2}><EmotionsChildView key={2} dataSource={page2} onPress={(code) => this.props.onSelected(code)}/></View>);
  75. viewItems.push(<View key={3}><EmotionsChildView key={3} dataSource={page3} onPress={(code) => this.props.onSelected(code)}/></View>);
  76. viewItems.push(<View key={4}><EmotionsChildView key={4} dataSource={page4} onPress={(code) => this.props.onSelected(code)}/></View>);
  77. return viewItems;
  78. }
  79. render() {
  80. return (
  81. <IndicatorViewPager
  82. style={styles.wrapper}
  83. indicator={this._renderDotIndicator()}>
  84. { this._renderPagerView() }
  85. </IndicatorViewPager>
  86. );
  87. }
  88. }
  89. EmotionsView.propTypes = {
  90. onSelected:PropTypes.func,
  91. };
  92. const styles = StyleSheet.create({
  93. wrapper: {
  94. width:'100%',
  95. height:175,
  96. paddingTop:10,
  97. backgroundColor:'white'
  98. },
  99. dotStyle:{
  100. backgroundColor:'#f5f5f5',
  101. },
  102. selectedDotStyle:{
  103. backgroundColor:'#BBBBBB',
  104. },
  105. });