{"version":3,"sources":["Assets/Icons/historique.svg","Assets/Icons/panier.svg","Assets/Icons/back.svg","Assets/Logos/bart.svg","Assets/Icons/logout.svg","Assets/Icons/logout_big.svg","store/actions/types.ts","store/actions/index.ts","hooks/useModal.tsx","Components/BaseButton/BaseButton.tsx","Components/BottomSheet/BottomSheet.tsx","Assets/Icons/close_circle.svg","Components/Confirm/Confirm.tsx","Components/BasePage/BasePage.tsx","Assets/Logos/coubertin.svg","Assets/Logos/ladefense.svg","Assets/Logos/bordeaux.png","Assets/Logos/losc.png","Assets/Logos/parcdesprinces.svg","Assets/Logos/rolandGarros.svg","Pages/HomePage/HomePage.tsx","hooks/useError.tsx","_helpers/updateHeader.ts","_helpers/axiosHelper.ts","mocks/authMock.ts","mocks/eventMock.ts","mocks/products/productMock.ts","mocks/products/pdv144productsMock.ts","mocks/pdvs/door1Pdvsock.ts","mocks/pdvs/pdvMock.ts","mocks/orderResponseMock.ts","hooks/http/useGetTokenOrRefresh.ts","hooks/http/useHttpClient.ts","hooks/useGetEvent.ts","Assets/Icons/warning.svg","Components/Error/Error.tsx","Pages/ChoixPortePage/ChoixPortePage.tsx","Pages/ChoixSiegePage/ChoixSiegePage.tsx","hooks/useGetDiscount.ts","Components/MenuItem/MenuItem.tsx","hooks/useLoader.tsx","Components/Loader/Loader.tsx","hooks/useGetStockAvailable.ts","Pages/MenuPage/MenuPage.tsx","Assets/Icons/moins.svg","Assets/Icons/plus.svg","Assets/Icons/check.svg","hooks/useGetReductionFromPercentage.ts","hooks/useCreateOrderWithPercentDiscount.ts","hooks/useGetTva.ts","hooks/useCreateOrderWithoutDiscount.ts","hooks/useGetReductionFromQuantity.ts","hooks/useCreateOrderWithQuantityDiscount.ts","hooks/useUpdatePanier.ts","hooks/useUpdateOrderWithoutDiscount.ts","hooks/useUpdateOrderWithPercentDiscount.ts","hooks/useUpdateOrderWithQuantityDiscount.ts","Assets/Icons/deposit.svg","Pages/ItemPage/ItemPage.tsx","Assets/Icons/trash.svg","Assets/Icons/panierMoins.svg","Assets/Icons/panierMoinsDisabled.svg","Assets/Icons/panierPlus.svg","Components/PanierItem/PanierItem.tsx","Assets/Icons/cross.svg","Components/CrossSellingItem/CrossSellingItem.tsx","Components/CrossSelling/CrossSelling.tsx","hooks/useGetCrossSellingItems.ts","Pages/PanierPage/PanierPage.tsx","hooks/useGenerateReference.ts","Assets/Icons/checked.svg","Assets/Icons/unchecked.svg","Assets/Icons/send.svg","Assets/Icons/eyeHidden.svg","Assets/Icons/eye.svg","Components/BaseInput/BaseInput.tsx","Components/Success/Success.tsx","Components/Login/login.tsx","Pages/CommandePage/CommandePage.tsx","Assets/Icons/edenred.svg","Assets/Icons/applePay.svg","Assets/Icons/googlePay.svg","Assets/Icons/mastercard.svg","Assets/Icons/visa.svg","Assets/Icons/add.svg","Assets/Icons/selected.svg","Assets/Icons/arrowRight.svg","hooks/usePostOrder.ts","hooks/usePaymentWithCard.ts","hooks/useCardTypeAccepted.ts","Pages/PaiementPage/PaiementPage.tsx","hooks/useDeleteCard.ts","hooks/useAddEdenred.ts","Pages/AjoutCartePage/AjoutCartePage.tsx","hooks/useGoogleWallet.ts","Assets/Images/google_wallet.svg","Assets/Images/apple-wallet.svg","Assets/Images/rollandGarros.jpeg","Components/PlanModal/PlanModal.tsx","Pages/QrCodePage/QrCodePage.tsx","Components/HistoriqueItem/HistoriqueItem.tsx","Pages/HistoriquePage/HistoriquePage.tsx","Components/StandComponent/StandComponent.tsx","Pages/StandsPage/StandsPage.tsx","Pages/ResetPasswordPage/ResetPasswordPage.tsx","store/index.ts","store/reducers/index.ts","Assets/Icons/powered.svg","Pages/StadePage/StadePage.tsx","Pages/EdenredCallbackPage/EdenredCallbackPage.tsx","App/App.tsx","reportWebVitals.ts","index.tsx"],"names":["CLEAR_STATE","SET_USER","SET_STADIUM","SET_DOOR","SET_PANIER","SET_PANIER_REFERENCE","SET_PRODUCT_TO_SHOW","SET_SELECTED_PDV","SET_EVENT","SET_SELECTED_CARD","SET_TIME_CREATION_PANIER","setUser","snapshot","type","setPanier","setDoor","setTimeCreationPanier","useModal","useState","visible","setVisible","open","close","BaseButton","disabled","onClick","className","text","BottomSheet","children","show","Confirm","title","subTitle","onOk","onCancel","icon","closeCircle","src","alt","BasePage","showLogo","showBack","showHistorique","showPanier","backDelta","onBack","onLogout","navigate","useNavigate","dispatch","useDispatch","panier","useSelector","state","stadium","user","confirmLogout","image","bart","back","historique","panierIcon","orderProducts","length","id","logout","logoutBig","undefined","stades","coubertin","reference","ladefense","bordeaux","height","mauroy","parcdesprinces","rolandGarros","width","HomePage","useEffect","map","stade","index","style","useError","message","setMessage","updateHeaderInterceptor","axiosInstance","token","interceptors","request","use","config","headers","httpClient","client","axios","create","baseURL","process","authMock","name","doors","eventMock","startedAt","endedAt","eventType","productMock","Map","set","priceTTC","depositPriceTTC","product","productCategories","tva","rate","automaticDiscounts","discount","rateTotal","stockAvailable","door1PdvsMock","bartPickup","affluence","pdvMock","orderResponseMock","order","createdAt","Date","toString","priceHT","discountRate","discountName","totalTva","totalPriceHT","totalPriceTTC","orderStates","status","orderSlips","pdv","event","useGetTokenOrRefresh","auth","localStorage","getItem","body","api_key","bart_key","stadium_reference","res","jwt","setItem","useHttpClient","post","catch","err","Promise","reject","data","getToken","getEvent","get","getProducts","idPdv","getPdvs","doorId","nextPage","result","push","meta","next_page","postOrder","getOrderDetail","useGetEvent","onEventError","onApiError","onSuccess","then","setEvent","Error","btnTxt","warning","ChoixPortePage","eventError","apiError","useSearchParams","searchParams","choice","setChoice","error","setError","placeholder","onKeyUp","e","target","value","door","find","d","toLowerCase","ChoixSiegePage","useGetDiscount","discounts","now","getTime","MenuItem","item","getDiscount","achete","offert","getQuantityDiscountText","toFixed","useLoader","hide","Loader","defaultOptions","loop","autoplay","animationData","rendererSettings","preserveAspectRatio","options","useGetStockAvailable","panierProducts","filter","p","quantityInPanier","quantity","reduce","prev","curr","MenuPage","pdvId","timeCreationPanier","products","setProducts","showConfirm","setShowConfirm","getStockAvailable","loader","showError","response","finally","i","useGetReductionFromPercentage","getReduction","total","percentage","useCreateOrderWithPercentDiscount","getTva","price","tvaRate","getTotalMinusReduction","quantitee","unitTva","unitPriceHT","unitPriceTTC","unitDepositPriceTTC","discountType","totalDepositPriceTTC","tvaCode","categories","useCreateOrderWithoutDiscount","useGetReductionFromQuantity","otherOrderProducts","otherOrderProductsWithSamePrice","quantityToCheck","multiple","Math","floor","reduction","useCreateOrderWithQuantityDiscount","discountModel","useUpdatePanier","selectedPdv","o","useUpdateOrderWithoutDiscount","useUpdateOrderWithPercentDiscount","useUpdateOrderWithQuantityDiscount","ItemPage","productToShow","setQuantitee","setTotal","showBtmSheet","setShowBtmSheet","showConsigne","setShowConsigne","updatePanier","updateOrderWithoutDiscount","updateOrderWithPercentDiscount","updateOrderWithQuantityDiscount","createOrderWithPercentDiscount","createOrderWithQuantityDiscount","createOrderWithoutDiscount","getTotalMinusReductionQuantity","getTotalMinusReductionPercent","modalQuantiteInsufisante","window","scrollTo","calculTotal","addToCart","productToPush","newPanier","updateCartProduct","itemQuantity","newOrderProducts","forEach","Deposit","moins","plus","findIndex","check","fromItemPage","PanierItem","onMinusClick","onPlusClick","onDeleteClick","trash","panierMoins","panierMoinsDisabled","panierPlus","CrossSellingItem","onAddItem","onPlus","onMoins","Plus","Moins","CrossSelling","userLoged","productsToAdd","setProductsToAdd","getProductToAddQuantity","Close","newProductsToAdd","addItem","newProductToAdd","addQuantity","splice","removeQuantity","productToAdd","useGetCrossSellingItems","isBoisson","c","join","includes","isAlimentaire","isSnack","filterProducts","orderProductsTypes","op","array","randomIndex","currentIndex","random","shuffle","every","t","boissons","otherProducts","alimentaires","snacks","slice","r","PanierPage","useLocation","porte","indexToDelete","setIndexToDelete","wait","setWait","generateReference","console","log","exist","resolve","useGenerateReference","showCrossSelling","quantiteModifieModal","quantiteInsufisanteModal","crossSellingProducts","quantitModifie","orderProduct","deleteProduct","handleQuantityClick","updateOrderProduct","getItemToDeleteQuantity","handleDeleteClick","BaseInput","onChange","helpTxt","errorTxt","inputType","setInputType","eyeHidden","eye","Success","icone","Login","onValidate","onClose","email","setEmail","emailError","setEmailError","mdp","setMdp","showSendMdpConfirm","setShowSendMdpConfirm","send","test","CommandePage","createAccount","setCreateAccount","showLogin","setShowLogin","prenom","setPrenom","mdp1","setMdp1","mdp2","setMdp2","errorMdp","setErrorMdp","errorEmail","setErrorEmail","checked","unchecked","cartesBancaires","getOrderTaxes","round","usePostOrder","onFirst","onLast","onError","date","orderToPost","UTC","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getMilliseconds","nbOrderProducts","orderOperation","orderTaxes","userId","pdvName","orders","reason","JSON","stringify","usePaymentWithCard","stripe","useStripe","amount","nextAction","nextActionType","confirmCardPayment","clientSecret","paymentIntent","useCardTypeAccepted","brand","isAccepted","paymentId","edenredToken","cb","PaiementPage","selectedCard","paymentRequest","setPaymentRequest","nativePayment","setNativePayment","selectedMethod","setSelectedMethod","indexCbToDelete","setIndexCbToDelete","payWithCard","errorDeleteCB","confirmDeleteCB","successDeleteCB","deleteCard","onBefore","onFinally","carte","delete","stripeId","newsCartesBancaires","useDeleteCard","cardTypeAccepted","waitResponse","Client","brokerURL","reconnectDelay","heartbeatIncoming","heartbeatOutgoing","onConnect","subscribe","msg","jsonBody","parse","authorizationId","deactivate","activate","mid","order_ref","tstamp","url","useAddEdenred","addEdenred","pr","country","currency","label","displayItems","requestPayerName","requestPayerEmail","canMakePayment","applePay","googlePay","on","paymentMethod","card","customerId","cardId","description","ht","complete","formatPickup","pickup","splited","split","selected","mastercard","visa","last4","onDeleteCb","add","arrowRight","edenred","payCb","nomUser","pickupZone","payment","items","nom","errors","AjoutCartePage","elements","useElements","handleSubmit","preventDefault","cardNumberElement","getElement","CardNumberElement","createPaymentMethod","processSaveCard","processPayment","saveCard","newCB","userStripeId","onSubmit","credentials","issuerId","classId","useGoogleWallet","googleWalletUrl","setGoogleWalletUrl","objectId","genericObject","claims","iss","client_email","aud","origins","typ","payload","genericObjects","private_key","algorithm","createPassObject","PlanModal","RollandGarros","getMobileOperatingSystem","userAgent","navigator","vendor","opera","MSStream","QrCodePage","planModal","handleClick","cross","size","href","rel","googleWalletBtn","appleWalletBtn","formatAffluence","HistoriqueItem","HistoriquePage","orderToShow","setOrderToShow","setShow","StandComponent","stand","StandsPage","stands","setStands","standId","ResetPasswordPage","showSuccess","setShowSuccess","mdp2Error","setMdp2Error","put","newMdp","persistConfig","key","storage","persistedReducer","persistReducer","action","store","createStore","persistor","persistStore","stadesImages","StadePage","useParams","setTimeout","powered","EdenredCallbackPage","loading","setLoading","code","logo","stripePromise","loadStripe","App","basename","path","element","reportWebVitals","onPerfEntry","Function","getCLS","getFID","getFCP","getLCP","getTTFB","ReactDOM","createRoot","document","getElementById","render","StrictMode"],"mappings":"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","file":"static/js/main.f5817521.chunk.js","sourcesContent":["export default __webpack_public_path__ + \"static/media/historique.415cdb65.svg\";","export default __webpack_public_path__ + \"static/media/panier.12636aff.svg\";","export default __webpack_public_path__ + \"static/media/back.14f0c29e.svg\";","export default __webpack_public_path__ + \"static/media/bart.78bcb4e5.svg\";","export default __webpack_public_path__ + \"static/media/logout.a160dd9e.svg\";","export default __webpack_public_path__ + \"static/media/logout_big.72efccee.svg\";","export const CLEAR_STATE = 'CLEAR_STATE';\nexport const SET_USER = 'SET_USER';\nexport const SET_STADIUM = 'SET_STADIUM';\nexport const SET_DOOR = 'SET_DOOR';\nexport const SET_PANIER = 'SET_PANIER';\nexport const SET_PANIER_REFERENCE = 'SET_PANIER_REFERENCE';\nexport const SET_PRODUCT_TO_SHOW = 'SET_PRODUCT_TO_SHOW';\nexport const SET_SELECTED_PDV = 'SET_SELECTED_PDV';\nexport const SET_EVENT = 'SET_EVENT';\nexport const SET_SELECTED_CARD = 'SET_SELECTED_CARD';\nexport const SET_TIME_CREATION_PANIER = 'SET_TIME_CREATION_PANIER';\n","import {\n CLEAR_STATE,\n SET_DOOR,\n SET_EVENT,\n SET_PANIER, SET_PANIER_REFERENCE,\n SET_PRODUCT_TO_SHOW,\n SET_SELECTED_CARD,\n SET_SELECTED_PDV,\n SET_STADIUM, SET_TIME_CREATION_PANIER,\n SET_USER\n} from './types';\nimport {OrderModel} from \"../../Models/OrderModel\";\nimport {DoorModel} from \"../../Models/DoorModel\";\nimport {ProductModel} from \"../../Models/ProductModel\";\nimport {StadiumModel} from \"../../Models/StadiumModel\";\nimport {EventModel} from \"../../Models/EventModel\";\nimport {UserModel} from \"../../Models/UserModel\";\nimport {CarteBancaireModel} from \"../../Models/CarteBancaireModel\";\n\nexport const clearState = () => {\n return {\n type: CLEAR_STATE,\n };\n};\n\nexport const setUser = (snapshot: UserModel | undefined) => {\n return {\n type: SET_USER,\n snapshot,\n };\n};\n\nexport const setStadium = (snapshot: StadiumModel) => {\n return {\n type: SET_STADIUM,\n snapshot,\n };\n};\n\nexport const setPanier = (snapshot: OrderModel | undefined) => {\n return {\n type: SET_PANIER,\n snapshot,\n };\n};\n\nexport const setPanierReference = (snapshot: string) => {\n return {\n type: SET_PANIER_REFERENCE,\n snapshot,\n };\n};\n\nexport const setDoor = (snapshot: DoorModel | undefined) => {\n return {\n type: SET_DOOR,\n snapshot,\n };\n};\n\nexport const setProductToShow = (snapshot: ProductModel | undefined) => {\n return {\n type: SET_PRODUCT_TO_SHOW,\n snapshot,\n };\n};\n\nexport const setSelectedPdv = (snapshot: number | undefined) => {\n return {\n type: SET_SELECTED_PDV,\n snapshot,\n };\n};\n\nexport const setEvent = (snapshot: EventModel | undefined) => {\n return {\n type: SET_EVENT,\n snapshot,\n };\n};\n\nexport const setSelectedCard = (snapshot: CarteBancaireModel | undefined) => {\n return {\n type: SET_SELECTED_CARD,\n snapshot,\n };\n};\n\nexport const setTimeCreationPanier= (snapshot: number | undefined) => {\n return {\n type: SET_TIME_CREATION_PANIER,\n snapshot,\n };\n};\n","import {useState} from 'react';\n\ninterface UseModalReturnType {\n visible: boolean;\n open: () => void;\n close: () => void;\n}\n\nexport const useModal = (): UseModalReturnType => {\n const [visible, setVisible] = useState(false);\n const open = () => setVisible(true);\n const close = () => setVisible(false);\n\n return {\n visible,\n open,\n close,\n };\n};\n","import React from 'react'\n\nimport './BaseButton.scss'\n\ninterface BaseButtonProps {\n disabled?: boolean\n onClick?: () => void,\n className?: string\n text: string\n type?: string\n}\n\nconst BaseButton: React.FC = ({disabled, onClick, className, text, type = \"filled\" }: BaseButtonProps) => {\n const onBtnClick = () => {\n !disabled && onClick && onClick()\n }\n return \n}\n\nexport default BaseButton;\n","import React from 'react'\n\nimport './BottomSheet.scss'\n\ninterface BottomSheetProps {\n children: JSX.Element[] | JSX.Element,\n show: boolean,\n close?: () => void\n}\n\nconst BottomSheet: React.FC = ({children, show, close}: BottomSheetProps) => {\n\n return (\n <>\n
\n
\n
\n {children}\n
\n \n )\n}\n\nexport default BottomSheet;\n","export default __webpack_public_path__ + \"static/media/close_circle.a02b0bed.svg\";","import React from \"react\";\nimport './Confirm.scss'\nimport BaseButton from \"../BaseButton/BaseButton\";\nimport BottomSheet from \"../BottomSheet/BottomSheet\";\nimport closeCircle from '../../Assets/Icons/close_circle.svg'\n\ninterface Props {\n visible: boolean,\n title: string,\n subTitle?: string,\n onOk: () => void,\n onCancel: () => void,\n icon?: string\n}\n\nconst Confirm: React.FC = ({visible, title, subTitle, onOk, onCancel, icon = closeCircle}: Props) => {\n return (\n \n
\n \"send\n

{title}

