/**
* 搜索页
* @邠心vbe on 2021/04/12
*/
import React, { Component } from 'react';
import { View, Text, StyleSheet, TextInput, FlatList, Pressable, Linking, Image } from 'react-native';
import apiStation from '../../api/apiStation';
import TextRadius from '../../components/TextRadius';
import utils from '../../utils/utils';
import Provider from '../charge/Provider';
import { PageList } from '../Router';
export default class Search extends Component {
constructor(props) {
super(props);
this.state = {
isSearch: false,
searchResult: [{id:0}]
};
}
componentDidMount() {
this.getGeoLocation();
}
getGeoLocation() {
navigator.geolocation.getCurrentPosition(location => {
let latlng = {
lat: location.coords.latitude,
lng: location.coords.longitude
}
this.searchStation(latlng);
}, error => {
console.warn("getGeoLocation", error);
});
}
searchStation(latlng) {
this.setState({
isSearch: true
});
latlng.siteName = this.searchWorld
apiStation.searchStation(latlng).then(res => {
if (res.data.sites) {
const list = [];
res.data.sites.forEach(item => {
list.push({
id: item.sitePk,
name: item.siteName,
address: item.siteAddress,
latitude: item.locationLatitude,
longitude: item.locationLongitude,
acConnector: item.acConnector,
allConnector: item.allConnector,
dcConnector: item.dcConnector,
siteType: item.siteType,
distance: utils.getDistance(item.distance),
serviceProvider: item.serviceProvider
});
});
this.setState({
isSearch: false,
searchResult: list
});
}
}).catch(err => {
console.log('err', err);
this.setState({
isSearch: false,
searchResult: []
});
});
}
intoStation(info) {
startPage(PageList.chargeDetail, {stationInfo: info, action: 'search'});
}
listItem = ({item, index, separators}) => {
if (item.id) {
return (
this.intoStation(item)}>
{item.name}
{ item.allConnector && item.allConnector.available > 0 &&
Available
}
{item.address}
{
utils.directMaps(item.latitude, item.longitude, item.address);
}}>
{item.distance}
);
} else {
return null;
}
}
render() {
return (
{
this.searchWorld = text;
}}
onSubmitEditing={() => {
this.getGeoLocation();
}}/>
{ this.state.isSearch
?
: item.id}
ListEmptyComponent={No search result}
/>
}
);
}
}
export const ConnectType = ({type, available, all}) => {
if (type) {
return (
{type}
{available}/{all}
);
} else {
return null;
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: 'white'
},
searchView: {
marginTop: 16,
marginLeft: 16,
marginRight: 16,
marginBottom: 8,
paddingLeft: 16,
paddingRight: 16,
borderRadius: 60,
alignItems: 'center',
flexDirection: 'row',
backgroundColor: '#F5F5F5'
},
searchInput: {
flex: 1,
color: '#333',
...$padding(6, 8),
fontSize: 15,
marginLeft: 4,
},
searchingView: {
padding: 16,
alignItems: 'center'
},
seachingIcon: {
width: 60,
height: 60
},
noResult: {
color: '#999',
fontSize: 14,
padding: 20,
textAlign: 'center',
},
listView: {
flex: 1
},
itemView: {
alignItems: 'center',
flexDirection: 'row',
borderBottomWidth: 1,
borderBottomColor: '#eee'
},
stationInfo: {
flex: 1,
padding: 16
},
nameView: {
paddingTop: 3,
alignItems: 'center',
flexDirection: 'row'
},
stationName: {
color: '#333',
fontSize: 18,
fontWeight: 'bold'
},
stationAddress: {
color: '#666',
fontSize: 14,
paddingBottom: 8
},
infoStatus: {
fontSize: 10,
paddingTop: 3,
paddingLeft: 8,
paddingRight: 8,
paddingBottom: 3,
borderRadius: 5,
marginLeft: 12,
},
selected: {
color: '#333',
backgroundColor: colorAccent
},
available: {
color: 'white',
backgroundColor: '#90DB0A'
},
unavailable: {
color: '#999',
fontSize: 10.5,
paddingTop: 7,
paddingLeft: 9,
paddingRight: 9,
paddingBottom: 7,
backgroundColor: '#CCC'
},
connectView: {
paddingTop: 4,
paddingBottom: 4,
alignItems: 'center',
flexDirection: 'row'
},
connectType: {
borderWidth: 1,
borderColor: '#333',
borderRadius: 3,
marginRight: 16,
alignItems: 'center',
flexDirection: 'row',
},
typeLabel: {
color: '#fff',
fontSize: 12,
paddingTop: 2,
paddingLeft: 10,
paddingRight: 10,
paddingBottom: 2,
backgroundColor: '#333'
},
typeContent: {
color: '#333',
fontSize: 12,
paddingLeft: 10,
paddingRight: 6,
},
typeBold: {
fontSize: 14,
fontWeight: 'bold'
},
directView: {
zIndex: 1,
paddingTop: 4,
paddingRight: 16,
alignItems: 'center'
},
distanceText: {
color: '#333',
fontSize: 12,
paddingTop: 2
},
});