import React from 'react'; import {useState, useEffect} from 'react'; import { ScrollView, StyleSheet, Text, View, Dimensions, Button, Image, TextInput, TouchableOpacity, ActivityIndicator, Animated, SafeAreaView, } from 'react-native'; import { connect } from 'react-redux'; import Theme from '../../../../components/theme.style.js'; import Assets from '../../../../components/assets.manager.js'; import Icon from '../../../../components/icons'; import DB from '../../../../components/storage'; import REQUEST from '../../../../components/api'; import {Divider} from 'react-native-elements'; import Geolocation from '@react-native-community/geolocation'; import SlidingUpPanel from 'rn-sliding-up-panel'; import MapView, {PROVIDER_GOOGLE, Marker} from 'react-native-maps'; import * as Animatable from 'react-native-animatable'; import BottomSheet from 'reanimated-bottom-sheet'; import NetInfo from '@react-native-community/netinfo'; const styles = { container: { flex: 1, backgroundColor: '#f8f9fa', alignItems: 'center', justifyContent: 'center', }, panel: { flex: 1, backgroundColor: 'white', // position: 'relative', }, panelHeader: { height: 60, backgroundColor: Theme.colors.lightGray, alignItems: 'center', justifyContent: 'center', }, }; const {height} = Dimensions.get('window'); const renderStations = (data, onPress, onUpdateFavorite, props) => { return data.map((station, index) => { let stars = [1, 2, 3, 4, 5].map((star, i) => { let name = station.stars >= star ? 'star' : 'staro'; let mgn = index > 0 ? 5 : 0; return ( ); }); return ( onPress(station) || null} key={index} style={{backgroundColor: props.app_theme?.theme.colors.background}}> {station.name} {station.address} {stars} updateFavorite(station, index, onUpdateFavorite)} style={{flex: 0, justifyContent: 'center'}}> ); }); }; const updateFavorite = async (city, index, callback) => { let session = await DB.session(); let urlTask = city.favorite ? 'station_delete_favorite' : 'station_add_favorite'; let method = city.favorite ? 'delete' : 'get'; console.log(urlTask, method); REQUEST( urlTask, method, { Authorization: session.token }, { noID: true, value: city.station_uuid, }, {}, function (res) { callback(index, city.favorite ? false : true); }, function (error) { console.log(error); }, ); }; const renderStationPanel = (props) => { const [panel, setpanel] = useState(null); const [updatedFavorite, setupdatedfavorite] = useState(false); const [updatedFavoriteIndex, setupdatedfavoriteindex] = useState(null); const [loading, setLoading] = useState(false); const [snap, setSnap] = useState(['10', '10', '3']); const [initialSnap, setInitialSnap] = useState(0) useEffect(() => { init(); }, [props.visible]); const init = () => { if (props.visible == true) { setSnap(['35', '8', '8']); setInitialSnap(0) } else if (props.data.length != 0) { setSnap(['38', '8', '8']); setInitialSnap(0) } else { setSnap(props.snapPoints); setInitialSnap(2) } }; const getPanelTitle = () => { if(props.error) return 'There was an error' else if(props.loading || !props.isSearched && props.data.length == 0) return 'Getting Nearby Stations' else if(props.isSearched) return 'Unioil Stations found: ' + (props.data.length > 0 ? props.data.length : 0) else return 'Unioil Stations found: ' + (props.data.length > 0 ? props.data.length : 0) } const renderHeaders = () => { return ( {getPanelTitle()} {props.error ? ( Try Again ) : props.loading ? ( ) : null} ); }; const renderContents = () => { return ( {props.data.length > 0 ? renderStations(props.data, props.onClick, props.onUpdateFavorite, props) : } ); }; return ( 1 ? snap : ['20','20','20']} renderContent={renderContents} enabledBottomInitialAnimation={true} enabledInnerScrolling={true} initialSnap={0} renderHeader={renderHeaders}/> ); } const mapStateToProps = (state) => { return { app_theme: state.appThemeReducer.theme } } export default connect(mapStateToProps, null)(renderStationPanel) // const renderStations = (data, onPress, onUpdateFavorite) => { // return data.map((station, index) => { // let stars = [1, 2, 3, 4, 5].map((star, i) => { // let name = station.stars >= star ? 'star' : 'staro'; // let mgn = index > 0 ? 5 : 0; // return ( // // // // ); // }); // return ( // onPress(station) || null} // key={index} // style={{backgroundColor: '#fff'}}> // // // // {station.name} // // // {station.address} // // {stars} // // updateFavorite(station, index, onUpdateFavorite)} // style={{flex: 0, justifyContent: 'center'}}> // // // // // // ); // }); // }; // const updateFavorite = async (city, index, callback) => { // let session = await DB.session(); // let urlTask = city.favorite // ? 'station_delete_favorite' // : 'station_add_favorite'; // let method = city.favorite ? 'delete' : 'get'; // console.log(urlTask, method); // REQUEST( // urlTask, // method, // { // Authorization: session.token, // }, // { // noID: true, // value: city.station_uuid, // }, // {}, // function (res) { // console.log(res.message); // callback(index, city.favorite ? false : true); // }, // function (error) { // console.log(error); // }, // ); // }; // export default function renderStationPanel(props) { // const [panel, setpanel] = useState(null); // const [updatedFavorite, setupdatedfavorite] = useState(false); // const [updatedFavoriteIndex, setupdatedfavoriteindex] = useState(null); // const [loading, setLoading] = useState(false); // const [snap, setSnap] = useState(['10', '10', '3']); // const [initialSnap, setInitialSnap] = useState(0) // // useEffect(() => { // // // console.log("Error has", props.error) // // if (props.visible) { // // panel.show(); // // } // // return setpanel(null); // // }, [props.visible]); // const init = () => { // if (props.visible == true) { // setSnap(['38', '8', '8']); // setInitialSnap(0) // } else if (props.data.length != 0) { // // setSnap([450, 300, 60]); // // setSnap(['450', '300', '60']); // setSnap(['38', '8', '8']); // setInitialSnap(0) // } else { // // setSnap([60, 60, 60]); // // setSnap(['60', '60', '60']); // setSnap(props.snapPoints); // setInitialSnap(2) // } // }; // useEffect(() => { // init(); // }, [props.visible]); // const getPanelTitle = () => { // if(props.error) return 'There was an error' // else if(props.loading || !props.isSearched && props.data.length == 0) return 'Getting Nearby Stations' // else if(props.isSearched) return 'Unioil Stations found: ' + props.data.length // else return 'Unioil Stations found: ' + props.data.length // } // const renderHeaders = () => { // return ( // // // // // {/* {props.error // ? 'There was an error' // : props.loading || props.data.length == 0 // ? 'Getting Nearby Stations' // : 'Unioil Stations found: ' + props.data.length} */} // {getPanelTitle()} // // // {props.error ? ( // // Try Again // // ) : props.loading ? ( // // ) : null} // // // // {/* // {renderStations(props.data, props.onClick, props.onUpdateFavorite)} // // */} // // ); // }; // const renderContents = () => { // return ( // // {props.data.length == 0 ? : renderStations(props.data, props.onClick, props.onUpdateFavorite)} // // ); // }; // return ( // // // // ); // }