\n {subTitle &&

{subTitle}

}\n
\n \n \n
\n
\n
\n )\n}\n\nexport default Confirm\n","import React from 'react'\n\nimport historique from '../../Assets/Icons/historique.svg'\nimport panierIcon from '../../Assets/Icons/panier.svg'\nimport back from '../../Assets/Icons/back.svg'\nimport bart from '../../Assets/Logos/bart.svg'\nimport logout from '../../Assets/Icons/logout.svg'\nimport logoutBig from '../../Assets/Icons/logout_big.svg'\n\nimport './BasePage.scss'\nimport {useNavigate} from \"react-router-dom\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {OrderModel} from \"../../Models/OrderModel\";\nimport {UserModel} from \"../../Models/UserModel\";\nimport {setUser} from \"../../store/actions\";\nimport {useModal} from \"../../hooks/useModal\";\nimport Confirm from \"../Confirm/Confirm\";\nimport {StadiumModel} from \"../../Models/StadiumModel\";\n\ninterface BasePageProps {\n children: JSX.Element[] | JSX.Element\n showLogo?: boolean\n showHistorique?: boolean\n showPanier?: boolean,\n showBack?: boolean,\n title?: string,\n backDelta?: number,\n onBack?: () => void\n onLogout?: () => void\n}\n\nconst BasePage: React.FC = ({children, showLogo, showBack, showHistorique, showPanier, title, backDelta = -1, onBack, onLogout}: BasePageProps) => {\n const navigate = useNavigate()\n const dispatch = useDispatch()\n const panier = useSelector(state => state.panier)\n const stadium = useSelector(state => state.stadium)\n const user = useSelector(state => state.user)\n\n const confirmLogout = useModal()\n\n const handleLogout = () => {\n dispatch(setUser(undefined))\n confirmLogout.close()\n onLogout && onLogout()\n }\n\n return (\n
\n
\n {showLogo && \"logo navigate('/')}/>}\n {showBack && \"fleche onBack ? onBack() : navigate(backDelta)}/>}\n {\n title &&

{title}

\n }\n
\n {showHistorique && \"icone navigate('/historique')}/>}\n {showPanier && (\n
navigate('/panier')}>\n \"icone\n {\n panier?.orderProducts && panier.orderProducts.length > 0 &&
\n }\n
\n )\n }\n {user?.id && \"icone}\n
\n
\n
\n {children}\n
\n \n
\n )\n}\n\nexport default BasePage;\n","export default __webpack_public_path__ + \"static/media/coubertin.ad7e925e.svg\";","export default __webpack_public_path__ + \"static/media/ladefense.43de28ad.svg\";","export default __webpack_public_path__ + \"static/media/bordeaux.fc298414.png\";","export default __webpack_public_path__ + \"static/media/losc.3d01eb27.png\";","export default __webpack_public_path__ + \"static/media/parcdesprinces.b5eccac3.svg\";","export default __webpack_public_path__ + \"static/media/rolandGarros.7cf46709.svg\";","import React, {useEffect} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\nimport coubertin from '../../Assets/Logos/coubertin.svg'\nimport ladefense from '../../Assets/Logos/ladefense.svg'\n//import matmut from '../../Assets/Logos/matmut.svg'\nimport bordeaux from '../../Assets/Logos/bordeaux.png'\nimport mauroy from '../../Assets/Logos/losc.png'\nimport parcdesprinces from '../../Assets/Logos/parcdesprinces.svg'\nimport rolandGarros from '../../Assets/Logos/rolandGarros.svg'\nimport './HomePage.scss'\nimport {useNavigate} from \"react-router-dom\";\nimport {clearState} from \"../../store/actions\";\nimport {useDispatch} from \"react-redux\";\n\ninterface StadeModel {\n image: string,\n reference: string\n width?: string\n height?: string\n}\n\nconst stades: StadeModel[] = [\n {image: coubertin, reference: 'PDC'},\n {image: ladefense, reference: 'PDA'},\n {image: bordeaux, reference: 'BMA', height: '90%'},\n {image: mauroy, reference: 'LIL', height: '100%'},\n {image: parcdesprinces, reference: 'PDP'},\n {image: rolandGarros, reference: 'RGP', width: '40%'},\n]\n\nconst HomePage: React.FC = ({}) => {\n const navigate = useNavigate()\n const dispatch = useDispatch()\n\n useEffect(() => {\n dispatch(clearState())\n }, [])\n\n return (\n \n
\n {\n stades.map((stade, index) => (\n
navigate(`/${stade.reference}`)}>\n {stade.reference}\n
\n ))\n }\n
\n
\n )\n}\n\nexport default HomePage;\n","import {useEffect, useState} from 'react';\n\ninterface UseModalReturnType {\n visible: boolean;\n message?: string;\n open: (text: string) => void;\n close: () => void;\n}\n\nexport const useError = (): UseModalReturnType => {\n const [visible, setVisible] = useState(false);\n const [message, setMessage] = useState(undefined);\n const open = (text: string) => {\n setMessage(text)\n }\n const close = () => {\n setMessage(undefined)\n }\n\n useEffect(() => {\n setVisible(message !== undefined)\n }, [message])\n\n return {\n message,\n visible,\n open,\n close,\n };\n};\n","const updateHeaderInterceptor = (axiosInstance: any, token: string) => {\n axiosInstance.interceptors.request.use((config: any) => {\n config.headers[\"Stone-Token\"] = token\n return config;\n });\n};\nexport default updateHeaderInterceptor;\n","import axios from \"axios\";\nimport updateHeaderInterceptor from \"./updateHeader\";\n\nconst httpClient = (token: string) => {\n const client = axios.create({\n baseURL: process.env.REACT_APP_TOPIVO_URL,\n });\n updateHeaderInterceptor(client, token);\n return client\n}\nexport default httpClient;\n","import {StadiumModel} from \"../Models/StadiumModel\";\n\nexport const authMock: {token: string, stadium: StadiumModel} = {\n token: \"79c7783a4e051e186bd14339cb2a5fabb32072eb1ed73ff56930a675509288dfe38d91526412578b1c90db2299d1e4c67072104d26a8ae8cf6eb6c92\",\n stadium: {\n id: 2,\n reference: \"PDA\",\n name: \"Paris La D\\u00e9fense Arena\",\n image: \"https:\\/\\/bart.topivo-api.agence2web.com\\/v1\\/public\\/cache\\/stadium_image\\/images\\/stadium\\/608fcc27329ce_logo_paris_la_defense_arena_2018.png\",\n doors: [\n {\n id: \"1\",\n name: \"100\"\n },\n {\n id: \"2\",\n name: \"101\"\n }\n ]\n }\n}\n","import {EventModel} from \"../Models/EventModel\";\n\nexport const eventMock: EventModel = {\n id:8,\n name:\"AGENCE2WEB - TESTEVENT - NE PAS TOUCHER\",\n startedAt:\"2023-01-24T09:00:00+01:00\",\n endedAt:\"2025-03-24T21:00:00+01:00\",\n eventType:{\n name:\"Formations Managers\"\n }\n}\n","import {ProductModel} from \"../../Models/ProductModel\";\nimport {pdv144Products} from \"./pdv144productsMock\";\n\nconst productMock = new Map()\n\nproductMock.set(\"144\", pdv144Products)\nproductMock.set(\"145\", [])\n\nexport {productMock}\n\n","import {ProductModel} from \"../../Models/ProductModel\";\n\nexport const pdv144Products: ProductModel[] = [\n {\n priceTTC: 4,\n depositPriceTTC: 2,\n product: {\n id: 105,\n name: \"Pepsi\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Soft\"\n },\n {\n name: \"Boisson tout type\"\n },\n {\n name: \"Boisson soft ou bi\\u00e8re\"\n }\n ],\n tva: {\n id: 1,\n name: \"10%\",\n rate: 10\n }\n },\n automaticDiscounts: [\n {\n name: \"HO\",\n startedAt: \"2023-01-25T12:00:00+01:00\",\n endedAt: \"2024-02-25T16:30:00+01:00\",\n discount: {\n id: 4,\n name: \"2=3\",\n rate: 2,\n rateTotal: 3,\n type: \"quantity\"\n }\n }\n ],\n stockAvailable: 0\n },\n {\n priceTTC: 7,\n depositPriceTTC: 2,\n product: {\n id: 116,\n name: \"Bi\\u00e8re Arena\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Bi\\u00e8re avec alcool\"\n },\n {\n name: \"Alcool\"\n },\n {\n name: \"Boisson tout type\"\n },\n {\n name: \"Boisson soft ou bi\\u00e8re\"\n },\n {\n name: \"Boisson Soft ou Bi\\u00e8re ou Vin\"\n }\n ],\n tva: {\n id: 1,\n name: \"20%\",\n rate: 20\n }\n },\n automaticDiscounts: [\n {\n name: \"H2\",\n startedAt: \"2023-01-25T12:00:00+01:00\",\n endedAt: \"2024-02-25T16:30:00+01:00\",\n discount: {\n id: 5,\n name: \"10%\",\n rate: 10,\n rateTotal: 10,\n type: \"percent\"\n }\n }\n ],\n stockAvailable: 2\n },\n {\n priceTTC: 4,\n depositPriceTTC: 0,\n product: {\n id: 122,\n name: \"Chips Lays 45g\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Snack\"\n }\n ],\n tva: {\n id: 1,\n name: \"10%\",\n rate: 10\n }\n },\n automaticDiscounts: [\n {\n name: \"HO\",\n startedAt: \"2023-01-25T12:00:00+01:00\",\n endedAt: \"2024-02-25T16:30:00+01:00\",\n discount: {\n id: 4,\n name: \"2=3\",\n rate: 2,\n rateTotal: 3,\n type: \"quantity\"\n }\n }\n ],\n stockAvailable: 5\n },\n {\n priceTTC: 2,\n depositPriceTTC: 0,\n product: {\n id: 118,\n name: \"Sandwich poulet\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Alimentaire\"\n },\n {\n name: \"Sandwich\"\n }\n ],\n tva: {\n id: 1,\n name: \"10%\",\n rate: 10\n }\n },\n automaticDiscounts: [],\n stockAvailable: 4\n },\n {\n priceTTC: 4,\n depositPriceTTC: 2,\n product: {\n id: 107,\n name: \"Pepsi max\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Soft\"\n },\n {\n name: \"Boisson tout type\"\n },\n {\n name: \"Boisson soft ou bi\\u00e8re\"\n }\n ],\n tva: {\n id: 1,\n name: \"10%\",\n rate: 10\n }\n },\n automaticDiscounts: [\n {\n name: \"HO\",\n startedAt: \"2023-01-25T12:00:00+01:00\",\n endedAt: \"2023-02-25T16:30:00+01:00\",\n discount: {\n id: 4,\n name: \"2=3\",\n rate: 2,\n rateTotal: 3,\n type: \"quantity\"\n }\n }\n ],\n stockAvailable: 3\n },\n {\n priceTTC: 7,\n depositPriceTTC: 2,\n product: {\n id: 117,\n name: \"Bi\\u00e8re kro\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Bi\\u00e8re avec alcool\"\n },\n {\n name: \"Alcool\"\n },\n {\n name: \"Boisson tout type\"\n },\n {\n name: \"Boisson soft ou bi\\u00e8re\"\n },\n {\n name: \"Boisson Soft ou Bi\\u00e8re ou Vin\"\n }\n ],\n tva: {\n id: 1,\n name: \"20%\",\n rate: 20\n }\n },\n automaticDiscounts: [\n {\n name: \"H2\",\n startedAt: \"2023-01-25T12:00:00+01:00\",\n endedAt: \"2024-02-25T16:30:00+01:00\",\n discount: {\n id: 5,\n name: \"10%\",\n rate: 10,\n rateTotal: 10,\n type: \"percent\"\n }\n }\n ],\n stockAvailable: 0\n },\n {\n priceTTC: 4,\n depositPriceTTC: 0,\n product: {\n id: 123,\n name: \"kinder bueno\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Snack\"\n }\n ],\n tva: {\n id: 1,\n name: \"10%\",\n rate: 10\n }\n },\n automaticDiscounts: [\n {\n name: \"HO\",\n startedAt: \"2023-01-25T12:00:00+01:00\",\n endedAt: \"2024-02-25T16:30:00+01:00\",\n discount: {\n id: 4,\n name: \"2=3\",\n rate: 2,\n rateTotal: 3,\n type: \"quantity\"\n }\n }\n ],\n stockAvailable: 0\n },\n {\n priceTTC: 2,\n depositPriceTTC: 0,\n product: {\n id: 119,\n name: \"Sandwich poisson\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Alimentaire\"\n },\n {\n name: \"Sandwich\"\n }\n ],\n tva: {\n id: 1,\n name: \"10%\",\n rate: 10\n }\n },\n automaticDiscounts: [],\n stockAvailable: 0\n },\n {\n priceTTC: 4,\n depositPriceTTC: 2,\n product: {\n id: 108,\n name: \"Pepsi cerise\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Soft\"\n },\n {\n name: \"Boisson tout type\"\n },\n {\n name: \"Boisson soft ou bi\\u00e8re\"\n }\n ],\n tva: {\n id: 1,\n name: \"10%\",\n rate: 10\n }\n },\n automaticDiscounts: [\n {\n name: \"HO\",\n startedAt: \"2023-01-25T12:00:00+01:00\",\n endedAt: \"2024-02-25T16:30:00+01:00\",\n discount: {\n id: 4,\n name: \"2=3\",\n rate: 2,\n rateTotal: 3,\n type: \"quantity\"\n }\n }\n ],\n stockAvailable: 0\n },\n {\n priceTTC: 7,\n depositPriceTTC: 2,\n product: {\n id: 115,\n name: \"Bi\\u00e8re heineken\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Bi\\u00e8re avec alcool\"\n },\n {\n name: \"Alcool\"\n },\n {\n name: \"Boisson tout type\"\n },\n {\n name: \"Boisson soft ou bi\\u00e8re\"\n },\n {\n name: \"Boisson Soft ou Bi\\u00e8re ou Vin\"\n }\n ],\n tva: {\n id: 1,\n name: \"20%\",\n rate: 20\n }\n },\n automaticDiscounts: [\n {\n name: \"H2\",\n startedAt: \"2023-01-25T12:00:00+01:00\",\n endedAt: \"2024-02-25T16:30:00+01:00\",\n discount: {\n id: 5,\n name: \"10%\",\n rate: 10,\n rateTotal: 10,\n type: \"percent\"\n }\n }\n ],\n stockAvailable: 0\n },\n {\n priceTTC: 4,\n depositPriceTTC: 0,\n product: {\n id: 124,\n name: \"kinder country\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Snack\"\n }\n ],\n tva: {\n id: 1,\n name: \"10%\",\n rate: 10\n }\n },\n automaticDiscounts: [\n {\n name: \"HO\",\n startedAt: \"2023-01-25T12:00:00+01:00\",\n endedAt: \"2024-02-25T16:30:00+01:00\",\n discount: {\n id: 4,\n name: \"2=3\",\n rate: 2,\n rateTotal: 3,\n type: \"quantity\"\n }\n }\n ],\n stockAvailable: 0\n },\n {\n priceTTC: 2,\n depositPriceTTC: 0,\n product: {\n id: 120,\n name: \"Sandwich boeuf\",\n image: \"https://oaidalleapiprodscus.blob.core.windows.net/private/org-ErL51SV6ezXuj2bJ3eGS7INw/user-X43ayra8pW70uVNqsHudSfGM/img-JRYtTGJaqGgTznUbFUUh1hsF.png?st=2023-07-27T19%3A07%3A11Z&se=2023-07-27T21%3A07%3A11Z&sp=r&sv=2021-08-06&sr=b&rscd=inline&rsct=image/png&skoid=6aaadede-4fb3-4698-a8f6-684d7786b067&sktid=a48cca56-e6da-484e-a814-9c849652bcb3&skt=2023-07-27T15%3A32%3A22Z&ske=2023-07-28T15%3A32%3A22Z&sks=b&skv=2021-08-06&sig=czVLxx%2BX%2BmYjQsYJ6Gzqgx6n7riKweRUC21rZVLgE74%3D\",\n productCategories: [\n {\n name: \"Alimentaire\"\n },\n {\n name: \"Sandwich\"\n }\n ],\n tva: {\n id: 1,\n name: \"10%\",\n rate: 10\n }\n },\n automaticDiscounts: [],\n stockAvailable: 0\n }\n]\n","import {PdvModel} from \"../../Models/PdvModel\";\n\nexport const door1PdvsMock: PdvModel[] = [\n {\n id: 144,\n name: \"AGENCE2WEB - DEV\",\n image: \"https://firebasestorage.googleapis.com/v0/b/appero-19fa0.appspot.com/o/topivo%2Fstands%2Fstand3.jpeg?alt=media&token=4422c390-6886-4146-8c48-a00309885537\",\n bartPickup: {\n id: 0,\n name: '114'\n },\n affluence: \"5-10\"\n },\n {\n id: 145,\n name: \"stand vide\",\n image: \"https://firebasestorage.googleapis.com/v0/b/appero-19fa0.appspot.com/o/topivo%2Fstands%2Fstand3.jpeg?alt=media&token=4422c390-6886-4146-8c48-a00309885537\",\n bartPickup: {\n id: 0,\n name: '114'\n },\n affluence: \"10-15\"\n }\n]\n","import {PdvModel} from \"../../Models/PdvModel\";\nimport {door1PdvsMock} from \"./door1Pdvsock\";\n\nconst pdvMock = new Map()\n\npdvMock.set(\"1\", door1PdvsMock)\npdvMock.set(\"2\", [])\n\nexport {pdvMock}\n\n","import {OrderModel} from \"../Models/OrderModel\";\nimport {OrderResponseModel} from \"../Models/OrderResponseModel\";\nimport {authMock} from \"./authMock\";\nimport {door1PdvsMock} from \"./pdvs/door1Pdvsock\";\nimport {eventMock} from \"./eventMock\";\n\nexport const orderResponseMock = (order: OrderModel): OrderResponseModel => {\n return {\n createdAt: new Date().toString(),\n reference: order.reference,\n priceHT: order.priceHT,\n priceTTC: order.priceTTC,\n discount: \"null\",\n discountRate: \"null\",\n discountName: \"null\",\n totalTva: order.totalTva,\n totalPriceHT: order.totalPriceHT,\n totalPriceTTC: order.totalPriceTTC,\n orderProducts: order.orderProducts,\n orderStates: [\n {\n status: \"paid\",\n createdAt: new Date().toString()\n }\n ],\n orderSlips: [],\n stadium: authMock.stadium,\n pdv: door1PdvsMock[0],\n event: eventMock\n }\n}\n","import {StadiumModel} from \"../../Models/StadiumModel\";\nimport {useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\n\nconst useGetTokenOrRefresh = (auth: (body: any) => Promise<{token: string, stadium: StadiumModel}>): () => Promise => {\n\n const stadium = useSelector(state => state.stadium)\n\n return async () => {\n const token = localStorage.getItem(\"topivotoken\")\n if (token) {\n return token\n } else {\n const body = {\n api_key: \"qh6A9UkQ4rBL27493s86jPRCdhx36Y6W2NZT4eeh38Zy84Vj5iHpvwxMN2YMcf2Q\",\n bart_key: \"J3s2KekzVQCCy6U8rvXBB8g45L53Xfj6eG998KfeWc7uBZu4y42u6jWXQ3Njf753\",\n stadium_reference: stadium?.reference\n }\n const res = await auth(body)\n const jwt = res.token\n localStorage.setItem(\"topivotoken\", jwt)\n return jwt\n }\n }\n}\n\nexport default useGetTokenOrRefresh\n","import httpClient from \"../../_helpers/axiosHelper\";\nimport {PdvModel} from \"../../Models/PdvModel\";\nimport {OrderModel} from \"../../Models/OrderModel\";\nimport axios from \"axios\";\nimport {authMock} from \"../../mocks/authMock\";\nimport {eventMock} from \"../../mocks/eventMock\";\nimport {productMock} from \"../../mocks/products/productMock\";\nimport {pdvMock} from \"../../mocks/pdvs/pdvMock\";\nimport {orderResponseMock} from \"../../mocks/orderResponseMock\";\nimport {EventModel} from \"../../Models/EventModel\";\nimport {StadiumModel} from \"../../Models/StadiumModel\";\nimport {ProductModel} from \"../../Models/ProductModel\";\nimport {OrderResponseModel} from \"../../Models/OrderResponseModel\";\nimport useGetTokenOrRefresh from \"./useGetTokenOrRefresh\";\n\ninterface HttpClientModel {\n auth: (body: any) => Promise<{token: string, stadium: StadiumModel}>,\n getEvent: () => Promise,\n getProducts: (idPdv: string) => Promise,\n getPdvs: (doorId: string) => Promise,\n postOrder: (order: OrderModel) => Promise,\n getOrderDetail: (reference: string) => Promise\n}\n\nconst useHttpClient = (): HttpClientModel => {\n\n const isMocked = process.env.REACT_APP_MOCK === 'true'\n const sleep = (ms: number) => new Promise(resolve => setTimeout(resolve, ms))\n\n const auth = async(body: any): Promise<{token: string, stadium: StadiumModel}> => {\n if(isMocked) {\n await sleep(500)\n return authMock\n }\n const res = await axios.post(`${process.env.REACT_APP_TOPIVO_URL}/authentication/bart`, body).catch(err => {\n return Promise.reject(err)\n })\n return res.data\n }\n\n const getToken = useGetTokenOrRefresh(auth)\n\n const getEvent = async(): Promise => {\n if(isMocked) {\n await sleep(500)\n // return Promise.reject({\"code\":400,\"title\":\"Error\",\"message\":\"Aucun \\u00e9v\\u00e8nement en cours\"})\n return eventMock\n }\n const res = await httpClient(await getToken()).get('/api/bart/event').catch(err => {\n return Promise.reject(err)\n })\n return res.data\n }\n\n const getProducts = async(idPdv: string): Promise => {\n if(isMocked) {\n await sleep(1000)\n return productMock.get(idPdv) || []\n }\n const res = await httpClient(await getToken()).get(`/api/bart/pdvs/${idPdv}/products`).catch(err => {\n return Promise.reject(err)\n })\n return res.data\n }\n\n const getPdvs = async (doorId: string): Promise => {\n if(isMocked) {\n await sleep(1000)\n return pdvMock.get(doorId) || []\n }\n let nextPage: number | null = 1\n const result: PdvModel[] = []\n while (nextPage) {\n const res: any = await httpClient(await getToken()).get(`/api/bart/doors/${doorId}/pdvs?page=${nextPage}`)\n .catch(err => Promise.reject(err))\n result.push(...res.data.data)\n nextPage = res.data.meta.next_page\n }\n return result\n }\n\n const postOrder = async(order: OrderModel): Promise => {\n if(isMocked) {\n await sleep(1000)\n return orderResponseMock(order)\n }\n const res = await httpClient(await getToken()).post('/api/bart/orders', order).catch(err => {\n return Promise.reject(err)\n })\n return res.data\n }\n\n const getOrderDetail = async(reference: string): Promise => {\n if(isMocked) {\n await sleep(1000)\n if(reference === \"B111\") {\n const order: OrderModel = {createdAt: new Date()}\n return [order]\n }\n return Promise.reject()\n }\n const res = await httpClient(await getToken()).get(`/api/bart/orders/${reference}`).catch(err => {\n return Promise.reject(err)\n })\n return res.data\n }\n\n return {\n auth,\n getEvent,\n getProducts,\n getPdvs,\n postOrder,\n getOrderDetail\n }\n\n}\n\nexport default useHttpClient\n","import useHttpClient from \"./http/useHttpClient\";\nimport {setEvent, setStadium} from \"../store/actions\";\nimport {useDispatch} from \"react-redux\";\nimport {DoorModel} from \"../Models/DoorModel\";\n\nexport const useGetEvent = (onEventError?: () => void, onApiError?: () => void): (stadium: string | undefined, onSuccess?: (res: DoorModel[]) => void) => void => {\n const dispatch = useDispatch()\n const {auth, getEvent} = useHttpClient()\n return (stadium: string | undefined, onSuccess?: (res: DoorModel[]) => void) => {\n const body = {\n api_key: \"qh6A9UkQ4rBL27493s86jPRCdhx36Y6W2NZT4eeh38Zy84Vj5iHpvwxMN2YMcf2Q\",\n bart_key: \"J3s2KekzVQCCy6U8rvXBB8g45L53Xfj6eG998KfeWc7uBZu4y42u6jWXQ3Njf753\",\n stadium_reference: stadium\n }\n void auth(body)\n .then(res => {\n const jwt = res.token\n localStorage.setItem(\"topivotoken\", jwt)\n dispatch(setStadium(res.stadium))\n getEvent()\n .then(event => {\n dispatch(setEvent(event))\n onSuccess && onSuccess(res.stadium.doors)\n })\n .catch(onEventError)\n }).catch(onApiError)\n }\n}\n","export default __webpack_public_path__ + \"static/media/warning.026c1ebe.svg\";","import React from \"react\";\nimport './Error.scss'\nimport warning from '../../Assets/Icons/warning.svg'\nimport BaseButton from \"../BaseButton/BaseButton\";\nimport BottomSheet from \"../BottomSheet/BottomSheet\";\n\ninterface Props {\n show: boolean,\n close?: () => void\n title: string,\n subTitle?: string,\n btnTxt?: string\n}\n\nconst Error: React.FC = ({show, close, title, subTitle, btnTxt=\"Retour\"}: Props) => {\n return (\n \n
\n \"send\n

{title}

\n {subTitle &&

{subTitle}

}\n {\n close && \n }\n
\n
\n )\n}\n\nexport default Error\n","import React, {useEffect, useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\n\nimport './ChoixPortePage.scss'\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport {useNavigate, useSearchParams} from \"react-router-dom\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {DoorModel} from \"../../Models/DoorModel\";\nimport {setDoor} from \"../../store/actions\";\nimport {useError} from \"../../hooks/useError\";\nimport {useGetEvent} from \"../../hooks/useGetEvent\";\nimport Error from \"../../Components/Error/Error\";\n\nconst ChoixPortePage: React.FC = ({}) => {\n const navigate = useNavigate()\n const dispatch = useDispatch()\n const doors = useSelector(state => state.stadium?.doors || [])\n const eventError = useError()\n const apiError = useError()\n const getEvent = useGetEvent(() => eventError.open(\"\"), () => apiError.open(\"\"))\n\n const [searchParams,] = useSearchParams();\n const stadium = searchParams.get(\"stadium\") ?? undefined;\n\n const [choice, setChoice] = useState(null)\n const [error, setError] = useState(null)\n\n useEffect(() => {\n getEvent(stadium)\n }, [stadium])\n\n const submit = () => {\n const door = doors.find(d => d.name.toLowerCase() === choice?.toLowerCase())\n if(!door) {\n setError(`${stadium === \"BMA\" ? \"Le bloc \" : \"La porte\"} ${choice} n'existe pas`)\n } else {\n setError(null)\n dispatch(setDoor(door))\n navigate(`/stands?stadium=${searchParams.get(\"stadium\")}&doorId=${door.id}`)\n }\n }\n\n return (\n \n

Saisissez {stadium === \"BMA\" ? \"le bloc auquel \" : \"la porte à laquelle\"} vous vous trouvez

\n

Votre numéro de {stadium === \"BMA\" ? \"bloc \" : \"porte\"} figure sur votre billet.

\n
\n setChoice(e.target.value)}/>\n {error}\n
\n \n \n \n
\n )\n}\n\nexport default ChoixPortePage;\n","import React, {useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\n\nimport './ChoixSiegePage.scss'\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport {useNavigate} from \"react-router-dom\";\n\nconst ChoixSiegePage: React.FC = ({}) => {\n const navigate = useNavigate()\n\n const [choice, setChoice] = useState(null)\n\n return (\n \n

Saisissez le siège auquel vous vous trouvez

\n

Votre numéro de siège figure sur votre billet.

\n setChoice(e.target.value)}/>\n navigate('/menu')} text=\"Valider\" className=\"choixSiegePageBtn\" disabled={!choice}/>\n
\n )\n}\n\nexport default ChoixSiegePage;\n","import {DiscountModel} from \"../Models/ProductModel\";\n\nexport const useGetDiscount = (): (discounts: DiscountModel[], now: Date) => DiscountModel | undefined => {\n\n return (discounts: DiscountModel[], now: Date): DiscountModel | undefined => {\n return discounts.find(d => new Date(d.startedAt).getTime() < now.getTime() && new Date(d.endedAt).getTime() > now.getTime())\n }\n}\n","import React from 'react'\n\nimport './MenuItem.scss'\nimport {useNavigate} from \"react-router-dom\";\nimport {ProductModel} from \"../../Models/ProductModel\";\nimport {useDispatch} from \"react-redux\";\nimport {setProductToShow} from \"../../store/actions\";\nimport {useGetDiscount} from \"../../hooks/useGetDiscount\";\n\ninterface MenuItemProps {\n item: ProductModel,\n}\n\nconst MenuItem: React.FC = ({item}: MenuItemProps) => {\n const navigate = useNavigate()\n const dispatch = useDispatch()\n const getDiscount = useGetDiscount()\n\n const discount = getDiscount(item.automaticDiscounts, new Date())\n\n const handleClick = () => {\n dispatch(setProductToShow(item))\n navigate(`/produit`)\n }\n\n const getQuantityDiscountText = () => {\n if(discount) {\n const achete = discount.discount.rate > 1 ? \"achetés\" : \"acheté\"\n const offert = discount.discount.rateTotal - discount.discount.rate > 1 ? \"offerts\" : \"offert\"\n return `${discount.discount.rate} ${achete} = ${discount.discount.rateTotal - discount.discount.rate} ${offert}`\n }\n return ''\n }\n\n return (\n
\n
\n {\n discount && (\n
\n {\n discount.discount.type === 'quantity' ? (\n

{getQuantityDiscountText()}

\n ) : (\n

-{discount.discount.rate}%

\n )\n }\n
\n )\n }\n
\n \n
\n
\n

