{"version":3,"sources":["components/Checkbox.js","components/Loader/Loader.js","utils/mongo_utils.js","components/PicturePicker/Modal.js","components/PicturePicker/PicturePicker.js","utils/Locale.js","containers/AdminPanel/WinrestForm.js","containers/AdminPanel/ExcelForm.js","containers/AdminPanel/style.js","containers/AdminPanel/WinrestForm2.js","utils/Date.js","utils/LoadingContext.js","containers/AdminPanel/MenuSettings.js","components/Header/style.js","components/Header/Header.js","components/Kiosk/style.js","components/LabelIcons/LabelIcons.js","components/WeekView/CellItems/CellItems.js","components/WeekView/GridMenu/GridMenu.js","components/PrintView/style.js","components/WeekView/WeekView.js","components/Kiosk/Kiosk.js","components/MobileView/MobileView.js","components/PrintView/PrintKiosk.js","components/KioskView/Kiosk/MenuKiosk.js","components/NoDataSegment/NoDataSegment.js","components/PrintView/PrintView.js","components/KioskView/Header/Header.js","components/KioskView/Header/MonoHeader.js","components/KioskView/Kiosk/MonoKiosk.js","components/KioskView/style.js","components/KioskView/Kiosk/MenuPrice.js","components/KioskView/Kiosk/MonoFooter.js","components/KioskView/Kiosk/DuoKisok.js","components/KioskView/KioskView.js","components/LabelView/style.js","components/LabelView/LabelView.js","containers/MenuPanel/MenuPanel.js","containers/AdminPanel/AdminPanel.js","utils/AdalConfig.js","utils/AuthService.js","utils/UrlUtils.js","containers/Main/Main.js","containers/ErrorBoundary/ErrorBoundary.js","App.js","serviceWorker.js","index.js","../external \"settings\"","components/MobileView/MobileView.module.css","../external \"themes\"","components/WeekView/GridMenu/GridMenu.module.css"],"names":["Checkbox","_ref","label","labelLeft","onAction","props","Object","objectWithoutProperties","react_default","a","createElement","Label","Wrapper","Input","assign","type","onChange","Checker","checked","styled","_templateObject","span","_templateObject2","_ref2","_templateObject3","_ref3","_ref4","_ref5","input","_templateObject4","Loader","small","white","Container","LoaderWrapper","div","Loader_templateObject","Loader_templateObject2","_ref6","_ref7","_ref8","_ref9","_ref10","_ref11","getSlugFromString","string","arguments","length","undefined","slugify","replacement","remove","lower","replace","CollectionDB","name","_this","this","classCallCheck","compare","b","key","genreA","toUpperCase","genreB","comparison","clear","data","upsert","doc","isExisting","index","map","item","i","id","objectSpread","push","insert","find","args","params","argsKeys","keys","results","filter","test","subkeys","indexOf","subkey","sort","findOne","MongoSites","MongoTypeGuests","MongoPointsOfSale","MongoMenus","MongoTypeMeals","MongoTypeRecipes","MongoRecipes","MongoIntolerances","resetDatabase","resetSiteDatabase","setCountryDatabase","asyncToGenerator","regenerator_default","mark","_callee","_ref$data","_data$Sites","Sites","_data$Intolerances","Intolerances","_data$TypeGuests","TypeGuests","_data$TypeMeals","TypeMeals","_data$TypeRecipes","TypeRecipes","wrap","_context","prev","next","slug","abrupt","stop","_x","apply","setSiteDatabase","_callee2","_ref3$data","date","_context2","singlePointOfSale","_singlePointOfSale$me","menus","pointOfSale","singleMenu","_singleMenu$recipes","recipes","menu","existingMenu","pointOfSaleSlugs","mealTypeSlug","mealTypeId","guestTypeSlug","guestTypeId","defineProperty","existingMealType","existingGuestType","recipe","existingRecipe","menuSlugs","dates","order","existingRecipeType","recipeTypeId","_x2","modalRoot","document","getElementById","Modal","_super","call","el","appendChild","removeChild","createPortal","children","Component","PicturePicker","open","_ref$concept","concept","handleChange","close","excel","useCommercialName","PicturePicker_Modal","Shade","Segment","Header","CloseButton","onClick","className","themes","kiosks_background","getFolders","kiosk","style","position","e","target","concat","KioskHeader","src","button","PicturePicker_templateObject","PicturePicker_templateObject2","h2","PicturePicker_templateObject3","PicturePicker_templateObject4","_templateObject5","getLanguage","language","result","split","buttonStyle","Button","WinrestForm_templateObject","Link","WinrestForm_templateObject2","ButtonDiv","WinrestForm_templateObject3","LineWrapper","WinrestForm_templateObject4","ExcelForm","state","render","_this$props","entityId","siteId","file","forceToday","service","kiosks","displayMode","dayCount","orientation","zoom","size","hideComposition","hideLabels","isDuoKiosk","startDay","print","maxDate","minDate","days","concepts","services","languages","displayModes","openPrintDialog","generateUrl","hideMenuPrice","hideRecipePoints","title","subtitle","showDate","setExcludedDays","defaultTitle","Settings","translations","today","react","FormGroup","value","code","MenuSettings_Separator","placeholder","components_Checkbox","KioskSelection","nogrid","components_PicturePicker_PicturePicker","pickReciPic","setState","enabled","typedKioskPics","JSON","parse","localStorage","getItem","SAVED_RECIPES_PICTURES_EXCEL","newEvent","min","max","readOnly","disabled","day","height","multiple","visible","step","ActionLink","href","rel","style_templateObject","style_templateObject2","style_templateObject3","Separator","style_templateObject4","style_templateObject5","WinrestForm2","_useState","useState","_useState2","slicedToArray","sites","setSites","_useState3","_useState4","guestTypes","setGuestTypes","_useState5","_useState6","mealTypes","setMealTypes","_useState7","_useState8","pointOfSales","setPointOfSales","_useState9","defaultValues","baseUrl","_useState10","setBaseUrl","_useState11","_useState12","setSiteId","_useState13","_useState14","pointOfSaleId","setPointOfSaleId","_useState15","_useState16","setGuestTypeId","_useState17","_useState18","setMealTypeId","_useState19","_useState20","menuId","setMenuId","_useState21","_useState22","recipeTypes","setRecipeTypes","_useState23","_useState24","defaultKiosks","setDefaultKiosks","_useState25","_useState26","currentPointOfSale","setCurrentPointOfSale","_useState27","_useState28","setAllRecipes","_useState29","_useState30","selectedRecipeTypes","setSelectedRecipeTypes","_useState31","_useState32","loading","setLoading","_useState33","_useState34","currentRecipePicture","setCurrentRecipePicture","_useState35","_useState36","pictures","setPictures","prevDayCount","useRef","useEffect","url","CryptoJS","MD5","axios","get","headers","bearer","sent","fetch","values","reduce","res","byGuestTypes","groupBy","byMealTypes","_","updateRecipes","current","includedDays","excludedDays","_date","moment","updateLocale","week","dow","locale","startOf","dayToAdd","clone","add","getIncludedDays","_callee3","urls","d","_i","allRecipeTypes","allRecipes","_loop","_i2","_defaultKiosks","_selectedRecipeTypes","_context3","format","slice","currency","forEach","includes","recipeTypeName","recipesCopy","groupedByDefaultKiosk","defaultKiosk","defaultKiosksFlattenArray","toConsumableArray","setDefaultRecipePictures","recipesByType","xs","rv","x","r","Fragment","onBlur","singleSite","lastIndexOf","picture","style_LineWrapper","handleChangeSelectedRecipeTypes","style_Button","handleChangeSelectedDefaultKiosk","uiLanguage","winrestLanguage","hideEnergyKcal","showEnergyKcalByPortion","hideIntolerences","style_ButtonDiv","window","components_Loader_Loader","LoadingContext","createContext","Provider","Consumer","LoaderProvider","_Component","inherits","LoadingContext_createSuper","_len","Array","_key","setUnloading","LoaderConsumer","Comp","context","DATA_SOURCES","none","form","winrest2","MenuSettingsWrapper","MenuSettings_templateObject","settingsDrawerOpen","css","MenuSettings_templateObject2","MenuSettings_templateObject3","Logo","img","MenuSettings_templateObject4","MenuSettings_templateObject5","_templateObject6","_templateObject7","_templateObject8","winrestURL","openDrawer","dataSource","closeDrawer","pointOfSaleSlug","menuSlug","FormWithSource","source","queryParams","encodeURIComponent","toString","excelQueryParams","kioskPicture","join","currentSite","Number","winrestQueryParams","winrestData","stringify","Header_style_templateObject","theme","header_background","mode","header_border_color","Header_style_templateObject2","Header_style_templateObject3","Header_style_templateObject4","Header_style_templateObject5","header_font_family","header_font_size","style_templateObject6","style_templateObject7","Title","h1","style_templateObject8","titleFontSize","header_font_color","lineHeight","Week","_templateObject9","_templateObject10","header","style_Header","style_Logo","KioskContent","Kiosk_style_templateObject","isMonoKiosk","Kiosk_style_templateObject2","Kiosk_style_templateObject3","backgroundImage","RecipeTitle","Kiosk_style_templateObject4","recipe_title_font_color","RecipeItem","Kiosk_style_templateObject5","recipe_border_color","customStyle","RecipePoints","RecipePrice","Kiosk_style_templateObject6","recipe_price_font_color","recipe_price_background","Kiosk_style_templateObject7","print_recipe_price_font_color","print_recipe_price_background","Kiosk_style_templateObject8","fullWidth","endPosition","recipe_points_font_color","recipe_points_background","style_templateObject9","print_recipe_points_font_color","print_recipe_points_background","EnergyKCal","style_templateObject10","RecipeComposition","_templateObject11","RecipeLabels","_templateObject12","RecipeLabel","_templateObject13","Icons","LabelIcons_templateObject","Icon","LabelIcons_templateObject2","labelIcons","allergenProperties","count","allergens","isWinrest","alt","onError","display","Cell","CellItems_templateObject","cellItems","items","menu_board_label","energyKCalByPortion","energyKCal","marginLeft","fontSize","price_point","caracteristique_produit","LabelIcons","StyledGrid","Grid","GridMenu_templateObject","autoHeight","GridHeader","GridMenu_templateObject2","grid_header_font_color","grid_header_background","StyledCell","GridMenu_templateObject3","grid_border_color","FirstStyledCell","GridMenu_templateObject4","grid_first_column_background","NameHeader","h4","GridMenu_templateObject5","gridMenu","_props$days","_props$items","columns","gap","styled_css_grid_esm","styles","_ref3$items","FirstColumn","CellItems","pageSizes","A4","width","A5","A3","GlobalStyle","createGlobalStyle","PrintView_style_templateObject","PrintView_style_templateObject2","Page","PrintView_style_templateObject3","centered","PrintView_style_templateObject4","PrintHeader","PrintView_style_templateObject5","print_header_font_family","print_header_font_size","PrintView_style_templateObject6","TopMenuBorder","PrintView_style_templateObject7","print_borders_color","BottomMenuBorder","PrintView_style_templateObject8","PageBorder","PrintView_style_templateObject9","fullSize","side","PrintView_style_templateObject10","content_font_family","ActionButtons","style_templateObject11","ActionButton","style_templateObject12","MonoKioskDate","style_templateObject13","weekView","isReady","_props$language","lang","headerTitle","this_week","headerSubtitle","week_from","firstDay","lastDay","month","to_week","_getWeekDateString","Header_Header","GridMenu","margin","bottom","top","right","backgroundColor","style_KioskHeader","Kiosk_NameHeader","displayName","priceInt","priceSup","winrest_price","price_currency","priceMatches","exec","decimals","parseInt","trim","price","priceArray","produit_du_jour","marginTop","marginRight","composition","Kiosk_templateObject","recipe_type_font_color","mono","MobileView_templateObject","background","DayLink","MobileView_templateObject2","MobileView_templateObject3","active","active_day_color","DaysWrapper","MobileView_templateObject4","DateLabel","MobileView_templateObject5","DayLabel","MobileView_templateObject6","Arrow","MobileView_templateObject7","InformationBloc","p","MobileView_templateObject8","MobileView","reactSwipeEl","daysBand","selectedIndex","startIndex","goToDate","slide","onTransitionEnd","selectedDay","scrollTo","offsetLeft","body","clientWidth","scrollMenuRef","swipeOptions","startSlide","transitionEnd","onSelect","_this2","_this$props$language","MobileView_Wrapper","grid","maxWidth","_this$props$items","breakpointColumnsObj","default","900","500","fullContent","isKiosksEmpty","kiosksRender","_ref$items","_ref$name","_ref$kioskPicture","Kiosk","react_masonry_css_es5_default","columnClassName","breakpointCols","itemDate","dayLabel","dateLabel","dayLink","daysBar","build_default","ref","arrowLeft","focusable","viewBox","arrowRight","selected","alignCenter","scrollToSelected","hideArrows","itemClass","itemClassActive","dailyMenu","react_swipe_lib_default","childCount","PrintKioskHeader","PrintKiosk_templateObject","PrintKiosk_templateObject2","PrintKioskContent","PrintKiosk_templateObject3","PrintKiosk_templateObject4","PrintMonoKioskTitle","PrintKiosk_templateObject5","PrintLogoLine","PrintKiosk_templateObject6","print_kiosk_border_color","print_kiosk_border_width","PrintRecipeItem","PrintKiosk_templateObject7","PrintKiosk_templateObject8","PrintKiosk_templateObject9","isHighlighted","PrintKiosk_templateObject10","PrintKiosk_templateObject11","PrintRecipeTitle","PrintKiosk_templateObject12","StyledInlineInput","PrintKiosk_templateObject13","_templateObject14","StyledEditableRecipeTitle","_templateObject15","editMode","printKiosk","React","editedItems","monoKioskTitle","isAdmin","padding","MenuWrapper","MenuKiosk_templateObject","MenuKiosk_templateObject2","MenuKiosk_templateObject3","Recipes","MenuKiosk_templateObject4","MenuKiosk_templateObject5","MenuRecipeItem","MenuKiosk_templateObject6","MenuRecipeTitle","MenuKiosk_templateObject7","MenuRecipeComposition","MenuKiosk_templateObject8","KioskLogo","MenuKiosk_templateObject9","MenusWrapper","MenuKiosk_templateObject10","MenuKiosk_templateObject11","Offers","MenuKiosk_templateObject12","MenuKiosk_templateObject13","OfferTitle","MenuKiosk_templateObject14","MenuRecipeLabels","MenuKiosk_templateObject15","OfferPrice","_templateObject16","PrintLogo","_templateObject17","formatPrice","menuKiosk","offer1","Set","offer1_label","point","offer1_point","offer1_price_currency","offer2","offer2_label","offer2_point","offer2_price_currency","content","kiosk_code","menuOffer","offer","points","NoDataSegment","_ref$message","message","NoDataSegment_Container","NoDataSegment_Segment","NoDataSegment_Title","Message","NoDataSegment_templateObject","NoDataSegment_templateObject2","NoDataSegment_templateObject3","NoDataSegment_templateObject4","PrintView","_elements","Map","setZoom","factor","parseFloat","setOrientation","nextProps","components_NoDataSegment_NoDataSegment","MenuKiosk","containsRecipePoints","containsPrice","PrintKiosk","set","style_Grid","kioskName","MonoHeader","MonoHeader_templateObject","MonoHeader_templateObject2","monoHeader","monoKioskPicture","MonoHeader_Logo","MasonryWrapper","Masonry","MonoKiosk_templateObject","RecipeWrapper","MonoKiosk_templateObject2","kiosk_background","monoKiosk","defaultColumnsCount","1650","1200","KioskView_style_templateObject","KioskWrapper","KioskView_style_templateObject2","MenuName","MenuPrice_templateObject","MenuPrice","alignItems","justifyContent","menu_label","MonoFooterSvg","MonoFooter_templateObject","is_footer_visible","Footer","y","xmlSpace","MonoFooter","left","DuoKioskWrapper","DuoKisok_templateObject","DuoKiosk","isAdministrationPanel","flex","Header_MonoHeader","MonoKiosk","Kiosk_MonoFooter","EmptyMenu","kioskView","KioskView_EmptyMenu","1079","DuoKisok","isMultiKiosk","KioskView_Header_Header","Kiosk_MenuPrice","style_MasonryWrapper","KioskView_templateObject","LabelView_style_templateObject","LabelView_style_templateObject2","LabelPage","LabelView_style_templateObject3","ProductLabelContent","LabelView_style_templateObject4","ProductLabel","LabelView_style_templateObject5","breakPage","addMarginTop","LabelView","flatProducts","byDate","byKiosk","priceRegex","style_GlobalStyle","flexDirection","MenuPanel_templateObject","forceWhiteBackground","componentDidUpdate","prevProps","prevState","_prevProps$dataSource","newPrevProps","restOfCurrent","isThereChanges","shouldReloadFile","parseCsvFile","fetchWinrestData","fetchWinrestData2","getKioskPicture","_this$props2","picturesStr","picturesValue","sortByRecipeTypes","recipe1","recipe2","recipeTypesArr","toLowerCase","recipe1Type","recipe2Type","pictureValues","recipeTypeIds","_groupBy","allergensByType","intolerance","updatedRecipe","getNameValue","keywords","pointPrice","updateDate","getRecipeTypeName","kioskExists","dateExists","r1","r2","formatComposition","toFixed","_this$props3","siteSlug","keyGenerator","informations","site","_i3","_result","_this$props4","recipesGroupedByType","Axios","Error","Promise","all","posName","console","error","recipeType","t","recipeIndex","findIndex","recipesGroupedByDate","compositionArray","newComposition","nextComposition","ingredientsFinished","ingredient","substr","_this$props5","_this$props5$excluded","_Papa$parse","rootPath","data_root_path","filePath","Date","getTime","Papa","delimiter","onParseComplete","onParseError","getWeeklyItems","getDailyItems","err","inputElem","reason","log","filteredResult","getFilteredData","includedDaysStr","groupedByDate","kiosksNames","selectedMenu","it","menu_code","dailyItems","kiosk_name","singleKiosk","splice","groupedByKiosk","_this$props6","_this$props6$currency","_this$state","_this$state$days","_this$state$items","Themes","styled_components_browser_esm","components_PrintView_PrintView","WeekView","components_MobileView_MobileView","components_LabelView_LabelView","KioskView","MenuPanel_GlobalStyle","SAVED_RECIPES_PICTURES_WINREST","EXCEL_CONCEPT","WINREST_CONCEPT","DEFAULT_STATE","errorFileNotFound","saveRecipesPictures","typedRecipesPics","newRecipesTyped","thisRecipe","setItem","event","_objectSpread2","computedState","startsWith","newKiosks","kioskArray","kioskIndex","kioskPic","newFile","csvFileVersion","_this$state$recipes","newRecipes","recipeId","isThere","pictureUpdated","isChanged","newIndex","localeCompare","updateDisplayModes","winrestApiFetcher","parseFileAndUpdateState","handleChangeWinrest2","from","selectedOptions","option","newDisplayModes","firstVisibleDisplayMode","shouldUpdate","isWeekMode","then","response","status","errors","storedTypedKiosks","handleOpenDrawerClick","handleCloseDrawerClick","currentField","_this$state2","callback","winrest_key","_result$data","_ref5$data","_x3","zIndex","visibility","AdminPanel_MenuSettings","OpenButton","opened","containers_MenuPanel_MenuPanel","newState","AdminPanel_templateObject","endpoint","adalConfig","tenant","clientId","cacheLocation","endpoints","api","authContext","AuthenticationContext","AuthService","withAdalLogin","authenticateToken","getCachedUser","isCallback","location","hash","handleWindowCallback","login","getUser","logOut","getCachedToken","getUrlParam","parameter","defaultvalue","urlparameter","getUrlVars","decodeURIComponent","vars","m","Main","authService","isAuthenticated","parametersCount","utm_source","useDefaultValues","includedKiosks","gaEntity","gaSite","gaPointOfSale","ReactGA","initialize","debug","siteSpeedSampleRate","dimension1","dimension2","dimension3","dimension4","dimension5","pageview","pathname","search","containers_AdminPanel_AdminPanel","ErrorBoundary","info","whiteSpace","componentStack","App","LoadingContext_LoaderProvider","containers_ErrorBoundary_ErrorBoundary","containers_Main_Main","Boolean","hostname","match","ReactDOM","src_App_0","runWithAdal","navigator","serviceWorker","ready","registration","unregister","module","exports","settings","empty","dayBar"],"mappings":"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","file":"static/js/main.eae5b3b1.chunk.js","sourcesContent":["import React from 'react'\r\nimport styled from 'styled-components'\r\n\r\nconst Checkbox = ({ label, labelLeft, onAction, ...props }) => (\r\n \r\n)\r\n\r\nexport default Checkbox\r\n\r\nconst Label = styled.label`\r\n box-sizing: border-box;\r\n margin: 0;\r\n padding: 0;\r\n color: rgba(0, 0, 0, 0.65);\r\n font-size: 14px;\r\n font-variant: tabular-nums;\r\n line-height: 1.5;\r\n list-style: none;\r\n -webkit-font-feature-settings: 'tnum';\r\n font-feature-settings: 'tnum';\r\n display: inline-block;\r\n line-height: unset;\r\n cursor: pointer;\r\n`\r\nconst Wrapper = styled.span`\r\n box-sizing: border-box;\r\n margin: 0;\r\n padding: 0;\r\n color: rgba(0, 0, 0, 0.65);\r\n font-size: 14px;\r\n font-variant: tabular-nums;\r\n line-height: 1.5;\r\n list-style: none;\r\n -webkit-font-feature-settings: 'tnum';\r\n font-feature-settings: 'tnum';\r\n position: relative;\r\n top: -0.09em;\r\n display: inline-block;\r\n line-height: 1;\r\n white-space: nowrap;\r\n vertical-align: middle;\r\n outline: none;\r\n cursor: pointer;\r\n margin-right: 15px;\r\n margin-left: 15px;\r\n ${({ labelLeft, label }) => (!labelLeft && !label ? ' width: 20px;' : '')}\r\n`\r\nconst Checker = styled.span`\r\n position: relative;\r\n top: 0;\r\n left: 0;\r\n display: block;\r\n width: 16px;\r\n height: 16px;\r\n background-color: ${({ checked }) => (checked ? '#1890ff' : '#fff')};\r\n border: 1px solid ${({ checked }) => (checked ? '#1890ff' : '#d9d9d9')};\r\n border-radius: 2px;\r\n border-collapse: separate;\r\n -webkit-transition: all 0.3s;\r\n transition: all 0.3s;\r\n ${({ checked }) =>\r\n checked\r\n ? `\r\n &::after {\r\n position: absolute;\r\n top: 50%;\r\n left: 21%;\r\n display: table;\r\n width: 5.71428571px;\r\n height: 9.14285714px;\r\n border: 2px solid #fff;\r\n border-top: 0;\r\n border-left: 0;\r\n -webkit-transform: rotate(45deg) scale(0) translate(-50%, -50%);\r\n -ms-transform: rotate(45deg) scale(0) translate(-50%, -50%);\r\n transform: rotate(45deg) scale(0) translate(-50%, -50%);\r\n opacity: 0;\r\n -webkit-transition: all .1s cubic-bezier(.71, -0.46, .88, .6),opacity .1s;\r\n transition: all .1s cubic-bezier(.71, -0.46, .88, .6),opacity .1s;\r\n content: ' ';\r\n position: absolute;\r\n display: table;\r\n border: 2px solid #fff;\r\n border-top: 0;\r\n border-left: 0;\r\n -webkit-transform: rotate(45deg) scale(1) translate(-50%, -50%);\r\n -ms-transform: rotate(45deg) scale(1) translate(-50%, -50%);\r\n transform: rotate(45deg) scale(1) translate(-50%, -50%);\r\n opacity: 1;\r\n -webkit-transition: all .2s cubic-bezier(.12, .4, .29, 1.46) .1s;\r\n transition: all .2s cubic-bezier(.12, .4, .29, 1.46) .1s;\r\n content: ' ';\r\n }\r\n `\r\n : ''};\r\n`\r\nconst Input = styled.input`\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n z-index: 1;\r\n width: 100%;\r\n height: 100%;\r\n cursor: pointer;\r\n opacity: 0;\r\n`\r\n","import React from 'react'\r\nimport styled from 'styled-components'\r\n\r\nconst Loader = ({ small, white }) => (\r\n \r\n \r\n
\r\n
\r\n
\r\n
\r\n
\r\n \r\n

Loading

\r\n \r\n)\r\n\r\nexport default Loader\r\n\r\nconst Container = styled.div`\r\n ${({ small }) =>\r\n small\r\n ? `\r\n height: 100px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n `\r\n : `\r\n width: 100%;\r\n height: 95vh;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n flex-direction: column;\r\n`}\r\n h2 {\r\n font-size: ${({ small }) => (small ? 15 : 20)}px;\r\n color: ${({ white }) => (white ? '#fff' : '#000')};\r\n }\r\n`\r\n\r\nconst LoaderWrapper = styled.div`\r\n position: relative;\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n display: block;\r\n font-size: 0;\r\n box-sizing: border-box;\r\n color: #333;\r\n height: ${({ small }) => (small ? 30 : 64)}px;\r\n width: ${({ small }) => (small ? 40 : 80)}px;\r\n\r\n & > div {\r\n width: ${({ small }) => (small ? 4 : 8)}px;\r\n height: ${({ small }) => (small ? 30 : 64)}px;\r\n margin: ${({ small }) => (small ? 2 : 4)}px;\r\n margin-top: 0;\r\n margin-bottom: 0;\r\n position: relative;\r\n -webkit-box-sizing: border-box;\r\n -moz-box-sizing: border-box;\r\n box-sizing: border-box;\r\n display: inline-block;\r\n float: none;\r\n background-color: ${({ white }) => (white ? '#fff' : '#000')};\r\n border: 0 solid ${({ white }) => (white ? '#fff' : '#000')};\r\n border-radius: 0;\r\n -webkit-animation: line-scale-pulse-out 0.9s infinite\r\n cubic-bezier(0.85, 0.25, 0.37, 0.85);\r\n -moz-animation: line-scale-pulse-out 0.9s infinite\r\n cubic-bezier(0.85, 0.25, 0.37, 0.85);\r\n -o-animation: line-scale-pulse-out 0.9s infinite\r\n cubic-bezier(0.85, 0.25, 0.37, 0.85);\r\n animation: line-scale-pulse-out 0.9s infinite\r\n cubic-bezier(0.85, 0.25, 0.37, 0.85);\r\n }\r\n\r\n & > div:nth-child(3) {\r\n -webkit-animation-delay: -0.9s;\r\n -moz-animation-delay: -0.9s;\r\n -o-animation-delay: -0.9s;\r\n animation-delay: -0.9s;\r\n }\r\n & > div:nth-child(2),\r\n & > div:nth-child(4) {\r\n -webkit-animation-delay: -0.7s;\r\n -moz-animation-delay: -0.7s;\r\n -o-animation-delay: -0.7s;\r\n animation-delay: -0.7s;\r\n }\r\n & > div:nth-child(1),\r\n & > div:nth-child(5) {\r\n -webkit-animation-delay: -0.5s;\r\n -moz-animation-delay: -0.5s;\r\n -o-animation-delay: -0.5s;\r\n animation-delay: -0.5s;\r\n }\r\n\r\n * Animation */ @-webkit-keyframes line-scale-pulse-out {\r\n 0% {\r\n -webkit-transform: scaley(1);\r\n transform: scaley(1);\r\n }\r\n 50% {\r\n -webkit-transform: scaley(0.3);\r\n transform: scaley(0.3);\r\n }\r\n 100% {\r\n -webkit-transform: scaley(1);\r\n transform: scaley(1);\r\n }\r\n }\r\n @-moz-keyframes line-scale-pulse-out {\r\n 0% {\r\n -moz-transform: scaley(1);\r\n transform: scaley(1);\r\n }\r\n 50% {\r\n -moz-transform: scaley(0.3);\r\n transform: scaley(0.3);\r\n }\r\n 100% {\r\n -moz-transform: scaley(1);\r\n transform: scaley(1);\r\n }\r\n }\r\n @-o-keyframes line-scale-pulse-out {\r\n 0% {\r\n -o-transform: scaley(1);\r\n transform: scaley(1);\r\n }\r\n 50% {\r\n -o-transform: scaley(0.3);\r\n transform: scaley(0.3);\r\n }\r\n 100% {\r\n -o-transform: scaley(1);\r\n transform: scaley(1);\r\n }\r\n }\r\n @keyframes line-scale-pulse-out {\r\n 0% {\r\n -webkit-transform: scaley(1);\r\n -moz-transform: scaley(1);\r\n -o-transform: scaley(1);\r\n transform: scaley(1);\r\n }\r\n 50% {\r\n -webkit-transform: scaley(0.3);\r\n -moz-transform: scaley(0.3);\r\n -o-transform: scaley(0.3);\r\n transform: scaley(0.3);\r\n }\r\n 100% {\r\n -webkit-transform: scaley(1);\r\n -moz-transform: scaley(1);\r\n -o-transform: scaley(1);\r\n transform: scaley(1);\r\n }\r\n }\r\n`\r\n","import slugify from 'slugify'\n\nexport const getSlugFromString = (string = '') => {\n const result = slugify(string, {\n replacement: '_',\n remove: undefined,\n lower: true,\n }).replace('_-_', '_').replace('-', '_')\n \n //console.log(string, \" => \", result)\n return result\n}\nclass CollectionDB {\n constructor(name) {\n this.name = name\n this.data = []\n }\n\n compare = (a, b, key) => {\n // Use toUpperCase() to ignore character casing\n const genreA =\n typeof a[key] === 'string' ? a[key].toUpperCase() : a[key]\n const genreB =\n typeof b[key] === 'string' ? b[key].toUpperCase() : b[key]\n\n let comparison = 0\n if (genreA > genreB) {\n comparison = 1\n } else if (genreA < genreB) {\n comparison = -1\n }\n return comparison\n }\n\n clear = () => (this.data = [])\n\n upsert = doc => {\n let isExisting = false\n let index = null\n this.data.map((item, i) => {\n if (item.id == doc.id) {\n isExisting = true\n index = i\n }\n })\n if (isExisting) {\n this.data[index] = { ...this.data[index], ...doc }\n return index\n } else {\n this.data.push(doc)\n return this.data.length\n }\n }\n\n insert = doc => {\n this.data.push(doc)\n return this.data.length\n }\n\n find = (args = {}, params) => {\n const argsKeys = Object.keys(args)\n\n const results = this.data.filter(item => {\n let test = true\n argsKeys.map(key => {\n if (typeof args[key] === 'object') {\n const subkeys = Object.keys(args[key])\n if (subkeys[0] === '$in') {\n test = args[key]['$in'].indexOf(item[key]) > -1\n } else {\n subkeys.map(subkey => {\n if (\n !item[key] ||\n item[key][subkey] !== args[key][subkey]\n ) {\n test = false\n }\n })\n }\n } else if (item[key] !== args[key]) {\n test = false\n }\n })\n return test\n })\n\n if (params) {\n results.sort((a, b) => this.compare(a, b, params.sort))\n }\n\n return results\n }\n\n findOne = args => {\n const argsKeys = Object.keys(args)\n return this.data.find(item => {\n let test = true\n argsKeys.map(key => {\n if (item[key] !== args[key]) {\n test = false\n }\n })\n return test\n })\n }\n}\n\nexport const MongoSites = new CollectionDB('sites')\nexport const MongoTypeGuests = new CollectionDB('type_guests')\nexport const MongoPointsOfSale = new CollectionDB('points_of_sale')\nexport const MongoMenus = new CollectionDB('menus')\nexport const MongoTypeMeals = new CollectionDB('type_meals')\nexport const MongoTypeRecipes = new CollectionDB('type_recipes')\nexport const MongoRecipes = new CollectionDB('recipes')\nexport const MongoIntolerances = new CollectionDB('intolerances')\n\nconst SAVE_DB_KEY = 'newrest-db'\n\nexport const saveDbToLocalStorage = () => {\n const db = {\n sites: MongoSites.find(),\n typesGuest: MongoTypeGuests.find(),\n pointsOfSales: MongoPointsOfSale.find(),\n menus: MongoMenus.find(),\n typesMeals: MongoTypeMeals.find(),\n typesRecipes: MongoTypeRecipes.find(),\n intolerances: MongoIntolerances.find(),\n recipes: MongoRecipes.find(),\n }\n localStorage.setItem(SAVE_DB_KEY, JSON.stringify({ ...db }))\n}\n\nexport const getDbFromLocalStorage = () => {\n const savedDb = JSON.parse(localStorage.getItem(SAVE_DB_KEY)) || {}\n const {\n sites = [],\n typesGuest = [],\n pointsOfSales = [],\n menus = [],\n typesMeals = [],\n typesRecipes = [],\n intolerances = [],\n recipes = [],\n } = savedDb\n\n sites.map(item =>\n MongoSites.upsert({ ...item, slug: getSlugFromString(item.name) })\n )\n typesGuest.map(item =>\n MongoTypeGuests.upsert({ ...item, slug: getSlugFromString(item.name) })\n )\n pointsOfSales.map(item =>\n MongoPointsOfSale.upsert({\n ...item,\n slug: getSlugFromString(item.name),\n })\n )\n typesMeals.map(item =>\n MongoTypeMeals.upsert({ ...item, slug: getSlugFromString(item.name) })\n )\n typesRecipes.map(item =>\n MongoTypeRecipes.upsert({ ...item, slug: getSlugFromString(item.name) })\n )\n intolerances.map(item =>\n MongoIntolerances.upsert({\n ...item,\n slug: getSlugFromString(item.name),\n })\n )\n menus.map(item =>\n MongoMenus.upsert({ ...item, slug: getSlugFromString(item.name) })\n )\n recipes.map(item => MongoRecipes.upsert(item))\n //localStorage.removeItem(SAVE_DB_KEY)\n}\n\nexport const resetDatabase = () => {\n MongoSites.clear()\n MongoTypeGuests.clear()\n MongoPointsOfSale.clear()\n MongoMenus.clear()\n MongoTypeMeals.clear()\n MongoTypeRecipes.clear()\n MongoRecipes.clear()\n MongoIntolerances.clear()\n\n return true\n}\n\nexport const resetSiteDatabase = () => {\n MongoPointsOfSale.clear()\n MongoMenus.clear()\n MongoRecipes.clear()\n\n return true\n}\n\nexport const setCountryDatabase = async ({ data = {} }) => {\n await resetDatabase()\n const {\n Sites = [],\n Intolerances = [],\n TypeGuests = [],\n TypeMeals = [],\n TypeRecipes = [],\n } = data\n Sites.map(item =>\n MongoSites.upsert({ ...item, slug: getSlugFromString(item.name) })\n )\n Intolerances.map(item =>\n MongoIntolerances.upsert({\n ...item,\n slug: getSlugFromString(item.name),\n })\n )\n TypeGuests.map(item =>\n MongoTypeGuests.upsert({ ...item, slug: getSlugFromString(item.name) })\n )\n TypeMeals.map(item =>\n MongoTypeMeals.upsert({ ...item, slug: getSlugFromString(item.name) })\n )\n TypeRecipes.map(item =>\n MongoTypeRecipes.upsert({ ...item, slug: getSlugFromString(item.name) })\n )\n\n return true\n}\n\nexport const setSiteDatabase = async ({ data = [], date }) => {\n data.map(singlePointOfSale => {\n // destructure pointofsale to extract menus\n const { menus = [], ...pointOfSale } = singlePointOfSale\n MongoPointsOfSale.upsert({\n ...pointOfSale,\n slug: getSlugFromString(pointOfSale.name),\n })\n\n return menus.map(singleMenu => {\n // destructure menu to extract recipes\n const { recipes = [], ...menu } = singleMenu\n\n // find if menu exists\n const existingMenu = MongoMenus.findOne({ id: menu.id })\n if (existingMenu) {\n existingMenu.pointOfSaleSlugs[\n getSlugFromString(pointOfSale.name)\n ] = true\n MongoMenus.upsert(existingMenu)\n } else {\n // insert menu with a link to the pointofsale\n MongoMenus.upsert({\n ...menu,\n slug: getSlugFromString(menu.name),\n mealTypeSlug: getSlugFromString(\n MongoTypeMeals.findOne({\n id: menu.mealTypeId,\n }).name,\n '_'\n ),\n guestTypeSlug: getSlugFromString(\n MongoTypeGuests.findOne({\n id: menu.guestTypeId,\n }).name,\n '_'\n ),\n pointOfSaleSlugs: {\n [getSlugFromString(pointOfSale.name)]: true,\n },\n })\n }\n\n // find meal type and add pointOfSaleId\n const existingMealType = MongoTypeMeals.findOne({\n id: menu.mealTypeId,\n })\n if (existingMealType) {\n if (!existingMealType.pointOfSaleSlugs) {\n existingMealType.pointOfSaleSlugs = {}\n }\n existingMealType.pointOfSaleSlugs[\n getSlugFromString(pointOfSale.name)\n ] = true\n MongoTypeMeals.upsert(existingMealType)\n }\n\n // find guestTypeId and add pointOfSaleId\n const existingGuestType = MongoTypeGuests.findOne({\n id: menu.guestTypeId,\n })\n if (existingGuestType) {\n if (!existingGuestType.pointOfSaleSlugs) {\n existingGuestType.pointOfSaleSlugs = {}\n }\n existingGuestType.pointOfSaleSlugs[\n getSlugFromString(pointOfSale.name)\n ] = true\n MongoTypeGuests.upsert(existingGuestType)\n }\n\n return recipes.map((recipe, index) => {\n // find if recipe exists\n const existingRecipe = MongoRecipes.findOne({\n id: recipe.id,\n })\n if (existingRecipe) {\n if (!existingRecipe.menuSlugs) {\n existingRecipe.menuSlugs = {}\n }\n if (!existingRecipe.dates) {\n existingRecipe.dates = {}\n }\n // add link to the pointofsale on this menu\n existingRecipe.menuSlugs[\n getSlugFromString(menu.name)\n ] = true\n existingRecipe.dates[date] = true\n MongoRecipes.upsert(existingRecipe)\n } else {\n // insert menu with a link to the pointofsale\n MongoRecipes.upsert({\n ...recipe,\n order: index,\n menuSlugs: { [getSlugFromString(menu.name)]: true },\n dates: { [date]: true },\n })\n }\n\n const existingRecipeType = MongoTypeRecipes.findOne({\n id: recipe.recipeTypeId,\n })\n\n if (existingRecipeType) {\n if (!existingRecipeType.menuSlugs) {\n existingRecipeType.menuSlugs = {}\n }\n existingRecipeType.menuSlugs[\n getSlugFromString(menu.name)\n ] = true\n MongoTypeRecipes.upsert(existingRecipeType)\n }\n })\n })\n })\n\n return true\n}\n","import React, { Component } from 'react'\r\nimport { createPortal } from 'react-dom'\r\n// These two containers are siblings in the DOM\r\nconst modalRoot = document.getElementById('portals')\r\n\r\nclass Modal extends Component {\r\n constructor(props) {\r\n super(props)\r\n this.el = document.createElement('div')\r\n }\r\n\r\n componentDidMount() {\r\n // The portal element is inserted in the DOM tree after\r\n // the Modal's children are mounted, meaning that children\r\n // will be mounted on a detached DOM node. If a child\r\n // component requires to be attached to the DOM tree\r\n // immediately when mounted, for example to measure a\r\n // DOM node, or uses 'autoFocus' in a descendant, add\r\n // state to Modal and only render the children when Modal\r\n // is inserted in the DOM tree.\r\n modalRoot.appendChild(this.el)\r\n }\r\n\r\n componentWillUnmount() {\r\n modalRoot.removeChild(this.el)\r\n }\r\n\r\n render() {\r\n return createPortal(this.props.children, this.el)\r\n }\r\n}\r\nexport default Modal\r\n","import React from 'react'\r\nimport styled from 'styled-components'\r\nimport Modal from './Modal'\r\nimport themes from 'themes'\r\n\r\nconst getFolders = concept => themes[concept].kiosks_background || {}\r\n\r\nconst PicturePicker = ({\r\n open,\r\n concept = 'stdr',\r\n handleChange,\r\n close,\r\n excel,\r\n useCommercialName,\r\n}) => {\r\n let index, name\r\n const type = excel ? 'kiosk_' : 'recipe_'\r\n if (excel) {\r\n index = open && open.index\r\n name = open && open.name\r\n }\r\n return !open ? null : (\r\n \r\n \r\n \r\n
\r\n Pictures available for the concept {concept}\r\n x\r\n
\r\n
\r\n {Object.keys(getFolders(concept)).map((kiosk, i) => (\r\n {\r\n e.target.name = `${type}${\r\n excel ? index : open\r\n }-${kiosk}`\r\n e.target.type = 'checkbox'\r\n e.target.checked = true\r\n handleChange(e)\r\n close()\r\n }}\r\n >\r\n \r\n \r\n {useCommercialName ? null : (\r\n \r\n \r\n \r\n )}\r\n \r\n
\r\n ))}\r\n
\r\n \r\n \r\n \r\n )\r\n}\r\n\r\nexport default PicturePicker\r\n\r\nexport const CloseButton = styled.button`\r\n background-color: #fff;\r\n border-radius: 50%;\r\n color: rgb(105, 105, 105);\r\n border: 1px solid rgb(105, 105, 105);\r\n height: 20px;\r\n width: 20px;\r\n font-size: 12px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n cursor: pointer;\r\n margin-right: 20px;\r\n outline: none;\r\n`\r\n\r\nconst KioskHeader = styled.div`\r\n padding-top: 12px;\r\n margin-bottom: 15px;\r\n cursor: pointer;\r\n opacity: 0.6;\r\n transition: all 0.5s;\r\n &:hover{\r\n opacity:1\r\n transform: scale(1.05);\r\n }\r\n img {\r\n height: 95px;\r\n width: 100%;\r\n object-fit: cover;\r\n }\r\n span img {\r\n position: absolute;\r\n left: 25px;\r\n top: 0;\r\n width: auto;\r\n height: 107px;\r\n }\r\n`\r\n\r\nconst Header = styled.h2`\r\n display: flex;\r\n justify-content: space-between;\r\n align-items: center;\r\n color: rgb(105, 105, 105);\r\n font-weight: normal;\r\n margin: 0;\r\n padding: 10px;\r\n height: 50px;\r\n background-color: #fff;\r\n border-top-right-radius: 10px;\r\n border-top-left-radius: 10px;\r\n box-shadow: 0px 0px 4px 0px rgba(0, 0, 0, 0.75);\r\n`\r\n\r\nconst Segment = styled.div`\r\n background-color: #fff;\r\n position: relative;\r\n min-height: 90vh;\r\n max-height: 90vh;\r\n height: 90vh;\r\n box-shadow: 0px 0px 15px 2px rgba(0, 0, 0, 0.75);\r\n border-radius: 5px;\r\n padding-top: 0px !important;\r\n overflow: hidden;\r\n display: flex;\r\n flex-direction: column;\r\n\r\n .body {\r\n padding: 20px;\r\n position: relative;\r\n overflow-y: auto !important;\r\n overflow-x: hidden !important;\r\n }\r\n\r\n /* Modal Width */\r\n @media only screen and (max-width: 767px) {\r\n width: 95%;\r\n margin: 0em 0em 0em 0em;\r\n .body {\r\n padding: 10px;\r\n }\r\n }\r\n @media only screen and (min-width: 768px) {\r\n width: 88%;\r\n margin: 0em 0em 0em 0em;\r\n .body {\r\n padding: 15px;\r\n }\r\n }\r\n @media only screen and (min-width: 992px) {\r\n width: 850px;\r\n margin: 0em 0em 0em 0em;\r\n }\r\n @media only screen and (min-width: 1200px) {\r\n width: 900px;\r\n margin: 0em 0em 0em 0em;\r\n }\r\n @media only screen and (min-width: 1920px) {\r\n width: 950px;\r\n margin: 0em 0em 0em 0em;\r\n }\r\n opacity: 1;\r\n animation-name: fadeInOpacity;\r\n animation-iteration-count: 1;\r\n animation-timing-function: ease-in;\r\n animation-duration: 0.2s;\r\n\r\n @keyframes fadeInOpacity {\r\n 0% {\r\n opacity: 0;\r\n transform: scale(0.8);\r\n }\r\n 100% {\r\n opacity: 1;\r\n transform: scale(1);\r\n }\r\n }\r\n`\r\nconst Shade = styled.div`\r\n background-color: rgba(0, 0, 0, 0.5);\r\n position: fixed;\r\n top: 0;\r\n bottom: 0;\r\n right: 0;\r\n left: 0;\r\n z-index: 1000000;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n`\r\n","export function getLanguage(language) {\r\n if (!language) {\r\n return 'en'\r\n }\r\n let result = language\r\n if (language.indexOf('_') !== -1) {\r\n result = language.split('_')[1]\r\n }\r\n if (!result) {\r\n return 'en'\r\n }\r\n return result\r\n}","import React, { Fragment, Component } from 'react'\nimport {\n FormGroup,\n Separator,\n KioskSelection,\n ActionLink,\n} from './MenuSettings'\nimport PropTypes from 'prop-types'\nimport Loader from '../../components/Loader/Loader'\nimport { DebounceInput } from 'react-debounce-input'\nimport {\n MongoSites,\n MongoPointsOfSale,\n MongoTypeGuests,\n MongoTypeMeals,\n MongoMenus,\n MongoTypeRecipes,\n} from '../../utils/mongo_utils'\nimport PicturePicker from '../../components/PicturePicker/PicturePicker'\nimport styled from 'styled-components'\nimport { SAVED_RECIPES_PICTURES_WINREST } from './AdminPanel'\nimport themes from 'themes'\nimport Checkbox from '../../components/Checkbox'\nimport Settings from 'settings'\nimport { getLanguage } from '../../utils/Locale'\n\nclass WinrestForm extends Component {\n state = {}\n\n componentDidMount() {\n this.searchDb(this.props)\n }\n\n async componentWillReceiveProps(nextProps) {\n this.searchDb(nextProps)\n }\n\n searchDb = props => {\n const { pointOfSaleSlug, mealTypeSlug, menuSlug, guestTypeSlug } = props\n\n const sitesList = MongoSites.find({}, { sort: 'name' })\n const pointsOfSaleList = MongoPointsOfSale.find({}, { sort: 'name' })\n const typeGuestsList = MongoTypeGuests.find(\n { pointOfSaleSlugs: { [pointOfSaleSlug]: true } },\n { sort: 'name' }\n )\n const mealTypesList = MongoTypeMeals.find(\n { pointOfSaleSlugs: { [pointOfSaleSlug]: true } },\n { sort: 'name' }\n )\n const menusList = MongoMenus.find(\n {\n pointOfSaleSlugs: { [pointOfSaleSlug]: true },\n mealTypeSlug,\n guestTypeSlug,\n },\n { sort: 'name' }\n )\n const recipeTypesList = MongoTypeRecipes.find(\n {\n menuSlugs: { [menuSlug]: true },\n },\n { sort: 'name' }\n )\n\n this.setState({\n sitesList,\n pointsOfSaleList,\n typeGuestsList,\n mealTypesList,\n menusList,\n recipeTypesList,\n })\n }\n\n render() {\n const {\n winrestURL,\n pointOfSaleSlug,\n siteId,\n date,\n forceToday,\n loading,\n handleChange,\n useCommercialName,\n language,\n uiLanguage,\n winrestLanguage,\n guestTypeSlug,\n mealTypeSlug,\n menuSlug,\n displayMode,\n zoom,\n orientation,\n size,\n days,\n print,\n openPrintDialog,\n displayModes,\n dayCount,\n hideMenuPrice,\n hideRecipePoints,\n hideComposition,\n hideLabels,\n isDuoKiosk,\n startDay,\n concepts,\n concept,\n recipes = [],\n generateUrl,\n title,\n subtitle,\n showDate,\n setExcludedDays,\n } = this.props\n const {\n sitesList = [],\n pointsOfSaleList = [],\n typeGuestsList = [],\n mealTypesList = [],\n menusList = [],\n recipeTypesList = [],\n } = this.state\n\n const defaultTitle = Settings.translations[getLanguage(language)].today\n\n return (\n \n \n \n \n
\n ex: wrfr.newrest.eu \n \n {!!winrestURL &&\n sitesList.length > 0 &&\n winrestURL.indexOf('.newrest.eu') !== -1 && (\n \n \n \n \n \n {sitesList.map((singleSite, index) => (\n \n {singleSite.name}\n \n ))}\n \n \n \n \n \n {concepts.map((concept, index) => (\n \n {concept.name}\n \n ))}\n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n )}\n {!!pointsOfSaleList.length && siteId && (\n \n \n \n \n {pointsOfSaleList.map(\n (singlePointOfSale, index) => (\n \n {singlePointOfSale.name}\n \n )\n )}\n \n \n )}\n {siteId && pointOfSaleSlug && winrestURL && (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )}\n {siteId && pointOfSaleSlug && winrestURL && language && (\n \n \n \n \n {typeGuestsList.map((singleTypeGuest, index) => (\n \n {singleTypeGuest.name}\n \n ))}\n \n \n )}\n {siteId &&\n pointOfSaleSlug &&\n winrestURL &&\n language &&\n guestTypeSlug && (\n \n \n \n \n {mealTypesList.map((singlemealType, index) => (\n \n {singlemealType.name}\n \n ))}\n \n \n )}\n {siteId &&\n pointOfSaleSlug &&\n winrestURL &&\n language &&\n guestTypeSlug &&\n mealTypeSlug && (\n \n \n \n \n {menusList.map((singleMenu, index) => (\n \n ))}\n \n \n )}\n {siteId &&\n pointOfSaleSlug &&\n winrestURL &&\n language &&\n guestTypeSlug &&\n mealTypeSlug &&\n menuSlug &&\n menusList &&\n menusList.length && (\n <>\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n \n )}\n\n {siteId &&\n pointOfSaleSlug &&\n winrestURL &&\n language &&\n guestTypeSlug &&\n mealTypeSlug &&\n menuSlug && (\n \n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n {displayMode === 'kiosk' && (\n \n \n
\n \n
\n
\n )}\n \n \n {concept && (\n \n this.setState({\n pickReciPic: null,\n })\n }\n />\n )}\n {recipeTypesList.map((item, index) => {\n const name = recipes.find(\n recipe =>\n recipe.indexOf(`${item.slug}-`) > -1\n )\n const isChecked = recipes.indexOf(name) > -1\n const handleCheckbox = e => {\n const typedRecipesPics =\n JSON.parse(\n localStorage.getItem(\n SAVED_RECIPES_PICTURES_WINREST\n )\n ) || {}\n if (isChecked) {\n handleChange(e)\n } else if (\n typedRecipesPics[concept] &&\n typedRecipesPics[concept][item.slug]\n ) {\n const newEvent = { ...e }\n newEvent.target.name = `recipe_${\n item.slug\n }-${\n typedRecipesPics[concept][\n item.slug\n ]\n }`\n handleChange(newEvent)\n } else if (\n themes[concept].kiosks_background[\n item.slug\n ] !== undefined\n ) {\n const newEvent = { ...e }\n newEvent.target.name = `recipe_${item.slug}-${item.slug}`\n handleChange(newEvent)\n } else {\n this.setState({\n pickReciPic: item.slug,\n })\n }\n }\n\n return (\n \n
\n \n
\n {isChecked && (\n \n this.setState({\n pickReciPic:\n item.slug,\n })\n }\n >\n Modify\n \n )}\n
\n )\n })}\n
\n \n \n \n \n \n \n \n \n {days.map((day, index) => (\n \n ))}\n \n \n {dayCount > 1 && (\n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n \n \n {displayModes.map(\n (displayMode, index) =>\n displayMode.visible && (\n \n {displayMode.name}\n \n )\n )}\n \n \n {(displayMode === 'kiosk' ||\n displayMode === 'week') && (\n \n \n \n
\n ex: 1.05\n \n )}\n {(displayMode === 'kiosk' ||\n displayMode === 'week') && (\n \n \n
\n \n
\n
\n )}\n {print && displayMode !== 'week' && (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n
\n )}\n \n \n Link\n \n {displayMode !== 'day' && print && (\n \n Print\n \n )}\n \n \n )}\n\n {loading && }\n \n )\n }\n}\n\nexport default WinrestForm\n\nconst buttonStyle = `\n color: #fff;\n background-color: #1890ff;\n border-color: #1890ff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n -webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n line-height: 1.499;\n position: relative;\n display: inline-block;\n font-weight: 400;\n white-space: nowrap;\n text-align: center;\n background-image: none;\n border: 1px solid transparent;\n -webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);\n cursor: pointer;\n -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n padding: 0 7px;\n font-size: 13px;\n border-radius: 4px;\n padding-left: 25px;\n padding-right: 25px;\n`\n\nexport const Button = styled.button`\n ${buttonStyle};\n`\nexport const Link = styled.a`\n ${buttonStyle}\n margin: 5px;\n`\nexport const ButtonDiv = styled.div`\n ${buttonStyle}\n margin: 5px;\n user-select: none;\n`\n\nexport const LineWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n`\n\nWinrestForm.propTypes = {\n // func\n handleChange: PropTypes.func,\n winrestApiFetcher: PropTypes.func,\n generateUrl: PropTypes.func,\n openPrintDialog: PropTypes.func,\n\n // boolean\n settingsDrawerOpen: PropTypes.bool,\n forceToday: PropTypes.bool,\n print: PropTypes.bool,\n\n // string\n winrestURL: PropTypes.string,\n siteId: PropTypes.string,\n pointOfSale: PropTypes.string,\n language: PropTypes.string,\n guestTypeSlug: PropTypes.string,\n mealTypeSlug: PropTypes.string,\n menuSlug: PropTypes.string,\n kiosk: PropTypes.string,\n displayMode: PropTypes.string,\n orientation: PropTypes.string,\n size: PropTypes.string,\n startDay: PropTypes.string,\n\n // array\n displayModes: PropTypes.array,\n recipes: PropTypes.array,\n days: PropTypes.array,\n\n // number\n zoom: PropTypes.number,\n dayCount: PropTypes.number,\n}\n","import React, { Fragment, Component } from 'react'\r\nimport {\r\n FormGroup,\r\n Separator,\r\n KioskSelection,\r\n ActionLink,\r\n} from './MenuSettings'\r\nimport PropTypes from 'prop-types'\r\nimport Checkbox from '../../components/Checkbox'\r\nimport { Link, ButtonDiv, LineWrapper, Button } from './WinrestForm'\r\nimport PicturePicker from '../../components/PicturePicker/PicturePicker'\r\nimport { SAVED_RECIPES_PICTURES_EXCEL } from './AdminPanel'\r\n\r\nimport Settings from 'settings'\r\n\r\nclass ExcelForm extends Component {\r\n state = {}\r\n\r\n componentDidUpdate() {\r\n if (this.props.displayMode === 'week' && this.props.startDay === 'today') {\r\n this.props.handleChange({ target: { name: 'startDay', type: 'select', value: 'monday' }})\r\n }\r\n }\r\n\r\n render = () => {\r\n const {\r\n entityId,\r\n siteId,\r\n file,\r\n concept,\r\n forceToday,\r\n date,\r\n language,\r\n service,\r\n menu,\r\n kiosks,\r\n displayMode,\r\n dayCount,\r\n orientation,\r\n zoom,\r\n size,\r\n useCommercialName,\r\n hideComposition,\r\n hideLabels,\r\n isDuoKiosk,\r\n startDay,\r\n handleChange,\r\n print,\r\n maxDate,\r\n minDate,\r\n menus,\r\n days,\r\n concepts,\r\n services,\r\n languages,\r\n displayModes,\r\n openPrintDialog,\r\n generateUrl,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n title,\r\n subtitle,\r\n showDate,\r\n setExcludedDays,\r\n } = this.props\r\n\r\n const defaultTitle =\r\n Settings.translations[\r\n language && language.indexOf('commercialName') === -1\r\n ? language\r\n : 'fr'\r\n ].today\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {concepts.map((concept, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {services.map((service, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n {languages.map((language, index) => (\r\n \r\n ))}\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {displayMode === 'kiosk' && dayCount && (\r\n \r\n \r\n \r\n {menus.map((menu, index) => (\r\n \r\n ))}\r\n \r\n \r\n )}\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n {displayMode === 'kiosk' && (\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n \r\n {menu === '' && (\r\n \r\n {concept && (\r\n \r\n this.setState({\r\n pickReciPic: null,\r\n })\r\n }\r\n />\r\n )}\r\n {kiosks.map((item, index) => {\r\n const handleCheckbox = e => {\r\n const typedKioskPics =\r\n JSON.parse(\r\n localStorage.getItem(\r\n SAVED_RECIPES_PICTURES_EXCEL\r\n )\r\n ) || {}\r\n if (item.enabled) {\r\n handleChange(e)\r\n } else if (\r\n typedKioskPics[concept] &&\r\n typedKioskPics[concept][item.name]\r\n ) {\r\n const newEvent = { ...e }\r\n newEvent.target.name = `kiosk_${index}-${\r\n typedKioskPics[concept][item.name]\r\n }`\r\n handleChange(newEvent)\r\n } else if (\r\n themes[concept].kiosks_background[\r\n item.name\r\n ] !== undefined\r\n ) {\r\n const newEvent = { ...e }\r\n newEvent.target.name = `kiosk_${index}-${item.name}`\r\n handleChange(newEvent)\r\n } else {\r\n this.setState({\r\n pickReciPic: { index, name: item.name },\r\n })\r\n }\r\n }\r\n\r\n return (\r\n \r\n
\r\n \r\n
\r\n {item.enabled && (\r\n \r\n this.setState({\r\n pickReciPic: {\r\n index,\r\n name: item.name,\r\n },\r\n })\r\n }\r\n >\r\n Modify\r\n \r\n )}\r\n
\r\n )\r\n })}\r\n
\r\n )}\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n {menu === '' && minDate !== maxDate && (\r\n \r\n \r\n \r\n \r\n )}\r\n {menu === '' && minDate !== maxDate && (\r\n \r\n \r\n \r\n {days.map((day, index) => (\r\n \r\n ))}\r\n \r\n \r\n )}\r\n {dayCount > 1 && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )}\r\n \r\n \r\n \r\n \r\n {displayModes.map(\r\n (displayMode, index) =>\r\n displayMode.visible && (\r\n \r\n {displayMode.name}\r\n \r\n )\r\n )}\r\n \r\n \r\n {displayMode === 'kiosk' && (\r\n \r\n \r\n \r\n
\r\n ex: 1.05\r\n \r\n )}\r\n {(displayMode === 'kiosk' || displayMode === 'week') && (\r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n )}\r\n\r\n {print && displayMode !== 'week' && (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n \r\n
\r\n
\r\n
\r\n )}\r\n \r\n \r\n Link\r\n \r\n {displayMode !== 'day' && print && (\r\n Print\r\n )}\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nexport default ExcelForm\r\n\r\nExcelForm.propTypes = {\r\n // func\r\n closeDrawer: PropTypes.func,\r\n handleChange: PropTypes.func,\r\n openPrintDialog: PropTypes.func,\r\n openDrawer: PropTypes.func,\r\n openPrintDialog: PropTypes.func,\r\n generateUrl: PropTypes.func,\r\n\r\n // boolean\r\n settingsDrawerOpen: PropTypes.bool,\r\n forceToday: PropTypes.bool,\r\n print: PropTypes.bool,\r\n useCommercialName: PropTypes.bool,\r\n\r\n // string\r\n entityId: PropTypes.string,\r\n file: PropTypes.string,\r\n concept: PropTypes.string,\r\n date: PropTypes.string,\r\n language: PropTypes.string,\r\n service: PropTypes.string,\r\n menu: PropTypes.string,\r\n displayMode: PropTypes.string,\r\n orientation: PropTypes.string,\r\n size: PropTypes.string,\r\n startDay: PropTypes.string,\r\n dataSource: PropTypes.string,\r\n minDate: PropTypes.string,\r\n maxDate: PropTypes.string,\r\n siteId: PropTypes.string,\r\n\r\n // number\r\n zoom: PropTypes.number,\r\n dayCount: PropTypes.number,\r\n\r\n // array\r\n displayModes: PropTypes.array,\r\n kiosks: PropTypes.array,\r\n days: PropTypes.array,\r\n}\r\n","import styled from 'styled-components'\n\nconst buttonStyle = `\n color: #fff;\n background-color: #1890ff;\n border-color: #1890ff;\n text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.12);\n -webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.045);\n line-height: 1.499;\n position: relative;\n display: inline-block;\n font-weight: 400;\n white-space: nowrap;\n text-align: center;\n background-image: none;\n border: 1px solid transparent;\n -webkit-box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);\n box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015);\n cursor: pointer;\n -webkit-transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n transition: all 0.3s cubic-bezier(0.645, 0.045, 0.355, 1);\n -ms-touch-action: manipulation;\n touch-action: manipulation;\n padding: 0 7px;\n font-size: 13px;\n border-radius: 4px;\n padding-left: 25px;\n padding-right: 25px;\n`\n\nexport const Link = styled.a`\n ${buttonStyle}\n margin: 5px;\n`\n\nexport const Button = styled.button`\n ${buttonStyle};\n`\n\nexport const ButtonDiv = styled.div`\n ${buttonStyle}\n margin: 5px;\n user-select: none;\n`\n\nexport const Separator = styled.div`\n margin: 10px 35px;\n`\n\nexport const LineWrapper = styled.div`\n display: flex;\n justify-content: space-between;\n margin-top: 8px;\n`\n\n","import React, { useState, useEffect, useRef } from 'react'\n\nimport axios from 'axios'\nimport CryptoJS from 'crypto-js'\n\nimport Settings from 'settings'\nimport { getLanguage } from '../../utils/Locale'\nimport { getIncludedDays } from '../../utils/Date'\n\nimport Checkbox from '../../components/Checkbox'\nimport Loader from '../../components/Loader/Loader'\nimport PicturePicker from '../../components/PicturePicker/PicturePicker'\nimport { ActionLink, FormGroup, KioskSelection } from './MenuSettings'\n\nimport { ButtonDiv, Button, Separator, LineWrapper } from './style'\n\nconst WinrestForm2 = props => {\n const [sites, setSites] = useState()\n const [guestTypes, setGuestTypes] = useState()\n const [mealTypes, setMealTypes] = useState()\n const [pointOfSales, setPointOfSales] = useState()\n\n const [baseUrl, setBaseUrl] = useState(\n props.defaultValues ? props.defaultValues.baseUrl : ''\n )\n const [siteId, setSiteId] = useState(\n props.defaultValues ? props.defaultValues.siteId : ''\n )\n const [pointOfSaleId, setPointOfSaleId] = useState()\n const [guestTypeId, setGuestTypeId] = useState()\n const [mealTypeId, setMealTypeId] = useState()\n const [menuId, setMenuId] = useState()\n\n const [recipeTypes, setRecipeTypes] = useState()\n const [defaultKiosks, setDefaultKiosks] = useState()\n\n const [currentPointOfSale, setCurrentPointOfSale] = useState()\n const [allRecipes, setAllRecipes] = useState([])\n const [selectedRecipeTypes, setSelectedRecipeTypes] = useState([])\n\n const [loading, setLoading] = useState(false)\n const [currentRecipePicture, setCurrentRecipePicture] = useState(false)\n\n const [pictures, setPictures] = useState(\n localStorage.getItem('winrest-recipes-pictures')\n ? JSON.parse(localStorage.getItem('winrest-recipes-pictures'))\n : {}\n )\n\n const prevDayCount = useRef()\n\n useEffect(() => {\n if (!baseUrl) {\n return\n }\n\n setSites()\n setGuestTypes()\n setMealTypes()\n setPointOfSales()\n setPointOfSaleId()\n setGuestTypeId()\n setMealTypeId()\n setMenuId()\n\n const fetch = async () => {\n setLoading(true)\n const value = `https://${baseUrl}`\n const informationUrl = `service/v1/Information`\n\n const url = `${value}/${informationUrl}`\n\n const key = CryptoJS.MD5(`${informationUrl}&key=LoungeUpMobileAPI`)\n const result = await axios.get(url, {\n headers: { bearer: key },\n })\n\n setSites(result.data.Sites)\n setGuestTypes(result.data.TypeGuests)\n setMealTypes(result.data.TypeMeals)\n setLoading(false)\n }\n fetch()\n }, [baseUrl])\n\n useEffect(() => {\n const fetch = async () => {\n if (!siteId || !props.date) {\n return\n }\n setLoading(true)\n\n const url = `service/v1/sites/${siteId}/pointsOfSale/${props.date}`\n\n const key = CryptoJS.MD5(`${url}&key=LoungeUpMobileAPI`)\n const result = await axios.get(`https://${baseUrl}/${url}`, {\n headers: { bearer: key },\n })\n\n let values = null\n if (result.data) {\n values = result.data.reduce((res, data) => {\n const byGuestTypes = groupBy(data.menus, 'guestTypeId')\n const byMealTypes = groupBy(data.menus, 'mealTypeId')\n res.push({ ...data, byGuestTypes, byMealTypes })\n return res\n }, [])\n }\n\n setPointOfSales(values)\n\n if (!pointOfSaleId) {\n setPointOfSaleId(\n props.defaultValues ? props.defaultValues.pointOfSaleId : ''\n )\n }\n\n if (!guestTypes) {\n setGuestTypeId(\n props.defaultValues ? props.defaultValues.guestTypeId : ''\n )\n }\n\n if (!mealTypeId) {\n setMealTypeId(\n props.defaultValues ? props.defaultValues.mealTypeId : ''\n )\n }\n if (!menuId) {\n setMenuId(props.defaultValues ? props.defaultValues.menuId : '')\n }\n\n setLoading(false)\n }\n\n fetch()\n }, [siteId, props.date])\n\n useEffect(() => {\n if (!pointOfSaleId || !pointOfSales) {\n return\n }\n setCurrentPointOfSale(pointOfSales.find(_ => _.id == pointOfSaleId))\n }, [pointOfSaleId])\n\n useEffect(() => {\n if (!pointOfSales) {\n return\n }\n\n updateRecipes(menuId)\n }, [pointOfSales])\n\n useEffect(() => {\n if (!menuId) {\n props.handleChange(null, 'winrest2', {\n kiosks: null,\n })\n return\n }\n\n updateRecipes(menuId)\n }, [menuId])\n\n useEffect(() => {\n if (!selectedRecipeTypes) {\n return\n }\n props.handleChange(null, 'winrest2', {\n selectedRecipeTypes,\n })\n }, [selectedRecipeTypes])\n\n useEffect(() => {\n // use previous value to prevent fetch on first render\n if (props.dayCount < 1 || !prevDayCount.current) {\n return\n }\n const includedDays = getIncludedDays(\n props.date,\n props.startDay,\n props.dayCount,\n props.language,\n props.displayMode,\n props.excludedDays\n )\n\n const fetch = async () => {\n setLoading(true)\n const urls = []\n for (let i = 0; i < includedDays.length; i++) {\n const d = includedDays[i].format('YYYY-MM-DD')\n const url = `service/v1/sites/${siteId}/pointsOfSale/${d}`\n const key = CryptoJS.MD5(`${url}&key=LoungeUpMobileAPI`)\n urls.push({\n key,\n url: `${url}?deliveryId=${pointOfSaleId}&menuId=${menuId}`,\n })\n }\n\n // const values = await Promise.all(\n // urls.map(_ =>\n // axios.get(`https://${baseUrl}/${_.url}`, {\n // headers: { bearer: _.key },\n // })\n // )\n // )\n\n const values = []\n for (let i = 0; i < urls.length; i++) {\n const value = await axios.get(\n `https://${baseUrl}/${urls[i].url}`,\n {\n headers: { bearer: urls[i].key },\n }\n )\n values.push(value)\n }\n\n const menus = []\n const kiosks = []\n let allRecipeTypes = []\n let allRecipes = []\n for (let i = 0; i < values.length; i++) {\n if (!values[i].data || !values[i].data[0].menus) {\n continue\n }\n const menu = values[i].data[0].menus[0]\n kiosks.push({\n date: menu.date.slice(0, 10),\n currency: menu.currency,\n recipes: {\n ...groupBy(menu.recipes, 'recipeTypeName'),\n ...groupBy(menu.recipes, 'defaultKiosk'),\n },\n })\n\n menu.recipes.forEach(_ => {\n if (!allRecipeTypes.includes(_.recipeTypeName)) {\n allRecipeTypes.push(_.recipeTypeName)\n }\n })\n\n const recipesCopy = []\n menu.recipes.forEach(_ =>\n recipesCopy.push(Object.assign({}, _))\n )\n const groupedByDefaultKiosk = groupBy(\n recipesCopy,\n 'defaultKiosk'\n )\n const defaultKiosks = Object.keys(groupedByDefaultKiosk).map(\n _ => {\n return groupedByDefaultKiosk[_].map(a => {\n a.recipeTypeName = a.defaultKiosk\n return a\n })\n }\n )\n const defaultKiosksFlattenArray = []\n defaultKiosks.forEach(_ => {\n _.forEach(a => defaultKiosksFlattenArray.push(a))\n })\n menu = {\n ...menu,\n recipes: menu.recipes.concat(defaultKiosksFlattenArray),\n }\n\n menus.push(menu)\n\n allRecipes = [...allRecipes, ...menu.recipes]\n }\n\n setAllRecipes(allRecipes)\n\n if (allRecipes && allRecipes.length > 0) {\n // allRecipeTypes = sortRecipeTypesByRecipeTypeOrder(\n // allRecipeTypes,\n // groupBy(allRecipes, 'recipeTypeName')\n // )\n // allRecipeTypes = [\n // ...allRecipeTypes,\n // ...Object.keys(groupBy(allRecipes, 'recipeTypeName'))\n // ]\n }\n\n // Put recipes grouped by kiosk at the end\n // allRecipeTypes = [\n // ...allRecipeTypes,\n // ...Object.keys(groupBy(allRecipes, 'defaultKiosk')),\n // ]\n\n const _defaultKiosks = Object.keys(groupBy(allRecipes, 'defaultKiosk'))\n setRecipeTypes(allRecipeTypes)\n setDefaultKiosks(_defaultKiosks)\n const _selectedRecipeTypes = allRecipeTypes.filter(_ => selectedRecipeTypes.includes(_))\n setSelectedRecipeTypes(_selectedRecipeTypes)\n setDefaultRecipePictures([...allRecipeTypes, ..._defaultKiosks])\n\n props.handleChange(null, 'winrest2', {\n kiosks,\n menus,\n baseUrl,\n siteId,\n pointOfSaleId,\n guestTypeId,\n mealTypeId,\n menuId,\n selectedRecipeTypes: _selectedRecipeTypes,\n })\n setLoading(false)\n }\n fetch()\n }, [props.dayCount, props.startDay, props.excludedDays])\n\n useEffect(() => {\n prevDayCount.current = props.dayCount\n }, [props.dayCount])\n\n useEffect(() => {\n props.handleChange(null, 'winrest2', {\n pictures,\n })\n }, [pictures])\n\n useEffect(() => {\n if (props.displayMode === 'week' && props.startDay === 'today') {\n props.handleChange({ target: { name: 'startDay', type: 'select', value: 'monday' }})\n }\n }, [props.displayMode])\n\n const updateRecipes = menuId => {\n if (!pointOfSales) {\n return\n }\n const currentPointOfSale = pointOfSales.find(_ => _.id == pointOfSaleId)\n if (!currentPointOfSale) {\n return\n }\n\n const menu = currentPointOfSale.menus.find(_ => _.id == menuId)\n if (!menu) {\n return\n }\n\n setAllRecipes([...menu.recipes])\n\n const recipesByType = groupBy(menu.recipes, 'recipeTypeName')\n let recipeTypes = Object.keys(recipesByType)\n\n // if (recipeTypes && recipeTypes.length > 0) {\n // recipeTypes = sortRecipeTypesByRecipeTypeOrder(\n // recipeTypes,\n // recipesByType\n // )\n // }\n\n // Put recipes grouped by kiosk at the end\n // recipeTypes = [\n // ...recipeTypes,\n // ...Object.keys(groupBy(menu.recipes, 'defaultKiosk')),\n // ]\n\n const _defaultKiosks = Object.keys(groupBy(menu.recipes, 'defaultKiosk'))\n setRecipeTypes(recipeTypes)\n setDefaultKiosks(_defaultKiosks)\n const _selectedRecipeTypes = recipeTypes.filter(_ => _ !== 'None')\n setSelectedRecipeTypes(_defaultKiosks)\n setDefaultRecipePictures([...recipeTypes, ..._defaultKiosks])\n\n props.handleChange(null, 'winrest2', {\n kiosks: [\n {\n date: props.date,\n currency: menu.currency,\n recipes: {\n ...recipesByType,\n ...groupBy(menu.recipes, 'defaultKiosk'),\n },\n },\n ],\n baseUrl,\n siteId,\n pointOfSaleId,\n guestTypeId,\n mealTypeId,\n menuId,\n selectedRecipeTypes: _selectedRecipeTypes,\n })\n }\n\n const sortRecipeTypesByRecipeTypeOrder = (recipeTypesP, recipesByTypeP) => {\n const recipesByType =\n recipesByTypeP || groupBy(allRecipes, 'recipeTypeName')\n if (!recipesByType || recipesByType == []) return\n\n let recipeTypes = recipeTypesP || Object.keys(recipesByType)\n if (!recipeTypes || recipeTypes == []) return\n\n recipeTypes.sort((a, b) => {\n if (!recipesByType[a] || !recipesByType[a][0]) return 1\n if (!recipesByType[b] || !recipesByType[b][0]) return -1\n\n return (\n recipesByType[a][0].recipeTypeOrder -\n recipesByType[b][0].recipeTypeOrder\n )\n })\n\n return recipeTypes\n }\n\n const handleChangeSelectedRecipeTypes = e => {\n const name = e.target.name\n const value = e.target.checked\n\n if (value) {\n setSelectedRecipeTypes(\n //sortRecipeTypesByRecipeTypeOrder([...selectedRecipeTypes, name])\n [...selectedRecipeTypes, name]\n )\n } else {\n setSelectedRecipeTypes(selectedRecipeTypes.filter(_ => _ !== name))\n }\n\n if (\n value &&\n (!pictures[props.concept] || !pictures[props.concept][name])\n ) {\n setCurrentRecipePicture(name)\n }\n }\n\n const handleChangeSelectedDefaultKiosk = e => {\n const name = e.target.name\n const value = e.target.checked\n\n if (value) {\n setSelectedRecipeTypes(\n //sortRecipeTypesByRecipeTypeOrder([...selectedRecipeTypes, name])\n [...selectedRecipeTypes, name]\n )\n } else {\n setSelectedRecipeTypes(selectedRecipeTypes.filter(_ => _ !== name))\n }\n }\n\n const handlePictureChange = e => {\n const value = e.target.name\n if (value.indexOf('-') === -1 || value.indexOf('_') === -1) {\n return\n }\n\n const values = [\n value.slice(0, value.lastIndexOf('-')), \n value.slice(value.lastIndexOf('-') + 1, value.length)\n ]\n const recipe = values[0].split('_')[1]\n const picture = values[1]\n const concept = props.concept\n\n setPictures({\n ...pictures,\n [concept]: {\n ...(pictures[concept] || {}),\n [recipe]: picture,\n },\n })\n\n props.handleChange(e)\n }\n\n const groupBy = (xs, key) => {\n return xs.reduce(function(rv, x) {\n if (x[key] === '') return rv\n ;(rv[x[key]] = rv[x[key]] || []).push(x)\n return rv\n }, {})\n }\n\n const defaultTitle =\n Settings.translations[getLanguage(props.language)].today\n\n const setDefaultRecipePictures = recipeTypes => {\n if (pictures && props.concept && pictures[props.concept]) {\n recipeTypes.forEach(r => {\n if (!pictures[props.concept][r]) {\n pictures[props.concept][r] = r\n }\n })\n } else {\n if (!pictures[props.concept]) {\n pictures[props.concept] = {}\n }\n\n recipeTypes.forEach(r => {\n pictures[props.concept][r] = r\n })\n }\n }\n\n return (\n <>\n \n \n setBaseUrl(e.target.value)}\n onChange={e => setBaseUrl(e.target.value)}\n />\n
\n ex: wrfr.newrest.eu \n \n {sites && (\n <>\n \n \n setSiteId(e.target.value)}\n >\n \n {sites.map((singleSite, index) => (\n \n ))}\n \n \n \n \n \n {props.concepts.map((concept, index) => (\n \n ))}\n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n )}\n\n {pointOfSales && (\n \n \n setPointOfSaleId(e.target.value)}\n >\n \n {pointOfSales.map((pointOfSale, index) => (\n \n ))}\n \n \n )}\n\n {pointOfSales &&\n guestTypes &&\n mealTypes &&\n pointOfSaleId &&\n currentPointOfSale && (\n <>\n \n \n setGuestTypeId(e.target.value)}\n >\n \n {Object.keys(\n currentPointOfSale.byGuestTypes\n ).map((id, index) => (\n \n ))}\n \n \n \n \n setMealTypeId(e.target.value)}\n >\n \n {Object.keys(\n currentPointOfSale.byMealTypes\n ).map((id, index) => (\n \n ))}\n \n \n {guestTypeId && mealTypeId && (\n \n \n setMenuId(e.target.value)}\n >\n \n {currentPointOfSale.menus\n .filter(\n menu =>\n menu.guestTypeId ==\n guestTypeId &&\n menu.mealTypeId == mealTypeId\n )\n .map((menu, index) => (\n \n ))}\n \n \n )}\n\n {recipeTypes && (\n <>\n \n \n {props.concept && (\n \n setCurrentRecipePicture(null)\n }\n />\n )}\n {/* {Object.keys(recipes).map((name, index) => ( */}\n {recipeTypes.map((name, index) => (\n \n
\n \n handleChangeSelectedRecipeTypes(\n e\n )\n }\n label={name}\n />\n
\n {selectedRecipeTypes.includes(\n name\n ) && (\n \n setCurrentRecipePicture(\n name\n )\n }\n >\n Modify\n \n )}\n
\n ))}\n
\n \n )}\n\n\n {defaultKiosks && (\n <>\n \n \n {defaultKiosks.map((name, index) => (\n \n
\n \n handleChangeSelectedDefaultKiosk(\n e\n )\n }\n label={name == 'null' ? 'N/A' : name}\n />\n
\n
\n ))}\n
\n \n )}\n \n )}\n\n {menuId && (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n \n \n
\n \n
\n
\n {props.displayMode === 'kiosk' && (\n \n \n
\n \n
\n
\n )}\n\n \n \n \n \n \n \n \n \n {props.days.map((day, index) => (\n \n ))}\n \n \n {props.dayCount > 1 && (\n \n \n \n \n \n \n \n \n \n \n \n \n )}\n \n \n \n \n {props.displayModes.map(\n (displayMode, index) =>\n displayMode.visible && (\n \n {displayMode.name}\n \n )\n )}\n \n \n\n {(props.displayMode === 'kiosk' ||\n props.displayMode === 'week') && (\n \n \n \n
\n ex: 1.05\n \n )}\n {(props.displayMode === 'kiosk' ||\n props.displayMode === 'week') && (\n \n \n
\n \n
\n
\n )}\n {props.print && props.displayMode !== 'week' && (\n <>\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n )}\n\n \n window.open(props.generateUrl())}\n >\n Link\n \n {props.displayMode !== 'day' && print && (\n \n Print\n \n )}\n \n \n )}\n {loading && }\n \n )\n}\n\nexport default WinrestForm2\n","import moment from 'moment'\nimport 'moment/min/locales.min'\n\nimport { getLanguage } from './Locale'\n\nexport const getIncludedDays = (\n date,\n startDay,\n dayCount,\n language,\n displayMode,\n excludedDays = []\n) => {\n const _date = moment(date)\n let includedDays = [_date]\n if (dayCount > 1 && displayMode !== 'print') {\n // const firstDayOfWeek = date.locale(this.props.language).startOf('week');\n const days = [\n 'sunday',\n 'monday',\n 'tuesday',\n 'wednesday',\n 'thurday',\n 'friday',\n 'saturday',\n ]\n moment.updateLocale(getLanguage(language), {\n week: {\n dow: displayMode !== 'week' && startDay === 'today'\n ? moment().day()\n : days.filter(day => day !== 'today').indexOf(startDay) \n },\n })\n const firstDayOfWeek = _date\n .locale(getLanguage(language))\n .startOf('week')\n includedDays = [firstDayOfWeek]\n for (let i = 0; i < dayCount - 1; i++) {\n if (!includedDays[i]) {\n continue\n }\n const dayToAdd = includedDays[i].clone().add(1, 'd')\n includedDays.push(dayToAdd)\n }\n }\n return includedDays.filter(_ => excludedDays.indexOf(_.day()) === -1)\n}\n","import React, { createContext, Component } from 'react'\r\n\r\nconst LoadingContext = createContext()\r\n\r\nconst { Provider, Consumer } = LoadingContext\r\n\r\nexport class LoaderProvider extends Component {\r\n state = {\r\n loading: false,\r\n }\r\n\r\n setLoading = () => this.setState({ loading: true })\r\n setUnloading = () => this.setState({ loading: false })\r\n\r\n render = () => {\r\n const { loading } = this.state\r\n return (\r\n \r\n {this.props.children}\r\n \r\n )\r\n }\r\n}\r\n\r\nexport const LoaderConsumer = Comp => props => (\r\n {context => }\r\n)\r\n","import React from 'react'\r\nimport styled, { css } from 'styled-components'\r\nimport PropTypes from 'prop-types'\r\nimport ExcelForm from './ExcelForm'\r\nimport WinrestForm2 from './WinrestForm2'\r\nimport { MongoSites, getSlugFromString } from '../../utils/mongo_utils'\r\nimport { LoaderConsumer } from '../../utils/LoadingContext'\r\n\r\nconst DATA_SOURCES = {\r\n none: { name: 'Choose', form: () => null },\r\n excel: { name: 'Excel', form: ExcelForm },\r\n winrest2: { name: 'Winrest', form: WinrestForm2 },\r\n //winrest: { name: 'Winrest (old)', form: WinrestForm },\r\n}\r\n\r\nconst FONT_COLOR = '#edeff0'\r\n\r\nconst MenuSettingsWrapper = styled.div`\r\n display: flex;\r\n flex-direction: column;\r\n text-align: left;\r\n position: relative;\r\n min-width: 350px;\r\n padding: 15px;\r\n z-index: 1;\r\n\r\n height: 100%;\r\n max-height: 100vh;\r\n overflow: auto;\r\n\r\n background-color: rgba(34, 49, 58, 0.93);\r\n color: ${FONT_COLOR || '#000'};\r\n\r\n box-shadow: 0 15px 35px rgba(50, 50, 93, 0.1),\r\n 0 5px 15px rgba(0, 0, 0, 0.07);\r\n\r\n label {\r\n display: inline-block;\r\n font-size: 0.75rem;\r\n text-transform: uppercase;\r\n margin-top: 4px;\r\n color: ${FONT_COLOR || '#000'};\r\n }\r\n\r\n @media print {\r\n display: none;\r\n }\r\n\r\n transform: translateX(-99%);\r\n transition: transform 0.3s ease-in-out;\r\n\r\n ${({ settingsDrawerOpen }) =>\r\n !settingsDrawerOpen &&\r\n css`\r\n :hover {\r\n transform: translateX(-97%);\r\n }\r\n `};\r\n\r\n ${({ settingsDrawerOpen }) =>\r\n settingsDrawerOpen &&\r\n css`\r\n transform: translate(0);\r\n `};\r\n\r\n @media (max-width: 960px) {\r\n width: 100%;\r\n }\r\n`\r\n\r\nconst Logo = styled.img`\r\n width: 100px;\r\n margin-bottom: 20px;\r\n`\r\n\r\nexport const FormGroup = styled.div`\r\n margin-bottom: 0.6rem;\r\n display: grid;\r\n grid-template-columns: 100px 1fr;\r\n input,\r\n select {\r\n display: block;\r\n\r\n width: 100%;\r\n font-size: 0.8rem;\r\n line-height: 1.25;\r\n color: ${FONT_COLOR};\r\n background-color: #2b3942;\r\n border-top: 0;\r\n border-right: 0;\r\n border-bottom: 1px solid ${FONT_COLOR};\r\n border-left: 0;\r\n border-radius: 5px;\r\n padding: 3px;\r\n outline: 0;\r\n }\r\n\r\n input:-webkit-autofill,\r\n input:-webkit-autofill:hover,\r\n input:-webkit-autofill:focus,\r\n input:-webkit-autofill:active {\r\n -webkit-transition-delay: 99999s;\r\n }\r\n\r\n select {\r\n color: ${FONT_COLOR};\r\n background: #2b3942;\r\n }\r\n small {\r\n font-size: 0.7rem;\r\n font-weight: bold;\r\n opacity: 0.7;\r\n margin-top: 5px;\r\n }\r\n`\r\n\r\nexport const KioskSelection = styled.div`\r\n justify-items: right;\r\n margin-bottom: 15px;\r\n ${({ nogrid }) =>\r\n nogrid\r\n ? `\r\n input {\r\n margin-right: 10px;\r\n }\r\n `\r\n : `display: grid;\r\n grid-template-columns: 1fr 1fr;`}\r\n`\r\n\r\nexport const ActionLink = styled.div`\r\n text-align: center;\r\n margin-top: 25px;\r\n a,\r\n div {\r\n color: #fff;\r\n font-size: 0.9em;\r\n font-weight: 600;\r\n text-transform: uppercase;\r\n text-decoration: none;\r\n }\r\n\r\n div:hover {\r\n cursor: pointer;\r\n }\r\n\r\n @media print {\r\n display: none;\r\n }\r\n`\r\n\r\nexport const Separator = styled.div`\r\n margin: 10px 35px;\r\n`\r\n\r\nconst MenuSettings = props => {\r\n const {\r\n entityId,\r\n siteId,\r\n file,\r\n title,\r\n subtitle,\r\n concept,\r\n forceToday,\r\n date,\r\n winrestURL,\r\n language,\r\n service,\r\n recipes,\r\n menu,\r\n kiosks,\r\n displayMode,\r\n dayCount,\r\n orientation,\r\n zoom,\r\n size,\r\n startDay,\r\n settingsDrawerOpen,\r\n openDrawer,\r\n closeDrawer,\r\n dataSource,\r\n mealTypeSlug,\r\n pointOfSaleSlug,\r\n handleChange,\r\n menuSlug,\r\n guestTypeSlug,\r\n useCommercialName,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n hideEnergyKcal,\r\n showEnergyKcalByPortion,\r\n hideComposition,\r\n hideLabels,\r\n hideIntolerences,\r\n isDuoKiosk,\r\n print,\r\n showDate,\r\n excludedDays,\r\n } = props\r\n const generateUrl = () => {\r\n let queryParams = `\r\n ?dataSource=${dataSource}&\r\n ${title ? `t=${encodeURIComponent(title)}&` : ''}\r\n ${subtitle ? `st=${encodeURIComponent(subtitle)}&` : ''}\r\n hideMenuPrice=${hideMenuPrice || false}&\r\n hideRecipePoints=${hideRecipePoints || false}&\r\n hideEnergyKcal=${hideEnergyKcal || false}&\r\n showEnergyKcalByPortion=${showEnergyKcalByPortion || false}&\r\n hideComposition=${hideComposition || false}&\r\n hideLabels=${hideLabels || false}&\r\n hideIntolerences=${hideIntolerences || false}&\r\n isDuoKiosk=${isDuoKiosk || false}&\r\n mkt=${concept}&\r\n date=${forceToday ? 'today' : date}&\r\n l=${language}&\r\n mode=${\r\n print\r\n ? displayMode === 'week'\r\n ? 'week'\r\n : 'print'\r\n : displayMode\r\n }&\r\n dayCount=${dayCount}&\r\n orientation=${orientation}&\r\n ${print ? `print=1&` : ''}\r\n zoom=${zoom}&\r\n size=${size}&\r\n showDate=${showDate || false}&\r\n startDay=${startDay}&\r\n excludedDays=${excludedDays.toString()}\r\n `\r\n\r\n if (dataSource === 'excel') {\r\n const excelQueryParams = `\r\n entityId=${entityId}&\r\n siteId=${siteId}&\r\n f=${file}&\r\n s=${service}&\r\n ${menu ? 'menu=' + menu + '&' : ''}\r\n kiosks=${kiosks\r\n .reduce((result, item) => {\r\n if (item.enabled) {\r\n result.push(\r\n `${item.name}-${\r\n item.kioskPicture\r\n ? item.kioskPicture\r\n : item.name\r\n }`\r\n )\r\n }\r\n return result\r\n }, [])\r\n .join(',')}\r\n `\r\n return `${queryParams}&${excelQueryParams}`.replace(/$\\n^\\s*/gm, '')\r\n } else if (dataSource === 'winrest') {\r\n const currentSite = MongoSites.findOne({ id: Number(siteId) }) || {}\r\n const winrestQueryParams = `\r\n siteSlug=${getSlugFromString(currentSite.name)}&\r\n url=${winrestURL}&\r\n useCommercialName=${useCommercialName ? true : false}&\r\n pointOfSaleSlug=${pointOfSaleSlug}&\r\n mealTypeSlug=${mealTypeSlug}&\r\n menuSlug=${menuSlug}&\r\n guestTypeSlug=${guestTypeSlug}&\r\n recipes=${recipes}\r\n `\r\n return `${queryParams}&${winrestQueryParams}`.replace(\r\n /$\\n^\\s*/gm,\r\n ''\r\n )\r\n } else if (dataSource === 'winrest2') {\r\n const { winrestData } = props\r\n if (!winrestData) {\r\n return null\r\n }\r\n const {\r\n baseUrl,\r\n siteId,\r\n pointOfSaleId,\r\n guestTypeId,\r\n mealTypeId,\r\n menuId,\r\n selectedRecipeTypes,\r\n } = winrestData\r\n if (!siteId || !pointOfSaleId) {\r\n return null\r\n }\r\n\r\n const pictures = JSON.stringify(winrestData.pictures[concept])\r\n\r\n const winrestQueryParams = `\r\n url=${baseUrl}&\r\n siteId=${siteId}&\r\n pointOfSaleId=${pointOfSaleId}&\r\n guestTypeId=${guestTypeId}&\r\n mealTypeId=${mealTypeId}&\r\n menuId=${menuId}&\r\n recipeTypeIds=${encodeURIComponent(selectedRecipeTypes.join())}&\r\n pictures=${encodeURIComponent(pictures || '')}&\r\n useCommercialName=${useCommercialName ? true : false}\r\n `\r\n return `${queryParams}&${winrestQueryParams}`.replace(\r\n /$\\n^\\s*/gm,\r\n ''\r\n )\r\n }\r\n }\r\n\r\n const FormWithSource = DATA_SOURCES[dataSource]\r\n ? DATA_SOURCES[dataSource].form\r\n : () => null\r\n\r\n return (\r\n \r\n \r\n \r\n \r\n\r\n \r\n {Object.keys(DATA_SOURCES).map((source, index) => (\r\n \r\n ))}\r\n \r\n \r\n\r\n \r\n\r\n \r\n \r\n )\r\n}\r\n\r\nexport default LoaderConsumer(MenuSettings)\r\n\r\nMenuSettings.propTypes = {\r\n // func\r\n closeDrawer: PropTypes.func,\r\n handleChange: PropTypes.func,\r\n openPrintDialog: PropTypes.func,\r\n openDrawer: PropTypes.func,\r\n winrestApiFetcher: PropTypes.func,\r\n\r\n // boolean\r\n settingsDrawerOpen: PropTypes.bool,\r\n forceToday: PropTypes.bool,\r\n print: PropTypes.bool,\r\n\r\n // string\r\n entityId: PropTypes.string,\r\n file: PropTypes.string,\r\n concept: PropTypes.string,\r\n date: PropTypes.string,\r\n language: PropTypes.string,\r\n service: PropTypes.string,\r\n menu: PropTypes.string,\r\n displayMode: PropTypes.string,\r\n orientation: PropTypes.string,\r\n size: PropTypes.string,\r\n startDay: PropTypes.string,\r\n dataSource: PropTypes.string,\r\n minDate: PropTypes.string,\r\n maxDate: PropTypes.string,\r\n siteId: PropTypes.string,\r\n\r\n // number\r\n zoom: PropTypes.number,\r\n dayCount: PropTypes.number,\r\n\r\n // array\r\n displayModes: PropTypes.array,\r\n kiosks: PropTypes.array,\r\n days: PropTypes.array,\r\n}\r\n","import styled, { css } from 'styled-components'\n\nconst headerPadding = 20\n\nexport const Header = styled.div`\n background-color: ${_ => _.theme.header_background};\n padding: ${headerPadding}px;\n position: relative;\n margin-bottom: ${props => (props.mode === 'week' ? '0' : '20px')};\n\n ${props =>\n props.theme.header_border_color &&\n props.mode !== 'week' &&\n css`\n border-bottom: 16px solid ${props.theme.header_border_color};\n `}\n\n ${props =>\n props.mode === 'kiosk' &&\n css`\n @media screen and (max-width: 1024px) {\n margin-bottom: 0px;\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: none;\n padding: 1em 4em;\n }\n `}\n\n ${props =>\n props.mode === 'kiosk' &&\n css`\n @media screen and (max-width: 1024px) {\n margin-bottom: 0px;\n\n display: flex;\n align-items: center;\n justify-content: space-between;\n border-bottom: none;\n padding: 1em 4em;\n }\n `}\n\n ${props =>\n props.mode === 'day' &&\n css`\n @media screen and (max-width: 1024px) {\n h2 {\n text-align: right;\n }\n }\n `}\n\n\n\n font-family: ${_ => _.theme.header_font_family};\n font-size: ${_ => _.theme.header_font_size || 'initial'};\n`\n\nexport const Logo = styled.img`\n position: absolute;\n top: 0px;\n left: ${props => (props.mode === 'week' ? '5%' : '15%')};\n height: ${props => (props.mode === 'week' ? '98px' : '112px')};\n\n ${props =>\n props.mode === 'kiosk' &&\n css`\n @media screen and (max-width: 1300px) {\n position: relative;\n left: 0px;\n }\n\n @media screen and (min-width: 1600px) {\n position: relative;\n left: 0px;\n }\n `}\n\n @media screen and (max-width: 768px) {\n position: absolute;\n left: 26px;\n height: 60px;\n margin-bottom: 1em;\n }\n`\n\nexport const Title = styled.h1`\n font-size: ${_ => (_.titleFontSize ? _.titleFontSize : '1.5em')};\n font-weight: 400;\n color: ${_ => _.theme.header_font_color};\n margin: 0;\n line-height: ${_ =>\n _.lineHeight ? _.lineHeight - headerPadding + 'px' : 'auto'};\n\n @media screen and (max-width: 768px) {\n display: none;\n }\n`\n\nexport const SubTitle = styled.h2`\n font-size: 1em;\n font-weight: 400;\n color: ${_ => _.theme.header_font_color};\n margin: 0;\n margin-top: 0.25em;\n line-height: ${_ =>\n _.lineHeight ? _.lineHeight - headerPadding + 'px' : 'auto'};\n\n @media screen and (max-width: 768px) {\n position: absolute;\n right: 20px;\n bottom: 1px;\n }\n`\n\nexport const Week = styled.h2`\n font-size: 1em;\n font-weight: 200;\n color: ${_ => _.theme.header_font_color};\n text-transform: uppercase;\n margin: 0;\n letter-spacing: 2px;\n`\n","import React from 'react'\nimport { Header, Logo, Title, Week } from './style.js'\n\nconst header = props => {\n return (\n
\n \n
\n {props.date && {props.date}}\n \n {props.title}\n \n
\n
\n )\n}\n\nexport default header\n","import styled, { css } from 'styled-components'\n\nexport const KioskContent = styled.div`\n padding: 0.5em;\n text-align: left;\n\n ${props =>\n props.isMonoKiosk &&\n css`\n height: 60%;\n /* margin: 0 auto; */\n `}\n`\n\nexport const KioskHeader = styled.div`\n width: 100%;\n height: 95px;\n margin-bottom: 1em;\n background-image: url(${({ backgroundImage }) => backgroundImage});\n background-position: center;\n background-repeat: no-repeat;\n background-size: cover;\n img {\n height: 95px;\n width: 100%;\n object-fit: cover;\n }\n span img {\n position: absolute;\n left: 25px;\n top: 0;\n width: auto;\n height: 116px;\n }\n`\n\nexport const RecipeTitle = styled.div`\n font-size: 1.3em;\n text-align: left;\n grid-column: 1;\n font-weight: 600;\n\n color: ${_ => _.theme.recipe_title_font_color};\n`\n\nexport const RecipeItem = styled.div`\n display: grid;\n grid-template-columns: 1fr auto auto;\n grid-gap: 4px;\n margin: 20px 0;\n margin-top: 30px;\n padding: 0.5em 1em;\n border-bottom: 1px solid ${_ => _.theme.recipe_border_color};\n\n\n ${props => props.customStyle === 'produit_neo' && `\n border: 1px solid #003f45;\n border-radius: 12px;\n border-width: 2px;\n margin-top: 46px;\n ${RecipeTitle} {\n color: #003f45;\n }\n ${RecipePoints} {\n & > span {\n color: #003f45;\n border-color: #003f45;\n }\n }\n ${RecipePrice} {\n & > span {\n background-color: #003f45;\n border-color: #003f45;\n }\n }\n `}\n`\n\nexport const RecipePrice = styled.div`\n grid-column: 3;\n\n & > span {\n display: inline-block;\n border-radius: 5px;\n min-width: 50px;\n text-align: center;\n font-size: 1.2em;\n font-weight: 700;\n padding: 2px;\n\n color: ${_ => _.theme.recipe_price_font_color};\n background-color: ${_ => _.theme.recipe_price_background};\n border: 1px solid ${_ => _.theme.recipe_price_background};\n\n ${props => props.mode === 'print' && css`\n color: ${_ => _.theme.print_recipe_price_font_color || _.theme.recipe_price_font_color};\n background-color: ${_ => _.theme.print_recipe_price_background || _.theme.recipe_price_background};\n border: 1px solid ${_ => _.theme.print_recipe_price_background || _.theme.recipe_price_background};\n `}\n\n span {\n font-size: 0.6em;\n vertical-align: top;\n display: inline-block;\n margin-top: 3px;\n }\n }\n`\n\nexport const RecipePoints = styled.div`\n grid-column: ${_ => (_.fullWidth ? '2 span' : _.endPosition ? '3' : '2')};\n\n & > span {\n display: inline-block;\n border-radius: 5px;\n min-width: 50px;\n text-align: center;\n font-size: 1.2em;\n font-weight: 700;\n padding: 2px;\n\n color: ${_ => _.theme.recipe_points_font_color};\n background-color: ${_ => _.theme.recipe_points_background};\n border: 1px solid ${_ => _.theme.recipe_points_font_color};\n\n ${props => props.mode === 'print' && css`\n color: ${_ => _.theme.print_recipe_points_font_color || _.theme.recipe_points_font_color};\n background-color: ${_ => _.theme.print_recipe_points_background || _.theme.recipe_points_background};\n border: 1px solid ${_ => _.theme.print_recipe_points_background || _.theme.recipe_points_font_color};\n `}\n\n span {\n font-size: 0.6em;\n vertical-align: top;\n display: inline-block;\n margin-top: 3px;\n }\n }\n`\n\nexport const EnergyKCal = styled(RecipePoints)`\n grid-column: 2 / 2 span;\n & > span {\n max-height: 24px;\n min-width: 100%;\n font-size: 1em;\n border: none;\n }\n`\n\nexport const RecipeComposition = styled.div`\n font-size: 0.8em;\n font-weight: 300;\n grid-column: 3 span;\n text-align: left;\n`\n\nexport const RecipeLabels = styled.div`\n grid-column: 1;\n text-align: left;\n margin-bottom: 2px;\n`\nexport const RecipeLabel = styled.img`\n height: 36px;\n vertical-align: middle;\n margin: 0 .1em 10px .1em;\n`","import React from 'react'\r\nimport styled from 'styled-components'\r\nimport { RecipeLabels } from '../Kiosk/style'\r\n\r\nconst Icons = styled.span`\r\n margin-left: 2px;\r\n`\r\n\r\nconst Icon = styled.img`\r\n width: ${props => props.size || '16px'};\r\n height: ${props => props.size || '16px'};\r\n vertical-align: text-top;\r\n`\r\n\r\nconst nonAllergenTokens = 'Non-allergen'\r\n\r\nconst labelIcons = props => {\r\n let allergenProperties = [\r\n 'Allergenes 1',\r\n 'Allergenes 2',\r\n 'Allergenes 3',\r\n 'Allergenes 4',\r\n 'Allergenes 5',\r\n 'Allergenes 6',\r\n ]\r\n\r\n if (props.count) {\r\n allergenProperties = allergenProperties.slice(0, props.count)\r\n }\r\n\r\n const allergens = allergenProperties.reduce((result, item) => {\r\n if (\r\n props.item[item] &&\r\n !!props.item[item] &&\r\n props.item[item].indexOf(nonAllergenTokens) === -1\r\n ) {\r\n result.push(props.item[item])\r\n }\r\n return result\r\n }, [])\r\n const { dataSource } = props\r\n const isWinrest = dataSource === 'winrest' || dataSource === 'winrest2'\r\n\r\n if (allergens.length === 0) {\r\n return null\r\n }\r\n \r\n return (\r\n \r\n \r\n {allergens.map(item => (\r\n (i.target.style.display = 'none')}\r\n />\r\n ))}\r\n {/* {!!props.item.label && props.item.label !== '0' ? (\r\n \r\n ) : null} */}\r\n \r\n \r\n )\r\n}\r\n\r\nexport default labelIcons\r\n","import React from 'react'\r\nimport styled from 'styled-components'\r\nimport { RecipeLabel } from '../../Kiosk/style'\r\n\r\nimport LabelIcons from '../../LabelIcons/LabelIcons'\r\n\r\nconst Cell = styled.div`\r\n font-size: 1em;\r\n font-weight: 300;\r\n line-height: 2em;\r\n`\r\n\r\nconst cellItems = props => {\r\n let result = null\r\n const {\r\n items,\r\n dataSource,\r\n hideLabels,\r\n hideIntolerences,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n hideEnergyKcal,\r\n showEnergyKcalByPortion\r\n } = props\r\n\r\n if (items) {\r\n result = items\r\n .filter(_ => _.menu_board_label)\r\n .map((item, index) => (\r\n
\r\n {item.menu_board_label}\r\n\r\n {!hideEnergyKcal && (\r\n showEnergyKcalByPortion ? (\r\n !!item.energyKCalByPortion &&  ({item.energyKCalByPortion} kCal)\r\n ) : (\r\n !!item.energyKCal && (\r\n \r\n  (\r\n {item.energyKCal}\r\n  kCal\r\n 100g\r\n )\r\n \r\n )\r\n )\r\n )}\r\n {!hideRecipePoints && item.price_point ? (\r\n  ({item.price_point})\r\n ) : null}\r\n {(!hideLabels && item.label) && (\r\n (i.target.style.display = 'none')}\r\n />\r\n )}\r\n\r\n {!hideLabels && item.caracteristique_produit && (\r\n (i.target.style.display = 'none')}\r\n />\r\n )}\r\n {!hideIntolerences && (\r\n \r\n )}\r\n
\r\n ))\r\n }\r\n return {result}\r\n}\r\n\r\nexport default cellItems\r\n","import React, { Fragment } from 'react'\nimport { Grid, Cell } from 'styled-css-grid'\nimport styled from 'styled-components'\n\nimport styles from './GridMenu.module.css'\n\nimport CellItems from '../CellItems/CellItems'\n\nconst StyledGrid = styled(Grid)`\n padding: 20px;\n min-height: ${_ => (_.autoHeight ? 'inherit' : '700px')};\n grid-template-rows: 20px;\n`\n\nconst GridHeader = styled(Cell)`\n color: ${_ => _.theme.grid_header_font_color};\n background-color: ${_ => _.theme.grid_header_background};\n min-height: fit-content;\n`\n\nconst StyledCell = styled(Cell)`\n ${({ useCommercialName, theme }) =>\n useCommercialName\n ? ''\n : `border-bottom: 1px solid ${theme.grid_border_color};`}\n\n display: flex;\n align-items: center;\n justify-content: center;\n`\n\nconst FirstStyledCell = styled(Cell)`\n border-bottom: 1px solid ${_ => _.theme.grid_border_color};\n\n background-color: ${_ =>\n _.theme.grid_first_column_background\n ? _.theme.grid_first_column_background\n : _.theme.kiosks_background[_.type]};\n h4 {\n color: ${_ => _.theme.grid_header_font_color};\n }\n`\n\nconst NameHeader = styled.h4`\n grid-column: span ${({ days }) => days};\n color: ${_ => _.theme.grid_header_font_color};\n background-color: ${_ => _.theme.header_background};\n margin-top: 0;\n margin-bottom: 0;\n font-weight: normal;\n display: flex;\n justify-content: center;\n align-items: center;\n height: fit-content;\n padding: 6px;\n`\n\nconst gridMenu = props => {\n const {\n days = [],\n items = [],\n useCommercialName,\n hideLabels,\n hideIntolerences,\n hideMenuPrice,\n hideRecipePoints,\n hideEnergyKcal,\n showEnergyKcalByPortion,\n dataSource,\n zoom,\n language\n } = props\n\n return (\n '1fr').join(' ')}`}\n gap=\"0px\"\n >\n {!useCommercialName && }\n {days.length > 0 &&\n days.map((day, index) => (\n \n {day.date.locale(language).format('dddd')}\n \n ))}\n {items.map(({ name, items = [], kioskPicture }, index) => (\n \n {useCommercialName && (\n {name}\n )}\n {!useCommercialName && (\n \n \n \n )}\n {items.map((date, index) => (\n \n \n \n ))}\n \n ))}\n \n )\n}\n\nexport default gridMenu\n","import styled, { createGlobalStyle, css } from 'styled-components'\r\nimport { ButtonDiv } from '../../containers/AdminPanel/WinrestForm'\r\nimport { ActionLink } from '../../containers/AdminPanel/MenuSettings'\r\n\r\nconst pageSizes = {\r\n A4: {\r\n width: '210mm',\r\n height: '296mm',\r\n },\r\n A5: {\r\n width: '148mm',\r\n height: '209mm',\r\n },\r\n A3: {\r\n width: '297mm',\r\n height: '420mm',\r\n },\r\n}\r\n\r\nexport const GlobalStyle = createGlobalStyle`\r\n zoom: ${props => props.zoom}; /* 1.8 */\r\n @media print {\r\n @page {\r\n ${props =>\r\n props.orientation &&\r\n css`\r\n size: ${props.orientation};\r\n `}\r\n /* size: ${props => props.orientation}; */\r\n margin: 0;\r\n }\r\n }\r\n`\r\n\r\nexport const Page = styled.div`\r\n position: relative;\r\n max-width: ${props =>\r\n props.orientation === 'landscape'\r\n ? pageSizes[props.size].height\r\n : pageSizes[props.size].width};\r\n height: ${props =>\r\n props.orientation === 'landscape'\r\n ? pageSizes[props.size].width\r\n : pageSizes[props.size].height};\r\n max-height: ${props =>\r\n props.orientation === 'landscape'\r\n ? pageSizes[props.size].width\r\n : pageSizes[props.size].height};\r\n\r\n ${props =>\r\n props.centered &&\r\n css`\r\n margin: auto;\r\n `}\r\n background-color: #fff;\r\n\r\n @media print {\r\n margin: 0 auto;\r\n }\r\n`\r\n\r\nexport const PrintHeader = styled.div`\r\n height: 3cm;\r\n background-color: ${_ => _.theme.header_background};\r\n position: relative;\r\n\r\n h1 {\r\n font-weight: 400;\r\n color: ${_ => _.theme.header_font_color};\r\n margin: 0;\r\n line-height: ${props => props.showDate ? '1.3cm': '3cm'};\r\n letter-spacing: 0;\r\n\r\n font-family: ${_ => _.theme.print_header_font_family || _.theme.header_font_family};\r\n font-size: ${_ => _.theme.print_header_font_size || _.theme.header_font_size || '1.7em'};\r\n color: ${props => props.theme.header_font_color || '#eff1f1'};\r\n\r\n ${props => props.showDate && css`\r\n display: flex;\r\n flex-direction: column;\r\n align-items: center;\r\n `}\r\n\r\n small {\r\n font-size: .7em;\r\n }\r\n }\r\n\r\n img {\r\n position: absolute;\r\n bottom: 0;\r\n left: 6%;\r\n height: 105px;\r\n display: ${props => (props.size === 'A5' ? 'none' : 'block')};\r\n }\r\n`\r\n\r\nexport const TopMenuBorder = styled.span`\r\n position: absolute;\r\n left: 1cm;\r\n right: 1cm;\r\n top: 1.5cm;\r\n height: 2px;\r\n background-color: ${props => props.theme.print_borders_color || '#f28e1b'};\r\n`\r\n\r\nexport const BottomMenuBorder = styled.span`\r\n position: absolute;\r\n left: 1cm;\r\n right: 1cm;\r\n bottom: 1cm;\r\n border-bottom: 2px solid\r\n ${props => props.theme.print_borders_color || '#f28e1b'};\r\n`\r\n\r\nexport const PageBorder = styled.span`\r\n border-right: 2px solid\r\n ${props => props.theme.print_borders_color || '#f28e1b'};\r\n position: absolute;\r\n top: ${({ fullSize }) => (fullSize ? '1.5cm' : '3cm')};\r\n height: ${({ fullSize }) =>\r\n fullSize ? 'calc(100% - 2.5cm)' : 'calc(100% - 4cm)'};\r\n right: ${({ side }) => (side === 'right' ? '1cm' : 'unset')};\r\n left: ${({ side }) => (side === 'left' ? '1cm' : 'unset')};\r\n`\r\n\r\nexport const Grid = styled.div`\r\n display: flex;\r\n flex-wrap: wrap;\r\n flex-direction: column;\r\n\r\n /* height: ${props =>\r\n props.orientation === 'landscape'\r\n ? pageSizes[props.size].width\r\n : pageSizes[props.size].height}; */\r\n \r\n height: ${props =>\r\n props.isMonoKiosk\r\n ? '100%'\r\n : props.orientation === 'landscape'\r\n ? `calc(${pageSizes[props.size].width} - 4cm)`\r\n : `calc(${pageSizes[props.size].height} - 4cm)`};\r\n\r\n\r\n padding: 0 14mm;\r\n\r\n font-family: ${props => props.theme.content_font_family || 'CorporateS'};\r\n zoom: ${({ zoom }) => zoom};\r\n`\r\n\r\nexport const ActionButtons = styled(ActionLink)`\r\n margin: 0;\r\n position: fixed;\r\n top: 0;\r\n right: 0;\r\n\r\n display: flex;\r\n`\r\n\r\nexport const ActionButton = styled(ButtonDiv)`\r\n font-size: 1.5em;\r\n background-color: #f28d1b;\r\n border-radius: 24px;\r\n`\r\n\r\nexport const MonoKioskDate = styled.div`\r\n position: absolute;\r\n right: 1cm;\r\n top: 0.5cm;\r\n z-index: 1000;\r\n` ","import React from 'react'\r\n\r\nimport Header from '../Header/Header'\r\nimport GridMenu from './GridMenu/GridMenu'\r\n\r\nimport { GlobalStyle } from '../PrintView/style'\r\nimport Settings from 'settings'\r\nimport { ActionLink } from '../../containers/AdminPanel/MenuSettings'\r\nimport { ButtonDiv } from '../../containers/AdminPanel/WinrestForm'\r\nimport { getLanguage } from '../../utils/Locale'\r\n\r\nconst weekView = props => {\r\n const {\r\n title,\r\n days = [],\r\n isReady,\r\n concept,\r\n orientation,\r\n items = [],\r\n language = '',\r\n useCommercialName,\r\n hideLabels,\r\n hideIntolerences,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n hideEnergyKcal,\r\n showEnergyKcalByPortion,\r\n dataSource,\r\n zoom,\r\n print,\r\n } = props\r\n if (!isReady) {\r\n return

