/** * 地图底部充电站信息组件 * @邠心vbe on 2022/12/23 */ import React, { useEffect, useState } from 'react'; import { Pressable, StyleSheet, View, Text } from 'react-native'; import { ElevationObject } from '../../../components/Button'; import utils from '../../../utils/utils'; import { ChargeStyle } from '../../charge/Charging'; import { PageList } from '../../Router'; import ConnectType, { ConnectTypeV2 } from '../../search/ConnectType'; import app from '../../../../app.json'; import TextView from '../../../components/TextView'; import BottomModal from '../../../components/BottomModal'; import SiteLabelView from '../../../components/SiteLabelView'; import VbeSkeleton from '../../../components/VbeSkeleton'; export const BottomSiteCard = ({ visible=false, stationInfo = {}, onFavorite, onClose }) => { const [loading, showDialog] = useState(true); useEffect(() => { if (stationInfo.id) { showDialog(false) } }, [stationInfo]); useEffect(() => { showDialog(true); }, [visible]); const getAvailable = (type) => { const all = stationInfo.allConnector; if (all) { if (type == 'box') { return all.boxAvailable + '/' + all.boxAll; } else { return all.available + '/' + all.all; } } else { return '0/0'; } } const getOperatingHours = () => { if (stationInfo.endlessService) { return "24/7"; } else if (stationInfo.operatingHours) { return stationInfo.operatingHours; } else { return $t('charging.toBeUpdated'); } } const getParkingFee = () => { if (stationInfo.parkingFeeFree) { return $t('charging.free'); } else if (stationInfo.parkingFee) { return stationInfo.parkingFee; } else { return $t('charging.toBeUpdated'); } } const toChargePage = () => { onClose(); if (stationInfo.upcoming) { toastShort($t("home.upcoming")) } else { utils.toChargeDetailPage(stationInfo.id, 'view', PageList.home); //startPage(PageList.chargeDetailPage, {stationInfo: stationInfo, action: 'view', from: PageList.home}); } } return ( { onClose() }} backdropOpacity={0} contentStyle={styles.bottomModal}> { loading ? : {stationInfo.name} {stationInfo.address} {stationInfo.siteType} { (stationInfo.allConnector && stationInfo.allConnector.available > 0) && {$t("charging.statusAvailable")} } {$t("charging.operatingHours")} {getOperatingHours()} {$t("charging.parkingFees")} {getParkingFee()} {$t("charging.additionalInfo")} {stationInfo?.additionalNotes} { stationInfo.upcoming ? {$t("home.upcoming")} : <> { utils.directMaps(stationInfo.latitude, stationInfo.longitude, stationInfo.address); }}> Directions { app.modules.bookmarks && {stationInfo.favorite ? "Saved" : "Save"} } {/* { startPage(PageList.scanqr, {actionDetail: true}); }}> Scan */} toChargePage()}> More Info } {/* stationInfo?.labels?.length > 0 && { stationInfo.labels.map((item, index) => )} */} } ) } const styles = StyleSheet.create({ bottomModal: { backgroundColor: pageBackground }, stationBarView: { padding: 16 }, stationBarPresed: { backgroundColor: "#F6F6F6", ...ElevationObject(5) }, stationInfo: { flex: 1, height: 45, paddingLeft: 4, paddingRight: 8, justifyContent: 'space-around' }, stationTitle: { flex: 1, color: textPrimary, fontSize: 24, fontWeight: 'bold', paddingBottom: 4 }, stationAddress: { color: textSecondary, fontSize: 14, paddingTop: 6, paddingBottom: 8 }, siteTypes: { color: textLight, height: 20, fontSize: 12, marginRight: 6, borderRadius: 30, ...$padding(0, 10), backgroundColor: textPrimary }, stationAvailable: { color: textPrimary, height: 20, fontSize: 12, marginRight: 6, borderRadius: 30, borderWidth: 1, borderColor: colorAccent, ...$padding(0, 8, 0, 4) }, directView: { zIndex: 1, height: 45, marginLeft: 8, marginRight: 4, alignItems: 'center', justifyContent: 'space-between' }, distanceText: { color: textPrimary, fontSize: 12, }, directIconView: { zIndex: 1, height: 32, marginRight: 10, borderWidth: 1, borderRadius: 30, borderColor: textPrimary, alignItems: 'center', flexDirection: 'row', justifyContent: 'center', ...$padding(2, 10, 2, 6) }, bookmarked: { color: textLight, borderColor: colorAccent, backgroundColor: colorAccent }, directText: { color: textPrimary, fontSize: 14, paddingLeft: 4 }, connectView: { flex: 1, paddingTop: 12, paddingBottom: 12, alignItems: 'center', flexDirection: 'row' }, divideLine: { height: 1, backgroundColor: '#AEAEAE' }, infoDetailsView: { paddingTop: 8, flexDirection: 'row' }, infoTitle: { color: textPrimary, fontSize: 14, //fontWeight: 'bold', ...$padding(8, 0, 8) }, infoView: { paddingBottom: 8 }, infoText: { color: textCancel, fontSize: 12 }, closeIcon: { width: 30, height: 30, marginTop: -16, marginRight: -8, alignItems: 'center', justifyContent: 'center' }, siteLabelsView: { marginBottom: 5, flexWrap: 'wrap', alignItems: 'center', flexDirection: 'row' }, labelIcon: { width: 16, height: 16, marginRight: 6 }, upcomingIcon: { marginLeft: 8, opacity: .3 }, upcomingText: { color: colorAccent, fontSize: 10, opacity: .3, marginLeft: 8, marginTop: -3 } })