{item.product.name}

\n {\n discount && discount.discount.type === 'percent' ? (\n

{(item.priceTTC - (item.priceTTC * (discount.discount.rate / 100))).toFixed(2)} € {item.priceTTC} €

\n ) : (\n

{item.priceTTC} €

\n )\n }\n
\n )\n}\n\nexport default MenuItem;\n","import {useState} from 'react';\n\ninterface UseLoaderReturnType {\n visible: boolean;\n show: () => void;\n hide: () => void;\n}\n\nexport const useLoader = (): UseLoaderReturnType => {\n const [visible, setVisible] = useState(false);\n const show = () => setVisible(true);\n const hide = () => setVisible(false);\n\n return {\n visible,\n show,\n hide,\n };\n};\n","import React from \"react\";\nimport './Loader.scss'\nimport Lottie from \"react-lottie\";\nimport animationData from \"../../Assets/98510-loader.json\";\n\ninterface Props {\n visible: boolean\n}\n\nconst Loader: React.FC = ({visible}: Props) => {\n\n const defaultOptions = {\n loop: true,\n autoplay: true,\n animationData: animationData,\n rendererSettings: {\n preserveAspectRatio: \"xMidYMid slice\"\n }\n };\n\n return (\n <>\n {\n visible && (\n
\n \n
\n )\n }\n \n )\n}\n\nexport default Loader\n","import {useSelector} from \"react-redux\";\nimport {ProductModel} from \"../Models/ProductModel\";\nimport {StateModel} from \"../Models/StateModel\";\nimport {OrderModel} from \"../Models/OrderModel\";\n\nexport const useGetStockAvailable = (): (product?: ProductModel) => number => {\n const panier = useSelector(state => state.panier)\n return (product?: ProductModel): number => {\n if(product) {\n const panierProducts = panier?.orderProducts?.filter(p => p.product.id === product.product.id)\n if (panierProducts) {\n const quantityInPanier = panierProducts.map(p => p.quantity ?? 0).reduce((prev, curr) => prev + curr, 0)\n return product.stockAvailable - quantityInPanier\n }\n return product.stockAvailable\n }\n return 0\n }\n}\n","import React, {useEffect, useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\n\nimport './MenuPage.scss'\nimport {useNavigate, useSearchParams} from \"react-router-dom\";\nimport {ProductModel} from \"../../Models/ProductModel\";\nimport MenuItem from \"../../Components/MenuItem/MenuItem\";\nimport useHttpClient from \"../../hooks/http/useHttpClient\";\nimport Confirm from \"../../Components/Confirm/Confirm\";\nimport {setPanier, setSelectedPdv, setTimeCreationPanier} from \"../../store/actions\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {OrderModel} from \"../../Models/OrderModel\";\nimport {useLoader} from \"../../hooks/useLoader\";\nimport Loader from \"../../Components/Loader/Loader\";\nimport {DoorModel} from \"../../Models/DoorModel\";\nimport Error from \"../../Components/Error/Error\";\nimport {useModal} from \"../../hooks/useModal\";\nimport {useError} from \"../../hooks/useError\";\nimport {useGetEvent} from \"../../hooks/useGetEvent\";\nimport {useGetStockAvailable} from \"../../hooks/useGetStockAvailable\";\n\nconst MenuPage: React.FC = ({}) => {\n const navigate = useNavigate()\n const dispatch = useDispatch()\n const {getProducts} = useHttpClient()\n const [searchParams,] = useSearchParams();\n const pdvId = searchParams.get(\"pdvId\")\n\n const panier = useSelector(state => state.panier)\n const timeCreationPanier = useSelector(state => state.timeCreationPanier)\n\n const door = useSelector(state => state.door)\n\n const [products, setProducts] = useState([])\n const [showConfirm, setShowConfirm] = useState(false)\n const getStockAvailable = useGetStockAvailable()\n\n const loader = useLoader()\n const showError = useModal()\n const eventError = useError()\n const apiError = useError()\n const getEvent = useGetEvent(() => {\n loader.hide()\n eventError.open(\"\")\n }, () => {\n loader.hide()\n apiError.open(\"\")\n })\n\n useEffect(() => {\n if (timeCreationPanier) {\n const now = new Date().getTime();\n\n if (now - timeCreationPanier > 21600000) {\n dispatch(setPanier(undefined))\n dispatch(setTimeCreationPanier(undefined))\n }\n }\n }, [timeCreationPanier])\n\n\n useEffect(() => {\n if (pdvId) {\n dispatch(setSelectedPdv(+pdvId))\n loader.show()\n getEvent(\n searchParams.get(\"stadium\") || undefined,\n () => {\n void getProducts(pdvId).then((response: ProductModel[]) => {\n setProducts(response.filter(p => getStockAvailable(p) > 0))\n if (response.length === 0) {\n showError.open()\n }\n }).catch(() => apiError.open(\"\"))\n .finally(loader.hide)\n }\n )\n }\n }, [pdvId])\n\n const onBackClick = () => {\n if (door) {\n if (panier?.orderProducts && panier.orderProducts.length > 0) {\n setShowConfirm(true)\n } else {\n back()\n }\n }\n }\n\n\n const back = () => {\n dispatch(setPanier(undefined))\n dispatch(setTimeCreationPanier(undefined))\n if (door) {\n navigate(`/stands?stadium=${searchParams.get(\"stadium\")}&doorId=${door.id}`)\n } else {\n navigate(`/menu?stadium=${searchParams.get(\"stadium\")}&pdvId=${pdvId}`)\n }\n }\n\n return (\n \n
\n {\n products.map((p, i) => (\n \n ))\n }\n
\n setShowConfirm(false)}\n onOk={back}\n />\n navigate(-1)}\n title=\"Ce stand n’est pas disponible pour des commandes\"\n subTitle=\"Veuillez sélectionner un autre stand ou rendez-vous directement au stand le plus proche.\"\n />\n \n \n \n
\n )\n}\n\nexport default MenuPage;\n","export default __webpack_public_path__ + \"static/media/moins.00dfbf86.svg\";","export default __webpack_public_path__ + \"static/media/plus.94e45323.svg\";","export default __webpack_public_path__ + \"static/media/check.6348cd58.svg\";","\nexport const useGetReductionFromPercentage = (): [(total: number, percentage: number) => number, (total: number, percentage: number) => number] => {\n\n const getTotalMinusReduction = (total: number, percentage: number): number => {\n return total - getReduction(total, percentage)\n }\n\n const getReduction = (total: number, percentage: number): number => {\n return total * (percentage / 100)\n }\n\n return [getTotalMinusReduction, getReduction]\n}\n","import {DiscountModel, ProductModel} from \"../Models/ProductModel\";\nimport {OrderProductModel} from \"../Models/OrderModel\";\nimport {useGetTva} from \"./useGetTva\";\nimport {useGetReductionFromPercentage} from \"./useGetReductionFromPercentage\";\n\nexport const useCreateOrderWithPercentDiscount = (): (p: ProductModel, discount: DiscountModel, quantitee: number) => OrderProductModel => {\n const getTva = useGetTva()\n const [getTotalMinusReduction, getReduction] = useGetReductionFromPercentage()\n\n return (p: ProductModel, discount: DiscountModel, quantitee: number): OrderProductModel => {\n const rate = discount.discount.rate\n const unitTva = getTva(p.priceTTC, p.product.tva.rate)\n const unitPriceHT = p.priceTTC - unitTva\n return {\n name: p.product.name,\n quantity: quantitee,\n unitPriceHT: unitPriceHT + p.depositPriceTTC,\n unitPriceTTC: p.priceTTC + p.depositPriceTTC,\n unitDepositPriceTTC: p.depositPriceTTC,\n tvaRate: p.product.tva.rate,\n discount: getReduction(p.priceTTC * quantitee, rate),\n discountName: discount.name,\n discountType: 'percent',\n discountRate: rate,\n totalPriceHT: +(getTotalMinusReduction(unitPriceHT * quantitee, rate).toFixed(5)) + (p.depositPriceTTC * quantitee),\n totalPriceTTC: +(getTotalMinusReduction(p.priceTTC * quantitee, rate) + (p.depositPriceTTC * quantitee)).toFixed(2),\n totalDepositPriceTTC: p.depositPriceTTC * quantitee,\n totalTva: +(getTotalMinusReduction(unitTva * quantitee, rate)).toFixed(2),\n tvaCode: p.product.tva.id,\n product: {\n id: p.product.id,\n image: p.product.image,\n categories: p.product.productCategories\n }\n }\n }\n}\n","export const useGetTva = (): (price: number, tvaRate: number) => number => {\n\n return (price: number, tvaRate: number): number => {\n return +((price - price * 100 / (100 + tvaRate)).toFixed(2))\n }\n}\n","import {ProductModel} from \"../Models/ProductModel\";\nimport {OrderProductModel} from \"../Models/OrderModel\";\nimport {useGetTva} from \"./useGetTva\";\n\nexport const useCreateOrderWithoutDiscount = (): (p: ProductModel, quantitee: number) => OrderProductModel => {\n const getTva = useGetTva()\n\n return (p: ProductModel, quantitee: number): OrderProductModel => {\n const unitTva = getTva(p.priceTTC, p.product.tva.rate)\n const unitPriceHT = +((p.priceTTC - unitTva).toFixed(5))\n return {\n name: p.product.name,\n quantity: quantitee,\n unitPriceHT: unitPriceHT + p.depositPriceTTC,\n unitPriceTTC: p.priceTTC + p.depositPriceTTC,\n unitDepositPriceTTC: p.depositPriceTTC,\n tvaRate: p.product.tva.rate,\n totalPriceHT: (unitPriceHT + p.depositPriceTTC) * quantitee,\n totalPriceTTC: +((p.priceTTC + p.depositPriceTTC) * quantitee).toFixed(2),\n totalDepositPriceTTC: p.depositPriceTTC * quantitee,\n totalTva: unitTva * quantitee,\n tvaCode: p.product.tva.id,\n product: {\n id: p.product.id,\n image: p.product.image,\n categories: p.product.productCategories,\n }\n }\n }\n}\n","import {DiscountModel} from \"../Models/ProductModel\";\nimport {OrderProductModel} from \"../Models/OrderModel\";\n\nexport const useGetReductionFromQuantity = (): [\n (total: number, unitPriceTTC: number, quantity: number, discount: DiscountModel, otherOrderProducts: OrderProductModel[]) => number,\n (total: number, unitPriceTTC: number, quantity: number, discount: DiscountModel, otherOrderProducts: OrderProductModel[]) => number ] => {\n\n function getReduction(total: number, unitPriceTTC: number, quantity: number, discount: DiscountModel, otherOrderProducts: OrderProductModel[]):number {\n const otherOrderProductsWithSamePrice = otherOrderProducts.filter(p => p.unitPriceTTC === unitPriceTTC)\n const quantityAlreayInOrder = otherOrderProductsWithSamePrice.map(p => p.quantity || 0).reduce((prev, curr) => prev + curr, 0)\n const reductionAlreadyGetted = otherOrderProductsWithSamePrice.filter(p => p.discountName === discount.name && p.discount !== 0).length\n const quantityToCheck = quantityAlreayInOrder - (reductionAlreadyGetted * discount.discount.rateTotal) + quantity\n\n if(quantityToCheck < discount.discount.rateTotal) {return 0}\n\n const multiple = Math.floor(quantityToCheck / discount.discount.rateTotal) > 0 ? Math.floor(quantityToCheck / discount.discount.rateTotal) : 1\n\n return total / quantity * (discount.discount.rateTotal - discount.discount.rate) * multiple;\n }\n\n const getTotalMinusReduction = (total: number, unitPriceTTC: number, quantity: number, discount: DiscountModel, otherOrderProducts: OrderProductModel[]): number => {\n const reduction = getReduction(total, unitPriceTTC, quantity, discount, otherOrderProducts)\n return reduction ? total - reduction : total\n }\n\n return [getTotalMinusReduction, getReduction]\n}\n","import {DiscountModel, ProductModel} from \"../Models/ProductModel\";\nimport {OrderProductModel} from \"../Models/OrderModel\";\nimport {useGetTva} from \"./useGetTva\";\nimport {useGetReductionFromQuantity} from \"./useGetReductionFromQuantity\";\n\nexport const useCreateOrderWithQuantityDiscount = (): (product: ProductModel, discount: DiscountModel, quantitee: number, otherOrderProducts: OrderProductModel[]) => OrderProductModel => {\n const getTva = useGetTva()\n const [getTotalMinusReduction, getReduction] = useGetReductionFromQuantity()\n\n\n return (product: ProductModel, discount: DiscountModel, quantitee: number, otherOrderProducts: OrderProductModel[]): OrderProductModel => {\n const unitTva = getTva(product.priceTTC, product.product.tva.rate)\n const unitPriceHT = product.priceTTC - unitTva\n return {\n name: product.product.name,\n quantity: quantitee,\n unitPriceHT: unitPriceHT + product.depositPriceTTC,\n unitPriceTTC: product.priceTTC + product.depositPriceTTC,\n unitDepositPriceTTC: product.depositPriceTTC,\n tvaRate: product.product.tva.rate,\n discountName: discount.name,\n discountType: 'quantity',\n discountModel: discount,\n discount: getReduction(product.priceTTC * quantitee, product.priceTTC, quantitee, discount, otherOrderProducts),\n totalPriceHT: +(getTotalMinusReduction(unitPriceHT * quantitee, product.priceTTC, quantitee, discount, otherOrderProducts).toFixed(5)) + (product.depositPriceTTC * quantitee),\n totalPriceTTC: +(getTotalMinusReduction(product.priceTTC * quantitee, product.priceTTC, quantitee, discount, otherOrderProducts) + (product.depositPriceTTC * quantitee)).toFixed(2),\n totalDepositPriceTTC: product.depositPriceTTC * quantitee,\n totalTva: +(getTotalMinusReduction(unitTva * quantitee, product.priceTTC, quantitee, discount, otherOrderProducts)).toFixed(2),\n tvaCode: product.product.tva.id,\n product: {\n id: product.product.id,\n image: product.product.image,\n categories: product.product.productCategories,\n }\n }\n }\n}\n","import {OrderModel} from \"../Models/OrderModel\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StateModel} from \"../Models/StateModel\";\nimport {StadiumModel} from \"../Models/StadiumModel\";\nimport {EventModel} from \"../Models/EventModel\";\nimport {setPanier, setTimeCreationPanier} from \"../store/actions\";\n\nexport const useUpdatePanier = (): (panier: OrderModel) => void => {\n const dispatch = useDispatch()\n const stadium = useSelector(state => state.stadium)\n const event = useSelector(state => state.event)\n const selectedPdv = useSelector(state => state.selectedPdv)\n\n return (panier: OrderModel): void => {\n panier.stadium = stadium ? {id: stadium.id} : {}\n panier.event = event ? {id: event.id} : {}\n panier.pdv = selectedPdv ? {id: selectedPdv} : {}\n dispatch(setTimeCreationPanier(new Date().getTime()))\n panier.priceHT = (panier.orderProducts?.map(o => o.totalPriceHT || 0).reduce((prev, curr) => prev + curr, 0) || 0).toString()\n panier.priceTTC = (panier.orderProducts?.map(o => o.totalPriceTTC || 0).reduce((prev, curr) => prev + curr, 0) || 0).toString()\n panier.totalTva = (panier.orderProducts?.map(o => o.totalTva || 0).reduce((prev, curr) => prev + curr, 0) || 0).toString()\n panier.totalPriceHT = (panier.orderProducts?.map(o => o.totalPriceHT || 0).reduce((prev, curr) => prev + curr, 0) || 0).toString()\n panier.totalPriceTTC = (panier.orderProducts?.map(o => o.totalPriceTTC || 0).reduce((prev, curr) => prev + curr, 0) || 0).toString()\n\n dispatch(setPanier(panier))\n }\n}\n\n/*\ncreatedAt?: Date,\n priceHT?: string,\n priceTTC?: string,\n totalTva?: string,\n totalPriceHT?: string,\n totalPriceTTC?: string,\n */\n","import {OrderProductModel} from \"../Models/OrderModel\";\n\nexport const useUpdateOrderWithoutDiscount = (): (p: OrderProductModel, quantity: number) => OrderProductModel => {\n\n return (p: OrderProductModel, quantity: number): OrderProductModel => {\n const totalPriceHT = p.unitPriceHT ? +((p.unitPriceHT * quantity).toFixed(5)) : 0\n const totalPriceTTC = p.unitPriceTTC ? +(p.unitPriceTTC * quantity).toFixed(2) : 0\n const totalDepositPriceTTC = p.unitDepositPriceTTC ? p.unitDepositPriceTTC * quantity : 0\n return {\n ...p,\n quantity,\n totalPriceHT ,\n totalPriceTTC,\n totalDepositPriceTTC,\n totalTva: totalPriceTTC - totalPriceHT,\n }\n }\n}\n","import {OrderProductModel} from \"../Models/OrderModel\";\nimport {useGetReductionFromPercentage} from \"./useGetReductionFromPercentage\";\n\nexport const useUpdateOrderWithPercentDiscount = (): (p: OrderProductModel, quantity: number) => OrderProductModel => {\n const [getTotalMinusReduction, getReduction] = useGetReductionFromPercentage()\n\n return (p: OrderProductModel, quantity: number): OrderProductModel => {\n const rate = p.discountRate || 0\n const unitPriceTTC = p.unitPriceTTC || 0\n const unitDepositPriceTTC = p.unitDepositPriceTTC || 0\n const unitPriceHT = p.unitPriceHT || 0\n const discount = getReduction(unitPriceTTC * quantity, rate)\n const totalPriceHT = +(getTotalMinusReduction(unitPriceHT * quantity, rate).toFixed(5)) + (unitDepositPriceTTC * quantity)\n const totalPriceTTC = +(getTotalMinusReduction((unitPriceTTC - unitDepositPriceTTC) * quantity, rate) + (unitDepositPriceTTC * quantity)).toFixed(2)\n const totalDepositPriceTTC = p.unitDepositPriceTTC ? p.unitDepositPriceTTC * quantity : 0\n return {\n ...p,\n quantity,\n discount,\n totalPriceHT,\n totalPriceTTC,\n totalDepositPriceTTC,\n totalTva: totalPriceTTC - totalPriceHT,\n }\n }\n}\n","import {OrderProductModel} from \"../Models/OrderModel\";\nimport {useGetReductionFromQuantity} from \"./useGetReductionFromQuantity\";\n\nexport const useUpdateOrderWithQuantityDiscount = (): (p: OrderProductModel, quantity: number, otherOrderProducts: OrderProductModel[]) => OrderProductModel => {\n const [getTotalMinusReduction, getReduction] = useGetReductionFromQuantity()\n\n\n return (p: OrderProductModel, quantity: number, otherOrderProducts: OrderProductModel[]): OrderProductModel => {\n const unitPriceTTC = p.unitPriceTTC || 0\n const unitDepositPriceTTC = p.unitDepositPriceTTC || 0\n const unitPriceHT = p.unitPriceHT || 0\n const discount = p. discountModel ? getReduction(unitPriceTTC * quantity, unitPriceTTC, quantity, p.discountModel, otherOrderProducts) : 0\n const totalPriceHT = p.discountModel ? +(getTotalMinusReduction(unitPriceHT * quantity, unitPriceTTC, quantity, p.discountModel, otherOrderProducts).toFixed(5)) + (unitDepositPriceTTC * quantity) : 0\n const totalPriceTTC = p.discountModel ? +(getTotalMinusReduction((unitPriceTTC - unitDepositPriceTTC)* quantity, unitPriceTTC, quantity, p.discountModel, otherOrderProducts) + (unitDepositPriceTTC * quantity)).toFixed(2) : 0\n const totalDepositPriceTTC = p.unitDepositPriceTTC ? p.unitDepositPriceTTC * quantity : 0\n return {\n ...p,\n quantity,\n discount,\n totalPriceHT,\n totalPriceTTC,\n totalDepositPriceTTC,\n totalTva: totalPriceTTC - totalPriceHT\n }\n }\n}\n","export default __webpack_public_path__ + \"static/media/deposit.2869bb26.svg\";","import React, {useEffect, useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\nimport moins from '../../Assets/Icons/moins.svg'\nimport plus from '../../Assets/Icons/plus.svg'\nimport check from '../../Assets/Icons/check.svg'\n\nimport './ItemPage.scss'\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport BottomSheet from \"../../Components/BottomSheet/BottomSheet\";\nimport {useNavigate} from \"react-router-dom\";\nimport {useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {ProductModel} from \"../../Models/ProductModel\";\nimport {OrderModel, OrderProductModel} from \"../../Models/OrderModel\";\nimport {useCreateOrderWithPercentDiscount} from \"../../hooks/useCreateOrderWithPercentDiscount\";\nimport {useCreateOrderWithoutDiscount} from \"../../hooks/useCreateOrderWithoutDiscount\";\nimport {useGetDiscount} from \"../../hooks/useGetDiscount\";\nimport {useCreateOrderWithQuantityDiscount} from \"../../hooks/useCreateOrderWithQuantityDiscount\";\nimport {useGetReductionFromQuantity} from \"../../hooks/useGetReductionFromQuantity\";\nimport {useGetReductionFromPercentage} from \"../../hooks/useGetReductionFromPercentage\";\nimport {useUpdatePanier} from \"../../hooks/useUpdatePanier\";\nimport {useUpdateOrderWithoutDiscount} from \"../../hooks/useUpdateOrderWithoutDiscount\";\nimport {useUpdateOrderWithPercentDiscount} from \"../../hooks/useUpdateOrderWithPercentDiscount\";\nimport {useUpdateOrderWithQuantityDiscount} from \"../../hooks/useUpdateOrderWithQuantityDiscount\";\nimport Deposit from \"../../Assets/Icons/deposit.svg\"\nimport Error from \"../../Components/Error/Error\";\nimport {useModal} from \"../../hooks/useModal\";\nimport {useGetStockAvailable} from \"../../hooks/useGetStockAvailable\";\n\nconst ItemPage: React.FC = ({}) => {\n const navigate = useNavigate()\n\n const product = useSelector(state => state.productToShow)\n const panier = useSelector(state => state.panier)\n const [quantitee, setQuantitee] = useState(1)\n const [total, setTotal] = useState(product ? product.priceTTC + product.depositPriceTTC : 0)\n const [showBtmSheet, setShowBtmSheet] = useState(false)\n const [showConsigne, setShowConsigne] = useState(false)\n\n const getDiscount = useGetDiscount()\n const discount = getDiscount(product?.automaticDiscounts || [], new Date())\n const updatePanier = useUpdatePanier()\n const updateOrderWithoutDiscount = useUpdateOrderWithoutDiscount()\n const updateOrderWithPercentDiscount = useUpdateOrderWithPercentDiscount()\n const updateOrderWithQuantityDiscount = useUpdateOrderWithQuantityDiscount()\n const createOrderWithPercentDiscount = useCreateOrderWithPercentDiscount()\n const createOrderWithQuantityDiscount = useCreateOrderWithQuantityDiscount()\n const createOrderWithoutDiscount = useCreateOrderWithoutDiscount()\n const [getTotalMinusReductionQuantity, ] = useGetReductionFromQuantity()\n const [getTotalMinusReductionPercent, ] = useGetReductionFromPercentage()\n\n const modalQuantiteInsufisante = useModal()\n const getStockAvailable = useGetStockAvailable()\n\n const calculTotal = () => {\n let res = 0\n if (product) {\n if(discount) {\n if(discount.discount.type === \"quantity\") {\n res = getTotalMinusReductionQuantity(product.priceTTC * quantitee, product.priceTTC, quantitee, discount, panier?.orderProducts || []) + (product.depositPriceTTC * quantitee)\n } else {\n res = getTotalMinusReductionPercent(product.priceTTC * quantitee, discount.discount.rate) + (product.depositPriceTTC * quantitee)\n }\n } else {\n res = (product.priceTTC + product.depositPriceTTC) * quantitee\n }\n }\n return res\n }\n\n useEffect(() => {\n window.scrollTo(0,0);\n }, []);\n\n useEffect(() => {\n setTotal(calculTotal())\n }, [quantitee])\n\n const add = () => {\n if(quantitee < getStockAvailable(product)) {\n setQuantitee(quantitee + 1)\n } else {\n modalQuantiteInsufisante.open()\n }\n }\n\n const remove = () => {\n if(quantitee > 1) {\n setQuantitee(quantitee - 1)\n }\n }\n\n const handleAddClick = () => {\n const index = panier?.orderProducts?.findIndex(p => p.product.id === product?.product.id)\n\n if(index !== undefined && index !== -1) {\n updateCartProduct(index)\n } else {\n addToCart()\n }\n }\n\n const addToCart = () => {\n if(product) {\n const newPanier: OrderModel = panier ? {...panier} : {}\n if(!newPanier.orderProducts) {\n newPanier.orderProducts = []\n }\n let productToPush: OrderProductModel\n const discount = getDiscount(product.automaticDiscounts, new Date())\n if(discount) {\n if(discount.discount.type === \"quantity\") {\n productToPush = createOrderWithQuantityDiscount(product, discount, quantitee, newPanier.orderProducts)\n } else {\n productToPush = createOrderWithPercentDiscount(product, discount, quantitee)\n }\n } else {\n productToPush = createOrderWithoutDiscount(product, quantitee)\n }\n newPanier.orderProducts.push(productToPush)\n updatePanier(newPanier)\n setShowBtmSheet(true)\n }\n }\n\n const updateCartProduct = (index: number) => {\n const newPanier = {...panier} || {}\n if(!newPanier.orderProducts) {\n newPanier.orderProducts = []\n }\n const itemQuantity = newPanier.orderProducts[index].quantity || 0\n newPanier.orderProducts[index].quantity = itemQuantity + quantitee\n\n const newOrderProducts: OrderProductModel[] = []\n\n newPanier.orderProducts.map(p => {return {...p, totalPriceHT: 0, totalPriceTTC: 0, totalTva: 0, discount: 0}}).forEach((p) => {\n if(!p.discountType) {\n newOrderProducts.push(updateOrderWithoutDiscount(p, p.quantity || 0))\n } else if(p.discountType === 'percent') {\n newOrderProducts.push(updateOrderWithPercentDiscount(p, p.quantity || 0))\n } else {\n newOrderProducts.push(updateOrderWithQuantityDiscount(p, p.quantity || 0, newOrderProducts))\n }\n })\n\n newPanier.orderProducts = newOrderProducts\n updatePanier(newPanier)\n setShowBtmSheet(true)\n }\n\n return (\n \n {\n product ? (\n
\n
\n
\n {product.product.name}/\n {\n product?.depositPriceTTC > 0 && (\n
setShowConsigne(true)}>\n \"icone\n

Consigne de {product.depositPriceTTC}€ sur ce produit

\n
\n )\n }\n
\n