Waiting...

\r\n }\r\n\r\n const lang = getLanguage(language)\r\n\r\n const _getWeekDateString = days => {\r\n const firstDay = days.length && days[0].date\r\n const lastDay = days.length && days[days.length - 1].date\r\n const sameMonth = firstDay.month() === lastDay.month()\r\n return sameMonth\r\n ? `${firstDay.locale(lang).format('D')} ${\r\n Settings.translations[lang].to_week\r\n } ${lastDay.locale(lang).format('D MMMM')}`\r\n : `${firstDay.locale(lang).format('D MMMM')} ${\r\n Settings.translations[lang].to_week\r\n } ${lastDay.locale(lang).format('D MMMM')}`\r\n }\r\n\r\n const headerTitle = title || Settings.translations[lang].this_week\r\n const headerSubtitle = `${\r\n Settings.translations[lang].week_from\r\n } ${_getWeekDateString(days)}`\r\n return (\r\n
\r\n \r\n \r\n {print && (\r\n \r\n window.print()}\r\n >\r\n PRINT\r\n \r\n \r\n )}\r\n \r\n
\r\n )\r\n}\r\n\r\nexport default weekView\r\n","import React from 'react'\nimport {\n KioskContent,\n KioskHeader,\n RecipeItem,\n RecipeTitle,\n RecipePoints,\n RecipePrice,\n RecipeComposition,\n RecipeLabels,\n RecipeLabel,\n EnergyKCal,\n} from './style'\nimport styled from 'styled-components'\n\nimport LabelIcons from '../LabelIcons/LabelIcons'\n\n// ;\n\nconst kiosk = props => {\n const {\n items = [],\n currency,\n kioskPicture,\n useCommercialName,\n hideMenuPrice,\n hideRecipePoints,\n hideEnergyKcal,\n showEnergyKcalByPortion,\n hideComposition,\n hideLabels,\n hideIntolerences,\n dataSource,\n } = props\n\n return (\n \n \n {!useCommercialName && (\n \n (i.target.style.display = 'none')}\n />\n \n )}\n \n {useCommercialName && (\n {props.displayName || props.name}\n )}\n {items.map((item, index) => {\n if (!item.menu_board_label) {\n return\n }\n let priceInt, priceSup, winrest_price\n if (item.price_currency && !!item.price_currency) {\n const priceRegex = /(\\d+)[,|.](\\d+)(.*)/\n const priceMatches = priceRegex.exec(item.price_currency)\n if (priceMatches) {\n priceInt = priceMatches[1]\n const decimals =\n parseInt(priceMatches[2]) !== 0\n ? priceMatches[2]\n : ''\n priceSup = priceMatches[3].trim() + decimals\n }\n }\n if (item.price) {\n const priceArray = item.price.toString().split('.')\n priceInt =\n priceArray[0].toString() + item.currency || currency\n priceSup = priceArray[1]\n winrest_price = priceInt + priceSup\n }\n\n return (\n \n {item.produit_du_jour === 'produit_neo' && (\n \n )}\n \n \n {item.menu_board_label}\n \n {!hideLabels && item.label && (\n (i.target.style.display = 'none')}\n />\n )}\n {!hideLabels && item.caracteristique_produit && (\n (i.target.style.display = 'none')}\n />\n )}\n \n\n <>\n {!hideRecipePoints && !!item.price_point ? (\n \n {item.price_point}\n \n ) : null}\n\n {!hideMenuPrice &&\n (!!item.price_currency || !!winrest_price) ? (\n \n \n {priceInt}\n {priceSup}\n \n \n ) : null}\n \n\n {!hideComposition && !!item.composition ? (\n \n {item.composition}\n \n ) : null}\n\n {!hideIntolerences && (\n \n )}\n\n {!hideEnergyKcal && (\n showEnergyKcalByPortion ? (\n !!item.energyKCalByPortion && (\n \n {item.energyKCalByPortion}\n \n )\n ) : (\n !!item.energyKCal && (\n \n \n {item.energyKCal}\n 100g\n \n \n )\n )\n )}\n {/* {item.allergens.length > 0 || item.label !== '' ?
: null} */}\n \n )\n })}\n
\n )\n}\n\nexport default kiosk\n\nexport const NameHeader = styled.h2`\n color: ${_ => _.theme.recipe_type_font_color || _.theme.header_background};\n text-align: center;\n position: relative;\n ${({ mono }) => (mono ? '' : 'margin-top: 5px;')}\n\n margin-bottom: 30px;\n &:after {\n content: '';\n height: 1px;\n background-color: ${_ => _.theme.header_background};\n width: 100%;\n width: 80%;\n position: absolute;\n left: 10%;\n bottom: -7px;\n }\n`\n","import React, { Component } from 'react'\r\nimport styled from 'styled-components'\r\n\r\nimport Masonry from 'react-masonry-css'\r\nimport ReactSwipe from 'react-swipe'\r\nimport ScrollMenu from 'react-horizontal-scrolling-menu'\r\n\r\nimport moment, { lang } from 'moment'\r\nimport 'moment/locale/fr'\r\n\r\nimport Header from '../Header/Header'\r\nimport Kiosk from '../Kiosk/Kiosk'\r\nimport Settings from 'settings'\r\n\r\nimport styles from './MobileView.module.css'\r\nimport { getLanguage } from '../../utils/Locale'\r\n\r\nconst Wrapper = styled.div`\r\n background-color: ${props => props.theme.background};\r\n`\r\n\r\nconst DaySelection = styled.div`\r\n display: grid;\r\n grid-template-columns: repeat(${props => props.count}, 1fr);\r\n margin-top: 8px;\r\n\r\n border-top: 1px solid lightgray;\r\n border-bottom: 1px solid lightgray;\r\n \r\n min-width: 100vw;\r\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\r\n background-color: #fff;\r\n height: 40px;\r\n overflow-x: auto;\r\n\r\n /* min-width: ${props => props.width}vw; */\r\n width: fit-content;\r\n\r\n @media screen and (max-width: 1024px) {\r\n margin-top: 0;\r\n }\r\n`\r\n\r\nconst DayLink = styled.div`\r\n margin-left: 3px;\r\n margin-right: 3px;\r\n color: ${props =>\r\n props.active ? props.theme.active_day_color || '#000' : '#4e4e4e'};\r\n border-bottom: ${props =>\r\n props.active\r\n ? '2px solid ' + (props.theme.active_day_color || '#000')\r\n : '2px solid transparent'};\r\n\r\n min-width: 190px;\r\n @media screen and (max-width: 1024px) {\r\n min-width: 150px;\r\n }\r\n text-align: center;\r\n outline: none;\r\n padding-top: 0.5em;\r\n`\r\n\r\nconst DaysWrapper = styled.div`\r\n margin-top: 8px;\r\n\r\n border-top: 1px solid lightgray;\r\n border-bottom: 1px solid lightgray;\r\n box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05);\r\n background-color: #fff;\r\n /* height: 40px; */\r\n @media screen and (max-width: 1024px) {\r\n margin-top: 0;\r\n }\r\n .active-custom {\r\n outline: none !important;\r\n }\r\n\r\n .item-custom:focus {\r\n outline: none !important;\r\n }\r\n`\r\n\r\nconst DateLabel = styled.div`\r\n font-size: 0.8em;\r\n font-weight: 600;\r\n`\r\n\r\nconst DayLabel = styled.div``\r\n\r\nconst Arrow = styled.span`\r\n display: inline-block;\r\n height: 28px;\r\n width: 28px;\r\n border-radius: 9999px;\r\n color: #70757a;\r\n background-color: #fff;\r\n /* box-shadow: 0 0 0 1px rgba(0,0,0,0.04), 0 4px 8px 0 rgba(0,0,0,0.20); */\r\n cursor: pointer;\r\n svg {\r\n height: 100%;\r\n fill: #000;\r\n :hover {\r\n fill: #555;\r\n }\r\n }\r\n`\r\n\r\nconst InformationBloc = styled.p`\r\n padding: 0 2em;\r\n font-size: 0.8em;\r\n font-weight: 600;\r\n`\r\n\r\nconst ArrowLeft = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst ArrowRight = () => {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nclass MobileView extends Component {\r\n reactSwipeEl = null\r\n daysBand = null\r\n\r\n state = {\r\n date: null,\r\n selectedIndex: this.props.startIndex,\r\n }\r\n\r\n componentDidMount() {\r\n const selectedDay = document.getElementById(\r\n `day-${this.props.startIndex}`\r\n )\r\n if (this.daysBand) {\r\n this.daysBand.scrollTo(\r\n selectedDay.offsetLeft -\r\n document.body.clientWidth / 2 +\r\n selectedDay.clientWidth / 2,\r\n 0\r\n )\r\n }\r\n if (this.scrollMenuRef) {\r\n this.scrollMenuRef.scrollTo(`${this.props.startIndex}`)\r\n }\r\n }\r\n\r\n goToDate = (date, index) => {\r\n this.reactSwipeEl.slide(index)\r\n this.setState({\r\n date: date,\r\n })\r\n }\r\n\r\n onTransitionEnd = index => {\r\n this.setState({\r\n date: this.props.items[index].date,\r\n selectedIndex: index,\r\n })\r\n const selectedDay = document.getElementById(`day-${index}`)\r\n if (this.daysBand) {\r\n this.daysBand.scrollTo(\r\n selectedDay.offsetLeft -\r\n document.body.clientWidth / 2 +\r\n selectedDay.clientWidth / 2,\r\n 0\r\n )\r\n }\r\n\r\n if (this.scrollMenuRef) {\r\n this.scrollMenuRef.scrollTo(`${index}`)\r\n }\r\n }\r\n\r\n swipeOptions = {\r\n startSlide: this.state.selectedIndex,\r\n transitionEnd: this.onTransitionEnd,\r\n }\r\n\r\n onSelect = key => {\r\n this.setState({ selectedIndex: key })\r\n }\r\n\r\n render() {\r\n const {\r\n title,\r\n subtitle,\r\n language = '',\r\n currency,\r\n useCommercialName,\r\n hideComposition,\r\n hideLabels,\r\n hideIntolerences,\r\n dataSource,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n hideEnergyKcal,\r\n showEnergyKcalByPortion\r\n } = this.props\r\n if (!this.props.items || this.props.items.length === 0) {\r\n //return

Waiting...

\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n const { items = [] } = this.props\r\n const currentDay = items[this.state.selectedIndex] || {}\r\n const { date } = currentDay\r\n\r\n const headerTitle =\r\n title || Settings.translations[getLanguage(language)].today\r\n const headerSubtitle = `${moment(date)\r\n .locale(getLanguage(language))\r\n .format('LL')}`\r\n const breakpointColumnsObj = {\r\n default: 3,\r\n 900: 2,\r\n 500: 1,\r\n }\r\n\r\n const fullContent = this.props.items.map((item, index) => {\r\n let isKiosksEmpty = true\r\n if (item.kiosks && item.kiosks.length) {\r\n item.kiosks.map(kiosk => {\r\n if (kiosk.items.length) {\r\n isKiosksEmpty = false\r\n }\r\n })\r\n }\r\n if (isKiosksEmpty) {\r\n return (\r\n \r\n
\r\n \r\n
\r\n
\r\n )\r\n }\r\n\r\n const kiosksRender = []\r\n item.kiosks.map(\r\n ({ items = [], name = '', kioskPicture = '' }, index) => {\r\n if (items.length !== 0) {\r\n kiosksRender.push(\r\n
\r\n \r\n
\r\n )\r\n }\r\n }\r\n )\r\n return (\r\n
\r\n \r\n {kiosksRender}\r\n \r\n
\r\n )\r\n })\r\n\r\n let days = null\r\n if (this.props.items.length > 1) {\r\n days = this.props.items.map((item, index) => {\r\n const itemDate = moment(item.date)\r\n .locale(getLanguage(language))\r\n .format('YYYY-MM-DD')\r\n const dayLabel = moment(item.date)\r\n .locale(getLanguage(language))\r\n .format('dddd')\r\n const dateLabel = moment(item.date)\r\n .locale(getLanguage(language))\r\n .format('D/M')\r\n return (\r\n this.goToDate(itemDate, index)}\r\n >\r\n {dateLabel}\r\n {dayLabel}\r\n \r\n )\r\n })\r\n }\r\n\r\n const daysBar = (\r\n (this.scrollMenuRef = r)}\r\n data={days}\r\n arrowLeft={ArrowLeft()}\r\n arrowRight={ArrowRight()}\r\n selected={this.state.selectedIndex}\r\n onSelect={this.onSelect}\r\n alignCenter={true}\r\n scrollToSelected={true}\r\n hideArrows={true}\r\n itemClass={'item-custom'}\r\n itemClassActive={'active-custom'}\r\n />\r\n )\r\n\r\n return (\r\n
\r\n \r\n\r\n {/* {days ? (\r\n (this.daysBand = el)}\r\n id=\"days-band\"\r\n className={styles.dayBar}\r\n >\r\n (this.daysBand2 = el)}\r\n count={this.props.items.length}\r\n width={(this.props.items.length / 7) * 100}\r\n >\r\n {days}\r\n \r\n
\r\n ) : null} */}\r\n\r\n {subtitle && {subtitle}}\r\n\r\n {days ? (\r\n \r\n {daysBar}\r\n \r\n ) : null}\r\n\r\n (this.reactSwipeEl = el)}\r\n >\r\n {fullContent}\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default MobileView\r\n","import React from 'react'\r\nimport styled, { css } from 'styled-components'\r\n\r\nimport {\r\n KioskContent,\r\n KioskHeader,\r\n RecipeItem,\r\n RecipeTitle,\r\n RecipePoints,\r\n RecipePrice,\r\n RecipeLabels,\r\n RecipeLabel,\r\n EnergyKCal,\r\n} from '../Kiosk/style'\r\nimport LabelIcons from '../LabelIcons/LabelIcons'\r\n\r\nconst PrintKioskHeader = styled(KioskHeader)`\r\n zoom: ${props => props.zoom};\r\n position: relative;\r\n height: ${({ useCommercialName }) => (useCommercialName ? 30 : 70)}px;\r\n img {\r\n height: ${props => (props.fullSize ? 'auto' : '60px')};\r\n width: ${props => (props.fullSize ? '250px' : 'auto')};\r\n object-fit: contain;\r\n position: relative;\r\n background-color: #fff;\r\n left: calc(50% - 75px);\r\n top: 10px;\r\n\r\n ${props =>\r\n props.fullSize &&\r\n css`\r\n left: calc(50% - 125px);\r\n position: relative;\r\n `}\r\n }\r\n h3 {\r\n text-align: center;\r\n width: fit-content;\r\n padding: 5px;\r\n margin: auto;\r\n color: ${_ => _.theme.header_background};\r\n margin-bottom: 15px !important;\r\n &:after {\r\n content: '';\r\n height: 2px;\r\n background-color: ${_ => _.theme.header_background};\r\n width: 100%;\r\n width: 80%;\r\n position: absolute;\r\n left: 10%;\r\n bottom: -2px;\r\n }\r\n }\r\n`\r\n\r\nconst PrintKioskContent = styled.div`\r\n ${props =>\r\n props.isMonoKiosk &&\r\n css`\r\n height: 100%;\r\n display: flex;\r\n flex-direction: column;\r\n justify-content: stretch;\r\n margin-top: 1cm;\r\n `}\r\n`\r\n\r\nconst PrintMonoKioskTitle = styled.h1`\r\n font-size: 4em;\r\n font-weight: 400;\r\n color: #000;\r\n text-align: center;\r\n\r\n font-family: Angelique;\r\n letter-spacing: 0;\r\n`\r\n\r\nconst PrintLogoLine = styled.span`\r\n background-color: ${_ => _.theme.print_kiosk_border_color || '#3c3c3b'};\r\n position: absolute;\r\n top: 50%;\r\n left: 0;\r\n height: ${_ => _.theme.print_kiosk_border_width || '2px'};\r\n width: 100%;\r\n`\r\n\r\nconst PrintRecipeItem = styled(RecipeItem)`\r\n ${props =>\r\n !props.fullSize &&\r\n css`\r\n grid-template-columns: 1fr auto 1.2cm;\r\n `}\r\n border-bottom: none;\r\n grid-gap: 5px 10px;\r\n zoom: ${props => props.zoom};\r\n\r\n margin: 0;\r\n\r\n ${props =>\r\n props.centered &&\r\n css`\r\n display: block;\r\n div {\r\n text-align: center;\r\n }\r\n `}\r\n ${props =>\r\n props.isHighlighted &&\r\n css`\r\n margin-top: 2em;\r\n margin-bottom: 2em;\r\n border: 1px solid\r\n ${_ => _.theme.print_kiosk_border_color || '#3c3c3b'};\r\n h2 {\r\n color: ${props => props.theme.recipe_price_background};\r\n grid-column: 1/4;\r\n }\r\n `}\r\n\r\n ${props =>\r\n props.customStyle &&\r\n props.customStyle === 'produit_neo' &&\r\n css`\r\n margin-top: 2em;\r\n border: 2px solid #003f45;\r\n ${RecipePoints} {\r\n & > span {\r\n color: white;\r\n }\r\n }\r\n ${RecipePrice} {\r\n & > span {\r\n color: #003f45;\r\n background-color: white;\r\n border-color: #003f45;\r\n }\r\n }\r\n `}\r\n`\r\n\r\nconst PrintRecipeTitle = styled(RecipeTitle)`\r\n position: relative;\r\n color: #3c3c3b;\r\n font-weight: 600;\r\n grid-column: 1;\r\n`\r\n\r\nconst PrintRecipeLabel = styled.img``\r\n\r\nconst StyledInlineInput = styled.input`\r\n color: #3c3c3b;\r\n font-size: 1.3em;\r\n font-weight: 500;\r\n border: none;\r\n outline: none;\r\n appearance: none;\r\n text-align: ${props => (props.centered ? 'center' : 'inherit')};\r\n\r\n :hover,\r\n :focus {\r\n color: ${props => props.theme.recipe_price_background};\r\n }\r\n\r\n font-family: inherit;\r\n width: 100%;\r\n`\r\n\r\nconst StyledEditableRecipeTitle = styled.div`\r\n position: relative;\r\n grid-column: 1;\r\n img {\r\n display: ${props => (props.editMode ? 'block' : 'none')};\r\n position: absolute;\r\n top: 0;\r\n left: -26px;\r\n height: 20px;\r\n fill: ${props => props.theme.recipe_price_background};\r\n }\r\n\r\n :hover {\r\n img {\r\n display: block !important;\r\n }\r\n }\r\n`\r\n\r\nclass EditableRecipeTitle extends React.Component {\r\n state = {\r\n value: this.props.value,\r\n editMode: false,\r\n }\r\n\r\n handleChange = e => this.setState({ value: e.target.value })\r\n\r\n handleFocus = e => e.target.select()\r\n\r\n toogleEditMode = () => {\r\n this.setState({ editMode: !this.state.editMode }, () => {\r\n this.inputRef && this.inputRef.focus()\r\n if (!this.state.editMode) {\r\n this.props.handleEditItem(this.props.itemIndex)\r\n }\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {this.state.editMode ? (\r\n (this.inputRef = r)}\r\n type=\"text\"\r\n value={this.state.value}\r\n onChange={this.handleChange}\r\n onFocus={this.handleFocus}\r\n onBlur={this.toogleEditMode}\r\n />\r\n ) : (\r\n \r\n {this.state.value}\r\n {/* */}\r\n \r\n )}\r\n \r\n \r\n )\r\n }\r\n}\r\n\r\nclass printKiosk extends React.Component {\r\n state = {\r\n editedItems: [],\r\n }\r\n\r\n render() {\r\n const {\r\n dataSource,\r\n isMonoKiosk,\r\n name,\r\n concept,\r\n kioskPicture,\r\n items,\r\n monoKioskTitle,\r\n useCommercialName,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n hideEnergyKcal,\r\n showEnergyKcalByPortion,\r\n hideLabels,\r\n hideIntolerences,\r\n zoom,\r\n isAdmin,\r\n centered,\r\n currency,\r\n showDate,\r\n } = this.props\r\n\r\n const { editedItems } = this.state\r\n\r\n items.map(item => {\r\n if (item.price_currency && !!item.price_currency) {\r\n const priceRegex = /(\\d+)[,|.](\\d+)(.*)/\r\n const priceMatches = priceRegex.exec(item.price_currency)\r\n if (priceMatches) {\r\n item.priceInt = priceMatches[1]\r\n const decimals =\r\n parseInt(priceMatches[2]) !== 0 ? priceMatches[2] : ''\r\n item.priceSup = priceMatches[3].trim() + decimals\r\n }\r\n }\r\n\r\n // if (!!item.price_point) {\r\n // item.price_point = item.price_point.replace(/\\D/g, '')\r\n // }\r\n\r\n if (item.price) {\r\n const priceArray = item.price.toString().split('.')\r\n item.priceInt =\r\n priceArray[0].toString() + item.currency || currency\r\n item.priceSup = priceArray[1]\r\n ? priceArray[1].length > 1\r\n ? priceArray[1]\r\n : `${priceArray[1]}0`\r\n : ''\r\n }\r\n return item\r\n })\r\n\r\n const handleEditItem = item => {\r\n this.setState({ editedItems: [item, ...editedItems] })\r\n }\r\n\r\n return (\r\n \r\n \r\n {!isMonoKiosk && !useCommercialName && }\r\n {useCommercialName ? (\r\n

{name}

\r\n ) : (\r\n \r\n )}\r\n \r\n {isMonoKiosk && monoKioskTitle && (\r\n {monoKioskTitle}\r\n )}\r\n \r\n {items.map(\r\n (item, index) =>\r\n item.menu_board_label && (\r\n \r\n {isMonoKiosk &&\r\n item.produit_du_jour &&\r\n item.produit_du_jour !== 'produit_neo' ? (\r\n

{item.produit_du_jour}

\r\n ) : null}\r\n {/* {isAdmin ? (\r\n \r\n {item.menu_board_label}\r\n \r\n ) : (\r\n <>\r\n \r\n \r\n )} */}\r\n {item.produit_du_jour === 'produit_neo' && (\r\n \r\n )}\r\n \r\n \r\n {item.menu_board_label}\r\n \r\n {!hideLabels && item.label && (\r\n (i.target.style.display = 'none')}\r\n />\r\n )}\r\n {!hideLabels &&\r\n item.caracteristique_produit && (\r\n (i.target.style.display = 'none')}\r\n />\r\n )}\r\n \r\n <>\r\n {!hideRecipePoints &&\r\n !!item.price_point ? (\r\n \r\n {item.price_point}\r\n \r\n ) : null}\r\n\r\n {!hideMenuPrice && !!item.priceInt ? (\r\n \r\n \r\n {item.priceInt}\r\n {item.priceSup}\r\n \r\n \r\n ) : null}\r\n \r\n\r\n {!hideIntolerences &&\r\n editedItems.indexOf(index) === -1 && (\r\n \r\n \r\n \r\n )}\r\n\r\n {!hideEnergyKcal && (\r\n showEnergyKcalByPortion ? (\r\n !!item.energyKCalByPortion && (\r\n \r\n {item.energyKCalByPortion}\r\n \r\n )\r\n ) : (\r\n !!item.energyKCal && (\r\n \r\n \r\n {item.energyKCal}\r\n 100g\r\n \r\n \r\n )\r\n )\r\n )}\r\n \r\n )\r\n )}\r\n
\r\n \r\n )\r\n }\r\n}\r\nexport default printKiosk\r\n","import React from 'react'\nimport styled, { css } from 'styled-components'\n\nimport {\n RecipeItem,\n RecipeTitle,\n RecipePoints,\n RecipePrice,\n RecipeComposition,\n RecipeLabels,\n RecipeLabel,\n} from '../../Kiosk/style'\n\nimport LabelIcons from '../../LabelIcons/LabelIcons'\n\nconst MenuWrapper = styled.div`\n display: grid;\n grid-template-columns: ${props => (props.fullSize ? '1fr' : '2fr 1fr')};\n grid-gap: 50px;\n padding: 50px 100px;\n zoom: ${props => props.zoom}; /* 1.5 */\n\n @media screen and (max-width: 1365px) {\n grid-template-columns: 1fr;\n padding: 5px 5px;\n }\n\n ${props =>\n props.print &&\n css`\n grid-template-columns: 1fr;\n padding: 2cm 1cm;\n margin-top: 2cm;\n grid-gap: 10px;\n `}\n\n ${props =>\n props.print &&\n props.orientation === 'portrait' &&\n css`\n display: flex;\n flex-direction: column;\n justify-content: space-around;\n min-height: 21cm;\n `}\n`\n\nconst Recipes = styled.div`\n background-color: ${props => (props.print ? '#fff' : '#eff1f1')};\n padding: 10px;\n\n ${props =>\n props.print &&\n props.orientation === 'landscape' &&\n css`\n display: flex;\n flex-direction: column;\n min-height: 10cm;\n justify-content: space-between;\n `}\n`\n\nconst MenuRecipeItem = styled(RecipeItem)`\n grid-template-columns: 3fr 2fr 1fr;\n border-bottom: none;\n`\n\nconst MenuRecipeTitle = styled(RecipeTitle)`\n grid-column: 2 span;\n border-bottom: 1px solid;\n`\n\nconst MenuRecipeComposition = styled(RecipeComposition)`\n grid-column: 1 span;\n text-align: left;\n`\n\nconst KioskLogo = styled.img`\n height: 60px;\n grid-row: 2 span;\n grid-column: 3;\n`\n\nconst MenusWrapper = styled.div`\n background-color: #fff;\n ${props =>\n props.print &&\n css`\n border: none;\n background-color: #eff1f1;\n `}\n`\n\nconst Offers = styled.div`\n padding: 10px;\n margin-bottom: 20px;\n\n ${props =>\n props.print &&\n css`\n border: none;\n `}\n`\n\nconst OfferTitle = styled.div`\n font-size: 1.3em;\n font-weight: 600;\n text-align: left;\n border-bottom: 2px solid ${_ => _.theme.recipe_title_font_color};\n margin-bottom: 10px;\n`\n\nconst MenuRecipeLabels = styled(RecipeLabels)`\n grid-column: 2;\n text-align: right;\n\n @media (max-width: 960px) {\n grid-column: 2 span;\n text-align: left;\n }\n`\n\nconst OfferPrice = styled.div`\n text-align: right;\n font-size: 1.3em;\n\n span {\n padding: 2px 3px;\n span {\n margin-top: 0px;\n }\n }\n`\n\nconst PrintLogo = styled.img`\n position: absolute;\n width: 2cm;\n top: 0;\n left: calc(50% - 1cm);\n top: 0.2cm;\n`\n\nconst formatPrice = price => {\n const priceRegex = /(\\d+)[,|.](\\d+)(.*)/\n const priceMatches = priceRegex.exec(price)\n return (\n priceMatches && [\n priceMatches[1],\n priceMatches[3].trim() + priceMatches[2],\n ]\n )\n}\n\nconst menuKiosk = props => {\n const { items = [] } = props\n const offer1 = [\n ...new Set(\n items\n .filter(_ => !!_.offer1_label)\n .map(_ => {\n return {\n name: _.offer1_label,\n point: _.offer1_point,\n price: formatPrice(_.offer1_price_currency),\n kiosk: _.kiosk,\n }\n })\n ),\n ][0]\n const offer2 = [\n ...new Set(\n items\n .filter(_ => !!_.offer2_label)\n .map(_ => {\n return {\n name: _.offer2_label,\n point: _.offer2_point,\n price: formatPrice(_.offer2_price_currency),\n kiosk: _.kiosk,\n }\n })\n ),\n ][0]\n\n const content = items.map((item, index) => (\n \n \n {item.menu_board_label}{' '}\n {!props.hideLabels && item.label && (\n (i.target.style.display = 'none')}\n />\n )}\n {!props.hideLabels && item.caracteristique_produit && (\n (i.target.style.display = 'none')}\n />\n )}\n \n\n \n\n {!props.hideComposition && !!item.composition ? (\n \n {item.composition}\n \n ) : null}\n\n {!props.hideLabels && (\n \n \n \n )}\n \n ))\n\n const menuOffer = offer => (\n \n {offer.name}\n \n {!props.hideRecipePoints && offer.points && (\n {offer.points}\n )}\n {!props.hideMenuPrice && offer.price && (\n \n \n {offer.price[0]}\n {offer.price[1]}\n \n \n )}\n \n )}\n \n )\n\n return (\n \n {props.print && (\n \n )}\n\n \n {content}\n \n\n {props.hideMenuPrice == false && (\n \n {offer1 && menuOffer(offer1)}\n {offer2 && menuOffer(offer2)}\n \n )}\n \n )\n}\n\nexport default menuKiosk\n","import React from 'react'\r\nimport styled from 'styled-components'\r\n\r\nconst NoDataSegment = ({ message = 'Error' }) => (\r\n \r\n \r\n Nothing to display\r\n {message}\r\n \r\n \r\n)\r\n\r\nexport default NoDataSegment\r\n\r\nconst Container = styled.div`\r\n width: 350px;\r\n margin: auto;\r\n margin-top: 120px;\r\n`\r\nconst Message = styled.p`\r\n font-size: 1.3em;\r\n margin-top: 50px;\r\n`\r\n\r\nconst Segment = styled.div`\r\n padding: 15px;\r\n position: relative;\r\n background-color: #eff1f1;\r\n margin: 8px;\r\n border-radius: 3px;\r\n box-shadow: 0px 0px 10px 0px rgba(21, 24, 88, 0.1);\r\n border: 1px solid #d5d5d5;\r\n`\r\n\r\nconst Title = styled.div`\r\n font-size: 1.3em;\r\n grid-column: 1;\r\n font-weight: bold;\r\n text-transform: uppercase;\r\n text-align: center;\r\n border-bottom: 1px solid #d5d5d5;\r\n\r\n color: ${({ theme }) => theme.recipe_title_font_color};\r\n`\r\n","import React, { Component, Fragment } from 'react'\r\n\r\nimport {\r\n GlobalStyle,\r\n Page,\r\n TopMenuBorder,\r\n BottomMenuBorder,\r\n PageBorder,\r\n PrintHeader,\r\n Grid,\r\n ActionButtons,\r\n ActionButton,\r\n MonoKioskDate,\r\n} from './style'\r\n\r\nimport PrintKiosk from './PrintKiosk'\r\nimport MenuKiosk from '../KioskView/Kiosk/MenuKiosk'\r\nimport Settings from 'settings'\r\nimport NoDataSegment from '../NoDataSegment/NoDataSegment'\r\nimport { getLanguage } from '../../utils/Locale'\r\nimport moment from 'moment'\r\n\r\nclass PrintView extends Component {\r\n _elements = new Map()\r\n\r\n state = {\r\n zoom: this.props.zoom,\r\n orientation: this.props.orientation,\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (!this.props.items.kiosks || !nextProps.items.kiosks) {\r\n return\r\n }\r\n if (this.props.zoom !== nextProps.zoom) {\r\n this.setState({ zoom: nextProps.zoom })\r\n }\r\n if (this.state.orientation !== nextProps.orientation) {\r\n this.setState({ orientation: nextProps.orientation })\r\n }\r\n }\r\n\r\n setZoom = factor => {\r\n const zoom = parseFloat(this.state.zoom) + parseFloat(factor)\r\n this.setState({ zoom })\r\n }\r\n\r\n setOrientation = orientation => {\r\n this.setState({ orientation })\r\n }\r\n\r\n render() {\r\n if (!this.props.items || this.props.items.length === 0) {\r\n return (\r\n \r\n )\r\n }\r\n\r\n const { title, dataSource, isAdmin, language } = this.props\r\n const headerTitle =\r\n title || Settings.translations[getLanguage(language)].today\r\n\r\n let content = null\r\n let isMonoKiosk\r\n if (this.props.menu) {\r\n content = (\r\n \r\n )\r\n } else {\r\n if (!this.props.items.kiosks) {\r\n return null\r\n }\r\n\r\n isMonoKiosk = this.props.items.kiosks.length === 1\r\n\r\n let centered = false\r\n\r\n const containsRecipePoints = this.props.items.kiosks.find((kiosk) => kiosk.items.find((_) => _.price_point))\r\n const containsPrice = this.props.items.kiosks.find((kiosk) => kiosk.items.find((_) => _.price_currency || _.price))\r\n\r\n if (containsPrice && containsRecipePoints) {\r\n if (this.props.hideMenuPrice && this.props.hideRecipePoints) centered = true\r\n } else if (containsPrice) {\r\n if (this.props.hideMenuPrice) centered = true\r\n } else if (containsRecipePoints) {\r\n if (this.props.hideRecipePoints) centered = true\r\n } else {\r\n centered = true\r\n }\r\n\r\n content = this.props.items.kiosks.map((kiosk, index) => (\r\n this._elements.set(index, r)}\r\n name={kiosk.name}\r\n items={kiosk.items}\r\n concept={this.props.concept}\r\n menu={this.props.menu}\r\n isMonoKiosk={isMonoKiosk}\r\n zoom={this.state.zoom}\r\n kioskPicture={kiosk.kioskPicture}\r\n useCommercialName={this.props.useCommercialName}\r\n hideMenuPrice={this.props.hideMenuPrice}\r\n hideRecipePoints={this.props.hideRecipePoints}\r\n hideEnergyKcal={this.props.hideEnergyKcal}\r\n showEnergyKcalByPortion={this.props.showEnergyKcalByPortion}\r\n hideLabels={this.props.hideLabels}\r\n hideIntolerences={this.props.hideIntolerences}\r\n dataSource={dataSource}\r\n isAdmin={this.props.isAdmin}\r\n centered={centered}\r\n currency={this.props.currency}\r\n />\r\n ))\r\n }\r\n\r\n return (\r\n \r\n {this.props.menu ? (\r\n \r\n \r\n \r\n \r\n \r\n (this.grid = r)}\r\n >\r\n {content}\r\n \r\n \r\n ) : (\r\n \r\n {isMonoKiosk && (\r\n <>\r\n {this.props.showDate && (\r\n {`${moment(this.props.items.date)\r\n .locale(getLanguage(language))\r\n .format('LL')}`}\r\n )}\r\n \r\n \r\n )}\r\n \r\n \r\n \r\n {!isMonoKiosk && (\r\n \r\n \r\n

