/** * 充电桩收藏页 * @邠心vbe on 2023/06/28 */ import React, { Component } from 'react'; import { View, Text, StyleSheet, TextInput, FlatList, Image, RefreshControl } from 'react-native'; import apiStation from '../../api/apiStation'; import Dialog from '../../components/Dialog'; import { MyRefreshProps } from '../../components/ThemesConfig'; import utils from '../../utils/utils'; import { PageList } from '../Router'; import ListViewV2 from '../search/ListViewV2'; export default class Bookmarks extends Component { constructor(props) { super(props); this.state = { isSearch: false, searchResult: [{id:0}], latlng: { lat: 0.00001, lng: 0.00001 } }; } componentDidMount() { this.getGeoLocation(); } refreshList() { this.setState({ isSearch: true }); this.getGeoLocation(); } getGeoLocation() { navigator.geolocation.getCurrentPosition(location => { let latlng = { lat: location.coords.latitude, lng: location.coords.longitude } this.setState({ latlng: latlng }) this.searchStation(latlng); }, error => { console.info("[Search] getGeoLocation", error); this.searchStation(this.state.latlng); }); } searchStation(latlng, time=500) { this.setState({ isSearch: true }); //latlng.siteName = this.searchWorld apiStation.getBookmarkList(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, favorite: item.favorite, distance: utils.getDistance(item.distance), serviceProvider: item.serviceProvider }); }); //setTimeout(() => { this.setState({ isSearch: false, searchResult: list }); //}, time); } }).catch(err => { console.log('searchStation-err', err); this.setState({ isSearch: false, searchResult: [] }); }); } favoriteSite(info) { if (info?.id) { Dialog.showProgressDialog(); apiStation.bookmarkSite(info.id).then(res => { this.searchStation(this.state.latlng); }).catch(err => { toastShort(err); }).finally(() => { Dialog.dismissLoading(); }) } } intoStation(info) { startPage(PageList.chargeDetailPage, {stationInfo: info, action: "bookmarks"}); } listItem = (props) => { return ( this.intoStation(props.item)} onFavorite={() => this.favoriteSite(props.item)}/> ) } render() { return ( {/* { this.searchWorld = text; }} onSubmitEditing={() => { //this.getGeoLocation(); this.searchStation(this.state.latlng, 1000); }}/> */} item.id} keyboardShouldPersistTaps="always" ListEmptyComponent={{$t('home.noSearch')}} refreshControl={ this.refreshList()} /> } /> ); } } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: pageBackground }, searchView: { marginTop: 16, marginLeft: 16, marginRight: 16, marginBottom: 8, paddingLeft: 16, paddingRight: 16, borderRadius: 60, borderWidth: 1, borderColor: '#E5E5E5', alignItems: 'center', flexDirection: 'row', backgroundColor: '#F5F5F5' }, searchInput: { flex: 1, color: textPrimary, ...$padding(6, 8), fontSize: 15, marginLeft: 4, lineHeight: 20 }, 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: textPrimary, 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: textPrimary, backgroundColor: colorAccent }, available: { color: textLight, 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' } });