{product.product.name}

\n {\n discount && discount.discount.type === 'percent' ? (\n

{(product.priceTTC - (product.priceTTC * (discount.discount.rate / 100))).toFixed(2)} € {product.priceTTC} €

\n ) : (\n

{product.priceTTC} €

\n )\n }\n

Quantité

\n
\n {\"quantitee\n

{quantitee}

\n {\"quantitee\n
\n
\n
\n
\n

Total

\n

{total.toFixed(2)}€

\n
\n \n
\n
\n ) : <>\n }\n setShowBtmSheet(false)}>\n
\n \"check\n

Article bien ajouté au panier

\n

{quantitee > 1 ? `${quantitee} articles` : '1 article'}

\n
\n navigate(-1)} text=\"Continuer\" className=\"bottomSheetContent__btns--btn\" type=\"outline\"/>\n navigate('/panier', {state: {fromItemPage: true}})} text=\"Panier\" className=\"bottomSheetContent__btns--btn\"/>\n
\n
\n
\n setShowConsigne(false)}\n title={`Une consigne de ${product?.depositPriceTTC}€ est appliquée sur le prix de ce produit`}\n subTitle=\"Rapportez votre gobelet dans les buvettes ouvertes pour récupérer votre consigne\"\n btnTxt=\"Compris\"\n />\n \n
\n )\n}\n\nexport default ItemPage;\n","export default __webpack_public_path__ + \"static/media/trash.78674e72.svg\";","export default __webpack_public_path__ + \"static/media/panierMoins.c50697fd.svg\";","export default __webpack_public_path__ + \"static/media/panierMoinsDisabled.1eb3fb55.svg\";","export default __webpack_public_path__ + \"static/media/panierPlus.5c362caa.svg\";","import React, {useState} from 'react'\n\nimport trash from '../../Assets/Icons/trash.svg'\nimport panierMoins from '../../Assets/Icons/panierMoins.svg'\nimport panierMoinsDisabled from '../../Assets/Icons/panierMoinsDisabled.svg'\nimport panierPlus from '../../Assets/Icons/panierPlus.svg'\n\nimport './PanierItem.scss'\nimport {OrderProductModel} from \"../../Models/OrderModel\";\nimport Deposit from \"../../Assets/Icons/deposit.svg\";\nimport Error from \"../Error/Error\";\n\ninterface MenuItemProps {\n item: OrderProductModel,\n onMinusClick: () => void,\n onPlusClick: () => void,\n onDeleteClick: () => void,\n}\n\nconst PanierItem: React.FC = ({item, onMinusClick, onPlusClick, onDeleteClick}: MenuItemProps) => {\n const [showConsigne, setShowConsigne] = useState(false)\n\n return (\n
\n
\n
\n \n
\n
\n

{item.name}

\n

{item.totalPriceTTC} €

\n
\n
\n \"icone\n
\n 1 ? panierMoins : panierMoinsDisabled}\n alt=\"bouton moins\" onClick={onMinusClick}/>\n

{item.quantity}

\n \"bouton\n
\n
\n
\n {\n item?.totalDepositPriceTTC !== 0 && (\n <>\n
setShowConsigne(true)}>\n \"icone\n

Consigne de {item.totalDepositPriceTTC}€ sur ce produit

\n
\n setShowConsigne(false)}\n title={`Une consigne de ${item.totalDepositPriceTTC}€ est appliquée sur le prix de ce produit`}\n subTitle=\"Rapportez votre gobelet dans les buvettes ouvertes pour récupérer votre consigne\"\n btnTxt=\"Compris\"\n />\n \n )\n }\n
\n )\n}\n\nexport default PanierItem;\n","export default __webpack_public_path__ + \"static/media/cross.9dedf637.svg\";","import React from 'react'\n\nimport './CrossSellingItem.scss'\nimport {ProductModel} from \"../../Models/ProductModel\";\nimport {useGetDiscount} from \"../../hooks/useGetDiscount\";\nimport Plus from '../../Assets/Icons/plus.svg'\nimport Moins from '../../Assets/Icons/moins.svg'\n\ninterface MenuItemProps {\n item: ProductModel,\n quantity: number,\n onAddItem: () => void\n onPlus: () => void\n onMoins: () => void\n}\n\nconst CrossSellingItem: React.FC = ({item, quantity, onAddItem, onPlus, onMoins}: MenuItemProps) => {\n const getDiscount = useGetDiscount()\n\n const discount = getDiscount(item.automaticDiscounts, new Date())\n\n const getQuantityDiscountText = () => {\n if(discount) {\n const achete = discount.discount.rate > 1 ? \"achetés\" : \"acheté\"\n const offert = discount.discount.rateTotal - discount.discount.rate > 1 ? \"offerts\" : \"offert\"\n return `${discount.discount.rate} ${achete} = ${discount.discount.rateTotal - discount.discount.rate} ${offert}`\n }\n return ''\n }\n\n return (\n
\n
\n {\n discount && (\n
\n {\n discount.discount.type === 'quantity' ? (\n

{getQuantityDiscountText()}

\n ) : (\n

-{discount.discount.rate}%

\n )\n }\n
\n )\n }\n
\n \n
\n
\n {\n discount && discount.discount.type === 'percent' ? (\n

{item.priceTTC - (item.priceTTC * (discount.discount.rate / 100))} € {item.priceTTC} €

\n ) : (\n

{item.priceTTC} €

\n )\n }\n

{item.product.name}

