this.setState({ modalProductOpened: null }, () => {\r\n if (Platform.OS === 'web') window.location.hash = '';\r\n })} />\r\n\r\n {/* CHECKOUT STRIP */}\r\n \r\n\r\n \r\n {/* BANNERS */}\r\n {this.state.banners !== null &&\r\n \r\n {this.state.banners && this.state.banners.length ? <>\r\n { this._carousel = c; }}\r\n onBeforeSnapToItem={async (index) => {\r\n //console.log('SLIDE WILL CHANGE:', index, this['Slide' + index])\r\n // timeout\r\n if (this._tOut) clearTimeout(this._tOut);\r\n if (this.state.banners[index] && this.state.banners[index].length)\r\n this._tOut = setTimeout(() => this._carousel.snapToNext(), this.state.banners[index].length);\r\n // try replay video\r\n if (this.state.banners[index] && this.state.banners[index].type === 'video') {\r\n this.replayAllVidsHack();\r\n\r\n var vidRef = this['Slide' + index];\r\n //await vidRef.unloadAsync();\r\n //await vidRef.loadAsync({ uri: this.state.banners[index].url + '?v=' + Helpers.NewGuid() });\r\n await vidRef.setIsLoopingAsync(false);\r\n await vidRef.stopAsync(false);\r\n await vidRef.playFromPositionAsync(0);\r\n await vidRef.setIsLoopingAsync(true);\r\n }\r\n }}\r\n data={this.state.banners}\r\n renderItem={({ item, index }) => item.type == 'video' ? \r\n \r\n :\r\n \r\n \r\n \r\n }\r\n style={{ maxWidth: Helpers.percentW(100), width: 420 }}\r\n sliderWidth={Helpers.Min(420, Helpers.percentW(100))}\r\n itemWidth={Helpers.Min(420, Helpers.percentW(90)) - Helpers.percentW(10)}\r\n />\r\n this._carousel.snapToPrev()}>\r\n \r\n \r\n this._carousel.snapToNext()}>\r\n \r\n \r\n >\r\n :\r\n this.state.banners === null ?\r\n \r\n :\r\n <>\r\n \r\n Carregando destaques...\r\n >\r\n }\r\n \r\n }\r\n\r\n {/* BUSCA TEXTO, FILTROS E ORDENACAO */}\r\n \r\n {/* TEXT SEARCH */}\r\n \r\n this.setState({ searchText: q }, this.getProducts)}\r\n delay={250} style={{\r\n maxWidth: Helpers.percentW(94), width: 420, flex: 1, marginHorizontal: 18, paddingHorizontal: 6, borderWidth: 1, borderColor: Colors.darkLines,\r\n paddingVertical: 2, backgroundColor: '#fff', flexDirection: 'row', alignItems: 'center', borderRadius: 3, height: 38\r\n }}\r\n />\r\n \r\n {/* BRANDS AND ORDERING */}\r\n \r\n {/* BRANDS FILTER */}\r\n \r\n this.setState({\r\n selectedBrand: itemValue,\r\n showingProds: defaultShowingProds\r\n })}\r\n data={[\r\n { label: \"Todas as marcas\", value: \"0\" },\r\n ...this.state.brands.map(x => x ? { value: x, label: x } : null)\r\n ]} />\r\n \r\n\r\n {/* ORDER BY */}\r\n \r\n this.setState({\r\n orderBy: itemValue, showingProds: defaultShowingProds\r\n }\r\n , () => this.getProducts())}\r\n data={[\r\n { label: \"Destaques\", value: \"-Priority\" },\r\n { label: \"Nome A-Z\", value: \"Name\" },\r\n { label: \"Nome Z-A\", value: \"-Name\" },\r\n { label: \"Menor preço\", value: \"Price\" },\r\n { label: \"Maior preço\", value: \"-Price\" },\r\n ]} />\r\n \r\n\r\n \r\n \r\n\r\n {/* PRODUCTS */}\r\n \r\n {this.state.loadingProducts &&\r\n \r\n \r\n Carregando produtos...\r\n }\r\n {this.renderAllProds()}\r\n\r\n {/* BOTAO CARREGAR MAIS PRODUTOS */}\r\n {this.state.hasMoreProdsToLoad && \r\n {\r\n //this.setState({ showingProds: this.state.showingProds + 40 });\r\n this.getProducts(false);\r\n }}>\r\n \r\n \r\n Carregar mais produtos\r\n \r\n \r\n \r\n }\r\n {/* {this.props.catalog && this.state.selectedCategory ?\r\n this.renderProds(this.state.selectedCategory) : null\r\n } */}\r\n \r\n \r\n >\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state) => ({\r\n catalog: state.catalog,\r\n activeCartId: state.cart.activeCartId,\r\n //cartCount: getCart(state.cart.carts, state.cart.activeCartId).qtd,\r\n }),\r\n null)(Products);\r\n\r\n\r\n\r\n","import React, {Component} from 'react';\r\nimport PropTypes from 'prop-types';\r\nimport {\r\n Image,\r\n Text,\r\n View,\r\n ScrollView,\r\n StyleSheet,\r\n Animated,\r\n PanResponder,\r\n TouchableHighlight,\r\n TouchableOpacity,\r\n Dimensions,\r\n} from 'react-native';\r\n\r\n// const reactNativePackage = require('react-native/package.json');\r\n// const splitVersion = reactNativePackage.version.split('.');\r\n// const majorVersion = +splitVersion[0];\r\n// const minorVersion = +splitVersion[1];\r\n\r\nconst styles = StyleSheet.create({\r\n container: {\r\n flexDirection: 'row',\r\n backgroundColor: '#222',\r\n },\r\n layoutIndicator: {\r\n height: 15,\r\n position: 'absolute',\r\n bottom: 5,\r\n left: 0,\r\n right: 0,\r\n justifyContent: 'center',\r\n alignItems: 'center',\r\n flexDirection: 'row',\r\n backgroundColor: 'transparent',\r\n },\r\n indicator: {\r\n margin: 3,\r\n opacity: 0.9\r\n },\r\n indicatorSelected: {\r\n opacity: 1,\r\n },\r\n containerImage : {\r\n flex: 1,\r\n width: Dimensions.get('window').width,\r\n },\r\n overlay: {\r\n opacity: 0.5,\r\n backgroundColor: 'black',\r\n },\r\n layoutText: {\r\n position: 'absolute',\r\n paddingHorizontal: 15,\r\n bottom: 30,\r\n left: 0,\r\n right: 0,\r\n justifyContent: 'flex-start',\r\n alignItems: 'flex-start',\r\n flexDirection: 'column',\r\n backgroundColor: 'transparent',\r\n },\r\n textTitle: {\r\n fontWeight: 'bold',\r\n fontSize: 15, \r\n color: 'white',\r\n },\r\n textCaption: {\r\n fontWeight: '400',\r\n fontSize: 12, \r\n color: 'white',\r\n }\r\n});\r\n\r\nexport default class Slideshow extends Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n position: 0,\r\n height: Dimensions.get('window').width * (4 / 9),\r\n width: Dimensions.get('window').width,\r\n scrolling: false,\r\n };\r\n }\r\n\r\n _onRef(ref) {\r\n this._ref = ref;\r\n if (ref && this.state.position !== this._getPosition()) {\r\n this._move(this._getPosition());\r\n }\r\n }\r\n\r\n _move(index) {\r\n const isUpdating = index !== this._getPosition();\r\n const x = this.state.width * index;\r\n //if (majorVersion === 0 && minorVersion <= 19) {\r\n // this._ref.scrollTo(0, x, true); // use old syntax\r\n //} else {\r\n this._ref.scrollTo({x: this.state.width * index, y: 0, animated: true});\r\n //}\r\n this.setState({position: index});\r\n if (isUpdating && this.props.onPositionChanged) {\r\n this.props.onPositionChanged(index);\r\n }\r\n }\r\n\r\n _getPosition() {\r\n if (typeof this.props.position === 'number') {\r\n return this.props.position;\r\n }\r\n return this.state.position;\r\n }\r\n\r\n _next() {\r\n const pos = this.state.position === this.props.dataSource.length-1 ? 0 : this.state.position + 1;\r\n this._move(pos);\r\n this.setState({position: pos});\r\n }\r\n\r\n _prev() {\r\n const pos = this.state.position === 0 ? this.props.dataSource.length-1 : this.state.position - 1;\r\n this._move(pos);\r\n this.setState({position: pos});\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.position !== this.props.position) {\r\n this._move(this.props.position);\r\n }\r\n }\r\n\r\n UNSAFE_componentWillMount() {\r\n const width = this.state.width;\r\n\r\n let release = (e, gestureState) => {\r\n const width = this.state.width;\r\n const relativeDistance = gestureState.dx / width;\r\n const vx = gestureState.vx;\r\n let change = 0;\r\n\r\n if (relativeDistance < -0.5 || (relativeDistance < 0 && vx <= 0.5)) {\r\n change = 1;\r\n } else if (relativeDistance > 0.5 || (relativeDistance > 0 && vx >= 0.5)) {\r\n change = -1;\r\n }\r\n const position = this._getPosition();\r\n if (position === 0 && change === -1) {\r\n change = 0;\r\n } else if (position + change >= this.props.dataSource.length) {\r\n change = (this.props.dataSource.length) - (position + change);\r\n }\r\n this._move(position + change);\r\n return true;\r\n };\r\n\r\n this._panResponder = PanResponder.create({\r\n onPanResponderRelease: release\r\n });\r\n\r\n this._interval = setInterval(() => {\r\n const newWidth = Dimensions.get('window').width;\r\n if (newWidth !== this.state.width) {\r\n this.setState({width: newWidth});\r\n }\r\n }, 16);\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this._interval);\r\n }\r\n\r\n render() {\r\n const width = this.state.width;\r\n const height = this.props.height || this.state.height;\r\n const position = this._getPosition();\r\n return (\r\n \r\n {/* SECTION IMAGE */}\r\n this._onRef(ref)}\r\n decelerationRate={0.99}\r\n horizontal={true}\r\n showsHorizontalScrollIndicator={false}\r\n scrollEnabled={this.props.scrollEnabled}\r\n {...this._panResponder.panHandlers}\r\n style={[\r\n styles.container, \r\n { height: height }\r\n ]}>\r\n {this.props.dataSource.map((image, index) => {\r\n const imageObject = typeof image.url === 'string' ? {uri: image.url} : image.url;\r\n const textComponent = (\r\n \r\n {image.title === undefined ? null : {image.title}}\r\n {image.caption === undefined ? null : {image.caption}}\r\n \r\n );\r\n const imageComponent = (\r\n \r\n \r\n {textComponent}\r\n \r\n );\r\n const imageComponentWithOverlay = (\r\n \r\n \r\n \r\n \r\n {textComponent}\r\n \r\n );\r\n if (this.props.onPress) {\r\n return (\r\n this.props.onPress({image, index})}\r\n delayPressIn={200}>\r\n {this.props.overlay ? imageComponentWithOverlay : imageComponent}\r\n \r\n );\r\n } else {\r\n return this.props.overlay ? imageComponentWithOverlay : imageComponent \r\n }\r\n })}\r\n \r\n {/* END SECTION IMAGE */}\r\n {/* SECTION INDICATOR */}\r\n \r\n {this.props.dataSource.map((image, index) => {\r\n return (\r\n { return this._move(index); }}\r\n style={[\r\n [\r\n styles.indicator, \r\n setIndicatorSize(this.props.indicatorSize), \r\n setIndicatorColor(this.props.indicatorColor)\r\n ], \r\n position === index && \r\n [\r\n styles.indicatorSelected, \r\n setIndicatorColor(this.props.indicatorSelectedColor)\r\n ]\r\n ]}>\r\n \r\n );\r\n })}\r\n \r\n {/* END SECTION INDICATOR */}\r\n {/* SECTION ARROW LEFT */}\r\n \r\n this._prev()}>\r\n {\r\n this.props.arrowRight == undefined ? \r\n \r\n : \r\n this.props.arrowLeft\r\n }\r\n \r\n \r\n {/* END SECTION ARROW LEFT */}\r\n {/* SECTION ARROW RIGHT */}\r\n \r\n this._next()}>\r\n {\r\n this.props.arrowRight == undefined ? \r\n \r\n : \r\n this.props.arrowRight\r\n }\r\n \r\n \r\n {/* END SECTION ARROW RIGHT */}\r\n \r\n );\r\n }\r\n}\r\n\r\nSlideshow.defaultProps = {\r\n height: 200,\r\n indicatorSize: 8,\r\n indicatorColor: '#CCCCCC',\r\n indicatorSelectedColor: '#FFFFFF',\r\n scrollEnabled: true,\r\n arrowSize: 16,\r\n}\r\n\r\nSlideshow.propTypes = {\r\n\tdataSource: PropTypes.arrayOf(PropTypes.shape({\r\n\t title: PropTypes.string,\r\n\t caption: PropTypes.string,\r\n\t url: PropTypes.oneOfType([PropTypes.string, PropTypes.number]).isRequired,\r\n })).isRequired, \r\n\tindicatorSize: PropTypes.number,\r\n\tindicatorColor: PropTypes.string,\r\n\tindicatorSelectedColor: PropTypes.string,\r\n\theight: PropTypes.number,\r\n\tposition: PropTypes.number,\r\n scrollEnabled: PropTypes.bool,\r\n containerStyle: PropTypes.object,\r\n overlay: PropTypes.bool,\r\n\tarrowSize: PropTypes.number,\r\n arrowLeft: PropTypes.object,\r\n arrowRight: PropTypes.object,\r\n\tonPress: PropTypes.func,\r\n\tonPositionChanged: PropTypes.func,\r\n};\r\n\r\nconst setIndicatorSize = function (size) {\r\n return {\r\n width: size,\r\n height: size,\r\n borderRadius: size / 2,\r\n };\r\n}\r\n\r\nconst setIndicatorColor = function (color) {\r\n return {\r\n backgroundColor: color,\r\n };\r\n}\r\n\r\nconst layoutArrow = function (imageHeight, iconHeight) {\r\n return {\r\n position: 'absolute',\r\n backgroundColor: 'transparent',\r\n justifyContent: 'flex-start',\r\n alignItems: 'flex-start',\r\n top: (imageHeight-iconHeight)/2,\r\n bottom: (imageHeight-iconHeight)/2,\r\n };\r\n}\r\n\r\nconst iconArrow = function (iconHeight) {\r\n return {\r\n width: 0,\r\n height: 0,\r\n margin: 5,\r\n backgroundColor: 'transparent',\r\n borderStyle: 'solid',\r\n borderTopColor: 'transparent',\r\n borderBottomColor: 'transparent',\r\n borderTopWidth: iconHeight/2,\r\n borderBottomWidth: iconHeight/2,\r\n };\r\n}\r\n\r\nconst iconArrowRight = function (iconHeight) {\r\n return {\r\n borderRightWidth: 0,\r\n borderLeftWidth: iconHeight*75/100,\r\n borderRightColor: 'transparent',\r\n borderLeftColor: 'white',\r\n };\r\n}\r\n\r\nconst iconArrowLeft = function (iconHeight) {\r\n return {\r\n borderRightWidth: iconHeight*75/100,\r\n borderLeftWidth: 0,\r\n borderRightColor: 'white',\r\n borderLeftColor: 'transparent',\r\n };\r\n}","import React from 'react';\r\nimport { Text, View } from 'react-native';\r\nimport { Link } from '../../components/router';\r\n\r\nexport default function ProductItem() {\r\n return (\r\n \r\n \r\n foto\r\n \r\n PRODUTO\r\n R$ 10,00\r\n \r\n Ver\r\n \r\n \r\n );\r\n}\r\n\r\n\r\n","import React, { useRef, useState } from 'react';\r\nimport { ScrollView, StyleSheet, Dimensions } from 'react-native';\r\n\r\nexport const ProductsScrollView = ({ ...props }) => {\r\n const scrollRef = useRef(null)\r\n const [currentX, setCurrentX] = useState(0)\r\n\r\n const scrollX = (px) => scrollRef.current.scrollTo({ x: currentX + px })\r\n let scrollPad = Dimensions.get('window').width / 4;\r\n if (scrollPad < 200) scrollPad = 200;\r\n return <>\r\n \r\n \r\n >;\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n innerList: {\r\n flexDirection: 'row',\r\n justifyContent: 'flex-start',\r\n alignItems: 'center',\r\n }\r\n});\r\n","import React from 'react';\r\nimport { Text, View, StyleSheet } from 'react-native';\r\nimport ProductItem from './ProductItem'\r\nimport { ProductsScrollView } from './ProductsScrollView';\r\n\r\nexport default function ProductsCarousel(props) {\r\n return (\r\n \r\n {typeof props.title === 'string' ? {props.title} : props.title}\r\n \r\n {props.products && props.products.map((p,i) => props.renderProduct ? props.renderProduct(p) : )}\r\n \r\n \r\n );\r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n row: {\r\n //borderWidth: 1, \r\n },\r\n innerList: {\r\n flexDirection: 'row',\r\n justifyContent: 'flex-start',\r\n alignItems: 'center',\r\n }\r\n});\r\n","import React from 'react';\r\nimport { ScrollView, Platform } from 'react-native';\r\n\r\nexport default (props) => \r\n \r\n {props.children || null}\r\n \r\n
","import React from 'react';\r\nimport { Platform, Text, View, Image, TouchableOpacity } from 'react-native';\r\nimport { Appbar, TouchableRipple } from 'react-native-paper';\r\nimport { FloatingColumn } from './../components/ResponsiveColumns';\r\nimport Api from './../api/Api';\r\nimport Helpers from '../utils/Helpers';\r\nimport MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';\r\nimport Colors from '../constants/Colors';\r\nimport { TabletView, MobileView, DesktopView } from '../components/ResponsiveView';\r\nimport LinkXP from '../utils/LinkXP';\r\nimport { Event } from 'expo-analytics';\r\nimport GlobalStyles from '../constants/GlobalStyles';\r\nimport { CartButton } from './CheckoutStrip';\r\nimport { GetHistoryHack } from '../App';\r\nimport { connect } from 'react-redux';\r\n\r\nexport const SocialNetworksItems = (props) => {\r\n var btnStyle = {\r\n ...GlobalStyles.textBase, display: 'flex', alignItems: 'center', fontSize: 15,\r\n paddingHorizontal: props.horizontal ? 16 : 8, paddingVertical: 10, color: Colors.themeColor\r\n };\r\n if (Platform.OS != 'web') { btnStyle.fontSize = 15; btnStyle.paddingHorizontal = 4; }\r\n return \r\n {\r\n LinkXP.OpenURL('https://www.google.com/maps/place/SOS+Chocolate/@-23.0008128,-43.3962244,15z/data=!4m5!3m4!1s0x0:0xa535e4dece617423!8m2!3d-23.0008128!4d-43.3962244', '_blank')\r\n Api.Analytics.event(new Event(\"OpenedLink\", 'Maps'));\r\n }}>\r\n \r\n \r\n {props.hideLabels ? '' : ' Av. Américas 8585, lj. 146'}\r\n \r\n \r\n {\r\n LinkXP.OpenURL('https://api.whatsapp.com/send?phone=5521975005115', '_blank')\r\n Api.Analytics.event(new Event(\"OpenedLink\", 'WhatsApp'));\r\n }}>\r\n \r\n \r\n {props.hideLabels ? '' : ' (21)97500-5115'}\r\n \r\n \r\n {\r\n LinkXP.OpenURL('https://www.instagram.com/razcau/', '_blank');\r\n Api.Analytics.event(new Event(\"OpenedLink\", 'Instagram'));\r\n }}>\r\n \r\n \r\n {props.hideLabels ? '' : ' @razcau'}\r\n \r\n \r\n {/* {\r\n LinkXP.OpenURL('https://www.facebook.com/soschocolate.com.br/', '_blank');\r\n Api.Analytics.event(new Event(\"OpenedLink\", 'Facebook'));\r\n }}>\r\n \r\n \r\n {props.hideLabels ? '' : ' /soschocolate.com.br'}\r\n \r\n */}\r\n {\r\n LinkXP.OpenURL('mailto:sac@razcau.com', '_blank')\r\n Api.Analytics.event(new Event(\"OpenedLink\", 'Email'));\r\n }}>\r\n \r\n \r\n {props.hideLabels ? '' : ' contato por e-mail'}\r\n \r\n \r\n \r\n}\r\n\r\nclass Header extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = {}\r\n }\r\n\r\n render() {\r\n var columnWidth = Helpers.Min(300, Helpers.percentW(70))\r\n console.log('header! route:', this.props.route)\r\n return <>\r\n \r\n { this.setState({ menuOpened: true }) }}>\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {(\r\n this.props.route\r\n &&\r\n (\r\n this.props.route.indexOf('/checkout') != -1\r\n ||\r\n this.props.route.indexOf('cardapio') != -1\r\n ||\r\n this.props.route.indexOf('selfservice') != -1\r\n )\r\n )\r\n ||\r\n this.props.hideCartButton\r\n ? null :\r\n \r\n }\r\n {\r\n LinkXP.OpenURL('https://api.whatsapp.com/send?phone=5521975005115', '_blank')\r\n Api.Analytics.event(new Event(\"OpenedLink\", 'WhatsApp'));\r\n }}>\r\n \r\n \r\n \r\n \r\n\r\n {/* MENU SIDEBAR */}\r\n this.setState({ menuOpened: false })}>\r\n { this.setState({ menuOpened: false }) }}>\r\n \r\n \r\n \r\n \r\n \r\n {/* \r\n Delivery de emergência para chocólatras!\r\n */}\r\n \r\n \r\n >\r\n }\r\n}\r\n\r\nexport default connect(\r\n (state) => ({\r\n route: state.route.route,\r\n }),\r\n null)(Header)\r\n\r\n\r\n\r\n","import React, { useState, useEffect } from 'react';\r\nimport { ScrollView, Text, View, TouchableOpacity, Alert, Image } from 'react-native';\r\nimport Slideshow from './../components/SlideShow';\r\nimport ProductsCarousel from './../components/products/ProductsCarousel';\r\nimport { Link } from '../components/router';\r\nimport MySearchInput from '../components/MySearchInput';\r\nimport Helpers from './../utils/Helpers';\r\nimport Colors from '../constants/Colors';\r\nimport Api from '../api/Api';\r\nimport { ActivityIndicator } from 'react-native-paper';\r\nimport { Analytics, Event } from 'expo-analytics';\r\nimport Product from '../components/Product';\r\nimport GlobalStyles from '../constants/GlobalStyles';\r\nimport { MaterialCommunityIcons } from 'react-native-vector-icons';\r\nimport DropdownXP from '../components/DropdownXP';\r\nimport ScrollViewXP from '../components/ScrollViewXP';\r\nimport MyAccordion, { MyAccordionXP } from './../components/MyAccordion';\r\nimport { ViewportRenderer, ViewportNames } from './../components/ResponsiveView';\r\nimport { SocialNetworksItems } from '../components/Header';\r\nimport Feather from 'react-native-vector-icons/Feather';\r\n\r\nexport default class Home extends React.Component {\r\n\r\n constructor(props, context) {\r\n super(props);\r\n this.state = {\r\n categories: [],\r\n prodsByCategoryId: {},\r\n products: [],\r\n categoryName: ''\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.updateStateFromProps(this.props);\r\n // this.getAllCategories();\r\n // this.getProducts(true, this.props.params);\r\n // this.getCategoryInfo(this.props.params.catId);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n // changed categories? trigger getProducts again!\r\n if (this.props.params.catId != nextProps.params.catId) {\r\n this.updateStateFromProps(nextProps);\r\n // this.getProducts(true, nextProps.params);\r\n // this.getCategoryInfo(nextProps.params.catId);\r\n }\r\n }\r\n getAllData = (props) => {\r\n this.getProducts(true, props.params);\r\n this.getAllCategories();\r\n this.getCategoryInfo(props.params.catId);\r\n }\r\n updateStateFromProps = async (props) => {\r\n if (props.storeAlias) {\r\n try {\r\n var ret = await Api.GetStoreByAlias(props.params.storeAlias);\r\n if (ret.data.Id > 0)\r\n this.setState({ store: ret.data }, () => this.getAllData(props))\r\n } catch {\r\n Alert.alert(\"Ops\", \"Loja não encontrada\");\r\n this.props.history.push(`/`);\r\n //this.getAllData(props)\r\n }\r\n } else {\r\n // get main banner from store soschocolate\r\n var ret = await Api.GetStoreById(1);\r\n if (ret.data.Id > 0)\r\n this.setState({ marketplaceStore: { ...ret.data, BannerURL: null } })\r\n this.getAllData(props)\r\n }\r\n }\r\n\r\n getTodayDeliverySchedule = () => this.state.store.DeliveryTimes.filter(x => x.Day == (new Date()).getDay())[0];\r\n\r\n getWeekDayName = (d) => d == 0 ? 'Domingo' :\r\n d == 1 ? 'Segunda' :\r\n d == 2 ? 'Terça' :\r\n d == 3 ? 'Quarta' :\r\n d == 4 ? 'Quinta' :\r\n d == 5 ? 'Sexta' : 'Sábado';\r\n\r\n renderDeliveryhoursForDay = (deliveryDayInfo) => {\r\n var dayName = this.getWeekDayName(deliveryDayInfo.Day);\r\n return \r\n {dayName}\r\n {!deliveryDayInfo.OpenTime1 ? Fechado :\r\n {deliveryDayInfo.OpenTime1} às {deliveryDayInfo.CloseTime1}\r\n {deliveryDayInfo.OpenTime2 ? (' | ' + deliveryDayInfo.OpenTime2 + ' às ' + deliveryDayInfo.CloseTime2) : ''}\r\n }\r\n \r\n }\r\n\r\n isStoreOpened = () => {\r\n if (this.state.store && this.state.store.DeliveryTimes) {\r\n try {\r\n var todaySchedule = this.getTodayDeliverySchedule();\r\n var now = new Date();\r\n var arrD1Init = todaySchedule.OpenTime1.split(':');\r\n var dt1init = new Date(now.getFullYear(), now.getMonth(), now.getDate(), arrD1Init[0], arrD1Init[1], 0);\r\n var arrD1Fim = todaySchedule.CloseTime1.split(':');\r\n var dt1Fim = new Date(now.getFullYear(), now.getMonth(), now.getDate(), arrD1Fim[0], arrD1Fim[1], 0);\r\n if (now >= dt1init && now < dt1Fim)\r\n return true;\r\n\r\n var arrD2Init = todaySchedule.OpenTime2.split(':');\r\n var dt2init = new Date(now.getFullYear(), now.getMonth(), now.getDate(), arrD2Init[0], arrD2Init[1], 0);\r\n var arrD2Fim = todaySchedule.CloseTime2.split(':');\r\n var dt2Fim = new Date(now.getFullYear(), now.getMonth(), now.getDate(), arrD2Fim[0], arrD2Fim[1], 0);\r\n if (now >= dt2init && now < dt2Fim)\r\n return true;\r\n return false;\r\n }\r\n catch (e) {\r\n return false;\r\n }\r\n }\r\n else return false;\r\n }\r\n\r\n getAllCategories = () => {\r\n Api.Products.getAllCategories(this.state.store ? this.state.store.Id : 0).then(x => {\r\n if (x && x.data && x.data.length > 0) {\r\n this.setState({ categories: x.data },\r\n () => x.data.map(x => this.getTopProductsForCategory(x.Id)));\r\n }\r\n })\r\n }\r\n\r\n getTopProductsForCategory = (categoryId) => {\r\n Api.Products.getProducts(0, this.state.store ? this.state.store.Id : 0, categoryId, 0, '', '', 0, 12).then(x => {\r\n if (x && x.data && x.data.length > 0) {\r\n this.setState({ prodsByCategoryId: { ...this.state.prodsByCategoryId, [categoryId]: x.data } });\r\n }\r\n })\r\n }\r\n\r\n getProducts = async (clear = true, params) => {\r\n // loja?\r\n //let storeAlias = (params || this.props.params).storeAlias || '';\r\n //let storeId = (params || this.props.params).storeId || 0;\r\n let storeId = this.state.store ? this.state.store.Id : 0;\r\n let catId = (params || this.props.params).catId || 0;\r\n var pageSize = 50;\r\n if (clear) this.lastProductIndex = 0;\r\n this.setState({ loadingProducts: true })\r\n Api.Products.getProducts(0, storeId, catId, this.state.selectedBrand ? this.state.selectedBrand.Id : 0, this.state.searchText, this.state.orderBy, this.lastProductIndex, pageSize).then(x => {\r\n this.lastProductIndex += x.data.length;\r\n this.setState({\r\n loadingProducts: false,\r\n hasMoreProdsToLoad: x.data.length == 50, // se voltar menos de 50 eh pq acabou a paginacao\r\n products: clear ? x.data : [...this.state.products, ...x.data]\r\n })\r\n }).catch(e => {\r\n\r\n });\r\n }\r\n\r\n selectCategory = (id) => {\r\n this.props.history.push(id == 0 ? this.props.baseUrl : `${this.props.baseUrl}/categoria/${id}`)\r\n }\r\n\r\n getCategoryInfo = (id) => {\r\n if (!id) this.setState({ categoryName: '' });\r\n else Api.GetCategoryInfo(id).then(x => {\r\n if (x && x.data && x.data.Name) {\r\n this.setState({ categoryName: x.data.Name });\r\n }\r\n });\r\n }\r\n\r\n onPressProduct = (p) => {\r\n this.props.history.push(`${this.props.url}/produto/${p.Id}`);\r\n }\r\n\r\n render() {\r\n //console.log('PROPSSSSS:', this.props);\r\n let wBanner = Helpers.Min(Helpers.percentW(100), 1200);\r\n //console.log('WIDTH:' + Helpers.percentW(100))\r\n // modal prod aberto\r\n let modalProdOpened = this.props.params.prodId;\r\n let openedCategoryId = this.props.params.catId || 0;\r\n let storeAlias = this.props.params.storeAlias || '';\r\n let todayDelivery = this.state.store ? this.getTodayDeliverySchedule() : null;\r\n let sectionTitle = this.state.searchText ? ('Buscando por \"' + this.state.searchText + (openedCategoryId == 0 || this.state.categoryName.length == 0 ? '\"' : ('\" em ' + this.state.categoryName)))\r\n : openedCategoryId > 0 ? this.state.categoryName\r\n : this.state.selectedBrand && this.state.selectedBrand.Id > 0 ? this.state.selectedBrand.Name\r\n : 'Carregando...';\r\n return \r\n\r\n {/* BANNERS */}\r\n {(this.state.store && this.state.store.BannerURL\r\n ||\r\n this.state.marketplaceStore && this.state.marketplaceStore.BannerURL\r\n ) ?\r\n \r\n \r\n \r\n : null}\r\n {/* */}\r\n\r\n {/* PAGINA DE LOJA */}\r\n {\r\n this.state.store ? // mostra info sobre a loja\r\n \r\n \r\n \r\n \r\n {this.state.store.Name}\r\n {this.state.store.Description}\r\n \r\n \r\n {this.isStoreOpened() ? 'Loja aberta' : 'Somente entregas agendadas'}\r\n \r\n \r\n \r\n {this.renderDeliveryhoursForDay(todayDelivery)}\r\n \r\n }>\r\n \r\n {this.state.store.DeliveryTimes.map(x => this.renderDeliveryhoursForDay(x))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n : \r\n // Pagina Home do Marketplace: mostra stories das marcas\r\n {\r\n if(b && b.Name) Api.Analytics.event(new Event(\"FilteredBrand\", b.Name));\r\n this.setState({ selectedBrand: b, openedCategoryId: 0, searchText: '' }, this.getProducts)\r\n }} />\r\n }\r\n\r\n {/* BUSCA DE TEXTO E TAB BAR DE CATEGORIAS */}\r\n {this.state.selectedBrand ? : // se ta com marca selecionada esconde a busca de texto e as tabs (por enquanto)\r\n \r\n {/* BUSCA TEXTO, FILTROS E ORDENACAO */}\r\n \r\n {/* TEXT SEARCH */}\r\n \r\n this.setState({ searchText: q }, () => { this.getProducts() })}\r\n delay={250} style={{\r\n maxWidth: Helpers.percentW(94), width: 420, flex: 1, marginHorizontal: 18, paddingHorizontal: 6, borderWidth: 1, borderColor: Colors.darkLines,\r\n paddingVertical: 2, backgroundColor: '#fff', flexDirection: 'row', alignItems: 'center', borderRadius: 5, height: 38\r\n }}\r\n />\r\n \r\n \r\n\r\n {/* TAB BAR CATEGORIAS */}\r\n {this.state.categories.length > 0 &&\r\n \r\n {[{ Id: 0, Name: 'Todos' }, ...this.state.categories].map(c => this.selectCategory(c.Id)}\r\n style={[{ padding: 12, justifyContent: 'center', borderBottomWidth: 3 },\r\n // SELECTED TAB\r\n openedCategoryId == c.Id ? { borderBottomColor: Colors.themeColor } : { borderBottomColor: 'transparent' }\r\n ]}>\r\n \r\n {c.Name}\r\n )}\r\n \r\n }\r\n\r\n \r\n }\r\n\r\n\r\n {/* HOME MOSTRANDO PRODUTOS EM GRID */}\r\n {\r\n (openedCategoryId || this.state.searchText || this.state.selectedBrand)\r\n ?\r\n /* PRODUCTS */\r\n \r\n {/* TITULO DA SECAO */}\r\n {\r\n return \r\n \r\n {this.state.selectedBrand && this.setState({ selectedBrand: null })}>\r\n }\r\n {sectionTitle}\r\n {this.state.loadingProducts && }\r\n \r\n {/* ORDER BY */}\r\n \r\n {viewport != ViewportNames.mobile &&\r\n Ordernar por\r\n }\r\n this.setState({\r\n orderBy: itemValue\r\n }\r\n , () => this.getProducts())}\r\n data={[\r\n { label: \"Destaques\", value: \"-Priority\" },\r\n { label: \"Nome A-Z\", value: \"Name\" },\r\n { label: \"Nome Z-A\", value: \"-Name\" },\r\n { label: \"Menor preço\", value: \"Price\" },\r\n { label: \"Maior preço\", value: \"-Price\" },\r\n ]} />\r\n \r\n \r\n }} />\r\n {\r\n return \r\n {/* PRODUCTS GRID */}\r\n {this.state.products.map((p) =>\r\n { this.onPressProduct(p) }} />)}\r\n\r\n {/* SEM PRODUTOS? */}\r\n {!this.state.loadingProducts && (!this.state.products || this.state.products.length == 0) ?\r\n \r\n Nenhum produto encontrado\r\n \r\n : null}\r\n\r\n {/* BOTAO CARREGAR MAIS PRODUTOS */}\r\n {this.state.hasMoreProdsToLoad && \r\n {\r\n //this.setState({ showingProds: this.state.showingProds + 40 });\r\n this.getProducts(false);\r\n }}>\r\n \r\n \r\n Carregar mais produtos\r\n \r\n \r\n \r\n }\r\n \r\n }} />\r\n \r\n /* HOME LOADING E CAROUSEIS DE PRODUTOS */\r\n :\r\n (this.state.categories.length == 0 ?\r\n \r\n \r\n Carregando...\r\n \r\n :\r\n this.state.categories.map(c => \r\n {c.Name}\r\n \r\n \r\n \r\n ver mais\r\n \r\n \r\n \r\n \r\n }\r\n products={c.Id in this.state.prodsByCategoryId ? this.state.prodsByCategoryId[c.Id] : []}\r\n renderProduct={(p) =>\r\n { this.onPressProduct(p); }} />\r\n }\r\n />)\r\n )\r\n }\r\n \r\n \r\n }\r\n}\r\n\r\nconst BrandsStories = ({ selectedBrand, onChangeBrand }) => {\r\n const [brands, setBrands] = useState([]);\r\n const getAllBrands = async () => {\r\n console.log('get brands');\r\n try {\r\n var ret = await Api.GetBrands();\r\n if (ret.data && ret.data.length > 0)\r\n setBrands(ret.data);\r\n } catch {\r\n setBrands(null);\r\n }\r\n };\r\n useEffect(() => {\r\n getAllBrands()\r\n }, []);\r\n const w = 68\r\n var l = 2\r\n return brands == null || brands.length == 1 ? null : \r\n {/* Destaques */}\r\n \r\n {brands.length > 0 ? brands.map(x => {\r\n onChangeBrand(x == selectedBrand ? null : x);\r\n }}>\r\n \r\n \r\n {/* {x.Name} */}\r\n \r\n \r\n \r\n ) : \r\n \r\n }\r\n \r\n \r\n}\r\n\r\nconst Footer = () => {\r\n return \r\n \r\n \r\n \r\n \r\n \r\n}} />","import { Platform, Alert } from \"react-native\"\r\n\r\nconst alertPolyfill = (title, description, options, extra) => {\r\n if(!options) return window.alert(title + '\\n\\n' + description);\r\n const result = window.confirm([title, description].filter(Boolean).join('\\n'))\r\n\r\n if (result) {\r\n const confirmOption = options.find(({ style }) => style !== 'cancel')\r\n confirmOption && confirmOption.onPress()\r\n } else {\r\n const cancelOption = options.find(({ style }) => style === 'cancel')\r\n cancelOption && cancelOption.onPress()\r\n }\r\n}\r\nconst AlertXp = Platform.OS === 'web' ? { alert: alertPolyfill } : Alert;\r\n\r\nexport default AlertXp;","import React, { useState, useEffect } from 'react';\r\nimport { SafeAreaView, ScrollView, Text, View, TouchableOpacity, Alert, Image } from 'react-native';\r\nimport Slideshow from './../components/SlideShow';\r\nimport ProductsCarousel from './../components/products/ProductsCarousel';\r\nimport { Link } from '../components/router';\r\nimport MySearchInput from '../components/MySearchInput';\r\nimport Helpers from './../utils/Helpers';\r\nimport Colors from '../constants/Colors';\r\nimport Api from '../api/Api';\r\nimport { ActivityIndicator } from 'react-native-paper';\r\nimport { Analytics, Event } from 'expo-analytics';\r\nimport Product from '../components/Product';\r\nimport GlobalStyles from '../constants/GlobalStyles';\r\nimport { Ionicons, MaterialCommunityIcons } from 'react-native-vector-icons';\r\nimport DropdownXP from '../components/DropdownXP';\r\nimport ScrollViewXP from '../components/ScrollViewXP';\r\nimport MyAccordion, { MyAccordionXP } from './../components/MyAccordion';\r\nimport { ViewportRenderer, ViewportNames } from './../components/ResponsiveView';\r\nimport { SocialNetworksItems } from '../components/Header';\r\nimport Feather from 'react-native-vector-icons/Feather';\r\nimport ProductRow from '../components/ProductRow';\r\nimport AlertXp from './../components/AlertXP';\r\n\r\nexport default class SelfService extends React.Component {\r\n\r\n constructor(props, context) {\r\n super(props);\r\n this.state = {\r\n products: [],\r\n quickCartProds: {\r\n\r\n },\r\n catProdsList: [],\r\n checkout: false,\r\n mesaId: props.params ? props.params.mesaId : 0,\r\n }\r\n try { // macete doido \r\n if ((this.state.mesaId + '').indexOf('_') === 0) this.state.mesaId = atob(this.state.mesaId)\r\n } catch { }\r\n }\r\n\r\n componentDidMount() {\r\n this.getAllData(this.props);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n // debugger;\r\n // if (nextProps.params && nextProps.params.mesaId && nextProps.params.mesaId != this.state.mesaId) {\r\n // this.setState({ mesaId: nextProps.params.mesaId })\r\n // }\r\n }\r\n\r\n getAllData = (props) => {\r\n this.getProducts(true, props.params);\r\n }\r\n\r\n getProducts = async (clear = true, params) => {\r\n // loja?\r\n //let storeAlias = (params || this.props.params).storeAlias || '';\r\n //let storeId = (params || this.props.params).storeId || 0;\r\n let storeId = this.state.store ? this.state.store.Id : 0;\r\n let catId = (params || this.props.params).catId || 0;\r\n if (clear) this.lastProductIndex = 0;\r\n this.setState({ loadingProducts: true })\r\n Api.Products.getProductsSelfService(0, storeId, 0, 0, '', null, 0, 1000).then(x => {\r\n var _products = clear ? x.data : [...this.state.products, ...x.data];\r\n if (Helpers.Any(_products, 'Category')) {\r\n var generatedCategories = Helpers.GroupBy(_products, 'Category');\r\n var auxArr = Helpers.ObjToArray(generatedCategories);\r\n var auxCats = auxArr.map(x => ({\r\n Id: x[0].CategoryId,\r\n Name: x[0].Category, Order: x[0].CategoryOrder,\r\n Products: Helpers.OrderBy(x, 'Priority', true)\r\n }));\r\n var cats = Helpers.OrderBy(auxCats, 'Order');\r\n }\r\n\r\n var groupedProds = Helpers.GroupBy(_products, 'Category');\r\n this.setState({\r\n loadingProducts: false,\r\n hasMoreProdsToLoad: x.data.length == 50, // se voltar menos de 50 eh pq acabou a paginacao\r\n products: _products,\r\n catProdsList: cats,\r\n groupedProducts: groupedProds\r\n })\r\n\r\n }).catch(e => {\r\n\r\n });\r\n }\r\n\r\n onPressProduct = (p) => {\r\n this.props.history.push(`${this.props.url}/produto/${p.Id}`);\r\n }\r\n\r\n doConfirm = () => {\r\n var sale = {\r\n Customer: {\r\n Name: this.state.mesaId + \"\",\r\n },\r\n Products: Object.keys(this.state.quickCartProds).map(k => ({ Id: k, Quantity: this.state.quickCartProds[k] }))\r\n };\r\n this.setState({ checkoutLoading: true })\r\n Api.CheckoutSelfService(sale).then(x => {\r\n if (x && x.data && x.data.ok === true) {\r\n AlertXp.alert(\"Confirmado!\", \"Seu pedido foi recebido no balcão e você ja será atendido(a).\")\r\n this.setState({ checkoutLoading: false, checkout: false, quickCartProds: {} })\r\n } else {\r\n throw { msg: -1 }\r\n }\r\n }).catch(e => {\r\n AlertXp.alert(\"Ops!\", \"ocorreu um erro...\")\r\n this.setState({ checkoutLoading: false })\r\n })\r\n }\r\n\r\n render() {\r\n //console.log('PROPSSSSS:', this.props);\r\n let wBanner = Helpers.Min(Helpers.percentW(100), 1200);\r\n\r\n return \r\n \r\n {\r\n let containerStyle = {\r\n minWidth: 260,\r\n maxWidth: 540,\r\n width: screenWidth - 30\r\n };\r\n return \r\n \r\n \r\n {this.state.checkout ? 'Novo pedido' : 'Cardápio'}\r\n \r\n {!this.state.mesaId ? :\r\n \r\n \r\n {this.state.mesaId}\r\n }\r\n \r\n\r\n \r\n \r\n Bebidas: Todas as nossas bebidas* vem acompanhadas de um chocolate para adoçar seu dia!\r\n Você pode escolher: Biscoito de Leite coberto com Chocolate ou\r\n Trufa (ao Leite ou Zero Açúcar)\r\n {'\\n'}* Exceto para refrigerantes, água, mate e chá gelado\r\n {'\\n\\n'}Salgados: Todos os nossos salgados são preparados na hora e levam de 5 a 7 minutos para ficarem prontos.\r\n \r\n \r\n\r\n {/* PRODUCTS GRID */}\r\n {this.state.catProdsList ? this.state.catProdsList.map(kat => (\r\n this.state.checkout && kat.Products.filter(p => this.state.quickCartProds[p.Id]).length == 0 ?\r\n null\r\n :\r\n \r\n (\r\n \r\n {kat.Name}\r\n \r\n \r\n )}>\r\n {kat.Products.map((prod) => {\r\n let qty = this.state.quickCartProds[prod.Id] || 0;\r\n return ((this.state.checkout && qty > 0) || !this.state.checkout ?\r\n { }}\r\n setProductQty={(prodQtd) => {\r\n if (prodQtd.Quantity == 0) {\r\n var qProds = { ...this.state.quickCartProds }\r\n delete qProds[prod.Id];\r\n this.setState({ quickCartProds: qProds });\r\n } else {\r\n this.setState({\r\n quickCartProds: { ...this.state.quickCartProds, [prodQtd.Id]: prodQtd.Quantity }\r\n })\r\n }\r\n }}\r\n outOfStock={prod.QtyInStock <= 0 && prod.TrackStock}\r\n reviewMode={this.state.checkout || !this.state.mesaId}\r\n prod={{ ...prod, Quantity: qty }}\r\n /> : null)\r\n })\r\n }\r\n \r\n \r\n ))\r\n : null\r\n }\r\n\r\n {/* SEM PRODUTOS? */}\r\n {!this.state.loadingProducts && (!this.state.products || this.state.products.length == 0) ?\r\n \r\n Nenhum produto encontrado\r\n \r\n : null}\r\n\r\n {/* LOADING */}\r\n {this.state.loadingProducts && }\r\n\r\n \r\n }} />\r\n\r\n {this.state.checkout && // FECHAMENTO DE PEDIDO:\r\n \r\n this.setState({ checkout: false })}>\r\n Voltar\r\n \r\n this.doConfirm()}>\r\n {\r\n this.state.checkoutLoading ?\r\n \r\n :\r\n Confirmar pedido\r\n }\r\n \r\n \r\n }\r\n \r\n\r\n {Helpers.Any(Helpers.ObjToArray(this.state.quickCartProds)) && !this.state.checkout &&\r\n \r\n this.setState({ checkout: true })}>\r\n Fazer pedido\r\n \r\n \r\n }\r\n\r\n \r\n }\r\n}\r\n\r\nconst Footer = () => {\r\n return \r\n \r\n \r\n \r\n \r\n \r\n}} />","import React from 'react';\r\nimport { Platform, Text, View, TouchableOpacity, ScrollView } from 'react-native';\r\nimport Helpers from '../utils/Helpers';\r\nimport MaterialCommunityIcons from 'react-native-vector-icons/MaterialCommunityIcons';\r\nimport Feather from 'react-native-vector-icons/Feather';\r\nimport Colors from '../constants/Colors';\r\nimport Modal from 'react-native-modalbox';\r\nimport GlobalStyles from '../constants/GlobalStyles';\r\nimport { Link } from './router';\r\nimport Cart, { ConnectedTotalsComponent } from './Cart';\r\n\r\n// NODAL CART\r\n\r\nexport const ModalCart = ({ opened = false, onClose = () => { } }) => {\r\n var BContent = {\r\n onClose();\r\n }} style={{\r\n margin: 10,\r\n backgroundColor: \"#3B5998\",\r\n padding: 10,\r\n position: Platform.OS === 'web' ? 'fixed' : \"absolute\",\r\n top: 0,\r\n right: 0,\r\n width: 50,\r\n height: 50,\r\n backgroundColor: \"transparent\"\r\n }}>;\r\n return {\r\n //this.props.onClosed();\r\n }}\r\n style={{\r\n justifyContent: 'flex-start', alignItems: 'stretch',\r\n //minHeight: 250,\r\n //height: Helpers.percentH(46),\r\n height: null,\r\n width: Helpers.Min(Helpers.percentW(100) - 25, 480),\r\n maxHeight: Helpers.percentH(85),\r\n maxWidth: Helpers.Min(Helpers.percentW(100) - 25, 480),\r\n borderRadius: 10, overflow: 'hidden',\r\n backgroundColor: '#fff'\r\n }} position={\"center\"} backdropContent={BContent}>\r\n \r\n \r\n\r\n onClose()}>\r\n \r\n \r\n\r\n \r\n Carrinho\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n onClose()}>\r\n \r\n Voltar para a loja\r\n \r\n \r\n \r\n \r\n \r\n Concluir pedido\r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n ;\r\n};\r\n","import React from 'react';\r\nimport { StyleSheet, Text, View, Image, Platform, ViewPropTypes } from 'react-native';\r\nimport { Provider as PaperProvider, DefaultTheme, ActivityIndicator } from 'react-native-paper';\r\nimport { Provider } from 'react-redux'\r\nimport Products from './screens/Products';\r\nimport Home from './screens/Home';\r\nimport SelfService from './screens/SelfService';\r\nimport store from './store/store';\r\nimport Colors from './constants/Colors';\r\nimport {\r\n Router,\r\n Switch,\r\n Route,\r\n BackButton,\r\n Redirect,\r\n useHistory\r\n} from './components/router';\r\nimport Api from './api/Api';\r\nimport * as Font from 'expo-font';\r\nimport { Analytics, Event } from 'expo-analytics';\r\nimport {\r\n setCustomTextInput,\r\n setCustomText,\r\n} from 'react-native-global-props';\r\nimport Header from './components/Header';\r\nimport CheckoutStrip from './components/CheckoutStrip';\r\nimport { ModalCart } from \"./components/ModalCart\";\r\nimport { ModalProductWithGet } from './components/ModalProduct';\r\nimport Checkout from './components/Checkout';\r\nimport { setRoute } from './store/routeReducer';\r\n\r\nconst theme = {\r\n ...DefaultTheme,\r\n //roundness: 2,\r\n colors: {\r\n ...DefaultTheme.colors,\r\n primary: Colors.themeColor,\r\n accent: '#f1c40f',\r\n }\r\n};\r\n\r\n// ROUTER HISTORY HACK\r\nconst historyHack = {\r\n history: {}\r\n}\r\nexport const GetHistoryHack = () => historyHack.history;\r\nconst MyHistoryHack = () => {\r\n let history = useHistory();\r\n historyHack.history = history;\r\n return null\r\n}\r\nexport default class App extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n fontLoaded: false\r\n }\r\n }\r\n componentDidMount() {\r\n if (Api.BaseURL.indexOf('://homolog') > -1 || Api.BaseURL.indexOf('://10.0.0') > -1 || Api.BaseURL.indexOf('://192.168.') > -1) {\r\n // Debug\r\n Api.Analytics = {\r\n event: () => { }\r\n }\r\n } else {\r\n // Prod\r\n Api.Analytics = new Analytics('UA-9234405-15'); // ua('UA-9234405-15');\r\n }\r\n Api.Analytics.event(new Event(\"App\", \"Opened\"));\r\n\r\n try {\r\n if (window && window.document) {\r\n // Your CSS as text\r\n var styles = `\r\n *:focus {\r\n outline: none;\r\n }\r\n .animateLeftPosition {\r\n transition: left 0.2s ease;\r\n }\r\n .animateRightPosition {\r\n transition: right 0.2s ease;\r\n }\r\n .myfooter {\r\n position: fixed; bottom: 0;\r\n }\r\n .coolScroll::-webkit-scrollbar{\r\n width: 5px;\r\n height: 5px;\r\n }\r\n .coolScroll::-webkit-scrollbar-track {\r\n border: 0px solid transparent;\r\n background-color: transparent;\r\n border-radius: 5px;\r\n }\r\n \r\n .coolScroll::-webkit-scrollbar-thumb {\r\n background: #fff;\t\r\n border-radius: 6px;\r\n transition: background 0.25s linear;\r\n }\r\n .coolScroll:hover::-webkit-scrollbar-thumb {\r\n background: #ccc;\t\r\n }\r\n `\r\n var styleSheet = document.createElement(\"style\")\r\n styleSheet.type = \"text/css\"\r\n styleSheet.innerText = styles\r\n window.document.head.appendChild(styleSheet);\r\n\r\n // disable zoom on web:\r\n var vp = document.createElement(\"meta\")\r\n vp.name = \"viewport\"\r\n vp.content = \"width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no\";\r\n window.document.head.appendChild(vp);\r\n\r\n // `\r\n // \r\n // \r\n // `\r\n\r\n }\r\n } catch (e) { }\r\n\r\n this.preLoadFonts();\r\n }\r\n\r\n preLoadFonts = async () => {\r\n await Font.loadAsync({\r\n // 'Montserrat': require('./assets/fonts/Montserrat-Regular.ttf'),\r\n // 'MontserratBold': require('./assets/fonts/Montserrat-SemiBold.ttf'),\r\n // 'Montserrat': require('./assets/fonts/Barlow-Regular.ttf'),\r\n // 'MontserratBold': require('./assets/fonts/Barlow-Medium.ttf'),\r\n 'Montserrat': require('./assets/fonts/SulSans-Light.ttf'),\r\n 'MontserratBold': require('./assets/fonts/SulSans-Regular.ttf'),\r\n });\r\n\r\n this.setState({ fontLoaded: true });\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n \r\n \r\n \r\n {this.state.fontLoaded ?\r\n \r\n \r\n {/* FB PIXEL STUFF */}\r\n \r\n \r\n \r\n {\r\n store.dispatch(setRoute(match.url));\r\n return <>\r\n \r\n \r\n -1}\r\n onClose={() => { historyHack.history.push(match.params.catId ? ('/marketplace/categoria/' + match.params.catId) : '/marketplace') }}\r\n />\r\n { historyHack.history.push(match.params.catId ? ('/marketplace/categoria/' + match.params.catId) : '/marketplace') }}\r\n />\r\n \r\n >\r\n }}\r\n />\r\n {\r\n store.dispatch(setRoute(match.url));\r\n return (<>\r\n \r\n {\r\n historyHack.history.goBack();\r\n }} />\r\n >)\r\n }} />\r\n {\r\n store.dispatch(setRoute(match.url));\r\n return <>\r\n \r\n \r\n >\r\n }} />\r\n {\r\n store.dispatch(setRoute(match.url));\r\n return <>\r\n \r\n \r\n -1}\r\n onClose={() => {\r\n historyHack.history.push(match.params.catId ?\r\n `/@${match.params.storeAlias}/categoria/${match.params.catId}` :\r\n `/@${match.params.storeAlias}`)\r\n }}\r\n />\r\n {\r\n historyHack.history.push(match.params.catId ?\r\n `/@${match.params.storeAlias}/categoria/${match.params.catId}` :\r\n `/@${match.params.storeAlias}`)\r\n }}\r\n />\r\n \r\n >\r\n }}\r\n />\r\n {\r\n store.dispatch(setRoute(match.url));\r\n return <>\r\n \r\n \r\n >\r\n }}\r\n />\r\n\r\n \r\n \r\n \r\n \r\n :\r\n \r\n \r\n \r\n \r\n }\r\n \r\n \r\n \r\n );\r\n }\r\n}\r\n\r\nconst Layout = (content) => {\r\n\r\n}\r\n\r\nconst LojaRoutes = ({ match }) => {\r\n // \r\n}\r\n\r\nconst styles = StyleSheet.create({\r\n container: {\r\n flex: 1,\r\n backgroundColor: '#fff',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n});\r\n","var map = {\n\t\"./af\": 217,\n\t\"./af.js\": 217,\n\t\"./ar\": 218,\n\t\"./ar-dz\": 219,\n\t\"./ar-dz.js\": 219,\n\t\"./ar-kw\": 220,\n\t\"./ar-kw.js\": 220,\n\t\"./ar-ly\": 221,\n\t\"./ar-ly.js\": 221,\n\t\"./ar-ma\": 222,\n\t\"./ar-ma.js\": 222,\n\t\"./ar-sa\": 223,\n\t\"./ar-sa.js\": 223,\n\t\"./ar-tn\": 224,\n\t\"./ar-tn.js\": 224,\n\t\"./ar.js\": 218,\n\t\"./az\": 225,\n\t\"./az.js\": 225,\n\t\"./be\": 226,\n\t\"./be.js\": 226,\n\t\"./bg\": 227,\n\t\"./bg.js\": 227,\n\t\"./bm\": 228,\n\t\"./bm.js\": 228,\n\t\"./bn\": 229,\n\t\"./bn.js\": 229,\n\t\"./bo\": 230,\n\t\"./bo.js\": 230,\n\t\"./br\": 231,\n\t\"./br.js\": 231,\n\t\"./bs\": 232,\n\t\"./bs.js\": 232,\n\t\"./ca\": 233,\n\t\"./ca.js\": 233,\n\t\"./cs\": 234,\n\t\"./cs.js\": 234,\n\t\"./cv\": 235,\n\t\"./cv.js\": 235,\n\t\"./cy\": 236,\n\t\"./cy.js\": 236,\n\t\"./da\": 237,\n\t\"./da.js\": 237,\n\t\"./de\": 238,\n\t\"./de-at\": 239,\n\t\"./de-at.js\": 239,\n\t\"./de-ch\": 240,\n\t\"./de-ch.js\": 240,\n\t\"./de.js\": 238,\n\t\"./dv\": 241,\n\t\"./dv.js\": 241,\n\t\"./el\": 242,\n\t\"./el.js\": 242,\n\t\"./en-SG\": 243,\n\t\"./en-SG.js\": 243,\n\t\"./en-au\": 244,\n\t\"./en-au.js\": 244,\n\t\"./en-ca\": 245,\n\t\"./en-ca.js\": 245,\n\t\"./en-gb\": 246,\n\t\"./en-gb.js\": 246,\n\t\"./en-ie\": 247,\n\t\"./en-ie.js\": 247,\n\t\"./en-il\": 248,\n\t\"./en-il.js\": 248,\n\t\"./en-nz\": 249,\n\t\"./en-nz.js\": 249,\n\t\"./eo\": 250,\n\t\"./eo.js\": 250,\n\t\"./es\": 251,\n\t\"./es-do\": 252,\n\t\"./es-do.js\": 252,\n\t\"./es-us\": 253,\n\t\"./es-us.js\": 253,\n\t\"./es.js\": 251,\n\t\"./et\": 254,\n\t\"./et.js\": 254,\n\t\"./eu\": 255,\n\t\"./eu.js\": 255,\n\t\"./fa\": 256,\n\t\"./fa.js\": 256,\n\t\"./fi\": 257,\n\t\"./fi.js\": 257,\n\t\"./fo\": 258,\n\t\"./fo.js\": 258,\n\t\"./fr\": 259,\n\t\"./fr-ca\": 260,\n\t\"./fr-ca.js\": 260,\n\t\"./fr-ch\": 261,\n\t\"./fr-ch.js\": 261,\n\t\"./fr.js\": 259,\n\t\"./fy\": 262,\n\t\"./fy.js\": 262,\n\t\"./ga\": 263,\n\t\"./ga.js\": 263,\n\t\"./gd\": 264,\n\t\"./gd.js\": 264,\n\t\"./gl\": 265,\n\t\"./gl.js\": 265,\n\t\"./gom-latn\": 266,\n\t\"./gom-latn.js\": 266,\n\t\"./gu\": 267,\n\t\"./gu.js\": 267,\n\t\"./he\": 268,\n\t\"./he.js\": 268,\n\t\"./hi\": 269,\n\t\"./hi.js\": 269,\n\t\"./hr\": 270,\n\t\"./hr.js\": 270,\n\t\"./hu\": 271,\n\t\"./hu.js\": 271,\n\t\"./hy-am\": 272,\n\t\"./hy-am.js\": 272,\n\t\"./id\": 273,\n\t\"./id.js\": 273,\n\t\"./is\": 274,\n\t\"./is.js\": 274,\n\t\"./it\": 275,\n\t\"./it-ch\": 276,\n\t\"./it-ch.js\": 276,\n\t\"./it.js\": 275,\n\t\"./ja\": 277,\n\t\"./ja.js\": 277,\n\t\"./jv\": 278,\n\t\"./jv.js\": 278,\n\t\"./ka\": 279,\n\t\"./ka.js\": 279,\n\t\"./kk\": 280,\n\t\"./kk.js\": 280,\n\t\"./km\": 281,\n\t\"./km.js\": 281,\n\t\"./kn\": 282,\n\t\"./kn.js\": 282,\n\t\"./ko\": 283,\n\t\"./ko.js\": 283,\n\t\"./ku\": 284,\n\t\"./ku.js\": 284,\n\t\"./ky\": 285,\n\t\"./ky.js\": 285,\n\t\"./lb\": 286,\n\t\"./lb.js\": 286,\n\t\"./lo\": 287,\n\t\"./lo.js\": 287,\n\t\"./lt\": 288,\n\t\"./lt.js\": 288,\n\t\"./lv\": 289,\n\t\"./lv.js\": 289,\n\t\"./me\": 290,\n\t\"./me.js\": 290,\n\t\"./mi\": 291,\n\t\"./mi.js\": 291,\n\t\"./mk\": 292,\n\t\"./mk.js\": 292,\n\t\"./ml\": 293,\n\t\"./ml.js\": 293,\n\t\"./mn\": 294,\n\t\"./mn.js\": 294,\n\t\"./mr\": 295,\n\t\"./mr.js\": 295,\n\t\"./ms\": 296,\n\t\"./ms-my\": 297,\n\t\"./ms-my.js\": 297,\n\t\"./ms.js\": 296,\n\t\"./mt\": 298,\n\t\"./mt.js\": 298,\n\t\"./my\": 299,\n\t\"./my.js\": 299,\n\t\"./nb\": 300,\n\t\"./nb.js\": 300,\n\t\"./ne\": 301,\n\t\"./ne.js\": 301,\n\t\"./nl\": 302,\n\t\"./nl-be\": 303,\n\t\"./nl-be.js\": 303,\n\t\"./nl.js\": 302,\n\t\"./nn\": 304,\n\t\"./nn.js\": 304,\n\t\"./pa-in\": 305,\n\t\"./pa-in.js\": 305,\n\t\"./pl\": 306,\n\t\"./pl.js\": 306,\n\t\"./pt\": 119,\n\t\"./pt-br\": 307,\n\t\"./pt-br.js\": 307,\n\t\"./pt.js\": 119,\n\t\"./ro\": 308,\n\t\"./ro.js\": 308,\n\t\"./ru\": 309,\n\t\"./ru.js\": 309,\n\t\"./sd\": 310,\n\t\"./sd.js\": 310,\n\t\"./se\": 311,\n\t\"./se.js\": 311,\n\t\"./si\": 312,\n\t\"./si.js\": 312,\n\t\"./sk\": 313,\n\t\"./sk.js\": 313,\n\t\"./sl\": 314,\n\t\"./sl.js\": 314,\n\t\"./sq\": 315,\n\t\"./sq.js\": 315,\n\t\"./sr\": 316,\n\t\"./sr-cyrl\": 317,\n\t\"./sr-cyrl.js\": 317,\n\t\"./sr.js\": 316,\n\t\"./ss\": 318,\n\t\"./ss.js\": 318,\n\t\"./sv\": 319,\n\t\"./sv.js\": 319,\n\t\"./sw\": 320,\n\t\"./sw.js\": 320,\n\t\"./ta\": 321,\n\t\"./ta.js\": 321,\n\t\"./te\": 322,\n\t\"./te.js\": 322,\n\t\"./tet\": 323,\n\t\"./tet.js\": 323,\n\t\"./tg\": 324,\n\t\"./tg.js\": 324,\n\t\"./th\": 325,\n\t\"./th.js\": 325,\n\t\"./tl-ph\": 326,\n\t\"./tl-ph.js\": 326,\n\t\"./tlh\": 327,\n\t\"./tlh.js\": 327,\n\t\"./tr\": 328,\n\t\"./tr.js\": 328,\n\t\"./tzl\": 329,\n\t\"./tzl.js\": 329,\n\t\"./tzm\": 330,\n\t\"./tzm-latn\": 331,\n\t\"./tzm-latn.js\": 331,\n\t\"./tzm.js\": 330,\n\t\"./ug-cn\": 332,\n\t\"./ug-cn.js\": 332,\n\t\"./uk\": 333,\n\t\"./uk.js\": 333,\n\t\"./ur\": 334,\n\t\"./ur.js\": 334,\n\t\"./uz\": 335,\n\t\"./uz-latn\": 336,\n\t\"./uz-latn.js\": 336,\n\t\"./uz.js\": 335,\n\t\"./vi\": 337,\n\t\"./vi.js\": 337,\n\t\"./x-pseudo\": 338,\n\t\"./x-pseudo.js\": 338,\n\t\"./yo\": 339,\n\t\"./yo.js\": 339,\n\t\"./zh-cn\": 340,\n\t\"./zh-cn.js\": 340,\n\t\"./zh-hk\": 341,\n\t\"./zh-hk.js\": 341,\n\t\"./zh-tw\": 342,\n\t\"./zh-tw.js\": 342\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 498;","module.exports = __webpack_public_path__ + \"static/media/loggi.e9622e8c.png\";","module.exports = __webpack_public_path__ + \"./fonts/SulSans-Light.ttf\";","module.exports = __webpack_public_path__ + \"./fonts/SulSans-Regular.ttf\";"],"sourceRoot":""}