ListView.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. /**
  2. * 搜索列表复用组件
  3. * @邠心vbe on 2023/02/03
  4. */
  5. import React from 'react';
  6. import { Pressable, StyleSheet, Text, View } from 'react-native';
  7. import TextRadius from '../../components/TextRadius';
  8. import utils from '../../utils/utils';
  9. import Provider from '../charge/Provider';
  10. import ConnectType from './ConnectType';
  11. export default ListView = ({item, index, separators, onPress}) => {
  12. if (item.id) {
  13. return (
  14. <View
  15. style={styles.itemView}
  16. key={index}>
  17. <Pressable
  18. style={styles.stationInfo}
  19. onPress={onPress}>
  20. <View style={styles.nameView}>
  21. <Text style={styles.stationName}>{item.name}</Text>
  22. { item.allConnector && item.allConnector.available > 0 &&
  23. <TextRadius style={[styles.infoStatus, styles.available]}>Available</TextRadius>
  24. }
  25. </View>
  26. <Provider providers={item.serviceProvider}/>
  27. <Text style={styles.stationAddress}>{item.address}</Text>
  28. <View style={styles.connectView}>
  29. <ConnectType {...item.acConnector}/>
  30. <ConnectType {...item.dcConnector}/>
  31. </View>
  32. </Pressable>
  33. <Pressable
  34. style={styles.directView}
  35. onPress={() => {
  36. utils.directMaps(item.latitude, item.longitude, item.address);
  37. }}>
  38. <MaterialIcons
  39. name='directions'
  40. size={32}
  41. color={colorAccent}/>
  42. <Text style={styles.distanceText}>{item.distance}</Text>
  43. </Pressable>
  44. </View>
  45. );
  46. } else {
  47. return <></>;
  48. }
  49. }
  50. const styles = StyleSheet.create({
  51. itemView: {
  52. alignItems: 'center',
  53. flexDirection: 'row',
  54. borderBottomWidth: 1,
  55. borderBottomColor: '#eee'
  56. },
  57. stationInfo: {
  58. flex: 1,
  59. padding: 16
  60. },
  61. nameView: {
  62. paddingTop: 3,
  63. alignItems: 'center',
  64. flexDirection: 'row'
  65. },
  66. stationName: {
  67. color: textPrimary,
  68. fontSize: 18,
  69. fontWeight: 'bold'
  70. },
  71. stationAddress: {
  72. color: '#666',
  73. fontSize: 14,
  74. paddingBottom: 8
  75. },
  76. infoStatus: {
  77. fontSize: 10,
  78. paddingTop: 3,
  79. paddingLeft: 8,
  80. paddingRight: 8,
  81. paddingBottom: 3,
  82. borderRadius: 5,
  83. marginLeft: 12,
  84. },
  85. selected: {
  86. color: textPrimary,
  87. backgroundColor: colorAccent
  88. },
  89. available: {
  90. color: textLight,
  91. backgroundColor: '#90DB0A'
  92. },
  93. unavailable: {
  94. color: '#999',
  95. fontSize: 10.5,
  96. paddingTop: 7,
  97. paddingLeft: 9,
  98. paddingRight: 9,
  99. paddingBottom: 7,
  100. backgroundColor: '#CCC'
  101. },
  102. connectView: {
  103. paddingTop: 4,
  104. paddingBottom: 4,
  105. alignItems: 'center',
  106. flexDirection: 'row'
  107. },
  108. connectType: {
  109. borderWidth: 1,
  110. borderColor: textPrimary,
  111. borderRadius: 3,
  112. marginRight: 16,
  113. alignItems: 'center',
  114. flexDirection: 'row',
  115. },
  116. directView: {
  117. zIndex: 1,
  118. paddingTop: 4,
  119. paddingRight: 16,
  120. alignItems: 'center'
  121. },
  122. distanceText: {
  123. color: textPrimary,
  124. fontSize: 12,
  125. paddingTop: 2
  126. },
  127. })