\n {\n quantity === 0 ? (\n \n ) : (\n\n
\n

{quantity}

\n \n \n
\n )\n }\n
\n )\n}\n\nexport default CrossSellingItem;\n","import React, {useState} from 'react'\nimport Close from '../../Assets/Icons/cross.svg';\nimport {ProductModel} from \"../../Models/ProductModel\";\nimport BottomSheet from \"../BottomSheet/BottomSheet\";\nimport './CrossSelling.scss'\nimport CrossSellingItem from \"../CrossSellingItem/CrossSellingItem\";\nimport BaseButton from \"../BaseButton/BaseButton\";\nimport {OrderModel, OrderProductModel} from \"../../Models/OrderModel\";\nimport {useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {useGetDiscount} from \"../../hooks/useGetDiscount\";\nimport {useUpdatePanier} from \"../../hooks/useUpdatePanier\";\nimport {useCreateOrderWithPercentDiscount} from \"../../hooks/useCreateOrderWithPercentDiscount\";\nimport {useCreateOrderWithQuantityDiscount} from \"../../hooks/useCreateOrderWithQuantityDiscount\";\nimport {useCreateOrderWithoutDiscount} from \"../../hooks/useCreateOrderWithoutDiscount\";\nimport {useNavigate} from \"react-router-dom\";\n\ninterface Props {\n show: boolean,\n close?: () => void\n products: ProductModel[]\n}\n\ninterface ProductToAddModel {\n id: number,\n product: ProductModel,\n quantity: number,\n}\n\nconst CrossSelling: React.FC = ({show, close, products}: Props) => {\n const navigate = useNavigate()\n\n const userLoged = useSelector(state => state.user?.id !== undefined)\n const panier = useSelector(state => state.panier)\n\n const [productsToAdd, setProductsToAdd] = useState([])\n\n const getDiscount = useGetDiscount()\n const updatePanier = useUpdatePanier()\n const createOrderWithPercentDiscount = useCreateOrderWithPercentDiscount()\n const createOrderWithQuantityDiscount = useCreateOrderWithQuantityDiscount()\n const createOrderWithoutDiscount = useCreateOrderWithoutDiscount()\n\n const addItem = (product: ProductModel) => {\n const newProductsToAdd = [...productsToAdd]\n newProductsToAdd.push({\n id: product.product.id,\n product,\n quantity: 1\n })\n setProductsToAdd(newProductsToAdd)\n }\n\n const addQuantity = (product: ProductModel) => {\n const newProductsToAdd = [...productsToAdd]\n const index = newProductsToAdd.findIndex(p => p.id === product.product.id)\n if(index !== -1) {\n const newProductToAdd = newProductsToAdd[index]\n newProductToAdd.quantity ++\n newProductsToAdd[index] = newProductToAdd\n }\n setProductsToAdd(newProductsToAdd)\n }\n\n const removeQuantity = (product: ProductModel) => {\n const newProductsToAdd = [...productsToAdd]\n const index = newProductsToAdd.findIndex(p => p.id === product.product.id)\n if(index !== -1) {\n const newProductToAdd = newProductsToAdd[index]\n newProductToAdd.quantity --\n if(newProductToAdd.quantity === 0) {\n newProductsToAdd.splice(index)\n } else {\n newProductsToAdd[index] = newProductToAdd\n }\n }\n setProductsToAdd(newProductsToAdd)\n }\n\n const getProductToAddQuantity = (product: ProductModel): number => {\n return productsToAdd.find(p => p.id === product.product.id)?.quantity ?? 0\n }\n\n const addToCart = (productToAdd: ProductToAddModel) => {\n const newPanier: OrderModel = panier ? {...panier} : {}\n if(!newPanier.orderProducts) {\n newPanier.orderProducts = []\n }\n let productToPush: OrderProductModel\n const discount = getDiscount(productToAdd.product.automaticDiscounts, new Date())\n if(discount) {\n if(discount.discount.type === \"quantity\") {\n productToPush = createOrderWithQuantityDiscount(productToAdd.product, discount, productToAdd.quantity, newPanier.orderProducts)\n } else {\n productToPush = createOrderWithPercentDiscount(productToAdd.product, discount, productToAdd.quantity)\n }\n } else {\n productToPush = createOrderWithoutDiscount(productToAdd.product, productToAdd.quantity)\n }\n newPanier.orderProducts.push(productToPush)\n updatePanier(newPanier)\n }\n\n const handlePaiementClick = () => {\n productsToAdd.forEach(p => {\n addToCart(p)\n })\n navigate(userLoged ? '/paiement' : '/commande')\n }\n\n return (\n \n
\n
\n

Envie d'autre chose ?

\n
\n \"close\"\n
\n
\n
\n {\n products.map((p,i) => (\n addItem(p)}\n quantity={getProductToAddQuantity(p)}\n onPlus={() => addQuantity(p)}\n onMoins={() => removeQuantity(p)}\n />\n ))\n }\n
\n
\n \n
\n
\n
\n )\n}\n\nexport default CrossSelling","import {OrderModel} from \"../Models/OrderModel\";\nimport {CategorieModel, ProductModel} from \"../Models/ProductModel\";\nimport {useEffect, useState} from \"react\";\nimport useHttpClient from \"./http/useHttpClient\";\nimport {useGetStockAvailable} from \"./useGetStockAvailable\";\n\nexport const useGetCrossSellingItems = (order: OrderModel | undefined): ProductModel[] => {\n const [products, setProducts] = useState([])\n const{getProducts} = useHttpClient()\n const getStockAvailable = useGetStockAvailable()\n\n function shuffle(array: ProductModel[]) {\n let currentIndex = array.length, randomIndex;\n\n // While there remain elements to shuffle.\n while (currentIndex !== 0) {\n\n // Pick a remaining element.\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex--;\n\n // And swap it with the current element.\n [array[currentIndex], array[randomIndex]] = [\n array[randomIndex], array[currentIndex]];\n }\n\n return array;\n }\n\n const isBoisson = (categories: CategorieModel[]) => {\n return categories.map(c => c.name).join(\"\").toLowerCase().includes('boisson')\n }\n\n const isAlimentaire = (categories: CategorieModel[]) => {\n return categories.map(c => c.name).join(\"\").toLowerCase().includes('alimentaire')\n }\n\n const isSnack = (categories: CategorieModel[]) => {\n return categories.map(c => c.name).join(\"\").toLowerCase().includes('snack')\n }\n\n const filterProducts = (products: ProductModel[]) => {\n const orderProductsTypes = order?.orderProducts?.map(op => op.product).map(o => {\n if (isBoisson(o.categories ?? [])) {\n return 'boisson'\n }\n if (isAlimentaire(o.categories ?? [])) {\n return 'alimentaire'\n }\n if (isSnack(o.categories ?? [])) {\n return 'snack'\n }\n return \"\"\n })\n let result: ProductModel[] = shuffle(products)\n if(orderProductsTypes?.every(t => t === \"boisson\")) {\n const boissons: ProductModel[] = result.filter(p => isBoisson(p.product.productCategories))\n const otherProducts: ProductModel[] = result.filter(p => !isBoisson(p.product.productCategories))\n result = [...otherProducts, ...boissons]\n } else if(orderProductsTypes?.every(t => t === \"alimentaire\")) {\n const alimentaires: ProductModel[] = result.filter(p => isAlimentaire(p.product.productCategories))\n const otherProducts: ProductModel[] = result.filter(p => !isAlimentaire(p.product.productCategories))\n result = [...otherProducts, ...alimentaires]\n } else if(orderProductsTypes?.every(t => t === \"snack\")) {\n const snacks: ProductModel[] = result.filter(p => isSnack(p.product.productCategories))\n const otherProducts: ProductModel[] = result.filter(p => !isSnack(p.product.productCategories))\n result = [...otherProducts, ...snacks]\n }\n result = result.filter(p => getStockAvailable(p) > 0)\n .filter(product => !order?.orderProducts?.map(op => op.product)\n .map(p => p.id)\n .includes(product.product.id))\n\n if(result.length > 4) {\n return result.slice(0, 4)\n }\n return result\n }\n\n useEffect(() => {\n const pdvId = order?.pdv?.id\n if(pdvId) {\n void getProducts(pdvId.toString()).then((r: any) => {\n setProducts(filterProducts(r))\n })\n }\n }, [order])\n\n return products\n}\n","import React, {useEffect, useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\n\nimport './PanierPage.scss'\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport {useLocation, useNavigate} from \"react-router-dom\";\nimport PanierItem from \"../../Components/PanierItem/PanierItem\";\nimport {useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {OrderModel, OrderProductModel} from \"../../Models/OrderModel\";\nimport {DoorModel} from \"../../Models/DoorModel\";\nimport {useUpdatePanier} from \"../../hooks/useUpdatePanier\";\nimport {useUpdateOrderWithoutDiscount} from \"../../hooks/useUpdateOrderWithoutDiscount\";\nimport {useUpdateOrderWithPercentDiscount} from \"../../hooks/useUpdateOrderWithPercentDiscount\";\nimport {useUpdateOrderWithQuantityDiscount} from \"../../hooks/useUpdateOrderWithQuantityDiscount\";\nimport {useModal} from \"../../hooks/useModal\";\nimport Confirm from \"../../Components/Confirm/Confirm\";\nimport {StadiumModel} from \"../../Models/StadiumModel\";\nimport CrossSelling from \"../../Components/CrossSelling/CrossSelling\";\nimport {useGetCrossSellingItems} from \"../../hooks/useGetCrossSellingItems\";\nimport {useGenerateReference} from \"../../hooks/useGenerateReference\";\nimport {ProductModel} from \"../../Models/ProductModel\";\nimport useHttpClient from \"../../hooks/http/useHttpClient\";\nimport Error from \"../../Components/Error/Error\";\n\nconst PanierPage: React.FC = ({}) => {\n const navigate = useNavigate()\n const {state} = useLocation() as { state: { fromItemPage?: boolean } }\n const {getProducts} = useHttpClient()\n\n const [products, setProducts] = useState([])\n const userLoged = useSelector(state => state.user?.id !== undefined)\n const panier = useSelector(state => state.panier)\n const porte = useSelector(state => state.door)\n const pdv = useSelector(state => state.selectedPdv)\n const stadium = useSelector(state => state.stadium)\n\n const [indexToDelete, setIndexToDelete] = useState(undefined)\n const [wait, setWait] = useState(true)\n\n const updatePanier = useUpdatePanier()\n const generateReference = useGenerateReference()\n const updateOrderWithoutDiscount = useUpdateOrderWithoutDiscount()\n const updateOrderWithPercentDiscount = useUpdateOrderWithPercentDiscount()\n const updateOrderWithQuantityDiscount = useUpdateOrderWithQuantityDiscount()\n const showConfirm = useModal()\n const showCrossSelling = useModal()\n const quantiteModifieModal = useModal()\n const quantiteInsufisanteModal = useModal()\n\n const crossSellingProducts = useGetCrossSellingItems(panier)\n\n useEffect(() => {\n void generateReference().then(() => setWait(false))\n if(pdv) {\n void getProducts(''+pdv).then((response: ProductModel[]) => {\n setProducts(response)\n let quantitModifie = false\n panier?.orderProducts?.forEach((orderProduct: OrderProductModel, index: number) => {\n const product = response.find(p => p.product.id === orderProduct.product.id)\n if(product?.stockAvailable === 0) {\n quantitModifie = true\n deleteProduct(index)\n } else if(product && orderProduct.quantity && orderProduct.quantity > product.stockAvailable) {\n quantitModifie = true\n while (orderProduct.quantity > product.stockAvailable) {\n handleQuantityClick(index, false)\n }\n }\n })\n if(quantitModifie) {\n quantiteModifieModal.open()\n }\n })\n }\n }, [])\n\n const handleQuantityClick = (index: number, plus: boolean) => {\n if(plus) {\n if(panier?.orderProducts) {\n const orderProduct = panier.orderProducts[index]\n const product = products.find(p => p.product.id === orderProduct.product.id)\n\n const quantity = orderProduct.quantity ?? 0\n const availableStock = product?.stockAvailable ?? 0\n\n if(quantity < availableStock) {\n updateOrderProduct(index, plus)\n } else {\n quantiteInsufisanteModal.open()\n }\n }\n } else {\n updateOrderProduct(index, plus)\n }\n }\n const updateOrderProduct = (index: number, plus: boolean) => {\n const newPanier = {...panier} || {}\n if(!newPanier.orderProducts) {\n newPanier.orderProducts = []\n }\n const quantity = newPanier.orderProducts[index].quantity || 0\n newPanier.orderProducts[index].quantity = plus ? quantity + 1 : quantity - 1\n\n const newOrderProducts: OrderProductModel[] = []\n\n newPanier.orderProducts.map(p => {return {...p, totalPriceHT: 0, totalPriceTTC: 0, totalTva: 0, discount: 0}}).forEach((p) => {\n if(!p.discountType) {\n newOrderProducts.push(updateOrderWithoutDiscount(p, p.quantity || 0))\n } else if(p.discountType === 'percent') {\n newOrderProducts.push(updateOrderWithPercentDiscount(p, p.quantity || 0))\n } else {\n newOrderProducts.push(updateOrderWithQuantityDiscount(p, p.quantity || 0, newOrderProducts))\n }\n })\n\n newPanier.orderProducts = newOrderProducts\n updatePanier(newPanier)\n }\n\n const handleDeleteClick = (index: number) => {\n setIndexToDelete(index)\n showConfirm.open()\n }\n\n const deleteProduct = (index?: number) => {\n if(index !== undefined) {\n const newPanier = {...panier} || {}\n if(!newPanier.orderProducts) {\n newPanier.orderProducts = []\n }\n\n const newOrderProducts = [...newPanier.orderProducts]\n newOrderProducts.splice(index, 1)\n newPanier.orderProducts = newOrderProducts\n updatePanier(newPanier)\n showConfirm.close()\n setIndexToDelete(undefined)\n }\n }\n\n\n const handleClick = () => {\n if(porte) {\n navigate(`/stands?stadium=${stadium?.reference}&doorId=${porte.id}`)\n } else {\n navigate(`/menu?stadium=${stadium?.reference}&pdvId=${pdv}`)\n }\n }\n\n const handlePaiementClick = () => {\n if(crossSellingProducts.length > 0) {\n showCrossSelling.open();\n } else {\n navigate(userLoged ? '/paiement' : '/commande')\n }\n }\n\n const getItemToDeleteQuantity = (): number => {\n return panier?.orderProducts && indexToDelete !== undefined ? panier.orderProducts[indexToDelete].quantity || 0 : 0\n }\n\n return (\n navigate(state?.fromItemPage ? -2 : -1)}>\n <>\n {\n panier?.orderProducts && panier.orderProducts.length > 0 ? (\n <>\n
\n {\n panier.orderProducts?.map((item, index) => (\n item.quantity && item.quantity > 1 && handleQuantityClick(index, false)}\n onPlusClick={() => handleQuantityClick(index, true)}\n onDeleteClick={() => handleDeleteClick(index)}\n />\n ))\n }\n
\n
\n
\n

Total

\n

{panier.totalPriceTTC} €

\n
\n \n
\n \n ) : (\n
\n

Votre panier est vide

\n

Commandez vos articles en cliquant sur le bouton ci-dessous

\n \n
\n )\n }\n 1 ? `${getItemToDeleteQuantity()} articles` : '1 article'}\n onOk={() => deleteProduct(indexToDelete)}\n onCancel={showConfirm.close}\n />\n \n \n \n \n
\n )\n}\n\nexport default PanierPage;\n","import {useDispatch} from \"react-redux\";\nimport {setPanierReference} from \"../store/actions\";\nimport useHttpClient from \"./http/useHttpClient\";\n\nexport const useGenerateReference = (): () => Promise => {\n const dispatch = useDispatch()\n const {getOrderDetail} = useHttpClient()\n\n const generateReference = (): string => {\n let result = `B`\n for ( let i = 0; i < 12 ; i++ ) {\n result += Math.floor(Math.random() * 10);\n }\n return result\n }\n\n return async (): Promise => {\n let reference;\n let exist;\n do {\n reference = generateReference();\n exist = await getOrderDetail(reference)\n .catch(() => console.log(\"la référence n'existe pas\"))\n } while (exist)\n dispatch(setPanierReference(reference))\n return Promise.resolve();\n }\n}\n","export default __webpack_public_path__ + \"static/media/checked.e1969a10.svg\";","export default __webpack_public_path__ + \"static/media/unchecked.9902141b.svg\";","export default __webpack_public_path__ + \"static/media/send.6eba4f60.svg\";","export default __webpack_public_path__ + \"static/media/eyeHidden.843760b3.svg\";","export default __webpack_public_path__ + \"static/media/eye.29befece.svg\";","import React, {useState} from 'react'\n\nimport eyeHidden from '../../Assets/Icons/eyeHidden.svg'\nimport eye from '../../Assets/Icons/eye.svg'\n\nimport './BaseInput.scss'\n\ninterface BaseButtonProps {\n title: string\n value: string\n placeholder?: string\n onChange: (val: string) => void\n type?: string\n helpTxt?: string\n className?: string\n errorTxt?: string\n}\n\nconst BaseInput: React.FC = ({title, value, placeholder=\"\", onChange, type=\"text\", helpTxt, className=\"\", errorTxt}: BaseButtonProps) => {\n\n const [inputType, setInputType] = useState(type)\n\n const changeInputType = () => {\n setInputType(inputType === \"password\" ? \"text\" : \"password\")\n }\n\n return (\n
\n
\n

{title}

\n onChange(e.target.value)} />\n {\n type === \"password\" && (\n \n )\n }\n
\n {helpTxt &&

{helpTxt}

}\n {errorTxt &&

{errorTxt}

}\n
\n )\n}\n\nexport default BaseInput;\n","import React from \"react\";\nimport './Success.scss'\nimport BaseButton from \"../BaseButton/BaseButton\";\nimport BottomSheet from \"../BottomSheet/BottomSheet\";\n\ninterface Props {\n show: boolean,\n close?: () => void\n title: string,\n subTitle?: string,\n icone: string,\n btnTxt?: string\n}\n\nconst Success: React.FC = ({show, close, title, subTitle, icone, btnTxt=\"Continuer\"}: Props) => {\n return (\n close ? close() : {}}>\n
\n \"send\n

{title}

\n {subTitle &&

{subTitle}

}\n {\n close && \n }\n
\n
\n )\n}\n\nexport default Success\n","import React, {useEffect, useState} from \"react\";\nimport './Login.scss'\nimport BaseButton from \"../BaseButton/BaseButton\";\nimport BottomSheet from \"../BottomSheet/BottomSheet\";\nimport send from '../../Assets/Icons/send.svg'\nimport BaseInput from \"../BaseInput/BaseInput\";\nimport axios from \"axios\";\nimport {setUser} from \"../../store/actions\";\nimport {useDispatch} from \"react-redux\";\nimport Success from \"../Success/Success\";\nimport {useLoader} from \"../../hooks/useLoader\";\nimport Loader from \"../Loader/Loader\";\nimport Error from \"../Error/Error\";\nimport {useError} from \"../../hooks/useError\";\n\ninterface Props {\n onValidate: () => void\n show: boolean\n onClose: () => void\n}\n\nconst Login: React.FC = ({onValidate, show, onClose}: Props) => {\n const dispatch = useDispatch()\n const [email, setEmail] = useState('')\n const [emailError, setEmailError] = useState(undefined)\n const [mdp, setMdp] = useState('')\n const [showSendMdpConfirm, setShowSendMdpConfirm] = useState(false)\n\n const loader = useLoader()\n const error = useError()\n\n useEffect(() => {\n setEmailError(undefined)\n }, [email])\n\n const handleBtn = () => {\n if(email.length > 0 && mdp.length > 0) {\n loader.show()\n axios.post(`${process.env.REACT_APP_BART_URL}/users/login`, {email, mdp})\n .then(res => {\n dispatch(setUser(res.data))\n onValidate()\n })\n .catch(() => {\n error.open('Mauvais email ou mot de passe')\n })\n .finally(loader.hide)\n }\n }\n\n const handleMdpClick = () => {\n if(email.length === 0) {\n setEmailError('Merci de rentrer votre email')\n } else {\n const regex = /^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/g\n if(regex.test(email)){\n loader.show()\n void axios.get(`${process.env.REACT_APP_BART_URL}/users/exist/${email}`)\n .then((response) => {\n loader.hide()\n if(response.data) {\n void axios.post(`${process.env.REACT_APP_BART_URL}/emails/send_reset_password_email/${email}`)\n setShowSendMdpConfirm(true)\n } else {\n setEmailError(\"Cette adresse email ne possède pas de compte\")\n }\n })\n\n } else {\n setEmailError(\"Merci de rentrer un email valide.\")\n }\n }\n }\n\n return (\n <>\n {\n error.visible ? (\n \n ) : (\n <>\n {\n !showSendMdpConfirm ? (\n \n
\n

Connexion à votre compte

\n

Veuillez saisir votre adresse mail ainsi que votre mot de passe associé au compte

\n \n \n

Mot de passe oublié ?

