{"version":3,"sources":["Assets/placeholders/RestaurantImg.jpg","Components/Shared/FlexContainer.tsx","Styles/tools.ts","Components/Shared/ArrowToggle.tsx","Components/Shared/Badge.tsx","Components/Shared/Page/PageContent.tsx","Types/index.ts","Components/Shared/AppDownloadBanner/index.tsx","Components/Core/Button/index.tsx","Components/Core/Description/index.tsx","Components/Core/Filters/FilterTitle/index.tsx","Components/Core/Filters/FilterSubtitle/index.tsx","Components/Core/Select/Dropdown.tsx","env.tsx","Services/Client.tsx","Reducers/Client.tsx","Hooks/useFetchClientData.tsx","Services/Dishes.tsx","Reducers/Dishes.tsx","Services/Restaurant.tsx","Reducers/Categories.tsx","Utils/formatCurrencyAmount.tsx","Utils/hotelFilter.ts","Utils/flags.ts","Utils/index.tsx","Hooks/useFetchDishes.tsx","Services/Drinks.tsx","Reducers/Drinks.tsx","Hooks/useFetchDrinks.tsx","Services/Wine.tsx","Reducers/Wines.tsx","Hooks/useFetchWines.tsx","Hooks/useProcessQueryParams.tsx","Components/Core/Select/index.tsx","Hooks/OnClickOutsideHook.tsx","Styles/Theme.ts","Components/Core/Input/index.tsx","Components/Core/LanguageSelect/index.tsx","Components/Core/NavLink/index.tsx","Components/Core/Subtitle/Subtitle.tsx","Components/Shared/CookiesAdvertising/index.tsx","Assets/icons/Restaurantes.svg","Assets/icons/WINE.svg","Assets/icons/Maridaje.svg","Assets/icons/Copa.svg","Assets/icons/Filtro.svg","Assets/icons/facebook.svg","Assets/icons/twitter.svg","Assets/icons/youtube.svg","Assets/icons/linkedin.svg","Assets/icons/instagram.svg","Components/Shared/icons/index.tsx","Components/Shared/ActionBar/ActionBarItem.tsx","Components/Shared/ActionBar/ActionBar.tsx","Components/Shared/Image/Image.tsx","Components/Shared/List/ListContainer.tsx","Components/Shared/List/ListItem.tsx","Components/Shared/Loader/Loader.tsx","Components/Shared/Logo.tsx","Components/Shared/Loading.tsx","Components/Shared/Page/Page.tsx","Components/Shared/Title.tsx","Components/Shared/CloseIcon.tsx","Components/Shared/Page/About.tsx","Components/Shared/Page/PageHeader.tsx","Components/Shared/SocialBanner/SocialBanner.tsx","Components/Shared/WineBottle/WineBottle.tsx","Reducers/Filters.tsx","Pages/HotelView/RestaurantsList.tsx","Pages/HotelView/index.tsx","Hooks/useDebounce.tsx","Pages/RestaurantView/RestaurantDetail/index.tsx","Pages/RestaurantView/RestaurantCellar/CellarFilters/FilterSelector.tsx","Utils/language.helper.tsx","Pages/RestaurantView/RestaurantCellar/CellarFilters/FilterItem.tsx","Utils/constants/thunks.ts","Pages/RestaurantView/RestaurantCellar/CellarFilters/CellarFiltersModal.tsx","Pages/RestaurantView/RestaurantCellar/CellarFilters/FilterBadge.tsx","Styles/mixins.ts","Pages/RestaurantView/RestaurantCellar/CellarFilters/index.tsx","Utils/features.ts","Pages/RestaurantView/RestaurantCellar/WineListItem.tsx","Pages/RestaurantView/RestaurantCellar/WineDetailModal/WineDetailPage.tsx","Pages/RestaurantView/RestaurantCellar/WineDetailModal/index.tsx","Services/Selections.tsx","Reducers/Selections.tsx","Pages/RestaurantView/RestaurantCellar/index.tsx","Pages/RestaurantView/RestaurantMenu/DishListItem.tsx","Utils/behaviour.ts","Pages/RestaurantView/RestaurantMenu/MenuFilters/index.tsx","Pages/RestaurantView/RestaurantMenu/DishDetailModal/DishDetailPage.tsx","Pages/RestaurantView/RestaurantMenu/DishDetailModal/index.tsx","Pages/RestaurantView/RestaurantMenu/ScheduleFilters/ScheduleFilters.tsx","Pages/RestaurantView/RestaurantMenu/index.tsx","Pages/RestaurantView/RestaurantDrinks/DrinkListItem.tsx","Pages/RestaurantView/RestaurantDrinks/DrinksFilters/index.tsx","Pages/RestaurantView/RestaurantDrinks/DrinkDetailModal/DrinkDetailPage.tsx","Pages/RestaurantView/RestaurantDrinks/DrinkDetailModal/index.tsx","Pages/RestaurantView/RestaurantDrinks/index.tsx","Pages/RestaurantView/index.tsx","Pages/WelcomeView/index.tsx","Pages/ErrorView/index.tsx","App.tsx","serviceWorker.ts","i18n.js","store.ts","Styles/GlobalStyles.ts","index.tsx","Assets/images/bottle/bottle_default.png","Assets/logo-black@2x.png","Assets/logo-white@2x.png","Assets/icon.png","Assets/images/table/table.png","Assets/images/wood/wood.png","Assets/icons/food.png","Assets/icons/drink.png"],"names":["module","exports","FlexContainer","styled","motion","div","direction","justify","align","wrap","shrink","width","height","margin","padding","flex","ArrowToggleContainer","ArrowToggle","open","textColor","style","animate","rotate","x","className","color","fontSize","paddingTop","BadgeContainer","theme","colors","rounded","Badge","React","forwardRef","props","ref","children","id","onClick","PageContent","ClientType","ACTION_BAR_TYPES","RESTAURANT","CELLAR","MENU","DRINKS","Banner","black","CloseButton","MdClose","red","DownloadLink","a","white","APP_BANNER_VARIANTS","initial","y","opacity","in","out","AppDownloadBanner","isOpen","handleBanner","useState","branchURL","setBranchURL","t","useTranslation","client","useSelector","store","data","restaurantId","useParams","isClientEnabled","habilitado","isDeadbeatClient","atrasado","name","client_type","restaurantQuery","useEffect","animated","customHeight","exit","transition","duration","variants","href","target","as","Button","button","index","bold","whileTap","scale","DescriptionContainer","p","size","Description","FilterTitle","h1","FilterSubTitle","h2","gray","DropdownContainer","radius","verticalOffset","leftOffset","DropdownDecoration","light_gray","DropwdownContent","shadow","overlay","OptionBox","text_dark","position","isSelected","OptionText","span","Dropdown","selected","options","onChange","getPosition","length","key","map","option","value","label","URL_INTEGRAL","AUTHORIZATION","PUBLIC_TOKEN","ClientService","fetchClientData","CONFIG","headers","authorization","axios","get","response","fetchClientDataByName","getClientData","createAsyncThunk","rejectWithValue","info","status","message","msg","clientSlice","createSlice","initialState","isLoading","error","reducers","extraReducers","pending","type","state","fulfilled","action","payload","rejected","useFetchClientData","clientId","dispatch","useDispatch","fetchingData","fetchData","useCallback","fetchDishes","clientid","page","menuFilter","url","DishesService","InitialDishesState","dishesTotal","getDishesData","filters","DishesSlice","setDishes","_","resetDishes","actions","setDishesActionCreator","resetDishesActionCreator","RestaurantService","fetchDishGlobalCategories","clientName","fetchSelfDishCategories","fetchDrinkGlobalCategories","fetchSelfDrinkCategories","fetchCellarData","getCellarData","clienId","getDrinkGlobalCategories","clientUsername","getDrinkSelfCategories","getDishGlobalCategories","getDishSelfCategories","InitialCategoriesState","wine","dishGlobalCategory","dish","drinkGlobalCategory","drink","categoriesSlice","setWineCategories","setDishCategories","sortedSelfcategories","sort","z","superId","filteredSelfcategories","filter","flat","setDrinkCategories","resetCategories","countryEN","countryES","countryPT","regionEN","regionES","regionPT","subregionEN","subregionES","subregionPT","typeEN","typeES","typePT","varietalEN","varietalES","varietalPT","categoriesOrder","orderBy","o","Id","toString","order","setWineCategoriesActionCreator","formatCurrencyAmount","amount","currency","digits","CURRENCY_DICT","MXN","USD","EUR","BRL","PEN","COP","language","formatterCurrency","Intl","NumberFormat","maximumFractionDigits","format","showCurrency","formatter","concat","filterDishesByRestaurant","clientType","items","item","restaurants","some","restaurant","_id","countrys","code","isUsingCellarFilters","isUsingFilters","varietal","country","region","subregion","selling_by","selection","Boolean","useFetchDishes","menuFilters","skipRequest","dishes","fetchingDishGlobalCategories","setFetchingDishGlobalCategories","fetchingDishCategoriesData","setFetchingDishCategoriesData","dishError","setError","hasMoreDishes","setHasMoreDishes","fetchingDishes","setFetchingDishes","getDishes","pairings","results_number","filteredDishesByRestaurant","parsedList","dishesInStore","console","log","fetchDrinks","DrinksService","InitialDrinksState","getDrinksData","drinksSlice","setDrinks","resetDrinks","setDrinksActionCreator","resetDrinksActionCreator","useFetchDrinks","drinksFilters","drinks","fetchingDrinkGlobalCategories","setFetchingDrinkGlobalCategories","fetchingDrinksCategoriesData","setFetchingDrinksCategoriesData","drinksError","hasMoreDrinks","setHasMoreDrinks","fetchingDrinks","setFetchingDrinks","getDrinks","drinksInStore","getOrderField","field","lang","getTypeSort","WinesService","fetchWines","stockFilter","limit","winesTotal","config","typeQuery","varietyquery","regionQuery","subregionQuery","countryQuery","byGlassQuery","sortQuery","wine_sort","wine_order","query","InitialWinesState","cellarLength","getRestaurantCellar","getState","winesFilter","selections","categories","wines","response_number","currentSelection","find","vino_local_id","includes","rebuildDynamicFilters","total_cava","winesSlice","setWines","resetWines","increasePage","resetPage","resetWinesActionCreator","resetPageActionCreator","labels","categoriesWine","addIfNotExists","element","array","push","forEach","useProcessQueryParams","search","useLocation","queryParams","URLSearchParams","home","homePage","menu","isMenuAvailable","isRestaurantDetailsAvailable","sourceURL","goBackOriginPage","window","location","SelectContainer","SelectInput","SelectSelection","CustomSelect","placeholder","showArrow","setisOpen","useRef","handler","listener","event","current","contains","document","addEventListener","removeEventListener","useOnClickOutside","searchValueFn","setselected","onOptionChange","currentTarget","prev","AppTheme","light_black","steel","blue","transparent","background_color","screen_sizes","s","m","l","xl","input_height","small","InputContainer","StyledInput","input","IconContainer","disabled","marginTop","LANG_LIST","default","LanguageSelect","i18n","languages","split","currentLang","setCurrentLang","DEFAULT_LANGUAGES","AVAILABLE_LANGUAGES","updateLanguage","changeLanguage","alternativeLang","Select","Link","NavLink","rel","SubtitleContainer","h3","Subtitle","CookieDescription","CookiesAdvertising","buttonText","cookieName","background","alignItems","flexWrap","buttonStyle","borderRadius","contentStyle","expires","_extends","Object","assign","i","arguments","source","prototype","hasOwnProperty","call","apply","this","_objectWithoutProperties","excluded","sourceKeys","keys","indexOf","_objectWithoutPropertiesLoose","getOwnPropertySymbols","sourceSymbolKeys","propertyIsEnumerable","createElement","stroke","strokeWidth","fill","fillRule","transform","d","_ref","svgRef","title","viewBox","undefined","ForwardRef","xlinkHref","PlaceIcon","Restaurantes","DrinksIcon","MdLocalBar","MenuIcon","Dishes","CellarIcon","Cellar","GlassIcon","Glass","FiltersIcon","Filter","Facebook","Twitter","Youtube","Linkedin","Instagram","ACTION_EVENT_NAME","ActionBarItemContainer","ActionBarItemLabel","ActionBarItem","active","ActionBarContainer","ActionBar","restaurantDetails","actionBarOptions","setActionBarOptions","getIcon","ImageContainer","img","Image","srcImg","src","alt","ListContent","ListContainer","ListItemContainer","ListItem","hideIcon","backgroundColor","LogoContainer","TextContainer","VARIANTS_LOGO","VARIANTS_TEXT","Loading","logo","text","customText","repeat","Infinity","repeatType","Row","Col","Logo","LogoWhiteSrc","LogoSrc","LoadingContainer","show","textSize","SuperContainer","PageContainer","PAGE_VARIANTS","Page","use100vh","partialHeight","Title","CloseIcon","CloseIconButton","Overlay","ModalContent","About","close","navigator","ReactDOM","createPortal","share","getElementById","PageHeaderContainer","HeaderNavBar","BackContainer","HeaderBackText","TitleContainer","HeaderContent","PageHeader","backEnabled","backText","customBackAction","history","useHistory","showFiltersModal","setshowFiltersModal","cellar","WALogo","display","marginLeft","SOCIAL_LINKS","SocialBannerContainer","SocialBanner","sizeIcons","WineBottleContainer","WineBottleImageContainer","BackgroundImage","FloorImage","BottleImage","WineBottle","wineImageName","imageLoaded","setImageLoaded","imgObject","onload","image_url","wood","table","noImageBlackBottle","InitialFiltersState","selfCategory","schedule","filtersSlice","setCellarFilters","setMenuFilters","setScheduleFilters","setDrinksFilters","resetFilters","setCellarFiltersActionCreator","setMenuFiltersActionCreator","setScheduleFiltersActionCreator","setDrinksFiltersActionCreator","resetFiltersActionCreator","RestaurantsList","HotelView","isBannerOpen","searchTerm","setsearchTerm","debouncedSearchTerm","delay","debouncedValue","setDebouncedValue","setTimeout","clearTimeout","useDebounce","setrestaurants","description","Input","toLocaleLowerCase","RestaurantHeader","RestaurantImg","has_mobile_app","RestaurantInfo","InfoText","h6","InfoLabel","InfoDescription","RestaurantDetail","clientImage","main_image4_url","main_image1_url","require","nombre_evento","extra_evento","str","JSON","parse","e","isJson","parsedClientDescription","urlString","isUrl","RegExp","test","selectedRestaurant","rest","about_us","address","phone","email","main_currency","FilterSelectorContainer","OptionsContainer","FilterSelector","fontFamily","exitBeforeEnter","scaleY","originY","getGlobalLanguage","GLASS_LABEL_LANG","ES","EN","PT","FilterItem","currenLang","toUpperCase","currenLangGlassLabel","optionsList","selectionOptions","CellarFiltersModal","CATEGORIES_KEYS_ARRAY","filterClicked","FilterBadgeContent","FilterBadge","clear","whiteSpace","HideHorizontalScrollBar","css","FilterContainer","SelectedFiltersContainer","CellarFilters","filtersState","handleFilterChange","loading","customWinesTotal","clearFilter","marginRight","filterKey","badgeLabel","sel","features","WineListItemContainer","WineName","h5","WinePrice","WineBottleIcon","FaWineBottle","WineGlassIcon","FaWineGlassAlt","WineDescription","BottleImageMini","LabelDataContainer","WineListItem","decimals","client_settings","image","year","sellPrice","byGlass","glassPrice","glasses_num","Math","round","enabled","enabled_client","en","es","pt","profit","cup","configTable","flag","phoneflag","DescriptionBox","border","Label","LabelDescription","HeaderTable","CellHeader","Size","BodyTable","CellBody","TextAlign","CellFlag","WineDetailPage","wineO","idWine","managers","configMangerTable","exportManager","cup_format","nameES","house","textAlign","toLowerCase","codeflag","WineDetailModal","itemId","wineId","wineID","pathname","findWineForDetails","SelectionsService","fetchRestaurantSelections","InitSelectionsState","getRestaurantSelections","SelectionsSlice","CellarHeader","SectionTitle","SearchContainer","SearchInput","RestaurantCellar","sectionId","isCellarLoaded","shownFilterBadge","setShownFilterBadge","winesToShow","setWinesToShow","searchInput","setSearchInput","idTimeout","filteredWines","w","trim","nameEN","namePT","onInput","slice","openWineDetail","partialVisibility","isVisible","replace","DishListItemContainer","DishName","h4","DishPrice","DishPairing","DishDescription","DishListItem","pairedWines","setPairedWines","outOfStock","dish_price","getDimensions","getBoundingClientRect","top","right","bottom","left","offsetTop","offsetBottom","scrollTo","vertical","horizontal","scrollIntoView","behavior","block","inline","MenuFilters","categoriesRefs","showGlobalSelfCategories","show_global_selfcategories","badgesRef","badges","category","name_en","name_es","name_pt","selfcategory","badgesRefLen","idx","categoryRef","Number","categoryIdx","node","DishDetailPage","setShowWine","dish_img","DEFAULT_IMAGE_FOOD","pairedWine","matchedWine","showWine","DishDetailModal","dishSelected","dishId","findDishForDetails","FilterOption","available","SCHEDULES_OPTIONS","ScheduleFilters","is_breakfast_available","is_lunch_available","is_dinner_available","shiftAvailability","setShiftAvailability","is_breakfast","is_lunch","is_dinner","isOptionAvailable","isCurrentOptSelected","MenuHeader","SelfCategoriesContainer","RestaurantMenu","selfcategoriesOrder","filteredDishesByShift","setFilteredDishesByShift","emptyShifts","setEmptyShifts","groupedDishesByCat","groupedDishesBySelfcat","localProcessingDishes","processedLabels","setProcessedLabels","usedDishGlobalCategories","setUsedDishGlobalCategories","usedDishSelfCategories","setUsedDishSelfCategories","selectedSchedule","setSelectedSchedule","visibleSection","setVisibleSection","menuRef","listItemsRef","openDishDetail","availableOptions","orderedGroupedCatDishes","group","selfcategories","usedSelfcategories","orderedSelfcategories","b","orderedDishes","selfcatId","visitedSelfcat","selfcatIdx","self","findIndex","selfcat","matchedCategories","matchedGlobalCategoryDishes","reduce","acc","curr","initSelfcategory","matchedCategoryDishes","cat","handleScroll","adjustedTopList","categoriesRefsLen","scroller","groupIdx","FilterSubtitle","DrinkListItemContainer","DrinkName","DrinkPrice","DrinkDescription","DrinkVolume","DrinkListItem","volume","unit","price","DrinksFilters","DrinkDetailPage","img_url","DEFAULT_IMAGE_DRINK","DrinkDetailModal","drinkSelected","findDrinkForDetails","DrinksHeader","RestaurantDrinks","usedCategories","setUsedCategories","usedDrinkGlobalCategories","setUsedDrinkGlobalCategories","openDrinkDetail","filteredDrinksByRestaurant","filterDrinksByRestaurant","filteredDrinks","selfcatDrinks","selfdrinkcategories","collection","categori","globalcatDrinks","drinkcategory","groupedDrinksByCat","categoryId","groupedDrinksBySelfcat","allSubcategoriesGrouped","flow","matchedCategoryDrinks","selfCategories","orderedSelfcats","RestaurantView","clientData","clientToSearch","tab","setTab","fullCellarFilters","getWines","useFetchWines","getComponentToRender","umami","trackEvent","WelcomeView","userNotFound","setUserNotFound","disabledClient","setDisabledClient","username","isDisabled","trackView","Loader","ErrorView","App","setIsBannerOpen","timer","exact","path","render","to","hostname","match","use","LanguageDetector","Backend","initReactI18next","init","debug","detection","caches","interpolation","escapeValue","fallbackLng","reducer","dishesSlice","configureStore","middleware","getDefaultMiddleware","immutableCheck","GlobalStyle","createGlobalStyle","dark","light","med","fallback","serviceWorker","ready","then","registration","unregister","catch"],"mappings":"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","file":"static/js/main.5ef40ccf.chunk.js","sourcesContent":["module.exports = __webpack_public_path__ + \"static/media/RestaurantImg.59c90ef4.jpg\";","import styled from 'styled-components';\nimport { motion } from 'framer-motion';\n\ntype FlexDirection = 'column' | 'row';\ntype FlexJustify = 'center' | 'flex-start' | 'flex-end' | 'space-between' | 'space-evenly' | 'space-around';\ntype FlexAlign = 'center' | 'flex-start' | 'flex-end';\ntype FlexWrap = 'wrap' | 'nowrap';\n\ninterface FlexContainerProps {\n  direction?: FlexDirection;\n  justify?: FlexJustify;\n  align?: FlexAlign;\n  wrap?: FlexWrap;\n  shrink?: number;\n  width?: string;\n  height?: string;\n  margin?: string;\n  padding?: string;\n}\n\nconst FlexContainer = styled(motion.div)<FlexContainerProps>`\n  display: flex;\n  flex-direction: ${ ({direction = 'row'}) => direction };\n  justify-content: ${ ({justify = 'flex-start'}) => justify };\n  align-items: ${ ({align = 'flex-start'}) => align };\n  flex-wrap: ${ ({wrap = 'nowrap'}) => wrap };\n  flex-shrink: ${({shrink = ''}) => shrink };\n\n  width: ${ ({width = 'fit-content'}) => width };\n  height: ${ ({height = 'auto'}) => height };\n  margin: ${ ({margin = '0'}) => margin };\n  padding: ${ ({padding = '0'}) => padding };\n`\n\nexport default FlexContainer;","type Direction = \"column\" | \"row\" | \"unset\";\nexport type Justify =\n\t| \"center\"\n\t| \"flex-start\"\n\t| \"flex-end\"\n\t| \"space-between\"\n\t| \"space-evenly\"\n\t| \"space-around\"\n\t| \"unset\";\ntype Align = \"center\" | \"flex-start\" | \"flex-end\" | \"baseline\" | \"unset\";\ntype Wrap = \"wrap\" | \"nowrap\" | \"wrap-reverse\" | \"unset\";\n\nexport function flex(direction: Direction, justify: Justify, align: Align, wrap: Wrap): string {\n\treturn `\n    display: flex;\n    flex-direction: ${direction};\n    justify-content: ${justify};\n    align-items: ${align};\n    flex-wrap: ${wrap};\n  `;\n}\n","import React from 'react'\nimport styled from 'styled-components';\nimport { IoIosArrowDown } from \"react-icons/io\";\n\nimport { flex } from '../../Styles/tools';\nimport { motion } from 'framer-motion';\nimport { AppThemeColors } from '../../Styles/Theme';\n\ntype ArrowIconType = {\n  textColor?: AppThemeColors;\n}\nconst ArrowToggleContainer = styled(motion.div)`\n  ${ flex('row', 'center', 'center', 'nowrap')};\n  padding-right: 3px;\n\n`\n\ninterface IArrowToggleProps {\n  open: boolean;\n  textColor?: AppThemeColors;\n  style?: any;\n}\nconst ArrowToggle: React.FC<IArrowToggleProps> = ({open, textColor = 'white', style}: IArrowToggleProps) => {\n  return (\n    <ArrowToggleContainer animate={{rotate: open ? 180 : 0, x: open ? -4 : 0}} className='arrow-toggle-container'>\n      <IoIosArrowDown  style={{color: textColor,  fontSize: '1.3em',  paddingTop: '3px', ...style}}/>\n    </ArrowToggleContainer>\n  )\n}\n\nexport default ArrowToggle\n","import React, { ReactNode } from 'react';\nimport styled from 'styled-components';\nimport { AppThemeColors } from '../../Styles/Theme';\n\ntype BadgeContainerType = {\n\tcolor?: AppThemeColors;\n\ttextColor?: AppThemeColors;\n\tmargin?: string;\n};\n\nconst BadgeContainer = styled.div<BadgeContainerType>`\n\tbackground-color: ${({ theme, color = 'black' }) => theme.colors[color]};\n\tcolor: ${({ theme, textColor = 'white' }) => theme.colors[textColor]};\n\tmargin: ${({ margin = '' }) => margin};\n\tpadding: 7px 16px;\n\tborder-radius: ${({ theme }) => theme.rounded};\n\ttext-transform: capitalize;\n`;\n\ninterface BadgeProps {\n\tcolor?: AppThemeColors;\n\ttextColor?: AppThemeColors;\n\tmargin?: string;\n\tchildren: ReactNode;\n\tonClick?: () => void;\n\tid?: string;\n}\n\n// eslint-disable-next-line react/display-name\nconst Badge = React.forwardRef<HTMLInputElement, BadgeProps>((props, ref) => {\n\tconst { color, textColor, children, margin, id, onClick } = props;\n\treturn (\n\t\t<BadgeContainer id={id} color={color} textColor={textColor} margin={margin} onClick={onClick} ref={ref}>\n\t\t\t{children}\n\t\t</BadgeContainer>\n\t);\n});\n\nexport default Badge;\n","import styled from 'styled-components';\n\ntype PageContentType = {\n  width?: string;\n  height?: string;\n  margin?: string;\n  padding?: string;\n};\n\nconst PageContent = styled.div<PageContentType>`\n  display: flex;\n  flex-direction: column;\n  flex-grow: 1;\n  width: ${ ({width = '100%'}) => width };\n  height: ${ ({height = 'auto'}) => height };\n  margin: ${ ({margin = ''}) => margin };\n  padding: ${ ({padding = ''}) => padding };\n  overflow-y: scroll;\n  overflow-x: hidden;\n`;\n\nexport default PageContent;\n","import { ASYNC_IDLE, ASYNC_LOADING, ASYNC_SUCCEEDED, ASYNC_FAILED } from \"Utils/constants/thunks\";\n\nexport const ClientType = {\n\tHOTEL: \"hotel\",\n\tRESTAURANT: \"restaurant\",\n\tDISTRIBUTOR: \"distributor\",\n};\n\nexport const Currencies = {\n\tUSD: \"USD\",\n\tMXN: \"MXN\",\n\tEUR: \"EUR\",\n\tBRL: \"BRL\",\n};\n\nexport type ActionBarType = \"restaurant\" | \"cellar\" | \"menu\" | \"drinks\";\nexport const ACTION_BAR_TYPES = {\n\tRESTAURANT: \"restaurant\",\n\tCELLAR: \"cellar\",\n\tMENU: \"menu\",\n\tDRINKS: \"drinks\",\n};\n\nexport type OptionType = { label: string; value: string };\n\nexport type Wine = {\n\tarchived: boolean;\n\tavailable: boolean;\n\tbyGlass: boolean;\n\tcost: string;\n\tcountry: string;\n\tcountryEN: string;\n\tcountryPT: string;\n\tdescEN: string;\n\tdescES: string;\n\tdescPT: string;\n\tdiscount: number;\n\tearning: number;\n\tglassEarning: number;\n\tglassPrice: number;\n\tglasses_num: number;\n\thostNotesEN: string;\n\thostNotesES: string;\n\thostNotesPT: string;\n\thouse: string;\n\thouseEN: string;\n\thousePT: string;\n\tid: number;\n\timage: string;\n\tlastSelled: number;\n\tnameEN: string;\n\tnameES: string;\n\tnamePT: string;\n\toutOfStock: boolean;\n\tregion: string;\n\tregionEN: string;\n\tregionPT: string;\n\tsellPrice: number;\n\tsize: number;\n\tstock: number;\n\tsubregion: string;\n\tsubregionEN: string;\n\tsubregionPT: string;\n\tsuggested: boolean;\n\ttypeEN: string;\n\ttypeES: string;\n\ttypePT: string;\n\tvarietalEN: string;\n\tvarietalES: string;\n\tvarietalPT: string;\n\tvin: string;\n\tyear: number;\n\texportManager: any[];\n\tcup_format: any[];\n};\n\nexport type WineCategoriesType = {\n\tcountryEN: string[];\n\tcountryES: string[];\n\tcountryPT: string[];\n\tregionEN: string[];\n\tregionES: string[];\n\tregionPT: string[];\n\tsubregionEN: string[];\n\tsubregionES: string[];\n\tsubregionPT: string[];\n\ttotal?: number;\n\tby_glass?: number;\n\ttypeEN: string[];\n\ttypeES: string[];\n\ttypePT: string[];\n\tvarietalEN: string[];\n\tvarietalES: string[];\n\tvarietalPT: string[];\n};\n\nexport type Restaurant = {\n\t_id: string;\n\tactive: boolean;\n\tdescEN: string;\n\tdescES: string;\n\tdescPT: string;\n\tname: string;\n\tqr_hash?: string;\n\tqr_url?: string;\n};\n\nexport type Dish = {\n\tcategories: number[];\n\tdish_desc_en: string;\n\tdish_desc_es: string;\n\tdish_desc_pt: string;\n\tdish_img: string | null;\n\tdish_name_en: string;\n\tdish_name_es: string;\n\tdish_name_pt: string;\n\tdish_price: number | null;\n\tid: string;\n\tis_breakfast: boolean;\n\tis_dinner: boolean;\n\tis_lunch: boolean;\n\tlabel: string;\n\toutOfStock: boolean;\n\tselfcategory: ISelfCategory;\n\twines: number[];\n\trestaurants: Restaurant[];\n};\n\nexport type ISelfCategory = {\n\tid: number;\n\tnameEN: string;\n\tnameES: string;\n\tnamePT: string;\n\tsuperId: number;\n\torder: number;\n};\n\nexport type GlobalCategory = {\n\tId: number;\n\t_id: string;\n\tname_en: string;\n\tname_es: string;\n\tname_pt: string;\n\torder: number;\n};\n\nexport type DishSelfCategory = {\n\tId: number;\n\t_id: string;\n\tname_en: string;\n\tname_es: string;\n\tname_pt: string;\n\tsuperId: number;\n\tcategory: string;\n\torder: number;\n};\n\nexport type DrinkSelfCategory = {\n\tId: number;\n\t_id: string;\n\tname_en: string;\n\tname_es: string;\n\tname_pt: string;\n\tdrinkcategory: string;\n\timg_url: string;\n\torder: number;\n};\n\nexport type Drink = {\n\t_id: string;\n\tdrink_id: number;\n\tdescEN: string;\n\tdescES: string;\n\tdescPT: string;\n\tdrinkcategory: string;\n\timg_url: string;\n\tnameEN: string;\n\tnameES: string;\n\tnamePT: string;\n\toutOfStock: boolean;\n\tprice: number;\n\tselfdrinkcategories: string[];\n\tunit: string;\n\tvolume: number;\n\trestaurants: Restaurant[];\n};\n\nexport type ClientURL = {\n\trestaurantId: string;\n\tclientId: string;\n\tsectionId?: string;\n\titemId?: string;\n\twineId?: string;\n};\n\nexport type CellarOrder = \"name\" | \"price\" | \"size\" | \"vin\";\n\nexport type ScheduleOptions = \"is_breakfast\" | \"is_lunch\" | \"is_dinner\";\n\nexport type HTTP_STATUS = typeof ASYNC_IDLE | typeof ASYNC_LOADING | typeof ASYNC_SUCCEEDED | typeof ASYNC_FAILED;\n","/* eslint-disable @typescript-eslint/camelcase */\nimport React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { MdClose } from \"react-icons/md\";\n\nimport { flex } from \"Styles/tools\";\nimport { Page, FlexContainer } from \"Components/Shared\";\nimport PageContent from \"Components/Shared/Page/PageContent\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\nimport { useParams } from \"react-router-dom\";\nimport { ClientType, ClientURL } from \"Types\";\n\ninterface AppDownloadBannerProps {\n\tisOpen: boolean;\n\thandleBanner: (state: boolean) => void;\n}\n\nconst Banner = styled(motion.div)`\n\t${flex(\"row\", \"space-between\", \"center\", \"nowrap\")}\n\twidth: 100%;\n\theight: 100%;\n\tpadding: 0 1rem;\n\tbackground-color: ${({ theme }) => theme.colors.black};\n\ttransform-origin: top;\n\tposition: relative;\n`;\n\nconst CloseButton = styled(MdClose)`\n\tposition: absolute;\n\ttop: 50%;\n\tright: 0.4rem;\n\ttransform: translate(-0.4rem, -50%);\n\tfont-size: 1.5rem;\n\tcolor: ${({ theme }) => theme.colors.red};\n`;\n\nconst DownloadLink = styled.a<any>`\n\tpadding: ${({ padding = \"0.5em 1em\" }) => padding};\n\tcolor: ${({ theme }) => theme.colors.white};\n\tbackground-color: ${({ theme }) => theme.colors.red};\n\tborder: 0;\n\tborder-radius: ${({ theme }) => theme.rounded};\n\tmargin: ${({ margin = \"1rem 0\" }) => margin};\n\toutline: 0;\n\ttext-decoration: none;\n\tfont-size: ${({ fontSize = \"0.9rem\" }) => fontSize};\n`;\n\nconst APP_BANNER_VARIANTS = {\n\tinitial: {\n\t\ty: 0,\n\t\topacity: 0,\n\t},\n\tin: {\n\t\ty: 0,\n\t\topacity: 1,\n\t},\n\tout: {\n\t\ty: -150,\n\t\topacity: 0,\n\t},\n};\n\nconst AppDownloadBanner: React.FC<AppDownloadBannerProps> = ({ isOpen, handleBanner }) => {\n\tconst [branchURL, setBranchURL] = useState(\"\");\n\tconst { t } = useTranslation();\n\n\tconst client = useSelector((store: AppState) => store.client.data);\n\tconst { restaurantId } = useParams<ClientURL>();\n\n\tconst isClientEnabled = client?.habilitado;\n\tconst isDeadbeatClient = client?.atrasado;\n\n\tconst name = client ? client.name : null;\n\tconst client_type = client?.client_type;\n\tconst restaurantQuery = client_type === ClientType.HOTEL && restaurantId ? `${restaurantId}` : \"\";\n\n\tuseEffect(() => {\n\t\tsetBranchURL(\n\t\t\t`https://wine-advisor.app.link/C4HYu19Rq9?clientid=${name}&client_type=${client_type}&restaurantid=${restaurantQuery}`\n\t\t);\n\t}, [name, client_type, restaurantQuery]);\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t{isOpen && client && isClientEnabled && (\n\t\t\t\t<Page animated={false} customHeight={8}>\n\t\t\t\t\t<PageContent className=\"page-content-donwload-banner\">\n\t\t\t\t\t\t<Banner\n\t\t\t\t\t\t\tclassName=\"app-banner\"\n\t\t\t\t\t\t\tinitial=\"initial\"\n\t\t\t\t\t\t\tanimate=\"in\"\n\t\t\t\t\t\t\texit=\"out\"\n\t\t\t\t\t\t\ttransition={{ duration: 0.25 }}\n\t\t\t\t\t\t\tvariants={APP_BANNER_VARIANTS}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<FlexContainer align=\"center\" direction=\"row\" height=\"100%\">\n\t\t\t\t\t\t\t\t<DownloadLink className=\"bold\" href={branchURL} target=\"_blank\">\n\t\t\t\t\t\t\t\t\t{t(\"app-banner.download-app\")}\n\t\t\t\t\t\t\t\t</DownloadLink>\n\t\t\t\t\t\t\t\t{ isDeadbeatClient && (\n\t\t\t\t\t\t\t\t\t<DownloadLink as=\"span\" className=\"bold deadbeat-client-alert\" fontSize=\"0.75rem\" margin=\"1rem 0.25rem\" padding=\"0.7em 1em\">\n\t\t\t\t\t\t\t\t\t\t{t(\"common.deadbeatUser\")}\n\t\t\t\t\t\t\t\t\t</DownloadLink>\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t\t<CloseButton onClick={(): void => handleBanner(false)} />\n\t\t\t\t\t\t</Banner>\n\t\t\t\t\t</PageContent>\n\t\t\t\t</Page>\n\t\t\t)}\n\t\t</AnimatePresence>\n\t);\n};\n\nexport default AppDownloadBanner;\n","import React, { ReactNode } from 'react';\nimport { motion } from 'framer-motion';\nimport styled from 'styled-components';\n\ntype ButtonType = { margin?: string };\nconst Button = styled(motion.button)<ButtonType>`\n\tpadding: 0.5em 1em;\n\tcolor: ${({ theme }) => theme.colors.white};\n\tbackground-color: ${({ theme }) => theme.colors.red};\n\tborder: 0;\n\tborder-radius: ${({ theme }) => theme.rounded};\n\tmargin: ${({ margin = '10px' }) => margin};\n\toutline: 0;\n`;\n\ninterface ButtonProps {\n\tchildren: ReactNode;\n\tmargin?: string;\n\tonClick: () => void;\n\tbold?: boolean;\n}\n\nconst index: React.FC<ButtonProps> = ({ children, margin, bold, onClick }: ButtonProps) => {\n\treturn (\n\t\t<Button whileTap={{ scale: 0.95 }} onClick={onClick} margin={margin} className={bold ? 'bold' : ''}>\n\t\t\t{children}\n\t\t</Button>\n\t);\n};\n\nexport default index;\n","import React from 'react';\nimport styled from \"styled-components\";\nimport { AppThemeColors } from 'Styles/Theme';\n\n\nconst DescriptionContainer = styled.p<IDescription>`\n  color: ${({ theme, color = 'black' }) => theme.colors[color] };\n  font-size: ${({ size = \"0.9rem\" }) => size };\n  margin: ${({ margin = \"0\" }) => margin };\n`;\n\ninterface IDescription {\n  children: any;\n  color?: AppThemeColors;\n  size?: string;\n  margin?: string;\n}\n\nconst Description: React.FC<IDescription> = ({ children, color, size, margin }) => {\n  return (\n    <DescriptionContainer color={color} size={size} margin={margin} >\n      {children}\n    </DescriptionContainer>\n  );\n}\n\nexport default Description;","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst FilterTitle = styled.h1`\n\tpadding-left: 10px;\n\tmargin: 0.5rem 0 0 0;\n\tfont-size: 1.35rem;\n\ttext-transform: capitalize;\n\tfont-family: CenturyGothicBold;\n\twhite-space: nowrap;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n`;\n\nconst index = ({ children }: any) => {\n\treturn <FilterTitle>{children}</FilterTitle>;\n};\n\nexport default index;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst FilterSubTitle = styled.h2`\n\tpadding-left: 10px;\n\tmargin: 0.5em 0 0 0;\n\tfont-size: 1.25rem;\n\tfont-weight: lighter;\n\tfont-family: CenturyGothicBold;\n\tcolor: ${({ theme }) => theme.colors.gray};\n\ttext-transform: capitalize;\n`;\n\nconst index = ({ children }: any) => {\n\treturn <FilterSubTitle>{children}</FilterSubTitle>;\n};\n\nexport default index;\n","import React from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport styled from 'styled-components';\nimport { flex } from '../../../Styles/tools';\n\nexport type OptionType = {\n  value: string;\n  label: string;\n}\n\nexport type DropdownContainerProps = {\n  verticalOffset?: number;\n  leftOffset?: number;\n}\nconst DropdownContainer = styled(motion.div)<DropdownContainerProps>`\n  width: 100%;\n  border-radius: ${({theme}) => theme.radius};\n  background: transparent;\n\n  position: absolute;\n  top: ${ ({verticalOffset = 0}) => `calc( 70%  + ${verticalOffset}%)` };\n  z-index: 1;\n  left: ${({leftOffset = 0}) => `${leftOffset}%`};\n`\n\nconst DropdownDecoration = styled.div`\n  height: 8px;\n  width: 100%;\n  clip-path: polygon(50% 0, 40% 105%, 60% 105%);\n  background: ${({theme}) => theme.colors.light_gray};\n`\n\nconst DropwdownContent = styled.div`\n  box-shadow: ${({theme}) => theme.shadow.overlay};\n  border-radius: ${({theme}) => `0 0 ${theme.radius} ${theme.radius}`};\n`\ntype OptionBoxType = {\n  isSelected?: boolean;\n  position?: string;\n}\nconst OptionBox = styled.div<OptionBoxType>`\n  ${ flex('row', 'flex-start', 'center', 'nowrap') };\n  padding: 6.2px 10px;\n  width: 100%;\n  color: ${ ({theme}) => theme.colors.text_dark};\n  border-bottom: ${ ({position}) => position !== 'last' ? `1px rgba(128, 128, 128, 0.17) solid` : '0'};\n  background-color: ${({ theme, isSelected }) => (isSelected ? theme.colors.light_gray : theme.colors.white)};\n\tborder-radius: ${({ theme, position }) => (position === \"last\" ? `0 0 ${theme.radius} ${theme.radius}` : position === \"first\" ? `${theme.radius} ${theme.radius} 0 0` : `0`)};\n`\n\nconst OptionText = styled.span`\n  color: ${ ({theme}) => theme.colors.text_dark};\n`\n\ninterface IDropdownProps {\n  options: any;\n  isOpen: boolean;\n  selected: string;\n  onChange: (option: OptionType) => void;\n};\n\nconst Dropdown: React.FC<IDropdownProps & DropdownContainerProps> = ({selected, isOpen, options, onChange, ...props}: IDropdownProps) => {\n\n\n  const getPosition = (index: number): string => {\n    if (index === 0) return 'first'\n    if (index === options.length - 1) return 'last';\n    return 'normal'\n  }\n\n  return (\n    <AnimatePresence>\n      { isOpen &&\n        <DropdownContainer\n          className='dropdown-container'\n          {...props}\n          key=\"dropwdownWrapper\"\n          initial={{ opacity: 0 }}\n          animate={{ opacity: 1, transition: {duration: 0.25}}}\n          exit={{ opacity: 0, transition: {duration: 0.25}}}\n        >\n           <DropdownDecoration className='dropdow-decoration'/>\n           <DropwdownContent className='dropdow-content'>\n            {\n              options.map( (option: OptionType, index: number) =>  \n                <OptionBox  \n                  className='option-box'  \n                  onClick={() => onChange(option)} \n                  position={getPosition(index)}\n                  isSelected={selected === option.value}\n                  key={option.value}  \n                >\n                  <OptionText className='option-text'>{option.label}</OptionText>\n                </OptionBox> \n              )\n            }\n            </DropwdownContent> \n        </DropdownContainer>\n      }\n    </AnimatePresence>\n\n  )\n}\n\nexport default Dropdown\n","const PROD_URL_API = \"https://api.wineadvisor.mx:8002/api\";\nconst PROD_URL_INTEGRAL = \"https://api.wineadvisor.mx:7999/api\";\nconst DEV_URL_API = \"https://develop.wineadvisor.mx:8002/api\";\nconst DEV_URL_INTEGRAL = \"https://develop.wineadvisor.mx:81/api\";\n\nconst APP_VERSION = \"1.14.6\";\nconst PRODUCTION = process.env.REACT_APP_NODE_ENVIRONMENT === \"production\";\nconst URL_API = PRODUCTION ? PROD_URL_API : DEV_URL_API;\nconst URL_INTEGRAL = PRODUCTION ? PROD_URL_INTEGRAL : DEV_URL_INTEGRAL;\nconst AUTHORIZATION = \"4e4810334f645fd490ae05401303328b5da01a20\";\nconst PUBLIC_TOKEN = \"53669d6f00a32539945e3a845bd0bf08363a6a6c\";\n\nexport { APP_VERSION, PRODUCTION, URL_API, URL_INTEGRAL, AUTHORIZATION, PUBLIC_TOKEN };\n","import axios from \"axios\";\nimport { AUTHORIZATION, URL_INTEGRAL } from \"env\";\n\nconst SERVICE_ID = \"@ClientService\";\nconst DEBUGGING = false;\n\nconst fetchClientData = async (id: string): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID} => fetchClientData`);\n\tconst CONFIG = { headers: { authorization: `${AUTHORIZATION}` } };\n\n\ttry {\n\t\tDEBUGGING && console.log({ params: { id } });\n\n\t\tconst response = await axios.get(`${URL_INTEGRAL}/clients/restaurants/${id}`, CONFIG);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\t\treturn response.data;\n\t} catch (e) {\n\t\tDEBUGGING && console.error(`${SERVICE_ID}: `, e);\n\t\tDEBUGGING && console.groupEnd();\n\t\treturn e;\n\t}\n};\n\nconst fetchClientDataByName = async (id: string): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID} => fetchClientDataByName`);\n\tconst CONFIG = { headers: { authorization: `${AUTHORIZATION}` } };\n\n\ttry {\n\t\tDEBUGGING && console.log({ params: { id } });\n\n\t\tconst response = await axios.get(`${URL_INTEGRAL}/clients/${id}`, CONFIG);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\t\treturn response.data;\n\t} catch (e) {\n\t\tDEBUGGING && console.error(`${SERVICE_ID}: `, e);\n\t\tDEBUGGING && console.groupEnd();\n\t\treturn e;\n\t}\n};\n\nexport const ClientService = {\n\tfetchClientData,\n\tfetchClientDataByName,\n};\n","import { createSlice, createAsyncThunk } from \"@reduxjs/toolkit\";\nimport { CellarOrder } from \"Types\";\n//import cookie from 'react-cookies';\n\nimport { ClientService } from \"../Services/Client\";\n\nexport interface ClientState {\n\tdata: {\n\t\tatrasado: boolean;\n\t\tclientid: string;\n\t\tclient_type: string;\n\t\temail: string;\n\t\thabilitado: boolean;\n\t\tid: string;\n\t\tlanguages: string[];\n\t\tmain_currency: string;\n\t\tmain_image1_url: string;\n\t\tmain_image2_url: string;\n\t\tmain_image3_url: string;\n\t\tmain_image4_url: string;\n\t\tname: string;\n\t\tpairings: boolean;\n\t\tphone: string;\n\t\twhatsapp: string;\n\t\taddress: string;\n\t\tdescription: string;\n\t\trestaurants: any;\n\t\twine_order: CellarOrder;\n\t\twine_sort: boolean;\n\t\tclient_settings: ClientSettings;\n\t\ttotal_cava: number;\n\t\tabout_us?: string;\n\t} | null;\n\terror: boolean | false;\n\tisLoading: boolean | false;\n}\n\nexport interface ClientSettings {\n\tshow_global_selfcategories: boolean;\n\tdecimals?: boolean;\n}\n\nconst InitialClientState: ClientState = {\n\tdata: null,\n\tisLoading: false,\n\terror: false,\n};\n\n/* GET CLIENT INFO THUNK  */\nexport const getClientData = createAsyncThunk(\"client/getClientData\", async (id: string, { rejectWithValue }) => {\n\ttry {\n\t\tlet response = await ClientService.fetchClientDataByName(id);\n\n\t\t// If above response fails, we dispatch second chance to try with ID as numeric field (mongoDB ID) instead of client_name\n\t\tif (response.info === \"error\") {\n\t\t\tresponse = await ClientService.fetchClientData(id);\n\t\t\t// If process failed (and backend sent us 500 status), we throw an error to dispatch a rejected status on redux\n\t\t\tif (response.response && response.response.status === 500) {\n\t\t\t\tthrow response;\n\t\t\t}\n\t\t\tresponse.data = { ...response.data, id };\n\t\t}\n\t\treturn response.data;\n\t} catch (error) {\n\t\t// Dispatch rejected status on redux with error payload\n\t\treturn rejectWithValue({ message: (error as any).response.msg });\n\t}\n});\n\n/* REDUCER CREATOR */\nconst clientSlice = createSlice({\n\tname: \"client\",\n\tinitialState: InitialClientState,\n\treducers: {},\n\textraReducers: {\n\t\t[getClientData.pending.type]: (state): void => {\n\t\t\tstate.isLoading = true;\n\t\t},\n\t\t[getClientData.fulfilled.type]: (state, action): void => {\n\t\t\tstate.data = action.payload;\n\t\t\tstate.isLoading = false;\n\t\t\tif (!action.payload) {\n\t\t\t\tstate.error = true;\n\t\t\t}\n\t\t},\n\t\t[getClientData.rejected.type]: (state): void => {\n\t\t\tstate.isLoading = false;\n\t\t\tstate.error = true;\n\t\t},\n\t},\n});\n\n/* ACTION TYPES EXPORTS */\n// export const {} = clientSlice.actions;\n\nexport default clientSlice;\n","import { useCallback } from 'react';\nimport { getClientData } from '../Reducers/Client';\nimport { useDispatch, useSelector } from 'react-redux';\nimport { AppState } from 'store';\n\nexport default function useFetchClientData(clientId: string, restaurantId: string) {\n  const dispatch = useDispatch();\n  const isFetchingData = useSelector((state: AppState) => state.client.isLoading);\n\n  const fetchData = useCallback(async () =>  {\n    await dispatch(getClientData(clientId));\n  }, [clientId, dispatch]);\n\n  return { fetchingData: isFetchingData, fetchData };\n}","import axios from \"axios\";\nimport { IMenuFilters } from \"../Reducers/Filters\";\nimport { AUTHORIZATION, URL_INTEGRAL } from \"env\";\n\nconst SERVICE_ID = \"@DishesService\";\nconst DEBUGGING = false;\n\nexport const fetchDishes = async (\n\tclientid: string,\n\tpage: number,\n\tmenuFilter: IMenuFilters,\n\trestaurantId: string\n): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID}`);\n\tDEBUGGING &&\n\t\tconsole.log(`${SERVICE_ID}`, {\n\t\t\tparams: {\n\t\t\t\tclientid,\n\t\t\t\tpage,\n\t\t\t\tmenuFilter,\n\t\t\t\trestaurantId,\n\t\t\t},\n\t\t});\n\tconst CONFIG = { headers: { authorization: `${AUTHORIZATION}` } };\n\n\ttry {\n\t\tlet url = restaurantId ? `${URL_INTEGRAL}/clients/pairings/${clientid}/${restaurantId}?&outOfStock=false` : `${URL_INTEGRAL}/clients/pairings/${clientid}?&outOfStock=false`;\n\t\tconst response = await axios.get(url, CONFIG);\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn response.data;\n\t} catch (error) {\n\t\tDEBUGGING && console.error(`${SERVICE_ID}: `, error);\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn error;\n\t}\n};\n\nexport const DishesService = {\n\tfetchDishes,\n};\n","import { createSlice, createAsyncThunk, PayloadAction } from \"@reduxjs/toolkit\";\nimport { DishesService } from \"../Services/Dishes\";\nimport { Dish } from \"../Types\";\n\nexport interface DishesState {\n\tdata: Dish[] | null;\n\tdishesTotal: number;\n\terror: string | null;\n}\n\nconst InitialDishesState = {\n\tdata: null,\n\tdishesTotal: 0,\n\terror: null,\n} as DishesState;\n\nexport interface GetDishesDataProps {\n\tclientId: string;\n\tpage: number;\n\tfilters: any;\n\trestaurantId: string;\n}\n/* GET CLIENT INFO THUNK  */\nexport const getDishesData = createAsyncThunk<any, GetDishesDataProps, {}>(\"dishes/getDishesData\", async payload => {\n\tconst { clientId, page, filters, restaurantId } = payload;\n\tconst response = await DishesService.fetchDishes(clientId, page, filters, restaurantId);\n\treturn response;\n});\n\n/* REDUCER CREATOR */\nconst DishesSlice = createSlice({\n\tname: \"dishes\",\n\tinitialState: InitialDishesState,\n\treducers: {\n\t\tsetDishes: (_, action: PayloadAction<DishesState>): DishesState => {\n\t\t\treturn { ...action.payload };\n\t\t},\n\t\tresetDishes: (): DishesState => {\n\t\t\treturn { ...InitialDishesState };\n\t\t},\n\t},\n\textraReducers: {\n\t\t[getDishesData.pending.type]: (): DishesState => {\n\t\t\treturn InitialDishesState;\n\t\t},\n\t\t[getDishesData.fulfilled.type]: (state, action): void => {\n\t\t\tstate.data = action.payload;\n\t\t\tstate.error = null;\n\t\t},\n\t\t[getDishesData.rejected.type]: (): DishesState => {\n\t\t\treturn InitialDishesState;\n\t\t},\n\t},\n});\n\n/* ACTION TYPES EXPORTS */\nexport const { setDishes: setDishesActionCreator, resetDishes: resetDishesActionCreator } = DishesSlice.actions;\n\nexport default DishesSlice;\n","import axios from \"axios\";\nimport { PUBLIC_TOKEN, URL_INTEGRAL } from \"env\";\n\nconst SERVICE_ID = \"@RestaurantService\";\nconst DEBUGGING = false;\n\nconst fetchDishGlobalCategories = async (clientName: string): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID} => fetchDishGlobalCategories`);\n\n\ttry {\n\t\tconst response = await axios.get(`${URL_INTEGRAL}/${clientName}/categories/${PUBLIC_TOKEN}`);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn response.data;\n\t} catch (error) {\n\t\tDEBUGGING && console.error({ error });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn [];\n\t}\n};\n\nconst fetchSelfDishCategories = async (clientName: string): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID} => fetchSelfDishCategories`);\n\ttry {\n\t\tconst response = await axios.get(`${URL_INTEGRAL}/${clientName}/selfcategories/${PUBLIC_TOKEN}`);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn response.data;\n\t} catch (error) {\n\t\tDEBUGGING && console.error({ error });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn error;\n\t}\n};\n\nconst fetchDrinkGlobalCategories = async (clientName: string): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID} => fetchDrinkGlobalCategories`);\n\n\ttry {\n\t\tconst response = await axios.get(`${URL_INTEGRAL}/${clientName}/drinkcategories/${PUBLIC_TOKEN}`);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn response.data;\n\t} catch (error) {\n\t\tDEBUGGING && console.error({ error });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn [];\n\t}\n};\n\nconst fetchSelfDrinkCategories = async (clientName: string, restaurantId: string): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID} => fetchSelfDrinkCategories`);\n\ttry {\n\t\tDEBUGGING && console.log({ params: { restaurantId } });\n\t\tconst response = await axios.get(\n\t\t\t`${URL_INTEGRAL}/${clientName}/selfdrinkcategories/${PUBLIC_TOKEN}?restaurant_id=${restaurantId}`\n\t\t);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn response.data;\n\t} catch (e) {\n\t\tDEBUGGING && console.error(`${SERVICE_ID}:fetchSelfDrinkCategories`, e);\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn e;\n\t}\n};\n\nconst fetchCellarData = async (clientId: string): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID} => fetchCellarData`);\n\ttry {\n\t\tconst CONFIG = { headers: { authorization: PUBLIC_TOKEN } };\n\t\tconst response = await axios.get(`${URL_INTEGRAL}/clients/${clientId}/wines-info`, CONFIG);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn response.data;\n\t} catch (error) {\n\t\tDEBUGGING && console.error({ error });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn error;\n\t}\n};\n\nexport const RestaurantService = {\n\tfetchDishGlobalCategories,\n\tfetchSelfDishCategories,\n\tfetchDrinkGlobalCategories,\n\tfetchSelfDrinkCategories,\n\tfetchCellarData,\n};\n","import { createSlice, PayloadAction, createAsyncThunk } from '@reduxjs/toolkit';\nimport _ from 'lodash';\n\nimport { RestaurantService } from 'Services/Restaurant';\nimport { GlobalCategory, DishSelfCategory, DrinkSelfCategory, WineCategoriesType } from 'Types';\n\n\n/* REDUCER CREATOR */\nexport interface IgetDrinkSelfCategories {\n  clientUsername: string;\n  restaurantId: string;\n};\n\nexport const getCellarData = createAsyncThunk( 'categories/getCellarData',\n    async (clienId: string) =>  {\n      const response = await RestaurantService.fetchCellarData(clienId);\n      return response.data;\n    }\n);\n\nexport const getDrinkGlobalCategories = createAsyncThunk<any, {clientUsername: string;}, {}>( 'categories/getDrinkGlobalCategories',\n    async (payload) =>  {\n      const { clientUsername } = payload;\n      const response = await RestaurantService.fetchDrinkGlobalCategories(clientUsername);\n      return response.data;\n    }\n);\n\nexport const getDrinkSelfCategories = createAsyncThunk<any,IgetDrinkSelfCategories, {}>( 'categories/getDrinkSelfCategories',\n  async (payload) =>  {\n    const { clientUsername, restaurantId } = payload;\n\n    const response = await RestaurantService.fetchSelfDrinkCategories(clientUsername, restaurantId);\n    return response.data;\n  }\n);\n\nexport const getDishGlobalCategories = createAsyncThunk<any, {clientUsername: string}, {}>( 'categories/getDishGlobalCategories',\n  async (payload) =>  {\n    const { clientUsername } = payload;\n\n    const response = await RestaurantService.fetchDishGlobalCategories(clientUsername);\n    return response.data;\n  }\n);\n\nexport const getDishSelfCategories = createAsyncThunk<any,{clientUsername: string}, {}>( 'categories/getDishSelfCategories',\n    async (payload) =>  {\n      const { clientUsername } = payload;\n\n      const response = await RestaurantService.fetchSelfDishCategories(clientUsername);\n      return response.data;\n    }\n);\n\n\nexport interface CategoriesState {\n  wine: WineCategoriesType | null;\n  dishGlobalCategory: GlobalCategory[] | null;\n  dish: DishSelfCategory[] | null;\n  drinkGlobalCategory: GlobalCategory[] | null;\n  drink: DrinkSelfCategory[] | null;\n  isLoading: boolean;\n  error: boolean;\n};\nconst InitialCategoriesState: CategoriesState = {\n  wine: null,\n  dishGlobalCategory: null,\n  dish: null,\n  drinkGlobalCategory: null,\n  drink: null,\n  isLoading: false,\n  error: false,\n};\nconst categoriesSlice = createSlice({\n  name: 'categories',\n  initialState: InitialCategoriesState,\n  reducers: {\n    setWineCategories: (state: CategoriesState, action: PayloadAction<any>) => {\n      state.wine = action.payload\n    },\n    setDishCategories: (state: CategoriesState, action: PayloadAction<DishSelfCategory[]>) => {\n      const sortedSelfcategories = action.payload.sort((a, z) => a.superId - z.superId); // Sort all selfCategories by its id\n      // Custom target order for selfCats\n      const selfcategoriesOrder: any = [\n        { name: 'appetizer', id: 1 },\n        { name: 'entree', id: 3 },\n        { name: 'soup', id: 4 },\n        { name: 'first course', id: 6 },\n        { name: 'main course', id: 5 },\n        { name: 'dessert', id: 2 },\n      ];\n      const filteredSelfcategories: any = selfcategoriesOrder.map(({ name, id }: any) =>\n        sortedSelfcategories.filter(\n          ({ superId }) => superId === id\n          /*({ name_EN, superId }) => nameEN.toLowerCase() === name || superId === id*/\n        )\n      ); // search and get selfCats that matches with selfcategoriesOrder\n      state.dish = filteredSelfcategories.flat();\n    },\n    setDrinkCategories: (state: CategoriesState, action: PayloadAction<DrinkSelfCategory[]>) => {\n      state.drink = action.payload\n    },\n    resetCategories: (state) => {\n      return {...InitialCategoriesState}\n    },\n  },\n  extraReducers: {\n    [getDrinkSelfCategories.pending.type]: (state, action) => {\n      state.drink = null;\n      state.isLoading = true;\n      state.error = false;\n    },\n    [getDrinkSelfCategories.fulfilled.type]: (state, action) => {\n      state.drink = action.payload;\n      state.isLoading = false;\n      state.error = false;\n    },\n    [getDrinkSelfCategories.rejected.type]: (state, action) => {\n      state.drink = null;\n      state.isLoading = false;\n      state.error = true;\n    },\n    [getCellarData.pending.type]: (state, action) => {\n      state.wine = null;\n      state.isLoading = true;\n      state.error = false;\n    },\n    [getCellarData.fulfilled.type]: (state, action) => {      \n      state.wine = {\n        ...action.payload,\n        countryEN: action.payload.countryEN.sort(),\n        countryES: action.payload.countryES.sort(),\n        countryPT: action.payload.countryPT.sort(),\n        regionEN: action.payload.regionEN.sort(),\n        regionES: action.payload.regionES.sort(),\n        regionPT: action.payload.regionPT.sort(),\n        subregionEN: action.payload.subregionEN.sort(),\n        subregionES: action.payload.subregionES.sort(),\n        subregionPT: action.payload.subregionPT.sort(),\n        typeEN: action.payload.typeEN.sort(),\n        typeES: action.payload.typeES.sort(),\n        typePT: action.payload.typePT.sort(),\n        varietalEN: action.payload.varietalEN.sort(),\n        varietalES: action.payload.varietalES.sort(),\n        varietalPT: action.payload.varietalPT.sort(),\n      };\n      state.isLoading = false;\n      state.error = false;\n    },\n    [getCellarData.rejected.type]: (state, action) => {\n      state.wine = null;\n      state.isLoading = false;\n      state.error = true;\n    },\n    [getDishGlobalCategories.pending.type]: (state, action) => {\n      state.dishGlobalCategory = null;\n      state.isLoading = true;\n      state.error = false;\n    },\n    [getDishGlobalCategories.fulfilled.type]: (state, action) => {\n      const categoriesOrder: any = { '1': 1,  '2': 6, '3': 2, '4': 3, '5': 5, '6': 4 };\n      state.dishGlobalCategory = _.map(\n          _.orderBy(action.payload, o => categoriesOrder[o.Id.toString()] || -1, 'asc'),\n          (o, index) => ({...o, order: index + 1})\n      );\n      state.isLoading = false;\n      state.error = false;\n    },\n    [getDishGlobalCategories.rejected.type]: (state, action) => {\n      state.dishGlobalCategory = null;\n      state.isLoading = false;\n      state.error = true;\n    },\n    [getDishSelfCategories.pending.type]: (state, action) => {\n      state.dish = null;\n      state.isLoading = true;\n      state.error = false;\n    },\n    [getDishSelfCategories.fulfilled.type]: (state, action) => {\n      state.dish = action.payload;\n      state.isLoading = false;\n      state.error = false;\n    },\n    [getDishSelfCategories.rejected.type]: (state, action) => {\n      state.dish = null;\n      state.isLoading = false;\n      state.error = true;\n    },\n    [getDrinkGlobalCategories.pending.type]: (state, action) => {\n      state.drinkGlobalCategory = null;\n      state.isLoading = true;\n      state.error = false;\n    },\n    [getDrinkGlobalCategories.fulfilled.type]: (state, action) => {\n      const categoriesOrder: any = { '1': 1,  '2': 2, '3': 3, '4': 4, '5': 5, '6': 6 };\n      state.drinkGlobalCategory = _.map(\n          _.orderBy(action.payload, o => categoriesOrder[o.Id.toString()] || -1, 'asc'),\n          (o, index) => ({...o, order: index + 1})\n      );\n      state.isLoading = false;\n      state.error = false;\n    },\n    [getDrinkGlobalCategories.rejected.type]: (state, action) => {\n      state.drinkGlobalCategory = null;\n      state.isLoading = false;\n      state.error = true;\n    },\n  }\n});\n\n/* ACTION TYPES EXPORTS */\nexport const {\n  setWineCategories: setWineCategoriesActionCreator,\n  setDishCategories: setDishCategoriesActionCreator,\n  setDrinkCategories: setDrinkCategoriesActionCreator,\n  resetCategories: resetCategoriesActionCreator\n} = categoriesSlice.actions;\n\nexport default categoriesSlice;\n","const DEFAULT_CURRENCY_DIGITS = 2;\n\nconst formatCurrencyAmount = (\n  amount: number,\n  currency = \"\",\n  digits: number = DEFAULT_CURRENCY_DIGITS\n) =>{\n\n  const CURRENCY_DICT = {\n    MXN: \"es-MX\",\n    USD: \"en-US\",\n    EUR: \"es\",\n    BRL: \"pt-BR\",\n    PEN: \"es-PE\",\n    COP: \"es-CO\",\n  };\n\n  const language = CURRENCY_DICT[currency as keyof typeof CURRENCY_DICT] ?? \"en-US\";\n  let formatterCurrency =  new Intl.NumberFormat(\n    language, \n    {\n      style: 'currency',\n      currency: currency,\n      maximumFractionDigits: digits,\n    }\n    ).format(amount);\n    let showCurrency = currency === \"PEN\" || currency === \"COP\"? \"\": currency;\n\n    let formatter = \"\".concat(formatterCurrency, \" \", showCurrency);\n    return formatter\n\n}\n\nexport default formatCurrencyAmount;\n","import { Dish, Drink } from \"Types\";\n\nexport const filterDrinksByRestaurant = (\n  clientType: string,\n  restaurantId: string,\n  items: Drink[],\n) => {\n  if (clientType !== \"hotel\") return items;\n  if (!items || !items.length)  return [];\n\n  const filteredItemsByRestaurant: Drink[] = items.filter((item: Drink) => !item.restaurants.length || item.restaurants.some((restaurant: any) => restaurant._id === restaurantId));\n  return filteredItemsByRestaurant;\n};\n\nexport const filterDishesByRestaurant = (\n  clientType: string,\n  restaurantId: string,\n  items: Dish[],\n) => {\n  if (clientType !== \"hotel\") return items;\n  if (!items || !items.length) return [];\n\n  const filteredItemsByRestaurant: Dish[] = items.filter((item: Dish) => !item.restaurants.length || item.restaurants.some((restaurant: any) => restaurant._id === restaurantId));\n  return filteredItemsByRestaurant;\n};\n","/*\n** ISO 3166-1-alpha-2 Flags\n** Function that returns the iso code necessary for the flags-icon library\n*/\nexport const getFlagCode = (country: string) => {\n       let flag = countrys.find((value) => value.name === country)\n       return flag;\n  }\n\nconst countrys = [\n    {code: \"ad\", name: \"Andorra\"},\n    {code: \"ae\", name: \"United Arab Emirates\"},\n    {code: \"af\", name: \"Afghanistan\"},\n    {code: \"ag\", name: \"Antigua and Barbuda\"},\n    {code: \"ai\", name: \"Anguilla\"},\n    {code: \"al\", name: \"Albania\"},\n    {code: \"am\", name: \"Armenia\"},\n    {code: \"ao\", name: \"Angola\"},\n    {code: \"aq\", name: \"Antarctica\"},\n    {code: \"ar\", name: \"Argentina\"},\n    {code: \"as\", name: \"American Samoa\"},\n    {code: \"at\", name: \"Austria\"},\n    {code: \"au\", name: \"Australia\"},\n    {code: \"aw\", name: \"Aruba\"},\n    {code: \"ax\", name: \"Åland Islands\"},\n    {code: \"az\", name: \"Azerbaijan\"},\n    {code: \"ba\", name: \"Bosnia and Herzegovina\"},\n    {code: \"bb\", name: \"Barbados\"},\n    {code: \"bd\", name: \"Bangladesh\"},\n    {code: \"be\", name: \"Belgium\"},\n    {code: \"bf\", name: \"Burkina Faso\"},\n    {code: \"bg\", name: \"Bulgaria\"},\n    {code: \"bh\", name: \"Bahrain\"},\n    {code: \"bi\", name: \"Burundi\"},\n    {code: \"bj\", name: \"Benin\"},\n    {code: \"bl\", name: \"Saint Barthélemy\"},\n    {code: \"bm\", name: \"Bermuda\"},\n    {code: \"bn\", name: \"Brunei Darussalam\"},\n    {code: \"bo\", name: \"Bolivia\"},\n    {code: \"bq\", name: \"Bonaire, Sint Eustatius and Saba\"},\n    {code: \"br\", name: \"Brazil\"},\n    {code: \"bs\", name: \"Bahamas\"},\n    {code: \"bt\", name: \"Bhutan\"},\n    {code: \"bv\", name: \"Bouvet Island\"},\n    {code: \"bw\", name: \"Botswana\"},\n    {code: \"by\", name: \"Belarus\"},\n    {code: \"bz\", name: \"Belize\"},\n    {code: \"ca\", name: \"Canada\"},\n    {code: \"cc\", name: \"Cocos (Keeling) Islands\"},\n    {code: \"cd\", name: \"Congo, Democratic Republic of the\"},\n    {code: \"cf\", name: \"Central African Republic\"},\n    {code: \"cg\", name: \"Congo\"},\n    {code: \"ch\", name: \"Switzerland\"},\n    {code: \"ci\", name: \"Côte d'Ivoire\"},\n    {code: \"ck\", name: \"Cook Islands\"},\n    {code: \"cl\", name: \"Chile\"},\n    {code: \"cm\", name: \"Cameroon\"},\n    {code: \"cn\", name: \"China\"},\n    {code: \"co\", name: \"Colombia\"},\n    {code: \"cr\", name: \"Costa Rica\"},\n    {code: \"cu\", name: \"Cuba\"},\n    {code: \"cv\", name: \"Cabo Verde\"},\n    {code: \"cw\", name: \"Curaçao\"},\n    {code: \"cx\", name: \"Christmas Island\"},\n    {code: \"cy\", name: \"Cyprus\"},\n    {code: \"cz\", name: \"Czechia\"},\n    {code: \"de\", name: \"Germany\"},\n    {code: \"dj\", name: \"Djibouti\"},\n    {code: \"dk\", name: \"Denmark\"},\n    {code: \"dm\", name: \"Dominica\"},\n    {code: \"do\", name: \"Dominican Republic\"},\n    {code: \"dz\", name: \"Algeria\"},\n    {code: \"ec\", name: \"Ecuador\"},\n    {code: \"ee\", name: \"Estonia\"},\n    {code: \"eg\", name: \"Egypt\"},\n    {code: \"eh\", name: \"Western Sahara\"},\n    {code: \"er\", name: \"Eritrea\"},\n    {code: \"es\", name: \"Spain\"},\n    {code: \"et\", name: \"Ethiopia\"},\n    {code: \"fi\", name: \"Finland\"},\n    {code: \"fj\", name: \"Fiji\"},\n    {code: \"fk\", name: \"Falkland Islands (Malvinas)\"},\n    {code: \"fm\", name: \"Micronesia (Federated States of)\"},\n    {code: \"fo\", name: \"Faroe Islands\"},\n    {code: \"fr\", name: \"France\"},\n    {code: \"ga\", name: \"Gabon\"},\n    {code: \"gb\", name: \"United Kingdom\"},\n    {code: \"gd\", name: \"Grenada\"},\n    {code: \"ge\", name: \"Georgia\"},\n    {code: \"gf\", name: \"French Guiana\"},\n    {code: \"gg\", name: \"Guernsey\"},\n    {code: \"gh\", name: \"Ghana\"},\n    {code: \"gi\", name: \"Gibraltar\"},\n    {code: \"gl\", name: \"Greenland\"},\n    {code: \"gm\", name: \"Gambia\"},\n    {code: \"gn\", name: \"Guinea\"},\n    {code: \"gp\", name: \"Guadeloupe\"},\n    {code: \"gq\", name: \"Equatorial Guinea\"},\n    {code: \"gr\", name: \"Greece\"},\n    {code: \"gs\", name: \"South Georgia and the South Sandwich Islands\"},\n    {code: \"gt\", name: \"Guatemala\"},\n    {code: \"gu\", name: \"Guam\"},\n    {code: \"gw\", name: \"Guinea-Bissau\"},\n    {code: \"gy\", name: \"Guyana\"},\n    {code: \"hk\", name: \"Hong Kong\"},\n    {code: \"hm\", name: \"Heard Island and McDonald Islands\"},\n    {code: \"hn\", name: \"Honduras\"},\n    {code: \"hr\", name: \"Croatia\"},\n    {code: \"ht\", name: \"Haiti\"},\n    {code: \"hu\", name: \"Hungary\"},\n    {code: \"id\", name: \"Indonesia\"},\n    {code: \"ie\", name: \"Ireland\"},\n    {code: \"il\", name: \"Israel\"},\n    {code: \"im\", name: \"Isle of Man\"},\n    {code: \"in\", name: \"India\"},\n    {code: \"io\", name: \"British Indian Ocean Territory\"},\n    {code: \"iq\", name: \"Iraq\"},\n    {code: \"ir\", name: \"Iran (Islamic Republic of)\"},\n    {code: \"is\", name: \"Iceland\"},\n    {code: \"it\", name: \"Italy\"},\n    {code: \"je\", name: \"Jersey\"},\n    {code: \"jm\", name: \"Jamaica\"},\n    {code: \"jo\", name: \"Jordan\"},\n    {code: \"jp\", name: \"Japan\"},\n    {code: \"ke\", name: \"Kenya\"},\n    {code: \"kg\", name: \"Kyrgyzstan\"},\n    {code: \"kh\", name: \"Cambodia\"},\n    {code: \"ki\", name: \"Kiribati\"},\n    {code: \"km\", name: \"Comoros\"},\n    {code: \"kn\", name: \"Saint Kitts and Nevis\"},\n    {code: \"kp\", name: \"Korea (Democratic People's Republic of)\"},\n    {code: \"kr\", name: \"Korea, Republic of\"},\n    {code: \"kw\", name: \"Kuwait\"},\n    {code: \"ky\", name: \"Cayman Islands\"},\n    {code: \"kz\", name: \"Kazakhstan\"},\n    {code: \"la\", name: \"Lao People's Democratic Republic\"},\n    {code: \"lb\", name: \"Lebanon\"},\n    {code: \"lc\", name: \"Saint Lucia\"},\n    {code: \"li\", name: \"Liechtenstein\"},\n    {code: \"lk\", name: \"Sri Lanka\"},\n    {code: \"lr\", name: \"Liberia\"},\n    {code: \"ls\", name: \"Lesotho\"},\n    {code: \"lt\", name: \"Lithuania\"},\n    {code: \"lu\", name: \"Luxembourg\"},\n    {code: \"lv\", name: \"Latvia\"},\n    {code: \"ly\", name: \"Libya\"},\n    {code: \"ma\", name: \"Morocco\"},\n    {code: \"mc\", name: \"Monaco\"},\n    {code: \"md\", name: \"Moldova, Republic of\"},\n    {code: \"me\", name: \"Montenegro\"},\n    {code: \"mf\", name: \"Saint Martin (French part)\"},\n    {code: \"mg\", name: \"Madagascar\"},\n    {code: \"mh\", name: \"Marshall Islands\"},\n    {code: \"mk\", name: \"North Macedonia\"},\n    {code: \"ml\", name: \"Mali\"},\n    {code: \"mm\", name: \"Myanmar\"},\n    {code: \"mn\", name: \"Mongolia\"},\n    {code: \"mo\", name: \"Macao\"},\n    {code: \"mp\", name: \"Northern Mariana Islands\"},\n    {code: \"mq\", name: \"Martinique\"},\n    {code: \"mr\", name: \"Mauritania\"},\n    {code: \"ms\", name: \"Montserrat\"},\n    {code: \"mt\", name: \"Malta\"},\n    {code: \"mu\", name: \"Mauritius\"},\n    {code: \"mv\", name: \"Maldives\"},\n    {code: \"mw\", name: \"Malawi\"},\n    {code: \"mx\", name: \"Mexico\"},\n    {code: \"my\", name: \"Malaysia\"},\n    {code: \"mz\", name: \"Mozambique\"},\n    {code: \"na\", name: \"Namibia\"},\n    {code: \"nc\", name: \"New Caledonia\"},\n    {code: \"ne\", name: \"Niger\"},\n    {code: \"nf\", name: \"Norfolk Island\"},\n    {code: \"ng\", name: \"Nigeria\"},\n    {code: \"ni\", name: \"Nicaragua\"},\n    {code: \"nl\", name: \"Netherlands, Kingdom of the\"},\n    {code: \"no\", name: \"Norway\"},\n    {code: \"np\", name: \"Nepal\"},\n    {code: \"nr\", name: \"Nauru\"},\n    {code: \"nu\", name: \"Niue\"},\n    {code: \"nz\", name: \"New Zealand\"},\n    {code: \"om\", name: \"Oman\"},\n    {code: \"pa\", name: \"Panama\"},\n    {code: \"pe\", name: \"Peru\"},\n    {code: \"pf\", name: \"French Polynesia\"},\n    {code: \"pg\", name: \"Papua New Guinea\"},\n    {code: \"ph\", name: \"Philippines\"},\n    {code: \"pk\", name: \"Pakistan\"},\n    {code: \"pl\", name: \"Poland\"},\n    {code: \"pm\", name: \"Saint Pierre and Miquelon\"},\n    {code: \"pn\", name: \"Pitcairn\"},\n    {code: \"pr\", name: \"Puerto Rico\"},\n    {code: \"ps\", name: \"Palestine, State of\"},\n    {code: \"pt\", name: \"Portugal\"},\n    {code: \"pw\", name: \"Palau\"},\n    {code: \"py\", name: \"Paraguay\"},\n    {code: \"qa\", name: \"Qatar\"},\n    {code: \"re\", name: \"Réunion\"},\n    {code: \"ro\", name: \"Romania\"},\n    {code: \"rs\", name: \"Serbia\"},\n    {code: \"ru\", name: \"Russian Federation\"},\n    {code: \"rw\", name: \"Rwanda\"},\n    {code: \"sa\", name: \"Saudi Arabia\"},\n    {code: \"sb\", name: \"Solomon Islands\"},\n    {code: \"sc\", name: \"Seychelles\"},\n    {code: \"sd\", name: \"Sudan\"},\n    {code: \"se\", name: \"Sweden\"},\n    {code: \"sg\", name: \"Singapore\"},\n    {code: \"sh\", name: \"Saint Helena, Ascension and Tristan da Cunha\"},\n    {code: \"si\", name: \"Slovenia\"},\n    {code: \"sj\", name: \"Svalbard and Jan Mayen\"},\n    {code: \"sk\", name: \"Slovakia\"},\n    {code: \"sl\", name: \"Sierra Leone\"},\n    {code: \"sm\", name: \"San Marino\"},\n    {code: \"sn\", name: \"Senegal\"},\n    {code: \"so\", name: \"Somalia\"},\n    {code: \"sr\", name: \"Suriname\"},\n    {code: \"ss\", name: \"South Sudan\"},\n    {code: \"st\", name: \"Sao Tome and Principe\"},\n    {code: \"sv\", name: \"El Salvador\"},\n    {code: \"sx\", name: \"Sint Maarten (Dutch part)\"},\n    {code: \"sy\", name: \"Syrian Arab Republic\"},\n    {code: \"sz\", name: \"Eswatini\"},\n    {code: \"tc\", name: \"Turks and Caicos Islands\"},\n    {code: \"td\", name: \"Chad\"},\n    {code: \"tf\", name: \"French Southern Territories\"},\n    {code: \"tg\", name: \"Togo\"},\n    {code: \"th\", name: \"Thailand\"},\n    {code: \"tj\", name: \"Tajikistan\"},\n    {code: \"tk\", name: \"Tokelau\"},\n    {code: \"tl\", name: \"Timor-Leste\"},\n    {code: \"tm\", name: \"Turkmenistan\"},\n    {code: \"tn\", name: \"Tunisia\"},\n    {code: \"to\", name: \"Tonga\"},\n    {code: \"tr\", name: \"Türkiye\"},\n    {code: \"tt\", name: \"Trinidad and Tobago\"},\n    {code: \"tv\", name: \"Tuvalu\"},\n    {code: \"tw\", name: \"Taiwan, Province of China\"},\n    {code: \"tz\", name: \"Tanzania, United Republic of\"},\n    {code: \"ua\", name: \"Ukraine\"},\n    {code: \"ug\", name: \"Uganda\"},\n    {code: \"um\", name: \"United States Minor Outlying Islands\"},\n    {code: \"us\", name: \"United States\"},\n    {code: \"uy\", name: \"Uruguay\"},\n    {code: \"uz\", name: \"Uzbekistan\"},\n    {code: \"va\", name: \"Holy See\"},\n    {code: \"vc\", name: \"Saint Vincent and the Grenadines\"},\n    {code: \"ve\", name: \"Venezuela\"},\n    {code: \"vg\", name: \"Virgin Islands (British)\"},\n    {code: \"vi\", name: \"Virgin Islands (U.S.)\"},\n    {code: \"vn\", name: \"Viet Nam\"},\n    {code: \"vu\", name: \"Vanuatu\"},\n    {code: \"wf\", name: \"Wallis and Futuna\"},\n    {code: \"ws\", name: \"Samoa\"},\n    {code: \"ye\", name: \"Yemen\"},\n    {code: \"yt\", name: \"Mayotte\"},\n    {code: \"za\", name: \"South Africa\"},\n    {code: \"zm\", name: \"Zambia\"},\n    {code: \"zw\", name: \"Zimbabwe\"},\n];","import { ICellarFilters } from \"Reducers/Filters\";\nimport formatCurrencyAmount from \"./formatCurrencyAmount\";\nimport { filterDrinksByRestaurant, filterDishesByRestaurant } from \"./hotelFilter\";\nimport { getFlagCode } from \"./flags\"\n\nconst isUsingCellarFilters = (filters: ICellarFilters): boolean => {\n\tconst isUsingFilters =\n\t\tfilters.type ||\n\t\tfilters.varietal ||\n\t\tfilters.country ||\n\t\tfilters.region ||\n\t\tfilters.subregion ||\n\t\tfilters.selling_by ||\n\t\tfilters.selection;\n\treturn Boolean(isUsingFilters);\n};\n\nexport { formatCurrencyAmount, filterDrinksByRestaurant, filterDishesByRestaurant, isUsingCellarFilters, getFlagCode };\n","/* eslint-disable @typescript-eslint/camelcase */\nimport { fetchDishes } from \"../Services/Dishes\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { AppState } from \"../store\";\nimport { setDishesActionCreator } from \"../Reducers/Dishes\";\nimport { getDishGlobalCategories, getDishSelfCategories } from \"../Reducers/Categories\";\nimport { filterDishesByRestaurant } from \"Utils\";\n\nexport default function useFetchDishes(clientid: string, page: number, menuFilters: any, restaurantId: string, skipRequest = false) {\n\tconst dishes = useSelector((store: AppState) => store.dishes);\n\tconst clientUsername = useSelector((store: AppState) => store.client.data?.clientid);\n\tconst clientType = useSelector((store: AppState) => store.client.data?.client_type);\n\tconst dispatch = useDispatch();\n\n\tconst [fetchingDishGlobalCategories, setFetchingDishGlobalCategories] = useState(false);\n\tconst [fetchingDishCategoriesData, setFetchingDishCategoriesData] = useState(false);\n\tconst [dishError, setError] = useState(false);\n\tconst [hasMoreDishes, setHasMoreDishes] = useState(false);\n\tconst [fetchingDishes, setFetchingDishes] = useState(false);\n\n\tuseEffect(() => {\n\t\tconst getDishes = async () => {\n\t\t\tif (skipRequest || !clientid) return;\n\n\t\t\ttry {\n\t\t\t\tsetFetchingDishes(true);\n\t\t\t\tsetError(false);\n\n\t\t\t\tconst { pairings, results_number } = await fetchDishes(clientid, page, menuFilters, restaurantId);\n\t\t\t\tconst filteredDishesByRestaurant = filterDishesByRestaurant(clientType ?? \"\", restaurantId, pairings ?? []);\n\n\t\t\t\tconst parsedList = pairings;\n\t\t\t\tconst dishesInStore = dishes.data ? dishes.data : [];\n\n\t\t\t\tdispatch(\n\t\t\t\t\tsetDishesActionCreator({\n\t\t\t\t\t\tdata: [...dishesInStore, ...parsedList],\n\t\t\t\t\t\tdishesTotal: filteredDishesByRestaurant.length,\n\t\t\t\t\t\terror: null,\n\t\t\t\t\t})\n\t\t\t\t);\n\t\t\t\tsetFetchingDishes(false);\n\t\t\t\tsetHasMoreDishes(dishes.data ? dishes.data.length < results_number : true);\n\t\t\t} catch (e) {\n\t\t\t\tsetError(true);\n\t\t\t\tsetFetchingDishes(false);\n\t\t\t\tconsole.log(e);\n\t\t\t}\n\t\t};\n\t\t!dishes.data && getDishes();\n\t}, [page, clientid, menuFilters, dishes.data, restaurantId, dispatch, clientType, skipRequest]);\n\n\tconst fetchDishGlobalCategories = useCallback(async () => {\n\t\tif (!clientUsername) return;\n\t\tawait dispatch(getDishGlobalCategories({ clientUsername }));\n\t\tsetFetchingDishGlobalCategories(false);\n\t}, [dispatch, clientUsername]);\n\n\tconst fetchSelfDishCategories = useCallback(async () => {\n\t\tif (!clientUsername) return;\n\t\tawait dispatch(getDishSelfCategories({ clientUsername }));\n\t\tsetFetchingDishCategoriesData(false);\n\t}, [dispatch, clientUsername]);\n\n\treturn {\n\t\tdishError,\n\t\tdishes,\n\t\tfetchingDishes,\n\t\thasMoreDishes,\n\t\tfetchDishGlobalCategories,\n\t\tfetchingDishGlobalCategories,\n\t\tfetchSelfDishCategories,\n\t\tfetchingDishCategoriesData,\n\t};\n}\n","import axios from \"axios\";\nimport { PUBLIC_TOKEN, URL_INTEGRAL } from \"env\";\n\nconst SERVICE_ID = \"@DrinksService\";\nconst DEBUGGING = false;\n\nexport const fetchDrinks = async (\n\tclientid: string,\n\tpage: number,\n\tmenuFilter: any,\n\trestaurantId: string\n): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID}`);\n\ttry {\n\t\tDEBUGGING && console.log({ params: { clientid, page, menuFilter, restaurantId } });\n\n\t\tconst response = await axios.get(`${URL_INTEGRAL}/${clientid}/drinks/${PUBLIC_TOKEN}?outOfStock=false`);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn response.data;\n\t} catch (error) {\n\t\tDEBUGGING && console.error(`${SERVICE_ID}: `, error);\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn error;\n\t}\n};\n\nexport const DrinksService = {\n\tfetchDrinks,\n};\n","import { createSlice, createAsyncThunk, PayloadAction } from '@reduxjs/toolkit';\n//import cookie from 'react-cookies';\n\nimport { DrinksService } from '../Services/Drinks';\nimport { Drink } from '../Types';\n\n\nexport interface DrinksState {\n  data: Drink[] | null;\n  error: string | null;\n};\n\nconst InitialDrinksState = {\n  data: null,\n  error: null\n} as DrinksState;\n\nexport interface IgetDrinksData {\n  clientId: string;\n  page: number;\n  filters: any;\n  restaurantId: string;\n}\n/* GET CLIENT INFO THUNK  */\nexport const getDrinksData = createAsyncThunk<any,IgetDrinksData,{}>( 'drinks/getDrinksData',\n  async (payload) =>  {\n    const { clientId, page, filters, restaurantId } = payload;\n    const response = await DrinksService.fetchDrinks(clientId, page, filters, restaurantId);\n    return response;\n  }\n);\n\n/* REDUCER CREATOR */\nconst drinksSlice = createSlice({\n  name: 'drinks',\n  initialState: InitialDrinksState,\n  reducers: {\n    setDrinks: (state, action: PayloadAction<DrinksState>) => {\n      return {...action.payload};\n    },\n    resetDrinks: (state) => {\n      return {...InitialDrinksState}\n    },\n  },\n  extraReducers: {\n    [getDrinksData.pending.type]: (state, action) => {\n      return InitialDrinksState;\n    },\n    [getDrinksData.fulfilled.type]: (state, action) => {\n      state.data = action.payload;\n      state.error = null;\n    },\n    [getDrinksData.rejected.type]: (state, action) => {\n      return InitialDrinksState;\n    },\n  }\n});\n\n/* ACTION TYPES EXPORTS */\nexport const {\n  setDrinks: setDrinksActionCreator,\n  resetDrinks: resetDrinksActionCreator,\n} = drinksSlice.actions;\n\nexport default drinksSlice;","import { fetchDrinks } from \"Services/Drinks\";\nimport { useCallback, useEffect, useState } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { AppState } from \"store\";\nimport { setDrinksActionCreator } from 'Reducers/Drinks';\nimport { getDrinkGlobalCategories, getDrinkSelfCategories } from 'Reducers/Categories';\n\nexport default function useFetchDrinks(clientid: string | null, page: number, drinksFilters: any, restaurantId: string) {\n  const drinks = useSelector( (store: AppState) => store.drinks);\n  const clientUsername = useSelector( (store: AppState) => store.client.data?.clientid);\n  const dispatch = useDispatch();\n\n  const [ fetchingDrinkGlobalCategories, setFetchingDrinkGlobalCategories ] = useState(false);\n  const [ fetchingDrinksCategoriesData, setFetchingDrinksCategoriesData ] = useState(true);\n  const [ drinksError, setError ] = useState(false);\n  const [ hasMoreDrinks, setHasMoreDrinks] = useState(false);\n  const [ fetchingDrinks, setFetchingDrinks] = useState(false);\n\n  useEffect( () => {\n    const getDrinks = async() => {\n      if (!clientid) return;\n\n      try {\n        setFetchingDrinks(true);\n        setError(false);\n\n        const response = await fetchDrinks(clientid, page, drinksFilters, restaurantId);\n\n        const parsedList = response.data;\n        const drinksInStore = drinks.data ? drinks.data : [];\n\n        dispatch(setDrinksActionCreator({data: [...drinksInStore, ...parsedList], error: null}));\n        setFetchingDrinks(false);\n        setHasMoreDrinks( drinks.data ? drinks.data.length < response.results_number : true );\n      } catch(e) {\n        setError(true);\n        setFetchingDrinks(false);\n        console.log(e);\n      }\n    }\n    !drinks.data && getDrinks();\n\n  }, [page, clientid, drinksFilters, drinks.data, restaurantId, dispatch]);\n\n  const fetchDrinkGlobalCategories = useCallback(async () =>  {\n    if (!clientUsername) return;\n    await dispatch(getDrinkGlobalCategories({clientUsername}));\n    setFetchingDrinkGlobalCategories(false);\n  }, [dispatch, clientUsername]);\n\n  const fetchSelfDrinkCategories = useCallback(async () =>  {\n    if (!clientUsername) return;\n    await dispatch(getDrinkSelfCategories({clientUsername, restaurantId}));\n    setFetchingDrinksCategoriesData(false);\n  }, [dispatch, clientUsername, restaurantId]);\n\n  return {\n    drinksError,\n    drinks,\n    fetchingDrinks,\n    hasMoreDrinks,\n    fetchDrinkGlobalCategories,\n    fetchingDrinkGlobalCategories,\n    fetchingDrinksCategoriesData,\n    fetchSelfDrinkCategories\n  };\n}\n","import axios from \"axios\";\nimport { CellarOrder } from \"Types\";\nimport { AUTHORIZATION, URL_INTEGRAL } from \"env\";\nimport { isUsingCellarFilters } from \"Utils\";\n\nconst SERVICE_ID = \"@WinesService\";\nconst DEBUGGING = false;\nconst MAX_LIMIT = 5000; // Arbitrarily defined to fetch all wines to build the filters\n\n// Mapping client source order field to used in API endpoint\nconst getOrderField = (field: CellarOrder, lang: string): string => {\n\tif (field === \"name\") return `name${lang}`;\n\tif (field === \"price\") return `sellPrice`;\n\treturn field;\n};\n\n// Mapping client source type sort to standard for RESTful API\nconst getTypeSort = (sort: boolean): string => {\n\treturn sort ? \"\" : \"-\";\n};\n\nexport const fetchWines = async (\n\tclient: string,\n\tpage: number,\n\tstockFilter: any,\n\tlang: string,\n\tlimit = 20,\n\twinesTotal: any = MAX_LIMIT\n): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID}`);\n\tDEBUGGING &&\n\t\tconsole.log(`${SERVICE_ID}`, {\n\t\t\tparams: {\n\t\t\t\tclient,\n\t\t\t\tpage,\n\t\t\t\tstockFilter,\n\t\t\t},\n\t\t});\n\tconst isUsingFilters = isUsingCellarFilters(stockFilter);\n\n\tif (isUsingFilters) {\n\t\tlimit = winesTotal;\n\t}\n\n\ttry {\n\t\tconst config = { headers: { authorization: `${AUTHORIZATION}` } };\n\n\t\tconst typeQuery = stockFilter.type !== \"\" ? `&type${lang}=${stockFilter.type}` : \"\";\n\t\tconst varietyquery = stockFilter.varietal !== \"\" ? `&varietal${lang}=${stockFilter.varietal}` : \"\";\n\t\tconst regionQuery = stockFilter.region !== \"\" ? `&region${\"\"}=${stockFilter.region}` : \"\";\n\t\tconst subregionQuery = stockFilter.subregion !== \"\" ? `&subregion${\"\"}=${stockFilter.subregion}` : \"\";\n\t\tconst countryQuery = stockFilter.country !== \"\" ? `&country${lang}=${stockFilter.country}` : \"\";\n\t\tconst byGlassQuery = stockFilter.selling_by !== \"\" ? `&byGlass=true` : \"\";\n\t\tconst sortQuery = `${getTypeSort(stockFilter.wine_sort)}${getOrderField(stockFilter.wine_order, lang)}`;\n\n\t\tconst filter = \"&outOfStock=false&archived=false&available=true\";\n\t\tconst sort = `&sort=${sortQuery}`;\n\t\tconst query = `page=${page}&limit=${limit}${typeQuery}${varietyquery}${regionQuery}${subregionQuery}${countryQuery}${filter}${sort}${byGlassQuery}`;\n\n\t\tconst response = await axios.get(`${URL_INTEGRAL}/v2/clients/wines/${client}?${query}`, config);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn response.data;\n\t} catch (error) {\n\t\tDEBUGGING && console.error(`${SERVICE_ID}: `, error);\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn error;\n\t}\n};\n\nexport const WinesService = {\n\tfetchWines,\n};\n","import { createSlice, createAsyncThunk, PayloadAction, Dispatch } from \"@reduxjs/toolkit\";\n//import cookie from 'react-cookies';\n\nimport { WinesService } from \"../Services/Wine\";\nimport { Wine } from \"../Types\";\nimport { AppState } from \"store\";\nimport { isUsingCellarFilters } from \"Utils\";\nimport { rebuildDynamicFilters } from \"Hooks/useFetchWines\";\n\nexport interface WinesState {\n\tdata: Wine[] | null;\n\tpage: number;\n\terror: string | null;\n\twinesTotal: number;\n\tcellarLength?: number | null;\n\tstatus: \"Unset\" | \"Loading\" | \"Ok\" | \"Failed\";\n}\n\nconst InitialWinesState = {\n\tdata: null,\n\tpage: 1,\n\terror: null,\n\twinesTotal: 0,\n\tcellarLength: null,\n\tstatus: \"Unset\",\n} as WinesState;\n\n/* GET CLIENT INFO THUNK  */\nexport interface IgetWinesData {\n\tclientId: string;\n\tpage: number;\n\tfilters: any;\n\tlanguage: string;\n\twinesFilter?: any;\n}\nexport const getRestaurantCellar = createAsyncThunk<any, IgetWinesData, {state: AppState, dispatch: Dispatch}>(\"wines/getWinesData\",\n\t\tasync (payload, {getState, dispatch}) => {\n\t\tconst { clientId, page, filters, language, winesFilter } = payload;\n\t\tconst selections = getState().selections;\n\t\tconst { wine } = getState().categories;\n\t\tconst client = getState().client;\n\t\tconst isUsingFilters = isUsingCellarFilters(winesFilter);\n\n\t\tconst response = await WinesService.fetchWines(clientId, page, filters, language, 5000);\n\t\tlet wines = response.wines;\n\t\tlet response_number = wines.length;\n\t\t// * Processing wines by selection (if this filter is used)\n\t\tlet parsedList = wines;\n\t\tif (winesFilter.selection) {\n\t\t\tconst currentSelection = selections.data.find(({ label }: any) => label === winesFilter.selection);\n\t\t\tparsedList = parsedList.filter(({ vino_local_id }: any) => currentSelection.wines.includes(vino_local_id));\n\t\t}\n\n\t\t// * Building new filter options\n\t\tif (isUsingFilters) {\n\t\t\trebuildDynamicFilters(parsedList, wine, dispatch);\n\t\t}\n\n\t\t// * Final processing new state on Redux Store\n\t\treturn {\n\t\t\twines: parsedList,\n\t\t\tpage,\n\t\t\terror: null,\n\t\t\twinesTotal: isUsingFilters ? parsedList.length : response_number,\n\t\t\tcellarLength: client.data?.total_cava || response_number,\n\t\t};\n});\n\nexport const getWineDetail = createAsyncThunk<any, IgetWinesData, {}>(\"wines/getWineDetail\", async payload => {\n\tconst { clientId, page, filters, language } = payload;\n\tconst response = await WinesService.fetchWines(clientId, page, filters, language);\n\treturn response.wines;\n});\n\n/* REDUCER CREATOR */\nconst winesSlice = createSlice({\n\tname: \"wines\",\n\tinitialState: InitialWinesState,\n\treducers: {\n\t\tsetWines: (state: WinesState, action: PayloadAction<any>): void => {\n\t\t\tstate.data = action.payload.data;\n\t\t\tstate.winesTotal = action.payload.winesTotal ?? 0;\n\t\t\tstate.error = action.payload.error;\n\t\t\tstate.cellarLength = action.payload.cellarLength || action.payload.winesTotal;\n\t\t},\n\t\tresetWines: (): WinesState => {\n\t\t\treturn { ...InitialWinesState };\n\t\t},\n\t\tincreasePage: (state: WinesState): void => {\n\t\t\tstate.page = state.page + 1;\n\t\t},\n\t\tresetPage: (state: WinesState): void => {\n\t\t\tstate.page = 1;\n\t\t},\n\t},\n\textraReducers: {\n\t\t[getRestaurantCellar.pending.type]: (): WinesState => {\n\t\t\treturn {\n\t\t\t\t...InitialWinesState,\n\t\t\t\tstatus: \"Loading\",\n\t\t\t};\n\t\t},\n\t\t[getRestaurantCellar.fulfilled.type]: (state: WinesState, action: any): void => {\n\t\t\tstate.data = action.payload.wines;\n\t\t\tstate.winesTotal = action.payload.winesTotal ?? 0;\n\t\t\tstate.cellarLength = action.payload.cellarLength || action.payload.winesTotal;\n\t\t\tstate.error = null;\n\t\t\tstate.status = \"Ok\";\n\t\t},\n\t\t[getRestaurantCellar.rejected.type]: (): WinesState => {\n\t\t\treturn {\n\t\t\t\t...InitialWinesState,\n\t\t\t\tstatus: \"Failed\",\n\t\t\t};\n\t\t},\n\t},\n});\n\n/* ACTION TYPES EXPORTS */\nexport const {\n\tsetWines: setWinesActionCreator,\n\tresetWines: resetWinesActionCreator,\n\tincreasePage: increasePageActionCreator,\n\tresetPage: resetPageActionCreator,\n} = winesSlice.actions;\n\nexport default winesSlice;\n","/* eslint-disable @typescript-eslint/camelcase */\nimport { Dispatch, useEffect } from \"react\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { AppState } from \"../store\";\nimport { getRestaurantCellar } from \"../Reducers/Wines\";\nimport { useTranslation } from \"react-i18next\";\nimport { Wine, WineCategoriesType } from \"../Types\";\nimport { setWineCategoriesActionCreator } from \"../Reducers/Categories\";\n\nexport const rebuildDynamicFilters = (labels: Wine[], wine: WineCategoriesType | null, dispatch: Dispatch<any>): void => {\n\tconst categoriesWine: WineCategoriesType = {\n\t\tcountryEN: [],\n\t\tcountryES: [],\n\t\tcountryPT: [],\n\t\tregionEN: [],\n\t\tregionES: [],\n\t\tregionPT: [],\n\t\tsubregionEN: [],\n\t\tsubregionES: [],\n\t\tsubregionPT: [],\n\t\ttypeEN: [],\n\t\ttypeES: [],\n\t\ttypePT: [],\n\t\tvarietalEN: [],\n\t\tvarietalES: [],\n\t\tvarietalPT: [],\n\t};\n\n\tconst addIfNotExists = (element: string, array: string[]): void => {\n\t\t!array.includes(element) && array.push(element);\n\t};\n\n\tlabels.forEach((wine: Wine) => {\n\t\taddIfNotExists(wine.country, categoriesWine.countryES);\n\t\taddIfNotExists(wine.countryEN, categoriesWine.countryEN);\n\t\taddIfNotExists(wine.countryPT, categoriesWine.countryPT);\n\t\taddIfNotExists(wine.region, categoriesWine.regionES);\n\t\taddIfNotExists(wine.regionEN, categoriesWine.regionEN);\n\t\taddIfNotExists(wine.regionPT, categoriesWine.regionPT);\n\t\taddIfNotExists(wine.subregion, categoriesWine.subregionES);\n\t\taddIfNotExists(wine.subregionEN, categoriesWine.subregionEN);\n\t\taddIfNotExists(wine.subregionPT, categoriesWine.subregionPT);\n\t\taddIfNotExists(wine.typeES, categoriesWine.typeES);\n\t\taddIfNotExists(wine.typeEN, categoriesWine.typeEN);\n\t\taddIfNotExists(wine.typePT, categoriesWine.typePT);\n\t\taddIfNotExists(wine.varietalES, categoriesWine.varietalES);\n\t\taddIfNotExists(wine.varietalEN, categoriesWine.varietalEN);\n\t\taddIfNotExists(wine.varietalPT, categoriesWine.varietalPT);\n\t});\n\n\tdispatch(setWineCategoriesActionCreator({ ...wine, ...categoriesWine }));\n};\n\nexport default function useFetchWines(clientid: string, winesFilter: any, limit = 20): any {\n\n\tconst wines = useSelector((store: AppState) => store.wines);\n\tconst {page, status} = useSelector((state: AppState) => state.wines);\n\tconst client = useSelector((state: AppState) => state.client);\n\n\tconst dispatch = useDispatch();\n\tconst { i18n } = useTranslation();\n\n\tconst [lang] = i18n.language.split(\"-\");\n\tconst fullCellarFilters = {\n\t\t...winesFilter,\n\t\twine_order: client.data?.wine_order,\n\t\twine_sort: client.data?.wine_sort,\n\t};\n\n\tuseEffect(() => {\n\t\tconst getWines = async (): Promise<any> => {\n\t\t\tif (!clientid) return;\n\n\t\t\ttry {\n\t\t\t\t// * Actually fetching wines\n\t\t\t\tdispatch(getRestaurantCellar({\n\t\t\t\t\tclientId: clientid,\n\t\t\t\t\tpage,\n\t\t\t\t\tfilters: fullCellarFilters,\n\t\t\t\t\tlanguage: lang.toUpperCase(),\n\t\t\t\t\twinesFilter,\n\t\t\t\t}))\n\t\t\t} catch (e) {\n\t\t\t\tconsole.log(e);\n\t\t\t}\n\t\t};\n\t\tgetWines();\n\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [page, clientid, winesFilter, dispatch, i18n.language, limit, client.data]);\n\n\treturn { wineError: status === \"Failed\", wines, fetchingWines: status === \"Loading\", hasMoreWines: false };\n}\n","import { useLocation } from \"react-router-dom\";\nimport { ACTION_BAR_TYPES } from \"Types\";\n\nconst useProcessQueryParams = () => {\n  // Retrieve query params if exists, this enables the Go Back button to a external page, disable manually Menu option and define home (init page)\n  const { search } = useLocation(); // search contains optional query params\n  const queryParams = new URLSearchParams(search);\n\n   // If \"home\" query param is defined, we verify if it of type ActionBarType, if not we set \"restaurant\" as default\n  const home: string = queryParams.get(\"home\") || ACTION_BAR_TYPES.RESTAURANT;\n  const homePage: string =\n    home === ACTION_BAR_TYPES.RESTAURANT ||\n    home === ACTION_BAR_TYPES.CELLAR ||\n    home === ACTION_BAR_TYPES.MENU ||\n    home === ACTION_BAR_TYPES.DRINKS\n      ? home\n      : ACTION_BAR_TYPES.RESTAURANT;\n\n  // If \"menu\" query param is defined, we verify if it set as \"false\" to disable Menu view\n  const menu = queryParams.get(\"menu\");\n  const isMenuAvailable: boolean = menu ? menu === \"true\" : true;\n  \n  // If \"restaurant\" query param is defined, we verify if it set as \"false\" to disable Restaurant Details view\n  const restaurant = queryParams.get(\"restaurant\");\n  const isRestaurantDetailsAvailable: boolean = restaurant ? restaurant === \"true\" : true;\n  \n  // If \"ref\" query param is defined, it is set as URL to redirect when \"Go Back\" button is clicked\n  const sourceURL: string = queryParams.get(\"ref\") || \"\";\n\n  const goBackOriginPage = (url: string) => {\n    return () => (window.location.href = url);\n  };\n  return { search, sourceURL, isMenuAvailable, isRestaurantDetailsAvailable, homePage, goBackOriginPage };\n};\n\nexport default useProcessQueryParams;\n","import React, { useState, FormEvent, useRef, useCallback, useEffect } from 'react';\nimport styled from 'styled-components';\nimport { ArrowToggle } from '../../Shared';\nimport { AppThemeColors } from '../../../Styles/Theme';\nimport { flex } from '../../../Styles/tools';\nimport Dropdown, { OptionType, DropdownContainerProps } from './Dropdown';\nimport { useOnClickOutside } from '../../../Hooks';\n\nconst SelectContainer = styled.div`\n  position: relative;\n`;\n\nconst SelectInput = styled.div`\n  ${ flex('row', 'center', 'center', 'nowrap') }\n`;\n\ntype SelectSelectionType = { textColor?: AppThemeColors; };\nconst SelectSelection = styled.span<SelectSelectionType>`\n  color: ${ ({theme, textColor = 'white'}) => theme.colors[textColor] };\n  min-width: 18px;\n`;\n\ninterface ISelectProps {\n  options: any;\n  showArrow?: boolean;\n  textColor?: AppThemeColors;\n};\n\nconst CustomSelect: React.FC<ISelectProps & React.HTMLProps<HTMLInputElement> & DropdownContainerProps> = (props) => {\n  const {\n    name = 'select-input',\n    placeholder,\n    value, \n    onChange,\n    showArrow = true,\n    textColor,\n    options,\n    leftOffset,\n    verticalOffset\n  } = props;\n\n  const [isOpen, setisOpen] = useState(false);\n  const toggleIsOpen = () => setisOpen(prev => !prev);\n\n  const ref = useRef() as React.MutableRefObject<HTMLInputElement>;\n  const closeDropdown = useCallback( () =>  setisOpen(false), [] );\n  useOnClickOutside(ref, closeDropdown);  \n\n  const searchValueFn = (option: OptionType) => option.value === value;\n  const [selected, setselected] = useState({\n    value: options.find(searchValueFn) ? options.find(searchValueFn).value: '', \n    label: options.find(searchValueFn) ? options.find(searchValueFn).label: ''\n  });\n\n  const onOptionChange = useCallback((option: OptionType) => {\n    setselected(option);\n    onChange && onChange({currentTarget: {name: name, value: option.value}} as FormEvent<HTMLInputElement>);\n  }, [name, onChange])\n\n  // Special process to update local state when value (parent state) changes\n  useEffect(() => {\n    const newOption = options.find((option: OptionType) => option.value === value);\n    if (!newOption) {\n      onOptionChange(options[0]);\n    }\n  }, [onOptionChange, options, value]);\n\n  return (\n    <SelectContainer className='select-container' onClick={toggleIsOpen} ref={ref}>\n      <SelectInput className='select-input'>\n        { showArrow &&\n          <ArrowToggle open={isOpen}  textColor={textColor}/>\n        }\n        <SelectSelection textColor={textColor} className='select-selection'>\n          { selected ? selected.label : placeholder }\n        </SelectSelection>\n      </SelectInput>\n      <Dropdown isOpen={isOpen} options={options} onChange={onOptionChange} selected={selected.value} leftOffset={leftOffset} verticalOffset={verticalOffset} />\n    </SelectContainer>\n  )\n}\n\nexport default CustomSelect;\n","import { useEffect }  from 'react';\n\nexport default function useOnClickOutside(ref: any, handler: any) {\n  useEffect(\n    () => {\n      const listener = (event: any) => {\n        // Do nothing if clicking ref's element or descendent elements\n        if (!ref.current || ref.current.contains(event.target)) return;\n        \n        handler(event);\n      };\n\n      document.addEventListener('mousedown', listener);\n      document.addEventListener('touchstart', listener);\n\n      return () => {\n        document.removeEventListener('mousedown', listener);\n        document.removeEventListener('touchstart', listener);\n      };\n    },\n    // Add ref and handler to effect dependencies\n    // It's worth noting that because passed in handler is a new ...\n    // ... function on every render that will cause this effect ...\n    // ... callback/cleanup to run every render. It's not a big deal ...\n    // ... but to optimize you can wrap handler in useCallback before ...\n    // ... passing it into this hook.\n    [ref, handler]\n  );\n}","/* eslint-disable @typescript-eslint/camelcase */\n\nexport type AppThemeColors =\n\t| 'black'\n\t| 'light_black'\n\t| 'steel'\n\t| 'gray'\n\t| 'light_gray'\n\t| 'red'\n\t| 'blue'\n\t| 'white'\n\t| 'transparent'\n\t| 'placeholder'\n\t| 'overlay';\n\nexport type AppThemeTypes = {\n\tcolors: AppThemeColors;\n};\n\nexport const AppTheme = {\n\tcolors: {\n\t\tblack: '#242424',\n\t\tlight_black: '#4b4b4b',\n\t\tsteel: '#8a8a8e',\n\t\tgray: '#a0a0a0',\n\t\tlight_gray: 'rgb(236, 238, 239)',\n\t\tred: '#ff3b30',\n\t\tblue: '#0e6bd6',\n\t\twhite: '#fff',\n\t\ttransparent: 'rgba(118, 118, 128, 0.24)',\n\t\tplaceholder: 'rgba(235, 235, 245, 0.6)',\n\t\toverlay: 'rgb(21, 21, 21, 82%)',\n\t},\n\tbackground_color: {},\n\tscreen_sizes: {\n\t\ts: '414px',\n\t\tm: '768px',\n\t\tl: '1024px',\n\t\txl: '1266px',\n\t},\n\tradius: '8px',\n\trounded: '20px',\n\tinput_height: '1em',\n\tshadow: {\n\t\toverlay: '1px 16px 25px 0px rgba(128,128,128,0.5)',\n\t\tsmall: '0px 0px 2px 1px rgba(128,128,128,0.5)',\n\t},\n};\n","import React from 'react';\nimport styled from 'styled-components';\nimport  { MdSearch } from 'react-icons/md'\n\nimport { AppTheme } from '../../../Styles/Theme';\nimport { flex } from '../../../Styles/tools';\n\ntype InputTypes = {\n  width?: string;\n  margin?: string;\n  padding?: string;\n}\n\nconst InputContainer = styled.div<InputTypes>`\n  ${ flex('row', 'flex-start', 'center',  'nowrap') }\n  background-color: ${ ({theme}) => theme.colors.transparent};\n  width: ${ ({width = '100%'}) => width};\n  margin: ${ ({margin = '0'}) => margin};\n  padding: ${ ({padding = '7px'}) => padding};\n  border-radius: ${ ({theme}) => theme.radius};\n`;\n\nconst StyledInput = styled.input`\n  border: 0;\n  background-color: transparent;\n  color: ${ ({theme}) => theme.colors.white};\n  outline: 0;\n  flex-grow: 10;\n  overflow: hidden;\n  text-overflow: ellipsis;\n\n  &::placeholder{\n    color: ${ ({theme}) => theme.colors.placeholder};\n  }\n`;\n\nconst IconContainer = styled.span`\n  margin-right: 5px;\n  flex-grow: 0;\n`;\n\ninterface IInputProps {\n  width?: string;\n  margin?: string;\n  padding?: string;\n};\n\nconst index: React.FC<IInputProps & React.HTMLProps<HTMLInputElement>> = (props) => {\n  const {\n    name,\n    placeholder,\n    value,\n    disabled,\n    onChange,\n    width,\n    padding,\n    margin,\n  } = props;\n\n  return (\n    <InputContainer className='input-container' \n      width={width} \n      padding={padding} \n      margin={margin}\n    >\n      <IconContainer>\n        <MdSearch style={{fontSize: '1.1em', marginTop: '24%', color: AppTheme.colors.placeholder}}/>\n      </IconContainer>\n      <StyledInput className='input' \n        name={name}\n        placeholder={placeholder}\n        value={value}\n        onChange={onChange}\n        disabled={disabled}\n      />\n    </InputContainer>\n  )\n}\n\nexport default index\n","import React, { useCallback, useEffect, useState } from \"react\";\nimport { Select } from \"..\";\nimport { useTranslation } from \"react-i18next\";\nimport { AppThemeColors } from \"Styles/Theme\";\nimport { AppState } from \"store\";\nimport { useSelector } from \"react-redux\";\n\ninterface ILanguageSelectProps {\n  textColor: AppThemeColors;\n}\n\nconst LANG_LIST = [\n  { label: \"ES\", value: \"es\", default: true, id: \"spanish\" },\n  { label: \"EN\", value: \"en\", default: true, id: \"english\" },\n  { label: \"PT\", value: \"pt\", default: false, id: \"portuguese\" },\n];\nconst LanguageSelect: React.FC<ILanguageSelectProps> = ({\n  textColor,\n}: ILanguageSelectProps) => {\n  const { i18n } = useTranslation();\n  const languages = useSelector(\n    (store: AppState) => store.client.data?.languages\n  );\n  const [currentLang, setCurrentLang] = useState(i18n.language.split(\"-\")[0]);\n\n  const DEFAULT_LANGUAGES = LANG_LIST.filter((lang) => lang.default); // Default callback languages when client has not been selected languages on Back Office (empty languages array)\n  const AVAILABLE_LANGUAGES = languages?.length ? LANG_LIST.filter(({ id }) => languages?.includes(id)) : DEFAULT_LANGUAGES;\n\n  const updateLanguage = useCallback((value: any) => i18n.changeLanguage(value), [i18n]);\n\n  // Special process when default client language is not into available language options. This allow select second option\n  useEffect(() => {\n    const availableLangOnCLient = AVAILABLE_LANGUAGES.find(({ value }) => value === currentLang);\n    if (availableLangOnCLient) {\n      return;\n    }\n    const alternativeLang = AVAILABLE_LANGUAGES[0];\n    updateLanguage(alternativeLang.value);\n    setCurrentLang(alternativeLang.value);\n  }, [AVAILABLE_LANGUAGES, currentLang, updateLanguage]);\n\n  return (\n    <Select\n      options={AVAILABLE_LANGUAGES}\n      value={currentLang}\n      onChange={({ currentTarget }) => updateLanguage(currentTarget.value)}\n      verticalOffset={15}\n      leftOffset={-7}\n      textColor={textColor}\n    />\n  );\n};\n\nexport default LanguageSelect;\n","import React from \"react\";\nimport styled from \"styled-components\";\n\nconst Link = styled.a<any>`\n\ttext-align: center;\n  font-family: CenturyGothicBold;\n\tfont-size: ${({ size = \"1rem\" }) => size};\n\tcolor: ${({ theme }) => theme.colors.white};\n`;\n\nconst NavLink: React.FC<any> = ({ children, size, href }) => {\n\treturn (\n    <Link href={href} size={size} rel=\"noopener noreferrer\" target=\"_blank\">{children}</Link>\n  );\n};\n\nexport default NavLink;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\n\nimport { AppThemeColors } from \"Styles/Theme\";\n\ninterface Titlecontainer {\n\talign?: string;\n\tcolor?: AppThemeColors;\n\tmargin?: string;\n\tpadding?: string;\n\tsize?: string;\n\tbold?: string;\n\twrap?: string;\n}\n\ninterface TitleProps extends Titlecontainer {\n\tchildren: ReactNode;\n}\n\nconst SubtitleContainer = styled.h3<Titlecontainer>`\n\ttext-align: ${({ align = \"left\" }): any => align};\n\tmargin: ${({ margin = \"1rem 0\" }): any => margin};\n\tpadding: ${({ padding }): any => padding};\n\tfont-size: ${({ size = \"1.25rem\" }): any => size};\n\tfont-weight: ${({ bold = \"600\" }): any => bold};\n\tcolor: ${({ theme, color }): any => (color ? theme.colors[color] : theme.colors.black)};\n\toverflow-wrap: ${({ wrap = \"normal\" }): any => wrap};\n\t@media (prefers-color-scheme: dark) {\n\t\tcolor: ${({ theme, color }): any => (color ? theme.colors[color] : theme.colors.white)};\n\t}\n`;\n\nconst Subtitle: React.FC<TitleProps> = ({ align, children, color, margin, padding, size, bold, wrap }) => {\n\treturn (\n\t\t<SubtitleContainer\n\t\t\talign={align}\n\t\t\tcolor={color}\n\t\t\tmargin={margin}\n\t\t\tpadding={padding}\n\t\t\tsize={size}\n\t\t\tbold={bold}\n\t\t\twrap={wrap}>\n\t\t\t{children}\n\t\t</SubtitleContainer>\n\t);\n};\n\nexport default Subtitle;\n","import { NavLink } from 'Components/Core';\nimport React from 'react';\nimport CookieConsent from \"react-cookie-consent\";\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components';\n\nconst CookieDescription = styled.div`\n  margin: 0.5rem 0;\n`;\n\nconst CookiesAdvertising: React.FC<any> = () => {\n  const { t } = useTranslation();\n\n  return (\n    <>\n      <CookieConsent\n        location=\"bottom\"\n        buttonText={t(\"cookies.allow\")}\n        cookieName=\"CookieConsent\"\n        style={{ background: \"#242424\", fontSize: \"12px\", alignItems: \"center\", flexWrap: \"nowrap\" }}\n        buttonStyle={{ background: \"#ff3b30\", color: \"#fff\", fontSize: \"12px\", borderRadius: \"8px\" }}\n        contentStyle={{ flex: \"1 0\" }}\n        expires={365}\n      >\n        <CookieDescription>\n          {t(\"cookies.description\")}\n        </CookieDescription>\n        <NavLink href={\"https://wineadvisor.mx/terms-&-privacy\"} size=\"12px\">\n          {t(\"cookies.cookiePolicy\")}\n        </NavLink>\n      </CookieConsent>\n    </>\n  )\n}\n\nexport default CookiesAdvertising\n","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"Shape\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Takeout-Delivery\",\n  stroke: \"none\",\n  strokeWidth: 1,\n  fill: \"none\",\n  fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Orden-2B\",\n  transform: \"translate(-38.000000, -736.000000)\",\n  fill: \"#4A4A4A\",\n  fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Tab-Bar\",\n  transform: \"translate(0.000000, 729.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M47.7573371,19.1966713 C49.0989709,19.1966713 50.1966713,18.0989709 50.1966713,16.7573371 C50.1966713,15.4157032 49.0989709,14.3180028 47.7573371,14.3180028 C46.4157032,14.3180028 45.3180028,15.4157032 45.3180028,16.7573371 C45.3180028,18.0989709 46.4157032,19.1966713 47.7573371,19.1966713 Z M47.7573371,7 C52.879939,7 57.5146741,10.9273282 57.5146741,17.0012705 C57.5146741,20.879812 54.5264896,25.441367 48.5623174,30.6981324 C48.0988439,31.1006225 47.4036336,31.1006225 46.9401601,30.6981324 C40.9881845,25.441367 38,20.879812 38,17.0012705 C38,10.9273282 42.6347351,7 47.7573371,7 Z\",\n  id: \"Shape\"\n}))));\n\nvar SvgRestaurantes = function SvgRestaurantes(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"20px\",\n    height: \"24px\",\n    viewBox: \"0 0 20 24\",\n    ref: svgRef\n  }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgRestaurantes, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Restaurantes.6d22e992.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"Clip 2\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"defs\", null, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M39.9998861,9 L61,53 L44.4636153,53 C44.4545789,47.6506826 44.4613579,36.3967596 44.4636153,36.0919382 C44.4764967,32.6498265 42.5581081,31.9719975 42.0868172,31.258788 C41.8839311,30.9539596 41.7729962,29.4888776 41.7129033,27.9185981 L41.7129033,27.9185981 L41.6410545,22.0816997 C41.8988724,22.0816997 41.9100819,21.8257433 41.9105692,21.8034863 L41.9105914,20.8204612 C41.9128488,20.5845199 41.7025072,20.6063117 41.7025072,20.6063117 L41.7025072,20.6063117 L41.7027349,20.3068757 C41.7027349,20.3068757 41.7343656,20.0039211 41.4148976,20.0039211 L41.4148976,20.0039211 L38.5973072,20.0039211 C38.278288,20.0039211 38.310823,20.3068757 38.310823,20.3068757 L38.310823,20.3068757 L38.310823,20.6063117 C38.310823,20.6063117 38.1004813,20.5845199 38.1027388,20.8204612 L38.1027388,20.8204612 L38.102511,21.8019457 C38.102511,21.8019457 38.102511,22.0816997 38.3702459,22.0816997 L38.3702459,22.0816997 L38.3004268,27.9185981 C38.2392019,29.4888776 38.1296268,30.9539596 37.9271895,31.258788 C37.455222,31.9719975 35.5612364,32.6498265 35.5747943,36.0919382 C35.5752431,36.3967596 35.5573914,47.6506826 35.5497148,53 L35.5497148,53 L19,53 L39.9998861,9 Z\",\n  id: \"path-1\"\n}));\n\nvar _ref4 = /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Page-1\",\n  stroke: \"none\",\n  strokeWidth: 1,\n  fill: \"none\",\n  fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Carta\",\n  transform: \"translate(-167.000000, -726.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Tab-Bar\",\n  transform: \"translate(0.000000, 717.000000)\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Group\",\n  transform: \"translate(148.000000, 0.000000)\"\n}, /*#__PURE__*/React.createElement(\"mask\", {\n  id: \"mask-2\",\n  fill: \"white\"\n}, /*#__PURE__*/React.createElement(\"use\", {\n  xlinkHref: \"#path-1\"\n})), /*#__PURE__*/React.createElement(\"use\", {\n  id: \"Clip-2\",\n  fill: \"#4A4A4A\",\n  xlinkHref: \"#path-1\"\n})))));\n\nvar SvgWine = function SvgWine(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"26px\",\n    height: \"26px\",\n    viewBox: \"0 0 42 44\",\n    ref: svgRef\n  }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3, _ref4);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgWine, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/WINE.839743ef.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"Maridaje\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Takeout-Delivery\",\n  stroke: \"none\",\n  strokeWidth: 1,\n  fill: \"none\",\n  fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Orden-2B\",\n  transform: \"translate(-130.000000, -736.000000)\",\n  fill: \"#4A4A4A\",\n  fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Tab-Bar\",\n  transform: \"translate(0.000000, 729.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M146.1,11.8 L146.1,19 C146.1,20.32 147.18,21.4 148.5,21.4 L149.7,21.4 L149.7,29.8 C149.7,30.46 150.24,31 150.9,31 C151.56,31 152.1,30.46 152.1,29.8 L152.1,8.356 C152.1,7.576 151.368,7 150.612,7.18 C148.02,7.816 146.1,10.012 146.1,11.8 Z M140.1,15.4 L137.7,15.4 L137.7,8.2 C137.7,7.54 137.16,7 136.5,7 C135.84,7 135.3,7.54 135.3,8.2 L135.3,15.4 L132.9,15.4 L132.9,8.2 C132.9,7.54 132.36,7 131.7,7 C131.04,7 130.5,7.54 130.5,8.2 L130.5,15.4 C130.5,18.052 132.648,20.2 135.3,20.2 L135.3,29.8 C135.3,30.46 135.84,31 136.5,31 C137.16,31 137.7,30.46 137.7,29.8 L137.7,20.2 C140.352,20.2 142.5,18.052 142.5,15.4 L142.5,8.2 C142.5,7.54 141.96,7 141.3,7 C140.64,7 140.1,7.54 140.1,8.2 L140.1,15.4 Z\",\n  id: \"Maridaje\"\n}))));\n\nvar SvgMaridaje = function SvgMaridaje(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"23px\",\n    height: \"24px\",\n    viewBox: \"0 0 23 24\",\n    ref: svgRef\n  }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgMaridaje, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Maridaje.1d76af0c.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"Copa\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Takeout-Delivery\",\n  stroke: \"none\",\n  strokeWidth: 1,\n  fill: \"none\",\n  fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Cava-7\",\n  transform: \"translate(-77.000000, -102.000000)\",\n  fill: \"#4A4A4A\",\n  fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M95.3199971,102.049485 C95.7360977,101.905778 96.2059981,102.085719 96.3694343,102.45135 L96.3694343,102.45135 L96.5592455,102.875987 C97.6694736,105.355594 98.3333333,107.959555 98.3333333,109.874739 C98.3333333,114.53133 93.7934351,118.954857 88.9958896,119.636429 L88.9958896,119.636429 L88.9958896,130.798924 L94.6569865,131.663789 C95.1039838,131.663789 95.4663467,131.982163 95.4663467,132.374896 L95.4663467,132.374896 L95.4663467,133.288893 C95.4663467,133.681627 95.1039838,134 94.6569865,134 L94.6569865,134 L80.6760679,134 C80.2290706,134 79.8667076,133.681627 79.8667076,133.288893 L79.8667076,133.288893 L79.8667076,132.374896 C79.8667076,131.982163 80.2290706,131.663789 80.6760679,131.663789 L80.6760679,131.663789 L86.3368858,130.798924 L86.3368858,119.636043 C81.5079232,118.923639 77,114.515016 77,109.874739 C77,107.959307 77.6638626,105.355335 78.7740676,102.876032 L78.7740676,102.876032 L78.9643259,102.45102 C79.1279235,102.085564 79.5977227,101.905809 80.0136891,102.04951 L80.0136891,102.04951 L80.9814401,102.383834 C81.3974065,102.527535 81.6020449,102.940285 81.4385291,103.305769 L81.4385291,103.305769 L81.2481795,103.73123 C80.252139,105.955525 79.6587249,108.264788 79.6587249,109.874739 C79.6587249,110.448384 79.7523277,111.019699 79.924817,111.576428 C82.2046707,110.642698 84.9065595,110.175836 88.0301601,110.175836 C92.3379842,110.175836 94.1083546,107.938766 95.2739262,107.116697 C95.0013431,106.036916 94.5963907,104.873009 94.0854895,103.731356 L94.0854895,103.731356 L93.8949522,103.306099 C93.7311595,102.940533 93.935809,102.527534 94.3519672,102.383808 L94.3519672,102.383808 Z\",\n  id: \"Copa\"\n})));\n\nvar SvgCopa = function SvgCopa(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"22px\",\n    height: \"32px\",\n    viewBox: \"0 0 22 32\",\n    ref: svgRef\n  }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgCopa, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Copa.23a8ae57.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"title\", null, \"List_ON\");\n\nvar _ref3 = /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Takeout-Delivery\",\n  stroke: \"none\",\n  strokeWidth: 1,\n  fill: \"none\",\n  fillRule: \"evenodd\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"Cava-7\",\n  transform: \"translate(-20.000000, -99.000000)\",\n  fill: \"#4A4A4A\",\n  fillRule: \"nonzero\"\n}, /*#__PURE__*/React.createElement(\"g\", {\n  id: \"List_ON\",\n  transform: \"translate(20.000000, 99.000000)\"\n}, /*#__PURE__*/React.createElement(\"path\", {\n  d: \"M19.4224756,7.06271841 L1.7656796,7.06271841 C0.794555821,7.06271841 0,7.85727423 0,8.82839801 C0,9.7995218 0.794555821,10.5940776 1.7656796,10.5940776 L19.4224756,10.5940776 C20.3935994,10.5940776 21.1881552,9.7995218 21.1881552,8.82839801 C21.1881552,7.85727423 20.3935994,7.06271841 19.4224756,7.06271841 Z M19.4224756,0 L1.7656796,0 C0.794555821,0 0,0.794555821 0,1.7656796 C0,2.73680338 0.794555821,3.53135921 1.7656796,3.53135921 L19.4224756,3.53135921 C20.3935994,3.53135921 21.1881552,2.73680338 21.1881552,1.7656796 C21.1881552,0.794555821 20.3935994,0 19.4224756,0 Z M1.7656796,17.656796 L12.3597572,17.656796 C13.330881,17.656796 14.1254368,16.8622402 14.1254368,15.8911164 C14.1254368,14.9199926 13.330881,14.1254368 12.3597572,14.1254368 L1.7656796,14.1254368 C0.794555821,14.1254368 0,14.9199926 0,15.8911164 C0,16.8622402 0.794555821,17.656796 1.7656796,17.656796 Z M35.6843848,10.9648703 L35.8432959,11.1237815 C36.531911,11.8123965 36.531911,12.9247747 35.8432959,13.6133897 L25.9908038,23.4835387 C25.3021887,24.1721538 24.1898106,24.1721538 23.5011955,23.4835387 L18.0452455,18.0275887 C17.3566305,17.3389737 17.3566305,16.2265955 18.0452455,15.5379805 L18.2041567,15.3790693 C18.8927717,14.6904543 20.0051499,14.6904543 20.6937649,15.3790693 L24.754828,19.4401324 L33.1947765,10.9825271 C33.8657348,10.2762553 34.9957697,10.2762553 35.6843848,10.9648703 L35.6843848,10.9648703 Z\",\n  id: \"Shape\"\n}))));\n\nvar SvgFiltro = function SvgFiltro(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: \"37px\",\n    height: \"24px\",\n    viewBox: \"0 0 37 24\",\n    ref: svgRef\n  }, props), title === undefined ? _ref2 : title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref3);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgFiltro, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/Filtro.d232df75.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#000000\",\n  fillRule: \"nonzero\",\n  d: \"M21.73 0H1.278C.572 0 0 .572 0 1.278v20.46C.009 22.438.578 23 1.278 23h11.02v-8.895H9.3v-3.48h2.987V8.069c0-2.97 1.814-4.589 4.472-4.589.895-.003 1.789.043 2.679.138v3.098h-1.842c-1.438 0-1.715.686-1.715 1.69v2.219h3.446l-.447 3.48h-3V23h5.851c.7-.004 1.266-.57 1.27-1.27V1.278C23 .575 22.433.004 21.73 0z\"\n});\n\nvar SvgFacebook = function SvgFacebook(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: 23,\n    height: 23,\n    viewBox: \"0 0 23 23\",\n    ref: svgRef\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgFacebook, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/facebook.e35f0db5.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#000000\",\n  fillRule: \"nonzero\",\n  d: \"M7.717 20c9.288 0 14.367-7.696 14.367-14.366 0-.22 0-.44-.01-.65a10.344 10.344 0 0 0 2.523-2.618c-.9.398-1.874.67-2.9.796a5.046 5.046 0 0 0 2.22-2.796c-.975.576-2.053.995-3.205 1.226A5.025 5.025 0 0 0 17.026 0a5.05 5.05 0 0 0-5.047 5.047c0 .398.042.785.136 1.152A14.324 14.324 0 0 1 1.707.921a5.065 5.065 0 0 0-.68 2.534c0 1.75.89 3.299 2.25 4.2a4.96 4.96 0 0 1-2.282-.629v.063a5.055 5.055 0 0 0 4.052 4.953c-.419.115-.869.178-1.33.178a4.82 4.82 0 0 1-.953-.094 5.042 5.042 0 0 0 4.712 3.508A10.15 10.15 0 0 1 0 17.717 14.068 14.068 0 0 0 7.717 20\"\n});\n\nvar SvgTwitter = function SvgTwitter(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: 25,\n    height: 20,\n    viewBox: \"0 0 25 20\",\n    ref: svgRef\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgTwitter, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/twitter.6b1a577b.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#000000\",\n  fillRule: \"evenodd\",\n  d: \"M12.42 15.643V6.357L20.58 11l-8.16 4.643zM30.572 3.435a3.923 3.923 0 0 0-2.76-2.778C25.378 0 15.613 0 15.613 0s-9.765 0-12.2.657a3.923 3.923 0 0 0-2.76 2.778C0 5.886 0 11 0 11s0 5.114.653 7.565a3.924 3.924 0 0 0 2.76 2.778c2.435.657 12.2.657 12.2.657s9.765 0 12.2-.657a3.924 3.924 0 0 0 2.76-2.778c.653-2.451.653-7.565.653-7.565s0-5.114-.653-7.565z\"\n});\n\nvar SvgYoutube = function SvgYoutube(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: 32,\n    height: 22,\n    viewBox: \"0 0 32 22\",\n    ref: svgRef\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgYoutube, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/youtube.dee33e1b.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#000000\",\n  fillRule: \"evenodd\",\n  d: \"M19 0a3 3 0 0 1 3 3v16a3 3 0 0 1-3 3H3a3 3 0 0 1-3-3V3a3 3 0 0 1 3-3h16zm-3.432 7.7c-1.716 0-2.867.89-3.338 1.734h-.049V7.966H8.8V18.7h3.524v-5.309c0-1.4.28-2.757 2.116-2.757 1.81 0 1.833 1.601 1.833 2.846v5.22H19.8v-5.887c0-2.89-.66-5.113-4.232-5.113zM6.6 7.7H3.3v11h3.3v-11zM4.951 2.2a1.65 1.65 0 1 0-.003 3.299A1.65 1.65 0 0 0 4.95 2.2z\"\n});\n\nvar SvgLinkedin = function SvgLinkedin(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: 22,\n    height: 22,\n    viewBox: \"0 0 22 22\",\n    ref: svgRef\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgLinkedin, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/linkedin.11d88b20.svg\";\nexport { ForwardRef as ReactComponent };","function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\nimport React from \"react\";\n\nvar _ref2 = /*#__PURE__*/React.createElement(\"path\", {\n  fill: \"#000000\",\n  fillRule: \"evenodd\",\n  d: \"M12.646 0c2.101.004 2.538.02 3.595.07 1.224.055 2.06.25 2.792.534A5.637 5.637 0 0 1 21.07 1.93c.64.64 1.032 1.28 1.326 2.037.285.731.479 1.567.535 2.792.056 1.226.069 1.618.069 4.741 0 3.123-.013 3.515-.07 4.741-.055 1.224-.25 2.06-.534 2.792a5.638 5.638 0 0 1-1.326 2.037 5.638 5.638 0 0 1-2.037 1.326c-.732.285-1.568.479-2.792.535-1.057.048-1.494.065-3.595.068h-2.292c-2.101-.003-2.538-.02-3.595-.068-1.225-.056-2.06-.25-2.792-.535A5.638 5.638 0 0 1 1.93 21.07a5.637 5.637 0 0 1-1.326-2.037C.319 18.3.125 17.465.069 16.24c-.048-1.057-.065-1.494-.068-3.595v-2.292C.004 8.253.02 7.816.069 6.76c.056-1.225.25-2.06.535-2.792A5.637 5.637 0 0 1 1.93 1.93 5.637 5.637 0 0 1 3.967.604C4.698.319 5.534.125 6.759.069 7.816.021 8.253.004 10.354.001zm-.02 2.073h-2.251c-2.062.003-2.477.018-3.522.066-1.121.051-1.73.239-2.135.396-.537.209-.92.458-1.323.86a3.563 3.563 0 0 0-.86 1.323c-.157.405-.345 1.014-.396 2.135-.048 1.045-.063 1.46-.066 3.522v2.25c.003 2.062.018 2.477.066 3.522.051 1.121.239 1.73.396 2.135.209.537.458.92.86 1.323.403.402.786.651 1.323.86.405.157 1.014.345 2.135.396 1.045.048 1.46.063 3.521.066h2.252c2.061-.003 2.476-.018 3.521-.066 1.121-.051 1.73-.239 2.135-.396.537-.209.92-.458 1.323-.86.402-.403.651-.786.86-1.323.157-.405.345-1.014.396-2.135.048-1.045.063-1.46.066-3.522v-2.25c-.003-2.062-.018-2.477-.066-3.522-.051-1.121-.239-1.73-.396-2.135a3.563 3.563 0 0 0-.86-1.323 3.563 3.563 0 0 0-1.323-.86c-.405-.157-1.014-.345-2.135-.396-1.045-.048-1.46-.063-3.522-.066zM11.5 5.595a5.905 5.905 0 1 1 0 11.81 5.905 5.905 0 0 1 0-11.81zm0 2.072a3.833 3.833 0 1 0 0 7.666 3.833 3.833 0 0 0 0-7.666zm6.139-3.686a1.38 1.38 0 1 1 0 2.76 1.38 1.38 0 0 1 0-2.76z\"\n});\n\nvar SvgInstagram = function SvgInstagram(_ref) {\n  var svgRef = _ref.svgRef,\n      title = _ref.title,\n      props = _objectWithoutProperties(_ref, [\"svgRef\", \"title\"]);\n\n  return /*#__PURE__*/React.createElement(\"svg\", _extends({\n    width: 23,\n    height: 23,\n    viewBox: \"0 0 23 23\",\n    ref: svgRef\n  }, props), title ? /*#__PURE__*/React.createElement(\"title\", null, title) : null, _ref2);\n};\n\nvar ForwardRef = /*#__PURE__*/React.forwardRef(function (props, ref) {\n  return /*#__PURE__*/React.createElement(SvgInstagram, _extends({\n    svgRef: ref\n  }, props));\n});\nexport default __webpack_public_path__ + \"static/media/instagram.b311ac3d.svg\";\nexport { ForwardRef as ReactComponent };","import styled from \"styled-components\";\nimport { MdLocalBar } from \"react-icons/md\";\nimport { AppThemeColors } from \"Styles/Theme\";\nimport { ReactComponent as Restaurantes } from \"Assets/icons/Restaurantes.svg\";\nimport { ReactComponent as Cellar } from \"Assets/icons/WINE.svg\";\nimport { ReactComponent as Dishes } from \"Assets/icons/Maridaje.svg\";\nimport { ReactComponent as Glass } from \"Assets/icons/Copa.svg\";\nimport { ReactComponent as Filter } from \"Assets/icons/Filtro.svg\";\nimport { ReactComponent as Facebook } from \"Assets/icons/facebook.svg\";\nimport { ReactComponent as Twitter } from \"Assets/icons/twitter.svg\";\nimport { ReactComponent as Youtube } from \"Assets/icons/youtube.svg\";\nimport { ReactComponent as Linkedin } from \"Assets/icons/linkedin.svg\";\nimport { ReactComponent as Instagram } from \"Assets/icons/instagram.svg\";\n\ntype IconType = {\n\tcolor?: AppThemeColors;\n};\n\nexport function transitionAndSize() {\n\treturn `transition: fill 250ms ease; font-size: 1.5em;`;\n}\n\nexport const PlaceIcon = styled(Restaurantes)<IconType>`\n\t* {\n\t\t${transitionAndSize()}\n\t\tfill: ${({ theme, color = \"black\" }) => theme.colors[color]}!important;\n\t}\n`;\n\nexport const DrinksIcon = styled(MdLocalBar)<IconType>`\n\tcolor: ${({ theme, color = \"black\" }) => theme.colors[color]};\n\t${transitionAndSize()}\n`;\n\nexport const MenuIcon = styled(Dishes)<IconType>`\n\t* {\n\t\tfill: ${({ theme, color = \"black\" }) => theme.colors[color]};\n\t\t${transitionAndSize()}\n\t}\n`;\n\nexport const CellarIcon = styled(Cellar)<IconType>`\n\t* {\n\t\tfill: ${({ theme, color = \"black\" }) => theme.colors[color]};\n\t\t${transitionAndSize()}\n\t}\n`;\n\nexport const GlassIcon = styled(Glass)<IconType>`\n\twidth: 0.7em;\n\tmargin-right: 5px;\n\t* {\n\t\tfill: ${({ theme, color = \"blue\" }) => theme.colors[color]};\n\t\t${transitionAndSize()}\n\t}\n`;\n\nexport const FiltersIcon = styled(Filter)<IconType>`\n\tpadding-left: 20px;\n\t* {\n\t\tfill: ${({ theme, color = \"black\" }) => theme.colors[color]};\n\t\t${transitionAndSize()}\n\t}\n`;\n\nexport const FacebookIcon = styled(Facebook)<IconType>`\n\t* {\n\t\tfill: ${({ theme, color = \"black\" }) => theme.colors[color]};\n\t\t${transitionAndSize()}\n\t}\n`;\n\nexport const TwitterIcon = styled(Twitter)<IconType>`\n\t* {\n\t\tfill: ${({ theme, color = \"black\" }) => theme.colors[color]};\n\t\t${transitionAndSize()}\n\t}\n`;\n\nexport const YoutubeIcon = styled(Youtube)<IconType>`\n\t* {\n\t\tfill: ${({ theme, color = \"black\" }) => theme.colors[color]};\n\t\t${transitionAndSize()}\n\t}\n`;\n\nexport const LinkedinIcon = styled(Linkedin)<IconType>`\n\t* {\n\t\tfill: ${({ theme, color = \"black\" }) => theme.colors[color]};\n\t\t${transitionAndSize()}\n\t}\n`;\n\nexport const IntagramIcon = styled(Instagram)<IconType>`\n\t* {\n\t\tfill: ${({ theme, color = \"black\" }) => theme.colors[color]};\n\t\t${transitionAndSize()}\n\t}\n`;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { motion } from \"framer-motion\";\nimport { AppTheme } from \"Styles/Theme\";\nimport { flex } from \"Styles/tools\";\nimport { ActionBarType, ACTION_BAR_TYPES } from \"Types\";\n\nconst ACTION_EVENT_NAME = {\n\t[ACTION_BAR_TYPES.RESTAURANT]: \"restaurant\",\n\t[ACTION_BAR_TYPES.CELLAR]: \"cellar\",\n\t[ACTION_BAR_TYPES.MENU]: \"menu\",\n\t[ACTION_BAR_TYPES.DRINKS]: \"drinks\",\n};\n\nconst ActionBarItemContainer = styled.div`\n\t${flex(\"column\", \"center\", \"center\", \"nowrap\")};\n\tflex: 1;\n`;\n\nconst ActionBarItemLabel = styled(motion.span)``;\n\ninterface ActionBarItemProps {\n\tid: ActionBarType;\n\tlabel: string;\n\tchildren: ReactNode;\n\tactive: boolean;\n\tdisabled: boolean;\n\tonClick: (id: ActionBarType) => void;\n}\n\nconst ActionBarItem: React.FC<ActionBarItemProps> = ({\n\tlabel,\n\tchildren,\n\tactive,\n\tdisabled = false,\n\tid,\n\tonClick,\n}: ActionBarItemProps) => {\n\treturn (\n\t\t<ActionBarItemContainer\n\t\t\tclassName={`action-bar-item-container umami--click--${ACTION_EVENT_NAME[id]}`}\n\t\t\tonClick={(): boolean | void => !disabled && onClick(id)}>\n\t\t\t{children}\n\t\t\t<ActionBarItemLabel\n\t\t\t\tclassName=\"action-bar-item-label\"\n\t\t\t\tanimate={{ color: disabled ? AppTheme.colors.gray : active ? AppTheme.colors.red : AppTheme.colors.black }}>\n\t\t\t\t{label}\n\t\t\t</ActionBarItemLabel>\n\t\t</ActionBarItemContainer>\n\t);\n};\n\nexport default ActionBarItem;\n","import React, { useEffect, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { CellarIcon, DrinksIcon, MenuIcon, PlaceIcon } from \"../icons\";\n\nimport { flex } from \"Styles/tools\";\nimport ActionBarItem from \"./ActionBarItem\";\nimport { useTranslation } from \"react-i18next\";\nimport { ActionBarType, ACTION_BAR_TYPES } from \"Types\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\n\ninterface ActionBarProps {\n\tactive: ActionBarType;\n\tmenu?: boolean;\n\trestaurantDetails?: boolean;\n\tonChange: (id: ActionBarType) => void;\n}\n\nconst ActionBarContainer = styled.div`\n\t${flex(\"row\", \"space-evenly\", \"center\", \"nowrap\")}\n\tbackground-color: ${({ theme }) => theme.colors.light_gray};\n\tborder-top: ${({ theme }) => `2px solid ${theme.colors.transparent}`};\n\twidth: 100%;\n\theight: 10vh;\n\tflex-grow: 0;\n\tflex-shrink: 0;\n\tpadding: 2rem 0;\n`;\n\nconst ActionBar: React.FC<ActionBarProps> = ({ active, menu, restaurantDetails, onChange }: ActionBarProps) => {\n\tconst { t, i18n } = useTranslation();\n\tconst pairings = useSelector((store: AppState) => store.client.data?.pairings);\n\n\tconst [actionBarOptions, setActionBarOptions] = useState([\n\t\t{ id: ACTION_BAR_TYPES.RESTAURANT, label: t(\"common.restaurant\") },\n\t\t{ id: ACTION_BAR_TYPES.CELLAR, label: t(\"common.cellar\") },\n\t\t{ id: ACTION_BAR_TYPES.MENU, label: t(\"common.menu\") },\n\t\t{ id: ACTION_BAR_TYPES.DRINKS, label: t(\"common.drinks\") },\n\t]);\n\n\tconst getIcon = (id: ActionBarType) => {\n\t\tswitch (id) {\n\t\t\tcase ACTION_BAR_TYPES.RESTAURANT:\n\t\t\t\treturn (\n\t\t\t\t\t<PlaceIcon color={!restaurantDetails ? \"gray\" : active === ACTION_BAR_TYPES.RESTAURANT ? \"red\" : \"black\"} />\n\t\t\t\t);\n\t\t\tcase ACTION_BAR_TYPES.CELLAR:\n\t\t\t\treturn <CellarIcon color={active === ACTION_BAR_TYPES.CELLAR ? \"red\" : \"black\"} />;\n\t\t\tcase ACTION_BAR_TYPES.MENU:\n\t\t\t\treturn <MenuIcon color={!pairings || !menu ? \"gray\" : active === ACTION_BAR_TYPES.MENU ? \"red\" : \"black\"} />;\n\t\t\tcase ACTION_BAR_TYPES.DRINKS:\n\t\t\t\treturn (\n\t\t\t\t\t<DrinksIcon color={!pairings || !menu ? \"gray\" : active === ACTION_BAR_TYPES.DRINKS ? \"red\" : \"black\"} />\n\t\t\t\t);\n\t\t\tdefault:\n\t\t\t\treturn <></>;\n\t\t}\n\t};\n\n\t// This hook allow reload labels when automatically changes client language (i18n.language)\n\tuseEffect(() => {\n\t\tsetActionBarOptions([\n\t\t\t{ id: ACTION_BAR_TYPES.RESTAURANT, label: t(\"common.restaurant\") },\n\t\t\t{ id: ACTION_BAR_TYPES.CELLAR, label: t(\"common.cellar\") },\n\t\t\t{ id: ACTION_BAR_TYPES.MENU, label: t(\"common.menu\") },\n\t\t\t{ id: ACTION_BAR_TYPES.DRINKS, label: t(\"common.drinks\") },\n\t\t]);\n\t}, [i18n, t]);\n\n\treturn (\n\t\t<ActionBarContainer className=\"action-bar-container\">\n\t\t\t{actionBarOptions.map(option => (\n\t\t\t\t<ActionBarItem\n\t\t\t\t\tkey={option.id}\n\t\t\t\t\tid={option.id as ActionBarType}\n\t\t\t\t\tlabel={t(`${option.label}`)}\n\t\t\t\t\tactive={active === option.id}\n\t\t\t\t\tdisabled={\n\t\t\t\t\t\t([ACTION_BAR_TYPES.MENU, ACTION_BAR_TYPES.DRINKS].includes(option.id) ? !pairings || !menu : false) ||\n\t\t\t\t\t\t(option.id === ACTION_BAR_TYPES.RESTAURANT && !restaurantDetails)\n\t\t\t\t\t}\n\t\t\t\t\tonClick={onChange}\n\t\t\t\t>\n\t\t\t\t\t{getIcon(option.id as ActionBarType)}\n\t\t\t\t</ActionBarItem>\n\t\t\t))}\n\t\t</ActionBarContainer>\n\t);\n};\n\nexport default ActionBar;\n","import React from 'react';\nimport styled from \"styled-components\";\n\n\nconst ImageContainer = styled.img`\n  height: ${({ height = 'auto' }) => height };\n  width: ${({ width = '100vw' }) => width };\n`;\n\ninterface IImageProps {\n  id: string;\n  srcImg: string;\n  height?: string;\n  width?: string;\n}\n\nconst Image: React.FC<IImageProps>  = ({ id, srcImg, height, width }) => {\n  return (\n    <ImageContainer src={`${srcImg}`} alt={`image_${id}`} height={height} width={width} />\n  );\n};\n\nexport default Image;\n","import React, { ReactNode } from 'react';\nimport styled from 'styled-components';\n\ntype ListContainerType = {\n  height?: string;\n  padding?: string;\n};\n\nconst ListContent = styled.div<ListContainerType>`\n  width: 100%;\n  height: ${ ({height = 'auto'}) => height };\n  padding: ${ ({ padding = '0 0.5rem 0.5rem 0.5rem' }) => padding };\n  margin: 0;\n  overflow-y: scroll;\n  overflow-x: hidden;\n`;\n\ninterface IListContainerProps extends ListContainerType {\n  children: ReactNode;\n  className?: string;\n};\n\nconst ListContainer = React.forwardRef<HTMLInputElement, IListContainerProps>((props, ref) => {\n  const { height, children, className, padding } = props;\n  return (\n    <ListContent ref={ref} className={className ? className : 'list-content'} height={height} padding={padding}>\n      {children}\n    </ListContent>\n  )\n});\n\nexport default ListContainer\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { IoIosArrowForward } from \"react-icons/io\";\n\nimport { flex, Justify } from \"Styles/tools\";\nimport { AppTheme, AppThemeColors } from \"Styles/Theme\";\nimport { motion } from \"framer-motion\";\n\ninterface ListItemContainerType {\n\tcolor?: AppThemeColors;\n\tmargin?: string;\n\tpadding?: string;\n\tjustify?: Justify;\n}\n\ninterface ListItemProps extends ListItemContainerType {\n\tonClick?: () => void;\n\tchildren: ReactNode;\n\thideIcon?: boolean;\n}\n\nconst ListItemContainer = styled(motion.div)<ListItemContainerType>`\n\twidth: 100%;\n\tflex-shrink: 0;\n\t${({ justify = \"space-between\" }): any => flex(\"row\", justify, \"center\", \"nowrap\")};\n\tborder-bottom: 1px solid ${({ theme, color = \"transparent\" }): any => theme.colors[color]};\n\tpadding: ${({ padding = \"10px\" }): any => padding};\n\tmargin: ${({ margin = \"\" }): any => margin};\n`;\n\nconst IconContainer = styled.div`\n\t${flex(\"row\", \"center\", \"center\", \"nowrap\")}\n`;\n\nconst ListItem: React.FC<ListItemProps> = ({\n\tonClick,\n\tchildren,\n\tcolor,\n\tmargin,\n\tjustify,\n\tpadding,\n\thideIcon = false,\n}) => {\n\treturn (\n\t\t<ListItemContainer\n\t\t\tcolor={color}\n\t\t\tmargin={margin}\n\t\t\tpadding={padding}\n\t\t\tjustify={justify}\n\t\t\tclassName=\"list-item-container\"\n\t\t\tonClick={onClick}\n\t\t\twhileTap={{ backgroundColor: AppTheme.colors.transparent }}>\n\t\t\t{children}\n\t\t\t<IconContainer className=\"icon-container\">\n\t\t\t\t{!hideIcon && (\n\t\t\t\t\t<IoIosArrowForward className=\"back-icon\" style={{ color: AppTheme.colors.gray, fontSize: \"1.2em\" }} />\n\t\t\t\t)}\n\t\t\t</IconContainer>\n\t\t</ListItemContainer>\n\t);\n};\n\nexport default ListItem;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { flex } from \"Styles/tools\";\nimport { Logo } from \"Components/Shared\";\n\nimport Col from \"react-bootstrap/Col\";\nimport Row from \"react-bootstrap/Row\";\nimport { useTranslation } from \"react-i18next\";\nimport { AppThemeColors } from \"Styles/Theme\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { Subtitle } from \"Components/Core\";\n\nconst LogoContainer = styled(motion.div)`\n\t${flex(\"column\", \"center\", \"center\", \"nowrap\")}\n\twidth: 100%;\n`;\n\nconst TextContainer = styled(motion.div)`\n\t${flex(\"column\", \"center\", \"center\", \"nowrap\")}\n\twidth: 100%;\n`;\n\ninterface LoadingProps {\n\tlogo?: boolean;\n\tsize?: string;\n\tcolor?: AppThemeColors;\n\ttext?: boolean;\n\tcustomText?: ReactNode;\n}\n\nconst VARIANTS_LOGO = {\n\tin: {\n\t\tscale: [1, 1.15],\n\t},\n};\n\nconst VARIANTS_TEXT = {\n\tin: {\n\t\topacity: 0.6,\n\t},\n};\n\nconst Loading: React.FC<LoadingProps> = ({\n\tsize,\n\tlogo = false,\n\tcolor = \"black\",\n\ttext = true,\n\tcustomText,\n}: LoadingProps) => {\n\tconst { t } = useTranslation();\n\n\treturn (\n\t\t<AnimatePresence>\n\t\t\t<>\n\t\t\t\t<LogoContainer\n\t\t\t\t\tclassName=\"loader-container-logo\"\n\t\t\t\t\tanimate=\"in\"\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\trepeat: Infinity,\n\t\t\t\t\t\trepeatType: \"reverse\",\n\t\t\t\t\t}}\n\t\t\t\t\tvariants={VARIANTS_LOGO}\n\t\t\t\t>\n\t\t\t\t\t<Row>\n\t\t\t\t\t\t<Col className={`mx-auto`}>{logo && <Logo size={size} />}</Col>\n\t\t\t\t\t</Row>\n\t\t\t\t</LogoContainer>\n\t\t\t\t<TextContainer\n\t\t\t\t\tclassName=\"loader-container-text\"\n\t\t\t\t\tanimate=\"in\"\n\t\t\t\t\ttransition={{\n\t\t\t\t\t\tduration: 1,\n\t\t\t\t\t\trepeat: Infinity,\n\t\t\t\t\t\trepeatType: \"reverse\",\n\t\t\t\t\t}}\n\t\t\t\t\tvariants={VARIANTS_TEXT}\n\t\t\t\t>\n\t\t\t\t\t{text && <Subtitle color={color}>{`${customText ? customText : `${t(\"common.loading\")}...`}`}</Subtitle>}\n\t\t\t\t</TextContainer>\n\t\t\t</>\n\t\t</AnimatePresence>\n\t);\n};\n\nexport default Loading;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport LogoSrc from \"Assets/logo-black@2x.png\";\nimport LogoWhiteSrc from \"Assets/logo-white@2x.png\";\nimport { flex } from \"Styles/tools\";\n\ninterface LogoContainerProps {\n\twidth?: string;\n\theight?: string;\n\tpadding?: string;\n\twhite?: boolean;\n}\n\nconst LogoContainer = styled.div<LogoContainerProps>`\n\twidth: ${({ width = \"100%\" }): any => width};\n\tpadding: ${({ padding = \"1em 0\" }): any => padding};\n\t${flex(\"column\", \"center\", \"center\", \"nowrap\")}\n`;\n\ninterface LogoProps extends LogoContainerProps {\n\tsize?: string;\n}\nconst Logo: React.FC<LogoProps> = ({ width, height, size, padding, white }) => {\n\treturn (\n\t\t<LogoContainer width={width} height={height} padding={padding}>\n\t\t\t<img\n\t\t\t\tsrc={white ? LogoWhiteSrc : LogoSrc}\n\t\t\t\tstyle={{ width: size ? size : \"150px\", height: \"auto\", margin: \"0 auto\" }}\n\t\t\t\talt=\"\"\n\t\t\t/>\n\t\t</LogoContainer>\n\t);\n};\n\nexport default Logo;\n","import React from \"react\";\nimport { useTranslation } from \"react-i18next\";\nimport styled from \"styled-components\";\n\nimport Logo from \"./Logo\";\nimport { flex } from \"../../Styles/tools\";\nimport { Subtitle } from \"Components/Core\";\n\nconst LoadingContainer = styled.div`\n\t${flex(\"column\", \"center\", \"center\", \"nowrap\")}\n\twidth: 100%;\n\theight: 100%;\n`;\n\ninterface LoadingProps {\n\tshow: boolean | null;\n\tlogo?: boolean;\n\tsize?: string;\n\ttextSize?: string;\n\tpadding?: string;\n}\n\nconst Loading: React.FC<LoadingProps> = ({ show, size, logo = false, textSize = \"1.2rem\", padding }: LoadingProps) => {\n\tconst { t } = useTranslation();\n\n\treturn (\n\t\t<>\n\t\t\t{show && (\n\t\t\t\t<LoadingContainer>\n\t\t\t\t\t{logo && <Logo size={size} padding={padding} />}\n\t\t\t\t\t<Subtitle color=\"black\" align=\"center\" margin=\"0 0 0.5rem 0\" size={textSize}>\n\t\t\t\t\t\t{`${t(\"common.loading\")}...`}\n\t\t\t\t\t</Subtitle>\n\t\t\t\t</LoadingContainer>\n\t\t\t)}\n\t\t</>\n\t);\n};\n\nexport default Loading;\n","import React, { ReactNode } from \"react\";\nimport styled from \"styled-components\";\nimport { motion } from \"framer-motion\";\nimport { use100vh } from \"react-div-100vh\";\n\nimport { flex } from \"Styles/tools\";\n\ninterface PageProps {\n\tanimated?: boolean;\n\tchildren: ReactNode;\n\tcustomHeight?: number;\n}\n\nconst SuperContainer = styled.div<any>`\n\twidth: 100%;\n\theight: ${({ height }) => height}px;\n`;\n\nconst PageContainer = styled(motion.div)`\n\t${flex(\"column\", \"flex-start\", \"flex-start\", \"nowrap\")}\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n\tbackground-color: ${({ theme }) => theme.colors.white};\n`;\n\nconst PAGE_VARIANTS = {\n\tinitial: {\n\t\tx: 100,\n\t},\n\tin: {\n\t\tx: 0,\n\t},\n\tout: {\n\t\tx: -100,\n\t},\n};\n\nconst Page: React.FC<PageProps> = ({ animated = true, children, customHeight = 100 }) => {\n\tconst height = use100vh();\n\tconst partialHeight = height ? (customHeight / 100) * height : `${customHeight}vh`;\n\n\treturn (\n\t\t<SuperContainer height={partialHeight}>\n\t\t\t<PageContainer\n\t\t\t\tclassName=\"page-container\"\n\t\t\t\tinitial=\"initial\"\n\t\t\t\tanimate=\"in\"\n\t\t\t\texit=\"out\"\n\t\t\t\ttransition={{ duration: 0.25 }}\n\t\t\t\tvariants={animated ? PAGE_VARIANTS : {}}\n\t\t\t>\n\t\t\t\t{children}\n\t\t\t</PageContainer>\n\t\t</SuperContainer>\n\t);\n};\n\nexport default Page;\n","import styled from \"styled-components\";\nimport { AppThemeColors } from \"../../Styles/Theme\";\n\ntype TitleType = {\n\tmargin?: string;\n\tcolor?: AppThemeColors;\n\twidth?: string;\n\talign?: string;\n\twrap?: string;\n};\n\nconst Title = styled.h1<TitleType>`\n\tcolor: ${({ theme, color = \"white\" }): any => theme.colors[color]};\n\tmargin: ${({ margin = \"0\" }): any => margin};\n\twidth: ${({ width = \"auto\" }): any => width};\n\ttext-align: ${({ align = \"start\" }): any => align};\n\toverflow-wrap: ${({ wrap = \"normal\" }): any => wrap};\n`;\n\nexport default Title;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { MdClose } from 'react-icons/md';\n\nconst CloseIcon = styled(MdClose)`\n  color: ${ ({theme}) => theme.colors.red };\n  font-size: 2em;\n  flex-grow: 0;\n`\ninterface ICloseIconButtonProps {\n  onClick: () => void\n}\nconst CloseIconButton: React.FC<ICloseIconButtonProps> = ({onClick}: ICloseIconButtonProps) => {\n  return (\n    <CloseIcon onClick={onClick}/>\n  )\n}\n\nexport default CloseIconButton\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport styled from \"styled-components\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { flex } from \"Styles/tools\";\nimport CloseIconButton from \"../CloseIcon\";\nimport { Logo, SocialBanner } from \"../\";\nimport { Button, NavLink, Subtitle } from \"Components/Core\";\nimport { useTranslation } from \"react-i18next\";\nimport { APP_VERSION } from \"env\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\n\nconst Overlay = styled(motion.div)`\n\tposition: absolute;\n\ttop: 0;\n\theight: 100%;\n\twidth: 100%;\n\tpadding: 25px 16px;\n\tbackground-color: ${({ theme }): any => theme.colors.overlay};\n\t${flex(\"column\", \"flex-start\", \"flex-start\", \"nowrap\")}\n\toverflow-y: scroll;\n`;\n\nconst ModalContent = styled.div`\n\t${flex(\"column\", \"center\", \"center\", \"nowrap\")}\n\tmargin: 2em 0;\n\tflex-grow: 1;\n\twidth: 100%;\n`;\n\nconst IconContainer = styled.div`\n\tmargin-left: auto;\n`;\n\nconst About: React.FC<any> = ({ isOpen, close }) => {\n\tconst { t } = useTranslation();\n\tconst clientName = useSelector((store: AppState) => store.client.data?.clientid);\n\tconst navigator = window.navigator as any;\n\n\tconst sharePage = (): void => {\n\t\tif (navigator.share) {\n\t\t\tnavigator.share({\n\t\t\t\ttitle: \"WineAdvisor\",\n\t\t\t\ttext: t(\"common.shareText\"),\n\t\t\t\turl: `https://app.wineadvisor.mx/${clientName}`,\n\t\t\t});\n\t\t}\n\t};\n\n\treturn ReactDOM.createPortal(\n\t\t<AnimatePresence>\n\t\t\t{isOpen && (\n\t\t\t\t<Overlay\n\t\t\t\t\tclassName=\"overlay\"\n\t\t\t\t\tinitial={{ x: \"-100%\" }}\n\t\t\t\t\tanimate={{ x: 0 }}\n\t\t\t\t\texit={{ x: \"-100%\" }}\n\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t>\n\t\t\t\t\t<IconContainer>\n\t\t\t\t\t\t<CloseIconButton onClick={close} />\n\t\t\t\t\t</IconContainer>\n\t\t\t\t\t<ModalContent className=\"modal-content\">\n\t\t\t\t\t\t<Logo white />\n\t\t\t\t\t\t<SocialBanner color=\"white\" />\n\t\t\t\t\t\t<Subtitle align=\"center\" color=\"white\" size=\"1rem\">\n\t\t\t\t\t\t\t{`v${APP_VERSION}`}\n\t\t\t\t\t\t</Subtitle>\n\t\t\t\t\t\t<NavLink href={\"https://wineadvisor.mx/terms-&-privacy\"}>{t(\"common.privacyNotice\")}</NavLink>\n\t\t\t\t\t\t{navigator.share && (\n\t\t\t\t\t\t\t<Button margin=\"2rem 0 1rem 0\" onClick={sharePage}>\n\t\t\t\t\t\t\t\t{t(\"common.share\")}\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</ModalContent>\n\t\t\t\t</Overlay>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.getElementById(\"portal\") as Element\n\t);\n};\n\nexport default About;\n","/* eslint-disable @typescript-eslint/camelcase */\nimport React, { ReactNode, useState } from \"react\";\nimport styled from \"styled-components\";\nimport { motion, AnimatePresence } from \"framer-motion\";\nimport { IoIosArrowBack } from \"react-icons/io\";\n\nimport { AppTheme, AppThemeColors } from \"../../../Styles/Theme\";\nimport { LanguageSelect } from \"../../Core\";\nimport { flex } from \"../../../Styles/tools\";\nimport Title from \"../Title\";\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\nimport { ClientURL } from \"Types\";\nimport WALogo from \"Assets/icon.png\";\nimport About from \"./About\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\nimport { isUsingCellarFilters } from \"Utils\";\n\nconst PageHeaderContainer = styled(motion.div)`\n\twidth: 100%;\n\theight: fit-content;\n\tpadding: 16px;\n\tflex-grow: 0;\n`;\n\nconst HeaderNavBar = styled.div`\n\t${flex(\"row\", \"space-between\", \"center\", \"nowrap\")};\n`;\n\nconst BackContainer = styled.div`\n\t${flex(\"row\", \"flex-start\", \"center\", \"nowrap\")};\n\tflex: 1;\n`;\n\nconst HeaderBackText = styled.h3`\n\tpointer-events: none;\n`;\n\nconst TitleContainer = styled.div`\n\t${flex(\"row\", \"center\", \"center\", \"nowrap\")};\n\tflex: 3;\n`;\n\nconst SelectContainer = styled.div`\n\t${flex(\"row\", \"flex-end\", \"center\", \"nowrap\")};\n\tflex: 1;\n`;\n\nconst HeaderContent = styled.div`\n\tmargin-top: 15px;\n`;\n\nconst LogoContainer = styled.span`\n\tmargin-right: 1rem;\n`;\n\ninterface PageHeaderProps {\n\tcolor: AppThemeColors;\n\ttextColor: AppThemeColors;\n\tbackEnabled?: boolean;\n\tbackText?: string;\n\ttitle?: string;\n\tchildren?: ReactNode;\n\tcustomBackAction?: () => void;\n}\n\nconst PageHeader: React.FC<PageHeaderProps> = ({\n\ttitle,\n\tbackEnabled = false,\n\tbackText,\n\tcolor,\n\ttextColor,\n\tcustomBackAction,\n\tchildren,\n}: PageHeaderProps) => {\n\tconst history = useHistory();\n\tconst { clientId } = useParams<ClientURL>();\n\tconst { search } = useLocation(); // search contains optional query params\n\tconst [showFiltersModal, setshowFiltersModal] = useState(false);\n\tconst filters = useSelector((state: AppState) => state.filters.cellar);\n\tconst isUsingFilters = isUsingCellarFilters(filters);\n\n\tconst openModal = () => setshowFiltersModal(true);\n\tconst closeModal = () => setshowFiltersModal(false);\n\n\tconst returnPage = () => {\n\t\thistory.push(`/hotel/${clientId}${search}`);\n\t};\n\n\treturn (\n\t\t<PageHeaderContainer className=\"page-header-container\" animate={{ backgroundColor: AppTheme.colors[color] }}>\n\t\t\t<HeaderNavBar className=\"header-nav\">\n\t\t\t\t<LogoContainer onClick={openModal}>\n\t\t\t\t\t<img alt=\"banner-app-logo\" style={{ width: \"2rem\", height: \"auto\" }} src={WALogo} />\n\t\t\t\t</LogoContainer>\n\t\t\t\t<BackContainer className=\"back-container\" onClick={customBackAction ? customBackAction : returnPage}>\n\t\t\t\t\t<AnimatePresence>\n\t\t\t\t\t\t{backEnabled && (\n\t\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\t\tid=\"icon\"\n\t\t\t\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\t\t\t\tstyle={{ display: \"flex\", alignItems: \"center\" }}\n\t\t\t\t\t\t\t\tkey=\"page-header\">\n\t\t\t\t\t\t\t\t<IoIosArrowBack\n\t\t\t\t\t\t\t\t\tclassName=\"back-icon\"\n\t\t\t\t\t\t\t\t\tstyle={{ color: AppTheme.colors[textColor], fontSize: \"1.4em\", marginLeft: \"-9%\", marginTop: \"0\" }}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{backText && (\n\t\t\t\t\t\t\t<motion.div id=\"text\" initial={{ opacity: 0 }} animate={{ opacity: 1 }} exit={{ opacity: 0 }}>\n\t\t\t\t\t\t\t\t<HeaderBackText className=\"header-back-text\" style={{ color: AppTheme.colors[textColor] }}>\n\t\t\t\t\t\t\t\t\t{backText}\n\t\t\t\t\t\t\t\t</HeaderBackText>\n\t\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</AnimatePresence>\n\t\t\t\t</BackContainer>\n\n\t\t\t\t{title && (\n\t\t\t\t\t<TitleContainer className=\"title-container\">\n\t\t\t\t\t\t<Title className=\"header-title\">{title}</Title>\n\t\t\t\t\t</TitleContainer>\n\t\t\t\t)}\n\n\t\t\t\t{!isUsingFilters && (\n\t\t\t\t\t<SelectContainer className=\"select-container\">\n\t\t\t\t\t\t<LanguageSelect textColor={textColor} />\n\t\t\t\t\t</SelectContainer>\n\t\t\t\t)}\n\t\t\t</HeaderNavBar>\n\t\t\t{children && <HeaderContent className=\"header-content\">{children}</HeaderContent>}\n\t\t\t<About isOpen={showFiltersModal} close={closeModal} />\n\t\t</PageHeaderContainer>\n\t);\n};\n\nexport default PageHeader;\n","import React from 'react';\nimport styled from 'styled-components';\nimport { FaFacebook, FaTwitter, FaYoutube, FaLinkedin, FaInstagram } from 'react-icons/fa';\nimport { CgWebsite } from 'react-icons/cg';\n\nconst getIcon = (key: string, color = 'black', size = 30) => {\n\tswitch (key) {\n\t\tcase 'facebook':\n\t\t\treturn <FaFacebook color={color} size={size} />;\n\t\tcase 'instagram':\n\t\t\treturn <FaInstagram color={color} size={size} />;\n\t\tcase 'twitter':\n\t\t\treturn <FaTwitter color={color} size={size} />;\n\t\tcase 'youtube':\n\t\t\treturn <FaYoutube color={color} size={size} />;\n\t\tcase 'linkedin':\n\t\t\treturn <FaLinkedin color={color} size={size} />;\n\t\tcase 'website':\n\t\t\treturn <CgWebsite color={color} size={size} />;\n\t}\n};\n\nconst SOCIAL_LINKS = [\n\t{\n\t\tkey: 'facebook',\n\t\turl: 'https://www.facebook.com/pg/WineAdvisor',\n\t},\n\t{\n\t\tkey: 'instagram',\n\t\turl: 'https://www.instagram.com/wine.advisor',\n\t},\n\t{\n\t\tkey: 'twitter',\n\t\turl: 'https://twitter.com/wineadvisormx',\n\t},\n\t{\n\t\tkey: 'linkedin',\n\t\turl: 'https://www.linkedin.com/company/intelligent-restaurants-de-mexico-s-a-de-c-v-',\n\t},\n\t{\n\t\tkey: 'website',\n\t\turl: 'https://wineadvisor.mx',\n\t},\n];\n\nconst SocialBannerContainer = styled.div`\n\tdisplay: flex;\n\tflex-direction: row;\n\tjustify-content: space-evenly;\n\tmargin: 2rem 1rem;\n\twidth: 20rem;\n`;\n\nconst Button = styled.a``;\n\nconst SocialBanner: React.FC<any> = ({ color, sizeIcons }) => {\n\treturn (\n\t\t<SocialBannerContainer>\n\t\t\t{SOCIAL_LINKS.map(({ key, url }, index) => (\n\t\t\t\t<Button href={url} key={index} target=\"_blank\">\n\t\t\t\t\t{getIcon(key, color, sizeIcons)}\n\t\t\t\t</Button>\n\t\t\t))}\n\t\t</SocialBannerContainer>\n\t);\n};\n\nexport default SocialBanner;\n","import React, { useState } from \"react\";\nimport { URL_INTEGRAL } from \"env\";\nimport styled from \"styled-components\";\nimport table from \"Assets/images/table/table.png\";\nimport wood from \"Assets/images/wood/wood.png\";\nimport noImageBlackBottle from \"Assets/images/bottle/bottle_default.png\"\n\nconst WineBottleContainer = styled.div`\n\tposition: relative;\n`;\n\nconst WineBottleImageContainer = styled.div`\n\tposition: absolute;\n\ttop: 5vh;\n\tleft: 50%;\n\ttransform: translateX(-50%);\n`;\n\nconst BackgroundImage = styled.img`\n\theight: 40vh;\n\twidth: 100vw;\n\t@media screen and (min-width: ${({ theme }) => theme.screen_sizes.l}) {\n\t\theight: 55vh;\n\t}\n`;\n\nconst FloorImage = styled.img`\n\tposition: relative;\n\ttop: -5px;\n\theight: 10vh;\n\twidth: 100vw;\n`;\n\nconst BottleImage = styled.img`\n\theight: 37vh;\n\t@media screen and (min-width: ${({ theme }) => theme.screen_sizes.l}) {\n\t\theight: 52vh;\n\t}\n`;\n\ninterface WineBottle {\n\tclientId: string;\n\twineImageName: string;\n}\n\nconst WineBottle: React.FC<WineBottle> = ({ clientId, wineImageName }) => {\n\tconst [imageLoaded, setImageLoaded] = useState(false);\n\n\tconst imgObject = new Image();\n\timgObject.onload = function(){\n\t\tsetImageLoaded(true);\n\t}\n\n\tconst image_url = `${URL_INTEGRAL}/wines/image/${clientId}/${wineImageName}`;\n\n\timgObject.src = image_url;\n\treturn (\n\t\t<WineBottleContainer>\n\t\t\t<BackgroundImage src={wood} alt=\"backgroundImage\" />\n\t\t\t<FloorImage src={table} alt=\"floorImage\" />\n\t\t\t<WineBottleImageContainer>\n\t\t\t\t<BottleImage src={imageLoaded ? image_url : noImageBlackBottle} alt=\"bottleImage\" />\n\t\t\t</WineBottleImageContainer>\n\t\t</WineBottleContainer>\n\t);\n};\n\nexport default WineBottle;","import { createSlice, PayloadAction } from \"@reduxjs/toolkit\";\nimport { ScheduleOptions } from \"Types\";\n\nexport type Option = { label: string; value: string };\n\nexport interface ICellarFilters {\n\ttype: string;\n\tvarietal: string;\n\tcountry: string;\n\tregion: string;\n\tsubregion: string;\n\tselling_by: string;\n\tselection: string;\n}\n\nexport interface IMenuFilters {\n\tselfCategory: any;\n}\n\nexport interface IDrinksFilters {\n\tselfCategory: any;\n}\n\nconst InitialFiltersState = {\n\tcellar: { type: \"\", varietal: \"\", country: \"\", region: \"\", subregion: \"\", selling_by: \"\" },\n\tmenu: { selfCategory: \"\" },\n\tdrinks: { selfCategory: \"\" },\n\tschedule: \"\",\n};\n\n/* REDUCER CREATOR */\nexport interface IgetDrinkSelfCategories {\n\tclientId: string;\n\trestaurantId: string;\n}\n\nexport interface FiltersState {\n\tcellar: ICellarFilters;\n\tmenu: IMenuFilters;\n\tdrinks: IDrinksFilters;\n}\n\nconst filtersSlice = createSlice({\n\tname: \"filters\",\n\tinitialState: InitialFiltersState,\n\treducers: {\n\t\tsetCellarFilters: (state, action: PayloadAction<ICellarFilters>) => {\n\t\t\tstate.cellar = action.payload;\n\t\t},\n\t\tsetMenuFilters: (state, action: PayloadAction<IMenuFilters>) => {\n\t\t\tstate.menu = action.payload;\n\t\t},\n\t\tsetScheduleFilters: (state, action: PayloadAction<ScheduleOptions>) => {\n\t\t\tstate.schedule = action.payload;\n\t\t},\n\t\tsetDrinksFilters: (state, action: PayloadAction<IDrinksFilters>) => {\n\t\t\tstate.drinks = action.payload;\n\t\t},\n\t\tresetFilters: state => {\n\t\t\treturn { ...InitialFiltersState };\n\t\t},\n\t},\n});\n\n/* ACTION TYPES EXPORTS */\nexport const {\n\tsetCellarFilters: setCellarFiltersActionCreator,\n\tsetMenuFilters: setMenuFiltersActionCreator,\n\tsetScheduleFilters: setScheduleFiltersActionCreator,\n\tsetDrinksFilters: setDrinksFiltersActionCreator,\n\tresetFilters: resetFiltersActionCreator,\n} = filtersSlice.actions;\n\nexport default filtersSlice;\n","import React, { useEffect } from 'react';\nimport { ListContainer, ListItem } from '../../Components/Shared';\nimport { useDispatch } from 'react-redux';\nimport { resetFiltersActionCreator } from '../../Reducers/Filters';\nimport { resetWinesActionCreator } from '../../Reducers/Wines';\nimport { resetDishesActionCreator } from '../../Reducers/Dishes';\nimport { resetDrinksActionCreator } from '../../Reducers/Drinks';\n\n\ninterface IRestaurantsListProps {\n  restaurants: any;\n  onClick: (id: string) => void;\n};\n\nconst RestaurantsList: React.FC<IRestaurantsListProps> = ({restaurants, onClick}: IRestaurantsListProps) => {\n  const dispatch = useDispatch();\n\n  useEffect(() => {\n    dispatch(resetFiltersActionCreator());\n    dispatch(resetWinesActionCreator());\n    dispatch(resetDishesActionCreator());\n    dispatch(resetDrinksActionCreator());\n  }, [dispatch]);\n  \n  return (\n    <ListContainer className='restaurant-list' height='64.2vh'>\n      {\n        restaurants.map( (restaurant: any, index: number) => \n          <ListItem key={index} \n            onClick={ () => onClick(restaurant._id)}\n          >\n            <h5>{restaurant.name}</h5>\n          </ListItem>\n        )\n      }\n    </ListContainer>\n  )\n}\n\nexport default RestaurantsList;\n","import React, { useState, FormEvent, useEffect } from \"react\";\nimport { useHistory, useParams } from \"react-router-dom\";\n\nimport { Page, PageHeader, Title } from \"Components/Shared\";\nimport { Input } from \"Components/Core\";\nimport { useDebounce, useProcessQueryParams } from \"Hooks\";\nimport { useTranslation } from \"react-i18next\";\nimport RestaurantsList from \"./RestaurantsList\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\nimport PageContent from \"Components/Shared/Page/PageContent\";\nimport { ClientURL } from \"Types\";\n\ninterface HotelViewProps {\n\tisBannerOpen: boolean;\n}\n\nconst HotelView: React.FC<HotelViewProps> = ({ isBannerOpen }) => {\n\tconst client = useSelector((state: AppState) => state.client.data);\n\tconst history = useHistory();\n\tconst { clientId } = useParams<ClientURL>();\n\tconst { search, sourceURL, goBackOriginPage } = useProcessQueryParams();\n\n\tif (!client) history.push(`/${clientId}${search}`);\n\n\tconst [searchTerm, setsearchTerm] = useState(\"\");\n\tconst debouncedSearchTerm = useDebounce(searchTerm, 250);\n\tconst [restaurants, setrestaurants] = useState([]);\n\n\tconst { t } = useTranslation();\n\n\tconst handleSearchChange = ({ currentTarget: { value } }: FormEvent<HTMLInputElement>) => setsearchTerm(value);\n\n\tconst restaurantClick = (id: string) => history.push(`/hotel/${clientId}/restaurant/${id}${search}`);\n\n\tuseEffect(() => {\n\t\tsetrestaurants(client!.restaurants.filter((restaurant: any) => restaurant.name.includes(debouncedSearchTerm)));\n\t}, [client, debouncedSearchTerm]);\n\n\treturn (\n\t\t<Page customHeight={isBannerOpen ? 92 : 100}>\n\t\t\t<PageHeader\n\t\t\t\tcolor=\"red\"\n\t\t\t\ttextColor=\"white\"\n\t\t\t\tbackText={sourceURL ? t(\"common.goBack\") : \"\"}\n\t\t\t\tbackEnabled={sourceURL ? true : false}\n\t\t\t\tcustomBackAction={sourceURL ? goBackOriginPage(sourceURL) : undefined}>\n\t\t\t\t<Title margin=\"0 0 10px 0\">{client?.description}</Title>\n\t\t\t\t<Input\n\t\t\t\t\tname=\"searchTerm\"\n\t\t\t\t\tplaceholder={`${t(\"common.search\")} ${t(\"common.restaurants\").toLocaleLowerCase()}`}\n\t\t\t\t\tvalue={searchTerm}\n\t\t\t\t\tonChange={handleSearchChange}\n\t\t\t\t/>\n\t\t\t</PageHeader>\n\t\t\t<PageContent>\n\t\t\t\t<h6 style={{ padding: \"0 16px\", margin: \"1em 0\" }}>{t(\"hotel-view.available-restaurants\")}:</h6>\n\t\t\t\t{restaurants.length ? (\n\t\t\t\t\t<RestaurantsList restaurants={restaurants} onClick={restaurantClick} />\n\t\t\t\t) : (\n\t\t\t\t\t<h6 style={{ padding: \"0 20px\", margin: \"1em 0\" }}>{t(\"hotel-view.noResults\")}</h6>\n\t\t\t\t)}\n\t\t\t</PageContent>\n\t\t</Page>\n\t);\n};\n\nexport default HotelView;\n","import { useState, useEffect } from 'react';\n\nexport default function useDebounce(value: any, delay: number) {\n  // State and setters for debounced value\n  const [debouncedValue, setDebouncedValue] = useState(value);\n\n  useEffect(\n    () => {\n      // Update debounced value after delay\n      const handler = setTimeout(() => {\n        setDebouncedValue(value);\n      }, delay);\n\n      // Cancel the timeout if value changes (also on delay change or unmount)\n      // This is how we prevent debounced value from updating if value is changed ...\n      // .. within the delay period. Timeout gets cleared and restarted.\n      return () => {\n        clearTimeout(handler);\n      };\n    },\n    [value, delay] // Only re-call effect if value or delay changes\n  );\n\n  return debouncedValue;\n}","import React from \"react\";\nimport styled from \"styled-components\";\nimport { useSelector } from \"react-redux\";\nimport { useTranslation } from \"react-i18next\";\nimport { motion } from \"framer-motion\";\n\nimport { AppState } from \"store\";\nimport { Title, FlexContainer, ListItem } from \"Components/Shared\";\nimport { flex } from \"Styles/tools\";\nimport { useParams } from \"react-router-dom\";\nimport { ClientType, ClientURL } from \"Types\";\n\nconst RestaurantHeader = styled.div`\n\tbackground-color: ${({ theme }) => theme.colors.black};\n\tpadding: 25px 15px;\n\tposition: absolute;\n\twidth: 100%;\n`;\n\nconst RestaurantImg = styled.img<any>`\n\twidth: 100%;\n\theight: ${({has_mobile_app}) => has_mobile_app ? \"600px\" : \"50vh\"};\n\t@media screen and (min-width: ${({ theme }) => theme.screen_sizes.l}) {\n\t\theight: ${({has_mobile_app}) => has_mobile_app ? \"600px\" : \"80vh\"};\n\t}\n`;\n\nconst RestaurantInfo = styled.div`\n\t${flex(\"column\", \"flex-start\", \"center\", \"nowrap\")};\n\tpadding: 6.75rem 0 0 0;\n\toverflow-y: scroll;\n\theight: auto;\n\tpadding-bottom: 1.6em;\n`;\n\nconst InfoText = styled.h6`\n\tfont-weight: bold;\n\tcolor: ${({ theme }) => theme.colors.blue};\n\tmargin-right: 0.6em;\n`;\n\nconst InfoLabel = styled.span`\n\tfont-family: CenturyGothicBold;\n\tmargin-bottom: 3px;\n`;\n\nconst InfoDescription = styled.span`\n\tcolor: ${({ theme }) => theme.colors.blue};\n\tmargin-right: 0.6em;\n`;\n\nconst RestaurantDetail: React.FC = () => {\n\tconst { restaurantId } = useParams<ClientURL>();\n\tconst { t } = useTranslation();\n\n\tconst { dish } = useSelector((store: AppState) => store.categories);\n\tconst { data, cellarLength } = useSelector((state: AppState) => state.wines);\n\tconst dishes = useSelector((state: AppState) => state.dishes);\n\tconst pairings = useSelector((store: AppState) => store.client.data?.pairings);\n\tconst client = useSelector((store: AppState) => store.client);\n\t\n\n\t// TODO: remove next custom hook when client data contains cellar length (pending task on Backend)\n\n\tlet clientImage = client.data?.main_image4_url && client.data?.main_image4_url !== \"\"\n\t\t? `http://wa-client-media.s3.amazonaws.com/${client.data?.main_image4_url}`\n\t\t: client.data?.main_image1_url && client.data?.main_image1_url !== \"\" ? `http://wa-client-media.s3.amazonaws.com/${client.data?.main_image1_url}` : require(\"Assets/placeholders/RestaurantImg.jpg\");\n\n\tconst has_mobile_app = client.data?.main_image4_url && client.data?.main_image4_url !== \"\";\n\t\n\tconst isJson = (str:any) => {\n\t\ttry {\n\t\t\tJSON.parse(str);\n\t\t} catch (e) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\t\n\tconst isValidUrl = (urlString:any) => {\n\t\tif(urlString === \"\")\n\t\t\treturn false\n\t\tvar patronURL = new RegExp(\n            // valida protocolo\n            '^(https?:\\\\/\\\\/)?'+\n            // valida nombre de dominio\n\t    \t'((([a-z\\\\d]([a-z\\\\d-]*[a-z\\\\d])*)\\\\.)+[a-z]{2,}|'+\n            // valida OR direccion ip (v4)\n\t    \t'((\\\\d{1,3}\\\\.){3}\\\\d{1,3}))'+\n            // valida puerto y path\n\t\t    '(\\\\:\\\\d+)?(\\\\/[-a-z\\\\d%_.~+]*)*'+\n            // valida queries\n\t\t    '(\\\\?[;&a-z\\\\d%_.~+=-]*)?'+\n            // valida fragment locator\n\t    \t'(\\\\#[-a-z\\\\d_]*)?$','i'); \n\t  \treturn !!patronURL.test(urlString);\n\t}\n\n\tlet nombre_evento = \"\";\n\tlet extra_evento = \"\";\n\n\tif(client.data?.client_type === \"private-event\"){\n\t\tif(isJson(client.data?.description)){\n\t\t\tlet parsedClientDescription = JSON.parse(client.data?.description)\n\t\t\tnombre_evento = parsedClientDescription.nombre_evento\n\t\t\textra_evento = parsedClientDescription.extra_evento\n\t\t}\n\t}\n\tlet clientName = client.data?.client_type === \"private-event\" ? nombre_evento : client.data?.description;\n\tlet isUrl = isValidUrl(extra_evento);\n\n\tif (client.data?.client_type === ClientType.HOTEL) {\n\t\tconst selectedRestaurant = client.data.restaurants.find((rest: any) => rest._id === restaurantId);\n\t\tclientName = selectedRestaurant ? selectedRestaurant.name : client.data?.description;\n\t}\n\n\treturn (\n\t\t<motion.div initial={{ opacity: 0 }} animate={{ opacity: 1 }} transition={{ duration: 0.3 }} exit={{ opacity: 0 }}>\n\t\t\t<RestaurantHeader className=\"restaurant-header\">\n\t\t\t\t<Title className=\"bold\" wrap=\"break-word\">\n\t\t\t\t\t{clientName}\n\t\t\t\t</Title>\n\t\t\t\t<FlexContainer width=\"100%\" margin=\"1em 0 0 0\">\n\t\t\t\t\t<h6 style={{ color: \"white\" }}>{`${t(\"common.cellar\")}: ${\n\t\t\t\t\t\tcellarLength === 0 && data === null ? t(\"common.loading\") : cellarLength || 0\n\t\t\t\t\t} ${t(\"common.labels\")}${cellarLength === 0 && data === null ? \"...\" : \"\"}`}</h6>\n\t\t\t\t\t{pairings && (\n\t\t\t\t\t\t<h6\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tcolor: \"white\",\n\t\t\t\t\t\t\t\tmarginLeft: \"1em\",\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{`${t(\"common.menu\")}: ${dish && dishes.data ? dishes.dishesTotal : t(\"common.loading\")} ${t(\n\t\t\t\t\t\t\t\t\"common.dishes\"\n\t\t\t\t\t\t\t)}${dish ? \"\" : \"...\"}`}\n\t\t\t\t\t\t</h6>\n\t\t\t\t\t)}\n\t\t\t\t</FlexContainer>\n\t\t\t</RestaurantHeader>\n\n\t\t\t<RestaurantInfo className=\"restaurant-info\">\n\t\t\t\t{client.data && <RestaurantImg src={clientImage} has_mobile_app={has_mobile_app} />}\n\t\t\t\t<FlexContainer direction=\"column\" width=\"100%\" padding=\"0 10px\">\n\t\t\t\t\t{client.data?.about_us && (\n\t\t\t\t\t\t<ListItem hideIcon={true}>\n\t\t\t\t\t\t\t<FlexContainer direction=\"column\" width=\"100%\">\n\t\t\t\t\t\t\t\t<InfoLabel>{t(\"common.about_us\")}</InfoLabel>\n\t\t\t\t\t\t\t\t<InfoText>\n\t\t\t\t\t\t\t\t\t{client.data?.about_us}\n\t\t\t\t\t\t\t\t</InfoText>\n\t\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t)}\n\t\t\t\t\t{client.data?.address && (\n\t\t\t\t\t\t<ListItem hideIcon={true}>\n\t\t\t\t\t\t\t<FlexContainer direction=\"column\" width=\"100%\">\n\t\t\t\t\t\t\t\t<InfoLabel>{t(\"common.address\")}</InfoLabel>\n\t\t\t\t\t\t\t\t<InfoText\n\t\t\t\t\t\t\t\t\tas=\"a\"\n\t\t\t\t\t\t\t\t\thref={`https://www.google.com/maps/search/?api=1&query=${client.data?.address}`}\n\t\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{client.data?.address}\n\t\t\t\t\t\t\t\t</InfoText>\n\t\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t)}\n\t\t\t\t\t{client.data?.phone && (\n\t\t\t\t\t\t<ListItem hideIcon={true}>\n\t\t\t\t\t\t\t<FlexContainer direction=\"column\" width=\"100%\">\n\t\t\t\t\t\t\t\t<InfoLabel>{t(\"common.phone\")}</InfoLabel>\n\t\t\t\t\t\t\t\t<InfoText as=\"a\" href={`tel:${client.data?.phone}`} target=\"_blank\">\n\t\t\t\t\t\t\t\t\t{client.data?.phone}\n\t\t\t\t\t\t\t\t</InfoText>\n\t\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t)}\n\t\t\t\t\t{client.data?.email && (\n\t\t\t\t\t\t<ListItem hideIcon={true}>\n\t\t\t\t\t\t\t<FlexContainer direction=\"column\" width=\"100%\">\n\t\t\t\t\t\t\t\t<InfoLabel>{t(\"common.email\")}</InfoLabel>\n\t\t\t\t\t\t\t\t<InfoText as=\"a\" href={`mailto:${client.data?.email}`} target=\"_blank\">\n\t\t\t\t\t\t\t\t\t{client.data?.email}\n\t\t\t\t\t\t\t\t</InfoText>\n\t\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t)}{extra_evento && (\n\t\t\t\t\t\t<ListItem hideIcon={true}>\n\t\t\t\t\t\t\t<FlexContainer direction=\"column\" width=\"100%\">\n\t\t\t\t\t\t\t\t<InfoLabel>{t(\"common.extraEvent\")}</InfoLabel>\n\t\t\t\t\t\t\t\t{isUrl ?\n\t\t\t\t\t\t\t\t<InfoText as=\"a\" href={`${extra_evento}`} target=\"_blank\">\n\t\t\t\t\t\t\t\t\t{extra_evento}\n\t\t\t\t\t\t\t\t</InfoText>:\n\t\t\t\t\t\t\t\t<InfoDescription>{extra_evento}</InfoDescription>\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t)}\n\t\t\t\t\t<ListItem hideIcon={true}>\n\t\t\t\t\t\t<FlexContainer direction=\"column\" width=\"100%\">\n\t\t\t\t\t\t\t<InfoLabel>{t(\"common.currency\")}</InfoLabel>\n\t\t\t\t\t\t\t<FlexContainer direction=\"row\" width=\"100%\">\n\t\t\t\t\t\t\t\t<InfoText className=\"bold\">{client.data?.main_currency}</InfoText>\n\t\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</ListItem>\n\t\t\t\t</FlexContainer>\n\t\t\t</RestaurantInfo>\n\t\t</motion.div>\n\t);\n};\n\nexport default RestaurantDetail;\n","import React, { useState, ReactNode } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport styled from \"styled-components\";\nimport { flex } from \"../../../../Styles/tools\";\nimport { ArrowToggle, FlexContainer } from \"../../../../Components/Shared\";\nimport { AppTheme } from \"../../../../Styles/Theme\";\n\nconst FilterSelectorContainer = styled.div`\n\t${flex(\"column\", \"flex-start\", \"flex-start\", \"nowrap\")}\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.placeholder};\n\tpadding: 15px 0;\n\twidth: 100%;\n`;\n\nconst OptionsContainer = styled(motion.div)`\n\twidth: 100%;\n\tmargin: 1rem 0;\n`;\n\ninterface FilterSelectorProps {\n\ttitle: string;\n\tchildren: ReactNode;\n}\nconst FilterSelector: React.FC<FilterSelectorProps> = ({ title, children }) => {\n\tconst [isOpen, setisOpen] = useState(false);\n\n\tconst toggleContent = () => setisOpen(prev => !prev);\n\n\treturn (\n\t\t<FilterSelectorContainer className=\"filter-selector-container\" onClick={toggleContent}>\n\t\t\t<FlexContainer shrink={0}>\n\t\t\t\t<ArrowToggle open={isOpen} textColor=\"red\" style={{ padding: 0 }} />\n\t\t\t\t<h4 style={{ color: AppTheme.colors.white, fontFamily: \"CenturyGothicBold\" }}>{title}</h4>\n\t\t\t</FlexContainer>\n\t\t\t<AnimatePresence exitBeforeEnter>\n\t\t\t\t{isOpen && (\n\t\t\t\t\t<OptionsContainer\n\t\t\t\t\t\tclassName=\"options-container\"\n\t\t\t\t\t\tinitial={{ scaleY: 0 }}\n\t\t\t\t\t\tanimate={{ scaleY: 1 }}\n\t\t\t\t\t\texit={{\n\t\t\t\t\t\t\tscaleY: 0,\n\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\tdelay: 0.1,\n\t\t\t\t\t\t\t\tduration: 0.2,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}}\n\t\t\t\t\t\ttransition={{ duration: 0.2 }}\n\t\t\t\t\t\tstyle={{ originY: 0 }}>\n\t\t\t\t\t\t<motion.div\n\t\t\t\t\t\t\tinitial={{ x: -500 }}\n\t\t\t\t\t\t\tanimate={{ x: 0 }}\n\t\t\t\t\t\t\texit={{\n\t\t\t\t\t\t\t\tx: -500,\n\t\t\t\t\t\t\t\ttransition: {\n\t\t\t\t\t\t\t\t\tdelay: 0,\n\t\t\t\t\t\t\t\t\tduration: 0.2,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\ttransition={{ delay: 0.1, duration: 0.2 }}\n\t\t\t\t\t\t\tstyle={{ marginLeft: \"1em\" }}>\n\t\t\t\t\t\t\t{children}\n\t\t\t\t\t\t</motion.div>\n\t\t\t\t\t</OptionsContainer>\n\t\t\t\t)}\n\t\t\t</AnimatePresence>\n\t\t</FilterSelectorContainer>\n\t);\n};\n\nexport default FilterSelector;\n","export const getGlobalLanguage = (lang: string) => {\n  const [formattedLang,] = lang.split('-');\n  return formattedLang;\n}","import React from \"react\";\nimport { ListItem } from \"../../../../Components/Shared\";\nimport FilterSelector from \"./FilterSelector\";\nimport { AppTheme } from \"../../../../Styles/Theme\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"../../../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport { GlassIcon } from \"../../../../Components/Shared/icons\";\nimport { ICellarFilters } from \"../../../../Reducers/Filters\";\nimport { getGlobalLanguage } from \"Utils/language.helper\";\nimport { ASYNC_FAILED, ASYNC_LOADING, ASYNC_SUCCEEDED } from \"Utils/constants/thunks\";\n\ninterface FilterItemProps {\n\tfilter: { label: string; key: string };\n\tonClick: (name: string, value: string) => void;\n}\n\nconst GLASS_LABEL_LANG = {\n\tES: \"Copa\",\n\tEN: \"Glass\",\n\tPT: \"Copo\",\n};\n\nconst FilterItem: React.FC<FilterItemProps> = ({ filter, onClick }) => {\n\tconst categories = useSelector((state: AppState) => state.categories.wine);\n\tconst selections = useSelector((state: AppState) => state.selections);\n\tconst { cellar } = useSelector((state: AppState) => state.filters);\n\tconst { t, i18n } = useTranslation();\n\tconst currenLang = getGlobalLanguage(i18n.language).toUpperCase();\n\tconst currenLangGlassLabel: string = GLASS_LABEL_LANG[currenLang as keyof typeof GLASS_LABEL_LANG];\n\n\tconst optionsList: string[] = categories\n\t\t? (categories[`${filter.key}${currenLang}` as keyof typeof categories] as string[])\n\t\t: [];\n\n\tconst selectionOptions: any[] = selections.data\n\t\t? selections.data.map((selection: any) => ({\n\t\t\ttext: selection[`title_${currenLang.toLocaleLowerCase()}`] ?? \"\",\n\t\t\tvalue: selection.label\n\t\t}))\n\t\t: [];\n\n\tif (filter.key === \"selection\") {\n\t\treturn (\n\t\t\t<FilterSelector title={filter.label}>\n\t\t\t\t{selections.status === ASYNC_LOADING &&\n\t\t\t\t\t(!selectionOptions ||\n\t\t\t\t\t\t(selectionOptions.length === 0 && (\n\t\t\t\t\t\t\t<ListItem color=\"placeholder\" hideIcon={true}>\n\t\t\t\t\t\t\t\t<h6 style={{ color: AppTheme.colors.white }}>{`${t(\"common.loading\")}...`}</h6>\n\t\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t\t)))}\n\t\t\t\t{selections.status === ASYNC_FAILED &&\n\t\t\t\t\t(<ListItem color=\"placeholder\" hideIcon={true}>\n\t\t\t\t\t\t<h6 style={{ color: AppTheme.colors.white }}>{`${t(\"common.noDataFound\")}...`}</h6>\n\t\t\t\t\t</ListItem>\n\t\t\t\t\t)}\n\t\t\t\t{selections.status === ASYNC_SUCCEEDED &&\n\t\t\t\t\t(!selectionOptions ||\n\t\t\t\t\t\t(selectionOptions.length === 0 && (\n\t\t\t\t\t\t\t<ListItem color=\"placeholder\" hideIcon={true}>\n\t\t\t\t\t\t\t\t<h6 style={{ color: AppTheme.colors.white }}>{t(\"common.noOptionsAvailable\")}</h6>\n\t\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t\t)))}\n\t\t\t\t{selections.status === ASYNC_SUCCEEDED &&\n\t\t\t\t\tselectionOptions &&\n\t\t\t\t\tselectionOptions.length > 0 &&\n\t\t\t\t\tselectionOptions.map((selection: any, index: number) => (\n\t\t\t\t\t\t<ListItem color=\"placeholder\" key={index} onClick={(): void => onClick(filter.key, selection.value)} hideIcon={true}>\n\t\t\t\t\t\t\t<h6\n\t\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\t\tcellar[filter.key as keyof ICellarFilters] !== selection.value ? AppTheme.colors.white : AppTheme.colors.red,\n\t\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t\t{selection.text.length > 0 ? selection.text : t(\"common.noInfoAvailableInThisLanguage\")}\n\t\t\t\t\t\t\t</h6>\n\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t))}\n\t\t\t</FilterSelector>\n\t\t);\n\t}\n\n\tif (filter.key === \"selling_by\") {\n\t\treturn (\n\t\t\t<ListItem\n\t\t\t\tcolor=\"placeholder\"\n\t\t\t\tkey=\"by-class\"\n\t\t\t\tpadding=\"10px 7px\"\n\t\t\t\tjustify=\"flex-start\"\n\t\t\t\tonClick={(): void => onClick(filter.key, currenLangGlassLabel)}\n\t\t\t\thideIcon={true}>\n\t\t\t\t<GlassIcon color={\"red\"} />\n\t\t\t\t<h4\n\t\t\t\t\tstyle={{\n\t\t\t\t\t\tcolor: cellar.selling_by !== currenLangGlassLabel ? AppTheme.colors.white : AppTheme.colors.red,\n\t\t\t\t\t\tfontFamily: \"CenturyGothicBold\",\n\t\t\t\t\t}}>\n\t\t\t\t\t{t(\"wineDetail.glass\")}\n\t\t\t\t</h4>\n\t\t\t</ListItem>\n\t\t);\n\t}\n\n\treturn (\n\t\t<FilterSelector title={filter.label}>\n\t\t\t{!optionsList ||\n\t\t\t\t(optionsList.length === 0 && (\n\t\t\t\t\t<ListItem color=\"placeholder\" hideIcon={true}>\n\t\t\t\t\t\t<h6 style={{ color: AppTheme.colors.white }}>{t(\"common.noOptionsAvailable\")}</h6>\n\t\t\t\t\t</ListItem>\n\t\t\t\t))}\n\t\t\t{optionsList &&\n\t\t\t\toptionsList.length > 0 &&\n\t\t\t\toptionsList.map((option: string, index: number) => (\n\t\t\t\t\t<ListItem color=\"placeholder\" key={index} onClick={(): void => onClick(filter.key, option)} hideIcon={true}>\n\t\t\t\t\t\t<h6\n\t\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\t\t\tcellar[filter.key as keyof ICellarFilters] !== option ? AppTheme.colors.white : AppTheme.colors.red,\n\t\t\t\t\t\t\t}}>\n\t\t\t\t\t\t\t{option || t(\"common.noInfoAvailableInThisLanguage\")}\n\t\t\t\t\t\t</h6>\n\t\t\t\t\t</ListItem>\n\t\t\t\t))}\n\t\t</FilterSelector>\n\t);\n};\n\nexport default FilterItem;\n","// * HTTP ASYNC THUNKS STATUS\nexport const ASYNC_IDLE = \"IDLE\";\nexport const ASYNC_LOADING = \"LOADING\";\nexport const ASYNC_SUCCEEDED = \"SUCCEEDED\";\nexport const ASYNC_FAILED = \"FAILED\";\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport styled from \"styled-components\";\n\nimport { flex } from \"../../../../Styles/tools\";\nimport FilterItem from \"./FilterItem\";\nimport CloseIconButton from \"../../../../Components/Shared/CloseIcon\";\nimport { useTranslation } from \"react-i18next\";\n\nconst Overlay = styled(motion.div)`\n\tposition: absolute;\n\ttop: 0;\n\theight: 100%;\n\twidth: 100%;\n\tpadding: 25px;\n\tbackground-color: ${({ theme }): any => theme.colors.overlay};\n\t${flex(\"column\", \"flex-start\", \"flex-start\", \"nowrap\")}\n`;\n\nconst ModalContent = styled.div`\n\tmargin: 2em 0;\n\tflex-grow: 1;\n\twidth: 100%;\n\toverflow-y: scroll;\n\t${flex(\"column\", \"flex-start\", \"flex-start\", \"nowrap\")}\n`;\n\nconst IconContainer = styled.div`\n\tmargin-left: auto;\n`;\n\ninterface CellarFiltersModalProps {\n\tisOpen: boolean;\n\tclose: () => void;\n\tonChange: (name: string, value: string) => void;\n}\nconst CellarFiltersModal: React.FC<CellarFiltersModalProps> = ({ isOpen, onChange, close }) => {\n\tconst { t } = useTranslation();\n\n\tconst CATEGORIES_KEYS_ARRAY = [\n\t\t{ label: t(\"wineDetail.selection\"), key: \"selection\" },\n\t\t{ label: t(\"wineDetail.glass\"), key: \"selling_by\" },\n\t\t{ label: t(\"wineDetail.type\"), key: \"type\" },\n\t\t{ label: t(\"wineDetail.variety\"), key: \"varietal\" },\n\t\t{ label: t(\"wineDetail.country\"), key: \"country\" },\n\t\t{ label: t(\"wineDetail.region\"), key: \"subregion\" },\n\t];\n\n\tconst filterClicked = (name: string, value: string): void => {\n\t\tonChange(name, value);\n\t\tclose();\n\t};\n\n\treturn ReactDOM.createPortal(\n\t\t<AnimatePresence>\n\t\t\t{isOpen && (\n\t\t\t\t<Overlay\n\t\t\t\t\tclassName=\"overlay\"\n\t\t\t\t\tinitial={{ x: -500 }}\n\t\t\t\t\tanimate={{ x: 0 }}\n\t\t\t\t\texit={{ x: -500 }}\n\t\t\t\t\ttransition={{ duration: 0.25 }}\n\t\t\t\t>\n\t\t\t\t\t<IconContainer>\n\t\t\t\t\t\t<CloseIconButton onClick={close} />\n\t\t\t\t\t</IconContainer>\n\t\t\t\t\t<ModalContent className=\"modal-content\">\n\t\t\t\t\t\t{CATEGORIES_KEYS_ARRAY.map((filter, index) => (\n\t\t\t\t\t\t\t<FilterItem key={index} filter={filter} onClick={filterClicked} />\n\t\t\t\t\t\t))}\n\t\t\t\t\t</ModalContent>\n\t\t\t\t</Overlay>\n\t\t\t)}\n\t\t</AnimatePresence>,\n\t\tdocument.getElementById(\"portal\") as Element\n\t);\n};\n\nexport default CellarFiltersModal;\n","import React from 'react';\nimport { MdClose } from 'react-icons/md';\nimport styled from 'styled-components';\n\nimport { flex } from '../../../../Styles/tools';\n\nconst FilterBadgeContent = styled.div`\n  ${ flex('row', 'flex-start', 'center', 'nowrap') }\n`\n\ninterface IFilterBadgeProps {\n  label: string;\n  clear: (id: string) => void;\n  id: string;\n}\nconst FilterBadge: React.FC<IFilterBadgeProps> = ({label, clear, id}: IFilterBadgeProps) => {\n  return (\n    <FilterBadgeContent className='filter-badge-content'>\n      <span className='bold' style={{whiteSpace: 'nowrap'}}>{label}</span>\n      <MdClose style={{fontSize: '1em', marginLeft: '5px', marginTop: '3%'}} onClick={ () => clear(id) }/>\n    </FilterBadgeContent>\n  )\n}\n\nexport default FilterBadge\n","import { css } from \"styled-components\";\n\nexport const HideHorizontalScrollBar = () => css`\n\t/* Hide scrollbar for IE, Edge and Firefox */\n\t-ms-overflow-style: none; /* IE and Edge */\n\tscrollbar-width: none; /* Firefox */\n\n\t/* Hide scrollbar for Chrome, Safari and Opera */\n\t::-webkit-scrollbar {\n\t\twidth: 1px;\n\t\tdisplay: none;\n\t}\n`;\n","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport CellarFiltersModal from \"./CellarFiltersModal\";\nimport { Badge, FlexContainer } from \"../../../../Components/Shared\";\nimport { flex } from \"../../../../Styles/tools\";\nimport FilterBadge from \"./FilterBadge\";\nimport { ICellarFilters } from \"../../../../Reducers/Filters\";\nimport { FiltersIcon } from \"../../../../Components/Shared/icons\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"../../../../store\";\nimport { useTranslation } from \"react-i18next\";\nimport { HideHorizontalScrollBar } from \"Styles/mixins\";\nimport { getGlobalLanguage } from \"Utils/language.helper\";\n\nconst FilterContainer = styled.div`\n\t${flex(\"column\", \"center\", \"flex-start\", \"nowrap\")};\n\tposition: relative;\n`;\n\nconst SelectedFiltersContainer = styled.div`\n\toverflow-y: scroll;\n\twidth: 100%;\n\t${flex(\"row\", \"flex-start\", \"center\", \"nowrap\")};\n\t${HideHorizontalScrollBar()}\n`;\n\ninterface CellarFiltersProps {\n\tfiltersState: ICellarFilters;\n\thandleFilterChange: (name: string, value: string) => void;\n\tloading: boolean;\n\tcustomWinesTotal?: number;\n}\nconst CellarFilters: React.FC<CellarFiltersProps> = ({ filtersState, handleFilterChange, loading, customWinesTotal }) => {\n\tconst { winesTotal } = useSelector((state: AppState) => state.wines);\n\tconst selections = useSelector((state: AppState) => state.selections.data);\n\tconst [showFiltersModal, setshowFiltersModal] = useState(false);\n\tconst openModal = () => setshowFiltersModal(true);\n\tconst closeModal = () => setshowFiltersModal(false);\n\tconst { t, i18n } = useTranslation();\n\n\tconst currenLang = getGlobalLanguage(i18n.language).toUpperCase();\n\n\n\tconst clearFilter = (id: string) => {\n\t\thandleFilterChange(id, \"\");\n\t};\n\n\treturn (\n\t\t<>\n\t\t\t<FilterContainer className=\"filter-container\">\n\t\t\t\t<FlexContainer width=\"100%\" margin=\"1rem 0\" direction=\"row\" justify=\"space-between\">\n\t\t\t\t\t<FiltersIcon onClick={openModal} />\n\t\t\t\t\t<h6\n\t\t\t\t\t\tstyle={{\n\t\t\t\t\t\t\tcolor: \"black\",\n\t\t\t\t\t\t\tmarginRight: \"1em\",\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{loading ? `${t(\"common.loading\")}...` : `${(customWinesTotal !== undefined && customWinesTotal !== null) ? customWinesTotal : winesTotal} ${t(\"common.labels\")}`}\n\t\t\t\t\t</h6>\n\t\t\t\t</FlexContainer>\n\t\t\t\t<SelectedFiltersContainer className=\"selected-filters-container\">\n\t\t\t\t\t{Object.keys(filtersState).map(\n\t\t\t\t\t\t(filterKey: string) => {\n\t\t\t\t\t\t\tlet badgeLabel = filtersState[filterKey as keyof typeof filtersState]\n\t\t\t\t\t\t\tif(filterKey === \"selection\") {\n\t\t\t\t\t\t\t\tlet selection = selections.find((sel: any) => sel.label === badgeLabel);\n\t\t\t\t\t\t\t\tbadgeLabel = selection ? selection[`title_${currenLang.toLocaleLowerCase()}`] : \"\";\n\t\t\t\t\t\t\t\tif(badgeLabel.length === 0){\n\t\t\t\t\t\t\t\t\tbadgeLabel = t(\"common.noInfoAvailableInThisLanguage\");\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn filtersState[filterKey as keyof typeof filtersState] !== \"\" && (\n\t\t\t\t\t\t\t\t<Badge margin=\"0 1em\" color=\"transparent\" textColor=\"black\" key={filterKey}>\n\t\t\t\t\t\t\t\t\t<FilterBadge\n\t\t\t\t\t\t\t\t\t\tid={filterKey}\n\t\t\t\t\t\t\t\t\t\tlabel={badgeLabel}\n\t\t\t\t\t\t\t\t\t\tclear={clearFilter}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t)}\n\t\t\t\t</SelectedFiltersContainer>\n\t\t\t</FilterContainer>\n\t\t\t<CellarFiltersModal isOpen={showFiltersModal} close={closeModal} onChange={handleFilterChange} />\n\t\t</>\n\t);\n};\n\nexport default CellarFilters;\n","\nexport const features = {\n  cupFormats: false,\n}","import React, { useState } from \"react\";\nimport styled from \"styled-components\";\nimport { FaWineBottle, FaWineGlassAlt } from \"react-icons/fa\";\nimport { URL_INTEGRAL } from \"env\";\nimport { Wine } from \"../../../Types\";\nimport { flex } from \"../../../Styles/tools\";\nimport { useTranslation } from \"react-i18next\";\nimport { FlexContainer } from \"../../../Components/Shared\";\nimport noImageBlackBottle from \"Assets/images/bottle/bottle_default.png\"\nimport { AppState } from \"store\";\nimport { useSelector } from \"react-redux\";\nimport { formatCurrencyAmount } from \"Utils\";\nimport { getGlobalLanguage } from \"Utils/language.helper\";\nimport { Subtitle } from \"Components/Core\";\nimport { features } from \"Utils/features\";\n\ninterface WineListItem {\n\twine: Wine;\n}\n\nconst WineListItemContainer = styled.div`\n\t${flex(\"row\", \"flex-start\", \"center\", \"nowrap\")}\n\twidth: 100%;\n`;\n\nconst WineName = styled.h5`\n\tcolor: ${({ theme }) => theme.colors.black};\n\tfont-family: CenturyGothicBold;\n`;\n\nconst WinePrice = styled.h6`\n\tcolor: ${({ theme }) => theme.colors.light_black};\n`;\n\nconst WineBottleIcon = styled(FaWineBottle)`\n\tcolor: ${({ theme }) => theme.colors.light_black};\n\tmargin-top: 2%;\n`;\n\nconst WineGlassIcon = styled(FaWineGlassAlt)`\n\tcolor: ${({ theme }) => theme.colors.light_black};\n\tmargin-top: 2%;\n`;\n\nconst WineDescription = styled.div`\n\tmargin-top: 5px;\n\tcolor: ${({ theme }) => theme.colors.gray};\n`;\n\nconst BottleImageMini = styled.img`\n\theight: 100px;\n\tmargin-right: 20px;\n`;\n\nconst DEFAULT_CURRENCY_DIGITS = 2;\nconst NO_CURRENCY_DIGITS = 0;\n\nconst LabelDataContainer = styled.span``;\n\nconst WineListItem: React.FC<WineListItem> = ({ wine }: WineListItem) => {\n\tconst { i18n, t } = useTranslation();\n\tconst currentLang = getGlobalLanguage(i18n.language).toUpperCase();\n\tconst client = useSelector((state: AppState) => state.client.data);\n\tconst [imageLoaded, setImageLoaded] = useState(false);\n\tconst decimals = client?.client_settings.decimals === undefined? DEFAULT_CURRENCY_DIGITS: client?.client_settings.decimals? DEFAULT_CURRENCY_DIGITS : NO_CURRENCY_DIGITS;\n\n\tconst imgObject = new Image();\n\timgObject.onload = function(){\n\t\tsetImageLoaded(true);\n\t}\n\n\tconst image_url = `${URL_INTEGRAL}/wines/image/${client?.clientid}/${wine.image}`;\n\n\timgObject.src = image_url;\n\n\treturn (\n\t\t<WineListItemContainer className=\"wine-list-item-container\">\n\t\t\t{wine.image && (\n\t\t\t\t<BottleImageMini src={imageLoaded ? image_url : noImageBlackBottle} alt=\"bottleImage\" />\n\t\t\t)}\n\n\t\t\t<LabelDataContainer>\n\t\t\t\t{/* Wine name is now hardcoded to ES due every label has same name on differente languages. This prevent fails on new Portuguese language */}\n\t\t\t\t<WineName className=\"wine-name\">{wine[`nameES` as keyof typeof wine]}</WineName>\n\t\t\t\t<WineDescription>{`${wine.year ? `${wine.year} ,` : \"\"} ${\n\t\t\t\t\tcurrentLang === \"ES\"\n\t\t\t\t\t\t? wine.country\n\t\t\t\t\t\t: wine[`country${currentLang}` as keyof typeof wine] || t(\"common.noInfoAvailableInThisLanguage\")\n\t\t\t\t}`}</WineDescription>\n\t\t\t\t{wine.sellPrice !== null && wine.sellPrice > 0 && wine.size && wine.size > 0 && (\n\t\t\t\t\t<FlexContainer width=\"100%\" margin=\"0.5em 0\" align=\"center\" className=\"wine-bottle-info-row\">\n\t\t\t\t\t\t<FlexContainer margin=\"0\" align=\"center\" className=\"wine-bottle-price\">\n\t\t\t\t\t\t\t<WineBottleIcon size={12} />\n\t\t\t\t\t\t\t<WinePrice>{`${formatCurrencyAmount(wine.sellPrice, client?.main_currency, decimals)}`}</WinePrice>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t<FlexContainer margin=\"0 0 0 2rem\" align=\"center\" className=\"wine-bottle-size\">\n\t\t\t\t\t\t\t<Subtitle color=\"gray\" margin=\"0\" size=\"0.9rem\">{`${wine.size} ml.`}</Subtitle>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</FlexContainer>\n\t\t\t\t)}\n\t\t\t\t{wine.byGlass !== null && wine.glassPrice > 0 && wine.byGlass && wine.glasses_num > 0 && (\n\t\t\t\t\t<FlexContainer width=\"100%\" margin=\"0.5em 0\" align=\"center\" className=\"wine-glass-info-row\">\n\t\t\t\t\t\t<FlexContainer margin=\"0\" align=\"center\" className=\"wine-glass-price\">\n\t\t\t\t\t\t\t<WineGlassIcon size={12} />\n\t\t\t\t\t\t\t<WinePrice>{`${formatCurrencyAmount(wine.glassPrice, client?.main_currency, decimals)}`}</WinePrice>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t<FlexContainer margin=\"0 0 0 2rem\" align=\"center\" className=\"wine-bottle-size\">\n\t\t\t\t\t\t\t<Subtitle color=\"gray\" margin=\"0\" size=\"0.9rem\">{`${Math.round(\n\t\t\t\t\t\t\t\twine.size / wine.glasses_num\n\t\t\t\t\t\t\t)} ml.`}</Subtitle>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</FlexContainer>\n\t\t\t\t)}\n\t\t\t\t{features.cupFormats && wine.byGlass !== null && wine.glassPrice > 0 && wine.byGlass && wine.glasses_num > 0 && [{\n\t\t\tenabled: true,\n\t\t\tenabled_client: true,\n\t\t\tglassPrice: 439.78,\n\t\t\tglasses_num: 10,\n\t\t\tname: {\n\t\t\tid: \"663134fd647b5a6a954a34b1\",\n\t\t\tname: {\n\t\t\t\ten: \"Degustation Glass\",\n\t\t\t\tes: \"Copa degustacion\",\n\t\t\t\tpt: \"Copa degustaçao\"\n\t\t\t}\n\t\t\t},\n\t\t\tprofit: 60\n\t\t},{\n\t\t\tenabled: true,\n\t\t\tenabled_client: true,\n\t\t\tglassPrice: 550.39,\n\t\t\tglasses_num: 3,\n\t\t\tname: {\n\t\t\tid: \"663134fd647b5a6a954a35b2\",\n\t\t\tname: {\n\t\t\t\ten: \"Big Glass\",\n\t\t\t\tes: \"Copa Grande\",\n\t\t\t\tpt: \"Copa Grand\"\n\t\t\t}\n\t\t\t},\n\t\t\tprofit: 75\n\t\t}].map((cup: any, i: number) => (\n\t\t\t\t\t<FlexContainer width=\"100%\" margin=\"0.5em 0\" align=\"center\" className=\"wine-glass-info-row\" key={i}>\n\t\t\t\t\t\t<FlexContainer margin=\"0\" align=\"center\" className=\"wine-glass-price\">\n\t\t\t\t\t\t\t<WineGlassIcon size={12} />\n\t\t\t\t\t\t\t<WinePrice>{`${formatCurrencyAmount(cup.glassPrice, client?.main_currency, decimals)}`}</WinePrice>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t<FlexContainer margin=\"0 0 0 2rem\" align=\"center\" className=\"wine-bottle-size\">\n\t\t\t\t\t\t\t<Subtitle color=\"gray\" margin=\"0\" size=\"0.9rem\">{`${Math.round(\n\t\t\t\t\t\t\t\twine.size / cup.glasses_num\n\t\t\t\t\t\t\t)} ml.`}</Subtitle>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</FlexContainer>\n\t\t\t\t))}\n\t\t\t</LabelDataContainer>\n\t\t</WineListItemContainer>\n\t);\n};\n\nexport default WineListItem;","import React from \"react\";\nimport styled from \"styled-components\";\n\nimport { Page, PageHeader, Title, FlexContainer } from \"../../../../Components/Shared\";\nimport { ClientURL, Wine } from \"../../../../Types\";\nimport PageContent from \"../../../../Components/Shared/Page/PageContent\";\nimport { useTranslation } from \"react-i18next\";\nimport { flex } from \"../../../../Styles/tools\";\nimport WineBottle from \"Components/Shared/WineBottle/WineBottle\";\nimport { AppState } from \"store\";\nimport { useSelector } from \"react-redux\";\nimport { formatCurrencyAmount, getFlagCode } from \"Utils\";\nimport { getGlobalLanguage } from \"Utils/language.helper\";\nimport { Subtitle } from \"Components/Core\";\nimport { useParams } from \"react-router-dom\";\nimport { features } from \"Utils/features\";\n\ninterface DescriptionBox {\n\tborder?: boolean;\n}\n\n\n/** Export Manager table Configuration */\nconst configTable = [\n\t{flag:false, name:50, email:50, phoneflag: false},\n\t{flag:false, name:40, email:40, phoneflag: true, phone:20},\n\t{flag:true, name:50, email:45, phoneflag: false},\n\t{flag:true, name:40, email:35, phoneflag: true, phone:20 },\n];\n\nconst DescriptionBox = styled.div<DescriptionBox>`\n\t${flex(\"row\", \"space-between\", \"baseline\", \"nowrap\")}\n\tpadding: 10px 0;\n\twidth: 100%;\n\tborder-bottom: ${({ theme, border = true }) => border && `1px solid ${theme.colors.transparent}`};\n`;\n\nconst Label = styled.span<any>`\n\ttext-align: ${({ align = \"left\" }) => align};\n`;\n\nconst LabelDescription = styled.h5`\n\tcolor: ${({ theme }) => theme.colors.gray};\n\tfont-size: 0.8em;\n\tline-height: 1.6;\n`;\n\nconst HeaderTable = styled.div`\n\tborder-bottom: 1px solid #bcbcbc;\n\tdisplay: flex;\n\twidth: 100%;\n\tmargin-top: 10px;\n`;\n\nconst CellHeader = styled.div<{ Size?:number; }>`\n\tdisplay: inline-block;\n\twidth: ${props => props.Size}%;\n\tfont-size: 0.8rem;\n\tpadding-bottom:8px;\n\tfont-weight: bold;\n`;\n\nconst BodyTable = styled.div`\n\tborder-bottom: 1px solid #dedee0;\n\tdisplay: flex;\n\twidth: 100%;\n\tmargin-top: 10px;\n`;\n\nconst CellBody = styled.div<{ Size?:number; TextAlign?:string }>`\n\tdisplay: inline-block;\n\twidth: ${props => props.Size}%;\n\tfont-size: 0.7rem;\n\tpadding-bottom:8px;\n\tword-wrap: break-word;\n\ttext-align: ${props => props.TextAlign?props.TextAlign:\"left\"};\n`;\n\nconst CellFlag =styled.div`\n\tdisplay: inline-block;\n\twidth: 5%;\n\tfont-size: 0.7rem;\n\tpadding-bottom:8px;\n\tpadding-top: 1px\n`;\n\nconst configMangerTable = (managers: any[]) =>{\n\tlet phone = false;\n\tlet flag = false;\n\n\tmanagers.forEach((value, key) => {\n\t\tif(value.phone){phone = true;}\n\t\tif(value.country){flag = true;}\n\t});\n\n\tlet selection = configTable.find((value) => value.flag === flag && value.phoneflag === phone);\n\n\treturn selection;\n};\n\nconst DEFAULT_CURRENCY_DIGITS = 2;\nconst NO_CURRENCY_DIGITS = 0;\n\n\ninterface WineDetailPageProps {\n\tclose: () => void;\n\twine: Wine | null;\n\tidWine: string;\n}\nconst WineDetailPage: React.FC<WineDetailPageProps> = ({ wine: wineO, close, idWine }: WineDetailPageProps) => {\n\tconst { t, i18n } = useTranslation();\n\tconst { clientId } = useParams<ClientURL>();\n\tconst client = useSelector((state: AppState) => state.client?.data);\n\tconst currentLang = getGlobalLanguage(i18n.language).toUpperCase();\n\tconst decimals = client?.client_settings.decimals === undefined? DEFAULT_CURRENCY_DIGITS: client?.client_settings.decimals? DEFAULT_CURRENCY_DIGITS : NO_CURRENCY_DIGITS;\n\tconst wineData = {};\n\tlet table = {flag: false, name: 0, email: 0, phoneflag: false, phone: 0};\n\tif(wineData){  \n\t\t//@ts-ignore\n\t\ttable = configMangerTable(wineO?.exportManager || []);\n\t}\n\tlet wine: any = {...wineO};\n\tif(features.cupFormats && wineO){\n\t\twine.cup_format = [{\n\t\t\tenabled: true,\n\t\t\tenabled_client: true,\n\t\t\tglassPrice: 439.78,\n\t\t\tglasses_num: 10,\n\t\t\tname: {\n\t\t\tid: \"663134fd647b5a6a954a34b1\",\n\t\t\tname: {\n\t\t\t\ten: \"Degustation Glass\",\n\t\t\t\tes: \"Copa degustacion\",\n\t\t\t\tpt: \"Copa degustaçao\"\n\t\t\t}\n\t\t\t},\n\t\t\tprofit: 60\n\t\t},{\n\t\t\tenabled: true,\n\t\t\tenabled_client: true,\n\t\t\tglassPrice: 550.39,\n\t\t\tglasses_num: 3,\n\t\t\tname: {\n\t\t\tid: \"663134fd647b5a6a954a35b2\",\n\t\t\tname: {\n\t\t\t\ten: \"Big Glass\",\n\t\t\t\tes: \"Copa Grande\",\n\t\t\t\tpt: \"Copa Grand\"\n\t\t\t}\n\t\t\t},\n\t\t\tprofit: 75\n\t\t}];\n\t}\n\t  \n\treturn (\n\t\t<Page>\n\t\t\t<PageHeader\n\t\t\t\tcolor=\"black\"\n\t\t\t\ttextColor=\"white\"\n\t\t\t\tbackEnabled={true}\n\t\t\t\tbackText={t(\"common.return\")}\n\t\t\t\tcustomBackAction={close}\n\t\t\t/>\n\t\t\t{<PageContent className=\"wine-page-content\">\n\t\t\t\t<FlexContainer width=\"100%\" padding=\"0 20px 1em 20px\" direction=\"column\" justify=\"center\" align=\"center\">\n\t\t\t\t\t{/* Bottle Image */}\n\t\t\t\t\t<WineBottle clientId={clientId} wineImageName={wine ? wine.image : \"\"} />\n\n\t\t\t\t\t<Title className=\"bold\" color=\"black\" margin=\"1rem auto 2rem auto\">\n\t\t\t\t\t\t{wine ? wine[`name${currentLang}` as keyof typeof wine] || wine.nameES : t(\"common.loading\")}\n\t\t\t\t\t</Title>\n\t\t\t\t\t{/* Varietal */}\n\t\t\t\t\t<DescriptionBox className=\"description-box-variety\">\n\t\t\t\t\t\t<Label>{t(`wineDetail.variety`)}</Label>\n\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">\n\t\t\t\t\t\t\t{wine ? wine[`varietal${currentLang}` as keyof typeof wine] || t(\"common.noInfoAvailableInThisLanguage\") : \"---\"}\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t{/* Country */}\n\t\t\t\t\t<DescriptionBox className=\"description-box-country\">\n\t\t\t\t\t\t<Label>{t(`wineDetail.country`)}</Label>\n\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">\n\t\t\t\t\t\t\t{wine ? currentLang === \"ES\"\n\t\t\t\t\t\t\t\t? wine.country\n\t\t\t\t\t\t\t\t: wine[`country${currentLang}` as keyof typeof wine] || t(\"common.noInfoAvailableInThisLanguage\")\n\t\t\t\t\t\t\t\t: \"---\"}\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t{/* House */}\n\t\t\t\t\t<DescriptionBox className=\"description-box-house\">\n\t\t\t\t\t\t<Label>{t(`wineDetail.house`)}</Label>\n\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">\n\t\t\t\t\t\t\t{wine ? wine.house : \"---\"}\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t{/* Region */}\n\t\t\t\t\t<DescriptionBox className=\"description-box-region\">\n\t\t\t\t\t\t<Label>{t(`wineDetail.region`)}</Label>\n\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">\n\t\t\t\t\t\t\t{wine ? wine.region : \"---\"}\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t{/* Subregion */}\n\t\t\t\t\t<DescriptionBox className=\"description-box-subregion\">\n\t\t\t\t\t\t<Label>{t(`wineDetail.subregion`)}</Label>\n\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">\n\t\t\t\t\t\t\t{wine ? wine.subregion : \"---\"}\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t{/* Type */}\n\t\t\t\t\t<DescriptionBox className=\"description-box-type\">\n\t\t\t\t\t\t<Label>{t(`wineDetail.type`)}</Label>\n\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">\n\t\t\t\t\t\t\t{wine ? wine[`type${currentLang}` as keyof typeof wine] || t(\"common.noInfoAvailableInThisLanguage\") : \"---\"}\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t{/* Year */}\n\t\t\t\t\t<DescriptionBox className=\"description-box-year\">\n\t\t\t\t\t\t<Label>{t(`wineDetail.year`)}</Label>\n\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">\n\t\t\t\t\t\t\t{wine ? wine.year ? wine.year : t(\"common.noAvailable\") : \"---\"}\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t{/* Price by bottle */}\n\t\t\t\t\t{wine && wine.sellPrice !== null && wine.sellPrice !== 0 && (\n\t\t\t\t\t\t<DescriptionBox className=\"description-box-price\">\n\t\t\t\t\t\t\t<Label>{t(`wineDetail.priceBottle`)}</Label>\n\t\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">{`${formatCurrencyAmount(\n\t\t\t\t\t\t\t\twine.sellPrice,\n\t\t\t\t\t\t\t\tclient?.main_currency || \"MXN\",\n\t\t\t\t\t\t\t\tdecimals\n\t\t\t\t\t\t\t)}`}</Label>\n\t\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Bottle Size */}\n\t\t\t\t\t<DescriptionBox className=\"description-box-size\">\n\t\t\t\t\t\t<Label>{t(`wineDetail.size`)}</Label>\n\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">\n\t\t\t\t\t\t\t{wine ? wine.size : \"---\"} ml.\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t{/* Price by glass */}\n\t\t\t\t\t{wine && wine.byGlass && wine.glassPrice !== 0 && (!wine.cup_format || wine.cup_format.length === 0) && (\n\t\t\t\t\t\t<DescriptionBox className=\"description-box-price\">\n\t\t\t\t\t\t\t<Label>{t(`wineDetail.priceGlass`)}</Label>\n\t\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">{`${formatCurrencyAmount(\n\t\t\t\t\t\t\t\twine.glassPrice,\n\t\t\t\t\t\t\t\tclient?.main_currency || \"MXN\",\n\t\t\t\t\t\t\t\tdecimals\n\t\t\t\t\t\t\t)}`}</Label>\n\t\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t)}\n\t\t\t\t\t{/* Glass Size */}\n\t\t\t\t\t{wine && wine.byGlass && wine.glasses_num > 0 && (!wine.cup_format || wine.cup_format.length === 0) && (\n\t\t\t\t\t\t<DescriptionBox className=\"description-box-size\">\n\t\t\t\t\t\t\t<Label>{t(`wineDetail.glassSize`)}</Label>\n\t\t\t\t\t\t\t<Label className=\"bold\" align=\"right\">\n\t\t\t\t\t\t\t\t{Math.round(wine.size / wine.glasses_num)} ml.\n\t\t\t\t\t\t\t</Label>\n\t\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Cup Format */}\n\t\t\t\t\t{features.cupFormats && wine && wine.byGlass && wine.glassPrice !== 0 && wine.glasses_num > 0 && wine.cup_format &&  wine.cup_format.length > 0 && (\n\t\t\t\t\t\t<><Subtitle color=\"black\" margin=\"10px 0px 0px 0px \">\n\t\t\t\t\t\t\t{t(`wineDetail.cupFormats`)}\n\t\t\t\t\t\t</Subtitle>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<HeaderTable>\n\t\t\t\t\t\t\t{table?.flag?<CellFlag><span className={`fi`}></span></CellFlag>:\"\"}\n\t\t\t\t\t\t\t<CellHeader Size={33}>{t(`common.name`)}</CellHeader>\n\t\t\t\t\t\t\t<CellHeader Size={33} style={{textAlign: \"center\"}}>{t(`wineDetail.defaultGlass`)}</CellHeader>\n\t\t\t\t\t\t\t<CellHeader Size={33} style={{textAlign: \"right\"}}>{t(`wineDetail.priceGlass`)}</CellHeader>\n\t\t\t\t\t\t</HeaderTable>\n\n\t\t\t\t\t\t{wine.byGlass && wine.glassPrice !== 0 && wine.glasses_num > 0 && (\n\t\t\t\t\t\t\t<BodyTable key={-1}>\n\t\t\t\t\t\t\t\t<CellBody Size={33}>{`Copa predeterminada`}</CellBody>\n\t\t\t\t\t\t\t\t<CellBody Size={33} style={{textAlign: \"center\", fontFamily: \"CenturyGothicBold\"}}>{`${Math.round(wine.size / wine.glasses_num)} ml.`}</CellBody>\n\t\t\t\t\t\t\t\t<CellBody Size={33} style={{textAlign: \"right\", fontFamily: \"CenturyGothicBold\"}}>{`${formatCurrencyAmount(\n\t\t\t\t\t\t\t\t\twine.glassPrice,\n\t\t\t\t\t\t\t\t\tclient?.main_currency || \"MXN\",\n\t\t\t\t\t\t\t\t\tdecimals\n\t\t\t\t\t\t\t\t)}`}</CellBody>\n\t\t\t\t\t\t\t</BodyTable>\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t\n\t\t\t\t\t\t{wine.cup_format && wine.cup_format.map((value: any, key: number) => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<BodyTable key={key}>\n\t\t\t\t\t\t\t\t\t\t<CellBody Size={33}>{`${value.name.name[currentLang.toLowerCase()]}`}</CellBody>\n\t\t\t\t\t\t\t\t\t\t<CellBody Size={33} style={{textAlign: \"center\", fontFamily: \"CenturyGothicBold\"}}>{`${Math.round(wine.size / value.glasses_num)} ml.`}</CellBody>\n\t\t\t\t\t\t\t\t\t\t<CellBody Size={33} style={{textAlign: \"right\", fontFamily: \"CenturyGothicBold\"}}>{`${formatCurrencyAmount(\n\t\t\t\t\t\t\t\t\t\t\tvalue.glassPrice,\n\t\t\t\t\t\t\t\t\t\t\tclient?.main_currency || \"MXN\",\n\t\t\t\t\t\t\t\t\t\t\tdecimals\n\t\t\t\t\t\t\t\t\t\t)}`}</CellBody>\n\t\t\t\t\t\t\t\t\t</BodyTable>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t  \t})}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\n\t\t\t\t\t{/* Export Manager */}\n\t\t\t\t\t{wine && wine.exportManager && wine.exportManager.length > 0 && (\n\t\t\t\t\t\t<><Subtitle color=\"black\" margin=\"10px 0px 0px 0px \">\n\t\t\t\t\t\t\t{t(`wineDetail.export`)}\n\t\t\t\t\t\t</Subtitle>\n\t\t\t\t\t\t\n\t\t\t\t\t\t<HeaderTable>\n\t\t\t\t\t\t\t{table?.flag?<CellFlag><span className={`fi`}></span></CellFlag>:\"\"}\n\t\t\t\t\t\t\t<CellHeader Size={table?.name}>{t(`common.name`)}</CellHeader>\n\t\t\t\t\t\t\t<CellHeader Size={table?.email}>{t(`common.email`)}</CellHeader>\n\t\t\t\t\t\t\t{table?.phoneflag?<CellHeader Size={table?.phone}>{t(`common.phone`)}</CellHeader>:\"\"}\n\t\t\t\t\t\t</HeaderTable>\n\t\t\t\t\t\t\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\twine.exportManager.map((value: any, key: number) => {\n\t\t\t\t\t\t\t\tlet codeflag = getFlagCode(value.country);\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t<BodyTable key={key}>\n\t\t\t\t\t\t\t\t\t\t{table?.flag?<CellFlag><span className={`fi fi-${codeflag?.code}`}></span></CellFlag>:\"\"}\n\t\t\t\t\t\t\t\t\t\t<CellBody Size={table?.name}>{value.name}</CellBody>\n\t\t\t\t\t\t\t\t\t\t<CellBody Size={table?.email}>{value.email}</CellBody>\n\t\t\t\t\t\t\t\t\t\t{table?.phoneflag?<CellBody Size={table?.phone} TextAlign=\"right\">{value.phone}</CellBody>:\"\"}\n\t\t\t\t\t\t\t\t\t</BodyTable>\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t  \t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\t\n\t\t\t\t\t\n\n\t\t\t\t\t{/* Description */}\n\t\t\t\t\t\n\t\t\t\t\t<Subtitle color=\"black\" margin=\"10px 0px 0px 0px \">\n\t\t\t\t\t\t{t(`wineDetail.description`)}\n\t\t\t\t\t</Subtitle>\t\n\t\t\t\t\t<DescriptionBox className=\"description-box-description\" border={false}>\n\t\t\t\t\t\t<LabelDescription>\n\t\t\t\t\t\t\t{wine ? wine[`desc${currentLang.toUpperCase()}` as keyof typeof wine] ||\n\t\t\t\t\t\t\t\tt(\"common.noInfoAvailableInThisLanguage\")\n\t\t\t\t\t\t\t\t: \"---\"}\n\t\t\t\t\t\t</LabelDescription>\n\t\t\t\t\t</DescriptionBox>\n\t\t\t\t</FlexContainer>\n\t\t\t</PageContent>}\n\t\t</Page>\n\t);\n};\n\nexport default WineDetailPage;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { motion } from \"framer-motion\";\nimport styled from \"styled-components\";\n\nimport { flex } from \"Styles/tools\";\nimport WineDetailPage from \"./WineDetailPage\";\nimport { ClientURL, Wine } from \"Types\";\nimport { useParams, useLocation } from \"react-router-dom\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\n\ninterface IWineDetailModalProps {\n\tclose: () => void;\n}\n\nconst Overlay = styled(motion.div)`\n\tposition: absolute;\n\ttop: 0;\n\theight: 100%;\n\twidth: 100%;\n\tbackground-color: ${({ theme }) => theme.colors.white};\n\t${flex(\"column\", \"flex-start\", \"flex-start\", \"nowrap\")}\n`;\n\nconst WineDetailModal: React.FC<IWineDetailModalProps> = ({ close }: IWineDetailModalProps) => {\n\tconst { itemId, wineId } = useParams<ClientURL>();\n\tconst location = useLocation();\n\tconst wines = useSelector((store: AppState) => store.wines.data);\n\tlet wineID = itemId;\n\tif(location.pathname.includes(\"menu\"))\n\t\twineID = wineId;\n\n\tconst wine = findWineForDetails(wineID, wines);\n\n\treturn ReactDOM.createPortal(\n\t\t<>\n\t\t\t{wineID && (\n\t\t\t\t<Overlay\n\t\t\t\t\tclassName=\"overlay\"\n\t\t\t\t\tinitial={{ x: \"125vw\" }}\n\t\t\t\t\tanimate={{ x: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\texit={{ x: \"125vw\" }}\n\t\t\t\t>\n\t\t\t\t\t<WineDetailPage close={close} wine={wine} idWine={wineID} />\n\t\t\t\t</Overlay>\n\t\t\t)}\n\t\t</>,\n\t\tdocument.getElementById(\"portal\") as Element\n\t);\n\n\tfunction findWineForDetails(idWine: string | undefined, wines: Wine[] | null){\n\t\tif(idWine && wines && wines.length > 0)\n\t\t\treturn wines.find(wine => wine.id.toString() === idWine + \"\") ?? null;\n\t\treturn null;\n\t};\n};\n\nexport default WineDetailModal;\n","import axios from \"axios\";\nimport { AUTHORIZATION, URL_INTEGRAL } from \"env\";\n\nconst SERVICE_ID = \"@SelectionsService\";\nconst DEBUGGING = false;\n\nexport const fetchRestaurantSelections = async (clientName: string): Promise<any> => {\n\tDEBUGGING && console.groupCollapsed(`${SERVICE_ID} => fetchRestaurantSelections`);\n\tconst CONFIG = { headers: { authorization: `${AUTHORIZATION}` } };\n\n\ttry {\n\t\tconst response = await axios.get(`${URL_INTEGRAL}/v2/clients/selections/${clientName}`, CONFIG);\n\n\t\tDEBUGGING && console.log({ response });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn response.data;\n\t} catch (error) {\n\t\tDEBUGGING && console.error({ error });\n\t\tDEBUGGING && console.groupEnd();\n\n\t\treturn error;\n\t}\n};\n\nexport const SelectionsService = {\n\tfetchRestaurantSelections,\n};\n","import { createSlice, createAsyncThunk, PayloadAction } from \"@reduxjs/toolkit\";\nimport { HTTP_STATUS } from \"Types\";\nimport { SelectionsService } from \"../Services/Selections\";\nimport { ASYNC_FAILED, ASYNC_IDLE, ASYNC_LOADING, ASYNC_SUCCEEDED } from \"Utils/constants/thunks\";\n\nexport interface SelectionsState {\n\tdata: any;\n\terror: string | null;\n\tstatus: HTTP_STATUS;\n}\n\nconst InitSelectionsState: SelectionsState = {\n\tdata: [],\n\terror: null,\n\tstatus: ASYNC_IDLE,\n};\n\n/* GET SELECTIONS DATA THUNK  */\nexport const getRestaurantSelections = createAsyncThunk<any, any, {}>(\n\t\"selections/getSelectionsData\",\n\tasync (payload, { rejectWithValue }) => {\n\t\ttry {\n\t\t\tconst { clientName } = payload;\n\t\t\tconst response = await SelectionsService.fetchRestaurantSelections(clientName);\n\n\t\t\t// If process failed (and backend sent us 200 status), we throw an error to dispatch a rejected status on redux\n\t\t\tif (response.info && response.info === \"error\") throw response;\n\n\t\t\treturn response.selections;\n\t\t} catch (error) {\n\t\t\t// Dispatch rejected status on redux with error payload\n\t\t\treturn rejectWithValue({ message: (error as any).response.msg });\n\t\t}\n\t}\n);\n\n/* REDUCER CREATOR */\nconst SelectionsSlice = createSlice({\n\tname: \"selections\",\n\tinitialState: InitSelectionsState,\n\treducers: {},\n\textraReducers: {\n\t\t[getRestaurantSelections.pending.type]: (state): void => {\n\t\t\tstate.status = ASYNC_LOADING;\n\t\t},\n\t\t[getRestaurantSelections.fulfilled.type]: (state, action: PayloadAction<any>): void => {\n\t\t\tstate.status = ASYNC_SUCCEEDED;\n\t\t\tstate.data = action.payload.filter(({ enabled }: any) => enabled);\n\t\t},\n\t\t[getRestaurantSelections.rejected.type]: (state, action: PayloadAction<any>): void => {\n\t\t\tstate.status = ASYNC_FAILED;\n\t\t\tstate.error = `${action.payload ? action.payload.message : \"\"}`;\n\t\t},\n\t},\n});\n\n/* ACTION TYPES EXPORTS */\n// export const {} = SelectionsSlice.actions;\n\nexport default SelectionsSlice;\n","/* eslint-disable @typescript-eslint/camelcase */\nimport React, { useState, useEffect, useRef } from \"react\";\nimport styled from \"styled-components\";\nimport { motion } from \"framer-motion\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\nimport VizSensor from \"react-visibility-sensor\";\n\nimport { ClientURL, Wine } from \"Types\";\nimport CellarFilters from \"./CellarFilters\";\nimport { ListContainer, ListItem, FlexContainer, Loading } from \"Components/Shared\";\nimport { AppState } from \"store\";\nimport { useProcessQueryParams } from \"Hooks\";\nimport WineListItem from \"./WineListItem\";\nimport WineDetailModal from \"./WineDetailModal\";\nimport { setCellarFiltersActionCreator } from \"Reducers/Filters\";\nimport { resetPageActionCreator } from \"Reducers/Wines\";\nimport { useTranslation } from \"react-i18next\";\nimport { FilterTitle } from \"Components/Core\";\nimport { isUsingCellarFilters } from \"Utils\";\nimport { getCellarData } from \"Reducers/Categories\";\nimport { getRestaurantSelections } from \"Reducers/Selections\";\nimport { ASYNC_SUCCEEDED } from \"Utils/constants/thunks\";\n\nconst CellarHeader = styled.div`\n\tbackground-color: ${({ theme }): any => theme.colors.white};\n\tpadding: 10px 0;\n\tposition: absolute;\n\twidth: 100%;\n`;\n\nconst SectionTitle = styled.h1`\n\tpadding-left: 10px;\n\tmargin: 0.6em 0;\n\tfont-size: 2em;\n\ttext-transform: capitalize;\n`;\n\nconst SearchContainer = styled.div`\n\ttext-align: center;\n\tpadding-top: 5rem;\n`\n\nconst SearchInput = styled.input`\n\twidth: 94%;\n\tmargin: 0 auto;\n\tdisplay: inline-block;\n\theight: 30px;\n\tmargin-bottom: 10px;\n\tborder-color: #ddd;\n\tborder-style: solid;\n\tborder-radius: 5px;\n\tpadding-left: 10px;\n`\n\nconst WINES_STEPS_PAGE = 7;\n\nconst RestaurantCellar: React.FC = () => {\n\tconst { clientId, restaurantId, sectionId } = useParams<ClientURL>();\n\tconst history = useHistory();\n\tconst { t } = useTranslation();\n\n\tconst filters = useSelector((state: AppState) => state.filters.cellar);\n\tconst client = useSelector((state: AppState) => state.client.data);\n\tconst selections = useSelector((state: AppState) => state.selections);\n\tconst isUsingFilters = isUsingCellarFilters(filters);\n\tconst isCellarLoaded = useSelector((state: AppState) => state.wines.status === \"Ok\");\n\n\tconst [shownFilterBadge, setShownFilterBadge] = useState<boolean>(false);\n\tconst [winesToShow, setWinesToShow] = useState(WINES_STEPS_PAGE);\n\tconst { search } = useLocation(); // search contains optional query params\n\tconst dispatch = useDispatch();\n\tconst wines = useSelector((store: AppState) => store.wines);\n\tconst { homePage } = useProcessQueryParams();\n\tconst [searchInput, setSearchInput] = useState(\"\");\n\tconst idTimeout = useRef<number | null>(null);\n\n\tfunction onInputSearchTerm(e: any){\n\t\tconst {value} = e.target;\n\t\tif(idTimeout.current) clearTimeout(idTimeout.current)\n\n\t\tidTimeout.current = setTimeout(() => {\n\t\t\tsetSearchInput(value);\n\t\t}, 200)\n\t}\n\n\tfunction applySearchFilter(w: Wine){\n\t\tif(searchInput.trim() === \"\") return wines;\n\t\t\n\t\treturn w.nameEN.toLowerCase().includes(searchInput.toLowerCase().trim()) || w.nameES.toLowerCase().includes(searchInput.toLowerCase().trim()) || w.namePT.toLowerCase().includes(searchInput.toLowerCase().trim())\n\t}\n\n\tconst handleFilterChange = (name: string, value: string): void => {\n\t\tdispatch(resetPageActionCreator());\n\t\tdispatch(setCellarFiltersActionCreator({ ...filters, [name]: value }));\n\t};\n\n\tconst openWineDetail = (wine: Wine): void => {\n\t\tif (client?.client_type === \"hotel\") {\n\t\t\thistory.push(`/hotel/${clientId}/restaurant/${restaurantId}/${sectionId ?? homePage}/${wine.id}${search}`);\n\t\t} else {\n\t\t\thistory.push(`/restaurant/${clientId}/${sectionId ?? homePage}/${wine.id}${search}`);\n\t\t}\n\t};\n\n\tconst closeWineDetail = (): void => {\n\t\tif (client?.client_type === \"hotel\") {\n\t\t\thistory.replace(`/hotel/${clientId}/restaurant/${restaurantId}/${sectionId ?? homePage}`);\n\t\t} else {\n\t\t\thistory.replace(`/restaurant/${clientId}/${sectionId ?? homePage}`);\n\t\t}\n\t};\n\n\t// * STATE MANAGEMENT\n\n\tuseEffect(() => {\n\t\tsetShownFilterBadge(isUsingFilters);\n\t}, [isUsingFilters]);\n\n\tuseEffect(() => {\n\t\treturn (): void => {\n\t\t\tdispatch(resetPageActionCreator());\n\t\t};\n\t}, [dispatch]);\n\n\tuseEffect(() => {\n\t\tconst isUsingFilters = isUsingCellarFilters(filters);\n\n\t\tif (!client?.clientid) return;\n\t\tif (isUsingFilters) return;\n\n\t\tdispatch(getCellarData(client.clientid));\n\t}, [client, filters, dispatch]);\n\n\tuseEffect(() => {\n\t\t// If a previous successful request was made, we skip request again Selections\n\t\tif (selections.data.length > 0 || selections.status === ASYNC_SUCCEEDED) return;\n\n\t\t// If something fails, make a new request with \"clientId\" updated.\n\t\t// This may happen if on WelcomeView the request fails due \"clientId\" is client_id instead of client_name because of legacy old syntaxis\n\t\tif(selections.status === \"IDLE\"){\n\t\t\tdispatch(getRestaurantSelections({ clientName: clientId }));\n\t\t}\n\t}, [clientId, dispatch, selections.data.length, selections.status]);\n\n\t// * COMPONENT RENDERING\n\tif (isCellarLoaded && !wines.data?.length && !isUsingFilters) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\tstyle={{ height: \"100%\", flex: 1 }}\n\t\t\t\t>\n\t\t\t\t\t{/* No data found message */}\n\t\t\t\t\t<ListContainer padding=\"0.5rem\">\n\t\t\t\t\t\t<FlexContainer direction=\"column\" justify=\"center\" width=\"90vw\">\n\t\t\t\t\t\t\t<FilterTitle>{t(\"common.noDataFound\")}</FilterTitle>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</ListContainer>\n\t\t\t\t</motion.div>\n\t\t\t</>\n\t\t);\n\t}\n\n\tconst filteredWines = wines.data?.filter(applySearchFilter) ?? [];\n\n\treturn (\n\t\t<>\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\tstyle={{ flex: 1, height: \"86vh\" }}\n\t\t\t>\n\t\t\t\t<CellarHeader className=\"cellar-header\">\n\t\t\t\t\t<CellarFilters\n\t\t\t\t\t\tfiltersState={filters}\n\t\t\t\t\t\thandleFilterChange={handleFilterChange}\n\t\t\t\t\t\tloading={!isCellarLoaded}\n\t\t\t\t\t\tcustomWinesTotal={filteredWines.length}\n\t\t\t\t\t/>\n\t\t\t\t</CellarHeader>\n\n\t\t\t\t<SearchContainer style={{paddingTop: shownFilterBadge ? \"7rem\" : \"5rem\"}}>\n\t\t\t\t\t<SearchInput type=\"text\" onInput={onInputSearchTerm} placeholder={t(\"common.searchByName\")} />\n\t\t\t\t</SearchContainer>\n\n\t\t\t\t{wines.data ? (\n\t\t\t\t\t<>\n\t\t\t\t\t\t{/* No data found message */}\n\t\t\t\t\t\t{filteredWines.length === 0 ? (\n\t\t\t\t\t\t\t<ListContainer\n\t\t\t\t\t\t\t\tclassName={`no-labels-available`}\n\t\t\t\t\t\t\t\tpadding={`${shownFilterBadge ? \"0.25rem 0.5rem 0.5rem 0.5rem\" : \"0.25rem 0.5rem 0.5rem 0.5rem\"}`}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<FlexContainer direction=\"column\" justify=\"center\" width=\"90vw\">\n\t\t\t\t\t\t\t\t\t<SectionTitle>{t(\"common.noLabelsAvailable\")}</SectionTitle>\n\t\t\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t\t</ListContainer>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<ListContainer\n\t\t\t\t\t\t\t\t\tpadding={`${shownFilterBadge ? \"0.25rem 0.5rem 0.5rem 0.5rem\" : \"1.25rem 0.5rem 0.5rem 0.5rem\"}`}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{filteredWines &&\n\t\t\t\t\t\t\t\t\t\tfilteredWines.slice(0, winesToShow).map((wine: Wine, index: number) => (\n\t\t\t\t\t\t\t\t\t\t\t<ListItem onClick={(): void => openWineDetail(wine)} key={index}>\n\t\t\t\t\t\t\t\t\t\t\t\t<WineListItem wine={wine} />\n\t\t\t\t\t\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t<VizSensor\n\t\t\t\t\t\t\t\t\t\tpartialVisibility\n\t\t\t\t\t\t\t\t\t\tonChange={appendWines}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<FlexContainer direction=\"column\" justify=\"center\" width=\"100%\">\n\t\t\t\t\t\t\t\t\t\t\t<Loading show={isCellarLoaded && filteredWines.length - winesToShow >= 0} logo size=\"80px\" textSize=\"0.9rem\" padding=\"0.5rem 0\" />\n\t\t\t\t\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t\t\t\t\t</VizSensor>\n\t\t\t\t\t\t\t\t</ListContainer>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</>\n\t\t\t\t) : (\n\t\t\t\t\t<Loading show={!isCellarLoaded} logo={true} />\n\t\t\t\t)}\n\t\t\t</motion.div>\n\t\t\t<WineDetailModal close={closeWineDetail} />\n\t\t</>\n\t);\n\n\tfunction appendWines(isVisible: boolean): false | void{\n\t\tif(isVisible)\n\t\t\tsetWinesToShow(winesToShow + WINES_STEPS_PAGE);\n\t}\n};\n\nexport default RestaurantCellar;\n","import React, { useState, useEffect } from 'react';\nimport styled from 'styled-components';\n\nimport { Dish, Wine } from 'Types';\nimport { flex } from 'Styles/tools';\nimport { useTranslation } from 'react-i18next';\nimport { FlexContainer } from 'Components/Shared';\nimport { AppState } from 'store';\nimport { useSelector } from 'react-redux';\nimport { formatCurrencyAmount } from 'Utils';\nimport  { GiWineGlass } from 'react-icons/gi'\n\nconst DishListItemContainer = styled.div`\n  ${ flex('column', 'flex-start', 'baseline', 'nowrap')}\n  width: 100%;\n`;\n\nconst DishName = styled.h4`\n  color: ${({theme}) => theme.colors.black};\n`;\n\nconst DishPrice = styled.h5`\n  color: ${({theme}) => theme.colors.blue};\n`;\n\nconst DishPairing = styled.h5`\n  ${flex(\"row\", \"flex-start\", \"center\", \"nowrap\")}\n  color: ${({theme}) => theme.colors.red};\n  font-size: 0.9em;\n`;\n\nconst DishDescription = styled.h5`\n  color: ${({theme}) => theme.colors.gray};\n  font-size: 0.8em;\n`;\n\ninterface IDishListItem {\n  dish: Dish;\n};\n\nconst DEFAULT_CURRENCY_DIGITS = 2;\nconst NO_CURRENCY_DIGITS = 0;\n\nconst DishListItem: React.FC<IDishListItem> = ({dish}: IDishListItem) => {\n  const { t, i18n } = useTranslation();\n  const [currentLang, ] = i18n.language.split('-');\n  const wines = useSelector((store: AppState) => store.wines.data);\n  const client = useSelector((state: AppState) => state.client.data);\n  const [pairedWines, setPairedWines] = useState<Wine[]>([]);\n  const decimals = client?.client_settings.decimals === undefined? DEFAULT_CURRENCY_DIGITS: client?.client_settings.decimals? DEFAULT_CURRENCY_DIGITS : NO_CURRENCY_DIGITS;\n\n\n  useEffect(() => {\n    wines &&\n      setPairedWines(\n        wines.filter(\n          (wine: Wine) => !wine.outOfStock && dish.wines?.includes(wine.id)\n        )\n      );\n  }, [dish.wines, wines]);  \n\n  return (\n\t\t<DishListItemContainer className=\"dish-list-item-container\">\n\t\t\t{/* Title */}\n\t\t\t<DishName className=\"dish-name\">{dish[`dish_name_${currentLang}` as keyof typeof dish] || t(\"common.noInfoAvailableInThisLanguage\")}</DishName>\n\t\t\t{/* Description */}\n\t\t\t{dish[`dish_desc_${currentLang}` as keyof typeof dish] && (\n\t\t\t\t<FlexContainer width=\"100%\" margin=\"0.5em 0 0 0\" className=\"dish-description-row\">\n\t\t\t\t\t<FlexContainer className=\"dish-description\">\n\t\t\t\t\t\t<DishDescription>{`${dish[`dish_desc_${currentLang}` as keyof typeof dish]}`}</DishDescription>\n\t\t\t\t\t</FlexContainer>\n\t\t\t\t</FlexContainer>\n\t\t\t)}\n\t\t\t{/* Pairings */}\n\t\t\t<FlexContainer width=\"100%\" margin=\"0.5em 0\" className=\"dish-pairing-row\">\n\t\t\t\t<FlexContainer className=\"dish-pairing\">\n\t\t\t\t\t{pairedWines.length !== 0 && (\n\t\t\t\t\t\t<DishPairing>\n\t\t\t\t\t\t\t<GiWineGlass style={{ marginRight: \"2px\" }} />\n\t\t\t\t\t\t\t{`${t(\"menuView.pairingsWith\")} ${pairedWines.length} ${t(\"common.labels\")}`}\n\t\t\t\t\t\t</DishPairing>\n\t\t\t\t\t)}\n\t\t\t\t</FlexContainer>\n\t\t\t</FlexContainer>\n\t\t\t<FlexContainer width=\"100%\" margin=\"0 0 0.5em 0\" className=\"dish-price-row\">\n\t\t\t\t<FlexContainer margin=\"0 0.6em 0 0\" className=\"dish-price\">\n\t\t\t\t\t{dish.dish_price !== null && dish.dish_price !== 0 && (\n\t\t\t\t\t\t<DishPrice>{`${formatCurrencyAmount(dish.dish_price, client?.main_currency, decimals)}`}</DishPrice>\n\t\t\t\t\t)}\n\t\t\t\t</FlexContainer>\n\t\t\t</FlexContainer>\n\t\t</DishListItemContainer>\n\t);\n}\n\nexport default DishListItem\n","export const getDimensions = (element: HTMLElement) => {\n  if (!element) return;\n  const { height, top, right, bottom, left } = element.getBoundingClientRect();\n  const offsetTop = element.offsetTop;\n  const offsetBottom = offsetTop + height;\n\n  return {\n    height,\n    top,\n    right,\n    bottom,\n    left,\n    offsetTop,\n    offsetBottom,\n  }\n}\n\nexport const scrollTo = (element: HTMLElement, vertical: ScrollLogicalPosition = \"start\", horizontal: ScrollLogicalPosition = \"start\") => {\n  if (!element) return;\n  element.scrollIntoView({\n    behavior: \"smooth\",\n    block: vertical, // Vertical scroll position\n    inline: horizontal, // Horizontal scroll position\n  });\n}","/* eslint-disable @typescript-eslint/camelcase */\nimport React, { useEffect, useRef } from \"react\";\nimport styled from \"styled-components\";\nimport { Badge } from \"Components/Shared\";\nimport { flex } from \"Styles/tools\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\nimport { useTranslation } from \"react-i18next\";\nimport { HideHorizontalScrollBar } from \"Styles/mixins\";\nimport { scrollTo } from \"Utils/behaviour\";\nimport { getGlobalLanguage } from \"Utils/language.helper\";\n\nconst FilterContainer = styled.div`\n\tposition: relative;\n\tflex-shrink: 0;\n\tpadding: 0 16px;\n`;\n\nconst SelectedFiltersContainer = styled.div`\n\toverflow-x: scroll;\n\twidth: 100%;\n\tflex-shrink: 0;\n\theight: 100%;\n\tflex: 0;\n\t${flex(\"row\", \"flex-start\", \"center\", \"nowrap\")};\n\t${HideHorizontalScrollBar()}\n`;\n\ninterface MenuFiltersProps {\n\tselected: string | number;\n\tcategoriesRefs: any;\n\toptions: any;\n}\n\ninterface Badge {\n\t_id: number;\n\tname_en: string;\n\tname_es: string;\n\tname_pt?: string;\n\torder: number;\n\tsuperId?: number;\n}\n\nconst HORIZONTAL_SCROLL_DEBOUNCE = 1_000; // ms\n\nconst MenuFilters: React.FC<MenuFiltersProps> = ({ selected, categoriesRefs, options }) => {\n\t// * LOCAL HELPERS\n\tconst { i18n, t } = useTranslation();\n\tconst currentLang = getGlobalLanguage(i18n.language).toUpperCase();\n\t// * REDUX STATE\n\tconst showGlobalSelfCategories = useSelector(\n\t\t(store: AppState) => store.client.data?.client_settings?.show_global_selfcategories\n\t);\n\t// * LOCAL STATE\n\tconst badgesRef = useRef<any>([]);\n\n\t// * LOCAL FUNCTIONS\n\tconst badges: Badge[] = options.flat().map((option: any) => {\n\t\tif (showGlobalSelfCategories) {\n\t\t\treturn {\n\t\t\t\t...option.category,\n\t\t\t\tname_en: option.category.name_en || t(\"common.noInfoAvailableInThisLanguage\"),\n\t\t\t\tname_es: option.category.name_es || t(\"common.noInfoAvailableInThisLanguage\"),\n\t\t\t\tname_pt: option.category.name_pt || t(\"common.noInfoAvailableInThisLanguage\"),\n\t\t\t\t_id: option.category.Id,\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\t...option.selfcategory,\n\t\t\tname_en: option.selfcategory.nameEN || t(\"common.noInfoAvailableInThisLanguage\"),\n\t\t\tname_es: option.selfcategory.nameES || t(\"common.noInfoAvailableInThisLanguage\"),\n\t\t\tname_pt: option.selfcategory.namePT || t(\"common.noInfoAvailableInThisLanguage\"),\n\t\t\t_id: option.selfcategory.id,\n\t\t};\n\t});\n\n\tconst handleClick = (idx: number): void => {\n\t\tscrollTo(categoriesRefs.current[idx]);\n\t};\n\n\t// * STATE MANAGEMENT\n\tuseEffect(() => {\n\t\tif (!badgesRef || !selected) return;\n\n\t\tconst badgesRefLen = badgesRef.current.length;\n\t\tfor (let idx = 0; idx < badgesRefLen; idx++) {\n\t\t\tconst categoryRef = badgesRef.current[idx];\n\t\t\tif (!categoryRef) continue; // Validate if category ref is still existing to prevent app crash (when changing schedule shift)\n\t\t\tif (Number(categoryRef.id) !== selected) continue;\n\t\t\tsetTimeout(() => scrollTo(categoryRef), HORIZONTAL_SCROLL_DEBOUNCE); // set timeout as debounce to scroll selected badge at start (left)\n\t\t}\n\t}, [selected]);\n\n\treturn (\n\t\t<>\n\t\t\t<FilterContainer className=\"filter-container\">\n\t\t\t\t<SelectedFiltersContainer className=\"selected-filters-container\">\n\t\t\t\t\t{badges && badges.length\n\t\t\t\t\t\t? badges.map((category: Badge, categoryIdx: number) => (\n\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\tmargin=\"0 1rem 0 0\"\n\t\t\t\t\t\t\t\t\tcolor={selected === category._id ? \"black\" : \"transparent\"}\n\t\t\t\t\t\t\t\t\ttextColor={selected === category._id ? \"white\" : \"black\"}\n\t\t\t\t\t\t\t\t\tonClick={(): void | null => (selected !== category._id ? handleClick(categoryIdx) : null)}\n\t\t\t\t\t\t\t\t\tkey={category._id}\n\t\t\t\t\t\t\t\t\tid={`${category._id}`}\n\t\t\t\t\t\t\t\t\tref={(node: any): void => (badgesRef.current[categoryIdx] = node)}>\n\t\t\t\t\t\t\t\t\t<span style={{ whiteSpace: \"pre\" }}>\n\t\t\t\t\t\t\t\t\t\t{category[`name_${currentLang.toLocaleLowerCase()}` as keyof typeof category]}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t  ))\n\t\t\t\t\t\t: null}\n\t\t\t\t</SelectedFiltersContainer>\n\t\t\t</FilterContainer>\n\t\t</>\n\t);\n};\n\nexport default MenuFilters;\n","import React, { useEffect } from \"react\";\n\nimport { ClientURL, Dish } from \"Types\";\nimport { useTranslation } from \"react-i18next\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\nimport { Wine } from \"Types\";\nimport WineDetailModal from \"Pages/RestaurantView/RestaurantCellar/WineDetailModal\";\nimport PageContent from \"Components/Shared/Page/PageContent\";\nimport { Description } from \"Components/Core\";\nimport { Page, PageHeader, Title, FlexContainer, ListContainer, ListItem, Image } from \"Components/Shared\";\n\nimport DEFAULT_IMAGE_FOOD from \"Assets/icons/food.png\";\nimport styled from \"styled-components\";\nimport { flex } from \"Styles/tools\";\nimport { formatCurrencyAmount } from \"Utils\";\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\n\ninterface DishDetailPageProps {\n\tsetShowWine: (showWine: boolean) => void;\n\tclose: () => void;\n\tdish: Dish | null;\n}\n\nconst DescriptionBox = styled.div`\n\t${flex(\"row\", \"space-between\", \"baseline\", \"nowrap\")}\n\tpadding: 10px 0;\n\twidth: 100%;\n\tborder-bottom: 1px solid ${({ theme }) => theme.colors.transparent};\n`;\nconst DEFAULT_CURRENCY_DIGITS = 2;\nconst NO_CURRENCY_DIGITS = 0;\n\nconst Label = styled.span``;\n\nconst DishDetailPage: React.FC<DishDetailPageProps> = ({ setShowWine, dish, close }: DishDetailPageProps) => {\n\tconst { t, i18n } = useTranslation();\n\tconst history = useHistory();\n\tconst { clientId, restaurantId, sectionId, itemId, wineId } = useParams<ClientURL>();\n\tconst { search } = useLocation(); // search contains optional query params\n\n\tconst wines = useSelector((store: AppState) => store.wines.data);\n\tconst client = useSelector((state: AppState) => state.client.data);\n\n\tconst [currentLang] = i18n.language.split(\"-\");\n\tconst decimals = client?.client_settings.decimals === undefined? DEFAULT_CURRENCY_DIGITS: client?.client_settings.decimals? DEFAULT_CURRENCY_DIGITS : NO_CURRENCY_DIGITS;\n\n\n\tconst openWineDetail = (wine: Wine) => {\n\t\tsetShowWine(true);\n\t\tif (client?.client_type === \"hotel\") {\n\t\t\thistory.push(`/hotel/${clientId}/restaurant/${restaurantId}/${sectionId}/${itemId}/${wine.id}${search}`);\n\t\t} else {\n\t\t\thistory.push(`/restaurant/${clientId}/${sectionId}/${itemId}/${wine.id}${search}`);\n\t\t}\n\t};\n\n\tconst closeWineDetail = () => {\n\t\tsetShowWine(false);\n\t\tif (client?.client_type === \"hotel\") {\n\t\t\thistory.replace(`/hotel/${clientId}/restaurant/${restaurantId}/${sectionId}/${itemId}`);\n\t\t} else {\n\t\t\thistory.replace(`/restaurant/${clientId}/${sectionId}/${itemId}`);\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tsetShowWine(wineId ? true : false);\n\t}, [setShowWine, wineId]);\n\n\treturn (\n\t\t<>\n\t\t\t<Page>\n\t\t\t\t<PageHeader\n\t\t\t\t\tcolor=\"black\"\n\t\t\t\t\ttextColor=\"white\"\n\t\t\t\t\tbackEnabled={true}\n\t\t\t\t\tbackText={t(\"common.return\")}\n\t\t\t\t\tcustomBackAction={close}\n\t\t\t\t/>\n\t\t\t\t<PageContent className=\"page-content\">\n\t\t\t\t\t{/* Dish detail description */}\n\t\t\t\t\t<FlexContainer\n\t\t\t\t\t\twidth=\"100%\"\n\t\t\t\t\t\tpadding={dish?.dish_img ? \"0 1em\" : \"2em 1em\"}\n\t\t\t\t\t\tdirection=\"column\"\n\t\t\t\t\t\tjustify=\"center\"\n\t\t\t\t\t\talign=\"center\">\n\t\t\t\t\t\t{/* Image */}\n\t\t\t\t\t\t{dish?.dish_img ? (\n\t\t\t\t\t\t\t<Image id={dish.id} srcImg={dish.dish_img} width=\"45vw\" height=\"28vw\" />\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Image id={\"def\"} srcImg={DEFAULT_IMAGE_FOOD} height=\"15vh\" width=\"15vw\" />\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{/* Name */}\n\t\t\t\t\t\t<Title className=\"bold\" color=\"black\" margin=\"0.5em auto\">\n\t\t\t\t\t\t\t{dish ? dish[`dish_name_${currentLang}` as keyof typeof dish] || t(\"common.noInfoAvailableInThisLanguage\") : \"--\"}\n\t\t\t\t\t\t</Title>\n\t\t\t\t\t\t{/* Detail description */}\n\t\t\t\t\t\t<Description color=\"gray\" margin=\"1rem 0 2rem 0\">\n\t\t\t\t\t\t\t{dish ? dish[`dish_desc_${currentLang}` as keyof typeof dish] || t(\"common.noInfoAvailableInThisLanguage\") : \"--\"}\n\t\t\t\t\t\t</Description>\n\t\t\t\t\t\t{/* Price */}\n\t\t\t\t\t\t{dish?.dish_price !== null && dish?.dish_price !== 0 && (\n\t\t\t\t\t\t\t<DescriptionBox className=\"description-box-price\">\n\t\t\t\t\t\t\t\t<Label>{t(`drinkDetail.price`)}</Label>\n\t\t\t\t\t\t\t\t<Label className=\"bold\">{`${dish ? formatCurrencyAmount(dish.dish_price, client?.main_currency, decimals) : \"0.00\"}`}\n\t\t\t\t\t\t\t\t</Label>\n\t\t\t\t\t\t\t</DescriptionBox>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</FlexContainer>\n\n\t\t\t\t\t{/* Dish pairings */}\n\t\t\t\t\t<FlexContainer width=\"100%\" padding=\"1rem 0\" direction=\"column\" justify=\"center\" align=\"center\">\n\t\t\t\t\t\t<Title className=\"bold\" color=\"black\" margin=\"0.5em auto\">\n\t\t\t\t\t\t\t{t(\"menuView.pairings\")}\n\t\t\t\t\t\t</Title>\n\t\t\t\t\t\t{/* Loader for fetching data */}\n\t\t\t\t\t\t{!wines && <Description>{`${t(\"common.loading\")}...`}</Description>}\n\t\t\t\t\t\t{/* Pairings list result or without pairings message */}\n\t\t\t\t\t\t{dish?.wines.length ? (\n\t\t\t\t\t\t\t<ListContainer className=\"restaurant-list\" height=\"55vh\">\n\t\t\t\t\t\t\t\t{dish.wines.map((pairedWine: number, index: number) => {\n\t\t\t\t\t\t\t\t\tconst matchedWine: Wine | undefined = wines?.find(wine => wine.id === pairedWine && !wine.outOfStock);\n\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\tmatchedWine && (\n\t\t\t\t\t\t\t\t\t\t\t<ListItem onClick={() => openWineDetail(matchedWine)} key={index}>\n\t\t\t\t\t\t\t\t\t\t\t\t{/* Wine name is now hardcoded to ES due every label has same name on differente languages. This prevent fails on new Portuguese language */}\n\t\t\t\t\t\t\t\t\t\t\t\t<h5>{matchedWine[`nameES` as keyof typeof matchedWine]}</h5>\n\t\t\t\t\t\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t</ListContainer>\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\t<Description>{t(\"menuView.withoutPairings\")}</Description>\n\t\t\t\t\t\t)}\n\t\t\t\t\t</FlexContainer>\n\t\t\t\t</PageContent>\n\t\t\t</Page>\n\n\t\t\t{/* Auxiliar wine detail component to show paired wine data */}\n\t\t\t<WineDetailModal close={closeWineDetail} />\n\t\t</>\n\t);\n};\n\nexport default DishDetailPage;\n","import React, { useState } from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { motion } from \"framer-motion\";\nimport styled from \"styled-components\";\n\nimport { flex } from \"Styles/tools\";\nimport DishDetailPage from \"./DishDetailPage\";\nimport { ClientURL, Dish } from \"Types\";\nimport { useParams } from \"react-router-dom\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\n\ninterface DishDetailModalProps {\n\tclose: () => void;\n}\n\ninterface OverlayProps {\n\tshowWine: boolean;\n}\n\nconst Overlay = styled(motion.div)<OverlayProps>`\n\tposition: absolute;\n\ttop: 0;\n\theight: 100vh;\n\twidth: 100%;\n\tbackground-color: ${({ theme }) => theme.colors.white};\n\t${flex(\"column\", \"flex-start\", \"flex-start\", \"nowrap\")}\n\tdisplay: ${({ showWine = false }) => (showWine ? \"none\" : \"block\")};\n`;\n\nconst DishDetailModal: React.FC<DishDetailModalProps> = ({ close }: DishDetailModalProps) => {\n\tconst { itemId, wineId } = useParams<ClientURL>();\n\tconst dishes = useSelector((store: AppState) => store.dishes);\n\tconst [showWine, setShowWine] = useState<boolean>(false);\n\n\tconst dishSelected = findDishForDetails(itemId, dishes.data ?? []);\n\n\treturn ReactDOM.createPortal(\n\t\t<>\n\t\t\t{itemId && (\n\t\t\t\t<Overlay\n\t\t\t\t\tclassName=\"overlay\"\n\t\t\t\t\tinitial={{ x: \"125vw\" }}\n\t\t\t\t\tanimate={{ x: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\texit={{ x: \"125vw\" }}\n\t\t\t\t\tshowWine={Boolean(showWine || wineId)}\n\t\t\t\t>\n\t\t\t\t\t<DishDetailPage setShowWine={setShowWine} close={close} dish={dishSelected} />\n\t\t\t\t</Overlay>\n\t\t\t)}\n\t\t</>,\n\t\tdocument.getElementById(\"portal\") as Element\n\t);\n\n\tfunction findDishForDetails(dishId: string | undefined, dishes: Dish[] | null = []){\n\t\tif(dishId && dishes && dishes.length > 0)\n\t\t\treturn dishes.find(dish => dish.id.toString() === dishId + \"\") ?? null;\n\t\treturn null;\n\t};\n};\n\nexport default DishDetailModal;\n","/* eslint-disable @typescript-eslint/camelcase */\nimport React, { useEffect, useState } from 'react';\nimport { useTranslation } from 'react-i18next';\nimport styled from 'styled-components';\nimport { flex } from 'Styles/tools';\nimport { ScheduleOptions } from 'Types';\nimport { HideHorizontalScrollBar } from 'Styles/mixins';\nimport { useSelector } from 'react-redux';\nimport { AppState } from 'store';\n\ninterface ScheduleFiltersProps {\n\thandleFilterChange: (id: ScheduleOptions) => void;\n\tselected: string | number;\n}\n\nconst FilterContainer = styled.div`\n\t${flex('row', 'space-evenly', 'center', 'nowrap')};\n\toverflow-x: scroll;\n\tflex-shrink: 0;\n\tflex: 0;\n\tmargin: 2px 16px 10px 16px;\n\tborder-radius: ${({ theme }): any => theme.rounded};\n\tbackground-color: ${({ theme, color = 'transparent' }): any => theme.colors[color]};\n\t${HideHorizontalScrollBar()}\n`;\n\nconst FilterOption = styled.span<any>`\n\tbackground-color: ${({ theme, selected }): any => selected && theme.colors.black};\n\tcolor: ${({ theme, selected }): any => (selected ? theme.colors.white : theme.colors.black)};\n\tborder-radius: ${({ theme, selected }): any => selected && theme.rounded};\n\topacity: ${({ available }): any => (available ? '1' : '0.25')};\n\tpadding: 10px 0;\n\twidth: 100%;\n\ttext-align: center;\n\tfont-size: 0.8rem;\n`;\n\nconst SCHEDULES_OPTIONS = [\n\t{ id: 'is_breakfast', label: 'schedules.is_breakfast' },\n\t{ id: 'is_lunch', label: 'schedules.is_lunch' },\n\t{ id: 'is_dinner', label: 'schedules.is_dinner' },\n];\n\nconst ScheduleFilters: React.FC<ScheduleFiltersProps> = ({ selected, handleFilterChange }) => {\n\t// * REDUX STATE\n\tconst dishes = useSelector((store: AppState) => store.dishes.data);\n\n\t// * LOCAL STATE\n\tconst [shiftAvailability, setShiftAvailability] = useState<any>({\n\t\tis_breakfast_available: false,\n\t\tis_lunch_available: false,\n\t\tis_dinner_available: false,\n\t});\n\n\t// * LOCAL HELPERS\n\tconst { t } = useTranslation();\n\n\t// * STATE MANAGEMENT\n\tuseEffect(() => {\n\t\tif (!dishes?.length) return;\n\n\t\tconst is_breakfast_available = dishes.some(({ is_breakfast }) => is_breakfast);\n\t\tconst is_lunch_available = dishes.some(({ is_lunch }) => is_lunch);\n\t\tconst is_dinner_available = dishes.some(({ is_dinner }) => is_dinner);\n\n\t\tsetShiftAvailability({ is_breakfast_available, is_lunch_available, is_dinner_available });\n\t}, [dishes]);\n\n\treturn (\n\t\t<FilterContainer className=\"schedule-filter-container\">\n\t\t\t{SCHEDULES_OPTIONS.map(option => {\n\t\t\t\tconst isOptionAvailable = shiftAvailability[`${option.id}_available`];\n\t\t\t\tconst isCurrentOptSelected = selected === option.id;\n\n\t\t\t\treturn (\n\t\t\t\t\t<FilterOption\n\t\t\t\t\t\tselected={isCurrentOptSelected}\n\t\t\t\t\t\tkey={option.id}\n\t\t\t\t\t\tavailable={isOptionAvailable}\n\t\t\t\t\t\tonClick={(): void | null =>\n\t\t\t\t\t\t\t!isCurrentOptSelected && isOptionAvailable ? handleFilterChange(option.id as ScheduleOptions) : null\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{t(`${option.label}`)}\n\t\t\t\t\t</FilterOption>\n\t\t\t\t);\n\t\t\t})}\n\t\t</FilterContainer>\n\t);\n};\n\nexport default ScheduleFilters;\n","/* eslint-disable @typescript-eslint/camelcase */\nimport React, { useState, useEffect, useRef, useCallback } from 'react';\nimport styled from 'styled-components';\nimport { useHistory, useLocation, useParams } from 'react-router-dom';\nimport { useSelector, useDispatch } from 'react-redux';\nimport VizSensor from 'react-visibility-sensor';\nimport _ from 'lodash';\n\nimport { AppState } from 'store';\nimport { ClientURL, Dish, GlobalCategory, DishSelfCategory, ScheduleOptions, ISelfCategory } from 'Types';\nimport { useFetchDishes } from 'Hooks';\nimport { setMenuFiltersActionCreator, setScheduleFiltersActionCreator } from 'Reducers/Filters';\nimport { motion } from 'framer-motion';\nimport { ListItem, ListContainer, FlexContainer, Loading, Logo } from 'Components/Shared';\nimport DishListItem from './DishListItem';\nimport MenuFilters from './MenuFilters';\nimport DishDetailModal from './DishDetailModal';\nimport { useTranslation } from 'react-i18next';\nimport { FilterSubtitle, FilterTitle, Subtitle } from 'Components/Core';\nimport { flex } from 'Styles/tools';\nimport { ScheduleFilters } from './ScheduleFilters';\nimport { getDimensions } from 'Utils/behaviour';\nimport { getGlobalLanguage } from 'Utils/language.helper';\nimport { filterDishesByRestaurant } from 'Utils';\n\nconst MenuHeader = styled.div<any>`\n\tbackground-color: ${({ theme }): any => theme.colors.white};\n\tpadding: 5px 0;\n\theight: ${({ height = '20%' }): any => height};\n\twidth: 100%;\n`;\n\nconst SelfCategoriesContainer = styled.div`\n\tflex-shrink: 0;\n`;\n\nconst TitleContainer = styled.div`\n\t${flex('row', 'space-between', 'center', 'nowrap')}\n`;\n\nconst SCHEDULES_OPTIONS = [\n\t{ id: 'is_breakfast', label: 'schedules.is_breakfast' },\n\t{ id: 'is_lunch', label: 'schedules.is_lunch' },\n\t{ id: 'is_dinner', label: 'schedules.is_dinner' },\n];\n\ninterface ListDish {\n\tcategory?: GlobalCategory;\n\tselfcategories: ISelfCategory[];\n\tdishes: Dish[];\n}\n\nconst SENSOR_INDICATOR_OFFSET = 100; // In px units\n\nconst RestaurantMenu: React.FC = () => {\n\t// * LOCAL HELPERS\n\tconst { clientId, restaurantId, sectionId } = useParams<ClientURL>();\n\tconst { i18n, t } = useTranslation();\n\tconst { search } = useLocation(); // search contains optional query params\n\tconst history = useHistory();\n\tconst dispatch = useDispatch();\n\n\t// * REDUX STATE\n\tconst showGlobalSelfCategories = useSelector(\n\t\t(store: AppState) => store.client.data?.client_settings?.show_global_selfcategories\n\t);\n\tconst dishGlobalCategory = useSelector((store: AppState) => store.categories.dishGlobalCategory);\n\tconst categories = useSelector((store: AppState) => store.categories.dish);\n\tconst filters = useSelector((state: AppState) => state.filters.menu);\n\tconst client = useSelector((state: AppState) => state.client.data);\n\n\t// * LOCAL STATE\n\tconst globalCategoriesOrder: number[] = [1, 3, 4, 6, 5, 2]; // ! APERITIVO (1), ENTRADA (3), SOPA (4), PRIMER TIEMPO (6), PLATO FUERTE (5), POSTRE (2)\n\tlet selfcategoriesOrder: any = []; \n\tif(dishGlobalCategory){\n\t\tlet len: number =  dishGlobalCategory!.length;\n\t\tif(len > 0){\n\t\t\tselfcategoriesOrder = globalCategoriesOrder.map(id => dishGlobalCategory?.find(item => item.Id === id));\n\t\t}\n\t}\n\tconst [filteredDishesByShift, setFilteredDishesByShift] = useState<Array<Dish>>([]);\n\tconst [emptyShifts, setEmptyShifts] = useState<Array<string>>([]);\n\tconst [processedLabels, setProcessedLabels] = useState<any>({\n\t\tgroupedDishesByCat: [],\n\t\tgroupedDishesBySelfcat: [],\n\t\tlocalProcessingDishes: true,\n\t});\n\n\tconst [usedDishGlobalCategories, setUsedDishGlobalCategories] = useState<GlobalCategory[] | null>(null);\n\tconst [usedDishSelfCategories, setUsedDishSelfCategories] = useState<DishSelfCategory[] | null>(null);\n\tconst [selectedSchedule, setSelectedSchedule] = useState<ScheduleOptions>('is_lunch'); // TODO: make this dynamically when schedules/shifts working (from backoffice)\n\tconst [visibleSection, setVisibleSection] = useState();\n\tconst currentLang = getGlobalLanguage(i18n.language).toUpperCase();\n\tconst categoriesRefs = useRef<any>([]);\n\tconst menuRef = useRef<any>();\n\tconst listItemsRef = useRef<any>();\n\n\tconst { dishes, fetchingDishes, hasMoreDishes } = useFetchDishes(client ? client.id : '', 1, filters, restaurantId, true);\n\n\tconst handleFilterChange = useCallback(\n\t\t(id: string | number) => dispatch(setMenuFiltersActionCreator({ selfCategory: Number(id) })),\n\t\t[dispatch]\n\t);\n\n\tconst openDishDetail = (dish: Dish): void => {\n\t\tif (client?.client_type === 'hotel') {\n\t\t\thistory.push(`/hotel/${clientId}/restaurant/${restaurantId}/${sectionId}/${dish.id}${search}`);\n\t\t} else {\n\t\t\thistory.push(`/restaurant/${clientId}/${sectionId}/${dish.id}${search}`);\n\t\t}\n\t};\n\n\tconst closeDishDetail = (): void => {\n\t\tif (client?.client_type === 'hotel') {\n\t\t\thistory.replace(`/hotel/${clientId}/restaurant/${restaurantId}/${sectionId}`);\n\t\t} else {\n\t\t\thistory.replace(`/restaurant/${clientId}/${sectionId}`);\n\t\t}\n\t};\n\n\tconst handleScheduleChange = (id: ScheduleOptions): void => {\n\t\tsetSelectedSchedule(id);\n\t};\n\n\tuseEffect(() => {\n\t\t// If no empty skip\n\t\tif (!emptyShifts.includes(selectedSchedule)) return;\n\n\t\t// Otherwise look for other shift\n\t\tconst availableOptions = SCHEDULES_OPTIONS.filter(({ id }: any) => !emptyShifts.includes(id));\n\t\tif (!availableOptions.length) return;\n\n\t\tsetSelectedSchedule(availableOptions[0].id as ScheduleOptions);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [emptyShifts]);\n\n\tuseEffect(() => {\n\t\t// * Apply restaurant filters to dishes (only for client type Hotel)\n\t\tconst filteredDishesByRestaurant = filterDishesByRestaurant(\n\t\t\tclient?.client_type ?? '',\n\t\t\trestaurantId,\n\t\t\tdishes.data ?? []\n\t\t);\n\n\t\t// * Apply schedule/shift filters to dishes (breakfast, lunch or dinner)\n\t\tconst filteredDishesByShift = filteredDishesByRestaurant\n\t\t\t? filteredDishesByRestaurant.filter(dish => dish[selectedSchedule])\n\t\t\t: [];\n\n\t\tsetFilteredDishesByShift(filteredDishesByShift);\n\n\t\t// Only if there are actually dishes data, we define if current shift is empty to change it\n\t\tif (dishes.data && dishes.data.length > 0 && filteredDishesByShift.length === 0) {\n\t\t\tsetEmptyShifts(prev => [...prev, selectedSchedule]);\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [client, dishes.data, restaurantId, selectedSchedule]);\n\n\tuseEffect(() => {\n\t\t// ! PROCESSING TO GROUP DISHES BY GLOBAL CATEGORY\n\t\t// * Group dishes by selfcategory looping throw ordered dish global categories (appetizer, entree, soup, first course, main course, dessert)\n\t\tconst groupedByCatDishes =\n\t\t\tdishGlobalCategory?.map(({ Id }) => filteredDishesByShift.filter(({ categories }) => categories[0] === Id)) ?? [];\n\n\t\t// * Now we need to iterate over grouped dishes and search its selfcategories to order them by \"order\" field\n\t\tconst orderedGroupedCatDishes = groupedByCatDishes.map(group => {\n\t\t\tif (!group.length) return [];\n\n\t\t\t// Generate a new mapped data for every selfcategory, { <selfcat_id>: [dishes] }\n\t\t\tconst selfcategories: any = {};\n\t\t\tfor (let idx = 0; idx < group.length; idx++) {\n\t\t\t\tconst dish = group[idx];\n\t\t\t\tconst data = selfcategories[dish.selfcategory.id];\n\t\t\t\tif (data) selfcategories[dish.selfcategory.id] = [...data, dish]; // If current selfcat is in selfcategories we append it current dish\n\t\t\t\tif (!data) selfcategories[dish.selfcategory.id] = [dish]; // If current selfcat is not in selfcategories we add current dish as first item\n\t\t\t}\n\n\t\t\t// Retrieve dishes selfcategories to get \"order\" and ordering as last step\n\t\t\tconst usedSelfcategories = categories?.filter(({ Id }: any) => selfcategories[Id]);\n\t\t\tconst orderedSelfcategories = usedSelfcategories?.sort((a, b) => a.order - b.order).map(({ Id }: any) => Id);\n\n\t\t\tif (!orderedSelfcategories) return [];\n\n\t\t\t// If there are processed data, we generate a new array of subarrays (dishes) ordered\n\t\t\tconst orderedDishes = [];\n\t\t\tfor (let idx = 0; idx < orderedSelfcategories.length; idx++) {\n\t\t\t\tconst selfcatId = orderedSelfcategories[idx];\n\t\t\t\torderedDishes.push(selfcategories[selfcatId]);\n\t\t\t}\n\n\t\t\t// Finally, spread subarrays as single array\n\t\t\treturn orderedDishes.flat();\n\t\t});\n\n\t\t// Final processing to fill in dishes, selfcategories and categories data\n\t\tconst groupedDishesByCat: ListDish[] = orderedGroupedCatDishes\n\t\t\t.filter(group => group.length) // Remove empty selfcat group\n\t\t\t.map(group => {\n\t\t\t\tconst category = dishGlobalCategory?.find(({ Id }) => Id === group[0].categories[0]);\n\t\t\t\tconst dishes = group.flat();\n\t\t\t\tconst visitedSelfcat: any = {};\n\n\t\t\t\tconst selfcategories = dishes.map(({ selfcategory }) => {\n\t\t\t\t\tconst selfcatIdx = selfcategory.id;\n\t\t\t\t\tif (visitedSelfcat[selfcatIdx]) return null;\n\t\t\t\t\tvisitedSelfcat[selfcatIdx] = true;\n\t\t\t\t\treturn { ...selfcategory };\n\t\t\t\t});\n\n\t\t\t\treturn {\n\t\t\t\t\tcategory,\n\t\t\t\t\tselfcategories: selfcategories.filter(data => data),\n\t\t\t\t\tdishes: group.flat(),\n\t\t\t\t};\n\t\t\t});\n\n\t\t// ! PROCESSING TO GROUP DISHES BY SELF/SUB CATEGORY\n\t\t// * Group dishes by selfcategory looping throw ordered dish global categories (appetizer, entree, soup, first course, main course, dessert)\n\t\tconst groupedDishesBySelfcat: any = orderedGroupedCatDishes\n\t\t\t.filter(group => group.length) // Remove empty selfcat group\n\t\t\t.map(group => {\n\t\t\t\tconst dishes = group;\n\t\t\t\tconst selfcategories = dishes\n\t\t\t\t\t.map(({ selfcategory }) => ({ ...selfcategory })) // Get and spread selfcategory data\n\t\t\t\t\t.filter((value, idx, self) => self.findIndex(t => t.id === value.id) === idx); // Remove duplicated selfcategories\n\n\t\t\t\tconst allSubcategoriesGrouped = selfcategories.map(selfcat => ({\n\t\t\t\t\tselfcategory: selfcat,\n\t\t\t\t\tdishes: dishes.filter(({ selfcategory }) => selfcategory.id === selfcat.id),\n\t\t\t\t}));\n\t\t\t\treturn allSubcategoriesGrouped.flat();\n\t\t\t});\n\n\t\tsetProcessedLabels({\n\t\t\tgroupedDishesByCat,\n\t\t\tgroupedDishesBySelfcat,\n\t\t\tlocalProcessingDishes: false,\n\t\t});\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [filteredDishesByShift]);\n\n\t// * STATE MANAGEMENT\n\tuseEffect(() => {\n\t\tif (showGlobalSelfCategories && usedDishGlobalCategories && usedDishGlobalCategories.length) {\n\t\t\tdispatch(\n\t\t\t\tsetMenuFiltersActionCreator({\n\t\t\t\t\tselfCategory: usedDishGlobalCategories[0].Id,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}, [showGlobalSelfCategories, usedDishGlobalCategories, dispatch]);\n\n\tuseEffect(() => {\n\t\tconst matchedCategories = dishGlobalCategory?.filter(({ Id }) => {\n\t\t\tconst matchedGlobalCategoryDishes = dishes.data?.map(({ categories }) => categories.includes(Id));\n\t\t\treturn matchedGlobalCategoryDishes?.reduce((acc, curr) => acc || curr, false);\n\t\t});\n\t\tmatchedCategories && setUsedDishGlobalCategories(matchedCategories);\n\t}, [categories, dishGlobalCategory, dishes.data]);\n\n\tuseEffect(() => {\n\t\tif (showGlobalSelfCategories || !usedDishSelfCategories || !selfcategoriesOrder || !dishes.data) return;\n\n\t\tconst filteredSelfcategories: any = selfcategoriesOrder\n\t\t\t.map(({ _id }: any) => usedDishSelfCategories.filter(({ category }) => category === _id))\n\t\t\t.flat();\n\n\t\tconst [initSelfcategory] = filteredSelfcategories.filter((selfcategory: any) =>\n\t\t\tdishes.data?.some((dish: Dish) => dish[selectedSchedule] && dish.selfcategory.id === selfcategory.Id)\n\t\t);\n\n\t\tif (!initSelfcategory) return;\n\n\t\tdispatch(\n\t\t\tsetMenuFiltersActionCreator({\n\t\t\t\tselfCategory: initSelfcategory.Id,\n\t\t\t})\n\t\t);\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [showGlobalSelfCategories, usedDishSelfCategories, dispatch, dishes.data, selectedSchedule]);\n\n\tuseEffect(() => {\n\t\tconst matchedCategories = categories?.filter(({ Id }) => {\n\t\t\tconst matchedCategoryDishes = dishes.data?.map(({ selfcategory }) => selfcategory.id === Id);\n\t\t\treturn matchedCategoryDishes?.reduce((acc, curr) => acc || curr, false);\n\t\t});\n\t\tmatchedCategories &&\n\t\t\tsetUsedDishSelfCategories(\n\t\t\t\t_.orderBy(\n\t\t\t\t\tmatchedCategories,\n\t\t\t\t\t[cat => _.find(dishGlobalCategory, o => o._id === cat.category)?.order, 'order'],\n\t\t\t\t\t'asc'\n\t\t\t\t)\n\t\t\t);\n\t}, [dishGlobalCategory, categories, dishes.data]);\n\n\tuseEffect(() => {\n\t\tdispatch(setScheduleFiltersActionCreator(selectedSchedule));\n\t}, [dispatch, selectedSchedule]);\n\n\tuseEffect(() => {\n\t\t// Processing on scroll event\n\t\tconst handleScroll = (): void => {\n\t\t\tconst { offsetBottom: adjustedTopList }: any = getDimensions(menuRef.current) ?? { offsetBottom: null };\n\t\t\tif (!adjustedTopList) return;\n\t\t\tconst categoriesRefsLen = categoriesRefs.current.length;\n\n\t\t\tlet selected: any;\n\t\t\tfor (let idx = 0; idx < categoriesRefsLen; idx++) {\n\t\t\t\tconst categoryRef = categoriesRefs.current[idx];\n\t\t\t\tif (!categoryRef) continue; // Validate if category ref is still existing to prevent app crash (when changing schedule shift)\n\t\t\t\tconst { top: categoryCoordY }: any = getDimensions(categoryRef);\n\t\t\t\tif (categoryCoordY <= adjustedTopList + SENSOR_INDICATOR_OFFSET) {\n\t\t\t\t\tselected = categoryRef;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (selected && selected !== visibleSection) {\n\t\t\t\thandleFilterChange(selected.id);\n\t\t\t\tsetVisibleSection(selected.id);\n\t\t\t}\n\t\t};\n\n\t\t// Execute closure at first time (when no scroll event is attached and detected)\n\t\thandleScroll();\n\n\t\t// If no list items ref is defined we skip the attachment of scroll event\n\t\tif (!listItemsRef.current) return;\n\n\t\t// Attach scroll event to list items (dishes) element (ref) to execute handleScroll and get new selected (item at top) category\n\t\tconst scroller = listItemsRef.current;\n\t\tscroller.addEventListener('scroll', handleScroll);\n\t\treturn (): void => {\n\t\t\tscroller.removeEventListener('scroll', handleScroll);\n\t\t};\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [handleFilterChange, visibleSection, selectedSchedule, menuRef.current, listItemsRef.current]);\n\n\tconst { groupedDishesByCat, groupedDishesBySelfcat, localProcessingDishes } = processedLabels;\n\n\tif (fetchingDishes || localProcessingDishes) {\n\t\treturn <Loading show logo />;\n\t}\n\n\tif (!fetchingDishes && !localProcessingDishes && dishes.data?.length === 0) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\tstyle={{ height: '100%', flex: 1 }}\n\t\t\t\t>\n\t\t\t\t\t{/* Dishes selfcategories badges */}\n\t\t\t\t\t<MenuHeader className=\"menu-header\" ref={menuRef} height=\"0\"></MenuHeader>\n\t\t\t\t\t{/* No data found message */}\n\t\t\t\t\t<ListContainer padding=\"0.5rem\">\n\t\t\t\t\t\t<FlexContainer direction=\"column\" justify=\"center\" width=\"90vw\">\n\t\t\t\t\t\t\t<FilterTitle>{t('dishes.noDishes')}</FilterTitle>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</ListContainer>\n\t\t\t\t</motion.div>\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\tstyle={{ height: '100%', flex: 1 }}\n\t\t\t>\n\t\t\t\t{/* Dishes selfcategories badges */}\n\t\t\t\t<MenuHeader className=\"menu-header\" ref={menuRef}>\n\t\t\t\t\t<ScheduleFilters handleFilterChange={handleScheduleChange} selected={selectedSchedule} />\n\t\t\t\t\t<MenuFilters\n\t\t\t\t\t\tselected={filters.selfCategory}\n\t\t\t\t\t\tcategoriesRefs={categoriesRefs}\n\t\t\t\t\t\toptions={showGlobalSelfCategories ? groupedDishesByCat : groupedDishesBySelfcat}\n\t\t\t\t\t/>\n\t\t\t\t</MenuHeader>\n\n\t\t\t\t{/* Dishes list content */}\n\t\t\t\t<ListContainer ref={listItemsRef} padding=\"0 0.5rem\" height=\"80%\">\n\t\t\t\t\t{/* // ! PROCESSING TO GROUP DISHES BY GLOBAL CATEGORY */}\n\t\t\t\t\t{showGlobalSelfCategories && groupedDishesByCat.length === 0 && (\n\t\t\t\t\t\t<FlexContainer direction=\"column\" justify=\"center\" width=\"90vw\">\n\t\t\t\t\t\t\t<FilterTitle>{t('dishes.noDishesByShift')}</FilterTitle>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t)}\n\t\t\t\t\t{showGlobalSelfCategories &&\n\t\t\t\t\t\tgroupedDishesByCat.length > 0 &&\n\t\t\t\t\t\tgroupedDishesByCat.map((group: ListDish, groupIdx: number) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div key={groupIdx}>\n\t\t\t\t\t\t\t\t\t<TitleContainer id={`${group.category?.Id}`} ref={node => (categoriesRefs.current[groupIdx] = node)}>\n\t\t\t\t\t\t\t\t\t\t{group.category && (\n\t\t\t\t\t\t\t\t\t\t\t<FilterTitle className=\"title\">\n\t\t\t\t\t\t\t\t\t\t\t\t{group.category[`name_${currentLang.toLowerCase()}` as keyof GlobalCategory] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\tt('common.noInfoAvailableInThisLanguage')}\n\t\t\t\t\t\t\t\t\t\t\t</FilterTitle>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<Subtitle bold=\"100\" color=\"black\" padding=\"10px\" margin=\"0.5rem 0 0 0\" size=\"0.9rem\">\n\t\t\t\t\t\t\t\t\t\t\t{`${group.dishes.length} ${t('common.dishes')}`}\n\t\t\t\t\t\t\t\t\t\t</Subtitle>\n\t\t\t\t\t\t\t\t\t</TitleContainer>\n\t\t\t\t\t\t\t\t\t{group.selfcategories.map((selfcat: ISelfCategory) => (\n\t\t\t\t\t\t\t\t\t\t<SelfCategoriesContainer key={selfcat.id}>\n\t\t\t\t\t\t\t\t\t\t\t<FilterSubtitle className=\"selfcategory-subtitle\">\n\t\t\t\t\t\t\t\t\t\t\t\t{selfcat[`name${currentLang}` as keyof ISelfCategory]}\n\t\t\t\t\t\t\t\t\t\t\t</FilterSubtitle>\n\t\t\t\t\t\t\t\t\t\t\t{group.dishes\n\t\t\t\t\t\t\t\t\t\t\t\t.filter((dish: Dish) => dish.selfcategory.id === selfcat.id)\n\t\t\t\t\t\t\t\t\t\t\t\t.map((dish: Dish, index: number) => (\n\t\t\t\t\t\t\t\t\t\t\t\t\t<ListItem onClick={() => openDishDetail(dish)} key={index}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DishListItem dish={dish} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t\t</SelfCategoriesContainer>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\n\t\t\t\t\t{/* // ! PROCESSING TO GROUP DISHES BY SELF/SUB CATEGORY */}\n\t\t\t\t\t{!showGlobalSelfCategories &&\n\t\t\t\t\t\tgroupedDishesBySelfcat.flat().length > 0 &&\n\t\t\t\t\t\tgroupedDishesBySelfcat.flat().map((group: any, groupIdx: number) => {\n\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t<div key={groupIdx}>\n\t\t\t\t\t\t\t\t\t<TitleContainer\n\t\t\t\t\t\t\t\t\t\tid={`${group.selfcategory.id}`}\n\t\t\t\t\t\t\t\t\t\tref={node => (categoriesRefs.current[groupIdx] = node)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{group.selfcategory && (\n\t\t\t\t\t\t\t\t\t\t\t<FilterTitle className=\"title\">\n\t\t\t\t\t\t\t\t\t\t\t\t{group.selfcategory[`name${currentLang.toUpperCase()}` as keyof ISelfCategory] ||\n\t\t\t\t\t\t\t\t\t\t\t\t\tt('common.noInfoAvailableInThisLanguage')}\n\t\t\t\t\t\t\t\t\t\t\t</FilterTitle>\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t<Subtitle bold=\"100\" color=\"black\" padding=\"10px\" margin=\"0.5rem 0 0 0\" size=\"0.9rem\">\n\t\t\t\t\t\t\t\t\t\t\t{`${\n\t\t\t\t\t\t\t\t\t\t\t\tgroup.dishes.filter((dish: Dish) => dish.selfcategory.id === group.selfcategory.id).length\n\t\t\t\t\t\t\t\t\t\t\t} ${t('common.dishes')}`}\n\t\t\t\t\t\t\t\t\t\t</Subtitle>\n\t\t\t\t\t\t\t\t\t</TitleContainer>\n\t\t\t\t\t\t\t\t\t{group.dishes\n\t\t\t\t\t\t\t\t\t\t.filter((dish: Dish) => dish.selfcategory.id === group.selfcategory.id)\n\t\t\t\t\t\t\t\t\t\t.map((dish: Dish, index: number) => (\n\t\t\t\t\t\t\t\t\t\t\t<ListItem onClick={() => openDishDetail(dish)} key={index}>\n\t\t\t\t\t\t\t\t\t\t\t\t<DishListItem dish={dish} />\n\t\t\t\t\t\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t})}\n\n\t\t\t\t\t{/* Visibility sensor to dispatch load more drinks */}\n\t\t\t\t\t<VizSensor partialVisibility>\n\t\t\t\t\t\t<FlexContainer direction=\"column\" justify=\"center\" width=\"100%\">\n\t\t\t\t\t\t\t<Logo size=\"100px\" padding=\"3rem 1rem\" />\n\t\t\t\t\t\t\t<Loading show={fetchingDishes && hasMoreDishes} />\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</VizSensor>\n\t\t\t\t</ListContainer>\n\t\t\t</motion.div>\n\t\t\t<DishDetailModal close={closeDishDetail} />\n\t\t</>\n\t);\n};\n\nexport default RestaurantMenu;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { Drink } from 'Types';\nimport { flex } from 'Styles/tools';\nimport { useTranslation } from 'react-i18next';\nimport { FlexContainer } from 'Components/Shared';\nimport { formatCurrencyAmount } from 'Utils';\nimport { useSelector } from 'react-redux';\nimport { AppState } from 'store';\n\n\nconst DrinkListItemContainer = styled.div`\n  ${ flex('column', 'flex-start', 'baseline', 'nowrap')}\n  width: 100%;\n`;\n\nconst DrinkName = styled.h4`\n  color: ${ ({theme}) => theme.colors.black};\n`;\n\nconst DrinkPrice = styled.h5`\n  color: ${ ({theme}) => theme.colors.blue};\n`;\n\nconst DrinkDescription = styled.h5`\n  color: ${ ({theme}) => theme.colors.gray};\n  font-size: 0.8em;\n`;\n\nconst DrinkVolume = styled.h5`\n  color: ${ ({theme}) => theme.colors.light_black};\n  font-size: 0.9em;\n`;\n\nconst DEFAULT_CURRENCY_DIGITS = 2;\nconst NO_CURRENCY_DIGITS = 0;\n\ninterface IDrinkListItem {\n  drink: Drink;\n}\nconst DrinkListItem: React.FC<IDrinkListItem> = ({drink}: IDrinkListItem) => {\n  const { t, i18n } = useTranslation();\n  const client = useSelector((state: AppState) => state.client.data);\n  const currentLang = i18n.language.split('-')[0].toUpperCase(); \n  const decimals = client?.client_settings.decimals === undefined? DEFAULT_CURRENCY_DIGITS: client?.client_settings.decimals? DEFAULT_CURRENCY_DIGITS : NO_CURRENCY_DIGITS;\n \n\n  return (\n    <DrinkListItemContainer className='drink-list-item-container'>\n      {/* Title */}\n      <DrinkName className='drink-name'>{drink[`name${currentLang}` as keyof typeof drink] || t(\"common.noInfoAvailableInThisLanguage\")}</DrinkName>\n      {/* Description */}\n      {drink[`desc${currentLang}` as keyof typeof drink] && (\n        <FlexContainer width='100%' margin='0.5em 0 0 0' className='drink-description-row'>\n          <FlexContainer className='drink-description'>\n            <DrinkDescription>{`${drink[`desc${currentLang}` as keyof typeof drink]}`}</DrinkDescription>\n          </FlexContainer>\n        </FlexContainer>\n      )}\n      {/* Volume */}\n      {Number(drink.volume) !== 0 && (\n        <FlexContainer width='100%' margin='0.5em 0' className='drink-description-row'>\n          <FlexContainer className='drink-description'>\n            <DrinkVolume>{`${drink.volume} ${drink.unit}`}</DrinkVolume>\n          </FlexContainer>\n        </FlexContainer>\n      )}\n      {/* Price */}\n      <FlexContainer width='100%' margin='0.5em 0' className='drink-price-row'>\n        <FlexContainer margin='0 0.6em 0 0' className='drink-price'>\n          {drink.price !== null && drink.price !== 0 && (\n            <DrinkPrice>\n              {`${formatCurrencyAmount(drink.price, client?.main_currency, decimals)}`}\n            </DrinkPrice>\n          )}\n        </FlexContainer>\n      </FlexContainer>\n    </DrinkListItemContainer>\n  )\n}\n\nexport default DrinkListItem;\n","import React, { useEffect, useRef } from \"react\";\nimport styled from \"styled-components\";\nimport { Badge } from \"Components/Shared\";\nimport { flex } from \"Styles/tools\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\nimport { useTranslation } from \"react-i18next\";\nimport { HideHorizontalScrollBar } from \"Styles/mixins\";\nimport { scrollTo } from \"Utils/behaviour\";\nimport { getGlobalLanguage } from \"Utils/language.helper\";\n\nconst FilterContainer = styled.div`\n\tposition: relative;\n\tflex-shrink: 0;\n\tpadding: 0 16px;\n`;\n\nconst SelectedFiltersContainer = styled.div`\n\toverflow-x: scroll;\n\twidth: 100%;\n\tflex-shrink: 0;\n\theight: 100%;\n\tflex: 0;\n\t${flex(\"row\", \"flex-start\", \"center\", \"nowrap\")};\n\t${HideHorizontalScrollBar()}\n`;\n\ninterface IDrinksFiltersProps {\n\tselected: string | number;\n\tcategoriesRefs: any;\n\toptions: any;\n}\n\ninterface IBadge {\n\t_id: string;\n\tname_en: string;\n\tname_es: string;\n}\n\nconst HORIZONTAL_SCROLL_DEBOUNCE = 1_000; // ms\n\nconst DrinksFilters: React.FC<IDrinksFiltersProps> = ({ selected, categoriesRefs, options }: IDrinksFiltersProps) => {\n\tconst { i18n, t } = useTranslation();\n\tconst currentLang = getGlobalLanguage(i18n.language).toLowerCase();\n\t// * REDUX STATE\n\tconst showGlobalSelfCategories = useSelector((store: AppState) => store.client.data?.client_settings?.show_global_selfcategories);\n\t// * LOCAL STATE\n\tconst badgesRef = useRef<any>([]);\n\t\t\n\t// * LOCAL FUNCTIONS\n\tconst badges: IBadge[] = options.flat().map((option: any) => {\n\t\tif (showGlobalSelfCategories) {\n\t\t\treturn { ...option.category };\n\t\t}\n\t\treturn { ...option.selfcategory };\n\t});\n\n\tconst handleClick = (idx: number) => {\n\t\tscrollTo(categoriesRefs.current[idx]);\n\t};\n\n\t// * STATE MANAGEMENT\n\tuseEffect(() => {\n\t\tif (!badgesRef || !selected) return;\n\t\tconst badgesRefLen = badgesRef.current.length;\n\t\tfor (let idx = 0; idx < badgesRefLen; idx++) {\n\t\t\tconst categoryRef = badgesRef.current[idx];\n\t\t\tif (!categoryRef) continue; // Validate if category ref is still existing to prevent app crash (when changing schedule shift)\n\t\t\tif (categoryRef.id !== selected) continue;\n\t\t\tsetTimeout(() => scrollTo(categoryRef), HORIZONTAL_SCROLL_DEBOUNCE); // set timeout as debounce to scroll selected badge at start (left)\n\t\t}\n\t}, [selected]);\n\n\treturn (\n\t\t<>\n\t\t\t<FilterContainer className=\"filter-container\">\n\t\t\t\t<SelectedFiltersContainer className=\"selected-filters-container\">\n\t\t\t\t\t{badges && badges.length\n\t\t\t\t\t\t? badges.map((category: IBadge, categoryIdx: number) => (\n\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\tmargin=\"0 1rem 0 0\"\n\t\t\t\t\t\t\t\t\tcolor={selected === category._id ? \"black\" : \"transparent\"}\n\t\t\t\t\t\t\t\t\ttextColor={selected === category._id ? \"white\" : \"black\"}\n\t\t\t\t\t\t\t\t\tkey={category._id}\n\t\t\t\t\t\t\t\t\tonClick={() => (selected !== category._id ? handleClick(categoryIdx) : null)}\n\t\t\t\t\t\t\t\t\tid={`${category._id}`}\n\t\t\t\t\t\t\t\t\tref={(node: any) => badgesRef.current[categoryIdx] = node}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span style={{ whiteSpace: \"pre\" }}>{category[`name_${currentLang.toLowerCase()}` as keyof typeof category] || t(\"common.noInfoAvailableInThisLanguage\")}</span>\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t))\n\t\t\t\t\t\t: null}\n\t\t\t\t</SelectedFiltersContainer>\n\t\t\t</FilterContainer>\n\t\t</>\n\t);\n};\n\nexport default DrinksFilters;\n","import React from 'react';\nimport styled from 'styled-components';\n\nimport { Drink } from 'Types';\nimport { useTranslation } from 'react-i18next';\nimport { flex } from 'Styles/tools';\nimport PageContent from 'Components/Shared/Page/PageContent';\nimport { Description } from 'Components/Core';\nimport { Page, PageHeader, Title, FlexContainer, Image } from 'Components/Shared';\nimport { useSelector } from 'react-redux';\nimport { AppState } from 'store';\nimport { formatCurrencyAmount } from 'Utils';\n\nimport DEFAULT_IMAGE_DRINK from \"Assets/icons/drink.png\";\n\n\nconst DescriptionBox = styled.div`\n  ${ flex('row', 'space-between', 'baseline', 'nowrap') }\n  padding: 10px 0;\n  width: 100%;\n  border-bottom: 1px solid ${ ({theme}) => theme.colors.transparent };\n`;\n\nconst Label = styled.span`\n`;\n\nconst DEFAULT_CURRENCY_DIGITS = 2;\nconst NO_CURRENCY_DIGITS = 0;\n\ninterface IDrinkDetailPageProps {\n  close: () => void;\n  drink: Drink | null;\n}\nconst DrinkDetailPage: React.FC<IDrinkDetailPageProps> = ({drink, close}: IDrinkDetailPageProps) => {\n  const { t , i18n } = useTranslation();\n\n  const client = useSelector((state: AppState) => state.client.data);\n  \n  const currentLang = i18n.language.split('-')[0].toUpperCase();\n  const decimals = client?.client_settings.decimals === undefined? DEFAULT_CURRENCY_DIGITS: client?.client_settings.decimals? DEFAULT_CURRENCY_DIGITS : NO_CURRENCY_DIGITS;\n  \n  return (\n    <Page>\n      <PageHeader \n        color='black'\n        textColor='white'\n        backEnabled={true}\n        backText={t('common.return')}\n        customBackAction={close}\n      />\n      <PageContent>\n        {/* Drink detail description */}\n        <FlexContainer \n          width='100%'\n          padding={drink?.img_url ? '0 1em' : '2em 1em'}\n          direction='column'\n          justify='center'\n          align='center'\n        >\n          {/* Image */}\n          {drink?.img_url ? (\n              <Image id={drink._id} srcImg={drink.img_url} width=\"45vw\" height=\"28vw\" />\n            ) : (\n              <Image id={\"def\"} srcImg={DEFAULT_IMAGE_DRINK} height='15vh' width='15vw' />\n            )}\n          {/* Name */}\n          <Title className='bold' color='black' margin='1.6em auto'>{drink ? drink[`name${currentLang}` as keyof typeof drink] || t(\"common.noInfoAvailableInThisLanguage\") : \"--\"}</Title>\n          {/* Detail description */}\n          <Description color='gray' margin='0 0 2rem 0'>\n            {drink ? drink[`desc${currentLang}`as keyof typeof drink] || t(\"common.noInfoAvailableInThisLanguage\") : \"--\"}\n          </Description>\n          {/* Volumen */}\n          {Number(drink ? drink.volume : 0) !== 0 && (\n            <DescriptionBox className='description-box'>\n              <Label>{t(`drinkDetail.volume`)}</Label>\n              <Label className='bold'>{`${drink ? drink.volume : 0} ${drink ? drink.unit : 0}`}</Label>\n            </DescriptionBox>\n          )}\n          {/* Price */}\n          {drink?.price !== null && drink?.price !== 0 && (\n            <DescriptionBox className='description-box-price'>\n              <Label>{t(`drinkDetail.price`)}</Label>\n              <Label className='bold'>{`${drink ? formatCurrencyAmount(drink.price, client?.main_currency, decimals): \"0.00\"}`}</Label>\n            </DescriptionBox>\n          )}\n        </FlexContainer>\n      </PageContent>\n    </Page>\n  )\n}\n\nexport default DrinkDetailPage;\n","import React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { motion } from \"framer-motion\";\nimport styled from \"styled-components\";\n\nimport { flex } from \"Styles/tools\";\nimport DrinkDetailPage from \"./DrinkDetailPage\";\nimport { ClientURL, Drink } from \"Types\";\nimport { useParams } from \"react-router-dom\";\nimport { useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\n\ninterface DrinkDetailModalProps {\n\tclose: () => void;\n}\n\nconst Overlay = styled(motion.div)`\n\tposition: absolute;\n\ttop: 0;\n\theight: 100vh;\n\twidth: 100%;\n\tbackground-color: ${({ theme }) => theme.colors.white};\n\t${flex(\"column\", \"flex-start\", \"flex-start\", \"nowrap\")}\n`;\n\nconst DrinkDetailModal: React.FC<DrinkDetailModalProps> = ({ close }: DrinkDetailModalProps) => {\n\tconst { itemId } = useParams<ClientURL>();\n\tconst drinks = useSelector( (store: AppState) => store.drinks.data);\n\n\tconst drinkSelected = findDrinkForDetails(itemId, drinks ?? []);\n\n\treturn ReactDOM.createPortal(\n\t\t<>\n\t\t\t{itemId && (\n\t\t\t\t<Overlay\n\t\t\t\t\tclassName=\"overlay\"\n\t\t\t\t\tinitial={{ x: \"125vw\" }}\n\t\t\t\t\tanimate={{ x: 0 }}\n\t\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\t\texit={{ x: \"125vw\" }}\n\t\t\t\t>\n\t\t\t\t\t<DrinkDetailPage close={close} drink={drinkSelected} />\n\t\t\t\t</Overlay>\n\t\t\t)}\n\t\t</>,\n\t\tdocument.getElementById(\"portal\") as Element\n\t);\n\n\tfunction findDrinkForDetails(itemId: string | undefined, drinks: Drink[]){\n\t\tif(itemId && drinks && drinks.length > 0)\n\t\t\treturn drinks.find(drink => drink._id.toString() === itemId + \"\") ?? null;\n\t\treturn null;\n\t}\n};\n\nexport default DrinkDetailModal;\n","import React, { useState, useEffect, useRef, useCallback } from \"react\";\nimport styled from \"styled-components\";\nimport { useHistory, useLocation, useParams } from \"react-router-dom\";\nimport { useSelector, useDispatch } from \"react-redux\";\nimport VizSensor from \"react-visibility-sensor\";\nimport _ from \"lodash\";\n\nimport { AppState } from \"store\";\nimport { ClientURL, Drink, DrinkSelfCategory, GlobalCategory } from \"Types\";\nimport { useFetchDrinks } from \"Hooks\";\nimport { setDrinksFiltersActionCreator } from \"Reducers/Filters\";\nimport { motion } from \"framer-motion\";\nimport { ListItem, ListContainer, FlexContainer, Loading, Logo } from \"Components/Shared\";\nimport DrinkListItem from \"./DrinkListItem\";\nimport DrinksFilters from \"./DrinksFilters\";\nimport DrinkDetailModal from \"./DrinkDetailModal\";\nimport { useTranslation } from \"react-i18next\";\nimport { FilterTitle, FilterSubtitle, Subtitle } from \"Components/Core\";\nimport { flex } from \"Styles/tools\";\nimport { getDimensions } from \"Utils/behaviour\";\nimport { getGlobalLanguage } from \"Utils/language.helper\";\nimport { filterDrinksByRestaurant } from \"Utils\";\n\nconst DrinksHeader = styled.div<any>`\n\tbackground-color: ${({ theme }) => theme.colors.white};\n\tpadding: 5px 0;\n\theight: ${({ height = \"10%\" }) => height};\n\twidth: 100%;\n`;\n\nconst SelfCategoriesContainer = styled.div`\n\tflex-shrink: 0;\n`;\n\nconst TitleContainer = styled.div`\n\t${flex(\"row\", \"space-between\", \"center\", \"nowrap\")}\n`;\n\nconst SENSOR_INDICATOR_OFFSET = 100; // In px units\n\nconst RestaurantDrinks: React.FC = () => {\n\t// * REDUX STATE\n\tconst client = useSelector((state: AppState) => state.client.data);\n\tconst showGlobalSelfCategories = useSelector(\n\t\t(store: AppState) => store.client.data?.client_settings?.show_global_selfcategories\n\t);\n\tconst drinkGlobalCategory = useSelector((store: AppState) => store.categories.drinkGlobalCategory);\n\tconst categories = useSelector((state: AppState) => state.categories.drink);\n\tconst filters = useSelector((state: AppState) => state.filters.drinks);\n\n\t// * LOCAL STATE\n\tconst [usedCategories, setUsedCategories] = useState<DrinkSelfCategory[] | null>(null);\n\tconst [usedDrinkGlobalCategories, setUsedDrinkGlobalCategories] = useState<GlobalCategory[] | null>(null);\n\tconst [visibleSection, setVisibleSection] = useState();\n\n\t// * LOCAL HELPERS\n\tconst categoriesRefs = useRef<any>([]);\n\tconst menuRef = useRef<any>();\n\tconst listItemsRef = useRef<any>();\n\n\tconst { clientId, restaurantId, sectionId } = useParams<ClientURL>();\n\tconst dispatch = useDispatch();\n\tconst { i18n, t } = useTranslation();\n\tconst history = useHistory();\n\tconst { search } = useLocation(); // search contains optional query params\n\tconst currentLang = getGlobalLanguage(i18n.language).toLocaleLowerCase();\n\n\tconst { drinks, fetchingDrinks, hasMoreDrinks } = useFetchDrinks(\n\t\tclient ? client?.name : null,\n\t\t1,\n\t\tfilters,\n\t\trestaurantId\n\t);\n\t\n\tlet localProcessingDrinks = fetchingDrinks;\n\n\t// * LOCAL FUNCTIONS\n\tconst handleFilterChange = useCallback(\n\t\t(id: string | number) => {\n\t\t\tdispatch(setDrinksFiltersActionCreator({ selfCategory: id }));\n\t\t},\n\t\t[dispatch]\n\t);\n\n\tconst openDrinkDetail = (drink: Drink) => {\n\t\tif (client?.client_type === \"hotel\") {\n\t\t\thistory.push(`/hotel/${clientId}/restaurant/${restaurantId}/${sectionId}/${drink._id}${search}`);\n\t\t} else {\n\t\t\thistory.push(`/restaurant/${clientId}/${sectionId}/${drink._id}${search}`);\n\t\t}\n\t};\n\n\tconst closeDrinkDetail = () => {\n\t\tif (client?.client_type === \"hotel\") {\n\t\t\thistory.replace(`/hotel/${clientId}/restaurant/${restaurantId}/${sectionId}`);\n\t\t} else {\n\t\t\thistory.replace(`/restaurant/${clientId}/${sectionId}`);\n\t\t}\n\t};\n\n\t// * Apply restaurant filters to drinks (only for client type Hotel)\n\tlocalProcessingDrinks = true;\n\tconst filteredDrinksByRestaurant = filterDrinksByRestaurant(\n\t\tclient?.client_type ?? \"\",\n\t\trestaurantId,\n\t\tdrinks.data ?? []\n\t);\n\n\tconst filteredDrinks = filteredDrinksByRestaurant ? filteredDrinksByRestaurant : [];\n\t\n\tconst selfcatDrinks = filteredDrinks.map(({ selfdrinkcategories }) => {     \n        return _.reduce(\n            selfdrinkcategories, (collection, selfcat) => {\n                let categori = categories?.find(({ _id }) => _id === selfcat)\n                if(categori){\n                    return collection = [...collection, categori ]\n                }\n                return collection   \n            },\n        [] as any);\n    })\n\n\tconst globalcatDrinks = selfcatDrinks\n\t\t.map(group => group.map(({ drinkcategory }: any) => drinkGlobalCategory?.find(({ _id }) => _id === drinkcategory)))\n\t\t.flat()\n\t\t.filter((value, idx, self) => self.findIndex(t => t?._id === value?._id) === idx)\n\t\t.sort((a: any, b: any) => a?.order - b?.order);\n\n\t// ! PROCESSING TO GROUP DISHES BY GLOBAL CATEGORY\n\t// * Group drinks by selfcategory looping throw ordered drink global categories (appetizer, entree, soup, first course, main course, dessert)\n\tconst groupedDrinksByCat = globalcatDrinks.map(cat => {\n\t\tconst categoryId = cat?._id;\n\t\tconst selfcategories = categories?.filter(\n\t\t\t({ _id, drinkcategory }) =>\n\t\t\t\tdrinkcategory === categoryId && selfcatDrinks.flat().some(selfcat => selfcat?._id === _id)\n\t\t);\n\t\tconst drinks = filteredDrinks.filter(({ selfdrinkcategories }) =>\n\t\t\tselfdrinkcategories.some(id => selfcategories?.find(({ _id }) => _id === id))\n\t\t);\n\t\treturn {\n\t\t\tcategory: cat,\n\t\t\tselfcategories,\n\t\t\tdrinks,\n\t\t};\n\t});\n\n\t// ! PROCESSING TO GROUP DISHES BY SELF/SUB CATEGORY\n\tconst groupedDrinksBySelfcat = globalcatDrinks.map(cat => {\n\t\tconst selfcategories = categories?.filter(\n\t\t\t({ _id, drinkcategory }) =>\n\t\t\t\tdrinkcategory === cat?._id &&\n\t\t\t\tfilteredDrinks.some(({ selfdrinkcategories }) => selfdrinkcategories.includes(_id))\n\t\t);\n\t\tconst drinks = filteredDrinks.filter(({ selfdrinkcategories }) =>\n\t\t\tselfcategories?.some(({ _id }) => selfdrinkcategories?.includes(_id))\n\t\t);\n\t\tconst allSubcategoriesGrouped = selfcategories?.map(selfcat => ({\n\t\t\tselfcategory: selfcat,\n\t\t\tdrinks: drinks.filter(({ selfdrinkcategories }) => selfdrinkcategories.includes(selfcat._id)),\n\t\t}));\n\n\t\treturn allSubcategoriesGrouped?.flat();\n\t});\n\n\tlocalProcessingDrinks = false;\n\n\t// * STATE MANAGEMENT\n\tuseEffect(() => {\n\t\tif (showGlobalSelfCategories && usedDrinkGlobalCategories && usedDrinkGlobalCategories.length) {\n\t\t\tdispatch(\n\t\t\t\tsetDrinksFiltersActionCreator({\n\t\t\t\t\tselfCategory: usedDrinkGlobalCategories[0]._id,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t}, [showGlobalSelfCategories, usedDrinkGlobalCategories, dispatch]);\n\n\tuseEffect(() => {\n\t\tconst matchedCategories = _.flow(\n\t\t\t() =>\n\t\t\t\tcategories?.filter(({ _id }) => {\n\t\t\t\t\tconst matchedCategoryDrinks = drinks.data?.map(({ selfdrinkcategories }: any) =>\n\t\t\t\t\t\tselfdrinkcategories.includes(_id)\n\t\t\t\t\t);\n\t\t\t\t\treturn matchedCategoryDrinks?.reduce((acc: boolean, curr: boolean) => acc || curr, false);\n\t\t\t\t}),\n\t\t\tselfCategories =>\n\t\t\t\tdrinkGlobalCategory?.filter(\n\t\t\t\t\t({ _id }) => _.findIndex(selfCategories, ({ drinkcategory }) => drinkcategory === _id) !== -1\n\t\t\t\t)\n\t\t)();\n\t\tmatchedCategories && setUsedDrinkGlobalCategories(matchedCategories);\n\t}, [categories, drinkGlobalCategory, drinks.data]);\n\n\tuseEffect(() => {\n\t\tif (!showGlobalSelfCategories && usedCategories && usedCategories.length && groupedDrinksBySelfcat) {\n\t\t\tconst orderedSelfcats = groupedDrinksBySelfcat.flat().map(({ selfcategory }: any) => selfcategory);\n\t\t\tdispatch(setDrinksFiltersActionCreator({ selfCategory: orderedSelfcats[0]._id }));\n\t\t}\n\t\t// eslint-disable-next-line react-hooks/exhaustive-deps\n\t}, [showGlobalSelfCategories, usedCategories, dispatch]);\n\n\t// Filter drink selfcategories that is used at least in one drink (prevent showing empty/unused selfcategory badge)\n\tuseEffect(() => {\n\t\tconst matchedCategories = categories?.filter(({ _id }) => {\n\t\t\tconst matchedCategoryDrinks = drinks.data?.map(({ selfdrinkcategories }: any) =>\n\t\t\t\tselfdrinkcategories.includes(_id)\n\t\t\t);\n\t\t\treturn matchedCategoryDrinks?.reduce((acc: boolean, curr: boolean) => acc || curr, false);\n\t\t});\n\t\tmatchedCategories &&\n\t\t\tsetUsedCategories(\n\t\t\t\t_.orderBy(\n\t\t\t\t\tmatchedCategories,\n\t\t\t\t\t[cat => _.find(drinkGlobalCategory, o => o._id === cat.drinkcategory)?.order, \"order\"],\n\t\t\t\t\t\"asc\"\n\t\t\t\t)\n\t\t\t);\n\t}, [categories, drinkGlobalCategory, drinks.data]);\n\n\tuseEffect(() => {\n\t\t// Processing on scroll event\n\t\tconst handleScroll = () => {\n\t\t\tconst { offsetBottom: adjustedTopList }: any = getDimensions(menuRef.current);\n\t\t\tconst categoriesRefsLen = categoriesRefs.current.length;\n\n\t\t\tlet selected: any;\n\t\t\tfor (let idx = 0; idx < categoriesRefsLen; idx++) {\n\t\t\t\tconst categoryRef = categoriesRefs.current[idx];\n\t\t\t\tif (!categoryRef) continue; // Validate if category ref is still existing to prevent app crash (when changing schedule shift)\n\t\t\t\tconst { top: categoryCoordY }: any = getDimensions(categoryRef);\n\t\t\t\tif (categoryCoordY <= adjustedTopList + SENSOR_INDICATOR_OFFSET) {\n\t\t\t\t\tselected = categoryRef;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (selected && selected.id !== visibleSection) {\n\t\t\t\thandleFilterChange(selected.id);\n\t\t\t\tsetVisibleSection(selected.id);\n\t\t\t}\n\t\t};\n\n\t\t// Execute closure at first time (when no scroll event is attached and detected)\n\t\thandleScroll();\n\n\t\t// If no list items ref is defined we skip the attachment of scroll event\n\t\tif (!listItemsRef.current) return;\n\n\t\t// Attach scroll event to list items (dishes) element (ref) to execute handleScroll and get new selected (item at top) category\n\t\tconst scroller = listItemsRef.current;\n\t\tscroller.addEventListener(\"scroll\", handleScroll);\n\t\treturn (): void => {\n\t\t\tscroller.removeEventListener(\"scroll\", handleScroll);\n\t\t};\n\t}, [handleFilterChange, visibleSection]);\n\n\t// * COMPONENT RENDERING\n\tif (fetchingDrinks || localProcessingDrinks) {\n\t\treturn <Loading show logo />;\n\t}\n\n\n\tif (!fetchingDrinks && !localProcessingDrinks && !groupedDrinksByCat.length && !groupedDrinksBySelfcat.length) {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<motion.div\n\t\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\t\tstyle={{ height: \"100%\", flex: 1 }}>\n\t\t\t\t\t{/* Dishes selfcategories badges */}\n\t\t\t\t\t<DrinksHeader className=\"menu-header\" ref={menuRef} height=\"0\"></DrinksHeader>\n\t\t\t\t\t{/* No data found message */}\n\t\t\t\t\t<ListContainer padding=\"0.5rem\">\n\t\t\t\t\t\t<FlexContainer direction=\"column\" justify=\"center\" width=\"90vw\">\n\t\t\t\t\t\t\t<FilterTitle>{t(\"common.noDataFound\")}</FilterTitle>\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</ListContainer>\n\t\t\t\t</motion.div>\n\t\t\t</>\n\t\t);\n\t}\n\n\treturn (\n\t\t<>\n\t\t\t<motion.div\n\t\t\t\tinitial={{ opacity: 0 }}\n\t\t\t\tanimate={{ opacity: 1 }}\n\t\t\t\ttransition={{ duration: 0.3 }}\n\t\t\t\texit={{ opacity: 0 }}\n\t\t\t\tstyle={{ height: \"100%\", flex: 1 }}>\n\t\t\t\t{/* Drinks selfcategories badges */}\n\t\t\t\t<DrinksHeader className=\"menu-header\" ref={menuRef}>\n\t\t\t\t\t<DrinksFilters\n\t\t\t\t\t\tselected={filters.selfCategory}\n\t\t\t\t\t\tcategoriesRefs={categoriesRefs}\n\t\t\t\t\t\toptions={showGlobalSelfCategories ? groupedDrinksByCat : groupedDrinksBySelfcat}\n\t\t\t\t\t/>\n\t\t\t\t</DrinksHeader>\n\n\t\t\t\t<ListContainer ref={listItemsRef} padding=\"0 0.5rem\" height=\"90%\">\n\t\t\t\t\t{/* // ! PROCESSING TO GROUP DRINKS BY GLOBAL CATEGORY */}\n\t\t\t\t\t{showGlobalSelfCategories &&\n\t\t\t\t\t\tgroupedDrinksByCat.map((group: any, groupIdx: number) => (\n\t\t\t\t\t\t\t<div key={groupIdx}>\n\t\t\t\t\t\t\t\t<TitleContainer\n\t\t\t\t\t\t\t\t\tid={`${group.category._id}`}\n\t\t\t\t\t\t\t\t\tref={(node): HTMLDivElement | null => (categoriesRefs.current[groupIdx] = node)}>\n\t\t\t\t\t\t\t\t\t{group.category && (\n\t\t\t\t\t\t\t\t\t\t<FilterTitle>\n\t\t\t\t\t\t\t\t\t\t\t{group.category[`name_${currentLang}`] || t(\"common.noInfoAvailableInThisLanguage\")}\n\t\t\t\t\t\t\t\t\t\t</FilterTitle>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<Subtitle bold=\"100\" color=\"black\" padding=\"10px\" margin=\"0.5rem 0 0 0\" size=\"0.9rem\">\n\t\t\t\t\t\t\t\t\t\t{`${group.drinks.length} ${t(\"common.drinks\").toLocaleLowerCase()}`}\n\t\t\t\t\t\t\t\t\t</Subtitle>\n\t\t\t\t\t\t\t\t</TitleContainer>\n\t\t\t\t\t\t\t\t{group.selfcategories.map((selfcat: any) => (\n\t\t\t\t\t\t\t\t\t<SelfCategoriesContainer key={selfcat._id}>\n\t\t\t\t\t\t\t\t\t\t<FilterSubtitle>{selfcat[`name_${currentLang.toLowerCase()}`]}</FilterSubtitle>\n\t\t\t\t\t\t\t\t\t\t{group.drinks\n\t\t\t\t\t\t\t\t\t\t\t.filter((drink: Drink) => drink.selfdrinkcategories.includes(selfcat._id))\n\t\t\t\t\t\t\t\t\t\t\t.map((drink: Drink, index: number) => (\n\t\t\t\t\t\t\t\t\t\t\t\t<ListItem onClick={() => openDrinkDetail(drink)} key={index}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<DrinkListItem drink={drink} />\n\t\t\t\t\t\t\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t\t\t</SelfCategoriesContainer>\n\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t{/* // ! PROCESSING TO GROUP DISHES BY SELF/SUB CATEGORY */}\n\t\t\t\t\t{!showGlobalSelfCategories &&\n\t\t\t\t\t\tgroupedDrinksBySelfcat.flat().map((group: any, groupIdx: number) => (\n\t\t\t\t\t\t\t<div key={groupIdx}>\n\t\t\t\t\t\t\t\t<TitleContainer\n\t\t\t\t\t\t\t\t\tid={`${group.selfcategory._id}`}\n\t\t\t\t\t\t\t\t\tref={(node): HTMLDivElement | null => (categoriesRefs.current[groupIdx] = node)}>\n\t\t\t\t\t\t\t\t\t{group.selfcategory && (\n\t\t\t\t\t\t\t\t\t\t<FilterTitle className=\"title\">\n\t\t\t\t\t\t\t\t\t\t\t{group.selfcategory[`name_${currentLang.toLowerCase()}`] ||\n\t\t\t\t\t\t\t\t\t\t\t\tt(\"common.noInfoAvailableInThisLanguage\")}\n\t\t\t\t\t\t\t\t\t\t</FilterTitle>\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t<Subtitle bold=\"100\" color=\"black\" padding=\"10px\" margin=\"0.5rem 0 0 0\" size=\"0.9rem\">\n\t\t\t\t\t\t\t\t\t\t{`${\n\t\t\t\t\t\t\t\t\t\t\tgroup.drinks.filter((drink: Drink) => drink.selfdrinkcategories.includes(group.selfcategory._id))\n\t\t\t\t\t\t\t\t\t\t\t\t.length\n\t\t\t\t\t\t\t\t\t\t} ${t(\"common.drinks\")}`}\n\t\t\t\t\t\t\t\t\t</Subtitle>\n\t\t\t\t\t\t\t\t</TitleContainer>\n\t\t\t\t\t\t\t\t{group.drinks\n\t\t\t\t\t\t\t\t\t.filter((drink: Drink) => drink.selfdrinkcategories.includes(group.selfcategory._id))\n\t\t\t\t\t\t\t\t\t.map((drink: Drink, idx: number) => (\n\t\t\t\t\t\t\t\t\t\t<ListItem onClick={() => openDrinkDetail(drink)} key={idx}>\n\t\t\t\t\t\t\t\t\t\t\t<DrinkListItem drink={drink} />\n\t\t\t\t\t\t\t\t\t\t</ListItem>\n\t\t\t\t\t\t\t\t\t))}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t))}\n\n\t\t\t\t\t{/* Visibility sensor to dispatch load more drinks */}\n\t\t\t\t\t<VizSensor partialVisibility>\n\t\t\t\t\t\t<FlexContainer direction=\"column\" justify=\"center\" width=\"100%\">\n\t\t\t\t\t\t\t<Logo size=\"100px\" padding=\"3rem 1rem\" />\n\t\t\t\t\t\t\t<Loading show={fetchingDrinks && hasMoreDrinks} />\n\t\t\t\t\t\t</FlexContainer>\n\t\t\t\t\t</VizSensor>\n\t\t\t\t</ListContainer>\n\t\t\t</motion.div>\n\t\t\t<DrinkDetailModal close={closeDrinkDetail} />\n\t\t</>\n\t);\n};\n\nexport default RestaurantDrinks;\n","import React, { ReactElement, useEffect, useState } from \"react\";\nimport { useParams, useLocation, useHistory } from \"react-router-dom\";\nimport { AnimatePresence } from \"framer-motion\";\n\nimport { useSelector } from \"react-redux\";\nimport { Page, PageHeader, ActionBar, Loading } from \"Components/Shared\";\nimport PageContent from \"Components/Shared/Page/PageContent\";\nimport { ACTION_BAR_TYPES, ActionBarType, ClientType, ClientURL } from \"Types\";\nimport { AppState } from \"store\";\nimport RestaurantDetail from \"./RestaurantDetail\";\nimport RestaurantCellar from \"./RestaurantCellar\";\nimport { useTranslation } from \"react-i18next\";\nimport RestaurantMenu from \"./RestaurantMenu\";\nimport { useFetchClientData, useFetchDishes, useFetchDrinks, useFetchWines, useProcessQueryParams } from \"Hooks\";\nimport RestaurantDrinks from \"./RestaurantDrinks\";\n\ninterface RestaurantViewProps {\n\tisBannerOpen: boolean;\n}\nconst MAX_LIMIT_WINES = 5000;\nconst RestaurantView: React.FC<RestaurantViewProps> = ({ isBannerOpen }) => {\n\tconst { t } = useTranslation();\n\tconst history = useHistory();\n\tconst { isLoading, data: clientData } = useSelector((state: AppState) => state.client);\n\tconst { search } = useLocation(); // search contains optional query params\n\t\n\tconst { clientId, restaurantId, sectionId } = useParams<ClientURL>();\n\tconst queryParams = new URLSearchParams(search); // get query params on original URL\n\tconst clientToSearch = queryParams.get(\"clientid\") || clientId; // set clientid (queryparam) or clientId to dispatch search\n\tconst { sourceURL, isMenuAvailable, isRestaurantDetailsAvailable, homePage, goBackOriginPage } = useProcessQueryParams();\n\tconst [tab, setTab] = useState(homePage);\n\tconst { fetchData } = useFetchClientData(clientToSearch, restaurantId);\n\t\n\tconst client = useSelector((store: AppState) => store.client);\n\tconst filters = useSelector((state: AppState) => state.filters.cellar);\n\tconst { fetchDishGlobalCategories, fetchSelfDishCategories } = useFetchDishes(\n\t\tclient.data ? client.data.id : \"\",\n\t\t1,\n\t\tfilters,\n\t\trestaurantId\n\t);\n\tconst { fetchDrinkGlobalCategories, fetchSelfDrinkCategories } = useFetchDrinks(\n\t\tclient.data ? client.data.name : null,\n\t\t1,\n\t\tfilters,\n\t\trestaurantId\n\t);\n\tuseEffect(() => {\n\t\tfetchDishGlobalCategories();\n\t}, [fetchDishGlobalCategories]);\n\n\tuseEffect(() => {\n\t\tfetchSelfDishCategories();\n\t}, [fetchSelfDishCategories]);\n\n\tuseEffect(() => {\n\t\tfetchDrinkGlobalCategories();\n\t}, [fetchDrinkGlobalCategories]);\n\n\tuseEffect(() => {\n\t\tfetchSelfDrinkCategories();\n\t}, [fetchSelfDrinkCategories]);\n\n\tuseFetchWines(clientId, filters, MAX_LIMIT_WINES);\n\n\tconst onTabChange = (id: ActionBarType): void => {\n\t\tif (clientData?.client_type === \"hotel\") {\n\t\t\thistory.push(`/hotel/${clientId}/restaurant/${restaurantId}/${id}${search}`);\n\t\t} else {\n\t\t\thistory.push(`/restaurant/${clientId}/${id}${search}`);\n\t\t}\n\n\t\t// Umami tracker utility to manually dispatch register app action bar events (clicks)\n\t\t(window as any).umami.trackEvent(`${id}`, `click`);\n\n\t\t// Set new selected tab option id\n\t\tsetTab(id);\n\t};\n\n\tconst getComponentToRender = (): ReactElement => {\n\t\tconst currentView = sectionId ?? homePage;\n\n\t\tswitch (currentView) {\n\t\t\tcase ACTION_BAR_TYPES.CELLAR:\n\t\t\t\treturn <RestaurantCellar />;\n\t\t\tcase ACTION_BAR_TYPES.MENU:\n\t\t\t\treturn <RestaurantMenu />;\n\t\t\tcase ACTION_BAR_TYPES.DRINKS:\n\t\t\t\treturn <RestaurantDrinks />;\n\t\t\tdefault:\n\t\t\t\treturn <RestaurantDetail />;\n\t\t}\n\t};\n\n\tuseEffect(() => {\n\t\tsetTab(sectionId || homePage);\n\t}, [sectionId, homePage]);\n\n\tuseEffect(() => {\n\t\tclientToSearch && fetchData(); // if a client (mongoId or queryparam) is in URL, then fetchData is dispatched\n\t}, [clientToSearch, fetchData]);\n\n\t// Fallback if user reload app\n\n\treturn (\n\t\t<Page customHeight={isBannerOpen ? 92 : 100}>\n\t\t\t<PageHeader\n\t\t\t\tcolor=\"black\"\n\t\t\t\ttextColor=\"white\"\n\t\t\t\tbackText={\n\t\t\t\t\tclientData?.client_type === ClientType.HOTEL ? t(\"common.restaurants\") : sourceURL ? t(\"common.goBack\") : \"\"\n\t\t\t\t}\n\t\t\t\tbackEnabled={clientData?.client_type === ClientType.HOTEL || sourceURL ? true : false}\n\t\t\t\tcustomBackAction={sourceURL && !restaurantId ? goBackOriginPage(sourceURL) : undefined}\n\t\t\t/>\n\t\t\t<PageContent className=\"page-content\">\n\t\t\t\t<AnimatePresence exitBeforeEnter>\n\t\t\t\t\t{isLoading ? <Loading show={true} logo={true} /> : getComponentToRender()}\n\t\t\t\t</AnimatePresence>\n\t\t\t</PageContent>\n\t\t\t<ActionBar\n\t\t\t\tonChange={onTabChange}\n\t\t\t\tactive={tab as ActionBarType}\n\t\t\t\tmenu={isMenuAvailable}\n\t\t\t\trestaurantDetails={isRestaurantDetailsAvailable}\n\t\t\t/>\n\t\t</Page>\n\t);\n};\n\nexport default RestaurantView;\n","import React, { useEffect, useState } from \"react\";\nimport { RouteComponentProps, useParams, useHistory, useLocation } from \"react-router-dom\";\n\nimport { FlexContainer, Loader, Logo, Page, SocialBanner } from \"Components/Shared\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { AppState } from \"store\";\nimport { useTranslation } from \"react-i18next\";\nimport useFetchClientData from \"Hooks/useFetchClientData\";\nimport { Description } from \"Components/Core\";\nimport { ClientURL } from \"Types\";\nimport PageContent from \"Components/Shared/Page/PageContent\";\nimport { APP_VERSION } from \"env\";\nimport { getCellarData } from \"Reducers/Categories\";\nimport { getRestaurantSelections } from \"Reducers/Selections\";\n\nconst WelcomeView: React.FC<RouteComponentProps> = () => {\n\t// * REDUX STATE\n\tconst client = useSelector((state: AppState) => state.client);\n\n\t// * LOCAL STATE\n\tconst [userNotFound, setUserNotFound] = useState<boolean>(false);\n\tconst [disabledClient, setDisabledClient] = useState<boolean>(false);\n\n\t// * LOCAL HELPERS\n\tconst history = useHistory();\n\tconst { t } = useTranslation();\n\tconst { search } = useLocation(); // search contains optional query params\n\tconst dispatch = useDispatch();\n\n\tconst { clientId, restaurantId }: ClientURL = useParams<ClientURL>(); // clientId or name on URL\n\tconst queryParams = new URLSearchParams(search); // get query params on original URL\n\tconst clientToSearch = queryParams.get(\"clientid\") || clientId; // set clientid (queryparam) or clientId to dispatch search\n\tconst { fetchData } = useFetchClientData(clientToSearch, restaurantId);\n\t\n\n\t// * STATE MANAGEMENT\n\tuseEffect(() => {\n\t\tclientToSearch && fetchData(); // if a client (mongoId or queryparam) is in URL, then fetchData is dispatched\n\t\t!clientToSearch && setUserNotFound(true); // if no mongoId for user nor queryparam is in URL, then set user not found to display on UI\n\t}, [clientToSearch, fetchData]);\n\n\tuseEffect(() => {\n\t\tif (!client.data || !client.data.client_type) return;\n\n\t\tconst username = client.data.clientid || clientId;\n\t\tconst clientType = client.data.client_type ? client.data.client_type : \"restaurant\";\n\n\t\t// Special case: check if is deadbeat client or is disabled\n\t\tconst isDisabled = !client.data.habilitado;\n\t\tsetDisabledClient(isDisabled);\n\t\tif (isDisabled) return;\n\n\t\t// Umami tracker utility to manually dispatch register visited client\n\t\t(window as any).umami.trackView(`/${username}`);\n\n\t\t// Redirect to its correspondant view\n\t\thistory.push(`/${clientType}/${username}${search}`); // Redirect to Hotel or Restaurant container (view)\n\t}, [history, search, clientId, client]);\n\n\tuseEffect(() => {\n\t\tif (!client.data?.clientid) return;\n\t\tdispatch(getCellarData(client.data.clientid));\n\t}, [client.data, dispatch]);\n\n\tuseEffect(() => {\n\t\tdispatch(getRestaurantSelections({ clientName: clientId }));\n\t}, [clientId, dispatch]);\n\n\t// * COMPONENT RENDERING\n\tif (disabledClient) {\n\t\treturn (\n\t\t\t<Page>\n\t\t\t\t<PageContent>\n\t\t\t\t\t<FlexContainer width=\"100%\" height=\"100%\" direction=\"column\" justify=\"center\" align=\"center\">\n\t\t\t\t\t\t<Logo size=\"200px\" />\n\t\t\t\t\t\t<Description margin=\"0.5rem 0\">{`v${APP_VERSION}`}</Description>\n\t\t\t\t\t\t<Description margin=\"0.5rem 0\">{t(\"common.userDisabled\")}</Description>\n\t\t\t\t\t\t<SocialBanner />\n\t\t\t\t\t</FlexContainer>\n\t\t\t\t</PageContent>\n\t\t\t</Page>\n\t\t);\n\t}\n\n\treturn (\n\t\t<Page>\n\t\t\t<PageContent>\n\t\t\t\t<FlexContainer width=\"100%\" height=\"100%\" direction=\"column\" justify=\"center\" align=\"center\">\n\t\t\t\t\t{!client.error && !userNotFound && <Loader customText={`v${APP_VERSION}`} logo text size=\"150px\" />}\n\t\t\t\t\t{(client.error || userNotFound) && (\n\t\t\t\t\t\t<>\n\t\t\t\t\t\t\t<Logo size=\"200px\" />\n\t\t\t\t\t\t\t<Description margin=\"0.5rem 0\">{`v${APP_VERSION}`}</Description>\n\t\t\t\t\t\t\t<Description margin=\"0.5rem 0\">{t(\"common.userNotFoundError\")}</Description>\n\t\t\t\t\t\t\t<SocialBanner />\n\t\t\t\t\t\t</>\n\t\t\t\t\t)}\n\t\t\t\t</FlexContainer>\n\t\t\t</PageContent>\n\t\t</Page>\n\t);\n};\n\nexport default WelcomeView;\n","import React, { useEffect } from \"react\";\nimport { Description } from \"Components/Core\";\nimport { FlexContainer, Logo, Page, SocialBanner } from \"Components/Shared\";\nimport PageContent from \"Components/Shared/Page/PageContent\";\nimport { useTranslation } from \"react-i18next\";\nimport { RouteComponentProps } from \"react-router-dom\";\n\nconst ErrorView: React.FC<RouteComponentProps> = () => {\n\tconst { t } = useTranslation();\n\n\tuseEffect(() => {\n\t\t// Umami tracker utility to manually dispatch register visited client\n\t\t(window as any).umami.trackView(`/Error`);\n\t}, []);\n\n\treturn (\n\t\t<Page>\n\t\t\t<PageContent>\n\t\t\t\t<FlexContainer width=\"100%\" height=\"100%\" direction=\"column\" justify=\"center\" align=\"center\">\n\t\t\t\t\t<Logo size=\"200px\" />\n\t\t\t\t\t<Description>{t(\"common.pageNotFound\")}</Description>\n\t\t\t\t\t<SocialBanner />\n\t\t\t\t</FlexContainer>\n\t\t\t</PageContent>\n\t\t</Page>\n\t);\n};\n\nexport default ErrorView;\n","import React, { useEffect, useState } from \"react\";\nimport { BrowserRouter as Router, Redirect, Route, Switch } from \"react-router-dom\";\n\nimport HotelView from \"./Pages/HotelView\";\nimport RestaurantView from \"./Pages/RestaurantView\";\nimport WelcomeView from \"./Pages/WelcomeView\";\nimport ErrorView from \"./Pages/ErrorView\";\nimport { AnimatePresence } from \"framer-motion\";\nimport { AppDownloadBanner, CookiesAdvertising } from \"./Components/Shared\";\n\nconst OPEN_BANNER_TIMEOUT_SEC = 10_000;\n\nconst App = (): any => {\n\tconst [isBannerOpen, setIsBannerOpen] = useState(true);\n\n\tuseEffect(() => {\n\t\tif (isBannerOpen) return;\n\n\t\tconst timer = setTimeout(() => setIsBannerOpen(true), OPEN_BANNER_TIMEOUT_SEC);\n\n\t\treturn (): void => {\n\t\t\tclearTimeout(timer);\n\t\t};\n\t}, [isBannerOpen]);\n\n\treturn (\n\t\t<Router>\n\t\t\t<AnimatePresence>\n\t\t\t\t<AppDownloadBanner key=\"download-banner\" isOpen={isBannerOpen} handleBanner={setIsBannerOpen} />\n\t\t\t\t<Switch>\n\t\t\t\t\t<Route\n\t\t\t\t\t\texact\n\t\t\t\t\t\tpath=\"/client-app/:clientType?/:clientId/:sectionId?/:itemId?/:wineId?\"\n\t\t\t\t\t\trender={({ location }): any => {\n\t\t\t\t\t\t\tconst [, username] = location.pathname.split(\"/client-app/\");\n\t\t\t\t\t\t\treturn <Redirect to={{ ...location, pathname: `/${username}`, search: location.search }} />;\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t\t<Route exact path=\"/:clientId\" render={(props): any => <WelcomeView {...props} />} />\n\t\t\t\t\t<Route\n\t\t\t\t\t\tpath=\"/private-event/:clientId/:sectionId?/:itemId?/:wineId?\"\n\t\t\t\t\t\trender={(props): any => <RestaurantView isBannerOpen={isBannerOpen} {...props} />}\n\t\t\t\t\t/>\n\t\t\t\t\t<Route\n\t\t\t\t\t\tpath=\"/restaurant/:clientId/:sectionId?/:itemId?/:wineId?\"\n\t\t\t\t\t\trender={(props): any => <RestaurantView isBannerOpen={isBannerOpen} {...props} />}\n\t\t\t\t\t/>\n\t\t\t\t\t<Route\n\t\t\t\t\t\texact\n\t\t\t\t\t\tpath=\"/hotel/:clientId\"\n\t\t\t\t\t\trender={(props): any => <HotelView isBannerOpen={isBannerOpen} {...props} />}\n\t\t\t\t\t/>\n\t\t\t\t\t<Route\n\t\t\t\t\t\tpath=\"/hotel/:clientId/restaurant/:restaurantId/:sectionId?/:itemId?/:wineId?\"\n\t\t\t\t\t\trender={(props): any => <RestaurantView isBannerOpen={isBannerOpen} {...props} />}\n\t\t\t\t\t/>\n\t\t\t\t\t<Route path=\"*\" render={(props): any => <ErrorView {...props} />} />\n\t\t\t\t</Switch>\n\t\t\t\t<CookiesAdvertising key=\"cookies-banner\" />\n\t\t\t</AnimatePresence>\n\t\t</Router>\n\t);\n};\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n  window.location.hostname === 'localhost' ||\n    // [::1] is the IPv6 localhost address.\n    window.location.hostname === '[::1]' ||\n    // 127.0.0.0/8 are considered localhost for IPv4.\n    window.location.hostname.match(\n      /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n    )\n);\n\ntype Config = {\n  onSuccess?: (registration: ServiceWorkerRegistration) => void;\n  onUpdate?: (registration: ServiceWorkerRegistration) => void;\n};\n\nexport function register(config?: Config) {\n  if (process.env.REACT_APP_NODE_ENVIRONMENT === 'production' && 'serviceWorker' in navigator) {\n    // The URL constructor is available in all browsers that support SW.\n    const publicUrl = new URL(\n      process.env.PUBLIC_URL,\n      window.location.href\n    );\n    if (publicUrl.origin !== window.location.origin) {\n      // Our service worker won't work if PUBLIC_URL is on a different origin\n      // from what our page is served on. This might happen if a CDN is used to\n      // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n      return;\n    }\n\n    window.addEventListener('load', () => {\n      const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n      if (isLocalhost) {\n        // This is running on localhost. Let's check if a service worker still exists or not.\n        checkValidServiceWorker(swUrl, config);\n\n        // Add some additional logging to localhost, pointing developers to the\n        // service worker/PWA documentation.\n        navigator.serviceWorker.ready.then(() => {\n          console.log(\n            'This web app is being served cache-first by a service ' +\n              'worker. To learn more, visit https://bit.ly/CRA-PWA'\n          );\n        });\n      } else {\n        // Is not localhost. Just register service worker\n        registerValidSW(swUrl, config);\n      }\n    });\n  }\n}\n\nfunction registerValidSW(swUrl: string, config?: Config) {\n  navigator.serviceWorker\n    .register(swUrl)\n    .then(registration => {\n      registration.onupdatefound = () => {\n        const installingWorker = registration.installing;\n        if (installingWorker == null) {\n          return;\n        }\n        installingWorker.onstatechange = () => {\n          if (installingWorker.state === 'installed') {\n            if (navigator.serviceWorker.controller) {\n              // At this point, the updated precached content has been fetched,\n              // but the previous service worker will still serve the older\n              // content until all client tabs are closed.\n              console.log(\n                'New content is available and will be used when all ' +\n                  'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n              );\n\n              // Execute callback\n              if (config && config.onUpdate) {\n                config.onUpdate(registration);\n              }\n            } else {\n              // At this point, everything has been precached.\n              // It's the perfect time to display a\n              // \"Content is cached for offline use.\" message.\n              console.log('Content is cached for offline use.');\n\n              // Execute callback\n              if (config && config.onSuccess) {\n                config.onSuccess(registration);\n              }\n            }\n          }\n        };\n      };\n    })\n    .catch(error => {\n      console.error('Error during service worker registration:', error);\n    });\n}\n\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\n  // Check if the service worker can be found. If it can't reload the page.\n  fetch(swUrl, {\n    headers: { 'Service-Worker': 'script' }\n  })\n    .then(response => {\n      // Ensure service worker exists, and that we really are getting a JS file.\n      const contentType = response.headers.get('content-type');\n      if (\n        response.status === 404 ||\n        (contentType != null && contentType.indexOf('javascript') === -1)\n      ) {\n        // No service worker found. Probably a different app. Reload the page.\n        navigator.serviceWorker.ready.then(registration => {\n          registration.unregister().then(() => {\n            window.location.reload();\n          });\n        });\n      } else {\n        // Service worker found. Proceed as normal.\n        registerValidSW(swUrl, config);\n      }\n    })\n    .catch(() => {\n      console.log(\n        'No internet connection found. App is running in offline mode.'\n      );\n    });\n}\n\nexport function unregister() {\n  if ('serviceWorker' in navigator) {\n    navigator.serviceWorker.ready\n      .then(registration => {\n        registration.unregister();\n      })\n      .catch(error => {\n        console.error(error.message);\n      });\n  }\n}\n","import i18n from 'i18next';\nimport Backend from 'i18next-http-backend';\nimport LanguageDetector from 'i18next-browser-languagedetector';\nimport { initReactI18next } from 'react-i18next';\n\n\ni18n.use(LanguageDetector).use(Backend).use(initReactI18next).init({\n  debug: false,\n  detection: {\n    order: ['navigator', 'htmlTag', 'path', 'subdomain'],\n    caches: ['localStorage', 'cookie'],\n  },\n  interpolation: {\n    escapeValue: false,\n  },\n  fallbackLng: 'es',\n});\n\nexport default i18n;\n\n\n","import { configureStore, getDefaultMiddleware } from \"@reduxjs/toolkit\";\n\nimport clientSlice, { ClientState } from \"./Reducers/Client\";\nimport winesSlice, { WinesState } from \"./Reducers/Wines\";\nimport dishesSlice, { DishesState } from \"./Reducers/Dishes\";\nimport drinksSlice, { DrinksState } from \"./Reducers/Drinks\";\nimport filtersSlice, { FiltersState } from \"./Reducers/Filters\";\nimport categoriesSlice, { CategoriesState } from \"./Reducers/Categories\";\nimport SelectionsSlice, { SelectionsState } from \"Reducers/Selections\";\n\nconst reducer = {\n\tcategories: categoriesSlice.reducer,\n\tclient: clientSlice.reducer,\n\tdishes: dishesSlice.reducer,\n\tdrinks: drinksSlice.reducer,\n\tfilters: filtersSlice.reducer,\n\tselections: SelectionsSlice.reducer,\n\twines: winesSlice.reducer,\n};\n\nconst store = configureStore({\n\treducer,\n\tmiddleware: [\n\t\t...getDefaultMiddleware({\n\t\t\timmutableCheck: false, // to disable the SerializableStateInvariantMiddleware\n\t\t}),\n\t],\n});\n\nexport interface AppState {\n\tcategories: CategoriesState;\n\tclient: ClientState;\n\tdishes: DishesState;\n\tdrinks: DrinksState;\n\tfilters: FiltersState;\n\tselections: SelectionsState;\n\twines: WinesState;\n}\n\nexport default store;\nexport type RootState = ReturnType<typeof store.getState>;\n","import { createGlobalStyle, css } from \"styled-components\";\n\n/* const centuryFont = '../assets/fonts/CenturyGothic.ttf';\nconst centuryBoldFont = '../assets/fonts/CenturyGothicBold.ttf'; */\n\nexport const GlobalStyle = createGlobalStyle(\n\tprops => css`\n\t\thtml {\n\t\t\tscroll-behaviour: smooth;\n\t\t}\n\n\t\tbody {\n\t\t\tscroll-behaviour: smooth;\n\t\t\tmargin: 0;\n\t\t\tpadding: 0;\n\t\t\twidth: 100%;\n\t\t\tmax-width: 500px;\n\t\t\tmax-width: 500px;\n\t\t\tposition: relative;\n\t\t\tleft: 50%;\n\t\t\ttransform: translateX(-50%);\n\t\t\tbackground-color: black;\n\n\t\t\th1,\n\t\t\th2,\n\t\t\th3,\n\t\t\th4,\n\t\t\th5,\n\t\t\th6,\n\t\t\tp,\n\t\t\tspan,\n\t\t\ta,\n\t\t\tdiv,\n\t\t\tsection,\n\t\t\tinput,\n\t\t\ttextarea,\n\t\t\tbutton,\n\t\t\timg ul,\n\t\t\tli,\n\t\t\tol {\n\t\t\t\tmargin: 0;\n\t\t\t\tpadding: 0;\n\t\t\t\ttext-decoration: none;\n\t\t\t\tlist-style: none;\n\t\t\t\tbox-sizing: border-box;\n\t\t\t}\n\n\t\t\t* {\n\t\t\t\tfont-family: \"CenturyGothic\";\n\t\t\t}\n\n\t\t\th1,\n\t\t\th2,\n\t\t\th3,\n\t\t\th4,\n\t\t\th5,\n\t\t\th6,\n\t\t\tp,\n\t\t\tspan,\n\t\t\tbutton,\n\t\t\ta {\n\t\t\t\tcolor: ${({ theme }) => theme.colors.dark};\n\t\t\t\t&.bold {\n\t\t\t\t\tfont-family: \"CenturyGothicBold\";\n\t\t\t\t}\n\t\t\t\t&.light {\n\t\t\t\t\tcolor: ${({ theme }) => theme.colors.light};\n\t\t\t\t}\n\t\t\t\t&.med {\n\t\t\t\t\tcolor: ${({ theme }) => theme.colors.med};\n\t\t\t\t}\n\t\t\t\t&.accent-red {\n\t\t\t\t\tcolor: ${({ theme }) => theme.colors.red};\n\t\t\t\t}\n\t\t\t\t&.accent-blue {\n\t\t\t\t\tcolor: ${({ theme }) => theme.colors.blue};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\th1 {\n\t\t\t\tfont-size: 1.4rem;\n\t\t\t}\n\t\t\th2 {\n\t\t\t\tfont-size: 1.3rem;\n\t\t\t}\n\t\t\th3 {\n\t\t\t\tfont-size: 1.2rem;\n\t\t\t}\n\t\t\th4 {\n\t\t\t\tfont-size: 1.1rem;\n\t\t\t}\n\t\t\th5 {\n\t\t\t\tfont-size: 1rem;\n\t\t\t}\n\t\t\th6 {\n\t\t\t\tfont-size: 0.9rem;\n\t\t\t}\n\t\t\tp {\n\t\t\t\tfont-size: 0.9rem;\n\t\t\t}\n\t\t\tspan,\n\t\t\ta {\n\t\t\t\tfont-size: 0.9rem;\n\t\t\t}\n\t\t\tinput,\n\t\t\ttextarea {\n\t\t\t\tfont-size: 0.9rem;\n\t\t\t}\n\n\t\t\t@media screen and (min-width: ${({ theme }) => theme.screen_sizes.m}) {\n\t\t\t\th1 {\n\t\t\t\t\tfont-size: 3vw;\n\t\t\t\t}\n\t\t\t\th2 {\n\t\t\t\t\tfont-size: 2.8vw;\n\t\t\t\t}\n\t\t\t\th3 {\n\t\t\t\t\tfont-size: 2.6vw;\n\t\t\t\t}\n\t\t\t\th4 {\n\t\t\t\t\tfont-size: 2.3vw;\n\t\t\t\t}\n\t\t\t\th5 {\n\t\t\t\t\tfont-size: 2.2vw;\n\t\t\t\t}\n\t\t\t\th6 {\n\t\t\t\t\tfont-size: 2vw;\n\t\t\t\t}\n\t\t\t\tp {\n\t\t\t\t\tfont-size: 1.6vw;\n\t\t\t\t}\n\t\t\t\tspan,\n\t\t\t\ta {\n\t\t\t\t\tfont-size: 1.6vw;\n\t\t\t\t}\n\t\t\t\tinput,\n\t\t\t\ttextarea {\n\t\t\t\t\tfont-size: 1.6vw;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@media screen and (min-width: ${({ theme }) => theme.screen_sizes.l}) {\n\t\t\t\th1 {\n\t\t\t\t\tfont-size: 2.2rem;\n\t\t\t\t}\n\t\t\t\th2 {\n\t\t\t\t\tfont-size: 2rem;\n\t\t\t\t}\n\t\t\t\th3 {\n\t\t\t\t\tfont-size: 1.8rem;\n\t\t\t\t}\n\t\t\t\th4 {\n\t\t\t\t\tfont-size: 1.6rem;\n\t\t\t\t}\n\t\t\t\th5 {\n\t\t\t\t\tfont-size: 1.4rem;\n\t\t\t\t}\n\t\t\t\th6 {\n\t\t\t\t\tfont-size: 0.9rem;\n\t\t\t\t}\n\t\t\t\tp {\n\t\t\t\t\tfont-size: 0.7rem;\n\t\t\t\t}\n\t\t\t\tspan,\n\t\t\t\ta {\n\t\t\t\t\tfont-size: 0.7rem;\n\t\t\t\t}\n\t\t\t\tinput,\n\t\t\t\ttextarea {\n\t\t\t\t\tfont-size: 0.7rem;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t`\n);\n","import React, { Suspense } from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { ThemeProvider } from 'styled-components';\n\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nimport './index.scss';\n\nimport './i18n';\nimport store from './store';\nimport { GlobalStyle } from './Styles/GlobalStyles';\nimport { AppTheme } from './Styles/Theme';\nimport \"../node_modules/flag-icons/css/flag-icons.min.css\"\n\n\nReactDOM.render(\n  <>\n    <Suspense fallback={<div></div>}>\n      <Provider store={store}>\n        <ThemeProvider theme={AppTheme}>\n          <GlobalStyle/>\n          <App />\n        </ThemeProvider>\n      </Provider> \n    </Suspense>\n  </>,\n  document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/logo-black@2x.e432f0a5.png\";","module.exports = __webpack_public_path__ + \"static/media/logo-white@2x.1e16dba6.png\";","module.exports = \"data:image/png;base64,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\"","module.exports = __webpack_public_path__ + \"static/media/table.58291657.png\";","module.exports = __webpack_public_path__ + \"static/media/wood.183a66ee.png\";","module.exports = __webpack_public_path__ + \"static/media/food.2bc4539b.png\";","module.exports = \"data:image/png;base64,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\""],"sourceRoot":""}