{"version":3,"sources":["utils/http.js","utils/cookies.js","utils/intl.js","components/Notification.jsx","api/layOutApiService.js","pages/DigitalMenu/SpiceLevelCtx.jsx","redux/actions/hubConfig.js","static/PageNotFound.jsx","pages/PageNotFound/index.jsx","pages/Tablet/public/components/Restaurant/DishesContext.jsx","pages/Tablet/public/components/Restaurant/AllergensContext.jsx","redux/actions/dishSetter.js","redux/actions/DigitalMenuSetter.js","redux/actions/editorsSetter.js","redux/actions/index.js","redux/actions/pdfAI.js","static/Chili.jsx","utils/amplitude.js","components/getCookie.js","static/WelcomyIcon.jsx","pages/Tablet/public/components/Disclaimer/index.jsx","pages/Tablet/public/components/Certifications/index.jsx","pages/Tablet/public/components/CoverLoading/index.jsx","pages/Tablet/public/components/Restaurant/PreMenu/SEOPreMenuPage.jsx","static/ai-chat-icon.jsx","pages/Tablet/public/components/Restaurant/PreMenu/LinkButtonType.jsx","pages/Tablet/public/components/Restaurant/PreMenu/index.jsx","static/flags/de.jsx","static/flags/gb.jsx","static/flags/it.jsx","static/flags/fr.jsx","static/flags/nl.jsx","pages/Tablet/public/components/GoogleTranslator/index.jsx","static/login-screen/screen.png","static/qr_code_template.png","static/vcard-bgs/grey-a8a8a8.png","static/vcard-bgs/white-f1f1f1.png","static/cooking.svg","static/certifications/white-background/dsgvo_cert.png","static/certifications/white-background/hosted_in_germany.png","utils/envs.js","redux/actions/companyConfig.js","redux/reducers/companyConfig.js","redux/reducers/layoutConfig.js","redux/reducers/dishConfig.js","redux/reducers/digitalMenuConfig.js","redux/reducers/editorsConfig.js","redux/reducers/qrCodeExport.js","redux/actions/livePreviewActions.js","redux/reducers/livePreviewReducer.js","redux/reducers/usersReducer.js","redux/actions/usersActions.js","redux/reducers/pdfAI.js","redux/reducers/hubConfig.js","redux/reducers/index.js","static/Logo.jsx","pages/login/ClientLogo.jsx","pages/PasswordReset/translations.js","pages/login/index.jsx","components/LanguagePicker.jsx","pages/ReportEmergency/index.jsx","pages/Utils/cookies.js","pages/Unsubscribe/index.jsx","pages/PasswordReset/PasswordReset.jsx","hooks/useQuery.js","components/Auth.jsx","components/QrCode/QrCodeLoadingModal.jsx","components/SideMenu/AccountSelector.jsx","components/Modal.jsx","components/QrCode/index.js","components/SideMenu/draw/draw.js","components/SideMenu/qr-code/QrCodeUtils.js","components/SideMenu/QrTemplate.jsx","components/SideMenu/Translations.js","components/SideMenu/QRCodePicker.jsx","components/SideMenu/action-cards/translations.js","components/SideMenu/action-cards/ActionCards.jsx","components/SideMenu/index.jsx","components/Navbar/Navbar.jsx","pages/Alerts/index.jsx","pages/DigitalMenu/PdfUpload.jsx","static/product-list-mobile.jsx","utils/image.js","pages/DigitalMenu/CreateDish.jsx","pages/DigitalMenu/OrganizeMenu.jsx","pages/DigitalMenu/index.jsx","pages/PrintMenu/index.jsx","static/Page Headers/SubscriptionsImage.jsx","pages/Subscriptions/index.jsx","components/Downloader.jsx","components/RichEditor/theme.jsx","components/RichEditor/plugins/Toolbar.jsx","components/RichEditor/plugins/ListMaxIndentLevel.jsx","components/RichEditor/plugins/CodeHighlight.jsx","components/RichEditor/plugins/AutoLink.jsx","components/RichEditor/index.jsx","pages/Impressum/index.jsx","pages/workspaces/UpdateWorkspace.jsx","api/workspacesApiService.js","components/ConfirmationModal/ConfirmationModal.jsx","pages/workspaces/index.jsx","components/CreateWorkspaceModal/index.jsx","pages/SubAccounts/index.jsx","pages/DataProtection/index.jsx","components/NewLink/linkMappings.js","components/LivePreview/LivePreview.jsx","utils/LinkIcons.js","pages/WelcomyHubPreview/WelcomyHubPreview.jsx","components/LinkVariations/Translations.js","components/LinkVariations/LinkVariations.jsx","components/NewLink/Translations.js","api/linkManagerManagementService.js","api/linkManagerApiService.js","components/NewLink/NewLink.jsx","components/NewLink/utils.js","pages/WelcomyHub/cards/CardTags.jsx","components/linkCard/Translations.js","components/linkCard/LinkCard.jsx","pages/WelcomyHub/index.jsx","pages/WelcomyHub/PreviewWrapperHub.jsx","pages/WelcomyHub/utils.js","pages/LogoUpload.jsx","pages/WelcomyHub/WelcomyHubConfig.jsx","pages/WelcomyHub/PreviewWrapperConfigHub.jsx","components/InviteUserModal/index.jsx","api/userManagementApiService.js","pages/UserManagement/UpdateUser.jsx","pages/UserManagement/Table.jsx","pages/UserManagement/index.jsx","pages/HubAnalytics/charts/BarChart.jsx","pages/HubAnalytics/charts/LineChart.jsx","pages/HubAnalytics/translations.js","pages/HubAnalytics/tables/TopCountries.jsx","pages/HubAnalytics/index.jsx","components/PageHeader/index.jsx","pages/CompanySetup.jsx","components/MainContent.jsx","components/ScrollListener.jsx","pages/Tablet/public/components/Consent/Config.js","pages/Tablet/public/components/Consent/cookieConsent.jsx","App.js","serviceWorker.js","index.js","redux/actions/qrCodeExport.js"],"names":["axiosInstance","axios","create","baseURL","withCredentials","tokens","access_token","getCookie","getAccessToken","this","setAccessToken","token","interceptors","request","use","url","indexOf","headers","window","location","pathname","includes","defaults","Authorization","response","error","console","log","status","data","originalRequest","config","msg","Promise","reject","replace","intl","getIntl","sessionExpiredTitle","formatMessage","id","defaultMessage","sessionExpiredBody","displayNotification","setTimeout","domain","cookieDomain","document","cookie","clearCookies","resolve","getErrorMsg","returnRaw","generalError","errorMsg","message","ENDPOINT","locale","localStorage","getItem","lang","German","English","cache","createIntlCache","createIntl","messages","type","title","desc","description","duration","className","style","fontFamily","addHubConfig","subtitle","name","imageUrl","companyId","a","async","errorTitle","errorBody","successTitle","successBody","http","post","image_url","getHubConfig","get","SpiceLevelsCtx","createContext","useSpiceLevels","useContext","SpiceLevelsContext","children","useSelector","state","companyConfig","company_id","verticalId","vertical_id","useState","spiceLevels","setSpiceLevels","useEffect","payload","fetchSpiceLevels","Provider","value","SET_HUB_CONFIG","setHubConfig","SvgComponent","props","data-name","xmlns","viewBox","cx","cy","rx","ry","fill","d","stroke","strokeMiterlimit","r","opacity","Title","PageNotfound","xs","level","DishesCtx","useDishes","DishesContext","dishes","setDishes","params","empty_categories","category","categories","key","push","fetchDishes","AllergensCtx","PreservativesCtx","useAllergens","usePreservatives","AllergensContext","allergens","setAllergens","preservatives","setPreservatives","filter","al","is_preservative","fetchAllergens","setDish","dish","dishConfig","setDigitalMenuCategories","cats","setDigitalMenuDishes","setDigitalMenuType","menuType","setDigitalMenuUrl","setDigitalMenuSearch","query","searchQuery","showDishesFilterModal","showModal","showFilterModal","setAllergenPreservativesFilter","allergensPreservativesFilters","setSpiceFilter","spiceLevel","spiceFilter","setRichDocumentSaved","shouldSave","impressumEditor","setPdfConversation","conversation","welcomyAI","pdfConversation","setPdfConversationMessageRetry","retry","focusable","data-icon","width","height","aria-hidden","sendEvent","amplId","eventName","properties","deferInitialization","CC","getUserPreferences","accepted_categories","amplitude","getInstance","init","serverZone","serverZoneBasedApi","cookieExpiration","storage","trackingOptions","city","country","carrier","device_manufacturer","device_model","dma","ip_address","language","os_name","os_version","platform","region","version_name","logEvent","String","prototype","trimLeft","trimRight","Array","map","callback","thisArg","i","n","length","call","c","v","cookies","match","RegExp","$1","split","parts","decodeURIComponent","$0","charAt","substr","getCookies","x1","y1","x2","y2","gradientUnits","offset","stopColor","Paragraph","Disclaimer","isPreview","impressum","setImpressum","dataProtection","setDataProtection","result","datenschutz","getFirstLoadMetadata","footerBegin","privacyPolicy","footerEnd","href","target","pointerEvents","rel","onClick","showSettings","Certifications","src","dsgvo","hostedInGermany","CoverLoading","logo","SEOPreMenuPage","companyName","canonical","companyLogo","Helmet","charSet","content","property","AiChatIcon","version","x","y","enable-background","ChatWithPdfButton","linkName","isLastItem","LinkButtonType","internalTypes","aLink","index","linkAddress","linksList","icon","chat_with_pdf","generateLogo","backgroundImage","RenderLinks","ICONS","LinkOutlined","FacebookOutlined","InstagramOutlined","MailOutlined","PhoneOutlined","TwitterOutlined","SolutionOutlined","FormOutlined","WhatsAppOutlined","LinkedinFilled","CloudDownloadOutlined","SendOutlined","LaptopOutlined","ProfileOutlined","prependProtocol","link","_link","links","digitalMenuConfig","socialLinks","visibleLinks","visible","textLinks","variation","iconSocialLinks","EXCLUSION_LINKS","smallLinks","justify","md","buttonLinks","PreMenu","enableContactDownload","setEnableContactDownload","short_link","company_logo","hubConfig","hubLogo","hubTitle","hubSubtitle","origin","phoneNumber","to_vcard","phoneNumberCheck","join","email","emailCheck","showCoverLoading","setShowCoverLoading","minHeight","GoogleTranslator","ellipsis","rows","expandable","symbol","card","vCard","add","encoding","vCardString","toString","blob","Blob","URL","createObjectURL","createElement","download","click","revokeObjectURL","DeFlag","GbFlag","ItFlag","FrFlag","NlFlag","currLang","setCurrLang","langFlags","addScript","setAttribute","body","appendChild","googleTranslateElementInit","cur_lang","google","translate","TranslateElement","pageLanguage","autoDisplay","changeLanguage","e","currentTarget","getAttribute","setItem","getElementsByClassName","hostname","reload","Languages","theme","Item","overlay","trigger","preventDefault","module","exports","host","isAllSuperAccount","isSuper","superId","DELETE_LINK","SET_LINKS","UPDATE_LINK","UPDATE_WORKSPACE","CREATE_WORKSPACE","DELETE_WORKSPACE","setConfig","deleteCompanyLink","linkId","setCompanyLinks","updateCompanyLink","updatedLink","createWorkspaceAction","workspace","updateWorkspace","updatedWorkspace","deleteWorkspace","subAccountId","defaultState","hasFetchedConfig","sub_accounts","super_account","companyConfigReducer","action","updatedPreviewLinks","updatedWorkspaces","w","s","navbarDark","layoutConfigReducer","layoutConfig","dishConfigReducer","digitalMenuConfigReducer","editorsReducer","aux","selectedQrExportType","qrCodeExportTrigger","modalOpen","qrCodeExportReducer","QR_CODE_EXPORT_SELECTION","QR_CODE_EXPORT_TRIGGER","QR_CODE_MODAL_OPEN","setLivePreviewLinks","deleteLivePreviewLink","updateLivePreviewNewLink","updateLivePreviewLink","updateLivePreviewCompanySetup","companySetup","initialState","basicInformation","companyTitle","hubName","livePreviewReducer","updatedLinks","users","usersReducer","user","updatedUsers","pdfConversationReducer","hubConfigReducer","allReducers","combineReducers","editorsConfig","livePreview","qrCodeExportConfig","usersManagement","ClientLogo","logoUrl","setLogoUrl","logo_url","getCompany","alt","PasswordResetTranslations","defineMessages","passwordResetSuccess","forgotPassword","goToLogin","passwordResetGenericError","passwordResetLengthError","tokenError","submitError","submitSuccess","emailPlaceholder","inputNewPassword","inputRepeatPassword","passwordMatchError","saveButton","pageTitle","Text","BusinessImg","BusinessImageSrc","srcset","BackgroundImage","Login","updateEmail","setState","updatePassword","password","updateConfirmPassword","confirmPassword","updateSignUpValid","isValid","signupValid","updateAccessCode","accessCode","updateUrl","validateForm","isSignup","emailLength","passwordLength","allInputsWritten","activationCode","invalidInput","errorMessage","emptyCredentials","doLogin","history","role","user_id","fetchCompanyConfig","invalidCredentials","default_name","default_logo_url","default_sub_accounts","default_super_account","default_vertical_id","accountInfo","legal_entity","parseInt","toBeSetted","legalEntity","dispatch","configSetter","doSignup","access_code","showSignup","showPasswordReset","togglePasswordReset","show","passwordResetError","extractCompanyFromURL","path","hasCompanyDomain","goToUrl","trim","existCompany","domainError","protocol","doPasswordReset","emailPasswordReset","current","renderUrlPicker","hasDomain","greetingTitle","greetingText","passwordResetSubtitle","passwordResetPageTitle","passwordResetEmailSent","workspaceText","workspacePlaceholder","workspaceButton","emailPlacholder","passwordPlaceholder","signupText","signInText","registerText","Fragment","onSubmit","placeholder","onChange","tabIndex","Password","underline","gutter","lg","block","ref","btnRef","htmlType","size","ghost","rules","minLength","specialChar","number","capital","valueAgain","CheckCircleFilled","color","fontSize","React","createRef","prevProps","prevState","snapshot","align","Logo","sm","Component","withRouter","connect","Consumer","LanguagePicker","args","de","en","pt","switchToEnglish","switchToGerman","switchTo","iso","ReportEmergency","setHasCookie","languages","assignPublicCookie","dateOftest","pickerPlaceholder","agreementRequired","emailInvalid","dateInvalid","validateMessages","required","types","date","GlobalOutlined","layout","onFinish","values","agreement","event_date","utc","format","success","label","minWidth","disabledDate","moment","local","endOf","valuePropName","validator","_","Error","agb","UnsubscribeForm","UnsubscribeSuccess","useHistory","subTitle","extra","UnsubscribePage","isUnsubscribed","setIsUnsubscribed","PasswordReset","tokenRef","useRef","setTokenError","passwordSuccess","setPasswordSuccess","passwordError","setPasswordError","search","useLocation","useMemo","URLSearchParams","useQuery","useForm","form","translation","wrapperCol","getFieldsValue","newPassword","repeatNewPassword","passwordErrorMessage","Tablet","lazy","Auth","memo","useDispatch","step","hasError","errorSetter","isLogged","ur","hasAllTokens","getConfig","menuExists","Object","keys","menu_url","batch","digitalMenuUrlSetter","digitalMenuTypeSetter","vertical","hasFetchedId","default_short_link","default_links","defaultLegalEntity","_language","iso_code","isPublic","configResponse","checkin_short_url","language_id","ampl_id","PrivateRoute","str","rest","test","render","exact","to","from","position","left","top","fallback","Unsubscribe","component","QrCodeLoadingModal","isLoadingQR","footer","closable","centered","AccountSelector","options","accounts","_options","superAccount","userRole","superPath","isAdmin","isSuperAccount","SubAccountsText","accountSeletorTitle","subAccountBackButton","changeToAccount","selectedAccount","toMainAccount","_selectedAccount","cookieChange","accountData","orientation","plain","dropdownMatchSelectWidth","showSearch","allowClear","superName","superVertical","DoubleLeftOutlined","ModalWrapper","onOk","onCancel","okText","cancelText","okButtonProps","cancelButtonProps","confirmLoading","bodyStyle","getBase64","img","reader","FileReader","addEventListener","readAsDataURL","newDimensions","maxWidth","maxHeight","ratio","newWidth","newHeight","toFixed","getFontSizeCanvas","ctx","text","textAreaWidth","canvasWidth","canvasHeight","clearRect","maxIterations","iteration","font","textWidth","measureText","drawBusinessCardPreview","canvasBoundries","shortLink","CARDS_BGS","logoSize","background","canvasQr","getElementById","qrX","txtTop","qrTop","fillStyle","fg","textAlign","textBaseline","textMetrics","txtHeight","actualBoundingBoxAscent","actualBoundingBoxDescent","textX","Image","crossOrigin","onload","naturalWidth","naturalHeight","logoWidth","logoHeight","logoTop","logoX","drawImage","fillText","drawBusinessCardForDownload","srcWidth","srcHeight","Math","min","calculateAspectRatioFit","QR_CODE_WHITE_CARD","image","vcardWhiteBg","bg","QR_CODE_DARK_CARD","vcardDarkBg","ORIGINAL_BG_DIMENSIONS","qrCodeVCardRender","canvas","preview","backgroundUrl","MINI_CANVAS_SIZE","MINI_CANVAS_BOUNDRIES","QrTemplate","downloadTrigger","selectedQrType","canvasRef","getContext","useCanvas","qrWidth","qrHeight","qrY","downloadQr","QR_CODE_PNG_TRANSPARENT_BG","newCanvas","newImageUrl","toDataURL","remove","downloadPngQRCode","downloadVCardQrCode","display","fgColor","bgColor","qrModalStrings","disclaimer","pngTitle","pngSubtitle","cardLightTitle","cardLightSubtitle","cardDarkTitle","cardDarkSubtitle","cancel","QRCodePicker","changeQrModalVisibility","qrCodeSelectedType","setExportType","selectQrExportType","Modal","disabled","translations","checked","strong","downloadText","downloadSubtext","downloadAction","copyText","copySubtext","copyAction","copyActionSuccess","copyActionError","copyGenerateBtn","modalCloseBtn","modalDisclaimer","modalTitle","ActionCards","shortUrlModalOpen","setShortUrlModalOpen","navigator","clipboard","isLoadingQr","setIsLoadingQr","toggleLoading","responseType","qrDraw","mime","b64","doc","jsPDF","addImage","QRtemplate","setFont","setFontSize","save","generateQRCodeTemplate","qrCodeExportModalOpen","indicator","LoadingOutlined","spin","open","destroyOnClose","SubMenu","SideMenu","rootSubmenuKeys","onOpenChange","openKeys","latestOpenKey","find","handleClick","keyPath","routes","selectedKey","workspaces","2","welcomyHub","20","21","22","welcomytools","12","13","14","office","6","usermanagement","200","compliance","10","101","analytics","25","myCompany","30","qrRef","defaultSelectedKey","tolltipCopyIsOpen","copiedUrlMessage","reduce","acc","account","concat","productMenu","WelcomyIcon","mode","defaultSelectedKeys","DeploymentUnitOutlined","SettingOutlined","LineChartOutlined","UserOutlined","FolderOutlined","BankOutlined","direction","showIcon","injectIntl","Navbar","goToMainAccount","getLanguages","supportedLanguages","goTablet","logout","logoutText","backToMainAccountText","menu","aLang","isScrolled","isTop","cursor","fontWeight","shape","margin","CoronaAlerts","verifyModal","setVerifyModal","newAlerts","setNewAlerts","oldAlerts","setOldAlerts","toVerify","setToVerify","fetchAlerts","alerts","active_emergencies","past_emergencies","verified","unverified","resolved","dismissed","BtnResolve","record","alert","put","resolveAlert","BtnVerify","BtnDismiss","dismissAlert","verifyModalTitle","welcomyNetwork","verifyModalOk","verifyModalCancel","verifyModalBody","dateOfVisit","dateOfTest","phone","actions","newAlertColumns","dataIndex","date_created","oldAlertColumns","tag","network","you","confirmed","separator","dataSource","columns","rowKey","pagination","Dragger","PdfUpload","loadingState","setLoadingState","storeStaticMenu","onSuccess","onError","draggerOpts","multiple","showUploadList","accept","customRequest","fileOpts","FormData","append","file","res","beforeUpload","isPdf","info","lastLine","spinning","InboxOutlined","preserveAspectRatio","uploadImages","images","meta","JSON","stringify","CreateDish","isOpen","setDishToEdit","dishToEdit","dishCategory","isLoading","setIsLoading","categoryId","setCategoryId","isMultiPricing","setIsMultiPricing","screens","useBreakpoint","fileList","setFileList","files","uid","_allergens","allergen","_preservatives","preservative","getAllergens","showLoading","resetImagesList","onerror","uploadButton","PlusOutlined","marginTop","modalHeader","nameLabel","availableLabel","priceLabel","descriptionLabel","allergensLabel","preservativesLabel","discardText","saveText","updateText","spiceText","multiPricing","addPrice","priceLabelText","createInitialValues","is_new_dish","makePrice","price","labels","priceValue","remmeber","availability","spice_level","multiprice","setFieldsValue","zIndex","resetFields","loading","forceRender","validateFields","then","fields","errorFields","field","undefined","isArray","priceObj","forEach","el","default","allImages","imageUrls","digitalMenuDishesSetter","onCreate","editDish","catch","preserve","initialValue","thumbUrl","listType","onRemove","aFile","checkedChildren","unCheckedChildren","List","fieldKey","restField","danger","TextArea","defaultValue","count","tooltips","character","Group","delete","whyDidYouRender","logOnDifferentValues","customName","DragableBodyRow","moveRow","categoryIndex","restProps","useDrop","collect","monitor","dragIndex","isOver","dropClassName","drop","item","useDrag","isDragging","drag","CategoryInput","changeCategoryName","setShowCategoryCreaction","createNewCategory","showDelete","placeholderText","deleteCategory","Confirm","Cancel","Delete","bordered","onConfirm","Category","shouldSaveDishOrder","setShouldSaveDishOrder","shouldSaveCategoryOrder","setShouldSaveCategoryOrder","showEditCat","setShowEditCat","newCategoryName","setnewCategoyName","observer","sort","available","editButtonText","EditCategory","newItemId","itemOrderId","MenuOutlined","Number","newAvailability","dishIndex","changeAvailability","EditOutlined","dishSetter","categoryData","saveCategoryOrder","ids","moveCategory","useCallback","hoverIndex","dragCategory","dragDishes","resultCategory","update","$splice","reorderDishes","digitalMenuCatsSetter","dragRow","components","row","showEditCategory","_categories","cat","wrap","catIndex","createNewDish","saveDishOrder","onRow","dishModalOpen","setDishModalOpen","available_only","transformedMenu","entries","allergen_id","DndProvider","backend","HTML5Backend","showCategoryCreaction","setNewCategoryName","NewCategory","toRender","Option","scrollWithOffset","scrollIntoView","behavior","Categories","scroll","DigitalMenu","setMenuType","pageTitleId","pageDescription","menuTypeText","printButton","xl","cooking","MenuTemplate","forwardRef","toExport","media","restaurantName","restaurantSubtitle","category_name","dish_id","dish_name","accu","elem","cellSpacing","dish_price","AllergensFooter","totalAllergens","Body","setToExport","checkAll","setCheckAll","pdfRef","plainOptions","setPlainOptions","checkedList","setCheckedList","handlePrint","useReactToPrint","documentTitle","removeAfterPrint","subTitleId","companyNameId","pageSubtitle","formRestaurantName","formRestaurantSubtitle","formRestaurantCategories","categoriesSelectionError","pageExport","category_names","initialValues","selectedCategories","PrintMenu","Subscriptions","subscriptionsData","setSubscriptionsData","deleteError","button","fullname","headerActions","deleteBtn","deleteSubscription","removeSubFromList","subs","sub","getSubs","SubscriptionsImage","header","full_name","toDownload","fileName","downloader","editorTheme","ltr","rtl","paragraph","quote","heading","h1","h2","h3","h4","h5","list","nested","listitem","ol","ul","bold","italic","overflowed","hashtag","strikethrough","underlineStrikethrough","code","codeHighlight","atrule","attr","boolean","builtin","cdata","char","class","comment","constant","deleted","doctype","entity","function","important","inserted","keyword","namespace","operator","prolog","punctuation","regex","selector","string","variable","supportedBlockTypes","Set","blockTypeToBlockName","Divider","positionEditorElement","editor","rect","pageYOffset","pageXOffset","offsetWidth","FloatingLinkEditor","editorRef","inputRef","mouseDownRef","linkUrl","setLinkUrl","isEditMode","setEditMode","lastSelection","setLastSelection","updateLinkEditor","selection","$getSelection","$isRangeSelection","node","getSelectedNode","parent","getParent","$isLinkNode","getURL","editorElem","nativeSelection","getSelection","activeElement","rootElement","getRootElement","isCollapsed","contains","anchorNode","domRange","getRangeAt","inner","firstElementChild","getBoundingClientRect","mergeRegister","registerUpdateListener","editorState","read","registerCommand","SELECTION_CHANGE_COMMAND","getEditorState","focus","event","onKeyDown","dispatchCommand","TOGGLE_LINK_COMMAND","onMouseDown","Select","hidden","option","anchor","getNode","focusNode","isBackward","$isAtNodeEnd","BlockOptionsDropdownList","blockType","toolbarRef","setShowBlockOptionsDropDown","dropDownRef","toolbar","dropDown","handle","removeEventListener","$wrapLeafNodesInElements","$createParagraphNode","$createHeadingNode","INSERT_UNORDERED_LIST_COMMAND","REMOVE_LIST_COMMAND","INSERT_ORDERED_LIST_COMMAND","$createQuoteNode","$createCodeNode","Toolbar","useLexicalComposerContext","canUndo","setCanUndo","canRedo","setCanRedo","setBlockType","selectedElementKey","setSelectedElementKey","showBlockOptionsDropDown","codeLanguage","setCodeLanguage","setIsRTL","isLink","setIsLink","isBold","setIsBold","isItalic","setIsItalic","isUnderline","setIsUnderline","isStrikethrough","setIsStrikethrough","isCode","setIsCode","updateToolbar","element","getKey","getTopLevelElementOrThrow","elementKey","getElementByKey","$isListNode","parentList","$getNearestNodeOfType","ListNode","getTag","$isHeadingNode","getType","$isCodeNode","getLanguage","getDefaultCodeLanguage","hasFormat","$isParentElementRTL","_payload","newEditor","CAN_UNDO_COMMAND","CAN_REDO_COMMAND","codeLanguges","getCodeLanguages","onCodeLanguageSelect","$getNodeByKey","setLanguage","insertLink","UNDO_COMMAND","aria-label","REDO_COMMAND","has","createPortal","FORMAT_TEXT_COMMAND","FORMAT_ELEMENT_COMMAND","isIndentPermitted","maxDepth","elementNodesInSelection","nodesInSelection","getNodes","getParentOrThrow","$isElementNode","getElementNodesInSelection","totalDepth","elementNode","max","$getListDepth","$isListItemNode","ListMaxIndentLevelPlugin","INDENT_CONTENT_COMMAND","COMMAND_PRIORITY_HIGH","CodeHighlightPlugin","registerCodeHighlighting","URL_MATCHER","EMAIL_MATCHER","MATCHERS","exec","PlaygroundAutoLinkPlugin","matchers","Placeholder","EditorPlugins","initialEditorState","saveDocument","_initialEditorState","editorStateRef","parser","DOMParser","dom","parseFromString","nodes","$generateNodesFromDOM","$getRoot","select","insertNodes","html","savePost","$generateHtmlFromNodes","contentEditable","transformers","TRANSFORMERS","Editor","editorConfig","EditorTheme","HeadingNode","ListItemNode","QuoteNode","CodeNode","CodeHighlightNode","TableNode","TableCellNode","TableRowNode","AutoLinkNode","LinkNode","LexicalComposer","initialConfig","Impressum","TitleText","BodyText","NoteText","_impressum","getFirstLoadImpressum","UpdateWorkspaceModal","isModalVisible","setIsModalVisible","successNotificationTitle","successNotificationBody","errorNotificationTitle","errorNotificationBody","editModalTitle","editInputName","editNamePlaceholder","mandatoryField","ConfirmationModal","cancelButtonText","confirmButtonText","Workspaces","setUpdateWorkspace","deleteWorkspaceId","setDeleteWorkspaceId","confirmationModalVisible","setConfirmationModalVisible","searchText","setSearchText","filteredWorkspaces","toLowerCase","searchPlaceholder","viewButtonText","deleteButtonText","confirmationDeleteTitle","confirmationDeleteMessage","handleUpdateWorkspace","handleGoToWorkspace","handleDeleteWorkspace","span","Search","UpdateWorkspace","CreateWorkspaceModal","nameInput","urlInput","createButton","cancelButton","requiredText","noSpecialChars","handleOnCancel","invalidChars","createWorkspaceApi","TeamOutlined","addonAfter","addonBefore","SubAccounts","createWorkSpaceModalVisible","setcreateWorkSpaceModalVisible","createWorkspaceButton","workspaceTitle","workspaceDescription","DataProtection","dataprotection","setDataprotection","titleText","bodyText","_dataProtection","_businessHours","business_hours","getFirstLoadDataProtection","LINK_TYPES","LINK_VARIATIONS","LivePreview","_hubName","previewLinks","WelcomyHubPreview","uploadText","linkCall","linkTypeText","integrationDocsTitle","contactSocialTitle","newRibbon","AiSupportAssistant","LinkVariations","selectedValue","setSelectedValue","linkTypeChanges","linkType","buttonStyle","Button","FileOutlined","CloudUploadOutlined","Ribbon","toUpperCase","RobotOutlined","linkVariationText","withTextText","withoutTextText","linkText","visibleText","digitalCardText","clickPreventionText","phoneAddressText","whatsappAddressText","fileText","softwareText","address","saveError","uploadError","addLink","updateLink","goTo","linkCreationSuccessTitle","linkCreationSuccessBody","linkUpdateSuccessTitle","linkUpdateSuccessBody","AiSupportAssistantDescription","UploadMissingErrorTitle","UploadMissingErrorBody","NoLinkErrorTitle","NoLinkErrorBody","createLinkManagement","existingLinks","newLink","createLink","subject","deleteLinkManagement","deleteLink","VARIATION_DEFAULT_OPTION","NewLink","updateLinkId","setLinkType","isLinkSocialNetwork","setIsLinkSocialNetwork","linkVariation","setLinkVariation","editIndex","findIndex","linkTypeChange","uploadProps","constructLinks","emailLinkWithSubject","urlIndex","substring","fieldsValue","linkCouldBeIcon","hoverable","autoComplete","onValuesChange","changes","allChanges","some","UploadOutlined","getFieldValue","err","updateLinkApiService","linkUpdate","LinkType","linkTypeMapping","upload","software","newsletter","linkedin","whatsapp","instagram","twitter","facebook","registration","product_and_services","CardTagVisible","CardTagInVCard","inVCard","vCardText","CardTagLinkType","LinkCard","showAddNewLink","editCard","useIntl","Meta","hubLink","DeleteOutlined","addButton","noLinksText","setLinks","popoverIndex","setShowAddNewLink","showEmptyPlaceholder","setshowEmptyPlaceholder","setEditCard","fetchLinks","getLinks","emailParts","DragableWrapper","moveCard","saveLinks","_links","reorderError","newLinkChange","linkCardChange","placement","overlayStyle","getPopupContainer","triggerNode","parentNode","justifyContent","alignItems","disableEdit","PreviewWrapperHub","LogoUpload","onFormChange","inputLabel","logoImage","logoToBeSaved","setLogoToBeSaved","hub_logo","uploadReadylabel","getValueFromEvent","handleFileChange","maxCount","shift","originFileObj","WelcomyHubConfig","isFirstLoad","setIsFirstLoad","initialConfigHubState","setTitle","setHubName","setSubtitle","setLogo","setHubLogo","titleInput","logoLabel","namePlaceholder","titlePlaceholder","subtitleInput","subtitlePlaceholder","fetchHubData","setHubConfigAction","_hubConfig","handleLogoChange","logoFile","logoBase64","delay","changeTitle","maxLength","changeHubName","changeSubtitle","PreviewWrapperConfigHub","InviteUserModal","inviteUserText","userRoleText","inviteUser","inviteUserData","inviteUserApi","labelCol","rule","UpdateUserModal","formFieldErrorMessage","adminRole","employeeRole","userId","updateUser","UserManagementTable","deleteUserId","setDeleteUserId","setUpdateUser","accountNames","subAccount","hubColumn","splice","deleteUserApi","UpdateUser","UserManagement","inviteUserModal","setInviteUserModal","userManagementTitle","userManagementDescription","inviteUserButtonText","getUsersApi","setUsers","BarChart","limit","Chart","datasets","backgroundColor","borderColor","borderWidth","responsive","scales","suggestedMin","suggestedMax","LineChart","tension","counterTotalTitle","counterTotalSeven","counterTotalThirtyOne","lineChartSevenTitle","lineChartSevenLegend","barCharttThirtyOneTitle","barCharttThirtyOneLegend","tableCountriesTitle","tableCountriesColumnCountry","tableCountriesColumnUsage","TopCountries","sorter","b","sortDirections","showSorterTooltip","loads","defaultSortOrder","_data","hubAnalytics","setHubAnalytics","hubAccessDates","responseByDate","hubAccessCountries","responseByCountry","fetchHubAccess","val","PageHeader","CompanySetup","formTitle","legalNameInput","commercialNameInput","saveCompanyConfig","commercialName","tooltip","InfoCircleOutlined","loadHubConfig","useRouteMatch","Alerts","HubAnalytics","PageNotFound","Header","Content","isScrollTop","setIsScrollTop","onScroll","distanceToTop","scrollTop","pluginConfig","current_lang","autoclear_cookies","page_scripts","cookie_domain","onFirstAction","user_preferences","onAccept","enableTracking","setOptOut","changed_preferences","consent_modal","primary_btn","secondary_btn","settings_modal","save_settings_btn","accept_all_btn","reject_all_btn","close_btn_label","cookie_table_headers","col1","col2","col3","blocks","toggle","enabled","readonly","cookie_table","is_regex","CookieConsent","initCookieConsent","run","Sider","store","createStore","App","breakpoint","Boolean","ReactDOM","serviceWorker","ready","unregister","shouldTrigger"],"mappings":"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","file":"static/js/main.658fa93c.chunk.js","sourcesContent":["// client.js\n\nimport axios from \"axios\";\nimport { displayNotification } from \"../components/Notification\";\nimport { getCookie } from \"../components/getCookie\";\nimport { clearCookies } from './cookies'; \nimport { getIntl } from \"./intl\";\n\n\nconst ENDPOINT = '/api/v1';\n\nlet axiosInstance = axios.create({\n baseURL: ENDPOINT,\n withCredentials: true,\n});\n\nlet tokens = {\n access_token: getCookie(\"_a\"),\n getAccessToken: function () {\n return this.access_token;\n },\n setAccessToken: function (token) {\n this.access_token = token;\n },\n};\n\naxiosInstance.interceptors.request.use(function (request) {\n // This URL is public and therefore does not need token verification.\n // We call it normally when the user is not logged anyways.\n if (request.url === \"/company_path\") {\n return request;\n }\n if (request.url.indexOf('https://res.cloudinary.com') !== -1 \n || request.url.indexOf('https://api.currentsapi.services/v1/search') !== -1 ) {\n request.headers = {};\n request.withCredentials = false;\n return request;\n }\n if (\n !window.location.pathname.includes(\"public\")\n && (!axiosInstance.defaults.headers[\"Authorizaton\"] ||\n !tokens.getAccessToken())\n ) {\n tokens.setAccessToken(getCookie(\"_a\"));\n if (tokens.getAccessToken()) {\n axiosInstance.defaults.headers[\n \"Authorization\"\n ] = `Bearer ${tokens.getAccessToken()}`;\n request.headers.Authorization = `Bearer ${tokens.getAccessToken()}`;\n }\n }\n return request;\n});\n\naxiosInstance.interceptors.response.use(\n function (response) {\n // Any status code that lie within the range of 2xx cause this function to trigger\n // Do something with response data\n return response;\n },\n function (error) {\n console.log(error);\n // Any status codes that falls outside the range of 2xx cause this function to trigger\n // Do something with response error\n const { status, data, config } = error.response;\n const originalRequest = config;\n if (\n originalRequest.url.includes(\"login\") &&\n !data.msg === \"Token has expired\"\n ) {\n return Promise.reject(error);\n }\n\n if (data.msg === \"Missing Authorization Header\") {\n window.location.replace(\"/login\");\n return Promise.reject(error);\n }\n\n if (status === 401 && data.msg === \"Token has expired\") {\n const intl = getIntl();\n const sessionExpiredTitle = intl.formatMessage(\n {\n id: \"General.Session.Timeout.Title\",\n defaultMessage: \"Bitte erneut einloggen\"\n }\n );\n const sessionExpiredBody = intl.formatMessage(\n {\n id: \"General.Session.Timeout.Body\",\n defaultMessage: \"Ihre Sitzung ist abgelaufen. Bitte melden Sie sich erneut an.\"\n }\n );\n displayNotification(\n \"info\",\n sessionExpiredTitle,\n sessionExpiredBody\n );\n setTimeout(() => {\n window.location.replace(\"/login\");\n clearCookies();\n }, 3000);\n const requestSubscribers = new Promise((resolve) => {\n resolve(axios(originalRequest));\n });\n return requestSubscribers;\n } else {\n return Promise.reject(error);\n }\n }\n);\n\nexport const getErrorMsg = (error, intl = null, returnRaw = false, generalError=false) => {\n console.log(error);\n intl = intl || getIntl();\n let errorMsg = \"\";\n if (error.response && error.response.data && error.response.data.error && !generalError) {\n if (returnRaw) {\n return error.response.data.error;\n }\n errorMsg += error.response.data.error;\n }\n else {\n if (returnRaw) {\n return null;\n }\n const message = intl.formatMessage(\n {\n id: \"General.ErrorNotification.Body\",\n defaultMessage: `Etwas ist schief gelaufen! Wenn das Problem weiterhin besteht, \n bitte kontaktieren Sie unser freundliches Support-Team! :)`\n }\n );\n errorMsg += message;\n }\n return errorMsg;\n}\n\naxiosInstance.ENDPOINT = axiosInstance.ENDPOINT || ENDPOINT;\n\nexport default axiosInstance;\n","import { cookieDomain } from './envs';\n\nconst clearCookies = () => {\n const domain = cookieDomain();\n document.cookie = `_r=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Refresh Token\n document.cookie = `_a=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Access Token\n document.cookie = `_c=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Company Id\n document.cookie = `_v=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Vertical Id\n document.cookie = `_u=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // User Id\n document.cookie = `_ur=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Super Account Vertical\n\n // Delete super account cookies just to be sure that sub accounts will leave no trace behind.\n document.cookie = `_super_name=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Super Account path\n document.cookie = `_super_path=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Super Account path\n document.cookie = `_super_c=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Supper Account Id\n document.cookie = `_super_v=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Super Account Vertical\n};\n\nexport { clearCookies };\n","import { createIntl, createIntlCache } from 'react-intl';\nimport English from '../i18n/en.json';\nimport German from '../i18n/de.json';\n// import Greek from '../i18n/gr.json';\n\nexport const getIntl = () => {\n const locale = window.localStorage.getItem(\"_wl_locale\") || \"de\";\n let lang = German;\n if (locale === 'en') {\n lang = English;\n }\n // else if (locale === 'gr') {\n // lang = Greek;\n // }\n const cache = createIntlCache();\n return createIntl({\n locale: locale,\n messages: lang\n }, cache);\n}\n","import { notification } from \"antd\";\n\n\nexport const displayNotification = (type, title, desc) => {\n\n if (![\"info\", \"error\", \"success\"].includes(type)) type = \"info\";\n\n notification[type]({\n message: title,\n description: desc,\n ...(type === \"error\" && {duration: 8}),\n ...(desc.indexOf(\"\\n\") >= 0 &&\n { className: 'line-break' }),\n style: {\n fontFamily: \"Raleway, sans-serif\"\n },\n });\n}\n","import http from \"../utils/http\";\nimport {displayNotification} from \"../components/Notification\";\nimport { getIntl } from \"../utils/intl\";\n\nexport const uploadHubImage = async (company_id, data) => {\n return http.post(`/company/${company_id}/image`, data);\n}\n\nexport const addHubConfig = async (title, subtitle, name, imageUrl, companyId) => {\n const intl = getIntl();\n const errorTitle = intl.formatMessage({\n id: \"Error\",\n defaultMessage: \"Etwas ist schief gelaufen!\",\n });\n \n const errorBody = intl.formatMessage({\n id: \"WelcomyHub.Setup.Notification.Error.Body\",\n defaultMessage: \"Ihre Welcomy Hub wurde nicht aktualisiert!\",\n });\n \n const successTitle = intl.formatMessage({\n id: \"SetupPage.Notification.FormSubmitSuccess.Title\",\n defaultMessage: \"Erfolg\",\n });\n const successBody = intl.formatMessage({\n id: \"WelcomyHub.Setup.Notification.Success.Body\",\n defaultMessage: \"Ihre Welcomy Hub wurde aktualisiert!\",\n });\n\n\n try {\n const response = await http.post(`company/${companyId}/hub/config`, {\n title,\n subtitle,\n name,\n image_url: imageUrl,\n });\n\n if (response.status >= 200 && response.status <= 300) {\n displayNotification(\n \"success\",\n successTitle,\n successBody,\n );\n }\n } catch (error) {\n console.log(error);\n displayNotification(\n \"error\",\n errorTitle,\n errorBody,\n );\n }\n}\n\nexport const getHubConfig = async (companyId) => {\n return await http.get(`company/${companyId}/hub/config`);\n}","import React, { createContext, useContext, useState, useEffect } from \"react\";\nimport { useSelector } from 'react-redux';\nimport http from \"../../utils/http\";\nconst SpiceLevelsCtx = createContext();\n\nexport const useSpiceLevels = () => useContext(SpiceLevelsCtx);\n\nfunction SpiceLevelsContext({ children, ...props }) {\n const companyId = useSelector(state => state.companyConfig.company_id);\n const verticalId = useSelector(state => state.companyConfig.vertical_id);\n const [spiceLevels, setSpiceLevels] = useState([]);\n useEffect(() => {\n const fetchSpiceLevels = async () => {\n let payload;\n try {\n const response = await http.get(`gastro/${companyId}/spice_level`);\n payload = response.data.payload;\n } catch (error) {\n console.error(\"Not able to fetch spice levels\", error);\n }\n if (payload) {\n setSpiceLevels(payload);\n }\n }\n if (verticalId === 3) fetchSpiceLevels();\n }, []);\n\n return {children};\n}\n\nexport default SpiceLevelsContext;\n","\nexport const SET_HUB_CONFIG = 'SET_HUB_CONFIG';\n\nexport const setHubConfig = (config) => {\n return {\n type: SET_HUB_CONFIG,\n config,\n };\n};","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n {\"page not found\"}\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\nexport default SvgComponent\n","import React from 'react';\nimport { Col, Row, Typography } from 'antd';\nimport Page404 from '../../static/PageNotFound';\n\nconst { Title } = Typography;\n\nfunction PageNotfound(props) {\n return (\n
\n \n \n \n \n \n \n \n Page not found\n \n \n
\n );\n}\n\nexport default PageNotfound;\n","import React, { createContext, useContext, useState, useEffect } from \"react\";\nimport http from \"../../../../../utils/http\";\nimport { useSelector } from 'react-redux';\nconst DishesCtx = createContext();\n\nexport const useDishes = () => useContext(DishesCtx);\n\nfunction DishesContext({ children, ...props }) {\n const companyId = useSelector(state => state.companyConfig.company_id);\n const [dishes, setDishes] = useState([]);\n useEffect(() => {\n const fetchDishes = async () => {\n let payload;\n try {\n const response = await http.get(`gastro/${companyId}/menu`, {\n params: {\n empty_categories: false,\n }\n });\n payload = response.data.payload;\n } catch (error) {\n console.error(\"Not able to fetch menu\", error);\n }\n if (payload) {\n const categories = [];\n for (const category in payload) {\n payload[category].key = category;\n categories.push(payload[category]);\n }\n setDishes(categories);\n }\n }\n fetchDishes();\n }, []);\n\n return {children};\n}\n\nexport default DishesContext;\n","import React, { createContext, useContext, useState, useEffect } from \"react\";\nimport http from \"../../../../../utils/http\";\nimport { useSelector } from 'react-redux';\nconst AllergensCtx = createContext();\nconst PreservativesCtx = createContext();\n\nexport const useAllergens = () => useContext(AllergensCtx);\nexport const usePreservatives = () => useContext(PreservativesCtx);\n\nfunction AllergensContext({ children, ...props }) {\n const companyId = useSelector(state => state.companyConfig.company_id);\n const verticalId = useSelector(state => state.companyConfig.vertical_id);\n const [allergens, setAllergens] = useState([]);\n const [preservatives, setPreservatives] = useState([]);\n useEffect(() => {\n const fetchAllergens = async () => {\n let payload;\n try {\n const response = await http.get(`gastro/${companyId}/allergen`);\n payload = response.data.payload;\n } catch (error) {\n console.error(\"Not able to fetch allergens\", error);\n }\n if (payload) {\n setAllergens(payload.filter(al => !al.is_preservative));\n setPreservatives(payload.filter(al => al.is_preservative));\n }\n }\n if (verticalId === 3) fetchAllergens();\n }, []);\n\n return (\n \n \n {children}\n \n );\n}\n\nexport default AllergensContext;\n","export const setDish = (dish) => {\n return {\n type: 'SET_DISH',\n dishConfig: dish,\n };\n};","export const setDigitalMenuCategories = (cats) => {\n return {\n type: 'SET_DIGITAL_MENU_CATS',\n categories: cats,\n };\n};\n\nexport const setDigitalMenuDishes = (dishes) => {\n return {\n type: 'SET_DIGITAL_MENU_DISHES',\n dishes: dishes,\n };\n};\n\nexport const setDigitalMenuType = (type) => {\n return {\n type: 'SET_DIGITAL_MENU_TYPE',\n menuType: type,\n };\n};\n\nexport const setDigitalMenuUrl = (url) => {\n return {\n type: 'SET_DIGITAL_MENU_URL',\n url: url,\n };\n};\n\nexport const setDigitalMenuSearch = (query) => {\n return {\n type: 'SET_DIGITAL_MENU_SEARCH',\n searchQuery: query,\n };\n};\nexport const showDishesFilterModal = (showModal) => {\n return {\n type: 'SET_SHOW_DISHES_FILTER_MODAL',\n showFilterModal: showModal,\n };\n};\n\nexport const setAllergenPreservativesFilter = (allergens) => {\n return {\n type: 'SET_ALLERGENS_FILTER',\n allergensPreservativesFilters: allergens,\n };\n};\n\nexport const setSpiceFilter = (spiceLevel) => {\n return {\n type: 'SET_SPICE_FILTER',\n spiceFilter: spiceLevel,\n };\n};\n","export const setRichDocumentSaved = (shouldSave) => {\n return {\n type: 'SET_IMPRESSUM_SHOULDSAVE',\n impressumEditor: {\n shouldSave: shouldSave,\n },\n };\n};","import { setConfig as configSetter } from \"./companyConfig\";\nimport { setDish as dishSetter } from \"./dishSetter\";\nimport {\n setDigitalMenuCategories as digitalMenuCatsSetter,\n setDigitalMenuDishes as digitalMenuDishesSetter,\n setDigitalMenuType as digitalMenuTypeSetter,\n setDigitalMenuUrl as digitalMenuUrlSetter,\n setDigitalMenuSearch as digitalMenuSearchSetter,\n showDishesFilterModal,\n setAllergenPreservativesFilter,\n setSpiceFilter,\n} from \"./DigitalMenuSetter\";\nimport { setRichDocumentSaved } from \"./editorsSetter\";\nimport { selectQrExportType } from \"./qrCodeExport\";\nimport { setPdfConversation } from \"./pdfAI\";\nimport { setHubConfig } from './hubConfig';\n\nexport {\n configSetter,\n dishSetter,\n digitalMenuCatsSetter,\n digitalMenuDishesSetter,\n digitalMenuTypeSetter,\n digitalMenuUrlSetter,\n digitalMenuSearchSetter,\n showDishesFilterModal,\n selectQrExportType,\n setAllergenPreservativesFilter,\n setHubConfig,\n setSpiceFilter,\n setRichDocumentSaved,\n setPdfConversation,\n};\n","export const setPdfConversation = (conversation) => {\n console.log('ACTION', conversation);\n return {\n type: 'SET_CONVERSATION',\n welcomyAI: {\n pdfConversation: conversation,\n },\n };\n};\n\nexport const setPdfConversationMessageRetry = (retry) => {\n return {\n type: 'SET_RETRY',\n retry,\n };\n};","import * as React from \"react\";\r\n\r\nfunction SvgComponent(props) {\r\n return (\r\n \r\n \r\n \r\n );\r\n}\r\n\r\nexport default SvgComponent;\r\n","import amplitude from 'amplitude-js';\n\n\nexport const sendEvent = (amplId, eventName, properties) => {\n if (!amplId){\n console.log('Not sending event to amplitude as no amplId was found');\n return;\n }\n\n let deferInitialization = true;\n if(window.CC.getUserPreferences().accepted_categories.includes('Statistik')){\n deferInitialization = false;\n }\n amplitude.getInstance().init(\n amplId, null, {\n serverZone: 'EU',\n serverZoneBasedApi: true,\n deferInitialization: deferInitialization,\n cookieExpiration: 7,\n storage: 'cookies',\n trackingOptions: {\n city: false,\n country: true,\n carrier: false,\n device_manufacturer: false,\n device_model: false,\n dma: false,\n ip_address: false,\n language: false,\n os_name: false,\n os_version: false,\n platform: false,\n region: false,\n version_name: false\n }\n });\n amplitude.getInstance().logEvent(eventName, properties);\n}\n","if (typeof String.prototype.trimLeft !== \"function\") {\n String.prototype.trimLeft = function() {\n return this.replace(/^\\s+/, \"\");\n };\n}\nif (typeof String.prototype.trimRight !== \"function\") {\n String.prototype.trimRight = function() {\n return this.replace(/\\s+$/, \"\");\n };\n}\nif (typeof Array.prototype.map !== \"function\") {\n Array.prototype.map = function(callback, thisArg) {\n for (var i=0, n=this.length, a=[]; i 1 ? decodeURIComponent(parts[1].trimRight()) : null;\n cookies[name] = value;\n });\n } else {\n c.match(/(?:^|\\s+)([!#$%&'*+\\-.0-9A-Z^`a-z|~]+)=([!#$%&'*+\\-.0-9A-Z^`a-z|~]*|\"(?:[\\x20-\\x7E\\x80\\xFF]|\\\\[\\x00-\\x7F])*\")(?=\\s*[,;]|$)/g).map(function($0, $1) {\n var name = $0,\n value = $1.charAt(0) === '\"'\n ? $1.substr(1, -1).replace(/\\\\(.)/g, \"$1\")\n : $1;\n cookies[name] = value;\n });\n }\n return cookies;\n}\nexport const getCookie = (name) => {\n return getCookies()[name];\n}","import * as React from \"react\"\n\nfunction SvgComponent(props) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport http from '../../../../../utils/http';\nimport { Divider, Typography } from \"antd\";\nimport { getIntl } from '../../../../../utils/intl';\n\n\nconst { Paragraph } = Typography;\n\nconst Disclaimer = ({isPreview = false}) => {\n const companyId = useSelector(state => state.companyConfig.company_id);\n const [impressum, setImpressum] = useState('');\n const [dataProtection, setDataProtection] = useState('');\n\n const getFirstLoadMetadata = async () => {\n const result = await http.get(`gastro/${companyId}/metadata`);\n setImpressum(result?.data?.payload?.impressum);\n setDataProtection(result?.data?.payload?.datenschutz);\n }\n \n useEffect(() => {\n getFirstLoadMetadata();\n }, []);\n\n /**\n * BEGIN TRANSLATIONS\n */\n\n const intl = getIntl();\n\n const footerBegin = intl.formatMessage(\n {\n id: \"QuestionFlow.Disclaimer.Text\",\n defaultMessage: \"Durch Nutzung der Registrierungssoftware stimmen Sie unseren\",\n }\n );\n\n const privacyPolicy = intl.formatMessage(\n {\n id: \"QuestionFlow.Disclaimer.PrivacyPolicy\",\n defaultMessage: \"Datenschutzrichtlinien\",\n }\n );\n\n const footerEnd = intl.formatMessage(\n {\n id: \"QuestionFlow.Disclaimer.Text2\",\n defaultMessage: \"zu\",\n }\n );\n\n /**\n * END TRANSLATIONS\n */\n\n\n\n return (\n
\n {(impressum || dataProtection) && (\n \n {impressum && (\n \n Impressum\n \n )}\n {impressum && dataProtection && }\n {dataProtection && (\n \n Datenschutz\n \n )}\n \n )}\n \n {footerBegin}{\" \"}\n \n \n {privacyPolicy}\n \n {\" \"}\n {footerEnd}.{\" \"}\n window.CC.showSettings()}\n // Prevent clicking on Preview Mode\n style={{ pointerEvents: isPreview ? \"none\" : \"auto\" }}\n >\n Cookie-Einstellungen\n \n \n
\n );\n};\n\nexport default Disclaimer;\n","import React from 'react';\nimport dsgvo from \"../../../../../static/certifications/white-background/dsgvo_cert.png\";\nimport hostedInGermany from \"../../../../../static/certifications/white-background/hosted_in_germany.png\";\n\nfunction Certifications(props) {\n return (\n
\n \n \n
\n );\n}\n\nexport default Certifications;\n","import React from \"react\";\nimport Certifications from \"../Certifications\";\n\nfunction CoverLoading({ logo, ...props }) {\n return (\n
\n
\n
{logo}
\n
\n \n
\n
\n
\n );\n}\n\nexport default CoverLoading;\n","import React from \"react\";\nimport { Helmet } from \"react-helmet\";\n\nconst SEOPreMenuPage = ({ companyName, canonical, companyLogo }) => (\n \n \n {`${companyName} - Welcomy App`} \n \n \n \n \n \n \n \n \n\n \n \n \n);\nexport default SEOPreMenuPage;\n","import React from \"react\";\r\n\r\nexport const AiChatIcon = () => (\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","import { Space } from \"antd\";\nimport React from \"react\";\nimport { AiChatIcon } from \"../../../../../../static/ai-chat-icon.jsx\";\n\nconst ChatWithPdfButton = ({ linkName, isLastItem }) => {\n return (\n
\n \n
\n );\n};\n\nconst LinkButtonType = ({\n internalTypes,\n aLink,\n index,\n linkAddress,\n linksList,\n icon,\n isPreview = false,\n}) => {\n let target = internalTypes.indexOf(aLink.type) >= 0 ? \"\" : \"_blank\";\n let href = linkAddress;\n if (aLink.chat_with_pdf) {\n target = \"_self\";\n href = `/public/welcome/form/ai?cid=${aLink.id}&file=${linkAddress}`;\n }\n return (\n \n {!aLink.chat_with_pdf && (\n \n \n \n )}\n\n {aLink.chat_with_pdf && (\n \n )}\n \n );\n};\n\nexport default LinkButtonType;\n","import React, {useEffect, useState} from \"react\";\nimport {useSelector} from \"react-redux\";\nimport {Col, Row, Space, Typography} from \"antd\";\nimport {\n CloudDownloadOutlined, LaptopOutlined, LinkedinFilled, FormOutlined, SendOutlined, SolutionOutlined,\n ProfileOutlined\n} from \"@ant-design/icons\";\n\nimport Disclaimer from \"../../Disclaimer\";\nimport http from \"../../../../../../utils/http\";\nimport {sendEvent} from '../../../../../../utils/amplitude';\nimport {\n FacebookOutlined, InstagramOutlined, LinkOutlined, MailOutlined, PhoneOutlined, TwitterOutlined, WhatsAppOutlined,\n \n} from \"@ant-design/icons\";\nimport GoogleTranslator from \"../../GoogleTranslator\";\nimport CoverLoading from \"../../CoverLoading\";\nimport SEOPreMenuPage from \"./SEOPreMenuPage\";\nimport Certifications from \"../../Certifications\";\nimport vCard from 'vcf';\nimport LinkButtonType from \"./LinkButtonType\";\n\n\nconst {Title, Paragraph} = Typography;\n\nexport const generateLogo = (companyLogo) => {\n return companyLogo ? () : (
);\n};\n\n\nconst RenderLinks = ({isPreview = false}) => {\n const ICONS = {\n 'link': ,\n 'facebook': ,\n 'instagram': ,\n 'email': ,\n 'phone': ,\n 'twitter': ,\n 'menu': ,\n 'registration': ,\n 'whatsapp': ,\n 'linkedin': ,\n 'file': ,\n 'upload': ,\n 'newsletter': ,\n 'software': ,\n 'product_and_services': ,\n };\n\n const internalTypes = ['menu', 'registration', 'newsletter', 'product_and_services'];\n\n const prependProtocol = (link) => {\n let _link = link;\n if (_link.indexOf('https://') === 0) return _link; else if (_link.indexOf('http://') === 0) {\n _link = (_link.split('http://'))[1];\n }\n return `https://${_link}`\n };\n\n const links = useSelector(state => state.companyConfig.links);\n const menuType = useSelector(state => state.digitalMenuConfig.type);\n\n if (links.length > 0) {\n\n const socialLinks = ['whatsapp', 'instagram', 'facebook', 'twitter', 'linkedin', 'phone', 'email'];\n const visibleLinks = links.filter(aLink => aLink.visible);\n const textLinks = visibleLinks.filter(aLink => aLink.variation === 'text');\n const iconSocialLinks = visibleLinks.filter(aLink => ((socialLinks.indexOf(aLink.type) >= 0) && aLink.variation === 'small'));\n // Add a link type here to avoid rendering it.\n const EXCLUSION_LINKS = ['registration'];\n\n const smallLinks = (\n \n \n {iconSocialLinks.filter(aLink => EXCLUSION_LINKS.indexOf(aLink.type) === -1).map((aLink, index) => {\n let linkAddress = prependProtocol(aLink.link);\n if (aLink.type === 'phone') {\n linkAddress = `tel:${aLink.link}`;\n } else if (aLink.type === 'email') {\n linkAddress = `mailto:${aLink.link}`;\n }\n\n return (\n = 0 ? \"\" : \"_blank\"}\n rel=\"noreferrer nofollowing ugc\"\n key={`link-${index}-${aLink.id}`}\n href={linkAddress}\n // Prevent clicking on Preview Mode\n style={{pointerEvents: isPreview ? 'none' : 'auto'}}\n >\n
\n \n
\n \n )\n })}\n
\n \n
);\n\n const buttonLinks = textLinks.filter(aLink => EXCLUSION_LINKS.indexOf(aLink.type) === -1).map((aLink, index, linksList) => {\n let linkAddress = aLink.link;\n if (aLink.type === 'menu' && aLink.link.includes('welcomyapp') && menuType !== 'digital') {\n linkAddress = linkAddress.replace('menu', 'static');\n } else if (aLink.type === 'phone') {\n linkAddress = `tel:${aLink.link}`;\n } else if (aLink.type === 'email') {\n linkAddress = `mailto:${aLink.link}`; \n } else {\n linkAddress = aLink.link || prependProtocol(aLink.link);\n }\n\n return (\n \n \n \n \n \n )\n });\n\n return [smallLinks, ...buttonLinks];\n }\n\n return null;\n}\n\nfunction PreMenu({isPreview = false}) {\n const [enableContactDownload, setEnableContactDownload] = useState(false);\n const companyConfig = useSelector(state => state.companyConfig);\n const { short_link } = companyConfig;\n\n /**\n * Redux states\n */\n const verticalId = useSelector(state => state.companyConfig.vertical_id);\n\n const companyLogo = useSelector(state => state.companyConfig.company_logo);\n const hubLogo = useSelector(state => state.hubConfig.hubLogo);\n const logo = hubLogo || companyLogo;\n\n const companyName = useSelector(state => state.companyConfig.name);\n const hubName = useSelector(state => state.hubConfig.name);\n\n const name = hubName || companyName;\n\n const hubTitle = useSelector(state => state.hubConfig.title);\n const hubSubtitle = useSelector(state => state.hubConfig.subtitle);\n\n const company_id = useSelector(state => state.companyConfig.company_id);\n const canonical = `${window.location.origin}${window.location.pathname}` // Here only for SEO\n const amplId = useSelector(state => state.companyConfig.amplId); // Amplitude tracking ID\n \n\n // Data for VCard\n const phoneNumber = companyConfig.links.filter((link) => (link.type === 'phone' && link.to_vcard));\n const phoneNumberCheck = phoneNumber.length ? phoneNumber[0].link.split(' ').join('') : null\n const email = companyConfig.links.filter(link => (link.type === 'email' && link.to_vcard));\n const emailCheck = email.length ? email[0].link.split(\"?subject\")[0] : null;\n const generateVCard = () => {\n if (name && phoneNumber) {\n const card = new vCard();\n card.add('fn', name, { encoding: 'utf-8'});\n card.add('tel', phoneNumberCheck, { type: ['work', 'voice']});\n card.add('url', short_link);\n card.add('org', name, { encoding: 'utf-8'});\n card.add('email', emailCheck);\n\n const vCardString = card.toString('3.0');\n const blob = new Blob([vCardString], {type: 'text/vcard'});\n const url = URL.createObjectURL(blob);\n const a = document.createElement('a');\n a.href = url;\n a.download = 'contact.vcf'; // Specify the filename\n a.click();\n URL.revokeObjectURL(url);\n }\n };\n\n // const [config, setConfig] = useState({});\n\n /**\n * Animation States\n *\n * Used for displaying the cover loading with animated logo\n */\n const [showCoverLoading, setShowCoverLoading] = useState(true);\n\n /**\n * Loading animation controller\n *\n * Give user a feedback behaviour from the UI. Used to build trust\n * on the visitor.\n */\n useEffect(() => {\n if (showCoverLoading) {\n setTimeout(async () => {\n setShowCoverLoading(false);\n }, 4000);\n }\n }, [showCoverLoading]);\n\n\n /**\n * Assing public cookie to allow /public queries to fetch data for some amount of time\n */\n const assignPublicCookie = async () => {\n if (company_id) {\n await http.get(`/company/${company_id}/assign_token`);\n }\n }\n\n useEffect(() => {\n (async () => await assignPublicCookie())();\n }, []);\n\n useEffect(() => {\n setEnableContactDownload(!!(name && (phoneNumber.length || email.length)));\n }, [name, phoneNumber, email]);\n\n /**\n * Amplitude tracking event emitter\n */\n sendEvent(amplId, 'WelcomyHub_Loaded', {\n 'customer': name, 'customerId': company_id, 'vertical': verticalId, 'page': 'welcomyhub',\n });\n\n const HubSubtitle = () => {\n if (hubSubtitle) return (
\n Read more,\n }}\n >\n {hubSubtitle}\n \n
);\n return null;\n };\n\n \n\n return (
\n {!isPreview && (\n <>\n \n {/*\n Some classes are defined in tabet.scss and content.scss\n */}\n {(logo && showCoverLoading) && }\n \n )}\n
\n
\n
\n { isPreview ? null : }\n
\n
\n {generateLogo(logo)}\n
\n
\n
\n\n \n {hubTitle}\n \n \n {name}\n \n \n
\n
\n
\n
\n {enableContactDownload &&\n
\n \n
}\n\n
\n \n
\n
\n \n
\n
\n
\n \n
\n
\n
);\n}\n\nexport default PreMenu;\n","import * as React from \"react\"\n\nconst DeFlag = (props) => (\n \n \n \n \n \n)\n\nexport default DeFlag\n","import * as React from \"react\"\n\nconst GbFlag = (props) => (\n \n \n \n \n \n \n \n)\n\nexport default GbFlag\n","import * as React from \"react\";\n\n\nconst ItFlag = (props) => (\n \n \n \n \n \n)\n\nexport default ItFlag;\n","import * as React from \"react\";\n\n\nconst FrFlag = (props) => (\n \n \n \n \n \n)\n\nexport default FrFlag;\n","import * as React from \"react\";\n\n\nconst NlFlag = (props) => (\n\n \n \n \n\n)\n\nexport default NlFlag;\n","import { DownOutlined, FlagFilled } from \"@ant-design/icons\";\nimport { Dropdown, Menu, Space } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport DeFlag from \"../../../../../static/flags/de\";\nimport GbFlag from \"../../../../../static/flags/gb\";\nimport ItFlag from \"../../../../../static/flags/it\";\nimport FrFlag from \"../../../../../static/flags/fr\";\nimport NlFlag from \"../../../../../static/flags/nl\";\n\n\nfunction GoogleTranslator(props) {\n const originalLanguage = 'de'\n const [currLang, setCurrLang] = useState(originalLanguage);\n const langFlags = {\n 'de': ,\n 'en': ,\n 'it': ,\n 'fr': ,\n 'nl': ,\n };\n\n useEffect(() => {\n const addScript = document.createElement(\"script\");\n addScript.setAttribute(\n \"src\",\n \"//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit\"\n );\n document.body.appendChild(addScript);\n window.googleTranslateElementInit = googleTranslateElementInit;\n }, []);\n\n useEffect(() => {\n const cur_lang = window.localStorage.getItem('cur_lang') || originalLanguage;\n setCurrLang(cur_lang);\n }, []);\n\n const googleTranslateElementInit = () => {\n new window.google.translate.TranslateElement(\n {\n pageLanguage: originalLanguage,\n autoDisplay: false,\n },\n \"google_translate_element\"\n );\n };\n\n const changeLanguage = (e, lang) => {\n const href = e.currentTarget.getAttribute(\"href\");\n window.location = href;\n window.localStorage.setItem('cur_lang', lang);\n document.getElementsByClassName(\"goog-te-combo\").value = lang;\n if (lang === originalLanguage) {\n // Force google translator to propagate change across website.\n document.cookie = 'googtrans=; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;';\n document.cookie = `googtrans=; Domain=${window.location.hostname}; Path=/; Expires=Thu, 01 Jan 1970 00:00:01 GMT;`;\n }\n window.location.reload();\n };\n\n const Languages = (\n \n \n changeLanguage(e, \"de\")}\n >\n \n \n \n \n changeLanguage(e, \"en\")}\n >\n \n \n \n \n changeLanguage(e, \"it\")}\n >\n \n \n \n \n changeLanguage(e, \"fr\")}\n >\n \n \n \n \n changeLanguage(e, \"nl\")}\n >\n \n \n \n \n );\n\n const SelectedLanguage = () => {\n return langFlags[currLang];\n };\n\n return (\n \n e.preventDefault()} className=\"google-translator__dropdown\">\n \n \n \n \n \n );\n}\n\nexport default GoogleTranslator;\n","module.exports = __webpack_public_path__ + \"static/media/screen.735d83b8.png\";","module.exports = __webpack_public_path__ + \"static/media/qr_code_template.e6b294f7.png\";","module.exports = __webpack_public_path__ + \"static/media/grey-a8a8a8.ff0b970f.png\";","module.exports = __webpack_public_path__ + \"static/media/white-f1f1f1.61a63fd7.png\";","module.exports = __webpack_public_path__ + \"static/media/cooking.7aeacfaa.svg\";","module.exports = __webpack_public_path__ + \"static/media/dsgvo_cert.22a2b0a9.png\";","module.exports = __webpack_public_path__ + \"static/media/hosted_in_germany.aa4bbafd.png\";","import { getCookie } from \"../components/getCookie\";\n\nconst cookieDomain = () => {\n if (!process.env.NODE_ENV ||\n process.env.NODE_ENV === \"development\" ||\n window.location.host.indexOf('localhost') >= 0) {\n return \".localhost.com\";\n } else {\n return \".welcomyapp.com\";\n }\n};\n\n/**\n * @description Evaluate, together with Redux and Cookies if an account is a super account.\n * @param {boolean} isSuper Redux state value for super_account ComapnyConfig key.\n */\nconst isAllSuperAccount = (isSuper) => {\n const superId = getCookie('_super_c');\n /**\n * _super_c is a cookie that points to a main account id. For the current usage\n * of this function we want to guarantee both of the definations evaluate to true.\n */\n if (typeof isSuper !== 'undefined' && isSuper && !superId) return true;\n return false;\n}\n\nexport { cookieDomain, isAllSuperAccount };\n","export const DELETE_LINK = \"DELETE_LINK\";\nexport const SET_LINKS = \"SET_LINKS\";\nexport const UPDATE_LINK = \"UPDATE_LINK\";\nexport const UPDATE_WORKSPACE = \"UPDATE_WORKSPACE\";\nexport const SET_WORKSPACES = \"SET_WORKSPACES\";\nexport const CREATE_WORKSPACE = \"CREATE_WORKSPACE\";\nexport const DELETE_WORKSPACE = \"DELETE_WORKSPACE\";\n\nexport const setConfig = (config) => {\n return {\n type: \"SET\",\n companyConfig: config,\n };\n};\n\nexport const deleteCompanyLink = (linkId) => {\n return {\n type: DELETE_LINK,\n payload: { linkId },\n };\n};\n\nexport const setCompanyLinks = (links) => {\n return {\n type: SET_LINKS,\n payload: links,\n };\n};\n\nexport const updateCompanyLink = ({ id, updatedLink }) => {\n return {\n type: UPDATE_LINK,\n payload: { id, updatedLink },\n };\n};\n\nexport const setWorkspace = (workspaces) => {\n return {\n type: SET_WORKSPACES,\n payload: workspaces,\n };\n};\n\nexport const createWorkspaceAction = ({ workspace }) => {\n return {\n type: CREATE_WORKSPACE,\n payload: { workspace },\n };\n};\n\nexport const updateWorkspace = ({ id, updatedWorkspace }) => {\n return {\n type: UPDATE_WORKSPACE,\n payload: { id, updatedWorkspace },\n };\n};\n\nexport const deleteWorkspace = ({ subAccountId }) => {\n return {\n type: DELETE_WORKSPACE,\n payload: { subAccountId },\n };\n};\n","import {\n CREATE_WORKSPACE,\n DELETE_LINK,\n DELETE_WORKSPACE,\n SET_LINKS,\n UPDATE_LINK,\n UPDATE_WORKSPACE,\n} from \"../actions/companyConfig\";\n\nconst defaultState = {\n hasFetchedConfig: false,\n sub_accounts: [],\n super_account: null,\n};\n\nconst companyConfigReducer = (state = defaultState, action) => {\n switch (action.type) {\n case \"SET\":\n return { ...state, ...action.companyConfig };\n case SET_LINKS:\n return {\n ...state,\n links: action.payload,\n };\n case DELETE_LINK:\n return {\n ...state,\n links: state?.links.filter((link) => link.id !== action.payload.linkId),\n };\n case UPDATE_LINK:\n const updatedPreviewLinks = state.links.map((link) =>\n link.id === action.payload.id\n ? { ...link, ...action.payload.updatedLink }\n : link,\n );\n\n return {\n ...state,\n links: [...updatedPreviewLinks],\n };\n case CREATE_WORKSPACE:\n return {\n ...state,\n sub_accounts: [action.payload.workspace, ...state.sub_accounts],\n };\n case UPDATE_WORKSPACE:\n const updatedWorkspaces = state.sub_accounts.map((w) =>\n w.id === action.payload.id\n ? { ...w, ...action.payload.updatedWorkspace }\n : w,\n );\n return {\n ...state,\n sub_accounts: updatedWorkspaces,\n };\n case DELETE_WORKSPACE:\n return {\n ...state,\n sub_accounts: state?.sub_accounts.filter(\n (s) => s.id !== action.payload.subAccountId,\n ),\n };\n default:\n return state;\n }\n};\n\nexport default companyConfigReducer;\n","const defaultState = {\n navbarDark: false,\n};\nconst layoutConfigReducer = (state = defaultState, action) => {\n switch (action.type) {\n case 'SET_LAYOUT':\n return {...state, navbarDark: action.layoutConfig};\n\n default:\n return state;\n }\n};\n\nexport default layoutConfigReducer;","const defaultState = {\n category: null,\n};\nconst dishConfigReducer = (state = defaultState, action) => {\n switch (action.type) {\n case 'SET_DISH':\n return {...state, category: action.dishConfig.category};\n\n default:\n return state;\n }\n};\n\nexport default dishConfigReducer;","const defaultState = {\n categories: null,\n dishes: null,\n type: null,\n url: null,\n searchQuery: null,\n showFilterModal: false,\n allergensPreservativesFilters: [],\n spiceFilter: 0,\n};\nconst digitalMenuConfigReducer = (state = defaultState, action) => {\n switch (action.type) {\n case 'SET_DIGITAL_MENU_CATS':\n return {...state, categories: action.categories};\n\n case 'SET_DIGITAL_MENU_DISHES':\n return {...state, dishes: action.dishes};\n\n case 'SET_DIGITAL_MENU_TYPE':\n return {...state, type: action.menuType};\n\n case 'SET_DIGITAL_MENU_URL':\n return {...state, url: action.url};\n\n case 'SET_DIGITAL_MENU_SEARCH':\n return {...state, searchQuery: action.searchQuery};\n\n case 'SET_SHOW_DISHES_FILTER_MODAL':\n return {...state, showFilterModal: action.showFilterModal};\n\n case 'SET_ALLERGENS_FILTER':\n return {\n ...state,\n allergensPreservativesFilters: action.allergensPreservativesFilters\n };\n\n case 'SET_SPICE_FILTER':\n return {...state, spiceFilter: action.spiceFilter};\n\n default:\n return state;\n }\n};\n\nexport default digitalMenuConfigReducer;","const defaultState = {\n impressumEditor: {\n shouldSave: false,\n },\n};\nconst editorsReducer = (state = defaultState, action) => {\n switch (action.type) {\n case 'SET_IMPRESSUM_SHOULDSAVE':\n const aux = {...state};\n aux.impressumEditor.shouldSave = action.impressumEditor.shouldSave;\n return {...aux};\n\n default:\n return state;\n }\n};\n\nexport default editorsReducer;","import { QR_CODE_EXPORT_SELECTION, QR_CODE_EXPORT_TRIGGER, QR_CODE_MODAL_OPEN } from \"../actions/qrCodeExport\";\n\nconst defaultState = {\n selectedQrExportType: null,\n qrCodeExportTrigger: false,\n modalOpen: false,\n};\nconst qrCodeExportReducer = (state = defaultState, action) => {\n switch (action.type) {\n case QR_CODE_EXPORT_SELECTION:\n return {...state, selectedQrExportType: action.payload};\n case QR_CODE_EXPORT_TRIGGER:\n return {...state, qrCodeExportTrigger: action.payload};\n case QR_CODE_MODAL_OPEN:\n return {...state, modalOpen: action.payload}\n default:\n return state;\n }\n};\n\nexport default qrCodeExportReducer;\n","export const ADD_LIVE_PREVIEW_LINK = 'ADD_LIVE_PREVIEW_LINK';\nexport const UPDATE_LIVE_PREVIEW_NEW_LINK = 'UPDATE_LIVE_PREVIEW_NEW_LINK';\nexport const DELETE_LIVE_PREVIEW_LINK = 'DELETE_LIVE_PREVIEW_LINK';\nexport const SET_LIVE_PREVIEW_LINKS = 'SET_LIVE_PREVIEW_LINKS';\nexport const UPDATE_LIVE_PREVIEW_LINK = 'UPDATE_LIVE_PREVIEW_LINK';\nexport const UPDATE_LIVE_PREVIEW_COMPANY_SETUP = 'UPDATE_LIVE_PREVIEW_COMPANY_SETUP';\n\nexport const setLivePreviewLinks = (links) => {\n return {\n type: SET_LIVE_PREVIEW_LINKS,\n payload: links\n }\n}\n\nexport const addLivePreviewLink = (content) => {\n return {\n type: ADD_LIVE_PREVIEW_LINK,\n payload: content,\n };\n};\n\nexport const deleteLivePreviewLink = (id) => {\n return {\n type: DELETE_LIVE_PREVIEW_LINK,\n payload: id,\n }\n};\n\nexport const updateLivePreviewNewLink = ({id, content}) => {\n return {\n type: UPDATE_LIVE_PREVIEW_NEW_LINK,\n payload: {id, content},\n };\n};\n\nexport const updateLivePreviewLink = ({id, updatedLink}) => {\n return {\n type: UPDATE_LIVE_PREVIEW_LINK,\n payload: {id, updatedLink}\n }\n}\n\nexport const updateLivePreviewCompanySetup = (companySetup) => {\n return {\n type: UPDATE_LIVE_PREVIEW_COMPANY_SETUP,\n payload: companySetup,\n }\n}\n\n","import {\n ADD_LIVE_PREVIEW_LINK,\n DELETE_LIVE_PREVIEW_LINK,\n SET_LIVE_PREVIEW_LINKS, UPDATE_LIVE_PREVIEW_COMPANY_SETUP,\n UPDATE_LIVE_PREVIEW_LINK, UPDATE_LIVE_PREVIEW_NEW_LINK\n} from '../actions/livePreviewActions';\n\nconst initialState = {\n links: [],\n companySetup: {\n basicInformation: null,\n logo: null,\n companyTitle: null,\n description: null,\n hubName: null,\n }\n};\n\nconst livePreviewReducer = (state = initialState, action) => {\n switch (action.type) {\n case SET_LIVE_PREVIEW_LINKS:\n return {\n ...state,\n links: action?.payload ? [...action.payload] : []\n }\n case ADD_LIVE_PREVIEW_LINK:\n return {\n ...state,\n links: [action.payload, ...state.links]\n };\n case UPDATE_LIVE_PREVIEW_LINK:\n const updatedPreviewLinks = state.links.map(link =>\n link.id === action.payload.id ? {...link, ...action.payload.updatedLink} : link\n );\n\n return {\n ...state,\n links: [...updatedPreviewLinks]\n }\n case UPDATE_LIVE_PREVIEW_NEW_LINK:\n const updatedLinks = state.links.map((link) => {\n if (link.id === action.payload.id) {\n return {\n ...link,\n ...action?.payload.content,\n }\n }\n return link;\n })\n return {\n ...state,\n links: updatedLinks\n }\n case DELETE_LIVE_PREVIEW_LINK:\n return {\n ...state,\n links: state.links.filter((link) => link.id !== action?.payload.id)\n }\n case UPDATE_LIVE_PREVIEW_COMPANY_SETUP:\n return {\n ...state,\n companySetup: {...state.companySetup, ...action?.payload}\n }\n default:\n return state;\n }\n};\n\nexport default livePreviewReducer;\n","import {\n ADD_USER,\n DELETE_USER,\n SET_USERS,\n UPDATE_USER,\n} from \"../actions/usersActions\";\n\nconst defaultState = {\n users: [],\n};\n\nconst usersReducer = (state = defaultState, action) => {\n switch (action.type) {\n case SET_USERS:\n return {\n ...state,\n users: action.payload,\n };\n case DELETE_USER:\n return {\n ...state,\n users: state?.users.filter((user) => user.id !== action.payload),\n };\n case UPDATE_USER:\n const updatedUsers = state.users.map((user) =>\n user.id === action.payload.id\n ? { ...user, ...action.payload.updatedLink }\n : user,\n );\n\n return {\n ...state,\n users: [...updatedUsers],\n };\n case ADD_USER:\n return {\n ...state,\n users: [action.payload, ...state.users],\n };\n\n default:\n return state;\n }\n};\n\nexport default usersReducer;\n","export const ADD_USER = \"ADD_USER\";\nexport const UPDATE_USER = \"UPDATE_USER\";\nexport const DELETE_USER = \"DELETE_USER\";\nexport const SET_USERS = \"SET_USERS\";\n\nexport const setUsers = (users) => {\n return {\n type: SET_USERS,\n payload: users,\n };\n};\n\nexport const addUser = (user) => {\n return {\n type: ADD_USER,\n payload: user,\n };\n};\n\nexport const deleteUser = (id) => {\n return {\n type: DELETE_USER,\n payload: id,\n };\n};\n\nexport const updateUser = ({ id, content }) => {\n return {\n type: UPDATE_USER,\n payload: { id, content },\n };\n};\n","const defaultState = {\n conversation: [],\n retry: false\n};\nconst pdfConversationReducer = (state = defaultState, action) => {\n switch (action.type) {\n case 'SET_CONVERSATION':\n return {...state, conversation: action.welcomyAI.pdfConversation};\n case 'SET_RETRY':\n return {...state, retry: action.retry};\n\n default:\n return state;\n }\n};\n\nexport default pdfConversationReducer;","import { SET_HUB_CONFIG } from \"../actions/hubConfig\";\n\nconst initialState = {\n name: null,\n hubLogo: null,\n title: null,\n subtitle: null,\n}\n\nconst hubConfigReducer = (state = initialState, action) => {\n switch (action.type) {\n case SET_HUB_CONFIG:\n const payload = {\n ...state,\n ...action.config,\n hubLogo: action.config.image_url || action.config.hubLogo,\n };\n delete payload.image_url;\n return payload;\n default:\n return state;\n }\n}\n\nexport default hubConfigReducer;","import companyConfig from \"./companyConfig\";\nimport layoutConfig from \"./layoutConfig\";\nimport dishConfig from \"./dishConfig\";\nimport digitalMenuConfig from \"./digitalMenuConfig\";\nimport editorsConfig from './editorsConfig';\nimport qrCodeExportConfig from './qrCodeExport';\n\nimport { combineReducers } from \"redux\";\nimport livePreview from \"./livePreviewReducer\";\nimport usersManagement from \"./usersReducer\";\nimport pdfConversation from './pdfAI';\nimport hubConfig from './hubConfig';\n\nconst allReducers = combineReducers({\n layoutConfig,\n companyConfig,\n dishConfig,\n digitalMenuConfig,\n editorsConfig,\n livePreview,\n qrCodeExportConfig,\n usersManagement,\n pdfConversation,\n hubConfig,\n});\n\nexport default allReducers;\n","import * as React from \"react\"\n\nfunction SvgComponent({id, props}) {\n return (\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n )\n}\n\nexport default SvgComponent\n","import React, { useEffect, useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport http from \"../../utils/http\";\nfunction ClientLogo(props) {\n const company_id = useSelector((state) => state.companyConfig.company_id);\n\n const [logoUrl, setLogoUrl] = useState('');\n\n /**\n * Assing public cookie to allow /public queries to fetch data for some amount of time\n */\n const assignPublicCookie = async () => {\n if (company_id) {\n await http.get(`/company/${company_id}/assign_token`);\n }\n };\n\n const getCompany = async () => {\n if (company_id) {\n const result = await http.get(`company/${company_id}`);\n setLogoUrl(result.data.payload.logo_url);\n }\n }\n\n useEffect(() => {\n assignPublicCookie();\n getCompany();\n }, [company_id]);\n\n if (logoUrl) {\n return (\n
\n \"An\n
\n )\n } else {\n return null;\n }\n}\n\nexport default ClientLogo;\n","import { defineMessages } from \"react-intl\";\n\nexport const PasswordResetTranslations = defineMessages({\n passwordResetSuccess: {\n id: \"PasswordReset.Success.Message\",\n defaultMessage: \"Sie haben Ihr Passwort erfolgreich geändert!\",\n },\n forgotPassword: {\n id: \"PasswordReset.Forgot.Text\",\n defaultMessage: \"Passwort vergessen?\",\n },\n subtitle: {\n id: \"PasswordReset.Sucess.Subtitle\",\n defaultMessage: \"Bitte melden Sie sich erneut an.\",\n },\n goToLogin: {\n id: \"PasswordReset.Success.Button\",\n defaultMessage: \"Zur Anmeldeseite gehen\",\n },\n passwordResetGenericError: {\n id: \"PasswordReset.Error.Message\",\n defaultMessage:\n \"Ein unerwarteter Fehler ist aufgetreten, bitte versuchen Sie es erneut oder kontaktieren Sie den Welcomy Kundensupport\",\n },\n passwordResetLengthError: {\n id: \"PasswordReset.Form.Action.Password.Error\",\n defaultMessage: \"Sie müssen zwischen 8 und 36 Zeichen verwenden.\",\n },\n tokenError: {\n id: \"PasswordReset.Form.Action.Token.Error\",\n defaultMessage:\n \"Ihr Token is ungültig, versuchen Sie es sp6ater noch einmal oder wenden Sie sich an den Welcomy Support.\",\n },\n title: {\n id: \"PasswordReset.Form.Title\",\n defaultMessage: \"Geben Sie die E-Mail-Adresse Ihres Welcomy-Kontos an.\",\n },\n submitError: {\n id: \"PasswordReset.Form.Action.Email.Error\",\n defaultMessage:\n \"Die angegebenen E-Mail-Adresse konnte keinem Welcomy-Konto zugeordnet werden.\",\n },\n submitSuccess: {\n id: \"PasswordReset.Form.Action.Email.Success\",\n defaultMessage:\n \"Wir haben Ihnen eine E-Mail zum Zurücksetzen des Passworts gesendet.\",\n },\n emailPlaceholder: {\n id: \"PasswordReset.Form.Action.Email.Text\",\n defaultMessage: \"E-mail-Adresse\",\n },\n inputNewPassword: {\n id: \"PasswordReset.Form.Input.NewPassword\",\n defaultMessage: \"Neues Passwort\",\n },\n inputRepeatPassword: {\n id: \"PasswordReset.Form.Input.RepeatNewPassword\",\n defaultMessage: \"Passwort wiederholen\",\n },\n passwordMatchError: {\n id: \"PasswordReset.Form.Error.Match\",\n defaultMessage: \"Passwörter sind nicht übereinstimmend.\",\n },\n saveButton: {\n id: \"PasswordReset.Form.Save\",\n defaultMessage: \"Neues Passwort speichern\",\n },\n pageTitle: {\n id: \"PasswordReset.Page.Title\",\n defaultMessage: \"Passwort zurücksetzen\",\n },\n});\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router-dom\";\nimport PasswordChecklist from \"react-password-checklist\"\n\nimport { configSetter } from \"../../redux/actions\";\nimport http from \"../../utils/http\";\nimport \"./login.scss\";\nimport Logo from '../../static/Logo';\nimport { getIntl } from \"../../utils/intl\";\n\nimport { Row, Col, Button, Typography, Alert, Space, Input } from \"antd\";\nimport { getCookie } from \"../../components/getCookie\";\nimport { cookieDomain } from \"../../utils/envs\";\nimport BusinessImageSrc from \"../../static/login-screen/screen.png\";\n\nimport { CheckCircleFilled } from '@ant-design/icons';\n\nimport ClientLogo from \"./ClientLogo\";\nimport { PasswordResetTranslations } from \"../PasswordReset/translations\";\n\nconst { Title, Text, Paragraph } = Typography;\n\nconst BusinessImg = () => (\n
\n \n
\n);\n\n// All of the verticals are now returning the same image for the right part of the\n// screen. This is to be more concise with our new B2B branding approach.\n// This logic will be kept in place in case we want to change the captured\n// screens in the future tho.\nconst BackgroundImage = ({vertical_id}) => {\n if (vertical_id) {\n switch (vertical_id) {\n case 1:\n return \n case 2:\n return \n case 3:\n return (\n \n );\n case 4:\n return (\n \n );\n default:\n return ;\n }\n }\n return ;\n}\n\nclass Login extends Component {\n constructor(props) {\n super(props);\n this.btnRef = React.createRef();\n this.emailPasswordReset = React.createRef(null);\n this.state = {\n email: \"\",\n password: \"\",\n confirmPassword: \"\",\n accessCode: \"\",\n error: false,\n domainError: \"\",\n errorMessage: \"\",\n domain: \"\",\n showSignup: false,\n signupValid: false,\n showPasswordReset: false,\n passwordResetError: null,\n passwordResetSuccess: false,\n };\n }\n\n componentDidUpdate(prevProps, prevState, snapshot) {\n const company_id = this.props.companyConfig.company_id;\n if (company_id && getCookie(\"_a\")) {\n if(this.props.companyConfig.super_account){\n this.props.history.push(\"/dashboard/sub-accounts\");\n }\n else{\n this.props.history.push(\"/dashboard\");\n }\n }\n }\n\n updateEmail = (e) => {\n const { value } = e.target;\n this.setState({\n email: value,\n });\n };\n\n updatePassword = (e) => {\n const { value } = e.target;\n this.setState({\n password: value,\n });\n };\n\n updateConfirmPassword = (e) => {\n const { value } = e.target;\n this.setState({\n confirmPassword: value,\n });\n };\n\n updateSignUpValid = (isValid) => {\n this.setState({\n signupValid: isValid,\n });\n };\n\n updateAccessCode = (e) => {\n const { value } = e.target;\n this.setState({\n accessCode: value,\n });\n };\n\n updateUrl = (e) => {\n const { value } = e.target;\n this.setState({\n domain: value,\n });\n };\n\n validateForm = (isSignup) => {\n const emailLength = this.state.email.length;\n const passwordLength = this.state.password.length;\n let allInputsWritten = emailLength > 0 && passwordLength > 0;\n if (isSignup) {\n const activationCode = this.state.accessCode.length;\n allInputsWritten = allInputsWritten && activationCode;\n if (!this.state.signupValid) {\n const intl = getIntl();\n const invalidInput = intl.formatMessage({ id: \"Signup.Error\" });\n this.setState({\n error: true,\n errorMessage: invalidInput,\n });\n return false;\n }\n }\n\n if (!allInputsWritten) {\n const intl = getIntl();\n const emptyCredentials = intl.formatMessage({\n id: \"Login.Error.Credentials.Empty\",\n defaultMessage: \"Bitte geben Sie Ihre Anmeldeinformationen an.\",\n });\n this.setState({\n error: true,\n errorMessage: emptyCredentials,\n });\n }\n\n return allInputsWritten;\n };\n\n doLogin = async (e) => {\n e.preventDefault();\n if (this.validateForm(false)) {\n const { history } = this.props;\n const { email, password } = this.state;\n const company_id = this.props.companyConfig.company_id;\n\n try {\n const result = await http.post(\"auth/login\", {\n email,\n password,\n company_id,\n });\n const { access_token, role } = result.data.payload;\n const user_id = result.data.payload.id;\n const domain = cookieDomain();\n document.cookie = `_a=${access_token};domain=${domain};path=/;`;\n document.cookie = `_c=${company_id};domain=${domain};path=/;`;\n document.cookie = `_u=${user_id};domain=${domain};path=/;`;\n document.cookie = `_ur=${role};domain=${domain};path=/;`;\n\n await this.fetchCompanyConfig();\n if(this.props.companyConfig.super_account){\n history.push(\"/dashboard/sub-accounts\");\n }\n else{\n history.push(\"/dashboard\");\n }\n } catch (error) {\n const { status } = error.response;\n if (status === 401) {\n const intl = getIntl();\n const invalidCredentials = intl.formatMessage({\n id: \"Login.Error.Credentials.Invalid\",\n defaultMessage:\n \"Fehler beim Anmelden. Bitte checken Sie Ihre Anmeldedaten. Falls Sie noch keinen Welcomy-Account haben, so registrieren Sie sich Bitte zuerst.\",\n });\n this.setState({\n error: true,\n errorMessage: invalidCredentials,\n });\n }\n }\n }\n };\n\n fetchCompanyConfig = async () => {\n let id = this.props.companyConfig.company_id || window.localStorage[\"_c\"];\n let default_name = \"New Company\";\n let default_logo_url = \"\";\n let default_sub_accounts = [];\n let default_super_account = false;\n let default_vertical_id = 0;\n try {\n const response = await http.get(`company/${id}`);\n const accountInfo = await http.get(`/company/${id}/account`);\n let { sub_accounts, super_account } = accountInfo.data.payload;\n default_sub_accounts = sub_accounts;\n default_super_account = super_account;\n\n let { name, logo_url, vertical_id, links, legal_entity } = response.data.payload;\n default_name = name === null ? default_name : name;\n default_logo_url = logo_url === null ? default_logo_url : logo_url;\n default_vertical_id =\n vertical_id === null ? default_vertical_id : parseInt(vertical_id);\n\n const domain = cookieDomain();\n document.cookie = `_v=${default_vertical_id};domain=${domain};path=/;`;\n\n const toBeSetted = {\n name: default_name,\n company_logo: default_logo_url,\n company_id: id,\n hasFetchedConfig: true,\n sub_accounts: default_sub_accounts,\n super_account: default_super_account,\n vertical_id: default_vertical_id,\n legalEntity: legal_entity,\n links: links,\n };\n\n this.props.dispatch(configSetter({ ...toBeSetted }));\n } catch (error) {\n console.error(error);\n }\n };\n\n doSignup = async (e) => {\n e.preventDefault();\n if (this.validateForm(true)) {\n const { email, password, accessCode } = this.state;\n const company_id = this.props.companyConfig.company_id;\n try {\n const result = await http.post(\"auth/signup\", {\n email,\n password,\n access_code: accessCode,\n company_id,\n });\n const { access_token, role } = result.data.payload;\n const user_id = result.data.payload.id;\n\n const domain = cookieDomain();\n\n document.cookie = `_a=${access_token};domain=${domain};path=/;`;\n document.cookie = `_c=${company_id};domain=${domain};path=/;`;\n document.cookie = `_u=${user_id};domain=${domain};path=/;`;\n document.cookie = `_ur=${role};domain=${domain};path=/;`;\n\n await this.fetchCompanyConfig();\n if(this.props.companyConfig.super_account){\n this.props.history.push(\"/dashboard/sub-accounts\");\n }\n else{\n this.props.history.push(\"/dashboard\");\n }\n } catch (error) {\n const { status } = error.response;\n if (status === 401) {\n // TODO: Needs Translation. 401 would be a result of invalid access code\n this.setState({\n error: true,\n errorMessage:\n \"Invalid credentials. Please check your credentials or sign up.\",\n });\n }\n // TODO: Need to handle 400\n }\n }\n };\n\n showSignup = () => {\n this.setState({\n showSignup: !this.state.showSignup,\n showPasswordReset: false,\n });\n };\n\n togglePasswordReset = (show) => {\n this.setState({\n showPasswordReset: show,\n showSignup: false,\n passwordResetError: null,\n passwordResetSuccess: false,\n });\n };\n\n extractCompanyFromURL = async (domain) => {\n let path = window.location.hostname.split(\".\")[0];\n if (domain) {\n path = domain;\n }\n if (path && path !== \"welcomyapp\" && path !== \"localhost\") {\n try {\n const result = await http.get(\"/company_path\", {\n params: {\n path,\n },\n });\n return true;\n } catch (error) {\n return error.response.status;\n }\n }\n return false;\n };\n\n hasCompanyDomain = () => {\n const path = window.location.hostname.split(\".\")[0];\n if (!path || path === \"welcomyapp\" || path === \"localhost\") return false;\n return path;\n };\n\n goToUrl = async (e) => {\n e.preventDefault();\n const { domain } = this.state;\n if (domain.trim() && domain.trim().length > 0) {\n // Check if company exists\n const existCompany = await this.extractCompanyFromURL(domain);\n if (existCompany === 404) {\n this.setState({\n domainError: true,\n errorMessage:\n \"We were not able to find your Welcomy workspace, please contact us.\",\n });\n } else if (existCompany) {\n const { protocol, host } = window.location;\n window.location = `${protocol}//${domain}.${host}`;\n }\n } else {\n this.setState({\n domainError: true,\n errorMessage: \"Please provide us with your workspace name.\",\n });\n }\n };\n\n doPasswordReset = async (e) => {\n e.preventDefault();\n const email = this.emailPasswordReset.current.value;\n try {\n const result = await http.post(`/auth/forgot_password`, {\n email,\n });\n console.log(result);\n\n // Remove any previous errors\n if (this.state.passwordResetError) {\n this.setState({\n passwordResetError: null,\n });\n }\n\n if (result.status >= 200 && result.status <= 299) {\n this.setState({\n passwordResetSuccess: true,\n });\n }\n } catch (error) {\n if (error.response.status === 400) {\n this.setState({\n passwordResetError: 'E-Mail konnte nicht gefunden werden',\n passwordResetSuccess: false,\n });\n }\n }\n };\n\n renderUrlPicker = () => {\n const hasDomain = this.hasCompanyDomain();\n const intl = getIntl();\n const greetingTitle = intl.formatMessage({\n id: \"Login.Greetings.Signup\",\n defaultMessage: \"Anmelden\",\n });\n const greetingText = intl.formatMessage({\n id: \"Login.Greetings.Text\",\n defaultMessage: \"Melden Sie sich hier mit Ihrem Welcomy-Account an.\",\n });\n const passwordResetSubtitle = intl.formatMessage(PasswordResetTranslations.title);\n const passwordResetPageTitle = intl.formatMessage(PasswordResetTranslations.pageTitle);\n const passwordResetEmailSent = intl.formatMessage(PasswordResetTranslations.submitSuccess);\n const workspaceText = intl.formatMessage({\n id: \"Login.Workspace.Text\",\n defaultMessage: \"Geben Sie den Namen Ihres Welcomy-Workspaces ein.\",\n });\n const workspacePlaceholder = intl.formatMessage({\n id: \"Login.Workspace.Placeholder\",\n defaultMessage: \"Ihr Welcomy-Workspace, z.B. MeinUnternehmen\",\n });\n const workspaceButton = intl.formatMessage({\n id: \"Continue\",\n defaultMessage: \"Weiter\",\n });\n const emailPlacholder = intl.formatMessage({\n id: \"Email.Address\",\n defaultMessage: \"E-mail-Adresse\",\n });\n const passwordPlaceholder = intl.formatMessage({\n id: \"Password\",\n defaultMessage: \"Passwort\",\n });\n const signupText = intl.formatMessage({\n id: \"Sign.Up\",\n defaultMessage: \"Registrieren\",\n });\n const signInText = intl.formatMessage({\n id: \"Sign.In\",\n defaultMessage: \"Anmelden\",\n });\n const registerText = intl.formatMessage({\n id: \"Login.Register.Text\",\n defaultMessage: \"Bitte geben Sie Ihre Daten für die Registrierung an.\",\n });\n if (!hasDomain) {\n return (\n \n \n {greetingTitle}\n \n \n {workspaceText}\n \n {this.state.domainError && (\n {this.state.errorMessage}\n )}\n
\n
\n \n \n
\n \n {workspaceButton}\n \n \n
\n );\n } else {\n return (\n \n \n {this.state.error && (\n {this.state.errorMessage}\n )}\n {!this.state.showSignup && !this.state.showPasswordReset && (\n <>\n \n {signInText}\n \n \n {greetingText}\n \n
\n \n \n \n \n \n this.togglePasswordReset(true)}\n >\n Passwort vergessen?\n \n \n \n \n \n \n \n {signInText}\n \n \n \n \n {signupText}\n \n \n \n \n \n )}\n\n {this.state.showSignup && !this.state.showPasswordReset && (\n <>\n \n {greetingTitle}\n \n \n {registerText}\n \n
\n \n\n \n \n \n {\n this.updateSignUpValid(isValid);\n }}\n />\n \n \n \n Weiter\n \n \n \n \n Zurück\n \n \n \n \n \n )}\n {!this.state.showSignup && this.state.showPasswordReset && (\n <>\n \n {passwordResetPageTitle}\n \n \n {passwordResetSubtitle}\n \n
\n {this.state.passwordResetSuccess && (\n \n \n \n \n \n \n {passwordResetEmailSent}\n \n \n \n )}\n \n {this.state.passwordResetError && (\n \n \n \n {this.state.passwordResetError}\n \n \n \n )}\n \n \n \n Weiter\n \n \n \n this.togglePasswordReset(false)}\n >\n Zurück\n \n \n \n \n \n )}\n
\n );\n }\n };\n\n render() {\n return (\n
\n \n \n
\n \n \n \n
\n
\n
\n \n \n \n
\n {this.renderUrlPicker()}\n
\n \n \n \n \n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n companyConfig: state.companyConfig,\n };\n};\n\nexport default withRouter(connect(mapStateToProps)(Login));\n","import React, { Component } from \"react\";\nimport { connect } from \"react-redux\";\nimport { IntlProvider } from \"react-intl\";\nimport German from \"../i18n/de.json\";\nimport English from \"../i18n/en.json\";\n// import Greek from \"../i18n/gr.json\";\nimport { configSetter } from \"../redux/actions\";\nimport { Spin } from \"antd\";\n\nconst { Provider, Consumer } = React.createContext();\n\nclass LanguagePicker extends Component {\n constructor(...args) {\n super(...args);\n\n this.messages = {\n de: German,\n en: English,\n // gr: Greek,\n pt: English,\n };\n\n this.switchToEnglish = () => {\n const locale = \"en\";\n this.setState({ locale: locale, messages: English });\n window.localStorage.setItem(\"_wl_locale\", locale);\n this.props.dispatch(\n configSetter({\n locale: locale,\n })\n );\n };\n this.switchToGerman = () => {\n const locale = \"de\";\n this.setState({ locale: locale, messages: German });\n window.localStorage.setItem(\"_wl_locale\", locale);\n this.props.dispatch(\n configSetter({\n locale: locale,\n })\n );\n };\n\n // this.switchToGreek = () => {\n // const locale = \"gr\";\n // this.setState({ locale: locale, messages: German });\n // window.localStorage.setItem(\"_wl_locale\", locale);\n // this.props.dispatch(\n // configSetter({\n // locale: locale,\n // })\n // );\n // };\n\n this.switchTo = (iso) => {\n const locale = iso;\n this.setState({ locale: locale, messages: this.messages[iso] });\n window.localStorage.setItem(\"_wl_locale\", locale);\n this.props.dispatch(\n configSetter({\n locale: locale,\n })\n );\n };\n\n this.state = {\n locale: \"de\",\n messages: German,\n switchToEnglish: this.switchToEnglish,\n switchToGerman: this.switchToGerman,\n // switchToGreek: this.switchToGreek,\n switchTo: this.switchTo,\n };\n }\n\n componentDidMount() {\n const locale = window.localStorage.getItem(\"_wl_locale\");\n if (locale && locale === \"en\") {\n this.setState({ locale: locale, messages: English });\n this.props.dispatch(\n configSetter({\n locale: locale,\n })\n );\n }\n // else if (locale && locale === \"gr\") {\n // this.setState({ locale: locale, messages: Greek });\n // this.props.dispatch(\n // configSetter({\n // locale: locale,\n // })\n // );\n // }\n else {\n this.setState({ locale: \"de\", messages: German });\n this.props.dispatch(\n configSetter({\n locale: \"de\",\n })\n );\n }\n }\n\n render() {\n const { children } = this.props;\n const { locale, messages } = this.state;\n return (\n \n \n {!this.props.companyConfig.locale &&\n \n }\n {this.props.companyConfig.locale && \n children\n }\n \n \n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n companyConfig: state.companyConfig,\n };\n};\n\nexport { Consumer as LanguagePickerConsumer };\nexport default connect(mapStateToProps)(LanguagePicker);\n","import React, { useEffect, useState } from 'react';\n\nimport moment from 'moment';\nimport { useSelector } from 'react-redux';\nimport { FormattedMessage } from 'react-intl';\nimport { getIntl } from \"../../utils/intl\";\nimport { LanguagePickerConsumer } from '../../components/LanguagePicker.jsx';\n\n\nimport { \n Button,\n Checkbox,\n Col,\n DatePicker,\n Dropdown,\n Form,\n Input,\n Menu,\n message,\n Row,\n Typography,\n} from 'antd';\n\nimport { GlobalOutlined } from '@ant-design/icons'\n\nimport http from '../../utils/http';\nimport WelcomyLogo from '../../static/Logo';\n\nconst { Title, Paragraph } = Typography\n\nfunction ReportEmergency(props) {\n const [hasCookie, setHasCookie] = useState(false);\n const companyConfig = useSelector((state) => state.companyConfig)\n const intl = getIntl();\n\n const languages = (\n \n {({ switchToEnglish, switchToGerman }) => (\n \n \n Deutsch\n \n \n English\n \n \n )}\n \n );\n\n useEffect(() => {\n assignPublicCookie();\n }, [companyConfig]);\n\n const assignPublicCookie = async () => {\n const { company_id } = companyConfig;\n if (company_id) {\n const response = await http.get(`/company/${company_id}/assign_token`);\n if (response.status === 201) {\n setHasCookie(true);\n }\n }\n }\n\n const onFinish = async (values) => {\n const { email, date, agreement } = values;\n\n if (agreement) {\n try {\n const response = await http.post('/emergencies', {\n email,\n event_date: date.utc().format('YYYY-MM-DD'),\n });\n \n if (response.status === 204) {\n message.success('Your emergency notification was received.');\n } else {\n message.error('Something went wrong, please try again later or contact Welcomy directly.');\n }\n } catch (error) {\n message.error('Something went wrong, please try again later or contact Welcomy directly.');\n }\n }\n };\n const disabledDate = (current) => {\n // Can not select days after today\n return current && current > moment().local().endOf(\"day\");\n };\n\n const dateOftest = intl.formatMessage(\n {\n id: \"Corona.DateTest\",\n defaultMessage: \"Datum des positiven Testergebnisses\"\n }\n );\n\n const pickerPlaceholder = intl.formatMessage(\n {\n id: \"SelectDate\",\n defaultMessage: \"Wählen Sie ein Datum\",\n }\n );\n\n const agreementRequired = intl.formatMessage(\n {\n id: \"Corona.Field.Agreement.Mandatory\",\n defaultMessage: \"Wir benötigen Ihre Zustimmung\"\n }\n );\n\n const emailInvalid = intl.formatMessage(\n {\n id: \"Corona.Field.Email.Invalid\",\n defaultMessage: \"'${label} ist keine valide E-mails\",\n }\n );\n\n const dateInvalid = intl.formatMessage(\n {\n id: \"Corona.Field.Date.Invalid\",\n defaultMessage: \"'${label}' ist keine valide Datumsangabe\",\n }\n );\n\n const fieldRequired = intl.formatMessage(\n {\n id: \"Field.Mandatory\",\n defaultMessage: \"'${label}' ist ein Pflichtfeld\",\n }\n );\n\n const validateMessages = {\n required: fieldRequired,\n types: {\n email: emailInvalid,\n date: dateInvalid,\n },\n };\n\n\n return (\n
\n \n \n \n \n \n \n \n e.preventDefault()} trigger=\"click\">\n \n \n \n \n \n \n \n <FormattedMessage id=\"Corona.Title\"\n defaultMessage=\"COVID-19 Infektionsmeldung\">\n </FormattedMessage>\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 value ? Promise.resolve() : Promise.reject(new Error(agreementRequired)),\n },\n ]}\n >\n \n agreement, agb: AGBs}}\n />\n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nexport default ReportEmergency;","import http from '../../utils/http';\n\nconst assignPublicCookie = async (company_id, callback) => {\n if (company_id) {\n const response = await http.get(`/company/${company_id}/assign_token`);\n if (callback) {\n callback(response);\n }\n }\n}\n\n\nexport { assignPublicCookie };\n","import { Button, Col, Form, Input, Result, Row, Typography } from 'antd';\nimport React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport { useHistory } from 'react-router';\nimport http from '../../utils/http';\nimport { assignPublicCookie } from '../Utils/cookies';\n\nconst { Title, Paragraph } = Typography;\n\n\nconst UnsubscribeForm = ({ companyName, onFinish }) => {\n const validateMessages = {\n required: 'E-mail ist ein Pflichtfeld',\n types: {\n email: 'E-mail ist keine valide E-mail',\n },\n };\n\n return (\n <>\n \n \n \n {companyName}\n \n \n Geben Sie nun Ihre E-Mail-Adresse an,\n \n \n damit wir Sie automatisch aus der Mailingliste entfernen können.\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n};\n\nconst UnsubscribeSuccess = () => {\n const history = useHistory();\n const goMainPage = () => {\n history.push(\"/public/welcome/form\");\n };\n\n return (\n <>\n \n \n \n Zur App-Startseite\n ,\n ]}\n />\n \n \n \n );\n};\n\n\nfunction UnsubscribePage() {\n const companyId = useSelector(state => state.companyConfig.company_id);\n const companyName = useSelector(state => state.companyConfig.name);\n const [isUnsubscribed, setIsUnsubscribed] = useState(false);\n\n useEffect(() => {\n const setCookie = async () => {await assignPublicCookie(companyId)};\n setCookie();\n }, [companyId]);\n\n const onFinish = async (values) => {\n try {\n const result = await http.post(`/unsubscribe`, {\n email: values.email,\n });\n const {status} = result;\n if (status >= 200 && status < 300) {\n setIsUnsubscribed(true);\n }\n } catch (error) {\n console.log(error);\n }\n };\n\n return (\n
\n \n \n \n {!isUnsubscribed && (\n \n )}\n {isUnsubscribed && \n\n }\n \n \n \n
\n );\n}\n\nexport default UnsubscribePage;","import React, { useEffect, useRef, useState } from \"react\";\nimport { Button, Col, Form, Input, Result, Row, Typography } from \"antd\";\nimport { useQuery } from \"../../hooks/useQuery\";\nimport Logo from \"../../static/Logo\";\nimport { useForm } from \"antd/lib/form/Form\";\nimport http from \"../../utils/http\";\nimport { useHistory } from \"react-router-dom\";\nimport { getIntl } from \"../../utils/intl\";\nimport { PasswordResetTranslations as messages} from \"./translations\";\n\nconst { Title, Paragraph } = Typography;\n\nfunction PasswordReset(props) {\n const tokenRef = useRef(null);\n const [tokenError, setTokenError] = useState(null);\n const [passwordSuccess, setPasswordSuccess] = useState(false);\n const [passwordError, setPasswordError] = useState(null);\n const query = useQuery();\n const history = useHistory();\n const [form] = useForm();\n const translation = getIntl();\n\n\n useEffect(() => {\n const token = query.get(\"tk\");\n if (!token) {\n setTokenError(\n translation.formatMessage(messages.tokenError)\n );\n } else {\n tokenRef.current = token;\n }\n }, []);\n\n const submitPassword = async () => {\n const { newPassword, repeatNewPassword } = form.getFieldsValue();\n\n if (newPassword !== repeatNewPassword) {\n setPasswordError(translation.formatMessage(messages.passwordMatchError));\n } else {\n setPasswordError(null);\n try {\n const result = await http.post(\"/auth/reset_password\", {\n password: newPassword,\n token: tokenRef.current,\n });\n\n if (result.status >= 200 && result.status <= 299) {\n setPasswordSuccess(true);\n }\n } catch (error) {\n if (error?.response?.data?.error) {\n const { password: passwordErrorMessage } = error.response.data.error;\n if (passwordErrorMessage === \"Length must be between 8 and 36.\") {\n setPasswordError(translation.formatMessage(messages.passwordResetLengthError));\n } else {\n setPasswordError(passwordErrorMessage);\n }\n } else {\n setPasswordError(\n translation.formatMessage(messages.passwordResetGenericError)\n );\n }\n }\n }\n };\n\n return (\n
\n \n \n \n
\n
\n
\n \n
\n {translation.formatMessage(messages.pageTitle)}\n {tokenError && (\n {tokenError}\n )}\n {!tokenError && !passwordSuccess && (\n \n \n \n \n \n \n \n {passwordError && (\n {passwordError}\n )}\n \n \n )}\n {!tokenError && passwordSuccess && (\n history.push(\"/login\")}>\n {translation.formatMessage(messages.goToLogin)}\n \n }\n />\n )}\n
\n
\n \n \n
\n
\n );\n}\n\nexport default PasswordReset;\n","import React from 'react';\nimport { useLocation } from 'react-router-dom'\n\nexport const useQuery = () => {\n const { search } = useLocation();\n\n return React.useMemo(() => new URLSearchParams(search), [search]);\n}\n","import React, { useEffect, useState, Suspense, useRef } from \"react\";\nimport { useSelector, useDispatch, batch } from \"react-redux\";\nimport http from \"../utils/http\";\n\nimport {\n BrowserRouter as Router,\n Switch,\n Route,\n Redirect,\n} from \"react-router-dom\";\n\nimport {\n configSetter,\n digitalMenuUrlSetter,\n digitalMenuTypeSetter,\n } from \"../redux/actions\";\n\nimport Login from \"../pages/login\";\nimport ReportEmergency from \"../pages/ReportEmergency\";\nimport PageNotfound from \"../pages/PageNotFound\";\nimport UnsubscribePage from \"../pages/Unsubscribe\";\nimport { getCookie } from \"./getCookie\";\nimport PasswordReset from \"../pages/PasswordReset/PasswordReset\";\nimport { Spin } from \"antd\";\n\n\nconst Tablet = React.lazy(() => import(\"../pages/Tablet\"));\n\nconst hasAllTokens = (prevState) => {\n const c = getCookie(\"_c\"); // Company Id\n const v = getCookie(\"_v\"); // Company Vertical\n const a = getCookie(\"_a\"); // Access Token\n const ur = getCookie(\"_ur\"); // User Role Token\n if (!c || !a || !v || !ur) return false;\n return c.length > 0 && a.length > 0 && v.length > 0 && ur.length > 0;\n};\n\nconst hasSubdomain = (str) => {\n /**\n * www prefix is optional, subdomain is mandatory to pass regex test.\n */\n const regex = /^(?:www\\.)?(?!www\\..*$)(?=[a-zA-Z0-9-]+\\.[a-zA-Z]{2,})(?:[a-zA-Z0-9-]+\\.){1,}[a-zA-Z0-9-]+\\.[a-zA-Z]{2,}$/\n\n return regex.test(str);\n};\n\nconst Auth = React.memo((props) => {\n const companyConfig = useSelector((state) => state.companyConfig);\n const dispatch = useDispatch();\n let step = useRef('initial');\n const [hasError, errorSetter] = useState(null);\n let isLogged = hasAllTokens();\n useEffect(() => {\n if (hasError === null) {\n getConfig();\n }\n }, [companyConfig.company_id]);\n const extractCompanyFromURL = async () => {\n const path = window.location.hostname.split(\".\")[0];\n if (path && path !== \"welcomyapp\" && path !== \"localhost\") {\n try {\n const result = await http.get(\"/company_path\", {\n params: {\n path,\n },\n });\n return result.data.payload;\n } catch (error) {\n console.error(error);\n }\n }\n };\n\n const menuExists = async (companyId) => {\n const result = await http.get(`gastro/${companyId}/menu`);\n const hasStaticOrMenu = Object.keys(result.data.payload).length > 0;\n if (hasStaticOrMenu) {\n let menuType = result.data.payload;\n let value;\n if (typeof menuType.menu_url !== 'undefined') {\n batch(() => {\n dispatch(digitalMenuUrlSetter(result.data.payload.menu_url));\n dispatch(digitalMenuTypeSetter('pdf'));\n });\n } else {\n dispatch(digitalMenuTypeSetter('digital'));\n }\n }\n };\n\n const getConfig = async () => {\n try {\n let id = companyConfig.company_id || getCookie[\"_c\"];\n let vertical = companyConfig.vertical_id || getCookie[\"_v\"];\n let hasFetchedConfig = companyConfig.hasFetchedConfig || false;\n let hasFetchedId = companyConfig.hasFetchedId || false;\n\n if (typeof id === \"undefined\") {\n let result = await extractCompanyFromURL();\n if (!result){\n return;\n }\n id = result.id;\n vertical = result.vertical.id;\n }\n\n if (vertical && (vertical === 3 || vertical === 4)){\n await menuExists(id);\n }\n\n // IN CASE WE ARE IN LOGIN SCREEN\n // FETCH ID AND SKIP\n if (id && window.location.pathname.includes(\"login\") && !hasFetchedId) {\n step.current = 'fetched_id';\n dispatch(configSetter(\n {\n company_id: id,\n hasFetchedId: true,\n vertical_id: vertical,\n }\n ));\n return;\n }\n\n // FALLBACK IN CASE CONFIG WAS NOT SET BY LOGIN PROCESS OR IN CASE\n // OF PAGE REFRESH\n if (!hasFetchedConfig ) {\n step.current = 'fetched_config';\n let default_name = \"New Company\";\n let default_logo_url = \"\";\n let default_short_link = \"\"\n let default_sub_accounts = [];\n let default_super_account = false;\n let languageId = 1; // GERMAN\n let langISO = 'de';\n let langName = 'Deutsch'\n let default_links = [];\n let amplId = '';\n let defaultLegalEntity = '';\n\n let _language = {\n id: languageId,\n iso_code: langISO,\n name: langName,\n };\n\n const isPublic = window.location.pathname.includes(\"public\");\n\n let toBeSetted = {};\n\n if (id && (isLogged || isPublic)) {\n const configResponse = await http.get(`/company/${id}`);\n\n if (!isPublic) {\n const accountInfo = await http.get(`/company/${id}/account`);\n let { sub_accounts, super_account} = accountInfo.data.payload;\n\n // For not exposing super accounts to the public,\n // this is setted here\n toBeSetted.sub_accounts = sub_accounts ? sub_accounts : default_sub_accounts;\n toBeSetted.super_account = super_account ? super_account : default_super_account;\n\n }\n let { name, logo_url, checkin_short_url, language_id, iso_code, language, links, ampl_id, legal_entity } = configResponse.data.payload;\n default_name = name === null ? default_name : name;\n default_logo_url = logo_url === null ? default_logo_url : logo_url;\n default_short_link = checkin_short_url === null ? default_short_link : checkin_short_url;\n default_links = links.length === 0 ? default_links : links;\n amplId = ampl_id || amplId\n defaultLegalEntity = legal_entity || defaultLegalEntity;\n\n // Setting up supported language by the company\n if (typeof language_id !== 'undefined' && typeof iso_code !== 'undefined' && typeof language !== 'undefined') {\n _language = {\n id: language_id,\n iso_code: iso_code,\n name: language,\n };\n }\n }\n\n if (!companyConfig.company_id) {\n toBeSetted = {\n ...toBeSetted,\n name: default_name,\n company_logo: default_logo_url,\n company_id: id,\n hasFetchedConfig: true,\n short_link: default_short_link,\n language: _language,\n vertical_id: parseInt(vertical),\n links: default_links,\n amplId: amplId,\n legalEntity: defaultLegalEntity,\n };\n } else {\n toBeSetted = {\n ...toBeSetted,\n name: default_name,\n company_logo: default_logo_url,\n hasFetchedConfig: true,\n short_link: default_short_link,\n language: _language,\n vertical_id: parseInt(vertical),\n links: default_links,\n amplId: amplId,\n legalEntity: defaultLegalEntity,\n };\n }\n dispatch(configSetter({ ...toBeSetted }));\n\n }\n } catch (error) {\n console.error(error);\n if (error.response && error.response.status !== 401) errorSetter(error);\n else console.error(error);\n }\n };\n\n function PrivateRoute({ children, ...rest }) {\n if (\n (!companyConfig.hasFetchedConfig) &&\n (step.current === \"initial\" || step.current === \"fetched_id\") &&\n hasSubdomain(window.location.hostname)\n ) {\n return (\n \n );\n }\n\n if (!companyConfig.hasFetchedConfig) {\n return (\n (\n \n )}\n />\n );\n }\n\n if (companyConfig.hasFetchedConfig) {\n return (\n {\n return isLogged ? (\n children\n ) : (\n \n );\n }}\n />\n );\n }\n }\n\n return (\n \n Loading...}>\n \n \n {props.children}\n {(hasError !== null) &
Server down
}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n
\n
\n );\n});\n\nexport default Auth;\n","import { Modal, Spin, Typography } from 'antd';\nimport React from 'react';\nimport { FormattedMessage } from 'react-intl';\n\nconst { Paragraph, Title } = Typography;\n\nfunction QrCodeLoadingModal({isLoadingQR}) {\n return (\n
\n \n \n \n <FormattedMessage\n id=\"SetupPage.Modal.Title\"\n defaultMessage=\"Ihr individueller QR Code wird generiert\"\n ></FormattedMessage>\n \n \n \n \n \n \n \n
\n );\n}\n\nexport default QrCodeLoadingModal;\n","import { DoubleLeftOutlined, PlusSquareOutlined } from \"@ant-design/icons\";\nimport { Button, Cascader, Col, Row, Space, Divider } from \"antd\";\nimport React from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { cookieDomain, isAllSuperAccount } from \"../../utils/envs\";\nimport { getIntl } from \"../../utils/intl\";\nimport { getCookie } from \"../getCookie\";\n\nfunction AccountSelector({ options = [], accounts = {}, ...props }) {\n const intl = getIntl();\n const _options = [...options];\n\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const verticalId = useSelector((state) => state.companyConfig.vertical_id);\n const name = useSelector((state) => state.companyConfig.name);\n const superAccount = useSelector(\n (state) => state.companyConfig.super_account\n );\n const userRole = getCookie(\"_ur\");\n const superPath = getCookie(\"_super_path\");\n const isAdmin = userRole === 'admin';\n const isSuperAccount = isAllSuperAccount(superAccount);\n\n const SubAccountsText = intl.formatMessage({\n id: \"SideMenu.SubMenu.Subaccounts.placeholder\",\n defaultMessage: \"Bitte wählen\",\n });\n\n const accountSeletorTitle = intl.formatMessage({\n id: \"SideMenu.SubMenu.Subaccounts.Title\",\n defaultMessage: \"Hub auswählen\",\n });\n\n const subAccountBackButton = intl.formatMessage({\n id: \"SideMenu.SubMenu.Subaccounts.Button.Back\",\n defaultMessage: \"Zur Accountübersicht\",\n });\n\n\n \n const changeToAccount = (selectedAccount, _, toMainAccount = false) => {\n const domain = cookieDomain();\n const _selectedAccount = selectedAccount[0];\n const cookieChange = (accountData) => {\n document.cookie = `_c=${accountData.id};domain=${domain};path=/;`;\n document.cookie = `_v=${accountData.vertical};domain=${domain};path=/;`;\n if (isSuperAccount) {\n document.cookie = `_super_name=${name};domain=${domain};path=/;`;\n /**\n * Subdomains cannot be multilevel in order for this to work (multiple dots).\n */\n document.cookie = `_super_path=${\n window.location.hostname.split(\".\")[0]\n };domain=${domain};path=/;`;\n document.cookie = `_super_c=${companyId};domain=${domain};path=/;`;\n document.cookie = `_super_v=${verticalId};domain=${domain};path=/;`;\n } else {\n document.cookie = `_super_name=${name};path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n /**\n * Subdomains cannot be multilevel in order for this to work (multiple dots).\n */\n document.cookie = `_super_path=${\n window.location.hostname.split(\".\")[0]\n };domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;`;\n document.cookie = `_super_c=${companyId};path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n document.cookie = `_super_v=${verticalId};path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n }\n let path = 'dashboard';\n if (toMainAccount){\n path = 'dashboard/sub-accounts'\n }\n if (domain === \".localhost.com\") {\n window.location = `http://${accountData.path}.localhost.com:3000/${path}`;\n } else {\n window.location = `http://${accountData.path}.welcomyapp.com/${path}`;\n }\n }\n\n if (toMainAccount) {\n cookieChange(_selectedAccount);\n } else if (accounts[_selectedAccount]) {\n cookieChange(accounts[_selectedAccount]);\n }\n };\n\n\n const backToMainAccount = () => {\n const superName = getCookie(\"_super_name\");\n const superPath = getCookie(\"_super_path\");\n const superId = getCookie(\"_super_c\");\n const superVertical = getCookie(\"_super_v\");\n changeToAccount(\n [{\n name: superName,\n id: superId,\n vertical: superVertical,\n path: superPath,\n }], {}, true);\n };\n if (superAccount === null) return null;\n else if (isSuperAccount && isAdmin) {\n return (\n \n \n \n {accountSeletorTitle}\n \n \n \n \n \n \n \n );\n } else if (!isSuperAccount && isAdmin && superPath) {\n return (\n \n \n \n {accountSeletorTitle}\n \n
\n }\n block\n >\n {subAccountBackButton}\n \n
\n \n \n
\n );\n } else return null;\n\n}\n\nexport default AccountSelector;\n","import React from 'react';\nimport { Modal } from 'antd';\n\nfunction ModalWrapper({\n title,\n visible,\n onOk,\n onCancel,\n okText,\n cancelText,\n okButtonProps,\n cancelButtonProps,\n confirmLoading,\n bodyStyle,\n width,\n ...props\n}) {\n return (\n
\n \n { props.children }\n \n
\n );\n}\n\nexport default ModalWrapper;","import jsPDF from \"jspdf\";\nimport QRtemplate from \"../../static/qr_code_template.png\";\nimport { getIntl } from \"../../utils/intl\";\nimport { displayNotification } from \"../Notification\";\nimport http from \"../../utils/http\";\n\n\nconst getBase64 = (img, callback) => {\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => callback(reader.result));\n reader.readAsDataURL(img);\n}\n\nexport const newDimensions = (width, height, maxWidth=50, maxHeight=50) => {\n let ratio = 0; // Used for aspect ratio\n\n let newWidth = width, newHeight = height;\n\n // Check if the current width is larger than the max\n if(width > maxWidth){\n ratio = maxWidth / width; // get ratio for scaling image\n newWidth = maxWidth; // Set new width\n newHeight = height * ratio; // Scale height based on ratio\n\n height = height * ratio; // Reset height to match scaled image\n width = width * ratio; // Reset width to match scaled image\n }\n\n // Check if current height is larger than max\n if(height > maxHeight){\n ratio = maxHeight / height; // get ratio for scaling image\n newHeight = maxHeight; // Set new height\n newWidth = width * ratio; // Scale width based on ratio\n\n width = width * ratio; // Reset width to match scaled image\n height = height * ratio; // Reset height to match scaled image\n }\n return [ parseInt(newWidth.toFixed(0)), parseInt(newHeight.toFixed(0))];\n\n} \n\n\n /**\n * Conserve aspect ratio of the original region. Useful when shrinking/enlarging\n * images to fit into a certain area.\n *\n * @param {Number} srcWidth width of source image\n * @param {Number} srcHeight height of source image\n * @param {Number} maxWidth maximum available width\n * @param {Number} maxHeight maximum available height\n * @return {Object} { width, height }\n */\n export const calculateAspectRatioFit = (srcWidth, srcHeight, maxWidth, maxHeight) => {\n\n var ratio = Math.min(maxWidth / srcWidth, maxHeight / srcHeight);\n\n return { width: srcWidth*ratio, height: srcHeight*ratio };\n}\n\n\nexport const generateQRCodeTemplate = async (company_logo, short_link, toggleLoading) => {\n const intl = getIntl();\n\n toggleLoading();\n let logo;\n try {\n logo = await http.get(company_logo, {\n responseType: \"blob\",\n });\n\n // QR CODE is hidden in the DOM in order to make it work.\n const canvas = document.getElementById(\"qr-code-to-pdf\");\n const qrDraw = canvas.toDataURL(\"image/jpeg\", 1);\n\n // Default export is a4 paper, portrait, using millimeters for units\n const mime = logo.data.type;\n getBase64(logo.data, (b64) => {\n let img = new Image();\n img.onload = function () {\n const [logoWidth, logoHeight] = newDimensions(\n img.width,\n img.height,\n 40,\n 40\n );\n const [qrWidth, qrHeight] = newDimensions(800, 800, 180, 240);\n\n const doc = new jsPDF();\n doc.addImage(QRtemplate, \"PNG\", 0, 0, 210, 297);\n\n doc.addImage(img, mime, 105 - logoWidth / 2, 25, logoWidth, logoHeight);\n doc.addImage(\n qrDraw,\n \"image/jpeg\",\n 105 - qrWidth / 2,\n 70,\n qrWidth,\n qrHeight\n );\n if (short_link) {\n doc.setFont(\"Helvetica\", \"normal\", \"normal\");\n doc.setFontSize(28);\n doc.text(\"Oder nutzen Sie den folgenden Link:\", 27, qrHeight + 81);\n doc.setFont(\"Helvetica\", \"bold\");\n doc.text(short_link, 50, qrHeight + 95);\n }\n doc.save(\"Welcomy - QR Code.pdf\");\n toggleLoading();\n };\n\n img.src = b64;\n });\n } catch (error) {\n const errorTitle = intl.formatMessage({\n id: \"Error\",\n defaultMessage: \"Etwas ist schief gelaufen!\",\n });\n console.log(error);\n toggleLoading(false);\n displayNotification(\"error\", errorTitle, \"\");\n }\n};\n\nexport const generateSimpleQrCode = async () => {\n // QR CODE is hidden in the DOM in order to make it work.\n const canvas = document.getElementById(\"qr-code-to-pdf\");\n const qrDraw = canvas.toDataURL(\"image/jpeg\", 1);\n const [qrWidth, qrHeight] = newDimensions(400, 400, 80, 140);\n\n const doc = new jsPDF();\n doc.addImage(\n qrDraw,\n \"image/jpeg\",\n 105 - qrWidth / 2,\n 70,\n qrWidth,\n qrHeight\n );\n\n doc.save(\"Welcomy - QR Code.pdf\");\n\n};\n\n\n\n","import { calculateAspectRatioFit, newDimensions } from \"../../QrCode\";\n\n/**\n * THIS WILL DELETE EVERYTHING PREVIOUSLY DRAWN TO THE CANVAS\n *\n * MAKE SURE TO GET THE CORRECT SIZE AND POSITIONS BEFORE PUTTING CONTENT\n * TO THE CANVAS!!\n */\nexport const getFontSizeCanvas = (\n ctx,\n text,\n textAreaWidth = 60,\n canvasWidth = 150,\n canvasHeight = 200\n) => {\n ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\n // Initial font size\n var fontSize = 100;\n\n // Set a maximum number of iterations to prevent infinite loop\n var maxIterations = 100;\n var iteration = 0;\n\n // Loop until the text fits in the text area\n while (iteration < maxIterations) {\n ctx.font = \"bold \" + fontSize + \"px Arial\";\n\n // Measure the width of the text\n var textWidth = ctx.measureText(text).width;\n if (textWidth <= textAreaWidth) {\n // If text fits, break out of the loop\n break;\n }\n\n // Decrease font size and try again\n fontSize--;\n iteration++;\n }\n\n // Draw the text\n // ctx.fillText(text, posWidth, posHeight);\n return fontSize;\n};\n\nexport const drawBusinessCardPreview = (\n type,\n canvasBoundries,\n shortLink,\n ctx,\n CARDS_BGS,\n companyLogo,\n logoSize,\n background\n) => {\n // setting up qr code\n const canvasQr = document.getElementById(`qr-template-${type}`);\n\n const qrWidth = 80;\n const qrHeight = 80;\n const qrTop = 25;\n\n const qrX = (canvasBoundries.x - qrWidth) / 2;\n const qrY = qrTop;\n\n let txtTop = qrTop + qrHeight;\n if (shortLink) {\n // Set up short URL text\n ctx.fillStyle = CARDS_BGS[type].fg;\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n\n /**\n * THIS WILL DELETE EVERYTHING PREVIOUSLY DRAWN TO THE CANVAS\n */\n const fontSize = getFontSizeCanvas(\n ctx,\n shortLink,\n qrWidth,\n canvasBoundries.x,\n canvasBoundries.y\n );\n ctx.font = `bold ${fontSize}px Arial`;\n const textMetrics = ctx.measureText(shortLink);\n const txtHeight =\n textMetrics.actualBoundingBoxAscent +\n textMetrics.actualBoundingBoxDescent;\n txtTop += txtHeight;\n const textX = (canvasBoundries.x - textMetrics.width) / 2;\n\n // Set up company logo\n const logo = new Image();\n logo.crossOrigin = \"anonymous\";\n logo.src = companyLogo;\n logo.onload = () => {\n const [logoWidth, logoHeight] = newDimensions(\n logoSize.width ? logoSize.width : logo.naturalWidth,\n logoSize.height ? logoSize.height : logo.naturalHeight,\n logoSize.maxWidth,\n logoSize.maxHeight\n );\n\n const logoTop = txtTop + 20;\n const logoX = (canvasBoundries.x - logoWidth) / 2;\n ctx.drawImage(background, 0, 0, canvasBoundries.x, canvasBoundries.y);\n ctx.drawImage(canvasQr, qrX, qrY, qrWidth, qrHeight);\n ctx.fillText(shortLink, textX, txtTop);\n ctx.drawImage(logo, logoX, logoTop, logoWidth, logoHeight);\n };\n }\n};\n\nexport const drawBusinessCardForDownload = (\n type,\n canvasBoundries,\n shortLink,\n ctx,\n CARDS_BGS,\n companyLogo,\n logoSize,\n background,\n callback\n) => {\n // setting up qr code\n const canvasQr = document.getElementById(`qr-template-${type}`);\n\n const qrWidth = 700;\n const qrHeight = 700;\n const qrTop = 250;\n\n const qrX = (canvasBoundries.x - qrWidth) / 2;\n const qrY = qrTop;\n\n let txtTop = qrTop + qrHeight;\n if (shortLink) {\n // Set up short URL text\n ctx.fillStyle = CARDS_BGS[type].fg;\n ctx.textAlign = \"left\";\n ctx.textBaseline = \"middle\";\n\n /**\n * THIS WILL DELETE EVERYTHING PREVIOUSLY DRAWN TO THE CANVAS\n */\n const fontSize = getFontSizeCanvas(\n ctx,\n shortLink,\n qrWidth,\n canvasBoundries.x,\n canvasBoundries.y\n );\n ctx.font = `bold ${fontSize}px Arial`;\n const textMetrics = ctx.measureText(shortLink);\n const txtHeight =\n textMetrics.actualBoundingBoxAscent +\n textMetrics.actualBoundingBoxDescent;\n txtTop += txtHeight;\n const textX = (canvasBoundries.x - textMetrics.width) / 2;\n\n // Set up company logo\n const logo = new Image();\n logo.crossOrigin = \"anonymous\";\n logo.src = companyLogo;\n logo.onload = () => {\n const { width: logoWidth, height: logoHeight } = calculateAspectRatioFit(\n logo.naturalWidth,\n logo.naturalHeight,\n logoSize.maxWidth,\n logoSize.maxHeight\n );\n\n const logoTop = txtTop + 200;\n const logoX = (canvasBoundries.x - logoWidth) / 2;\n ctx.drawImage(background, 0, 0, canvasBoundries.x, canvasBoundries.y);\n ctx.drawImage(canvasQr, qrX, qrY, qrWidth, qrHeight);\n ctx.fillText(shortLink, textX, txtTop);\n ctx.drawImage(logo, logoX, logoTop, logoWidth, logoHeight);\n\n if (callback) callback();\n };\n }\n};\n","import { newDimensions } from \"../../QrCode\";\n\nimport vcardDarkBg from \"../../../static/vcard-bgs/grey-a8a8a8.png\";\nimport vcardWhiteBg from \"../../../static/vcard-bgs/white-f1f1f1.png\";\nimport {\n drawBusinessCardForDownload,\n drawBusinessCardPreview,\n} from \"../draw/draw\";\n\nexport const CARDS_BGS = {\n QR_CODE_WHITE_CARD: { image: vcardWhiteBg, bg: \"transparent\", fg: \"#000\" },\n QR_CODE_DARK_CARD: { image: vcardDarkBg, bg: \"transparent\", fg: \"#F9F9F9\" },\n};\n\nconst ORIGINAL_BG_DIMENSIONS = {\n // in pixels\n width: 1109,\n height: 1720,\n};\n\nexport const qrCodeVCardRender = (\n ctx,\n canvas,\n type,\n companyLogo,\n shortLink,\n canvasBoundries,\n logoSize = {\n maxWidth: 50,\n maxHeight: 50,\n },\n preview = true,\n callback\n) => {\n const backgroundUrl = CARDS_BGS[type].image;\n const background = new Image();\n background.src = backgroundUrl;\n // setting up card background\n background.onload = () => {\n if (preview) {\n drawBusinessCardPreview(\n type,\n canvasBoundries,\n shortLink,\n ctx,\n CARDS_BGS,\n companyLogo,\n logoSize,\n background\n );\n } else {\n drawBusinessCardForDownload(\n type,\n canvasBoundries,\n shortLink,\n ctx,\n CARDS_BGS,\n companyLogo,\n logoSize,\n background,\n callback\n );\n }\n };\n};\n\nexport const downloadPngQRCode = (callback) => {\n const canvasQr = document.getElementById(\"qr-code-to-pdf\");\n const [qrWidth, qrHeight] = newDimensions(800, 800, 600, 600);\n const qrX = (800 - qrWidth) / 2;\n const qrY = (800 - qrHeight) / 2;\n const newCanvas = document.createElement(\"canvas\");\n const ctx = newCanvas.getContext(\"2d\");\n newCanvas.width = 800;\n newCanvas.height = 800;\n ctx.drawImage(canvasQr, qrX, qrY, qrWidth, qrHeight);\n\n const newImageUrl = newCanvas.toDataURL(\"image/png\", 1.0);\n\n const link = document.createElement(\"a\");\n link.href = newImageUrl;\n link.download = \"myqr.png\";\n link.click();\n link.remove();\n newCanvas.remove();\n\n if (callback) {\n callback();\n }\n};\n\nexport const downloadVCardQrCode = (type, companyLogo, shortLink, callback) => {\n const newCanvas = document.createElement(\"canvas\");\n const ctx = newCanvas.getContext(\"2d\");\n newCanvas.width = ORIGINAL_BG_DIMENSIONS.width;\n newCanvas.height = ORIGINAL_BG_DIMENSIONS.height;\n\n const _download = () => {\n const newImageUrl = newCanvas.toDataURL(\"image/png\", 1.0);\n const link = document.createElement(\"a\");\n link.href = newImageUrl;\n link.download = \"myVCard.png\";\n link.click();\n link.remove();\n newCanvas.remove();\n };\n\n qrCodeVCardRender(\n ctx,\n newCanvas,\n type,\n companyLogo,\n shortLink,\n { x: ORIGINAL_BG_DIMENSIONS.width, y: ORIGINAL_BG_DIMENSIONS.height },\n { maxWidth: 450, maxHeight: 450 },\n false,\n _download\n );\n if (callback) {\n callback();\n }\n};\n","import QRcode from \"qrcode.react\";\nimport React, { useEffect, useRef } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { qrCodeExportTrigger } from \"../../redux/actions/qrCodeExport\";\nimport { newDimensions } from \"../QrCode\";\nimport { QR_CODE_PNG_TRANSPARENT_BG } from \"./QRCodePicker\";\n\nimport {\n CARDS_BGS,\n downloadPngQRCode,\n downloadVCardQrCode,\n qrCodeVCardRender,\n} from \"./qr-code/QrCodeUtils\";\n\nconst MINI_CANVAS_SIZE = { x: 150, y: 200 };\nconst MINI_CANVAS_BOUNDRIES = { x: 145, y: 195 };\n\nconst useCanvas = (callback) => {\n const canvasRef = useRef(null);\n\n useEffect(() => {\n const canvas = canvasRef.current;\n const ctx = canvas.getContext(\"2d\");\n callback([canvas, ctx]);\n }, []);\n\n return canvasRef;\n};\n\nconst QrTemplate = ({ type, ...props }) => {\n const dispatch = useDispatch();\n const downloadTrigger = useSelector(\n (state) => state.qrCodeExportConfig.qrCodeExportTrigger\n );\n const selectedQrType = useSelector(\n (state) => state.qrCodeExportConfig.selectedQrExportType\n );\n const shortLink = useSelector((state) => state.companyConfig.short_link);\n const companyLogo = useSelector((state) => state.hubConfig.company_logo);\n const hubLogo = useSelector((state) => state.hubConfig.hubLogo);\n\n const logo = hubLogo || companyLogo;\n\n const canvasRef = useCanvas(([canvas, ctx]) => {\n if (Object.keys(CARDS_BGS).indexOf(type) > -1) {\n qrCodeVCardRender(\n ctx,\n canvas,\n type,\n logo,\n shortLink,\n MINI_CANVAS_BOUNDRIES\n );\n } else {\n const canvasQr = document.getElementById(\"qr-code-to-pdf\");\n const [qrWidth, qrHeight] = newDimensions(400, 400, 80, 80);\n const qrX = (MINI_CANVAS_SIZE.x - qrWidth) / 2;\n const qrY = (MINI_CANVAS_SIZE.y - qrHeight) / 2;\n ctx.drawImage(canvasQr, qrX, qrY, qrWidth, qrHeight);\n }\n });\n\n useEffect(() => {\n if (downloadTrigger && selectedQrType === type) {\n downloadQr();\n }\n }, [downloadTrigger]);\n\n const downloadQr = () => {\n if (selectedQrType === QR_CODE_PNG_TRANSPARENT_BG) {\n downloadPngQRCode(() => {\n dispatch(qrCodeExportTrigger(false));\n });\n }\n\n if (Object.keys(CARDS_BGS).indexOf(selectedQrType) > -1) {\n downloadVCardQrCode(selectedQrType, logo, shortLink, () => {\n dispatch(qrCodeExportTrigger(false));\n });\n }\n };\n\n if (type) {\n return (\n
\n {type !== QR_CODE_PNG_TRANSPARENT_BG && (\n \n )}\n \n
\n );\n }\n\n return null;\n};\n\nexport default QrTemplate;\n","\nimport { defineMessages } from 'react-intl';\n\nexport const qrModalStrings = defineMessages({\n title: {\n id: \"QrDownload.Modal.Title\",\n defaultMessage: \"Wähle Sie Ihr gewünschtes Dateiformat\",\n },\n disclaimer: {\n id: \"QrDownload.Modal.Subtitle\",\n defaultMessage: \"Laden Sie eine PNG-Datei mit transparentem Hintergrund herunter, wenn Sie diese eigenständig in Ihre Projekte implementieren möchten, oder entscheiden Sie sich für den Download einer Welcomy Karte, welche den QR-Code, Kurz-URL und Logo Ihrer Hub in einem eleganten Design vereint.\",\n },\n pngTitle: {\n id: \"QrDownload.Modal.PNG.Title\",\n defaultMessage: \"QR-Code\",\n },\n pngSubtitle: {\n id: \"QrDownload.Modal.PNG.Subtitle\",\n defaultMessage: \"Datei mit transparentem Hintergrund im PNG-Format. Implementieren Sie diesen in Ihre Projekte und Designideen.\",\n },\n cardLightTitle: {\n id: \"QrDownload.Modal.CardLight.Title\",\n defaultMessage: \"Welcomy Karte - hell\",\n },\n cardLightSubtitle: {\n id: \"QrDownload.Modal.CardLight.Subtitle\",\n defaultMessage: \"Eine virtuelle Visitenkarte, die Sie als Hintergrundbild für den Sperrbildschirm Ihres Telefons verwenden können.\",\n },\n cardDarkTitle: {\n id: \"QrDownload.Modal.CardDark.Title\",\n defaultMessage: \"Welcomy Karte - dunkel\",\n },\n cardDarkSubtitle: {\n id: \"QrDownload.Modal.CardDark.Subtitle\",\n defaultMessage: \"Eine virtuelle Visitenkarte, die Sie als Hintergrundbild für den Sperrbildschirm Ihres Telefons verwenden können.\",\n },\n cancel: {\n id: \"Cancel\",\n defaultMessage: \"Abbrechen\",\n },\n});\n","import { Col, Radio, Row, Typography } from \"antd\";\nimport React from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { qrCodeExportTrigger, selectQrExportType } from \"../../redux/actions/qrCodeExport\";\nimport { getIntl } from \"../../utils/intl\";\nimport ModalWrapper from \"../Modal\";\nimport QrTemplate from \"./QrTemplate\";\nimport { qrModalStrings as translations } from './Translations';\n\nconst { Title, Paragraph } = Typography;\n\nexport const QR_CODE_PNG_TRANSPARENT_BG = \"QR_CODE_PNG_TRANSPARENT_BG\";\nexport const QR_CODE_WHITE_CARD = \"QR_CODE_WHITE_CARD\";\nexport const QR_CODE_DARK_CARD = \"QR_CODE_DARK_CARD\";\nexport const QR_CODE_ORANGE_CARD = \"QR_CODE_ORANGE_CARD\";\n\nconst QRCodePicker = ({changeQrModalVisibility, ...props}) => {\n const translate = getIntl();\n const qrCodeSelectedType = useSelector(\n (state) => state.qrCodeExportConfig.selectedQrExportType\n );\n const modalOpen = useSelector(\n (state) => state.qrCodeExportConfig.modalOpen\n );\n const dispatch = useDispatch();\n\n const setExportType = (type) => {\n dispatch(selectQrExportType(type));\n };\n\n return (\n {\n dispatch(qrCodeExportTrigger(true));\n changeQrModalVisibility();\n }}\n okButtonProps={{ disabled: !qrCodeSelectedType }}\n cancelText={translate.formatMessage(translations.cancel)}\n onCancel={() => {\n setExportType(null);\n changeQrModalVisibility();\n }}\n >\n
\n {translate.formatMessage(translations.title)}\n \n {translate.formatMessage(translations.disclaimer)}\n \n \n \n \n \n \n \n \n \n \n setExportType(QR_CODE_PNG_TRANSPARENT_BG)}\n />\n \n \n \n \n \n {translate.formatMessage(translations.pngTitle)}\n \n \n \n \n \n \n {translate.formatMessage(translations.pngSubtitle)}\n \n \n \n \n \n \n \n \n \n \n \n setExportType(QR_CODE_WHITE_CARD)}\n />\n \n \n \n \n {translate.formatMessage(translations.cardLightTitle)}\n \n \n \n \n \n \n {translate.formatMessage(translations.cardLightSubtitle)}\n \n \n \n \n \n \n \n \n \n \n \n \n setExportType(QR_CODE_DARK_CARD)}\n />\n \n \n \n \n \n {translate.formatMessage(translations.cardDarkTitle)}\n \n \n \n \n \n \n {translate.formatMessage(translations.cardDarkSubtitle)}\n \n \n \n \n \n
\n \n );\n};\n\nexport default QRCodePicker;\n","\nimport { defineMessages } from 'react-intl';\n\nexport const messages = defineMessages({\n downloadText: {\n id: \"SideMenu.Cards.Download.Text\",\n defaultMessage: \"Hub-Zugang herunterladen:\",\n },\n downloadSubtext: {\n id: \"SideMenu.Cards.Download.Subtext\",\n defaultMessage: \"QR-Code\",\n },\n downloadAction: {\n id: \"SideMenu.Cards.Download.Action\",\n defaultMessage: \"Herunterladen\",\n },\n copyText: {\n id: \"SideMenu.Cards.Copy.Text\",\n defaultMessage: \"Hub-Zugang kopieren:\",\n },\n copySubtext: {\n id: \"SideMenu.Cards.Copy.Subtext\",\n defaultMessage: \"Kurz URL\",\n },\n copyAction: {\n id: \"SideMenu.Cards.Copy.Action\",\n defaultMessage: \"Kopieren\",\n },\n copyActionSuccess: {\n id: \"SideMenu.Cards.Copy.Action.Success\",\n defaultMessage: \"Kopiert!\",\n },\n copyActionError: {\n id: \"SideMenu.Cards.Copy.Action.Error\",\n defaultMessage: \"Die Kurz-URL konnte nicht kopiert werden, bitte kontaktieren Sie den Support!\",\n },\n\n // WHEN COPY COMMAND IS NOT ALLOWED IN BROWSER\n copyGenerateBtn: {\n id: \"SideMenu.QuickAcions.ShortUrl.Generate\",\n defaultMessage: \"Anzeigen\",\n },\n modalCloseBtn: {\n id: \"SideMenu.QuickAcions.Modal.ShortUrl.Close\",\n defaultMessage: \"Schließen\",\n },\n modalDisclaimer: {\n id: \"SideMenu.QuickAcions.Modal.ShortUrl.Disclaimer\",\n defaultMessage: \"Teilen Sie diese personalisierte URL mit Ihren Nutzern, um auf den Hub zuzugreifen, ohne einen QR-Code zu scannen.\",\n },\n modalTitle: {\n id: \"SideMenu.QuickAcions.Modal.ShortUrl.Title\",\n defaultMessage: \"Die Kurz-URL der Hub\",\n },\n});\n","import { LoadingOutlined } from \"@ant-design/icons\";\nimport { Button, Modal, Spin, Typography, message } from \"antd\";\nimport React, { useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { qrCodeExportModalOpen } from \"../../../redux/actions/qrCodeExport\";\nimport { getIntl } from \"../../../utils/intl\";\nimport { generateQRCodeTemplate } from \"../../QrCode\";\nimport { messages } from \"./translations\";\n\nconst { Paragraph, Title } = Typography;\n\nfunction ActionCards() {\n const dispatch = useDispatch();\n const companyLogo = useSelector((state) => state.companyConfig.company_logo);\n const hubLogo = useSelector((state) => state.hubConfig.hubLogo);\n const shortLink = useSelector((state) => state.companyConfig.short_link);\n const verticalId = useSelector((state) => state.companyConfig.vertical_id);\n const modalOpen = useSelector((state) => state.qrCodeExportConfig.modalOpen);\n\n const [shortUrlModalOpen, setShortUrlModalOpen] = useState(false);\n\n const IS_BROWSER_CLIPBOARD_ALLOWED = navigator.clipboard;\n\n const logo = hubLogo || companyLogo;\n\n const [isLoadingQr, setIsLoadingQr] = useState(false);\n\n const translation = getIntl();\n\n const generateQrCode = () => {\n if (verticalId === 4) {\n changeQrModalVisibility();\n } else {\n // Backwards compability with restaurants, check useEffect.\n setIsLoadingQr(true);\n }\n };\n\n // Trigger QR Code download for restaurants as they use a different\n // template for now.\n useEffect(() => {\n if (isLoadingQr) {\n generateQRCodeTemplate(logo, shortLink, () =>\n setTimeout(() => {\n setIsLoadingQr(false);\n }, 2500)\n );\n }\n }, [isLoadingQr]);\n\n const changeQrModalVisibility = () => {\n dispatch(qrCodeExportModalOpen(!modalOpen));\n };\n\n const copyShortUrl = () => {\n if (shortLink) {\n /**\n * We tried copying the url to the clipboard but that presented\n * itself as tricky across browsers so we decided to default\n * to just displaying the url to the user and let them manually copy it.\n */\n setShortUrlModalOpen(true);\n }\n };\n\n return (\n <>\n
\n
\n \n {translation.formatMessage(messages.downloadText)}\n \n \n {translation.formatMessage(messages.downloadSubtext)}\n \n {!isLoadingQr ? (\n \n ) : (\n }\n />\n )}\n
\n
\n
\n
\n \n {translation.formatMessage(messages.copyText)}\n \n \n {translation.formatMessage(messages.copySubtext)}\n \n \n
\n
\n setShortUrlModalOpen(false)}\n footer={[\n setShortUrlModalOpen(false)}\n >\n {translation.formatMessage(messages.modalCloseBtn)}\n ,\n ]}\n >\n
\n \n {translation.formatMessage(messages.modalTitle)}\n \n \n {translation.formatMessage(messages.modalDisclaimer)}\n \n \n {shortLink}\n \n
\n \n \n );\n}\n\nexport default ActionCards;\n","import {\n DeploymentUnitOutlined,\n FolderOutlined,\n SettingOutlined,\n UserOutlined,\n LineChartOutlined,\n BankOutlined,\n} from \"@ant-design/icons\";\nimport { Alert, Col, Menu, Row, Space } from \"antd\";\nimport QRcode from \"qrcode.react\";\nimport React, { Component } from \"react\";\nimport { FormattedMessage, injectIntl } from \"react-intl\";\nimport { connect } from \"react-redux\";\nimport { withRouter } from \"react-router-dom\";\nimport Logo from \"../../static/Logo\";\nimport WelcomyIcon from \"../../static/WelcomyIcon\";\nimport { isAllSuperAccount } from \"../../utils/envs\";\nimport QrCodeLoadingModal from \"../QrCode/QrCodeLoadingModal\";\nimport AccountSelector from \"./AccountSelector\";\nimport QRCodePicker from \"./QRCodePicker\";\nimport { qrCodeExportModalOpen } from \"../../redux/actions/qrCodeExport\";\nimport ActionCards from \"./action-cards/ActionCards\";\n\nconst { SubMenu } = Menu;\n\nclass SideMenu extends Component {\n // submenu keys of first level\n rootSubmenuKeys = [\n \"welcomytools\",\n \"office\",\n \"usermanagement\",\n \"welcomyHub\",\n \"analytics\",\n \"compliance\",\n \"workspaces\",\n \"myCompany\"\n ];\n constructor(props) {\n super(props);\n this.routes = {\n workspaces: {\n 2: \"/workspaces\",\n },\n welcomyHub: {\n 20: \"/\",\n 21: \"/hub/config\",\n 22: \"/sub-accounts\",\n },\n welcomytools: {\n 12: \"/subscriptions\",\n 13: \"/digital-menu\",\n 14: \"/print-menu\",\n },\n office: {\n 6: \"/employees\",\n },\n usermanagement: {\n 200: \"/user-management\",\n },\n compliance: {\n 10: \"/impressum\",\n 101: \"/data-protection\",\n },\n analytics: {\n 25: \"/hub/analytics\",\n },\n myCompany: {\n 30: \"/company-setup\",\n },\n };\n this.short_link = props?.companyConfig?.short_link;\n this.qrRef = React.createRef();\n this.state = {\n defaultSelectedKey: props?.companyConfig?.super_account ? ['22'] : ['20'],\n selectedKey: [],\n openKeys: [],\n rootSubmenuKeys: [\n (\n \"welcomytools\",\n \"office\",\n \"usermanagement\",\n \"welcomyHub\",\n \"analytics\",\n \"compliance\",\n \"analytics\",\n \"myCompany\"\n ),\n ],\n tolltipCopyIsOpen: false,\n isLoadingQR: false,\n };\n\n this.copiedUrlMessage = (\n \n );\n\n if (props.companyConfig.sub_accounts.length > 0) {\n let initialList = [];\n this.accounts = props.companyConfig.sub_accounts.reduce(\n (acc, account) => {\n return {\n [account.id]: {\n path: account.path,\n id: account.id,\n vertical: account.vertical_id,\n name: account.name,\n },\n ...acc,\n };\n },\n {}\n );\n\n this.options = props.companyConfig.sub_accounts.reduce((acc, account) => {\n return acc.concat([\n {\n value: account.id,\n label: account.name,\n },\n ]);\n }, initialList);\n }\n }\n\n changeQrModalVisibility = () => {\n this.props.dispatch(qrCodeExportModalOpen(!this.props.modalOpen));\n }\n\n\n onOpenChange = (openKeys) => {\n const latestOpenKey = openKeys.find(\n (key) => this.state.openKeys.indexOf(key) === -1,\n );\n if (this.rootSubmenuKeys.indexOf(latestOpenKey) === -1) {\n this.setState({ openKeys });\n } else {\n this.setState({\n openKeys: latestOpenKey ? [latestOpenKey] : [],\n });\n }\n };\n\n handleClick = (e) => {\n let { keyPath } = e;\n this.props.history.push(`/dashboard${this.routes[keyPath[1]][keyPath[0]]}`);\n if (keyPath[0] !== this.state.selectedKey[0]) {\n this.setState({\n selectedKey: [keyPath[0]],\n openKeys: [keyPath[1]],\n });\n }\n };\n\n render() {\n const { intl } = this.props;\n const verticalId = this.props.companyConfig.vertical_id;\n\n let productMenu = \"SideMenu.SubMenu.DigitalMenu\";\n\n if (verticalId && verticalId === 4) {\n productMenu = \"SideMenu.Business.SubMenu.DigitalMenu\";\n }\n\n return (\n
\n
\n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n }\n >\n {isAllSuperAccount(this.props.companyConfig.super_account) && (\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 {(verticalId === 3 || verticalId === 4) && (\n \n \n \n )}\n {(verticalId === 3 || verticalId === 4) && (\n \n \n \n )}\n {(verticalId === 3 || verticalId === 4) && (\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 {verticalId === 1 && (\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 {this.state.tolltipCopyIsOpen && (\n \n )}\n \n \n \n
\n \n
\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n companyConfig: state.companyConfig,\n modalOpen: state.qrCodeExportConfig.modalOpen,\n };\n};\n\nexport default withRouter(connect(mapStateToProps)(injectIntl(SideMenu)));\n","import React, { Component } from \"react\";\nimport { Typography, Avatar, Row, Col, Dropdown, Menu } from \"antd\";\nimport { GlobalOutlined } from '@ant-design/icons';\nimport { withRouter } from \"react-router-dom\";\nimport { connect } from \"react-redux\";\nimport { configSetter } from \"../../redux/actions\";\nimport { LanguagePickerConsumer } from '../LanguagePicker.jsx';\nimport { getIntl } from \"../../utils/intl\";\nimport http from '../../utils/http';\nimport { cookieDomain, isAllSuperAccount } from \"../../utils/envs\";\nimport { getCookie } from \"../getCookie\";\n\nconst { Text } = Typography;\n\n\nclass Navbar extends Component {\n constructor(props) {\n super(props);\n this.state = {\n supportedLanguages: {},\n }\n const intl = getIntl();\n const logoutText = intl.formatMessage(\n {\n id: \"Navbar.Logout\",\n defaultMessage: \"Abmelden\"\n }\n );\n const backToMainAccountText = intl.formatMessage(\n {\n id: \"Navbar.Accounts.Back\",\n defaultMessage: \"Zum Hauptaccount\"\n }\n );\n this.logo = props.companyConfig.company_logo;\n this.name = props.companyConfig.name;\n this.superAccount = this.props.companyConfig.super_account;\n const superPath = getCookie(\"_super_path\");\n this.menu = (\n \n {/* Below condition is to handle:\n - Showing logout button to super accounts\n - Showing logout button to sub accounts when users directly login to it */}\n { ((this.superAccount !== null && isAllSuperAccount(this.superAccount)) || \n (this.superAccount !== null && !isAllSuperAccount(this.superAccount) && !superPath)) &&\n \n {logoutText}\n \n }\n { this.superAccount !== null && !isAllSuperAccount(this.superAccount) && superPath &&\n \n {backToMainAccountText}\n \n }\n \n );\n this.languages = (\n \n {({switchTo }) =>(\n \n {this.state.supportedLanguages.map(\n (aLang, index) => (\n \n switchTo(aLang.iso_code)}>{aLang.language}\n \n ))}\n \n )}\n \n );\n }\n\n goToMainAccount = () => {\n const changeToAccount = (accounts) => {\n const domain = cookieDomain();\n const { company_id, vertical_id, name } = this.props.companyConfig;\n document.cookie = `_c=${accounts[0].id};domain=${domain}`;\n document.cookie = `_v=${accounts[0].vertical};domain=${domain}`;\n if (isAllSuperAccount(this.superAccount)) {\n document.cookie = `_super_name=${name};domain=${domain}`;\n /**\n * Subdomains cannot be multilevel in order for this to work (multiple dots).\n */\n document.cookie = `_super_path=${window.location.hostname.split(\".\")[0]};domain=${domain}`;\n document.cookie = `_super_c=${company_id};domain=${domain}`;\n document.cookie = `_super_v=${vertical_id};domain=${domain}`;\n } else {\n document.cookie = `_super_name=${name};domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n /**\n * Subdomains cannot be multilevel in order for this to work (multiple dots).\n */\n document.cookie = `_super_path=${window.location.hostname.split(\".\")[0]};domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n document.cookie = `_super_c=${company_id};domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n document.cookie = `_super_v=${vertical_id};domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n }\n if (domain === '.localhost.com') {\n window.location = `http://${accounts[0].path}.localhost.com:3000/dashboard/sub-accounts`;\n } else {\n window.location = `http://${accounts[0].path}.welcomyapp.com/dashboard/sub-accounts`;\n }\n };\n\n const superName = getCookie(\"_super_name\");\n const superPath = getCookie(\"_super_path\");\n const superId = getCookie(\"_super_c\");\n const superVertical = getCookie(\"_super_v\");\n changeToAccount([\n {\n name: superName,\n id: superId,\n vertical: superVertical,\n path: superPath,\n },\n ]);\n }\n\n getLanguages = async () => {\n const { company_id } = this.props.companyConfig;\n if (company_id) {\n const result = await http.get(`/company/${company_id}/languages`);\n const { payload } = result.data;\n this.setState({\n supportedLanguages: payload,\n });\n }\n }\n\n componentDidMount() {\n this.getLanguages();\n }\n\n\n goTablet = () => {\n const { history } = this.props;\n history.replace('/welcome');\n }\n\n logout = () => {\n const domain = cookieDomain();\n document.cookie = `_r=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Refresh Token\n document.cookie = `_a=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Access Token\n document.cookie = `_c=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Company Id\n document.cookie = `_v=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Vertical Id\n document.cookie = `_u=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // User Id\n document.cookie = `_ur=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Super Account Vertical\n\n // Delete super account cookies just to be sure that sub accounts will leave no trace behind.\n document.cookie = `_super_name=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Super Account path\n document.cookie = `_super_path=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Super Account path\n document.cookie = `_super_c=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Supper Account Id\n document.cookie = `_super_v=;path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`; // Super Account Vertical\n\n this.props.dispatch(\n configSetter({\n name: null,\n company_logo: null,\n hasFetchedConfig: false,\n user_id: null,\n hasFetchedId: false,\n vertical_id: 0,\n legalEntity: null,\n })\n );\n setTimeout(() => {\n this.props.history.push('/login')\n }, 2500);\n };\n\n render() {\n const {isScrolled} = this.props;\n\n return (\n
\n \n \n
\n {this.props.isTop}\n e.preventDefault()}>\n \n \n {this.name}\n \n \n e.preventDefault()}>\n \n \n
\n \n
\n
\n );\n }\n}\n\nconst mapStateToProps = (state) => {\n return {\n companyConfig: state.companyConfig,\n layoutConfig: state.layoutConfig,\n };\n};\n\nexport default withRouter(connect(mapStateToProps)(Navbar));\n","import React, { useState, useEffect } from 'react';\nimport moment from \"moment\";\nimport { useSelector } from 'react-redux';\nimport { FormattedMessage } from 'react-intl';\nimport {\n Breadcrumb,\n Button,\n Col,\n Row,\n Table,\n Tag,\n Typography,\n } from \"antd\";\n\nimport http from '../../utils/http';\nimport { displayNotification } from '../../components/Notification';\nimport { getIntl } from \"../../utils/intl\";\n\nimport Modal from '../../components/Modal';\n\nconst { Title, Paragraph } = Typography;\n\nfunction CoronaAlerts(props) {\n const company_id = useSelector((state) => state.companyConfig.company_id);\n const [notifyModal, setNotifyModal] = useState(false);\n const [verifyModal, setVerifyModal] = useState(false);\n const [newAlerts, setNewAlerts] = useState([]);\n const [oldAlerts, setOldAlerts] = useState([]);\n\n const [toVerify, setToVerify] = useState(null);\n\n const intl = getIntl();\n\n useEffect(() => {\n fetchAlerts()\n }, [company_id]);\n\n const fetchAlerts = async () => {\n if (company_id) {\n\n try {\n const response = await http.get(`/company/${company_id}/emergencies`);\n\n if (response.status === 200) {\n const alerts = response.data.payload;\n setNewAlerts(alerts.active_emergencies);\n setOldAlerts(alerts.past_emergencies);\n } else {\n const title = intl.formatMessage({\n id: \"Error\",\n defaultMessage: \"Etwas ist schief gelaufen!\",\n });\n const body = intl.formatMessage({\n id: \"AlertPage.Notification.Error\",\n defaultMessage: \"Not able to retrieve alerts from server.\",\n });\n displayNotification(\"error\", title, body);\n }\n } catch (error) {\n const title = intl.formatMessage({\n id: \"Error\",\n defaultMessage: \"Etwas ist schief gelaufen!\",\n });\n const body = intl.formatMessage({\n id: \"AlertPage.Notification.Error\",\n defaultMessage: \"Not able to retrieve alerts from server.\",\n });\n displayNotification(\"error\", title, body);\n }\n }\n };\n\n const verifyAlert = async () => {\n try {\n const response = await http.put(`/company/${company_id}/emergency/${toVerify.id}`, {\n verified: true,\n });\n\n if (response.status === 204) {\n const title = intl.formatMessage({\n id: 'Success',\n defaultMessage: 'Erfolg!',\n });\n const body = intl.formatMessage({\n id: 'AlertPage.Notification.Verify.Success',\n defaultMessage: 'Zeitlich relevante Aufenthaltsorte der Person wurden über Ihre Meldungsbestätigung informiert.',\n });\n displayNotification('success', title, body);\n fetchAlerts();\n } else {\n const title = intl.formatMessage({\n id: 'Error',\n defaultMessage: 'Etwas ist schief gelaufen!',\n });\n const body = intl.formatMessage({\n id: 'AlertPage.Notification.Verify.Error',\n defaultMessage: 'Meldung konnte nicht bestätigt werden, versuchen Sie es später noch einmal.',\n });\n displayNotification('error', title, body);\n }\n setVerifyModal(false);\n } catch (error) {\n setVerifyModal(false);\n const title = intl.formatMessage({\n id: \"Error\",\n defaultMessage: \"Etwas ist schief gelaufen!\",\n });\n const body = intl.formatMessage({\n id: 'AlertPage.Notification.Verify.Error',\n defaultMessage: 'Meldung konnte nicht bestätigt werden, versuchen Sie es später noch einmal.',\n });\n displayNotification('error', title, body);\n }\n }\n\n const resolveAlert = async (alert) => {\n try {\n const response = await http.put(`/company/${company_id}/emergency/${alert.id}`, {\n resolved: true,\n });\n\n if (response.status === 204) {\n const title = intl.formatMessage({\n id: 'Success',\n defaultMessage: 'Erfolg!',\n });\n const body = intl.formatMessage({\n id: 'AlertPage.Notification.Resolve.Success',\n defaultMessage: 'Diese Meldung wurde als gelöst markiert und in der Rubrik \"Bearbeitete Meldungen\" verschoben',\n });\n displayNotification('success', title, body);\n fetchAlerts();\n } else {\n const title = intl.formatMessage({\n id: 'Error',\n defaultMessage: 'Etwas ist schief gelaufen!',\n });\n const body = intl.formatMessage({\n id: 'AlertPage.Notification.Resolve.Error',\n defaultMessage: \"Meldung konnte nicht als gelöst markiert werden, versuchen Sie es später noch einmal\",\n });\n displayNotification('error', title, body);\n }\n } catch (error) {\n const title = intl.formatMessage({\n id: 'Error',\n defaultMessage: 'Etwas ist schief gelaufen!',\n });\n const body = intl.formatMessage({\n id: 'AlertPage.Notification.Resolve.Error',\n defaultMessage: \"Meldung konnte nicht als gelöst markiert werden, versuchen Sie es später noch einmal\",\n });\n displayNotification('error', title, body);\n }\n }\n\n const dismissAlert = async (alert) => {\n try {\n const response = await http.put(`/company/${company_id}/emergency/${alert.id}`, {\n dismissed: true,\n });\n\n if (response.status === 204) {\n const title = intl.formatMessage({\n id: 'Success',\n defaultMessage: 'Erfolg!',\n });\n const body = intl.formatMessage({\n id: 'AlertPage.Notification.Dismiss.Success',\n defaultMessage: 'Die Meldung wurde als \"verworfen\" markiert und in der Rubrik \"Bearbeitete Meldungen\" verschoben.',\n });\n displayNotification('success', title, body);\n fetchAlerts();\n } else {\n const title = intl.formatMessage({\n id: 'Error',\n defaultMessage: 'Etwas ist schief gelaufen!',\n });\n const body = intl.formatMessage({\n id: 'AlertPage.Notification.Dismiss.Error',\n defaultMessage: 'Meldung konnte nicht als gelöst markiert werden, versuchen Sie es später noch einmal',\n });\n displayNotification('error', title, body);\n }\n } catch (error) {\n const title = intl.formatMessage({\n id: 'Error',\n defaultMessage: 'Etwas ist schief gelaufen!',\n });\n const body = intl.formatMessage({\n id: 'AlertPage.Notification.Dismiss.Error',\n defaultMessage: 'Meldung konnte nicht als gelöst markiert werden, versuchen Sie es später noch einmal',\n });\n displayNotification('error', title, body);\n }\n }\n\n const verified = (\n <>\n \n \n \n \n );\n\n const unverified = (\n <>\n \n \n \n \n );\n\n const resolved = (\n <>\n \n \n \n \n );\n\n const dismissed = (\n <>\n \n \n \n \n );\n\n const BtnResolve = ({ record, disabled=false }) => (\n {resolveAlert(record)}}\n >\n \n \n );\n\n const BtnVerify = ({ record, disabled=false }) => (\n {\n setToVerify(record);\n setVerifyModal(true);\n }}\n disabled={record.verified}\n >\n \n \n );\n\n const BtnDismiss = ({ record, disabled=false }) => (\n {dismissAlert(record)}}\n >\n \n \n );\n\n const verifyModalTitle = intl.formatMessage(\n {\n id: \"AlertPage.Modal.Title\",\n defaultMessage: \"Verifizierung einer Infektionsmeldung\",\n }\n );\n\n const welcomyNetwork = intl.formatMessage(\n {\n id: \"AlertPage.Modal.Network\",\n defaultMessage: \"Welcomy Netzwerks\",\n }\n );\n\n const verifyModalOk = intl.formatMessage(\n {\n id: \"AlertPage.Modal.Button.Ok\",\n defaultMessage: \"Ok\",\n }\n );\n\n const verifyModalCancel = intl.formatMessage(\n {\n id: \"AlertPage.Modal.Button.Cancel\",\n defaultMessage: \"Zurück\",\n }\n );\n\n const verifyModalBody = intl.formatMessage(\n {\n id: \"AlertPage.Tag.Verified\",\n defaultMessage: \"Verifiziert\",\n }\n );\n\n const status = intl.formatMessage(\n {\n id: \"AlertPage.Columns.Status\",\n defaultMessage: \"Status\",\n }\n );\n\n const name = intl.formatMessage(\n {\n id: \"AlertPage.Columns.Name\",\n defaultMessage: \"Name\",\n }\n );\n\n const dateOfVisit = intl.formatMessage(\n {\n id: \"AlertPage.Columns.Date.Visit\",\n defaultMessage: \"Aufenthaltsdatum\",\n }\n );\n\n const dateOfTest = intl.formatMessage(\n {\n id: \"AlertPage.Columns.Date.Test\",\n defaultMessage: \"Getestet am\",\n }\n );\n\n const phone = intl.formatMessage(\n {\n id: \"AlertPage.Columns.Phone\",\n defaultMessage: \"Telefon\",\n }\n );\n \n const email = intl.formatMessage(\n {\n id: \"AlertPage.Columns.Email\",\n defaultMessage: \"Email\",\n }\n );\n\n const actions = intl.formatMessage(\n {\n id: \"AlertPage.Columns.Actions\",\n defaultMessage: \"Aktion\",\n }\n );\n\n\n\n const newAlertColumns = [\n {\n title: status,\n key: 'status',\n render: (_, record) => (\n \n {\n record.verified &&\n verified\n }\n {\n !record.verified &&\n unverified\n }\n \n ),\n },\n {\n title: name,\n dataIndex: 'full_name',\n key: 'name',\n },\n {\n title: dateOfVisit,\n dataIndex: 'date_created',\n key: 'dateCreated',\n render: (_, record) => moment(record.date_created).format('DD-MM-YYYY'),\n },\n {\n title: dateOfTest,\n dataIndex: 'event_date',\n key: 'eventDate',\n render: (_, record) => moment(record.event_date).format('DD-MM-YYYY'),\n },\n {\n title: phone,\n dataIndex: 'phone_number',\n key: 'phoneNumber',\n },\n // @TODO\n //\n // REMOVED UNTIL GDPR GUIDANCE\n //\n // {\n // title: email,\n // dataIndex: 'email',\n // key: 'email',\n // },\n {\n title: actions,\n key: \"actions\",\n render: (text, record, index) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n ),\n }\n ];\n\n const oldAlertColumns = [\n {\n title: status,\n key: 'status',\n render: (_, record) => (\n \n {\n record.verified &&\n verified\n }\n {\n !record.verified &&\n unverified\n }\n {\n record.resolved &&\n resolved\n }\n {\n record.dismissed &&\n dismissed\n }\n \n ),\n },\n {\n title: name,\n dataIndex: 'full_name',\n key: 'name',\n },\n {\n title: dateOfVisit,\n dataIndex: 'date_created',\n key: 'dateCreated',\n render: (_, record) => moment(record.date_created).format('DD-MM-YYYY'),\n },\n {\n title: dateOfTest,\n dataIndex: 'event_date',\n key: 'eventDate',\n render: (_, record) => moment(record.event_date).format('DD-MM-YYYY'),\n },\n {\n title: phone,\n dataIndex: 'phone_number',\n key: 'phoneNumber',\n },\n // @TODO\n //\n // REMOVED UNTIL GDPR GUIDANCE\n //\n // {\n // title: email,\n // dataIndex: 'email',\n // key: 'email',\n // },\n {\n title: actions,\n key: \"actions\",\n render: (text, record, index) => (\n \n \n \n \n \n \n \n \n \n \n \n \n \n ),\n }\n ];\n\n return (\n
\n {\n setVerifyModal(false);\n setToVerify(null);\n }}\n >\n \n {verifyModalBody}, network: {welcomyNetwork}, you: you, confirmed: confirmed}}\n >\n \n \n \n \n \n \n \n \">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n <FormattedMessage\n id=\"AlertPage.Title\"\n defaultMessage=\"Meldungsbereich\"\n ></FormattedMessage>\n \n \n \n \n \n \n <FormattedMessage\n id=\"AlertPage.Subtitle.Alerts.New\"\n defaultMessage=\"Neue Meldungen\"\n ></FormattedMessage>\n \n \n \n \n \n \n \n \n \n \n \n <FormattedMessage\n id=\"AlertPage.Subtitle.Alerts.Old\"\n defaultMessage=\"Bearbeitete Meldungen\"\n ></FormattedMessage>\n \n \n \n \n \n
\n \n \n \n );\n}\n\nexport default CoronaAlerts;","import React, { useState } from \"react\";\nimport { useSelector } from \"react-redux\";\nimport { FormattedMessage } from 'react-intl';\n\nimport { Button, Col, Upload, Row, Typography, Spin } from \"antd\";\nimport { InboxOutlined } from '@ant-design/icons';\n\nimport { getIntl } from \"../../utils/intl\";\nimport http from \"../../utils/http\";\nimport { displayNotification } from '../../components/Notification';\nimport { getCookie } from '../../components/getCookie';\n\nconst { Dragger } = Upload;\nconst { Title } = Typography;\n\nfunction PdfUpload(props) {\n const access_token = getCookie(\"_a\");\n const company_id = useSelector((state) => state.companyConfig.company_id);\n const [loadingState, setLoadingState] = useState(false);\n\n const storeStaticMenu = async (url, onSuccess, onError) => {\n try {\n await http.post(\n `gastro/${company_id}/static_menu`,\n { url: url }\n );\n } catch (error) {\n console.log(\"Error\", error);\n onError(error);\n return;\n }\n onSuccess();\n }\n const draggerOpts = {\n name: \"menu\",\n multiple: false,\n headers: {\n Authorization: `Bearer ${access_token}`\n },\n showUploadList: false,\n accept: '.pdf',\n async customRequest(fileOpts) {\n const { onSuccess, onError } = fileOpts;\n let data = new FormData();\n data.append('file', fileOpts.file);\n try {\n const res = await http.post(\n `/company/${company_id}/file`,\n data\n );\n await storeStaticMenu(res.data.payload.url, onSuccess, onError);\n } catch (error) {\n console.log(\"Error uploading file\", error);\n onError(error);\n }\n },\n beforeUpload(file) {\n const isPdf = file.type === \"application/pdf\";\n const intl = getIntl();\n if (!isPdf) {\n const title = intl.formatMessage(\n {\n id: \"DigitalMenuPage.PdfUpload.InvalidFileType.Title\",\n defaultMessage: \"Ungültiger Dateityp\"\n }\n );\n const body = intl.formatMessage(\n {\n id: \"DigitalMenuPage.PdfUpload.InvalidFileType.Body\",\n defaultMessage: \"Sie können nur PDF Dateien hochladen\"\n }\n );\n displayNotification(\"error\", title, body);\n setLoadingState(false);\n return false;\n }\n const isLt2M = file.size / 1024 / 1024 < 4;\n if (!isLt2M) {\n const title = intl.formatMessage(\n {\n id: \"DigitalMenuPage.PdfUpload.FileTooLarge.Title\",\n defaultMessage: \"Datei zu groß\"\n }\n );\n const body = intl.formatMessage(\n {\n id: \"DigitalMenuPage.PdfUpload.FileTooLarge.Body\",\n defaultMessage: \"Das Datei muss kleiner als 4 MB sein\"\n }\n );\n displayNotification(\"error\", title, body);\n setLoadingState(false);\n return false;\n }\n return true;\n },\n onChange(info) {\n const { status } = info.file;\n const intl = getIntl();\n if (status === \"uploading\") {\n setLoadingState(true);\n }\n if (status === \"done\") {\n const title = intl.formatMessage(\n {\n id: \"DigitalMenuPage.PdfUpload.UploadSuccess.Title\",\n defaultMessage: \"Erfolg!\"\n }\n );\n const body = intl.formatMessage(\n {\n id: \"DigitalMenuPage.PdfUpload.UploadSuccess.Body\",\n defaultMessage: \"Ihre Karte wurde geupdated\"\n }\n );\n setLoadingState(false);\n displayNotification(\"success\", title, body);\n } else if (status === \"error\") {\n setLoadingState(true);\n console.log('Error uploading static menu:', info);\n const title = intl.formatMessage(\n {\n id: \"DigitalMenuPage.PdfUpload.UploadFail.Title\",\n defaultMessage: \"Ihre Karte wurde nicht geupdated\"\n }\n );\n const lastLine = intl.formatMessage(\n {\n id: \"DigitalMenuPage.PdfUpload.UploadFail.Body\",\n defaultMessage: `Wenn das Problem weiterhin besteht, \n bitte kontaktieren Sie unser freundliches Support-Team! :)`,\n }\n );\n setLoadingState(false);\n displayNotification(\"error\", title, lastLine);\n }\n }\n };\n return (\n
\n \n
\n \n <FormattedMessage\n id=\"OrganizeMenuPage.PDFUpload.SubHeader\"\n defaultMessage=\"Laden Sie hier Ihre PDF-basierte Speisekarte hoch\"\n ></FormattedMessage>\n \n \n \n \n \n \n \n \n \n

\n \n

\n

\n \n

\n
\n \n \n \n \n \n );\n}\n\nexport default PdfUpload;\n","import * as React from \"react\"\nconst SvgComponent = (props) => (\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)\nexport default SvgComponent\n","import http from './http';\n\nexport const uploadImages = async (company_id, images, meta) => {\n let data = new FormData();\n data.append(\"images\", JSON.stringify(images));\n data.append(\"meta\", meta);\n try {\n const res = await http.post(\n `/company/${company_id}/image`,\n data\n );\n return res.data.payload.images;\n } catch (error) {\n console.log(\"Error uploading images\", error);\n return [];\n }\n}\n","import React, { useState, useEffect, useMemo } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { FormattedMessage } from \"react-intl\";\nimport { digitalMenuDishesSetter } from \"../../redux/actions\";\nimport http, { getErrorMsg } from \"../../utils/http\";\nimport { displayNotification } from \"../../components/Notification\";\nimport { getIntl } from \"../../utils/intl\";\nimport { useSpiceLevels } from \"./SpiceLevelCtx\";\nimport Chilli from \"../../static/Chili\";\n/** Start Image Crop Imports */\nimport ImgCrop from \"antd-img-crop\";\nimport \"antd/es/modal/style\";\nimport \"antd/es/slider/style\";\n/** End Image Crop Imports */\n\nimport {\n Button,\n Checkbox,\n Col,\n Form,\n Input,\n InputNumber,\n Modal,\n Rate,\n Row,\n Upload,\n Switch,\n} from \"antd\";\n\nimport { PlusOutlined } from \"@ant-design/icons\";\nimport useBreakpoint from \"antd/lib/grid/hooks/useBreakpoint\";\nimport { uploadImages } from \"../../utils/image\";\n\nfunction CreateDish({\n isOpen,\n showModal,\n setDishToEdit,\n dishToEdit,\n ...props\n}) {\n const dispatch = useDispatch();\n const dishCategory = useSelector((state) => state.dishConfig.category);\n const company_id = useSelector((state) => state.companyConfig.company_id);\n const verticalId = useSelector((state) => state.companyConfig.vertical_id);\n const [isLoading, setIsLoading] = useState(false);\n const [categoryId, setCategoryId] = useState(null);\n const spiceLevels = useSpiceLevels();\n const intl = getIntl();\n const dishes = useSelector((state) => state.digitalMenuConfig.dishes);\n const [isMultiPricing, setIsMultiPricing] = useState(null);\n const screens = useBreakpoint();\n\n const [form] = Form.useForm();\n\n useEffect(() => {\n if (dishCategory && dishCategory.id) {\n setCategoryId(dishCategory.id);\n }\n }, [dishCategory]);\n\n const getFileList = () => {\n if (\n dishToEdit !== null &&\n dishToEdit.images &&\n dishToEdit.images.length > 0\n ) {\n const result = dishToEdit.images.map((img, index) => ({\n uid: ((index + 1) * -1).toString(),\n url: img,\n }));\n return result;\n }\n return [];\n };\n\n const [fileList, setFileList] = useState([]);\n\n useEffect(() => {\n if (\n dishToEdit !== null &&\n dishToEdit.images &&\n dishToEdit.images.length > 0 &&\n fileList.length === 0\n ) {\n const files = getFileList();\n setFileList(files);\n }\n }, [dishToEdit]);\n\n const [allergens, setAllergens] = useState([]);\n const [preservatives, setPreservatives] = useState([]);\n const getAllergens = async () => {\n const response = await http.get(`gastro/${company_id}/allergen`);\n let { payload } = response.data;\n const _allergens = payload.reduce((acc, allergen) => {\n if (!allergen.is_preservative) {\n acc.push({ label: allergen.name, value: allergen.id });\n }\n return acc;\n }, []);\n\n const _preservatives = payload.reduce((acc, preservative) => {\n if (preservative.is_preservative) {\n acc.push({ label: preservative.name, value: preservative.id });\n }\n return acc;\n }, []);\n setAllergens(_allergens);\n setPreservatives(_preservatives);\n };\n useEffect(() => {\n if (verticalId === 3) getAllergens();\n }, [company_id]);\n\n const cancel = (...arg) => {\n setFileList([]);\n form.resetFields();\n setDishToEdit(null);\n showModal(false);\n };\n\n const showLoading = (loadingState) => {\n setIsLoading(loadingState);\n };\n\n const resetImagesList = async () => {\n await setFileList([]);\n };\n\n const onCreate = async (values) => {\n showLoading(true);\n let data = {};\n let title, message, status;\n const fields = [\n \"name\",\n \"price\",\n \"availability\",\n \"description\",\n \"allergens\", // Preservatives are part of the allergens group\n \"spice_level\",\n \"preservatives\",\n \"multiprice\",\n ];\n if (!values.errorFields) {\n fields.map((field, index) => {\n let value = values[field];\n if (value !== undefined) {\n if (Array.isArray(value) && value.length > 0) {\n if (field === \"preservatives\") {\n if (values[\"allergens\"] !== undefined) {\n value = values[\"allergens\"].concat(value);\n value = JSON.stringify(value);\n data[\"allergens\"] = value;\n return;\n }\n }\n if (field === \"multiprice\" && values[field] !== undefined) {\n let priceObj = {};\n values[field].forEach((el) => {\n priceObj[el.priceLabel] = el.priceValue;\n });\n value = JSON.stringify(priceObj);\n data[\"price\"] = value;\n values.price = values[field];\n delete values[field];\n return;\n }\n value = JSON.stringify(value);\n data[field] = value;\n } else if (!Array.isArray(value)) {\n if (field === \"price\" && values[field] !== undefined) {\n const price = { default: value };\n value = JSON.stringify(price);\n values.price = price;\n }\n data[field] = value;\n }\n }\n });\n\n if (fileList && fileList.length > 0) {\n let allImages = [], imageUrls = [];\n fileList.map((file) => {\n allImages.push(file);\n });\n\n if (allImages.length > 0) {\n imageUrls = await uploadImages(company_id, allImages, 'category/dish');\n if (imageUrls.length == 0) {\n status = \"error\";\n const title = intl.formatMessage({\n id: \"CreateDishPage.Detail.Notification.ImageUploadError.Title\",\n defaultMessage: \"Entschuldigung! Sie können keine Bilder hochladen\"\n });\n const message = intl.formatMessage({\n id: \"CreateDishPage.Detail.Notification.Success.Body\",\n defaultMessage: \"Ihr Gericht wurde erfolgreich erstellt\",\n });\n setTimeout(() => {\n displayNotification(status, title, message);\n showModal(false);\n showLoading(false);\n form.resetFields();\n setDishToEdit(null);\n resetImagesList();\n }, 2000);\n return;\n }\n }\n data[\"images\"] = JSON.stringify(imageUrls);\n }\n\n try {\n const res = await http.post(\n `gastro/${company_id}/category/${categoryId}/dish`,\n data\n );\n let status = \"success\";\n let title = intl.formatMessage({\n id: \"Success\",\n defaultMessage: \"Erfolg!\",\n });\n let message = intl.formatMessage({\n id: \"CreateDishPage.Detail.Notification.Success.Body\",\n defaultMessage: \"Ihr Gericht wurde erfolgreich erstellt\",\n });\n const dish = {\n id: res.data.payload.id,\n name: values.name,\n price: values.price,\n availability: values.availability,\n description: values.description,\n allergens: values.allergens,\n spice_level: values.spice_level,\n images: res.data.payload.images,\n preservatives: values.preservatives,\n };\n\n dishes[dishCategory.index].push(dish);\n dispatch(digitalMenuDishesSetter(dishes));\n setTimeout(() => {\n displayNotification(status, title, message);\n showModal(false);\n showLoading(false);\n form.resetFields();\n setDishToEdit(null);\n resetImagesList();\n }, 2000);\n } catch (error) {\n console.log(\"Error\", error);\n status = \"error\";\n title = intl.formatMessage({\n id: \"CreateDishPage.Detail.Notification.Error.Title\",\n defaultMessage: \"Gericht konnte nicht erstellt werden\",\n });\n message = getErrorMsg(error, intl, false, true);\n setTimeout(() => {\n displayNotification(status, title, message);\n showModal(false);\n showLoading(false);\n form.resetFields();\n setDishToEdit(null);\n resetImagesList();\n }, 2000);\n }\n }\n };\n\n const getBase64 = (file) => {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n };\n\n const removeFile = (file) => {\n const files = fileList.filter((aFile) => aFile.uid !== file.uid);\n setFileList(files);\n };\n\n const uploadButton = (\n
\n \n
Upload
\n
\n );\n\n const beforeUpload = async (file) => {\n file.thumbUrl = await getBase64(file);\n setFileList([file, ...fileList]);\n return false;\n };\n\n const deleteDish = async () => {\n try {\n const response = await http.delete(\n `gastro/${company_id}/category/${categoryId}/dish/${dishToEdit.id}`\n );\n dishes[dishCategory.index] = dishes[dishCategory.index].filter(\n (dish) => dish.id !== dishToEdit.id\n );\n dispatch(digitalMenuDishesSetter(dishes));\n showModal(false);\n setDishToEdit(null);\n resetImagesList();\n form.resetFields();\n const title = intl.formatMessage({\n id: \"OrganizeMenuPage.DeleteItem.Success.Title\",\n defaultMessage: \"Erfolg!\",\n });\n const body = intl.formatMessage({\n id: \"OrganizeMenuPage.DeleteItem.Success.Body\",\n defaultMessage: \"Der Menüpunkt wurde erfolgreich gelöscht\",\n });\n displayNotification(\"success\", title, body);\n } catch (error) {\n console.error(`Unable to delete dish ${dishToEdit.id}`, error);\n const title = intl.formatMessage({\n id: \"OrganizeMenuPage.DeleteItem.Error.Title\",\n defaultMessage: \"Der Löschvorgang ist fehlgeschlagen\",\n });\n const message = getErrorMsg(error, intl, false, true);\n displayNotification(\"error\", title, message);\n }\n };\n\n const editDish = async (values) => {\n showLoading(true);\n try {\n let data = {};\n const fields = Object.keys(values);\n if (!values.errorFields) {\n fields.map((field) => {\n let value = values[field];\n if (value !== undefined) {\n if (Array.isArray(value)) {\n if (field === \"preservatives\") {\n if (values[\"allergens\"] !== undefined) {\n value = values[\"allergens\"].concat(value);\n value = JSON.stringify(value);\n data[\"allergens\"] = value;\n return;\n }\n }\n if (field === \"multiprice\" && values[field] !== undefined) {\n let priceObj = {};\n values[field].forEach((el) => {\n priceObj[el.priceLabel] = el.priceValue;\n });\n value = JSON.stringify(priceObj);\n data[\"price\"] = value;\n values.price = values[field];\n delete values[field];\n return;\n }\n value = JSON.stringify(value);\n }\n if (field === \"price\" && values[field] !== undefined) {\n const price = { default: value };\n value = JSON.stringify(price);\n values.price = price;\n }\n data[field] = value;\n }\n });\n\n if (fileList) {\n let allImages = [], imageUrls = [];\n fileList.map((file) => {\n allImages.push(file);\n });\n if (allImages.length > 0) {\n imageUrls = await uploadImages(company_id, allImages, 'category/dish');\n if (imageUrls.length == 0) {\n const title = intl.formatMessage({\n id: \"CreateDishPage.Detail.Notification.ImageUploadError.Title\",\n defaultMessage: \"Entschuldigung! Sie können keine Bilder hochladen\"\n });\n const message = intl.formatMessage({\n id: \"CreateDishPage.Detail.Notification.Success.Body\",\n defaultMessage: \"Ihr Gericht wurde erfolgreich erstellt\",\n });\n setTimeout(() => {\n displayNotification(\"error\", title, message);\n showModal(false);\n showLoading(false);\n form.resetFields();\n setDishToEdit(null);\n resetImagesList();\n }, 2000);\n return;\n }\n }\n data[\"images\"] = JSON.stringify(imageUrls);\n }\n\n const response = await http.put(\n `gastro/${company_id}/category/${categoryId}/dish/${dishToEdit.id}`,\n data\n );\n dishes[dishCategory.index] = dishes[dishCategory.index].map((dish) => {\n if (dish.id === dishToEdit.id) {\n dish = {\n ...dish,\n ...values,\n images: response.data.payload.images,\n };\n }\n return dish;\n });\n dispatch(digitalMenuDishesSetter(dishes));\n const title = intl.formatMessage({\n id: \"OrganizeMenuPage.EditItem.Success.Title\",\n defaultMessage: \"Erfolg!\",\n });\n const body = intl.formatMessage({\n id: \"OrganizeMenuPage.EditItem.Success.Body\",\n defaultMessage: \"Ihre Änderung warerfolgreich\",\n });\n\n setTimeout(() => {\n displayNotification(\"success\", title, body);\n showModal(false);\n showLoading(false);\n form.resetFields();\n setDishToEdit(null);\n resetImagesList();\n }, 2000);\n }\n } catch (error) {\n console.error(`Unable to update dish: ${dishToEdit.id}`);\n const title = intl.formatMessage({\n id: \"OrganizeMenuPage.EditItem.Error.Title\",\n defaultMessage: \"Die Änderung war nicht erfolgreich\",\n });\n const message = getErrorMsg(error, intl, false, true);\n setTimeout(() => {\n displayNotification(\"error\", title, message);\n showModal(false);\n showLoading(false);\n form.resetFields();\n setDishToEdit(null);\n resetImagesList();\n }, 2000);\n }\n };\n\n const modalHeader = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Header\",\n defaultMessage: \"Menüpunkt erstellen\",\n });\n const nameLabel = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Name\",\n defaultMessage: \"Name\",\n });\n const availableLabel = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Available\",\n defaultMessage: \"Verfügbar\",\n });\n const priceLabel = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Price\",\n defaultMessage: \"Preis\",\n });\n const descriptionLabel = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Description\",\n defaultMessage: \"Beschreibung\",\n });\n const allergensLabel = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Allergens\",\n defaultMessage: \"Allergene\",\n });\n const preservativesLabel = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Preservatives\",\n defaultMessage: \"Inhaltsstoffe\",\n });\n const discardText = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Button.Discard\",\n defaultMessage: \"Verwerfen\",\n });\n const saveText = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Button.Save\",\n defaultMessage: \"Bestätigen\",\n });\n const updateText = intl.formatMessage({\n id: \"Button.Update\",\n defaultMessage: \"Updaten\",\n });\n const spiceText = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Spice\",\n defaultMessage: \"Schärfegrad\",\n });\n\n const multiPricing = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.MultiPricing\",\n defaultMessage: \"Mehrfache Preisoptionen\"\n });\n\n const addPrice = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.Button.AddPrice\",\n defaultMessage: \"Produktvariante hinzufügen\"\n });\n\n const priceLabelText = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.MultiPricing.Price.Label\",\n defaultMessage: \"Bezeichnung\"\n });\n\n const createInitialValues = (is_new_dish) => {\n const isSinglePrice = () => {\n if (dishToEdit !== null && dishToEdit.price instanceof Object) {\n const labels = Object.keys(dishToEdit.price);\n return labels.length === 1;\n }\n return false;\n };\n\n const makePrice = () => {\n if (dishToEdit !== null && dishToEdit.price instanceof Object) {\n /**\n * If the user just created/updated this dish, reopening will make\n * the multipricing object to be parsed again. Letting us with \n * { priceLabel: label, priceValue: {\n * priceLabel: label, priceValue: dishToEdit.price[label]\n * }\n * }\n * This is here to prevent it\n */\n if (dishToEdit.price instanceof Array) {\n return dishToEdit.price;\n }\n const labels = Object.keys(dishToEdit.price);\n // A single price dish would return an object with {default : price}\n if (labels.length === 1) return dishToEdit.price[labels[0]];\n // It is multi-pricing\n return labels.map((label) => {\n let a = { priceLabel: label, priceValue: dishToEdit.price[label] };\n return a;\n });\n }\n };\n\n const values = {\n remmeber: false,\n name: dishToEdit !== null ? dishToEdit.name : \"\",\n availability: dishToEdit !== null ? dishToEdit.availability : true,\n description: dishToEdit !== null ? dishToEdit.description : \"\",\n allergens: dishToEdit !== null ? dishToEdit.allergens : [],\n preservatives: dishToEdit !== null ? dishToEdit.preservatives : [],\n spice_level: dishToEdit !== null ? dishToEdit.spice_level : 0,\n };\n\n if (is_new_dish) {\n values.price = 0.0;\n values.multiprice = [\n { priceLabel: \"\", priceValue: 0 },\n { priceLabel: \"\", priceValue: 0 },\n ];\n setIsMultiPricing(false);\n }\n\n if (dishToEdit !== null) {\n if (isSinglePrice()) {\n setIsMultiPricing(false);\n values.price = makePrice();\n values.multiprice = [\n { priceLabel: \"\", priceValue: 0 },\n { priceLabel: \"\", priceValue: 0 },\n ];\n } else {\n values.multiprice = makePrice();\n if (!isMultiPricing) setIsMultiPricing(true);\n }\n }\n\n form.setFieldsValue(values);\n };\n\n useEffect(() => {\n if (dishToEdit !== null) {\n createInitialValues();\n } else {\n createInitialValues(true);\n setIsMultiPricing(null)\n }\n }, [isOpen])\n\n return (\n {\n form\n .validateFields()\n .then((values) => {\n if (dishToEdit === null) {\n onCreate(values);\n } else {\n editDish(values);\n }\n })\n .catch((info) => {\n console.log(\"Validate Failed:\", info);\n });\n }}\n >\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n null}\n listType=\"picture-card\"\n fileList={fileList}\n // onPreview={this.handlePreview}\n onRemove={removeFile}\n >\n {fileList.length >= 5 ? null : uploadButton}\n \n \n \n \n \n \n setIsMultiPricing(!isMultiPricing)}\n />\n \n \n {!isMultiPricing && (\n \n \n \n \n \n \n \n )}\n {isMultiPricing && (\n \n {(fields, { add, remove }) => (\n <>\n {fields.map(({ key, name, fieldKey, ...restField }) => (\n \n \n \n \n \n \n \n \n \n \n \n {key > 1 &&\n \n remove(name)}\n >\n {\" \"}\n -{\" \"}\n \n \n }\n \n ))}\n \n \n add()}\n >\n {addPrice}\n \n \n \n \n )}\n \n )}\n \n \n \n \n \n \n \n {\n (verticalId === 3) &&\n \n \n \n level.name)}\n className=\"chilli\"\n character={}\n />\n \n \n \n }\n {\n (verticalId === 3) &&\n \n \n \n \n \n \n \n \n \n \n \n \n }\n {dishToEdit !== null && (\n \n \n \n \n \n )}\n \n \n \n \n );\n}\n\nCreateDish.whyDidYouRender = {\n logOnDifferentValues: true,\n customName: \"createDish\",\n};\n\nexport default React.memo(CreateDish);\n","import React, {\n useRef,\n useCallback,\n useState,\n useEffect,\n} from \"react\";\nimport { DndProvider, useDrag, useDrop } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport { useDispatch, useSelector, batch } from \"react-redux\";\nimport { FormattedMessage } from 'react-intl';\nimport update from \"immutability-helper\";\nimport {\n Button,\n Col,\n Grid,\n Input,\n Popconfirm,\n Row,\n Space,\n Switch,\n Table,\n Typography,\n} from \"antd\";\nimport { getIntl } from \"../../utils/intl\";\nimport http, { getErrorMsg } from \"../../utils/http\";\nimport { displayNotification } from '../../components/Notification';\n\nimport { EditOutlined, MenuOutlined } from \"@ant-design/icons\";\nimport CreateDish from \"./CreateDish\";\nimport {\n dishSetter,\n digitalMenuDishesSetter,\n digitalMenuCatsSetter,\n} from \"../../redux/actions\";\n\nconst { Title, Text } = Typography;\n\nconst DragableBodyRow = ({\n index,\n moveRow,\n className,\n style,\n categoryIndex,\n ...restProps\n}) => {\n const ref = useRef();\n\n const [{ isOver, dropClassName }, drop] = useDrop({\n accept: \"DragableBodyRow\",\n collect: (monitor) => {\n const { index: dragIndex } = monitor.getItem() || {};\n if (dragIndex === index) {\n return {};\n }\n return {\n isOver: monitor.isOver(),\n dropClassName:\n dragIndex < index ? \" drop-over-downward\" : \" drop-over-upward\",\n };\n },\n drop: (item) => {\n moveRow(item.index, index, categoryIndex);\n },\n });\n const [, drag] = useDrag({\n type: \"DragableBodyRow\",\n item: { index },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n });\n drop(drag(ref));\n\n return (\n \n );\n};\n\nconst CategoryInput = ({\n changeCategoryName,\n setShowCategoryCreaction,\n createNewCategory,\n showDelete = false,\n placeholderText = 'New category',\n deleteCategory = () => null,\n }) => {\n const intl = getIntl();\n const Confirm = intl.formatMessage({\n id: \"OrganizeMenuPage.Category.Button.Save\",\n defaultMessage: \"Bestätigen\"\n });\n const Cancel = intl.formatMessage({\n id: \"Cancel\",\n defaultMessage: \"Abbrechen\"\n });\n const Delete = intl.formatMessage({\n id: \"OrganizeMenuPage.NewCategory.Delete\",\n defaultMessage: \"Kategorie löschen\"\n });\n const Disclaimer = intl.formatMessage({\n id: \"OrganizeMenuPage.NewCategory.Disclaimer\",\n defaultMessage: `Hiermit wird die Kategorie inklusive der Inhalte gelöscht.\n Sind Sie sicher, dass Sie den Löschvorgang durchführen möchten?`\n });\n\n return (\n \n \n \n \n \n \n \n \n \n { showDelete &&\n \n \n \n \n \n }\n \n \n \n \n \n \n )\n};\n\nconst Category = ({\n className,\n style,\n category,\n categoryIndex,\n showModal,\n setDishToEdit,\n ...props\n}) => {\n const dispatch = useDispatch();\n const dishes = useSelector((state) => state.digitalMenuConfig.dishes);\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const verticalId = useSelector((state) => state.companyConfig.vertical_id);\n const [shouldSaveDishOrder, setShouldSaveDishOrder] = useState(false);\n const [shouldSaveCategoryOrder, setShouldSaveCategoryOrder] = useState(false);\n const [showEditCat, setShowEditCat] = useState(false);\n const [newCategoryName, setnewCategoyName] = useState('');\n const { useBreakpoint } = Grid;\n const screens = useBreakpoint()\n const intl = getIntl();\n\n let observer = null;\n if (dishes !== null) {\n observer = dishes;\n }\n\n const sort = intl.formatMessage({\n id: \"OrganizeMenuPage.DishTable.Column.Sort\",\n defaultMessage: \"Sortieren\"\n });\n const title = intl.formatMessage({\n id: \"OrganizeMenuPage.DishTable.Column.Name\",\n defaultMessage: \"Name\"\n });\n const description = intl.formatMessage({\n id: \"OrganizeMenuPage.DishTable.Column.Description\",\n defaultMessage: \"Beschreibung\"\n });\n const price = intl.formatMessage({\n id: \"OrganizeMenuPage.DishTable.Column.Price\",\n defaultMessage: \"Preis\"\n });\n const available = intl.formatMessage({\n id: \"OrganizeMenuPage.DishTable.Column.Available\",\n defaultMessage: \"Verfügbar\"\n });\n const editButtonText = intl.formatMessage({\n id: \"OrganizeMenuPage.DishTable.Column.Button.Edit\",\n defaultMessage: \"Bearbeiten\"\n });\n\n const EditCategory = intl.formatMessage({\n id: \"OrganizeMenuPage.NewCategory.Edit\",\n defaultMessage: \"Name der Kategorie bearbeiten\"\n });\n\n const multiPricing = intl.formatMessage({\n id: \"OrganizeMenuPage.DishModal.MultiPricing\",\n defaultMessage: \"Mehrfache Preisoptionen\"\n });\n\n let newItemId = 'OrganizeMenuPage.DishTable.Button.NewDish';\n let itemOrderId = 'OrganizeMenuPage.DishTable.Button.DishOrder';\n if (verticalId && verticalId == 4){\n newItemId = 'OrganizeMenuPage.Business.DishTable.Button.NewDish';\n itemOrderId = 'OrganizeMenuPage.Business.DishTable.Button.DishOrder';\n }\n\n const changeAvailability = async (record) => {\n const newAvailability = !record.availability;\n const dishIndex = dishes[categoryIndex].map(dish => dish.id).indexOf(record.id);\n dishes[categoryIndex][dishIndex].availability = newAvailability;\n try {\n const response = await http.put(\n `gastro/${companyId}/category/${category.id}/dish/${dishes[categoryIndex][dishIndex].id}`,\n {'availability': newAvailability}\n );\n if (response.status === 200) {\n dispatch(digitalMenuDishesSetter([...dishes]));\n } else {\n throw new Error(response);\n }\n } catch (error) {\n console.log(error);\n }\n\n }\n\n const columns = [\n {\n title: sort,\n dataIndex: \"sort\",\n width: 30,\n className: \"drag-visible\",\n render: () => ,\n },\n {\n title: title,\n dataIndex: \"name\",\n className: \"drag-visible\",\n render: (item) => {\n return (\n { item }\n );\n }\n },\n {\n title: description,\n dataIndex: \"description\",\n render: (item) => {\n if (!item) return '';\n return (\n { item }\n );\n }\n },\n {\n title: price,\n dataIndex: \"price\",\n render: (item) => {\n let types = [];\n if (item instanceof Object) {\n types = Object.keys(item);\n }\n if (types.length === 1) {\n return Number(item[types[0]]).toFixed(2);\n } else if (types.length > 1) {\n return multiPricing;\n }\n return \"0.00\";\n },\n },\n {\n title: available,\n dataIndex: \"availability\",\n render: (item, record) => {\n return changeAvailability(record)}/>\n },\n },\n {\n title: editButtonText,\n render: (item) => (\n {\n setDishToEdit(item);\n showModal(true);\n dispatch(\n dishSetter({ category: { index: categoryIndex, ...category } })\n );\n }}\n />\n ),\n },\n ];\n\n const categoryData = useSelector(\n (state) => state.digitalMenuConfig.categories\n );\n\n useEffect(() => {\n if (shouldSaveCategoryOrder) {\n saveCategoryOrder();\n }\n }, [categoryData, shouldSaveCategoryOrder]);\n\n\n const saveCategoryOrder = () => {\n let ids = categoryData.map((dish) => {\n return dish.id;\n });\n const data = { ids: ids };\n http\n .post(`/gastro/${companyId}/category_rank`, data)\n .then((res) => {\n console.log(res);\n })\n .catch((error) => {\n console.log(error);\n });\n };\n\n\n const moveCategory = useCallback(\n (dragIndex, hoverIndex) => {\n const dragCategory = categoryData[dragIndex];\n const dragDishes = dishes[dragIndex];\n\n const resultCategory = update(categoryData, {\n $splice: [\n [dragIndex, 1],\n [hoverIndex, 0, dragCategory],\n ],\n });\n\n const reorderDishes = update(dishes, {\n $splice: [\n [dragIndex, 1],\n [hoverIndex, 0, dragDishes],\n ],\n });\n // Re-render only once\n batch(() => {\n dispatch(digitalMenuDishesSetter(reorderDishes));\n dispatch(digitalMenuCatsSetter(resultCategory));\n });\n setShouldSaveCategoryOrder(true);\n },\n [categoryData, dishes]\n );\n\n const moveRow = useCallback(\n (dragIndex, hoverIndex) => {\n setShouldSaveDishOrder(true);\n const dragRow = dishes[categoryIndex][dragIndex];\n\n const result = update(dishes, {\n [categoryIndex]: {\n $splice: [\n [dragIndex, 1],\n [hoverIndex, 0, dragRow],\n ],\n },\n });\n dispatch(digitalMenuDishesSetter(result));\n },\n [observer]\n );\n\n const ref = useRef(null);\n\n const components = {\n body: {\n row: DragableBodyRow,\n },\n };\n\n const [{ isOver, dropClassName }, drop] = useDrop({\n accept: \"DraggableCategory\",\n collect: (monitor) => {\n const { categoryIndex: dragIndex } = monitor.getItem() || {};\n if (dragIndex === categoryIndex) {\n return {};\n }\n return {\n isOver: monitor.isOver(),\n dropClassName:\n dragIndex < categoryIndex\n ? \" drop-over-downward\"\n : \" drop-over-upward\",\n };\n },\n drop: (item) => {\n moveCategory(item.categoryIndex, categoryIndex);\n },\n });\n const [, drag] = useDrag({\n type: \"DraggableCategory\",\n item: { categoryIndex },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n });\n drop(drag(ref));\n\n const createNewDish = (catIndex, category) => {\n dispatch(dishSetter({ category: { index: catIndex, ...category } }));\n showModal(true);\n };\n\n const saveDishOrder = (catIndex) => {\n if (!dishes) {\n // Notification\n return;\n }\n let ids = [];\n dishes[catIndex].map((dish) => {\n ids.push(dish.id);\n });\n const data = { ids: ids };\n http\n .post(`/gastro/${companyId}/category/${category.id}/dish_rank`, data)\n .then((res) => {\n setShouldSaveDishOrder(false);\n const title = intl.formatMessage(\n {\n id: \"OrganizeMenuPage.RankDish.Success.Title\",\n defaultMessage: \"Erfolg!\"\n }\n );\n const body = intl.formatMessage(\n {\n id: \"OrganizeMenuPage.RankDish.Success.Body\",\n defaultMessage: \"Die Position der Menüpunkte wurde erfolgreich aktualisiert\"\n }\n );\n displayNotification(\"success\", title, body);\n })\n .catch((error) => {\n console.log(error);\n const title = intl.formatMessage(\n {\n id: \"OrganizeMenuPage.RankDish.Error.Title\",\n defaultMessage: \"Die Änderung ist fehlgeschlagen\"\n }\n );\n const message = getErrorMsg(error, intl, false, true);\n displayNotification(\"error\", title, message);\n });\n };\n\n const editCategoryName = (e) => {\n setnewCategoyName(e.target.value)\n }\n\n const showEditCategory = () => {\n setShowEditCat(!showEditCat);\n setnewCategoyName('');\n }\n const persistCategotryEdit = async () => {\n if (newCategoryName) {\n try {\n const categoryId = category.id;\n const result = await http.put(`/gastro/${companyId}/category/${categoryId}`, {\n name: newCategoryName,\n });\n if (result.status === 204) {\n const _categories = categoryData.map(cat => {\n if (cat.id === category.id) {\n cat.name = newCategoryName;\n }\n return cat;\n });\n dispatch(digitalMenuCatsSetter(_categories));\n showEditCategory();\n }\n } catch (error) {\n console.log(error);\n }\n }\n };\n\n const deleteCategory = async () => {\n try {\n const categoryId = category.id;\n const result = await http.delete(`/gastro/${companyId}/category/${categoryId}`);\n if (result.status === 204) {\n const _categories = categoryData.filter(cat => cat.id !== category.id);\n dispatch(digitalMenuCatsSetter(_categories));\n }\n } catch (error) {\n console.log(error);\n }\n }\n\n return (\n \n \n \n { showEditCat &&\n \n \n \n }\n { !showEditCat &&\n <>\n \n \n <MenuOutlined style={{ cursor: \"grab\", color: \"#999\" }} />{\" \"}\n {category.name}\n {\" \"}<EditOutlined onClick={() => showEditCategory()}/>\n \n \n \n
\n \n createNewDish(categoryIndex, category)}\n >\n \n \n saveDishOrder(categoryIndex, category)}\n >\n \n \n \n
\n \n \n }\n \n \n \n {\n // return `${index}-${record.name}`;\n // }}\n onRow={(record, index) => ({\n type: \"DragableBodyRow\",\n index,\n moveRow,\n categoryIndex,\n })}\n />\n \n \n \n \n );\n};\n\nfunction OrganizeMenu(props) {\n const intl = getIntl();\n const [dishModalOpen, setDishModalOpen] = useState(false);\n const [dishToEdit, setDishToEdit] = useState(null);\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const dispatch = useDispatch();\n\n // FETCH DATA\n useEffect(() => {\n http\n .get(`gastro/${companyId}/menu`, {\n params: {\n available_only: false,\n },\n })\n .then((response) => {\n const { payload } = response.data;\n let transformedMenu = [];\n if (Object.keys(payload).indexOf('menu_url') === -1) {\n Object.entries(payload).map(([key, value]) => {\n let dishes = [];\n if (value.dishes) {\n value[\"dishes\"].map((dish, index) => {\n dishes.push({\n id: dish[\"dish_id\"],\n name: dish[\"dish_name\"],\n price: dish[\"dish_price\"],\n description: dish[\"description\"],\n allergens: dish[\"allergens\"].reduce((acc, al) => {\n if (typeof al.is_preservative !== 'undefined' && !al.is_preservative) {\n acc.push(al.allergen_id);\n }\n return acc;\n }, []),\n preservatives: dish[\"allergens\"].reduce((acc, al) => {\n if (typeof al.is_preservative !== 'undefined' && al.is_preservative) {\n acc.push(al.allergen_id);\n }\n return acc;\n }, []),\n availability: dish[\"availability\"],\n index: index,\n images: dish[\"dish_images\"],\n spice_level: dish['spice_level'] !== null ? dish['spice_level'] : 0,\n });\n });\n }\n transformedMenu.push({\n id: key,\n name: value[\"category_name\"],\n dishes: dishes,\n });\n });\n }\n\n dispatch(\n digitalMenuDishesSetter(transformedMenu.map((cat) => cat.dishes))\n );\n dispatch(\n digitalMenuCatsSetter(\n transformedMenu.map((cat) => {\n delete cat.dishes;\n return cat;\n })\n )\n );\n });\n }, []);\n\n const RenderCategory = (props) => {\n const [showCategoryCreaction, setShowCategoryCreaction] = useState(false);\n const [newCategoryName, setNewCategoryName] = useState(null);\n const dispatch = useDispatch();\n const intl = getIntl();\n const NewCategory = intl.formatMessage({\n id: \"OrganizeMenuPage.NewCategory\",\n defaultMessage: \"Neuer Kategoriename\"\n });\n \n const categoryData = useSelector(\n (state) => state.digitalMenuConfig.categories\n );\n\n const dishes = useSelector(state => state.digitalMenuConfig.dishes)\n\n const changeCategoryName = (e) => {\n setNewCategoryName(e.target.value);\n };\n\n const createNewCategory = async () => {\n try {\n const result = await http.post(`gastro/${companyId}/category`, {\n name: newCategoryName,\n });\n\n categoryData.push({ id: result.data.payload.id, name: newCategoryName });\n dishes.push([]);\n dispatch(digitalMenuCatsSetter([...categoryData]));\n dispatch(digitalMenuDishesSetter([...dishes]));\n const title = intl.formatMessage(\n {\n id: \"OrganizeMenuPage.NewCategory.Success.Title\",\n defaultMessage: \"Erfolg!\"\n }\n );\n const body = intl.formatMessage(\n {\n id: \"OrganizeMenuPage.NewCategory.Success.Body\",\n defaultMessage: \"Die neue Kategorie wurde erfolgreich kreiert\"\n }\n );\n displayNotification(\"success\", title, body);\n } catch (error) {\n console.error(\"Not able to create category\", error);\n const title = intl.formatMessage(\n {\n id: \"OrganizeMenuPage.NewCategory.Error.Title\",\n defaultMessage: \"Die Erstellung der neuen Kategorie ist fehlgeschlagen!\"\n }\n );\n const message = getErrorMsg(error, intl, false, true);\n displayNotification(\"error\", title, message);\n }\n setShowCategoryCreaction(false)\n };\n\n const toRender = [];\n\n if (categoryData && categoryData !== null) {\n toRender.push(\n
\n {Object.keys(categoryData).map((index) => (\n \n ))}\n
\n );\n }\n toRender.push(\n
\n {showCategoryCreaction === false && (\n \n
\n setShowCategoryCreaction(true)}\n >\n \n \n \n \n )}\n {showCategoryCreaction === true && (\n \n )}\n \n );\n\n return <>{toRender};\n };\n\n return (\n
\n \n \n
\n \n <FormattedMessage\n id=\"OrganizeMenuPage.DigitalMenu.SubHeader\"\n defaultMessage=\"Verwalten Sie Ihre digitale Welcomy Speise- und Getränkekarte\"\n ></FormattedMessage>\n \n \n \n \n \n \n \n );\n}\n\nexport default React.memo(OrganizeMenu);\n","import React, { useState } from \"react\";\nimport { FormattedMessage } from 'react-intl';\n\nimport { Button, Col, Row, Select, Typography } from \"antd\";\nimport { getIntl } from \"../../utils/intl\";\n\nimport PdfUpload from \"./PdfUpload\";\nimport cooking from \"../../static/cooking.svg\";\nimport ProductSVG from \"../../static/product-list-mobile\";\nimport OrganizeMenu from \"./OrganizeMenu\";\nimport SpiceLevelsContext from \"./SpiceLevelCtx\";\nimport { useHistory } from \"react-router\";\nimport { useSelector } from \"react-redux\";\nimport { HashLink } from \"react-router-hash-link\";\n\nconst { Option } = Select;\nconst { Text, Title, Paragraph } = Typography;\n\nconst scrollWithOffset = (el) => {\n el.scrollIntoView({behavior: 'smooth', block: 'center' })\n}\n\nconst Categories = ({data}) => {\n\n if (!data) return null;\n return data.map(cat => (\n \n {cat.name}\n \n ));\n};\n\nfunction DigitalMenu(props) {\n const history = useHistory();\n const intl = getIntl();\n const [menuType, setMenuType] = useState(\"digital\");\n const verticalId = useSelector(state => state.companyConfig.vertical_id);\n const categories = useSelector(\n (state) => state.digitalMenuConfig.categories\n );\n\n\n /**\n * Translations\n */\n\n let pageTitleId = \"DigitalMenuPage.Header\";\n let pageDescription = \"OrganizeMenuPage.Description.Text\";\n let menuTypeText = \"OrganizeMenuPage.MenuTypeDropDown.Text\";\n if (verticalId && verticalId === 4){\n pageTitleId = \"DigitalMenuPage.Business.Header\";\n pageDescription = \"OrganizeMenuPage.Business.Description.Text\";\n menuTypeText = \"OrganizeMenuPage.Business.MenuTypeDropDown.Text\";\n }\n const pageTitle = intl.formatMessage({\n id: pageTitleId,\n defaultMessage: \"Digitale Speisekarte\",\n });\n const printButton = intl.formatMessage({\n id: \"DigitalMenuPage.PrintFunction\",\n defaultMessage: \"PDF generieren\",\n });\n\n /**\n * End Translations\n */\n\n const selectTypeOfMenu = (value) => {\n setMenuType(value);\n };\n\n const generateMenuView = () => {\n if (menuType === \"pdf\") {\n return ;\n } else if (menuType === \"digital\") {\n return (\n \n \n \n );\n }\n return null;\n };\n\n return (\n
\n \n
\n \n \n {verticalId === 3 ? (\n \n \n \n ) : (\n \n \n \n )}\n \n \n \n \n {pageTitle}\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {menuType === \"digital\" && (\n \n history.push(\"/dashboard/print-menu\")}\n >\n {printButton}\n \n \n )}\n \n {generateMenuView()}\n \n \n {categories && (\n
\n
\n Categories\n
\n \n
\n
\n
\n )}\n \n \n \n );\n}\n\nexport default DigitalMenu;\n","import React, { useEffect, useRef, useState } from \"react\";\nimport { Button, Checkbox, Col, Form, Input, Row, Typography } from \"antd\";\nimport DishesContext, {\n useDishes,\n} from \"../Tablet/public/components/Restaurant/DishesContext\";\nimport { useSelector } from \"react-redux\";\nimport { getIntl } from \"../../utils/intl\";\nimport AllergensContext, {\n useAllergens,\n} from \"../Tablet/public/components/Restaurant/AllergensContext\";\nimport { displayNotification } from \"../../components/Notification\";\nimport { useReactToPrint } from \"react-to-print\";\n\nconst { Title } = Typography;\n\nconst MenuTemplate = React.forwardRef(\n ({ toExport, logoUrl, allergens, ...props }, ref) => {\n const totalAllergens = allergens.length;\n return (\n <>\n \n
\n
\n
\n \n
\n
\n {toExport?.restaurantName}\n
\n {toExport?.restaurantSubtitle && (\n
\n {toExport?.restaurantSubtitle}\n
\n )}\n
\n {toExport?.categories.map((cat) => (\n
\n
\n {cat.category_name}\n
\n {cat.dishes.map((dish) => (\n \n
\n \n \n \n \n \n \n ))}\n
\n
\n \n \n {dish.dish_name}\n {dish.allergens.length > 0 &&\n dish.allergens\n .map((al) => {\n if (!al.is_preservative)\n return (\n <sup className=\"allergens--sup\">\n {al.allergen_id}\n </sup>\n );\n })\n .reduce((accu, elem) => {\n if (elem)\n return accu === null\n ? [elem]\n : [\n ...accu,\n <sup className=\"allergens--sup\">\n ,{\" \"}\n </sup>,\n elem,\n ];\n }, null)}\n \n \n
\n

{dish.description}

\n
\n \n {dish.dish_price &&\n Object.keys(dish.dish_price)?.map((price) => (\n
\n {price !== \"default\" && {price}}\n {`${Number(\n dish.dish_price[price]\n )?.toFixed(2)} €`}
\n \n \n \n
\n ))}\n \n ))}\n \n \n \n );\n }\n);\n\nconst AllergensFooter = ({allergens}) => {\n const totalAllergens = allergens.length;\n return (\n
\n
\n
\n \n Allergene Informationen\n \n
\n {\n allergens\n .map((al, index) => {\n if (!al.is_preservative)\n return (
{`${al.id}. ${al.name}${index + 1 !== totalAllergens ? `, `: ``}`}
);\n })\n }\n
\n
\n );\n}\n\nfunction Body(props) {\n const [form] = Form.useForm();\n const companyLogo = useSelector((state) => state.companyConfig.company_logo);\n const hubLogo = useSelector((state) => state.hubConfig.hubLogo);\n\n const logoUrl = hubLogo || companyLogo;\n\n const companyName = useSelector((state) => state.companyConfig.name);\n const verticalId = useSelector(state => state.companyConfig.vertical_id);\n const [toExport, setToExport] = useState();\n const [checkAll, setCheckAll] = useState(false);\n const intl = getIntl();\n const allergens = useAllergens();\n const pdfRef = useRef();\n const categories = useDishes();\n const [plainOptions, setPlainOptions] = useState([]);\n const [checkedList, setCheckedList] = useState([]);\n const handlePrint = useReactToPrint({\n content: () => pdfRef.current,\n documentTitle: \"Welcomy - Menu\",\n removeAfterPrint: true,\n });\n\n let pageTitleId = \"PrintMenuPage.Title\";\n let subTitleId = \"PrintMenuPage.Subtitle\";\n let companyNameId = \"PrintMenuPage.RestaurantName\";\n if (verticalId && verticalId === 4){\n pageTitleId = \"PrintMenuPage.Business.Title\";\n subTitleId = \"PrintMenuPage.Business.Subtitle\";\n companyNameId = \"PrintMenuPage.Business.RestaurantName\";\n }\n const pageTitle = intl.formatMessage({\n id: pageTitleId,\n defaultMessage: \"Welcomy Menükarten-Druckfunktion - Betaversion\",\n });\n const pageSubtitle = intl.formatMessage({\n id: subTitleId,\n defaultMessage: \"Welcomy Menükarten-Druckfunktion - Betaversion\",\n });\n const formRestaurantName = intl.formatMessage({id: companyNameId});\n const formRestaurantSubtitle = intl.formatMessage({\n id: \"PrintMenuPage.RestaurantSubtitle\",\n defaultMessage: \"Welcomy Menükarten-Druckfunktion - Betaversion\",\n });\n const formRestaurantCategories = intl.formatMessage({\n id: \"PrintMenuPage.RestaurantCategories\",\n defaultMessage: \"Welcomy Menükarten-Druckfunktion - Betaversion\",\n });\n const categoriesSelectionError = intl.formatMessage({\n id: \"PrintMenuPage.Error.Categories\",\n defaultMessage: \"Sie müssen mindestens eine Kategorie auswählen\",\n });\n const pageExport = intl.formatMessage({\n id: \"Export\",\n defaultMessage: \"Exportieren\",\n });\n\n const onChangeCheckbox = (value) => {\n setCheckedList(value);\n setCheckAll(value.length === plainOptions.length);\n };\n\n const onCheckAllChange = (value) => {\n setCheckedList(value.target.checked ? plainOptions : []);\n setCheckAll(value.target.checked);\n };\n\n const exportCats = () => {\n form\n .validateFields()\n .then((values) => {\n if (checkedList.length == 0) {\n displayNotification(\"error\", categoriesSelectionError, \"\");\n return;\n }\n values.categories = checkedList;\n\n let toExport = values;\n const selectedCategories = [];\n categories.map((category, _) => {\n checkedList.map((category_name, _) => {\n if (category.category_name == category_name) {\n selectedCategories.push(category);\n }\n });\n });\n toExport.categories = selectedCategories;\n setToExport({ ...toExport });\n })\n .catch((info) => {\n console.error(\"Validation failed:\", info);\n });\n };\n\n useEffect(() => {\n if (toExport && toExport.categories.length > 0) {\n handlePrint();\n }\n }, [toExport]);\n\n useEffect(() => {\n if (categories) {\n const category_names = [];\n categories.map((category, _) => {\n category_names.push(category.category_name);\n });\n setPlainOptions(category_names);\n }\n }, [categories]);\n\n return (\n
\n \n \n \n \n \n \n {pageTitle}\n \n \n \n \n {pageSubtitle}\n \n \n \n \n \n \n \n \n \n \n \n \n Check all\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n );\n}\n\nfunction PrintMenu(props) {\n return (\n \n \n \n \n \n );\n}\n\nexport default PrintMenu;\n","import * as React from \"react\"\n\nconst SvgComponent = (props) => (\n \n \n \n \n \n \n\n \n \n \n \n \n)\n\nexport default SvgComponent\n","import React, { useEffect, useState } from \"react\";\nimport { Row, Col, Typography, Table, Button } from \"antd\";\nimport { useSelector } from \"react-redux\";\nimport http from \"../../utils/http\";\nimport moment from \"moment\";\nimport SubscriptionsImage from \"../../static/Page Headers/SubscriptionsImage\";\nimport downloader from \"../../components/Downloader\";\nimport { getIntl } from \"../../utils/intl\";\nimport { displayNotification } from \"../../components/Notification\";\n\nconst { Title, Paragraph } = Typography;\n\nfunction Subscriptions(props) {\n const [subscriptionsData, setSubscriptionsData] = useState([]);\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const intl = getIntl();\n\n const deleteError = intl.formatMessage({\n id: \"General.ErrorNotification.Body\",\n defaultMessage:\n \"Etwas ist schief gelaufen! Wenn das Problem weiterhin besteht, bitte kontaktieren Sie unser freundliches Support-Team! :)\",\n });\n\n const title = intl.formatMessage({\n id: \"SubscriptionsPage.Title\",\n defaultMessage: \"Newsletter Manager\",\n });\n\n const body = intl.formatMessage({\n id: \"SubscriptionsPage.Body\",\n defaultMessage:\n \"Auf dieser Seite sehen Sie eine Übersicht der Personen, die Ihren Newsletter abonniert haben. Sie können den Namen und E-Mail-Adresse der Abonnenten in eine Excel-Datei exportieren, um sie für gezielte Werbung und Marketingkampagnen zu verwenden.\",\n });\n\n const button = intl.formatMessage({\n id: \"SubscriptionsPage.Button\",\n defaultMessage: \"Kontaktliste exportieren\",\n });\n\n const fullname = intl.formatMessage({\n id: \"SubscriptionsPage.FullName\",\n defaultMessage: \"Vollständiger Name\",\n });\n\n const email = intl.formatMessage({\n id: \"SubscriptionsPage.Email\",\n defaultMessage: \"E-mail\",\n });\n\n const headerActions = intl.formatMessage({\n id: \"VisitorLogPage.Table.Column.Actions\",\n defaultMessage: \"Aktionen\",\n });\n\n const deleteBtn = intl.formatMessage({\n id: \"Delete\",\n defaultMessage: \"Löschen\",\n });\n\n const columns = [\n { title: fullname, dataIndex: \"full_name\", key: \"full_name\" },\n { title: email, dataIndex: \"email\", key: \"email\" },\n {\n title: headerActions,\n key: \"actions\",\n render: (_, record) => {\n return subscriptionsData.length >= 1 ? (\n \n ) : null;\n },\n },\n ];\n\n const removeSubFromList = (id) => {\n const subs = subscriptionsData.filter(sub => sub.user_id !== id);\n setSubscriptionsData(subs);\n } \n\n const deleteSubscription = async (record) => {\n try {\n const result = await http.delete(\n `gastro/${companyId}/subscription/${record.user_id}`\n );\n if (result.status === 204) {\n removeSubFromList(record.user_id);\n }\n } catch (error) {\n displayNotification(\"error\", \"\", deleteError);\n }\n };\n\n useEffect(() => {\n const getSubs = async () => {\n const result = await http.get(`gastro/${companyId}/subscription`);\n setSubscriptionsData(result.data.payload);\n };\n getSubs();\n }, []);\n\n const exportCSV = () => {\n const header = `${fullname},${email},\\n`;\n const body = subscriptionsData\n .map((sub) => `${sub.full_name},${sub.email},`)\n .join(\"\\n\");\n\n downloader(\n `${header}${body}`,\n `subscribers-list-${moment().local().format(\"YYYY-MM-DD\")}`\n );\n };\n\n return (\n
\n \n \n \n
\n \n \n
\n \n
\n \n
\n \n \n
\n {title}\n
\n \n
\n \n \n
\n {body}\n
\n \n
\n \n \n \n {button}\n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default Subscriptions;\n","export default (toDownload, fileName) => {\n const blob = new Blob([toDownload], { type: \"octet/stream\" });\n const url = window.URL.createObjectURL(blob);\n const link = document.createElement(\"a\");\n\n link.setAttribute(\"href\", url);\n link.setAttribute(\"download\", `${fileName}-welcomy.csv`);\n document.body.appendChild(link); // Required for FF\n\n link.click();\n window.URL.revokeObjectURL(url);\n};","const editorTheme = {\n ltr: \"ltr\",\n rtl: \"rtl\",\n placeholder: \"editor-placeholder\",\n paragraph: \"editor-paragraph\",\n quote: \"editor-quote\",\n heading: {\n h1: \"editor-heading-h1\",\n h2: \"editor-heading-h2\",\n h3: \"editor-heading-h3\",\n h4: \"editor-heading-h4\",\n h5: \"editor-heading-h5\"\n },\n list: {\n nested: {\n listitem: \"editor-nested-listitem\"\n },\n ol: \"editor-list-ol\",\n ul: \"editor-list-ul\",\n listitem: \"editor-listitem\"\n },\n image: \"editor-image\",\n link: \"editor-link\",\n text: {\n bold: \"editor-text-bold\",\n italic: \"editor-text-italic\",\n overflowed: \"editor-text-overflowed\",\n hashtag: \"editor-text-hashtag\",\n underline: \"editor-text-underline\",\n strikethrough: \"editor-text-strikethrough\",\n underlineStrikethrough: \"editor-text-underlineStrikethrough\",\n code: \"editor-text-code\"\n },\n code: \"editor-code\",\n codeHighlight: {\n atrule: \"editor-tokenAttr\",\n attr: \"editor-tokenAttr\",\n boolean: \"editor-tokenProperty\",\n builtin: \"editor-tokenSelector\",\n cdata: \"editor-tokenComment\",\n char: \"editor-tokenSelector\",\n class: \"editor-tokenFunction\",\n \"class-name\": \"editor-tokenFunction\",\n comment: \"editor-tokenComment\",\n constant: \"editor-tokenProperty\",\n deleted: \"editor-tokenProperty\",\n doctype: \"editor-tokenComment\",\n entity: \"editor-tokenOperator\",\n function: \"editor-tokenFunction\",\n important: \"editor-tokenVariable\",\n inserted: \"editor-tokenSelector\",\n keyword: \"editor-tokenAttr\",\n namespace: \"editor-tokenVariable\",\n number: \"editor-tokenProperty\",\n operator: \"editor-tokenOperator\",\n prolog: \"editor-tokenComment\",\n property: \"editor-tokenProperty\",\n punctuation: \"editor-tokenPunctuation\",\n regex: \"editor-tokenVariable\",\n selector: \"editor-tokenSelector\",\n string: \"editor-tokenSelector\",\n symbol: \"editor-tokenProperty\",\n tag: \"editor-tokenProperty\",\n url: \"editor-tokenOperator\",\n variable: \"editor-tokenVariable\"\n }\n};\n\nexport default editorTheme;\n","import React from 'react';\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useCallback, useEffect, useMemo, useRef, useState } from \"react\";\nimport {\n CAN_REDO_COMMAND,\n CAN_UNDO_COMMAND,\n REDO_COMMAND,\n UNDO_COMMAND,\n SELECTION_CHANGE_COMMAND,\n FORMAT_TEXT_COMMAND,\n FORMAT_ELEMENT_COMMAND,\n $getSelection,\n $isRangeSelection,\n $createParagraphNode,\n $getNodeByKey\n} from \"lexical\";\nimport { $isLinkNode, TOGGLE_LINK_COMMAND } from \"@lexical/link\";\nimport {\n $isParentElementRTL,\n $wrapLeafNodesInElements,\n $isAtNodeEnd\n} from \"@lexical/selection\";\nimport { $getNearestNodeOfType, mergeRegister } from \"@lexical/utils\";\nimport {\n INSERT_ORDERED_LIST_COMMAND,\n INSERT_UNORDERED_LIST_COMMAND,\n REMOVE_LIST_COMMAND,\n $isListNode,\n ListNode\n} from \"@lexical/list\";\nimport { createPortal } from \"react-dom\";\nimport {\n $createHeadingNode,\n $createQuoteNode,\n $isHeadingNode\n} from \"@lexical/rich-text\";\nimport {\n $createCodeNode,\n $isCodeNode,\n getDefaultCodeLanguage,\n getCodeLanguages\n} from \"@lexical/code\";\nimport { useDispatch, useSelector } from 'react-redux';\nimport { setRichDocumentSaved } from \"../../../redux/actions\";\nimport { getIntl } from '../../../utils/intl';\n\nconst LowPriority = 1;\n\nconst supportedBlockTypes = new Set([\n \"paragraph\",\n \"quote\",\n \"code\",\n \"h1\",\n \"h2\",\n \"ul\",\n \"ol\"\n]);\n\nconst blockTypeToBlockName = {\n code: \"Code Block\",\n h1: \"Large Heading\",\n h2: \"Small Heading\",\n h3: \"Heading\",\n h4: \"Heading\",\n h5: \"Heading\",\n ol: \"Numbered List\",\n paragraph: \"Normal\",\n quote: \"Quote\",\n ul: \"Bulleted List\"\n};\n\nfunction Divider() {\n return
;\n}\n\nfunction positionEditorElement(editor, rect) {\n if (rect === null) {\n editor.style.opacity = \"0\";\n editor.style.top = \"-1000px\";\n editor.style.left = \"-1000px\";\n } else {\n editor.style.opacity = \"1\";\n editor.style.top = `${rect.top + rect.height + window.pageYOffset + 10}px`;\n editor.style.left = `${\n rect.left + window.pageXOffset - editor.offsetWidth / 2 + rect.width / 2\n }px`;\n }\n}\n\nfunction FloatingLinkEditor({ editor }) {\n const editorRef = useRef(null);\n const inputRef = useRef(null);\n const mouseDownRef = useRef(false);\n const [linkUrl, setLinkUrl] = useState(\"\");\n const [isEditMode, setEditMode] = useState(false);\n const [lastSelection, setLastSelection] = useState(null);\n\n const updateLinkEditor = useCallback(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const node = getSelectedNode(selection);\n const parent = node.getParent();\n if ($isLinkNode(parent)) {\n setLinkUrl(parent.getURL());\n } else if ($isLinkNode(node)) {\n setLinkUrl(node.getURL());\n } else {\n setLinkUrl(\"\");\n }\n }\n const editorElem = editorRef.current;\n const nativeSelection = window.getSelection();\n const activeElement = document.activeElement;\n\n if (editorElem === null) {\n return;\n }\n\n const rootElement = editor.getRootElement();\n if (\n selection !== null &&\n !nativeSelection.isCollapsed &&\n rootElement !== null &&\n rootElement.contains(nativeSelection.anchorNode)\n ) {\n const domRange = nativeSelection.getRangeAt(0);\n let rect;\n if (nativeSelection.anchorNode === rootElement) {\n let inner = rootElement;\n while (inner.firstElementChild != null) {\n inner = inner.firstElementChild;\n }\n rect = inner.getBoundingClientRect();\n } else {\n rect = domRange.getBoundingClientRect();\n }\n\n if (!mouseDownRef.current) {\n positionEditorElement(editorElem, rect);\n }\n setLastSelection(selection);\n } else if (!activeElement || activeElement.className !== \"link-input\") {\n positionEditorElement(editorElem, null);\n setLastSelection(null);\n setEditMode(false);\n setLinkUrl(\"\");\n }\n\n return true;\n }, [editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateLinkEditor();\n });\n }),\n\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n () => {\n updateLinkEditor();\n return true;\n },\n LowPriority\n )\n );\n }, [editor, updateLinkEditor]);\n\n useEffect(() => {\n editor.getEditorState().read(() => {\n updateLinkEditor();\n });\n }, [editor, updateLinkEditor]);\n\n useEffect(() => {\n if (isEditMode && inputRef.current) {\n inputRef.current.focus();\n }\n }, [isEditMode]);\n\n return (\n
\n {isEditMode ? (\n {\n setLinkUrl(event.target.value);\n }}\n onKeyDown={(event) => {\n if (event.key === \"Enter\") {\n event.preventDefault();\n if (lastSelection !== null) {\n if (linkUrl !== \"\") {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, linkUrl);\n }\n setEditMode(false);\n }\n } else if (event.key === \"Escape\") {\n event.preventDefault();\n setEditMode(false);\n }\n }}\n />\n ) : (\n <>\n
\n \n {linkUrl}\n \n event.preventDefault()}\n onClick={() => {\n setEditMode(true);\n }}\n />\n
\n \n )}\n
\n );\n}\n\nfunction Select({ onChange, className, options, value }) {\n return (\n \n );\n}\n\nfunction getSelectedNode(selection) {\n const anchor = selection.anchor;\n const focus = selection.focus;\n const anchorNode = selection.anchor.getNode();\n const focusNode = selection.focus.getNode();\n if (anchorNode === focusNode) {\n return anchorNode;\n }\n const isBackward = selection.isBackward();\n if (isBackward) {\n return $isAtNodeEnd(focus) ? anchorNode : focusNode;\n } else {\n return $isAtNodeEnd(anchor) ? focusNode : anchorNode;\n }\n}\n\nfunction BlockOptionsDropdownList({\n editor,\n blockType,\n toolbarRef,\n setShowBlockOptionsDropDown\n}) {\n const dropDownRef = useRef(null);\n\n useEffect(() => {\n const toolbar = toolbarRef.current;\n const dropDown = dropDownRef.current;\n\n if (toolbar !== null && dropDown !== null) {\n const { top, left } = toolbar.getBoundingClientRect();\n dropDown.style.top = `${top + 40}px`;\n dropDown.style.left = `${left}px`;\n }\n }, [dropDownRef, toolbarRef]);\n\n useEffect(() => {\n const dropDown = dropDownRef.current;\n const toolbar = toolbarRef.current;\n\n if (dropDown !== null && toolbar !== null) {\n const handle = (event) => {\n const target = event.target;\n\n if (!dropDown.contains(target) && !toolbar.contains(target)) {\n setShowBlockOptionsDropDown(false);\n }\n };\n document.addEventListener(\"click\", handle);\n\n return () => {\n document.removeEventListener(\"click\", handle);\n };\n }\n }, [dropDownRef, setShowBlockOptionsDropDown, toolbarRef]);\n\n const formatParagraph = () => {\n if (blockType !== \"paragraph\") {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n $wrapLeafNodesInElements(selection, () => $createParagraphNode());\n }\n });\n }\n setShowBlockOptionsDropDown(false);\n };\n\n const formatLargeHeading = () => {\n if (blockType !== \"h1\") {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n $wrapLeafNodesInElements(selection, () => $createHeadingNode(\"h1\"));\n }\n });\n }\n setShowBlockOptionsDropDown(false);\n };\n\n const formatSmallHeading = () => {\n if (blockType !== \"h2\") {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n $wrapLeafNodesInElements(selection, () => $createHeadingNode(\"h2\"));\n }\n });\n }\n setShowBlockOptionsDropDown(false);\n };\n\n const formatBulletList = () => {\n if (blockType !== \"ul\") {\n editor.dispatchCommand(INSERT_UNORDERED_LIST_COMMAND);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND);\n }\n setShowBlockOptionsDropDown(false);\n };\n\n const formatNumberedList = () => {\n if (blockType !== \"ol\") {\n editor.dispatchCommand(INSERT_ORDERED_LIST_COMMAND);\n } else {\n editor.dispatchCommand(REMOVE_LIST_COMMAND);\n }\n setShowBlockOptionsDropDown(false);\n };\n\n const formatQuote = () => {\n if (blockType !== \"quote\") {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n $wrapLeafNodesInElements(selection, () => $createQuoteNode());\n }\n });\n }\n setShowBlockOptionsDropDown(false);\n };\n\n const formatCode = () => {\n if (blockType !== \"code\") {\n editor.update(() => {\n const selection = $getSelection();\n\n if ($isRangeSelection(selection)) {\n $wrapLeafNodesInElements(selection, () => $createCodeNode());\n }\n });\n }\n setShowBlockOptionsDropDown(false);\n };\n\n return (\n
\n \n \n \n \n \n \n \n
\n );\n}\n\nexport default function Toolbar() {\n const [editor] = useLexicalComposerContext();\n const toolbarRef = useRef(null);\n const [canUndo, setCanUndo] = useState(false);\n const [canRedo, setCanRedo] = useState(false);\n const [blockType, setBlockType] = useState(\"paragraph\");\n const [selectedElementKey, setSelectedElementKey] = useState(null);\n const [showBlockOptionsDropDown, setShowBlockOptionsDropDown] = useState(\n false\n );\n const [codeLanguage, setCodeLanguage] = useState(\"\");\n const [isRTL, setIsRTL] = useState(false);\n const [isLink, setIsLink] = useState(false);\n const [isBold, setIsBold] = useState(false);\n const [isItalic, setIsItalic] = useState(false);\n const [isUnderline, setIsUnderline] = useState(false);\n const [isStrikethrough, setIsStrikethrough] = useState(false);\n const [isCode, setIsCode] = useState(false);\n\n const dispatch = useDispatch();\n const intl = getIntl();\n\n const saveButton = intl.formatMessage({\n id: 'ImpressumPage.Button.Save',\n defaultMessage: 'Dokument speichern', \n });\n\n\n const saveDocument = () => {\n dispatch(setRichDocumentSaved(true));\n }\n\n const updateToolbar = useCallback(() => {\n const selection = $getSelection();\n if ($isRangeSelection(selection)) {\n const anchorNode = selection.anchor.getNode();\n const element =\n anchorNode.getKey() === \"root\"\n ? anchorNode\n : anchorNode.getTopLevelElementOrThrow();\n const elementKey = element.getKey();\n const elementDOM = editor.getElementByKey(elementKey);\n if (elementDOM !== null) {\n setSelectedElementKey(elementKey);\n if ($isListNode(element)) {\n const parentList = $getNearestNodeOfType(anchorNode, ListNode);\n const type = parentList ? parentList.getTag() : element.getTag();\n setBlockType(type);\n } else {\n const type = $isHeadingNode(element)\n ? element.getTag()\n : element.getType();\n setBlockType(type);\n if ($isCodeNode(element)) {\n setCodeLanguage(element.getLanguage() || getDefaultCodeLanguage());\n }\n }\n }\n // Update text format\n setIsBold(selection.hasFormat(\"bold\"));\n setIsItalic(selection.hasFormat(\"italic\"));\n setIsUnderline(selection.hasFormat(\"underline\"));\n setIsStrikethrough(selection.hasFormat(\"strikethrough\"));\n setIsCode(selection.hasFormat(\"code\"));\n setIsRTL($isParentElementRTL(selection));\n\n // Update links\n const node = getSelectedNode(selection);\n const parent = node.getParent();\n if ($isLinkNode(parent) || $isLinkNode(node)) {\n setIsLink(true);\n } else {\n setIsLink(false);\n }\n }\n }, [editor]);\n\n useEffect(() => {\n return mergeRegister(\n editor.registerUpdateListener(({ editorState }) => {\n editorState.read(() => {\n updateToolbar();\n });\n }),\n editor.registerCommand(\n SELECTION_CHANGE_COMMAND,\n (_payload, newEditor) => {\n updateToolbar();\n return false;\n },\n LowPriority\n ),\n editor.registerCommand(\n CAN_UNDO_COMMAND,\n (payload) => {\n setCanUndo(payload);\n return false;\n },\n LowPriority\n ),\n editor.registerCommand(\n CAN_REDO_COMMAND,\n (payload) => {\n setCanRedo(payload);\n return false;\n },\n LowPriority\n )\n );\n }, [editor, updateToolbar]);\n\n const codeLanguges = useMemo(() => getCodeLanguages(), []);\n const onCodeLanguageSelect = useCallback(\n (e) => {\n editor.update(() => {\n if (selectedElementKey !== null) {\n const node = $getNodeByKey(selectedElementKey);\n if ($isCodeNode(node)) {\n node.setLanguage(e.target.value);\n }\n }\n });\n },\n [editor, selectedElementKey]\n );\n\n const insertLink = useCallback(() => {\n if (!isLink) {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, \"https://\");\n } else {\n editor.dispatchCommand(TOGGLE_LINK_COMMAND, null);\n }\n }, [editor, isLink]);\n\n return (\n
\n {\n editor.dispatchCommand(UNDO_COMMAND);\n }}\n className=\"toolbar-item spaced\"\n aria-label=\"Undo\"\n >\n \n \n {\n editor.dispatchCommand(REDO_COMMAND);\n }}\n className=\"toolbar-item\"\n aria-label=\"Redo\"\n >\n \n \n \n {supportedBlockTypes.has(blockType) && (\n <>\n \n setShowBlockOptionsDropDown(!showBlockOptionsDropDown)\n }\n aria-label=\"Formatting Options\"\n >\n \n {blockTypeToBlockName[blockType]}\n \n \n {showBlockOptionsDropDown &&\n createPortal(\n ,\n document.body\n )}\n \n \n )}\n {blockType === \"code\" ? (\n <>\n \n \n \n ) : (\n <>\n {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"bold\");\n }}\n className={\"toolbar-item spaced \" + (isBold ? \"active\" : \"\")}\n aria-label=\"Format Bold\"\n >\n \n \n {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"italic\");\n }}\n className={\"toolbar-item spaced \" + (isItalic ? \"active\" : \"\")}\n aria-label=\"Format Italics\"\n >\n \n \n {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"underline\");\n }}\n className={\"toolbar-item spaced \" + (isUnderline ? \"active\" : \"\")}\n aria-label=\"Format Underline\"\n >\n \n \n {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"strikethrough\");\n }}\n className={\n \"toolbar-item spaced \" + (isStrikethrough ? \"active\" : \"\")\n }\n aria-label=\"Format Strikethrough\"\n >\n \n \n {\n editor.dispatchCommand(FORMAT_TEXT_COMMAND, \"code\");\n }}\n className={\"toolbar-item spaced \" + (isCode ? \"active\" : \"\")}\n aria-label=\"Insert Code\"\n >\n \n \n \n \n \n {isLink &&\n createPortal(, document.body)}\n \n {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, \"left\");\n }}\n className=\"toolbar-item spaced\"\n aria-label=\"Left Align\"\n >\n \n \n {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, \"center\");\n }}\n className=\"toolbar-item spaced\"\n aria-label=\"Center Align\"\n >\n \n \n {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, \"right\");\n }}\n className=\"toolbar-item spaced\"\n aria-label=\"Right Align\"\n >\n \n \n {\n editor.dispatchCommand(FORMAT_ELEMENT_COMMAND, \"justify\");\n }}\n className=\"toolbar-item\"\n aria-label=\"Justify Align\"\n >\n \n {\" \"}\n \n )}\n \n saveDocument()}\n className=\"toolbar-item toolbar-button\"\n aria-label={saveButton}\n >\n {saveButton}\n {\" \"}\n
\n );\n}\n","import React from 'react';\nimport { $getListDepth, $isListItemNode, $isListNode } from \"@lexical/list\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport {\n $getSelection,\n $isElementNode,\n $isRangeSelection,\n INDENT_CONTENT_COMMAND,\n COMMAND_PRIORITY_HIGH\n} from \"lexical\";\nimport { useEffect } from \"react\";\n\nfunction getElementNodesInSelection(selection) {\n const nodesInSelection = selection.getNodes();\n\n if (nodesInSelection.length === 0) {\n return new Set([\n selection.anchor.getNode().getParentOrThrow(),\n selection.focus.getNode().getParentOrThrow()\n ]);\n }\n\n return new Set(\n nodesInSelection.map((n) => ($isElementNode(n) ? n : n.getParentOrThrow()))\n );\n}\n\nfunction isIndentPermitted(maxDepth) {\n const selection = $getSelection();\n\n if (!$isRangeSelection(selection)) {\n return false;\n }\n\n const elementNodesInSelection = getElementNodesInSelection(selection);\n\n let totalDepth = 0;\n\n for (const elementNode of elementNodesInSelection) {\n if ($isListNode(elementNode)) {\n totalDepth = Math.max($getListDepth(elementNode) + 1, totalDepth);\n } else if ($isListItemNode(elementNode)) {\n const parent = elementNode.getParent();\n if (!$isListNode(parent)) {\n throw new Error(\n \"ListMaxIndentLevelPlugin: A ListItemNode must have a ListNode for a parent.\"\n );\n }\n\n totalDepth = Math.max($getListDepth(parent) + 1, totalDepth);\n }\n }\n\n return totalDepth <= maxDepth;\n}\n\nexport default function ListMaxIndentLevelPlugin({ maxDepth }) {\n const [editor] = useLexicalComposerContext();\n\n useEffect(() => {\n return editor.registerCommand(\n INDENT_CONTENT_COMMAND,\n () => !isIndentPermitted(maxDepth ?? 7),\n COMMAND_PRIORITY_HIGH\n );\n }, [editor, maxDepth]);\n\n return null;\n}\n","import React from 'react';\nimport { registerCodeHighlighting } from \"@lexical/code\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { useEffect } from \"react\";\n\nexport default function CodeHighlightPlugin() {\n const [editor] = useLexicalComposerContext();\n useEffect(() => {\n return registerCodeHighlighting(editor);\n }, [editor]);\n return null;\n}\n","import React from 'react';\nimport { AutoLinkPlugin } from \"@lexical/react/LexicalAutoLinkPlugin\";\n\nconst URL_MATCHER = /((https?:\\/\\/(www\\.)?)|(www\\.))[-a-zA-Z0-9@:%._+~#=]{1,256}\\.[a-zA-Z0-9()]{1,6}\\b([-a-zA-Z0-9()@:%_+.~#?&//=]*)/;\n\nconst EMAIL_MATCHER = /(([^<>()[\\]\\\\.,;:\\s@\"]+(\\.[^<>()[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))/;\n\nconst MATCHERS = [\n (text) => {\n const match = URL_MATCHER.exec(text);\n return (\n match && {\n index: match.index,\n length: match[0].length,\n text: match[0],\n url: match[0]\n }\n );\n },\n (text) => {\n const match = EMAIL_MATCHER.exec(text);\n return (\n match && {\n index: match.index,\n length: match[0].length,\n text: match[0],\n url: `mailto:${match[0]}`\n }\n );\n }\n];\n\nexport default function PlaygroundAutoLinkPlugin() {\n return ;\n}\n","import React, { useEffect, useRef } from \"react\";\n\nimport EditorTheme from \"./theme\";\nimport { LexicalComposer } from \"@lexical/react/LexicalComposer\";\nimport { RichTextPlugin } from \"@lexical/react/LexicalRichTextPlugin\";\nimport { ContentEditable } from \"@lexical/react/LexicalContentEditable\";\nimport { HistoryPlugin } from \"@lexical/react/LexicalHistoryPlugin\";\nimport { AutoFocusPlugin } from \"@lexical/react/LexicalAutoFocusPlugin\";\nimport Toolbar from \"./plugins/Toolbar\";\nimport { HeadingNode, QuoteNode } from \"@lexical/rich-text\";\nimport { TableCellNode, TableNode, TableRowNode } from \"@lexical/table\";\nimport { ListItemNode, ListNode } from \"@lexical/list\";\nimport { CodeHighlightNode, CodeNode } from \"@lexical/code\";\nimport { AutoLinkNode, LinkNode } from \"@lexical/link\";\nimport { LinkPlugin } from \"@lexical/react/LexicalLinkPlugin\";\nimport { ListPlugin } from \"@lexical/react/LexicalListPlugin\";\nimport { MarkdownShortcutPlugin } from \"@lexical/react/LexicalMarkdownShortcutPlugin\";\nimport { TRANSFORMERS } from \"@lexical/markdown\";\n\nimport ListMaxIndentLevel from \"./plugins/ListMaxIndentLevel\";\nimport CodeHighlight from \"./plugins/CodeHighlight\";\nimport AutoLink from \"./plugins/AutoLink\";\nimport { OnChangePlugin } from \"@lexical/react/LexicalOnChangePlugin\";\nimport { useLexicalComposerContext } from \"@lexical/react/LexicalComposerContext\";\nimport { $generateHtmlFromNodes, $generateNodesFromDOM } from \"@lexical/html\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setRichDocumentSaved } from \"../../redux/actions\";\n\nimport http from \"../../utils/http\";\nimport { displayNotification } from '../../components/Notification';\nimport { $getRoot, $getSelection } from \"lexical\";\nimport { getIntl } from \"../../utils/intl\";\n\nfunction Placeholder() {\n return
Enter some rich text...
;\n}\n\nconst EditorPlugins = ({ initialEditorState, saveDocument}) => {\n let _initialEditorState = initialEditorState;\n const [editor] = useLexicalComposerContext();\n const editorStateRef = useRef();\n const dispatch = useDispatch();\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const shouldSave = useSelector(state => state.editorsConfig.impressumEditor.shouldSave);\n const parser = new DOMParser();\n const intl = getIntl();\n\n const successTitle = intl.formatMessage({\n id: 'Success',\n defaultMessage: 'Erfolg!',\n });\n\n const successBody = intl.formatMessage({\n id: 'ImpressumPage.Notification.Success',\n defaultMessage: 'Dokument wurde erfolgreich gespeichert!',\n });\n\n const errorTitle = intl.formatMessage({\n id: 'Error',\n defaultMessage: 'Etwas ist schief gelaufen!',\n });\n\n const errorBody = intl.formatMessage({\n id: 'ImpressumPage.Notification.Error',\n defaultMessage: 'Das Dokument konnte nicht gespeichert werden. Bitte versuchen Sie es später noch einmal.',\n });\n\n const savePost = async (html) => {\n try {\n const result = await saveDocument(html);\n if (result.status >= 200 && result.status < 300) {\n displayNotification('success', successTitle, successBody);\n }\n } catch (error) {\n console.log(error);\n displayNotification('error', errorTitle, errorBody);\n }\n dispatch(setRichDocumentSaved(false));\n };\n\n useEffect(() => {\n editor.update(() => {\n if (_initialEditorState) {\n const dom = parser.parseFromString(_initialEditorState, \"text/html\");\n const nodes = $generateNodesFromDOM(editor, dom);\n $getRoot().select();\n const selection = $getSelection();\n selection.insertNodes(nodes);\n }\n })\n }, [_initialEditorState])\n\n useEffect(() => {\n if (!!shouldSave) {\n editor.update(() => {\n const htmlString = $generateHtmlFromNodes(editor, null);\n savePost(htmlString)\n });\n }\n }, [shouldSave]);\n\n return (\n
\n \n
\n }\n placeholder={}\n />\n \n {/* */}\n \n \n \n \n \n \n \n (editorStateRef.current = editorState)}\n />\n
\n
\n );\n};\n\nexport default function Editor({ initialEditorState, saveDocument }) {\n const editorConfig = {\n // The editor theme\n theme: EditorTheme,\n // Handling of errors during update\n onError(error) {\n throw error;\n },\n // Any custom nodes go here\n nodes: [\n HeadingNode,\n ListNode,\n ListItemNode,\n QuoteNode,\n CodeNode,\n CodeHighlightNode,\n TableNode,\n TableCellNode,\n TableRowNode,\n AutoLinkNode,\n LinkNode,\n ],\n };\n return (\n \n \n \n );\n}\n","import React, { useEffect, useState } from 'react';\nimport { Row, Col, Typography, Button } from \"antd\";\nimport RichEditor from '../../components/RichEditor'\nimport http from '../../utils/http';\nimport { useSelector } from 'react-redux';\nimport { getIntl } from '../../utils/intl';\n\n\nconst { Title, Paragraph } = Typography;\n\nfunction Impressum(props) {\n const companyId = useSelector(state => state.companyConfig.company_id);\n const [impressum, setImpressum] = useState('');\n\n const intl = getIntl();\n\n const TitleText = intl.formatMessage({\n id: \"ImpressumPage.Title\",\n defaultMessage: \"Anzahl der Besucher\",\n });\n\n const BodyText = intl.formatMessage({\n id: \"ImpressumPage.Body\",\n defaultMessage: \"Anzahl der Besucher\",\n });\n\n const NoteText = intl.formatMessage({\n id: \"ImpressumPage.Note\",\n defaultMessage: \"Anzahl der Besucher\",\n });\n\n\n const getFirstLoadImpressum = async () => {\n const result = await http.get(`gastro/${companyId}/metadata`);\n const _impressum = result?.data?.payload?.impressum;\n \n if (!_impressum) {\n await http.post(`gastro/${companyId}/metadata`, {\n impressum: '',\n });\n }\n \n setImpressum(_impressum);\n }\n \n useEffect(() => {\n getFirstLoadImpressum();\n }, []);\n\n const saveDocument = async (html) => {\n return await http.put(`/gastro/${companyId}/metadata`, {\n impressum: html,\n });\n };\n\n return (\n
\n \n
\n \n \n \n {TitleText}\n \n {BodyText}\n \n \n {NoteText}\n \n \n \n \n \n {\n 0 ? impressum : \"\"} saveDocument={saveDocument}/>\n }\n \n \n \n \n \n \n );\n}\n\nexport default Impressum;","import React, { useEffect, useState } from \"react\";\nimport { Form, Input, Modal } from \"antd\";\nimport { getIntl } from \"../../utils/intl\";\nimport { updateWorkspaceApi } from \"../../api/workspacesApiService\";\nimport { displayNotification } from \"../../components/Notification\";\nimport { useDispatch } from \"react-redux\";\nimport { updateWorkspace } from \"../../redux/actions/companyConfig\";\n\nconst UpdateWorkspaceModal = ({ workspace, onConfirm, onCancel }) => {\n const [form] = Form.useForm();\n const intl = getIntl();\n const [isModalVisible, setIsModalVisible] = useState(false);\n const dispatch = useDispatch();\n\n const successNotificationTitle = intl.formatMessage({\n id: \"Success\",\n defaultMessage: \"Erfolg!\",\n });\n const successNotificationBody = intl.formatMessage({\n id: \"SubAccounts.Notification.Edit.Success\",\n defaultMessage: \"Kundenzugang erfolgreich aktualisiert.\",\n });\n const errorNotificationTitle = intl.formatMessage({\n id: \"SubAccounts.Notification.Edit.Error.Title\",\n defaultMessage: \"Kundenzugang konnte nicht aktualisiert werden.\",\n });\n const errorNotificationBody = intl.formatMessage({\n id: \"SubAccounts.Notification.Edit.Error.Body\",\n });\n const editModalTitle = intl.formatMessage({\n id: \"SubAccounts.Edit.Title\",\n });\n const editInputName = intl.formatMessage({\n id: \"SubAccounts.Edit.Name\",\n });\n const editNamePlaceholder = intl.formatMessage({\n id: \"SubAccounts.Edit.Name.Placeholder\",\n });\n const mandatoryField = intl.formatMessage({\n id: \"Field.Mandatory\",\n });\n\n\n useEffect(() => {\n form.setFieldsValue(workspace);\n setIsModalVisible(!!workspace);\n }, [workspace]);\n\n const handleModalCancel = () => {\n setIsModalVisible(false);\n form.resetFields();\n onCancel();\n };\n\n const handleModalOk = () => {\n updateWorkspaceApi(workspace?.id, form.getFieldsValue())\n .then((res) => {\n dispatch(\n updateWorkspace({\n id: workspace?.id,\n updatedWorkspace: form.getFieldsValue(),\n }),\n );\n setIsModalVisible(false);\n form.resetFields();\n displayNotification(\n \"success\",\n successNotificationTitle,\n successNotificationBody,\n );\n })\n .catch((e) => {\n form.resetFields();\n console.error(e);\n displayNotification(\n \"error\",\n errorNotificationTitle,\n errorNotificationBody,\n );\n });\n };\n\n const validateMessages = {\n required: mandatoryField,\n }\n return (\n <>\n \n
\n \n \n \n \n \n \n );\n};\n\nexport default UpdateWorkspaceModal;\n","import http from \"../utils/http\";\n\nexport const getWorkspacesApi = (companyId) => {\n return http.get(`/company/${companyId}/account`);\n};\n\nexport const deleteWorkspaceApi = (subAccountId) => {\n return http.delete(`/company/${subAccountId}/account`);\n};\n\nexport const updateWorkspaceApi = (subAccountId, updatedWorkspace) => {\n return http.put(`/company/${subAccountId}/account`, {\n ...updatedWorkspace,\n });\n};\n\nexport const createWorkspaceApi = (companyId, body) => {\n const { name, path } = body;\n return http.post(`/company/${companyId}/account`, {\n name,\n path: path.toLowerCase(),\n });\n};\n","import React from \"react\";\nimport { Modal, Button } from \"antd\";\nimport { getIntl } from \"../../utils/intl\";\n\nconst ConfirmationModal = ({\n visible,\n title,\n message,\n onConfirm,\n onCancel,\n}) => {\n const intl = getIntl();\n const cancelButtonText = intl.formatMessage({\n id: \"Cancel\",\n }); const confirmButtonText = intl.formatMessage({\n id: \"Confirm\",\n });\n return (\n \n {cancelButtonText}\n ,\n ,\n ]}\n >\n

{message}

\n \n );\n};\n\nexport default ConfirmationModal;\n","import React, { useState } from \"react\";\nimport { Avatar, Table, Space, Button, Input, Col } from \"antd\";\nimport \"./Workspaces.scss\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { deleteWorkspaceApi } from \"../../api/workspacesApiService\";\nimport UpdateWorkspaceModal from \"./UpdateWorkspace\";\nimport ConfirmationModal from \"../../components/ConfirmationModal/ConfirmationModal\";\nimport { displayNotification } from \"../../components/Notification\";\nimport { deleteWorkspace } from \"../../redux/actions/companyConfig\";\nimport { getIntl } from \"../../utils/intl\";\nimport { getCookie } from \"../../components/getCookie\";\nimport { cookieDomain, isAllSuperAccount } from \"../../utils/envs\";\n\nconst Workspaces = () => {\n const workspaces = useSelector(\n (state) => state.companyConfig[\"sub_accounts\"],\n );\n const [updateWorkspace, setUpdateWorkspace] = useState(null);\n const [deleteWorkspaceId, setDeleteWorkspaceId] = useState(null);\n const [confirmationModalVisible, setConfirmationModalVisible] =\n useState(false);\n const dispatch = useDispatch();\n const [searchText, setSearchText] = useState(\"\");\n const filteredWorkspaces = workspaces?.filter(\n (item) =>\n item.name.toLowerCase().includes(searchText.toLowerCase()) ||\n item.path.toLowerCase().includes(searchText.toLowerCase()),\n );\n const intl = getIntl();\n const superAccount = useSelector(\n (state) => state.companyConfig.super_account\n );\n const successNotificationTitle = intl.formatMessage({\n id: \"Success\",\n defaultMessage: \"Erfolg!\",\n });\n const successNotificationBody = intl.formatMessage({\n id: \"SubAccounts.Notification.Delete.Success\",\n defaultMessage: \"Kundenzugang wurde erfolgreich gelöscht.\",\n });\n const errorNotificationTitle = intl.formatMessage({\n id: \"SubAccounts.Notification.Delete.Error.Title\",\n defaultMessage: \"Kundenzugang konnte nicht gelöscht werden.\",\n });\n const errorNotificationBody = intl.formatMessage({\n id: \"SubAccounts.Notification.Delete.Error.Body\",\n });\n const searchPlaceholder = intl.formatMessage({\n id: \"SubAccounts.Search.Placeholder\",\n defaultMessage: \"Suche nach Name oder URL\"\n });\n const editButtonText = intl.formatMessage({\n id: \"Edit\",\n });\n const viewButtonText = intl.formatMessage({\n id: \"View\",\n });\n const deleteButtonText = intl.formatMessage({\n id: \"Delete\",\n });\n const confirmationDeleteTitle = intl.formatMessage({\n id: \"SubAccounts.Delete.Title\",\n });\n const confirmationDeleteMessage = intl.formatMessage({\n id: \"SubAccounts.Delete.Message\",\n });\n\n const columns = [\n {\n title: \"Logo\",\n dataIndex: \"id\",\n width: 50,\n maxWidth: 50,\n render: (_, workspace) => {return },\n key: \"id\",\n },\n {\n title: \"Name\",\n dataIndex: \"name\",\n key: \"name\",\n },\n {\n title: \"Path\",\n dataIndex: \"path\",\n key: \"path\",\n },\n {\n title: \"\",\n key: \"actions\",\n render: (text, workspace) => (\n \n \n \n \n \n ),\n },\n ];\n\n const changeToAccount = (accounts) => {\n const domain = cookieDomain();\n const superName = getCookie(\"_super_name\");\n const superId = getCookie(\"_super_c\");\n const superVertical = getCookie(\"_super_v\");\n \n document.cookie = `_c=${accounts[0].id};domain=${domain};path=/;`;\n document.cookie = `_v=${accounts[0].vertical};domain=${domain};path=/;`;\n if (isAllSuperAccount(superAccount)) {\n document.cookie = `_super_name=${superName};domain=${domain};path=/;`;\n /**\n * Subdomains cannot be multilevel in order for this to work (multiple dots).\n */\n document.cookie = `_super_path=${\n window.location.hostname.split(\".\")[0]\n };domain=${domain};path=/;`;\n document.cookie = `_super_c=${superId};domain=${domain};path=/;`;\n document.cookie = `_super_v=${superVertical};domain=${domain};path=/;`;\n } else {\n document.cookie = `_super_name=${superName};path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n /**\n * Subdomains cannot be multilevel in order for this to work (multiple dots).\n */\n document.cookie = `_super_path=${\n window.location.hostname.split(\".\")[0]\n };domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT;path=/;`;\n document.cookie = `_super_c=${superId};path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n document.cookie = `_super_v=${superVertical};path=/;domain=${domain};expires=Thu, 01 Jan 1970 00:00:01 GMT`;\n }\n if (domain === \".localhost.com\") {\n window.location = `http://${accounts[0].path}.localhost.com:3000/dashboard`;\n } else {\n window.location = `http://${accounts[0].path}.welcomyapp.com/dashboard`;\n }\n };\n\n const handleGoToWorkspace = (workspace) => {\n changeToAccount([\n {\n name: workspace['name'],\n id: workspace['id'],\n vertical: workspace['vertical'],\n path: workspace['path'],\n },\n ])\n };\n\n const handleUpdateWorkspace = (workspace) => {\n setUpdateWorkspace(workspace);\n };\n\n const handleDeleteWorkspace = (key) => {\n setConfirmationModalVisible(true);\n setDeleteWorkspaceId(key);\n };\n\n const handleUpdateModalConfirm = (e) => {\n setUpdateWorkspace(null);\n };\n\n const handleConfirm = () => {\n deleteWorkspaceApi(deleteWorkspaceId)\n .then(() => {\n setConfirmationModalVisible(false);\n dispatch(deleteWorkspace({ subAccountId: deleteWorkspaceId }));\n\n displayNotification(\n \"success\",\n successNotificationTitle,\n successNotificationBody,\n );\n })\n .catch((e) => {\n console.error(e);\n displayNotification(\n \"error\",\n errorNotificationTitle,\n errorNotificationBody,\n );\n });\n };\n\n const handleCancel = () => {\n setConfirmationModalVisible(false);\n };\n\n return (\n <>\n
\n
\n
\n setSearchText(e.target.value)}\n />\n \n \n handleUpdateModalConfirm(e)}\n onCancel={() => setUpdateWorkspace(null)}\n />\n
\n \n \n \n );\n};\n\nexport default Workspaces;\n","import React from \"react\";\nimport { Button, Col, Form, Input, Modal, Row, Space, Typography } from \"antd\";\nimport { TeamOutlined } from \"@ant-design/icons\";\nimport { getIntl } from \"../../utils/intl\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { cookieDomain } from \"../../utils/envs\";\nimport { displayNotification } from \"../Notification\";\nimport { createWorkspaceApi } from \"../../api/workspacesApiService\";\nimport { createWorkspaceAction } from \"../../redux/actions/companyConfig\";\n\nconst CreateWorkspaceModal = ({ visible, onCancel }) => {\n const [form] = Form.useForm();\n const intl = getIntl();\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const { Title, Paragraph } = Typography;\n const dispatch = useDispatch();\n const pageTitle = intl.formatMessage({\n id: \"SubAccounts.Title\",\n defaultMessage: \"Neuen Kundenzugang erstellen\",\n });\n\n const pageDescription = intl.formatMessage({\n id: \"SubAccounts.Description\",\n defaultMessage:\n \"Kreieren Sie einen neuen Kundenzugang, indem Sie einen Namen und eine individualisierte URL festlegen. Wir empfehlen Ihnen den Namen Ihres Kunden oder Zielgruppe in der URL zu verwenden, da dieser beim Teilen der Web-App angezeigt wird.\",\n });\n\n const nameInput = intl.formatMessage({\n id: \"SubAccounts.Input.Name\",\n defaultMessage: \"Name des Kundenzugangs\",\n });\n\n const urlInput = intl.formatMessage({\n id: \"SubAccounts.Input.Url\",\n defaultMessage: \"URL des Kundenzugangs\",\n });\n\n const createButton = intl.formatMessage({\n id: \"SubAccounts.Button.Create\",\n defaultMessage: \"Bestätigen\",\n });\n\n const cancelButton = intl.formatMessage({\n id: \"Cancel\",\n defaultMessage: \"Abbrechen\",\n });\n\n const requiredText = intl.formatMessage({\n id: \"Error.Required\",\n defaultMessage: \"Bitte geben Sie die notwendigen Informationen an.\",\n });\n\n const successNotificationTitle = intl.formatMessage({\n id: \"Success\",\n defaultMessage: \"Erfolg!\",\n });\n\n const successNotificationBody = intl.formatMessage({\n id: \"SubAccounts.Notification.Success\",\n defaultMessage: \"Neuer Kundenzugang wurde erfolgreich erstellt.\",\n });\n\n const noSpecialChars = intl.formatMessage({\n id: \"SubAccounts.Error.SpecialChars\",\n defaultMessage: \"Erlaubt sind nur Buchstaben, Zahlen und das Symbol '-'\",\n });\n\n const handleOnCancel = () => {\n onCancel();\n };\n\n const createWorkspace = () => {\n createWorkspaceApi(companyId, form.getFieldsValue()).then((response) => {\n const { access_token, company_id } = response.data.payload;\n if (access_token) {\n const domain = cookieDomain();\n document.cookie = `_a=${access_token};domain=${domain};path=/;`;\n }\n dispatch(\n createWorkspaceAction({\n workspace: { id: company_id, ...form.getFieldsValue() },\n }),\n );\n displayNotification(\n \"success\",\n successNotificationTitle,\n successNotificationBody,\n );\n });\n };\n\n const invalidChars = /[ `!@#$%^&*()_+\\=\\[\\]{};':\"\\\\|,.<>\\/?~]/;\n return (\n \n {cancelButton}\n ,\n ,\n ]}\n >\n \n
\n \n \n \n <Space>\n {pageTitle} <TeamOutlined />\n </Space>\n \n {pageDescription}\n \n \n \n \n
\n \n \n \n {\n if (value && invalidChars.test(value)) {\n throw new Error(noSpecialChars);\n }\n },\n },\n ]}\n >\n \n \n \n \n \n \n \n \n );\n};\n\nexport default CreateWorkspaceModal;\n","import { Button } from \"antd\";\nimport React, { useState } from \"react\";\nimport Workspaces from \"../workspaces\";\nimport CreateWorkspaceModal from \"../../components/CreateWorkspaceModal\";\nimport { getIntl } from \"../../utils/intl\";\n\nfunction SubAccounts(props) {\n const [createWorkSpaceModalVisible, setcreateWorkSpaceModalVisible] =\n useState(false);\n const addWorkSpaceModal = () => {\n setcreateWorkSpaceModalVisible(true);\n };\n const handleOnCancelCreateWorkspace = () => {\n setcreateWorkSpaceModalVisible(false);\n };\n\n const intl = getIntl();\n const createWorkspaceButton = intl.formatMessage({\n id: \"SubAccounts.CreateWorkspace.Button.Text\",\n defaultMessage: \"Kundenzugang erstellen\"\n });\n const workspaceTitle = intl.formatMessage({\n id: \"SubAccounts.CreateWorkspace.Title\",\n defaultMessage: \"Übersicht Ihrer Hubs\"\n });\n const workspaceDescription = intl.formatMessage({\n id: \"SubAccounts.CreateWorkspace.Description\",\n defaultMessage: \"Hier können Sie Ihre Hubs verwalten und neue Zugänge erstellen.\"\n });\n\n\n return (\n
\n \n
\n

\n {workspaceTitle}\n \n {workspaceDescription}\n \n

\n\n \n
\n \n
\n );\n}\n\nexport default SubAccounts;\n","import { Col, Row, Typography } from 'antd';\nimport React, { useEffect, useState } from 'react';\nimport { useSelector } from 'react-redux';\nimport RichEditor from '../../components/RichEditor'\nimport http from '../../utils/http';\nimport { getIntl } from '../../utils/intl';\n\n\nconst { Title, Paragraph } = Typography;\n\nfunction DataProtection(props) {\n const [dataprotection, setDataprotection] = useState('');\n const companyId = useSelector(state => state.companyConfig.company_id);\n const intl = getIntl();\n\n const titleText = intl.formatMessage({\n id: 'DataProtectionPage.Title',\n defaultMessage: 'Datenschutzrichtlinien',\n });\n\n const bodyText = intl.formatMessage({\n id: 'DataProtectionPage.Body',\n defaultMessage: 'Auf dieser Seite können Sie den Texteditor verwenden, um Ihre Datenschutz-Seite zu erstellen.\\n Sie sollten sicherstellen, dass Sie immer die aktuellste Version Ihrer Datenschutzrichtlinien Ihres Unternehmens verwenden.\\n\\n Wichtiger Hinweis: Bitte beachten Sie, dass Ihre Datenschutzrichtlinien erforderlich sind, um die \\n Compliance-Anforderungen Ihrer Kunden im Businesskontext zu erfüllen.',\n });\n\n const getFirstLoadDataProtection = async () => {\n const result = await http.get(`gastro/${companyId}/metadata`);\n const _dataProtection = result?.data?.payload?.datenschutz;\n const _impressum = result?.data?.payload?.impressum;\n const _businessHours = result?.data?.payload?.business_hours;\n \n if (!_dataProtection && !_businessHours && !_impressum) {\n await http.post(`gastro/${companyId}/metadata`, {\n datenschutz: '',\n });\n }\n \n setDataprotection(_dataProtection);\n }\n\n \n useEffect(() => {\n getFirstLoadDataProtection();\n }, []);\n\n const saveDocument = async (html) => {\n return await http.put(`/gastro/${companyId}/metadata`, {\n datenschutz: html,\n });\n }\n\n return (\n
\n \n
\n \n \n \n {titleText}\n \n {bodyText}\n \n \n \n \n \n {\n 0 ? dataprotection : \"\"} saveDocument={saveDocument}/>\n }\n \n \n \n \n \n \n );\n}\n\nexport default DataProtection;","export const LINK_TYPES = {\n INSTAGRAM: \"instagram\",\n TWITTER: \"twitter\",\n FACEBOOK: \"facebook\",\n WHATSAPP: \"whatsapp\",\n LINKEDIN: \"linkedin\",\n PHONE: \"phone\",\n EMAIL: \"email\",\n};\n\n/*\n * @TODO: We might want to chang that on the database level\n * as 'small' and 'text' do not necessary reflect\n * 'icon' and 'button' variations on the UI.\n */\nexport const LINK_VARIATIONS = {\n ICON: \"small\",\n BUTTON: \"text\",\n};\n","import React, { useEffect, useState } from \"react\";\nimport PreMenu, { generateLogo } from \"../../pages/Tablet/public/components/Restaurant/PreMenu\";\nimport { LINK_VARIATIONS } from \"../NewLink/linkMappings\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { Typography } from \"antd\";\nimport { getIntl } from \"../../utils/intl\";\nimport {\n setLivePreviewLinks,\n updateLivePreviewCompanySetup,\n} from \"../../redux/actions/livePreviewActions\";\nimport { linkIcons } from \"../../utils/LinkIcons\";\n\nconst LivePreview = () => {\n const { company_id, company_logo } = useSelector(\n (state) => state.companyConfig,\n );\n const intl = getIntl();\n const { Title, Paragraph } = Typography;\n const readMore = intl.formatMessage({\n id: \"WelcomyHubConfig.Phone.ReadMore\",\n defaultMessage: \"Weiter lesen\",\n });\n const previewLinkIcons = linkIcons;\n const dispatch = useDispatch();\n const links = useSelector((state) => state.companyConfig.links);\n const livePreviewLinks = useSelector((state) =>\n state.livePreview.links.filter((link) => link.variation === LINK_VARIATIONS.BUTTON),\n );\n const livePreviewIcons = useSelector((state) =>\n state.livePreview.links.filter((link) => link.variation === LINK_VARIATIONS.ICON),\n );\n const { hubName, logo, companyTitle, description } = useSelector(\n (state) => state.livePreview.companySetup,\n );\n \n const companyName = useSelector(state => state.companyConfig.name);\n const companyLogo = useSelector(state => state.companyConfig.company_logo);\n \n const _hubName = useSelector(state => state.hubConfig.name);\n const hubLogo = useSelector(state => state.hubConfig.hubLogo);\n const hubTitle = useSelector(state => state.hubConfig.title);\n const hubSubtitle = useSelector(state => state.hubConfig.subtitle);\n\n\n useEffect(() => {\n const name = _hubName || companyName;\n const logo = hubLogo || companyLogo;\n dispatch(updateLivePreviewCompanySetup({\n hubName: name,\n description: hubSubtitle,\n companyTitle: hubTitle,\n logo,\n }));\n }, [hubLogo]);\n\n useEffect(() => {\n const previewLinks = links?.filter((link) => link.visible === true);\n dispatch(setLivePreviewLinks(previewLinks));\n }, []);\n\n return (\n <>\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n \n );\n};\n\nexport default LivePreview;\n","import {\n CloudDownloadOutlined,\n FacebookOutlined,\n FormOutlined,\n InstagramOutlined, LaptopOutlined, LinkedinFilled,\n LinkOutlined,\n MailOutlined,\n PhoneOutlined, ProfileOutlined,\n SendOutlined, SolutionOutlined,\n TwitterOutlined, WhatsAppOutlined\n} from \"@ant-design/icons\";\nimport React from \"react\";\n\nexport const linkIcons = {\n 'link': ,\n 'facebook': ,\n 'instagram': ,\n 'email': ,\n 'phone': ,\n 'twitter': ,\n 'menu': ,\n 'registration': ,\n 'whatsapp': ,\n 'linkedin': ,\n 'file': ,\n 'upload': ,\n 'newsletter': ,\n 'software': ,\n 'product_and_services': ,\n}","import React from 'react';\nimport {Col, Row} from \"antd\";\nimport LivePreview from \"../../components/LivePreview/LivePreview\";\n\nconst WelcomyHubPreview = ({children}) => {\n return (\n
\n \n
{children}\n \n \n \n \n \n )\n}\n\nexport default WelcomyHubPreview;\n","import { defineMessages } from \"react-intl\";\n\nexport const messages = defineMessages({\n uploadText: {\n id: \"Upload\",\n defaultMessage: \"Datei hochladen\",\n },\n linkCall: {\n id: \"WelcomyHub.Link.Call\",\n defaultMessage: \"Telefonanruf\",\n },\n linkTypeText: {\n id: 'WelcomyHub.Link.Type',\n defaultMessage: 'Art des Links',\n },\n integrationDocsTitle: {\n id: 'WelcomyHub.Link.Title.Integration',\n defaultMessage: 'Integrationen & Dokumente',\n },\n contactSocialTitle: {\n id: 'WelcomyHub.Link.Title.Contact',\n defaultMessage: 'Kontaktinformationen & Social Links',\n },\n email: {\n id: \"Email\",\n defaultMessage: \"Email\",\n },\n newRibbon: {\n id: 'Ribbon.New',\n defaultMessage: \"Neu\",\n },\n AiSupportAssistant: {\n id: \"WelcomyHub.Link.AiPdf\",\n defaultMessage: \"Support KI\",\n },\n});\n","import { Badge, Divider, Radio, Space, Typography } from \"antd\";\nimport {\n CloudUploadOutlined,\n FacebookOutlined,\n FileOutlined,\n FormOutlined,\n InstagramOutlined,\n LaptopOutlined,\n LinkedinFilled,\n LinkOutlined,\n MailOutlined,\n PhoneOutlined,\n ProfileOutlined,\n RobotOutlined,\n SendOutlined,\n TwitterOutlined,\n WhatsAppOutlined,\n} from \"@ant-design/icons\";\nimport React, { useState } from \"react\";\nimport { messages } from \"./Translations\";\nimport \"./LinksVariations.scss\";\nimport { getIntl } from \"../../utils/intl\";\n\nconst { Title } = Typography;\n\nconst LinkVariations = ({ initialValue, onChange }) => {\n const [selectedValue, setSelectedValue] = useState(initialValue || \"link\");\n const translation = getIntl();\n\n useState(() => {\n onChange(selectedValue);\n }, [selectedValue, onChange]);\n\n const linkTypeChanges = (e) => {\n const linkType = e.target.value;\n setSelectedValue(linkType);\n onChange(linkType);\n };\n\n return (\n
\n {translation.formatMessage(messages.linkTypeText)}\n
\n {translation.formatMessage(messages.integrationDocsTitle)}\n \n \n \n \n Link\n \n \n \n \n \n Cloud-Link\n \n \n \n \n \n {translation.formatMessage(messages.uploadText)}\n \n \n \n \n \n Software-Tool\n \n \n \n
\n
\n {translation.formatMessage(messages.contactSocialTitle)}\n \n \n \n \n LinkedIn\n \n \n \n \n \n Whatsapp\n \n \n \n \n \n Instagram\n \n \n \n \n \n Twitter\n \n \n \n \n \n Facebook\n \n \n \n \n \n E-mail\n \n \n \n \n \n {translation.formatMessage(messages.linkCall)}\n \n \n \n
\n
\n Welcomy Tools\n \n \n \n \n Newsletter\n \n \n \n \n \n Produktseite\n \n \n \n \n \n Impressum\n \n \n \n \n
\n \n \n {translation.formatMessage(messages.AiSupportAssistant)}\n \n
\n
\n
\n \n
\n \n
\n );\n};\nexport default LinkVariations;\n","\nimport { defineMessages } from 'react-intl';\n\nexport const messages = defineMessages({\n linkTypeText: {\n id: 'WelcomyHub.Link.Type',\n defaultMessage: 'Art des Links',\n },\n linkVariationText: {\n id: 'WelcomyHub.Link.Variation',\n defaultMessage: 'Variantion des Links',\n },\n withTextText: {\n id: 'WelcomyHub.Link.Variation.Text',\n defaultMessage: 'Als Button',\n },\n withoutTextText: {\n id: 'WelcomyHub.Link.Variation.Small',\n defaultMessage: 'Als Icon',\n },\n linkText: {\n id: 'WelcomyHub.Link.Text',\n defaultMessage: 'Linktext',\n },\n visibleText: {\n id: 'WelcomyHub.Visible.Text',\n defaultMessage: 'Sichtbar',\n },\n digitalCardText: {\n id: 'WelcomyHub.VirtualCard.Text',\n defaultMessage: 'Zur digitalen Visitenkarte hinzufügen',\n },\n clickPreventionText: {\n id: 'WelcomyHub.click.prevention',\n defaultMessage: 'Beenden Sie Ihre aktuelle Arbeit, bevor Sie fortfahren.',\n },\n uploadText: {\n id: 'Upload',\n defaultMessage: 'Datei hochladen',\n },\n phoneAddressText: {\n id: \"Phone\",\n defaultMessage: \"Telefon\",\n },\n whatsappAddressText: {\n id: 'whatsapp.text',\n defaultMessage: \"Telefonnummer(Beispiel: 49xxxxxxxxxxx)\",\n },\n fileText: {\n id: 'File.External',\n defaultMessage: 'Cloud-Link (z.B. Google Drive, iCloud, etc.)'\n },\n softwareText: {\n id: 'Link.Software',\n defaultMessage: 'Link zum Software-Widgets oder integrierte Webpage'\n },\n address: {\n id: \"Address\",\n defaultMessage: \"Adresse\",\n },\n deleteError: {\n id: \"WelcomyHub.Delete.Error\",\n defaultMessage: \"Der Link konnte nicht gelöscht werden\",\n },\n errorTitle: {\n id: \"Error\",\n defaultMessage: \"Etwas ist schief gelaufen!\",\n },\n saveError: {\n id: \"WelcomyHub.Save.Error\",\n defaultMessage: \"Der Link konnte nicht gespeichert werden\",\n },\n uploadError: {\n id: \"Upload.Error\",\n defaultMessage: \"Dateiupload fehlgeschlagen. Bitte versuchen Sie es erneut\"\n }\n ,\n addLink: {\n id: \"WelcomyHub.Link.Add\",\n defaultMessage: \"Link hinzufügen\"\n },\n cancel: {\n id: \"Cancel\",\n defaultMessage: \"Abbrechen\"\n },\n updateLink: {\n id: \"WelcomyHub.Link.Update\",\n defaultMessage: \"Link aktualisieren\"\n },\n goTo: {\n id: \"Welcomyhub.Link.Goto\",\n defaultMessage: \"Gehe zu\"\n },\n linkCreationSuccessTitle: {\n id: \"WelcomyHub.Save.Success.Title\",\n defaultMessage: \"Link wurde erstellt\"\n },\n linkCreationSuccessBody: {\n id: \"WelcomyHub.Save.Success.Body\",\n defaultMessage: \"Ihre Änderungen waren erfolgreich.\"\n },\n linkUpdateSuccessTitle: {\n id: \"WelcomyHub.Update.Success.Title\",\n defaultMessage: \"Link wurde aktualisiert\"\n },\n linkUpdateSuccessBody: {\n id: \"WelcomyHub.Update.Success.Body\",\n defaultMessage: \"Ihre Änderungen waren erfolgreich.\"\n },\n AiSupportAssistantDescription: {\n id: \"WelcomyHub.Link.AiPdf.Description\",\n defaultMessage: \"Laden Sie ein PDF-Dokument hoch, das alle relevanten Informationen zu Ihrem Produkt enthält. Welcomy wird die Arbeit automatisch für Sie erledigen.\"\n },\n UploadMissingErrorTitle: {\n id: \"WelcomyHub.Link.Upload.Missing.Error.Title\",\n defaultMessage: \"Dokument nicht hochgeladen.\",\n },\n UploadMissingErrorBody: {\n id: \"WelcomyHub.Link.Upload.Missing.Error.Body\",\n defaultMessage: \"Bitte laden Sie das Dokument hoch, bevor Sie den Link speichern.\",\n },\n NoLinkErrorTitle: {\n id: \"WelcomyHub.Link.Missing.Error.Title\",\n defaultMessage: \"Link-URL fehlt\",\n },\n NoLinkErrorBody: {\n id: \"WelcomyHub.Link.Missing.Error.Body\",\n defaultMessage: \"Bitte fügen Sie vor dem Speichern einen Link ein.\",\n },\n});\n","import {createLink, deleteLink} from \"./linkManagerApiService\";\n\nexport const createLinkManagement = (existingLinks, companyId, newLink) => {\n // here we delete id because BE expects links to be without ID\n // BE only cares about the order of the links\n const links = [newLink, ...existingLinks].map((link) => {\n delete link.id;\n if(link.type === \"email\"){\n // Delete subject as BE doesn't expect it. It is added for supporting\n // subjects in email type links.\n delete link.subject;\n }\n return link;\n })\n\n return createLink(companyId, links);\n}\n\nexport const deleteLinkManagement = (companyId, linkId) => {\n return deleteLink(companyId, linkId);\n}","import http from \"../utils/http\";\n\nexport const createLink = (companyId, links) => {\n return http.post(`/company/${companyId}/link`, { links })\n}\n\nexport const getLinks = (companyId) => {\n return http.get(`/company/${companyId}/link`);\n}\n\nexport const deleteLink = (companyId, linkId) => {\n return http.delete(`/company/${companyId}/link/${linkId}`);\n}\n\nexport const updateLinkApiService = (companyId, linkId, updatedLink) => {\n return http.put(`/company/${companyId}/link/${linkId}`, { ...updatedLink })\n}\n","import { Alert, Button, Card, Form, Input, Radio, Space, Switch, Upload } from \"antd\";\nimport { UploadOutlined } from \"@ant-design/icons\";\nimport React, { useEffect, useState } from \"react\";\nimport { useHistory } from \"react-router\";\nimport {\n deleteLivePreviewLink,\n updateLivePreviewLink,\n updateLivePreviewNewLink,\n} from \"../../redux/actions/livePreviewActions\";\nimport { useDispatch } from \"react-redux\";\nimport http from \"../../utils/http\";\nimport { displayNotification } from \"../Notification\";\nimport { getIntl } from \"../../utils/intl\";\nimport { getCookie } from \"../getCookie\";\nimport LinkVariations from \"../LinkVariations/LinkVariations\";\nimport { messages } from \"./Translations\";\nimport { createLinkManagement } from \"../../api/linkManagerManagementService\";\nimport {\n setCompanyLinks,\n updateCompanyLink,\n} from \"../../redux/actions/companyConfig\";\nimport { updateLinkApiService } from \"../../api/linkManagerApiService\";\nimport { linkCouldBeIcon } from './utils';\nimport { LINK_VARIATIONS } from \"./linkMappings\";\n\nconst VARIATION_DEFAULT_OPTION = LINK_VARIATIONS.BUTTON;\n\nconst NewLink = ({\n companyId,\n existingLinks,\n updateLinkId = null,\n onChange,\n}) => {\n const [form] = Form.useForm();\n const dispatch = useDispatch();\n const history = useHistory();\n const [linkType, setLinkType] = useState(null);\n const [isLinkSocialNetwork, setIsLinkSocialNetwork] = useState(false);\n const [linkVariation, setLinkVariation] = useState(VARIATION_DEFAULT_OPTION);\n const editIndex = existingLinks.findIndex((item) => item.id === updateLinkId);\n const updateLink = existingLinks[editIndex];\n const [loadingState, setLoadingState] = useState(false);\n\n useEffect(() => {\n if (updateLink) {\n setLinkType(updateLink.type);\n form.setFieldsValue(updateLink);\n linkTypeChange(updateLink.type)\n }\n }, []);\n\n const translation = getIntl();\n const uploadProps = {\n name: \"something\",\n multiple: false,\n showUploadList: false,\n headers: {\n Authorization: `Bearer ${getCookie(\"_a\")}`,\n },\n onChange: (info) => {\n const { status } = info.file;\n if (status === \"uploading\") {\n setLoadingState(true);\n }\n else if (status === \"done\"){\n setLoadingState(false);\n }\n else if (status === \"error\"){\n setLoadingState(false);\n displayNotification(\n \"error\",\n translation.formatMessage(messages.errorTitle),\n translation.formatMessage(messages.uploadError),\n );\n }\n },\n async customRequest(fileOpts) {\n const { onSuccess, onError } = fileOpts;\n let data = new FormData();\n data.append(\"file\", fileOpts.file);\n try {\n const res = await http.post(`/company/${companyId}/file`, data);\n form.setFieldsValue({ link: res.data.payload.url });\n onSuccess();\n } catch (error) {\n console.log(\"Error uploading file\", error);\n onError(error);\n }\n },\n };\n\n const handleFormValueChanges = (changes, allChanges) => {\n if (updateLink) {\n dispatch(\n updateLivePreviewLink({\n id: updateLink.id,\n updatedLink: {\n id: updateLink.id,\n ...form.getFieldsValue(),\n variation: isLinkSocialNetwork ? linkVariation : VARIATION_DEFAULT_OPTION,\n },\n }),\n );\n } else {\n dispatch(\n updateLivePreviewNewLink({\n id: \"TEMP_LINK\",\n content: {\n ...allChanges,\n variation: isLinkSocialNetwork ? allChanges.variation : VARIATION_DEFAULT_OPTION,\n },\n }),\n );\n }\n };\n\n const AddressText = () => {\n if (linkType === \"phone\") {\n return translation.formatMessage(messages.phoneAddressText);\n }\n\n if (linkType === \"file\") {\n return translation.formatMessage(messages.fileText);\n }\n\n if (linkType === \"software\") {\n return translation.formatMessage(messages.softwareText);\n }\n\n if (linkType === \"whatsapp\") {\n return translation.formatMessage(messages.whatsappAddressText);\n }\n\n return translation.formatMessage(messages.address);\n };\n\n const cancelEdit = () => {\n if (!updateLink) {\n dispatch(deleteLivePreviewLink({ id: \"TEMP_LINK\" }));\n form.resetFields();\n }\n onChange();\n };\n\n const goTo = () => {\n if(linkType === 'newsletter'){\n history.push(\"/dashboard/subscriptions\");\n }\n else if(linkType === 'product_and_services'){\n history.push(\"/dashboard/digital-menu\");\n }\n else if(linkType === 'impressum'){\n history.push(\"/dashboard/impressum\");\n }\n }\n\n const updateLinkCard = () => {\n let updatedLink = {\n ...updateLink,\n ...form.getFieldsValue(),\n type: linkType,\n };\n updatedLink = constructLinks(linkType, updatedLink);\n\n delete updatedLink.id;\n\n if (!validateForm(linkType, updatedLink)){\n return;\n }\n updateLinkApiService(companyId, updateLink?.id, updatedLink)\n .then((res) => {\n const linkUpdate = { id: updateLink.id, ...updatedLink };\n\n dispatch(\n updateCompanyLink({ id: updateLink.id, updatedLink: linkUpdate }),\n );\n displayNotification(\n \"success\",\n translation.formatMessage(messages.linkUpdateSuccessTitle),\n translation.formatMessage(messages.linkUpdateSuccessBody),\n );\n onChange();\n })\n .catch((err) => {\n console.error(err);\n displayNotification(\n \"error\",\n translation.formatMessage(messages.errorTitle),\n translation.formatMessage(messages.saveError),\n );\n });\n };\n const constructLinks = (linkType, link) => {\n if (linkType === \"email\") {\n const subject = link[\"subject\"] || \"\";\n const emailLinkWithSubject = `${link[\"link\"]}?subject=${subject}`;\n delete link[\"subject\"];\n return {\n ...link,\n link: emailLinkWithSubject,\n };\n } else if (linkType === \"newsletter\") {\n return {\n ...link,\n link: `${window.location.protocol}//${window.location.host}/public/welcome/form/newsletter-form`,\n };\n } else if (linkType === \"product_and_services\") {\n return {\n ...link,\n link: `${window.location.protocol}//${window.location.host}/public/welcome/form/menu`,\n };\n } else if (linkType === \"pdf-ai\") {\n return {\n ...link,\n chat_with_pdf: true\n }\n } else if(linkType === \"whatsapp\"){\n if (!link[\"link\"]) return link;\n const whatsappURL = \"https://wa.me/\";\n const urlIndex = link[\"link\"].indexOf(whatsappURL);\n let phoneNumber = link[\"link\"];\n if (urlIndex !== -1){\n phoneNumber = link[\"link\"].substring(urlIndex + whatsappURL.length);\n }\n return {\n ...link,\n link: `https://wa.me/${phoneNumber}`,\n }\n } else {\n return link;\n }\n };\n\n const validateForm = (linkType, link) => {\n if(!link[\"link\"]){\n if (linkType === \"upload\"){\n displayNotification(\n \"error\",\n translation.formatMessage(messages.UploadMissingErrorTitle),\n translation.formatMessage(messages.UploadMissingErrorBody),\n );\n }\n else {\n displayNotification(\n \"error\",\n translation.formatMessage(messages.NoLinkErrorTitle),\n translation.formatMessage(messages.NoLinkErrorBody),\n );\n }\n return false;\n }\n return true;\n }\n\n const saveCard = () => {\n let newLink = {\n ...form.getFieldsValue(),\n name:\n form.getFieldValue(\"variation\") === LINK_VARIATIONS.ICON\n ? form.getFieldValue(\"link\")\n : form.getFieldValue(\"name\") || form.getFieldValue(\"name\"),\n type: linkType,\n };\n newLink = constructLinks(linkType, newLink);\n\n if (!validateForm(linkType, newLink)){\n return;\n }\n createLinkManagement(existingLinks, companyId, newLink)\n .then((res) => {\n /* here I remove the link from the preview when the link is created successfully because\n the endpoint is already sending back the full updated links to avoid LINK duplication\n in the live preview */\n dispatch(deleteLivePreviewLink({ id: \"TEMP_LINK\" }));\n dispatch(setCompanyLinks(res.data.payload));\n displayNotification(\n \"success\",\n translation.formatMessage(messages.linkCreationSuccessTitle),\n translation.formatMessage(messages.linkCreationSuccessBody),\n );\n\n // this on Change to close the Add link section\n onChange();\n })\n .catch((err) => {\n dispatch(deleteLivePreviewLink({ id: \"TEMP_LINK\" }));\n displayNotification(\n \"error\",\n translation.formatMessage(messages.errorTitle),\n translation.formatMessage(messages.saveError),\n );\n });\n };\n\n\n const linkTypeChange = (linkType) => {\n const fieldsValue = form.getFieldsValue();\n\n if (linkCouldBeIcon(linkType)) {\n setIsLinkSocialNetwork(true);\n } else {\n setIsLinkSocialNetwork(false);\n fieldsValue.variation = VARIATION_DEFAULT_OPTION;\n }\n\n setLinkType(linkType);\n\n if (updateLink) {\n dispatch(\n updateLivePreviewLink({\n id: updateLink?.id,\n updatedLink: {\n ...fieldsValue,\n type: linkType,\n variation: fieldsValue.variation,\n },\n }),\n );\n } else {\n dispatch(\n updateLivePreviewNewLink({\n id: \"TEMP_LINK\",\n content: {\n ...fieldsValue,\n type: linkType,\n variation: fieldsValue.variation,\n },\n }),\n );\n }\n };\n\n return (\n <>\n \n
\n \n {\n linkTypeChange(e);\n }}\n />\n
\n
\n \n {[\"newsletter\", \"impressum\",\n \"product_and_services\"].includes(linkType) && (\n \n )}\n {!updateLink && (\n \n )}\n {updateLink && (\n \n )}\n
\n
\n \n );\n};\n\nexport default NewLink;\n","import { LINK_TYPES } from \"./linkMappings\";\n\nexport const linkCouldBeIcon = (linkType) => {\n if (\n linkType === LINK_TYPES.INSTAGRAM ||\n linkType === LINK_TYPES.TWITTER ||\n linkType === LINK_TYPES.FACEBOOK ||\n linkType === LINK_TYPES.WHATSAPP ||\n linkType === LINK_TYPES.LINKEDIN ||\n linkType === LINK_TYPES.PHONE ||\n linkType === LINK_TYPES.EMAIL\n ) {\n return true;\n }\n return false;\n};\n","import { Tag } from \"antd\";\nimport React from \"react\";\nimport { getIntl } from \"../../../utils/intl\";\n\nconst LinkType = ({ type }) => {\n const intl = getIntl();\n const linkCall = intl.formatMessage({\n id: \"WelcomyHub.Link.Call\",\n defaultMessage: \"Telefonanruf\",\n });\n const UploadText = intl.formatMessage({\n id: \"Upload\",\n defaultMessage: \"Datei hochladen\",\n });\n\n const linkTypeMapping = {\n link: \"Link\",\n file: \"Cloud-Link\",\n upload: UploadText,\n software: \"Software-Tool\",\n newsletter: \"Newsletter\",\n email: \"E-mail\",\n phone: linkCall,\n linkedin: \"LinkedIn\",\n whatsapp: \"Whatsapp\",\n instagram: \"Instagram\",\n twitter: \"Twitter\",\n facebook: \"Facebook\",\n impressum: \"Impressum\",\n menu: \"Menu\",\n registration: \"Questionnaire\",\n product_and_services: \"Product Page\"\n };\n\n return {linkTypeMapping[type]};\n};\n\nexport const CardTagVisible = ({ visible, ...props }) => {\n if (typeof visible === \"undefined\") return null;\n\n if (visible) return Visible;\n return Hidden;\n};\n\nexport const CardTagInVCard = ({ inVCard, ...props }) => {\n if (!inVCard) return null;\n\n const intl = getIntl();\n const vCardText = intl.formatMessage({\n id: \"WelcomyHub.Tag.VirtualCard.Text\",\n defaultMessage: \"Digitale Business-Karte\",\n });\n\n return {vCardText};\n};\n\nexport const CardTagLinkType = ({ type, ...props }) => {\n if (!type) return null;\n\n const intl = getIntl();\n const linkVariationText = intl.formatMessage({\n id: \"WelcomyHub.Link.Type\",\n defaultMessage: \"Art des Links\",\n });\n\n return (\n \n {linkVariationText}: \n \n );\n};\n","\nimport { defineMessages } from 'react-intl';\n\nexport const messages = defineMessages({\n deleteError: {\n id: \"WelcomyHub.Delete.Error\",\n defaultMessage: \"Der Link konnte nicht gelöscht werden\",\n },\n errorTitle: {\n id: \"Error\",\n defaultMessage: \"Etwas ist schief gelaufen!\",\n },\n});\n","import {DeleteOutlined, EditOutlined, MenuOutlined} from \"@ant-design/icons\";\nimport {Button, Card} from \"antd\";\nimport React from \"react\";\nimport Meta from \"antd/es/card/Meta\";\nimport {deleteLinkManagement} from \"../../api/linkManagerManagementService\";\nimport {deleteCompanyLink} from \"../../redux/actions/companyConfig\";\nimport {displayNotification} from \"../Notification\";\nimport {useDispatch, useSelector} from \"react-redux\";\nimport {useIntl} from \"react-intl\";\nimport {CardTagInVCard, CardTagLinkType, CardTagVisible} from \"../../pages/WelcomyHub/cards/CardTags\";\nimport { messages } from \"./Translations\";\n\nconst LinkCard = ({ link, showAddNewLink, editCard, onChange }) => {\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const dispatch = useDispatch();\n const translation = useIntl()\n\n const editLinkCard = (linkId) => {\n onChange(linkId)\n }\n const deleteCard = (linkId) => {\n return deleteLinkManagement(companyId, linkId)\n .then(() => {\n dispatch(deleteCompanyLink(linkId));\n displayNotification(\n \"success\",\n 'Removed',\n 'Link is deleted successfully'\n );\n }).catch((error) => {\n displayNotification(\n \"error\",\n translation.formatMessage(messages.errorTitle),\n translation.formatMessage(messages.deleteError)\n );\n console.log(\"Unable to delete link:\", error);\n });\n }\n\n const CardMeta = ({hubLink}) => (\n
\n
\n {hubLink.link}
\n
\n
\n \n \n \n
\n
\n )\n\n return (\n \n }\n className=\"meta\"\n />\n
\n
\n \n
\n
\n
\n
\n \n
\n
\n \n
\n
\n\n
\n )\n}\n\nexport default LinkCard;","import { Button, Col, Empty, Row, Tooltip, Typography, } from \"antd\";\nimport { PlusOutlined } from \"@ant-design/icons\";\nimport React, { useCallback, useEffect, useRef, useState } from \"react\";\n\nimport { DndProvider, useDrag, useDrop } from \"react-dnd\";\nimport { HTML5Backend } from \"react-dnd-html5-backend\";\nimport update from \"immutability-helper\";\nimport http from \"../../utils/http\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { getIntl } from \"../../utils/intl\";\nimport { displayNotification } from \"../../components/Notification\";\nimport {\n addLivePreviewLink,\n setLivePreviewLinks,\n} from \"../../redux/actions/livePreviewActions\";\nimport { getLinks } from \"../../api/linkManagerApiService\";\nimport NewLink from \"../../components/NewLink/NewLink\";\nimport LinkCard from \"../../components/linkCard/LinkCard\";\n\nconst { Title, Paragraph } = Typography;\n\nconst WelcomyHub = (props) => {\n const intl = getIntl();\n\n const clickPreventionText = intl.formatMessage({\n id: \"WelcomyHub.click.prevention\",\n defaultMessage: \"Beenden Sie Ihre aktuelle Arbeit, bevor Sie fortfahren.\",\n });\n const addButton = intl.formatMessage({\n id: \"WelcomyHub.Link.Add\",\n defaultMessage: \"Neuen Link hinzufügen\",\n });\n\n const title = intl.formatMessage({\n id: \"WelcomyHub.Title\",\n defaultMessage: \"Link Manager: Anpassungen an Ihrer Welcomy Hub\",\n });\n\n const noLinksText = intl.formatMessage({\n id: \"WelcomyHub.NoLinks\",\n defaultMessage: \"Beginnen Sie mit der Erstellung neuer Links!✨\",\n });\n\n const [links, setLinks] = useState([]);\n const [popoverIndex, setPopoverIndex] = useState(null);\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const [showAddNewLink, setShowAddNewLink] = useState(false);\n const [showEmptyPlaceholder, setshowEmptyPlaceholder] = useState(false);\n const [editCard, setEditCard] = useState(null);\n const dispatch = useDispatch();\n let observer = null;\n if (links !== null) {\n observer = links;\n }\n\n const fetchLinks = () => {\n getLinks(companyId)\n .then((response) => {\n const payload = response.data.payload;\n if (payload.length > 0) {\n payload.forEach((link) => {\n if (link[\"type\"] == \"email\") {\n const emailParts = link[\"link\"].split(\"?subject=\");\n if (emailParts.length > 1) {\n link[\"subject\"] = emailParts[1];\n link[\"link\"] = emailParts[0];\n }\n }\n });\n setLinks(response.data.payload);\n const previewLinks = response.data.payload.filter((link) => link.visible === true);\n dispatch(setLivePreviewLinks(previewLinks));\n } else {\n setshowEmptyPlaceholder(true)\n }\n })\n .catch((error) => {\n console.log(\"Unable to fetch links list.\", error);\n });\n };\n\n useEffect(() => {\n fetchLinks();\n }, []);\n\n const DragableWrapper = ({ index, moveCard, categoryIndex, children }) => {\n const ref = useRef();\n\n const [{ isOver, dropClassName }, drop] = useDrop({\n accept: \"DragableBodyRow\",\n collect: (monitor) => {\n const { index: dragIndex } = monitor.getItem() || {};\n if (dragIndex === index) {\n return {};\n }\n return {\n isOver: monitor.isOver(),\n dropClassName:\n dragIndex < index ? \" drop-over-downward\" : \" drop-over-upward\",\n };\n },\n drop: (item) => {\n moveCard(item.index, index);\n },\n });\n\n const [, drag] = useDrag({\n type: \"DragableBodyRow\",\n item: { index },\n collect: (monitor) => ({\n isDragging: monitor.isDragging(),\n }),\n });\n if (!(editCard || showAddNewLink)) {\n drop(drag(ref));\n }\n\n return (\n
\n {children}\n
\n );\n };\n\n const saveLinks = async (_links = links) => {\n try {\n return await http.post(`/company/${companyId}/link`, {\n links: _links.map((link) => {\n delete link.id;\n return link;\n }),\n });\n } catch (error) {\n console.log(\"Unable to save links\", error);\n }\n };\n\n const moveCard = useCallback(\n async (dragIndex, hoverIndex) => {\n const dragRow = links[dragIndex];\n\n const result = update(links, {\n $splice: [\n [dragIndex, 1],\n [hoverIndex, 0, dragRow],\n ],\n });\n await setLinks(result);\n result.map((link) => {\n if (link[\"type\"] == \"email\"){\n const subject = link[\"subject\"] || \"\";\n link[\"link\"] = `${link[\"link\"]}?subject=${subject}`;\n delete link[\"subject\"]; \n }\n });\n await saveLinks(result)\n .then((response) => {\n /**\n * @TODO: Debounce requests\n *\n * The sucess feedback for the reordering operation should be the\n * the new position of the element in the UI with no errors.\n *\n * If we really want a feedback operation, e.g. notification, we will\n * require to debouce this operation in order not to spam the user\n * (as we hit the API after every change).\n *\n */\n const previewLinks = response.data.payload.filter((link) => link.visible === true);\n dispatch(setLivePreviewLinks(previewLinks));\n setLinks([...response.data.payload]);\n })\n .catch((error) => {\n const errorTitle = intl.formatMessage({\n id: \"Error\",\n defaultMessage: \"Etwas ist schief gelaufen!\",\n });\n const reorderError = intl.formatMessage({\n id: \"WelcomyHub.Save.Order.Error\",\n defaultMessage: \"Die Änderung ist fehlgeschlagen\",\n });\n displayNotification(\"error\", errorTitle, reorderError);\n console.log(error);\n });\n /**\n * UPDATE BACKEND WITH NEW ORDER\n */\n },\n [observer],\n );\n\n const newLinkChange = () => {\n setShowAddNewLink(false);\n setshowEmptyPlaceholder(true);\n setEditCard(null);\n };\n\n const linkCardChange = (linkId) => {\n setEditCard(linkId);\n };\n\n const Cards = () => {\n // Add a link type here to avoid rendering it.\n const EXCLUSION_LINKS = ['registration'];\n return (\n <>\n {!!links.length &&\n links.filter(aLink => EXCLUSION_LINKS.indexOf(aLink.type) === -1).map((aLink, index) => {\n return (\n \n triggerNode.parentNode}\n visible={popoverIndex === index}\n >\n \n {aLink.id === editCard && (\n \n )}\n \n \n );\n })}\n \n );\n };\n\n const addNewLink = () => {\n setShowAddNewLink(true);\n setshowEmptyPlaceholder(false);\n dispatch(addLivePreviewLink({ id: \"TEMP_LINK\" }));\n };\n\n return (\n
\n \n
\n \n {title}\n \n triggerNode.parentNode}\n visible={popoverIndex === -1}\n >\n }\n >\n {addButton}\n \n {showAddNewLink && (\n \n )}\n \n { links.length === 0 && showEmptyPlaceholder && (\n
\n \n {noLinksText}\n \n }\n />
\n )}\n {!!links.length && (\n \n \n \n )}\n \n \n \n );\n};\n\nexport default React.memo(WelcomyHub);\n","import React from 'react';\nimport WelcomyHubPreview from '../WelcomyHubPreview/WelcomyHubPreview';\nimport WelcomyHub from '.';\n\nconst PreviewWrapperHub = (props) => {\n return (\n \n \n \n );\n}\n\nexport default PreviewWrapperHub;","/**\n * @description Return a base64 string representation of a file loaded in memory.\n * @param {File like Object} img - File like object to be read and loaded.\n * @param {Function} callback - Callback function, e.g. update state.\n */\nexport const getBase64 = (img, callback) => {\n if (callback) {\n const reader = new FileReader();\n reader.addEventListener(\"load\", () => callback(reader.result));\n reader.readAsDataURL(img);\n } else {\n return new Promise((resolve, reject) => {\n const reader = new FileReader();\n reader.readAsDataURL(img);\n reader.onload = () => resolve(reader.result);\n reader.onerror = (error) => reject(error);\n });\n }\n};\n","import React, { memo, useState } from \"react\";\nimport { displayNotification } from \"../components/Notification\";\nimport { getIntl } from \"../utils/intl\";\nimport { Form, Upload } from \"antd\";\nimport { FormattedMessage } from \"react-intl\";\nimport { useSelector } from \"react-redux\";\nimport { getBase64 } from \"./WelcomyHub/utils\";\nimport { UploadOutlined } from \"@ant-design/icons\";\n\nexport const LogoUpload = memo(({ onFormChange, inputLabel = \"\", logoImage = \"\", required = false, disabled = false }) => {\n const intl = getIntl();\n const [form] = Form.useForm();\n const [logoToBeSaved, setLogoToBeSaved] = useState(logoImage);\n const hub_logo = useSelector((state) => state.companyConfig.hub_logo);\n\n\n const uploadReadylabel = intl.formatMessage({\n id: \"Ready\",\n defaultMessage: \"Bereit\",\n });\n\n const beforeUpload = (file) => {\n // Check if image is less than 2 Mb.\n const isLt2M = file.size / 1024 / 1024 < 2;\n if (!isLt2M) {\n const title = intl.formatMessage({\n id: \"SetupPage.Notification.ImageTooLarge.Title\",\n defaultMessage: \"Bildgröße zu groß\",\n });\n const body = intl.formatMessage({\n id: \"SetupPage.Notification.ImageTooLarge.Body\",\n defaultMessage: \"Das Bild muss kleiner als 2 MB sein\",\n });\n displayNotification(\"error\", title, body);\n }\n // Prevent auto-upload\n return false;\n };\n\n const handleFileChange = (fileList) => {\n // Update the form field 'companyLogo' when a new file is selected\n form.setFieldsValue({ companyLogo: fileList });\n if (fileList?.length > 1) {\n fileList.shift();\n }\n\n getBase64(fileList[0].originFileObj, setLogoToBeSaved);\n\n onFormChange({\n ...form.getFieldsValue(),\n companyLogo: fileList,\n });\n };\n\n // Upload button configuration\n const UploadButton = () => (\n
\n {hub_logo ? (\n \"logo\"\n ) : (\n
\n \n
Upload Logo
\n
\n )}\n
\n );\n\n return (\n e && e.fileList}\n rules={[{ required: required, message: \"Please upload a company logo\" }]}\n wrapperCol={{ span: 24 }}\n label={\n inputLabel ? inputLabel : \n }\n >\n handleFileChange(info.fileList)}\n disabled={disabled}\n >\n {logoToBeSaved ? (\n
\n \"logo\"\n
{uploadReadylabel}
\n
\n ) : (\n \n )}\n \n \n );\n});\n","import { Button, Col, Form, Input, notification, Row, Typography } from \"antd\";\nimport QueueAnim from \"rc-queue-anim\";\nimport React, { useCallback, useEffect, useState } from \"react\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { displayNotification } from \"../../components/Notification\";\nimport { uploadImages } from \"../../utils/image\";\nimport { getIntl } from \"../../utils/intl\";\nimport { addHubConfig, getHubConfig } from \"../../api/layOutApiService\";\nimport { setHubConfig as setHubConfigAction } from \"../../redux/actions\";\nimport { updateLivePreviewCompanySetup } from \"../../redux/actions/livePreviewActions\";\nimport { getBase64 } from \"./utils\";\nimport { LogoUpload } from \"../LogoUpload\";\n\nconst { Paragraph } = Typography;\n\nconst maxCharsTitle = 55;\nconst maxCharsSubtitle = 255;\n\nconst WelcomyHubConfig = () => {\n const [form] = Form.useForm();\n const dispatch = useDispatch();\n\n const [isFirstLoad, setIsFirstLoad] = useState(false);\n\n const companyId = useSelector((state) => state.companyConfig.company_id);\n\n const [hubConfig, setHubConfig] = useState(null);\n let initialConfigHubState = null;\n\n const [isLoading, setIsLoading] = useState(false);\n\n const [title, setTitle] = useState(\"\");\n const [hubName, setHubName] = useState(\"\");\n const [subtitle, setSubtitle] = useState(\"\");\n const [logo, setLogo] = useState(null);\n const [hubLogo, setHubLogo] = useState(\"\");\n\n /**\n * Translations\n */\n const intl = getIntl();\n\n const titleInput = intl.formatMessage({\n id: \"WelcomyHubConfig.Label.Title\",\n defaultMessage: \"Erste Zeile (Empfehlung: schreiben Sie eine Willkommensnachricht)\",\n });\n\n const logoLabel = intl.formatMessage({\n id: \"WelcomyHubConfig.Label.Logo\",\n defaultMessage: \"Logo hochladen\",\n });\n\n const nameLabel = intl.formatMessage({\n id: \"WelcomyHubConfig.Label.Name\",\n defaultMessage: \"Zweite Zeile (Empfehlung: geben Sie der Hub einen maßgeschneiderten Namen oder definieren Sie den Zweck der Hub)\",\n });\n\n const namePlaceholder = intl.formatMessage({\n id: \"WelcomyHubConfig.Label.Name.Input\",\n defaultMessage: \"Fügen Sie den Zweck oder Namen der Hub ein\",\n });\n\n const titlePlaceholder = intl.formatMessage({\n id: \"WelcomyHubConfig.Placeholder.Title\",\n defaultMessage: \"Fügen Sie hier Ihre Willkommensnachricht ein\",\n });\n\n const subtitleInput = intl.formatMessage({\n id: \"WelcomyHubConfig.Label.Subtitle\",\n defaultMessage: \"Zweite Zeile (Empfehlung: geben Sie der Hub einen maßgeschneiderten Namen oder definieren Sie den Zweck der Hub)\",\n });\n\n const subtitlePlaceholder = intl.formatMessage({\n id: \"WelcomyHubConfig.Placeholder.Subtitle\",\n defaultMessage: \"Schildern Sie hier den Inhalt Ihrer Welcomy Hub\",\n });\n\n const saveButton = intl.formatMessage({\n id: \"Save\",\n defaultMessage: \"Speichern\",\n });\n\n const errorTitle = intl.formatMessage({\n id: \"Error\",\n defaultMessage: \"Etwas ist schief gelaufen!\",\n });\n\n // Fetch initial data\n useEffect(() => {\n fetchHubData();\n }, [], () => {\n dispatch(setHubConfigAction({...initialConfigHubState}));\n });\n\n // Set initial data to form\n useEffect(() => {\n if (hubConfig && Object.keys(hubConfig || {}).length > 0) {\n const { title, subtitle, name, hubLogo } = hubConfig;\n form.setFieldsValue({\n \"title\": title || \"\",\n \"name\": name || \"\",\n \"subtitle\": subtitle || \"\",\n });\n setTitle(title || \"\");\n setHubName(name || \"\");\n setSubtitle(subtitle || \"\");\n setHubLogo(hubLogo || \"\");\n setIsFirstLoad(true);\n }\n }, [hubConfig]);\n\n const fetchHubData = async () => {\n try {\n const {\n data: { payload },\n } = await getHubConfig(companyId);\n dispatch(\n updateLivePreviewCompanySetup({\n companyTitle: payload.title,\n description: payload.subtitle,\n hubName: payload.name,\n logo: payload.image_url,\n })\n );\n\n const _hubConfig = {\n ...payload,\n hubLogo: payload.image_url,\n };\n\n setHubConfig(_hubConfig);\n initialConfigHubState = {..._hubConfig}\n } catch (error) {\n console.error(\"Error loading Hub Data\");\n displayNotification(\"error\", errorTitle, \"\");\n }\n };\n\n const changeTitle = ({ target: { value } }) => {\n if (isFirstLoad) {\n setIsFirstLoad(false);\n }\n if (title.length <= maxCharsTitle) {\n setTitle(value);\n }\n };\n\n const changeHubName = ({ target: { value } }) => {\n if (isFirstLoad) {\n setIsFirstLoad(false);\n }\n setHubName(value);\n };\n\n const changeSubtitle = ({ target: { value } }) => {\n if (isFirstLoad) {\n setIsFirstLoad(false);\n }\n if (subtitle.length <= maxCharsSubtitle) {\n setSubtitle(value);\n }\n };\n\n const submit = async () => {\n setIsLoading(true);\n if (logo) {\n try {\n logo.thumbUrl = await getBase64(logo);\n const response = await uploadImages(companyId, [logo], \"hub/logo\");\n if (response.length === 0) throw new Error();\n await addHubConfig(title, subtitle, hubName, response[0], companyId);\n /**\n * update initial state to reflect changes\n */\n initialConfigHubState = {\n company_id: companyId,\n image_url: response[0],\n name: hubName,\n title,\n subtitle,\n };\n dispatch(\n setHubConfigAction({\n name: hubName,\n title,\n subtitle,\n hubLogo: response[0],\n })\n );\n } catch (error) {\n console.error(\"Error while uploading hub image\");\n displayNotification(\"error\", errorTitle, \"\");\n }\n } else {\n await addHubConfig(title, subtitle, hubName, hubLogo, companyId);\n /**\n * update initial state to reflect changes\n */\n initialConfigHubState = {\n company_id: companyId,\n image_url: hubLogo,\n name: hubName,\n title,\n subtitle,\n };\n dispatch(\n setHubConfigAction({\n name: hubName,\n title,\n subtitle,\n hubLogo,\n })\n );\n }\n setIsLoading(false);\n };\n\n const handleLogoChange = useCallback((payload) => {\n const { companyLogo } = payload;\n if (companyLogo && companyLogo[0] && companyLogo[0].originFileObj) {\n const logoFile = companyLogo[0].originFileObj;\n setLogo(logoFile);\n getBase64(logoFile, (logoBase64) => {\n dispatch(\n updateLivePreviewCompanySetup({\n logo: logoBase64,\n })\n );\n });\n }\n }, []);\n\n const layoutFormChange = (changes, allChanges) => {\n dispatch(\n updateLivePreviewCompanySetup({\n companyTitle: allChanges[\"title\"],\n hubName: allChanges[\"name\"],\n description: allChanges[\"subtitle\"],\n })\n );\n };\n\n return (\n
\n \n
\n
\n \n \n \n changeTitle(e)}\n maxLength={maxCharsTitle}\n placeholder={titlePlaceholder}\n disabled={isLoading}\n />\n \n \n {title.length}/{maxCharsTitle}\n \n \n changeHubName(e)}\n placeholder={namePlaceholder}\n disabled={isLoading}\n />\n \n \n changeSubtitle(e)}\n maxLength={maxCharsSubtitle}\n className=\"layout-form__textarea\"\n placeholder={subtitlePlaceholder}\n disabled={isLoading}\n />\n \n \n {subtitle.length}/{maxCharsSubtitle}\n \n \n \n \n \n
\n \n \n \n );\n};\n\nexport default WelcomyHubConfig;\n","import React from 'react';\nimport WelcomyHubPreview from '../WelcomyHubPreview/WelcomyHubPreview';\nimport WelcomyHubConfig from './WelcomyHubConfig';\n\nconst PreviewWrapperConfigHub = (props) => {\n return (\n \n \n \n );\n}\n\nexport default PreviewWrapperConfigHub;","import React from \"react\";\nimport { Button, Form, Input, Modal, Select, Typography } from \"antd\";\nimport { getIntl } from \"../../utils/intl\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { inviteUserApi } from \"../../api/userManagementApiService\";\nimport { displayNotification } from \"../Notification\";\nimport { addUser } from \"../../redux/actions/usersActions\";\n\nconst InviteUserModal = ({ visible, onCancel }) => {\n const [form] = Form.useForm();\n const { Option } = Select;\n const dispatch = useDispatch();\n const intl = getIntl();\n const companyId = useSelector((state) => state.companyConfig.company_id);\n\n const inviteUserText = intl.formatMessage({\n id: \"UserManagement.InviteUser.Button.Text\",\n defaultMessage: \"Benutzer einladen\"\n });\n const userRoleText = intl.formatMessage({\n id: \"UserManagement.InviteUser.Form.UserRole.Text\",\n defaultMessage: \"Benutzer-Rolle\"\n });\n\n\n const validateEmail = (rule, value) => {\n if (!value || /^[\\w-]+(\\.[\\w-]+)*@[\\w-]+(\\.[\\w-]+)+$/.test(value)) {\n return Promise.resolve();\n }\n return Promise.reject(\"Invalid email format\");\n };\n const handleOnCancel = () => {\n form.resetFields();\n onCancel();\n };\n\n const inviteUser = () => {\n const inviteUserData = form.getFieldsValue();\n inviteUserApi(companyId, inviteUserData)\n .then((res) => {\n dispatch(addUser(inviteUserData));\n displayNotification(\n \"success\",\n successNotificationTitle,\n \"User is successfully invited\",\n );\n onCancel();\n })\n .catch((error) => {\n console.log(error);\n displayNotification(\"error\", \"Error\", \"Failed to invite User\");\n });\n };\n\n const successNotificationTitle = intl.formatMessage({\n id: \"Success\",\n defaultMessage: \"Erfolg!\",\n });\n\n return (\n \n Cancel\n ,\n ,\n ]}\n >\n \n \n \n \n\n \n \n \n \n \n );\n};\n\nexport default InviteUserModal;\n","import http from \"../utils/http\";\n\nexport const getUsersApi = (companyId) => {\n return http.get(`/company/${companyId}/user`);\n};\n\nexport const deleteUserApi = (userId, companyId) => {\n return http.delete(`/company/${companyId}/user/${userId}`);\n};\n\nexport const updateInvitedUserApi = (userId, companyId, role) => {\n return http.put(`/company/${companyId}/user/${userId}`, {\n ...role,\n });\n};\n\nexport const inviteUserApi = (companyId, user) => {\n return http.post(`/company/${companyId}/user`, {\n ...user,\n company_id: companyId,\n });\n};\n","import React, { useEffect, useState } from \"react\";\nimport { Form, Modal, Select } from \"antd\";\nimport { getIntl } from \"../../utils/intl\";\nimport { updateInvitedUserApi } from \"../../api/userManagementApiService\";\nimport { displayNotification } from \"../../components/Notification\";\nimport { useDispatch } from \"react-redux\";\nimport { updateUser } from \"../../redux/actions/usersActions\";\n\nconst { Option } = Select;\n\nconst UpdateUserModal = ({ user, onConfirm, onCancel }) => {\n const [form] = Form.useForm();\n const intl = getIntl();\n const [isModalVisible, setIsModalVisible] = useState(false);\n const dispatch = useDispatch();\n\n const successNotificationTitle = intl.formatMessage({\n id: \"Success\",\n defaultMessage: \"Erfolg!\",\n });\n const successNotificationBody = intl.formatMessage({\n id: \"UserManagement.Notification.Edit.Success\",\n defaultMessage: \"Benutzer erfolgreich aktualisiert.\",\n });\n const errorNotificationTitle = intl.formatMessage({\n id: \"UserManagement.Notification.Edit.Error.Title\",\n defaultMessage: \"Benutzer konnte nicht aktualisiert werden.\",\n });\n const errorNotificationBody = intl.formatMessage({\n id: \"UserManagement.Notification.Edit.Error.Body\",\n });\n const editModalTitle = intl.formatMessage({\n id: \"UserManagement.Edit.Title\",\n });\n const formFieldErrorMessage = intl.formatMessage({\n id: \"UserManagement.Form.Error.Message\",\n });\n const userRoleText = intl.formatMessage({\n id: \"UserManagement.InviteUser.Form.UserRole.Text\",\n defaultMessage: \"Benutzer-Rolle\"\n });\n const adminRole = intl.formatMessage({\n id: \"UserManagement.Admin\",\n });\n const employeeRole = intl.formatMessage({\n id: \"UserManagement.Employee\",\n });\n const updateText = intl.formatMessage({\n id: \"Button.Update\",\n });\n\n\n useEffect(() => {\n form.setFieldsValue(user);\n setIsModalVisible(!!user);\n }, [user]);\n\n const handleModalCancel = () => {\n setIsModalVisible(false);\n form.resetFields();\n onCancel();\n };\n\n const handleModalOk = () => {\n updateInvitedUserApi(user?.id, user?.company_id, form.getFieldsValue())\n .then((res) => {\n dispatch(\n updateUser({\n id: user?.id,\n content: form.getFieldsValue(),\n }),\n );\n setIsModalVisible(false);\n form.resetFields();\n displayNotification(\n \"success\",\n successNotificationTitle,\n successNotificationBody,\n );\n })\n .catch((e) => {\n form.resetFields();\n console.error(e);\n displayNotification(\n \"error\",\n errorNotificationTitle,\n errorNotificationBody,\n );\n });\n };\n\n\n return (\n <>\n \n
\n \n \n \n \n \n \n );\n};\n\nexport default UpdateUserModal;\n","import React, { useEffect, useState } from \"react\";\nimport { Button, Col, Input, Space, Table } from \"antd\";\nimport ConfirmationModal from \"../../components/ConfirmationModal/ConfirmationModal\";\nimport UpdateUserModal from \"./UpdateUser\";\nimport { getIntl } from \"../../utils/intl\";\nimport { displayNotification } from \"../../components/Notification\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { deleteUserApi } from \"../../api/userManagementApiService\";\nimport { deleteUser } from \"../../redux/actions/usersActions\";\nimport { getCookie } from \"../../components/getCookie\";\n\nconst UserManagementTable = ({ users }) => {\n const intl = getIntl();\n const dispatch = useDispatch();\n const [deleteUserId, setDeleteUserId] = useState(null);\n const [updateUser, setUpdateUser] = useState(null);\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const companyName = useSelector(state => state.companyConfig.name);\n const sub_accounts = useSelector(\n (state) => state.companyConfig[\"sub_accounts\"],\n );\n const accountNames = {};\n accountNames[companyId] = companyName;\n sub_accounts.map((subAccount, _) => {\n accountNames[subAccount.id] = subAccount.name;\n });\n const superAccount = useSelector(\n (state) => state.companyConfig.super_account,\n );\n const userRole = getCookie(\"_ur\");\n const isAdmin = userRole === 'admin';\n const editButtonText = intl.formatMessage({\n id: \"Edit\",\n });\n const deleteButtonText = intl.formatMessage({\n id: \"Delete\",\n });\n const [confirmationModalVisible, setConfirmationModalVisible] =\n useState(false);\n const [searchText, setSearchText] = useState(\"\");\n\n const handleEditUser = (workspace) => {\n setUpdateUser(workspace);\n };\n\n const handleDeleteUser = (key) => {\n setConfirmationModalVisible(true);\n setDeleteUserId(key);\n };\n\n const handleUpdateModalConfirm = (e) => {\n setUpdateUser(null);\n };\n\n const handleConfirm = () => {\n // delete user\n deleteUserApi(deleteUserId, companyId)\n .then(() => {\n dispatch(deleteUser(deleteUserId));\n displayNotification(\"success\", \"Success\", \"User deleted successfully.\");\n setConfirmationModalVisible(false);\n })\n .catch((e) => {\n displayNotification(\n \"error\",\n \"Error\",\n \"Failed to delete user. try again later.\",\n );\n });\n };\n\n const handleCancel = () => {\n setConfirmationModalVisible(false);\n };\n\n const columns = [\n {\n title: \"Email\",\n dataIndex: \"email\",\n key: \"email\",\n },\n {\n title: \"Role\",\n dataIndex: \"role\",\n key: \"role\",\n },\n {\n title: \"\",\n key: \"actions\",\n render: (text, user) => (\n \n {isAdmin && }\n {isAdmin && }\n \n ),\n },\n ];\n if (superAccount){\n const hubColumn = {\n title: \"Hub\",\n dataIndex: \"company_id\",\n render: (item) => {return accountNames[item];},\n key: \"role\",\n };\n columns.splice(1, 0, hubColumn);\n }\n\n return (\n <>\n
\n
\n
\n setSearchText(e.target.value)}\n />\n
\n \n handleUpdateModalConfirm(e)}\n onCancel={() => setUpdateUser(null)}\n />\n \n \n \n \n );\n};\nexport default UserManagementTable;\n","import React, { useEffect, useState } from \"react\";\nimport { Button } from \"antd\";\nimport { getIntl } from \"../../utils/intl\";\nimport InviteUserModal from \"../../components/InviteUserModal\";\nimport UserManagementTable from \"./Table\";\nimport { getUsersApi } from \"../../api/userManagementApiService\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport { setUsers } from \"../../redux/actions/usersActions\";\nimport { getCookie } from \"../../components/getCookie\";\n\nconst UserManagement = () => {\n const intl = getIntl();\n const dispatch = useDispatch();\n const [inviteUserModal, setInviteUserModal] = useState(false);\n const handleOnCancelInviteUser = () => {\n setInviteUserModal(false);\n };\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const users = useSelector((state) => state.usersManagement.users);\n\n const userRole = getCookie(\"_ur\");\n const isAdmin = userRole === 'admin';\n\n const userManagementTitle = intl.formatMessage({\n id: \"UserManagement.Title\",\n defaultMessage: \"Nutzerverwaltung\"\n });\n const userManagementDescription = intl.formatMessage({\n id: \"UserManagement.Description\",\n defaultMessage: \"Verwalten Sie hier Ihre Benutzer\"\n });\n const inviteUserButtonText = intl.formatMessage({\n id: \"UserManagement.InviteUser.Button.Text\",\n defaultMessage: \"Benutzer einladen\"\n });\n\n\n useEffect(() => {\n getUsersApi(companyId).then((users) => {\n dispatch(setUsers(users?.data.payload));\n });\n }, []);\n\n return (\n <>\n
\n \n
\n

\n {userManagementTitle}\n {userManagementDescription}\n

\n\n \n
\n \n
\n \n );\n};\n\nexport default UserManagement;\n","import React, { useEffect, useRef } from \"react\";\nimport { Chart } from \"chart.js\";\nimport { Spin } from \"antd\";\n\nfunction BarChart({ data, title, limit }) {\n const ref = useRef(null);\n\n let labels = [];\n let values = [];\n if (data) {\n labels = Object.keys(data);\n values = Object.values(data);\n\n if (limit) {\n labels = labels.splice(labels.length - limit);\n values = values.splice(values.length - limit);\n }\n }\n\n useEffect(() => {\n if (data) {\n new Chart(ref.current, {\n type: \"bar\",\n data: {\n labels: labels,\n datasets: [\n {\n label: title,\n data: values,\n backgroundColor: \"rgba(54, 162, 235, 1)\",\n borderColor: \"rgba(54, 162, 235, 1)\",\n borderWidth: 1,\n },\n ],\n },\n options: {\n responsive: true,\n scales: {\n y: {\n suggestedMin: 0,\n suggestedMax: 50,\n },\n },\n },\n });\n }\n }, [data]);\n\n if (!data)\n return (\n
\n
\n \n
\n
\n );\n\n return (\n
\n \n
\n );\n}\n\nexport default BarChart;\n","import React, { useEffect, useRef } from \"react\";\nimport { Chart } from \"chart.js\";\nimport { Spin } from \"antd\";\n\nfunction LineChart({ data, title, limit }) {\n const ref = useRef(null);\n\n let labels = [];\n let values = [];\n if (data) {\n labels = Object.keys(data);\n values = Object.values(data);\n\n if (limit) {\n labels = labels.splice(labels.length - limit);\n values = values.splice(values.length - limit);\n }\n }\n\n useEffect(() => {\n if (data) {\n new Chart(ref.current, {\n type: \"line\",\n data: {\n labels: labels,\n labels: labels,\n datasets: [\n {\n label: title,\n data: values,\n borderColor: \"rgba(54, 162, 235, 1)\",\n backgroundColor: \"rgba(54, 162, 235, 1)\",\n fill: false,\n tension: 0.4,\n },\n ],\n },\n options: {\n responsive: true,\n scales: {\n y: {\n suggestedMin: 0,\n suggestedMax: 50,\n },\n },\n },\n });\n }\n }, [data]);\n\n if (!data)\n return (\n
\n
\n \n
\n
\n );\n\n return (\n
\n \n
\n );\n}\n\nexport default LineChart;\n","import { defineMessages } from \"react-intl\";\n\nexport const messages = defineMessages({\n pageTitle: {\n id: \"Analytics.Page.Title\",\n defaultMessage: \"Welcomy Hub Analytics\",\n },\n counterTotalTitle: {\n id: \"Analytics.Counters.Total.Title\",\n defaultMessage: \"Gesamtnutzungsrate der Hub\",\n },\n counterTotalSeven: {\n id: \"Analytics.Counters.Total.Seven\",\n defaultMessage: \"Letzten 7 Tage\",\n },\n counterTotalThirtyOne: {\n id: \"Analytics.Counters.Total.ThirtyOne\",\n defaultMessage: \"Letzten 31 Tage\",\n },\n lineChartSevenTitle: {\n id: \"Analytics.Line.Seven.Title\",\n defaultMessage: \"Nutzungsrate der Hub in den letzten 7 Tagen\",\n },\n lineChartSevenLegend: {\n id: \"Analytics.Line.Seven.Legend\",\n defaultMessage: \"Anzahl der Aufrufe\",\n },\n barCharttThirtyOneTitle: {\n id: \"Analytics.Bar.ThirtyOne.Title\",\n defaultMessage: \"Nutzungsrate der Hub in den letzten 31 Tagen\",\n },\n barCharttThirtyOneLegend: {\n id: \"Analytics.Bar.ThirtyOne.Legend\",\n defaultMessage: \"Anzahl der Aufrufe\",\n },\n tableCountriesTitle: {\n id: \"Analytics.Countries.Title\",\n defaultMessage: \"Nutzungsrate der Hub pro Land in den letzten 31 Tagen\",\n },\n tableCountriesColumnCountry: {\n id: \"Analytics.Countries.Column.Country\",\n defaultMessage: \"Land\",\n },\n tableCountriesColumnUsage: {\n id: \"Analytics.Countries.Column.Usage\",\n defaultMessage: \"Nutzungsrate der Hub\",\n },\n});\n","import React from \"react\";\nimport \"flag-icons/css/flag-icons.min.css\";\nimport { Spin, Table } from \"antd\";\nimport { messages } from \"../translations\";\nimport { getIntl } from \"../../../utils/intl\";\n\n\nfunction TopCountries({ data }) {\n const intl = getIntl();\n\n const columns = [\n {\n title: intl.formatMessage(messages.tableCountriesColumnCountry),\n key: \"country\",\n dataIndex: \"country\",\n sorter: (a, b) => {\n if (a.country > b.country) return 1;\n if (a.country < b.country) return -1;\n return 0;\n },\n sortDirections: [\"descend\", \"ascend\"],\n showSorterTooltip: false,\n },\n {\n title: intl.formatMessage(messages.tableCountriesColumnUsage),\n dataIndex: \"loads\",\n key: \"loads\",\n sorter: (a, b) => a.loads - b.loads,\n defaultSortOrder: \"descend\",\n sortDirections: [\"descend\", \"ascend\"],\n showSorterTooltip: false,\n },\n ];\n\n let _data = [];\n if (data) {\n _data = Object.keys(data).map((country) => ({\n country,\n loads: data[country],\n }));\n }\n\n if (!data)\n return (\n
\n
\n \n
\n
\n );\n\n return (\n
\n
\n \n );\n}\n\nexport default TopCountries;\n","import React, { memo, useEffect, useState } from \"react\";\nimport { Card, Col, Row, Statistic, Typography } from \"antd\";\nimport { useSelector } from \"react-redux\";\nimport http from \"../../utils/http\";\nimport { getIntl } from \"../../utils/intl\";\nimport BarChart from \"./charts/BarChart\";\nimport LineChart from \"./charts/LineChart\";\nimport TopCountries from \"./tables/TopCountries\";\nimport { messages } from \"./translations\";\n\nconst { Title } = Typography;\n\nconst HubAnalytics = () => {\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const [hubAnalytics, setHubAnalytics] = useState(null);\n\n const intl = getIntl();\n\n const fetchHubAccess = async () => {\n let response = {};\n if (!hubAnalytics?.hubAccessDates) {\n let responseByDate = await http.get(\n `/company/${companyId}/analytics?type=wh_open_rate`\n );\n response = {\n ...response,\n hubAccessDates: responseByDate.data.payload,\n };\n }\n if (!hubAnalytics?.hubAccessCountries) {\n let responseByCountry = await http.get(\n `/company/${companyId}/analytics?type=wh_open_rate_country`\n );\n response = {\n ...response,\n hubAccessCountries: responseByCountry.data.payload,\n };\n }\n setHubAnalytics(response);\n };\n\n useEffect(() => {\n fetchHubAccess();\n }, []);\n\n return (\n
\n \n
\n {intl.formatMessage(messages.pageTitle)}\n \n \n \n \n \n \n \n acc + val, 0)\n : 0\n }\n />\n \n \n acc + val,\n 0\n )\n : 0\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 {/* WAITING FOR DEVICE METRICS */}\n\n {/* \n \n \n \n */}\n \n \n );\n};\n\nexport default memo(HubAnalytics);\n","import { Typography } from \"antd\";\nimport React from \"react\";\n\nconst { Paragraph } = Typography;\n\nfunction PageHeader({ title, subtitle, level, ...props }) {\n return (\n
\n

\n {title}\n {subtitle && {subtitle}}\n

\n
\n );\n}\n\nexport default PageHeader;\n","import { Button, Col, Form, Input, Row, Typography } from \"antd\";\nimport { useForm } from \"antd/lib/form/Form\";\nimport React, { useCallback, useState } from \"react\";\nimport PageHeader from \"../components/PageHeader\";\nimport { InfoCircleOutlined } from \"@ant-design/icons\";\nimport { getIntl } from \"../utils/intl\";\nimport { LogoUpload } from \"./LogoUpload\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport http from \"../utils/http\";\nimport { displayNotification } from \"../components/Notification\";\nimport { configSetter } from \"../redux/actions\";\n\nconst { Title, Paragraph } = Typography;\n\nfunction CompanySetup(props) {\n const intl = getIntl();\n const [form] = useForm();\n const dispatch = useDispatch();\n const [isLoading, setIsLoading] = useState(null);\n\n const companyLogo = useSelector((state) => state.companyConfig.company_logo);\n const name = useSelector((state) => state.companyConfig.name);\n const legalEntity = useSelector((state) => state.companyConfig.legalEntity);\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const superAccount = useSelector(\n (state) => state.companyConfig.super_account,\n );\n\n const [logo, setLogo] = useState(companyLogo);\n\n const logoLabel = intl.formatMessage({\n id: \"WelcomyHubConfig.Label.Logo\",\n defaultMessage: \"Logo hochladen\",\n });\n\n const saveButton = intl.formatMessage({\n id: \"Save\",\n defaultMessage: \"Speichern\",\n });\n\n const title = intl.formatMessage({\n id: \"MyCompany.Configuration.Title\",\n defaultMessage: \"Unternehmensprofil anpassen\",\n });\n\n const formTitle = intl.formatMessage({\n id: \"MyCompany.Configuration.Form.Title\",\n defaultMessage: \"Grundlegende Informationen Ihres Unternehmens\",\n });\n\n const legalNameInput = intl.formatMessage({\n id: \"MyCompany.Configuration.LegalName\",\n defaultMessage: \"Name der juristischen Person\",\n });\n\n const commercialNameInput = intl.formatMessage({\n id: \"MyCompany.Configuration.CommercialName\",\n defaultMessage: \"Handelsüblicher Name\",\n });\n\n const successNotificationTitle = intl.formatMessage({\n id: \"MyCompany.Configuration.Success.Title\",\n defaultMessage: \"Erfolg!\",\n });\n\n const successNotificationBody = intl.formatMessage({\n id: \"MyCompany.Configuration.Success.Body\",\n defaultMessage: \"Unternehmensprofil wurde erfolgreich gespeichert\",\n });\n\n const errorNotificationTitle = intl.formatMessage({\n id: \"MyCompany.Configuration.Error.Title\",\n defaultMessage: \"Unable to save company profile\",\n });\n\n const errorNotificationBody = intl.formatMessage({\n id: \"General.ErrorNotification.Body\",\n });\n\n const handleLogoChange = useCallback((payload) => {\n const { companyLogo } = payload;\n if (companyLogo && companyLogo[0] && companyLogo[0].originFileObj) {\n const logoFile = companyLogo[0].originFileObj;\n setLogo(logoFile);\n }\n }, []);\n\n const saveCompanyConfig = async (name, legalEntity, logo) => {\n let data = new FormData();\n\n data.append(\"name\", name);\n if (legalEntity){\n data.append(\"legal_entity\", legalEntity);\n }\n if (logo) {\n data.append(\"logo\", logo);\n }\n\n try {\n const response = await http.post(`/company/${companyId}`, data);\n return response;\n } catch(error) {\n console.log(error);\n displayNotification(\n \"error\",\n errorNotificationTitle,\n errorNotificationBody\n );\n }\n };\n\n const submit = async ({ companyLogo, legalEntity, commercialName }) => {\n setIsLoading(true);\n if (companyLogo) {\n try {\n const response = await saveCompanyConfig(commercialName, legalEntity, companyLogo[0].originFileObj);\n if (!response){\n setIsLoading(false);\n return;\n }\n if (response.length === 0) throw new Error();\n if (response.status === 200) {\n dispatch(\n configSetter({\n name: commercialName,\n legalEntity,\n company_logo: response.data.payload.logo_url\n })\n );\n displayNotification(\n \"success\",\n successNotificationTitle,\n successNotificationBody\n );\n }\n } catch (error) {\n console.error(\"Error while uploading hub image\", Object.keys(error));\n displayNotification(\n \"error\",\n errorNotificationTitle,\n errorNotificationBody\n );\n }\n } else {\n try {\n const response = await saveCompanyConfig(commercialName, legalEntity);\n if(!response) throw new Error(\"Unable to save company config\");\n if (response.status === 200) {\n dispatch(\n configSetter({\n name: commercialName,\n legalEntity,\n })\n );\n displayNotification(\n \"success\",\n successNotificationTitle,\n successNotificationBody\n );\n }\n else {\n displayNotification(\n \"error\",\n errorNotificationTitle,\n errorNotificationBody\n );\n }\n } catch(error){\n console.log(error);\n }\n }\n setIsLoading(false);\n };\n\n return (\n
\n \n
\n \n
\n \n \n {\n superAccount &&\n ,\n }}\n >\n \n \n }\n \n ,\n }}\n >\n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport default CompanySetup;\n","import React, { useEffect } from \"react\";\nimport { Switch, Route, useRouteMatch } from \"react-router-dom\";\nimport Alerts from \"../pages/Alerts\";\nimport DigitalMenu from \"../pages/DigitalMenu\";\nimport PrintMenu from \"../pages/PrintMenu\";\nimport PageNotFound from \"../pages/PageNotFound\";\nimport { useDispatch, useSelector } from \"react-redux\";\nimport Subscriptions from \"../pages/Subscriptions\";\nimport Impressum from \"../pages/Impressum\";\nimport SubAccounts from \"../pages/SubAccounts\";\nimport { isAllSuperAccount } from \"../utils/envs\";\nimport DataProtection from \"../pages/DataProtection\";\nimport PreviewWrapperHub from \"../pages/WelcomyHub/PreviewWrapperHub\";\nimport PreviewWrapperConfigHub from \"../pages/WelcomyHub/PreviewWrapperConfigHub\";\nimport Workspaces from \"../pages/workspaces\";\nimport UserManagement from \"../pages/UserManagement\";\nimport HubAnalytics from \"../pages/HubAnalytics\";\nimport { getHubConfig } from \"../api/layOutApiService\";\nimport { setHubConfig } from \"../redux/actions\";\nimport CompanySetup from \"../pages/CompanySetup\";\n\nconst MainContent = (props) => {\n const dispatch = useDispatch();\n const vertical_id = useSelector((state) => state.companyConfig.vertical_id);\n const companyId = useSelector((state) => state.companyConfig.company_id);\n const superAccount = useSelector(\n (state) => state.companyConfig.super_account,\n );\n\n const loadHubConfig = async () => {\n const response = await getHubConfig(companyId);\n dispatch(setHubConfig({\n ...response.data.payload,\n }));\n }\n\n useEffect(() => {\n if (companyId) {\n loadHubConfig();\n }\n }, [companyId]);\n\n let { path } = useRouteMatch();\n if (vertical_id) {\n return (\n
\n \n \n \n \n \n \n {(vertical_id === 3 || vertical_id === 4) && (\n \n \n \n \n \n \n \n \n {isAllSuperAccount(superAccount) && (\n \n \n \n )}\n \n )}\n \n \n
\n );\n } else return null;\n};\n\nexport default React.memo(MainContent);\n","import React, { memo, useState } from 'react';\nimport Navbar from './Navbar/Navbar';\nimport MainContent from './MainContent';\nimport { Layout } from 'antd';\n\nconst { Header, Content } = Layout;\nconst HEADER_TOP_DISTANCE = 60;\nconst SCROLL_WRAPPER_ID = \"content-scroll-wrapper\";\n\nconst ScrollListener = (props) => {\n const [isScrollTop, setIsScrollTop] = useState(false);\n\n const handleScroll = (e) => {\n if (e.target.id === SCROLL_WRAPPER_ID) {\n const distanceToTop = e.target.scrollTop;\n const scrolled = distanceToTop > HEADER_TOP_DISTANCE;\n setIsScrollTop(scrolled);\n }\n }\n\n return (\n \n
\n \n
\n \n
\n );\n}\n\nexport default memo(ScrollListener);\n","import amplitude from 'amplitude-js';\n\n\nfunction getCookieDomain(){\n if (window.location.host.indexOf('localhost') >= 0){\n return 'localhost.com';\n }\n return 'welcomyapp.com';\n}\n\n\n/**\n * @type {UserConfig}\n */\nconst pluginConfig = {\n current_lang: 'de',\n autoclear_cookies: true, // default: false\n page_scripts: false, // default: false\n cookie_domain: getCookieDomain(),\n \n // mode: 'opt-in' // default: 'opt-in'; value: 'opt-in' or 'opt-out'\n // delay: 0, // default: 0\n // auto_language: null // default: null; could also be 'browser' or 'document'\n // autorun: true, // default: true\n // force_consent: false, // default: false\n // hide_from_bots: false, // default: false\n // remove_cookie_tables: false // default: false\n // cookie_name: 'cc_cookie', // default: 'cc_cookie'\n // cookie_expiration: 182, // default: 182 (days)\n // cookie_necessary_only_expiration: 182 // default: disabled\n // cookie_domain: location.hostname, // default: current domain\n // cookie_path: '/', // default: root\n // cookie_same_site: 'Lax', // default: 'Lax'\n // use_rfc_cookie: false, // default: false\n // revision: 0, // default: 0\n \n onFirstAction: function (user_preferences, cookie) {\n },\n\n onAccept: function (cookie) {\n // ...\n if (cookie.categories.includes('Statistik')){\n amplitude.getInstance().init(\n '162b1660fde1a440c9382126643e79dd', null, {\n serverZone: 'EU',\n serverZoneBasedApi: true,\n deferInitialization: true,\n cookieExpiration: 7,\n storage: 'cookies',\n trackingOptions: {\n city: false,\n country: true,\n carrier: false,\n device_manufacturer: false,\n device_model: false,\n dma: false,\n ip_address: false,\n language: false,\n os_name: false,\n os_version: false,\n platform: false,\n region: false,\n version_name: false\n }\n });\n amplitude.getInstance().enableTracking();\n }\n else{\n amplitude.setOptOut(true);\n }\n },\n \n onChange: function (cookie, changed_preferences) {\n // ...\n window.CC.accept(cookie.categories);\n if (!cookie.categories.includes('Statistik')){\n amplitude.setOptOut(true);\n }\n },\n \n languages: {\n de: {\n consent_modal: {\n title: 'Cookie-Einwilligung',\n description:\n 'Hallo, diese Website verwendet essentielle Cookies, um ihren ordnungsgemäßen Betrieb zu gewährleisten, und Statistik-Cookies, um zu verstehen, wie Sie mit ihr interagieren. Letztere werden nur nach Zustimmung gesetzt werden. ',\n primary_btn: {\n text: 'ALLE AKZEPTIEREN',\n role: 'accept_all', // 'accept_selected' or 'accept_all'\n },\n secondary_btn: {\n text: 'Ablehnen',\n role: 'accept_necessary', // 'settings' or 'accept_necessary'\n },\n },\n settings_modal: {\n title: 'Cookie Settings',\n save_settings_btn: 'Save settings',\n accept_all_btn: 'Accept all',\n reject_all_btn: 'Reject all',\n close_btn_label: 'Close',\n cookie_table_headers: [\n { col1: 'Name' },\n { col2: 'Domain' },\n { col3: 'Expiration' },\n ],\n blocks: [\n {\n title: 'Cookie usage 📢',\n description:\n 'Wir verwenden Dienste von Drittanbietern, die Informationen im Endgerät eines Seitenbesuchers speichern oder dort abrufen. Anschließend verarbeiten wir die Informationen weiter. Dies alles hilft uns, unsere Website optimal zu gestalten und fortlaufend zu verbessern. Für die Speicherung, den Abruf und die Verarbeitung benötigen wir Ihre Einwilligung. Ihre Einwilligung. Sie können Ihre Einwilligung jederzeit in der Cookie-Einstellung widerrufen. Weitere Informationen finden Sie in unserer privacy policy.',\n },\n {\n title: 'Notwendig',\n description:\n 'Erforderliche Cookies ermöglichen grundlegende Funktionen und sind für die einwandfreie Funktion der Website notwendig. Sie dienen der sicheren und bestimmungsgemäßen Nutzung und sind daher nicht deaktivierbar.',\n toggle: {\n value: 'Notwendig',\n enabled: true,\n readonly: true, // cookie categories with readonly=true are all treated as \"necessary cookies\"\n },\n },\n {\n title: 'Statistik',\n description:\n 'Diese Cookies sammeln Informationen darüber, wie Sie unsere Website verwenden. Sie speichern keine Informationen, die eine persönliche Identifikation des Besuchers erlauben. Die mit Hilfe dieser Cookies gesammelten Informationen sind aggregiert und somit anonym. Sie dienen dazu die Qualität unserer Webseite fortlaufend zu verbessern.',\n toggle: {\n value: 'Statistik', // your cookie category\n enabled: true,\n readonly: false,\n },\n cookie_table: [\n // list of all expected cookies\n {\n col1: '^_amp', // match all cookies starting with \"_ga\"\n col2: 'amplitude.com',\n col3: '7 days',\n is_regex: true,\n },\n ],\n },\n {\n title: 'More information',\n description:\n 'For any queries in relation to our policy on cookies and your choices, please contact us.',\n },\n ],\n },\n },\n },\n };\n \n export default pluginConfig;\n ","import { useEffect } from \"react\";\nimport pluginConfig from './Config';\n\nimport 'vanilla-cookieconsent';\n\n\nconst CookieConsent = () => {\n useEffect(() => {\n /**\n * useEffect is executed twice (React 18+),\n * make sure the plugin is initialized and executed once\n */\n if (!document.getElementById('cc--main')) {\n window.CC = window.initCookieConsent();\n window.CC.run(pluginConfig);\n }\n }, []);\n \n return null;\n};\n\nexport default CookieConsent;\n","import React from \"react\";\n// Main app styles\nimport \"./App.scss\";\n\nimport { createStore } from \"redux\";\nimport { Provider } from \"react-redux\";\n\nimport { Helmet } from \"react-helmet\";\nimport { Layout } from \"antd\";\n\nimport \"vanilla-cookieconsent/dist/cookieconsent.css\";\n\nimport allReducers from \"./redux/reducers\";\n\nimport Auth from \"./components/Auth\";\nimport SideMenu from \"./components/SideMenu\";\nimport LanguagePicker from \"./components/LanguagePicker\";\nimport ScrollListener from \"./components/ScrollListener\";\nimport CookieConsent from \"./pages/Tablet/public/components/Consent/cookieConsent\";\n\nconst { Header, Sider, Content } = Layout;\n\nconst store = createStore(\n allReducers,\n);\n\nfunction App() {\n return (\n
\n \n \n Welcomy\n \n \n \n \n \n \n \n \n\n \n \n \n\n
\n \n \n \n \n \n \n \n \n {/* \n Wrapper for main content.\n This is needed to change the navbar color\n on scroll.\n */}\n \n \n \n \n \n \n
\n \n
\n );\n}\n\nexport default App;\n","// This optional code is used to register a service worker.\n// register() is not called by default.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on subsequent visits to a page, after all the\n// existing tabs open on the page have been closed, since previously cached\n// resources are updated in the background.\n\n// To learn more about the benefits of this model and instructions on how to\n// opt-in, read https://bit.ly/CRA-PWA\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.0/8 are considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport function register(config) {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location.href);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Let's check if a service worker still exists or not.\n checkValidServiceWorker(swUrl, config);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\n );\n });\n } else {\n // Is not localhost. Just register service worker\n registerValidSW(swUrl, config);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl, config) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n if (installingWorker == null) {\n return;\n }\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the updated precached content has been fetched,\n // but the previous service worker will still serve the older\n // content until all client tabs are closed.\n console.log(\n 'New content is available and will be used when all ' +\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\n );\n\n // Execute callback\n if (config && config.onUpdate) {\n config.onUpdate(registration);\n }\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n\n // Execute callback\n if (config && config.onSuccess) {\n config.onSuccess(registration);\n }\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl, config) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl, {\n headers: { 'Service-Worker': 'script' }\n })\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n const contentType = response.headers.get('content-type');\n if (\n response.status === 404 ||\n (contentType != null && contentType.indexOf('javascript') === -1)\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl, config);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","// import './wdyr';\nimport React from 'react';\nimport ReactDOM from 'react-dom';\nimport './index.scss';\nimport 'antd-mobile/dist/antd-mobile.css';\nimport App from './App';\nimport * as serviceWorker from './serviceWorker';\n\nReactDOM.render(\n ,\n document.getElementById('root')\n);\n\n// If you want your app to work offline and load faster, you can change\n// unregister() to register() below. Note this comes with some pitfalls.\n// Learn more about service workers: https://bit.ly/CRA-PWA\nserviceWorker.unregister();\n","export const QR_CODE_EXPORT_SELECTION = 'QR_CODE_EXPORT_SELECTION';\nexport const QR_CODE_EXPORT_TRIGGER = 'QR_CODE_EXPORT_TRIGGER';\nexport const QR_CODE_MODAL_OPEN = 'QR_CODE_MODAL_OPEN';\n\nexport const selectQrExportType = (selectedQrExportType) => {\n return {\n type: QR_CODE_EXPORT_SELECTION,\n payload: selectedQrExportType,\n };\n};\n\nexport const qrCodeExportTrigger = (shouldTrigger) => {\n return {\n type: QR_CODE_EXPORT_TRIGGER,\n payload: shouldTrigger,\n };\n};\n\nexport const qrCodeExportModalOpen = (isOpen) => {\n return {\n type: QR_CODE_MODAL_OPEN,\n payload: isOpen,\n };\n};\n"],"sourceRoot":""}