\n \n
\n
\n ) : (\n setShowSendMdpConfirm(false)}\n title={email}\n subTitle=\"Un email vous a été envoyé à cette adresse mail pour réinitialiser votre mot de passe. Veuillez consulter votre boite mail.\"\n icone={send}\n btnTxt=\"Fermer\"\n />\n )\n }\n \n \n )\n }\n \n )\n}\n\nexport default Login\n","import React, {useEffect, useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\n\nimport checked from '../../Assets/Icons/checked.svg'\nimport unchecked from '../../Assets/Icons/unchecked.svg'\nimport send from '../../Assets/Icons/send.svg'\n\nimport './CommandePage.scss'\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport {useNavigate} from \"react-router-dom\";\nimport BaseInput from \"../../Components/BaseInput/BaseInput\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {OrderModel} from \"../../Models/OrderModel\";\nimport {setUser} from \"../../store/actions\";\nimport axios from \"axios\";\nimport Login from \"../../Components/Login/login\";\nimport Success from \"../../Components/Success/Success\";\nimport {useLoader} from \"../../hooks/useLoader\";\nimport Loader from \"../../Components/Loader/Loader\";\nimport {useError} from \"../../hooks/useError\";\nimport Error from \"../../Components/Error/Error\";\n\nconst CommandePage: React.FC = ({}) => {\n const dispatch = useDispatch()\n const navigate = useNavigate()\n\n const panier = useSelector(state => state.panier)\n\n const [createAccount, setCreateAccount] = useState(false)\n const [showBtmSheet, setShowBtmSheet] = useState(false)\n const [showLogin, setShowLogin] = useState(false)\n const [prenom, setPrenom] = useState('')\n const [email, setEmail] = useState('')\n const [mdp1, setMdp1] = useState('')\n const [mdp2, setMdp2] = useState('')\n const [errorMdp, setErrorMdp] = useState(undefined)\n const [errorEmail, setErrorEmail] = useState(undefined)\n\n const loader = useLoader()\n const error = useError()\n\n useEffect(() => {\n if(mdp1.length > 0 && mdp1.length < 8) {\n setErrorMdp('Votre mot de passe doit contenir 8 caractères minimum')\n } else if (mdp2.length > 0 && mdp1 !== mdp2) {\n setErrorMdp('les mots de passe de correpondent pas')\n } else {\n setErrorMdp(undefined)\n }\n }, [mdp1, mdp2])\n\n useEffect(() => {\n setErrorEmail(undefined)\n }, [email])\n\n const handleBtnClick = () => {\n const regex = /^[\\w-\\.]+@([\\w-]+\\.)+[\\w-]{2,4}$/g\n if(regex.test(email)) {\n if (createAccount) {\n if (mdp1.length < 8) {\n setErrorMdp('Votre mot de passe doit contenir 8 caractères minimum')\n } else if (mdp1 !== mdp2) {\n setErrorMdp('les mots de passe de correpondent pas')\n } else {\n loader.show()\n axios.post(`${process.env.REACT_APP_BART_URL}/users/create`, {prenom, email, mdp: mdp1})\n .then(res => {\n dispatch(setUser(res.data))\n setShowBtmSheet(true)\n })\n .catch(err => {\n if (err.response.status === 400) {\n error.open(err.response.data.message)\n } else {\n error.open(\"une erreur est survenue, merci de contacter le sav\")\n }\n })\n .finally(loader.hide)\n }\n } else {\n dispatch(setUser({prenom, email, cartesBancaires: []}))\n navigate('/paiement')\n }\n } else {\n setErrorEmail(\"Merci de rentrer un email valide.\")\n }\n }\n\n const handleLoginBtn = () => {\n setShowLogin(true)\n }\n\n return (\n \n
\n

Nous avons besoin de quelques informations pour que la commande se passe bien

\n \n \n
\n

Déjà inscrit ?

\n \n
\n
\n setCreateAccount(!createAccount)}/>\n

Je souhaite créer un compte pour mes prochaines commandes

\n
\n {\n createAccount && (\n <>\n \n \n \n )\n }\n
\n
\n
\n

Total

\n

{panier?.totalPriceTTC} €

\n
\n \n
\n navigate('/paiement')}\n title=\"Votre compte a été crée\"\n icone={send}\n />\n \n navigate('/paiement')} show={showLogin} onClose={() => setShowLogin(false)} />\n \n
\n )\n}\n\nexport default CommandePage;\n","export default __webpack_public_path__ + \"static/media/edenred.194f9110.svg\";","export default __webpack_public_path__ + \"static/media/applePay.44075819.svg\";","export default __webpack_public_path__ + \"static/media/googlePay.7118430a.svg\";","export default __webpack_public_path__ + \"static/media/mastercard.e5554167.svg\";","export default __webpack_public_path__ + \"static/media/visa.0e76e95e.svg\";","export default __webpack_public_path__ + \"static/media/add.dbf99316.svg\";","export default __webpack_public_path__ + \"static/media/selected.c12a7dc6.svg\";","export default __webpack_public_path__ + \"static/media/arrowRight.5ca13aac.svg\";","import useHttpClient from \"./http/useHttpClient\";\nimport {OrderModel, OrderProductModel, OrderTaxeModel} from \"../Models/OrderModel\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StateModel} from \"../Models/StateModel\";\nimport {UserModel} from \"../Models/UserModel\";\nimport axios from \"axios\";\nimport {setUser} from \"../store/actions\";\nimport {HistoriqueOrderRequestModel} from \"../Models/request/HistoriqueOrderRequestModel\";\nimport {OrderResponseModel} from \"../Models/OrderResponseModel\";\nimport {RefundedOrderRequestModel} from \"../Models/request/RefundedOrderRequestModel\";\n\nfunction getOrderTaxes(orderProducts: OrderProductModel[] | undefined): OrderTaxeModel[] {\n if(!orderProducts) {\n return [];\n }\n const result: OrderTaxeModel[] = []\n orderProducts.forEach(product => {\n const index = result.findIndex(t => t.tvaCode === product.tvaCode)\n if(index !== -1) {\n result[index].totalPriceTTC = (result[index].totalPriceTTC ?? 0) + (product.totalPriceTTC ?? 0)\n result[index].totalPriceHT = (result[index].totalPriceHT ?? 0) + (product.totalPriceHT ?? 0)\n } else {\n result.push({\n tvaCode: product.tvaCode,\n totalPriceHT: product.totalPriceHT,\n totalPriceTTC: product.totalPriceTTC,\n tvaRate: product.tvaRate\n })\n }\n })\n return result.map(r => {\n const total = (r.totalPriceTTC ?? 0) - (r.totalPriceHT ?? 0)\n const taxe: OrderTaxeModel = {...r, totalTva: Math.round(total * 100) / 100}\n return taxe\n })\n}\n\nexport const usePostOrder = (onFirst: () => void, onLast: () => void): (onSuccess: (res: any) => void, onError: (err: any) => void) => void => {\n const dispatch = useDispatch()\n const {postOrder} = useHttpClient()\n const panier = useSelector(state => state.panier)\n const user = useSelector(state => state.user)\n return (onSuccess: (res: any) => void, onError: (err: any) => void) => {\n onFirst()\n const date = new Date()\n const orderToPost: OrderModel | undefined = {\n ...panier,\n createdAt: new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())),\n orderProducts: panier?.orderProducts?.map(p => {\n const product: OrderProductModel = {...p, discountModel: undefined, unitDepositPriceTTC: undefined, totalDepositPriceTTC: undefined, product: {id: p.product.id}}\n return product\n }) || [],\n nbOrderProducts: panier?.orderProducts?.length || 0,\n orderOperation: 'vente',\n orderTaxes: getOrderTaxes(panier?.orderProducts)\n }\n postOrder(orderToPost)\n .then((res: OrderResponseModel) => {\n if(user?.id) {\n const body: HistoriqueOrderRequestModel = {\n userId: user.id,\n reference: res.reference || '',\n image: res.orderProducts ? res.orderProducts[0].product.image || '' : '',\n priceTTC: res.priceTTC ? +res.priceTTC : 0,\n pdvName: res.pdv?.name || '',\n }\n axios.post(`${process.env.REACT_APP_BART_URL}/orders/create`, body)\n .then((response) => {\n const orders = user.orders ? [...user.orders] : []\n orders.push(response.data)\n dispatch(setUser({...user, orders}))\n })\n .finally(() => {\n onSuccess(res)\n })\n } else {\n onSuccess(res)\n }\n })\n .catch(err => {\n const body: RefundedOrderRequestModel = {\n date: new Date(),\n reference: orderToPost.reference ?? '',\n data: orderToPost,\n reason: JSON.stringify(err)\n }\n void axios.post(`${process.env.REACT_APP_BART_URL}/refunded-order`, body)\n onError(err)\n })\n .finally(onLast)\n }\n\n}\n","import {useStripe} from \"@stripe/react-stripe-js\";\nimport axios from \"axios\";\nimport {PaymentIntentResult} from \"@stripe/stripe-js\";\n\nexport interface UsePaymentWithCardBody {\n amount: number,\n cardId: string,\n customerId?: string,\n description: string,\n country: string,\n}\n\nexport const usePaymentWithCard = (): (body: UsePaymentWithCardBody, onSuccess: (id: string) => void, onError: (err: string) => void) => void => {\n const stripe = useStripe()\n return (body: UsePaymentWithCardBody, onSuccess: (res?: any) => void, onError: (err: string) => void) => {\n if(body.amount > 0) {\n axios.post(`${process.env.REACT_APP_BART_URL}/stripe/create-payment`, body)\n .then(res => {\n if (\n res.data.status === 'requires_action' &&\n res.data.nextAction &&\n res.data.nextActionType === 'use_stripe_sdk'\n ) {\n // send the authentication request for 3d secure cards\n stripe?.confirmCardPayment(res.data.clientSecret)\n .then((response: PaymentIntentResult) => {\n if(response.error) {\n onError(response.error.message || \"Un soucis est survenu, merci d'essayer une autre carte\")\n } else {\n onSuccess(response.paymentIntent.id);\n }\n })\n .catch(() => {\n onError(\"Un soucis est survenu, merci d'essayer une autre carte\")\n });\n } else if(res.data.error) {\n onError(res.data.error.message || \"Un soucis est survenu, merci d'essayer une autre carte\")\n } else {\n onSuccess(res.data.id);\n }\n })\n .catch(error => {\n onError(error.response.data.message)\n });\n } else {\n onSuccess('')\n }\n };\n\n}\n","import {useSelector} from \"react-redux\";\nimport {StateModel} from \"../Models/StateModel\";\nimport {EventModel} from \"../Models/EventModel\";\nimport axios from \"axios\";\nimport {AcceptedCardResponseModel} from \"../Models/AcceptedCardResponseModel\";\n\nexport const useCardTypeAccepted = (): (brand: string | undefined) => Promise => {\n const event = useSelector(state => state.event)\n\n return async (brand: string | undefined): Promise => {\n if (!event) {\n const response: AcceptedCardResponseModel = {\n isAccepted: true,\n message: \"\"\n }\n return Promise.resolve(response)\n }\n\n const result = await axios.get(`${process.env.REACT_APP_BART_URL}/accepted-card/check?eventId=${event.id}&cardBrand=${brand}`,)\n if (result) {\n return result.data\n }\n return Promise.reject()\n }\n}\n","import React, {useEffect, useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\nimport edenred from '../../Assets/Icons/edenred.svg'\nimport applePay from '../../Assets/Icons/applePay.svg'\nimport googlePay from '../../Assets/Icons/googlePay.svg'\nimport mastercard from '../../Assets/Icons/mastercard.svg'\nimport visa from '../../Assets/Icons/visa.svg'\nimport add from '../../Assets/Icons/add.svg'\nimport selected from '../../Assets/Icons/selected.svg'\nimport arrowRight from '../../Assets/Icons/arrowRight.svg'\nimport trash from '../../Assets/Icons/trash.svg'\n\nimport './PaiementPage.scss'\nimport {useNavigate} from \"react-router-dom\";\nimport {useStripe} from \"@stripe/react-stripe-js\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {UserModel} from \"../../Models/UserModel\";\nimport {usePostOrder} from \"../../hooks/usePostOrder\";\nimport Success from \"../../Components/Success/Success\";\nimport check from \"../../Assets/Icons/check.svg\";\nimport {OrderModel} from \"../../Models/OrderModel\";\nimport {usePaymentWithCard} from \"../../hooks/usePaymentWithCard\";\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport {useLoader} from \"../../hooks/useLoader\";\nimport Loader from \"../../Components/Loader/Loader\";\nimport {useError} from \"../../hooks/useError\";\nimport Error from \"../../Components/Error/Error\";\nimport axios from \"axios\";\nimport {SendOrderMailRequest} from \"../../Models/request/SendOrderMail\";\nimport {OrderResponseModel} from \"../../Models/OrderResponseModel\";\nimport {useDeleteCard} from \"../../hooks/useDeleteCard\";\nimport {useModal} from \"../../hooks/useModal\";\nimport Confirm from \"../../Components/Confirm/Confirm\";\nimport {StadiumModel} from \"../../Models/StadiumModel\";\nimport {setPanier, setTimeCreationPanier} from \"../../store/actions\";\nimport {CarteBancaireModel} from \"../../Models/CarteBancaireModel\";\nimport {\n PaymentRequestPaymentMethodEvent,\n} from \"@stripe/stripe-js/types/stripe-js/payment-request\";\nimport {useCardTypeAccepted} from \"../../hooks/useCardTypeAccepted\";\nimport {AcceptedCardResponseModel} from \"../../Models/AcceptedCardResponseModel\";\nimport {useAddEdenred} from \"../../hooks/useAddEdenred\";\n\ninterface SelectedMethodModel {\n type: 'native' | 'cb',\n cb?: CarteBancaireModel\n}\n\nlet paymentId: string | undefined = undefined\nlet edenredToken: string | undefined = undefined\nlet cb: any = undefined\nconst PaiementPage: React.FC = ({}) => {\n const dispatch = useDispatch()\n const stripe = useStripe();\n const navigate = useNavigate()\n\n const panier = useSelector(state => state.panier)\n const user = useSelector(state => state.user)\n const stade = useSelector(state => state.stadium)\n const selectedCard = useSelector(state => state.selectedCard)\n\n const [showBtmSheet, setShowBtmSheet] = useState(false)\n const [paymentRequest, setPaymentRequest] = useState(null);\n const [nativePayment, setNativePayment] = useState('');\n const [selectedMethod, setSelectedMethod] = useState({type: 'cb', cb: selectedCard});\n const [indexCbToDelete, setIndexCbToDelete] = useState();\n const payWithCard = usePaymentWithCard()\n const loader = useLoader()\n const postOrder = usePostOrder(loader.show, loader.hide)\n const error = useError()\n const errorDeleteCB = useModal()\n const confirmDeleteCB = useModal()\n const successDeleteCB = useModal()\n const deleteCard = useDeleteCard(loader.show, loader.hide, successDeleteCB.open, errorDeleteCB.open, user)\n const cardTypeAccepted = useCardTypeAccepted()\n const [addEdenred] = useAddEdenred(\n panier,\n (token: string, authorizationId: string) => {\n paymentId = authorizationId\n edenredToken = token\n loader.hide()\n setShowBtmSheet(true)\n },\n () => error.open(\"Merci d'essayer un autre moyen de paiement\"));\n\n useEffect(() => {\n if (user?.cartesBancaires && user.cartesBancaires.length > 0 && !selectedCard) {\n setSelectedMethod({type: 'cb', cb: user.cartesBancaires[0]})\n }\n }, [user, selectedCard])\n\n\n useEffect(() => {\n if (stripe && panier) {\n const pr = stripe.paymentRequest({\n country: 'FR',\n currency: 'eur',\n total: {\n label: 'Bart topivo',\n amount: panier.totalPriceTTC ? +panier.totalPriceTTC * 100 : 0,\n },\n displayItems: panier.orderProducts?.map(p => {\n return {amount: p.totalPriceTTC ? p.totalPriceTTC * 100 : 0, label: p.name || ''}\n }),\n requestPayerName: true,\n requestPayerEmail: true,\n });\n\n // Check the availability of the Payment Request API.\n void pr.canMakePayment().then(result => {\n if (result) {\n setPaymentRequest(pr);\n setNativePayment(result.applePay ? 'applePay' : result.googlePay ? 'googlePay' : '')\n }\n });\n }\n }, [stripe, panier]);\n\n useEffect(() => {\n if (paymentRequest) {\n paymentRequest.on('paymentmethod', function (event: PaymentRequestPaymentMethodEvent) {\n void cardTypeAccepted(event.paymentMethod.card?.brand)\n .then((res: AcceptedCardResponseModel) => {\n if (!res.isAccepted) {\n loader.hide()\n error.open(res.message)\n } else {\n cb = event.paymentMethod.card;\n if (panier) {\n const body = {\n id: `${stade?.reference}${panier.reference}`,\n amount: panier.totalPriceTTC ? +panier.totalPriceTTC * 100 : 0,\n customerId: user?.stripeId,\n cardId: event.paymentMethod.id,\n description: `${stade?.reference} commande #${panier.reference}`,\n country: \"FR\",\n ht: panier.totalPriceHT ? +panier.totalPriceHT * 100 : 0,\n }\n payWithCard(\n body,\n (id) => {\n paymentId = id\n edenredToken = undefined\n event.complete('success');\n setShowBtmSheet(true)\n },\n () => {\n event.complete('fail');\n }\n )\n }\n }\n })\n // event.paymentMethod is available\n });\n }\n }, [paymentRequest])\n\n const payNative = () => {\n paymentRequest.show()\n }\n\n const payCb = (cardId: string) => {\n if (panier) {\n loader.show()\n const body = {\n id: `${stade?.reference}${panier.reference}`,\n amount: panier.totalPriceTTC ? +panier.totalPriceTTC * 100 : 0,\n customerId: user?.stripeId,\n cardId,\n description: `${stade?.reference} commande #${panier.reference}`,\n country: \"FR\",\n ht: panier.totalPriceHT ? +panier.totalPriceHT * 100 : 0,\n }\n payWithCard(\n body,\n (id) => {\n paymentId = id\n edenredToken = undefined\n loader.hide()\n setShowBtmSheet(true)\n },\n () => {\n loader.hide()\n }\n )\n }\n }\n\n const onValidate = () => {\n if (selectedMethod.type === 'native') {\n payNative()\n } else {\n void cardTypeAccepted(selectedMethod.cb?.brand)\n .then((res: AcceptedCardResponseModel) => {\n if (!res.isAccepted) {\n loader.hide()\n error.open(res.message)\n } else {\n cb = user?.cartesBancaires.find(c => c.stripeId === selectedMethod.cb?.stripeId)\n payCb(selectedMethod.cb?.stripeId || '')\n }\n })\n }\n }\n\n const formatPickup = (pickup?: string) => {\n if (pickup) {\n const splited = pickup.split(\" \")\n return splited[splited.length - 1]\n }\n return ''\n }\n\n const onPostOrder = () => {\n postOrder(\n (res: OrderResponseModel) => {\n const body: SendOrderMailRequest = {\n date: new Date(),\n total: res.totalPriceTTC ? +res.totalPriceTTC : 0,\n nomUser: user?.prenom || '',\n pickupZone: formatPickup(res.pdv?.bartPickup?.name),\n reference: res.reference,\n payment: {brand: cb?.brand || '', last4: cb?.last4 || ''},\n items: res.orderProducts?.map((p: any) => {\n return {\n nom: p.name,\n quantity: p.quantity,\n total: p.totalPriceTTC\n }\n }) || []\n }\n void axios.post(`${process.env.REACT_APP_BART_URL}/emails/send_order_email/${user?.email}`, body)\n dispatch(setPanier(undefined))\n dispatch(setTimeCreationPanier(undefined))\n navigate('/qrCode', {\n state: {\n reference: res.reference,\n pickup: res.pdv?.bartPickup?.name,\n total: res.totalPriceTTC,\n affluence: res.pdv?.affluence\n }\n })\n },\n (err: any) => {\n if (edenredToken) {\n const body = {\n token: edenredToken,\n authorizationId: paymentId,\n amount: panier?.totalPriceTTC ? +panier.totalPriceTTC * 100 : 0,\n }\n void axios.post(`${process.env.REACT_APP_BART_URL}/edenred/refund-transaction`, body)\n } else {\n void axios.delete(`${process.env.REACT_APP_BART_URL}/stripe/${paymentId}/refund`)\n }\n setShowBtmSheet(false)\n error.open(err.response.data.errors[0].message)\n }\n )\n }\n\n const onDeleteCb = (index: number) => {\n setIndexCbToDelete(index)\n confirmDeleteCB.open()\n }\n\n const handleDeleteCb = () => {\n confirmDeleteCB.close()\n if (indexCbToDelete !== undefined && user?.cartesBancaires) {\n deleteCard(user?.cartesBancaires[indexCbToDelete], indexCbToDelete)\n } else {\n errorDeleteCB.open()\n }\n setIndexCbToDelete(undefined)\n }\n\n return (\n navigate(-1)}>\n
\n

