{"version":3,"sources":["services/types.ts","shared/defs.ts","services/api.ts","services/mask.ts","store/ducks/merchants/types.ts","utils/Utils.ts","services/functions.ts","containers/__Routes/Route.tsx","containers/__Routes/index.tsx","assets/theme/colors.ts","assets/theme/index.ts","assets/theme/text.ts","components/ToTop/index.tsx","containers/App/index.tsx","serviceWorker.ts","store/ducks/marketplace/types.ts","store/ducks/marketplace/index.ts","store/ducks/modals/types.ts","store/ducks/merchants/index.ts","store/ducks/modals/index.ts","store/ducks/order/types.ts","store/ducks/order/index.ts","store/ducks/variations/types.ts","store/ducks/variations/index.ts","store/ducks/Update/actions.ts","store/ducks/Update/duck.ts","store/ducks/Update/index.tsx","store/ducks/rootReducer.ts","store/index.ts","Context/helpers/getTimeStamp/index.ts","Context/helpers/refreshToken/index.ts","Context/hooks/refreshToken.tsx","index.tsx","services/validation.ts","environment/environment.ts","services/apiCustomer.ts","Context/hooks/auth.tsx"],"names":["OrderStatus","OrderStatusTranslation","MerchantStatus","DeliveryMethod","DeliveryMethodTranslation","StatusDeliveryShip","StatusDeliveryShipTranslation","Month","APPLICATION_ID","uuidv4","jwtRequest","axios","create","baseURL","environment","REACT_APP_API_URL","REACT_APP_GEOCODE_URL","a","url","method","headers","data","username","REACT_APP_API_USERNAME","password","REACT_APP_API_PASSWORD","then","res","token","saveTokenJwt","window","dispatchEvent","StorageEvent","key","LocalStorageName","newValue","catch","err","console","log","getAddressFromAPI","cep","replace","getTokenJwt","jwt","Authorization","message","result","registerCustomer","response","getCities","state","getAvatars","removeSpecialChars","specialChar","newString","normalize","toLowerCase","removeEspecialCharacteres","value","convertDateFusoBr","date","d","Date","valueOf","getTimezoneOffset","toString","MerchantsTypes","location","href","indexOf","states","delay","amount","Promise","resolve","setTimeout","secretKey","process","saveLocalStorage","name","localStorage","setItem","removeLocalStorage","removeItem","saveSessionStorage","sessionStorage","getSessionStorage","getItem","removeSessionStorage","getTokenFromLocalStorage","decrypt","refresh","encryptedToken","encrypt","serializer","serializedData","JSON","stringify","CryptoJS","deserializer","bytes","decryptData","Utf8","parse","returnOnlyNumber","sortByAlphabetically","b","maskCep","substring","formatMoney","number","numberSplit","toFixed","split","join","dateToString","dateStr","day","getDate","length","month","getMonth","extractHourAndMinutes","hour","getHours","extractHour","minutes","getMinutes","extractMinutes","getProductsAvailabilityUpdated","products","availability","map","product","getProductAvailabilityUpdated","productId","category","id","getProductUpdated","updatedProduct","description","price","promotion","isPromotion","stock","active","orderMax","getProductCurrentStockUpdated","current","updateOrderProductAvailability","merchantUrl","updatedProducts","item","getVariationItemsUpdated","variations","variationId","variationItemId","variationItemAvailability","updateOrderVariationItemAvailability","updateOrderProductCurrentStock","updateOrderVariationItemStock","getVariationItemsStockUpdated","variationItemStockCurrent","updateOrderProductStock","seveOrUpdateDataAppForNextApp","dataApp","authenticated","activeToastSignOut","toastSignOutMessage","info","Route","isPrivate","Component","component","rest","customer","useAuth","render","to","pathname","from","TempHome","lazy","TempMarketplace","Layout","MainData","Security","Addresses","OrderHistory","Favorites","Routes","fallback","className","Spinner","as","animation","role","aria-hidden","exact","path","page","selectedMenuItem","theme","color","primary","primaryText","secondaryText","background","error","available","unavailable","awaiting","dispatched","confirmed","ready","drivethru","cancelled","order","text","small","normal","bold","medium","title","subtitle","big","withRouter","history","useEffect","historyListen","listen","scrollTo","App","ToTop","Boolean","hostname","match","MarketsTypes","ModalsTypes","INITIAL_STATE","filterSegment","searchBar","city","merchantsList","segmentsList","reducer","action","type","FILTER_SEGMENT","payload","FILTER_MERCHANT","HANDLE_POSITION","HANDLE_MERCHANTS","UPDATE_MERCHANT_AVAILABILITY","m","merchantId","status","HANDLE_SEGMENTS","urlCode","cnpj","phoneDdd","phoneNumber","email","logoPath","bannerPath","about","whatsappDdd","whatsappNumber","instagram","facebook","address","street","streetNumber","complement","neighborhood","cityCode","country","postalCode","reference","latitude","longitude","marketSegment","code","marketplace","ratings","average","settings","deliveryTimeMin","deliveryTimeMax","deliveryFeeMin","softcomShip","clientId","clientSecret","showProductUnavailableInApp","deliveryMethods","deliveryAreas","payments","loaded","exist","categories","priority","paymentInstructions","orderCpfIsRequired","cardInstallmentsMax","cardInstallmentsMinValue","sitefMerchantId","sitefMerchantKey","softcomCode","integrationApp","LOAD_MERCHANT","HANDLE_EXIST","UPDATE_MERCHANT_CATEGORY_AVAILABILITY","categoryId","UPDATE_MERCHANT_PRODUCT_AVAILABILITY","UPDATE_MERCHANT_PRODUCT","UPDATE_MERCHANT_PRODUCT_CURRENT_STOCK","parseInt","LOAD_CATEGORIES","productsTemp","filter","push","CLEAR_MERCHANT","OrderTypes","statusO","statusP","statusRM","statusF","statusT","statusC","statusI","step","orderComplete","orderId","orderReceipt","orderPrepaid","orderError","ean","measure","merchantSuggestion","validity","originalValue","percent","min","images","variationsGrid","storedAddresses","availableAddresses","unavailableAddresses","updateModal","TOGGLE_MODAL_O","TOGGLE_MODAL_P","undefined","TOGGLE_MODAL_RM","TOGGLE_MODAL_F","TOGGLE_MODAL_T","TOGGLE_MODAL_C","TOGGLE_MODAL_I","TOGGLE_ORDER_STEP","TOGGLE_ORDER_COMPLETE","complete","receipt","prepaid","HANDLE_ADDRESSES","VariationsTypes","cpf","delivery","ship","companyName","deliveryFee","deliveryTime","serviceCode","serviceName","observation","items","subtotal","total","LOAD_ORDER","UPDATE_ORDER_SHIP","service","UPDATE_ORDER","updatedOrder","quantity","reduce","UPDATE_ORDER_PRODUCT","updatedCart","variationsTotal","UPDATE_PRODUCTS_URI","index","observations","splice","UPDATE_ORDER_PRODUCT_AVAILABILITY","UPDATE_PRODUCTS_AVAILABILITY_URI","UPDATE_ORDER_PRODUCT_AVAILABILITY_BY_CATEGORY_ID","UPDATE_ORDER_VARIATION_ITEM_AVAILABILITY","UPDATE_VARIATION_AVAILABILITY_URI","UPDATE_ORDER_VARIATION_ITEM_STOCK","UPDATE_VARIATION_STOCK_URI","UPDATE_ORDER_PRODUCT_CURRENT_STOCK","UPDATE_CURRENT_STOCK_URI","UPDATE_ORDER_PRODUCT_STOCK","UPDATE_STOCK_URI","INSERT_ORDER_PRODUCT","cartItem","INSERT_URI","UPDATE_CUSTOMER_ADDRESS","updatedAddress","UPDATE_DELIVERY_FEE","UPDATE_MERCHANT_ID","UPDATE_TOTAL","Number","UPDATE_CUSTOMER_INFOS","UPDATE_CUSTOMER_PAYMENT","UPDATE_OBSERVATION","CLEAR_CART","renewCart","CLEAR_CART_URI","EProductToUpdate","ECategoryToUpdate","EProductUpdatedInfos","EProductStockUpdated","LOAD_VARIATIONS","HANDLE_VARIATIONS_ITEMS","CLEAR_VARIATIONS_ITEMS","setProductToUpdate","productToUpdateStatus","setCategoryToUpdate","categoryToUpdateStatus","setProductWithInfosUpdated","productUpdatedInfos","setProductStockUpdated","productStockUpdated","PRODUCT_UPDATED_STATUS","CATEGORY_UPDATED_STATUS","PRODUCT_UPDATED_INFOS","PRODUCT_STOCK_UPDATED","combineReducers","markets","merchants","modals","update","middleware","thunk","store","createStore","rootReducer","applyMiddleware","getTimeStamp","decodeToken","decode","timeStampDate","exp","timeStampMinutes","timeStampWithAmountMinutes","setMinutes","currentTime","now","refreshToken","HookContext","createContext","RefreshTokenProvider","children","useState","setRefresh","requestNewToken","Provider","ReactDOM","document","getElementById","navigator","serviceWorker","registration","unregister","checkShare","validationCase","validation","toast","success","checkVariations","validateCpf","Soma","Resto","i","env","version","apiCustomer","getCustomerId","decrytedToken","decodedToken","sub","updateAuthorization","defaults","checkTokenHasExpired","jwtExpirationDate","dateNow","tokenExpirationDate","setUTCSeconds","setSeconds","getSeconds","getTime","encryptedCredentials","decrytedCredentials","post","expirationToken","sendRequestResetPassword","updateCustomer","put","changePassword","valuesChangePassword","getCustomersAddresses","customerId","get","registerCustomersAddresses","customerAddress","deleteCustomersAddresses","customerAddressId","delete","updateCustomersAddresses","getCustomerOrders","getCustomerOrder","sendOrderRating","rating","patch","getCustomerFavorites","sendCustomerFavorite","AuthContext","AuthProvider","isLoading","setIsLoading","decryptedToken","decryptedCustomer","setData","setCustomerData","useCallback","decryptToken","encryptedCustomer","signOut","toMarketplace","signIn","close","messageWhenFinished","avatarPath","finishRequest","context","useContext","Error"],"mappings":"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","file":"static/js/main.e00ca153.chunk.js","sourcesContent":["export interface IDataApp {\n authenticated: boolean\n activeToastSignOut: boolean\n toastSignOutMessage: string\n info: string\n}\n\nexport interface Item {\n storeName: string;\n sug: boolean;\n name: string;\n price: number;\n oldPrice?: number;\n description: string;\n discount: boolean;\n discountAmount?: number;\n}\n\nexport interface CartProduct {\n item: Item;\n qty: number;\n obs: string;\n}\n\nexport interface CartProductItem {\n item: Item;\n qty: number;\n obs: string;\n index: number;\n}\n\nexport interface Cart {\n items: CartProduct[];\n}\n\nexport interface PropsModal {\n item: Item;\n modalShow: boolean;\n}\n\nexport interface BooleanPropsModal {\n showModal: boolean;\n}\n\nexport interface Option {\n name: string;\n value: number;\n}\n\nexport interface Customer {\n id?: string;\n name: string;\n email: string;\n cpf?: string;\n phoneDdd: string;\n phoneNumber: string;\n password?: string;\n confirmPassword?: string;\n avatarPath?: string;\n}\n\nexport interface CustomerAddress {\n id?: string;\n name: string;\n street: string;\n streetNumber: string;\n complement?: string;\n neighborhood: string;\n city: string;\n cityCode?: string;\n state: string;\n postalCode: string;\n reference?: string;\n errors?: any;\n country?: string;\n latitude?: number;\n longitude?: number;\n}\n\nexport interface CustomerFavorite {\n id: string;\n productId: string;\n productName: string;\n productDescription: string;\n productImagePath: string;\n merchantId: string;\n merchantUrlCode: string;\n merchantName: string;\n merchantLogoPath: string;\n merchantMarketSegmentName: string;\n productAvailability: string;\n}\n\nexport interface City {\n city: string;\n cityCode: string;\n state: string;\n}\n\nexport interface Action {\n payload: any;\n type: string;\n [key: string]: any;\n}\n\nexport enum OrderStatus {\n AWAITING = 'AWAITING',\n INTEGRATED = 'INTEGRATED',\n CONFIRMED = 'CONFIRMED',\n READY = 'READY',\n DISPATCHED = 'DISPATCHED',\n CANCELED = 'CANCELED',\n CONCLUDED = 'CONCLUDED',\n INPROGRESS = 'INPROGRESS',\n DRIVETHRU = 'DRIVETHRU',\n AWAITING_PAYMENT = 'AWAITING_PAYMENT',\n}\nexport enum OrderStatusTranslation {\n AWAITING = 'Pendente',\n INTEGRATED = 'Pendente',\n CONFIRMED = 'Em Preparo',\n READY = 'Aguardando Retirada',\n DISPATCHED = 'Em Trânsito',\n CANCELED = 'Cancelado',\n CONCLUDED = 'Concluído',\n INPROGRESS = 'INPROGRESS',\n DRIVETHRU = 'Drive Thru',\n AWAITING_PAYMENT = 'Aguardando',\n}\nexport enum MerchantStatus {\n AVAILABLE = 'AVAILABLE',\n UNAVAILABLE = 'UNAVAILABLE',\n}\nexport enum DeliveryMethod {\n DELIVERY = 'DELIVERY',\n TAKEOUT = 'TAKEOUT',\n DRIVETHRU = 'DRIVETHRU',\n SHIP = 'SHIP',\n}\nexport enum DeliveryMethodTranslation {\n DELIVERY = 'DELIVERY',\n TAKEOUT = 'RETIRADA NO ESTABELECIMENTO',\n DRIVETHRU = 'DRIVETHRU',\n SHIP = 'TRANSPORTADORA',\n}\n\nexport enum StatusDeliveryShip {\n PENDING = 'PENDING',\n RELEASED = 'RELEASED',\n POSTED = 'POSTED',\n DELIVERED = 'DELIVERED',\n CANCELED = 'CANCELED',\n UNDELIVERED = 'UNDELIVERED',\n SUSPENDED = 'SUSPENDED'\n}\nexport enum StatusDeliveryShipTranslation {\n PENDING = 'Aguardando Despacho',\n RELEASED = 'Lançado',\n POSTED = 'Postado',\n DELIVERED = 'Entregue',\n CANCELED = 'Cacelado',\n UNDELIVERED = 'Não entregue',\n SUSPENDED = 'Suspenso'\n}\n\nexport enum Month {\n janeiro,\n fevereiro,\n março,\n abril,\n maio,\n junho,\n julho,\n agosto,\n setembro,\n outubro,\n novembro,\n dezembro,\n}\nexport interface CustomerOrder {\n id: string;\n shortId: string;\n status: OrderStatus;\n total: number;\n createdAt: string;\n cancellationReason?: string;\n merchantId: string;\n merchantUrlCode: string;\n merchantStatus: MerchantStatus;\n merchantName: string;\n merchantLogoPath: string;\n rating: number;\n deliveryMethod: DeliveryMethod;\n}\n\n/**\n * @method : Delivery method\n * @address : Customer Address\n */\nexport interface Delivery {\n method: DeliveryMethod;\n address: Address;\n ship: DeliveryShip;\n time?: number;\n}\n/**\n * @street : name of street\n * @streetNumber : number of address\n * @complement : an complement\n * @neighborhood : name of neighborhood\n * @city : name of city\n * @cityCode : city code\n * @state : name of state\n * @country : name of state\n * @postalCode : cep number\n * @reference : reference\n * @latitude : latitude\n * @longitude : longitude\n */\n\nexport interface Address {\n street: string;\n streetNumber: string;\n complement: string;\n neighborhood: string;\n city: string;\n cityCode: string;\n state: string;\n country: string;\n postalCode: string;\n reference: string;\n latitude: number;\n longitude: number;\n}\n\nexport interface Variation {\n variationId: string;\n variationName: string;\n variationItemId: string;\n variationItemName: string;\n quantity: number;\n value: number;\n total: number;\n variationsGrid: boolean;\n}\n\n/**\n * @item : name of item\n * @productId : id of item\n * @quantity : quantity of item\n * @price : price of item\n * @subtotal : subtotal of item\n * @discount : discount of item price\n * @addition : additional of item price\n * @total : total value of item\n * @observations : observations of item\n */\nexport interface Product {\n item: number;\n productId: string;\n productCode: string;\n productName: string;\n quantity: number;\n price: number;\n subtotal: number;\n discount: number;\n addition: number;\n total: number;\n observations: string;\n variationsTotal: number;\n variations: Variation[];\n variationsGrid: boolean;\n}\n\n/**\n * @cardNumber : number of card\n * @expiryDate : expiration date of card\n * @securityCode : CVV\n * @holder : card owner\n * @cpf : CPF of card owner\n * @installments : number of value parts\n */\n\nexport interface CreditCard {\n cardNumber: string;\n expiryDate: string;\n securityCode: string;\n holder: string;\n cpf: string;\n installments: number;\n}\n\n/**\n * @code : code of payment, ex: \"DIN\" for money\n * @prepaid : online payment ? true\n * @value : value of payment\n * @changeFor : change of payment using DIN, value\n * @creditCard : credit card infos\n */\n\nexport interface Payment {\n code: string;\n prepaid: boolean;\n value: number;\n changeFor: number;\n creditCard?: CreditCard;\n}\n\nexport interface DeliveryShip {\n companyName: string;\n labelTracking: string;\n labelUrl: string;\n nfeKey: string;\n nfeNumber: string;\n serviceName: string;\n status: StatusDeliveryShip;\n}\n\nexport interface OrderResponse {\n merchantId: string;\n id: string;\n shortId: string;\n status: OrderStatus;\n customer: Customer;\n delivery: Delivery;\n preparationTime: number;\n observation: string;\n items: Product[];\n subtotal: number;\n deliveryFee: number;\n total: number;\n payments: PaymentOrder[];\n createdAt: string;\n canceledAt: string;\n confirmedAt: string;\n dispatchedAt: string;\n readyAt: string;\n updatedAt: string;\n cancellation: {\n origin: string;\n reason: string;\n };\n rating: Rating;\n}\n\n/**\n * State type\n * @data\n */\nexport interface OrderState {\n merchantId: string;\n customer: Customer;\n delivery: Delivery;\n observation: string;\n items: Product[];\n subtotal: number;\n deliveryFee: number;\n total: number;\n payments: Payment[];\n}\n\nexport interface Rating {\n rating: number;\n comment: string;\n createdAt: string;\n}\nexport interface PaymentOrder {\n code: string;\n description: string;\n prepaid: boolean;\n value: number;\n changeFor: number;\n installments: number;\n cardTransaction: {\n authorizerMessage: string;\n customerReceipt: string;\n merchantReceipt: string;\n authorizerId: string;\n acquirerId: string;\n acquirerName: string;\n authorizerDate: string;\n authorizationNumber: string;\n esitefUsn: string;\n sitefUsn: string;\n hostUsn: string;\n paymentType: string;\n issuer: string;\n isCanceled: boolean;\n cancellationCustomerReceipt: string;\n cancellationMerchantReceipt: string;\n };\n pixTransaction: {\n status: string;\n amount: number;\n dueDate: Date;\n qrCodeImage: string;\n qrCodeLink: string;\n paidReceipt: string;\n paidAt: Date;\n refundReceipt: string;\n refundAt: Date;\n };\n}\n\nexport interface Segment {\n code: string;\n iconPath: string;\n name: string;\n}\n\nexport interface Avatar {\n path: string;\n}\n","import { v4 as uuidv4 } from 'uuid';\n\nexport const APPLICATION_ID = uuidv4();\n\nlet merchantID = '';\n\nexport const getGlobalMerchantId = () => {\n return merchantID;\n};\n\nexport const setGlobalMerchantId = (id: string) => {\n merchantID = id;\n};\n","/* eslint-disable consistent-return */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable arrow-body-style */\n/* eslint-disable spaced-comment */\nimport axios from 'axios';\nimport { environment } from '../environment/environment';\nimport { OrderState } from '../store/ducks/order/types';\nimport { Customer } from './types';\nimport { getTokenJwt, saveTokenJwt } from './functions';\n\nimport { LocalStorageName } from '../utils/Utils';\n\nimport { APPLICATION_ID } from '../shared/defs';\n\nexport const api = axios.create({\n baseURL: environment.REACT_APP_API_URL,\n});\n\nexport const geocode = axios.create({\n baseURL: environment.REACT_APP_GEOCODE_URL,\n});\n\nexport const jwtRequest = async () => {\n const url = `${environment.REACT_APP_API_URL}/auth/token`;\n await axios({\n url,\n method: 'POST',\n headers: environment.headers,\n data: {\n username: environment.REACT_APP_API_USERNAME,\n password: environment.REACT_APP_API_PASSWORD,\n },\n })\n .then(res => {\n const token = res?.data.token;\n saveTokenJwt(token);\n // window.dispatchEvent(new Event('storage'));\n window.dispatchEvent(\n new StorageEvent('storage', {\n key: `${LocalStorageName}token:${APPLICATION_ID}`,\n newValue: token,\n }),\n );\n })\n .catch(err => {\n console.log('JWT ERR: ', err);\n });\n};\n\nexport const getSettings = async () => {\n const url = `${environment.REACT_APP_API_URL}/settings`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error settings att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getMerchantList = async () => {\n const url = `${environment.REACT_APP_API_URL}/merchants?includeAll=true&$orderby=status desc`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getMerchantList att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getMerchant = async (URI: string) => {\n \n // if(URI === 'undefined' || URI === undefined) {\n // window.location.href = '/';\n // }\n \n const url = `${environment.REACT_APP_API_URL}/merchants/${URI ||\n window.location.pathname.substring(1).split('/')[0]}`;\n\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n // accept: 'application/json',\n // Authorization:\n // 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1bmlxdWVfbmFtZSI6Im1ldWNhcnJpbmhvLmFwcCIsImVtYWlsIjoicmlsZG8ubWFzdGVyQGdtYWlsLmNvbSIsImp0aSI6ImUyNmQzZGRlLWZhOWYtNDkyZi05NTdkLTk4NGU1N2RiNWY4ZiIsInR5cCI6IkJlYXJlciIsInJvbGUiOiJBUFAiLCJzdWIiOiI3M2VjZGI2Ny05M2Y5LTQ0ZDgtOWRhNi01NmQyMDdmODdlMTkiLCJpYXQiOjE2MzAwMTAzMTksImV4cCI6MTYzMDAxMDkxOSwiaXNzIjoiQVBJIiwiYXVkIjoiKi5tZXVjYXJyaW5oby5kZWxpdmVyeSJ9.2Tu7ELTKUntP6IbMwshB_8xqVxQlhOqqejLL6h1CsBY',\n },\n })\n .then(res => {\n return res.data;\n })\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getMerchant att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getAddressFromAPI = async (cep: string) => {\n const url = `${environment.REACT_APP_API_URL}/services/cep/${cep.replace(\n '-',\n '',\n )}`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getAddress att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getActualDay = () => {\n const daysOfWeek = [\n 'Domingo',\n 'Segunda',\n 'Terça',\n 'Quarta',\n 'Quinta',\n 'Sexta',\n 'Sábado',\n ];\n const now = new Date().getDay();\n return daysOfWeek[now];\n};\n\nexport const getMerchantCategories = async (URI: string) => {\n const jwt = await getTokenJwt(true);\n const url = `${environment.REACT_APP_API_URL}/categories?merchantUrlCode=${URI}&availability=AVAILABLE&includeProducts=true&limitProducts=500`;\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => {\n return res.data;\n })\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getCategories att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getMerchantProducts = async (URI: string) => {\n return [];\n // const jwt = await getTokenJwt(true);\n // const url = `${environment.REACT_APP_API_URL}/products?merchantUrlCode=${URI}&availability=AVAILABLE`;\n // const result = await axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `Bearer ${jwt}`,\n // },\n // })\n // .then(res => {\n // return res.data;\n // })\n // .catch(err => {\n // console.log(err.message);\n // // if (err.response.status === 401) {\n // // removeLocalStorage('token');\n\n // // console.log('Token expired! Refreshing...');\n // // return jwtRequest().then(async jwtNew =>\n // // axios({\n // // url,\n // // method: 'GET',\n // // headers: {\n // // ...environment.headers,\n // // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // // },\n // // })\n // // .then(response => response.data)\n // // .catch(error => {\n // // console.log('Error getProducts att Token: ', error.response);\n // // }),\n // // );\n // // }\n // return false;\n // });\n // return result;\n};\n\nexport const getShoppingByUrlCode = async (URL: string) => {\n const jwt = await getTokenJwt(true);\n const url = `${environment.REACT_APP_API_URL}/shops/${URL}`;\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getProducts att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\ninterface shopMerchantsResquestTypes {\n id: string;\n pageNumber: number;\n pageSize: number;\n find: string;\n city: string;\n state: string;\n segmentCode: string;\n}\n\nexport const getShoppingMerchants = async ({\n id = '',\n find = '',\n city = '',\n pageSize = 9,\n segmentCode = '',\n}: any) => {\n const jwt = await getTokenJwt(true);\n const url = `${environment.REACT_APP_API_URL}/shops/${id}/merchants?&find=${find}&pageSize=${pageSize}&city=${city}&segmentCode=${segmentCode}`;\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getProducts att Token: ', error.response);\n // }),\n // );\n // }\n return err;\n });\n return result;\n};\n\nexport const getVariationItems = async (\n variationId: string,\n itemId: string,\n) => {\n const jwt = await getTokenJwt(true);\n const url = `${environment.REACT_APP_API_URL}/variations/${variationId}/items/${itemId}`;\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log(\n // 'Error getVariationItems att Token: ',\n // error.response,\n // );\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getProductVariations = async (productId: string) => {\n const jwt = await getTokenJwt(true);\n const url = `${environment.REACT_APP_API_URL}/products/${productId}/variations`;\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log(\n // 'Error getProductVariations att Token: ',\n // error.response,\n // );\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getProductVariationById = async (\n productId: string,\n variationId: string,\n) => {\n const jwt = await getTokenJwt(true);\n const url = `${environment.REACT_APP_API_URL}/products/${productId}/variations/${variationId}`;\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log(\n // 'Error getProductVariationById att Token: ',\n // error.response,\n // );\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getOrder = async (orderId: string) => {\n const jwt = await getTokenJwt(true);\n const url = `${environment.REACT_APP_API_URL}/orders/${orderId}`;\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getOrder att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const sendOrder = async (data: OrderState) => {\n const url = `${environment.REACT_APP_API_URL}/orders`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'POST',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n data,\n })\n .then(res => {\n // console.log('ORder ok: ', res.data);\n return res.data;\n })\n .catch(err => {\n console.log('Error of order: ', err.response);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'POST',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // data,\n // })\n // .then(response => {\n // console.log('Success send order: ', response.data);\n // return response.data;\n // })\n // .catch(error => {\n // console.log('Error sendOrder att Token: ', error.response);\n // }),\n // );\n // }\n return err.response;\n });\n return result;\n};\n\nexport const registerCustomer = async (data: Customer) => {\n const url = `${environment.REACT_APP_API_URL}/customers`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'POST',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n data,\n })\n .then(res => {\n return res;\n })\n .catch(err => {\n console.log('Error of customer: ', err.response);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'POST',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // data,\n // })\n // .then(response => {\n // console.log('Success send customer: ', response.data);\n // return response;\n // })\n // .catch(error => {\n // console.log('Error sendCustomer att Token: ', error.response);\n // }),\n // );\n // }\n return err.response;\n });\n return result;\n};\n\nexport const getStates = async () => {\n const url = `${environment.REACT_APP_API_URL}/services/states`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getStates att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getCities = async (state: string) => {\n const url = `${environment.REACT_APP_API_URL}/services/cities/${state}`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getCities att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getAllMerchants = async (\n pageNumber = 1,\n pageSize = 9,\n find = '',\n city = '',\n state = '',\n segmentCode = '',\n) => {\n const url = `${environment.REACT_APP_API_URL}/merchants?pageNumber=${pageNumber}&pageSize=${pageSize}&find=${find}&city=${city}&state=${state}&segmentCode=${segmentCode}&includeAll=true&onlyActive=true&onlyMarketplace=true`;\n const jwt = await getTokenJwt(true);\n let result;\n try {\n result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n }).then(res => {\n return res;\n });\n return result;\n } catch (e) { // @ts-ignore\n console.log(e.message); // @ts-ignore\n const res = { data: [], headers: e?.response?.headers };\n // if (e.response.status === 401) {\n // removeLocalStorage('token');\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => {\n // return response;\n // })\n // .catch(error => {\n // console.log('Error getAllMerchants att Token: ', error.response);\n // return { data: [], headers: error.response.headers };\n // }),\n // );\n // }\n return res;\n }\n};\n\nexport const getAllShoppings = async (\n pageNumber = 1,\n pageSize = 9,\n find = '',\n) => {\n const url = `${environment.REACT_APP_API_URL}/shops?pageNumber=${pageNumber}&pageSize=${pageSize}&find=${find}&includeAll=true&onlyActive=true&onlyMarketplace=true`;\n const jwt: string = await getTokenJwt(true);\n let result;\n try {\n result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n }).then(res => {\n return res;\n });\n return result;\n } catch (e) { // @ts-ignore\n console.log(e.message); // @ts-ignore\n // console.log(`catch: ${jwt}`);\n const res = { data: [], headers: e.response?.headers };\n // if (e.response.status === 401) {\n // removeLocalStorage('token');\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => {\n // return response;\n // })\n // .catch(error => {\n // console.log('Error getAllMerchants att Token: ', error.response);\n // return { data: [], headers: error.response.headers };\n // }),\n // );\n // }\n return res;\n }\n};\n\nexport const getSegments = async () => {\n const url = `${environment.REACT_APP_API_URL}/settings/market/segments`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => {\n return res.data;\n })\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getSegments att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getRatings = async (id: string) => {\n const url = `${environment.REACT_APP_API_URL}/orders/ratings?merchantId=${id}`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getRatings att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const getFavorite = async (\n customerId: string | undefined,\n productId: string,\n) => {\n const url = `${environment.REACT_APP_API_URL}/customers/${customerId}/favorites/products/${productId}`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.status)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getFavorite att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n\nexport const setFavorite = async (\n customerId: string | undefined,\n productId: string,\n) => {\n const url = `${environment.REACT_APP_API_URL}/customers/${customerId}/favorites/products/${productId}`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'PATCH',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.status)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error setFavorite att Token: ', error.response);\n // }),\n // );\n // }\n return err.status;\n });\n return result;\n};\n\nexport const getAvatars = async () => {\n const url = `${environment.REACT_APP_API_URL}/settings/avatars`;\n const jwt = await getTokenJwt(true);\n const result = await axios({\n url,\n method: 'GET',\n headers: {\n ...environment.headers,\n Authorization: `Bearer ${jwt}`,\n },\n })\n .then(res => res.data)\n .catch(err => {\n console.log(err.message);\n // if (err.response.status === 401) {\n // removeLocalStorage('token');\n\n // console.log('Token expired! Refreshing...');\n // return jwtRequest().then(async jwtNew =>\n // axios({\n // url,\n // method: 'GET',\n // headers: {\n // ...environment.headers,\n // Authorization: `${jwtNew.data.tokenType} ${jwtNew.data.token}`,\n // },\n // })\n // .then(response => response.data)\n // .catch(error => {\n // console.log('Error getAvatars att Token: ', error.response);\n // }),\n // );\n // }\n return false;\n });\n return result;\n};\n","/* eslint-disable no-useless-escape */\nimport { toast } from 'react-toastify';\n\nexport const phoneValidator = () => {\n let phone = (document.getElementById('phone') as HTMLInputElement).value;\n const phoneValid = /^(([0-9]{3}.[0-9]{3}.[0-9]{3}-[0-9]{2}))$/;\n\n if (phoneValid.test(phone) === false) {\n phone = phone.replace(/\\D/g, ''); // Remove tudo o que não é dígito\n\n if (phone.length === 11) {\n toast.success('Telefone válido!', {\n autoClose: 2000,\n });\n } else {\n toast.error('Telefone inválido', {\n autoClose: 2000,\n });\n }\n }\n};\n\nexport const removeSpecialChars = (specialChar: string) => {\n let newString = specialChar;\n newString = newString.replace(/[|&;$%@\"<>()+,/]/g, '');\n newString = newString.replace(/_+/, '_');\n newString = newString.replace(/\\s/g, '');\n newString = newString.normalize('NFD').replace(/[\\u0300-\\u036f]/g, '');\n newString = newString.toLowerCase();\n return newString;\n};\n\nexport const currencyMask = (value: string) => {\n let v = value.replace(/\\D/g, '');\n v = `${(+v / 100).toFixed(2)}`;\n v = v.replace('.', ',');\n v = v.replace(/(\\d)(\\d{3})(\\d{3}),/g, '$1.$2.$3,');\n v = v.replace(/(\\d)(\\d{3}),/g, '$1.$2,');\n return v;\n};\n\nexport const currencyConvert = (value: string) => {\n if (value === '') {\n return '';\n }\n let v = value.replace(/\\D/g, '');\n v = v.replace('.', ',');\n v = v.replace(/(\\d)(\\d{3})(\\d{3}),/g, '$1.$2.$3,');\n v = v.replace(/(\\d)(\\d{3}),/g, '$1.$2,');\n v = `${(+v / 100).toFixed(3)}`;\n return v;\n};\n\nexport const formatDate = (date: string) => {\n const formattedDate = date.split('-');\n // const formattedHour = formattedDate[2].substring(3).split(':');\n const dia = formattedDate[2].substring(0, 2);\n const mes = formattedDate[1];\n const ano = formattedDate[0];\n // const hora = formattedHour[0];\n // const minutos = formattedHour[1];\n return `${dia}/${mes}/${ano}`;\n // return `${dia}/${mes}/${ano} às ${hora}:${minutos}`;\n};\n\nexport const removeEspecialCharacteres = (value: string) =>\n value.replace(/[-'`~!@#$%^&*()_|+=?;:'\"¨,.<>\\{\\}\\[\\]\\\\\\/]/gi, '');\n\nexport const convertDateFusoBr = (date: string) => {\n const d = new Date(date);\n const curDate = new Date(d.valueOf() - d.getTimezoneOffset() * 60000);\n return curDate.toString();\n};\n","// import {Neighborhood} from ../neighborhoods/types\nimport { Address } from '../order/types';\n/**\n * Action types\n * @LOAD_MERCHANT load merchant data to redux\n * @HANDLE_EXIST if no exist merchant\n * @LOAD_CATEGORIES load categories data to redux\n */\nexport enum MerchantsTypes {\n LOAD_MERCHANT = '@merchants/LOAD_MERCHANT',\n HANDLE_EXIST = '@merchants/HANDLE_EXIST',\n LOAD_CATEGORIES = '@merchants/LOAD_CATEGORIES',\n CLEAR_MERCHANT = '@merchants/CLEAR_MERCHANT',\n UPDATE_MERCHANT_AVAILABILITY = '@merchants/UPDATE_MERCHANT_AVAILABILITY',\n UPDATE_MERCHANT_CATEGORY_AVAILABILITY = '@merchants/UPDATE_MERCHANT_CATEGORY_AVAILABILITY',\n UPDATE_MERCHANT_PRODUCT_AVAILABILITY = '@merchants/UPDATE_MERCHANT_PRODUCT_AVAILABILITY',\n UPDATE_MERCHANT_PRODUCT = '@merchants/UPDATE_MERCHANT_PRODUCT',\n UPDATE_MERCHANT_PRODUCT_CURRENT_STOCK = '@merchants/UPDATE_MERCHANT_PRODUCT_CURRENT_STOCK',\n}\n\n/**\n * Data types\n * @id : id of merchant\n * @urlCode : url of merchant\n * @status : status of avaiability\n * @name : name of merchant\n * @cnpj : cnpj of merchant\n * @phoneDdd : ddd of phone\n * @phoneNumber : number of phone\n * @email : email of merchant\n * @logoPath : path of logo\n * @bannerPath : path of banner\n * @about : about merchant\n * @whatsApp : whatsapp number\n * @instagram : instagram user\n * @facebook : facebook user\n * @active : status of operation\n * @deliveryTimeMin : min time of delivery\n * @deliveryTimeMax : max time of delivery\n * @deliveryFeeMin : min value of fee\n */\n\nexport interface Merchant {\n id: string;\n urlCode: string;\n status: string;\n name: string;\n cnpj: string;\n phoneDdd: string;\n phoneNumber: string;\n email: string;\n logoPath: string;\n bannerPath: string;\n about: string;\n whatsappDdd: string;\n whatsappNumber: string;\n instagram: string;\n facebook: string;\n active: boolean;\n deliveryTimeMin: number;\n deliveryTimeMax: number;\n deliveryFeeMin: number;\n orderCpfIsRequired: boolean;\n ratings: {\n average: number,\n number: number,\n type: string\n };\n settings: {\n deliveryTimeMin: number;\n deliveryTimeMax: number;\n deliveryFeeMin: number;\n softcomShip: {\n active: boolean;\n clientId: string;\n clientSecret: string;\n };\n };\n}\n\n/**\n * Data types\n * @code : code of segment\n * @name : name of market segment\n * */\n\nexport interface MarketSegment {\n code: string;\n name: string;\n}\n\n/**\n * Data types\n * @id : id of availability\n * @weekday : day of week\n * @hourStart : initial hour\n * @hourEnd : end hour\n * */\n\nexport interface Availability {\n id: string;\n weekday: string;\n hourStart: string;\n hourEnd: string;\n}\n\nexport interface Availabilities {\n avaiability: Availability[];\n}\n\n/**\n * Data types\n * @id : id of delivery method\n * @method : method of delivery\n * @description : description of delivery method\n * @instructions : instructions of delivery method\n * @orderMinimumValue : minimum value of order\n * */\n\nexport interface DeliveryMethod {\n id: string;\n method: string;\n description: string;\n instructions?: string;\n orderMinimumValue: number;\n}\n\nexport interface DeliveryMethods {\n deliveryMethods: DeliveryMethod[];\n}\n\n/**\n * Data types\n * @id : id of delivery area\n * @neighborhood : name of neighborhood\n * @deliveryFee : cost of delivery for this neighborhood\n * @deliveryTime : aproach time in minutes to delivery\n * */\n\nexport interface DeliveryArea {\n id: string;\n neighborhood: string;\n deliveryFee: number;\n deliveryTime: number;\n city: string;\n state: string;\n}\n\nexport interface DeliveryAreas {\n deliveryAreas: DeliveryArea[];\n}\n\n/**\n * Data types\n * @id : id of payment type\n * @code : code of payment type\n * @description : description of payment card\n * @prepaid : online payment or not\n * @iconPath : url of icon payment\n * @active : state of payment type\n * */\n\nexport interface Payment {\n id: string;\n code: string;\n description: string;\n prepaid: boolean;\n iconPath: null;\n active: boolean;\n}\n\nexport interface Payments {\n payments: Payment[];\n}\n\nexport interface Image {\n description: null;\n path: string;\n default?: boolean;\n}\n\nexport interface Promotion {\n value: number;\n validity: string;\n originalValue: number;\n percent: number;\n}\n\nexport interface VariationItem {\n variationId: string;\n id: string;\n code: string;\n name: string;\n description: string;\n value: number;\n colorHex: string;\n availability: string;\n priority: number;\n stock: {\n active: boolean;\n current: number;\n min: number;\n };\n}\n\nexport interface Variation {\n productId: string;\n id: string;\n name: string;\n required: boolean;\n itemsMin: number;\n itemsMax: number;\n colorHex: string;\n priority: number;\n items: VariationItem[];\n availability: string;\n}\n\nexport interface Product {\n merchantId: string;\n categoryId: string;\n id: string;\n code: string;\n ean: null;\n priority: number;\n name: string;\n description: string;\n price: number;\n availability: string;\n measure: string;\n merchantSuggestion: boolean;\n isPromotion: boolean;\n promotion: Promotion;\n stock: Stock;\n images: Image[];\n variationsGrid: boolean;\n variations: Variation[];\n imagePath?: string;\n}\n\nexport interface Stock {\n active: boolean;\n current: number;\n min: number;\n orderMax: number;\n}\n\nexport interface Category {\n merchantId: string;\n id: string;\n code: null;\n name: string;\n priority: 0;\n availability: string;\n products: Product[];\n}\n\n/**\n * State type\n * @data : the Address\n */\nexport interface MerchantsState {\n id: string;\n urlCode: string;\n status: string;\n name: string;\n cnpj: string;\n phoneDdd: string;\n phoneNumber: string;\n email: string;\n logoPath: string;\n bannerPath: string;\n about: string;\n whatsappDdd: string;\n whatsappNumber: string;\n instagram: string;\n facebook: string;\n active: boolean;\n deliveryTimeMin: number;\n deliveryTimeMax: number;\n deliveryFeeMin: number;\n address: Address;\n marketSegment?: MarketSegment;\n marketSegmentName?: MarketSegment;\n marketplace: boolean;\n ratings: {\n average: number,\n number: number,\n type: string\n };\n settings: {\n deliveryTimeMin: number;\n deliveryTimeMax: number;\n deliveryFeeMin: number;\n softcomShip: {\n active: boolean;\n clientId: string;\n clientSecret: string;\n };\n };\n showProductUnavailableInApp: boolean;\n availability: Availability[];\n deliveryMethods: DeliveryMethod[];\n deliveryAreas: DeliveryArea[];\n payments: Payment[];\n loaded: boolean;\n exist: boolean;\n categories: Category[];\n paymentInstructions: string;\n orderCpfIsRequired: boolean;\n cardInstallmentsMax: number;\n cardInstallmentsMinValue: number;\n sitefMerchantId: null;\n sitefMerchantKey: null;\n softcomCode: string;\n integrationApp: boolean;\n}\n","const prod = {\n prod: true,\n url: {\n PATH_URL: 'https://meucarrinho.delivery',\n },\n};\nconst dev = {\n prod: false,\n url: {\n PATH_URL: 'https://dev.meucarrinho.delivery',\n },\n};\n\nexport const config =\n window.location.href.indexOf('dev') !== -1 ||\n window.location.href.indexOf('localhost') !== -1\n ? dev\n : prod;\nexport const states = [\n 'AC',\n 'AL',\n 'AP',\n 'AM',\n 'BA',\n 'CE',\n 'DF',\n 'ES',\n 'GO',\n 'MA',\n 'MT',\n 'MS',\n 'MG',\n 'PA',\n 'PB',\n 'PR',\n 'PE',\n 'PI',\n 'RJ',\n 'RN',\n 'RS',\n 'RO',\n 'RR',\n 'SC',\n 'SP',\n 'SE',\n 'TO',\n];\n\nexport const LocalStorageName = '@MeuCarrinhoApp:';\n\nexport const WeekDays = [\n { id: 1, weekday: 'Segunda' },\n { id: 2, weekday: 'Terça' },\n { id: 3, weekday: 'Quarta' },\n { id: 4, weekday: 'Quinta' },\n { id: 5, weekday: 'Sexta' },\n { id: 6, weekday: 'Sábado' },\n { id: 7, weekday: 'Domingo' },\n];\n\nexport const delay = (amount = 3000) =>\n new Promise(resolve => {\n setTimeout(resolve, amount);\n });\n","/* eslint-disable no-else-return */\n/* eslint-disable react/react-in-jsx-scope */\n/* eslint-disable operator-assignment */\n/* eslint-disable import/order */\n/* eslint-disable consistent-return */\n/* eslint-disable array-callback-return */\n/* eslint-disable prefer-const */\n/* eslint-disable no-undef */\n/* eslint-disable no-restricted-syntax */\n/* eslint-disable spaced-comment */\n/* eslint-disable object-shorthand */\n/* eslint-disable arrow-body-style */\n/* eslint-disable no-param-reassign */\n/* eslint-disable no-return-assign */\nimport * as CryptoJS from 'crypto-js';\nimport {\n VariationItem,\n Variation,\n DeliveryArea,\n MerchantsState,\n Product,\n Category,\n} from '../store/ducks/merchants/types';\nimport {\n Variation as VariationOrder,\n Product as ProductOrder,\n Stock,\n} from '../store/ducks/order/types';\nimport { removeSpecialChars } from './mask';\nimport { checkVariations } from './validation';\nimport { IDataApp, Month } from './types';\nimport { LocalStorageName } from '../utils/Utils';\nimport { jwtRequest } from './api';\n\nconst secretKey = process.env.REACT_APP_SECRET_KEY as string;\n\nexport const checkItem = (\n list: VariationOrder[],\n variationItem: VariationItem,\n) => {\n const temp: VariationOrder[] = list.filter(\n (variationOrder: VariationOrder) =>\n variationOrder.variationItemId === variationItem.id,\n );\n\n return temp.length > 0;\n};\n\nexport const getVariationItemQuantity = (\n list: VariationOrder[],\n variationItem: VariationItem,\n) => {\n const temp: VariationOrder[] = list.filter(\n (variationOrder: VariationOrder) =>\n variationOrder.variationItemId === variationItem.id,\n );\n if (temp.length > 0) {\n // console.log('temp', temp);\n return temp[0].quantity;\n }\n return 0;\n};\n\nexport const verifyVariationRange = (\n list: VariationOrder[],\n variation: Variation,\n variationItem: VariationItem,\n) => {\n const temp: VariationOrder[] = list.filter(\n // eslint-disable-next-line arrow-body-style\n (variationOrder: VariationOrder) => {\n return variationOrder.variationId === variationItem.variationId;\n },\n );\n // Encontrados itens inseridos\n if (temp.length > 0) {\n const compare = temp.reduce(\n (sum: number, current: VariationOrder) => sum + current.quantity,\n 0,\n );\n // Verificação da quantidade máxima de itens escolhidos\n if (compare < variation.itemsMax) {\n return true;\n }\n return false;\n }\n return true;\n};\n\nexport const handleVariationItemQuantity = (\n list: VariationOrder[],\n variation: Variation,\n variationItem: VariationItem,\n action: number,\n variationsGrid: boolean,\n) => {\n const newList: VariationOrder[] = list;\n // Verificar se o item existe na lista\n const temp: VariationOrder[] = list.filter(\n (variationOrder: VariationOrder) =>\n variationOrder.variationItemId === variationItem.id,\n );\n // console.log('list', list);\n // console.log('variationItem', variationItem);\n // console.log('action', action);\n if (temp.length > 0) {\n // Item existe\n const index = list.indexOf(temp[0]);\n if (action === 0) {\n // subtrair item\n if (temp[0].quantity > 1) {\n newList[index].quantity -= 1;\n } else {\n // remover item da lista\n newList.splice(index, 1);\n }\n }\n if (action === 1) {\n // adicionar item\n newList[index].quantity += 1;\n }\n // console.log('item existe', newList);\n } else {\n // Item não existe\n newList.push({\n variationId: variationItem.variationId,\n variationName: variation.name,\n variationItemId: variationItem.id,\n variationItemName: variationItem.name,\n quantity: 1,\n value: variationItem.value,\n variationsGrid,\n variationItemAvailability: variationItem.availability,\n variationItemStockActive: variationItem.stock.active,\n variationItemStockCurrent: variationItem.stock.current,\n variationItemsMax: variation.itemsMax,\n });\n // console.log('item não existente', newList);\n }\n // console.log('newlist final', newList);\n\n return newList;\n};\n\nexport const handleSingleItem = (\n list: VariationOrder[],\n variation: Variation,\n variationItem: VariationItem,\n variationsGrid: boolean,\n) => {\n const newList: VariationOrder[] = list;\n // Verificar se o item da variação existe na lista\n const temp: VariationOrder[] = list.filter(\n (variationOrder: VariationOrder) =>\n variationOrder.variationItemId === variationItem.id,\n );\n if (temp.length > 0) {\n // console.log('Existe item da variação na lista, removendo da lista');\n const index = list.indexOf(temp[0]);\n newList.splice(index, 1);\n } else {\n // Verificar se existe algum item daquela variação na lista\n //console.log('Verificar se existe algum item daquela variação na lista');\n const checkExistVariationItemOnList = newList.filter(\n (result: VariationOrder) =>\n result.variationId === variationItem.variationId,\n );\n //console.log(checkExistVariationItemOnList);\n if (checkExistVariationItemOnList.length > 0) {\n // Existe algum item da variação dentro da lista\n // console.log(\n // 'Existe item da variação na lista, removendo item e atualizando a lista',\n // );\n const index = newList.indexOf(checkExistVariationItemOnList[0]);\n newList.splice(index, 1);\n newList.push({\n variationId: variationItem.variationId,\n variationName: variation.name,\n variationItemId: variationItem.id,\n variationItemName: variationItem.name,\n quantity: 1,\n value: variationItem.value,\n variationsGrid,\n variationItemAvailability: variationItem.availability,\n variationItemStockActive: variationItem.stock.active,\n variationItemStockCurrent: variationItem.stock.current,\n variationItemsMax: variation.itemsMax,\n });\n } else {\n // Não existe item da variação dentro da lista\n //console.log('Não existe item daquela variação na lista');\n newList.push({\n variationId: variationItem.variationId,\n variationName: variation.name,\n variationItemId: variationItem.id,\n variationItemName: variationItem.name,\n quantity: 1,\n value: variationItem.value,\n variationsGrid,\n variationItemAvailability: variationItem.availability,\n variationItemStockActive: variationItem.stock.active,\n variationItemStockCurrent: variationItem.stock.current,\n variationItemsMax: variation.itemsMax,\n });\n }\n }\n //console.log('Lista de variações: ', newList);\n return newList;\n};\n\nexport const removeSingleItem = (\n list: VariationOrder[],\n variation: Variation,\n variationItem: VariationItem,\n) => {\n console.log('remover item único');\n const newList: VariationOrder[] = list;\n // Verificar se o item existe na lista\n const temp: VariationOrder[] = list.filter(\n // eslint-disable-next-line arrow-body-style\n (variationItemTemp: VariationOrder) => {\n return variationItemTemp.variationItemId === variationItem.variationId;\n },\n );\n\n const index = list.indexOf(temp[0]);\n\n return newList.splice(index, 1);\n};\n\nexport const checkRequired = (\n list: VariationOrder[],\n variations: Variation[],\n variationGrid: boolean,\n) => {\n const result: boolean[] = [];\n let throwError = 0;\n if (variationGrid) {\n // Tipo de grade com variação\n if (list.length > 0) {\n // Ao menos um item foi selecionado\n result.push(true);\n return result;\n }\n // Nenhum item selecionado\n const requiredArray: string[] = [];\n variations.map((variationTemp: Variation) => {\n if (variationTemp.items.length > 0) {\n requiredArray.push(variationTemp.name);\n }\n return true;\n });\n if (variations.length === 0) {\n result.push(true);\n return result;\n }\n checkVariations('vazio', requiredArray);\n result.push(false);\n return result;\n }\n // Varrer lista de variações e detectar itens obrigatórios\n const requiredVariationsList = variations.filter(\n (variation: Variation) => variation.required === true,\n );\n // console.log('Lista de variações obrigatórias:', requiredVariationsList);\n\n if (requiredVariationsList.length > 0) {\n // Possui variações obrigatórias\n const requiredVariationsItemsList: VariationOrder[] = [];\n // Varrer variações e encontrar as variações que são necessárias\n list.map((variationOrder: VariationOrder) => {\n requiredVariationsList.filter((variationTemp: Variation) => {\n if (variationTemp.id === variationOrder.variationId) {\n requiredVariationsItemsList.push({ ...variationOrder });\n }\n return true;\n });\n return true;\n });\n const comparator = requiredVariationsItemsList.reduce(\n (agroup: string[], current: VariationOrder) => {\n if (\n agroup.length === 0 ||\n agroup.filter((i: string) => i === current.variationId).length === 0\n ) {\n agroup.push(current.variationId);\n }\n return agroup;\n },\n [],\n );\n if (comparator.length >= requiredVariationsList.length) {\n // Verificar se respeita o min e max de itens\n requiredVariationsItemsList.map((variationOrderItem: VariationOrder) => {\n // Agrupa itens da mesma variação\n const agroupItems = requiredVariationsItemsList.filter(\n (variationOrderItemTemp: VariationOrder) =>\n variationOrderItemTemp.variationId ===\n variationOrderItem.variationId,\n );\n //console.log('Itens da mesma variação:', agroupItems);\n if (agroupItems.length > 1) {\n // Mais de um item da variação\n //console.log('Mais de um item da variação encontrado');\n const quantitySum = agroupItems.reduce(\n (sum: number, current: VariationOrder) => sum + current.quantity,\n 0,\n );\n // Buscar itemsMin e itemsMax da variação à qual o variationItem pertence\n const variationData = variations.filter(\n (variationFiltered: Variation) =>\n variationFiltered.id === agroupItems[0].variationId,\n )[0];\n // console.log('variationData', variationData);\n // console.log('quantitySum', quantitySum);\n // console.log('variationData.itemsMin', variationData.itemsMin);\n\n if (quantitySum >= variationData.itemsMin) {\n // Quantidade mínima respeitada\n //console.log('Quantidade mínima respeitada - múltipla');\n result.push(true);\n // return result;\n } else {\n // Quantidade mínima não respeitada;\n console.log('Quantidade mínima NÃO respeitada - múltipla');\n if (throwError === 0) {\n throwError = 1;\n checkVariations('minimo', [variationData.name]);\n }\n result.push(false);\n // return result;\n }\n // return result;\n } else {\n // Nenhum item a mais de variação\n const variationData = variations.filter(\n (variationFiltered: Variation) =>\n variationFiltered.id === variationOrderItem.variationId,\n )[0];\n\n // console.log('variationData', variationData);\n // console.log('Item único da variação');\n if (variationOrderItem.quantity >= variationData.itemsMin) {\n // Quantidade mínima respeitada\n // console.log('Quantidade mínima respeitada única');\n result.push(true);\n // return result;\n } else {\n if (throwError === 0) {\n throwError = 1;\n checkVariations('minimo', [variationData.name]);\n }\n console.log('Quantidade mínima NÃO respeitada única');\n result.push(false);\n // return result;\n }\n }\n return true;\n });\n // return result;\n } else {\n const variationsError: Variation[] = [];\n requiredVariationsList.map((variation: Variation) => {\n const errorsTemp: VariationOrder[] = requiredVariationsItemsList.filter(\n (variationOrder: VariationOrder) =>\n variationOrder.variationId === variation.id,\n );\n if (errorsTemp.length === 0) {\n // Variação pendente\n variationsError.push(variation);\n }\n return variationsError;\n });\n // Lista de variações obrigatórias pendentes\n const requiredNames = requiredVariationsList.map(\n (variation: Variation) => variation.name,\n );\n\n if (variationsError.length > 0) {\n checkVariations(\n 'menor',\n variationsError.map((errorItem: Variation) => errorItem.name),\n );\n } else {\n checkVariations('menor', requiredNames);\n }\n result.push(false);\n //console.log('RESULTADO menor', result);\n // return result;\n }\n }\n return result;\n};\n// functions for login and logout\nexport const saveLocalStorage = (name: string, data: any) => {\n localStorage.setItem(`${LocalStorageName}${name}`, data);\n};\n\nexport const getLocalStorage = (name: string) =>\n localStorage.getItem(`${LocalStorageName}${name}`);\n\nexport const removeLocalStorage = (name: string) => {\n localStorage.removeItem(`${LocalStorageName}${name}`);\n};\n\n// functions for login and logout\nexport const saveSessionStorage = (name: string, data: any) => {\n sessionStorage.setItem(`${LocalStorageName}${name}`, data);\n};\n\nexport const getSessionStorage = (name: string) =>\n sessionStorage.getItem(`${LocalStorageName}${name}`);\n\nexport const removeSessionStorage = (name: string) => {\n sessionStorage.removeItem(`${LocalStorageName}${name}`);\n};\n\nexport const getTokenFromLocalStorage = () => {\n const token = getLocalStorage('token') || '';\n if (token) {\n const decryptedToken = decrypt(token);\n return decryptedToken;\n }\n return token;\n};\n\nexport const getTokenJwt = async (refresh?: boolean) => {\n const token: string = getTokenFromLocalStorage();\n if (!token) {\n await jwtRequest();\n return getTokenFromLocalStorage();\n }\n return token;\n};\n\nexport const saveTokenJwt = (token: string) => {\n const encryptedToken = encrypt(token);\n saveLocalStorage('token', encryptedToken);\n};\n\nexport const encrypt = (data: any, serializer = false) => {\n const serializedData = serializer ? JSON.stringify(data) : data;\n return CryptoJS.AES.encrypt(serializedData, secretKey);\n};\n\nexport const decrypt = (data: string, deserializer = false) => {\n const bytes = CryptoJS.AES.decrypt(data, secretKey);\n const decryptData = bytes.toString(CryptoJS.enc.Utf8);\n return deserializer ? JSON.parse(decryptData) : decryptData;\n};\n\nexport function returnOnlyNumber(value: string) {\n return value.replace(/\\D/g, '');\n}\n\nexport const sortByAlphabetically = (a: string, b: string) => {\n if (a < b) {\n return -1;\n }\n if (a > b) {\n return 1;\n }\n return 0;\n};\n\nexport const makeSubstring = (\n stringName: string,\n numberSize: number,\n): string => {\n const strLength = stringName.length;\n const subString = stringName.substring(0, numberSize);\n return `${subString}${strLength > numberSize ? '...' : ''}`;\n};\n\nexport function maskCep(cep: string) {\n return `${cep.substring(0, 5)}-${cep.substring(5)}`;\n}\n\nexport function formatMoney(number: any) {\n const numberSplit = number.toFixed(2).split('.');\n numberSplit[0] = numberSplit[0].split(/(?=(?:...)*$)/).join('.');\n return numberSplit.join(',');\n}\n\nexport function dateToString(dateStr: string) {\n const date = new Date(dateStr);\n const day =\n `${date.getDate()}`.length === 1\n ? `0${date.getDate()}`\n : `${date.getDate()}`;\n const month = Month[date.getMonth()];\n return `${day} de ${month}`;\n}\nexport const extractMinutes = (dateStr: Date) => {\n const date = new Date(dateStr);\n const minutes =\n `${date.getMinutes()}`.length === 1\n ? `0${date.getMinutes()}`\n : `${date.getMinutes()}`;\n return minutes;\n};\nexport const extractHour = (dateStr: Date) => {\n const date = new Date(dateStr);\n const hour =\n `${date.getHours()}`.length === 1\n ? `0${date.getHours()}`\n : `${date.getHours()}`;\n return hour;\n};\n\nexport const extractHourAndMinutes = (dateStr: string) => {\n const date = new Date(dateStr);\n const hour = extractHour(date);\n const minutes = extractMinutes(date);\n return `${hour}:${minutes}`;\n};\n// Todo deletar essa função posterior\nexport const getFilters = (\n filterSegment: string,\n searchBar: string,\n state: string,\n city: string,\n e: MerchantsState[],\n) => {\n let result: MerchantsState[] = [];\n if (filterSegment && searchBar && state) {\n if (city) {\n result = e.filter(\n (merchant: MerchantsState) =>\n merchant.name.toUpperCase().includes(searchBar.toUpperCase()) &&\n (merchant.deliveryAreas.filter(\n (deliveryArea: DeliveryArea) =>\n deliveryArea.state === state &&\n removeSpecialChars(deliveryArea.city) ===\n removeSpecialChars(city),\n ).length > 0 ||\n (merchant.address.state === state &&\n removeSpecialChars(merchant.address.city) ===\n removeSpecialChars(city))) &&\n merchant?.marketSegment?.code === filterSegment,\n );\n } else {\n result = e.filter(\n (merchant: MerchantsState) =>\n merchant.name.toUpperCase().includes(searchBar.toUpperCase()) &&\n (merchant.deliveryAreas.filter(\n (deliveryArea: DeliveryArea) => deliveryArea.state === state,\n ).length > 0 ||\n (merchant.address.state === state &&\n merchant?.marketSegment?.code === filterSegment)),\n );\n }\n } else if (!filterSegment && !searchBar && !state) {\n result = e;\n } else if (filterSegment && !searchBar && !state) {\n result = e.filter(\n (merchant: MerchantsState) =>\n merchant?.marketSegment?.code === filterSegment,\n );\n } else if (!filterSegment && searchBar && !state) {\n result = e.filter((merchant: MerchantsState) =>\n merchant.name.toUpperCase().includes(searchBar.toUpperCase()),\n );\n } else if (filterSegment && !searchBar && state) {\n if (city) {\n result = e.filter(\n (merchant: MerchantsState) =>\n (merchant.deliveryAreas.filter(\n (deliveryArea: DeliveryArea) =>\n deliveryArea.state === state &&\n removeSpecialChars(deliveryArea.city) ===\n removeSpecialChars(city),\n ).length > 0 ||\n (merchant.address.state === state &&\n removeSpecialChars(merchant.address.city) ===\n removeSpecialChars(city))) &&\n merchant?.marketSegment?.code === filterSegment,\n );\n } else {\n result = e.filter(\n (merchant: MerchantsState) =>\n merchant.name.toUpperCase().includes(searchBar.toUpperCase()) &&\n (merchant.deliveryAreas.filter(\n (deliveryArea: DeliveryArea) => deliveryArea.state === state,\n ).length > 0 ||\n (merchant.address.state === state &&\n merchant?.marketSegment?.code === filterSegment)),\n );\n }\n } else if (!filterSegment && !searchBar && state) {\n if (city) {\n result = e.filter(\n (merchant: MerchantsState) =>\n merchant.deliveryAreas.filter(\n (deliveryArea: DeliveryArea) =>\n deliveryArea.state === state &&\n removeSpecialChars(deliveryArea.city) ===\n removeSpecialChars(city),\n ).length > 0 ||\n (merchant.address.state === state &&\n removeSpecialChars(merchant.address.city) ===\n removeSpecialChars(city)),\n );\n } else {\n result = e.filter(\n (merchant: MerchantsState) =>\n merchant.name.toUpperCase().includes(searchBar.toUpperCase()) &&\n (merchant.deliveryAreas.filter(\n (deliveryArea: DeliveryArea) => deliveryArea.state === state,\n ).length > 0 ||\n (merchant.address.state === state &&\n merchant?.marketSegment?.code === filterSegment)),\n );\n }\n } else if (!filterSegment && searchBar && state) {\n if (city) {\n result = e.filter(\n (merchant: MerchantsState) =>\n merchant.name.toUpperCase().includes(searchBar.toUpperCase()) &&\n (merchant.deliveryAreas.filter(\n (deliveryArea: DeliveryArea) =>\n deliveryArea.state === state &&\n removeSpecialChars(deliveryArea.city) ===\n removeSpecialChars(city),\n ).length > 0 ||\n (merchant.address.state === state &&\n removeSpecialChars(merchant.address.city) ===\n removeSpecialChars(city))),\n );\n } else {\n result = e.filter(\n (merchant: MerchantsState) =>\n merchant.name.toUpperCase().includes(searchBar.toUpperCase()) &&\n (merchant.deliveryAreas.filter(\n (deliveryArea: DeliveryArea) => deliveryArea.state === state,\n ).length > 0 ||\n (merchant.address.state === state &&\n merchant?.marketSegment?.code === filterSegment)),\n );\n }\n } else if (filterSegment && searchBar && !state) {\n result = e.filter(\n (merchant: MerchantsState) =>\n merchant.name.toUpperCase().includes(searchBar.toUpperCase()) &&\n merchant?.marketSegment?.code === filterSegment,\n );\n }\n return result;\n};\nexport const extractDaysHoursAndMinutes = (min: number) => {\n const day = Math.floor(min / 1440) ? `${Math.floor(min / 1440)} dia(s) ` : '';\n const hours = Math.floor((min % 1440) / 60)\n ? `${Math.floor((min % 1440) / 60)}h `\n : '';\n const minutes = Math.floor((min % 1440) % 60)\n ? `${Math.floor((min % 1440) % 60)} min`\n : '';\n return day + hours + minutes;\n};\n\nexport const getProductsAvailabilityUpdated = (\n products: Product[],\n availability: string,\n) => {\n return products.map(product => ({ ...product, availability: availability }));\n};\n\nexport const getProductAvailabilityUpdated = (\n products: Product[],\n productId: string,\n availability: string,\n category: Category,\n) => {\n return products.map(product =>\n product.id === productId && category.availability === 'AVAILABLE'\n ? { ...product, availability: availability }\n : product,\n );\n};\n\nexport const getProductUpdated = (\n products: Product[],\n productId: string,\n updatedProduct: Product,\n) => {\n return products.map(product =>\n product.id === productId\n ? {\n ...product,\n name: updatedProduct.name,\n description: updatedProduct.description,\n price: updatedProduct.price,\n promotion: updatedProduct.promotion,\n isPromotion: updatedProduct.isPromotion,\n stock: {\n ...product.stock,\n active: updatedProduct.stock.active,\n orderMax: updatedProduct.stock.orderMax,\n },\n }\n : product,\n );\n};\n\nexport const getProductCurrentStockUpdated = (\n products: Product[],\n productId: string,\n stock: number,\n) => {\n const resp = products.map(product =>\n product.id === productId\n ? {\n ...product,\n stock: {\n ...product.stock,\n current: stock,\n },\n }\n : product,\n );\n return resp;\n};\n\nexport const updateOrderProductAvailability = (\n merchantUrl: string,\n productId: string,\n availability: string,\n) => {\n const storageProducts: ProductOrder[] = JSON.parse(\n localStorage.getItem(merchantUrl) || '[]',\n );\n const updatedProducts = storageProducts.map(item => {\n return item.productId === productId\n ? {\n ...item,\n availability: availability,\n }\n : item;\n });\n localStorage.setItem(merchantUrl, JSON.stringify(updatedProducts));\n};\n\nexport const getVariationItemsUpdated = (\n variations: VariationOrder[],\n variationId: string,\n variationItemId: string,\n availability: string,\n) => {\n const updatedVariations = variations.map(item =>\n item.variationId === variationId && item.variationItemId === variationItemId\n ? { ...item, variationItemAvailability: availability }\n : item,\n );\n return updatedVariations;\n};\n\nexport const updateOrderVariationItemAvailability = (\n merchantUrl: string,\n variationId: string,\n variationItemId: string,\n availability: string,\n) => {\n const storageProducts: ProductOrder[] = JSON.parse(\n localStorage.getItem(merchantUrl) || '[]',\n );\n const updatedProducts = storageProducts.map(item => {\n return {\n ...item,\n variations: getVariationItemsUpdated(\n item.variations,\n variationId,\n variationItemId,\n availability,\n ),\n };\n });\n localStorage.setItem(merchantUrl, JSON.stringify(updatedProducts));\n};\n\nexport const hasVariationItemPaused = (variations: VariationOrder[]) => {\n let hasItemPaused = false;\n if (variations && variations.length > 0) {\n for (const value of variations) {\n if (value.variationItemAvailability === 'UNAVAILABLE') {\n hasItemPaused = true;\n }\n }\n }\n return hasItemPaused;\n};\n\nexport const updateOrderProductCurrentStock = (\n merchantUrl: string,\n productId: string,\n stock: number,\n) => {\n const storageProducts: ProductOrder[] = JSON.parse(\n localStorage.getItem(merchantUrl) || '[]',\n );\n const updatedProducts = storageProducts.map(item => {\n return item.productId === productId\n ? {\n ...item,\n stock: {\n ...item.stock,\n current: stock,\n },\n }\n : item;\n });\n localStorage.setItem(merchantUrl, JSON.stringify(updatedProducts));\n};\nexport const updateOrderVariationItemStock = (\n merchantUrl: string,\n variationId: string,\n variationItemId: string,\n stock: number,\n) => {\n const storageProducts: ProductOrder[] = JSON.parse(\n localStorage.getItem(merchantUrl) || '[]',\n );\n const updatedProducts = storageProducts.map(item => {\n return {\n ...item,\n variations: getVariationItemsStockUpdated(\n item.variations,\n variationId,\n variationItemId,\n stock,\n ),\n };\n });\n localStorage.setItem(merchantUrl, JSON.stringify(updatedProducts));\n};\n\nexport const getVariationItemsStockUpdated = (\n variations: VariationOrder[],\n variationId: string,\n variationItemId: string,\n stock: number,\n) => {\n const updatedVariations = variations.map(item =>\n item.variationId === variationId && item.variationItemId === variationItemId\n ? { ...item, variationItemStockCurrent: stock }\n : item,\n );\n return updatedVariations;\n};\n\nexport const verifyVariationItemStock = (\n quantity: number,\n variationItem: VariationItem,\n) => {\n if (variationItem.stock.active) {\n if (quantity >= variationItem.stock.current) {\n return false;\n }\n return true;\n }\n return true;\n};\n\nexport const verifySumCartVariationItemStock = (\n itens: ProductOrder[],\n variationItem: VariationOrder\n) => {\n let sum = 0;\n for (const item of itens) {\n for (const variationCart of item.variations) {\n if (\n variationCart.variationItemStockActive &&\n variationCart.variationItemId === variationItem.variationItemId\n ) {\n sum = sum + variationCart.quantity * item.quantity;\n }\n }\n }\n return sum;\n};\n\nexport const verifyErrosInCart = (itens: ProductOrder[]) => {\n for (const item of itens) {\n if (item.availability === 'UNAVAILABLE') {\n return true;\n } else if (\n item.stock.active &&\n item.stock.orderMax !== 0 &&\n item.quantity > item.stock.orderMax\n ) {\n return true;\n } else if (item.stock.active && item.quantity > item.stock.current) {\n return true;\n } else if (item.variations.length > 0) {\n for (const variationCart of item.variations) {\n if (variationCart.variationItemAvailability === 'UNAVAILABLE') {\n return true;\n } else if (\n variationCart.variationItemStockActive &&\n verifySumCartVariationItemStock(itens, variationCart) >\n variationCart.variationItemStockCurrent\n ) {\n return true;\n }\n }\n }\n }\n return false;\n};\n\nexport const updateOrderProductStock = (\n merchantUrl: string,\n productId: string,\n stock: Stock,\n) => {\n const storageProducts: ProductOrder[] = JSON.parse(\n localStorage.getItem(merchantUrl) || '[]',\n );\n const updatedProducts = storageProducts.map(item => {\n return item.productId === productId\n ? {\n ...item,\n stock: {\n ...item.stock,\n orderMax: stock.orderMax,\n },\n }\n : item;\n });\n localStorage.setItem(merchantUrl, JSON.stringify(updatedProducts));\n};\n\nexport const buttonClickEvent = (querySelector: string) => {\n const btn = document.querySelector(querySelector) as HTMLButtonElement\n btn.focus()\n btn.click()\n}\n\nexport const inputElementFocus = (querySelector: string) => {\n const input = document.querySelector(querySelector) as HTMLInputElement\n input.focus()\n}\n\nexport const formatCEP = (cep: string) => {\n return cep.replace(/^(\\d{5})(\\d{3})/, '$1-$2');\n};\n\nexport const convertStateForUf = (state: string) => {\n let uf = '';\n switch(state){\n case 'Acre': uf = 'AC'; break;\n case 'Alagoas': uf = 'AL'; break;\n case 'Amapá': uf = 'AP'; break;\n case 'Amazonas': uf = 'AM'; break;\n case 'Bahia': uf = 'BA'; break;\n case 'Ceará': uf = 'CE'; break;\n case 'Distrito Federal': uf = 'DF'; break;\n case 'Espírito Santo': uf = 'ES'; break;\n case 'Goiás': uf = 'GO'; break;\n case 'Maranhão': uf = 'MA'; break;\n case 'Mato Grosso': uf = 'MT'; break;\n case 'Mato Grosso do Sul': uf = 'MS'; break;\n case 'Minas Gerais': uf = 'MG'; break;\n case 'Pará': uf = 'PA'; break;\n case 'Paraíba': uf = 'PB'; break;\n case 'Paraná': uf = 'PR'; break;\n case 'Pernambuco': uf = 'PE'; break;\n case 'Piauí': uf = 'PI'; break;\n case 'Rio de Janeiro': uf = 'RJ'; break;\n case 'Rio Grande do Norte': uf = 'RN'; break;\n case 'Rio Grande do Sul': uf = 'RS'; break;\n case 'Rond&ohat;nia': uf = 'RO'; break;\n case 'Roraima': uf = 'RR'; break;\n case 'Santa Catarina': uf = 'SC'; break;\n case 'São Paulo': uf = 'SP'; break;\n case 'Sergipe': uf = 'SE'; break;\n case 'Tocantins': uf = 'TO'; break;\n }\n return uf; \n}\n\nexport const timeFormater = (time: string) => time.replace(/-/gi, ' ');\n\nexport const seveOrUpdateDataAppForNextApp = async (data: IDataApp) => {\n const dataApp = {\n authenticated: data.authenticated,\n activeToastSignOut: data.activeToastSignOut,\n toastSignOutMessage: data.toastSignOutMessage,\n info: data.info\n }\n saveSessionStorage('dataApp', encrypt(dataApp, true))\n}","import React from 'react';\n\nimport {\n Route as ReactDOMRouter,\n RouteProps as ReactDOMRouteProps,\n Redirect,\n} from 'react-router-dom';\n\nimport { useAuth } from '../../Context/hooks/auth';\n\ninterface RouteProps extends ReactDOMRouteProps {\n isPrivate?: boolean;\n component: React.ComponentType;\n}\n\nconst Route: React.FC = ({\n isPrivate = false,\n component: Component,\n ...rest\n}) => {\n const { customer } = useAuth();\n return (\n {\n return isPrivate === !!customer ? (\n \n ) : isPrivate && !!!customer ? (\n \n ) : (\n \n );\n }}\n />\n );\n};\n\nexport default Route;\n","import React, { lazy, Suspense } from 'react';\r\nimport { Switch, Redirect } from 'react-router-dom';\r\nimport { Spinner } from 'react-bootstrap';\r\nimport Route from './Route';\r\n\r\n// const Home = lazy(() =>\r\n// import(\r\n// /* webpackPrefetch: true */ /* webpackChunkName: \"lazyHome\" */ '../Home'\r\n// ),\r\n// );\r\n// const Marketplace = lazy(() =>\r\n// import(\r\n// /* webpackPrefetch: true */ /* webpackChunkName: \"lazyMarketplace\" */ '../Marketplace'\r\n// ),\r\n// );\r\n\r\nconst TempHome = lazy(() =>\r\n import(\r\n /* webpackPrefetch: true */ /* webpackChunkName: \"lazyHome\" */ '../TempHome'\r\n ),\r\n);\r\n\r\nconst TempMarketplace = lazy(() =>\r\n import(\r\n /* webpackPrefetch: true */ /* webpackChunkName: \"lazyMarketplace\" */ '../TempMarketplace'\r\n ),\r\n);\r\n\r\nconst Layout = lazy(() =>\r\n import(\r\n /* webpackPrefetch: true */ /* webpackChunkName: \"lazyLayout\" */ '../../pages/Layout'\r\n ),\r\n);\r\nconst MainData = lazy(() =>\r\n import(\r\n /* webpackPrefetch: true */ /* webpackChunkName: \"lazyMainData\" */ '../../pages/MainData'\r\n ),\r\n);\r\nconst Security = lazy(() =>\r\n import(\r\n /* webpackPrefetch: true */ /* webpackChunkName: \"lazySecurity\" */ '../../pages/Security'\r\n ),\r\n);\r\nconst Addresses = lazy(() =>\r\n import(\r\n /* webpackPrefetch: true */ /* webpackChunkName: \"lazyAddresses\" */ '../../pages/Addresses'\r\n ),\r\n);\r\nconst OrderHistory = lazy(() =>\r\n import(\r\n /* webpackPrefetch: true */ /* webpackChunkName: \"lazyOrderHistory\" */ '../../pages/OrderHistory'\r\n ),\r\n);\r\nconst Favorites = lazy(() =>\r\n import(\r\n /* webpackPrefetch: true */ /* webpackChunkName: \"lazyFavorites\" */ '../../pages/Favorites'\r\n ),\r\n);\r\n// const ShoppingPlace = lazy(() =>\r\n// import(\r\n// /* webpackPrefetch: true */ /* webpackChunkName: \"lazyShoppingPlace\" */ '../../pages/ShoppingPlace'\r\n// ),\r\n// );\r\n\r\nexport default function Routes() {\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 isPrivate\r\n />\r\n }\r\n isPrivate\r\n />\r\n }\r\n isPrivate\r\n />\r\n }\r\n isPrivate\r\n />\r\n }\r\n isPrivate\r\n />\r\n {/* */}\r\n \r\n \r\n \r\n );\r\n}\r\n","const colors = {\n primary: '#6F5A9A',\n primaryText: '#333333',\n secondaryText: '#707070',\n background: '#fff',\n error: '#f44336',\n available: '#4CD964',\n unavailable: '#EF5C5C',\n awaiting: '#FFA200',\n dispatched: '#6184FF',\n confirmed: '#9F5CC3',\n ready: '#6C38FF',\n drivethru: '#977248',\n cancelled: '#FF7575',\n order: {\n primaryText: '#5b5b5b',\n secondaryText: '#74848f',\n },\n};\n\nexport default colors;\n","import colors from './colors';\nimport text from './text';\n\nconst theme = {\n color: colors,\n text: text,\n};\n\nexport default theme;\n","const text = {\n small: {\n normal: 'normal normal normal 12px Quicksand',\n bold: 'normal normal bold 12px Quicksand',\n },\n medium: {\n normal: 'normal normal normal 14px Quicksand',\n bold: 'normal normal bold 14px Quicksand',\n },\n title: {\n normal: 'normal normal normal 16px Quicksand',\n bold: 'normal normal bold 16px Quicksand',\n },\n subtitle: {\n normal: 'normal normal normal 13px Quicksand',\n bold: 'normal normal bold 13px Quicksand',\n },\n big: {\n normal: 'normal normal normal 30px Quicksand',\n bold: 'normal normal bold 30px Quicksand',\n },\n};\n\nexport default text;\n","import { useEffect } from 'react';\nimport { withRouter } from 'react-router-dom';\n\nconst ScrollToTop = ({ history }: any) => {\n useEffect(() => {\n const historyListen = history.listen(() => {\n window.scrollTo(0, 0);\n });\n return () => {\n historyListen();\n };\n }, [history]);\n\n return null;\n};\n\nexport default withRouter(ScrollToTop);\n","import React from 'react';\r\nimport { BrowserRouter, Switch } from 'react-router-dom';\r\nimport { ToastContainer } from 'react-toastify';\r\nimport 'react-toastify/dist/ReactToastify.css';\r\nimport { ThemeProvider } from 'styled-components';\r\nimport Routes from '../__Routes';\r\nimport { AuthProvider } from '../../Context/hooks/auth';\r\nimport theme from '../../assets/theme';\r\nimport ToTop from '../../components/ToTop';\r\n\r\nconst App = () => (\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 App;\r\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\ntype Config = {\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(\n process.env.PUBLIC_URL,\n window.location.href\n );\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready\n .then(registration => {\n registration.unregister();\n })\n .catch(error => {\n console.error(error.message);\n });\n }\n}\n","import { Segment } from '../../../services/types';\nimport { MerchantsState } from '../merchants/types';\n\n/**\n * Action types\n * @HANDLE_MERCHANTS insert merchants\n * @HANDLE_SEGMENTS insert segments\n * @FILTER_MERCHANT filter merchants for chars\n * @FILTER_SEGMENT filter merchants by segments\n * @HANDLE_POSITION filter merchants by position\n */\n\nexport enum MarketsTypes {\n HANDLE_MERCHANTS = '@marketplace/HANDLE_MERCHANTS',\n HANDLE_SEGMENTS = '@marketplace/HANDLE_SEGMENTS',\n FILTER_MERCHANT = '@marketplace/FILTER_MERCHANT',\n FILTER_SEGMENT = '@marketplace/FILTER_SEGMENT',\n HANDLE_POSITION = '@marketplace/HANDLE_POSITION',\n UPDATE_MERCHANT_AVAILABILITY = '@marketplace/UPDATE_MERCHANT',\n}\n/**\n * State type\n * @merchantsList : list of merchants\n * @segmentsList : list of segments\n * @searchBar : string to filter\n * @filterSegment : segment to filter\n * @city : city\n * @state : wow\n */\nexport interface MarketsState {\n merchantsList: MerchantsState[];\n segmentsList: Segment[];\n searchBar: string;\n filterSegment: string;\n city: string;\n state: string;\n}\n","/* eslint-disable no-case-declarations */\nimport { Reducer } from 'redux';\nimport { MarketsState, MarketsTypes } from './types';\n\nconst INITIAL_STATE: MarketsState = {\n filterSegment: '',\n searchBar: '',\n city: '',\n state: '',\n merchantsList: [],\n segmentsList: [],\n};\n\nconst reducer: Reducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case MarketsTypes.FILTER_SEGMENT:\n return {\n ...state,\n filterSegment: action.payload,\n };\n case MarketsTypes.FILTER_MERCHANT:\n return {\n ...state,\n searchBar: action.payload,\n };\n case MarketsTypes.HANDLE_POSITION:\n return {\n ...state,\n city: action.payload.city,\n state: action.payload.state,\n };\n case MarketsTypes.HANDLE_MERCHANTS:\n return {\n ...state,\n merchantsList: action.payload,\n };\n\n case MarketsTypes.UPDATE_MERCHANT_AVAILABILITY:\n return {\n ...state,\n merchantsList: state.merchantsList.map(m =>\n m.id === action.payload.merchantId\n ? { ...m, status: action.payload.availability }\n : m,\n ),\n };\n\n case MarketsTypes.HANDLE_SEGMENTS:\n return {\n ...state,\n segmentsList: action.payload,\n };\n\n default:\n return state;\n }\n};\n\nexport default reducer;\n","// import {Neighborhood} from \"../neighborhoods/types\"\n\nimport { CustomerAddress } from '../../../services/types';\nimport { Product } from '../merchants/types';\n\n/**\n * Action types\n * @TOGGLE_MODAL_O modal order\n * @TOGGLE_MODAL_F modal freight\n * @TOGGLE_MODAL_P modal product\n * @TOGGLE_MODAL_RM modal product read more\n * @TOGGLE_MODAL_T modal timetable\n * @TOGGLE_MODAL_C modal cart (mobile only)\n * @TOGGLE_ORDER_STEP modal order step\n * @TOGGLE_ORDER_COMPLETE state of order to modal\n * @TOGGLE_MODAL_I modal instructions of payment\n * @HANDLE_ADDRESSES handle addresses for freight modal\n */\nexport enum ModalsTypes {\n TOGGLE_MODAL_O = '@modal/TOGGLE_MODAL_O',\n TOGGLE_MODAL_P = '@modal/TOGGLE_MODAL_P',\n TOGGLE_MODAL_RM = '@modal/TOGGLE_MODAL_RM',\n TOGGLE_MODAL_F = '@modal/TOGGLE_MODAL_F',\n TOGGLE_MODAL_T = '@modal/TOGGLE_MODAL_T',\n TOGGLE_ORDER_STEP = '@modal/TOGGLE_ORDER_STEP',\n TOGGLE_ORDER_COMPLETE = '@modal/TOGGLE_ORDER_COMPLETE',\n TOGGLE_MODAL_C = '@modal/@TOGGLE_MODAL_C',\n TOGGLE_MODAL_I = '@modal/@TOGGLE_MODAL_I',\n HANDLE_ADDRESSES = '@modal/@HANDLE_ADDRESSES',\n}\n\nexport interface OrderError {\n merchantId?: string[];\n email?: string[];\n productId?: string[];\n variationItemId?: string[];\n eSitef_CreditCard?: string[];\n}\n\nexport interface StoredAddresses {\n availableAddresses: CustomerAddress[];\n unavailableAddresses: CustomerAddress[];\n}\n/**\n * State type\n * @data : the Address\n */\nexport interface ModalsState {\n statusO: boolean;\n statusP: boolean;\n statusRM: boolean;\n statusF: boolean;\n statusT: boolean;\n statusC: boolean;\n statusI: boolean;\n step: number;\n orderComplete: boolean;\n orderError: OrderError;\n orderId: string;\n orderReceipt?: string;\n orderPrepaid: boolean;\n product: Product;\n storedAddresses: StoredAddresses;\n}\n","/* eslint-disable radix */\n/* eslint-disable arrow-body-style */\nimport { Reducer } from 'redux';\nimport { Category, MerchantsState, MerchantsTypes, Product } from './types';\nimport {\n getProductsAvailabilityUpdated,\n getProductAvailabilityUpdated,\n getProductUpdated,\n getProductCurrentStockUpdated,\n} from '../../../services/functions';\n\nconst INITIAL_STATE: MerchantsState = {\n id: '',\n urlCode: '',\n status: '',\n name: '',\n cnpj: '',\n phoneDdd: '',\n phoneNumber: '',\n email: '',\n logoPath: '',\n bannerPath: '',\n about: '',\n whatsappDdd: '',\n whatsappNumber: '',\n instagram: '',\n facebook: '',\n active: false,\n address: {\n street: '',\n streetNumber: '',\n complement: '',\n neighborhood: '',\n city: '',\n cityCode: '',\n state: '',\n country: '',\n postalCode: '',\n reference: '',\n latitude: 0,\n longitude: 0,\n },\n marketSegment: {\n code: '',\n name: '',\n },\n marketplace: false,\n ratings: {\n average: 0,\n number: 0,\n type: '',\n },\n settings: {\n deliveryTimeMin: 0,\n deliveryTimeMax: 0,\n deliveryFeeMin: 0,\n softcomShip: { active: false, clientId: '', clientSecret: '' },\n },\n deliveryTimeMin: 0,\n deliveryTimeMax: 0,\n deliveryFeeMin: 0,\n showProductUnavailableInApp: false,\n availability: [],\n deliveryMethods: [],\n deliveryAreas: [],\n payments: [],\n loaded: false,\n exist: true,\n categories: [\n {\n merchantId: '',\n id: '',\n code: null,\n name: '',\n priority: 0,\n availability: '',\n products: [],\n },\n ],\n paymentInstructions: '',\n orderCpfIsRequired: false,\n cardInstallmentsMax: 0,\n cardInstallmentsMinValue: 0,\n sitefMerchantId: null,\n sitefMerchantKey: null,\n softcomCode: '',\n integrationApp: false,\n};\n\nconst reducer: Reducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case MerchantsTypes.LOAD_MERCHANT:\n return {\n ...state,\n ...action.payload,\n };\n\n case MerchantsTypes.HANDLE_EXIST:\n return {\n ...state,\n exist: action.payload,\n };\n\n case MerchantsTypes.UPDATE_MERCHANT_AVAILABILITY:\n if (action.data.merchantId === state.id) {\n return {\n ...state,\n status: action.data.availability,\n };\n }\n return state;\n\n case MerchantsTypes.UPDATE_MERCHANT_CATEGORY_AVAILABILITY:\n if (action.data.merchantId === state.id) {\n if (action.data.availability === 'UNAVAILABLE') {\n return {\n ...state,\n categories: state.categories.map((category: Category) =>\n category.id === action.data.categoryId\n ? {\n ...category,\n availability: action.data.availability,\n products: getProductsAvailabilityUpdated(\n category.products,\n action.data.availability,\n ),\n }\n : category,\n ),\n };\n }\n }\n return state;\n\n case MerchantsTypes.UPDATE_MERCHANT_PRODUCT_AVAILABILITY:\n if (action.data.merchantId === state.id) {\n return {\n ...state,\n categories: state.categories.map((category: Category) => {\n return category.id === action.data.categoryId\n ? {\n ...category,\n products: getProductAvailabilityUpdated(\n category.products,\n action.data.productId,\n action.data.availability,\n category,\n ),\n }\n : category;\n }),\n };\n }\n return state;\n\n case MerchantsTypes.UPDATE_MERCHANT_PRODUCT:\n if (action.data.merchantId === state.id) {\n return {\n ...state,\n categories: state.categories.map((category: Category) => {\n return category.id === action.data.categoryId\n ? {\n ...category,\n products: getProductUpdated(\n category.products,\n action.data.productId,\n JSON.parse(action.data.data),\n ),\n }\n : category;\n }),\n };\n }\n return state;\n\n case MerchantsTypes.UPDATE_MERCHANT_PRODUCT_CURRENT_STOCK:\n if (action.data.merchantId === state.id) {\n return {\n ...state,\n categories: state.categories.map((category: Category) => {\n return category.id === action.data.categoryId\n ? {\n ...category,\n products: getProductCurrentStockUpdated(\n category.products,\n action.data.productId,\n parseInt(action.data.stock),\n ),\n }\n : category;\n }),\n };\n }\n return state;\n\n case MerchantsTypes.LOAD_CATEGORIES:\n if (!state.showProductUnavailableInApp) {\n const categories: Category[] = [];\n action.payload.map((category: Category) => {\n const productsTemp: Product[] = category.products.filter(\n (product: Product) => product.availability === 'AVAILABLE',\n );\n return (\n productsTemp.length > 0 &&\n categories.push({ ...category, products: productsTemp })\n );\n });\n return {\n ...state,\n categories,\n loaded: true,\n exist: true,\n };\n }\n return {\n ...state,\n categories: action.payload,\n loaded: true,\n exist: true,\n };\n\n case MerchantsTypes.CLEAR_MERCHANT:\n return {\n ...state,\n id: '',\n urlCode: '',\n status: '',\n name: '',\n cnpj: '',\n phoneDdd: '',\n phoneNumber: '',\n email: '',\n logoPath: '',\n bannerPath: '',\n about: '',\n whatsappDdd: '',\n whatsappNumber: '',\n instagram: '',\n facebook: '',\n active: false,\n address: {\n street: '',\n streetNumber: '',\n complement: '',\n neighborhood: '',\n city: '',\n cityCode: '',\n state: '',\n country: '',\n postalCode: '',\n reference: '',\n latitude: 0,\n longitude: 0,\n },\n marketSegment: {\n code: '',\n name: '',\n },\n marketplace: false,\n ratings: {\n average: 0,\n number: 0,\n type: '',\n },\n settings: {\n deliveryTimeMin: 0,\n deliveryTimeMax: 0,\n deliveryFeeMin: 0,\n softcomShip: { active: false, clientId: '', clientSecret: '' }\n },\n deliveryTimeMin: 0,\n deliveryTimeMax: 0,\n deliveryFeeMin: 0,\n showProductUnavailableInApp: false,\n availability: [],\n deliveryMethods: [],\n deliveryAreas: [],\n payments: [],\n loaded: false,\n exist: true,\n categories: [\n {\n merchantId: '',\n id: '',\n code: null,\n name: '',\n priority: 0,\n availability: '',\n products: [],\n },\n ],\n paymentInstructions: '',\n orderCpfIsRequired: false,\n cardInstallmentsMax: 0,\n cardInstallmentsMinValue: 0,\n sitefMerchantId: null,\n sitefMerchantKey: null,\n softcomCode: '',\n integrationApp: false,\n };\n\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { Reducer } from 'redux';\nimport { ModalsState, ModalsTypes } from './types';\n\nconst INITIAL_STATE: ModalsState = {\n statusO: false,\n statusP: false,\n statusRM: false,\n statusF: false,\n statusT: false,\n statusC: false,\n statusI: false,\n step: 0,\n orderComplete: false,\n orderId: 'ID do pedido',\n orderReceipt: 'Comprovante do pedido',\n orderPrepaid: false,\n orderError: {\n merchantId: [],\n },\n product: {\n merchantId: '',\n categoryId: '',\n id: '',\n code: '',\n ean: null,\n priority: 0,\n name: '',\n description: '',\n price: 0,\n availability: '',\n measure: '',\n merchantSuggestion: false,\n isPromotion: false,\n promotion: {\n value: 0,\n validity: '',\n originalValue: 0,\n percent: 0,\n },\n stock: {\n active: false,\n current: 0,\n min: 0,\n orderMax: 0,\n },\n images: [],\n variationsGrid: false,\n variations: [],\n },\n storedAddresses: {\n availableAddresses: [],\n unavailableAddresses: [],\n },\n};\n\nconst reducer: Reducer = (state = INITIAL_STATE, action) => {\n const updateModal = state;\n switch (action.type) {\n case ModalsTypes.TOGGLE_MODAL_O:\n return { ...state, statusO: !state.statusO };\n\n case ModalsTypes.TOGGLE_MODAL_P:\n if (action.data === undefined) {\n updateModal.statusP = !state.statusP;\n updateModal.product = { ...INITIAL_STATE.product };\n } else {\n updateModal.statusP = !state.statusP;\n updateModal.product = { ...action.data };\n }\n return {\n ...state,\n ...updateModal,\n };\n\n case ModalsTypes.TOGGLE_MODAL_RM:\n return { ...state, statusRM: !state.statusRM };\n\n case ModalsTypes.TOGGLE_MODAL_F:\n return { ...state, statusF: !state.statusF };\n\n case ModalsTypes.TOGGLE_MODAL_T:\n return { ...state, statusT: !state.statusT };\n\n case ModalsTypes.TOGGLE_MODAL_C:\n return { ...state, statusC: !state.statusC };\n\n case ModalsTypes.TOGGLE_MODAL_I:\n return { ...state, statusI: !state.statusI };\n\n case ModalsTypes.TOGGLE_ORDER_STEP:\n return { ...state, step: action.data };\n\n case ModalsTypes.TOGGLE_ORDER_COMPLETE:\n return {\n ...state,\n orderComplete: action.complete,\n orderId: action.id,\n orderReceipt: action.receipt,\n orderPrepaid: action.prepaid,\n orderError: action.orderError,\n };\n\n case ModalsTypes.HANDLE_ADDRESSES:\n return {\n ...state,\n storedAddresses: {\n availableAddresses: action.payload.availableAddresses,\n unavailableAddresses: action.payload.unavailableAddresses,\n },\n };\n\n default:\n return state;\n }\n};\n\nexport default reducer;\n","/**\n * Action types\n * @LOAD_ORDER : load actual order\n * @UPDATE_ORDER : update order\n * @INSERT_ORDER_PRODUCT : insert product in order items\n * @UPDATE_ORDER_PRODUCT : update a product of order items\n * @UPDATE_CUSTOMER_ADDRESS : update customer address\n * @HANDLE_DELIVERY_METHOD : handle delivery method type\n * @UPDATE_DELIVERY_FEE : update delivery fee value\n * @UPDATE_MERCHANT_ID : update merchant ID\n * @UPDATE_TOTAL : update total value\n * @UPDATE_CUSTOMER_INFOS : update customer infos\n * @UPDATE_CUSTOMER_PAYMENT : update customer payment\n * @UPDATE_OBSERVATION : update customer observation\n * @CLEAR_CART : clear cart after order complete\n */\nexport enum OrderTypes {\n LOAD_ORDER = '@order/LOAD_ORDER',\n UPDATE_ORDER = '@order/UPDATE_ORDER',\n INSERT_ORDER_PRODUCT = '@order/INSERT_ORDER_PRODUCT',\n UPDATE_ORDER_PRODUCT = '@order/UPDATE_ORDER_PRODUCT',\n UPDATE_ORDER_SHIP = '@order/UPDATE_ORDER_SHIP',\n UPDATE_ORDER_PRODUCT_AVAILABILITY = '@order/UPDATE_ORDER_PRODUCT_AVAILABILITY',\n UPDATE_ORDER_PRODUCT_STOCK = '@order/UPDATE_ORDER_PRODUCT_STOCK',\n UPDATE_ORDER_PRODUCT_CURRENT_STOCK = '@order/UPDATE_ORDER_PRODUCT_CURRENT_STOCK',\n UPDATE_ORDER_PRODUCT_AVAILABILITY_BY_CATEGORY_ID = '@order/UPDATE_ORDER_PRODUCT_AVAILABILITY_BY_CATEGORY_ID',\n UPDATE_ORDER_VARIATION_ITEM_AVAILABILITY = '@order/UPDATE_ORDER_VARIATION_ITEM_AVAILABILITY',\n UPDATE_ORDER_VARIATION_ITEM_STOCK = '@order/UPDATE_ORDER_VARIATION_ITEM_STOCK',\n UPDATE_CUSTOMER_ADDRESS = '@order/UPDATE_CUSTOMER_ADDRESS',\n HANDLE_DELIVERY_METHOD = '@order/HANDLE_DELIVERY_METHOD',\n UPDATE_DELIVERY_FEE = '@order/UPDATE_DELIVERY_FEE',\n UPDATE_MERCHANT_ID = '@order/UPDATE_MERCHANT_ID',\n UPDATE_TOTAL = '@order/UPDATE_TOTAL',\n UPDATE_CUSTOMER_INFOS = '@order/UPDATE_CUSTOMER_INFOS',\n UPDATE_CUSTOMER_PAYMENT = '@order/UPDATE_CUSTOMER_PAYMENT',\n UPDATE_OBSERVATION = '@order/UPDATE_OBSERVATION',\n CLEAR_CART = '@order/CLEAR_CART',\n}\n\n/**\n * @name : Name of customer\n * @email : Email of customer\n * @cpf : CPF of customer\n * @phoneDdd : DDD of phone number\n * @phoneNumber : Phone number of customer\n */\n\nexport interface Customer {\n id: string;\n name: string;\n email: string;\n cpf: string;\n phoneDdd: string;\n phoneNumber: string;\n}\n\n/**\n * @method : Delivery method\n * @address : Customer Address\n */\nexport interface Delivery {\n areaId: string;\n method: string;\n address: Address;\n ship?: Ship;\n}\n\n/**\n * @street : name of street\n * @streetNumber : number of address\n * @complement : an complement\n * @neighborhood : name of neighborhood\n * @city : name of city\n * @cityCode : city code\n * @state : name of state\n * @country : name of state\n * @postalCode : cep number\n * @reference : reference\n * @latitude : latitude\n * @longitude : longitude\n */\n\nexport interface Address {\n street: string;\n streetNumber: string;\n complement: string;\n neighborhood: string;\n city: string;\n cityCode: string;\n state: string;\n country: string;\n postalCode: string;\n reference: string;\n latitude: number;\n longitude: number;\n}\n\nexport interface Variation {\n variationId: string;\n variationName: string;\n variationItemId: string;\n variationItemName: string;\n quantity: number;\n value: number;\n variationsGrid: boolean;\n variationItemAvailability: string;\n variationItemStockActive: boolean;\n variationItemStockCurrent: number;\n variationItemsMax: number;\n}\n\n/**\n * @item : name of item\n * @productId : id of item\n * @quantity : quantity of item\n * @price : price of item\n * @subtotal : subtotal of item\n * @discount : discount of item price\n * @addition : additional of item price\n * @total : total value of item\n * @observations : observations of item\n */\n\nexport interface Product {\n categoryId: string;\n availability: string;\n item: number;\n productId: string;\n productCode: string;\n productName: string;\n quantity: number;\n price: number;\n subtotal: number;\n discount: number;\n addition: number;\n total: number;\n stock: Stock;\n observations: string;\n variationsTotal: number;\n variations: Variation[];\n}\n\nexport interface Stock {\n active: boolean;\n current: number;\n min: number;\n orderMax: number;\n}\n\n/**\n * @cardNumber : number of card\n * @expiryDate : expiration date of card\n * @securityCode : CVV\n * @holder : card owner\n * @cpf : CPF of card owner\n * @installments : number of value parts\n */\n\nexport interface CreditCard {\n cardNumber: string;\n expiryDate: string;\n securityCode: string;\n holder: string;\n cpf: string;\n installments: number;\n}\n\n/**\n * @code : code of payment, ex: \"DIN\" for money\n * @prepaid : online payment ? true\n * @value : value of payment\n * @changeFor : change of payment using DIN, value\n * @creditCard : credit card infos\n */\n\nexport interface Payment {\n code: string;\n prepaid: boolean;\n value: number;\n changeFor: number;\n creditCard?: CreditCard;\n}\n\nexport interface OrderResponse {\n merchantId: string;\n id: string;\n shortId: string;\n status: string;\n customer: Customer;\n delivery: Delivery;\n preparationTime: number;\n observation: string;\n items: Product[];\n subtotal: number;\n deliveryFee: number;\n total: number;\n payments: [\n {\n code: string;\n description: string;\n prepaid: boolean;\n value: number;\n changeFor: number;\n cardTransaction: {\n authorizerMessage: string;\n customerReceipt: string;\n merchantReceipt: string;\n authorizerId: string;\n acquirerId: string;\n acquirerName: string;\n authorizerDate: string;\n authorizationNumber: string;\n esitefUsn: string;\n sitefUsn: string;\n hostUsn: string;\n paymentType: string;\n issuer: string;\n };\n },\n ];\n createdAt: string;\n updatedAt: string;\n}\n\n/**\n * State type\n * @data\n */\nexport interface OrderState {\n merchantId: string;\n customer: Customer;\n delivery: Delivery;\n observation: string;\n items: Product[];\n subtotal: number;\n deliveryFee: number;\n total: number;\n payments: Payment[];\n}\n\nexport interface Ship {\n companyName: string;\n deliveryFee: number;\n deliveryTime: number;\n serviceCode: number;\n serviceName: string;\n}\n\nexport interface ShipList {\n fromPostalCode: string;\n toPostalCode: string;\n services: Ship[];\n}","/* eslint-disable radix */\n/* eslint-disable arrow-body-style */\n/* eslint-disable no-return-assign */\n/* eslint-disable no-case-declarations */\nimport { Reducer } from 'redux';\nimport { OrderState, OrderTypes, Product } from './types';\nimport {\n updateOrderProductAvailability,\n getVariationItemsUpdated,\n updateOrderVariationItemAvailability,\n updateOrderProductCurrentStock,\n updateOrderVariationItemStock,\n getVariationItemsStockUpdated,\n updateOrderProductStock,\n} from '../../../services/functions';\n\n// const currentMerchantUrlCode = () => {\n// const URI = window.location.pathname.substring(1).split('/')[0];\n// return URI;\n// };\n\n// const URI = currentMerchantUrlCode();\n\n// console.log('Requisição: ', JSON.parse(localStorage.getItem(`cart_${URI}`) || '[]'));\n\nexport const INITIAL_STATE: OrderState = {\n merchantId: '',\n //@ts-ignore\n customer: {\n name: '',\n email: '',\n cpf: '',\n phoneDdd: '',\n phoneNumber: '',\n },\n //@ts-ignore\n delivery: {\n method: '',\n address: {\n street: '',\n streetNumber: '',\n complement: '',\n neighborhood: '',\n city: '',\n cityCode: '',\n state: '',\n country: '',\n postalCode: '',\n reference: '',\n latitude: 0,\n longitude: 0,\n },\n ship: {\n companyName: '',\n deliveryFee: 0,\n deliveryTime: 0,\n serviceCode: 0,\n serviceName: '',\n },\n },\n observation: '',\n items: [],\n subtotal: 0,\n deliveryFee: 0,\n total: 0,\n payments: [],\n};\n\nconst reducer: Reducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case OrderTypes.LOAD_ORDER:\n return state;\n\n case OrderTypes.UPDATE_ORDER_SHIP:\n const service = { ...state };\n service.deliveryFee = action.data.deliveryFee;\n service.delivery.ship = action.data;\n // console.log('Transport: action.data', action.data);\n // console.log('Transport: service', service);\n return state;\n\n case OrderTypes.UPDATE_ORDER:\n const updatedOrder = state;\n updatedOrder.items = action.data.filter(\n (item: Product) => item.quantity > 0,\n );\n updatedOrder.subtotal = updatedOrder.items.reduce(\n (subtotal: number, product: Product) => subtotal + product.total,\n 0,\n );\n return { ...state, ...updatedOrder };\n\n case OrderTypes.UPDATE_ORDER_PRODUCT:\n const updatedCart = state;\n const variationsTotal = +action.data.variationsTotal.toFixed(12);\n const UPDATE_PRODUCTS_URI = window.location.pathname\n .substring(1)\n .split('/')[0];\n if (action.quantity >= 1) {\n updatedCart.items[action.index] = {\n ...action.data,\n quantity: action.quantity,\n observations: action.observations,\n subtotal: action.data.price + variationsTotal,\n total: action.quantity * (action.data.price + variationsTotal),\n };\n } else {\n updatedCart.items.splice(action.index, 1);\n }\n\n updatedCart.subtotal = updatedCart.items.reduce(\n (subtotal: number, product: Product) => subtotal + product.total,\n 0,\n );\n localStorage.setItem(\n `products_${UPDATE_PRODUCTS_URI}`,\n JSON.stringify(updatedCart.items),\n );\n return { ...state, ...updatedCart };\n\n case OrderTypes.UPDATE_ORDER_PRODUCT_AVAILABILITY:\n if (action.data.merchantId === state.merchantId) {\n const UPDATE_PRODUCTS_AVAILABILITY_URI = window.location.pathname\n .substring(1)\n .split('/')[0];\n updateOrderProductAvailability(\n `products_${UPDATE_PRODUCTS_AVAILABILITY_URI}`,\n action.data.productId,\n action.data.availability,\n );\n return {\n ...state,\n items: state.items.map((item: Product) => {\n return item.productId === action.data.productId\n ? {\n ...item,\n availability: action.data.availability,\n }\n : item;\n }),\n };\n }\n return state;\n\n case OrderTypes.UPDATE_ORDER_PRODUCT_AVAILABILITY_BY_CATEGORY_ID:\n if (action.data.merchantId === state.merchantId) {\n return {\n ...state,\n items: state.items.map((item: Product) => {\n return item.categoryId === action.data.categoryId\n ? {\n ...item,\n availability: action.data.availability,\n }\n : item;\n }),\n };\n }\n return state;\n\n case OrderTypes.UPDATE_ORDER_VARIATION_ITEM_AVAILABILITY:\n if (action.data.merchantId === state.merchantId) {\n const UPDATE_VARIATION_AVAILABILITY_URI = window.location.pathname\n .substring(1)\n .split('/')[0];\n updateOrderVariationItemAvailability(\n `products_${UPDATE_VARIATION_AVAILABILITY_URI}`,\n action.data.variationId,\n action.data.variationItemId,\n action.data.availability,\n );\n return {\n ...state,\n items: state.items.map((item: Product) => {\n return {\n ...item,\n variations: getVariationItemsUpdated(\n item.variations,\n action.data.variationId,\n action.data.variationItemId,\n action.data.availability,\n ),\n };\n }),\n };\n }\n return state;\n\n case OrderTypes.UPDATE_ORDER_VARIATION_ITEM_STOCK:\n if (action.data.merchantId === state.merchantId) {\n const UPDATE_VARIATION_STOCK_URI = window.location.pathname\n .substring(1)\n .split('/')[0];\n updateOrderVariationItemStock(\n `products_${UPDATE_VARIATION_STOCK_URI}`,\n action.data.variationId,\n action.data.variationItemId,\n parseInt(action.data.stock),\n );\n return {\n ...state,\n items: state.items.map((item: Product) => {\n return {\n ...item,\n variations: getVariationItemsStockUpdated(\n item.variations,\n action.data.variationId,\n action.data.variationItemId,\n parseInt(action.data.stock),\n ),\n };\n }),\n };\n }\n return state;\n\n case OrderTypes.UPDATE_ORDER_PRODUCT_CURRENT_STOCK:\n if (action.data.merchantId === state.merchantId) {\n const UPDATE_CURRENT_STOCK_URI = window.location.pathname\n .substring(1)\n .split('/')[0];\n updateOrderProductCurrentStock(\n `products_${UPDATE_CURRENT_STOCK_URI}`,\n action.data.productId,\n parseInt(action.data.stock),\n );\n return {\n ...state,\n items: state.items.map((item: Product) => {\n return item.productId === action.data.productId\n ? {\n ...item,\n stock: {\n ...item.stock,\n current: parseInt(action.data.stock),\n },\n }\n : item;\n }),\n };\n }\n return state;\n\n case OrderTypes.UPDATE_ORDER_PRODUCT_STOCK:\n if (action.data.merchantId === state.merchantId) {\n const UPDATE_STOCK_URI = window.location.pathname\n .substring(1)\n .split('/')[0];\n const product: Product = JSON.parse(action.data.data);\n updateOrderProductStock(\n `products_${UPDATE_STOCK_URI}`,\n action.data.productId,\n product.stock,\n );\n return {\n ...state,\n items: state.items.map((item: Product) => {\n return item.productId === action.data.productId\n ? {\n ...item,\n stock: {\n ...item.stock,\n orderMax: product.stock.orderMax,\n },\n }\n : item;\n }),\n };\n }\n return state;\n\n case OrderTypes.INSERT_ORDER_PRODUCT:\n const cartItem = {\n ...state,\n };\n\n const INSERT_URI = window.location.pathname.substring(1).split('/')[0];\n\n if (cartItem.items[0] === undefined) {\n cartItem.items[0] = action.data;\n cartItem.subtotal = cartItem.items.reduce(\n (subtotal: number, product: Product) => subtotal + product.total,\n 0,\n );\n localStorage.setItem(\n `products_${INSERT_URI}`,\n JSON.stringify(cartItem.items),\n );\n return { ...state, ...cartItem };\n }\n cartItem.items.push(action.data);\n\n cartItem.subtotal = cartItem.items.reduce(\n (subtotal: number, product: Product) => subtotal + product.total,\n 0,\n );\n\n localStorage.setItem(\n `products_${INSERT_URI}`,\n JSON.stringify(cartItem.items),\n );\n return { ...state, ...cartItem };\n\n case OrderTypes.UPDATE_CUSTOMER_ADDRESS:\n const updatedAddress = { ...state };\n updatedAddress.delivery.address = action.data;\n updatedAddress.delivery.method = action.method;\n localStorage.setItem(\n 'meucarrinhoAddress',\n JSON.stringify(updatedAddress.delivery),\n );\n return {\n ...state,\n ...updatedAddress,\n };\n\n case OrderTypes.UPDATE_DELIVERY_FEE:\n return {\n ...state,\n deliveryFee: action.data,\n };\n\n case OrderTypes.UPDATE_MERCHANT_ID:\n return {\n ...state,\n merchantId: action.data,\n };\n\n case OrderTypes.UPDATE_TOTAL:\n const total = state;\n\n total.subtotal = Number(total.subtotal.toFixed(2));\n\n total.total = +(total.subtotal + total.deliveryFee).toFixed(12);\n\n total.items = total.items.map(\n (product: Product, index: number) =>\n (total.items[index] = { ...product, item: index + 1 }),\n );\n return { ...state, ...total };\n\n case OrderTypes.UPDATE_CUSTOMER_INFOS:\n return {\n ...state,\n customer: action.data,\n };\n\n case OrderTypes.UPDATE_CUSTOMER_PAYMENT:\n return {\n ...state,\n payments: action.data,\n };\n\n case OrderTypes.UPDATE_OBSERVATION:\n return {\n ...state,\n observation: action.data,\n };\n\n case OrderTypes.CLEAR_CART:\n const renewCart = state;\n\n // const M_URL = window.location.pathname.substring(1).split('/')[0];\n\n const CLEAR_CART_URI = window.location.pathname\n .substring(1)\n .split('/')[0];\n\n localStorage.removeItem(`products_${CLEAR_CART_URI}`);\n\n if(renewCart.delivery.method === 'SHIP'){\n renewCart.deliveryFee = 0;\n }\n renewCart.items = [];\n renewCart.total = 0;\n renewCart.subtotal = 0;\n renewCart.observation = '';\n renewCart.payments = [];\n\n return {\n ...state,\n ...renewCart,\n };\n\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { Variation } from '../order/types';\n\n/**\n * Action types\n * @LOAD_VARIATIONS: update actual variations list\n * @HANDLE_VARIATIONS_ITEMS : insert product in order items\n * @CLEAR_VARIATIONS_ITEMS : clear variations items\n */\nexport enum VariationsTypes {\n LOAD_VARIATIONS = '@variations/LOAD_VARIATIONS',\n HANDLE_VARIATIONS_ITEMS = '@variations/HANDLE_VARIATIONS_ITEMS',\n CLEAR_VARIATIONS_ITEMS = '@variations/CLEAR_VARIATIONS_ITEMS',\n}\n/**\n * State type\n * @data\n */\nexport interface VariationsState {\n variations: Variation[]\n}\n","import { Reducer } from 'redux';\nimport { VariationsState, VariationsTypes } from './types';\n\nexport const INITIAL_STATE: VariationsState = {\n variations: [],\n};\n\nconst reducer: Reducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case VariationsTypes.LOAD_VARIATIONS:\n return state;\n\n case VariationsTypes.HANDLE_VARIATIONS_ITEMS:\n return { ...state, variations: action.data };\n\n case VariationsTypes.CLEAR_VARIATIONS_ITEMS:\n return { ...state, variations: [] };\n\n default:\n return state;\n }\n};\n\nexport default reducer;\n","export enum EProductToUpdate {\n PRODUCT_UPDATED_STATUS = 'PRODUCT_UPDATED_STATUS',\n}\nexport enum ECategoryToUpdate {\n CATEGORY_UPDATED_STATUS = 'CATEGORY_UPDATED_STATUS',\n}\n\nexport enum EProductUpdatedInfos {\n PRODUCT_UPDATED_INFOS = 'PRODUCT_UPDATED_INFOS',\n}\n\nexport enum EProductStockUpdated {\n PRODUCT_STOCK_UPDATED = 'PRODUCT_STOCK_UPDATED',\n}\n","import { IStatusListUpdate } from './@types';\n\nexport const setProductToUpdate = (state: IStatusListUpdate, payload: any) => {\n return {\n ...state,\n productToUpdateStatus: payload,\n };\n};\n\nexport const setCategoryToUpdate = (state: IStatusListUpdate, payload: any) => {\n return {\n ...state,\n categoryToUpdateStatus: payload,\n };\n};\n\nexport const setProductWithInfosUpdated = (\n state: IStatusListUpdate,\n payload: any,\n) => {\n return {\n ...state,\n productUpdatedInfos: payload,\n };\n};\n\nexport const setProductStockUpdated = (\n state: IStatusListUpdate,\n payload: any,\n) => {\n return {\n ...state,\n productStockUpdated: payload,\n };\n};\n","import { Reducer } from 'redux';\nimport { IStatusListUpdate } from './@types';\nimport {\n setProductToUpdate,\n setCategoryToUpdate,\n setProductWithInfosUpdated,\n setProductStockUpdated,\n} from './duck';\n\nimport {\n EProductToUpdate,\n ECategoryToUpdate,\n EProductUpdatedInfos,\n EProductStockUpdated,\n} from './actions';\n\nconst INITIAL_STATE: IStatusListUpdate = {\n productToUpdateStatus: {},\n categoryToUpdateStatus: {},\n productUpdatedInfos: {},\n productStockUpdated: {},\n};\n\nconst reducer: Reducer = (state = INITIAL_STATE, action) => {\n switch (action.type) {\n case EProductToUpdate.PRODUCT_UPDATED_STATUS:\n return setProductToUpdate(state, action.payload);\n case ECategoryToUpdate.CATEGORY_UPDATED_STATUS:\n return setCategoryToUpdate(state, action.payload);\n case EProductUpdatedInfos.PRODUCT_UPDATED_INFOS:\n return setProductWithInfosUpdated(state, action.payload);\n case EProductStockUpdated.PRODUCT_STOCK_UPDATED:\n return setProductStockUpdated(state, action.payload);\n default:\n return state;\n }\n};\n\nexport default reducer;\n","import { combineReducers } from 'redux';\n\nimport markets from './marketplace';\nimport merchants from './merchants';\nimport modals from './modals';\nimport order from './order';\nimport variations from './variations';\nimport update from './Update';\n\nexport default combineReducers({\n markets,\n merchants,\n modals,\n order,\n variations,\n update,\n});\n","import { createStore, applyMiddleware, Store } from 'redux';\r\nimport thunk from 'redux-thunk';\r\nimport { MarketsState } from './ducks/marketplace/types';\r\nimport { MerchantsState } from './ducks/merchants/types';\r\nimport { ModalsState } from './ducks/modals/types';\r\nimport { OrderState } from './ducks/order/types';\r\n\r\nimport rootReducer from './ducks/rootReducer';\r\nimport { VariationsState } from './ducks/variations/types';\r\n\r\nexport interface ApplicationState {\r\n markets: MarketsState;\r\n merchants: MerchantsState;\r\n modals: ModalsState;\r\n order: OrderState;\r\n variations: VariationsState;\r\n}\r\nlet middleware: any = [];\r\n\r\nif (process.env.NODE_ENV === 'development') {\r\n middleware = [...middleware, thunk];\r\n} else {\r\n middleware = [...middleware, thunk];\r\n}\r\n\r\nconst store: Store = createStore(\r\n rootReducer,\r\n applyMiddleware(...middleware),\r\n);\r\n\r\nexport default store;\r\n","import { getTokenJwt } from './../../../services/functions';\nimport refreshToken from '../refreshToken';\nimport jwt from 'jsonwebtoken';\n\nexport const getTimeStamp = async () => {\n const token = await getTokenJwt(true);\n const decodeToken: any = jwt.decode(token);\n const timeStampDate = new Date(decodeToken?.exp * 1000);\n const timeStampMinutes = timeStampDate.getMinutes() - 1;\n const timeStampWithAmountMinutes = timeStampDate.setMinutes(timeStampMinutes);\n const currentTime = Date.now();\n if (timeStampWithAmountMinutes <= currentTime) {\n await refreshToken();\n } else {\n setTimeout(() => {\n getTimeStamp();\n }, 5000);\n }\n};\n","import {\n removeLocalStorage,\n saveLocalStorage,\n} from '../../../services/functions';\nimport { getTokenJwt } from '../../../services/functions';\nimport { getTimeStamp } from '../getTimeStamp';\n\nconst refreshToken = async () => {\n removeLocalStorage('token');\n saveLocalStorage('token', '');\n await getTokenJwt(true);\n getTimeStamp();\n};\n\nexport default refreshToken;\n","import React, { createContext, useContext, useEffect, useState } from 'react';\n\nimport { refreshToken } from '../helpers/';\n\nconst HookContext = createContext({});\n\nexport function RefreshTokenProvider({ children }: any) {\n let [refresh, setRefresh] = useState(true);\n\n useEffect(() => {\n // console.log('Performance: RefreshTokenProvider');\n const requestNewToken = async () => {\n await refreshToken();\n setRefresh(false);\n };\n requestNewToken();\n }, []);\n\n return (\n \n {refresh ? null : <>{children}}\n \n );\n}\n\nexport const useRefreshToken = () => {\n const context = useContext(HookContext);\n return context;\n};\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport App from './containers/App';\nimport * as serviceWorker from './serviceWorker';\n\nimport store from './store';\n\nimport './css/fontawesome.min.css';\nimport './css/all.min.css';\nimport './common.scss';\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport 'react-toastify/dist/ReactToastify.css';\nimport 'slick-carousel/slick/slick.css';\nimport 'slick-carousel/slick/slick-theme.css';\nimport { RefreshTokenProvider } from './Context/hooks/refreshToken';\n\nReactDOM.render(\n \n \n \n \n ,\n document.getElementById('root'),\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","import { toast } from 'react-toastify';\n\nexport const checkFreightValues = (validationCase: string, value: string) => {\n let validation = false;\n switch (validationCase) {\n case 'state':\n if (value === '') {\n toast.error('Selecione um estado!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'city':\n if (value === '') {\n toast.error('Selecione uma cidade!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'neighborhood':\n if (value === '') {\n toast.error('Selecione um bairro!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'street':\n if (value === '') {\n toast.error('Insira o logradouro!');\n validation = false;\n return false;\n }\n if (value.length < 3) {\n toast.error('Logradouro deve conter mais de 3 caracteres!');\n validation = false;\n return false;\n }\n if (value.length > 255) {\n toast.error('Logradouro deve conter menos de 255 caracteres!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'streetNumber':\n if (value === '' || value.length < 1) {\n toast.error('Insira o número!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n default:\n break;\n }\n return validation;\n};\n\nexport const checkShare = (validationCase: string, value: string) => {\n let validation = false;\n switch (validationCase) {\n case 'copy':\n if (value === '') {\n toast.error('Erro ao copiar url!');\n validation = false;\n return false;\n }\n toast.success('Link copiado!');\n validation = true;\n return true;\n default:\n break;\n }\n return validation;\n};\n\nexport const checkVariations = (validationCase: string, value: string[]) => {\n let validation = false;\n switch (validationCase) {\n case 'menor':\n toast.error(`Itens obrigatórios necessários: ${value}`);\n validation = false;\n return false;\n\n case 'vazio':\n toast.error(`Selecione pelo menos um item de: ${value}`);\n validation = false;\n return false;\n\n case 'minimo':\n toast.error(`Quantidade mínima do item ${value} inválida`);\n validation = false;\n return false;\n\n case 'adicionado':\n toast.success('Item adicionado ao carrinho');\n validation = true;\n return true;\n\n default:\n break;\n }\n return validation;\n};\n\nexport const checkPaymentValues = (\n validationCase: string,\n value: string,\n required?: boolean,\n) => {\n let validation = false;\n switch (validationCase) {\n case 'method': {\n if (!value) {\n toast.error('Selecione uma forma de pagamento!');\n return false;\n } else {\n validation = true;\n return true;\n }\n }\n case 'name':\n if (value === '') {\n toast.error('Insira o nome!');\n validation = false;\n return false;\n }\n if (value.length <= 3) {\n toast.error('Nome deve conter mais de 3 caracteres!');\n validation = false;\n return false;\n }\n if (value.length > 255) {\n toast.error('Nome deve conter menos de 255 caracteres!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'phone':\n if (value === '') {\n toast.error('Insira número do WhatsApp!');\n validation = false;\n return false;\n }\n if (value.length !== 11) {\n toast.error('Número inválido!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'cpf':\n if (required) {\n if (value === '') {\n toast.error('Insira o CPF!');\n validation = false;\n return false;\n }\n if (value !== '' && validateCpf(value) === false) {\n toast.error('CPF inválido!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n }\n if (value !== '' && validateCpf(value) === false) {\n toast.error('CPF inválido!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'email':\n if (value !== '' && validateEmail(value) === false) {\n toast.error('E-mail inválido!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'paymentMethod':\n if (value === '') {\n toast.error('Selecione uma forma de pagamento!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'holder':\n if (value === '') {\n toast.error('Insira o nome do titular!');\n validation = false;\n return false;\n }\n if (value.length <= 3) {\n toast.error('Nome deve conter mais de 3 caracteres!');\n validation = false;\n return false;\n }\n if (value.length > 255) {\n toast.error('Nome deve conter menos de 255 caracteres!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'cpfCard':\n if (value === '') {\n toast.error('Insira o CPF!');\n validation = false;\n return false;\n }\n if (value !== '' && validateCpf(value) === false) {\n toast.error('CPF inválido!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'cardNumber':\n if (value === '') {\n toast.error('Insira o número do cartão!');\n validation = false;\n return false;\n }\n if (value.length < 14) {\n toast.error('Número do cartão inválido!');\n validation = false;\n return false;\n }\n if (value.length > 16) {\n toast.error('Número do cartão inválido!');\n validation = false;\n return false;\n }\n if (!luhnCheck(value)) {\n toast.error('Número do cartão inválido!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'expiryDate':\n if (value === '') {\n toast.error('Insira a data de validade!');\n validation = false;\n return false;\n }\n if (value.length <= 3) {\n toast.error('Data de validade inválida!');\n validation = false;\n return false;\n }\n if (value.length > 4) {\n toast.error('Data de validade inválida!');\n validation = false;\n return false;\n }\n if (!validateExpiryDate(value)) {\n toast.error('Data de validade inválida!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n case 'securityCode':\n if (value === '') {\n toast.error('Insira o CVV!');\n validation = false;\n return false;\n }\n if (Number(value) > 99999) {\n toast.error('CVV de 1 a 5 dígitos!');\n validation = false;\n return false;\n }\n validation = true;\n return true;\n\n default:\n break;\n }\n return validation;\n};\n\nexport const checkFavorite = (\n value: number,\n product: string,\n favorite: boolean,\n) => {\n if (value !== 204) {\n toast.error('Ocorreu algum erro. Tente novamente mais tarde!');\n return false;\n }\n if (favorite) {\n toast.success(`Item ${product} removido dos Favoritos!`);\n } else {\n toast.success(`Item ${product} adicionado aos Favoritos!`);\n }\n return true;\n};\n\nexport const checkOrder = (\n productName?: string,\n quantity?: boolean,\n variation?: string,\n variationItem?: string,\n) => {\n if (productName && variation && !variationItem) {\n if (quantity) {\n toast.error(\n `Quantidade de itens da variação \"${variation}\" do produto \"${productName}\" diferente do permitido!`,\n );\n } else {\n toast.error(\n `Variação \"${variation}\" do produto \"${productName}\" indisponível!`,\n );\n }\n return false;\n }\n if (productName && !variation && !variationItem) {\n toast.error(`Produto \"${productName}\" indisponível!`);\n return false;\n }\n if (productName && variation && variationItem) {\n toast.error(\n `Item \"${variationItem}\" da variação \"${variation}\" do produto \"${productName}\" indisponível!`,\n );\n return false;\n }\n toast.success('Itens do pedido carregados!');\n return true;\n};\n\nexport const validateCpf = (cpf: string) => {\n let Soma;\n let Resto;\n Soma = 0;\n if (\n !cpf ||\n cpf === '00000000000' ||\n cpf === '11111111111' ||\n cpf === '22222222222' ||\n cpf === '33333333333' ||\n cpf === '44444444444' ||\n cpf === '55555555555' ||\n cpf === '66666666666' ||\n cpf === '77777777777' ||\n cpf === '88888888888' ||\n cpf === '99999999999'\n ) {\n return false;\n }\n\n for (let i = 1; i <= 9; i++) {\n Soma += Number(cpf.substring(i - 1, i)) * (11 - i);\n }\n Resto = (Soma * 10) % 11;\n\n if (Resto === 10 || Resto === 11) Resto = 0;\n if (Resto !== Number(cpf.substring(9, 10))) return false;\n\n Soma = 0;\n for (let i = 1; i <= 10; i++) {\n Soma += Number(cpf.substring(i - 1, i)) * (12 - i);\n }\n Resto = (Soma * 10) % 11;\n\n if (Resto === 10 || Resto === 11) Resto = 0;\n if (Resto !== Number(cpf.substring(10, 11))) return false;\n return true;\n};\n\nconst validateEmail = (email: string) => {\n const re = /[\\w'+-]+(\\.[\\w'+-]+)*@\\w+([-.]\\w+)*\\.\\w{2,24}/;\n return re.test(String(email).toLowerCase());\n};\n\nconst luhnCheck = (value: string) => {\n let sum = 0;\n let bEven = false;\n for (let n = value.length - 1; n >= 0; n--) {\n const cDigit = value.charAt(n);\n let nDigit = parseInt(cDigit, 10);\n\n // eslint-disable-next-line no-cond-assign\n if (bEven && (nDigit *= 2) > 9) nDigit -= 9;\n\n sum += nDigit;\n bEven = !bEven;\n }\n return sum % 10 === 0;\n};\n\nconst validateExpiryDate = (expiryDate: string) => {\n const exMonth = +expiryDate.substr(0, 2);\n const exYear = +expiryDate.substr(2, 4) + 2000;\n const today = new Date();\n const someday = new Date();\n someday.setFullYear(exYear, exMonth, 1);\n\n if (someday < today) {\n return false;\n }\n return true;\n};\n","import env from './environment.json';\nimport version from './version.json';\n\nexport const environment = { ...env, ...version };\n","import axios from 'axios';\nimport jwt from 'jsonwebtoken';\nimport { environment } from '../environment/environment';\nimport { Customer, CustomerAddress, Rating } from './types';\nimport {\n decrypt,\n getSessionStorage,\n saveSessionStorage,\n encrypt,\n} from './functions';\n\ninterface ValuesChangePassword {\n userId: string | undefined;\n currentPassword: string;\n newPassword: string;\n confirmNewPassword: string;\n}\n\nexport const apiCustomer = axios.create({\n baseURL: environment.REACT_APP_API_URL,\n});\n\nconst getCustomerId = async () => {\n const encryptedToken = getSessionStorage('token') || '';\n const decrytedToken = decrypt(encryptedToken);\n const decodedToken = jwt.decode(decrytedToken);\n return decodedToken?.sub;\n};\n\nconst updateAuthorization = async () => {\n const encryptedToken = getSessionStorage('token') || '';\n const decrytedToken = decrypt(encryptedToken);\n apiCustomer.defaults.headers.Authorization = `Bearer ${decrytedToken}`;\n};\n\nconst checkTokenHasExpired = async () => {\n const jwtExpirationDate = new Date(0);\n const dateNow = Date.now();\n const tokenExpirationDate: any = getSessionStorage('tokenExpirationDate');\n if (tokenExpirationDate) {\n jwtExpirationDate.setUTCSeconds(tokenExpirationDate);\n jwtExpirationDate.setSeconds(jwtExpirationDate.getSeconds() - 20);\n if (jwtExpirationDate.getTime() <= dateNow) {\n console.log('Customer token Expired...');\n await refreshToken();\n return true;\n }\n }\n return false;\n};\n\nconst refreshToken = async () => {\n const encryptedCredentials = getSessionStorage('credentials') || '';\n const decrytedCredentials = decrypt(encryptedCredentials, true);\n const result = await apiCustomer\n .post('auth/token', {\n username: decrytedCredentials.username,\n password: decrytedCredentials.password,\n })\n .then(response => {\n console.log('Refreshing Customer Token...');\n const { token } = response.data;\n const encryptedToken = encrypt(token).toString();\n saveSessionStorage('token', encryptedToken);\n const decodedToken: any = jwt.decode(token);\n const expirationToken = decodedToken.exp;\n saveSessionStorage('tokenExpirationDate', expirationToken);\n return true;\n })\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const sendRequestResetPassword = async (username: string) => {\n const result = await apiCustomer\n .post('/auth/resetPassword/request', {\n username,\n })\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const sendConfirmResetPassword = async (\n userId: string,\n resetToken: string,\n) => {\n const result = await apiCustomer\n .post('/auth/resetPassword/confirm', {\n userId,\n resetToken,\n })\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const updateCustomer = async (customer: Customer) => {\n await checkTokenHasExpired();\n updateAuthorization();\n const result = await apiCustomer\n .put(`/customers/${customer.id}`, customer)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const changePassword = async (\n valuesChangePassword: ValuesChangePassword,\n) => {\n await checkTokenHasExpired();\n updateAuthorization();\n const result = await apiCustomer\n .post('/auth/changePassword/', valuesChangePassword)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const getCustomersAddresses = async () => {\n await checkTokenHasExpired();\n updateAuthorization();\n const customerId = await getCustomerId();\n const result = await apiCustomer\n .get(`/customers/${customerId}/addresses`)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const registerCustomersAddresses = async (\n customerAddress: CustomerAddress,\n) => {\n await checkTokenHasExpired();\n updateAuthorization();\n const customerId = await getCustomerId();\n const result = await apiCustomer\n .post(`/customers/${customerId}/addresses`, customerAddress)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const deleteCustomersAddresses = async (\n customerAddressId: string | undefined,\n) => {\n await checkTokenHasExpired();\n updateAuthorization();\n const customerId = await getCustomerId();\n const result = await apiCustomer\n .delete(`/customers/${customerId}/addresses/${customerAddressId}`)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const updateCustomersAddresses = async (\n customerAddress: CustomerAddress,\n) => {\n await checkTokenHasExpired();\n updateAuthorization();\n const customerId = await getCustomerId();\n const result = await apiCustomer\n .put(\n `/customers/${customerId}/addresses/${customerAddress.id}`,\n customerAddress,\n )\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const getCustomerOrders = async () => {\n await checkTokenHasExpired();\n updateAuthorization();\n const customerId = await getCustomerId();\n const result = await apiCustomer\n .get(`/customers/${customerId}/orders`)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const getCustomerOrder = async (orderId: string) => {\n await checkTokenHasExpired();\n updateAuthorization();\n const customerId = await getCustomerId();\n const result = await apiCustomer\n .get(`/customers/${customerId}/orders/${orderId}`)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\nexport const sendOrderRating = async (orderId: string, rating: Rating) => {\n await checkTokenHasExpired();\n updateAuthorization();\n const customerId = await getCustomerId();\n const result = await apiCustomer\n .patch(`/customers/${customerId}/orders/${orderId}/ratings`, rating)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const getCustomerFavorites = async () => {\n await checkTokenHasExpired();\n updateAuthorization();\n const customerId = await getCustomerId();\n const result = await apiCustomer\n .get(`/customers/${customerId}/favorites`)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n\nexport const sendCustomerFavorite = async (productId: string | undefined) => {\n await checkTokenHasExpired();\n updateAuthorization();\n const customerId = await getCustomerId();\n const result = await apiCustomer\n .patch(`/customers/${customerId}/favorites/products/${productId}`)\n .then(res => res)\n .catch(err => {\n console.log(err.response);\n return err.response;\n });\n return result;\n};\n","import React, { createContext, useCallback, useState, useContext } from 'react';\nimport { toast } from 'react-toastify';\nimport jwt from 'jsonwebtoken';\nimport { apiCustomer } from '../../services/apiCustomer';\nimport {\n removeSessionStorage,\n saveSessionStorage,\n getSessionStorage,\n encrypt,\n decrypt,\n seveOrUpdateDataAppForNextApp,\n} from '../../services/functions';\nimport { Customer } from '../../services/types';\n\ninterface AuthState {\n token: string;\n customer: Customer;\n}\n\ninterface SignInCredentials {\n username: string;\n password: string;\n close(): void;\n messageWhenFinished?: boolean\n}\n\ninterface AuthContextData {\n customer: Customer;\n signIn(credentials: SignInCredentials): Promise;\n signOut(toMarketplace: boolean): void;\n isLoading: boolean;\n setCustomerData(customer: Customer): void;\n}\n\ninterface AuthProviderProps {\n children: any;\n}\n\nexport const AuthContext = createContext(\n {} as AuthContextData,\n);\n\nexport const AuthProvider: React.FC = ({\n children,\n}: AuthProviderProps) => {\n const [isLoading, setIsLoading] = useState(false);\n const [data, setData] = useState(() => {\n const token = getSessionStorage('token') || '';\n const customer = getSessionStorage('customer') || '';\n const decryptedToken = decrypt(token);\n const decryptedCustomer = decrypt(customer);\n\n if (token && customer) {\n return { token: decryptedToken, customer: JSON.parse(decryptedCustomer) };\n }\n return {} as AuthState;\n });\n\n const setCustomerData = useCallback((customer: Customer) => {\n const encryptedToken = getSessionStorage('token');\n if (encryptedToken) {\n const decryptToken = decrypt(encryptedToken);\n const token: any = jwt.decode(decryptToken);\n removeSessionStorage('customer');\n const encryptedCustomer = encrypt(customer, true);\n saveSessionStorage('customer', encryptedCustomer);\n setData({ token, customer });\n }\n }, []);\n\n // singOut\n const signOut = useCallback((toMarketplace: boolean) => {\n removeSessionStorage('token');\n removeSessionStorage('customer');\n removeSessionStorage('credentials');\n removeSessionStorage('tokenExpirationDate');\n // console.log('CRA: toMarketplace', toMarketplace);\n setData({} as AuthState);\n if (toMarketplace) {\n // toast.error('Usuário deslogado com sucesso!');\n // history.push('/test');\n // window.location.reload();\n // Router.push('http://localhost:4000/')\n const dataApp = {\n authenticated: false,\n activeToastSignOut: true,\n toastSignOutMessage: 'Usuário deslogado com sucesso!',\n info: 'signOu in CRA',\n };\n seveOrUpdateDataAppForNextApp(dataApp);\n // window.location.href = '/';\n // setTimeout(() => {\n // window.location.href = '/';\n // }, 1000);\n } else {\n toast.success('Usuário deslogado com sucesso!');\n }\n }, []);\n // Adicionado Função pra checar se o token está expirado\n\n const signIn = useCallback(\n async ({ username, password, close, messageWhenFinished = true }) => {\n setIsLoading(true);\n await apiCustomer\n .post('auth/token', {\n username,\n password,\n })\n .then(response => {\n const { token } = response.data;\n const decodedToken: any = jwt.decode(token);\n const customerId = decodedToken.sub;\n const expirationToken = decodedToken.exp;\n const encryptedToken = encrypt(token).toString();\n saveSessionStorage('token', encryptedToken);\n saveSessionStorage('tokenExpirationDate', expirationToken);\n apiCustomer.defaults.headers.Authorization = `Bearer ${token}`;\n apiCustomer\n .get(`customers/${customerId}`)\n .then(res => {\n const customer = {\n id: res.data.id,\n name: res.data.name,\n email: res.data.email,\n cpf: res.data.cpf,\n phoneDdd: res.data.phoneDdd,\n phoneNumber: res.data.phoneNumber,\n avatarPath: res.data.avatarPath,\n };\n const encryptedCustomer = encrypt(customer, true);\n const encryptedCredentials = encrypt(\n { username, password },\n true,\n );\n saveSessionStorage('credentials', encryptedCredentials);\n saveSessionStorage('customer', encryptedCustomer);\n setData({ token, customer });\n if(messageWhenFinished) {\n finishRequest(true);\n close();\n } else {\n setIsLoading(false);\n }\n })\n .catch(err => {\n console.log(err.response.data);\n signOut(true);\n finishRequest(false);\n });\n })\n .catch(err => {\n console.log(err.response.data);\n finishRequest(false);\n });\n },\n [signOut],\n );\n\n const finishRequest = (status: boolean) => {\n setIsLoading(false);\n if (status) {\n toast.success('Usuário logado com sucesso!');\n } else {\n toast.error('Usuário ou senha inválidos');\n }\n };\n\n return (\n \n {children}\n \n );\n};\nexport function useAuth(): AuthContextData {\n const context = useContext(AuthContext);\n if (!context) {\n throw new Error('useAuth must be used within an AuthProvider');\n }\n\n return context;\n}\n"],"sourceRoot":""}