{"version":3,"sources":["utils/index.js","reducers/index.js","Config.js","actions/index.js","components/analytics/GAComponent.js","components/header/components/Logo.js","components/header/components/Search.js","components/header/components/CategoriesMenu.js","components/header/components/MiniCartItem.js","components/header/components/MiniCart.js","components/header/components/ToolbarHeader.js","components/header/components/MobileMenu.js","components/header/components/MainMenu.js","components/header/Header.js","components/footer/components/FooterCategories.js","components/footer/Footer.js","react-pages/home/components/HomeSlider.js","components/shop/ProductItem.js","react-pages/home/components/FeaturedProducts.js","components/seo/SeoComponent.js","react-pages/home/Home.js","react-pages/products/components/CategoriesMenu.js","react-pages/products/components/BrandsMenu.js","react-pages/products/components/ProductList.js","react-pages/products/components/Pagination.js","react-pages/products/Products.js","react-pages/about/About.js","react-pages/cart/components/CartItem.js","react-pages/cart/Cart.js","react-pages/single-product/SingleProduct.js","react-pages/checkout/components/CheckoutSteps.js","react-pages/checkout/components/GeneralInformation.js","react-pages/checkout/components/Shipping.js","react-pages/checkout/components/Payment.js","react-pages/checkout/components/ReviewOrder.js","react-pages/checkout/Checkout.js","react-pages/pedido-finalizado/PedidoFinalizado.js","react-pages/login/Login.js","react-pages/welcome/Welcome.js","react-pages/account/components/AccountMenu.js","react-pages/account/Profile.js","react-pages/account/Orders.js","react-pages/delivery/components/ResponsibleData.js","react-pages/delivery/components/Tracking.js","react-pages/delivery/Delivery.js","react-pages/pago-qr/PagoQR.js","react-pages/NotFound.js","react-pages/email-verification/EmailVerification.js","routes/NavigationRoutes.js","App.js","serviceWorker.js","firebaseConfig.js","index.js","img/image_not_found.png","img/logo/logo.png"],"names":["formatNumber","num","toFixed","toString","replace","strTofriendlyUrl","string","a","p","RegExp","split","join","toLowerCase","c","charAt","indexOf","getDiscountsForArticle","allDiscounts","articleId","familyId","result","i","o","objectType","objectId","push","chooseDiscount","articleDiscounts","quantity","realPrice","choosenDiscount","max","cantidadMax","Number","MAX_SAFE_INTEGER","cantidadMin","discount","Math","min","descuentoXPorcentaje","porcentajeDescuento","precioDescuento","info","emailIsValid","email","test","hasOnlyNumbers","input","reducer","state","action","type","console","log","gaID","configuracionSeo","payload","seo","googleAnalyticId","mobileMenuIsOpen","cart","articuloId","cantidad","item","descuentosParaArticulo","descuentos","familiaId","precio","precioEnUso","localStorage","setItem","JSON","stringify","cartChangesCounter","currentUser","removeItem","currentClient","Config","apiURL","pageSize","asistexaURL","currentURL","whatsappForOrder","gpsDefaultPosition","lat","lng","GoogleMapApiKey","siteName","siteDescription","slideshowBackgroundEnabled","addToCart","removeFromCart","clearCart","updateDiscounts","setCurrentUser","setCurrentClient","connect","stateObject","withRouter","history","useEffect","startsWith","tagManagerArgs","gtmId","TagManager","initialize","listen","location","pathname","window","dataLayer","event","timer","setTimeout","clearTimeout","ReactGA","pageview","props","logoFileId","logo","LogoImage","className","to","src","alt","Search","searchTerm","params","URLSearchParams","this","search","has","setState","get","e","target","value","preventDefault","onSearch","method","onSubmit","handleSearch","bind","onChange","handleSearchTermChange","placeholder","Component","CategoriesMenu","categorias","Dropdown","Toggle","variant","Menu","map","subArray","index","key","categoria","index2","onClick","document","dispatchEvent","MouseEvent","nombre","imageUrl","MiniCartItem","onRemoveItem","nombreArticulo","precioForDislay","imagenUrl","friendlyNameUrl","mapDispatchToProps","total","cartItems","id","articulo","length","style","fontSize","firebase","badge","Object","keys","mobileMenuToggleActive","href","onClickInMobileMenu","fullName","auth","signOut","MobileMenu","isActive","logout","data-initial-height","onItemClicked","Header","encodeURIComponent","isOpen","handleSeach","handleMobileMenu","React","FooterCategories","arreglo","row","j","Footer","rel","jQuery","$","require","HomeSlider","items","owlCarousel","loop","dots","nav","navText","data-owl-carousel","marcaImageUrl","fotografiaMarcaId","fotografiaId","ImageNotFound","relativeUrl","descripcion","nombreMarca","ProductItem","useState","discountModalIsShown","setStateObject","selectedDiscount","nuevoPrecio","oldPrice","currentPrice","display","addToCartButton","cantidadDisponible","onAddToCart","nombreFamilia","Modal","show","onHide","closeButton","Title","Body","scope","descuentoId","categoryUrl","destacados","modalIsShown","setModalIsShown","modalErrorIsShown","setErrorModalIsShown","articulos","clienteId","from","slice","handleClose","handleCloseErrorModal","handleAddToCart","familiaNombre","precioPorMenor","seoConfig","title","nombreComercial","description","descripcionComercial","url","img","image","charSet","property","content","name","isForHome","fotoLocal","fotoTiendaFileId","json","whatsappAtencionCliente","direccion","ciudad","latitud","longitud","getStructuredDataForHome","productData","data","descripcionCorta","codigo","getStructuredDataForProduct","setDestacados","headers","clienteid","fetch","then","res","catch","err","categoriaActual","subCategoriaActual","tipos","tipo","tipoId","BrandsMenu","marcas","marca","marcaId","marcaActual","Pagination","onPageChanged","baseUrl","currentPage","totalRows","lastRowOfPage","firstRowOfPage","previousPage","nextPage","lastPage","showPreviousButton","showNextButton","parseInt","queryStringParams","match","categoriaId","subCategoriaId","query","queryString","loading","scrollTo","top","behavior","fromRow","response","jsonData","familias","tituloBusqueda","About","CartItem","onChangeQuantity","subTotalForDisplay","precioEnUsoForDislay","cantidades","OverlayTrigger","placement","overlay","Tooltip","data-toggle","data-original-title","updateCart","addButtonEnabled","cantidadSeleccionada","productoId","addToCartEnabled","fetchData","descripcionDetalle","descripcionDetalleHTML","substring","descriptionForUrl","encodeURI","whatsappPhoneNumber","whatsappMessage","priceInUse","htmlFor","nuevoValor","dangerouslySetInnerHTML","__html","CheckoutSteps","currentSection","onSectionChanged","handleSectionChange","stopPropagation","section","dataset","data-section","GeneralInformation","nombreCompleto","telefono","nit","razonSocial","wasValidated","invalidMessagesForState","handleChangeValue","handleNextButton","invalid","trim","onNextSection","containerStyle","width","height","memo","position","setPosition","dragging","setDragging","city","cityName","address","addressValidationMessage","cityValidationMessage","costoEnvioValidationMessage","requestGeolocation","costoEnvio","setCostoEnvio","marker","setMarker","onLoadMarker","useCallback","getCostoEntrega","onUnmountMarker","navigator","geolocation","getCurrentPosition","coords","latitude","longitude","token","getItem","Authorization","obj","estado","posible","costo","changeCostoEnvio","autocomplete","setAutocomplete","libraries","googleMapsApiKey","onLoad","onPlaceChanged","place","getPlace","geometry","formatted_address","borderWidth","borderBottom","mapContainerStyle","center","zoom","latLng","onUnmount","onDragStart","onDragEnd","onPositionChanged","draggable","selectedIndex","text","rows","onBackButton","isInvalid","Payment","selectedPaymentType","onChangePaymentType","checked","ReviewOrder","makingOrder","generalInformation","paymentType","shipping","onCompleteOrder","setMakingOrder","setCurrentSection","setGeneralInformation","setPaymentType","setShipping","subtotal","selectedSection","objCostoEnvio","nombreCliente","nombreCiudad","costoEntrega","tipoPago","descuento","detalle","body","success","ventaId","alert","PedidoFinalizado","phoneNumber","setPhoneNumber","setLoading","validationMessage","phoneNumberValidation","setPhoneNumberValidation","requireVerificationCode","setRequireVerificationCode","loadingVerification","setLoadingVerification","verificationCode","setVerificationCode","verificationCodeValidation","setVerificationCodeValidation","setupRecaptcha","sendLogin","appVerifier","recaptchaVerifier","number","signInWithPhoneNumber","confirmationResult","error","RecaptchaVerifier","loginClient","cliente","isNew","disabled","confirm","code","enableSearch","localization","es","searchPlaceholder","searchNotFound","containerClass","inputClass","country","phone","countryCodeEditable","notMe","setNotMe","clientName","setClientName","setNit","setEmail","clientNameValidation","setClientNameValidation","emailValidation","setEmailValidation","nitValidation","setNitValidation","updatingClient","setUpdatingClient","hasError","RazonSocial","ServerClienteId","SitioWeb","Telefono","Nit","emailVerified","emailVerificado","showMessage","setShowMessage","message","messageCounter","currentMessage","setCurrentMessage","clientId","clientData","setClientData","fullNameValidationMessage","emailValidationMessage","nitValidationMessage","validation","setValidation","newValidation","valid","ClienteId","pagoTotal","costoTransporte","currentOrder","setCurrentOrder","showDetails","setShowDetails","successLoaded","pedidos","setData","handleDetails","pedido","dialogClassName","descripcionConcepto","precioVenta","colSpan","data-id","date","day","getDate","month","getMonth","year","getFullYear","formatDate","Date","fechaRegistro","nombreClienteEntrega","telefonoEntrega","observacionesEntrega","estadoVentaId","getEstado","ResponsibleData","nombreResponsable","telefonoResponsable","Tracking","destiny","setMarkerPosition","setMarkerDestiny","onLoadMarkerPosition","onUnmountMarkerPosition","onLoadMarkerDestiny","onUnmountMarkerDestiny","label","Delivery","setTimer","counter","setCounter","theTimer","getOrderStatus","requestAgain","mensaje","latitudActual","longitudActual","currentAction","setCurrentAction","currentPayment","setCurrentPayment","getPendingPayment","deposito","pagado","getOrder","montoTotalExtras","fileId","NotFound","EmailVerification","isOk","setIsOk","jsonResult","updateSEOInfo","setCategorias","filasNecesarias","requiereExtra","categories","exact","path","component","Home","SingleProduct","Products","Cart","onAuthStateChanged","user","Fragment","Boolean","hostname","apiKey","authDomain","databaseURL","projectId","storageBucket","messagingSenderId","appId","measurementId","strCart","parse","strClient","initialState","telefonoTienda","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","store","createStore","ReactDOM","render","StrictMode","getElementById","serviceWorker","ready","registration","unregister","module","exports"],"mappings":"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","file":"static/js/main.18da23be.chunk.js","sourcesContent":["export const formatNumber = (num) => {\r\n return num.toFixed(2).toString().replace(/(\\d)(?=(\\d{3})+(?!\\d))/g, '$1,')\r\n}\r\n\r\nexport const strTofriendlyUrl = (string) => {\r\n //source from: https://gist.github.com/hagemann/382adfc57adbd5af078dc93feef01fe1\r\n const a = 'àáâäæãåāăąçćčđďèéêëēėęěğǵḧîïíīįìłḿñńǹňôöòóœøōõőṕŕřßśšşșťțûüùúūǘůűųẃẍÿýžźż·/_,:;'\r\n const b = 'aaaaaaaaaacccddeeeeeeeegghiiiiiilmnnnnoooooooooprrsssssttuuuuuuuuuwxyyzzz------'\r\n const p = new RegExp(a.split('').join('|'), 'g')\r\n \r\n return string.toString().toLowerCase()\r\n .replace(/\\s+/g, '-') // Replace spaces with -\r\n .replace(p, c => b.charAt(a.indexOf(c))) // Replace special characters\r\n .replace(/&/g, '-and-') // Replace & with 'and'\r\n .replace(/[^\\w\\-]+/g, '') // Remove all non-word characters\r\n .replace(/\\-\\-+/g, '-') // Replace multiple - with single -\r\n .replace(/^-+/, '') // Trim - from start of text\r\n .replace(/-+$/, '') // Trim - from end of text\r\n}\r\n\r\n//Selecciona los descuentos aplicables para un articulo en base a la lista de todos los descuentos\r\nexport const getDiscountsForArticle = (allDiscounts, articleId, familyId) => {\r\n \r\n const result = [];\r\n for(let i in allDiscounts){\r\n const o = allDiscounts[i];\r\n if(((o.objectType == \"ARTICULO\" && o.objectId == articleId) || \r\n (o.objectType == \"FAMILIA\" && o.objectId == familyId))){\r\n result.push(o)\r\n }\r\n }\r\n return result;\r\n}\r\n\r\n//Obtiene el porcentaje de descuento de la lista de descuentos en base a la cantidad \r\n//seleccionada\r\nexport const chooseDiscount = (articleDiscounts, quantity, realPrice) => {\r\n let choosenDiscount = null;\r\n for(let i in articleDiscounts){\r\n const o = articleDiscounts[i];\r\n let max = o.cantidadMax;\r\n if (max < 0)\r\n max = Number.MAX_SAFE_INTEGER;\r\n if (quantity >= o.cantidadMin && quantity <= max){\r\n const discount = Math.min(o.descuentoXPorcentaje ? \r\n o.porcentajeDescuento / 100.0 : \r\n o.precioDescuento / realPrice , 1);\r\n if(!choosenDiscount || discount > choosenDiscount.discount)\r\n choosenDiscount = {\r\n info : o,\r\n discount : discount\r\n };\r\n }\r\n \r\n }\r\n return choosenDiscount;\r\n}\r\n\r\nexport const emailIsValid = (email) => {\r\n const re = /^(([^<>()[\\]\\\\.,;:\\s@\\\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\\\"]+)*)|(\\\".+\\\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return re.test(email);\r\n}\r\n\r\nexport const hasOnlyNumbers = (input) =>{\r\n const re = /^\\d+$/;\r\n return re.test(input)\r\n}\r\n\r\nexport const formatDate = (date) => {\r\n\r\n let day = date.getDate()\r\n let month = date.getMonth() + 1\r\n let year = date.getFullYear();\r\n\r\n return `${ day < 10 ? \"0\": \"\" }${ day }/${ month < 10 ? \"0\": \"\" }${ month }/${ year }`\r\n}","import { getDiscountsForArticle, chooseDiscount } from '../utils'\r\n\r\nconst reducer = (state, action) => {\r\n switch(action.type){\r\n case 'UPDATE_SEO_INFO':\r\n\r\n console.log(\"------------------> Updating GAID \")\r\n if(state.gaID){\r\n console.log(\"------------------> GAID Already exists \")\r\n return {\r\n ...state,\r\n configuracionSeo : action.payload.seo\r\n };\r\n }\r\n console.log(\"------------------> GAID Updated\")\r\n \r\n return {\r\n ...state,\r\n gaID : action.payload.seo.googleAnalyticId,\r\n configuracionSeo : action.payload.seo\r\n }\r\n case 'TOGGLE_MOBILE_MENU':\r\n return {\r\n ...state,\r\n mobileMenuIsOpen: !state.mobileMenuIsOpen\r\n } \r\n case 'CHANGE_MOBILE_MENU_IS_OPEN':\r\n return {\r\n ...state,\r\n mobileMenuIsOpen: action.payload\r\n } \r\n case 'ADD_TO_CART':\r\n if(state.cart[action.payload.articuloId]){\r\n state.cart[action.payload.articuloId].cantidad = \r\n state.cart[action.payload.articuloId].cantidad + \r\n action.payload.cantidad\r\n }else{\r\n state.cart[action.payload.articuloId] = action.payload\r\n }\r\n\r\n const item = state.cart[action.payload.articuloId];\r\n\r\n const descuentosParaArticulo = getDiscountsForArticle(\r\n state.descuentos,\r\n item.articuloId,\r\n item.familiaId\r\n )\r\n\r\n const choosenDiscount = chooseDiscount(\r\n descuentosParaArticulo,\r\n item.cantidad,\r\n item.precio\r\n )\r\n item.porcentajeDescuento = choosenDiscount ? choosenDiscount.discount : 0;\r\n item.precioEnUso = item.precio * (1 - item.porcentajeDescuento);\r\n\r\n localStorage.setItem(\"cart\", JSON.stringify(state.cart)) \r\n return {\r\n ...state,\r\n cart : state.cart,\r\n cartChangesCounter : state.cartChangesCounter + 1\r\n }\r\n case 'REMOVE_FROM_CART':\r\n delete state.cart[action.payload.articuloId] \r\n localStorage.setItem(\"cart\", JSON.stringify(state.cart)) \r\n return {\r\n ...state,\r\n cart : state.cart,\r\n cartChangesCounter : state.cartChangesCounter + 1\r\n }\r\n case 'CLEAR_CART': \r\n localStorage.setItem(\"cart\", \"{}\") \r\n return {\r\n ...state,\r\n cart : { },\r\n cartChangesCounter : state.cartChangesCounter + 1\r\n }\r\n case 'UPDATE_CART': \r\n if(state.cart[action.payload.articuloId]){\r\n\r\n const item = state.cart[action.payload.articuloId];\r\n item.cantidad = action.payload.cantidad\r\n\r\n const descuentosParaArticulo = getDiscountsForArticle(\r\n state.descuentos,\r\n item.articuloId,\r\n item.familiaId\r\n )\r\n\r\n const choosenDiscount = chooseDiscount(\r\n descuentosParaArticulo,\r\n item.cantidad,\r\n item.precio\r\n )\r\n item.porcentajeDescuento = choosenDiscount ? choosenDiscount.discount : 0;\r\n item.precioEnUso = item.precio * (1 - item.porcentajeDescuento);\r\n }\r\n localStorage.setItem(\"cart\", JSON.stringify(state.cart)) \r\n return {\r\n ...state,\r\n cart : state.cart,\r\n cartChangesCounter : state.cartChangesCounter + 1\r\n }\r\n \r\n case 'UPDATE_DISCOUNTS' :\r\n const descuentos = action.payload\r\n for(let i in state.cart){\r\n const item = state.cart[i];\r\n const descuentosParaArticulo = getDiscountsForArticle(\r\n descuentos,\r\n item.articuloId,\r\n item.familiaId\r\n )\r\n const choosenDiscount = chooseDiscount(\r\n descuentosParaArticulo,\r\n item.cantidad,\r\n item.precio\r\n )\r\n item.porcentajeDescuento = choosenDiscount ? choosenDiscount.discount : 0;\r\n item.precioEnUso = item.precio * (1 - item.porcentajeDescuento);\r\n }\r\n return {\r\n ...state,\r\n cart : state.cart,\r\n descuentos: descuentos\r\n }\r\n\r\n case 'SET_USER' : \r\n if(!action.payload.currentUser){\r\n localStorage.removeItem(\"token\");\r\n localStorage.removeItem(\"client\");\r\n return {\r\n ...state,\r\n currentClient : null,\r\n currentUser : action.payload.currentUser\r\n }\r\n }\r\n return {\r\n ...state,\r\n currentUser : action.payload.currentUser\r\n }\r\n\r\n case 'SET_CLIENT' : \r\n if(action.payload.currentClient)\r\n localStorage.setItem(\"client\", JSON.stringify(action.payload.currentClient));\r\n else\r\n localStorage.removeItem(\"client\");\r\n return {\r\n ...state,\r\n currentClient : action.payload.currentClient\r\n }\r\n }\r\n\r\n return state;\r\n}\r\n\r\nexport default reducer;","const Config = {\r\n apiURL: \"https://twiggy.com.bo/\",\r\n pageSize: 12,\r\n asistexaURL: \"https://asistexa.twiggy.com.bo/\",\r\n currentURL: \"https://twiggy.com.bo/\",\r\n whatsappForOrder: \"+59176753100\",\r\n gpsDefaultPosition: {\r\n lat: -16.5422237,\r\n lng: -68.0826703\r\n }, \r\n GoogleMapApiKey: 'AIzaSyACQ-j10gQVtiERL-kXrT_G6DcJ07RCMSM',\r\n siteName: 'Twiggy Perfumer�a',\r\n siteDescription: \"Perfumes de renombre internacional, productos de cuidado personal y tratamientos de belleza en Bolivia\",\r\n slideshowBackgroundEnabled: false\r\n}\r\nexport default Config\r\n\r\n","export const toggleMobileMenu = payload => ({\r\n type: 'TOGGLE_MOBILE_MENU'\r\n})\r\n\r\nexport const changeMobileMenuIsOpen = payload => ({\r\n type: 'CHANGE_MOBILE_MENU_IS_OPEN',\r\n payload\r\n})\r\n\r\nexport const addToCart = payload => ({\r\n type: 'ADD_TO_CART',\r\n payload\r\n})\r\n\r\nexport const removeFromCart = payload => ({\r\n type: 'REMOVE_FROM_CART',\r\n payload\r\n})\r\n\r\nexport const clearCart = payload => ({\r\n type: 'CLEAR_CART',\r\n payload\r\n})\r\n\r\nexport const updateCart = payload => ({\r\n type: 'UPDATE_CART',\r\n payload\r\n})\r\n\r\nexport const updateDiscounts = payload => ({\r\n type: 'UPDATE_DISCOUNTS',\r\n payload\r\n})\r\n\r\nexport const setCurrentUser = payload => ({\r\n type: 'SET_USER',\r\n payload\r\n})\r\n\r\nexport const setCurrentClient = payload => ({\r\n type: 'SET_CLIENT',\r\n payload\r\n})\r\n\r\nexport const updateGAID = payload => ({\r\n type: 'UPDATE_GAID',\r\n payload\r\n})\r\nexport const updateSEOInfo = payload => ({\r\n type: 'UPDATE_SEO_INFO',\r\n payload\r\n})\r\n\r\n","import React, { useEffect } from 'react'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { withRouter } from 'react-router'\r\nimport TagManager from 'react-gtm-module'\r\nimport ReactGA from 'react-ga';\r\n\r\nconst GAComponent = ({ gaID, history }) => {\r\n\r\n useEffect(() => {\r\n if(!gaID)\r\n return;\r\n\r\n if (gaID.startsWith(\"GTM\")) {\r\n const tagManagerArgs = {\r\n gtmId: gaID\r\n }\r\n TagManager.initialize(tagManagerArgs)\r\n history.listen(location => {\r\n console.log(\"Visiting... \" + location.pathname)\r\n window.dataLayer.push({\r\n event: 'pageview'\r\n });\r\n });\r\n const timer = setTimeout(() => {\r\n window.dataLayer.push({\r\n event: 'pageview'\r\n });\r\n }, 1200);\r\n return () => clearTimeout(timer);\r\n }\r\n ReactGA.initialize(gaID);\r\n ReactGA.pageview(window.location.pathname)\r\n history.listen(location => {\r\n console.log(\"Visiting... \" + location.pathname)\r\n ReactGA.pageview(location.pathname)\r\n } \r\n );\r\n\r\n \r\n }, [gaID])\r\n\r\n return (\r\n <>\r\n )\r\n}\r\n\r\n\r\nconst mapStateObjectToProps = stateObject => {\r\n return {\r\n gaID : stateObject.gaID\r\n }\r\n}\r\nconst mapDispatchToProps = null;\r\n\r\nexport default connect(mapStateObjectToProps, mapDispatchToProps)(withRouter(GAComponent));\r\n","import React from 'react';\r\nimport { Link } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport Config from '../../../Config';\r\nimport LogoImage from '../../../img/logo/logo.png'\r\n\r\nfunction Logo(props) {\r\n\r\n const logoFileId = props.configuracionSeo && props.configuracionSeo.logoFileId &&\r\n props.configuracionSeo.logoFileId ? props.configuracionSeo.logoFileId : 0;\r\n\r\n const logo = logoFileId > 0 ? \r\n `${Config.asistexaURL}image_${logoFileId}_270_91.jpg` :\r\n LogoImage;\r\n\r\n return (\r\n
\r\n \r\n \"Unishop\"/\r\n \r\n
\r\n )\r\n}\r\n\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n configuracionSeo: state.configuracionSeo\r\n }\r\n}\r\nconst mapDispatchToProps = null\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Logo);","import React, { Component} from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\n\r\n\r\nclass Search extends Component {\r\n state = { \r\n searchTerm : ''\r\n }\r\n\r\n componentDidMount(){\r\n const params = new URLSearchParams(this.props.location.search)\r\n if(params.has(\"q\"))\r\n this.setState({\r\n searchTerm : params.get(\"q\")\r\n })\r\n }\r\n\r\n handleSearchTermChange(e){\r\n this.setState({\r\n searchTerm : e.target.value\r\n })\r\n }\r\n\r\n handleSearch(e){\r\n e.preventDefault();\r\n this.props.onSearch(this.state.searchTerm);\r\n }\r\n\r\n render() {\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\nexport default withRouter(Search)\r\n","import React, { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport Dropdown from 'react-bootstrap/Dropdown';\r\nimport Config from '../../../Config'\r\nimport { strTofriendlyUrl } from '../../../utils'\r\n\r\nconst CategoriesMenu = ({ categorias }) => {\r\n/*\r\n const [state, setState] = useState({\r\n categorias : []\r\n })\r\n\r\n useEffect(() => {\r\n fetch(`${Config.apiURL}api/familia`)\r\n .then(response => response.json())\r\n .then(jsonData => {\r\n if(jsonData.length <= 4){\r\n setState({\r\n categorias : [jsonData]\r\n })\r\n return;\r\n }\r\n let categories = []\r\n let from = 0;\r\n while(from < jsonData.length){\r\n const to = from + 4 <= jsonData.length ? from + 4 : jsonData.length\r\n categories.push(jsonData.slice(from, to))\r\n from = to\r\n }\r\n setState({\r\n categorias : categories\r\n })\r\n })\r\n .catch(err =>{\r\n console.log(err)\r\n })\r\n },[]);\r\n\r\n*/\r\n return (\r\n
\r\n \r\n \r\n  Categorias\r\n \r\n \r\n\r\n {\r\n categorias.map((subArray, index) => (\r\n
\r\n {\r\n subArray.map((categoria, index2) => (\r\n
\r\n { document.dispatchEvent(new MouseEvent('click')) } } \r\n className=\"d-block navi-link text-center mb-30\"\r\n to={ `/productos/categoria/${categoria.familiaId}/${ strTofriendlyUrl(categoria.nombre) }` }>\r\n {\r\n { categoria.nombre }\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\nexport default CategoriesMenu\r\n","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { strTofriendlyUrl } from '../../../utils' \r\n\r\nconst MiniCartItem = (\r\n { \r\n onRemoveItem,\r\n nombreArticulo,\r\n precioForDislay,\r\n articuloId,\r\n cantidad,\r\n imagenUrl,\r\n friendlyNameUrl\r\n }) => {\r\n\r\n const removeItem = () =>{\r\n onRemoveItem({\r\n articuloId\r\n });\r\n }\r\n return (\r\n \r\n< div className=\"entry\">\r\n
\r\n \r\n {\r\n \r\n
\r\n
\r\n

\r\n \r\n { nombreArticulo }\r\n \r\n

\r\n { cantidad } x Bs. { precioForDislay }\r\n
\r\n
\r\n \r\n
\r\n \r\n )\r\n}\r\nexport default MiniCartItem;","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport { removeFromCart } from '../../../actions'\r\nimport { formatNumber, strTofriendlyUrl } from '../../../utils'\r\n\r\nimport MiniCartItem from './MiniCartItem'\r\n\r\nconst MiniCart = (props) => {\r\n\r\n let total = 0;\r\n const cartItems = [] \r\n for (const id in props.cart) {\r\n const articulo = props.cart[id];\r\n if(!articulo.precioEnUso)\r\n articulo.precioEnUso = articulo.precio;\r\n cartItems.push(articulo);\r\n total += articulo.precioEnUso * articulo.cantidad\r\n }\r\n\r\n if(cartItems.length == 0){\r\n return (\r\n
\r\n \r\n

\r\n Actualmente su carrito de compras está vacio.\r\n
\r\n )\r\n\r\n\r\n }\r\n \r\n return (\r\n
\r\n {\r\n cartItems.map((articulo, index) => {\r\n return (\r\n \r\n \r\n )\r\n })\r\n }\r\n
\r\n

\r\n Subtotal: \r\n Bs. { formatNumber(total) }\r\n

\r\n
\r\n \r\n Realizar Pedido\r\n \r\n \r\n Ver Carrito\r\n \r\n
\r\n )\r\n}\r\n\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n cart : state.cart,\r\n cartChangesCounter: state.cartChangesCounter\r\n }\r\n}\r\nconst mapDispatchToProps = { \r\n removeFromCart\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MiniCart);","import React, {useEffect} from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { setCurrentUser } from '../../../actions'\r\nimport MiniCart from './MiniCart'\r\n\r\nconst ToolbarHeader = (props) => {\r\n\r\n const handleMobileMenuToggle =(e) =>{\r\n e.preventDefault();\r\n props.onClickInMobileMenu();\r\n }\r\n \r\n \r\n let badge = \"\"\r\n if(props.cart && Object.keys(props.cart).length > 0)\r\n {\r\n badge = \r\n { Object.keys(props.cart).length }\r\n \r\n }\r\n\r\n const logout = e => {\r\n e.preventDefault();\r\n props.firebase.auth().signOut();\r\n }\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n Menu\r\n
\r\n
\r\n
\r\n {\r\n props.currentClient ?\r\n
\r\n { e.preventDefault() } }>\r\n
\r\n \r\n Mi Cuenta\r\n
\r\n
\r\n
\r\n

\r\n Bienvenido { props.currentClient.fullName == '.' ? \"\" : props.currentClient.fullName}\r\n

\r\n Mi Cuenta\r\n \r\n Salir\r\n \r\n
\r\n
\r\n :\r\n
\r\n { e.preventDefault() } }>\r\n
\r\n \r\n Login / Registro\r\n
\r\n
\r\n
\r\n

\r\n Ingresa para realizar compras y administrar tus pedidos.\r\n

\r\n Ingresar\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 { badge }\r\n \r\n \r\n Carrito\r\n
\r\n \r\n \r\n
\r\n \r\n )\r\n}\r\n\r\n/*\r\nconst mapStateToProps = state => {\r\n\r\n console.log(state.cart)\r\n return {\r\n cart : state.cart\r\n }\r\n}*/\r\nconst mapStateToProps = state => {\r\n return {\r\n firebase : state.firebase,\r\n currentClient : state.currentClient\r\n }\r\n }\r\n const mapDispatchToProps = { \r\n setCurrentUser\r\n };\r\n \r\n export default connect(mapStateToProps, mapDispatchToProps)(ToolbarHeader);\r\n","import React, { Component } from 'react'\r\nimport { withRouter, Link } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\n\r\nimport { setCurrentClient } from '../../../actions'\r\n\r\nclass MobileMenu extends Component {\r\n\r\n state = { \r\n searchTerm : ''\r\n }\r\n\r\n constructor(props){\r\n super(props)\r\n }\r\n\r\n componentDidMount(){\r\n const params = new URLSearchParams(this.props.location.search)\r\n if(params.has(\"q\"))\r\n this.setState({\r\n searchTerm : params.get(\"q\")\r\n })\r\n }\r\n\r\n handleSearchTermChange(e){\r\n this.setState({\r\n searchTerm : e.target.value\r\n })\r\n }\r\n\r\n handleSearch(e){\r\n e.preventDefault();\r\n this.props.onSearch(this.state.searchTerm);\r\n }\r\n\r\n logout(e) {\r\n e.preventDefault();\r\n this.props.firebase.auth().signOut();\r\n }\r\n\r\n render() {\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 this.props.currentClient ?\r\n <>\r\n
\r\n { e.preventDefault() } }>\r\n
\r\n \r\n Mi Cuenta\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n Salir\r\n \r\n
\r\n
\r\n \r\n : \r\n
\r\n { e.preventDefault() } }>\r\n
\r\n \r\n Login / Registro\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 mapStateToProps = state => {\r\n return {\r\n firebase : state.firebase,\r\n currentUser : state.currentUser,\r\n currentClient : state.currentClient\r\n }\r\n}\r\nconst mapDispatchToProps = { \r\n setCurrentClient\r\n};\r\n \r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(MobileMenu));\r\n\r\n","import React from 'react';\r\nimport { Link, withRouter } from 'react-router-dom'\r\n\r\nconst MainMenu = (props) => {\r\n\r\n return (\r\n <>\r\n {/*
\r\n \r\n
\r\n
\r\n
Computers & Accessories
\r\n
Smartphones & Tablets
\r\n
TV, Video & Audio
\r\n
Cameras, Photo & Video
\r\n
\r\n
\r\n
Headphones
\r\n
Wearable Electronics
\r\n
Printers & Ink
\r\n
Video Games
\r\n
\r\n
\r\n
*/}\r\n \r\n {/*
\r\n
\r\n
\r\n
3Compare
\r\n
\r\n
3 Cart
\r\n
\r\n
\r\n
\"Product\"
\r\n
\r\n

Canon EOS M50 Mirrorless Camera

1 x $910.00\r\n
\r\n
\r\n
\r\n
\r\n
\"Product\"
\r\n
\r\n

Apple iPhone X 256 GB Space Gray

1 x $1,450.00\r\n
\r\n
\r\n
\r\n
\r\n
\"Product\"
\r\n
\r\n

HP LaserJet Pro Laser Printer

1 x $188.50\r\n
\r\n
\r\n
\r\n
\r\n

Subtotal:  $2,548.50

\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\nexport default withRouter(MainMenu)","import React from 'react'\r\nimport { withRouter } from 'react-router-dom';\r\nimport Logo from './components/Logo'\r\nimport Search from './components/Search'\r\nimport CategoriesMenu from './components/CategoriesMenu'\r\nimport ToolbarHeader from './components/ToolbarHeader'\r\nimport MobileMenu from './components/MobileMenu'\r\nimport MainMenu from './components/MainMenu'\r\n\r\nclass Header extends React.Component {\r\n state = {\r\n mobileMenuIsOpen : false\r\n }\r\n\r\n constructor(props){\r\n super(props);\r\n }\r\n\r\n handleSeach(searchTerm){\r\n this.props.history.push(\"/productos?q=\" + encodeURIComponent(searchTerm))\r\n\r\n \r\n }\r\n\r\n handleMobileMenu(){\r\n const isOpen = !this.state.mobileMenuIsOpen;\r\n this.setState({\r\n mobileMenuIsOpen : isOpen\r\n })\r\n return isOpen;\r\n }\r\n\r\n render(){\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 { this.handleMobileMenu() } } />\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(Header);","import React, { useState, useEffect } from 'react';\r\nimport { Link } from 'react-router-dom'\r\nimport Config from '../../../Config'\r\nimport { strTofriendlyUrl } from '../../../utils'\r\n\r\nconst FooterCategories = ({ categorias }) => {\r\n/*\r\n\tconst [ categorias, setCategorias ] = useState([])\r\n\r\n\tuseEffect(() =>{\r\n\t\tfetch(`${Config.apiURL}api/familia`)\r\n .then(response => response.json())\r\n .then(jsonData => {\r\n\t\t\t\tconsole.log(jsonData)\r\n\t\t\t\tif(jsonData.length <= 4){\r\n\t\t\t\t\tsetCategorias([jsonData])\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tlet categoriasPorColumna = jsonData.length / 4.0;\r\n\t\t\t\tlet requiereExtra = parseInt(categoriasPorColumna) - categoriasPorColumna > 0;\r\n\t\t\t\tcategoriasPorColumna = parseInt(categoriasPorColumna);\r\n const categories = []\r\n\t\t\t\tlet from = 0;\r\n while(from < jsonData.length){\r\n\t\t\t\t\tlet to = from + categoriasPorColumna <= jsonData.length ? from + categoriasPorColumna : jsonData.length\r\n\t\t\t\t\tif(requiereExtra && to + 1 < jsonData.length)\r\n\t\t\t\t\t\tto++;\r\n\t\t\t\t\trequiereExtra = false\r\n categories.push(jsonData.slice(from, to))\r\n from = to\r\n }\r\n setCategorias(categories)\r\n })\r\n .catch(err =>{\r\n console.log(err)\r\n })\r\n\t},[])\r\n*/\r\n\r\n\tconst arreglo = [];\r\n\tfor(let i in categorias){\r\n\t\tconst row = categorias[i];\r\n\t\tfor(let j in row)\r\n\t\t\tarreglo.push(row[j]);\r\n\t}\r\n\tconsole.log(arreglo)\r\n\r\n\treturn (\r\n\t\t
\r\n\t\t\t

Categorias

\r\n\t\t\t\r\n\t\t
\r\n\t);\r\n}\r\n\r\nexport default FooterCategories","import React, { Component } from 'react'\r\nimport FooterCategories from './components/FooterCategories'\r\n\r\nconst Footer = ({ categorias }) => {\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default Footer\r\n","import React, { useEffect, useState } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { strTofriendlyUrl } from '../../../utils'\r\n\r\nimport 'owl.carousel2/dist/assets/owl.carousel.min.css';\r\n\r\nimport ImageNotFound from '../../../img/image_not_found.png'\r\nimport $ from 'jquery'\r\nimport Config from '../../../Config';\r\nwindow.jQuery = window.$ = $;\r\n\r\nrequire('owl.carousel2');\r\n\r\n\r\nconst HomeSlider = ({ items }) => {\r\n\r\n useEffect(() => {\r\n if (items && items.length > 0) {\r\n $('.store-slider').owlCarousel({\r\n items: 1,\r\n loop: true,\r\n dots: true,\r\n nav : true,\r\n navText : ['','']\r\n });\r\n }\r\n \r\n }, [items])\r\n \r\n \r\n //this.$el.owlCarousel('destroy');\r\n if(!items || items.length == 0)\r\n return ( \r\n
\r\n
\r\n );\r\n\r\n return (\r\n
\r\n\r\n {\r\n items.map((item) => {\r\n const marcaImageUrl = `${ Config.asistexaURL }image_${ item.fotografiaMarcaId }_300_300.jpg`\r\n\r\n const imageUrl = item.fotografiaId > 0 ? `${ Config.asistexaURL }image_${ item.fotografiaId }_555_440.jpg` : ImageNotFound;\r\n const relativeUrl = `/producto/${item.articuloId}/${strTofriendlyUrl(item.descripcion)}`\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n item.fotografiaMarcaId > 0 &&\r\n {\r\n } \r\n
{ item.descripcion }
\r\n
\r\n \r\n Ver Producto \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
\"Puma\"\r\n
Casco Half Dome Black Diamond
\r\n
\r\n \r\n Ver Producto \r\n \r\n
\r\n
\r\n \"Puma\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\"Sony\"\r\n
Botas Merrell Chamaleon Mid Waterproof
\r\n \r\n
\r\n \r\n Ver Producto \r\n \r\n
\r\n
\r\n \"Chuck\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\"Motorola\"\r\n
Carpa OURSKY para 2 personas
\r\n \r\n
\r\n \r\n Ver Producto \r\n \r\n
\r\n
\"Moto
\r\n
\r\n
\r\n
*/}\r\n
\r\n )\r\n}\r\n\r\nexport default HomeSlider","import React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport { Link } from 'react-router-dom'\r\nimport { formatNumber, strTofriendlyUrl, chooseDiscount } from '../../utils'\r\n\r\nconst ProductItem = (props) => {\r\n \r\n const [stateObject, setStateObject] = useState({\r\n discountModalIsShown : false\r\n })\r\n\r\n const addToStateCart = (e) =>{\r\n e.preventDefault()\r\n props.onAddToCart({\r\n articuloId : props.articuloId,\r\n imagenUrl: props.imagenUrl,\r\n precio : props.precio,\r\n cantidad: 1,\r\n familiaId: props.familiaId,\r\n nombreFamilia : props.nombreFamilia, \r\n nombreArticulo : props.nombreArticulo,\r\n cantidadDisponible : props.cantidadDisponible\r\n })\r\n\r\n\r\n }\r\n\r\n \r\n\r\n const handleDiscountModalClose = (e) =>{\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setStateObject({\r\n ...stateObject,\r\n discountModalIsShown : false\r\n })\r\n }\r\n \r\n const handleShowDiscounts = (e) =>{\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setStateObject({\r\n ...stateObject,\r\n discountModalIsShown : true\r\n })\r\n }\r\n\r\n\r\n\r\n\r\n const selectedDiscount = chooseDiscount(props.descuentos, \r\n 1, props.precio);\r\n console.log(\"Discount for \" + props.nombreArticulo)\r\n console.log(selectedDiscount)\r\n const porcentajeDescuento = selectedDiscount ? selectedDiscount.discount : 0;\r\n\r\n const nuevoPrecio = props.precio * (1 - porcentajeDescuento);\r\n\r\n let oldPrice = \"\";\r\n let currentPrice = `Bs. ${ formatNumber(props.precio) }`\r\n if(nuevoPrecio < props.precio){\r\n oldPrice = { currentPrice }\r\n currentPrice = ` Bs. ${ formatNumber(nuevoPrecio) }`\r\n \r\n }\r\n \r\n let addToCartButton = \"\";\r\n let badge = \"\"\r\n if(props.cantidadDisponible > 0){\r\n addToCartButton = \r\n \r\n Agregar al carrito\r\n \r\n if(props.descuentos && props.descuentos.length > 0)\r\n badge = <>\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n Hemos encontrado estas ofertas para este producto\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n props.descuentos.map((item) => {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
CantidadOferta
\r\n Entre { item.cantidadMin }\r\n { item.cantidadMax < 0 ? ' o más' : ` y ${ item.cantidadMax }` }\r\n \r\n {\r\n item.descuentoXPorcentaje ? \r\n `${ formatNumber( item.porcentajeDescuento) }% de descuento` : \r\n `${ formatNumber( item.precioDescuento) }Bs de descuento`\r\n\r\n }\r\n
\r\n
\r\n
\r\n \r\n }else{\r\n badge =
Agotado
\r\n }\r\n const relativeUrl = `/producto/${props.articuloId}/${strTofriendlyUrl(props.nombreArticulo)}`\r\n const categoryUrl = `/productos/categoria/${props.familiaId}/${strTofriendlyUrl(props.nombreFamilia)}`\r\n return (\r\n
\r\n { badge }\r\n \r\n \"Product\"\r\n \r\n
\r\n
\r\n \r\n { props.nombreFamilia }\r\n \r\n
\r\n

\r\n \r\n {props.nombreArticulo}\r\n \r\n

\r\n

\r\n { oldPrice }{ currentPrice }\r\n

\r\n\r\n\r\n
\r\n
\r\n { addToCartButton }\r\n {/*\r\n Pedir por Whatsapp\r\n */}\r\n \r\n Ver Detalle\r\n \r\n
\r\n
\r\n )\r\n}\r\n\r\nexport default ProductItem;","import React, { useState, useEffect } from 'react'\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport { Link } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport { addToCart } from '../../../actions'\r\n\r\nimport ProductItem from '../../../components/shop/ProductItem'\r\nimport { chooseDiscount, getDiscountsForArticle } from '../../../utils'\r\n\r\nimport Config from '../../../Config'\r\nimport ImageNotFound from '../../../img/image_not_found.png'\r\n\r\n\r\nconst FeaturedProducts = ({ destacados, addToCart, cart, descuentos, currentClient }) => {\r\n \r\n const [ modalIsShown, setModalIsShown ] = useState(false)\r\n const [ modalErrorIsShown, setErrorModalIsShown ] = useState(false)\r\n\r\n let clienteId = currentClient ? currentClient.clienteId : 0;\r\n\r\n let articulos = []\r\n if(destacados){\r\n let from = 0;\r\n const length = destacados.length\r\n while(from < length){\r\n const to = from + 4 <= length ? from + 4 : length\r\n articulos.push(destacados.slice(from, to))\r\n from = to\r\n }\r\n }\r\n const handleClose = (e) => {\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setModalIsShown(false)\r\n }\r\n\r\n const handleCloseErrorModal = (e) => {\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setErrorModalIsShown(false)\r\n }\r\n\r\n const handleAddToCart = (articulo) =>{\r\n const articuloId = articulo.articuloId;\r\n const cantidad = articulo.cantidad;\r\n const cantidadDisponible = articulo.cantidadDisponible;\r\n if(!cart[articuloId] || \r\n cart[articuloId].cantidad + cantidad <= cantidadDisponible){\r\n \r\n addToCart(articulo)\r\n \r\n setModalIsShown(true)\r\n setErrorModalIsShown(false)\r\n }else{\r\n \r\n setModalIsShown(false)\r\n setErrorModalIsShown(true)\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n\r\n \r\n \r\n
\r\n   \r\n Su producto ha sido agregado al carrito\r\n
\r\n\r\n
\r\n \r\n \r\n Continuar comprando\r\n \r\n \r\n Ir al Carrito\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n   \r\n No puede agregar mas items al carrito:: \r\n La cantidad seleccionada, mas la que ya ha agregado al carrito de compras,\r\n excede a la cantidad disponible.\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n Continuar comprando\r\n \r\n \r\n
\r\n\r\n
\r\n

Productos Destacados

\r\n {\r\n articulos.map((subArray, index) => {\r\n return (\r\n
\r\n {\r\n subArray.map((articulo) => {\r\n return (\r\n
\r\n 0 ? `${ Config.asistexaURL }image_${ articulo.fotografiaId }_300_300.jpg` : ImageNotFound } />\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 Ver todos los Productos\r\n \r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n cart : state.cart,\r\n descuentos : state.descuentos,\r\n currentClient : state.currentClient\r\n }\r\n}\r\nconst mapDispatchToProps = { \r\n addToCart\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FeaturedProducts);\r\n\r\n","import React from 'react'\r\nimport { Helmet } from \"react-helmet-async\";\r\nimport { connect } from 'react-redux'\r\nimport Config from '../../Config'\r\nconst SeoComponent = (props) => {\r\n\r\n const seoConfig = props.configuracionSeo\r\n const relativeUrl = !props.relativeUrl ? \"\" : props.relativeUrl\r\n const title = `${ props.title } | ${ seoConfig.nombreComercial }`\r\n const description = props.description ? props.description : seoConfig.descripcionComercial\r\n const url = `${Config.currentURL}${relativeUrl}`\r\n const img = props.image ? props.image : `${Config.currentURL}img/logo/logo.png`\r\n\r\n const getStructuredDataForHome = () =>{\r\n \r\n if(!seoConfig)\r\n return \"\";\r\n \r\n const logo = seoConfig.logoFileId > 0 ? `${ Config.asistexaURL }image_${seoConfig.logoFileId}_270_92.jpg` : img;\r\n const fotoLocal = seoConfig.fotoTiendaFileId > 0 ? `${ Config.asistexaURL }image_${seoConfig.fotoTiendaFileId}_525_525.jpg` : img;\r\n \r\n const json = {\r\n \"@id\" : `${Config.currentURL}`,\r\n \"@context\": \"https://schema.org\",\r\n \"@type\": \"Store\",\r\n \"url\": `${Config.currentURL}`,\r\n \"name\" : seoConfig.nombreComercial,\r\n \"description\" : seoConfig.descripcionComercial,\r\n \"openingHours\": \"\",\r\n \"telephone\" : seoConfig.whatsappAtencionCliente,\r\n \"paymentAccepted\" : \"Cash, Credit Card, Debit Card, QR Transfer\",\r\n \"address\": {\r\n \"@type\" : \"PostalAddress\",\r\n \"streetAddress\" : seoConfig.direccion,\r\n \"addressLocality\" : seoConfig.ciudad,\r\n \"addressRegion\" : seoConfig.ciudad,\r\n \"addressCountry\" : \"BO\"\r\n }, \r\n \"photo\": fotoLocal,\r\n \"logo\": logo,\r\n \"image\": logo,\r\n \"geo\" : {\r\n \"@type\": \"GeoCoordinates\",\r\n \"latitude\" : seoConfig.latitud,\r\n \"longitude\" : seoConfig.longitud,\r\n }\r\n }\r\n return JSON.stringify(json);\r\n }\r\n\r\n const getStructuredDataForProduct = () => {\r\n const data = props.productData;\r\n const json = {\r\n \"@context\": \"https://schema.org/\",\r\n \"@type\": \"Product\",\r\n \"name\": data.descripcion,\r\n \"image\": [\r\n data.imageUrl\r\n ],\r\n \"description\": data.descripcionCorta,\r\n \"sku\": data.codigo,\r\n \"brand\": {\r\n \"@type\": \"Brand\",\r\n \"name\": data.nombreMarca\r\n },\r\n /*\"review\": {\r\n \"@type\": \"Review\",\r\n \"reviewRating\": {\r\n \"@type\": \"Rating\",\r\n \"ratingValue\": \"4\",\r\n \"bestRating\": \"5\"\r\n },\r\n \"author\": {\r\n \"@type\": \"Person\",\r\n \"name\": \"Fred Benson\"\r\n }\r\n },\r\n \"aggregateRating\": {\r\n \"@type\": \"AggregateRating\",\r\n \"ratingValue\": \"4.4\",\r\n \"reviewCount\": \"89\"\r\n },*/\r\n \"offers\": {\r\n \"@type\": \"Offer\",\r\n \"url\": url,\r\n \"priceCurrency\": \"BOB\",\r\n \"price\": data.precio,\r\n \"itemCondition\": \"https://schema.org/NewCondition\",\r\n \"availability\": \"https://schema.org/InStock\"\r\n }\r\n }\r\n return JSON.stringify(json);\r\n\r\n }\r\n \r\n return (\r\n <>\r\n \r\n \r\n { title }\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 props.isForHome && \r\n \r\n }\r\n {\r\n props.productData &&\r\n \r\n }\r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n configuracionSeo : state.configuracionSeo\r\n }\r\n}\r\nconst mapDispatchToProps = null\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(SeoComponent);","import React, { useEffect, useState } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { updateDiscounts } from '../../actions'\r\n\r\nimport HomeSlider from './components/HomeSlider'\r\nimport FeaturedProducts from './components/FeaturedProducts'\r\nimport Config from '../../Config'\r\nimport SeoCompoment from '../../components/seo/SeoComponent'\r\n \r\nconst Home = (props) => {\r\n\r\n const [ destacados, setDestacados ] = useState([]);\r\n const [ seoConfig, setSeoConfig ] = useState(props.configuracionSeo);\r\n\r\n useEffect(() => {\r\n\r\n const url = `${Config.apiURL}api/articulo/destacados`;\r\n const headers = {}\r\n\r\n if(props.currentClient)\r\n headers.clienteid = props.currentClient.clienteId;\r\n \r\n fetch(url, {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then((res) =>{\r\n return res.json();\r\n })\r\n .then((data) => {\r\n \r\n if(data){\r\n setDestacados(data.articulos);\r\n //setSeoConfig(data.configuracionSeo);\r\n props.updateDiscounts(data.descuentos);\r\n }\r\n \r\n })\r\n .catch((err =>{\r\n console.log(err)\r\n setDestacados([])\r\n }));\r\n },[props.currentClient])\r\n\r\n \r\n return (\r\n <>\r\n {/* \r\n Tienda Virtual\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 { console.log(destacados) }\r\n 3 ? destacados.slice(0, 3) : destacados : [] } />\r\n
\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n currentClient : state.currentClient,\r\n configuracionSeo : state.configuracionSeo\r\n }\r\n}\r\nconst mapDispatchToProps = { \r\n updateDiscounts\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Home);","import React, { Component } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { strTofriendlyUrl } from '../../../utils'\r\n \r\nfunction CategoriesMenu({ categorias, categoriaActual, subCategoriaActual }){\r\n\r\n \r\n return (\r\n
\r\n

Buscar por Categorias

\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default CategoriesMenu\r\n","import React, { Component } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { strTofriendlyUrl } from '../../../utils'\r\n\r\nconst BrandsMenu = (props) => {\r\n\r\n return (\r\n
\r\n

Buscar por Marcas

\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default BrandsMenu\r\n","import React, { useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport { connect } from 'react-redux'\r\nimport { addToCart } from '../../../actions'\r\nimport { Link } from 'react-router-dom'\r\n\r\nimport ProductItem from '../../../components/shop/ProductItem'\r\nimport { getDiscountsForArticle } from '../../../utils'\r\nimport Config from '../../../Config'\r\n\r\nimport ImageNotFound from '../../../img/image_not_found.png'\r\n\r\nconst ProductList = ( { articulos, cart, addToCart, descuentos, currentClient } ) => {\r\n\r\n const [ modalIsShown, setModalIsShown ] = useState(false)\r\n const [ modalErrorIsShown, setErrorModalIsShown ] = useState(false) \r\n\r\n const clienteId = currentClient ? currentClient.clienteId : 0;\r\n\r\n const handleClose = (e) => {\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setModalIsShown(false)\r\n }\r\n\r\n const handleCloseErrorModal = (e) => {\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setErrorModalIsShown(false)\r\n }\r\n\r\n \r\n\r\n const handleAddToCart = (articulo) =>{\r\n const articuloId = articulo.articuloId;\r\n const cantidad = articulo.cantidad;\r\n const cantidadDisponible = articulo.cantidadDisponible;\r\n if(!cart[articuloId] || \r\n cart[articuloId].cantidad + cantidad <= cantidadDisponible){\r\n \r\n addToCart(articulo)\r\n \r\n setModalIsShown(true)\r\n setErrorModalIsShown(false)\r\n }else{\r\n \r\n setModalIsShown(false)\r\n setErrorModalIsShown(true)\r\n }\r\n }\r\n\r\n if(articulos.length == 0){\r\n\r\n return (\r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n

\r\n No hay productos que coincidan con su criterio de búsqueda.\r\n

\r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n \r\n
\r\n   \r\n Su producto ha sido agregado al carrito\r\n
\r\n\r\n
\r\n \r\n \r\n Continuar comprando\r\n \r\n \r\n Ir al Carrito\r\n \r\n \r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n   \r\n No puede agregar mas items al carrito: \r\n La cantidad seleccionada, mas la que ya ha agregado al carrito de compras,\r\n excede a la cantidad disponible.\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n Continuar comprando\r\n \r\n \r\n
\r\n {\r\n articulos.map((subArray, index) => {\r\n return (\r\n
\r\n {\r\n subArray.map((articulo, index) => {\r\n return (\r\n
\r\n 0 ? `${ Config.asistexaURL }image_${ articulo.fotografiaId }_300_300.jpg` : ImageNotFound } />\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 mapStateToProps = state => {\r\n return {\r\n descuentos : state.descuentos,\r\n cart : state.cart,\r\n currentClient : state.currentClient\r\n }\r\n}\r\nconst mapDispatchToProps = { \r\n addToCart\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProductList);\r\n\r\n","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst Pagination = ({ onPageChanged, baseUrl, currentPage, totalRows, pageSize })=>{\r\n\r\n let lastRowOfPage = currentPage * pageSize\r\n const firstRowOfPage = lastRowOfPage - pageSize + 1\r\n if(lastRowOfPage > totalRows)\r\n lastRowOfPage = totalRows;\r\n const previousPage = currentPage - 1;\r\n const nextPage = currentPage + 1;\r\n let lastPage = totalRows / pageSize;\r\n lastPage = lastPage - parseInt(lastPage) > 0 ?\r\n parseInt(lastPage) + 1 :\r\n parseInt(lastPage);\r\n\r\n\r\n const showPreviousButton = previousPage >= 1;\r\n const showNextButton = nextPage <= lastPage;\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default Pagination;","import React, { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport { updateDiscounts } from '../../actions'\r\n\r\nimport CategoriesMenu from './components/CategoriesMenu'\r\nimport BrandsMenu from './components/BrandsMenu'\r\nimport ProductList from './components/ProductList'\r\nimport Pagination from './components/Pagination'\r\nimport Config from '../../Config'\r\nimport SeoCompoment from '../../components/seo/SeoComponent'\r\n\r\nconst Products = (props) => {\r\n\r\n\r\n const queryStringParams = new URLSearchParams(props.location.search);\r\n const { categoriaId, subCategoriaId, marcaId } = props.match.params;\r\n const query = queryStringParams.has(\"q\") ?\r\n `&query=${encodeURIComponent(queryStringParams.get(\"q\"))}` : \"\";\r\n const currentPage = queryStringParams.has(\"page\") ?\r\n Number(queryStringParams.get(\"page\")) : 1;\r\n\r\n let queryString = queryStringParams.has(\"q\") ?\r\n `?q=${queryStringParams.get(\"q\")}&` : \"?\"\r\n\r\n const baseUrl = props.location.pathname + queryString\r\n\r\n const [state, setState] = useState({\r\n articulos: [],\r\n categorias: [],\r\n marcas: [],\r\n currentPage: currentPage,\r\n totalRows: 0,\r\n loading: true,\r\n title : \"Productos\"\r\n })\r\n\r\n /*const onPageChanged = (newPage) => {\r\n setState({\r\n ...state,\r\n currentPage: newPage\r\n })\r\n }*/\r\n\r\n useEffect(() => {\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n\r\n setState({\r\n loading: true\r\n })\r\n\r\n console.log(\"fetching data\")\r\n const fromRow = (currentPage - 1) * Config.pageSize;\r\n let url = `${Config.apiURL}api/articulo/search?pageSize=${Config.pageSize}${query}&fromRow=${fromRow}`\r\n if (categoriaId)\r\n url = `${url}&familia=${categoriaId}`\r\n \r\n if (subCategoriaId)\r\n url = `${url}&tipo=${subCategoriaId}`\r\n\r\n if (marcaId)\r\n url = `${url}&marca=${marcaId}`\r\n\r\n const headers = {}\r\n if(props.currentClient)\r\n headers.clienteid = props.currentClient.clienteId;\r\n \r\n fetch(url, {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(response => response.json())\r\n .then(jsonData => {\r\n let articulos = []\r\n let from = 0;\r\n const length = jsonData.articulos.length\r\n while (from < length) {\r\n const to = from + 3 <= length ? from + 3 : length\r\n articulos.push(jsonData.articulos.slice(from, to))\r\n from = to\r\n }\r\n\r\n props.updateDiscounts(jsonData.descuentos);\r\n setState({\r\n articulos: articulos,\r\n categorias: jsonData.familias,\r\n marcas: jsonData.marcas,\r\n totalRows: jsonData.totalRows,\r\n loading: false,\r\n title: jsonData.tituloBusqueda\r\n })\r\n })\r\n .catch(err => {\r\n console.log(err)\r\n })\r\n }, [categoriaId, subCategoriaId, marcaId, query, currentPage, props.currentClient])\r\n\r\n if (state.loading) {\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Cargando...

\r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n\r\n return (\r\n <>\r\n\r\n \r\n
\r\n
\r\n
\r\n

{ state.title }

\r\n
\r\n
\r\n
    \r\n
  • \r\n Inicio\r\n
  • \r\n
  •  
  • \r\n
  • Productos
  • \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 Showing: 1 - 12 items\r\n
\r\n
\r\n \r\n
*/}\r\n\r\n \r\n { //currentPage, totalRows, pageSize, currentQueryString\r\n state.totalRows > Config.pageSize &&\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 mapStateToProps = state => {\r\n return {\r\n currentClient : state.currentClient\r\n }\r\n}\r\nconst mapDispatchToProps = { \r\n updateDiscounts\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Products);\r\n\r\n","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport Config from '../../Config'\r\n\r\nconst About = () => {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

Sol Adventures

\r\n
\r\n
\r\n
    \r\n
  • Inicio\r\n
  • \r\n
  •  
  • \r\n
  • Acerca de Sol Adventures
  • \r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n Sol Adventures es una tienda de demostración para el sistema Asistexa.\r\n Sol Adventures no existe como empresa, pero puede ser utilizada para probar\r\n la funcionalidad de tienda electrónica de Asistexa.\r\n

\r\n

\r\n Asistexa es una solución completa para la administración de inventarios y ventas,\r\n incluyendo manejo de almacenes, inventarios, ventas en tiendas físicas y ventas\r\n en-linea. Asistexa tiene todas las funciones necesarias para gestionar una tienda,\r\n incluyendo manejo de clientes, créditos, descuentos, cupones o gift-cards y\r\n herramientas de inteligencia de negocio que le permiten optimizar sus ventas.\r\n

\r\n

\r\n Más información en http://www.asistexa.com\r\n

\r\n
\r\n \r\n )\r\n}\r\nexport default About","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { OverlayTrigger, Tooltip } from 'react-bootstrap';\r\n\r\nconst CartItem = (\r\n { \r\n onRemoveItem,\r\n onChangeQuantity,\r\n nombreArticulo,\r\n subTotalForDisplay,\r\n precioEnUsoForDislay,\r\n precioForDislay,\r\n precio,\r\n precioEnUso,\r\n articuloId,\r\n cantidad,\r\n cantidadDisponible,\r\n imagenUrl,\r\n friendlyNameUrl\r\n }) => {\r\n\r\n const removeItem = (e) =>{\r\n e.preventDefault();\r\n onRemoveItem({\r\n articuloId\r\n });\r\n }\r\n\r\n const updateQuantity = (e) =>{\r\n onChangeQuantity({\r\n articuloId,\r\n cantidad : parseInt(e.target.value)\r\n });\r\n }\r\n\r\n const cantidades = [];\r\n for(let i = 1; i <= cantidadDisponible; i++)\r\n cantidades.push(i)\r\n\r\n let oldPrice = \"\";\r\n if(precioEnUso < precio)\r\n oldPrice = Precio antes: Bs. { precioForDislay } \r\n \r\n return (\r\n \r\n \r\n
\r\n \r\n {\r\n \r\n
\r\n

\r\n \r\n { nombreArticulo }\r\n \r\n

\r\n { oldPrice }\r\n Precio: Bs. { precioEnUsoForDislay }\r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n \r\n Bs. { subTotalForDisplay }\r\n \r\n \r\n Quitar del Carrito\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\nexport default CartItem;\r\n","import React, { useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport { removeFromCart, clearCart, updateCart, updateDiscounts } from '../../actions'\r\nimport { formatNumber, strTofriendlyUrl } from '../../utils'\r\n\r\nimport SeoCompoment from '../../components/seo/SeoComponent'\r\nimport Config from '../../Config'\r\nimport CartItem from './components/CartItem'\r\n\r\nconst Cart = (props) => {\r\n\r\n useEffect(() => {\r\n const url = `${Config.apiURL}api/articulo/0`\r\n fetch(url)\r\n .then(res => res.json())\r\n .then((jsonData) => {\r\n props.updateDiscounts(jsonData.descuentos)\r\n })\r\n })\r\n\r\n let total = 0;\r\n const cartItems = [] \r\n for (const id in props.cart) {\r\n const articulo = props.cart[id];\r\n if(!articulo.precioEnUso)\r\n articulo.precioEnUso = articulo.precio;\r\n cartItems.push(articulo);\r\n total += articulo.precioEnUso * articulo.cantidad\r\n }\r\n\r\n const clearCart = (e) =>{\r\n e.preventDefault();\r\n props.clearCart();\r\n } \r\n\r\n const title =
\r\n
\r\n
\r\n

Carrito de Compras

\r\n
\r\n
\r\n
    \r\n
  • Inicio\r\n
  • \r\n
  •  
  • \r\n
  • Carrito de Compras
  • \r\n
\r\n
\r\n
\r\n
\r\n\r\n if (cartItems.length == 0){\r\n\r\n return (\r\n <>\r\n { title }\r\n\r\n \r\n
\r\n\r\n \r\n

\r\n
\r\n Actualmente su carrito de compras está vacio. Puede ir al \r\n listado de productos y seleccionar los productos que desee agregar \r\n a su pedido\r\n
\r\n \r\n Ir al Listado de Prouctos\r\n \r\n\r\n\r\n
\r\n \r\n\r\n )\r\n\r\n }\r\n\r\n return (\r\n <>\r\n \r\n { title }\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 cartItems.map((articulo) => {\r\n return (\r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
Nombre del ProductoCantidadSubtotal\r\n \r\n Vaciar Carrito\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n Total: \r\n \r\n \r\n Bs. { formatNumber(total) }\r\n \r\n
\r\n
\r\n\r\n
\r\n
\r\n \r\n  Volver a la Tienda\r\n \r\n
\r\n
\r\n Realizar Pedido\r\n
\r\n
\r\n\r\n
\r\n\r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n cart : state.cart,\r\n cartChangesCounter: state.cartChangesCounter\r\n }\r\n}\r\nconst mapDispatchToProps = {\r\n removeFromCart,\r\n clearCart,\r\n updateCart,\r\n updateDiscounts\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Cart);\r\n","import React, { useEffect, useState } from 'react'\r\nimport Modal from 'react-bootstrap/Modal';\r\n\r\nimport { connect } from 'react-redux'\r\nimport { addToCart, updateDiscounts } from '../../actions'\r\nimport { Link } from 'react-router-dom'\r\nimport Config from '../../Config'\r\nimport { formatNumber, strTofriendlyUrl, chooseDiscount, getDiscountsForArticle } from '../../utils'\r\nimport SeoComponent from '../../components/seo/SeoComponent'\r\n\r\nimport ImageNotFound from '../../img/image_not_found.png'\r\n\r\nconst SingleProduct = (props) => {\r\n\r\n const [stateObject, setStateObject] = useState({\r\n articulo: null,\r\n loading: true,\r\n modalIsShown : false,\r\n discountModalIsShown : false,\r\n addButtonEnabled : true,\r\n cantidadSeleccionada : 1,\r\n porcentajeDescuento : 0,\r\n selectedDiscount : null,\r\n descuentos : []\r\n })\r\n const { productoId } = props.match.params;\r\n\r\n useEffect(() => {\r\n window.scrollTo({ top: 0, behavior: 'smooth' });\r\n const url = `${Config.apiURL}api/articulo/${productoId}`\r\n\r\n const fetchData = async ()=>{\r\n \r\n try {\r\n\r\n const headers = {}\r\n if(props.currentClient)\r\n headers.clienteid = props.currentClient.clienteId; \r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: headers\r\n });\r\n const jsonData = await response.json();\r\n const articulo = jsonData.articulo;\r\n let addToCartEnabled = false;\r\n let descuentos = [];\r\n let porcentajeDescuento = 0;\r\n let selectedDiscount = null;\r\n if(articulo) {\r\n addToCartEnabled = !props.cart[articulo.articuloId] ||\r\n props.cart[articulo.articuloId].cantidad + \r\n stateObject.cantidadSeleccionada <= articulo.cantidadDisponible\r\n \r\n descuentos = getDiscountsForArticle(jsonData.descuentos,\r\n articulo.articuloId, articulo.familiaId);\r\n \r\n selectedDiscount = chooseDiscount(descuentos, \r\n 1, props.precio);\r\n\r\n porcentajeDescuento = selectedDiscount ? selectedDiscount.discount : 0;\r\n }\r\n props.updateDiscounts(jsonData.descuentos);\r\n setStateObject({\r\n ...stateObject,\r\n articulo: articulo,\r\n descuentos: descuentos,\r\n loading : false,\r\n porcentajeDescuento : porcentajeDescuento,\r\n selectedDiscount: selectedDiscount,\r\n addButtonEnabled : addToCartEnabled\r\n })\r\n } catch (error) {\r\n console.log(error);\r\n setStateObject({\r\n articulo: null,\r\n loading : false\r\n })\r\n }\r\n\r\n }\r\n fetchData();\r\n\r\n }, [productoId, props.cartChangesCounter, props.currentClient])\r\n\r\n if (stateObject.loading) {\r\n return
\r\n
\r\n
\r\n Cargando...\r\n
\r\n
\r\n
\r\n }\r\n if (!stateObject.articulo) {\r\n return
\r\n
\r\n
\r\n Error al cargar el detalle del producto\r\n
\r\n
\r\n
\r\n }\r\n\r\n const { \r\n fotografiaId, \r\n descripcion, \r\n familiaNombre, \r\n familiaId,\r\n precioPorMenor,\r\n descripcionDetalle,\r\n articuloId,\r\n cantidadDisponible,\r\n descripcionDetalleHTML\r\n } = stateObject.articulo;\r\n\r\n const imageUrl = fotografiaId > 0 ? `${ Config.asistexaURL }image_${fotografiaId}_525_525.jpg` : ImageNotFound;\r\n const descripcionCorta = descripcionDetalle.length > 150 ? descripcionDetalle.substring(0, 150) + \"...\" : descripcionDetalle;\r\n const relativeUrl = `producto/${articuloId}/${strTofriendlyUrl(descripcion)}`\r\n const descriptionForUrl = encodeURI(`Quisiera pedir este producto \"${descripcion}\"`)\r\n\r\n const whatsappPhoneNumber = props.configuracionSeo &&\r\n props.configuracionSeo.whatsappAtencionCliente && props.configuracionSeo.whatsappAtencionCliente != \"\" ?\r\n props.configuracionSeo.whatsappAtencionCliente : Config.whatsappForOrder\r\n\r\n const whatsappMessage = `https://api.whatsapp.com/send?phone=${ whatsappPhoneNumber }&text=${ descriptionForUrl }%20${ Config.currentURL }${ relativeUrl}`\r\n\r\n const handleClose = (e) =>{\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setStateObject({\r\n ...stateObject,\r\n modalIsShown : false\r\n })\r\n }\r\n const cantidades = [];\r\n for(let i = 1; i <= cantidadDisponible; i++)\r\n cantidades.push(i)\r\n \r\n\r\n const addToStateObjectCart = (e) =>{\r\n e.preventDefault()\r\n console.log(\"Adding: \" + stateObject.cantidadSeleccionada)\r\n const cart = props.cart;\r\n if(!cart[articuloId] || \r\n cart[articuloId].cantidad + stateObject.cantidadSeleccionada <= cantidadDisponible){\r\n \r\n props.addToCart({\r\n articuloId : articuloId,\r\n familiaId : stateObject.articulo.familiaId,\r\n imagenUrl: imageUrl,\r\n precio : precioPorMenor,\r\n cantidad: stateObject.cantidadSeleccionada,\r\n nombreFamilia : familiaNombre, \r\n nombreArticulo : descripcion,\r\n cantidadDisponible : cantidadDisponible\r\n })\r\n \r\n setStateObject({\r\n ...stateObject,\r\n modalIsShown : true,\r\n addButtonEnabled : true\r\n })\r\n }else{\r\n \r\n setStateObject({\r\n ...stateObject,\r\n addButtonEnabled : false\r\n })\r\n }\r\n \r\n\r\n }\r\n\r\n const handleDiscountModalClose = (e) =>{\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setStateObject({\r\n ...stateObject,\r\n discountModalIsShown : false\r\n })\r\n }\r\n \r\n const handleShowDiscounts = (e) =>{\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setStateObject({\r\n ...stateObject,\r\n discountModalIsShown : true\r\n })\r\n }\r\n \r\n const getDescripcionDetalle = () => {\r\n return {__html: descripcionDetalleHTML }\r\n }\r\n\r\n const handleQuantityChange = (e) =>{\r\n const nuevoValor = parseInt(e.target.value)\r\n \r\n const selectedDiscount = chooseDiscount(stateObject.descuentos, \r\n nuevoValor, props.precio);\r\n \r\n const porcentajeDescuento = selectedDiscount ? selectedDiscount.discount : 0;\r\n\r\n const cart = props.cart;\r\n if(cart[articuloId] && \r\n cart[articuloId].cantidad + nuevoValor > cantidadDisponible){\r\n\r\n setStateObject({\r\n ...stateObject,\r\n cantidadSeleccionada : nuevoValor,\r\n addButtonEnabled : false,\r\n selectedDiscount : selectedDiscount,\r\n porcentajeDescuento : porcentajeDescuento\r\n })\r\n \r\n \r\n }else{\r\n setStateObject({\r\n ...stateObject,\r\n cantidadSeleccionada : nuevoValor,\r\n addButtonEnabled : true,\r\n selectedDiscount: selectedDiscount,\r\n porcentajeDescuento : porcentajeDescuento\r\n })\r\n }\r\n \r\n \r\n }\r\n \r\n const precio = stateObject.articulo.precioPorMenor;\r\n const nuevoPrecio = precio * (1 - stateObject.porcentajeDescuento);\r\n\r\n let priceInUse = precio;\r\n\r\n let oldPrice = \"\";\r\n let currentPrice = `Bs. ${ formatNumber(precio) }`\r\n if(nuevoPrecio < precio){\r\n oldPrice = { currentPrice }\r\n currentPrice = ` Bs. ${ formatNumber(nuevoPrecio) }`\r\n priceInUse = nuevoPrecio;\r\n }//\r\n\r\n\r\n return (\r\n <>\r\n \r\n\r\n \r\n \r\n
\r\n   \r\n Su producto ha sido agregado al carrito\r\n
\r\n\r\n
\r\n \r\n \r\n Continuar comprando\r\n \r\n \r\n Ir al Carrito\r\n \r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n

{descripcion}

\r\n
\r\n
\r\n
    \r\n
  • \r\n Home\r\n
  • \r\n
  •  
  • \r\n
  • \r\n Productos\r\n
  • \r\n
  •  
  • \r\n
  • { descripcion }
  • \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {descripcion}\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 { familiaNombre }\r\n
\r\n

{descripcion}

\r\n \r\n { oldPrice }{ currentPrice }\r\n \r\n

\r\n { descripcionCorta }\r\n

\r\n {\r\n stateObject.descuentos && stateObject.descuentos.length > 0 &&\r\n <>\r\n
\r\n \r\n
\r\n\r\n \r\n \r\n Hemos encontrado estas ofertas para este producto\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {\r\n stateObject.descuentos.map((item) => {\r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
CantidadOferta
\r\n Entre { item.cantidadMin }\r\n { item.cantidadMax < 0 ? ' o más' : ` y ${ item.cantidadMax }` }\r\n \r\n {\r\n item.descuentoXPorcentaje ? \r\n `${ formatNumber( item.porcentajeDescuento) }% de descuento` : \r\n `${ formatNumber( item.precioDescuento) }Bs de descuento`\r\n\r\n }\r\n
\r\n
\r\n
\r\n \r\n }\r\n
\r\n {/*\r\n selectedDiscount ? \r\n
\r\n

\r\n   Oferta:\r\n

\r\n Lleva { selectedDiscount.info.cantidadMin } { \" \" }\r\n { selectedDiscount.info.cantidadMax > selectedDiscount.info.cantidadMin ? \"o más unidades \" : \"\" }\r\n y obtén { formatNumber(selectedDiscount.info.porcentajeDescuento) }% de descuento.\r\n {\r\n selectedDiscount.info.cantidadMin != selectedDiscount.info.cantidadMax ? \r\n
\r\n { `(Cantidad máxima por orden ${ selectedDiscount.info.cantidadMax } unidad${ selectedDiscount.info.cantidadMax > 0 ? \"es\" : \"\" } para optar por el descuento) ` }\r\n
\r\n : \"\" \r\n }\r\n
\r\n : \"\"*/\r\n }\r\n\r\n {\r\n cantidadDisponible > 0 ?\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 No puede agregar mas items al carrito: \r\n La cantidad seleccionada mas la que ya ha agregado al carrito de compras excede a la cantidad disponible.\r\n
\r\n
\r\n
)\r\n :\r\n ( \r\n
\r\n
\r\n
\r\n   \r\n El producto no está disponible en este momento \r\n
\r\n Puede hacer su consulta vía Whatsapp acerca de la próxima disponibilidad \r\n del producto.\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

Detalle del Producto

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\n\r\nconst mapStateObjectToProps = stateObject => {\r\n return {\r\n descuentos : stateObject.descuentos,\r\n cart : stateObject.cart,\r\n currentClient : stateObject.currentClient,\r\n cartChangesCounter: stateObject.cartChangesCounter,\r\n configuracionSeo: stateObject.configuracionSeo\r\n }\r\n}\r\nconst mapDispatchToProps = { \r\n addToCart,\r\n updateDiscounts\r\n};\r\n\r\nexport default connect(mapStateObjectToProps, mapDispatchToProps)(SingleProduct);","import React from 'react'\r\n\r\nconst CheckoutSteps = ({ currentSection, onSectionChanged }) => {\r\n\r\n const handleSectionChange = (e) =>{\r\n if(e.preventDefault)\r\n e.preventDefault();\r\n if(e.stopPropagation)\r\n e.stopPropagation();\r\n const section = parseInt(e.target.dataset.section)\r\n \r\n if(section < currentSection){\r\n console.log(\"Changing section to: \" + section)\r\n onSectionChanged(section)\r\n\r\n }\r\n\r\n }\r\n\r\n return (\r\n \r\n )\r\n}\r\n\r\nexport default CheckoutSteps;\r\n","import React, { useState } from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nclass GeneralInformation extends React.Component { \r\n\r\n constructor(props){\r\n super(props);\r\n\r\n this.state = {\r\n data : {\r\n nombreCompleto: props.nombreCompleto,\r\n telefono: props.telefono,\r\n nit: props.nit,\r\n razonSocial: props.razonSocial\r\n },\r\n wasValidated : false,\r\n invalidMessagesForState : {\r\n nombreCompleto: \"\",\r\n telefono: \"\",\r\n nit: \"\",\r\n razonSocial: \"\"\r\n }\r\n }\r\n\r\n this.handleChangeValue = this.handleChangeValue.bind(this);\r\n this.handleNextButton = this.handleNextButton.bind(this);\r\n }\r\n\r\n\r\n handleChangeValue(e) {\r\n this.state.data[e.target.name] = e.target.value;\r\n this.setState({\r\n ...this.state\r\n });\r\n }\r\n\r\n handleNextButton(e) {\r\n e.preventDefault();\r\n let invalid = false;\r\n this.state.invalidMessagesForState.nombreCompleto = \"\";\r\n if(this.state.data.nombreCompleto.trim() == \"\"){\r\n this.state.invalidMessagesForState.nombreCompleto = \"Debe ingresar su nombre completo\";\r\n invalid = true;\r\n }\r\n\r\n this.state.invalidMessagesForState.telefono = \"\";\r\n if(this.state.data.telefono.trim() == \"\"){\r\n this.state.invalidMessagesForState.telefono = \"Debe ingresar su número de teléfono\";\r\n invalid = true;\r\n }\r\n\r\n this.state.invalidMessagesForState.nit = \"\";\r\n if(this.state.data.nit.trim() != \"\" && !/^\\d+$/.test(this.state.data.nit.trim())){\r\n this.state.invalidMessagesForState.nit = \"Debe ingresar solo números para el NIT\";\r\n invalid = true;\r\n }\r\n this.setState(this.state)\r\n if(!invalid)\r\n this.props.onNextSection(this.state.data)\r\n }\r\n\r\n\r\n render() {\r\n return (\r\n <>\r\n

Información del Cliente

\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
{ this.state.invalidMessagesForState.nombreCompleto }
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
{ this.state.invalidMessagesForState.telefono }
\r\n
\r\n
\r\n
\r\n\r\n

Datos de Facturación

\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n \r\n
{ this.state.invalidMessagesForState.razonSocial }
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
{ this.state.invalidMessagesForState.nit }
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n  \r\n Volver al Carrito de Compras\r\n \r\n \r\n \r\n Continuar \r\n \r\n \r\n
\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default GeneralInformation\r\n","import React, { useState, useEffect } from 'react'\r\nimport { GoogleMap, LoadScript, Marker, Autocomplete } from '@react-google-maps/api';\r\nimport Config from '../../../Config';\r\n\r\nconst containerStyle = {\r\n width: '100%',\r\n height: '400px'\r\n };\r\n \r\n\r\nconst Shipping = (props) => {\r\n\r\n const [position, setPosition ] = useState(props.position);\r\n const [dragging, setDragging ] = useState(false)\r\n const [stateObject, setStateObject] = useState({\r\n wasValidated : false,\r\n city: props.city,\r\n cityName: props.cityName,\r\n address : props.address,\r\n addressValidationMessage : \"\",\r\n cityValidationMessage : \"\",\r\n costoEnvioValidationMessage: \"\",\r\n requestGeolocation : props.requestGeolocation\r\n });\r\n const [ costoEnvio , setCostoEnvio ] = useState(props.costoEnvio);\r\n\r\n const [marker, setMarker] = useState(null)\r\n\r\n const onLoadMarker = React.useCallback(function callback(marker) {\r\n setMarker(marker)\r\n getCostoEntrega(marker.position);\r\n \r\n }, [])\r\n\r\n const onUnmountMarker = React.useCallback(function callback(marker) {\r\n setMarker(null)\r\n }, [])\r\n\r\n useEffect( () => {\r\n if(!stateObject.requestGeolocation)\r\n return;\r\n navigator && navigator.geolocation.getCurrentPosition(position => {\r\n const { latitude, longitude } = position.coords;\r\n\r\n const currentPosition = {\r\n lat: latitude,\r\n lng: longitude\r\n };\r\n setPosition(currentPosition);\r\n });\r\n },[]);\r\n\r\n const handleLocationChange = () => {\r\n if(marker)\r\n setPosition({\r\n lat: marker.position.lat(),\r\n lng: marker.position.lng()\r\n })\r\n }\r\n\r\n const handleDragEnd = () => {\r\n setDragging(false);\r\n getCostoEntrega();\r\n }\r\n\r\n const handleMarkerPositionChanged = () => { \r\n if(!marker || !marker.position || dragging)\r\n return; \r\n getCostoEntrega();\r\n }\r\n\r\n const getCostoEntrega = (position) =>{\r\n if(!position){\r\n position = marker.position;\r\n }\r\n const latitud = position.lat()\r\n const longitud = position.lng()\r\n const url = `${Config.apiURL}api/pedido/costo-entrega?latitud=${latitud}&longitud=${longitud}`\r\n const headers = {}\r\n \r\n const token = localStorage.getItem(\"token\");\r\n if(token)\r\n headers.Authorization = `Bearer ${ token }`\r\n\r\n fetch(url, {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(response => response.json())\r\n .then((jsonData) => {\r\n console.log(\"-------\")\r\n console.log(jsonData)\r\n const obj = {\r\n estado : jsonData.data.posible ? \"Posible\" : \"NoPosible\",\r\n costo : jsonData.data.costo\r\n }\r\n console.log(\"-------\")\r\n console.log(obj);\r\n props.changeCostoEnvio(obj)\r\n setCostoEnvio(obj)\r\n })\r\n .catch(err => console.log(err))\r\n\r\n }\r\n\r\n const handleMapClick = (e) => {\r\n console.log(e)\r\n marker.setPosition( e.latLng );\r\n }\r\n\r\n const changeAddress = (e) => {\r\n setStateObject({\r\n ...stateObject,\r\n address : e.target.value\r\n })\r\n }\r\n\r\n const changeCity = (e) => {\r\n \r\n setStateObject({\r\n ...stateObject,\r\n city: e.target.value,\r\n cityName : e.target.item(e.target.selectedIndex).text\r\n })\r\n }\r\n\r\n const handleNextButton = (e) => {\r\n e.preventDefault();\r\n let isInvalid = false;\r\n \r\n const newState = {}\r\n stateObject.costoEnvioValidationMessage = \"\";\r\n if(costoEnvio.estado == \"NoCalculado\"){\r\n stateObject.costoEnvioValidationMessage = \"Debe seleccionar una posicion en el mapa para calcular el costo de entrega\";\r\n isInvalid = true;\r\n }\r\n if(costoEnvio.estado == \"NoPosible\"){\r\n stateObject.costoEnvioValidationMessage = \"No es posible entregar su pedido en la ubicación seleccionada\";\r\n isInvalid = true;\r\n }\r\n /*stateObject.cityValidationMessage = \"\";\r\n if(stateObject.city.trim() == \"\"){\r\n stateObject.cityValidationMessage = \"Debe seleccionar una ciudad\";\r\n isInvalid = true;\r\n }*/\r\n stateObject.addressValidationMessage = \"\";\r\n if(stateObject.address.trim() == \"\"){\r\n stateObject.addressValidationMessage = \"Es necesario que ingrese detalladamente su dirección de envio\";\r\n isInvalid = true;\r\n }\r\n setStateObject({\r\n ...stateObject,\r\n wasValidated: true\r\n })\r\n //setDragging(false);\r\n if(!isInvalid)\r\n props.onNextSection({\r\n address: stateObject.address,\r\n city: stateObject.city,\r\n cityName: stateObject.cityName,\r\n latitud : marker.position.lat(),\r\n longitud: marker.position.lng(),\r\n requestGeolocation : false\r\n });\r\n }\r\n\r\n const handleBackButton = (e) => {\r\n e.preventDefault();\r\n props.onBackButton();\r\n }\r\n\r\n const [ autocomplete, setAutocomplete ] = useState(null);\r\n\r\n const onAutocompleteLoad = (autocomplete) => {\r\n setAutocomplete(autocomplete)\r\n }\r\n\r\n const onPlaceChanged = () => {\r\n if (autocomplete !== null) {\r\n const place = autocomplete.getPlace();\r\n if(place){\r\n setPosition(place.geometry.location);\r\n setStateObject({\r\n ...stateObject,\r\n address: place.formatted_address\r\n })\r\n }\r\n } else {\r\n console.log('Autocomplete is not loaded yet!')\r\n }\r\n }\r\n\r\n return (\r\n <>\r\n

Datos de Entrega

\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 { setDragging(true) } }\r\n onDragEnd={ handleDragEnd }\r\n onPositionChanged={ handleMarkerPositionChanged }\r\n position={ position } draggable />\r\n \r\n \r\n\r\n
\r\n {\r\n stateObject.costoEnvioValidationMessage && stateObject.costoEnvioValidationMessage != '' ?\r\n
{ stateObject.costoEnvioValidationMessage }
\r\n : \"\"\r\n }\r\n \r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
{ stateObject.cityValidationMessage }
\r\n
\r\n
\r\n
\r\n
\r\n \r\n \r\n
{ stateObject.addressValidationMessage }
\r\n
\r\n
\r\n
\r\n \r\n \r\n \r\n )\r\n}\r\nexport default React.memo(Shipping)","import React, { useState } from 'react'\r\n\r\nconst Payment = ({ onBackButton, onNextSection, selectedPaymentType, onChangePaymentType }) => {\r\n\r\n const handleBackButton = (e) =>{\r\n e.preventDefault();\r\n onBackButton();\r\n }\r\n const handleNextButton = (e) =>{\r\n e.preventDefault();\r\n onNextSection();\r\n }\r\n\r\n return (\r\n <>\r\n

Seleccione su Medio de Pago

\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 onChangePaymentType(\"ContraEntrega\") }/>\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n onChangePaymentType(\"PagoQR\") } />\r\n \r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n}\r\nexport default Payment","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport { formatNumber } from '../../../utils'\r\n\r\nfunction ReviewOrder({ makingOrder, cart, generalInformation, paymentType, shipping, onBackButton, onCompleteOrder }) {\r\n\r\n const cartItems = [] \r\n for (const id in cart) {\r\n const articulo = cart[id];\r\n cartItems.push(articulo);\r\n }\r\n\r\n const handleBackButton = (e) => {\r\n e.preventDefault();\r\n onBackButton();\r\n }\r\n \r\n const handleCompleteOrder = (e) => {\r\n e.preventDefault();\r\n onCompleteOrder();\r\n }\r\n\r\n return (\r\n <>\r\n

Revise su pedido

\r\n
\r\n\r\n
\r\n
\r\n
Datos del Cliente:
\r\n
    \r\n
  • Nombre:  { generalInformation.nombreCompleto }
  • \r\n
  • Teléfono:  { generalInformation.telefono}
  • \r\n
\r\n
Datos del Facturación:
\r\n
    \r\n
  • Nombre:  { generalInformation.razonSocial.trim() == \"\" ? \"SIN NOMBRE\" : generalInformation.razonSocial }
  • \r\n
  • Teléfono:  { generalInformation.nit.trim() == \"\" ? \"0\" : generalInformation.nit }
  • \r\n
\r\n
\r\n
\r\n
Datos de Envío:
\r\n
    \r\n
  • Ciudad:  { shipping.cityName }
  • \r\n
  • Address:  { shipping.address }
  • \r\n
\r\n
Método de Pago:
\r\n
    \r\n
  • \r\n { \r\n paymentType == \"PagoQR\" ? \r\n \"Transferencia Simple QR\" :\r\n \"Pago contra Entrega\"\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 cartItems.map((articulo) => {\r\n let oldPrice = \"\";\r\n if(articulo.precioEnUso < articulo.precio)\r\n oldPrice = Precio antes: Bs. { formatNumber(articulo.precio) } \r\n \r\n return (\r\n \r\n \r\n \r\n \r\n )\r\n })\r\n }\r\n \r\n
Nombre del ProductoSubtotal
\r\n
\r\n \r\n {\r\n \r\n
\r\n

\r\n \r\n { articulo.nombreArticulo }\r\n \r\n

\r\n { oldPrice }\r\n Precio: { formatNumber(articulo.precioEnUso) }\r\n Cantidad: { articulo.cantidad }\r\n
\r\n
\r\n
Bs. { formatNumber(articulo.precioEnUso * articulo.cantidad) }
\r\n
\r\n\r\n \r\n \r\n )\r\n}\r\n\r\nexport default ReviewOrder\r\n","import React, { useState } from 'react'\r\nimport { Link, withRouter } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport { clearCart } from '../../actions'\r\n\r\nimport CheckoutSteps from './components/CheckoutSteps'\r\nimport GeneralInformation from './components/GeneralInformation'\r\nimport Shipping from './components/Shipping'\r\nimport Payment from './components/Payment'\r\nimport ReviewOrder from './components/ReviewOrder'\r\nimport SeoCompoment from '../../components/seo/SeoComponent'\r\nimport Config from '../../Config'\r\nimport { formatNumber } from '../../utils'\r\n\r\nconst Checkout = ({ cart, clearCart, history, currentClient, configuracionSeo }) => {\r\n\r\n const [ makingOrder, setMakingOrder ] = useState(false);\r\n const [ currentSection, setCurrentSection ] = useState(1)\r\n const [ generalInformation, setGeneralInformation ] = useState({\r\n nombreCompleto : currentClient.fullName,\r\n telefono : currentClient.telefono,\r\n razonSocial : \"\",\r\n nit : \"\"\r\n })\r\n const [ costoEnvio , setCostoEnvio ] = useState({\r\n estado : \"NoCalculado\",\r\n costo: 0\r\n });\r\n const [ paymentType, setPaymentType ] = useState(\"ContraEntrega\");\r\n const [ shipping, setShipping ] = useState({\r\n address: \"\",\r\n city: \"\",\r\n cityName: \"\",\r\n latitud: configuracionSeo.latitud == 0 ? Config.gpsDefaultPosition.lat : configuracionSeo.latitud,\r\n longitud: configuracionSeo.longitud == 0 ? Config.gpsDefaultPosition.lng : configuracionSeo.longitud,\r\n requestGeolocation : true\r\n });\r\n\r\n let subtotal = 0;\r\n for(let i in cart){\r\n subtotal += cart[i].precioEnUso * cart[i].cantidad;\r\n }\r\n\r\n const handleSectionChanged = (selectedSection) => {\r\n setCurrentSection(selectedSection)\r\n }\r\n\r\n const goToSecondSection = (generalInformation) => {\r\n setGeneralInformation(generalInformation);\r\n setCurrentSection(2);\r\n }\r\n\r\n const goToThirdSection = (shipping) =>{\r\n setShipping(shipping);\r\n setCurrentSection(3)\r\n }\r\n\r\n const changeCostoEntrega = (objCostoEnvio) => {\r\n setCostoEnvio(objCostoEnvio)\r\n }\r\n\r\n const handlePaymentSelection = () =>{\r\n setCurrentSection(4)\r\n\r\n }\r\n\r\n const onChangePaymentType = (paymentType) => {\r\n setPaymentType(paymentType)\r\n }\r\n\r\n const handleFinishOrder = () =>{\r\n\r\n if(makingOrder)\r\n return;\r\n setMakingOrder(true)\r\n const data = {\r\n nombreCliente : generalInformation.nombreCompleto,\r\n telefono: generalInformation.telefono,\r\n razonSocial : generalInformation.razonSocial,\r\n nit:generalInformation.nit,\r\n //ciudadId : isNaN(shipping.city) ? 1 : parseInt(shipping.city),\r\n nombreCiudad : shipping.cityName,\r\n direccion: shipping.address,\r\n latitud: shipping.latitud,\r\n longitud: shipping.longitud,\r\n costoEntrega: costoEnvio.costo,\r\n clienteId : currentClient.clienteId,\r\n tipoPago : paymentType\r\n }\r\n\r\n const cartItems = [] \r\n for (const id in cart) {\r\n const articulo = cart[id];\r\n articulo.descuento = (1 - articulo.precioEnUso / articulo.precio) * 100.0; \r\n cartItems.push(articulo);\r\n }\r\n\r\n data.detalle = cartItems\r\n\r\n const headers = {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n }\r\n \r\n const token = localStorage.getItem(\"token\");\r\n if(token)\r\n headers.Authorization = `Bearer ${ token }`\r\n\r\n fetch(`${Config.apiURL}api/pedido`, {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(data)\r\n }).then(response => {\r\n return response.json();\r\n }).then(json => {\r\n if(json && json.success){\r\n clearCart();\r\n if(paymentType == \"PagoQR\"){\r\n history.push(`/pago-qr/${ json.ventaId }`)\r\n }else{\r\n history.push(\"/pedido-finalizado\")\r\n }\r\n \r\n }else{\r\n \r\n setMakingOrder(false);\r\n }\r\n }).catch(err => {\r\n console.log(err);\r\n setMakingOrder(false);\r\n alert(\"No se pudo registrar el pedido. Por favor, intente nuevamente.\")\r\n });\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n
\r\n
\r\n

Realizar Pedido

\r\n
\r\n
\r\n
    \r\n
  • \r\n Inicio\r\n
  • \r\n
  •  
  • \r\n
  • Realizar Pedido
  • \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n\r\n {\r\n currentSection == 1 &&\r\n (\r\n \r\n ) \r\n }\r\n {\r\n currentSection == 2 &&\r\n (\r\n { setCurrentSection(1) } }\r\n onNextSection={ goToThirdSection }\r\n requestGeolocation={ shipping.requestGeolocation } />\r\n ) \r\n }\r\n {\r\n currentSection == 3 &&\r\n (\r\n { setCurrentSection(2) } }\r\n onNextSection={ handlePaymentSelection } />\r\n ) \r\n }\r\n\r\n {\r\n currentSection == 4 &&\r\n (\r\n { setCurrentSection(3) } }\r\n onCompleteOrder={ handleFinishOrder } />\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 mapStateToProps = state => {\r\n return {\r\n cart : state.cart,\r\n currentClient : state.currentClient,\r\n configuracionSeo: state.configuracionSeo\r\n }\r\n}\r\nconst mapDispatchToProps = { \r\n clearCart\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(Checkout));\r\n","import React from 'react'\r\nimport { Link } from 'react-router-dom'\r\nimport SeoCompoment from '../../components/seo/SeoComponent'\r\n\r\nconst PedidoFinalizado = () => {\r\n return (\r\n <>\r\n \r\n\r\n
\r\n
\r\n
\r\n

Pedido Finalizado

\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n   \r\n Su pedido ha sido registrado correctamente. En cualquier momento se comunicarán con usted para coordinar la entrega.\r\n
\r\n Ir a la página de Inicio  \r\n Continuar comprando
\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nexport default PedidoFinalizado\r\n","import React, { useEffect, useState } from 'react'\r\nimport { Link, withRouter } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport SeoCompoment from '../../components/seo/SeoComponent'\r\nimport Modal from 'react-bootstrap/Modal';\r\nimport PhoneInput from 'react-phone-input-2'\r\nimport es from 'react-phone-input-2/lang/es.json'\r\n\r\nimport Config from '../../Config'\r\nimport { setCurrentClient } from '../../actions'\r\n\r\nimport 'react-phone-input-2/lib/plain.css'\r\n\r\nconst Login = ({ firebase, history, setCurrentClient, currentClient }) => {\r\n\r\n const [ phoneNumber, setPhoneNumber ] = useState(\"\");\r\n const [ loading, setLoading ] = useState(false);\r\n const [ phoneNumberValidation, setPhoneNumberValidation ] = useState({\r\n wasValidated : false,\r\n validationMessage : \"\"\r\n });\r\n\r\n const [ requireVerificationCode, setRequireVerificationCode ] = useState(false);\r\n const [ loadingVerification, setLoadingVerification ] = useState(false);\r\n const [ verificationCode, setVerificationCode ] = useState(\"\");\r\n const [ verificationCodeValidation, setVerificationCodeValidation ] = useState({\r\n wasValidated : false,\r\n validationMessage : \"\"\r\n });\r\n\r\n useEffect(() => {\r\n setupRecaptcha();\r\n },[]);\r\n\r\n const performLogin =(e) =>{\r\n e.preventDefault();\r\n if(window.recaptchaVerifier)\r\n sendLogin();\r\n else\r\n setupRecaptcha();\r\n }\r\n\r\n const sendLogin = () =>{\r\n var appVerifier = window.recaptchaVerifier;\r\n\r\n let number = phoneNumber;\r\n\r\n\r\n if(!number || number.trim() == \"\" || number.length < 5){\r\n setPhoneNumberValidation({\r\n wasValidated : true,\r\n validationMessage : \"Debe ingresar su número de celular\"\r\n });\r\n return;\r\n }\r\n setPhoneNumberValidation({\r\n wasValidated : true,\r\n validationMessage : \"\"\r\n });\r\n\r\n if(!number.startsWith(\"+\"))\r\n number = \"+\" + number;\r\n\r\n \r\n setLoading(true);\r\n firebase.auth().signInWithPhoneNumber(number, appVerifier)\r\n .then(function (confirmationResult) {\r\n // SMS sent. Prompt user to type the code from the message, then sign the\r\n // user in with confirmationResult.confirm(code).\r\n window.confirmationResult = confirmationResult;\r\n setLoading(false);\r\n setRequireVerificationCode(true);\r\n /* let code = verificationCode; //window.prompt(\"Ingrese el codigo recibido\");\r\n\r\n window.confirmationResult.confirm(code)\r\n .then((result) =>{\r\n console.log( result.user)\r\n //9let user =\r\n })\r\n .catch((err) =>{\r\n console.log(err)\r\n });*/\r\n }).catch(function (error) {\r\n });\r\n }\r\n\r\n const setupRecaptcha = ()=>{\r\n window.recaptchaVerifier = new firebase.auth.RecaptchaVerifier('recaptcha-verifier', {\r\n 'size': 'invisible',\r\n 'callback': function(response) {\r\n // reCAPTCHA solved, allow signInWithPhoneNumber.\r\n console.log(response)\r\n }\r\n });\r\n }\r\n\r\n const handleClose = (e) =>{\r\n if(e && e.preventDefault)\r\n e.preventDefault()\r\n setLoadingVerification(false);\r\n setRequireVerificationCode(false);\r\n setVerificationCode(\"\");\r\n setVerificationCodeValidation({\r\n wasValidated : false,\r\n validationMessage : \"\"\r\n })\r\n }\r\n\r\n const handleSendVerificationCode = (e) =>{\r\n if(e && e.preventDefault)\r\n e.preventDefault();\r\n\r\n if(verificationCode.trim() == \"\"){\r\n setVerificationCodeValidation({\r\n wasValidated : true,\r\n validationMessage : \"Debe ingresar el código de verificación\"\r\n });\r\n return;\r\n }\r\n setVerificationCodeValidation({\r\n wasValidated : true,\r\n validationMessage : \"\"\r\n });\r\n setLoadingVerification(true)\r\n window.confirmationResult.confirm(verificationCode)\r\n .then((result) =>{\r\n loginClient();\r\n })\r\n .catch((error) =>{\r\n setLoadingVerification(false);\r\n if(error.code && error.code == \"auth/invalid-verification-code\"){\r\n setVerificationCodeValidation({\r\n wasValidated : true,\r\n validationMessage : \"El código de verificación ingresado es invalido. Por favor verifique que el código ingresado es el correcto o intente nuevamente.\"\r\n });\r\n }else{\r\n setVerificationCodeValidation({\r\n wasValidated : true,\r\n validationMessage : \"No se pudo verificar el código ingresado, por favor intente nuevamente.\"\r\n });\r\n }\r\n });\r\n }\r\n\r\n const loginClient = () => {\r\n\r\n let number = phoneNumber;\r\n if(!number.startsWith(\"+\"))\r\n number = \"+\" + number;\r\n\r\n const data = {\r\n \"phoneNumber\" : number\r\n }\r\n\r\n const url = Config.apiURL + 'api/cliente/login'\r\n fetch(url, {\r\n method: 'POST',\r\n headers: {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(data)\r\n }).then(response => {\r\n return response.json();\r\n }).then(json => {\r\n setCurrentClient({\r\n currentClient : json.cliente\r\n });\r\n localStorage.setItem(\"token\", json.token);\r\n setRequireVerificationCode(false);\r\n if(json.isNew || json.cliente.fullName == \".\" ){ \r\n history.push(\"/welcome?isNew=true\")\r\n }\r\n else{\r\n history.push(\"/welcome\")\r\n }\r\n \r\n }).catch(err => {\r\n console.log(err);\r\n \r\n\r\n\r\n });\r\n /*\r\n \r\n \r\n */\r\n }\r\n\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n

Ingrese su código de verificación

\r\n
\r\n \r\n \r\n

\r\n Se ha enviado un código de verificación via SMS al \r\n número telefónico ingresado.\r\n

\r\n\r\n
\r\n
\r\n
\r\n \r\n setVerificationCode(e.target.value) }\r\n placeholder=\"Ingese su código de verificación\"/>\r\n
{ verificationCodeValidation.validationMessage }
\r\n
\r\n
\r\n
\r\n\r\n
\r\n \r\n \r\n Cancelar\r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n

Login

\r\n
\r\n
\r\n
    \r\n
  • Inicio\r\n
  • \r\n
  •  
  • \r\n
  • Mi Cuenta
  • \r\n
  •  
  • \r\n
  • Login
  • \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Ingrese a traves de su número de celular

\r\n \r\n
\r\n {/*
*/}\r\n\r\n setPhoneNumber(phone)}\r\n countryCodeEditable={ false }\r\n />\r\n
{ phoneNumberValidation.validationMessage }
\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 mapStateToProps = state => {\r\n return {\r\n firebase : state.firebase,\r\n currentClient : state.currentClient\r\n }\r\n}\r\nconst mapDispatchToProps = {\r\n setCurrentClient\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(Login));","import React, { useEffect, useState } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link, withRouter } from 'react-router-dom'\r\n\r\nimport { emailIsValid,hasOnlyNumbers } from '../../utils'\r\nimport SeoComponent from '../../components/seo/SeoComponent'\r\nimport Config from '../../Config'\r\nimport { setCurrentClient } from '../../actions'\r\n\r\nconst Welcome = ({ firebase, location, history, setCurrentClient, currentClient }) => {\r\n\r\n const queryStringParams = new URLSearchParams(location.search);\r\n const isNew = queryStringParams.has(\"isNew\") && queryStringParams.get(\"isNew\") == \"true\";\r\n \r\n const [ notMe, setNotMe ] = useState(false);\r\n\r\n const [ clientName, setClientName ] = useState(\"\");\r\n const [ nit, setNit ] = useState(\"\");\r\n const [ email, setEmail ] = useState(\"\");\r\n\r\n const [ clientNameValidation, setClientNameValidation ] = useState({\r\n wasValidated : false,\r\n validationMessage : \"\"\r\n });\r\n const [ emailValidation, setEmailValidation ] = useState({\r\n wasValidated : false,\r\n validationMessage : \"\"\r\n });\r\n const [ nitValidation, setNitValidation ] = useState({\r\n wasValidated : false,\r\n validationMessage : \"\"\r\n });\r\n\r\n const [ updatingClient, setUpdatingClient ] = useState(false);\r\n\r\n\r\n const updateClient = (e) => {\r\n e.preventDefault();\r\n\r\n let hasError = false;\r\n\r\n if(clientName.trim() == \"\"){\r\n setClientNameValidation({\r\n validationMessage : \"Debe ingresar su nombre completo\",\r\n wasValidated : true\r\n })\r\n hasError = true;\r\n }else{\r\n setClientNameValidation({\r\n validationMessage : \"\",\r\n wasValidated : true\r\n })\r\n }\r\n\r\n if(email.trim() != \"\" && !emailIsValid(email) ){\r\n setEmailValidation({\r\n validationMessage : \"El correo electrónico no tiene el formato correcto\",\r\n wasValidated : true\r\n })\r\n hasError = true;\r\n }else{\r\n setEmailValidation({\r\n validationMessage : \"\",\r\n wasValidated : true\r\n })\r\n }\r\n\r\n if(nit.trim() != \"\" && !hasOnlyNumbers(nit) ){\r\n setNitValidation({\r\n validationMessage : \"El NIT/CI debe contener solo números\",\r\n wasValidated : true\r\n })\r\n hasError = true;\r\n }else{\r\n setNitValidation({\r\n validationMessage : \"\",\r\n wasValidated : true\r\n })\r\n }\r\n\r\n if(hasError)\r\n return;\r\n\r\n const data = {\r\n RazonSocial : clientName,\r\n ServerClienteId : currentClient.clienteId,\r\n SitioWeb : email,\r\n Telefono : currentClient.telefono,\r\n Nit : nit\r\n };\r\n setUpdatingClient(true);\r\n const headers = {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n }\r\n\r\n const url = notMe ? Config.apiURL + 'api/cliente/relogin' : Config.apiURL + 'api/cliente/update'\r\n const token = localStorage.getItem(\"token\");\r\n if(token && token != \"\")\r\n headers.Authorization = `Bearer ${ token }`\r\n fetch(url, {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(data)\r\n }).then(response => {\r\n return response.json();\r\n }).then(json => {\r\n \r\n setCurrentClient({\r\n currentClient : {\r\n ...currentClient,\r\n fullName : json.cliente.fullName,\r\n clienteId : json.cliente.clienteId,\r\n email: json.cliente.email,\r\n nit: json.cliente.nit,\r\n emailVerified : json.cliente.emailVerificado\r\n }\r\n });\r\n localStorage.setItem(\"token\", json.token);\r\n setNotMe(false)\r\n history.push(\"/welcome\");\r\n \r\n }).catch(err => {\r\n console.log(err)\r\n setClientNameValidation({\r\n validationMessage : \"Ocurrió un error al registrar los datos\",\r\n wasValidated : true\r\n })\r\n setUpdatingClient(false);\r\n\r\n });\r\n }\r\n\r\n const handleNotMe = (e) => {\r\n e.preventDefault();\r\n setNotMe(true);\r\n }\r\n\r\n if(isNew || currentClient.fullName == \".\" || notMe){\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n

Finalizando el registro

\r\n
\r\n
\r\n
    \r\n
  • Inicio\r\n
  • \r\n
  •  
  • \r\n
  • Mi Cuenta
  • \r\n
  •  
  • \r\n
  • Registro
  • \r\n
\r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n {\r\n notMe ?\r\n <>\r\n

Continuar Registro.

\r\n
Por favor ingrese sus datos
\r\n \r\n :\r\n <>\r\n

Bienvenido.

\r\n
Para finalizar, por favor ingrese sus datos
\r\n \r\n }\r\n
\r\n setClientName(e.target.value) } />\r\n
{ clientNameValidation.validationMessage }
\r\n
\r\n
\r\n setNit(e.target.value) } />\r\n
{ nitValidation.validationMessage }
\r\n
\r\n
\r\n setEmail(e.target.value) } />\r\n
{ emailValidation.validationMessage }
\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 const relogin = () => {\r\n\r\n }\r\n\r\n return (\r\n <>\r\n \r\n
\r\n
\r\n
\r\n

Bienvenido

\r\n
\r\n
\r\n
    \r\n
  • Inicio\r\n
  • \r\n
  •  
  • \r\n
  • Mi Cuenta
  • \r\n
  •  
  • \r\n
  • Bienvenido
  • \r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

Bienvenido\r\n { ` ${ currentClient.fullName }`}\r\n

\r\n
\r\n \r\n \r\n Continuar comprando\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 mapStateToProps = state => {\r\n return {\r\n firebase : state.firebase,\r\n currentClient : state.currentClient\r\n }\r\n}\r\nconst mapDispatchToProps = {\r\n setCurrentClient\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(withRouter(Welcome));","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link } from 'react-router-dom'\r\n\r\nconst AccountMenu = ({ currentPage, currentClient }) => {\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n firebase : state.firebase,\r\n currentClient : state.currentClient\r\n }\r\n}\r\nconst mapDispatchToProps = null;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AccountMenu);","import React, { useState, useEffect } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link } from 'react-router-dom'\r\n\r\nimport { emailIsValid,hasOnlyNumbers } from '../../utils'\r\nimport AccountMenu from './components/AccountMenu'\r\nimport { setCurrentClient } from '../../actions'\r\nimport Config from '../../Config'\r\nimport SeoComponent from '../../components/seo/SeoComponent'\r\n\r\nconst Profile = ({ currentClient, setCurrentClient }) => {\r\n\r\n const [ showMessage, setShowMessage ] = useState(false)\r\n const [ currentMessage, setCurrentMessage ] = useState({\r\n message : \"\",\r\n type : \"none\",\r\n messageCounter : 0\r\n })\r\n \r\n const [ updatingClient, setUpdatingClient ] = useState(false);\r\n const [ clientData, setClientData] = useState({\r\n fullName : currentClient.fullName,\r\n email: currentClient.email,\r\n nit: currentClient.nit,\r\n clientId : 0\r\n })\r\n\r\n\r\n const [ validation, setValidation ] = useState({\r\n fullNameValidationMessage : \"\",\r\n emailValidationMessage: \"\",\r\n nitValidationMessage: \"\",\r\n wasValidated : false\r\n })\r\n\r\n useEffect(() => {\r\n\r\n if(clientData.clientId == 0){\r\n const url = `${ Config.apiURL }api/cliente/${ currentClient.clienteId }`\r\n\r\n \r\n const headers = {}\r\n \r\n const token = localStorage.getItem(\"token\");\r\n if(token)\r\n headers.Authorization = `Bearer ${ token }`\r\n\r\n fetch(url, {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(response => { return response.json() })\r\n .then(json => {\r\n if(json && json.success){\r\n\r\n setClientData({\r\n ...clientData,\r\n clientId: json.cliente.clienteId\r\n })\r\n setCurrentClient({\r\n currentClient : {\r\n ...currentClient,\r\n fullName : json.cliente.fullName,\r\n clienteId : json.cliente.clienteId,\r\n nit: json.cliente.nit,\r\n email: json.cliente.email,\r\n emailVerified: json.cliente.emailVerified\r\n }\r\n });\r\n \r\n }\r\n })\r\n .catch(err => {\r\n setClientData({\r\n ...clientData,\r\n clientId: currentClient.clienteId\r\n })\r\n setCurrentMessage({\r\n message : \"Ocurrio un error obtener los datos\",\r\n type: \"error\",\r\n messageCounter : currentMessage.messageCounter + 1\r\n })\r\n })\r\n\r\n }\r\n\r\n \r\n let timer = null;\r\n if(currentMessage.message != \"\"){\r\n setShowMessage(true);\r\n timer = setTimeout(() => {\r\n setShowMessage(false);\r\n setCurrentMessage({\r\n ...currentMessage,\r\n message: ''\r\n })\r\n }, 5000);\r\n }\r\n return () => {\r\n if(timer) \r\n clearTimeout(timer);\r\n }\r\n }, [currentMessage.messageCounter, clientData.clientId])\r\n\r\n const updateClient = (e) => {\r\n e.preventDefault();\r\n\r\n\r\n const newValidation = {\r\n fullNameValidationMessage : \"\",\r\n emailValidationMessage: \"\",\r\n nitValidationMessage: \"\"\r\n }\r\n\r\n let valid = true;\r\n if(clientData.fullName.trim() == \"\"){\r\n newValidation.fullNameValidationMessage = \"Debe ingresar su nombre completo\";\r\n valid = false;\r\n }\r\n\r\n if(clientData.email.trim() != \"\" && !emailIsValid(clientData.email)){\r\n newValidation.emailValidationMessage = \"El correo electrónico ingresado no tiene el formato correcto\";\r\n valid = false;\r\n }\r\n\r\n if(clientData.nit.trim() != \"\" && !hasOnlyNumbers(clientData.nit)){\r\n newValidation.nitValidationMessage = \"El NIT/CI debe contener solo números\";\r\n valid = false;\r\n }\r\n\r\n newValidation.wasValidated = true;\r\n\r\n setValidation(newValidation);\r\n\r\n if(!valid)\r\n return;\r\n\r\n \r\n setUpdatingClient(true);\r\n const data = {\r\n RazonSocial : clientData.fullName,\r\n ServerClienteId : currentClient.clienteId,\r\n SitioWeb : clientData.email,\r\n Nit : clientData.nit\r\n };\r\n\r\n const headers = {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n }\r\n \r\n const url = Config.apiURL + 'api/cliente/update'\r\n const token = localStorage.getItem(\"token\");\r\n if(token)\r\n headers.Authorization = `Bearer ${ token }`\r\n fetch(url, {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(data)\r\n })\r\n .then(response => response.json())\r\n .then(json => {\r\n\r\n setCurrentMessage({\r\n message : \"Los datos han sido correctamente actualizados\",\r\n type: \"success\",\r\n messageCounter : currentMessage.messageCounter + 1\r\n })\r\n setCurrentClient({\r\n currentClient : {\r\n ...currentClient,\r\n fullName : json.cliente.fullName,\r\n clienteId : json.cliente.clienteId,\r\n nit: json.cliente.nit,\r\n email: json.cliente.email,\r\n emailVerified: json.cliente.emailVerified\r\n }\r\n });\r\n setValidation({\r\n ...validation,\r\n wasValidated : false\r\n })\r\n setUpdatingClient(false);\r\n \r\n }).catch(err => {\r\n console.log(err)\r\n setUpdatingClient(false);\r\n\r\n setCurrentMessage({\r\n message : \"Ocurrio un error al actualizar los datos\",\r\n type: \"error\",\r\n messageCounter : currentMessage.messageCounter + 1\r\n })\r\n \r\n });\r\n }\r\n\r\n const resendEmailVerification = (e) => {\r\n e.preventDefault();\r\n\r\n const data = {\r\n ClienteId : currentClient.clienteId\r\n };\r\n\r\n const headers = {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n }\r\n \r\n const url = Config.apiURL + 'api/cliente/resend-email-validation'\r\n const token = localStorage.getItem(\"token\");\r\n if(token)\r\n headers.Authorization = `Bearer ${ token }`\r\n fetch(url, {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(data)\r\n }).then(response => {\r\n return response.json();\r\n }).then(json => {\r\n \r\n if(json.success)\r\n localStorage.setItem(\"token\", json.token)\r\n \r\n setCurrentMessage({\r\n message : \"Se ha enviado un mensaje de a su correo electrónico para verificar su dirección. Por favor revise su correo electrónico.\",\r\n type: \"success\",\r\n messageCounter : currentMessage.messageCounter + 1\r\n })\r\n \r\n \r\n }).catch(err => {\r\n console.log(err)\r\n\r\n setCurrentMessage({\r\n message : \"Ocurrio un error al re-enviar la verificación del correo electrónico\",\r\n type: \"error\",\r\n messageCounter : currentMessage.messageCounter + 1\r\n })\r\n \r\n });\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n
\r\n
\r\n
\r\n

Mis Datos

\r\n
\r\n
\r\n
    \r\n
  • \r\n Home\r\n
  • \r\n
  •  
  • \r\n
  • \r\n Mi Cuenta\r\n
  • \r\n
  •  
  • \r\n
  • Mis Datos
  • \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 showMessage && currentMessage.message.trim() != \"\" ?\r\n currentMessage.type == \"success\" ? \r\n
\r\n \r\n   \r\n { currentMessage.message }\r\n
\r\n : \r\n currentMessage.type == \"error\" ? \r\n
\r\n \r\n   \r\n { currentMessage.message }\r\n
\r\n : \r\n \"\"\r\n : \"\"\r\n }\r\n\r\n
\r\n\r\n
\r\n
\r\n \r\n setClientData({ ...clientData, fullName: e.target.value }) } />\r\n
{ validation.fullNameValidationMessage }
\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 setClientData({ ...clientData, email: e.target.value }) } />\r\n
{ validation.emailValidationMessage }
\r\n
\r\n\r\n {\r\n clientData.email != currentClient.email ?\r\n
\r\n \r\n   \r\n Al modificar su correo electrónico, se le enviará un mensaje a la dirección \r\n ingresada para validar dicha dirección\r\n
\r\n :\r\n \"\"\r\n }\r\n\r\n {\r\n !currentClient.emailVerified ?\r\n
\r\n \r\n   \r\n El correo electrónico { currentClient.email } no ha sido verificado. \r\n Revise su correo electrónico.\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 setClientData({ ...clientData, nit: e.target.value }) } />\r\n
{ validation.nitValidationMessage }
\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 mapStateToProps = state => {\r\n return {\r\n firebase : state.firebase,\r\n currentClient : state.currentClient\r\n }\r\n}\r\nconst mapDispatchToProps = {\r\n setCurrentClient\r\n};\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Profile);","import React, { useState, useEffect } from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { Link } from 'react-router-dom'\r\nimport Modal from 'react-bootstrap/Modal';\r\n\r\nimport AccountMenu from './components/AccountMenu'\r\nimport { formatNumber, formatDate, strTofriendlyUrl } from '../../utils'\r\nimport Config from '../../Config'\r\nimport SeoComponent from '../../components/seo/SeoComponent'\r\n\r\n\r\nconst Orders = ({ currentClient }) => {\r\n\r\n const [ currentOrder, setCurrentOrder ] = useState({\r\n codigo : '',\r\n detalle: [],\r\n pagoTotal : 0,\r\n costoTransporte: 0\r\n });\r\n\r\n const [ showDetails, setShowDetails ] = useState(false)\r\n\r\n const [ data, setData ] = useState({\r\n successLoaded : true,\r\n pedidos : []\r\n });\r\n \r\n const [ loading, setLoading ] = useState(false)\r\n \r\n useEffect(() => {\r\n setLoading(true);\r\n\r\n const url = Config.apiURL + 'api/pedido/cliente/' + currentClient.clienteId;\r\n const headers = {}\r\n \r\n const token = localStorage.getItem(\"token\");\r\n if(token)\r\n headers.Authorization = `Bearer ${ token }`\r\n\r\n fetch(url, {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(response => response.json())\r\n .then(json =>{\r\n setData({\r\n successLoaded : json.success,\r\n pedidos : json.pedidos\r\n })\r\n setLoading(false)\r\n })\r\n .catch(err => {\r\n console.log(err);\r\n setLoading(false);\r\n setData({\r\n successLoaded : false,\r\n pedidos : []\r\n })\r\n })\r\n\r\n }, [])\r\n\r\n const handleDetails = (e) => {\r\n e.preventDefault();\r\n debugger;\r\n const id = e.target.dataset[\"id\"];\r\n\r\n const url = Config.apiURL + 'api/pedido/' + id;\r\n\r\n const headers = {}\r\n \r\n const token = localStorage.getItem(\"token\");\r\n if(token)\r\n headers.Authorization = `Bearer ${ token }`\r\n\r\n fetch(url, {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(response => response.json())\r\n .then(json =>{\r\n setCurrentOrder(json.pedido);\r\n setShowDetails(true)\r\n })\r\n .catch(err => {\r\n console.log(err);\r\n })\r\n }\r\n\r\n \r\n const handleClose = (e) =>{\r\n if(e && e.preventDefault)\r\n e.preventDefault();\r\n setShowDetails(false);\r\n }\r\n\r\n const getEstado = (estadoVentaId, ventaId) => {\r\n switch(estadoVentaId){\r\n case 1 : \r\n return Su pedido esta siendo preparado por la Tienda \r\n\r\n case 2 : \r\n return Entregado\r\n case 3 : \r\n return Cancelado\r\n case 4 : \r\n return Pendiente de Pago\r\n case 5 : \r\n return <>\r\n En Camino\r\n \r\n Ver Seguimiento de Pedido\r\n \r\n \r\n }\r\n return \"No Definido\"\r\n \r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n \r\n

Pedido { currentOrder.codigo }

\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 currentOrder.detalle.map(item => {\r\n\r\n\r\n return \r\n \r\n \r\n \r\n })\r\n\r\n }\r\n \r\n \r\n
ProductoSubtotal
\r\n
\r\n \r\n
\r\n

\r\n \r\n { item.descripcionConcepto }\r\n \r\n

\r\n Precio: Bs. { formatNumber(item.precioVenta) } \r\n Cantidad: { item.cantidad }\r\n {\r\n item.descuento && item.descuento > 0 ?\r\n Descuento: Bs. { formatNumber(item.descuento) } : \"\"\r\n }\r\n \r\n
\r\n
\r\n
{ formatNumber((item.precioVenta * item.cantidad) - item.descuento) }
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n Subtotal: \r\n { formatNumber(currentOrder.pagoTotal) }\r\n
\r\n
\r\n Costo de Envío: \r\n { formatNumber(currentOrder.costoTransporte) }\r\n
\r\n
 
\r\n
\r\n Total: \r\n { formatNumber(currentOrder.pagoTotal + currentOrder.costoTransporte) }\r\n
\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n

Mis Pedidos

\r\n
\r\n
\r\n
    \r\n
  • \r\n Home\r\n
  • \r\n
  •  
  • \r\n
  • \r\n Mi Cuenta\r\n
  • \r\n
  •  
  • \r\n
  • Mis Pedidos
  • \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 loading ? \r\n \r\n \r\n \r\n :\r\n data.successLoaded ?\r\n data.pedidos.length > 0 ?\r\n data.pedidos.map(item => {\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
PedidoDatosEstadoTotal
Cargando Pedidos
\r\n { item.codigo }\r\n
\r\n \r\n
\r\n
\r\n
\r\n Fecha del Pedido: { formatDate(new Date(item.fechaRegistro)) }\r\n
\r\n
\r\n Entregar a: {item.nombreClienteEntrega}\r\n
\r\n
\r\n Teléfono: {item.telefonoEntrega}\r\n
\r\n
\r\n Razon Social: { item.razonSocial }\r\n
\r\n
\r\n NIT: { item.nit }\r\n
\r\n
\r\n Entrega: { item.observacionesEntrega }\r\n
\r\n
\r\n {\r\n getEstado(item.estadoVentaId, item.ventaId)\r\n }\r\n Bs. { formatNumber(item.pagoTotal + item.costoTransporte) }
\r\n Aún no tiene pedidos registrados\r\n
\r\n \r\n Explorar productos\r\n \r\n
\r\n
Ocurrio un error al cargar los pedidos
\r\n
\r\n\r\n
\r\n
\r\n
\r\n \r\n )\r\n}\r\n\r\nconst mapStateToProps = state => {\r\n return {\r\n firebase : state.firebase,\r\n currentClient : state.currentClient\r\n }\r\n}\r\nconst mapDispatchToProps = null;\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Orders);","import React from 'react'\r\n\r\nconst ResponsibleData = (props) => {\r\n return (\r\n

\r\n Responsable: { props.nombreResponsable }
\r\n Teléfono: { props.telefonoResponsable }\r\n

\r\n )\r\n}\r\nexport default ResponsibleData","import React, { useState, useEffect } from 'react'\r\nimport { GoogleMap, LoadScript, Marker, Autocomplete } from '@react-google-maps/api';\r\nimport Config from '../../../Config'\r\n\r\nconst containerStyle = {\r\n width: '100%',\r\n height: '400px'\r\n };\r\n\r\nconst Tracking = (props) => {\r\n\r\n const [destiny, setDestiny] = useState(props.destiny);\r\n const [position, setPosition ] = useState(null);\r\n \r\n const [markerPosition, setMarkerPosition] = useState(null)\r\n const [markerDestiny, setMarkerDestiny] = useState(null)\r\n\r\n const lat = props.position ? props.position.lat : 0;\r\n const lng = props.position ? props.position.lng : 0;\r\n\r\n useEffect(() => {\r\n setPosition({\r\n lat,\r\n lng\r\n })\r\n }, [lat, lng])\r\n\r\n\r\n const onLoadMarkerPosition = React.useCallback(function callback(marker) {\r\n setMarkerPosition(marker)\r\n \r\n }, [])\r\n\r\n const onUnmountMarkerPosition = React.useCallback(function callback(marker) {\r\n setMarkerPosition(null)\r\n }, [])\r\n\r\n\r\n const onLoadMarkerDestiny = React.useCallback(function callback(marker) {\r\n setMarkerDestiny(marker)\r\n \r\n }, [])\r\n\r\n const onUnmountMarkerDestiny = React.useCallback(function callback(marker) {\r\n setMarkerDestiny(null)\r\n }, [])\r\n\r\n return (\r\n \r\n \r\n\r\n {\r\n position && \r\n \r\n }\r\n \r\n \r\n \r\n \r\n )\r\n}\r\nexport default Tracking;","import React, { useState, useEffect } from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nimport ResponsibleData from './components/ResponsibleData'\r\nimport Tracking from './components/Tracking'\r\nimport Config from '../../Config'\r\n\r\nconst Delivery = (props) => {\r\n\r\n const [ loading, setLoading ] = useState(true);\r\n const [ currentOrder, setCurrentOrder ] = useState(null);\r\n const [ timer , setTimer ] = useState(null)\r\n\r\n const [ currentAction, setCurrentAction ] = useState(\"getOrder\");\r\n const [ counter, setCounter ] = useState(0);\r\n\r\n const { ventaId } = props.match.params;\r\n\r\n useEffect(() => {\r\n const theTimer = setTimeout(() => {\r\n getOrderStatus();\r\n }, 1000);\r\n setTimer(theTimer)\r\n return () => {\r\n if(timer) \r\n clearTimeout(timer);\r\n }\r\n }, [])\r\n\r\n const getOrderStatus = () => {\r\n const url = `${ Config.apiURL }api/pedido/entrega/${ ventaId }`\r\n\r\n fetch(url)\r\n .then(response => response.json())\r\n .then(json => {\r\n let requestAgain = false;\r\n if(json && json.success){\r\n setCurrentOrder(json.data)\r\n setCounter(counter + 1)\r\n requestAgain = json.data.estado != \"ENTREGADO\"\r\n }\r\n \r\n setLoading(false)\r\n if(!requestAgain)\r\n return;\r\n const theTimer = setTimeout(() => {\r\n getOrderStatus();\r\n }, 1000);\r\n setTimer(theTimer)\r\n })\r\n .catch(err => {\r\n console.log(err);\r\n setLoading(false)\r\n })\r\n }\r\n\r\n\r\n if(loading){\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

\r\n Cargando...\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n }\r\n\r\n if(currentOrder == null)\r\n {\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

\r\n No se pudo cargar el estado de la entrega o probablemente el proceso de entrega no ha iniciado\r\n

\r\n
\r\n
\r\n
\r\n \r\n \r\n )\r\n }\r\n const destiny = {\r\n lat : currentOrder.latitud,\r\n lng : currentOrder.longitud\r\n }\r\n let position = null;\r\n let mensaje = \"\";\r\n switch (currentOrder.estado) {\r\n case \"NoIniciado\":\r\n mensaje = \"La entrega del pedido no ha iniciado aún\"\r\n break;\r\n case \"ASIGNADO\":\r\n mensaje = \"El pedido ha sido asignado a un responsable para su entrega. Pronto iniciará la entrega\"\r\n break;\r\n case \"ENTREGADO\":\r\n mensaje = \"El pedido ya ha sido Entregado\"\r\n break;\r\n case \"EN_CAMINO\":\r\n mensaje = \"La entrega del Pedido se encuentra en camino\"\r\n position = {\r\n lat : currentOrder.latitudActual,\r\n lng : currentOrder.longitudActual\r\n }\r\n break;\r\n case \"EN_PUERTA\":\r\n mensaje = \"El responsable de la entrega de su pedido, se encuentra en su ubicación\"\r\n position = {\r\n lat : currentOrder.latitudActual,\r\n lng : currentOrder.longitudActual\r\n }\r\n break;\r\n \r\n default:\r\n break;\r\n } \r\n \r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

\r\n Estado de Entrega del Pedido { currentOrder.codigo }\r\n

\r\n
\r\n\r\n
\r\n
    \r\n
  • \r\n Home\r\n
  • \r\n
  •  
  • \r\n
  • \r\n Entrega de Pedido\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 { mensaje }\r\n

\r\n {\r\n currentOrder.estado != \"NoIniciado\" &&\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\nexport default Delivery;\r\n","import React, { useState, useEffect } from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\n\r\n\r\nimport { formatNumber } from '../../utils'\r\nimport Config from '../../Config'\r\n\r\nconst PagoQR = (props) => {\r\n\r\n const { ventaId } = props.match.params;\r\n\r\n const [ currentAction, setCurrentAction ] = useState(\"getOrder\");\r\n const [ currentOrder, setCurrentOrder ] = useState(null);\r\n const [ counter, setCounter ] = useState(0);\r\n const [ currentPayment, setCurrentPayment ] = useState(null);\r\n\r\n\r\n const getOrder = () => {\r\n const url = Config.apiURL + 'api/pedido/' + ventaId;\r\n\r\n const headers = {}\r\n \r\n const token = localStorage.getItem(\"token\");\r\n if(token)\r\n headers.Authorization = `Bearer ${ token }`\r\n\r\n fetch(url, {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(response => response.json())\r\n .then(json =>{\r\n\r\n if(json && json.success && json.pedido){\r\n const obj = json.pedido;\r\n setCurrentOrder(obj)\r\n if(obj.estadoVentaId != 4){\r\n setCurrentAction(\"showOrderNoPayable\");\r\n return;\r\n }\r\n setCurrentAction(\"getPendingPayment\");\r\n }else{\r\n \r\n setCurrentAction(\"showOrderNoPayable\");\r\n }\r\n })\r\n .catch(err => {\r\n console.log(err);\r\n })\r\n }\r\n\r\n const getPendingPayment = () =>{\r\n const url = Config.apiURL + 'api/pedido/deposito/' + ventaId;\r\n\r\n const headers = {}\r\n \r\n const token = localStorage.getItem(\"token\");\r\n if(token)\r\n headers.Authorization = `Bearer ${ token }`\r\n\r\n fetch(url, {\r\n method: 'GET',\r\n headers: headers\r\n })\r\n .then(response => response.json())\r\n .then(json =>{\r\n if(json && json.success && json.deposito){\r\n const obj = json.deposito;\r\n \r\n if(obj.pagado)\r\n props.history.push(\"/pedido-finalizado\")\r\n else{\r\n if(currentAction == \"getPendingPayment\")\r\n setCurrentPayment(obj);\r\n setCurrentAction(\"checkPayment\");\r\n setCounter(counter + 1);\r\n }\r\n return;\r\n }\r\n \r\n setCurrentAction(\"showOrderNoPayable\");\r\n })\r\n .catch(err => {\r\n console.log(err);\r\n })\r\n }\r\n\r\n useEffect(() => {\r\n\r\n if(!currentAction)\r\n return;\r\n\r\n if(currentAction == \"getOrder\"){\r\n getOrder();\r\n return;\r\n }\r\n\r\n if(currentAction == \"getPendingPayment\"){\r\n getPendingPayment();\r\n return;\r\n }\r\n\r\n let timer = null;\r\n \r\n if(currentAction == \"checkPayment\"){\r\n timer = setTimeout(() => {\r\n getPendingPayment();\r\n }, 1000);\r\n }\r\n return () => {\r\n if(timer) \r\n clearTimeout(timer);\r\n }\r\n\r\n },[currentAction,counter])\r\n\r\n if(!ventaId || ventaId == \"\")\r\n props.history.push(\"/404\")\r\n\r\n \r\n if(currentAction == \"getOrder\" || currentAction == \"getPendingPayment\"){\r\n return (\r\n
\r\n
\r\n
\r\n

Cargando...

\r\n
\r\n
\r\n
\r\n )\r\n\r\n }\r\n\r\n if(currentAction == \"showOrderNoPayable\"){\r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

El pago del pedido no puede ser procesado

\r\n
\r\n
\r\n
\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

El pedido \r\n { ` ${ currentOrder.codigo }`} ya se encuentra \r\n pagado\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 return (\r\n <>\r\n
\r\n
\r\n
\r\n

\r\n Pago del Pedido { currentOrder.codigo }\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 Por favor no cierre esta ventana.\r\n \r\n
\r\n

\r\n Monto a Pagar: \r\n   \r\n Bs. { \" \"}\r\n { formatNumber(currentOrder.montoTotalExtras) }\r\n \r\n

\r\n

\r\n Por favor ingrese a la aplicación de su Banca Movil,\r\n ingrese a la opción Transferencia Simple QR,\r\n seleccione la opción de Pagar y luego escanee el\r\n siguiente código QR:\r\n

\r\n
\r\n \"\"\r\n
\r\n

\r\n Comprobando pago...\r\n

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n )\r\n}\r\n\r\nexport default withRouter(PagoQR);\r\n","import React, { Component } from 'react'\r\nimport { Link } from 'react-router-dom'\r\n\r\nexport default class NotFound extends Component {\r\n render() {\r\n return (\r\n
\r\n

404

\r\n
\r\n

Página no encontrada

\r\n

\r\n Al parecer la página que esta buscando no existe o no está disponible.

\r\n Ir a la página de Inicio
\r\n o trate de usar el buscador de la parte superior.\r\n

\r\n
\r\n
\r\n )\r\n }\r\n}\r\n","import React, { useState, useEffect } from 'react'\r\nimport Config from '../../Config'\r\n\r\nconst EmailVerification = (props) => {\r\n\r\n const queryStringParams = new URLSearchParams(props.location.search);\r\n const code = queryStringParams.has(\"code\") ? encodeURIComponent(queryStringParams.get(\"code\")) : null;\r\n\r\n const [ loading, setLoading ] = useState(true);\r\n const [ isOk, setIsOk ] = useState(false);\r\n\r\n useEffect(() => {\r\n if(!code || code == \"\"){\r\n setLoading(false);\r\n return;\r\n }\r\n\r\n const data = {\r\n \"ValidationCode\" : code\r\n }\r\n const headers = {\r\n 'Accept': 'application/json',\r\n 'Content-Type': 'application/json'\r\n }\r\n\r\n const url = `${ Config.apiURL }api/cliente/validate-email`\r\n fetch(url, {\r\n method: 'POST',\r\n headers: headers,\r\n body: JSON.stringify(data)\r\n }).then(response => {\r\n return response.json();\r\n }).then(jsonResult => {\r\n \r\n if(jsonResult && jsonResult.success){\r\n setIsOk(true);\r\n }else{\r\n setIsOk(false);\r\n }\r\n \r\n setLoading(false);\r\n }).catch(err => {\r\n console.log(err)\r\n setLoading(false);\r\n setIsOk(false);\r\n\r\n });\r\n \r\n\r\n \r\n }, [])\r\n\r\n\r\n if (loading) {\r\n\r\n return (\r\n
\r\n
\r\n
\r\n

Verificando...

\r\n
\r\n
\r\n
\r\n )\r\n }\r\n\r\n const message = (!code || code == \"\") ?\r\n \"La solicitud de verificación es inválida\" :\r\n isOk ? \"La verificación se ha realizado correctamente.\" :\r\n \"La verificación no ha podido ser realizada.\"\r\n \r\n\r\n return (\r\n <>\r\n
\r\n
\r\n
\r\n

Verificación de Correo Electrónico

\r\n
\r\n
\r\n
\r\n\r\n\r\n
\r\n
\r\n
\r\n
\r\n
\r\n

\r\n { message }\r\n

\r\n
\r\n Continuar\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n\r\n \r\n )\r\n}\r\n\r\nexport default EmailVerification\r\n","import React, { useEffect, useState } from 'react'\r\nimport { BrowserRouter, Route, Switch, Redirect } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport Config from '../Config'\r\nimport { updateSEOInfo } from '../actions'\r\n\r\nimport GAComponent from '../components/analytics/GAComponent'\r\nimport Header from '../components/header/Header';\r\nimport Footer from '../components/footer/Footer';\r\nimport DemoAlert from '../components/DemoAlert';\r\nimport Home from '../react-pages/home/Home'\r\nimport Products from '../react-pages/products/Products'\r\nimport About from '../react-pages/about/About'\r\nimport Cart from '../react-pages/cart/Cart'\r\nimport SingleProduct from '../react-pages/single-product/SingleProduct'\r\nimport Checkout from '../react-pages/checkout/Checkout';\r\nimport PedidoFinalizado from '../react-pages/pedido-finalizado/PedidoFinalizado';\r\nimport Login from '../react-pages/login/Login';\r\nimport Welcome from '../react-pages/welcome/Welcome';\r\nimport Profile from '../react-pages/account/Profile';\r\nimport Orders from '../react-pages/account/Orders';\r\nimport Delivery from '../react-pages/delivery/Delivery'\r\nimport PagoQR from '../react-pages/pago-qr/PagoQR';\r\nimport NotFound from '../react-pages/NotFound'\r\nimport EmailVerification from '../react-pages/email-verification/EmailVerification'\r\n\r\n\r\n\r\nconst NavigationRoutes = ({ gaID, currentClient, cart, updateSEOInfo }) => {\r\n \r\n const [ categorias, setCategorias ] = useState([])\r\n\r\n\tuseEffect(() =>{\r\n\t\tfetch(`${Config.apiURL}api/familia`)\r\n .then(response => response.json())\r\n .then(jsonData => {\r\n \r\n updateSEOInfo({\r\n seo: jsonData.configuracionSeo\r\n });\r\n\r\n const familias = jsonData.familias;\r\n\t\t\t\tif(familias.length <= 4){\r\n\t\t\t\t\tsetCategorias([familias])\r\n\t\t\t\t\treturn;\r\n }\r\n\t\t\t\tlet filasNecesarias = familias.length / 4.0;\r\n\t\t\t\tlet requiereExtra = filasNecesarias - parseInt(filasNecesarias) > 0;\r\n\t\t\t\tconst categoriasPorColumna = 4;\r\n const categories = []\r\n\t\t\t\tlet from = 0;\r\n while(from < familias.length){\r\n\t\t\t\t\tlet to = from + categoriasPorColumna <= familias.length ? from + categoriasPorColumna : jsonData.length\r\n\t\t\t\t\tif(requiereExtra && to + 1 < familias.length)\r\n\t\t\t\t\t\tto++;\r\n\t\t\t\t\trequiereExtra = false\r\n categories.push(familias.slice(from, to))\r\n from = to\r\n }\r\n setCategorias(categories)\r\n })\r\n .catch(err =>{\r\n console.log(err)\r\n })\r\n\t},[])\r\n\r\n\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 currentClient ? \r\n (cart && Object.keys(cart).length > 0 ? : ) \r\n : \r\n }\r\n \r\n \r\n \r\n \r\n \r\n { currentClient ? : }\r\n \r\n \r\n { currentClient ? : }\r\n \r\n \r\n { currentClient ? : }\r\n \r\n \r\n { currentClient ? : }\r\n \r\n \r\n { currentClient ? : }\r\n \r\n \r\n \r\n