\r\n {this.props.showDate && (\r\n {`${moment(this.props.items.date)\r\n .locale(getLanguage(language))\r\n .format('LL')}`}\r\n )}\r\n {headerTitle}\r\n

\r\n \r\n )}\r\n (this.grid = r)}\r\n >\r\n {content}\r\n \r\n
\r\n )}\r\n \r\n {!isAdmin && (\r\n \r\n
\r\n this.setZoom(-0.05)}>\r\n -\r\n \r\n this.setZoom(0.05)}>\r\n +\r\n \r\n
\r\n this.setOrientation('portrait')}\r\n >\r\n PORTRAIT\r\n \r\n this.setOrientation('landscape')}\r\n >\r\n LANDSCAPE\r\n \r\n window.print()}>\r\n PRINT\r\n \r\n
\r\n )}\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default PrintView\r\n","import React from 'react'\nimport { Header, Logo, Title, Week } from '../../Header/style'\n\nconst header = props => {\n return (\n \n \n {props.date && {props.date}}\n \n {props.title}\n \n {props.subtitle && {props.subtitle}}\n \n )\n}\n\nexport default header\n","import React, { Fragment } from 'react'\r\nimport styled from 'styled-components'\r\nimport { NameHeader } from '../../Kiosk/Kiosk'\r\n\r\nconst MonoHeader = styled.div`\r\n position: relative;\r\n background-image: url(${_ => _.backgroundImage});\r\n background-position: center;\r\n background-size: cover;\r\n height: 310px;\r\n\r\n @media screen and (max-width: 1023px) {\r\n height: 100px;\r\n }\r\n`\r\n\r\nconst Logo = styled.img`\r\n position: absolute;\r\n left: 10%;\r\n top: 0px;\r\n height: 100%;\r\n\r\n @media screen and (max-width: 1023px) {\r\n height: 100px;\r\n }\r\n`\r\n\r\nconst monoHeader = ({\r\n concept,\r\n menu,\r\n kioskName,\r\n monoKioskPicture,\r\n useCommercialName,\r\n}) => (\r\n \r\n \r\n {!useCommercialName && (\r\n \r\n )}\r\n \r\n {useCommercialName && {kioskName}}\r\n \r\n)\r\n\r\nexport default monoHeader\r\n","import React from 'react'\r\nimport Masonry from 'react-masonry-css'\r\nimport styled from 'styled-components'\r\n\r\nimport {\r\n RecipeItem,\r\n RecipeTitle,\r\n RecipePoints,\r\n RecipePrice,\r\n RecipeComposition,\r\n RecipeLabels,\r\n RecipeLabel,\r\n EnergyKCal,\r\n} from '../../Kiosk/style'\r\n\r\nimport LabelIcons from '../../LabelIcons/LabelIcons'\r\n\r\nconst MasonryWrapper = styled(Masonry)`\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: center;\r\n\r\n padding: 20px 10%;\r\n\r\n zoom: ${props => props.zoom}; /* 1.8 */\r\n\r\n @media screen and (max-width: 1400px) {\r\n padding: 5px 5px;\r\n }\r\n\r\n /* position: absolute;\r\n top: 40%;\r\n width: 100%; */\r\n margin-top: 4%;\r\n`\r\n\r\nconst RecipeWrapper = styled.div`\r\n position: relative;\r\n background-color: ${_ => _.theme.kiosk_background || '#eff1f1'};\r\n margin: 8px;\r\n padding: 1px 10px;\r\n border-radius: 3px;\r\n box-shadow: 0 1px 6px rgba(21, 24, 88, 0.05);\r\n transition: box-shadow 0.5s ease-in-out, -webkit-box-shadow 0.5s ease-in-out;\r\n /* border: 1px solid #d5d5d5; */\r\n`\r\n\r\nconst monoKiosk = props => {\r\n const breakpointColumnsObj = {\r\n default: props.defaultColumnsCount || 2,\r\n 1650: 2,\r\n 1200: 1,\r\n }\r\n\r\n props.items.map(item => {\r\n if (item.price_currency && !!item.price_currency) {\r\n const priceRegex = /(\\d+)[,|.](\\d+)(.*)/\r\n const priceMatches = priceRegex.exec(item.price_currency)\r\n\r\n item.priceInt = priceMatches[1]\r\n const decimals =\r\n parseInt(priceMatches[2]) !== 0 ? priceMatches[2] : ''\r\n item.priceSup = priceMatches[3].trim() + decimals\r\n }\r\n if (item.price) {\r\n const priceArray = item.price.toString().split('.')\r\n item.priceInt =\r\n priceArray[0].toString() + item.currency || props.currency\r\n item.priceSup = priceArray[1]\r\n }\r\n return item\r\n })\r\n\r\n const content = props.items\r\n .filter(_ => _.menu_board_label)\r\n .map((item, index) => (\r\n \r\n \r\n {item.produit_du_jour === 'produit_neo' && (\r\n \r\n )}\r\n \r\n \r\n {item.menu_board_label}\r\n \r\n {!props.hideLabels && item.label && (\r\n (i.target.style.display = 'none')}\r\n />\r\n )}\r\n {!props.hideLabels && item.caracteristique_produit && (\r\n (i.target.style.display = 'none')}\r\n />\r\n )}\r\n \r\n\r\n <>\r\n {!props.hideRecipePoints && !!item.price_point ? (\r\n \r\n {item.price_point}\r\n \r\n ) : null}\r\n\r\n {(!props.hideMenuPrice && !!item.price_currency) ||\r\n item.price ? (\r\n \r\n \r\n {item.priceInt}\r\n {item.priceSup}\r\n \r\n \r\n ) : null}\r\n \r\n\r\n {!props.hideComposition && !!item.composition ? (\r\n \r\n {item.composition}\r\n \r\n ) : null}\r\n\r\n {!props.hideIntolerences && (\r\n \r\n \r\n \r\n )}\r\n {!props.hideEnergyKcal && (\r\n props.showEnergyKcalByPortion ? (\r\n !!item.energyKCalByPortion && (\r\n \r\n {item.energyKCalByPortion}\r\n \r\n )\r\n ) : (\r\n !!item.energyKCal && (\r\n \r\n \r\n {item.energyKCal}\r\n 100g\r\n \r\n \r\n )\r\n )\r\n )}\r\n \r\n \r\n ))\r\n\r\n return (\r\n \r\n {content}\r\n \r\n )\r\n}\r\n\r\nexport default monoKiosk\r\n","import styled from 'styled-components'\r\nimport Masonry from 'react-masonry-css'\r\n\r\nexport const MasonryWrapper = styled(Masonry)`\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: center;\r\n padding: 20px 100px;\r\n\r\n @media (max-width: 1200px) {\r\n padding: 0 0;\r\n }\r\n`\r\n\r\nexport const KioskWrapper = styled.div`\r\n position: relative;\r\n background-color: ${props => props.theme.kiosk_background || '#eff1f1'};\r\n margin: 8px;\r\n padding-top: 2px;\r\n border-radius: 3px;\r\n box-shadow: 0 1px 6px rgba(21, 24, 88, 0.05);\r\n transition: box-shadow 0.5s ease-in-out, -webkit-box-shadow 0.5s ease-in-out;\r\n border: 1px solid #d5d5d5;\r\n zoom: ${props => props.zoom}; /* 1.5 */\r\n`\r\n","import React from \"react\"\r\nimport styled from \"styled-components\"\r\nimport { RecipePrice } from \"../../Kiosk/style\"\r\n\r\nconst MenuName = styled.h2`\r\n color: ${({ theme }) => theme.header_background};\r\n margin-right: 10px;\r\n`\r\n\r\nconst MenuPrice = (props) => {\r\n let priceInt, priceSup\r\n\r\n if (props.items.price_currency) {\r\n const priceRegex = /(\\d+)[,|.](\\d+)(.*)/\r\n const priceMatches = priceRegex.exec(props.items.price_currency)\r\n\r\n priceInt = priceMatches[1]\r\n const decimals= parseInt(priceMatches[2]) !== 0 ? priceMatches[2] : ''\r\n priceSup = priceMatches[3].trim() + decimals\r\n }\r\n if (props.items.price) {\r\n const priceArray = props.items.price.toString().split('.')\r\n priceInt = priceArray[0].toString() + props.items.currency\r\n priceSup = priceArray[1]\r\n ? priceArray[1].length > 1\r\n ? priceArray[1]\r\n : `${priceArray[1]}0`\r\n : '00'\r\n }\r\n\r\n return props.items.price ||\r\n (props.items.price_currency && props.menu) ? (\r\n \r\n \r\n {props.items.name || props.items.menu_label}\r\n \r\n \r\n \r\n {priceInt}\r\n {priceSup}\r\n \r\n \r\n
\r\n ) : null\r\n}\r\n\r\nexport default MenuPrice","import React from 'react'\r\nimport styled from 'styled-components'\r\n\r\nconst MonoFooterSvg = styled.div`\r\n display: ${props => (props.theme.is_footer_visible ? 'block' : 'none')};\r\n position: fixed;\r\n bottom: -5px;\r\n width: 50%;\r\n\r\n .prefix__main {\r\n fill: ${_ => _.theme.kiosks_background[_.kiosk]};\r\n }\r\n .prefix__st0 {\r\n fill: none;\r\n stroke: #fff;\r\n stroke-width: 0.8;\r\n stroke-miterlimit: 10;\r\n }\r\n`\r\n\r\nfunction Footer(props) {\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n )\r\n}\r\n\r\nconst MonoFooter = ({ kiosk, fullWidth }) => (\r\n <>\r\n \r\n
\r\n \r\n {fullWidth && (\r\n \r\n
\r\n \r\n )}\r\n \r\n)\r\n\r\nexport default MonoFooter\r\n","import React from 'react'\r\nimport MonoHeader from '../Header/MonoHeader'\r\nimport MenuPrice from './MenuPrice'\r\nimport MonoKiosk from './MonoKiosk'\r\nimport MonoFooter from './MonoFooter'\r\n\r\nimport styled from 'styled-components'\r\n\r\nconst DuoKioskWrapper = styled.div`\r\n display: flex;\r\n flex-direction: row;\r\n`\r\n\r\nconst DuoKiosk = props => {\r\n const {\r\n useCommercialName,\r\n hideComposition,\r\n hideLabels,\r\n hideIntolerences,\r\n dataSource,\r\n isAdministrationPanel,\r\n language,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n hideEnergyKcal,\r\n showEnergyKcalByPortion\r\n } = props\r\n\r\n let isKiosksEmpty = true\r\n if (props.items.kiosks && props.items.kiosks.length) {\r\n props.items.kiosks.map(kiosk => {\r\n if (kiosk.items.length) {\r\n isKiosksEmpty = false\r\n }\r\n })\r\n }\r\n\r\n if (isKiosksEmpty) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n {props.items.kiosks.slice(0, 2).map((kiosk, index) => (\r\n
\r\n \r\n \r\n {/* */}\r\n \r\n
\r\n ))}\r\n
\r\n )\r\n}\r\n\r\nexport default DuoKiosk\r\n","import React from 'react'\r\nimport styled from 'styled-components'\r\n\r\nimport Header from './Header/Header'\r\nimport MonoHeader from './Header/MonoHeader'\r\n\r\nimport Kiosk from '../Kiosk/Kiosk'\r\nimport MonoKiosk from './Kiosk/MonoKiosk'\r\nimport MenuKiosk from './Kiosk/MenuKiosk'\r\n\r\nimport Settings from 'settings'\r\n\r\nimport { KioskWrapper, MasonryWrapper } from './style'\r\nimport NoDataSegment from '../NoDataSegment/NoDataSegment'\r\n\r\nimport DuoKiosk from './Kiosk/DuoKisok'\r\nimport MenuPrice from './Kiosk/MenuPrice'\r\nimport MonoFooter from './Kiosk/MonoFooter'\r\nimport { getLanguage } from '../../utils/Locale'\r\n\r\nconst EmptyMenu = props => (\r\n \r\n)\r\n\r\nconst kioskView = props => {\r\n const {\r\n isReady,\r\n useCommercialName,\r\n hideComposition,\r\n hideLabels,\r\n hideIntolerences,\r\n dataSource,\r\n isAdministrationPanel,\r\n language,\r\n title,\r\n subtitle,\r\n columns,\r\n } = props\r\n\r\n if (!isReady) {\r\n return null\r\n }\r\n\r\n if (!props.items || props.items.length === 0) {\r\n if (!isAdministrationPanel) {\r\n return \r\n }\r\n return (\r\n \r\n )\r\n }\r\n\r\n const headerTitle =\r\n title || Settings.translations[getLanguage(language)].today\r\n\r\n const breakpointColumnsObj = {\r\n default: parseInt(columns) || 3,\r\n 1650: 2,\r\n 1079: 1,\r\n }\r\n\r\n if (!props.items.kiosks || props.items.kiosks.length === 0) {\r\n if (!isAdministrationPanel) {\r\n return \r\n }\r\n return (\r\n \r\n )\r\n }\r\n\r\n if (props.isDuoKiosk) {\r\n return \r\n }\r\n\r\n const isMultiKiosk = props.items.kiosks.length > 1\r\n const kioskName = !isMultiKiosk && props.items.kiosks[0].name\r\n const monoKioskPicture = !isMultiKiosk && props.items.kiosks[0].kioskPicture\r\n\r\n let isKiosksEmpty = true\r\n if (props.items.kiosks && props.items.kiosks.length) {\r\n props.items.kiosks.map(kiosk => {\r\n if (kiosk.items.length) {\r\n isKiosksEmpty = false\r\n }\r\n })\r\n }\r\n\r\n const items =\r\n props.menu === '' ? (\r\n props.items.kiosks.map((kiosk, index) =>\r\n isMultiKiosk ? (\r\n \r\n \r\n \r\n ) : (\r\n \r\n )\r\n )\r\n ) : (\r\n \r\n )\r\n\r\n const content =\r\n props.menu === '' ? (\r\n isMultiKiosk ? (\r\n
\r\n \r\n {!props.hideMenuPrice && }\r\n {isKiosksEmpty ? (\r\n \r\n ) : (\r\n \r\n {items}\r\n \r\n )}\r\n
\r\n ) : (\r\n
\r\n \r\n {!props.hideMenuPrice && }\r\n {isKiosksEmpty ? : items}\r\n \r\n
\r\n )\r\n ) : (\r\n
\r\n \r\n {isKiosksEmpty ? : items}\r\n
\r\n )\r\n\r\n return content\r\n}\r\n\r\nexport default kioskView\r\n\r\nconst Grid = styled.div`\r\n display: flex;\r\n flex-wrap: wrap;\r\n justify-content: center;\r\n\r\n .item {\r\n position: relative;\r\n background-color: #fff;\r\n margin: 8px;\r\n padding-top: 2px;\r\n border-radius: 3px;\r\n box-shadow: 0 1px 6px rgba(21, 24, 88, 0.05);\r\n transition: box-shadow 0.5s ease-in-out,\r\n -webkit-box-shadow 0.5s ease-in-out;\r\n border: 1px solid #d5d5d5;\r\n }\r\n`\r\n","import styled, { createGlobalStyle, css } from 'styled-components'\r\nimport { Page } from '../PrintView/style'\r\n\r\nexport const GlobalStyle = createGlobalStyle`\r\n body {\r\n background-color: white !important;\r\n }\r\n @media print {\r\n @page {\r\n ${props =>\r\n props.orientation &&\r\n css`\r\n size: ${props.orientation};\r\n `}\r\n /* size: ${props => props.orientation}; */\r\n /* size: 210mm 297mm; */\r\n \r\n margin: 0;\r\n margin-top: 1cm;\r\n }\r\n }\r\n`\r\n\r\nexport const LabelPage = styled(Page)`\r\n height: auto;\r\n max-height: none;\r\n\r\n margin: auto;\r\n padding: 0 4mm;\r\n\r\n /* display: flex;\r\n flex-direction: row;\r\n flex-wrap: wrap; */\r\n\r\n /* display: grid;\r\n grid-template-rows: repeat(1fr, 40mm);\r\n grid-template-columns: repeat(2, 100mm); */\r\n\r\n display: block;\r\n column-count: 2; \r\n column-width: 100mm; \r\n column-gap: 0mm;\r\n`\r\n\r\nexport const ProductLabelContent = styled.div`\r\n position: absolute;\r\n width: 100%;\r\n height: 100%;\r\n`\r\n\r\nexport const ProductLabel = styled.div`\r\n height: ${props => props.small ? '30mm' : '39mm'};\r\n position: relative;\r\n \r\n @media print {\r\n page-break-before: ${props => props.breakPage ? 'always' : 'avoid'};\r\n page-break-inside: avoid;\r\n /* margin-top: ${props => props.addMarginTop ? '1cm' : '0'}; */\r\n }\r\n\r\n border-right: 0.255px dashed ${props => props.theme.header_background};\r\n border-left: 0.25px dashed ${props => props.theme.header_background};\r\n\r\n header {\r\n text-align: left;\r\n display: flex;\r\n background-color: ${props => props.theme.header_background};\r\n width: 100%;\r\n height: 15mm;\r\n img {\r\n height: 20mm;\r\n }\r\n\r\n h1 {\r\n margin: 0;\r\n padding-top: 1mm;\r\n min-height: 15mm;\r\n font-size: 15pt;\r\n font-weight: 600;\r\n color: ${props => props.theme.header_font_color};\r\n }\r\n }\r\n\r\n footer {\r\n position: absolute;\r\n bottom: 0;\r\n width: 100%;\r\n padding: 2mm;\r\n\r\n display: flex;\r\n align-items: flex-end;\r\n }\r\n`","import React from 'react'\r\nimport { EnergyKCal, RecipeLabel, RecipePoints, RecipePrice } from '../Kiosk/style'\r\nimport LabelIcons from '../LabelIcons/LabelIcons'\r\nimport { ActionButton, ActionButtons, Page } from '../PrintView/style'\r\nimport {\r\n LabelPage,\r\n ProductLabel,\r\n GlobalStyle,\r\n ProductLabelContent,\r\n} from './style'\r\n\r\nconst LabelView = ({\r\n isAdmin,\r\n size,\r\n items,\r\n concept,\r\n hideLabels,\r\n hideIntolerences,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n hideEnergyKcal,\r\n showEnergyKcalByPortion,\r\n hideComposition,\r\n dataSource,\r\n}) => {\r\n if (!items || items.length === 0) {\r\n return null\r\n }\r\n\r\n const flatProducts = []\r\n items.forEach((byDate) => {\r\n if (!byDate.kiosks) return\r\n byDate.kiosks.forEach(byKiosk =>\r\n byKiosk.items\r\n .filter(_ => _.menu_board_label)\r\n .forEach(item => flatProducts.push(item))\r\n )\r\n })\r\n\r\n if (flatProducts.length % 2 !== 0) {\r\n flatProducts.push([])\r\n }\r\n\r\n const priceRegex = /(\\d+)[,|.](\\d+)(.*)/\r\n\r\n const formatPrice = (price, currency) => {\r\n let priceInt, priceSup\r\n\r\n const priceMatches = priceRegex.exec(price)\r\n\r\n if (priceMatches) {\r\n priceInt = priceMatches[1]\r\n const decimals =\r\n parseInt(priceMatches[2]) !== 0 ? priceMatches[2] : ''\r\n priceSup = priceMatches[3].trim() + decimals\r\n } else {\r\n return (\r\n \r\n {price}\r\n {currency}\r\n \r\n )\r\n }\r\n\r\n return (\r\n \r\n {priceInt}\r\n {priceSup}\r\n \r\n )\r\n }\r\n\r\n return (\r\n <>\r\n \r\n \r\n {flatProducts.map((item, index) => (\r\n <>\r\n \r\n \r\n
\r\n \r\n \r\n

\r\n {item.menu_board_label}\r\n

\r\n\r\n {!!!hideComposition && (\r\n \r\n {item.composition}\r\n
\r\n )}\r\n
\r\n \r\n
\r\n {!hideLabels && item.label && (\r\n (i.target.style.display = 'none')}\r\n />\r\n )}\r\n {!hideLabels &&\r\n item.caracteristique_produit && (\r\n (i.target.style.display = 'none')}\r\n />\r\n )}\r\n {!hideIntolerences && (\r\n \r\n )}\r\n \r\n {!hideEnergyKcal && (\r\n showEnergyKcalByPortion ? (\r\n !!item.energyKCalByPortion && (\r\n \r\n {item.energyKCalByPortion}\r\n \r\n )\r\n ) : (\r\n !!item.energyKCal && (\r\n \r\n \r\n {item.energyKCal}\r\n 100g\r\n \r\n \r\n )\r\n )\r\n )}\r\n {!hideRecipePoints && item.price_point ? (\r\n \r\n {item.price_point}\r\n \r\n ) : null}\r\n {!hideMenuPrice &&\r\n (item.price_currency ||\r\n !!item.price) && (\r\n \r\n {formatPrice(\r\n item.price_currency ||\r\n item.price,\r\n item.currency\r\n )}\r\n \r\n )}\r\n
\r\n \r\n \r\n \r\n \r\n ))}\r\n \r\n {!isAdmin && (\r\n \r\n window.print()}>\r\n PRINT\r\n \r\n \r\n )}\r\n \r\n )\r\n}\r\n\r\nexport default LabelView\r\n","import React, { Component, Fragment } from 'react'\r\nimport { ThemeProvider } from 'styled-components'\r\nimport Papa from 'papaparse'\r\nimport moment from 'moment'\r\nimport 'moment/min/locales.min'\r\n\r\nimport WeekView from '../../components/WeekView/WeekView'\r\nimport MobileView from '../../components/MobileView/MobileView'\r\nimport PrintView from '../../components/PrintView/PrintView'\r\nimport KioskView from '../../components/KioskView/KioskView'\r\nimport LabelView from '../../components/LabelView/LabelView'\r\n\r\nimport Themes from 'themes'\r\nimport Settings from 'settings'\r\n\r\nimport CryptoJS from 'crypto-js'\r\nimport NoDataSegment from '../../components/NoDataSegment/NoDataSegment'\r\nimport Loader from '../../components/Loader/Loader'\r\nimport { getSlugFromString } from '../../utils/mongo_utils'\r\nimport Axios from 'axios'\r\nimport { LoaderConsumer } from '../../utils/LoadingContext'\r\n\r\nimport { createGlobalStyle } from 'styled-components'\r\nimport { getLanguage } from '../../utils/Locale'\r\n\r\nimport axios from 'axios'\r\n\r\nconst GlobalStyle = createGlobalStyle`\r\n body {\r\n background-color: ${props =>\r\n props.forceWhiteBackground ? '#fff' : props.theme.background};\r\n\r\n font-family: ${props => props.theme.content_font_family}; \r\n }\r\n`\r\n\r\nclass MenuPanel extends Component {\r\n state = {\r\n days: [],\r\n items: [],\r\n }\r\n\r\n componentWillMount() {\r\n const { dataSource } = this.props\r\n if (dataSource === 'excel') {\r\n this.parseCsvFile(this.props)\r\n } else if (dataSource === 'winrest') {\r\n this.fetchWinrestData()\r\n } else if (dataSource === 'winrest2') {\r\n this.fetchWinrestData2()\r\n }\r\n }\r\n\r\n componentDidUpdate = async (prevProps, prevState) => {\r\n const {\r\n dataSource = '',\r\n siteId,\r\n pointOfSaleSlug,\r\n winrestURL,\r\n language,\r\n guestTypeSlug,\r\n mealTypeSlug,\r\n menuSlug,\r\n } = prevProps\r\n const newPrevProps = { ...prevProps }\r\n delete newPrevProps.loading\r\n let { loading, ...restOfCurrent } = this.props\r\n\r\n const isThereChanges =\r\n JSON.stringify(newPrevProps) !== JSON.stringify(restOfCurrent)\r\n\r\n const shouldReloadFile =\r\n this.props.title === prevProps.title &&\r\n this.props.hideMenuPrice === prevProps.hideMenuPrice &&\r\n this.props.hideRecipePoints === prevProps.hideRecipePoints &&\r\n this.props.hideEnergyKcal === prevProps.hideEnergyKcal &&\r\n this.props.showEnergyKcalByPortion === prevProps.showEnergyKcalByPortion && \r\n this.props.hideComposition === prevProps.hideComposition &&\r\n this.props.hideLabels === prevProps.hideLabels &&\r\n this.props.useCommercialName === prevProps.useCommercialName &&\r\n this.props.isDuoKiosk === prevProps.isDuoKiosk &&\r\n this.props.zoom === prevProps.zoom\r\n\r\n if (isThereChanges && shouldReloadFile) {\r\n if (dataSource === 'excel') {\r\n this.parseCsvFile(this.props)\r\n } else if (\r\n dataSource === 'winrest' &&\r\n siteId &&\r\n pointOfSaleSlug &&\r\n winrestURL &&\r\n language &&\r\n guestTypeSlug &&\r\n mealTypeSlug &&\r\n menuSlug\r\n ) {\r\n if (\r\n this.props.recipes !== prevProps.recipes ||\r\n this.props.dayCount !== prevProps.dayCount ||\r\n this.props.startDay !== prevProps.startDay ||\r\n this.props.language !== prevProps.language ||\r\n this.props.displayMode !== prevProps.displayMode ||\r\n this.props.excludedDays !== prevProps.excludedDays\r\n ) {\r\n this.fetchWinrestData()\r\n }\r\n } else if (dataSource === 'winrest2') {\r\n this.fetchWinrestData2()\r\n }\r\n }\r\n }\r\n\r\n getKioskPicture = kiosk => {\r\n const { winrestData, concept } = this.props\r\n if (\r\n winrestData &&\r\n winrestData.pictures &&\r\n winrestData.pictures[concept]\r\n ) {\r\n return winrestData.pictures[concept][kiosk]\r\n } else {\r\n const picturesStr = localStorage.getItem('winrest-recipes-pictures')\r\n if (!picturesStr) {\r\n return null\r\n }\r\n const picturesValue = JSON.parse(picturesStr)\r\n if (!picturesValue[this.props.concept]) {\r\n return null\r\n }\r\n return picturesValue[this.props.concept][kiosk]\r\n }\r\n }\r\n\r\n sortByRecipeTypes = (recipe1, recipe2, recipeTypes) => {\r\n if (!recipeTypes || recipeTypes == '' || recipeTypes == []) return 0\r\n\r\n if (typeof recipeTypes == 'string') {\r\n recipeTypes = recipeTypes.split(',')\r\n }\r\n\r\n const recipeTypesArr = recipeTypes.map((r, i) => {\r\n return { index: i, value: r.toLowerCase() }\r\n })\r\n\r\n const recipe1Type = recipeTypesArr.find(\r\n r => r.value == recipe1.toLowerCase()\r\n )\r\n const recipe2Type = recipeTypesArr.find(\r\n r => r.value == recipe2.toLowerCase()\r\n )\r\n\r\n if (!recipe1Type) return 1\r\n if (!recipe2Type) return -1\r\n\r\n if (recipe1Type.index < recipe2Type.index) return -1\r\n if (recipe1Type.index > recipe2Type.index) return 1\r\n\r\n return 0\r\n }\r\n\r\n fetchWinrestData2 = async () => {\r\n const { winrestData } = this.props\r\n\r\n const baseUrl = winrestData\r\n ? winrestData.baseUrl\r\n : this.props.winrestURL\r\n const siteId = winrestData ? winrestData.siteId : this.props.siteId\r\n const pointOfSaleId = winrestData\r\n ? winrestData.pointOfSaleId\r\n : this.props.pointOfSaleId\r\n const menuId = winrestData ? winrestData.menuId : this.props.menuId\r\n\r\n const recipeTypes = winrestData\r\n ? winrestData.selectedRecipeTypes\r\n : this.props.recipeTypeIds\r\n ? this.props.recipeTypeIds.split(',')\r\n : []\r\n\r\n const pictures = this.props.pictures\r\n ? this.props.pictures.split(',')\r\n : null\r\n\r\n const includedDays = this.getIncludedDays()\r\n\r\n if (!siteId) {\r\n return\r\n }\r\n\r\n let menus = []\r\n let kiosks = []\r\n if (!winrestData) {\r\n this.props.setLoading()\r\n\r\n const urls = []\r\n for (let i = 0; i < includedDays.length; i++) {\r\n const d = includedDays[i].format('YYYY-MM-DD')\r\n const url = `service/v1/sites/${siteId}/pointsOfSale/${d}`\r\n const key = CryptoJS.MD5(`${url}&key=LoungeUpMobileAPI`)\r\n urls.push({\r\n key,\r\n url: `${url}?deliveryId=${pointOfSaleId}&menuId=${menuId}`,\r\n })\r\n }\r\n\r\n // const values = await Promise.all(\r\n // urls.map(_ =>\r\n // axios.get(`https://${baseUrl}/${_.url}`, {\r\n // headers: { bearer: _.key },\r\n // })\r\n // )\r\n // )\r\n const values = []\r\n for (let i = 0; i < urls.length; i++) {\r\n const value = await axios.get(\r\n `https://${baseUrl}/${urls[i].url}`,\r\n {\r\n headers: { bearer: urls[i].key },\r\n }\r\n )\r\n values.push(value)\r\n }\r\n\r\n for (let i = 0; i < values.length; i++) {\r\n if (!values[i].data || !values[i].data[0].menus) {\r\n continue\r\n }\r\n let menu = values[i].data[0].menus[0]\r\n kiosks.push({\r\n date: menu.date.slice(0, 10),\r\n currency: menu.currency,\r\n recipes: {\r\n ...this._groupBy(menu.recipes, 'recipeTypeName'),\r\n ...this._groupBy(menu.recipes, 'defaultKiosk'),\r\n },\r\n })\r\n\r\n const recipesCopy = []\r\n menu.recipes.forEach(_ =>\r\n recipesCopy.push(Object.assign({}, _))\r\n )\r\n const groupedByDefaultKiosk = this._groupBy(\r\n recipesCopy,\r\n 'defaultKiosk'\r\n )\r\n const defaultKiosks = Object.keys(groupedByDefaultKiosk).map(\r\n _ => {\r\n return groupedByDefaultKiosk[_].map(a => {\r\n a.recipeTypeName = a.defaultKiosk\r\n return a\r\n })\r\n }\r\n )\r\n const defaultKiosksFlattenArray = []\r\n defaultKiosks.forEach(_ => {\r\n _.forEach(a => defaultKiosksFlattenArray.push(a))\r\n })\r\n menu = {\r\n ...menu,\r\n recipes: menu.recipes.concat(defaultKiosksFlattenArray),\r\n }\r\n menus.push(menu)\r\n }\r\n } else {\r\n menus = winrestData.menus\r\n kiosks = winrestData.kiosks\r\n }\r\n\r\n let items = []\r\n const pictureValues = JSON.parse(pictures)\r\n\r\n if (this.props.displayMode === 'week') {\r\n const result = []\r\n // Create structure for weekly display (grouped by kiosk, then date)\r\n menus.forEach(menu => {\r\n menu.recipes\r\n .filter(_ => recipeTypes.includes(_.recipeTypeName))\r\n .forEach((recipe, i) => {\r\n const allergensByType = this._groupBy(\r\n recipe.intolerance,\r\n 'allergenType'\r\n )\r\n const allergens = Object.keys(allergensByType).reduce(\r\n (res, _, i) => {\r\n res[`Allergenes ${i + 1}`] = _\r\n return res\r\n },\r\n {}\r\n )\r\n const updatedRecipe = {\r\n ...recipe,\r\n menu_board_label: this.getNameValue(recipe),\r\n ...allergens,\r\n ...(recipe.keywords && {\r\n label: recipe.keywords[0],\r\n caracteristique_produit: recipe.keywords[1]\r\n }),\r\n price_point: recipe.pointPrice\r\n }\r\n const updateDate = menu.date.slice(0, 10)\r\n\r\n const recipeTypeName = this.getRecipeTypeName(recipe)\r\n\r\n const kioskExists = result.find(\r\n _ => _.name === recipeTypeName\r\n )\r\n if (kioskExists) {\r\n const dateExists = kioskExists.items.find(\r\n _ => _.date === updateDate\r\n )\r\n if (dateExists) {\r\n dateExists.items.push(updatedRecipe)\r\n } else {\r\n kioskExists.items.push({\r\n date: updateDate,\r\n items: [updatedRecipe],\r\n })\r\n }\r\n } else {\r\n result.push({\r\n name: recipeTypeName,\r\n order: recipeTypes.indexOf(recipeTypeName),\r\n items: [\r\n {\r\n date: updateDate,\r\n items: [updatedRecipe],\r\n },\r\n ],\r\n //order: 1,\r\n //kioskPicture: kioskPicture\r\n kioskPicture: pictures\r\n ? pictureValues[recipe.recipeTypeName]\r\n : this.getKioskPicture(\r\n recipe.recipeTypeName\r\n ),\r\n })\r\n }\r\n })\r\n })\r\n\r\n result.sort((r1, r2) => {\r\n return r1.order - r2.order\r\n })\r\n\r\n // Fill in the missing dates so that empty days are displayed\r\n items = result\r\n .map(r => {\r\n return {\r\n ...r,\r\n items: includedDays.map(d => {\r\n const item = r.items.find(\r\n _ => _.date === d.format('YYYY-MM-DD')\r\n )\r\n if (item) {\r\n return item\r\n } else {\r\n return {\r\n date: d.format('YYYY-MM-DD'),\r\n items: [],\r\n }\r\n }\r\n }),\r\n }\r\n })\r\n } else {\r\n items = (kiosks || []).map(kiosk => {\r\n return {\r\n kiosks: Object.keys(kiosk.recipes)\r\n .filter(_ => recipeTypes.includes(_))\r\n .sort((r1, r2) =>\r\n this.sortByRecipeTypes(r1, r2, recipeTypes)\r\n )\r\n .map((_, i) => {\r\n return {\r\n name: this.getRecipeTypeName(\r\n kiosk.recipes[_][0]\r\n ),\r\n items: kiosk.recipes[_].map(item => {\r\n const allergensByType = this._groupBy(\r\n item.intolerance,\r\n 'allergenType'\r\n )\r\n const allergens = Object.keys(\r\n allergensByType\r\n ).reduce((res, _, i) => {\r\n res[`Allergenes ${i + 1}`] = _\r\n return res\r\n }, {})\r\n return {\r\n ...item,\r\n menu_board_label: this.getNameValue(\r\n item\r\n ),\r\n composition: this.formatComposition(\r\n item.composition\r\n ),\r\n ...allergens,\r\n energyKCal:\r\n item.energyKCal &&\r\n `${item.energyKCal} kCal`,\r\n energyKCalByPortion: \r\n item.energyKCalByPortion &&\r\n `${item.energyKCalByPortion} kCal`,\r\n currency: kiosk.currency,\r\n price: item.price > 0 ? item.price.toFixed(2) : 0,\r\n ...(item.keywords && {\r\n label: item.keywords[0],\r\n caracteristique_produit:\r\n item.keywords[1],\r\n }),\r\n price_point: item.pointPrice\r\n }\r\n }),\r\n //order: recipeIndex,\r\n kioskPicture: pictures\r\n ? pictureValues[_]\r\n : this.getKioskPicture(_),\r\n }\r\n }),\r\n date: kiosk.date,\r\n currency: kiosk.currency,\r\n }\r\n })\r\n }\r\n\r\n this.setState(\r\n {\r\n items,\r\n currency: '€',\r\n days: includedDays.map(item => {\r\n return {\r\n date: item,\r\n name: item.locale('en').format('dddd'),\r\n }\r\n }),\r\n },\r\n () => this.props.setUnloading()\r\n )\r\n }\r\n\r\n fetchWinrestData = async () => {\r\n let {\r\n winrestURL,\r\n siteId,\r\n siteSlug,\r\n menuSlug,\r\n pointOfSale,\r\n pointOfSaleSlug,\r\n } = this.props\r\n\r\n if (!menuSlug) {\r\n return\r\n }\r\n\r\n this.props.setLoading()\r\n\r\n const keyGenerator = url => CryptoJS.MD5(`${url}&key=LoungeUpMobileAPI`)\r\n\r\n let url = `service/v1/Information`\r\n let key = keyGenerator(url)\r\n let result = await Axios.get(`https://${winrestURL}/${url}`, {\r\n headers: { bearer: key },\r\n })\r\n\r\n if (!result) {\r\n throw new Error(`Can't fetch sites informations `)\r\n }\r\n\r\n const informations = result.data\r\n\r\n if (!siteId && siteSlug) {\r\n const site = result.data.Sites.find(\r\n _ => getSlugFromString(_.name) === siteSlug\r\n )\r\n if (!site) {\r\n throw new Error(`Can't fetch sites informations `)\r\n }\r\n siteId = site.id\r\n }\r\n\r\n const includedDays = this.getIncludedDays()\r\n\r\n const menus = []\r\n\r\n const urls = []\r\n for (let i = 0; i < includedDays.length; i++) {\r\n const date = includedDays[i].format('YYYY-MM-DD')\r\n url = `service/v1/sites/${siteId}/pointsOfSale/${date}`\r\n key = keyGenerator(url)\r\n urls.push({ key, url })\r\n }\r\n\r\n const values = await Promise.all(\r\n urls.map(_ =>\r\n Axios.get(`https://${winrestURL}/${_.url}`, {\r\n headers: { bearer: _.key },\r\n })\r\n )\r\n )\r\n\r\n for (let i = 0; i < values.length; i++) {\r\n const result = values[i]\r\n\r\n if (result && result.data) {\r\n const posName = pointOfSale || pointOfSaleSlug\r\n //console.log('posName', posName)\r\n const data = result.data.find(\r\n _ => getSlugFromString(_.name) === posName\r\n )\r\n if (!data) {\r\n console.error(`[ERR] there is no ${posName} pos`)\r\n continue\r\n }\r\n //console.log('menu', menuSlug)\r\n const menu = data.menus.find(\r\n _ => getSlugFromString(_.name) === menuSlug\r\n )\r\n if (!menu) {\r\n console.error(`[ERR] there is no ${menuSlug} menu`)\r\n continue\r\n }\r\n menus.push(menu)\r\n }\r\n }\r\n\r\n const { recipes, language } = this.props\r\n\r\n const allRecipes = menus.reduce((res, menu) => {\r\n res.push(\r\n ...menu.recipes.map(_ => ({\r\n ..._,\r\n date: menu.date.slice(0, 10),\r\n }))\r\n )\r\n return res\r\n }, [])\r\n\r\n let items\r\n\r\n if (this.props.displayMode === 'week') {\r\n const recipesGroupedByType = this._groupBy(\r\n allRecipes,\r\n 'recipeTypeId'\r\n )\r\n items = Object.keys(recipesGroupedByType)\r\n .reduce((res, _) => {\r\n const recipeType = informations.TypeRecipes.find(\r\n t => t.id === parseInt(_)\r\n )\r\n const recipeIndex = recipes.findIndex(\r\n _ =>\r\n _.split('-')[0] ===\r\n getSlugFromString(recipeType.name)\r\n )\r\n const recipe = recipes[recipeIndex]\r\n if (!recipe) {\r\n return res\r\n }\r\n\r\n const kioskPicture = recipe.split('-')[1]\r\n\r\n const recipesGroupedByDate = this._groupBy(\r\n recipesGroupedByType[_],\r\n 'date'\r\n )\r\n\r\n res.push({\r\n name: recipeType.name,\r\n\r\n items: includedDays.map(d => {\r\n const date = d.format('YYYY-MM-DD')\r\n if (!recipesGroupedByDate[date]) {\r\n return {\r\n date,\r\n items: [],\r\n }\r\n }\r\n return {\r\n date,\r\n items: recipesGroupedByDate[date]\r\n .map(_ => {\r\n const allergensByType = this._groupBy(\r\n _.intolerance,\r\n 'allergenType'\r\n )\r\n const allergens = Object.keys(\r\n allergensByType\r\n ).reduce((res, _, i) => {\r\n res[`Allergenes ${i + 1}`] = _\r\n return res\r\n }, {})\r\n\r\n return {\r\n ..._,\r\n ...allergens,\r\n menu_board_label: this.getNameValue(\r\n _\r\n ),\r\n }\r\n })\r\n .sort((a, b) => b.id - a.id),\r\n }\r\n }),\r\n order: recipeIndex, // recipeType.order,\r\n kioskPicture: kioskPicture,\r\n })\r\n return res\r\n }, [])\r\n .sort((a, b) => {\r\n return a.order - b.order\r\n })\r\n } else {\r\n items = menus.map(_ => {\r\n const date = _.date.slice(0, 10)\r\n const name = _.name\r\n const currency = this.props.currency || _.currency || 'e'\r\n\r\n const recipesGroupedByType = this._groupBy(\r\n _.recipes,\r\n 'recipeTypeId'\r\n )\r\n const kiosks = Object.keys(recipesGroupedByType)\r\n .map(_ => {\r\n const recipeType = informations.TypeRecipes.find(\r\n t => t.id === parseInt(_)\r\n )\r\n //console.log('recipeType.name', recipeType.name)\r\n const recipeIndex = recipes.findIndex(\r\n _ =>\r\n _.split('-')[0] ===\r\n getSlugFromString(recipeType.name)\r\n )\r\n const recipe = recipes[recipeIndex]\r\n if (!recipe) {\r\n console.error(\r\n `[ERR] there is no ${getSlugFromString(\r\n recipeType.name\r\n )} recipe`\r\n )\r\n return\r\n }\r\n\r\n const kioskPicture = recipe.split('-')[1]\r\n\r\n return {\r\n name: recipeType.name,\r\n items: recipesGroupedByType[_].map(r => {\r\n const allergensByType = this._groupBy(\r\n r.intolerance,\r\n 'allergenType'\r\n )\r\n const allergens = Object.keys(\r\n allergensByType\r\n ).reduce((res, _, i) => {\r\n res[`Allergenes ${i + 1}`] = _\r\n return res\r\n }, {})\r\n return {\r\n menu_board_label: this.getNameValue(r),\r\n ...r,\r\n ...allergens,\r\n composition: this.formatComposition(\r\n r.composition\r\n ),\r\n price_point:\r\n r.energyKCal && `${r.energyKCal} kCal`,\r\n //price_currency: r.price.toFixed(2)\r\n currency,\r\n }\r\n }).sort((a, b) => b.id - a.id),\r\n kioskPicture: kioskPicture,\r\n order: recipeIndex,\r\n }\r\n })\r\n .filter(_ => _)\r\n .sort((a, b) => {\r\n return a.order - b.order\r\n })\r\n\r\n return {\r\n date,\r\n name,\r\n kiosks,\r\n currency,\r\n }\r\n })\r\n }\r\n\r\n this.setState(\r\n {\r\n items,\r\n currency: '€',\r\n days: includedDays.map(item => {\r\n return {\r\n date: item,\r\n name: item.locale(getLanguage(language)).format('dddd'),\r\n }\r\n }),\r\n },\r\n () => this.props.setUnloading()\r\n )\r\n }\r\n\r\n getNameValue = item => {\r\n const { language } = this.props\r\n let winrestLanguage = language\r\n if (language.indexOf('_') !== -1) {\r\n winrestLanguage = winrestLanguage.split('_')[0]\r\n } else {\r\n winrestLanguage = 'commercialName1'\r\n }\r\n return item[winrestLanguage]\r\n }\r\n\r\n getRecipeTypeName = recipeType => {\r\n const { language } = this.props\r\n let winrestLanguage = language\r\n if (\r\n language.indexOf('_') !== -1 &&\r\n winrestLanguage.split('_')[0] === 'commercialName2'\r\n ) {\r\n winrestLanguage = 'recipeTypeCommercialName2'\r\n } else {\r\n winrestLanguage = 'recipeTypeCommercialName1'\r\n }\r\n\r\n return recipeType[winrestLanguage]\r\n }\r\n\r\n formatComposition = composition => {\r\n if (!composition) {\r\n return ''\r\n }\r\n const compositionArray = composition.split(' - ')\r\n let newComposition = ''\r\n let nextComposition = ''\r\n let ingredientsFinished = false\r\n\r\n compositionArray.map((ingredient, i) => {\r\n nextComposition = newComposition + ingredient\r\n if (i + 1 === compositionArray.length && !ingredientsFinished) {\r\n const replacement = '.'\r\n newComposition = nextComposition.replace(\r\n /,([^,]*)$/,\r\n replacement + '$1'\r\n )\r\n } else if (nextComposition.length > 105 && !ingredientsFinished) {\r\n ingredientsFinished = true\r\n newComposition = newComposition + '...'\r\n return\r\n } else if (!ingredientsFinished) {\r\n newComposition = nextComposition + ', '\r\n }\r\n })\r\n\r\n if (newComposition.length > 120) {\r\n newComposition = newComposition.substr(0, 120)\r\n }\r\n\r\n return newComposition\r\n }\r\n\r\n getIncludedDays = () => {\r\n let { language, excludedDays = [], startDay } = this.props\r\n const date = moment(this.props.date)\r\n let includedDays = [date]\r\n if (this.props.dayCount > 1 && this.props.displayMode !== 'print') {\r\n // const firstDayOfWeek = date.locale(this.props.language).startOf('week');\r\n const days = [\r\n 'sunday',\r\n 'monday',\r\n 'tuesday',\r\n 'wednesday',\r\n 'thurday',\r\n 'friday',\r\n 'saturday',\r\n ]\r\n moment.updateLocale(getLanguage(language), {\r\n week: {\r\n dow:\r\n startDay === 'today'\r\n ? moment().day()\r\n : days\r\n .filter(day => day !== 'today')\r\n .indexOf(startDay),\r\n },\r\n })\r\n const firstDayOfWeek = date\r\n .locale(getLanguage(language))\r\n .startOf('week')\r\n includedDays = [firstDayOfWeek]\r\n for (let i = 0; i < this.props.dayCount - 1; i++) {\r\n if (!includedDays[i]) {\r\n continue\r\n }\r\n const dayToAdd = includedDays[i].clone().add(1, 'd')\r\n includedDays.push(dayToAdd)\r\n }\r\n }\r\n return includedDays.filter(_ => excludedDays.indexOf(_.day()) === -1)\r\n }\r\n\r\n parseCsvFile = props => {\r\n const { language } = props\r\n moment.locale(getLanguage(language))\r\n this.props.setLoading()\r\n\r\n const rootPath = Settings.data_root_path[process.env.NODE_ENV]\r\n const filePath = `${rootPath}/${props.entityId}/${props.siteId}/${\r\n props.file\r\n }?_=${new Date().getTime()}`\r\n Papa.parse(filePath, {\r\n delimiter: ';',\r\n header: true,\r\n delimiter: ';',\r\n download: true,\r\n skipEmptyLines: true,\r\n complete: this.onParseComplete,\r\n error: this.onParseError,\r\n })\r\n }\r\n\r\n onParseComplete = result => {\r\n const includedDays = this.getIncludedDays()\r\n /**\r\n * Structure items based on display mode\r\n */\r\n const items =\r\n this.props.displayMode === 'week'\r\n ? this.getWeeklyItems(result, includedDays)\r\n : this.getDailyItems(result, includedDays)\r\n\r\n /**\r\n * Update the state\r\n */\r\n this.setState({\r\n items,\r\n days: includedDays.map(item => {\r\n return {\r\n date: item,\r\n name: item.format('dddd'),\r\n }\r\n }),\r\n })\r\n this.props.setUnloading()\r\n }\r\n\r\n onParseError = (err, file, inputElem, reason) => {\r\n console.log(err)\r\n }\r\n\r\n /**\r\n * Get items structure for daily display\r\n */\r\n getDailyItems = (result, includedDays) => {\r\n const filteredResult = this.getFilteredData(result.data)\r\n\r\n const includedDaysStr = includedDays.map(_ => _.format('YYYY-MM-DD'))\r\n\r\n const groupedByDate = this._groupBy(filteredResult, 'date')\r\n\r\n const kiosksNames = this.props.kiosks.map(kiosk => kiosk.split('-')[0])\r\n const selectedMenu = result.data.find(\r\n it => it.menu_code == this.props.menu\r\n )\r\n const dailyItems = Object.keys(groupedByDate)\r\n .reduce((result, date) => {\r\n if (includedDaysStr.indexOf(date) !== -1) {\r\n const byKiosk = this._groupBy(\r\n groupedByDate[date],\r\n 'kiosk_code'\r\n )\r\n\r\n const kiosks = Object.keys(byKiosk).reduce(\r\n (result, kiosk) => {\r\n if (\r\n kiosksNames[0] === 'all' ||\r\n kiosksNames.indexOf(kiosk) !== -1\r\n ) {\r\n result.push({\r\n name: kiosk,\r\n displayName: byKiosk[kiosk][0].kiosk_name,\r\n kioskPicture: this.props.kiosks\r\n .find(\r\n singleKiosk =>\r\n singleKiosk.split('-')[0] ===\r\n kiosk\r\n )\r\n .split('-')[1],\r\n items: byKiosk[kiosk],\r\n order: kiosksNames.indexOf(kiosk),\r\n })\r\n }\r\n return result\r\n },\r\n []\r\n )\r\n\r\n result.push({\r\n date: date,\r\n kiosks: kiosks.sort((a, b) => {\r\n return a.order - b.order\r\n }),\r\n menus: this._groupBy(groupedByDate[date], 'menu_code'),\r\n price_currency: selectedMenu.offer1_price_currency,\r\n menu_label: selectedMenu.menu_label,\r\n })\r\n }\r\n return result\r\n }, [])\r\n .sort((a, b) => {\r\n return a.order - b.order\r\n })\r\n .sort((a, b) => {\r\n return a.date < b.date ? -1 : a.date > b.date ? 1 : 0\r\n })\r\n includedDaysStr.map((day, i) => {\r\n if (!dailyItems.find(item => item.date === day)) {\r\n dailyItems.splice(i, 0, { date: day, kiosks: [] })\r\n }\r\n })\r\n\r\n const filteredDailyItems = dailyItems.filter(_ => {\r\n return _.kiosks.length > 0\r\n })\r\n\r\n return filteredDailyItems\r\n }\r\n\r\n /**\r\n * Get items structure for weekly display\r\n */\r\n getWeeklyItems = (result, includedDays) => {\r\n const filteredResult = this.getFilteredData(result.data)\r\n\r\n const groupedByKiosk = this._groupBy(filteredResult, 'kiosk_code')\r\n const kiosksNames = this.props.kiosks.map(kiosk => kiosk.split('-')[0])\r\n const weeklyItems = Object.keys(groupedByKiosk)\r\n .reduce((result, item) => {\r\n if (\r\n kiosksNames[0] === 'all' ||\r\n kiosksNames.indexOf(item) !== -1\r\n ) {\r\n const byDate = this._groupBy(groupedByKiosk[item], 'date')\r\n const items = includedDays.map(day => {\r\n return {\r\n date: day.format('YYYY-MM-DD'),\r\n items: byDate[day.format('YYYY-MM-DD')],\r\n }\r\n })\r\n\r\n result.push({\r\n name: item,\r\n items: items,\r\n kioskPicture: this.props.kiosks\r\n .find(\r\n singleKiosk =>\r\n singleKiosk.split('-')[0] === item\r\n )\r\n .split('-')[1],\r\n order: kiosksNames.indexOf(item),\r\n })\r\n }\r\n return result\r\n }, [])\r\n .sort((a, b) => {\r\n return a.order - b.order\r\n })\r\n\r\n return weeklyItems\r\n }\r\n\r\n getFilteredData = data =>\r\n data.filter(\r\n _ =>\r\n !!_.date &&\r\n _.language === this.props.language &&\r\n _.service === this.props.service\r\n )\r\n\r\n render() {\r\n const {\r\n dataSource,\r\n language,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n hideEnergyKcal,\r\n showEnergyKcalByPortion,\r\n currency = this.state.currency || '',\r\n useCommercialName,\r\n hideComposition,\r\n hideLabels,\r\n hideIntolerences,\r\n isDuoKiosk,\r\n isAdministrationPanel,\r\n } = this.props\r\n const { days = [], items = [] } = this.state\r\n const { loading } = this.props\r\n // if (loading && isAdministrationPanel) return \r\n if (\r\n (loading && isAdministrationPanel) ||\r\n (loading && this.props.displayMode !== 'kiosk')\r\n )\r\n return \r\n\r\n if (\r\n isAdministrationPanel &&\r\n (!days || days.length === 0 || !items || items.length === 0)\r\n ) {\r\n return (\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n const today = moment().format('YYYY-MM-DD')\r\n let selectedIndex = this.state.items.findIndex(_ => {\r\n return _.date === today\r\n })\r\n if (selectedIndex === -1) {\r\n selectedIndex = 0\r\n }\r\n\r\n let theme = Themes[this.props.concept]\r\n if (!theme) {\r\n theme = Themes[Object.keys(Themes)[0]]\r\n }\r\n\r\n if (!items) {\r\n return null\r\n }\r\n\r\n return (\r\n \r\n \r\n {this.props.displayMode === 'print' ||\r\n (this.props.print && this.props.displayMode !== 'week') ? (\r\n \r\n ) : this.props.displayMode === 'week' && days.length ? (\r\n \r\n ) : this.props.displayMode === 'day' ? (\r\n \r\n ) : this.props.displayMode === 'printlabel' ? (\r\n \r\n ) : this.props.displayMode === 'kiosk' ? (\r\n \r\n ) : isAdministrationPanel ? (\r\n \r\n ) : null}\r\n \r\n \r\n \r\n )\r\n }\r\n\r\n _groupBy = (xs, key) => {\r\n return xs.reduce(function(rv, x) {\r\n if (x[key] === '') return rv\r\n ;(rv[x[key]] = rv[x[key]] || []).push(x)\r\n return rv\r\n }, {})\r\n }\r\n}\r\n\r\nexport default LoaderConsumer(MenuPanel)\r\n","import React, { Component } from 'react'\r\n\r\nimport axios from 'axios'\r\nimport styled from 'styled-components'\r\nimport Papa from 'papaparse'\r\nimport moment from 'moment'\r\n\r\nimport MenuSettings from './MenuSettings'\r\nimport MenuPanel from '../MenuPanel/MenuPanel'\r\nimport CryptoJS from 'crypto-js'\r\n\r\nimport Settings from 'settings'\r\nimport NoDataSegment from '../../components/NoDataSegment/NoDataSegment'\r\n\r\n// DEVELOPMENT\r\nimport {\r\n setCountryDatabase,\r\n setSiteDatabase,\r\n resetDatabase,\r\n resetSiteDatabase,\r\n saveDbToLocalStorage,\r\n getDbFromLocalStorage,\r\n getSlugFromString,\r\n MongoMenus,\r\n MongoTypeRecipes,\r\n} from '../../utils/mongo_utils'\r\nimport { LoaderConsumer } from '../../utils/LoadingContext'\r\nimport slugify from 'slugify'\r\n\r\nconst SAVED_STATE_KEY = 'newrest-menu'\r\nexport const SAVED_RECIPES_PICTURES_WINREST = 'winrest-recipes-pictures'\r\nexport const SAVED_RECIPES_PICTURES_EXCEL = 'excel-recipes-pictures'\r\nconst EXCEL_CONCEPT = ''\r\nconst WINREST_CONCEPT = 'stdr'\r\n\r\nconst DEFAULT_STATE = {\r\n winrestURL: '',\r\n title: null,\r\n subtitle: null,\r\n\r\n date: moment().format('YYYY-MM-DD'),\r\n dayCount: 1,\r\n recipes: [],\r\n\r\n entityId: null,\r\n siteId: '',\r\n concept: null,\r\n forceToday: false,\r\n\r\n service: '',\r\n language: 'en',\r\n uiLanguage: 'en',\r\n winrestLanguage: 'commercialName1',\r\n menu: '',\r\n\r\n zoom: 1,\r\n orientation: 'landscape',\r\n size: 'A4',\r\n showDate: false,\r\n\r\n minDate: null,\r\n maxDate: null,\r\n kiosks: [],\r\n services: [],\r\n languages: [],\r\n concepts: [],\r\n menus: [],\r\n data: [],\r\n\r\n displayMode: 'kiosk',\r\n displayModes: [\r\n { name: 'Screen', value: 'kiosk', visible: true },\r\n { name: 'Carrousel', value: 'day', visible: true },\r\n { name: 'Week', value: 'week', visible: false },\r\n //{ name: 'Print', value: 'print' },\r\n { name: 'Labels', value: 'printlabel', visible: true },\r\n ],\r\n hideMenuPrice: false,\r\n hideRecipePoints: false,\r\n hideEnergyKcal: false,\r\n showEnergyKcalByPortion: false,\r\n hideComposition: false,\r\n hideLabels: false,\r\n hideIntolerences: false,\r\n\r\n settingsDrawerOpen: true,\r\n errorFileNotFound: false,\r\n days: [\r\n 'today',\r\n 'sunday',\r\n 'monday',\r\n 'tuesday',\r\n 'wednesday',\r\n 'thurday',\r\n 'friday',\r\n 'saturday',\r\n ],\r\n startDay: 'monday',\r\n excludedDays: [],\r\n}\r\n\r\nclass AdminPanel extends Component {\r\n state = { ...DEFAULT_STATE, dataSource: 'none', loading: true }\r\n\r\n componentWillMount() {\r\n //this.getLocalStorageDatas()\r\n\r\n const { defaultValues } = this.props\r\n\r\n let newState = {\r\n loading: false,\r\n concepts: Settings.concepts.sort((a, b) =>\r\n a.name.localeCompare(b.name)\r\n ),\r\n }\r\n\r\n if (defaultValues) {\r\n newState = {\r\n ...newState,\r\n dataSource: defaultValues.dataSource,\r\n concept: defaultValues.concept || 'stdr',\r\n date: defaultValues.date || moment().format('YYYY-MM-DD'),\r\n defaultValues: {\r\n baseUrl: defaultValues.winrestURL,\r\n siteId: defaultValues.siteId,\r\n pointOfSaleId: defaultValues.pointOfSaleId,\r\n guestTypeId: defaultValues.guestTypeId,\r\n mealTypeId: defaultValues.mealTypeId,\r\n menuId: defaultValues.menuId,\r\n },\r\n }\r\n }\r\n\r\n this.setState({ ...newState })\r\n\r\n // const { defaultValues } = this.props\r\n // if (defaultValues) {\r\n // console.log('defaultValues', defaultValues)\r\n // this.setState({\r\n // dataSource: defaultValues.dataSource,\r\n // concept: 'stdr',\r\n // date: defaultValues.date || moment().format('YYYY-MM-DD'),\r\n // // defaultValues: {\r\n // // baseUrl: defaultValues.winrestURL,\r\n // // siteId: defaultValues.siteSlug,\r\n // // },\r\n // loading: false,\r\n // })\r\n\r\n // // dataSource: defaultValues.dataSource,\r\n // // winrestURL: defaultValues.winrestURL,\r\n // // siteId: defaultValues.siteSlug,\r\n // // concept: 'stdr',\r\n // // date: defaultValues.date,\r\n // // pointOfSaleSlug: getSlugFromString(\r\n // // decodeURIComponent(defaultValues.pointOfSale)\r\n // // ),\r\n // // guestTypeSlug: getSlugFromString(\r\n // // decodeURIComponent(defaultValues.guestTypeSlug)\r\n // // ),\r\n // // mealTypeSlug: getSlugFromString(\r\n // // decodeURIComponent(defaultValues.mealTypeSlug)\r\n // // ),\r\n // // menuSlug: getSlugFromString(\r\n // // decodeURIComponent(defaultValues.menuSlug)\r\n // // ),\r\n // // language: 'commercialName1_en',\r\n // // },\r\n // // async () => {\r\n // // try {\r\n // // await this.winrestApiFetcher('winrestURL')\r\n // // await this.winrestApiFetcher('siteId')\r\n // // await this.winrestApiFetcher('pointOfSale')\r\n // // } catch (err) {\r\n // // console.log('[ERR]', err)\r\n // // }\r\n // // this.setState({ loading: false })\r\n // } else {\r\n // this.setState({ loading: false })\r\n // }\r\n }\r\n\r\n componentDidMount() {\r\n //window.addEventListener('beforeunload', this.saveState)\r\n }\r\n\r\n componentWillUnmount() {\r\n //window.removeEventListener('beforeunload', this.saveState)\r\n }\r\n\r\n saveRecipesPictures = () => {\r\n const { recipes, concept, dataSource, kiosks } = this.state\r\n const typedRecipesPics =\r\n JSON.parse(\r\n localStorage.getItem(\r\n dataSource === 'excel'\r\n ? SAVED_RECIPES_PICTURES_EXCEL\r\n : SAVED_RECIPES_PICTURES_WINREST\r\n )\r\n ) || {}\r\n const newRecipesTyped = { ...typedRecipesPics }\r\n if (!newRecipesTyped[concept]) {\r\n newRecipesTyped[concept] = {}\r\n }\r\n if (dataSource === 'winrest') {\r\n recipes.map(recipe => {\r\n const thisRecipe = recipe.split('-')\r\n newRecipesTyped[concept][thisRecipe[0]] = thisRecipe[1]\r\n })\r\n } else if (dataSource === 'winrest2') {\r\n recipes.map(recipe => {\r\n const thisRecipe = [\r\n recipe.slice(0, recipe.lastIndexOf('-')), \r\n recipe.slice(recipe.lastIndexOf('-') + 1, recipe.length)\r\n ]\r\n newRecipesTyped[concept][thisRecipe[0]] = thisRecipe[1]\r\n })\r\n } else {\r\n kiosks.map(({ kioskPicture = '', name }) => {\r\n newRecipesTyped[concept][name] = kioskPicture\r\n })\r\n }\r\n localStorage.setItem(\r\n dataSource === 'excel'\r\n ? SAVED_RECIPES_PICTURES_EXCEL\r\n : SAVED_RECIPES_PICTURES_WINREST,\r\n JSON.stringify(newRecipesTyped)\r\n )\r\n }\r\n\r\n // saveState = e => {\r\n // const {\r\n // entityId,\r\n // siteId,\r\n // concept,\r\n // file,\r\n // winrestURL,\r\n // date,\r\n // pointOfSaleSlug,\r\n // language,\r\n // guestTypeSlug,\r\n // mealTypeSlug,\r\n // dataSource,\r\n // } = this.state\r\n // localStorage.setItem(\r\n // SAVED_STATE_KEY,\r\n // JSON.stringify({\r\n // dataSource,\r\n // entityId,\r\n // siteId,\r\n // concept,\r\n // file,\r\n // winrestURL,\r\n // date,\r\n // pointOfSaleSlug,\r\n // language,\r\n // guestTypeSlug,\r\n // mealTypeSlug,\r\n // })\r\n // )\r\n // saveDbToLocalStorage()\r\n // return false\r\n // }\r\n\r\n // getLocalStorageDatas = () => {\r\n // let savedState = null\r\n // getDbFromLocalStorage()\r\n // const localStorageContent = localStorage.getItem(SAVED_STATE_KEY)\r\n // if (localStorageContent) {\r\n // savedState = JSON.parse(localStorageContent) || {}\r\n // this.props.setUnloading()\r\n // this.setState(\r\n // {\r\n // file: savedState\r\n // ? savedState.file\r\n // : `menu-${Settings.concepts[0].code}.${Settings.csvFileVersion}.csv`,\r\n // ...savedState,\r\n // concepts: Settings.concepts.sort((a, b) =>\r\n // a.name.localeCompare(b.name)\r\n // ),\r\n // settingsDrawerOpen: true,\r\n // },\r\n // () => {\r\n // //localStorage.removeItem(SAVED_STATE_KEY)\r\n // if (this.state.dataSource === 'excel') {\r\n // this.parseFileAndUpdateState()\r\n // }\r\n // }\r\n // )\r\n // }\r\n // }\r\n\r\n handleChange = (event, source = null, args = null) => {\r\n if (source === 'winrest2') {\r\n this.handleChangeWinrest2(args)\r\n return\r\n }\r\n\r\n if (!event) {\r\n return\r\n }\r\n\r\n const { concept } = this.state\r\n const { target } = event\r\n let { name, value, checked, type } = target\r\n if (type === 'checkbox') {\r\n value = checked\r\n }\r\n\r\n const computedState = {}\r\n\r\n if (name.startsWith('kiosk')) {\r\n const newKiosks = [...this.state.kiosks]\r\n const kioskArray = name.replace('kiosk_', '').split('-')\r\n const kioskIndex = parseInt(kioskArray[0])\r\n const kioskPic = kioskArray[1]\r\n newKiosks[kioskIndex].enabled = value\r\n newKiosks[kioskIndex].kioskPicture = kioskPic\r\n name = 'kiosks'\r\n value = [...newKiosks]\r\n } else if (name === 'concept') {\r\n computedState.recipes = []\r\n const newKiosks = [...this.state.kiosks]\r\n computedState.kiosks = newKiosks.map(item => ({\r\n ...item,\r\n enabled: false,\r\n kioskPicture: false,\r\n }))\r\n const newFile = `menu-${value}.${Settings.csvFileVersion}.csv`\r\n this.setState({\r\n file: newFile,\r\n dayCount: '1',\r\n displayMode: 'kiosk',\r\n })\r\n } else if (name === 'forceToday') {\r\n this.setState({\r\n date: value\r\n ? moment().format('YYYY-MM-DD')\r\n : this.state.minDate || moment().format('YYYY-MM-DD'),\r\n })\r\n } else if (name.startsWith('recipe_')) {\r\n const { recipes = [] } = this.state\r\n const newRecipes = [...recipes]\r\n const recipeId = name.replace('recipe_', '')\r\n const recipeIndex = newRecipes.indexOf(recipeId)\r\n const isThere = recipeIndex > -1\r\n\r\n // have to do this cause it's the same event\r\n // for select / deselect a kiosk and change it's picture\r\n const pictureUpdated = event.target.src !== ''\r\n if (isThere && !pictureUpdated) {\r\n newRecipes.splice(recipeIndex, 1)\r\n } else {\r\n let isChanged = false\r\n let newIndex = -1\r\n newRecipes.map((recipe, i) => {\r\n if (recipe.split('-')[0] === recipeId.split('-')[0]) {\r\n isChanged = true\r\n newIndex = i\r\n }\r\n })\r\n\r\n if (isChanged) {\r\n newRecipes[newIndex] = recipeId\r\n } else {\r\n newRecipes.push(recipeId)\r\n }\r\n }\r\n value = [...newRecipes]\r\n name = 'recipes'\r\n } else if (name === 'winrestURL') {\r\n computedState.siteId = ''\r\n computedState.pointOfSaleSlug = ''\r\n computedState.guestTypeSlug = ''\r\n computedState.menuSlug = ''\r\n computedState.mealTypeSlug = ''\r\n computedState.recipes = []\r\n computedState.language = 'commercialName1_en'\r\n } else if (name === 'siteId') {\r\n resetSiteDatabase()\r\n computedState.pointOfSaleSlug = ''\r\n computedState.guestTypeSlug = ''\r\n computedState.menuSlug = ''\r\n computedState.mealTypeSlug = ''\r\n computedState.recipes = []\r\n } else if (name === 'date') {\r\n computedState.pointOfSaleSlug = ''\r\n computedState.guestTypeSlug = ''\r\n computedState.menuSlug = ''\r\n computedState.mealTypeSlug = ''\r\n computedState.recipes = []\r\n } else if (name === 'pointOfSaleSlug') {\r\n computedState.guestTypeSlug = ''\r\n computedState.menuSlug = ''\r\n computedState.mealTypeSlug = ''\r\n computedState.recipes = []\r\n } else if (name === 'guestTypeSlug') {\r\n computedState.menuSlug = ''\r\n computedState.mealTypeSlug = ''\r\n computedState.recipes = []\r\n } else if (name === 'mealTypeSlug') {\r\n computedState.menuSlug = ''\r\n computedState.recipes = []\r\n } else if (name === 'menuSlug') {\r\n computedState.recipes = []\r\n computedState.currency = (\r\n MongoMenus.findOne({\r\n slug: value,\r\n }) || {}\r\n ).currency\r\n }\r\n\r\n this.setState(\r\n {\r\n ...computedState,\r\n [name]: typeof value === 'undefined' ? '' : value,\r\n isChecked: null,\r\n },\r\n () => {\r\n if (name === 'dataSource') {\r\n this.props.setLoading()\r\n this.setState({\r\n ...DEFAULT_STATE,\r\n concept:\r\n (value === 'winrest' || value === 'winrest2')\r\n ? WINREST_CONCEPT\r\n : EXCEL_CONCEPT,\r\n file: ``,\r\n concepts: Settings.concepts.sort((a, b) =>\r\n a.name.localeCompare(b.name)\r\n ),\r\n })\r\n if (value === 'excel') {\r\n resetDatabase()\r\n //his.getLocalStorageDatas()\r\n }\r\n }\r\n if (\r\n (name === 'entityId' ||\r\n name === 'siteId' ||\r\n name === 'concept' ||\r\n name === 'file' ||\r\n name === 'startDay' ||\r\n name === 'dataSource') &&\r\n this.state.dataSource === 'excel'\r\n ) {\r\n this.props.setLoading()\r\n this.parseFileAndUpdateState()\r\n } else if (\r\n name === 'menu' ||\r\n name === 'dayCount' ||\r\n name === 'concept'\r\n ) {\r\n this.updateDisplayModes()\r\n } else if (\r\n ((name === 'siteId' ||\r\n name === 'date' ||\r\n name === 'forceToday') &&\r\n this.state.dataSource === 'winrest') ||\r\n (name === 'winrestURL' && value.indexOf('.newrest.eu') > -1)\r\n ) {\r\n if (name === 'winrestURL') {\r\n resetDatabase()\r\n }\r\n this.winrestApiFetcher(name)\r\n } else if (name === 'recipes' || name === 'kiosks') {\r\n this.saveRecipesPictures()\r\n } else if (name === 'displayMode') {\r\n this.setState({ print: false })\r\n } else if (name === 'uiLanguage') {\r\n const language = this.state.winrestLanguage + '_' + value\r\n this.setState({ language })\r\n } else if (name === 'winrestLanguage') {\r\n const language = value + '_' + this.state.uiLanguage\r\n this.setState({ language })\r\n }\r\n }\r\n )\r\n }\r\n\r\n handleChangeWinrest2 = args => {\r\n this.props.setLoading()\r\n this.setState(\r\n {\r\n winrestData: { ...this.state.winrestData, ...args },\r\n defaultValues: null,\r\n },\r\n () => this.props.setUnloading()\r\n )\r\n }\r\n\r\n setExcludedDays = event => {\r\n let value = Array.from(\r\n event.target.selectedOptions,\r\n option => option.value\r\n )\r\n value = value.map(_ => parseInt(_))\r\n this.setState({ excludedDays: value })\r\n }\r\n\r\n updateDisplayModes = () => {\r\n const newDisplayModes = [...this.state.displayModes]\r\n if (!!this.state.menu) {\r\n newDisplayModes.map(_ =>\r\n _.value !== 'kiosk' ? (_.visible = false) : (_.visible = true)\r\n )\r\n } else {\r\n if (this.state.dayCount > 1) {\r\n newDisplayModes.map(_ =>\r\n _.value === 'kiosk'\r\n ? (_.visible = false)\r\n : (_.visible = true)\r\n )\r\n } else {\r\n newDisplayModes.map(_ =>\r\n _.value === 'week'\r\n ? (_.visible = false)\r\n : (_.visible = true)\r\n )\r\n }\r\n }\r\n\r\n const firstVisibleDisplayMode = newDisplayModes.filter(\r\n _ => _.visible\r\n )[0].value\r\n const shouldUpdate =\r\n firstVisibleDisplayMode !== this.state.displayMode &&\r\n this.state.displayMode !== 'day'\r\n const isWeekMode =\r\n this.state.dayCount > 1 && this.state.displayMode === 'week'\r\n\r\n this.setState({\r\n displayMode:\r\n shouldUpdate && !isWeekMode\r\n ? firstVisibleDisplayMode\r\n : this.state.displayMode,\r\n displayModes: newDisplayModes,\r\n print: this.state.displayMode === 'week',\r\n })\r\n }\r\n\r\n parseFileAndUpdateState = () => {\r\n const rootPath = Settings.data_root_path[process.env.NODE_ENV]\r\n const filePath = `${rootPath}/${this.state.entityId}/${this.state.siteId}/${this.state.file}`\r\n\r\n axios.get(filePath).then(response => {\r\n if (response.status !== 404) {\r\n this.props.setUnloading()\r\n this.setState({ errorFileNotFound: false })\r\n Papa.parse(filePath, {\r\n delimiter: \";\",\r\n header: true,\r\n delimiter: \";\",\r\n download: true,\r\n skipEmptyLines: true,\r\n complete: this.onParseComplete,\r\n error: this.onParseError,\r\n })\r\n } else {\r\n this.props.setUnloading()\r\n console.log(`Impossible de trouver le fichier ${filePath}`)\r\n this.setState({ errorFileNotFound: true })\r\n return\r\n }\r\n })\r\n }\r\n\r\n onParseComplete = result => {\r\n console.log(result)\r\n this.setState({ settingsDrawerOpen: true })\r\n if (result.errors.length > 0) {\r\n return\r\n }\r\n\r\n const data = result.data.filter(_ => !!_.date)\r\n const storedTypedKiosks =\r\n JSON.parse(localStorage.getItem(SAVED_RECIPES_PICTURES_EXCEL)) || {}\r\n\r\n const kiosks = [...new Set(data.map(_ => _.kiosk_code))].map(_ => {\r\n return {\r\n name: _,\r\n enabled: true,\r\n kioskPicture: (storedTypedKiosks[this.state.concept] || {})[_],\r\n }\r\n })\r\n const services = [...new Set(data.map(_ => _.service))]\r\n const languages = [...new Set(data.map(_ => _.language))]\r\n const menus = [...new Set(data.map(_ => _.menu_code))]\r\n const dates = [...new Set(data.map(_ => moment(_.date)))]\r\n const minDate = moment.min(dates)\r\n const maxDate = moment.max(dates)\r\n\r\n this.setState(\r\n {\r\n kiosks,\r\n date: minDate.format('YYYY-MM-DD'),\r\n minDate: minDate.format('YYYY-MM-DD'),\r\n maxDate: maxDate.format('YYYY-MM-DD'),\r\n services,\r\n languages,\r\n menus,\r\n data,\r\n\r\n service: services[0],\r\n language: languages[0],\r\n menu: '',\r\n },\r\n () => {\r\n //this.saveState()\r\n this.updateDisplayModes()\r\n }\r\n )\r\n }\r\n\r\n openPrintDialog = () => window.print()\r\n\r\n handleOpenDrawerClick = () => {\r\n if (!this.state.settingsDrawerOpen) {\r\n this.setState({ settingsDrawerOpen: true })\r\n }\r\n }\r\n\r\n handleCloseDrawerClick = () => {\r\n this.setState(prevState => {\r\n return { settingsDrawerOpen: !prevState.settingsDrawerOpen }\r\n })\r\n }\r\n\r\n winrestApiFetcher = async currentField => {\r\n const { date, winrestURL, siteId } = this.state\r\n let url = ''\r\n let callback\r\n\r\n if (winrestURL && currentField === 'winrestURL') {\r\n url = 'service/v1/Information'\r\n callback = async ({ data = [] }) =>\r\n await setCountryDatabase({ data })\r\n } else if (\r\n winrestURL &&\r\n siteId &&\r\n date &&\r\n ['date', 'siteId', 'forceToday'].indexOf(currentField) > -1\r\n ) {\r\n url = `service/v1/sites/${siteId}/pointsOfSale/${date}`\r\n callback = async ({ data = [] }) =>\r\n await setSiteDatabase({ data, date })\r\n }\r\n\r\n if (url) {\r\n this.props.setLoading()\r\n const winrest_key = CryptoJS.MD5(`${url}&key=LoungeUpMobileAPI`)\r\n const result = await axios.get(`https://${winrestURL}/${url}`, {\r\n headers: { bearer: winrest_key },\r\n })\r\n const { data = {} } = result\r\n if (data) {\r\n await callback({ data })\r\n }\r\n this.props.setUnloading()\r\n }\r\n }\r\n\r\n render = () =>\r\n this.state.loading ? (\r\n
\r\n ) : (\r\n
\r\n \r\n \r\n \r\n this.setState(({ settingsDrawerOpen }) => ({\r\n settingsDrawerOpen: !settingsDrawerOpen,\r\n }))\r\n }\r\n >\r\n {this.state.settingsDrawerOpen ? 'X' : '|||'}\r\n \r\n
\r\n\r\n {this.state.errorFileNotFound &&

File not found

}\r\n\r\n {!this.state.errorFileNotFound &&\r\n this.state.dataSource === 'choose' && (\r\n \r\n )}\r\n\r\n {!this.state.errorFileNotFound &&\r\n this.state.dataSource !== 'choose' && (\r\n
\r\n {\r\n if (item.enabled) {\r\n result.push(\r\n `${item.name}-${\r\n item.kioskPicture\r\n ? item.kioskPicture\r\n : item.name\r\n }`\r\n )\r\n }\r\n return result\r\n },\r\n []\r\n )}\r\n />\r\n
\r\n )}\r\n
\r\n )\r\n}\r\n\r\nexport default LoaderConsumer(AdminPanel)\r\n\r\nconst OpenButton = styled.button`\r\n position: absolute;\r\n z-index: 1;\r\n right: ${({ opened }) => (opened ? '33px' : '85%')};\r\n top: 12px;\r\n border-radius: 50%;\r\n color: #edeff0;\r\n border: 1px solid #edeff0;\r\n height: 35px;\r\n width: 35px;\r\n font-size: ${({ opened }) => (opened ? 21 : 17)}px;\r\n display: flex;\r\n justify-content: center;\r\n align-items: center;\r\n cursor: pointer;\r\n outline: none;\r\n transition: all 0.35s ease-in-out;\r\n\r\n ${({ opened }) => (opened ? '' : 'transform: rotate(90deg);')}\r\n background-color: rgba(34, 49, 58, 0.93);\r\n @media print {\r\n display: none;\r\n }\r\n`\r\n","import { AuthenticationContext, adalFetch, withAdalLogin } from 'react-adal'\r\n\r\nexport const endpoint = '44bdb687-c0c3-4f9a-85b6-a4c9a0055a2c'\r\n\r\nconst adalConfig = {\r\n tenant: '9d018226-59aa-4566-bd12-0316c4486c94',\r\n clientId: '44bdb687-c0c3-4f9a-85b6-a4c9a0055a2c',\r\n // postLogoutRedirectUri: window.location.origin,\r\n // redirectUri: 'http://localhost:3000/',\r\n cacheLocation: 'localStorage',\r\n endpoints: {\r\n api: endpoint,\r\n },\r\n}\r\n\r\nexport const authContext = new AuthenticationContext(adalConfig)\r\n\r\nexport const adalApiFetch = (fetch, url, options) =>\r\n adalFetch(authContext, adalConfig.endpoints.api, fetch, url, options);\r\n\r\nexport const withAdalLoginApi = withAdalLogin(authContext, adalConfig.endpoints.api);","import { authContext, endpoint } from './AdalConfig'\r\n\r\nexport default class AuthService {\r\n authenticateToken = () => {\r\n if (authContext.getCachedUser()) {\r\n return true\r\n }\r\n if (authContext.isCallback(window.location.hash)) {\r\n authContext.handleWindowCallback()\r\n return true\r\n }\r\n return false\r\n }\r\n\r\n login() {\r\n authContext.login()\r\n }\r\n\r\n loggedIn() {\r\n return this.getUser() ? true : false\r\n }\r\n\r\n logout() {\r\n authContext.logOut()\r\n }\r\n\r\n getToken() {\r\n return authContext.getCachedToken(endpoint)\r\n }\r\n\r\n getUser() {\r\n return authContext.getCachedUser()\r\n }\r\n}\r\n","export const getUrlParam = (parameter, defaultvalue) => {\n var urlparameter = defaultvalue\n if (window.location.href.indexOf(parameter) > -1) {\n urlparameter = getUrlVars()[parameter]\n }\n return urlparameter ? decodeURIComponent(urlparameter) : defaultvalue\n}\n\nexport const getUrlVars = () => {\n var vars = {}\n window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi, function(\n m,\n key,\n value\n ) {\n vars[key] = value\n })\n return vars\n}\n","import React, { Component, Fragment } from 'react'\r\nimport moment from 'moment'\r\n\r\nimport AdminPanel from '../AdminPanel/AdminPanel'\r\nimport MenuPanel from '../MenuPanel/MenuPanel'\r\nimport Settings from 'settings'\r\nimport AuthService from '../../utils/AuthService'\r\n\r\nimport ReactGA from 'react-ga'\r\nimport { getLanguage } from '../../utils/Locale'\r\nimport { getUrlParam, getUrlVars } from '../../utils/UrlUtils'\r\n\r\nclass Main extends Component {\r\n authService = new AuthService()\r\n\r\n state = {\r\n displayMode: null,\r\n date: null,\r\n dayCount: null,\r\n concept: null,\r\n entityId: null,\r\n siteId: null,\r\n service: null,\r\n language: 'fr',\r\n menu: '',\r\n kiosks: [],\r\n\r\n file: null,\r\n\r\n isAdmin: false,\r\n isAuthenticated: false,\r\n }\r\n componentWillMount() {\r\n const parametersCount = Object.keys(getUrlVars()).length\r\n\r\n if (getUrlVars().utm_source) {\r\n this.setState({ isAuthenticated: true, useDefaultValues: true })\r\n }\r\n if (parametersCount === 0) {\r\n this.setState({ isAuthenticated: true })\r\n return\r\n }\r\n\r\n let dataSource = getUrlParam('dataSource', '')\r\n if (dataSource === 'winrest') {\r\n if (!getUrlParam('siteSlug')) {\r\n dataSource = 'winrest2'\r\n }\r\n }\r\n\r\n const displayMode = getUrlParam('mode', 'week')\r\n\r\n let date = getUrlParam('date', moment().format('YYYY-MM-DD'))\r\n if (date === 'today') {\r\n date = moment().format('YYYY-MM-DD')\r\n }\r\n const dayCount = getUrlParam('dayCount', 5)\r\n const startDay = getUrlParam('startDay', null)\r\n\r\n const concept = getUrlParam('mkt', 'lppdc')\r\n const entityId = getUrlParam('entityId', null)\r\n const siteId = getUrlParam('siteId', null)\r\n const file = getUrlParam('f', null)\r\n let title = getUrlParam('t', null)\r\n if (title) {\r\n title = decodeURIComponent(title)\r\n }\r\n let subtitle = getUrlParam('st', null)\r\n if (subtitle) {\r\n subtitle = decodeURIComponent(subtitle)\r\n }\r\n\r\n const service = getUrlParam('s', null)\r\n const language = getUrlParam('l', null)\r\n const menu = getUrlParam('menu', '')\r\n\r\n const print = getUrlParam('print', null)\r\n const showDate = JSON.parse(getUrlParam('showDate') || false)\r\n\r\n const includedKiosks = getUrlParam('kiosks', 'all')\r\n\r\n const zoom = getUrlParam('zoom', 1)\r\n const orientation = getUrlParam('orientation', 'landscape')\r\n const size = getUrlParam('size', 'A4')\r\n\r\n // winrest Params\r\n const recipes = getUrlParam('recipes', '')\r\n const winrestURL = getUrlParam('url', '')\r\n const pointOfSale = getUrlParam('pointOfSaleSlug', '')\r\n const mealTypeSlug = getUrlParam('mealTypeSlug', '')\r\n const menuSlug = getUrlParam('menuSlug', '')\r\n const siteSlug = getUrlParam('siteSlug', '')\r\n const guestTypeSlug = getUrlParam('guestTypeSlug', '')\r\n const hideMenuPrice = JSON.parse(getUrlParam('hideMenuPrice') || 'true')\r\n const hideRecipePoints = JSON.parse(\r\n getUrlParam('hideRecipePoints') || 'true'\r\n )\r\n const hideEnergyKcal = JSON.parse(\r\n getUrlParam('hideEnergyKcal') || 'false'\r\n )\r\n const showEnergyKcalByPortion = JSON.parse(\r\n getUrlParam('showEnergyKcalByPortion') || 'false'\r\n )\r\n const hideComposition = JSON.parse(\r\n getUrlParam('hideComposition') || 'false'\r\n )\r\n const hideLabels = JSON.parse(getUrlParam('hideLabels') || 'false')\r\n const hideIntolerences = JSON.parse(getUrlParam('hideIntolerences') || 'false')\r\n const isDuoKiosk = JSON.parse(getUrlParam('isDuoKiosk') || 'false')\r\n const useCommercialName =\r\n getUrlParam('useCommercialName') === 'true' ? true : false\r\n\r\n const columns = getUrlParam('columns', null)\r\n\r\n const excludedDays = getUrlParam('excludedDays', '')\r\n .split(',')\r\n .map(_ => parseInt(_))\r\n\r\n /** New WINREST initialization query params */\r\n const pointOfSaleId = getUrlParam('pointOfSaleId', '')\r\n const guestTypeId = getUrlParam('guestTypeId', '')\r\n const mealTypeId = getUrlParam('mealTypeId', '')\r\n const menuId = getUrlParam('menuId', '')\r\n const recipeTypeIds = getUrlParam('recipeTypeIds', '')\r\n const pictures = getUrlParam('pictures', '')\r\n const currency = getUrlParam('currency', '')\r\n\r\n this.setState({\r\n recipes: recipes.split(','),\r\n winrestURL,\r\n pointOfSale,\r\n mealTypeSlug,\r\n hideMenuPrice,\r\n hideRecipePoints,\r\n hideEnergyKcal,\r\n showEnergyKcalByPortion,\r\n hideComposition,\r\n hideLabels,\r\n hideIntolerences,\r\n isDuoKiosk,\r\n menuSlug,\r\n siteSlug,\r\n useCommercialName,\r\n guestTypeSlug,\r\n dataSource: dataSource || 'excel',\r\n displayMode,\r\n date,\r\n dayCount: parseInt(dayCount),\r\n startDay,\r\n\r\n concept,\r\n entityId,\r\n siteId,\r\n file,\r\n title,\r\n subtitle,\r\n service,\r\n language,\r\n menu,\r\n\r\n zoom,\r\n orientation,\r\n size,\r\n print,\r\n showDate,\r\n kiosks: includedKiosks.split(','),\r\n columns,\r\n excludedDays,\r\n\r\n pointOfSaleId,\r\n guestTypeId,\r\n mealTypeId,\r\n menuId,\r\n recipeTypeIds,\r\n pictures,\r\n currency\r\n })\r\n\r\n const gaEntity = dataSource === 'winrest' ? winrestURL : entityId\r\n const gaSite = dataSource === 'winrest' ? siteSlug : siteId\r\n const gaPointOfSale = dataSource === 'winrest' ? pointOfSale : siteId\r\n\r\n ReactGA.initialize('UA-151593081-1', {\r\n debug: false,\r\n siteSpeedSampleRate: 100,\r\n })\r\n ReactGA.set({ dimension1: dataSource })\r\n ReactGA.set({ dimension2: gaEntity })\r\n ReactGA.set({ dimension3: gaSite })\r\n ReactGA.set({ dimension4: gaPointOfSale })\r\n ReactGA.set({ dimension5: displayMode })\r\n ReactGA.pageview(window.location.pathname + window.location.search)\r\n }\r\n\r\n render() {\r\n return (\r\n \r\n {this.state.isAuthenticated ? (\r\n \r\n ) : (\r\n \r\n )}\r\n \r\n )\r\n }\r\n}\r\n\r\nexport default Main\r\n","import React, { Component } from 'react'\r\n\r\nclass ErrorBoundary extends Component {\r\n state = { error: null, info: null }\r\n\r\n componentDidCatch(error, info) {\r\n this.setState({\r\n error: error,\r\n info: info,\r\n })\r\n }\r\n\r\n render() {\r\n if (this.state.info) {\r\n return (\r\n
\r\n

Something went wrong.

\r\n
\r\n {this.state.error && this.state.error.toString()}\r\n
\r\n {this.state.info.componentStack}\r\n
\r\n
\r\n )\r\n }\r\n\r\n return this.props.children\r\n }\r\n}\r\n\r\nexport default ErrorBoundary\r\n","import React, { Component } from 'react'\r\nimport './App.css'\r\n\r\nimport Main from './containers/Main/Main'\r\nimport ErrorBoundary from './containers/ErrorBoundary/ErrorBoundary'\r\nimport { LoaderProvider } from './utils/LoadingContext'\r\n\r\nclass App extends Component {\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nexport default App\r\n","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read http://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.1/8 is considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n)\r\n\r\nexport function register(config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href)\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config)\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit http://bit.ly/CRA-PWA'\r\n )\r\n })\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config)\r\n }\r\n })\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl, config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing\r\n if (installingWorker == null) {\r\n return\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See http://bit.ly/CRA-PWA.'\r\n )\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration)\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.')\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error)\r\n })\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl, config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl)\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type')\r\n if (\r\n response.status === 404 ||\r\n (contentType != null &&\r\n contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload()\r\n })\r\n })\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config)\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n )\r\n })\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister()\r\n })\r\n }\r\n}\r\n","import React from 'react'\r\nimport ReactDOM from 'react-dom'\r\nimport './index.css'\r\nimport App from './App'\r\nimport * as serviceWorker from './serviceWorker'\r\n\r\nimport { runWithAdal } from 'react-adal'\r\nimport { authContext } from './utils/AdalConfig'\r\nimport { getUrlVars } from './utils/UrlUtils'\r\n\r\nif (getUrlVars()[\"mode\"]) {\r\n ReactDOM.render(, document.getElementById('root'))\r\n} else {\r\n runWithAdal(\r\n authContext,\r\n () => {\r\n ReactDOM.render(, document.getElementById('root'))\r\n },\r\n false\r\n )\r\n}\r\n\r\n\r\n//ReactDOM.render(, document.getElementById('root'))\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: http://bit.ly/CRA-PWA\r\nserviceWorker.unregister()\r\n","module.exports = settings;","// extracted by mini-css-extract-plugin\nmodule.exports = {\"dailyMenu\":\"MobileView_dailyMenu__aE6Kp\",\"grid\":\"MobileView_grid__3AsPq\",\"item\":\"MobileView_item___NKaP\",\"empty\":\"MobileView_empty__1XhET\",\"dayLink\":\"MobileView_dayLink__1UooK\",\"dayBar\":\"MobileView_dayBar__2N67o\"};","module.exports = themes;","// extracted by mini-css-extract-plugin\nmodule.exports = {\"Grid\":\"GridMenu_Grid__3abLF\",\"GridHeader\":\"GridMenu_GridHeader__1523h\",\"FirstColumn\":\"GridMenu_FirstColumn__2kjoH\"};"],"sourceRoot":""}