Séléctionnez votre moyen de paiement

\n {\n paymentRequest && nativePayment === 'applePay' &&
paymentRequest && nativePayment === 'applePay' && setSelectedMethod({type: 'native'})}>\n \"apple\n
\n

Apple pay

\n

{paymentRequest && nativePayment === 'applePay' ? 'Disponible' : 'Indisponible'}

\n
\n {selectedMethod.type === 'native' && nativePayment === 'applePay' &&\n \"selected\"}\n
\n }\n {\n paymentRequest && nativePayment === 'googlePay' &&
paymentRequest && nativePayment === 'googlePay' && setSelectedMethod({type: 'native'})}>\n \"google\n
\n

Google pay

\n

{paymentRequest && nativePayment === 'googlePay' ? 'Disponible' : 'Indisponible'}

\n
\n {selectedMethod.type === 'native' && nativePayment === 'googlePay' &&\n \"selected\"}\n
\n }\n {\n user?.cartesBancaires.map((cb, index) => (\n
\n
setSelectedMethod({type: 'cb', cb})}>\n \"mastercard\"\n\n
\n

•••• {cb.last4}

\n

{cb.brand}

\n
\n
\n
\n {\n selectedMethod.cb?.stripeId === cb.stripeId &&\n \"selected\"/\n }\n \"selected\" onDeleteCb(index)}/>\n
\n
\n ))\n }\n
navigate('/ajout-carte')}>\n \"add\"\n
\n

{user?.id ? 'Ajouter une carte de crédit' : 'Payer par carte'}

\n
\n \"fleche\n
\n
\n \"edenred\"\n
\n

Edenred

\n
\n
\n
\n
\n \n
\n \n \n \n \n \n \n
\n )\n}\n\nexport default PaiementPage;\n","import {CarteBancaireModel} from \"../Models/CarteBancaireModel\";\nimport {setUser} from \"../store/actions\";\nimport {UserModel} from \"../Models/UserModel\";\nimport {useDispatch} from \"react-redux\";\nimport axios from \"axios\";\n\nexport const useDeleteCard = (\n onBefore: () => void,\n onFinally: () => void,\n onSuccess: () => void,\n onError: () => void,\n user?: UserModel | null\n): (cb: CarteBancaireModel, index: number) => void => {\n const dispatch = useDispatch()\n const deleteCard = (carte: CarteBancaireModel, index: number) => {\n if (user?.cartesBancaires) {\n onBefore()\n axios.delete(`${process.env.REACT_APP_BART_URL}/cartes-bancaires/${carte.stripeId}/delete`)\n .then(() => {\n const newsCartesBancaires = user.cartesBancaires ? [...user.cartesBancaires] : []\n newsCartesBancaires.splice(index, 1)\n dispatch(setUser({...user, cartesBancaires: newsCartesBancaires}))\n onSuccess()\n })\n .catch(onError)\n .finally(onFinally)\n }\n }\n\n return deleteCard\n}\n","import {Client} from \"@stomp/stompjs\";\nimport {OrderModel} from \"../Models/OrderModel\";\n\nexport const useAddEdenred = (panier?: OrderModel, onSuccess?: (token: string, authorizationId: string) => void, onError?: () => void): [() => void] => {\n\n const addEdenred = () => {\n const body = {\n mid: process.env.REACT_APP_EDENRED_MID,\n order_ref: panier?.reference,\n amount: panier?.totalPriceTTC ? +panier.totalPriceTTC * 100 : 0,\n tstamp: new Date(),\n }\n const url = `${process.env.REACT_APP_EDENRED_BASE_URL}/connect/authorize?response_type=code&client_id=${process.env.REACT_APP_EDENRED_CLIENT_ID}&state=${JSON.stringify(body)}&scope=openid%20edg-xp-mealdelivery-api%20offline_access&redirect_uri=${process.env.REACT_APP_EDENRED_REDIRECT_URI}&acr_values=tenant%3Afr-ctrtku&ui_locales=fr-FR `\n window.open(url, '_blank')\n waitResponse()\n }\n\n const waitResponse = () => {\n const client = new Client({\n brokerURL: `${process.env.REACT_APP_SOCKET_URL}/ws-message`,\n reconnectDelay: 5000,\n heartbeatIncoming: 4000,\n heartbeatOutgoing: 4000,\n onConnect: () => {\n client.subscribe('/edenred/response', function (msg) {\n console.log(msg)\n if (msg.body) {\n const jsonBody = JSON.parse(msg.body)\n if(jsonBody.token) {\n onSuccess && onSuccess(jsonBody.token, jsonBody.authorizationId)\n } else {\n onError && onError()\n }\n } else {\n onError && onError()\n }\n void client.deactivate()\n });\n }\n });\n\n client.activate();\n }\n\n return [addEdenred]\n}\n","import React, {useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\n\nimport './AjoutCartePage.scss'\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {OrderModel} from \"../../Models/OrderModel\";\nimport {UserModel} from \"../../Models/UserModel\";\nimport {CardCvcElement, CardExpiryElement, CardNumberElement, useElements, useStripe} from \"@stripe/react-stripe-js\";\nimport {StripeCardNumberElement} from \"@stripe/stripe-js\";\nimport {usePaymentWithCard} from \"../../hooks/usePaymentWithCard\";\nimport {usePostOrder} from \"../../hooks/usePostOrder\";\nimport {CarteBancaireRequestModel} from \"../../Models/request/CarteBancaireRequestModel\";\nimport {setPanier, setSelectedCard, setTimeCreationPanier, setUser} from \"../../store/actions\";\nimport axios from \"axios\";\nimport {useNavigate} from \"react-router-dom\";\nimport Success from \"../../Components/Success/Success\";\nimport check from \"../../Assets/Icons/check.svg\";\nimport {useLoader} from \"../../hooks/useLoader\";\nimport Loader from \"../../Components/Loader/Loader\";\nimport {useError} from \"../../hooks/useError\";\nimport Error from \"../../Components/Error/Error\";\nimport {SendOrderMailRequest} from \"../../Models/request/SendOrderMail\";\nimport {OrderResponseModel} from \"../../Models/OrderResponseModel\";\nimport {StadiumModel} from \"../../Models/StadiumModel\";\nimport {useCardTypeAccepted} from \"../../hooks/useCardTypeAccepted\";\nimport {AcceptedCardResponseModel} from \"../../Models/AcceptedCardResponseModel\";\n\nlet paymentId: string | undefined = undefined\nlet cb: any = undefined\nconst AjoutCartePage: React.FC = ({}) => {\n const navigate = useNavigate()\n const dispatch = useDispatch()\n const stripe = useStripe();\n const elements = useElements();\n\n const panier = useSelector(state => state.panier)\n const user = useSelector(state => state.user)\n const stade = useSelector(state => state.stadium)\n\n const [showBtmSheet, setShowBtmSheet] = useState(false)\n const payWithCard = usePaymentWithCard()\n const loader = useLoader()\n const postOrder = usePostOrder(loader.show, loader.hide)\n const error = useError()\n const cardTypeAccepted = useCardTypeAccepted()\n\n const handleSubmit = async (event?: any) => {\n event?.preventDefault();\n\n if (!stripe || !elements) {\n return;\n }\n loader.show()\n const cardNumberElement: StripeCardNumberElement = elements.getElement(CardNumberElement) as StripeCardNumberElement;\n\n const result = await stripe.createPaymentMethod({\n type: 'card',\n card: cardNumberElement\n });\n\n\n if(result.error) {\n loader.hide()\n error.open(result.error.message || '')\n } else if (user?.id) {\n processSaveCard(result.paymentMethod.id)\n } else {\n cardTypeAccepted(result.paymentMethod.card?.brand)\n .then((res: AcceptedCardResponseModel) => {\n if (!res.isAccepted) {\n loader.hide()\n error.open(res.message)\n } else {\n cb = result.paymentMethod.card\n processPayment(result.paymentMethod.id)\n }\n })\n .catch(() => {\n cb = result.paymentMethod.card\n processPayment(result.paymentMethod.id)\n })\n\n }\n };\n\n const processPayment = (cardId: string) => {\n if(panier) {\n const body = {\n id: `${stade?.reference}${panier.reference}`,\n amount: panier.totalPriceTTC ? +panier.totalPriceTTC * 100 : 0,\n cardId,\n description: `${stade?.reference} commande #${panier.reference} ${user?.email}`,\n country: \"FR\",\n ht: panier.totalPriceHT ? +panier.totalPriceHT * 100 : 0,\n }\n payWithCard(\n body,\n (id) => {\n paymentId = id\n loader.hide()\n setShowBtmSheet(true)\n },\n (message) => {\n error.open(message.includes(\"card_declined\") ? \"Paiement refusé\" : \"merci de réessayer plus tard\")\n loader.hide()\n }\n )\n }\n }\n\n const processSaveCard = (cardId: string) => {\n if (user?.stripeId) {\n saveCard(cardId, user.stripeId)\n } else {\n axios\n .post(`${process.env.REACT_APP_BART_URL}/stripe/create-customer?id=${user?.id}`)\n .then((res: any) => {\n const stripeId = res.data\n saveCard(cardId, stripeId)\n })\n .catch(() => {\n error.open(\"merci de réessayer plus tard\")\n loader.hide()\n });\n }\n }\n\n const saveCard = (token: string, customerId: string) => {\n if (user?.id) {\n const newCB: CarteBancaireRequestModel = {\n userId: user.id,\n userStripeId: customerId,\n token\n }\n\n axios.post(`${process.env.REACT_APP_BART_URL}/cartes-bancaires/create`, newCB)\n .then((res) => {\n dispatch(setSelectedCard(res.data))\n const newsCartesBancaires = user.cartesBancaires ? [...user.cartesBancaires] : []\n newsCartesBancaires.push(res.data);\n dispatch(setUser({...user, stripeId: customerId, cartesBancaires: newsCartesBancaires}))\n setShowBtmSheet(true)\n })\n .catch(() => error.open(\"merci de réessayer plus tard\"))\n .finally(() => loader.hide())\n }\n };\n\n const formatPickup = (pickup?: string) => {\n if(pickup) {\n const splited = pickup.split(\" \")\n return splited[splited.length - 1]\n }\n return ''\n }\n\n const onPostOrder = () => {\n postOrder(\n (res: OrderResponseModel) => {\n const body: SendOrderMailRequest = {\n date: new Date(),\n total: res.totalPriceTTC ? +res.totalPriceTTC : 0 ,\n nomUser: user?.prenom || '',\n pickupZone: formatPickup(res.pdv?.bartPickup?.name),\n reference: res.reference,\n payment: {brand: cb?.brand || '', last4: cb?.last4 || ''},\n items: res.orderProducts?.map((p: any) => {\n return {\n nom: p.name,\n quantity: p.quantity,\n total: p.totalPriceTTC\n }\n }) || []\n }\n void axios.post(`${process.env.REACT_APP_BART_URL}/emails/send_order_email/${user?.email}`, body)\n dispatch(setPanier(undefined))\n dispatch(setTimeCreationPanier(undefined))\n navigate('/qrCode', {\n state: {\n reference: res.reference,\n pickup: res.pdv?.bartPickup?.name,\n total: res.totalPriceTTC,\n affluence: res.pdv?.affluence\n }\n })\n },\n (err) => {\n void axios.delete(`${process.env.REACT_APP_BART_URL}/stripe/${paymentId}/refund`)\n setShowBtmSheet(false)\n error.open(err.response.data.errors[0].message)\n }\n )\n }\n\n return (\n \n {/* eslint-disable-next-line @typescript-eslint/no-misused-promises */}\n
handleSubmit(e)}>\n
\n

Numéro de carte

\n \n
\n
\n
\n

Date d’expiration

\n \n
\n
\n

Code de sécurité

\n \n
\n
\n
\n
\n {/* eslint-disable-next-line @typescript-eslint/no-misused-promises */}\n handleSubmit()} text={user?.id ? \"Ajouter la carte\" : \"Payer\"} className=\"ajoutCarteFooter--btn\"/>\n
\n user?.id ? navigate(-1) : onPostOrder()}\n title={user?.id ? \"Carte ajoutée\" : \"Paiement accepté\"}\n icone={check}\n />\n \n \n
\n )\n}\n\nexport default AjoutCartePage;\n","import * as jwt from 'jsonwebtoken'\nimport {useEffect, useState} from \"react\";\n\nconst credentials = {\n \"type\": \"service_account\",\n \"project_id\": \"barttopivo-395707\",\n \"private_key_id\": \"1107e3fca6a6e73d5e57eff30c682a5f26efd415\",\n \"private_key\": \"-----BEGIN PRIVATE KEY-----\\nMIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQCUYK7lsrHEK5Mm\\nth9osWugO++zlabCi3wxE/qUR2N6n0qb79SpRXDoXM9qW2aWKqwNhr6PTLVE5g/R\\namkkK7AZMhBEnRyFe5f8GMLdS8OMrzrlaANEZcT1hKyC7gUbEfR3cfIswrSLhJqM\\n7NAbdMbgkJKUQqtUfH44HdXYPK0RbcgfPvGgLn9YLn76TWFsTmYClAzEJXlZULvl\\nf2KrTAyg89u/zA42I9gDoyUdSZvw7Du8eBplp2o29Z4fQ/Oeki/uwk+oxkYY3qZF\\nOiks/xfuPTC9vGT3r+IASHATrvlseJ1X6U7B0BYYmHHaeR77x89VkXzCnEdXAGHh\\nznSVCltpAgMBAAECgf91IPZaPUJNooCLmMgHkDRe9UeS7a1ZtBZ1WFt5FakXR7MD\\n5OSnq0J84IwY5gmbMg/PaZoz6LAAJOd1MGbxbPXe//xa/hywyE8W4BFlET7k2yag\\nz8N3eA6GgDDU5ppi6GyyCxhaStYAU8ZHJ373znSfWUGr/m0qvuD2scZCBaz4icyr\\n8a8cjX7IVBbUsCP7M0e2e6tEUhQt3knIamqUxDYu6mfzval0l7aaZtlRifwK0ctQ\\npkjs9WsOB0vvSFsLSBu9LAavtUXlIAitRi89SKQhJZnZlsBPKqc9E3zsGGKOwGjv\\n0SHt35HMMfs6F100x8ohvr+Nj4PnL/K6VzKo/hECgYEAwxm5ni0Lbqy1eyhIaayH\\n+JfkkqrjBObWEQCmrvqMy7OrLsjG3FwruLZT6qaaQYjnYHy5XSfd+K2d/zybHrLj\\nA2wPLpjLDjiN8ZA2jE0IoCbi9rcthHK2MNBM/fhcrZSdLNcymYoWPRCjHAQroOiw\\nhLP3+WKzyoGuaE/st4wbYE8CgYEAwrFi/2cFdqEix3Par1WSzxF1m3xqz701CsIq\\nsFeyHqc52VAAXrO7uFVY6coXjQCVHeovmKxWdd56zVINRH+VHlNiZfBkEHKZdihN\\nvkJNEtgOLj9eACZOl0V9fCF/273008XixDmReaqgmIfq4JWe7mFTbqC3ZpOFr6qa\\n03GIIscCgYBzbOPRPgsWdl2EOIfm5SkonQyg7TMUclFRi9YRjbAA0BJFwolMU8eW\\nJ2CsYda/UPS6s++iunRrrKPeHogTeHgwTR0KT2FKz5DCyrRK+0RQI9GBb0whoRBC\\n/umeE/MYyuTWY5bPGdAgXphxedIqB6BvUl4yEAAYnfKGSkrdKKoFpwKBgA7OXrD9\\nrLSw3Gw+q0raPyfwM/l3JMhXo0kGKyjuAmXCYevc4apSENyb4P8ml1Ppz21O+f+q\\nW4jrOnuS2d9ztGtx+/G0rmdxz6nktsTZVfMw6yMpPoTUZPWsGzbtdUPI1m2khvJV\\nTnLqPvxamcoqlsOaMzYektQCNBB/8PZTk/7RAoGBAIgOUNvDS/dikcH8HNLGdps+\\nEoapI7T1SD9EBpSC2mDs0yHVz5tYQb+KwQnNTppqxY4VCdUmxo/GOCvTUp28fVJN\\nkxk1N5xMLCf2LJL+g4xYBnkTt2KFKI60udQaRkhOq+E3IjEM4gUkZqBbdWVFFupP\\nckwufUbklSyFcKMQIWYt\\n-----END PRIVATE KEY-----\\n\",\n \"client_email\": \"client-web-wallet@barttopivo-395707.iam.gserviceaccount.com\",\n \"client_id\": \"108781569583335822546\",\n \"auth_uri\": \"https://accounts.google.com/o/oauth2/auth\",\n \"token_uri\": \"https://oauth2.googleapis.com/token\",\n \"auth_provider_x509_cert_url\": \"https://www.googleapis.com/oauth2/v1/certs\",\n \"client_x509_cert_url\": \"https://www.googleapis.com/robot/v1/metadata/x509/client-web-wallet%40barttopivo-395707.iam.gserviceaccount.com\",\n \"universe_domain\": \"googleapis.com\"\n}\nconst issuerId = '3388000000022260055';\nconst classId = `${issuerId}.topivocode`;\n\nexport const useGoogleWallet = (reference: string): string | undefined => {\n const [googleWalletUrl, setGoogleWalletUrl] = useState(undefined)\n\n useEffect(() => {\n if(reference) {\n setGoogleWalletUrl(createPassObject(reference))\n }\n }, [reference])\n\n return googleWalletUrl\n}\n\nfunction createPassObject(reference: string) {\n const objectId = `${issuerId}.${reference}`;\n\n const genericObject = {\n 'id': `${objectId}`,\n 'classId': classId,\n 'genericType': 'GENERIC_TYPE_UNSPECIFIED',\n 'hexBackgroundColor': '#70A6DA',\n 'logo': {\n 'sourceUri': {\n 'uri': 'https://autres1.s3.eu-west-3.amazonaws.com/logo_small.png'\n }\n },\n 'cardTitle': {\n 'defaultValue': {\n 'language': 'fr',\n 'value': 'Bart topivo'\n }\n },\n 'header': {\n 'defaultValue': {\n 'language': 'fr',\n 'value': `Votre commande Bart`\n }\n },\n 'barcode': {\n 'type': 'QR_CODE',\n 'value': `${reference}`,\n 'alternateText': `${reference}`\n }\n };\n\n// TODO: Create the signed JWT and link\n // TODO: Create the signed JWT and link\n const claims = {\n iss: credentials.client_email,\n aud: 'google',\n origins: [],\n typ: 'savetowallet',\n payload: {\n genericObjects: [\n genericObject\n ]\n }\n };\n\n const token = jwt.sign(claims, credentials.private_key, { algorithm: 'RS256' });\n return `https://pay.google.com/gp/v/save/${token}`;\n}\n","export default __webpack_public_path__ + \"static/media/google_wallet.7c8068d8.svg\";","export default __webpack_public_path__ + \"static/media/apple-wallet.58701a98.svg\";","export default __webpack_public_path__ + \"static/media/rollandGarros.0989fd99.jpeg\";","import React from 'react'\n\nimport Close from '../../Assets/Icons/cross.svg';\nimport RollandGarros from '../../Assets/Images/rollandGarros.jpeg'\nimport './PlanModal.scss'\nimport BaseButton from \"../BaseButton/BaseButton\";\n\ninterface PlanModalProps {\n visible: boolean,\n onClose: () => void\n}\n\nconst PlanModal: React.FC = ({visible, onClose}: PlanModalProps) => {\n\n if(!visible) {\n return <>\n }\n\n return (\n
\n
\n \"close\"\n
\n \"plan\n
\n \n
\n
\n )\n}\n\nexport default PlanModal;\n","import React from 'react'\n\nimport cross from \"../../Assets/Icons/cross.svg\";\n\nimport './QrCodePage.scss'\nimport {useLocation, useNavigate} from \"react-router-dom\";\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport QRCode from \"react-qr-code\";\nimport {setPanier, setTimeCreationPanier} from \"../../store/actions\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {DoorModel} from \"../../Models/DoorModel\";\nimport {useGoogleWallet} from \"../../hooks/useGoogleWallet\";\nimport {StadiumModel} from \"../../Models/StadiumModel\";\n// import {EventModel} from \"../../Models/EventModel\";\n// import {useFormatDate} from \"../../hooks/useFormatDate\";\nimport googleWalletBtn from '../../Assets/Images/google_wallet.svg'\nimport appleWalletBtn from '../../Assets/Images/apple-wallet.svg'\nimport {useModal} from \"../../hooks/useModal\";\nimport PlanModal from \"../../Components/PlanModal/PlanModal\";\n\n\ndeclare global {\n interface Window {\n opera:any;\n MSStream:any;\n }\n}\nfunction getMobileOperatingSystem() {\n const userAgent = navigator.userAgent || navigator.vendor || window.opera;\n\n if (/android/i.test(userAgent)) {\n return \"Android\";\n }\n\n // iOS detection from: http://stackoverflow.com/a/9039885/177710\n if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {\n return \"iOS\";\n }\n\n return \"unknown\";\n}\n\nconst QrCodePage: React.FC = ({}) => {\n const navigate = useNavigate()\n const dispatch = useDispatch()\n const {state} = useLocation() as { state: { reference: string, pickup?: string, total: string, affluence: string } };\n\n const door = useSelector(state => state.door)\n const pdv = useSelector(state => state.selectedPdv)\n const stadium = useSelector(state => state.stadium)\n // const event = useSelector(state => state.event)\n const googleWalletUrl = useGoogleWallet(state.reference)\n const planModal = useModal()\n\n // const formatDate = useFormatDate()\n\n\n const handleClick = () => {\n dispatch(setPanier(undefined))\n dispatch(setTimeCreationPanier(undefined))\n if(door) {\n navigate(`/stands?stadium=${stadium?.reference}&doorId=${door.id}`)\n } else {\n navigate(`/menu?stadium=${stadium?.reference}&pdvId=${pdv}`)\n }\n }\n\n const formatPickup = () => {\n if(state.pickup) {\n const splited = state.pickup.split(\" \")\n return splited[splited.length - 1]\n }\n }\n\n const formatAffluence = () => {\n if(state.affluence) {\n const splited = state.affluence.split(\"-\")\n return splited[splited.length - 1]\n }\n }\n\n return (\n
\n {\n state.pickup && (\n
\n
\n
\n

PICK UP

\n

{formatPickup()}

\n
\n )\n }\n {\"fermer\"}\n
\n \n
\n {\n googleWalletUrl && getMobileOperatingSystem() === \"Android\" && (\n \n \"google\n \n )\n }\n {\n getMobileOperatingSystem() === \"iOS\" && (\n \n \"apple\n \n )\n }\n

Commande #{state.reference}

\n

{state.total} €

\n { state.pickup &&

À retirer au Pick up {formatPickup()}

}\n { state?.affluence &&

Commande prête dans {formatAffluence()} minutes

}\n {\n stadium?.reference === \"RGP\" && (\n \n )\n }\n
\n \n
\n \n
\n )\n}\n\nexport default QrCodePage;\n","import React from 'react'\n\nimport './HistoriqueItem.scss'\nimport {HistoriqueOrderModel} from \"../../Models/HistoriqueOrderModel\";\n\ninterface MenuItemProps {\n order: HistoriqueOrderModel\n onClick: () => void\n}\n\nconst HistoriqueItem: React.FC = ({order, onClick}: MenuItemProps) => {\n\n return (\n
\n {\n order && (\n <>\n
\n \n
\n
\n
\n

#{order.reference}

\n

{order.priceTTC} €

\n
\n

{order.pdvName} Voir QR code

\n
\n \n )\n }\n
\n )\n}\n\nexport default HistoriqueItem;\n","import React, {useEffect, useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\n\nimport './HistoriquePage.scss'\nimport HistoriqueItem from \"../../Components/HistoriqueItem/HistoriqueItem\";\nimport BottomSheet from \"../../Components/BottomSheet/BottomSheet\";\nimport {useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {UserModel} from \"../../Models/UserModel\";\nimport Login from \"../../Components/Login/login\";\nimport {useNavigate} from \"react-router-dom\";\nimport QRCode from \"react-qr-code\";\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport {DoorModel} from \"../../Models/DoorModel\";\nimport {StadiumModel} from \"../../Models/StadiumModel\";\n\nconst HistoriquePage: React.FC = ({}) => {\n const navigate = useNavigate()\n\n const user = useSelector(state => state.user)\n const porte = useSelector(state => state.door)\n const pdv = useSelector(state => state.selectedPdv)\n const stadium = useSelector(state => state.stadium)\n\n const [orderToShow, setOrderToShow] = useState('')\n const [show, setShow] = useState(false)\n const [showLogin, setShowLogin] = useState(false)\n\n useEffect(() => {\n setShowLogin(!user?.id)\n }, [])\n\n const handleClickOrder = (reference: string) => {\n setOrderToShow(reference)\n setShow(true)\n }\n\n const handleClick = () => {\n if(porte) {\n navigate(`/stands?stadium=${stadium?.reference}&doorId=${porte.id}`)\n } else {\n navigate(`/menu?stadium=${stadium?.reference}&pdvId=${pdv}`)\n }\n }\n\n return (\n navigate(-1)}>\n <>\n {\n user && (\n <>\n {\n user.orders && user.orders.length > 0 ? (\n
\n {\n user.orders.map((order, index) => (\n handleClickOrder(order.reference)} />\n ))\n }\n
\n ) : (\n
\n

Votre historique est vide

\n

Commandez vos articles en cliquant sur le bouton ci-dessous

\n \n
\n )\n }\n \n )\n }\n \n setShow(false)} >\n
\n
\n \n
\n

Commande #{orderToShow}

\n
\n
\n setShowLogin(false)} show={showLogin} onClose={() => navigate(-1)} />\n
\n )\n}\n\nexport default HistoriquePage;\n","import React from 'react'\n\nimport './StandComponent.scss'\nimport {PdvModel} from \"../../Models/PdvModel\";\n\ninterface MenuStandProps {\n stand: PdvModel,\n porte: string,\n handleClick: () => void\n}\n\nconst StandComponent: React.FC = ({stand, porte, handleClick}: MenuStandProps) => {\n return (\n
\n
\n

{stand.name}

\n

Porte {porte}

\n
\n
\n {stand.image && \"stand\"/}\n
\n
\n )\n}\n\nexport default StandComponent;\n","import React, {useEffect, useState} from 'react'\n\nimport BasePage from \"../../Components/BasePage/BasePage\";\n\nimport './StandsPage.scss'\nimport StandComponent from \"../../Components/StandComponent/StandComponent\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {StateModel} from \"../../Models/StateModel\";\nimport {DoorModel} from \"../../Models/DoorModel\";\nimport {PdvModel} from \"../../Models/PdvModel\";\nimport useHttpClient from \"../../hooks/http/useHttpClient\";\nimport {setDoor, setPanier, setTimeCreationPanier} from \"../../store/actions\";\nimport {useLoader} from \"../../hooks/useLoader\";\nimport Loader from \"../../Components/Loader/Loader\";\nimport Error from \"../../Components/Error/Error\";\nimport {useNavigate, useSearchParams} from \"react-router-dom\";\nimport {useModal} from \"../../hooks/useModal\";\nimport {useGetEvent} from \"../../hooks/useGetEvent\";\nimport {useError} from \"../../hooks/useError\";\n\nconst StandsPage: React.FC = ({}) => {\n const navigate = useNavigate()\n const dispatch = useDispatch()\n const {getPdvs} = useHttpClient()\n const [searchParams,] = useSearchParams();\n const doorId = searchParams.get(\"doorId\")\n\n const door = useSelector(state => state.door)\n const [stands, setStands] = useState([])\n\n const loader = useLoader()\n const showError = useModal()\n const eventError = useError()\n const apiError = useError()\n const getEvent = useGetEvent(() => {\n loader.hide()\n eventError.open(\"\")\n }, () => {\n loader.hide()\n apiError.open(\"\")\n })\n\n useEffect(() => {\n dispatch(setPanier(undefined))\n dispatch(setTimeCreationPanier(undefined))\n loader.show()\n getEvent(\n searchParams.get(\"stadium\") || undefined,\n (doors: DoorModel[]) => {\n dispatch(setDoor(doors.find((d: DoorModel) => d.id.toString() === doorId)))\n if (door) {\n void getPdvs(door.id).then(r => {\n setStands(r)\n loader.hide()\n if (r.length === 0) {\n showError.open()\n }\n }).catch(() => apiError.open(\"\"))\n .finally(loader.hide)\n } else {\n showError.open()\n }\n }\n )\n }, [doorId])\n\n\n const handleClick = (standId: number) => {\n navigate(`/menu?stadium=${searchParams.get(\"stadium\")}&pdvId=${standId}`)\n }\n\n\n return (\n \n
\n {stands.map((stand, index) => (\n handleClick(stand.id)}/>\n ))}\n
\n navigate(`/choixporte?stadium=${searchParams.get(\"stadium\")}`)}\n title=\"Aucun point de vente n'est disponible à cette porte\"\n subTitle=\"Veuillez saisir un autre numéro de porte à proximité.\"\n />\n \n \n \n
\n )\n}\n\nexport default StandsPage;\n","import React, {useEffect, useState} from \"react\";\nimport './ResetPasswordPage.scss';\nimport {useSearchParams} from \"react-router-dom\";\nimport BaseInput from \"../../Components/BaseInput/BaseInput\";\nimport BaseButton from \"../../Components/BaseButton/BaseButton\";\nimport Success from \"../../Components/Success/Success\";\nimport check from '../../Assets/Icons/check.svg'\nimport axios from \"axios\";\nimport {useLoader} from \"../../hooks/useLoader\";\nimport Loader from \"../../Components/Loader/Loader\";\n\nconst ResetPasswordPage: React.FC = () => {\n const [searchParams, ] = useSearchParams();\n const email = searchParams.get(\"t\")\n const id = searchParams.get(\"s\")\n const [showSuccess, setShowSuccess] = useState(false)\n const [mdp1, setMdp1] = useState('')\n const [mdp2, setMdp2] = useState('')\n const [mdp2Error, setMdp2Error] = useState('')\n\n const loader = useLoader()\n\n useEffect(() => {\n if (mdp1 !== mdp2) {\n setMdp2Error('Les mots de passe ne correspondent pas')\n } else {\n setMdp2Error('')\n }\n }, [mdp1, mdp2])\n\n const sendResetPasswordEmail = () => {\n if (mdp1.length >= 6 && mdp2.length > 0 && mdp2Error.length === 0) {\n loader.show()\n axios.put(`${process.env.REACT_APP_BART_URL}/users/${id}/updateMdp`, {id: id, newMdp: mdp1})\n .then(function () {\n loader.hide()\n setShowSuccess(true)\n })\n .catch(function () {\n loader.hide()\n });\n } else {\n if (mdp1.length === 0) {\n } else if (mdp1 !== mdp2 || mdp1.length < 6) {\n }\n }\n }\n\n return (\n <>\n
\n

Saisie du nouveau mot de passe

\n

Pour l’adresse email {email}

\n \n \n sendResetPasswordEmail()} type={'filled'} className=\"resetPassword--btn\"/>\n
\n \n \n \n )\n}\n\nexport default ResetPasswordPage\n","import rootReducer from \"./reducers\";\nimport {createStore} from \"redux\";\nimport {persistReducer, persistStore} from 'redux-persist'\nimport storage from 'redux-persist/lib/storage' // defaults to localStorage for web\n\nconst persistConfig = {\n key: 'root',\n storage,\n}\n\nconst persistedReducer = persistReducer(persistConfig, rootReducer)\n\n//la création du store, auquel on passe le reducer (rootReducer), l'état initial (initialState), et, si besoin, des middleware.\n// les middlewares, ici on utilise thunk, permettent d'appeler une fonction entre le dispatch d'une action et le reducer,\n// c'est ça qui nous permet d'appeler addFilmAction par exemple.\nconst store = createStore(persistedReducer)\nconst persistor = persistStore(store)\nexport default { store, persistor }\n","import {\n CLEAR_STATE,\n SET_DOOR,\n SET_EVENT,\n SET_PANIER, SET_PANIER_REFERENCE,\n SET_PRODUCT_TO_SHOW,\n SET_SELECTED_CARD,\n SET_SELECTED_PDV,\n SET_STADIUM, SET_TIME_CREATION_PANIER,\n SET_USER,\n} from '../actions/types';\nimport {StateModel} from \"../../Models/StateModel\";\n\nexport default (state: any, action: { type: any; snapshot: any; }): StateModel => {\n switch (action.type) {\n case CLEAR_STATE:\n return {\n ...state,\n stadium: undefined,\n panier: undefined,\n door: undefined,\n event: undefined,\n selectedPdv: undefined,\n productToShow: undefined,\n selectedCard: undefined\n };\n case SET_USER:\n return {\n ...state,\n user: action.snapshot,\n };\n case SET_STADIUM:\n return {\n ...state,\n stadium: action.snapshot,\n };\n case SET_DOOR:\n return {\n ...state,\n door: action.snapshot,\n };\n case SET_PANIER:\n return {\n ...state,\n panier: action.snapshot,\n };\n case SET_PANIER_REFERENCE:\n return {\n ...state,\n panier: {...state.panier, reference: action.snapshot},\n };\n case SET_PRODUCT_TO_SHOW:\n return {\n ...state,\n productToShow: action.snapshot,\n };\n case SET_SELECTED_PDV:\n return {\n ...state,\n selectedPdv: action.snapshot,\n };\n case SET_EVENT:\n return {\n ...state,\n event: action.snapshot,\n };\n case SET_SELECTED_CARD:\n return {\n ...state,\n selectedCard: action.snapshot,\n };\n case SET_TIME_CREATION_PANIER:\n return {\n ...state,\n timeCreationPanier: action.snapshot,\n };\n default:\n return state;\n }\n};\n","export default __webpack_public_path__ + \"static/media/powered.5f41b0aa.svg\";","import React, {useEffect} from 'react'\n\nimport './StadePage.scss'\nimport {useNavigate, useParams, useSearchParams} from \"react-router-dom\";\nimport {useDispatch} from \"react-redux\";\nimport {setDoor} from \"../../store/actions\";\nimport {DoorModel} from \"../../Models/DoorModel\";\nimport powered from '../../Assets/Icons/powered.svg'\nimport Error from \"../../Components/Error/Error\";\nimport {useError} from \"../../hooks/useError\";\nimport {useGetEvent} from \"../../hooks/useGetEvent\";\nimport coubertin from \"../../Assets/Logos/coubertin.svg\";\nimport ladefense from \"../../Assets/Logos/ladefense.svg\";\n//import matmut from \"../../Assets/Logos/matmut.svg\";\nimport bordeaux from \"../../Assets/Logos/bordeaux.png\";\nimport mauroy from \"../../Assets/Logos/losc.png\";\nimport parcdesprinces from \"../../Assets/Logos/parcdesprinces.svg\";\nimport rolandGarros from \"../../Assets/Logos/rolandGarros.svg\";\n\nconst stadesImages = new Map()\nstadesImages.set('PDC', coubertin)\nstadesImages.set('PDA', ladefense)\nstadesImages.set('BMA', bordeaux)\nstadesImages.set('LIL', mauroy)\nstadesImages.set('PDP', parcdesprinces)\nstadesImages.set('RGP', rolandGarros)\n\nconst StadePage: React.FC = ({}) => {\n const dispatch = useDispatch()\n const navigate = useNavigate()\n const {stadium} = useParams()\n const [searchParams,] = useSearchParams();\n const eventError = useError()\n const apiError = useError()\n const getEvent = useGetEvent(() => eventError.open(\"\"), () => apiError.open(\"\"))\n\n useEffect(() => {\n setTimeout(() => {\n getEvent(\n stadium,\n (doors: DoorModel[]) => {\n const doorId = searchParams.get(\"door\")\n const pdvId = searchParams.get(\"pdv\")\n if(doorId) {\n dispatch(setDoor(doors.find((d: DoorModel) => d.id.toString() === doorId)))\n navigate(`/stands?stadium=${stadium}&doorId=${doorId}`)\n } else if(pdvId) {\n dispatch(setDoor(undefined))\n navigate(`/menu?stadium=${stadium}&pdvId=${pdvId}`)\n } else {\n navigate(`/choixporte?stadium=${stadium}`)\n }\n }\n )\n }, 2500)\n }, [])\n\n return (\n <>\n
\n \n \n
\n \n \n \n )\n}\n\nexport default StadePage;\n","import React, {useEffect, useState} from \"react\";\nimport './EdenredCallbackPage.scss'\nimport {useSearchParams} from \"react-router-dom\";\nimport logo from \"../../Assets/Logos/bart.svg\";\nimport axios from \"axios\";\nimport Loader from \"../../Components/Loader/Loader\";\n\nconst EdenredCallbackPage:React.FC = () => {\n const [searchParams,] = useSearchParams();\n const [error, setError] = useState(false)\n const [loading, setLoading] = useState(true)\n useEffect(() => {\n const code = searchParams.get('code')\n const body = searchParams.get('state')\n axios.post(`${process.env.REACT_APP_BART_URL}/edenred/create-transaction/${code}`, JSON.parse(body ?? '{}'))\n .then(() => setError(false))\n .catch(() => setError(true))\n .finally(() => setLoading(false))\n\n }, [searchParams])\n if(loading) {\n return \n }\n return (\n
\n \"logo\"\n {\n error ? (\n <>\n

Une erreur est survenue.

\n

Merci de fermer cette page et d'essayer un autre moyen de paiement

\n \n ) : (\n <>\n

Votre paiement a bien été soumis à Edenred.

\n

Vous pouvez fermer cette fenêtre et reprendre votre navigation.

\n \n )\n }\n
\n )\n}\n\nexport default EdenredCallbackPage\n","import React from 'react';\nimport './App.scss';\nimport {BrowserRouter, Route, Routes} from \"react-router-dom\";\nimport HomePage from \"../Pages/HomePage/HomePage\";\nimport ChoixPortePage from \"../Pages/ChoixPortePage/ChoixPortePage\";\nimport ChoixSiegePage from \"../Pages/ChoixSiegePage/ChoixSiegePage\";\nimport MenuPage from \"../Pages/MenuPage/MenuPage\";\nimport ItemPage from \"../Pages/ItemPage/ItemPage\";\nimport PanierPage from \"../Pages/PanierPage/PanierPage\";\nimport CommandePage from \"../Pages/CommandePage/CommandePage\";\nimport PaiementPage from \"../Pages/PaiementPage/PaiementPage\";\nimport AjoutCartePage from \"../Pages/AjoutCartePage/AjoutCartePage\";\nimport QrCodePage from \"../Pages/QrCodePage/QrCodePage\";\nimport HistoriquePage from \"../Pages/HistoriquePage/HistoriquePage\";\nimport {loadStripe} from \"@stripe/stripe-js\";\nimport {Elements} from \"@stripe/react-stripe-js\";\nimport StandsPage from \"../Pages/StandsPage/StandsPage\";\nimport ResetPasswordPage from \"../Pages/ResetPasswordPage/ResetPasswordPage\";\nimport store from \"../store\";\nimport {PersistGate} from \"redux-persist/integration/react\";\nimport StadePage from \"../Pages/StadePage/StadePage\";\nimport EdenredCallbackPage from \"../Pages/EdenredCallbackPage/EdenredCallbackPage\";\n\nconst stripePromise = loadStripe(process.env.REACT_APP_STRIPE_KEY || '');\n\nconst App: React.FC = () => {\n\n return (\n <>\n \n \n \n \n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n }/>\n \n \n \n \n \n );\n};\n\nexport default App;\n","import {ReportHandler} from 'web-vitals';\n\nconst reportWebVitals = (onPerfEntry?: ReportHandler) => {\n if (onPerfEntry && onPerfEntry instanceof Function) {\n void import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => {\n getCLS(onPerfEntry);\n getFID(onPerfEntry);\n getFCP(onPerfEntry);\n getLCP(onPerfEntry);\n getTTFB(onPerfEntry);\n });\n }\n};\n\nexport default reportWebVitals;\n","import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport './index.scss';\nimport App from './App/App';\nimport reportWebVitals from \"./reportWebVitals\";\nimport {Provider} from \"react-redux\";\nimport store from \"./store\";\n\nconst root = ReactDOM.createRoot(\n document.getElementById('root') as HTMLElement\n);\nroot.render(\n \n \n \n \n \n);\n\n// If you want to start measuring performance in your app, pass a function\n// to log results (for example: reportWebVitals(console.log))\n// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals\nreportWebVitals();\n\n"],"sourceRoot":""}