{"version":3,"sources":["cacheBuster.js","assets/images/branding/sb_logo.png","assets/images/branding/sb_logo-text.png","i18n.js","elements/loader-bars.js","elements/loader.js","utilities/ui.js","utilities/content.js","utilities/formats.js","components/block/block-loggedin.js","components/block/block-category.js","components/block/block-categories-li.js","components/block/block-categories.js","components/block/block-product-group.js","components/block/block-other-languages.js","components/block/block-product-groups.js","components/block/block-authors.js","components/grid/sidebar-left.js","components/content/carousel-banner.js","components/block/block-latest.js","templates/template-sidebar-right.js","components/block/block-newsletter.js","elements/img-cover.js","components/content/carousel-books.js","components/block/block-newest-books.js","components/content/content-text.js","components/block/block-shipping.js","elements/book-price.js","components/block/block-book-actions.js","components/block/block-top10.js","components/block/block-top20.js","components/block/block-google-translate.js","components/block/block-translations.js","components/grid/sidebar-right.js","elements/page-header.js","elements/scroller-top.js","elements/button-back.js","elements/form-input-checkbox-search.js","components/search/search-count-overlay.js","components/search/search-select-segment.js","elements/book-lang.js","components/block/block-book-stock.js","components/search/search-block-topauthor.js","components/search/search-block-title.js","components/search/search-block-toptitle.js","components/search/search-block-topscore.js","components/search/search-overlay-item-top.js","components/feedback/feedback-no-search-results-suggestion.js","components/search/search-intentions.js","components/search/search-overlay-item.js","components/feedback/feedback-no-search-results.js","components/search/search-result-overlay.js","components/search/search-overlay-item-short.js","components/search/search-result-intentions.js","components/search/search-result-spellcheck.js","components/search/search-result-alternatives.js","components/search/search-overlay.js","templates/template.js","components/block/block-cats-popular.js","components/block/block-latest-update.js","elements/ic-preview-cover-pdf.js","components/block/block-book-specs-summary.js","elements/dialog-tooltip.js","components/block/book-author.js","components/block/book-title.js","elements/book-ranking.js","components/block/block-preview-coverback.js","components/block/block-preview-coverfront.js","components/block/block-notifications.js","components/block/block-book.js","components/content/carousel-newsletter.js","elements/button-paging-back.js","elements/button-paging-fback.js","elements/button-paging-forward.js","elements/button-paging-fforward.js","components/blocks/block-pagination-pages.js","components/blocks/block-pagination.js","components/block/block-preview-pdf.js","components/block/block-cover.js","components/block/block-listitem.js","components/blocks/block-views.js","components/blocks/blocks-book-li.js","components/blocks/block-li-sort.js","elements/form-input-checkbox.js","elements/loader-feedback.js","components/blocks/blocks-books.js","components/blocks/blocks-newsletter.js","elements/img-cover-recently.js","components/blocks/blocks-recently-viewed.js","components/block/block-quote.js","components/content/carousel-home.js","utilities/sort.js","elements/button-toggle-expand.js","components/blocks/blocks-top60.js","components/blocks/blocks-top10.js","components/block/block-books-promobook.js","components/content/carousel-promobooks.js","components/block/block-books-promo.js","components/block/block-ankeiler-newsletter.js","components/block/block-newest-books-sb.js","pages/start.js","communicator/fetch.js","communicator/account.js","utilities/validation-rules.js","elements/form-input-text.js","components/form-rows/row-text.js","elements/form-input-select.js","components/forms/form-profile.js","components/forms/form-business.js","components/forms/form-partner.js","components/forms/form-password.js","components/account/account-profile.js","elements/button-dialog.js","components/dialogs/dialog-confirmation.js","components/account/account-open-order.js","communicator/payment.js","elements/form-input-radio.js","elements/form-input-radio-method.js","elements/img-issuer.js","components/forms/form-payment.js","elements/form-input-radio-issuer.js","components/account/account-open-order-payment.js","components/account/account-order-paid.js","components/account/account-orders.js","communicator/login.js","components/forms/form-generate-partnerlink.js","components/account/account-technical.js","components/account/account-commissions-overview-interval-item.js","components/account/account-commissions-overview-interval.js","components/account/account-commissions-payouts.js","components/account/account-commissions-overview-item.js","components/account/account-commissions-overview.js","components/account/account-commissions.js","pages/account.js","pages/author.js","components/block/block-author.js","components/blocks/blocks-authors.js","pages/authors.js","components/block/block-book-categories.js","components/block/block-book-tags.js","components/content/audioplayer.js","components/block/block-preview-audio.js","components/block/block-preview-pdf-extra.js","components/block/block-preview-video.js","elements/social-link.js","components/block/block-social-sharing.js","components/content/share-mastodon.js","templates/template-forms.js","elements/form-input-textarea.js","components/forms/form-sendtofriend.js","components/block/block-book-tools.js","components/block/block-downloads.js","elements/form-text-incomplete.js","components/block/block-review.js","elements/form-input-file.js","components/block/block-image-upload.js","components/forms/form-review.js","elements/form-text-conditional.js","components/block/block-reviews.js","components/block/block-specifications.js","pages/book.js","pages/books-new.js","pages/books-top60.js","pages/category.js","elements/forms/form-feedback-required.js","components/forms/form-register.js","components/block/block-ebook20.js","components/blocks/blocks-ebooks.js","pages/ebooks-all.js","pages/content/events.js","components/blocks/blocks-events.js","components/block/block-categories-previews-books.js","components/block/block-categories-previews-li.js","components/block/block-categories-previews.js","pages/genres.js","pages/content/jobs.js","pages/languages.js","pages/content/link-download.js","pages/content/link-download-doorbreek.js","components/forms/form-login.js","components/forms/form-retrieve-password.js","elements/txt-salutation.js","pages/login.js","pages/newsletter-subscription.js","components/forms/form-newsletters-search.js","components/search/search-result-newsletters.js","pages/newsletters-overview.js","pages/our-publications.js","pages/content/own-book.js","elements/video.js","components/block/block-video.js","components/block/block-view-video.js","components/block/block-view-book-preview.js","communicator/order.js","pages/order/payment-result.js","pages/products.js","pages/register.js","elements/form-input-text-search.js","components/search/search-input.js","pages/content/search.js","components/search/search-result.js","components/search/search-minimum-chars.js","pages/search-results.js","components/cart/cart-empty.js","templates/template-cart-product.js","components/feedback/feedback-orderline-discount.js","components/cart/cart-product.js","components/feedback/feedback-order-delivery.js","pages/cart.js","components/cart/cart-step.js","components/cart/cart-steps.js","components/cart/cart-login.js","components/forms/form-check-email.js","components/forms/form-address.js","components/cart/cart-profile.js","components/cart/cart-payment.js","components/cart/cart-review-product.js","components/cart/cart-review.js","pages/cart-process.js","pages/shoppingcart.js","components/sitemap/sitemap-authors.js","components/sitemap/sitemap-cats.js","components/sitemap/sitemap-pages.js","pages/content/sitemap.js","pages/wishlist.js","pages/content/address.js","pages/content/business.js","components/forms/form-call-me-back.js","pages/content/call-me-back.js","components/form-rows/row-textarea.js","components/forms/form-contact.js","pages/content/contact.js","pages/content/disclaimer.js","components/forms/form-event-couponcheck.js","components/forms/form-event-subscription.js","pages/content/event-subscription.js","pages/content/mission.js","pages/partner.js","pages/content/partners.js","pages/content/partner-agreement-text.js","pages/content/partner-agreement.js","elements/form-input-radio-yesno.js","pages/content/partner-registration.js","elements/form-input-select-book.js","components/form-rows/row-select-book.js","components/forms/form-press.js","pages/content/press.js","pages/content/privacy-policy.js","pages/content/remarks.js","pages/content/terms-conditions.js","components/forms/form-unsubscribe.js","pages/content/unsubscribe.js","pages/content/videos.js","components/block/block-video-filter.js","pages/content/videos-overview.js","pages/content/site-explanation.js","components/redirect_payment.js","pages/error/error404.js","pages/test/test-upload.js","pages/test/test-abort.js","routes.js","components/dialogs/dialog-content.js","components/dialogs/dialog-cookies.js","components/dialogs/dialog-compare-shoppingcarts.js","components/dialogs/dialog-compare-wishlists.js","components/dialogs/dialog-confirmation-wishlist.js","components/dialogs/dialog-error.js","components/dialogs/dialog-feedback-form.js","components/dialogs/dialog-feedback-form-20.js","elements/button-dialog-close.js","components/dialogs/dialog-newsletter.js","components/dialogs/dialog-payment.js","components/dialogs/dialog-notification.js","components/dialogs/dialog-video.js","components/header/branding.js","components/header/navigation-main.js","components/header/navigation-secundary.js","components/header/navigation-sb.js","components/header/navigation-tools.js","components/dialogs/dialog-nav-foldout.js","elements/navigation-toggle-listitem.js","components/header/navigation-toggle.js","components/header/navigation-mobile.js","components/header/search.js","components/grid/header.js","components/footer/navigation.js","components/footer/payments.js","components/footer/disclaimer.js","components/footer/social.js","components/footer/version.js","components/grid/footer.js","app.js","elements/scroll.js","communicator/settings.js","communicator/tools.js","stores/store-general.js","communicator/authors.js","communicator/books.js","communicator/book-lists.js","communicator/categories.js","communicator/catalog.js","communicator/content.js","communicator/forms.js","communicator/products.js","communicator/discounts.js","communicator/search.js","stores/store-ui.js","stores/store-auth.js","stores/store-history.js","stores/store-user.js","communicator/genres.js","stores/store-books.js","communicator/books-all.js","stores/store-books-all.js","stores/store-content.js","stores/store-products.js","communicator/ebooks.js","stores/store-ebooks.js","stores/store-forms.js","communicator/monitoring.js","communicator/orders.js","stores/store-order.js","stores/store-cart.js","stores/store-wishlist.js","stores/store-discounts.js","stores/store-catalog.js","stores/store-catalogs.js","stores/store-shipping.js","stores/store-stock.js","communicator/events.js","stores/store-events.js","stores/store-partners.js","communicator/partners.js","stores/store-search.js","stores/store-visuals.js","stores/store-root.js","serviceWorker.js","index.js"],"names":["global","appVersion","packageJson","version","CacheBuster","props","state","loading","isLatestVersion","refreshCacheAndReload","console","log","caches","keys","then","names","name","delete","window","location","reload","fetch","response","json","meta","latestVersion","versionA","versionB","versionsA","split","versionsB","length","a","Number","shift","b","isNaN","semverGreaterThan","setState","this","children","React","Component","module","exports","backendOpts","loadPath","urlAPI","crossDomain","allowMultiLoading","i18n","use","XHR","init","lng","preload","load","backend","fallbackLng","defaultNS","order","lookupQuerystring","lookupCookie","lookupLocalStorage","interpolation","escapeValue","formatSeparator","react","wait","Bars","width","height","viewBox","xmlns","aria-label","label","colors","y","rx","className","attributeName","begin","dur","values","calcMode","repeatCount","x","defaultProps","color","Loader","handleScroll","pos","scrollTo","top","left","behavior","smoothScrollTo","endX","endY","duration","startX","scrollX","pageXOffset","startY","scrollY","pageYOffset","distanceX","distanceY","startTime","Date","getTime","easeInOutQuart","time","from","distance","timer","setInterval","newX","newY","clearInterval","checkMatchingValues","val1","val2","formatTitle","title","formattedTitle","replace","chars","m","searchChars","value","search","findIndex","item","toLowerCase","revertHTML","str","newStr","undefined","formatPrice","price","Math","round","toFixed","displayPrice","parseFloat","toString","capitalizeFirstChar","str2","charAt","toUpperCase","slice","capitalizeTitle","test","numUpper","strLength","removeSpaces","trim","replaceChars","BlockLoggedIn","inject","observer","componentDidMount","firstname","storeUser","user_data","is_loggedin","storeOrder","getAccountOrders","user_id","profile","utilities","lastname","componentDidUpdate","prevProps","handleClick","storeUi","setActiveTab","history","push","handleAdmin","url","urlMAINTENANCE","assign","process","storeAuth","stores","hasOpenOrder","orderList","orderHistoryList","map","i","order_status","order_paid","onClick","user","is_admin","withRouter","BlockCategory","async","type","setActiveSubCategory","category","storeBooks","getSubCategories","subcatList","subcats_list","subcats","cat_active","storeGeneral","shop","subCat","subcategory","returnMainCategory","mainCats","mainCatId","parseInt","main_cat","getMainCategory","mainCat","handleOnClickSubCat","e","subcat_name","storeCatalogs","setActiveProductGroup","setActiveSubGroup","setNavMobile","setPageView","handleOnClickSubGroup","setActiveCategory","storeProducts","getProductSubGroups","category_name","subcatsList","Fragment","subcat","getActiveSubCategory","dangerouslySetInnerHTML","__html","display_value","productSubGroups","withTranslation","CategoriesLi","handleOnClickCat","cat_name","ui","setFreezeScrolling","setFreezePos","id","setActiveToggleNav","active_category","active_subcategory","setActiveSubCats","subs_active","htmlEntities","match","active_subcats","cat","BlockCategories","categoriesList","returnCategories","categories","categoriesListSB","getCategories","categoriesListALL","clean","t","key","PureComponent","BlockProductGroup","active_group","product_group_name","active_product_group","product_group","subgroupsList","subgroups_list","handleOnClickArrow","preventDefault","is_active","subgroup_name","subgroup","active_subgroup","BlockOtherLanguages","handleOnClickLanguage","lang","setActiveLanguage","abbr","idx","list_languages","active_language","getBooksForLanguage","query_value","page_view","getBookCountForLanguage","activeClass","show_on_sb","show_on_all","BlockProductGroups","handleOnClickGroup","product","media_list","app_interface","AuthorName","author","BlockAuthors","handleOnClick","setActiveMainNav","setCurrentAuthor","current_author","authorsList","is_sb","SidebarLeft","expanded","active_togglenav","template","CarouselBanner","getBanner","play","reactSwiper","swiper","autoplay","start","stop","sku","setCurrentBook","returnBookDetailsBySku","book","content","settings_list","seoTitles","banner","bookSlides","text","text1","img","text2","ref","c","swiperOptions","slidesPerView","initialSlide","carousel_home","delay","disableOnInteraction","loop","speed","options","slide","src","alt","BlockLatest","TemplateSidebarRight","class_modifier","block_title","block_intro","BlockNewsletter","getNewsletters","newsletters","latest_newsletter","filter","newsletter","tag","tagLatestNewsletter","latest","view","document","body","classList","add","openDialogNewsletter","latestNewsletter","url_tag","has_php","has_pdf","isIOS","href","target","to","ImgCover","image","current","urlPublic","dir_fallback","not_available","handleError","ext","aspectRatio","aspect","onError","soldout","CarouselBooks","handleAddToCart","stopPropagation","addToCart","openDialog","slideNext","goNext","slidePrev","goPrev","checkSliderPos","classPrevBtn","isEnd","classNextBtn","isBeginning","on","slideChangeTransitionEnd","bookList","BlockNewestBooks","bookList_newest","ContentText","page","getContentText","content_text","setContentComponent","dialog","openDialogContent","subheader","paragraph","dialog_position","dialog_linktext","BlockShipping","openTC","BookPrice","priceDecimals","booksList","price_incl","priceInt","floor","decimalPart","BlockBookActions","handleAddToWishlist","storeWishlist","addToWishlist","openDialogWishList","handleRemoveFromWishlist","removeFromWishlist","handleMoveToCart","storeStock","current_book","class_display","display","display_wishlist","indexOf","checkStockAvailability","checkOnWishlist","BlockTop10","bookList_top10","getTop10NUR","result","data","nur","getBooksTop10","return_data","redirect","params","availability","BlockTop20","bookList_top20","BlockGoogleTranslate","setupLanguageChangeObserver","MutationObserver","mutations","forEach","mutation","widgetContainer","querySelector","observe","attributes","childList","subtree","script","createElement","appendChild","googleTranslateElementInit","google","translate","TranslateElement","pageLanguage","includedLanguages","layout","InlineLayout","SIMPLE","autoDisplay","translateDropdown","addEventListener","BlockTranslations","SidebarRight","list","getSettings","header","headerCustom","textCustom","personalized","from_person","subtitle","classsName","ScrollerTop","is_visible","scrollComponent","toggleVisibility","smoothscroll","polyfill","class_visible","scrollToTop","ButtonBack","scrollBack","checkShop","goBack","setFreezePaging","pos_top","height_header","style","CheckboxSearch","formControl","checked","isSelected","onChange","onCheckboxChange","SearchCountOverlay","checkFeature","searchShop","search_count","setSearchFeedback","searchTerm","search_count_own","search_count_sb","search_count_all","SearchSelectSegment","searchSegment","handleCheckboxChange2","option1","option2","searchClass1","searchClass2","formControls","selected","searchClass","handleCheckboxChange","handleSelectSegmentChange","path","queryString","parse","setShop","setActiveShop","setSearchShop","setSearchSegment","setCountTotal","search_overlay","toggle_nav","section","search_value","displayValue","Object","BookLang","BlockBookStock","stock_code","avail","getFeedbackStock","feedbackStock","stock_translation","SearchBlockTopAuthor","searchValue","topItem","hasTopItem","bestMatch","search_results_simple_all","search_results_simple_sb","getAuthor","searchTopItemTitleSku","topItemTitle","topItemTitleSku","minLength","pathname","setSearchOverlay","storeVisuals","elevatedHeader","author_firstname","author_prefix","author_lastname","prefix","data-content","getCoverTagBySku","constructAuthor","SearchBlockTitle","storeSearch","getSearchTitle","setSearchResultsTitle","getElevatedHeader","getElevatedSku","stock","SearchBlockTopTitle","items","SearchBlockTopScore","SearchOverlayItemTop","convertString","startsWith","endsWith","includes","searchTopItemTitle","getSearchResultsTitle","toggle","score","itemsAll","itemsSB","itemAll","itemSB","FeedbackNoSearchResultsSuggestion","searchIntention","setSearchValue","search_intentions","term","intention","txt","handleChangeSegment","search_term","altShop","getSearchIntentions","setSearchInputFocus","saveSearchQuery","active_search_segment","str_search","SearchOverlayItem","checkImageCoverTags","FeedbackNoSearchResults","hasAlternative","arr","numFound","feedbackShop","fb","SearchResultOverlay","searchInput","searchInputFocus","count","setOverlayRef","node","overlayRef","setSearchOverlayRef","onSubmit","handleNav","results","shopAlternative","skuAlternative","search_results_simple_own","SearchOverlayItemShort","intentions","getShopForSku","SearchResultIntentions","SearchResultSpellcheck","spellcheck","word","SearchResultAlternatives","bemClass","SearchOverlay","search_input_focus","setLayout","searchTopItemScore","suggestions","suggestion","Template","searchString","mailing","wk","week","constructDir","wk_dir","closeDialogNewsletter","tab","noScroll","changeFavIcon","link","rel","head","active_newsletter","dir","position","isSticky","setNavTab","nav_name","main_nav","setActiveSubNav","sub_nav","icon","reset","useScroll","freezeScrolling","scrollPos","sticky","class_feature","class_page","property","marginTop","rdd","inputRef","search_inputRef","isBrowser","templateView","BlockCatsPopular","getCategoriesPopular","catsPopular","listCategoriesPopular","handleGoto","backgroundImage","class","BlockLatestUpdate","lastDate","moment","updateDate","format","date","IconPreviewCoverPdf","BlockBookSpecsSummary","viewTab","pages","release_date","nrReviews","DialogTooltip","getTooltip","tooltip","visible","composeTip","delivery","data-tip","effect","html","border","borderColor","BookAuthor","is_author_page","returnBookCountForAuthorSimple","getBookCountForAuthor","handleOnClickAuthor","author_id","getBooksForAuthor","pushHistory","checkCurrentAuthor","authorPage","str_conn","BookTitle","constructTitle","collectionName","collectionPart","versionTag","collection_name","collection_part","version_tag","BookRanking","ranking","findRanking","has_ranking","bookList_top60","obj","BlockPreviewCoverBack","checkCovers","hasCoverPng","hasCoverJpg","checkFile","returnPng","returnJpg","coverDir","open","BlockPreviewCoverFront","BlockNotifications","Array","isArray","notifications","notification","reason","BlockBook","hasNotification","storeCatalog","getNotifications","getProduct","reviewsList","has_cover_pdf","getBookDetailsBySku","handleOnClickReplacement","count2","has_details","checkShopForSku","media","author2_lastname","author2_firstname","descr","descrShort","substring","lastStr","pop","alternative","author2_prefix","sorting","description","short_description","addEllipsis","CarouselNewsletter","size","setOptions","slideTo","active_slide","autoHeight","onInitSwiper","event","ButtonPagingBack","pagingBack","btnClass","setPage","rangeFrom","rangeTo","active","ButtonPagingFBack","pagingFBack","added","displayed","total","count_total","inview","ceil","ButtonPagingForward","prevState","pagingForward","ButtonPagingFForward","pagingFForward","BlockPaginationPages","gotoFPrev","pageRangeDisplayed","setRange","gotoFNext","BlockPagination","setInView","nr","setView","actual","views","BlockPreviewPdf","setTools","componentWillUnmount","controller","query","cancel","handleLinkPdf","hasPdf","AbortController","signal","q","checkFileWithAbort","labelTxt","BlockCover","aspectClass","actions","BlockListitem","BlockViews","book_sku","renderView","BlocksBookLi","skuSoonAvailable","LiSort","sort","sorting_dir","prev_sort","active_class","sort_class","handleSort","Checkbox","required","LoaderFeedback","feedback_loader","BlocksBooks","freezePaging","blockCat","stockPriority","handleBlocksNav","removeSort","setStockPriority","priority","stock_priority","active_category_name","returnBookCountForCategorySimple","getBooksForCategoryWithAbort","setBookListCategory","getBreadcrumbs","checkShopForSubCategory","activeCategory","getBookCountForSubCategory","setActiveCount","getBooksForSubCategoryWithAbort","setBookListSubCategory","getSearchResults","getSearchResultsSB","timeframe","getBooksNew","getBooks","getProductsForCategory","getProductsForSubGroup","removeDuplicates","arr_list","arr_sku","list_filtered","storeBooksAll","default_view","touched","valid","active_genre","connCategoriesGenresList","conn","genre_id","blockview","blockTitle","blockSubTitle","bookList_all","authorBooksList","sb_edition","bookList_category","checkIfInGenre","bookList_language","bookList_new","newsletter_tips","list_products","bookList_sb","search_results_own","search_results_sb","search_results_all","bookList_subcat","Li","active_category_display_value","cats_main","active_subcategory_display_value","active_subcategory_name","count_total_lang","getActiveCount","BlocksNewsletter","toggleNewsletterView","view_list","handleViewNav","ImgCoverRecently","checkMediaType","arrTypes","storeHistory","arrExceptions","BlocksRecentlyViewed","listRecentlyViewed","anonymous","BlockQuote","quote","quoteClass","bg","isbn","CarouselHome","classPauseBtn","breakpoints","350","spaceBetween","540","896","1050","1250","4000","compareValues","hasOwnProperty","varA","varB","comparison","ButtonToggleExpand","foldout","expandBlocks","txt_up","amount","txt_down","BlocksTop60","getWeekTop60","weeknr","getBooksTop60","book_list","book_list2","setFoldout","top60","class_foldout","items_inview","BlockTop10Foldout","blockRef","offsetTop","top10","createRef","isAutofill","books","viewAll","BlockTop10Expanded","cardRef","has_excel","BlocksTop10","getTop10s","sections","sect","hasExcel","view_section","viewAllCategory","getBooksForCategory","BlockBooksPromoBook","getBookBySku","CarouselPromoBooks","promoBooks","BlockBooksPromo","storeContent","getPromoBooks","sku1","sku2","sku3","BlockAnkeilerNewsletter","BlockNewestBooksSB","block_subtitle","Start","activeShop","setUseCase","setPartnerCode","redirectParams","getCarousel","goPause","setCarousel","goPlay","redirectISBN","redirectPayment","id_quote","pc","ISBN","setAffiliateId","PC","guid","getQuote","fallback","sbFetch","endPoint","method","urlEndPoint","headers","Headers","JSON","stringify","responseJson","arrData","message","authFetch","Authorization","abortFetch","promise","Promise","resolve","data2","abort","addUser","form","postData","email","pw","password","subscription","has_subscription","country","country_code","phonenr","apifetch","addUserFromOrder","addAnonymousUser","checkPw","editUser","form_data","editUserProfile","editBusinessProfile","urlEndpoint","retrievePassword","sms","sms_count","apiStr","getCommissionOrders","getCommissionPayouts","checkEmailExists","checkSubscription","addUserFromPartnerForm","error","editUserFromPartnerForm","retrieveOrderId","saveWishList","wishlist","retrieveWishList","saveShoppingCart","order_id","cart","retrieveShoppingCart","deleteShoppingCart","unSubscribe","sendEmailUnSubscribe","getReviewerData","refreshUserData","retrieveOrderItems","minLengthValidator","maxLengthValidator","maxLength","requiredValidator","integerValidator","isInteger","onlyNumbersValidator","phoneNumberValidator","captchaValidator","days","today","day","basicEmailValidator","String","emailValidator","noForbiddenCharactersValidator","validate","rules","msg","isValid","msgError","rule","TextInput","formClass","readonly","secret","onPaste","checkPaste","disable","readOnly","onKeyDown","keyCode","checkEnter","showSecret","RowText","validateRowOnMount","classError","textinput","validationRules","updatedControls","updatedFormElement","handleChange","action","validated","validationMsg","onValidate","handleBlur","onBlur","objRules","placeholder","Select","defaultValue","option","FormProfile","countriesList","getCountries","validateForm","loggedin","updateFormAfterLogin","validateRow","order_data","client_profile","handleDropdown","countryCode","notificationCountry","country_select","clearFormFeedback","storeForms","emailConnected","syncEmail","emailAvailable","emailValue","checkEmail","formIsValid","error_email","error_email_empty","handleFormChange","isRequired","isEmail","isPhoneNumber","address","housenr","client_id","addition","zipcode","city","val","trimEnd","RegExp","TextCheckbox","openPS","syncedEmail","valueSelected","option_subscription","FormBusiness","VATcountry","is_business","showCheckVAT","code","eu","company","business","nrKvK","nrVAT","VATcheck","VATfeedback","VATdata","VATerror","VATvalid","use_case","checkVATNumber","vat_country","idx_vat","country_vat","checkVATNummer","FormPartner","website","partner_data","partner","bank_account","account_holder","account_city","FormPassword","pw_reset","password_current","is_secret","validInit","checkPasswords","password2","propsinitPassword","initPassword","checkPasswordCurrent","user_email","checkPassword","matchingPw","error_pw","inputIdentifier","checkIfPwChangeRequired","pw_current","check_pw_current","pw1","pw2","AccountProfile","form_feedback","checkFormTotal","submitFormProfile","changeUserData","setDataProfile","setDataBusiness","btn_class","is_partner","partner_code","success","ButtonDialog","onAction","caption","DialogConfirmation","escFunction","removeEventListener","onClose","show","buttons","button","ContentDialog","OpenOrderLine","getISBN","getBookISBN","AccountOpenOrder","processOpenOrder","total_row","order_line","book_id","costs","discount","setUseCaseOrder","setOrderToProcess","setOrderToProcessKey","billing_country_code","formatCosts","calculateRowPrice","calcShippingCosts","calcTotalCosts","isShippingCost","isDialogOpen","handleClose","removeOrder","openDialogPaymentInfo","billing_address","isNL","isBE","order_total_incl","getOrderLinesData","open_order_data","returnBookDetails","order_date","order_onaccount","order_fulfilled","order_banktransfer","getPaymentProviders","getPaymentIssuers","handlePaymentProcess","order_guid","payment_data","payment_method","payment_issuer","handleBankTransfer","getOrderStatus","getPaymentStatus","orderId","Radio","direction","defaultChecked","RadioMethod","ImgIssuer","errored","FormPayment","filterOptionsPaymentMethod","payment_providers","provider","splice","setPaymentData","setOrderId","order_to_process","payment_method_id","AccountOpenOrderPayment","getOrderData","startPayment","payment_id","issuer_code","billing_housenr","billing_addition","billing_zipcode","billing_city","completePayment","deleteShoppingCartFromDB","deleteShoppingCartFromLS","scrollToBtn","refActions","scrollIntoView","block","payment_window","payment","onScrollToBtn","PaidOrderLine","AccountOrderPaid","getLinkTrackTrace","tt","delivery_country_code","delivery_zipcode","viewOrderPaid","tracktrace","arr_tracktrace","AccountOrders","setAccountView","orderList_paid","orderList_open","view_account","checkLogin","FormGeneratePartnerLink","generatePartnerLink","link_sb","AccountTechnical","baseUrlCovers","baseExt","getSbPublications","errorPartnerCode","openDialogCode","alert","url_shop","openDialogCodeLogo","urlAPP","FacebookIcon","LinkedinIcon","TwitterIcon","WhatsappIcon","TelegramIcon","AccountCommissionsOverviewIntervalItem","invoiceId","orderItem","id_invoice","getDataInvoice","partner_perc_sb_current","partner_perc_3rd_current","getPercFee","percFee","item_discount","showIntervalData","showInterval","commissions","vat_nr","item_description","item_amount","order_total","commissionOrderExclVat","order_vat","commissionPartnerInclVat","commissionPartnerExclVat","AccountCommissionsOverviewInterval","getCommissions","settledDate","payout","settled_date","startDatePayout","subtract","endDatePayout","commissionsInterval","commission","isBetween","AccountCommissionsPayouts","getPayouts","commission_payouts","payout_date","payoutsTotalInclVat","AccountCommissionsOverviewItem","storePartners","commissionsOpen","AccountCommissionsOverview","lastPayout","orderDate","isAfter","setCommissionsOpen","commissionTotalExclVat","commissionTotalVatLow","commissionTotalVatHigh","commissionTotalInclVat","AccountCommissions","getPartnerFees","commission_current","commission_3party_current","commission_3party","AccountTab","Account","handleContentTab","active_tab","Author","profile_picture","authorName","BlocksAuthors","Authors","BlockBookCategories","has_cats","getBookCategories","cats","entries","excluded","is_main_cat","BlockBookTags","getBookTags","tags","AudioPlayer","audioRef","pause","playing","currentTime","audiosrc","controls","filename","setAudio","BlockPreviewAudio","startAudio","stopAudio","preview_audio","preview_data","preview","BlockPreviewPdfExtra","pdfs","checkPdfExtra","pdf","labelText","BlockPreviewVideo","startVideo","stopVideo","preview_video","SocialLink","medium","handleSocialLink","BlockSocialSharing","share_window","mastodon_url","encodeURIComponent","direct_url","url_newsletter","reference","short_url","handleSocialTooltip","social","onMouseEnter","onMouseLeave","FacebookShareButton","LinkedinShareButton","summary","TwitterShareButton","via","hashtags","WhatsappShareButton","TelegramShareButton","TemplateForms","classFeedback","msg_success","error_code","TextArea","FormSendToFriend","addRelation","relation","concat","relations","handleChangeRelation","allControls","sendSendToFriendForm","sendFormSendToFriend","clearSendToFriendForm","el","updatedFormEl","captcha","passCaptcha","BlockBookTools","handleLinkDownloads","viewDownloads","handleLinkAudio","audio_view","form_view","video_view","play_audio","play_video","handleLinkVideo","handleLinkSocial","setDefaultTooltip","social_tooltip","onMouseEnterSocial","social_links","has_downloads","has_audio","has_video","getBookDownloads","list_downloads","getPreview","BlockDownloads","downloads","download","FormTextIncomplete","BlockReview","getReviewer","reviewer","convertUrl","review","convertPreviewData","show_firstname","show_lastname","show_profession","show_website","show_profile","review_title","source","FormInputFile","files","allFiles","file","reader","FileReader","readAsDataURL","onload","fileInfo","base64","multiple","onDone","handleReset","refs","file_ref","BlockImageUpload","getFiles","setImageUpload","resetFile","ContentPreview","FormReview","calcRemaining","maxLengthReview","upload_file","sendReviewForm","account_id","addReview","sendFormReview","openDialogPreview","maxlength","str_profile","str_review","has_reviews","max","remaining","FormTextConditional","BlockReviews","BookDimensions","setSizes","thickness","setTitle","setDimensions","dimensions","BlockSpecifications","weight","BookTab","gotoDownloads","downloadsRef","active_view","Book","searching","checkRedirectISBN","redirectSku","setAffiliate","getReviews","setCategory","addToRecentlyViewed","handleOnClickMore","handleViewTab","handleViewDownloads","scroll","formRef","onClickMore","BooksNew","resetView","getBookCountForBooksNew","BooksTop60","Category","getSearchViewPos","getSearchViewPage","checkShopForCategory","setActiveCategoryDisplayValue","getCategoryDetails","cat_details","subcategory_name","cat_id","cat_main","mainCategory","getBooksForSubCategory","cats_length","setSearchViewPos","setSearchViewPage","FormFeedbackRequired","CheckLabel","openPP","FormRegister","emailAvailable2","email2","matchingEmail","error_email_match","error_pw_match","emailValue2","error_firstname","error_email2","registerUser","onNext","noForbiddenCharacters","want_newsletter","show_subscription","BlockEBook","ebook","has_paper_version","isSupplement","getEBookDetails","storeEBooks","ebook_sku","handleToLogin","handleDownload","url_download","cover","language","txtDescription","txtRemark","txtSupplement","BlocksEBooks","listBooks","eBooksList","getEBooks","scrollToComp","refScroll","EBooksAll","Events","CategoriesPreviewsBooks","catName","returnBooksForCategory","CategoriesPreviewsLi","BlockCategoriesPreviews","Genres","Jobs","Languages","LinkDownload","LinkDownloadDoorbreek","FormLogin","rememberEmail","loginUser","login","setLoginState","setFormFeedback","openDialogFeedbackForm","setClientId","setUserData","setAuth","setOrderProfileFromUser","getUserDiscounts","setFeatureAll","retrieveWishlistFromDB","storeCart","FormRetrievePassword","Salutation","Login","setReturnState","toggleSection","onNextAction","toggleRetrievePassword","retrieve","return_state","NewsletterSubscription","handleRoute","FormNewslettersSearch","searchNewsletters","sarchTerm","SearchResultNewsletters","clearResults","searchResult","NewslettersOverview","setActiveNewsletter","getSearchParams","has_html","convertWeek","weekday","url_dialog","handleClickFromSearch","handleClickOutside","getSearchResultsNewsletter","neswletter","newsletter_list","has_file","TabCompany","getBookCountForBooksSB","OurPublications","getBooksWithAbort","setBookListSb","OwnBook","openDialogSpecs","Video","player","subscribeToStateChange","handleStateChange","current_state","seek","active_video","active_video_location","isDialogVideoOpen","active_video_playing","setActiveVideo","setActiveVideoLocation","paused","setActiveVideoPlaying","textTracks","mode","active_video_cc","handleVideoState","handleCC","loc_cc","poster","video","kind","cc_file","srcLang","default","autoHide","handleVideoCC","cc","setVideoPlaying","childrenWithProps","Children","child","index","cloneElement","has_cc_file","BlockVideo","handleClickEnlargeVideo","handleVideoPlaying","isPlaying","setDialogVideoOpen","openDialogVideo","subtitles","BlockViewVideo","idxPreviewVideo","getVideoById","BlockViewBookPreview","createNewOrder","handleOrderItem","addOrderLine","editOrderLine","setOrderStatus","saveOrderDataProfile","getOrderItemsData","setOrderRemark","remark","activatePCUse","getOrderId","checkDiscountsOverruled","checkShippingCostsOverruled","checkNoShippingOrder","checkShippingCostsCustom","getCustomShippingCosts","getOrderAvailability","PaymentResult","userId","payment_status","total_costs","clearAllShoppingCarts","continueShopping","deleteUseCaseFromLS","setCartView","gotoOrders","resetOrder","gotoPayment","preview_pdf","getUseCaseFromLS","Products","parentgroup","group","checkMainGroup","getProductCountForCategory","getMainGroup","getProductCountForSubGroup","handleType","audio","Register","TextInputSearch","onFocus","autocomplete","SearchInput","handleSuggestion","handleInput","handleOnEnter","handleIfFocus","search_overlayRef","contains","wrapperRef","innerHTML","handleOnFocus","focus","setInputRef","setSearchInputRef","handleTimeOut","clearTimeout","setTimeout","value2","getSearchCountSB","getSearchCount","getSearchResultsSimpleWithAbort","setSearchResultsSimple","handleClear","search_input","removeOnBlur","isMobile","SearchAdvanced","SearchResult","strSearch","search_results_simple","SearchMinimumChars","SearchResults","getSearchResultsInit","feedbackChange","getSearchResultsSimple","updateSearch","grid","CartEmpty","deleteOrderLineShipping","TemplateCartProduct","closeDialogDelete","editable","openDialogDelete","FeedbackOrderLineDiscount","discount_perc","discount_overruled","discountPerc","CartProduct","calculateShipping","saveShoppingCartToDB","reloadOrderLines","oldAmount","calculateDiscount","storeShipping","setDiscountOverruled","unit_price","calculatedDiscount","saveRowPrice","storeDiscounts","calcItemDiscount","publicationSB","status","FeedbackOrderDelivery","RemarkShippingCosts","discountApplied","discount_applied","client_settings","is_reseller","order_settings","discounts_overruled","shopping_cart","cart_total_incl","Cart","payment2_status","clearCartAfterPayment","setCartChanges","checkFeedbackDelivery","gotoCart","returnOrderId","order_availability","editOrder","checkOrderLineShipping","addOrderLineShipping","calculateTotal","setOrderRemarkLS","order_remark","resetOrderData","has_delivery_address","delivery_address","cartTotalIncl","shippingCosts","calculateTotalOrder","calculateOrderVAT","no_shipping_costs","CartProcessStep","order_interface","cart_view","isActive","step","CartProcessSteps","steps","active_step","CartLogin","pw_card","FormCheckEmail","testValid","formView","show_feedback","showFormProfile","setDirectLogin","runInAction","editOrderItems","login_direct","FormAddress","delivery_name","delivery_company","CartProfile","copyDeliveryAddresData","save_to_account","registerClientFromOrder","registerAnonymousClient","profile_data","telephone","returnData","compareWishLists","concatLSandDB","toggleAddress","toggleAddressData","setSettingDeliveryAddress","address_card","resetDeliveryAddresData","valid_address","diff_address","checkForm","toggleBusinessData","setSettingBusiness","business_card","valid_profile","changeUserProfile","handleFormChangeAddress","setDataDeliveryAddress","valid_pw","handleFormChangeBusiness","changeBusinessProfile","handleFormChangePassword","handleFormChangeCheck","checkEmailProfile","show_forms","want_account","current_email","CartPayment","sendConfirmationOrder","redirect_complete","btn_submit","CartReviewProduct","product_total_incl","CartReview","isLoggedin","getShippingCountry","sectionProfile","sectionAddress","sectionDeliveryAddress","Key","company_profile","CartProcess","setTemplateView","cartView","ShoppingCart","setActiveNav","orderStatus","isDialogCompareCartsOpen","constructShoppingCart","totalCart","syncShoppingCartWithOrderlines","cartChanges","SitemapAuthors","handleOnClickAlphabet","letter","authors_sb","SitemapCats","SitemapPages","Sitemap","WishList","Address","Business","FormCallMeBack","sendContactForm","sendFormCallMeBack","question","CallMeBack","RowTextArea","textarea","str_textarea","FormContact","initForm","sendFormContact","afterSubmit","formIsSubmitted","Contact","Disclaimer","FormEventCouponCheck","validCode","checkCouponCode","handleSubmit","coupon","FormEventSubscription","sendEventForm","sendFormEvent","eventRef","middlename","guestFirstname","guestMiddlename","guestLastname","guestEmail","textAfterRegistration","EventSubscription","storeEvents","getEvent","handleGotoTicket","handleGotoRegister","show_code_check","scrollToCheck","handleGotoForm","show_form","scrollToForm","blockRef2","show_orm","organisation","logo1","logo2","couponCode","explanationForm","Mission","Partner","partner_status","Partners","PartnerAgreementText","PartnerAgreement","RadioYesNo","displayValueSingle","PartnerRegistration","checkFormRegistrationIsValid","setPartnerDataExtra","setPartnerData","partnerDataExtra","motivation","url_bookpage","submitFormPartner","feedback","recalc","openPartnerAgreement","url_bookpage_yesno","subscribe","no_spam","agreement","str_motivation","inputsValid","motivationValid","urlValid","checksValid","verifyEmail","option_email","SelectBook","str1","str3","constructOption","RowSelectBook","select","FormPress","handleSelected","sendRequestForm","book_select","sendFormPress","settings","sbEmailInfo","books_sb","Press","expandList","selectBook","book_selected","PrivacyPolicy","Remarks","TermsConditions","FormUnsubscribe","unsubscribeUser","Unsubscribe","setEmail","urlString","Videos","getVideos","videos","BlockVideoFilter","getVideoLabels","getVideosByLabel","removeFilter","VideosOverview","video_focus","getVideoByReference","SiteExplanation","RedirectPayment","componentWillMount","loc","Error404","TestUpload","genre_name","getUploadParams","FormData","append","onChangeStatus","f","remove","accept","TestAbort","setStatus","zIndex","margin","Routes","exact","component","render","routeProps","EBooks","DialogContent","dialogClass","overlay","DialogCookies","setCookies","cookie_duration","hideDialogCookies","DialogCompareShoppingCarts","cart_compare","cart_db","DialogCompareWishLists","DialogConfirmationWishList","fade","DialogError","DialogFeedbackForm","DialogFeedbackForm20","ButtonDialogClose","btnText","DialogNewsletter","iframe","urlNewsletterOpen","onTranslate","DialogPayment","DialogNotification","DialogVideo","Branding","logo_img","logo_txt","NavigationMain","handleNavClick","dd_active","nav_id","active_nav","nav_item","NavigationSecundary","active_subnav","NavigationSb","NavigationTools","getCart","handleLogOut","resetUserData","setLogoutState","retrieveShoppingCartFromLS","resetOrderSettings","retrieveWishlist","handleNavMobile","calculateTotalCartItemsUser","calculateTotalCartItemsAnonymous","DialogNavFoldout","showTooltip","showTip","mobile","textLong","NavigationToggleListitem","hideTooltip","tooltipTitle","tooltipText","handleTooltip","onMouseOver","onMouseOut","NavigationToggle","getActiveShop","NavigationMobile","handleToggleClick","nav_mobile","Search","Header","class_header","setHeightHeader","access_level","sizeMe","monitorHeight","NavigationFooter","handleSubNavClick","FooterPayments","FooterSocial","brand","Version","year","getFullYear","Footer","setHeightFooter","footerHeight","DEFAULT_CONFIG","trackingId","debug","gaOptions","cookieDomain","App","initReactGA","ReactGA","initialize","configs","pageview","reactGaInitialised","closeDialog","clearLocalStorage","localStorage","removeItem","setWrapperRef","cookie_visible","cookies","getUserDataFromLS","returnId","loader_colors","marginBottom","lastAddedBook","isDialogWishListOpen","closeDialogWishList","isDialogFade","isDialogDeleteOpen","active_product","submitDeleteOrderLine","calculateTotalCart","closePaymentWindow","error_window","closeErrorWindow","isDialogNewsletterOpen","isDialogContentOpen","closeDialogContent","content_component_title","content_component","closeDialogVideo","isDialogNotificationOpen","closeDialogNotifications","isDialogCompareWishlistsOpen","closeDialogCompareCarts","cart_current","shopping_cart_db","isDialogFeedbackFormOpen","dialog_type","closeDialogFeedbackForm","loader","withCookies","ScrollToTop","getShippingCosts","getShippingCostsV2","StoreGeneral","getSearchShop","tools","translateCountries","setting","SettingName","SettingValue","setSocialLinks","getItem","setItem","segment","countries","registerLocale","require","getName","decorate","observable","normalize","getBookCountForAuthorSimple","getBookDetails","getBookCountForCategory","getBooksForSubCategoryAll","getBooksRelated","getConnCategoriesGenres","collection","getPreviewVideo","translateNURtoValue","checkIfNURCategory","book_data","getNewsletterTips","newsletter_id","getContentBlocks","copyCover","getShortUrl","urlShortener","group_name","product_cat","sku_soon","formats","StoreUi","storeRoot","cookie_alert","use_case_order","height_footer","active_sbnav","active_nur","featureAll","carousel_home_class","features_list","searchFeedback","newsletter_active","userDiscounts","search_results","search_results_alternative","search_results_newsletter","search_value_saved","search_count_alternative","account_nav","showExplanation","openDialogNotifications","setActiveVideoDialog","authors","getLanguages","getFeatures","checkNotifications","getTooltips","languages","catalog","hasFeature","accessLevel","feature","cat_nur","cookies_alert","bool","nav","bankTrans","discounts","startLoader","vat_validation","stopLoader","skuSoon","succes","comp","num","account","book_title","form_values","from_firstname","from_lastname","from_email","forms","to_email","requested_sku","requested_title","new_rel","to_relations","booklists","products","listAuthors","value1ToMatch","value2ToMatch","listCategories","valueToMatch","search_inputfieldRef","checkCookies","copyCoverForSharing","getProductDiscount","resetSearchOverlayValues","setActiveGenre","setActiveSearchSegment","setActiveVideoCC","setShowSubCats","setShowSubGroups","StoreAuth","admin","refreshAuth","StoreHistory","store","save","checkOnRecentlyViewed","retrieveRecentlyViewed","bind","mobx","saveToLS","itemViewed","unshift","saveRecentlyViewedToLS","removeFromRecentlyViewed","StoreUser","reseller_discount","reseller_discount_3party","error_login","validVAT","user_settings","commission_orders","commissions_open","fee","vat","partnerFees","bookId","item_id","partner_start","nrVATFrom","nrVATUntil","discount_3party","discount3Party","hasSubscription","commissionFee","feePerc","ordersTotalInclVat","ordersTotalVatLow","ordersTotalVatHigh","store_interface","registerClient","commissionFeeExclVat","commissionFeeInclVat","computed","ordersTotalExclVat","getGenres","StoreBooks","genresList","bookList_related","tips_carousel_home","getTipsCarouselHome","getBooksNewestAuto","getBooksTop20","getAuthors","genres","genre","id_shop","firstn","lastn","substr","shop2","checkAuthorIsSB","book_details","set_shop","result_data","result_ordering","reviews","getBooksNewest","getBookbySku","StoreBooksAll","books_all","details","StoreContent","StoreProducts","list_audiobooks","count_products","getProductGroups","StoreEBooks","ebooks","StoreForms","from_phonenr","refEvent","monitorOrderData","monitorStartPayment","device","operating","browserName","browserVersion","editOrderLineShipping","getOrderLineShipping","StoreOrder","country_default","country_code_default","country_default_displayValue","shipping_free","shipping_free_resellers","resellers_discount_default","custom_shipping_costs","affiliate_id","vat_total","shipping_costs","vat_shipping_perc","vat_shipping","handling","isDialogCompareWishListsOpen","isDialogConcatOpen","payment_issuers","shopping_cart_db_id","shopping_cart_db_guid","wishList","wishList_db","last_date","openDialogConcat","openDialogCompareCarts","openDialogCompareWishLists","closeDialogConcat","closeDialogCompareWishLists","getOrderDataFromLS","setCountryDefault","setOverruledDiscountsInCart","order_lines","ii","discount_active","new_order","vat_perc","retrieveOrderlinesDirect","orderlinesDirect","orders","perc","total_incl","shipping_abroad","calculateWeight","is","NaN","getShipping","shipping","vat_low","calculateOrderVATLow","order_vat_low","shippingData","costsShipping","base_shipping","surcharge_weight","surcharge","package_type","as_letter","as_package","calculateShippingVat","calculateShippingCostsTotal","custom_shipping","shipping_vat","saveShoppingCartToLS","is_logged_in","resetBusinessData","resetPayment","resetCart","stay_logged_in","resetShoppingCartToDB","user_business","display_name","saveUseCaseToLS","processData","orderData","item_anonymous","retrieveOrderIdDirect","retrieveShoppingCartFromDB","compareShoppingCarts","useCartDB","idInvoice","hasShippingLine","monitoring","deleteOrderLine","removeFromCart","percDiscount","cart_item","retrieveShoppingCartDirect","cartDirect","concatConstructResults","orderlines","cartDb","localCart","onlineCart","totalOrder","weight_box","addToWishList","checkDiscountOverruled","checkOnWishList","clearPartnerCode","eidtOrder","getAffiliateId","openDialogComparewishLists","presetDataProfile","removeFromWishList","resetCartUser","resetOrderStatus","retrieveWishListFromDB","retrieveWishListFromLS","setShippingCosts","setTotalPrice","unloadPaymentWindow","updateOrderEmail","StoreCart","retrieveCartDB","retrieveOrderlinesDB","concatCarts","retrieveCartLS","StoreWishlist","openDialogCompareWishlists","closeDialogCompareWishlists","retrieveWishlistFromLS","wishist","wish_item","saveWishlistToDB","saveWishlistToLS","deleteWishlistFromLS","countWishlist","StoreDiscounts","calcDiscountPercStandard","minAmount","userData","discountStandardPerc","discountStandard3PartyPerc","checkIsSB","calcDiscountPercReseller","getPercReseller","calcDiscountPercRule","minamount","calcDiscountPercOverruled","getPercOverruled","checkDiscountAvailable","discountAvailable","isDiscountsOverruled","checkIsReseller","isReseller","checkDiscountRule","getMinAmount","getMinAmountRule","cartLine","dataOrderLines","orderLine","discountPercOverruled","discountPercStandard","discountPercReseller","discountPercRule","hasDiscountsOverruled","hasDiscountRule","calcDiscountItem","StoreCatalog","StoreCatalogs","activeCatalog","activeSubCategory","activeCount","getCategoriesAll","getAuthorsAll","getActiveCatalog","getActiveCategory","breadcrumbs","StoreShipping","noShipping","getShippingOrderOverruled","packageType","getShippingCostsAbroad","hasNoShippingCustomer","checkNoShippingCustomer","hasNoShippingOrder","hasShippingOrderOverruled","checkShippingOrderOverruled","hasNoShippingSku","checkNoShippingSku","checkShippingCountry","getWeight","getPackageType","checkFreeShippingBoundaries","vatPerc","setShippingVAT","isOverruled","evaluatedShipping","StoreStock","onixTranslationFileStock","checkReleaseDate","releaseDate","currentDate","isSameOrBefore","getFeedbackStockCode","stockCode","getOnyxTranslation","listOnyx","checkDeliveryTime","getDeliveryTime","supply_date","getOnixTranslationFileStock","valid_codes","hasPrice","disabledSku","itemExpected","is_available","diffDate","diff","maxDaysExpected","inStock","CodeValue","hasStockCode","checkStock","checkStockCode","getStockCode","getStock","getFeedbackStockSimple","podValue","checkExpected","StoreEvents","events","getEvents","StorePartners","StoreSearch","searchResultsTitle","searchViewPage","searchViewPos","StoreVisuals","getCoverTag","StoreRoot","Boolean","hostname","startApp","ReactDOM","getElementById","cordova","navigator","serviceWorker","ready","registration","unregister"],"mappings":"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","file":"static/js/main.b9110121.chunk.js","sourcesContent":["import React from 'react';\r\nimport packageJson from '../package.json';\r\nglobal.appVersion = packageJson.version;\r\n\r\n// version from response - first param, local version second param\r\nconst semverGreaterThan = (versionA, versionB) => {\r\n const versionsA = versionA.split(/\\./g);\r\n\r\n const versionsB = versionB.split(/\\./g);\r\n while (versionsA.length || versionsB.length) {\r\n const a = Number(versionsA.shift());\r\n\r\n const b = Number(versionsB.shift());\r\n // eslint-disable-next-line no-continue\r\n if (a === b) continue;\r\n // eslint-disable-next-line no-restricted-globals\r\n return a > b || isNaN(b);\r\n }\r\n return false;\r\n};\r\n\r\nclass CacheBuster extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n loading: true,\r\n isLatestVersion: false,\r\n refreshCacheAndReload: () => {\r\n console.log('Clearing cache and hard reloading...')\r\n if (caches) {\r\n // Service worker cache should be cleared with caches.delete()\r\n caches.keys().then(function(names) {\r\n for (let name of names) caches.delete(name);\r\n });\r\n }\r\n\r\n // delete browser cache and hard reload\r\n window.location.reload(true);\r\n }\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n fetch('/meta.json')\r\n .then((response) => response.json())\r\n .then((meta) => {\r\n const latestVersion = meta.version;\r\n const currentVersion = global.appVersion;\r\n\r\n const shouldForceRefresh = semverGreaterThan(latestVersion, currentVersion);\r\n if (shouldForceRefresh) {\r\n console.log(`SbC: We have a new version - ${latestVersion}. Should force refresh`);\r\n this.setState({ loading: false, isLatestVersion: false });\r\n } else {\r\n console.log(`SbC: You already have the latest version - ${latestVersion}. No cache refresh needed.`);\r\n this.setState({ loading: false, isLatestVersion: true });\r\n }\r\n });\r\n }\r\n render() {\r\n const { loading, isLatestVersion, refreshCacheAndReload } = this.state;\r\n return this.props.children({ loading, isLatestVersion, refreshCacheAndReload });\r\n }\r\n}\r\n\r\nexport default CacheBuster;","module.exports = __webpack_public_path__ + \"static/media/sb_logo.ae7ba2fb.png\";","module.exports = __webpack_public_path__ + \"static/media/sb_logo-text.d123275a.png\";","import i18n from \"i18next\";\r\nimport XHR from 'i18next-xhr-backend';\r\n//import LanguageDetector from \"i18next-browser-languagedetector\";\r\n\r\nconst urlAPI = process.env.REACT_APP_URL_API;\r\n\r\nconst backendOpts = {\r\n loadPath: urlAPI + `/translation/translation.php?lang={{lng}}`,\r\n crossDomain: true,\r\n allowMultiLoading: true\r\n}\r\n\r\ni18n\r\n //.use(LanguageDetector)\r\n .use(XHR)\r\n .init({\r\n lng: \"nl\",\r\n preload: ['nl'],\r\n load: 'languageOnly',\r\n backend: backendOpts,\r\n\r\n fallbackLng: \"nl\",\r\n //debug: process.env.NODE_ENV === \"development\",\r\n defaultNS: \"translation\",\r\n \r\n order: ['querystring', 'cookie', 'localStorage', 'navigator', 'htmlTag', 'path', 'subdomain'],\r\n lookupQuerystring: 'lng',\r\n lookupCookie: 'i18next',\r\n lookupLocalStorage: 'i18nextLng',\r\n caches: ['localStorage', 'cookie'],\r\n\r\n interpolation: {\r\n escapeValue: false,\r\n formatSeparator: \",\"\r\n },\r\n\r\n react: {\r\n wait: true\r\n }\r\n });\r\n\r\nexport default i18n;","import React, { Component } from 'react';\r\nimport PropTypes from \"prop-types\";\r\n\r\nclass Bars extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n render() {\r\n return (\r\n <svg\r\n width={this.props.width}\r\n height={this.props.height}\r\n viewBox=\"0 0 135 140\"\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n aria-label={this.props.label}\r\n >\r\n <style>\r\n { `.class1 { fill:${this.props.colors && this.props.colors[0]} }` }\r\n { `.class2 { fill:${this.props.colors && this.props.colors[1]} }` }\r\n { `.class3 { fill:${this.props.colors && this.props.colors[2]} }` }\r\n </style>\r\n <rect y=\"10\" width=\"15\" height=\"40\" rx=\"6\" className=\"class1\">\r\n <animate\r\n attributeName=\"height\"\r\n begin=\"0.5s\"\r\n dur=\"1s\"\r\n values=\"120;110;100;90;80;70;60;50;40;140;120\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n <animate\r\n attributeName=\"y\"\r\n begin=\"0.5s\"\r\n dur=\"1s\"\r\n values=\"10;15;20;25;30;35;40;45;50;0;10\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </rect>\r\n <rect x=\"30\" y=\"10\" width=\"15\" height=\"120\" rx=\"6\" className=\"class1\">\r\n <animate\r\n attributeName=\"height\"\r\n begin=\"0.25s\"\r\n dur=\"1s\"\r\n values=\"120;110;100;90;80;70;60;50;40;140;120\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n <animate\r\n attributeName=\"y\"\r\n begin=\"0.25s\"\r\n dur=\"1s\"\r\n values=\"10;15;20;25;30;35;40;45;50;0;10\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </rect>\r\n <rect x=\"60\" width=\"15\" height=\"140\" rx=\"6\" className=\"class2\">\r\n <animate\r\n attributeName=\"height\"\r\n begin=\"0s\"\r\n dur=\"1s\"\r\n values=\"120;110;100;90;80;70;60;50;40;140;120\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n <animate\r\n attributeName=\"y\"\r\n begin=\"0s\"\r\n dur=\"1s\"\r\n values=\"10;15;20;25;30;35;40;45;50;0;10\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </rect>\r\n <rect x=\"90\" y=\"10\" width=\"15\" height=\"120\" rx=\"6\" className=\"class3\">\r\n <animate\r\n attributeName=\"height\"\r\n begin=\"0.25s\"\r\n dur=\"1s\"\r\n values=\"120;110;100;90;80;70;60;50;40;140;120\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n <animate\r\n attributeName=\"y\"\r\n begin=\"0.25s\"\r\n dur=\"1s\"\r\n values=\"10;15;20;25;30;35;40;45;50;0;10\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </rect>\r\n <rect x=\"120\" y=\"10\" width=\"15\" height=\"120\" rx=\"6\" className=\"class3\">\r\n <animate\r\n attributeName=\"height\"\r\n begin=\"0.5s\"\r\n dur=\"1s\"\r\n values=\"120;110;100;90;80;70;60;50;40;140;120\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n <animate\r\n attributeName=\"y\"\r\n begin=\"0.5s\"\r\n dur=\"1s\"\r\n values=\"10;15;20;25;30;35;40;45;50;0;10\"\r\n calcMode=\"linear\"\r\n repeatCount=\"indefinite\"\r\n />\r\n </rect>\r\n </svg>\r\n )\r\n }\r\n}\r\n\r\nexport default Bars;\r\n\r\nBars.defaultProps = {\r\n height: 80,\r\n width: 80,\r\n color: \"green\",\r\n label: \"loading\"\r\n};\r\n\r\n","import React, { Component } from 'react';\r\n\r\nimport Bars from './loader-bars';\r\n\r\nclass Loader extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n render() { \r\n return (\r\n <div className=\"loader-wrapper\">\r\n <div className=\"loader-wrapper__loader\">\r\n <Bars\r\n colors = {this.props.colors} \r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default Loader;\r\n","import * as mobx from 'mobx';\r\n\r\nexport function handleScroll(pos) {\r\n if (pos === 'top') {\r\n window.scrollTo({\r\n top: 0,\r\n left: 0,\r\n behavior: \"smooth\"\r\n });\r\n } else {\r\n window.scrollTo({\r\n top: pos,\r\n behavior: \"smooth\"\r\n });\r\n }\r\n}\r\n\r\nexport function smoothScrollTo(endX, endY, duration) {\r\n let startX = window.scrollX || window.pageXOffset,\r\n startY = window.scrollY || window.pageYOffset,\r\n distanceX = endX - startX,\r\n distanceY = endY - startY,\r\n startTime = new Date().getTime();\r\n\r\n // Easing function\r\n let easeInOutQuart = function(time, from, distance, duration) {\r\n if ((time /= duration / 2) < 1) return distance / 2 * time * time * time * time + from;\r\n return -distance / 2 * ((time -= 2) * time * time * time - 2) + from;\r\n };\r\n\r\n let timer = window.setInterval(function() {\r\n let time = new Date().getTime() - startTime,\r\n newX = easeInOutQuart(time, startX, distanceX, duration),\r\n newY = easeInOutQuart(time, startY, distanceY, duration);\r\n if (time >= duration) {\r\n window.clearInterval(timer);\r\n }\r\n window.scrollTo(newX, newY);\r\n }, 1000 / 60); // 60 fps\r\n};\r\n\r\nexport function checkMatchingValues(val1, val2) {\r\n let matching = (val1 === val2 && val1 !== '' && val2 !== '') ? true : false;\r\n return matching;\r\n}\r\n\r\nexport function contains(a, obj) {\r\n for (var i = 0; i < a.length; i++) {\r\n if (a[i] === obj) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n// export function autoSave(store, save) {\r\n// mobx.autorun(() => {\r\n// const json = JSON.stringify(mobx.toJS(store));\r\n// save(json);\r\n// });\r\n// }\r\n\r\n// export function save(json) {\r\n// this.saveToLS(json);\r\n// }\r\n\r\n// export function saveToLS(json) {\r\n// localStorage.setItem('APP_USER', json)\r\n// }","import * as ui from './ui';\r\n\r\nexport function formatTitle(title) {\r\n let formattedTitle = title.replace(/\\s/g, '-');\r\n \r\n const chars = {\r\n '(':'-',\r\n ')':'',\r\n '&':'-',\r\n '?':'',\r\n '!':'',\r\n '.':'-',\r\n 'é':'e',\r\n 'ê':'e',\r\n 'ë':'e',\r\n 'è':'e',\r\n 'ì':'i',\r\n 'ÃÂ':'i',\r\n 'î':'i',\r\n 'ï':'i',\r\n 'ñ':'n',\r\n 'ð':'o',\r\n 'ò':'o',\r\n 'ó':'o',\r\n 'ô':'o',\r\n 'õ':'o',\r\n 'ö':'o',\r\n 'á':'a',\r\n 'à ':'a',\r\n 'â':'a',\r\n 'ã':'a',\r\n 'ä':'a'\r\n }\r\n\r\n formattedTitle = formattedTitle.replace(/[()&?!.éêëèìÃÂîïñðòóôõöáà âãä]/g, m => chars[m]);\r\n\r\n formattedTitle = formattedTitle.replace(/---/g, \"-\");\r\n formattedTitle = formattedTitle.replace(/--/g, \"-\");\r\n\r\n return formattedTitle;\r\n}\r\n\r\nexport function setContentType(book) {\r\n const productTypes = [\"Audio\", \"CD\", \"MP3 audio\", \"Audioboek\", \"CD-audio\", \"CD-Rom\", \"CD pack\", \"DVD\"];\r\n let type = 'boek';\r\n\r\n if (book.version) {\r\n const result = productTypes.findIndex(item => book.version.toLowerCase() === item.toLowerCase());\r\n \r\n if (result !== -1) {\r\n type = 'product';\r\n } else {\r\n type = 'boek';\r\n }\r\n }\r\n\r\n return type;\r\n}\r\n\r\nexport function searchChars(value) {\r\n let search = false;\r\n\r\n const arr = [\"CD\"];\r\n const result = arr.findIndex(item => value.toLowerCase() === item.toLowerCase());\r\n \r\n if (result !== -1) {\r\n search = true;\r\n } \r\n\r\n return search;\r\n}\r\n\r\nexport function convertHTML(str) {\r\n // let replacements = {\r\n // \"&\": \"&\",\r\n // \"<\": \"<\",\r\n // \">\": \">\",\r\n // \"'\": \"'\",\r\n // \"<>\": \"<>\",\r\n // }\r\n // return str.replace(/(&|<|>|\"\"|'|<>)/gi, function(noe) {\r\n // return replacements[noe];\r\n // });\r\n return str;\r\n}\r\n\r\nexport function revertHTML(str) {\r\n let newStr = '';\r\n let replacements = {\r\n \"'\": \"'\"\r\n }\r\n\r\n if (str !== null && str !== undefined) {\r\n newStr = str.replace(/'/g, \"'\");\r\n }\r\n\r\n return newStr;\r\n}","export function isInteger(x) {\r\n return !isNaN(x);\r\n}\r\n\r\nexport function formatPrice(price) {\r\n const formattedPrice = (Math.round(price * 100) / 100).toFixed(2);\r\n return formattedPrice;\r\n}\r\n\r\nexport function displayPrice(price) {\r\n const displayedPrice = parseFloat(price)\r\n .toFixed(2)\r\n .toString()\r\n .replace('.',',');\r\n return displayedPrice;\r\n}\r\n\r\nexport function capitalizeFirstChar(str) {\r\n let str2 = '';\r\n if (str !== null && str !== undefined) {\r\n str2 = str.charAt(0).toUpperCase() + str.slice(1);\r\n }\r\n return str2;\r\n}\r\n\r\nexport function capitalizeTitle(str) {\r\n let formattedTitle = str;\r\n\r\n let test = /[A-Z]/.test(str);\r\n const numUpper = str.length - str.replace(/[A-Z]/g, '').length;\r\n const strLength = str.replace(/ /g,\"\").length;\r\n \r\n if (test && numUpper == strLength) {\r\n formattedTitle = formattedTitle.toLowerCase();\r\n formattedTitle = str.charAt(0).toUpperCase() + formattedTitle.slice(1);\r\n }\r\n\r\n return formattedTitle;\r\n}\r\n\r\nexport function removeSpaces(str) {\r\n let str2 = str.replace(/\\s+/g, ' ').trim();\r\n \r\n return str2;\r\n}\r\n\r\nexport function replaceChars(str) {\r\n let str2 = str.replace(/[&]/g,\"en\");\r\n \r\n return str2;\r\n}","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as utilities from '../../utilities/formats';\r\n\r\nconst BlockLoggedIn = inject(\"stores\") (\r\n observer (\r\n class BlockLoggedIn extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n\r\n }\r\n this.urlMAINTENANCE = process.env.REACT_APP_URL_MAINTENANCE;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n let firstname = '';\r\n\r\n if (this.storeUser.user_data.is_loggedin) {\r\n //(async() => await this.storeOrder.getAccountOrders(this.storeUser.user_data.user_id) )();\r\n this.storeOrder.getAccountOrders(this.storeUser.user_data.user_id);\r\n }\r\n \r\n if (this.storeUser.user_data.is_loggedin && this.storeUser.user_data && this.storeUser.user_data.profile) {\r\n firstname = utilities.capitalizeFirstChar(this.storeUser.user_data.profile.firstname);\r\n\r\n this.setState({\r\n firstname: firstname,\r\n lastname: this.storeUser.user_data.profile.lastname,\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n\r\n }\r\n\r\n handleClick = () => {\r\n this.storeUi.setActiveTab('orders');\r\n let url = \"/account/\";\r\n this.props.history.push(url);\r\n }\r\n\r\n handleAdmin = () => {\r\n const url = this.urlMAINTENANCE;\r\n window.location.assign(url);\r\n \r\n }\r\n\r\n render() {\r\n let hasOpenOrder = false;\r\n const orderList = this.storeUser.user_data.is_loggedin ? this.storeOrder.orderHistoryList : []\r\n\r\n orderList.length > 0 && (\r\n orderList.map((order, i) => (\r\n ((order.order_status === 'void' && order.order_paid === null) || (order.order_status === 'banktransfer' && order.order_paid === null)) ? hasOpenOrder = true : hasOpenOrder = hasOpenOrder\r\n ))\r\n )\r\n\r\n return (\r\n <div className=\"block block--sidebar block--loggedin\">\r\n <div className=\"block__block-title\">Welkom<br/> \r\n {this.storeUser.user_data.is_loggedin\r\n ? this.state.firstname\r\n : <span>bij Succesboeken.nl</span>\r\n }\r\n </div>\r\n {hasOpenOrder &&\r\n <span className=\"block--loggedin block--loggedin__link link--read-more\" onClick={() => this.handleClick()}>Je hebt nog een openstaande bestelling</span>\r\n }\r\n {this.storeAuth.user.is_loggedin && this.storeAuth.user.is_admin &&\r\n <span className=\"block--loggedin block--loggedin__link link--read-more notranslate\" onClick={() => this.handleAdmin()}>Beheer</span>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(BlockLoggedIn);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst BlockCategory = inject(\"stores\") (\r\n observer (\r\n class BlockCategory extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeProducts = this.props.stores.storeProducts;\r\n this.storeCatalogs = this.props.stores.storeCatalogs;\r\n\r\n this.state = {\r\n subcats_list: [],\r\n subcats: ''\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n if (this.props.type === 'products') {\r\n try {\r\n const subgroupsList = await this.storeProducts.getProductSubGroups(this.props.category_name);\r\n } catch (error) {\r\n \r\n }\r\n } else {\r\n try {\r\n const subcatsList = await this.storeBooks.getSubCategories(this.props.category_name);\r\n this.setState({\r\n subcats_list: subcatsList\r\n })\r\n } catch (error) {\r\n \r\n }\r\n }\r\n }\r\n\r\n componentDidUpdate = async (prevProps) => {\r\n if (this.props.type === 'category') {\r\n this.storeUi.setActiveSubCategory('');\r\n }\r\n\r\n // if (prevProps.cat_active !== this.storeUi.active_subcats) {\r\n // const subcatList = await this.storeBooks.getSubCategories(this.props.cat_active);\r\n // this.setState({\r\n // subcats_list: subcatList\r\n // })\r\n // }\r\n\r\n if (prevProps.category !== this.props.category) {\r\n const subcatList = await this.storeBooks.getSubCategories(this.props.category);\r\n this.setState({\r\n subcats_list: subcatList,\r\n subcats: 'loaded'\r\n })\r\n }\r\n\r\n if (this.props.type === 'subcategory' \r\n && (this.state.subcats !== 'loaded') \r\n && this.props.cat_active == ''\r\n && this.storeGeneral.shop == 'SHOP_ALL') {\r\n const subCat = this.props.subcategory;\r\n const mainCats = await this.storeUi.returnMainCategory('SHOP_ALL', subCat);\r\n const mainCatId = parseInt(mainCats.main_cat);\r\n const mainCat = await this.storeUi.getMainCategory('SHOP_ALL', mainCatId);\r\n const subcatList = await this.storeBooks.getSubCategories(mainCat.category);\r\n this.setState({\r\n subcats_list: subcatList,\r\n subcats: 'loaded'\r\n })\r\n }\r\n }\r\n\r\n handleOnClickSubCat = async (e, subcat_name) => {\r\n this.storeCatalogs.setActiveSubCategory(subcat_name);\r\n\r\n this.storeUi.setActiveProductGroup('');\r\n this.storeUi.setActiveSubGroup('');\r\n this.storeUi.setActiveSubCategory(subcat_name); \r\n this.storeCatalogs.setActiveSubCategory(subcat_name); \r\n this.storeUi.setNavMobile(false);\r\n this.storeUi.setPageView('page', 1);\r\n \r\n let url = \"/subcategorie/\" + subcat_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n handleOnClickSubGroup = async (e, subcat_name) => {\r\n // this.storeUi.setActiveProductGroup('');\r\n // this.storeUi.setActiveSubGroup('');\r\n this.storeUi.setActiveCategory(''); \r\n this.storeUi.setActiveSubCategory(''); \r\n this.storeCatalogs.setActiveSubCategory(''); \r\n // this.storeUi.setNavMobile(false);\r\n // this.storeUi.setPageView('page', 1);\r\n \r\n // let url = \"/products/\" + subcat_name;\r\n // this.props.history.push(url);\r\n\r\n this.storeUi.setActiveSubGroup(subcat_name); \r\n this.storeUi.setNavMobile(false);\r\n this.storeUi.setPageView('page', 1);\r\n \r\n let url = \"/products/\" + subcat_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n {this.state.subcats_list && this.state.subcats_list.length > 0 &&\r\n <ul className=\"block--categories__subcats\">\r\n {this.state.subcats_list.map((subcat, i) => ( \r\n <li \r\n className={\"block--categories__subcat\" + (subcat.name == this.storeCatalogs.getActiveSubCategory() ? ' --active' : '')}\r\n onClick={(e) => this.handleOnClickSubCat(e, subcat.name)}\r\n dangerouslySetInnerHTML={{ __html: this.storeGeneral.shop === 'SHOP_ALL' ? subcat.display_value : subcat.name}}\r\n />\r\n ))}\r\n </ul>\r\n }\r\n\r\n {this.props.type === 'products' && this.storeProducts.productSubGroups.length > 0 &&\r\n <ul className=\"block--categories__subcats\">\r\n {this.storeProducts.productSubGroups.map((subcat, i) => ( \r\n <li \r\n className={\"block--categories__subcat\" + (subcat.name == this.storeCatalogs.getActiveSubCategory() ? ' --active' : '')}\r\n onClick={(e) => this.handleOnClickSubGroup(e, subcat.name)}\r\n dangerouslySetInnerHTML={{ __html: this.storeGeneral.shop === 'SHOP_ALL' ? subcat.display_value : subcat.name}}\r\n />\r\n ))}\r\n </ul>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockCategory));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport BlockCategory from './block-category';\r\n\r\nconst CategoriesLi = inject(\"stores\") (\r\n observer (\r\n class CategoriesLi extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeCatalogs = this.props.stores.storeCatalogs;\r\n\r\n this.state = {\r\n subs_active: true\r\n }\r\n }\r\n\r\n handleOnClickCat = async(cat_name) => { \r\n let id;\r\n\r\n ui.smoothScrollTo(0, 0, 500); \r\n this.storeUi.setFreezeScrolling(false);\r\n this.storeUi.setFreezePos(0);\r\n\r\n this.storeUi.setActiveProductGroup('');\r\n this.storeUi.setActiveSubGroup('');\r\n\r\n if (this.storeGeneral.shop === 'SHOP_SB') {\r\n id = 1;\r\n } else {\r\n id = 2;\r\n }\r\n this.storeUi.setActiveToggleNav(id);\r\n\r\n this.storeCatalogs.setActiveCategory(cat_name);\r\n\r\n this.storeUi.setActiveSubCategory(\r\n (cat_name !== this.storeUi.active_category || (cat_name === this.storeUi.active_category && this.storeUi.active_subcategory === '')) ? cat_name : ''\r\n );\r\n \r\n if (cat_name !== this.storeUi.active_category ) {\r\n this.storeCatalogs.setActiveCategory(cat_name);\r\n this.storeUi.setActiveCategory(cat_name);\r\n\r\n this.storeCatalogs.setActiveSubCategory(''); \r\n this.storeUi.setActiveSubCategory('');\r\n \r\n this.storeUi.setPageView('page', 1);\r\n } else {\r\n this.storeUi.setActiveSubCats(cat_name);\r\n }\r\n\r\n this.setState({\r\n subs_active: !this.state.subs_active\r\n })\r\n \r\n const htmlEntities = {\r\n \"ë\": \"ë\"\r\n };\r\n cat_name = cat_name.replace('ë', match => htmlEntities[match]);\r\n\r\n this.storeUi.setNavMobile(false);\r\n let url = \"/categorie/\" + cat_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n render() {\r\n return (\r\n <li>\r\n <div className={\"block--categories__cat\" + (this.props.name == this.storeUi.active_category ? ' --active' : '')}>\r\n <span \r\n onClick={(e) => this.handleOnClickCat(this.props.name)}\r\n dangerouslySetInnerHTML={{ __html: this.props.display_value ? this.props.display_value : this.props.name}}\r\n />\r\n </div> \r\n {this.props.name === this.storeUi.active_subcats &&\r\n <BlockCategory \r\n category = {this.props.cat}\r\n category_name = {this.props.name}\r\n cat_active = {this.storeUi.active_category}\r\n subs_active = {this.state.subs_active}\r\n />\r\n }\r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(CategoriesLi));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport CategoriesLi from './block-categories-li';\r\n\r\nconst BlockCategories = inject(\"stores\") (\r\n observer (\r\n class BlockCategories extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {};\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = async() => {\r\n let categories;\r\n if (this.storeBooks.categoriesList.length === 0) {\r\n categories = await this.storeBooks.returnCategories(this.storeGeneral.shop);\r\n } else {\r\n categories = this.storeBooks.categoriesList;\r\n }\r\n\r\n this.setState({\r\n categories: categories\r\n }) \r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (this.props.shop !== 'SHOP_ALL') {\r\n if (this.storeBooks.categoriesListSB.length === 0) { \r\n const categories = await this.storeBooks.getCategories('SHOP_SB');\r\n } \r\n } else {\r\n if (this.storeBooks.categoriesListALL.length === 0) { \r\n const categories = await this.storeBooks.getCategories('SHOP_ALL');\r\n } \r\n }\r\n }\r\n\r\n render() { \r\n return (\r\n <div className=\"block block--sidebar block--categories\">\r\n {!this.props.clean &&\r\n <div className=\"block__block-title\">\r\n {i18n.t(\"block.categories.header\")}\r\n </div> \r\n }\r\n\r\n <ul className={\"block__block-list\"}>\r\n {this.props.shop === 'SHOP_SB' && this.storeBooks.categoriesListSB && this.storeBooks.categoriesListSB.map((cat, i) => ( \r\n <CategoriesLi \r\n key = {i}\r\n shop = {this.props.shop}\r\n category = {cat}\r\n name = {cat.name}\r\n display_value = {cat.display_value}\r\n />\r\n ))}\r\n\r\n {this.props.shop === 'SHOP_ALL' && this.storeBooks.categoriesListALL && this.storeBooks.categoriesListALL.map((cat, i) => ( \r\n <CategoriesLi \r\n key = {i}\r\n shop = {this.props.shop}\r\n category = {cat}\r\n name = {cat.name}\r\n display_value = {cat.display_value}\r\n />\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockCategories));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst BlockProductGroup = inject(\"stores\") (\r\n observer (\r\n class BlockProductGroup extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeProducts = this.props.stores.storeProducts;\r\n\r\n this.state = {\r\n subgroups_list: []\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n if (this.props.product_group_name == this.storeUi.active_product_group) {\r\n const subgroupsList = await this.storeProducts.getProductSubGroups(this.props.product_group.name);\r\n this.setState({\r\n subgroups_list: subgroupsList\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async (prevProps) => {\r\n if (prevProps.active_group !== this.props.active_group) {\r\n if (this.props.product_group_name === this.storeUi.active_product_group) {\r\n const subgroupsList = await this.storeProducts.getProductSubGroups(this.props.product_group.name);\r\n this.setState({\r\n subgroups_list: subgroupsList\r\n })\r\n } \r\n }\r\n }\r\n\r\n handleOnClickArrow = (e, id, cat_name) => {\r\n e.preventDefault();\r\n this.setState({\r\n is_active: !this.state.is_active\r\n })\r\n }\r\n\r\n handleOnClickSubGroup = async (e, subgroup_name) => {\r\n this.storeUi.setActiveSubGroup(subgroup_name); \r\n this.storeUi.setNavMobile(false);\r\n this.storeUi.setPageView('page', 1);\r\n \r\n let url = \"/products/\" + subgroup_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n {this.props.product_group_name === this.storeUi.active_product_group &&\r\n <React.Fragment>\r\n <ul className=\"block--product-groups__subgroups\">\r\n {this.state.subgroups_list.map((subgroup, i) => ( \r\n <li \r\n className={\" block--product-groups__subgroup\" + (subgroup.name == this.storeUi.active_subgroup ? ' --active' : '')}\r\n onClick={(e) => this.handleOnClickSubGroup(e, subgroup.name)}\r\n >\r\n {subgroup.name}\r\n </li>\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockProductGroup));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport BlockProductGroup from './block-product-group';\r\n\r\nconst BlockOtherLanguages = inject(\"stores\") (\r\n observer (\r\n class BlockOtherLanguages extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n handleOnClickLanguage = async(e, lang) => {\r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.setActiveProductGroup('');\r\n this.storeUi.setActiveSubGroup('');\r\n this.storeUi.setActiveCategory('');\r\n this.storeUi.setActiveLanguage(lang.abbr);\r\n this.storeUi.setNavMobile(false);\r\n \r\n let idx = this.storeUi.list_languages.findIndex(lang => lang.abbr === this.storeUi.active_language);\r\n (async() => await this.storeBooks.getBooksForLanguage(this.storeUi.list_languages[idx].query_value, this.storeUi.page_view) )();\r\n (async() => await this.storeUi.getBookCountForLanguage(this.storeUi.list_languages[idx].query_value) )();\r\n\r\n let url = \"/languages/\" + lang.display_value;\r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n const activeClass = (this.storeUi.active_product_group !== '' && this.storeUi.active_product_group !== 99) ? ' --active' : '' \r\n\r\n return (\r\n <div className=\"block block--sidebar block--product-groups\">\r\n {!this.props.clean &&\r\n <div className=\"block__block-title\">\r\n {i18n.t(\"block.other_languages.header\")}\r\n </div> \r\n }\r\n <ul className={\"block__block-list\" + activeClass}>\r\n {this.storeUi.list_languages.map((lang, i) => ( \r\n <React.Fragment key={i}>\r\n {this.storeGeneral.shop === 'SHOP_SB' && lang.show_on_sb === 1 &&\r\n <li>\r\n <span \r\n className={\"block--categories__lang\" + (lang.abbr == this.storeUi.active_language ? ' --active' : '')} \r\n onClick={(e)=>this.handleOnClickLanguage(e, lang)}\r\n dangerouslySetInnerHTML={{ __html: lang.display_value}}\r\n />\r\n </li>\r\n }\r\n {this.storeGeneral.shop === 'SHOP_ALL' && lang.show_on_all === 1 &&\r\n <li>\r\n <span \r\n className={\"block--categories__lang\" + (lang.abbr == this.storeUi.active_language ? ' --active' : '')} \r\n onClick={(e)=>this.handleOnClickLanguage(e, lang)}\r\n dangerouslySetInnerHTML={{ __html: lang.display_value}}\r\n />\r\n </li>\r\n }\r\n </React.Fragment>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockOtherLanguages));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport BlockProductGroup from './block-product-group';\r\n\r\nconst BlockProductGroups = inject(\"stores\") (\r\n observer (\r\n class BlockProductGroups extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeProducts = this.props.stores.storeProducts;\r\n }\r\n\r\n handleOnClickGroup = (e, product) => {\r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.setActiveProductGroup(product.query_value);\r\n this.storeUi.setActiveSubGroup('');\r\n this.storeUi.setActiveLanguage('');\r\n this.storeUi.setActiveCategory(product.name);\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setNavMobile(false);\r\n\r\n let url = \"/products/\" + product.name;\r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n const activeClass = (this.storeUi.active_product_group !== '' && this.storeUi.active_product_group !== 99) ? ' --active' : '' \r\n\r\n return (\r\n <div className=\"block block--sidebar block--product-groups\">\r\n {!this.props.clean &&\r\n <div className=\"block__block-title\">\r\n {i18n.t(\"block.product_groups.header\")}\r\n </div> \r\n }\r\n <ul className={\"block__block-list\" + activeClass}>\r\n {this.storeProducts.media_list && this.storeProducts.media_list.map((product, i) => ( \r\n <li key={i}>\r\n <span \r\n className={\"block--categories__cat\" + (product.name == this.storeUi.app_interface.active_product_group ? ' --active' : '')} \r\n onClick={(e)=>this.handleOnClickGroup(e, product)}\r\n dangerouslySetInnerHTML={{ __html: product.name}}\r\n />\r\n <BlockProductGroup \r\n key={i}\r\n product_group = {product}\r\n product_group_name = {product.name}\r\n active_group = {this.storeUi.active_product_group}\r\n /> \r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockProductGroups));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\n\r\nconst AuthorName = (props) => {\r\n let name = props.author.lastname + ', ' + props.author.firstname;\r\n return name;\r\n}\r\n\r\nconst BlockAuthors = inject(\"stores\") (\r\n observer (\r\n class BlockAuthors extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n handleOnClick = (e, firstname, lastname) => {\r\n this.storeUi.setActiveMainNav(2);\r\n this.storeUi.setPageView('page', 1);\r\n\r\n let id = firstname + ' ' + lastname;\r\n this.storeUi.setCurrentAuthor(id);\r\n //this.storeBooks.getBooksForAuthor(this.storeUi.page_view, id, firstname, lastname);\r\n //this.storeUi.getBookCountForAuthor('SHOP_SB', id);\r\n this.storeUi.setActiveCategory('');\r\n this.storeUi.setActiveProductGroup('');\r\n this.storeUi.setNavMobile(false);\r\n\r\n let url = \"/author/\" + id;\r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n const activeClass = this.storeUi.app_interface.current_author !== '' ? ' --active' : '' \r\n\r\n return (\r\n <div className=\"block block--sidebar block--authors\">\r\n {!this.props.clean &&\r\n <div className=\"block__block-title\">\r\n {i18n.t(\"block.authors_sb.header\")}\r\n </div> \r\n }\r\n <ul className={\"block__block-list\" + activeClass}>\r\n {this.storeBooks.authorsList.map((author, i) => ( \r\n <React.Fragment key={i}>\r\n {author.is_sb === 1 &&\r\n <li key={i} onClick={(e)=>this.handleOnClick(e, author.firstname, author.lastname)}>\r\n <span className={\"block--categories__cat notranslate\" + (author.id == this.storeUi.app_interface.current_author ? ' --active' : '')}>\r\n <AuthorName \r\n author = {author}\r\n />\r\n </span>\r\n </li>\r\n }\r\n </React.Fragment>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(BlockAuthors);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport BlockLoggedIn from '../block/block-loggedin';\r\nimport BlockCategories from '../block/block-categories';\r\nimport BlockOtherLanguages from '../block/block-other-languages';\r\nimport BlockProductGroups from '../block/block-product-groups';\r\nimport BlockAuthors from '../block/block-authors';\r\n\r\nconst SidebarLeft = inject(\"stores\") (\r\n observer (\r\n class SidebarLeft extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n }\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount = () => {\r\n\r\n }\r\n\r\n componentDidUpdate = () => {\r\n\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"content-wrapper__sidebar content-wrapper__sidebar--left\">\r\n <BlockLoggedIn \r\n />\r\n\r\n <BlockCategories\r\n //expanded = {this.props.expanded && this.props.expanded.indexOf('categories') !== -1 ? true : false} \r\n shop = {this.storeGeneral.shop}\r\n expanded = {true}\r\n active_togglenav = {this.storeUi.active_togglenav}\r\n />\r\n <BlockOtherLanguages \r\n expanded = {true}\r\n />\r\n \r\n {(this.storeGeneral.shop !== 'SHOP_ALL') &&\r\n <React.Fragment>\r\n {(this.props.template == \"default\" || this.props.template == \"error\") &&\r\n <React.Fragment>\r\n <BlockProductGroups \r\n //expanded = {this.props.expanded && this.props.expanded.indexOf('products') !== -1 ? true : false} \r\n expanded = {true}\r\n />\r\n <BlockAuthors \r\n clean = {false}\r\n //expanded = {this.props.expanded && this.props.expanded.indexOf('authors') !== -1 ? true : false}\r\n expanded = {true}\r\n />\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default SidebarLeft;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Swiper, Slide } from 'react-dynamic-swiper'\r\nimport { withRouter } from \"react-router-dom\";\r\nimport 'swiper/css/swiper.css';\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nconst CarouselBanner = inject(\"stores\") (\r\n observer (\r\n class CarouselBanner extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.state = {\r\n \r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = async() => {\r\n const banner = await this.storeUi.getBanner();\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.play !== this.props.play) {\r\n if (this.props.play === 'play') {\r\n this.reactSwiper.swiper().autoplay.start();\r\n } else {\r\n this.reactSwiper.swiper().autoplay.stop();\r\n }\r\n }\r\n }\r\n\r\n handleOnClick = async(e, sku) => {\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveCategory('');\r\n \r\n this.storeUi.setCurrentBook(sku);\r\n const book = await this.storeBooks.returnBookDetailsBySku(this.storeGeneral.shop, sku);\r\n const id = content.formatTitle(book.title);\r\n\r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n url = \"/book/\" + sku + \"/\" + id;\r\n } else {\r\n url = \"/book/\" + sku;\r\n }\r\n this.props.history.push(url);\r\n }\r\n\r\n render() {\r\n const banner = this.storeUi.banner;\r\n\r\n const bookSlides = [\r\n { \r\n type: \"text\",\r\n text: banner.text1\r\n },{\r\n type: \"image\",\r\n url: banner.img\r\n },{\r\n type: \"text\",\r\n text: banner.text2\r\n },{\r\n type: \"image\",\r\n url: banner.img\r\n }\r\n ]\r\n\r\n return (\r\n <div className=\"carousel--banner\">\r\n <Swiper \r\n ref={(c) => { this.reactSwiper = c }}\r\n swiperOptions={{\r\n slidesPerView: 1,\r\n initialSlide: 1,\r\n autoplay: this.storeUi.carousel_home === 'play' \r\n ? {\r\n delay: 6000,\r\n disableOnInteraction: false\r\n }\r\n : false,\r\n loop: false,\r\n speed: 1000\r\n }}\r\n {...this.state.options}\r\n >\r\n {bookSlides.map((slide, i) => (\r\n <Slide key={i}>\r\n <div className=\"carousel--banner__slide\" onClick={(e) => this.handleOnClick(e, banner.sku)}>\r\n <div className=\"carousel--banner__slide-content\">\r\n {slide.type === \"image\"\r\n ? <img src={this.urlAPI + \"/public/images/banners/\" + slide.url} alt=\"banner image promoted book\"/>\r\n : <span className=\"carousel--banner__slide-text\" dangerouslySetInnerHTML={{ __html: slide.text}}></span>\r\n }\r\n </div>\r\n </div>\r\n </Slide>\r\n ))}\r\n </Swiper>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CarouselBanner);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport CarouselBanner from '../content/carousel-banner';\r\n\r\nconst BlockLatest = inject(\"stores\") (\r\n observer (\r\n class BlockLatest extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"block block--sidebar block--latest\">\r\n <div className=\"block__block-title\">\r\n {i18n.t(\"block.latest.header\")}\r\n </div> \r\n <div className=\"block__block-subtitle\">\r\n {i18n.t(\"block.latest.intro\")}\r\n </div>\r\n <div className=\"block__block-content\">\r\n <CarouselBanner \r\n play = {this.storeUi.carousel_home}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockLatest);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nconst TemplateSidebarRight = inject(\"stores\") (\r\n observer (\r\n class TemplateSidebarRight extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n \r\n render() {\r\n return (\r\n <div className={\"block block--sidebar block--\" + this.props.class_modifier}>\r\n <div className=\"block__block-title\">\r\n {this.props.class_modifier === 'translations' \r\n ? <span\r\n className = \"notranslate\"\r\n >\r\n {this.props.block_title}\r\n </span>\r\n : this.props.block_title\r\n }\r\n \r\n {this.props.block_intro &&\r\n <span className=\"block__block-subtitle--bold\">{i18n.t(this.props.block_intro)}</span>\r\n }\r\n </div> \r\n\r\n {this.props.children}\r\n\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default TemplateSidebarRight;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {isIOS} from 'react-device-detect';\r\n\r\nimport TemplateSidebarRight from '../../templates/template-sidebar-right';\r\n\r\nconst BlockNewsletter = inject(\"stores\") (\r\n observer (\r\n class BlockNewsletter extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n latest: {}\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const newsletters = await this.storeUi.getNewsletters()\r\n \r\n const latest_newsletter = newsletters\r\n .filter(newsletter => newsletter.tag === this.storeGeneral.settings_list.tagLatestNewsletter);\r\n\r\n this.setState({\r\n latest: latest_newsletter[0]\r\n })\r\n } \r\n\r\n handleClick = (url, view) => {\r\n document.body.classList.add('dialog-open');\r\n this.storeUi.openDialogNewsletter(url);\r\n this.props.history.push('/?mailing=' + this.storeGeneral.settings_list.tagLatestNewsletter + '&view=' + view + \"&lang=nl\");\r\n }\r\n \r\n render() {\r\n const url = this.urlAPI + \"/mailings/\" + this.storeGeneral.settings_list.latestNewsletter;\r\n const url_tag = this.urlAPI + \"/newsletters/newsletter.php?mailing=\" + this.storeGeneral.settings_list.tagLatestNewsletter + \"&origin=site\";\r\n\r\n return (\r\n <TemplateSidebarRight\r\n class_modifier = \"newsletter\"\r\n block_title = {i18n.t(\"block.newsletter.header\")}\r\n >\r\n <div className=\"block__block-content\">\r\n <React.Fragment>\r\n <div className=\"block__block-subtitle\">\r\n {i18n.t(\"block.newsletter.link_latest\")}\r\n <span className=\"newsletter__actions\">\r\n {this.state.latest && this.state.latest.has_php === 1 &&\r\n <span className=\"link--read-more --link\" onClick={() => this.handleClick(url_tag, 'web')}>web</span>\r\n }\r\n {this.state.latest && this.state.latest.has_pdf === 1 && (\r\n <React.Fragment>\r\n {isIOS \r\n ? <a href={url + \".php?origin=site\"} target=\"_blank\" className=\"link--read-more\">\r\n pdf\r\n </a>\r\n : <span className=\"link--read-more\" onClick={() => this.handleClick(url + \".php?origin=site\", 'pdf')}>\r\n pdf\r\n </span>\r\n }\r\n </React.Fragment>\r\n )}\r\n </span>\r\n </div>\r\n </React.Fragment>\r\n <div className=\"block__block-content\">\r\n <Link \r\n className=\"link--read-more\"\r\n to=\"/overview-newsletters\">{i18n.t(\"block.newsletter.link_all\")}\r\n </Link>\r\n <br/>\r\n <Link \r\n className=\"link--read-more\"\r\n to=\"/newsletter\">{i18n.t(\"block.newsletter.link_subscribe_header\")}\r\n </Link>\r\n <Link \r\n className=\"link--subscribe\"\r\n to=\"/newsletter\"\r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"block.newsletter.link_subscribe\")}} \r\n />\r\n </div>\r\n </div>\r\n </TemplateSidebarRight>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockNewsletter));\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { render } from 'react-dom';\r\n\r\nconst ImgWithFallback = ({\r\n src,\r\n fallback,\r\n bem,\r\n type = 'image/webp',\r\n ...delegated\r\n }) => {\r\n return (\r\n <picture>\r\n <source \r\n srcSet={src} \r\n type={type} \r\n className = {bem}\r\n onError = {() => this.props.onError()} \r\n />\r\n <img \r\n src = {fallback}\r\n onError = {() => this.props.onError()} \r\n {...delegated} />\r\n </picture>\r\n );\r\n };\r\n\r\nconst ImgCover = inject(\"stores\") (\r\n observer (\r\n class ImgCover extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlPublic = process.env.REACT_APP_URL_PUBLIC;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n \r\n this.dir_fallback = [\r\n \"/public/images/CoversVKg-all/\",\r\n \"/public/images/CoversVKg-all/\",\r\n \"/public/images/CoversVKg/\",\r\n \"/public/images/CoversVK/\"\r\n ]\r\n\r\n this.state = {\r\n current: 0,\r\n not_available: false\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n // this.setState({\r\n // image: this.state.current === 0\r\n // ? this.props.sku && (this.urlPublic + \"/public/images/CoversVKg-all/\" + this.props.sku + \".png\")\r\n // : this.props.sku && (this.urlPublic + this.dir_fallback[this.state.current] + this.props.sku + \".jpg\"),\r\n // not_available: false\r\n // })\r\n this.setState({\r\n image: this.state.current === 0\r\n ? this.props.sku && (this.urlPublic + \"/public/images/CoversVKg-webp/\" + this.props.sku + \".webp\")\r\n : this.props.sku && (this.urlPublic + this.dir_fallback[this.state.current] + this.props.sku + \".png\"),\r\n not_available: false\r\n })\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.sku !== this.props.sku) {\r\n this.setState({\r\n current: 0,\r\n //image: this.props.sku && (this.urlPublic + \"/public/images/CoversVKg-all/\" + this.props.sku + \".png\"),\r\n image: this.props.sku && (\"https://www.succesboeken.nl/api/public/images/CoversVKg-webp/\" + this.props.sku + \".webp\"),\r\n not_available: false\r\n });\r\n }\r\n }\r\n\r\n handleError = () => {\r\n let ext;\r\n\r\n if ((this.state.current >= 0) && (this.state.current < this.dir_fallback.length)) {\r\n if (this.state.current === 0) {\r\n ext = 'png';\r\n } else {\r\n ext = 'jpg';\r\n }\r\n this.setState({\r\n image: this.urlPublic + this.dir_fallback[this.state.current] + this.props.sku + \".\" + ext,\r\n //image: \"https://www.succesboeken.nl/api/public/images/CoversVKg-webp/\" + this.props.sku + \".webp\",\r\n current: this.state.current + 1,\r\n not_available: false\r\n });\r\n } else {\r\n this.setState({\r\n image: this.urlPublic + \"/public/images/img-not-available.png\",\r\n title: this.props.title,\r\n not_available: true\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const aspectRatio = this.props.aspect ? \" \" + this.props.aspect : \"\"\r\n\r\n return (\r\n <React.Fragment>\r\n {/* <ImgWithFallback\r\n src = {this.state.image} \r\n fallback = {this.state.image} \r\n bem = {\"cover\" + aspectRatio} \r\n alt = {this.props.title ? this.props.title : this.props.sku} \r\n onError = {() => this.handleError()} \r\n\r\n /> */}\r\n\r\n <img \r\n onError = {() => this.handleError()} \r\n src = {this.state.image} \r\n className = {\"cover\" + aspectRatio + (this.props.soldout ? \" --soldout\" : \"\")} \r\n alt = {this.props.title ? this.props.title : this.props.sku} \r\n loading = \"lazy\"\r\n />\r\n\r\n {this.state.not_available &&\r\n <div className=\"cover-title--not-available\">\r\n {this.props.title &&\r\n <React.Fragment>\r\n <span className=\"cover-title--not-available__caption\">Titel:</span>\r\n <span className=\"cover-title--not-available__txt\" dangerouslySetInnerHTML={{ __html: this.state.title}} />\r\n </React.Fragment>\r\n }\r\n </div>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default ImgCover;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Swiper, Slide } from 'react-dynamic-swiper'\r\nimport { withRouter } from \"react-router-dom\";\r\nimport 'swiper/css/swiper.css';\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nconst CarouselBooks = inject(\"stores\") (\r\n observer (\r\n class CarouselBooks extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.play !== this.props.play) {\r\n if (this.props.play === 'play') {\r\n this.reactSwiper.swiper().autoplay.start();\r\n } else {\r\n this.reactSwiper.swiper().autoplay.stop();\r\n }\r\n }\r\n }\r\n\r\n handleAddToCart = (e, book) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const value = 1;\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n this.storeOrder.addToCart(this.storeGeneral.shop, id, book, 'add', value);\r\n\r\n this.storeUi.openDialog();\r\n }\r\n\r\n handleOnClick = (e, book) => {\r\n const sku = book.sku;\r\n const id = content.formatTitle(book.title);\r\n\r\n //SbC reset left nav\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveCategory('');\r\n this.storeUi.setActiveToggleNav(1);\r\n \r\n this.storeUi.setCurrentBook(sku);\r\n\r\n //SBC DEPRICATED\r\n //this.storeBooks.getBookDetailsBySku(sku);\r\n \r\n this.setState({\r\n sku: sku\r\n });\r\n\r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n url = \"/book/\" + sku + \"/\" + id;\r\n } else {\r\n url = \"/book/\" + sku;\r\n }\r\n this.props.history.push(url);\r\n\r\n //SbC slide to next\r\n this.reactSwiper.swiper().slideNext()\r\n }\r\n\r\n goNext = () => {\r\n this.reactSwiper.swiper().slidePrev();\r\n }\r\n \r\n goPrev = () => {\r\n this.reactSwiper.swiper().slideNext();\r\n }\r\n\r\n checkSliderPos = () => {\r\n this.setState({\r\n classPrevBtn: this.reactSwiper.swiper().isEnd ? 'swiper-button-disabled' : '',\r\n classNextBtn: this.reactSwiper.swiper().isBeginning ? 'swiper-button-disabled' : ''\r\n });\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"carousel--books\">\r\n <Swiper \r\n ref={(c) => { this.reactSwiper = c }}\r\n swiperOptions={{\r\n slidesPerView: 1,\r\n autoplay: this.storeUi.carousel_home === 'play' \r\n ? {\r\n delay: 3000,\r\n disableOnInteraction: false\r\n }\r\n : false,\r\n on: {\r\n slideChangeTransitionEnd: () => {\r\n this.checkSliderPos();\r\n }\r\n },\r\n loop: false,\r\n speed: 750\r\n }}\r\n {...this.state.options}\r\n >\r\n {this.props.bookList.map((book, i) => (\r\n <Slide key={i}>\r\n <div className=\"carousel--books__slide --link\" onClick={(e) => this.handleOnClick(e, book)}>\r\n <div className=\"carousel--books__slide-content\">\r\n <ImgCover\r\n sku = {book.sku}\r\n />\r\n </div>\r\n <span className=\"btn btn--icon carousel--books__btn--add\" onClick={(e) => this.handleAddToCart(e, book)}>Add</span>\r\n </div>\r\n </Slide>\r\n ))}\r\n </Swiper>\r\n <div className={\"swiper-button-prev-out \" + this.state.classPrevBtn} onClick={() => this.goPrev()}></div>\r\n <div className={\"swiper-button-next-out \" + this.state.classNextBtn} onClick={() => this.goNext()}></div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CarouselBooks);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport TemplateSidebarRight from '../../templates/template-sidebar-right';\r\n\r\nimport CarouselBooks from '../content/carousel-books';\r\n\r\nconst BlockNewestBooks = inject(\"stores\") (\r\n observer (\r\n class BlockNewestBooks extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n \r\n render() {\r\n return (\r\n <TemplateSidebarRight\r\n class_modifier = \"newest-books\"\r\n block_title = {i18n.t(\"block.newest.header\")}\r\n block_intro = {i18n.t(\"block.newest.intro\")}\r\n >\r\n <div className=\"carousel--newest-books\">\r\n <CarouselBooks \r\n bookList = {this.storeBooks.bookList_newest} \r\n play = {this.storeUi.carousel_home}\r\n />\r\n </div>\r\n </TemplateSidebarRight>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockNewestBooks);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nconst ContentText = inject(\"stores\") (\r\n observer (\r\n class ContentText extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n \r\n this.state = {\r\n content_text: ''\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n let content_text = await this.storeUi.getContentText(this.props.page);\r\n this.setState({\r\n content_text: content_text\r\n })\r\n }\r\n\r\n componentDidUpdate = async (prevProps) => {\r\n if (prevProps.page !== this.props.page) {\r\n let content_text = await this.storeUi.getContentText(this.props.page);\r\n this.setState({\r\n content_text: content_text\r\n })\r\n }\r\n }\r\n\r\n openDialog = () => {\r\n this.storeUi.setContentComponent(\r\n this.props.dialog\r\n )\r\n this.storeUi.openDialogContent();\r\n }\r\n \r\n render() {\r\n return (\r\n <React.Fragment>\r\n {this.state.content_text && this.state.content_text.map((content, i) => (\r\n <React.Fragment key={i}>\r\n {content.subheader &&\r\n <div className=\"content-segment__content\">\r\n <div className=\"content-segment__header\">\r\n <h2>{content.subheader}</h2>\r\n </div>\r\n </div>\r\n }\r\n <div className=\"content-segment__content\">\r\n <p dangerouslySetInnerHTML={{ __html: content.paragraph }}></p>\r\n </div> \r\n {i == this.props.dialog_position &&\r\n <div className=\"content-segment__content\">\r\n <span onClick={() => this.openDialog()} className=\"link--read-more --link\">{this.props.dialog_linktext}</span>\r\n </div>\r\n } \r\n </React.Fragment>\r\n ))}\r\n \r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(ContentText);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport TemplateSidebarRight from '../../templates/template-sidebar-right';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst BlockShipping = inject(\"stores\") (\r\n observer (\r\n class BlockShipping extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n openTC = (e) => {\r\n this.storeUi.setContentComponent(\r\n <ContentText\r\n title = {i18n.t(\"page_headers.general_terms\")}\r\n page = {\"terms-conditions\"}\r\n className = \"content-scrollable\"\r\n />\r\n );\r\n this.storeUi.openDialogContent();\r\n }\r\n \r\n render() {\r\n return (\r\n <TemplateSidebarRight\r\n class_modifier = \"shipping\"\r\n block_title = {i18n.t(\"block.shipping.header\")}\r\n >\r\n <div className=\"block__block-subtitle\">\r\n {i18n.t(\"block.shipping.text\")}\r\n </div> \r\n <div className=\"block__block-content\">\r\n <ul>\r\n <li>voor orders vanaf € 20,- (incl. btw)</li>\r\n <li>uitsluitend in Nederland</li>\r\n </ul>\r\n <span>(zie verder <a href=\"#\" onClick={(e) => this.openTC(e)}>Algemene voorwaarden)</a></span>\r\n </div>\r\n </TemplateSidebarRight>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockShipping);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nconst BookPrice = inject(\"stores\") (\r\n observer (\r\n class BookPrice extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = () => {\r\n \r\n }\r\n\r\n render() {\r\n let price = 0;\r\n let priceDecimals;\r\n\r\n if (this.props.price === null || this.props.price === undefined) {\r\n const book = this.storeBooks.booksList\r\n .filter((book) => book.sku === this.props.sku);\r\n price = book[0] && book[0].price_incl;\r\n } else {\r\n price = this.props.price;\r\n }\r\n\r\n const priceInt = Math.floor(price)\r\n const decimalPart = Math.round((price - Math.floor(price)) * 100)\r\n\r\n if ( decimalPart < 10) {\r\n priceDecimals = '0' + decimalPart\r\n } else {\r\n priceDecimals = decimalPart\r\n }\r\n \r\n return (\r\n <span>{priceInt}<span>,{priceDecimals}</span></span>\r\n );\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BookPrice;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nconst BlockBookActions = inject(\"stores\") (\r\n observer (\r\n class BlockBookActions extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeWishlist = this.props.stores.storeWishlist;\r\n this.storeStock = this.props.stores.storeStock;\r\n }\r\n\r\n componentDidMount = () => {\r\n\r\n }\r\n\r\n handleAddToCart = (e, book) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const value = 1;\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n this.storeOrder.addToCart(this.storeGeneral.shop, id, book, 'add', value);\r\n\r\n this.storeUi.openDialog();\r\n }\r\n\r\n handleAddToWishlist = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n this.storeWishlist.addToWishlist(this.props.sku, this.props.book.title, id);\r\n this.storeUi.openDialogWishList();\r\n }\r\n\r\n handleRemoveFromWishlist = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n this.storeWishlist.removeFromWishlist(this.props.sku, id);\r\n }\r\n\r\n handleMoveToCart = (e, book, sku) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n this.storeWishlist.removeFromWishlist(sku, id);\r\n this.storeOrder.addToCart(this.storeGeneral.shop, id, book, 'add', '1');\r\n\r\n this.storeUi.openDialog();\r\n }\r\n \r\n render() {\r\n const book = this.props.book \r\n ? this.props.book \r\n : this.storeBooks.current_book\r\n \r\n const class_display = this.props.display == \"icon\" ? \" btn--icon\" : \"\"\r\n const display_wishlist = this.props.view.indexOf(\"wishlist\")\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n \r\n return (\r\n <div \r\n className=\"block-content--book__cart-actions\"\r\n >\r\n {book && \r\n <React.Fragment>\r\n {display_wishlist !== -1 && (\r\n this.storeStock.checkStockAvailability('wishlist', book)\r\n ? this.storeWishlist.checkOnWishlist(id, book.sku)\r\n ? <a \r\n className={\"button button--secundary button--wishlist\" + class_display + \" --active\" } \r\n onClick={(e) => this.handleRemoveFromWishlist(e)}\r\n >\r\n <span></span>{i18n.t(\"button.remove_from_wishlist\")}\r\n </a>\r\n : <a \r\n className={\"button button--secundary button--wishlist\" + class_display} \r\n onClick={(e) => this.handleAddToWishlist(e)}\r\n >\r\n {i18n.t(\"button.add_to_wishlist\")}\r\n </a>\r\n : <a \r\n className={\"button button--secundary button--wishlist --disabled\" + class_display}\r\n >\r\n {i18n.t(\"button.add_to_wishlist\")}\r\n </a>\r\n \r\n )}\r\n\r\n {\r\n this.storeStock.checkStockAvailability('order', book)\r\n ? this.storeWishlist.checkOnWishlist(id, book.sku)\r\n ? <a \r\n className={\"button button--primary button--cart\" + class_display} \r\n onClick={(e) => this.handleMoveToCart(e, book, this.props.sku)}\r\n >\r\n {i18n.t(\"button.move_to_cart\")}\r\n </a>\r\n : <a \r\n className={\"button button--primary button--cart\" + class_display} \r\n onClick={(e) => this.handleAddToCart(e, book)}\r\n >\r\n {i18n.t(\"button.shoppingcart\")}\r\n </a>\r\n : <a \r\n className={\"button button--primary button--cart --disabled\" + class_display}\r\n >\r\n {i18n.t(\"button.shoppingcart\")}\r\n </a>\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockBookActions;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport TemplateSidebarRight from '../../templates/template-sidebar-right';\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookPrice from '../../elements/book-price';\r\nimport BlockBookActions from './block-book-actions';\r\n\r\nconst BlockTop10 = inject(\"stores\") (\r\n observer (\r\n class BlockTop10 extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n redirect: false\r\n }\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = async() => {\r\n let tag = this.props.tag;\r\n\r\n if (this.storeBooks.bookList_top10.length === 0) {\r\n const result = await this.storeBooks.getTop10NUR(tag);\r\n\r\n if (result !== undefined && result !== null && result.data !== null && result.data.length > 0) {\r\n const nur = result.data[0].nur;\r\n const return_data = await this.storeBooks.getBooksTop10(tag, nur, 0);\r\n this.setState({\r\n tag: tag,\r\n bookList: return_data\r\n })\r\n } else {\r\n this.setState({\r\n tag: tag,\r\n bookList: []\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n tag: tag,\r\n bookList: this.storeBooks.bookList_top10\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n // if (prevProps.tag !== this.props.tag) {\r\n // let tag = this.props.tag;\r\n\r\n // const result = await this.storeBooks.getTop10NUR(tag);\r\n\r\n // if (result !== undefined && result !== null && result.data !== null && result.data.length > 0) {\r\n // const nur = result.data[0].nur;\r\n // const return_data = await this.storeBooks.getBooksTop10(tag, nur, 0);\r\n // this.setState({\r\n // tag: tag,\r\n // bookList: return_data\r\n // })\r\n // } else {\r\n // this.setState({\r\n // tag: tag,\r\n // bookList: []\r\n // })\r\n // }\r\n // }\r\n }\r\n\r\n handleOnClick = (e, book) => {\r\n e.preventDefault();\r\n const sku = book.sku;\r\n const id = content.formatTitle(book.title);\r\n\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveCategory('');\r\n\r\n this.storeUi.setCurrentBook(sku);\r\n\r\n this.setState({\r\n sku: sku,\r\n redirect: this.props.match.params.sku ? false : true\r\n });\r\n\r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n url = \"/book/\" + sku + \"/\" + id;\r\n } else {\r\n url = \"/book/\" + sku;\r\n }\r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n // if (this.state.redirect) {\r\n // return <Redirect \r\n // push to={\"/book/\" + this.state.sku} \r\n // />;\r\n // }\r\n\r\n // if (this.state.redirect) {\r\n // const id = content.formatTitle(this.state.book.title);\r\n // return <Redirect \r\n // push to={\"/book/\" + this.props.sku + \"/\" + id} \r\n // />;\r\n // }\r\n\r\n return (\r\n <TemplateSidebarRight\r\n class_modifier = \"top10\"\r\n block_title = {\"Top 10\"}\r\n block_intro = {this.props.title}\r\n > \r\n <div className=\"list list--top10\"> \r\n <ul className=\"list--top10__list\">\r\n {this.state.bookList && this.state.bookList.map((book, i) => (\r\n book &&\r\n <li key={i} className=\"list--top10__listitem\" onClick={(e) => this.handleOnClick(e, book)}>\r\n <ImgCover\r\n sku = {book.sku}\r\n title = {book.title}\r\n />\r\n <div className=\"list--top10__actions\">\r\n <BookPrice\r\n price = {book.price_incl}\r\n sku = {book.sku}\r\n />\r\n <BlockBookActions\r\n sku = {book.sku}\r\n book = {book}\r\n view = {[\"wishlist\", \"cart\"]}\r\n display = {\"icon\"} \r\n availability = \"available\"\r\n />\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n {this.state.bookList && this.state.bookList.length === 0 &&\r\n <p>Er is hier geen Top 10 van bekend</p>\r\n }\r\n </div>\r\n\r\n <div className=\"block__block-content\">\r\n <Link \r\n className=\"link--read-more\"\r\n to=\"/category/top10\"\r\n >\r\n {i18n.t(\"block.top10.link_all\")}\r\n </Link>\r\n </div>\r\n\r\n \r\n </TemplateSidebarRight>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(withTranslation()(BlockTop10));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport TemplateSidebarRight from '../../templates/template-sidebar-right';\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookPrice from '../../elements/book-price';\r\nimport BlockBookActions from './block-book-actions';\r\n\r\nconst BlockTop20 = inject(\"stores\") (\r\n observer (\r\n class BlockTop20 extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n redirect: false\r\n }\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n handleOnClick = (e, book) => {\r\n e.preventDefault();\r\n const sku = book.sku;\r\n const id = content.formatTitle(book.title);\r\n\r\n //SbC reset left nav\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveCategory('');\r\n this.storeUi.setActiveToggleNav(1);\r\n\r\n this.storeUi.setCurrentBook(sku);\r\n \r\n //SbC DEPRICATED\r\n //this.storeBooks.getBookDetailsBySku(sku);\r\n\r\n this.setState({\r\n sku: sku,\r\n redirect: this.props.match.params.sku ? false : true\r\n });\r\n\r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n url = \"/book/\" + sku + \"/\" + id;\r\n } else {\r\n url = \"/book/\" + sku;\r\n }\r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n // if (this.state.redirect) {\r\n // return <Redirect \r\n // push to={\"/book/\" + this.state.sku} \r\n // />;\r\n // }\r\n\r\n return (\r\n <TemplateSidebarRight\r\n class_modifier = \"top-20\"\r\n block_title = {i18n.t(\"block.top20.header\")}\r\n block_intro = {i18n.t(\"block.top20.intro\")}\r\n >\r\n <div className=\"list list--top20\">\r\n <ul className=\"list--top20__list\">\r\n {this.storeBooks.bookList_top20 && this.storeBooks.bookList_top20.map((book, i) => (\r\n <li key={i} className=\"list--top20__listitem\" onClick={(e) => this.handleOnClick(e, book)}>\r\n <ImgCover\r\n sku = {book.sku}\r\n />\r\n <div className=\"list--top20__actions\">\r\n <BookPrice\r\n price = {book.price_incl}\r\n sku = {book.sku}\r\n />\r\n <BlockBookActions\r\n sku = {book.sku}\r\n book = {book}\r\n view = {[\"wishlist\", \"cart\"]}\r\n display = {\"icon\"} \r\n availability = \"available\"\r\n />\r\n </div>\r\n <span className=\"list--top20__ic--rank\">{i + 1}</span>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </TemplateSidebarRight>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(withTranslation()(BlockTop20));\r\n","import React, { Component } from 'react';\r\n\r\n// Prevent page scroll when interacting with the dropdown\r\nconst handlePreventScroll = (event) => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n };\r\n \r\nclass BlockGoogleTranslate extends Component {\r\n componentDidMount() {\r\n // Load the Google Translate script\r\n const script = document.createElement('script');\r\n script.src = '//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit';\r\n script.async = true;\r\n document.body.appendChild(script);\r\n\r\n // Define the callback function that will initialize the widget\r\n if (!window.googleTranslateElementInit) {\r\n window.googleTranslateElementInit = () => {\r\n new window.google.translate.TranslateElement(\r\n {\r\n pageLanguage: '',\r\n includedLanguages: 'nl,en,de,fr,es',\r\n layout: window.google.translate.TranslateElement.InlineLayout.SIMPLE,\r\n autoDisplay: false,\r\n },\r\n 'google_translate_element'\r\n );\r\n\r\n const translateDropdown = document.querySelector('.goog-te-gadget');\r\n if (translateDropdown) {\r\n translateDropdown.addEventListener('click', (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n });\r\n }\r\n\r\n this.setupLanguageChangeObserver();\r\n\r\n };\r\n } \r\n }\r\n\r\n setupLanguageChangeObserver = () => {\r\n const observer = new MutationObserver((mutations) => {\r\n mutations.forEach((mutation) => {\r\n if (mutation.type !== 'attributes') {\r\n window.scrollTo(0, 0);\r\n }\r\n });\r\n });\r\n \r\n // Observe the Google Translate widget container\r\n const widgetContainer = document.querySelector('#google_translate_element');\r\n if (widgetContainer) {\r\n observer.observe(widgetContainer, {\r\n attributes: true, // Monitor attribute changes\r\n childList: true, // Monitor child elements\r\n subtree: true, // Monitor all descendants\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <div>\r\n <div id=\"google_translate_element\" />\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default BlockGoogleTranslate;\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport TemplateSidebarRight from '../../templates/template-sidebar-right';\r\nimport BlockGoogleTranslate from './block-google-translate';\r\n\r\nconst BlockTranslations = inject(\"stores\") (\r\n observer (\r\n class BlockTranslations extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n \r\n render() {\r\n return (\r\n <TemplateSidebarRight\r\n class_modifier = \"translations\"\r\n block_title = {i18n.t(\"block.translations.header\")}\r\n >\r\n {/* <div className=\"block__block-subtitle\">\r\n {i18n.t(\"block.translations.text\")}\r\n </div> */}\r\n <div className=\"block__block-content\">\r\n <BlockGoogleTranslate\r\n\r\n />\r\n </div>\r\n </TemplateSidebarRight>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockTranslations);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport BlockLatest from '../block/block-latest';\r\nimport BlockNewsletter from '../block/block-newsletter';\r\nimport BlockNewestBooks from '../block/block-newest-books';\r\nimport BlockShipping from '../block/block-shipping';\r\nimport BlockTop10 from '../block/block-top10';\r\nimport BlockTop20 from '../block/block-top20';\r\nimport BlockTranslations from '../block/block-translations';\r\n\r\nconst SidebarRight = inject(\"stores\") (\r\n observer (\r\n class SidebarRight extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n }\r\n\r\n componentDidMount = async() => {\r\n let list = this.storeGeneral.settings_list[\"sidebarTop10\"];\r\n let tag = \"top10\" + list;\r\n let title = \"blocks.\" + tag + \".subtitle\";\r\n\r\n if (tag === 'top10undefined') {\r\n const settings = await this.storeGeneral.getSettings();\r\n list = this.storeGeneral.settings_list[\"sidebarTop10\"];\r\n tag = \"top10\" + list;\r\n title = \"blocks.\" + tag + \".subtitle\";\r\n }\r\n\r\n this.setState({\r\n tag: tag,\r\n title: title \r\n })\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"content-wrapper__sidebar content-wrapper__sidebar--right\">\r\n {(this.storeGeneral.shop === 'SHOP_ALL') &&\r\n <React.Fragment>\r\n <BlockShipping />\r\n {this.state.tag &&\r\n <BlockTop10 \r\n tag = {this.state.tag}\r\n title = {this.state.title}\r\n />\r\n }\r\n </React.Fragment>\r\n }\r\n \r\n {(this.storeGeneral.shop !== 'SHOP_ALL') &&\r\n <React.Fragment>\r\n <BlockLatest />\r\n <BlockNewsletter />\r\n {/* <BlockTranslations /> */}\r\n <BlockShipping />\r\n <BlockNewestBooks />\r\n <BlockTop20 />\r\n </React.Fragment>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default SidebarRight;\r\n","import React from 'react';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst PageHeader = props => {\r\n const header = \"page_headers.\" + props.text;\r\n const headerCustom = props.textCustom;\r\n const personalized = \" van \" + props.personalized;\r\n \r\n return (\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n {(props.personalized && props.personalized !== '')\r\n ? <React.Fragment>\r\n <h1>\r\n {i18n.t(header, {from_person: personalized})}\r\n </h1>\r\n {props.subtitle &&\r\n <span\r\n classsName=\"content-segment__header-subtitle\" \r\n dangerouslySetInnerHTML={{ __html: i18n.t(props.subtitle)}} \r\n />\r\n }\r\n </React.Fragment>\r\n : <React.Fragment>\r\n {headerCustom && headerCustom !== ''\r\n ? <h1>{headerCustom}</h1> \r\n : <h1 \r\n dangerouslySetInnerHTML={{ __html: i18n.t(header)}} \r\n />\r\n \r\n }\r\n {props.subtitle &&\r\n <span\r\n classsName=\"content-segment__header-subtitle\" \r\n dangerouslySetInnerHTML={{ __html: i18n.t(props.subtitle)}} \r\n />\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default withTranslation()(PageHeader);","import React, { Component } from 'react';\r\nimport smoothscroll from 'smoothscroll-polyfill';\r\n\r\nimport * as ui from '../utilities/ui';\r\n\r\nclass ScrollerTop extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n is_visible: false\r\n };\r\n }\r\n\r\n componentDidMount() {\r\n let scrollComponent = this;\r\n document.addEventListener(\"scroll\", function(e) {\r\n scrollComponent.toggleVisibility();\r\n });\r\n smoothscroll.polyfill();\r\n }\r\n\r\n toggleVisibility() {\r\n if (window.pageYOffset > 300) {\r\n this.setState({\r\n is_visible: true\r\n });\r\n } else {\r\n this.setState({\r\n is_visible: false\r\n });\r\n }\r\n }\r\n\r\n scrollToTop() {\r\n ui.smoothScrollTo(0, 0, 500); \r\n\r\n // window.scrollTo({\r\n // top: 0,\r\n // behavior: \"smooth\"\r\n // });\r\n }\r\n\r\n render() { \r\n let class_visible = this.state.is_visible ? ' --fadeIn' : ' --fadeOut';\r\n\r\n return (\r\n <div className={\"scroller-wrapper\" + class_visible} onClick={(e) => this.scrollToTop()}>\r\n <div className=\"scroller-wrapper__icon\" />\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default ScrollerTop;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nconst ButtonBack = inject(\"stores\") (\r\n observer (\r\n class ButtonBack extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n is_visible: true\r\n };\r\n }\r\n\r\n scrollBack = async(e) => {\r\n this.checkShop();\r\n //SbC for SEO\r\n // if (this.props.match.params.tab === this.storeBooks.current_book.title) {\r\n // this.props.history.go(-2);\r\n // } else {\r\n // this.props.history.goBack();\r\n // }\r\n this.props.history.goBack();\r\n this.storeUi.setFreezePaging(true);\r\n this.storeUi.setFreezeScrolling(true);\r\n }\r\n\r\n checkShop = async () => {\r\n }\r\n\r\n render() { \r\n let class_visible = this.state.is_visible ? ' --fadeIn' : ' --fadeOut';\r\n const pos_top = 'calc(' + this.storeUi.app_interface.height_header + 'px + 1rem)'\r\n\r\n return (\r\n <div \r\n className = {\"scroller-back-wrapper\" + class_visible} \r\n onClick = {(e) => this.scrollBack(e)}\r\n style = {{top: pos_top}}\r\n >\r\n <div className=\"scroller-back-wrapper__icon\" />\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(ButtonBack);\r\n","import { runInAction } from 'mobx';\r\nimport React from 'react';\r\n\r\nconst CheckboxSearch = props => {\r\n\r\n let formControl = \"form-control \" + props.className + \" --link\";\r\n\r\n return (\r\n <div className={\"form-group form-group--checkbox\"}>\r\n <input type=\"checkbox\"\r\n name = {props.name}\r\n value = {props.value}\r\n checked = {props.isSelected}\r\n onChange={props.onCheckboxChange}\r\n className = {'checkbox'}\r\n />\r\n {props.label &&\r\n <React.Fragment>\r\n {typeof props.label === 'object' && \r\n <label \r\n className={formControl}\r\n onClick = {(e) => props.onCheckboxChange()}\r\n >\r\n {props.label}\r\n </label>\r\n }\r\n {typeof props.label !== 'object' && \r\n <label \r\n className={formControl} \r\n onClick = {(e) => props.onCheckboxChange()}\r\n dangerouslySetInnerHTML={{ __html: props.label }} \r\n />\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n );\r\n}\r\n\r\nexport default CheckboxSearch;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nconst SearchCountOverlay = inject(\"stores\") (\r\n observer (\r\n class SearchCountOverlay extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount = async () => {\r\n let section = '';\r\n \r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n // section = 'sb';\r\n // await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n // section = '';\r\n // await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n // await (async() => this.storeUi.getSearchCount(this.props.searchTerm, section) )();\r\n\r\n if (this.props.searchShop === 'OWN') {\r\n section = 'sb';\r\n //await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n\r\n if (this.storeUi.search_count === null) {\r\n //this.storeGeneral.setSearchShop(\"ALL\");\r\n this.storeUi.setSearchFeedback(true);\r\n //await (async() => this.storeUi.getSearchCount(this.props.searchTerm, '') )();\r\n } else {\r\n this.storeUi.setSearchFeedback(false);\r\n }\r\n }\r\n if (this.props.searchShop === 'SB') {\r\n section = '';\r\n //await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n\r\n if (this.storeUi.search_count === null) {\r\n //this.storeGeneral.setSearchShop(\"ALL\");\r\n this.storeUi.setSearchFeedback(true);\r\n //await (async() => this.storeUi.getSearchCount(this.props.searchTerm, '') )();\r\n } else {\r\n this.storeUi.setSearchFeedback(false);\r\n }\r\n } \r\n if (this.props.searchShop === 'ALL') {\r\n //await (async() => this.storeUi.getSearchCount(this.props.searchTerm, '') )();\r\n } \r\n } else {\r\n section = '';\r\n //await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n }\r\n }\r\n\r\n componentDidUpdate = async (prevProps) => {\r\n let section = '';\r\n\r\n if (prevProps.searchTerm !== this.props.searchTerm) {\r\n // if (this.props.searchShop == 'own') {\r\n // section = 'sb';\r\n // await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n // }\r\n\r\n // if (this.props.searchShop == 'sb') {\r\n // section = '';\r\n // await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n // }\r\n\r\n // if (this.props.searchShop == 'all') {\r\n // await (async() => this.storeUi.getSearchCount(this.props.searchTerm, section) )();\r\n // }\r\n \r\n\r\n // if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n // if (this.props.searchShop === 'OWN') {\r\n // section = 'sb';\r\n // await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n\r\n // if (this.storeUi.search_count === null) {\r\n // this.storeGeneral.setSearchShop(\"ALL\");\r\n // this.storeUi.setSearchFeedback(true);\r\n // await (async() => this.storeUi.getSearchCount(this.props.searchTerm, '') )();\r\n // } else {\r\n // this.storeUi.setSearchFeedback(false);\r\n // }\r\n // }\r\n // if (this.props.searchShop === 'SB') {\r\n // section = '';\r\n // await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n\r\n // if (this.storeUi.search_count === null) {\r\n // this.storeGeneral.setSearchShop(\"ALL\");\r\n // this.storeUi.setSearchFeedback(true);\r\n // await (async() => this.storeUi.getSearchCount(this.props.searchTerm, '') )();\r\n // } else {\r\n // this.storeUi.setSearchFeedback(false);\r\n // }\r\n // } \r\n // if (this.props.searchShop === 'ALL') {\r\n // await (async() => this.storeUi.getSearchCount(this.props.searchTerm, '') )();\r\n // } \r\n // } else {\r\n // section = '';\r\n // await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n // }\r\n }\r\n\r\n // if (prevProps.searchShop !== this.props.searchShop) {\r\n // if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n // if (this.props.searchShop === 'OWN') {\r\n // section = 'sb';\r\n // //await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n // }\r\n // if (this.props.searchShop === 'SB') {\r\n // section = '';\r\n // //await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n // }\r\n // if (this.props.searchShop === 'ALL') {\r\n // //await (async() => this.storeUi.getSearchCount(this.props.searchTerm, '') )();\r\n // } \r\n // } else {\r\n // section = '';\r\n // //await (async() => this.storeUi.getSearchCountSB(this.props.searchTerm, section) )();\r\n // }\r\n // }\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div className=\"content-segment-clean search-counter\">\r\n <span \r\n className=\"search-counter__count\"\r\n >\r\n {this.props.searchShop === 'own' \r\n ? this.storeUi.search_count_own ? this.storeUi.search_count_own : 0\r\n : ''\r\n }\r\n {this.props.searchShop === 'sb'\r\n ? this.storeUi.search_count_sb ? this.storeUi.search_count_sb : 0\r\n : ''\r\n }\r\n {this.props.searchShop === 'all'\r\n ? this.storeUi.search_count_all ? this.storeUi.search_count_all : 0\r\n : ''\r\n }\r\n </span>\r\n <span \r\n className=\"search-counter__label\"\r\n >\r\n {this.props.searchShop === 'own' \r\n ? (this.storeUi.search_count_own === 1 || this.storeUi.search_count_own === '1') ? 'resultaat' : 'resultaten'\r\n : ''\r\n }\r\n {this.props.searchShop === 'sb'\r\n ? (this.storeUi.search_count_sb === 1 || this.storeUi.search_count_sb === '1') ? 'resultaat' : 'resultaten'\r\n : ''\r\n }\r\n {this.props.searchShop === 'all'\r\n ? (this.storeUi.search_count_all === 1 || this.storeUi.search_count_all === '1') ? 'resultaat' : 'resultaten'\r\n : ''\r\n }\r\n </span>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default SearchCountOverlay;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport queryString from 'query-string';\r\n\r\nimport CheckboxSearch from '../../elements/form-input-checkbox-search';\r\nimport SearchCountOverlay from './search-count-overlay';\r\n\r\nconst SearchSelectSegment = inject(\"stores\") (\r\n observer (\r\n class SearchSelectSegment extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n\r\n this.state = {\r\n formControls: {\r\n // option1: {\r\n // id: 1,\r\n // name: 'own',\r\n // value: this.storeGeneral.searchShop === 'OWN' ? 1 : 0,\r\n // displayValue: 'Boeken eigen uitgeverij',\r\n // selected: this.storeGeneral.searchShop === 'OWN' ? 1 : 0,\r\n // searchClass: this.storeGeneral.searchShop === 'OWN'\r\n // ? '--active'\r\n // : ''\r\n // },\r\n option1: {\r\n id: 1,\r\n name: 'sb',\r\n value: this.storeGeneral.searchShop === 'SB' ? 1 : 0,\r\n displayValue: 'Alle zelfhulpboeken',\r\n selected: this.storeGeneral.searchShop === 'SB' ? 1 : 0,\r\n searchClass: this.storeGeneral.searchShop === 'ALL' \r\n ? '' \r\n : this.storeGeneral.searchShop === 'SB'\r\n ? '--active'\r\n : '--excluded' \r\n },\r\n option2: {\r\n id: 2,\r\n name: 'all',\r\n value: this.storeGeneral.searchShop === 'ALL' ? 1 : 0,\r\n displayValue: 'Alle boeken',\r\n selected: this.storeGeneral.searchShop === 'ALL' ? 1 : 0,\r\n searchClass: this.storeGeneral.searchShop === 'ALL' \r\n ? '--active' \r\n : '--excluded' \r\n }\r\n }\r\n }\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.searchSegment !== this.props.searchSegment) {\r\n switch(this.props.searchSegment) {\r\n // case 'OWN':\r\n // this.handleCheckboxChange2(1);\r\n // break;\r\n case 'SB':\r\n this.handleCheckboxChange2(1);\r\n break;\r\n case 'ALL':\r\n this.handleCheckboxChange2(2);\r\n break;\r\n default:\r\n this.handleCheckboxChange2(1);\r\n }\r\n }\r\n }\r\n\r\n handleCheckboxChange2 = (idx) => {\r\n const name = 'option' + idx;\r\n let option1;\r\n let option2;\r\n let option3;\r\n let searchClass1;\r\n let searchClass2;\r\n let searchClass3;\r\n\r\n // if (idx === 1) {\r\n // option1 = 1; \r\n // option2 = 0;\r\n // option3 = 0;\r\n // searchClass1 = '--active';\r\n // searchClass2 = '--excluded';\r\n // searchClass3 = '--excluded';\r\n // }\r\n\r\n if (idx === 1) {\r\n option1 = 1;\r\n option2 = 0;\r\n searchClass1 = '--active';\r\n searchClass2 = '--excluded';\r\n }\r\n\r\n if (idx === 2) {\r\n option1 = 0; \r\n option2 = 1;\r\n searchClass1 = '--included';\r\n searchClass2 = '--active';\r\n }\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n ['option1']: {\r\n ...this.state.formControls['option1'],\r\n value: option1,\r\n selected: option1,\r\n searchClass: searchClass1\r\n },\r\n ['option2']: {\r\n ...this.state.formControls['option2'],\r\n value: option2,\r\n selected: option2,\r\n searchClass: searchClass2\r\n }\r\n }\r\n })\r\n }\r\n\r\n handleCheckboxChange = (idx) => {\r\n const name = 'option' + idx;\r\n let option1;\r\n let option2;\r\n let searchClass1;\r\n let searchClass2;\r\n\r\n // if (idx === 1) {\r\n // option1 = 1; \r\n // option2 = 0;\r\n // option3 = 0;\r\n // searchClass1 = '--active';\r\n // searchClass2 = '--excluded';\r\n // searchClass3 = '--excluded';\r\n // }\r\n\r\n if (idx === 1) {\r\n option1 = 1;\r\n option2 = 0;\r\n searchClass1 = '--active';\r\n searchClass2 = '--excluded';\r\n }\r\n\r\n if (idx === 2) {\r\n option1 = 0; \r\n option2 = 1;\r\n searchClass1 = '--included';\r\n searchClass2 = '--active';\r\n }\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n // ['option1']: {\r\n // ...this.state.formControls['option1'],\r\n // value: option1,\r\n // selected: option1,\r\n // searchClass: searchClass1\r\n // },\r\n ['option1']: {\r\n ...this.state.formControls['option1'],\r\n value: option1,\r\n selected: option1,\r\n searchClass: searchClass1\r\n },\r\n ['option2']: {\r\n ...this.state.formControls['option2'],\r\n value: option2,\r\n selected: option2,\r\n searchClass: searchClass2\r\n }\r\n }\r\n \r\n }, () => this.handleSelectSegmentChange(idx))\r\n }\r\n\r\n handleSelectSegmentChange = async(idx) => {\r\n const name = 'option' + idx;\r\n let path = '/';\r\n\r\n const params = queryString.parse(this.props.location.search);\r\n\r\n if (this.state.formControls.option2.selected) {\r\n this.storeGeneral.setShop(\"SHOP_ALL\");\r\n this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n this.storeUi.setActiveToggleNav(2);\r\n this.storeGeneral.setSearchShop('ALL');\r\n this.storeGeneral.setSearchSegment('ALL');\r\n\r\n this.storeUi.setCountTotal(this.storeUi.search_count_all);\r\n\r\n if (this.storeUi.search_overlay) {\r\n path = this.storeUi.toggle_nav[1].path;\r\n this.props.history.push(path);\r\n }\r\n if (!this.storeUi.search_overlay && params.section) {\r\n path = \"/search-results?q=\" + this.storeUi.search_value + \"§ion=all\";\r\n this.props.history.push(path);\r\n }\r\n } else if (this.state.formControls.option1.selected) {\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n this.storeUi.setActiveToggleNav(1);\r\n this.storeGeneral.setSearchShop('SB');\r\n this.storeGeneral.setSearchSegment('SB');\r\n\r\n this.storeUi.setCountTotal(this.storeUi.search_count_sb)\r\n\r\n if (this.storeUi.search_overlay) {\r\n if (path == \"/our-publications\" || path == \"/\" || path == \"/all-books\") {\r\n path = this.storeUi.toggle_nav[1].path;\r\n this.props.history.push(path);\r\n }\r\n }\r\n if (!this.storeUi.search_overlay && params.section) {\r\n path = \"/search-results?q=\" + this.storeUi.search_value + \"§ion=zb\";\r\n this.props.history.push(path);\r\n }\r\n } else if (this.state.formControls.option1.selected) {\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeUi.setActiveToggleNav(1);\r\n this.storeGeneral.setSearchShop('OWN');\r\n this.storeGeneral.setSearchSegment('OWN');\r\n\r\n this.storeUi.setCountTotal(this.storeUi.search_count_own);\r\n\r\n if (this.storeUi.search_overlay) {\r\n path = this.storeUi.toggle_nav[0].path;\r\n this.props.history.push(path);\r\n }\r\n if (!this.storeUi.search_overlay && params.section) {\r\n path = \"/search-results?q=\" + this.storeUi.search_value + \"§ion=sb\";\r\n this.props.history.push(path);\r\n }\r\n }\r\n \r\n this.storeUi.setPageView('page', 1);\r\n } \r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div className=\"search-select-segment\">\r\n <div className=\"search-select-segment__results\">\r\n <div className=\"search-select-segment__list\">\r\n \r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <div \r\n className={\"search-select-segment__listitem --link\" + \" \" + this.state.formControls[key].searchClass}\r\n onClick = {() => this.handleCheckboxChange(this.state.formControls[key].id)}\r\n >\r\n <CheckboxSearch\r\n name = {key} \r\n label = {this.state.formControls[key].displayValue}\r\n isSelected = {this.state.formControls[key].selected}\r\n onCheckboxChange = {() => this.handleCheckboxChange(this.state.formControls[key].id)}\r\n className = {\"--reduced\"}\r\n searchClass= {this.state.formControls[key].searchClass}\r\n />\r\n \r\n <SearchCountOverlay\r\n searchShop = {this.state.formControls[key].name}\r\n searchTerm = {this.storeUi.search_value}\r\n />\r\n </div>\r\n ))}\r\n \r\n </div>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchSelectSegment);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nconst BookLang = inject(\"stores\") (\r\n observer (\r\n class BookLang extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n render() {\r\n const idx = this.storeUi.list_languages\r\n .findIndex((item) => this.props.book.lang === item.query_value);\r\n const lang = (idx !== -1) ? this.storeUi.list_languages[idx].display_value : 'Anderstalig';\r\n\r\n return ( \r\n <span className=\"--lang\">{lang}</span>\r\n );\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BookLang;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport moment from \"moment\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst BlockBookStock = inject(\"stores\") (\r\n observer (\r\n class BlockBookStock extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n feedbackStock: '',\r\n stock_translation: ''\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeStock = this.props.stores.storeStock;\r\n }\r\n\r\n componentDidMount = async() => {\r\n const onyx_list = 65;\r\n const stock_code = this.props.book.stock_code;\r\n\r\n const avail = await this.storeStock.checkStockAvailability('order', this.props.book)\r\n const feedbackStock = await this.storeStock.getFeedbackStock(this.props.book);\r\n\r\n this.setState({\r\n feedbackStock: feedbackStock,\r\n avail: avail\r\n })\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n const onyx_list = 65;\r\n const stock_code = this.props.book.stock_code;\r\n\r\n let avail;\r\n let feedbackStock;\r\n \r\n // if (prevProps.sku !== this.props.sku) { \r\n // avail = await this.storeStock.checkStockAvailability('order', this.props.book)\r\n // feedbackStock = await this.storeStock.getFeedbackStock(this.props.book);\r\n\r\n // this.setState({\r\n // feedbackStock: feedbackStock,\r\n // avail: avail\r\n // })\r\n // }\r\n\r\n if (prevProps.book !== this.props.book || prevProps.stock_code !== this.props.stock_code) { \r\n avail = await this.storeStock.checkStockAvailability('order', this.props.book)\r\n feedbackStock = await this.storeStock.getFeedbackStock(this.props.book);\r\n\r\n this.setState({\r\n feedbackStock: feedbackStock,\r\n avail: avail\r\n })\r\n }\r\n }\r\n\r\n // checkReleaseDate = (releaseDate) => {\r\n // let isAfter = false;\r\n // var currentDate = moment().format(\"DD MMMM YYYY\");\r\n\r\n // if (moment(currentDate).isBefore(moment(releaseDate.date))) {\r\n // isAfter = true;\r\n // }\r\n\r\n // return isAfter;\r\n // }\r\n \r\n render() {\r\n return (\r\n <div className=\"block-content--book__delivery\">\r\n {parseInt(this.props.book.stock_code) === 10 || parseInt(this.props.book.stock_code) === 32\r\n ? <span \r\n className=\"book-delivery--expected\"\r\n >\r\n {this.state.feedbackStock}\r\n {((parseInt(this.props.book.stock_code) === 10 || parseInt(this.props.book.stock_code) === 32) && this.state.avail) &&\r\n \", nu te bestellen\"\r\n }\r\n </span>\r\n : <span>{this.state.feedbackStock}</span>\r\n }\r\n\r\n {this.props.children}\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockBookStock);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookLang from '../../elements/book-lang';\r\nimport BlockBookStock from '../block/block-book-stock';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport * as content from '../../utilities/content';\r\n\r\nconst SearchBlockTopAuthor = inject(\"stores\") (\r\n observer (\r\n class SearchBlockTopAuthor extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeStock = this.props.stores.storeStock;\r\n this.storeVisuals = this.props.stores.storeVisuals;\r\n\r\n this.minLength = 5;\r\n\r\n this.state = {\r\n hasTopItem: false,\r\n elevatedHeader: 'Beste match met auteur:'\r\n };\r\n }\r\n\r\n componentDidMount = async() => {\r\n let searchValue = this.props.searchValue.toLowerCase();\r\n let author = '';\r\n let topItem = {};\r\n let hasTopItem = false;\r\n let bestMatch = false;\r\n\r\n let items = [];\r\n if (this.storeUi.search_results_simple_all.length === 0) {\r\n items = this.storeUi.search_results_simple_sb;\r\n } else {\r\n items = this.storeUi.search_results_simple_all;\r\n }\r\n\r\n items.map((item) => {\r\n author = this.getAuthor(item);\r\n author = author.toLowerCase();\r\n \r\n if (!bestMatch && (author === searchValue)) {\r\n if (item.sku !== this.storeUi.searchTopItemTitleSku) {\r\n bestMatch = true;\r\n hasTopItem = true;\r\n topItem = item;\r\n } \r\n }\r\n })\r\n\r\n if (hasTopItem) \r\n {\r\n this.setState({\r\n hasTopItem: true,\r\n item: topItem\r\n })\r\n } else {\r\n this.setState({\r\n item: null\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let searchValue = this.props.searchValue.toLowerCase(); \r\n let author = '';\r\n let items = [];\r\n let topItem = {};\r\n let hasTopItem = false;\r\n let bestMatch = false;\r\n\r\n if ((prevProps.searchValue !== this.props.searchValue) || \r\n (prevProps.topItemTitle !== this.props.topItemTitle) ||\r\n (prevProps.topItemTitleSku !== this.props.topItemTitleSku) ||\r\n (prevProps.searchSegment !== this.props.searchSegment)) \r\n {\r\n if (this.props.searchValue.length >= this.minLength) {\r\n if (this.storeUi.search_results_simple_all.length === 0) \r\n {\r\n items = this.storeUi.search_results_simple_sb;\r\n } else {\r\n items = this.storeUi.search_results_simple_all;\r\n }\r\n\r\n items.map((item) => {\r\n author = this.getAuthor(item);\r\n author = author.toLowerCase();\r\n\r\n if (!bestMatch && (author === searchValue)) \r\n {\r\n if (item.sku !== this.storeUi.searchTopItemTitleSku) \r\n {\r\n bestMatch = true;\r\n hasTopItem = true;\r\n topItem = item;\r\n }\r\n }\r\n })\r\n \r\n if (hasTopItem) \r\n {\r\n this.setState({\r\n hasTopItem: true,\r\n item: topItem\r\n })\r\n } \r\n } \r\n }\r\n }\r\n\r\n handleOnClick = (result) => {\r\n this.storeUi.setCurrentBook(result.sku);\r\n\r\n //SbC set topnav to SHOP_ALL\r\n this.storeUi.setActiveToggleNav(2);\r\n this.storeGeneral.setActiveShop('SHOP_ALL');\r\n\r\n if (this.props.shop) {\r\n this.storeGeneral.setActiveShop(this.props.shop);\r\n }\r\n \r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n //url = \"/book/\" + result.sku + \"/\" + id;\r\n url = \"/book/\" + result.sku;\r\n } else {\r\n url = \"/book/\" + result.sku;\r\n }\r\n this.props.history.push({\r\n sku: result.sku,\r\n pathname: url\r\n })\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n\r\n getAuthor(item) {\r\n let author = '';\r\n\r\n if (item.author_firstname) {\r\n author = item.author_firstname;\r\n if (item.author_prefix) {\r\n author = author + ' ' + item.author_prefix;\r\n }\r\n if (item.author_lastname) {\r\n author = author + ' ' + item.author_lastname;\r\n }\r\n } else {\r\n if (item.author_lastname) {\r\n author = item.author_lastname;\r\n }\r\n if (item.author_prefix) {\r\n author = item.author_prefix + ' ' + author;\r\n }\r\n }\r\n\r\n return author;\r\n }\r\n\r\n constructAuthor(firstname, prefix, lastname) {\r\n let author = '';\r\n\r\n if (this.state.item.author_firstname) {\r\n author = this.state.item.author_firstname;\r\n if (this.state.item.author_prefix) {\r\n author = author + ' ' + this.state.item.author_prefix;\r\n }\r\n if (this.state.item.author_lastname) {\r\n author = author + ' ' + this.state.item.author_lastname;\r\n }\r\n } else {\r\n if (this.state.item.author_lastname) {\r\n author = this.state.item.author_lastname;\r\n }\r\n if (this.state.item.author_prefix) {\r\n author = this.state.item.author_prefix + ' ' + author;\r\n }\r\n }\r\n\r\n return author;\r\n }\r\n\r\n convertString(str) {\r\n let cStr = '';\r\n\r\n cStr = content.revertHTML(str);\r\n return cStr;\r\n }\r\n\r\n render() {\r\n return (\r\n this.state.hasTopItem \r\n ? <React.Fragment>\r\n <li \r\n className={\"--elevated --link\"}\r\n onClick = {(e) => this.handleOnClick(this.state.item)}\r\n data-content = {this.state.elevatedHeader}\r\n >\r\n <div \r\n className=\"search-item\"\r\n >\r\n <div \r\n className=\"search-item__img\"\r\n >\r\n <ImgCover\r\n sku = {this.state.item.sku}\r\n />\r\n {this.storeVisuals.getCoverTagBySku('blockBook', this.state.item)}\r\n </div>\r\n <div \r\n className=\"search-item__data\"\r\n >\r\n <div>\r\n {this.state.item.title &&\r\n <span\r\n className=\"search-item__data--title\"\r\n dangerouslySetInnerHTML={{ __html: utilities.capitalizeTitle(this.state.item.title)}}\r\n />\r\n }\r\n <span\r\n dangerouslySetInnerHTML={{ __html: this.constructAuthor(this.state.item.author_firstname, this.state.item.author_prefix, this.state.item.author_lastname)}}\r\n />\r\n </div>\r\n <div \r\n className=\"search-item__specs\"\r\n >\r\n <ul className=\"block--specs-summary__list\">\r\n <li className=\"block--specs-summary__listitem\">\r\n <BookLang\r\n book = {this.state.item}\r\n />\r\n </li>\r\n <li className=\"block--specs-summary__listitem\">{this.state.item.version}</li>\r\n <li className=\"block--specs-summary__listitem\">ISBN: {this.state.item.sku}</li>\r\n </ul>\r\n\r\n <BlockBookStock \r\n sku = {this.state.item.sku}\r\n book = {this.state.item}\r\n stock_code = {this.state.item.stock_code}\r\n ></BlockBookStock>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </li>\r\n </React.Fragment>\r\n : null\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchBlockTopAuthor);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookLang from '../../elements/book-lang';\r\nimport BlockBookStock from '../block/block-book-stock';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport * as content from '../../utilities/content';\r\n\r\nconst SearchBlockTitle = inject(\"stores\") (\r\n observer (\r\n class SearchBlockTitle extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeSearch = this.props.stores.storeSearch;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeStock = this.props.stores.storeStock;\r\n this.storeVisuals = this.props.stores.storeVisuals;\r\n\r\n this.minLength = 5;\r\n\r\n this.state = {\r\n item: {},\r\n sku: '',\r\n stock_code: 0,\r\n hasTopItem: false,\r\n elevatedHeader: 'Zocht je deze titel:'\r\n };\r\n }\r\n\r\n componentDidMount = async() => {\r\n let item;\r\n let searchValue = this.props.searchValue.toLowerCase();\r\n\r\n item = await this.storeSearch.getSearchTitle(searchValue, 'sb');\r\n\r\n if (!item) {\r\n item = await this.storeSearch.getSearchTitle(searchValue, 'all');\r\n }\r\n\r\n if (item.sku !== this.storeUi.searchTopItemTitleSku) {\r\n item = this.storeUi.search_results_simple_all[0];\r\n }\r\n\r\n if (item) {\r\n this.storeSearch.setSearchResultsTitle(true);\r\n this.setState({\r\n item: item,\r\n sku: item.sku,\r\n stock_code: item.stock_code\r\n })\r\n } else {\r\n this.storeSearch.setSearchResultsTitle(false);\r\n this.setState({\r\n item: {},\r\n sku: '',\r\n stock_code: 0\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let item;\r\n\r\n if (prevProps.searchValue !== this.props.searchValue) {\r\n let searchValue = this.props.searchValue.toLowerCase(); \r\n \r\n item = await this.storeSearch.getSearchTitle(searchValue, 'sb');\r\n if (!item) {\r\n item = await this.storeSearch.getSearchTitle(searchValue, 'all');\r\n }\r\n\r\n if (item) {\r\n this.storeSearch.setSearchResultsTitle(true);\r\n this.setState({\r\n item: item,\r\n sku: item.sku,\r\n stock_code: item.stock_code\r\n })\r\n } else {\r\n this.storeSearch.setSearchResultsTitle(false);\r\n this.setState({\r\n item: {},\r\n sku: '',\r\n stock_code: 0\r\n })\r\n }\r\n }\r\n\r\n if (prevProps.sku !== this.props.sku) {\r\n item = this.storeUi.search_results_simple_all[0];\r\n\r\n this.setState({\r\n item: item,\r\n sku: item.sku,\r\n stock_code: item.stock_code\r\n })\r\n }\r\n }\r\n\r\n getElevatedHeader = async(sku) => {\r\n let elevatedHeader = 'aanbevolen';\r\n let header = await this.storeUi.getElevatedSku(sku);\r\n \r\n if (header['elevatedHeader'] !== null) {\r\n elevatedHeader = header['elevatedHeader'];\r\n }\r\n \r\n return elevatedHeader;\r\n }\r\n\r\n handleOnClick = (result) => {\r\n this.storeUi.setCurrentBook(result.sku);\r\n\r\n if (this.props.shop) {\r\n this.storeGeneral.setActiveShop(this.props.shop);\r\n }\r\n\r\n if (this.props.shop) {\r\n if (this.props.shop === 'SB') {\r\n this.storeUi.setActiveToggleNav(1);\r\n this.storeGeneral.setActiveShop('SHOP_SB');\r\n }\r\n if (this.props.shop === 'ALL') {\r\n this.storeUi.setActiveToggleNav(2);\r\n this.storeGeneral.setActiveShop('SHOP_ALL');\r\n }\r\n }\r\n \r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n //url = \"/book/\" + result.sku + \"/\" + id;\r\n url = \"/book/\" + result.sku;\r\n } else {\r\n url = \"/book/\" + result.sku;\r\n }\r\n this.props.history.push({\r\n sku: result.sku,\r\n pathname: url\r\n })\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n\r\n constructAuthor(firstname, prefix, lastname) {\r\n let author = '';\r\n\r\n if (this.state.item.author_firstname) {\r\n author = this.state.item.author_firstname;\r\n if (this.state.item.author_prefix) {\r\n author = author + ' ' + this.state.item.author_prefix;\r\n }\r\n if (this.state.item.author_lastname) {\r\n author = author + ' ' + this.state.item.author_lastname;\r\n }\r\n } else {\r\n if (this.state.item.author_lastname) {\r\n author = this.state.item.author_lastname;\r\n }\r\n if (this.state.item.author_prefix) {\r\n author = this.state.item.author_prefix + ' ' + author;\r\n }\r\n }\r\n\r\n return author;\r\n }\r\n\r\n convertString(str) {\r\n let cStr = '';\r\n\r\n cStr = content.revertHTML(str);\r\n return cStr;\r\n }\r\n\r\n render() {\r\n return (\r\n ('sku' in this.state.item) &&\r\n <React.Fragment>\r\n <ul \r\n className = \"list--overlay2 --top-match --elevated\"\r\n > \r\n <li \r\n className={this.state.elevatedHeader ? \"--elevated --link\" : \"--topitem --link\"}\r\n onClick = {(e) => this.handleOnClick(this.state.item)}\r\n data-content = {this.state.elevatedHeader}\r\n >\r\n <div \r\n className=\"search-item\"\r\n >\r\n <div \r\n className=\"search-item__img\"\r\n >\r\n <ImgCover\r\n sku = {this.state.item.sku}\r\n soldout = {(this.state.item && parseInt(this.state.item.stock) === 2) ? true : false}\r\n />\r\n {this.storeVisuals.getCoverTagBySku('blockBook', this.state.item)}\r\n </div>\r\n <div \r\n className=\"search-item__data\"\r\n >\r\n <div>\r\n {this.state.item.title &&\r\n <span\r\n className=\"search-item__data--title\"\r\n dangerouslySetInnerHTML={{ __html: utilities.capitalizeTitle(this.state.item.title)}}\r\n />\r\n }\r\n <span\r\n dangerouslySetInnerHTML={{ __html: this.constructAuthor(this.state.item.author_firstname, this.state.item.author_prefix, this.state.item.author_lastname)}}\r\n />\r\n </div>\r\n <div \r\n className=\"search-item__specs\"\r\n >\r\n <ul className=\"block--specs-summary__list\">\r\n <li className=\"block--specs-summary__listitem\">\r\n <BookLang\r\n book = {this.state.item}\r\n />\r\n </li>\r\n <li className=\"block--specs-summary__listitem\">{this.state.item.version}</li>\r\n <li className=\"block--specs-summary__listitem\">ISBN: {this.state.item.sku}</li>\r\n </ul>\r\n\r\n <BlockBookStock \r\n sku = {this.state.sku}\r\n book = {this.state.item}\r\n stock_code = {this.state.stock_code}\r\n ></BlockBookStock>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </React.Fragment> \r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchBlockTitle);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookLang from '../../elements/book-lang';\r\nimport BlockBookStock from '../block/block-book-stock';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport * as content from '../../utilities/content';\r\n\r\nconst SearchBlockTopTitle = inject(\"stores\") (\r\n observer (\r\n class SearchBlockTopTitle extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeStock = this.props.stores.storeStock;\r\n this.storeVisuals = this.props.stores.storeVisuals;\r\n\r\n this.minLength = 5;\r\n\r\n this.state = {\r\n hasTopItem: false,\r\n elevatedHeader: 'Beste match met titel:'\r\n };\r\n }\r\n\r\n componentDidMount = async() => {\r\n let searchValue = this.props.searchValue.toLowerCase();\r\n // let avail;\r\n // let title ;\r\n let topItem = {};\r\n let hasTopItem = false;\r\n let elevatedHeader;\r\n \r\n let items = [];\r\n if (this.storeUi.search_results_simple_all.length === 0) {\r\n items = this.storeUi.search_results_simple_sb;\r\n } else {\r\n items = this.storeUi.search_results_simple_all;\r\n //SbC TEMP\r\n //items = this.storeUi.search_results_simple_sb;\r\n }\r\n\r\n items.map((item) => {\r\n if (item.title) {\r\n if (item.title.toLowerCase() === this.props.topItemTitle) {\r\n hasTopItem = true;\r\n topItem = item;\r\n }\r\n }\r\n })\r\n\r\n if (hasTopItem) {\r\n if (topItem[\"[elevated]\"] && topItem.sku) {\r\n elevatedHeader = await this.getElevatedHeader(topItem.sku);\r\n }\r\n\r\n this.setState({\r\n hasTopItem: true,\r\n item: topItem,\r\n elevatedHeader: elevatedHeader\r\n })\r\n } else {\r\n this.setState({\r\n item: null,\r\n elevatedHeader: null\r\n })\r\n }\r\n // } else {\r\n // this.setState({\r\n // item: null\r\n // })\r\n // }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let searchValue = this.props.searchValue.toLowerCase(); \r\n // //let minLength = this.storeGeneral.settings_list[\"minLengthSearchSuggestion\"];\r\n // let avail;\r\n // let title;\r\n let topItem = {};\r\n let hasTopItem = false;\r\n let elevatedHeader;\r\n\r\n if ((prevProps.searchValue !== this.props.searchValue) || \r\n (prevProps.topItemTitle !== this.props.topItemTitle) ||\r\n (prevProps.topItemTitleSku !== this.props.topItemTitleSku) ||\r\n (prevProps.searchSegment !== this.props.searchSegment)) \r\n {\r\n if (this.props.searchValue.length >= this.minLength) {\r\n let title = '';\r\n let items = [];\r\n\r\n if (this.storeUi.search_results_simple_all.length === 0) {\r\n items = this.storeUi.search_results_simple_sb;\r\n } else {\r\n items = this.storeUi.search_results_simple_all;\r\n }\r\n\r\n let bestMatch = false;\r\n items.map((item) => {\r\n title = item.title && item.title.toLowerCase();\r\n\r\n if (!bestMatch && (item.sku === this.props.topItemTitleSku || title === this.props.topItemTitle)) {\r\n bestMatch = true;\r\n hasTopItem = true;\r\n topItem = item;\r\n }\r\n })\r\n \r\n if (hasTopItem) {\r\n if (topItem[\"[elevated]\"] && topItem.sku) {\r\n elevatedHeader = await this.getElevatedHeader(topItem.sku);\r\n }\r\n\r\n this.setState({\r\n hasTopItem: true,\r\n item: topItem,\r\n elevatedHeader: elevatedHeader\r\n })\r\n } else {\r\n this.setState({\r\n item: null,\r\n elevatedHeader: null\r\n })\r\n }\r\n } \r\n\r\n if (this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all === 0) {\r\n this.setState({\r\n hasTopItem: false,\r\n })\r\n }\r\n }\r\n }\r\n\r\n getElevatedHeader = async(sku) => {\r\n let elevatedHeader = 'aanbevolen';\r\n let header = await this.storeUi.getElevatedSku(sku);\r\n \r\n if (header['elevatedHeader'] !== null) {\r\n elevatedHeader = header['elevatedHeader'];\r\n }\r\n \r\n return elevatedHeader;\r\n }\r\n\r\n handleOnClick = (result) => {\r\n this.storeUi.setCurrentBook(result.sku);\r\n\r\n //SbC set topnav to SHOP_ALL\r\n //SbC TODO check SHOP\r\n this.storeUi.setActiveToggleNav(3);\r\n this.storeGeneral.setActiveShop('SHOP_ALL');\r\n\r\n if (this.props.shop) {\r\n this.storeGeneral.setActiveShop(this.props.shop);\r\n }\r\n \r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n //url = \"/book/\" + result.sku + \"/\" + id;\r\n url = \"/book/\" + result.sku;\r\n } else {\r\n url = \"/book/\" + result.sku;\r\n }\r\n this.props.history.push({\r\n sku: result.sku,\r\n pathname: url\r\n })\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n\r\n constructAuthor(firstname, prefix, lastname) {\r\n let author = '';\r\n\r\n if (this.state.item.author_firstname) {\r\n author = this.state.item.author_firstname;\r\n if (this.state.item.author_prefix) {\r\n author = author + ' ' + this.state.item.author_prefix;\r\n }\r\n if (this.state.item.author_lastname) {\r\n author = author + ' ' + this.state.item.author_lastname;\r\n }\r\n } else {\r\n if (this.state.item.author_lastname) {\r\n author = this.state.item.author_lastname;\r\n }\r\n if (this.state.item.author_prefix) {\r\n author = this.state.item.author_prefix + ' ' + author;\r\n }\r\n }\r\n\r\n return author;\r\n }\r\n\r\n convertString(str) {\r\n let cStr = '';\r\n\r\n cStr = content.revertHTML(str);\r\n return cStr;\r\n }\r\n\r\n render() {\r\n return (\r\n (this.state.hasTopItem && this.state.item)\r\n ? <React.Fragment>\r\n <li \r\n className={this.state.elevatedHeader ? \"--elevated --link\" : \"--topitem --link\"}\r\n onClick = {(e) => this.handleOnClick(this.state.item)}\r\n data-content = {this.state.elevatedHeader}\r\n >\r\n <div \r\n className=\"search-item\"\r\n >\r\n <div \r\n className=\"search-item__img\"\r\n >\r\n <ImgCover\r\n sku = {this.state.item.sku}\r\n />\r\n {this.storeVisuals.getCoverTagBySku('blockBook', this.state.item)}\r\n </div>\r\n <div \r\n className=\"search-item__data\"\r\n >\r\n <div>\r\n {this.state.item.title &&\r\n <span\r\n className=\"search-item__data--title\"\r\n dangerouslySetInnerHTML={{ __html: utilities.capitalizeTitle(this.state.item.title)}}\r\n />\r\n }\r\n <span\r\n dangerouslySetInnerHTML={{ __html: this.constructAuthor(this.state.item.author_firstname, this.state.item.author_prefix, this.state.item.author_lastname)}}\r\n />\r\n </div>\r\n <div \r\n className=\"search-item__specs\"\r\n >\r\n <ul className=\"block--specs-summary__list\">\r\n <li className=\"block--specs-summary__listitem\">\r\n <BookLang\r\n book = {this.state.item}\r\n />\r\n </li>\r\n <li className=\"block--specs-summary__listitem\">{this.state.item.version}</li>\r\n <li className=\"block--specs-summary__listitem\">ISBN: {this.state.item.sku}</li>\r\n </ul>\r\n\r\n <BlockBookStock \r\n sku = {this.state.item.sku}\r\n book = {this.state.item}\r\n stock_code = {this.state.item.stock_code}\r\n ></BlockBookStock>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </li>\r\n </React.Fragment>\r\n : null\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchBlockTopTitle);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookLang from '../../elements/book-lang';\r\nimport BlockBookStock from '../../components/block/block-book-stock';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport * as content from '../../utilities/content';\r\n\r\nconst SearchBlockTopScore = inject(\"stores\") (\r\n observer (\r\n class SearchBlockTopScore extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeStock = this.props.stores.storeStock;\r\n this.storeVisuals = this.props.stores.storeVisuals;\r\n\r\n this.minLength = 5;\r\n\r\n this.state = {\r\n elevatedHeader: 'Beste match met score',\r\n item: {}\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let searchValue = this.props.searchValue.toLowerCase();\r\n // let avail;\r\n // let title ;\r\n // let topItem = {};\r\n // let hasTopItem = false;\r\n\r\n if (searchValue.length >= this.minLength) {\r\n this.setState({\r\n item: this.props.topItem\r\n })\r\n // topItem = this.props.itemsAll[0];\r\n // hasTopItem = true;\r\n\r\n \r\n // if (hasTopItem) {\r\n // this.setState({\r\n // item: topItem\r\n // })\r\n // } else {\r\n // this.setState({\r\n // item: null\r\n // })\r\n // }\r\n } else {\r\n this.setState({\r\n item: null\r\n })\r\n } \r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let searchValue = this.props.searchValue.toLowerCase();\r\n //let minLength = this.storeGeneral.settings_list[\"minLengthSearchSuggestion\"];\r\n // let avail;\r\n // let title;\r\n let topItem = {};\r\n let hasTopItem = false;\r\n\r\n if (prevProps.searchValue !== this.props.searchValue) {\r\n if (searchValue.length >= this.minLength) {\r\n this.setState({\r\n item: this.props.topItem\r\n })\r\n\r\n // topItem = this.props.itemsAll[0];\r\n // hasTopItem = true;\r\n \r\n // if (hasTopItem) {\r\n // this.setState({\r\n // item: topItem\r\n // })\r\n // } else {\r\n // this.setState({\r\n // item: null\r\n // })\r\n // }\r\n } else {\r\n this.setState({\r\n item: null\r\n })\r\n }\r\n }\r\n\r\n // if (prevProps.itemsAll[0].sku !== this.props.itemsAll[0].sku) {\r\n // topItem = this.props.itemsAll[0];\r\n // hasTopItem = true;\r\n \r\n // if (hasTopItem) {\r\n // this.setState({\r\n // item: this.props.topItem\r\n // })\r\n // } else {\r\n // this.setState({\r\n // item: null\r\n // })\r\n // }\r\n // }\r\n // if (prevProps.topItem.sku !== this.props.topItem.sku) {\r\n // topItem = this.props.topItem;\r\n // hasTopItem = true;\r\n \r\n // if (hasTopItem) {\r\n // this.setState({\r\n // item: this.props.topItem\r\n // })\r\n // } else {\r\n // this.setState({\r\n // item: null\r\n // })\r\n // }\r\n // }\r\n }\r\n\r\n handleOnClick = (result) => {\r\n this.storeUi.setCurrentBook(result.sku);\r\n\r\n //SbC set topnav to SHOP_ALL\r\n this.storeUi.setActiveToggleNav(3);\r\n this.storeGeneral.setActiveShop('SHOP_ALL');\r\n\r\n if (this.props.shop) {\r\n this.storeGeneral.setActiveShop(this.props.shop);\r\n }\r\n \r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n //url = \"/book/\" + result.sku + \"/\" + id;\r\n url = \"/book/\" + result.sku;\r\n } else {\r\n url = \"/book/\" + result.sku;\r\n }\r\n this.props.history.push({\r\n sku: result.sku,\r\n pathname: url\r\n })\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n\r\n constructAuthor(firstname, prefix, lastname) {\r\n let author = '';\r\n\r\n if (this.state.item.author_firstname) {\r\n author = this.state.item.author_firstname;\r\n if (this.state.item.author_prefix) {\r\n author = author + ' ' + this.state.item.author_prefix;\r\n }\r\n if (this.state.item.author_lastname) {\r\n author = author + ' ' + this.state.item.author_lastname;\r\n }\r\n } else {\r\n if (this.state.item.author_lastname) {\r\n author = this.state.item.author_lastname;\r\n }\r\n if (this.state.item.author_prefix) {\r\n author = this.state.item.author_prefix + ' ' + author;\r\n }\r\n }\r\n\r\n return author;\r\n }\r\n\r\n convertString(str) {\r\n let cStr = '';\r\n\r\n cStr = content.revertHTML(str);\r\n return cStr;\r\n }\r\n\r\n render() {\r\n return (\r\n this.state.item \r\n ? <React.Fragment>\r\n <li \r\n className = {\"--elevated --link\"}\r\n onClick = {(e) => this.handleOnClick(this.state.item)}\r\n data-content = {this.state.elevatedHeader}\r\n >\r\n <div \r\n className=\"search-item\"\r\n >\r\n <div \r\n className=\"search-item__img\"\r\n >\r\n <ImgCover\r\n sku = {this.state.item.sku}\r\n />\r\n {this.storeVisuals.getCoverTagBySku('blockBook', this.state.item)}\r\n </div>\r\n <div \r\n className=\"search-item__data\"\r\n >\r\n <div>\r\n {this.state.item.title &&\r\n <span\r\n className=\"search-item__data--title\"\r\n dangerouslySetInnerHTML={{ __html: utilities.capitalizeTitle(this.state.item.title)}}\r\n />\r\n }\r\n <span\r\n dangerouslySetInnerHTML={{ __html: this.constructAuthor(this.state.item.author_firstname, this.state.item.author_prefix, this.state.item.author_lastname)}}\r\n />\r\n </div>\r\n <div \r\n className=\"search-item__specs\"\r\n >\r\n {this.state.item && \r\n <ul className=\"block--specs-summary__list\">\r\n <li className=\"block--specs-summary__listitem\">\r\n <BookLang\r\n book = {this.state.item}\r\n />\r\n </li>\r\n <li className=\"block--specs-summary__listitem\">{this.state.item.version}</li>\r\n <li className=\"block--specs-summary__listitem\">ISBN: {this.state.item.sku}</li>\r\n </ul>\r\n }\r\n\r\n <BlockBookStock \r\n sku = {this.state.item.sku}\r\n book = {this.state.item}\r\n stock_code = {this.state.item.stock_code}\r\n ></BlockBookStock>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </li>\r\n </React.Fragment>\r\n : null\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchBlockTopScore);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookLang from '../../elements/book-lang';\r\nimport BlockBookStock from '../block/block-book-stock';\r\n\r\nimport SearchBlockTopAuthor from './search-block-topauthor';\r\nimport SearchBlockTitle from './search-block-title';\r\nimport SearchBlockTopTitle from './search-block-toptitle';\r\nimport SearchBlockTopScore from './search-block-topscore';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport * as content from '../../utilities/content';\r\n\r\nconst SearchOverlayItemTop = inject(\"stores\") (\r\n observer (\r\n class SearchOverlayItemTop extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeSearch = this.props.stores.storeSearch;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeStock = this.props.stores.storeStock;\r\n\r\n this.minLength = 5;\r\n //let minLength = this.storeGeneral.settings_list[\"minLengthSearchSuggestion\"];\r\n\r\n this.state = {\r\n hasTopItem: false,\r\n elevatedHeader: 'Als beste resultaat is gevonden:'\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let searchValue = this.props.searchValue.toLowerCase();\r\n let avail;\r\n let title;\r\n let topItemTitle = {};\r\n let hasTopItem = false;\r\n\r\n if (searchValue.length > this.minLength) {\r\n this.storeUi.search_results_simple_all.map((item) => {\r\n if (item.title) {\r\n title = item.title.toLowerCase();\r\n }\r\n title = this.convertString(title);\r\n avail = this.storeStock.checkStockAvailability('order', item);\r\n\r\n //SbC check if topitem match\r\n if ((title === searchValue) && avail) {\r\n hasTopItem = true;\r\n topItemTitle = item;\r\n } else {\r\n if ((title.startsWith(searchValue) || title.endsWith(searchValue) || title.includes(searchValue)) && avail && !hasTopItem) {\r\n hasTopItem = true;\r\n topItemTitle = item;\r\n }\r\n } \r\n })\r\n \r\n if (hasTopItem) {\r\n this.setState({\r\n hasTopItem: hasTopItem,\r\n item: topItemTitle,\r\n topItemTitle: topItemTitle\r\n \r\n })\r\n } else {\r\n this.setState({\r\n hasTopItem: hasTopItem,\r\n item: null\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n hasTopItem: hasTopItem,\r\n item: null\r\n })\r\n }\r\n\r\n if (this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all === 0) {\r\n this.setState({\r\n hasTopItem: false\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let searchValue = this.props.searchValue.toLowerCase();\r\n let avail;\r\n let title;\r\n let topItemTitle = {};\r\n let hasTopItem = false;\r\n \r\n if ((prevProps.searchValue !== this.props.searchValue) || \r\n (prevProps.searchTopItemTitle !== this.props.searchTopItemTitle) ||\r\n (prevProps.searchTopItemTitleSku !== this.props.searchTopItemTitleSku))\r\n {\r\n if ((searchValue.length > this.minLength) && (this.storeUi.search_results_simple_all.length > 0)) {\r\n // this.storeUi.search_results_simple_all.map((item) => {\r\n // //let item = this.storeUi.search_results_simple_all[0];\r\n // title = item.title && item.title.toLowerCase();\r\n // title = this.convertString(title);\r\n // avail = this.storeStock.checkStockAvailability('order', item);\r\n\r\n // //SbC check if topitem match\r\n // if ((title === searchValue) && avail) {\r\n // hasTopItem = true;\r\n // topItemTitle = item;\r\n // } else {\r\n // if ((title.startsWith(searchValue) || title.endsWith(searchValue) || title.includes(searchValue)) && avail && !hasTopItem) {\r\n // hasTopItem = true;\r\n // topItemTitle = item;\r\n // } else {\r\n // hasTopItem = false;\r\n // }\r\n // } \r\n // })\r\n this.storeUi.search_results_simple_all.map((item) => {\r\n if (item.title && (item.title.toLowerCase() === this.props.searchTopItemTitle)) {\r\n hasTopItem = true;\r\n topItemTitle = item;\r\n }\r\n })\r\n \r\n if (hasTopItem) {\r\n this.setState({\r\n hasTopItem: true,\r\n item: topItemTitle,\r\n topItemTitle: topItemTitle,\r\n topItemTitleSku: topItemTitle.sku,\r\n })\r\n } else {\r\n this.setState({\r\n hasTopItem: false,\r\n item: null,\r\n topItemTitle: null\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n hasTopItem: false,\r\n item: null,\r\n topItemTitle: null\r\n })\r\n }\r\n\r\n if (this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all === 0) {\r\n this.setState({\r\n hasTopItem: false\r\n })\r\n }\r\n }\r\n }\r\n\r\n getElevatedHeader = async() => {\r\n\r\n }\r\n\r\n handleOnClick = (result) => {\r\n this.storeUi.setCurrentBook(result.sku);\r\n\r\n //SbC set topnav to SHOP_ALL\r\n this.storeUi.setActiveToggleNav(2);\r\n this.storeGeneral.setActiveShop('SHOP_ALL');\r\n\r\n if (this.props.shop) {\r\n this.storeGeneral.setActiveShop(this.props.shop);\r\n }\r\n \r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n //url = \"/book/\" + result.sku + \"/\" + id;\r\n url = \"/book/\" + result.sku;\r\n } else {\r\n url = \"/book/\" + result.sku;\r\n }\r\n this.props.history.push({\r\n sku: result.sku,\r\n pathname: url\r\n })\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n\r\n convertString(str) {\r\n let cStr = '';\r\n\r\n cStr = content.revertHTML(str);\r\n return cStr;\r\n }\r\n\r\n render() {\r\n return ( \r\n (this.state.hasTopItem)\r\n ? \r\n <React.Fragment>\r\n <SearchBlockTitle\r\n searchValue = {this.props.searchValue}\r\n sku = {this.storeUi.searchTopItemTitleSku}\r\n />\r\n\r\n {!this.storeSearch.getSearchResultsTitle() &&\r\n\r\n (this.props.searchValue.length >= this.minLength) &&\r\n <React.Fragment>\r\n { \r\n ((this.storeUi.search_count_own !== 0 || this.storeUi.search_count_sb !== 0) && this.storeUi.search_count_all !== 0) && \r\n <React.Fragment>\r\n {this.props.items && (this.props.items.length > 0) && \r\n this.props.items[0] && \r\n (this.props.searchTopItemTitleSku === this.props.items[0].sku)\r\n ? <span>Als beste resultaat is gevonden</span>\r\n : <span>Als beste resultaten zijn gevonden</span>\r\n }\r\n </React.Fragment>\r\n }\r\n \r\n <ul \r\n className = \"list--overlay2 --top-match --elevated\"\r\n //data-content={this.state.elevatedHeader}\r\n > \r\n {\r\n /* \r\n SbC item in spotlight based on author match\r\n */\r\n }\r\n\r\n {/* {(process.env.REACT_APP_ENV === 'dev') && */}\r\n {/* <span>Author match: {this.props.searchTopItemTitle} - {this.props.searchTopItemTitleSku}</span> */}\r\n {/* } */}\r\n <SearchBlockTopAuthor\r\n searchShop = {this.storeGeneral.searchShop}\r\n searchSegment = {this.storeGeneral.searchSegment}\r\n toggle = {this.storeUi.active_togglenav}\r\n searchValue = {this.props.searchValue}\r\n item = {this.storeUi.search_results_simple_all[0]}\r\n topItem = {this.state.topItemTitle}\r\n topItemTitle = {this.props.searchTopItemTitle}\r\n topItemTitleSku = {this.props.searchTopItemTitleSku}\r\n />\r\n\r\n {\r\n /* \r\n SbC item in spotlight based on start title match, direct search\r\n */\r\n }\r\n\r\n {/* {(process.env.REACT_APP_ENV === 'dev') && \r\n <span>Title match: {this.props.searchTopItemTitle} - {this.props.searchTopItemTitleSku}</span>\r\n } */}\r\n \r\n {\r\n /* \r\n SbC item in spotlight based on title match\r\n */\r\n }\r\n\r\n {/* {(process.env.REACT_APP_ENV === 'dev') && \r\n <span>Title match: {this.props.searchTopItemTitle} - {this.props.searchTopItemTitleSku}</span>\r\n } */}\r\n <SearchBlockTopTitle\r\n searchShop = {this.storeGeneral.searchShop}\r\n searchSegment = {this.storeGeneral.searchSegment}\r\n toggle = {this.storeUi.active_togglenav}\r\n searchValue = {this.props.searchValue}\r\n items = {this.storeUi.search_results_simple_all}\r\n item = {this.storeUi.search_results_simple_all[0]}\r\n topItem = {this.state.topItemTitle}\r\n topItemTitle = {this.props.searchTopItemTitle}\r\n topItemTitleSku = {this.props.searchTopItemTitleSku}\r\n />\r\n \r\n {\r\n /* \r\n SbC top item based on comparing scores\r\n */\r\n }\r\n\r\n {this.props.items && this.props.items[0] && (this.props.searchTopItemTitleSku !== this.props.items[0].sku) &&\r\n\r\n ((this.storeUi.search_results_simple_all[0] !== null && this.storeUi.search_results_simple_sb[0] !== null) &&\r\n (this.storeUi.search_results_simple_all.length > 0 && this.storeUi.search_results_simple_sb.length > 0) &&\r\n (this.storeUi.search_results_simple_all[0].score && this.storeUi.search_results_simple_sb[0].score) &&\r\n (this.storeUi.search_results_simple_all[0].score > this.storeUi.search_results_simple_sb[0].score)) &&\r\n (this.storeUi.search_results_simple_all[0].sku !== (this.state.topItemTitle && this.state.topItemTitle.sku)) &&\r\n <React.Fragment>\r\n {(process.env.REACT_APP_ENV === 'dev') && \r\n <span>Score match: {this.props.searchTopItemScore}</span>\r\n }\r\n <SearchBlockTopScore\r\n searchValue = {this.props.searchValue}\r\n itemsAll = {this.storeUi.search_results_simple_all}\r\n itemsSB = {this.storeUi.search_results_simple_sb}\r\n itemAll = {this.storeUi.search_results_simple_all[0]}\r\n itemSB = {this.storeUi.search_results_simple_sb[0]}\r\n topItem = {this.props.items[0]}\r\n /> \r\n </React.Fragment>\r\n \r\n }\r\n </ul>\r\n </React.Fragment>\r\n }\r\n </React.Fragment> \r\n : null \r\n ) \r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchOverlayItemTop);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport SearchIntentions from '../search/search-intentions';\r\n\r\nconst FeedbackNoSearchResultsSuggestion = inject(\"stores\") (\r\n observer (\r\n class FeedbackNoSearchResultsSuggestion extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n\r\n this.state = {\r\n txt: ''\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n if ((this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own === 0) ||\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb === 0) ||\r\n (this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all === 0)) {\r\n this.setState({\r\n txt: 'verder '\r\n })\r\n }\r\n }\r\n\r\n handleChangeSegment = (shop) => {\r\n let search_term;\r\n let altShop;\r\n let altShopSearch;\r\n search_term = this.storeUi.search_value;\r\n\r\n switch(shop) {\r\n case 'Alle zelfhulpboeken':\r\n altShop = 'SHOP_SB';\r\n altShopSearch = 'SB';\r\n this.storeUi.setActiveToggleNav(2);\r\n break;\r\n case 'Alle boeken':\r\n altShop = 'SHOP_ALL';\r\n altShopSearch = 'ALL';\r\n this.storeUi.setActiveToggleNav(3);\r\n break;\r\n default: \r\n }\r\n\r\n this.storeGeneral.setShop(altShop);\r\n this.storeGeneral.setActiveShop(altShop);\r\n //this.storeGeneral.setSearchShop(altShopSearch);\r\n \r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.getSearchIntentions(search_term);\r\n this.storeUi.setSearchOverlay(false);\r\n this.storeUi.setSearchInputFocus(false);\r\n \r\n this.storeUi.saveSearchQuery(search_term);\r\n this.storeUi.setActiveMainNav(this.storeUi.app_interface.active_search_segment);\r\n\r\n const path = \"/search-results\";\r\n const str_search = \"?q=\" + search_term;\r\n\r\n this.props.history.push({\r\n pathname: path,\r\n search: str_search\r\n })\r\n }\r\n\r\n render() { \r\n return (\r\n <React.Fragment>\r\n <div className=\"search-overlay__alternatives\">\r\n <div className=\"search-overlay__suggestions\">\r\n {/* <p><strong>Wat kun je {this.state.txt}doen?</strong></p> */}\r\n <p><strong>Niet gevonden wat je zocht?</strong></p>\r\n <ul>\r\n <li>Controleer de spelling van je zoekwoord(en)</li>\r\n <li>Probeer een ander zoekwoord</li>\r\n <li>Kies hiernaast een (andere) categorie</li>\r\n {(this.storeGeneral.searchShop !== 'ALL' && this.storeUi.search_count_all > 10) &&\r\n <li>Kijk ook bij\r\n <span\r\n className = \"--link\"\r\n onClick = {() => this.handleChangeSegment('Alle boeken')}\r\n >\r\n Alle boeken\r\n </span>\r\n voor meer resultaten\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(FeedbackNoSearchResultsSuggestion);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nconst SearchIntentions = inject(\"stores\") (\r\n observer (\r\n class SearchIntentions extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n searchIntention = (searchTerm) => {\r\n this.storeUi.setSearchValue(searchTerm);\r\n } \r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n {this.storeUi.search_intentions.length > 0\r\n ? <div className=\"search-intentions\">\r\n <div className=\"search-intentions__header\">Of zocht je naar:</div>\r\n <div className=\"search-intentions__results\">\r\n <ul className=\"search-intentions__list\">\r\n {this.storeUi.search_intentions.map((term) => (\r\n <li \r\n className=\"search-intentions__listitem\" \r\n onClick={(e) => this.searchIntention(term.intention)}\r\n >\r\n {term.intention}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </div>\r\n : null\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default SearchIntentions;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookLang from '../../elements/book-lang';\r\nimport BlockBookStock from '../../components/block/block-book-stock';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\n\r\nconst SearchOverlayItem = inject(\"stores\") (\r\n observer (\r\n class SearchOverlayItem extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeStock = this.props.stores.storeStock;\r\n this.storeVisuals = this.props.stores.storeVisuals;\r\n\r\n this.state = {\r\n formattedTitle: this.props.item.title,\r\n elevatedHeader: 'aanbevolen'\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let elevatedHeader;\r\n if (this.props.item[\"[elevated]\"]) {\r\n elevatedHeader = await this.getElevatedHeader();\r\n\r\n this.setState({\r\n elevatedHeader: elevatedHeader\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let elevatedHeader;\r\n if (prevProps.item.sku !== this.props.item.sku) {\r\n if (this.props.item[\"[elevated]\"]) {\r\n elevatedHeader = await this.getElevatedHeader();\r\n \r\n this.setState({\r\n elevatedHeader: elevatedHeader\r\n })\r\n }\r\n }\r\n }\r\n\r\n getElevatedHeader = async() => {\r\n let elevatedHeader = 'aanbevolen';\r\n let header = await this.storeUi.getElevatedSku(this.props.item.sku);\r\n \r\n if (header['elevatedHeader'] !== null) {\r\n elevatedHeader = header['elevatedHeader'];\r\n }\r\n \r\n return elevatedHeader;\r\n }\r\n\r\n handleOnClick = (result) => {\r\n this.storeUi.setCurrentBook(result.sku);\r\n //this.storeBooks.getBookDetailsBySku(result.sku);\r\n\r\n if (this.props.shop) {\r\n this.storeGeneral.setActiveShop(this.props.shop);\r\n }\r\n\r\n if (this.props.shop) {\r\n if (this.props.shop === 'SB') {\r\n this.storeUi.setActiveToggleNav(1);\r\n this.storeGeneral.setActiveShop('SHOP_SB');\r\n }\r\n if (this.props.shop === 'ALL') {\r\n this.storeUi.setActiveToggleNav(2);\r\n this.storeGeneral.setActiveShop('SHOP_ALL');\r\n }\r\n }\r\n \r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n //url = \"/book/\" + result.sku + \"/\" + id;\r\n url = \"/book/\" + result.sku;\r\n } else {\r\n url = \"/book/\" + result.sku;\r\n }\r\n this.props.history.push({\r\n sku: result.sku,\r\n pathname: url\r\n })\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n\r\n constructAuthor(firstname, prefix, lastname) {\r\n let author = '';\r\n\r\n if (this.props.item.author_firstname) {\r\n author = this.props.item.author_firstname;\r\n if (this.props.item.author_prefix) {\r\n author = author + ' ' + this.props.item.author_prefix;\r\n }\r\n if (this.props.item.author_lastname) {\r\n author = author + ' ' + this.props.item.author_lastname;\r\n }\r\n } else {\r\n if (this.props.item.author_lastname) {\r\n author = this.props.item.author_lastname;\r\n }\r\n if (this.props.item.author_prefix) {\r\n author = this.props.item.author_prefix + ' ' + author;\r\n }\r\n }\r\n\r\n return author;\r\n }\r\n\r\n render() {\r\n return (\r\n <li \r\n className={(this.props.item[\"[elevated]\"] ? \"--elevated\" : \"\") + \" --link\"}\r\n onClick={(e) => this.handleOnClick(this.props.item)}\r\n data-content={this.state.elevatedHeader}\r\n >\r\n <div \r\n className=\"search-item\"\r\n >\r\n <div \r\n className=\"search-item__img\"\r\n >\r\n <ImgCover\r\n sku = {this.props.item.sku}\r\n soldout = {(this.props.item && this.storeStock.checkImageCoverTags(this.props.item) === 'soldout') \r\n ? true \r\n : false\r\n }\r\n />\r\n {this.storeVisuals.getCoverTagBySku('blockBook', this.props.item)}\r\n </div>\r\n <div \r\n className=\"search-item__data\"\r\n >\r\n <div>\r\n {this.props.item.title &&\r\n <span\r\n className=\"search-item__data--title\"\r\n dangerouslySetInnerHTML={{ __html: utilities.capitalizeTitle(this.props.item.title)}}\r\n />\r\n }\r\n <span\r\n dangerouslySetInnerHTML={{ __html: this.constructAuthor(this.props.item.author_firstname, this.props.item.author_prefix, this.props.item.author_lastname)}}\r\n />\r\n </div>\r\n <div \r\n className=\"search-item__specs\"\r\n >\r\n <ul className=\"block--specs-summary__list\">\r\n <li className=\"block--specs-summary__listitem\">\r\n <BookLang\r\n book = {this.props.item}\r\n />\r\n </li>\r\n <li className=\"block--specs-summary__listitem\">{this.props.item.version}</li>\r\n <li className=\"block--specs-summary__listitem\">ISBN: {this.props.item.sku}</li>\r\n </ul>\r\n\r\n <BlockBookStock \r\n sku = {this.props.item.sku}\r\n book = {this.props.item}\r\n stock_code = {this.props.item.stock_code}\r\n ></BlockBookStock>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchOverlayItem);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nconst FeedbackNoSearchResults = inject(\"stores\") (\r\n observer (\r\n class FeedbackNoSearchResults extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n hasAlternative = (arr) => {\r\n let hasAlt = 0;\r\n \r\n if (arr !== null && arr[0] && arr[0].response) {\r\n hasAlt = arr[0].response.numFound;\r\n } else {\r\n hasAlt = 1;\r\n }\r\n\r\n return hasAlt;\r\n }\r\n\r\n feedbackShop = (shop) => {\r\n let fb = '';\r\n switch(shop) {\r\n case 'OWN':\r\n fb = fb + 'Boeken eigen uitgeverij';\r\n break;\r\n case 'SB':\r\n fb = fb + 'Zelfhulpboeken';\r\n break;\r\n case 'ALL':\r\n fb = fb + 'Alle boeken';\r\n break;\r\n default: \r\n }\r\n\r\n return fb;\r\n }\r\n\r\n render() { \r\n return (\r\n <React.Fragment>\r\n {this.storeUi.search_count_own === 0 && this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all === 0\r\n ? <span>We kunnen geen resultaten voor je zoekopdracht vinden.</span>\r\n : <React.Fragment>\r\n <span>Er zijn geen resultaten in <strong>{this.feedbackShop(this.storeGeneral.searchShop)}</strong> gevonden.</span>\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(FeedbackNoSearchResults);\r\n","import React, { PureComponent } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport SearchOverlayItem from './search-overlay-item';\r\nimport FeedbackNoSearchResults from '../feedback/feedback-no-search-results';\r\nimport FeedbackNoSearchResultsSuggestion from '../feedback/feedback-no-search-results-suggestion';\r\n\r\nconst SearchResultOverlay = inject(\"stores\") (\r\n observer (\r\n class SearchResultOverlay extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n results: [],\r\n shopAlternative: '',\r\n skuAlternative: ''\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let shop;\r\n let section;\r\n let shopAlternative;\r\n let skuAlternative;\r\n let count;\r\n \r\n switch(this.props.searchShop) {\r\n case 'OWN':\r\n shop = 'SHOP_SB';\r\n section = 'sb'; \r\n //await (async() => this.storeUi.getSearchCountSB(this.storeUi.search_value, section) )();\r\n break;\r\n case 'SB':\r\n shop = 'SHOP_SB';\r\n section = ''; \r\n //await (async() => this.storeUi.getSearchCountSB(this.storeUi.search_value, section) )();\r\n break;\r\n case 'ALL':\r\n shop = 'SHOP_ALL';\r\n section = ''; \r\n //await (async() => this.storeUi.getSearchCount(this.storeUi.search_value, section) )();\r\n break; \r\n }\r\n\r\n // if (this.storeUi.search_input_focus || this.storeUi.search_overlay) {\r\n // if (this.props.searchShop === 'OWN') {\r\n\r\n // } \r\n\r\n // if (this.props.searchShop === 'ALL') {\r\n // const searchAlternative = false;\r\n // //const results3 = await this.storeUi.getSearchResultsSimple('SHOP_ALL', this.storeUi.search_value, '', this.storeUi.page_view, searchAlternative); \r\n\r\n // shopAlternative = 'Alle boeken';\r\n // skuAlternative = 'ALL';\r\n // this.setState({\r\n // shopAlternative: shopAlternative,\r\n // skuAlternative: skuAlternative\r\n // })\r\n // }\r\n // } \r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let shop;\r\n let section;\r\n let shopAlternative;\r\n let skuAlternative;\r\n let results;\r\n\r\n if (prevProps.searchInput !== this.props.searchInput || \r\n prevProps.searchInputFocus !== this.props.searchInputFocus || \r\n prevProps.searchShop !== this.props.searchShop) {\r\n } \r\n\r\n if (prevProps.count !== this.props.count) {\r\n\r\n } \r\n\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n setOverlayRef = (node) => {\r\n this.overlayRef = node;\r\n this.storeUi.setSearchOverlayRef(node);\r\n }\r\n\r\n feedbackShop = (shop) => {\r\n let fb = ' in ';\r\n switch(shop) {\r\n case 'OWN':\r\n fb = fb + 'Boeken eigen uitgeverij';\r\n break;\r\n case 'SB':\r\n fb = fb + 'Zelfhulpboeken';\r\n break;\r\n case 'ALL':\r\n fb = fb + 'Alle boeken';\r\n break;\r\n default: \r\n }\r\n\r\n return fb;\r\n }\r\n\r\n onSubmit = () => {\r\n if (((this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own > 1) ||\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb > 1) ||\r\n (this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all > 1 ))) \r\n {\r\n let search_term;\r\n search_term = this.storeUi.search_value;\r\n\r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.getSearchIntentions(search_term);\r\n this.storeUi.setSearchOverlay(false);\r\n this.storeUi.setSearchInputFocus(false);\r\n \r\n this.storeUi.saveSearchQuery(search_term);\r\n this.storeUi.setActiveMainNav(this.storeUi.app_interface.active_search_segment);\r\n\r\n const path = \"/search-results\";\r\n const str_search = \"?q=\" + search_term;\r\n\r\n this.props.history.push({\r\n pathname: path,\r\n search: str_search\r\n })\r\n } else {\r\n let sku = this.storeUi.search_results_simple_all[0].sku;\r\n let url = \"/book/\" + sku;\r\n \r\n this.props.history.push({\r\n sku: sku,\r\n pathname: url\r\n })\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n } \r\n }\r\n\r\n handleChangeSegment = (shop) => {\r\n let search_term;\r\n let altShop;\r\n let altShopSearch;\r\n search_term = this.storeUi.search_value;\r\n\r\n switch(shop) {\r\n case 'Alle zelfhulpboeken':\r\n altShop = 'SHOP_SB';\r\n altShopSearch = 'SB';\r\n this.storeUi.setActiveToggleNav(1);\r\n break;\r\n case 'Alle boeken':\r\n altShop = 'SHOP_ALL';\r\n altShopSearch = 'ALL';\r\n this.storeUi.setActiveToggleNav(2);\r\n break;\r\n default: \r\n }\r\n\r\n this.storeGeneral.setShop(altShop);\r\n this.storeGeneral.setActiveShop(altShop);\r\n //this.storeGeneral.setSearchShop(altShopSearch);\r\n \r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.getSearchIntentions(search_term);\r\n this.storeUi.setSearchOverlay(false);\r\n this.storeUi.setSearchInputFocus(false);\r\n \r\n this.storeUi.saveSearchQuery(search_term);\r\n this.storeUi.setActiveMainNav(this.storeUi.app_interface.active_search_segment);\r\n\r\n const path = \"/search-results\";\r\n const str_search = \"?q=\" + search_term;\r\n\r\n this.props.history.push({\r\n pathname: path,\r\n search: str_search\r\n })\r\n }\r\n\r\n handleNav = (page) => {\r\n this.storeGeneral.setShop(\"SHOP_ALL\");\r\n this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n //this.storeGeneral.setSearchShop('ALL');\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n const path = \"/\";\r\n this.props.history.push({\r\n pathname: path\r\n })\r\n }\r\n\r\n hasAlternative = (arr) => {\r\n let hasAlt = 0;\r\n \r\n if (arr !== null && arr[0] && arr[0].response) {\r\n hasAlt = arr[0].response.numFound;\r\n } else {\r\n hasAlt = 1;\r\n }\r\n\r\n return hasAlt;\r\n }\r\n\r\n render() { \r\n return (\r\n <React.Fragment>\r\n {\r\n ((this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own > 0) ||\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb > 0) ||\r\n (this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all > 0 )) &&\r\n <React.Fragment>\r\n <div\r\n className=\"search-overlay__header\"\r\n >\r\n <span>\r\n Andere resultaten in \r\n {this.storeGeneral.searchShop === 'OWN' &&\r\n <span\r\n className=\"search-overlay__header--section\"\r\n >\r\n Boeken eigen uitgeverij\r\n </span>\r\n }\r\n {this.storeGeneral.searchShop === 'SB' &&\r\n <span\r\n className=\"search-overlay__header--section\"\r\n >\r\n Alle zelfhulpboeken\r\n </span>\r\n }\r\n {this.storeGeneral.searchShop === 'ALL' &&\r\n <span\r\n className=\"search-overlay__header--section\"\r\n >\r\n Alle boeken\r\n </span>\r\n }\r\n </span>\r\n <span\r\n className = \"search-counter__link-all --link\"\r\n onClick = {() => this.onSubmit()}\r\n >\r\n {(this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own > 1) &&\r\n <React.Fragment>\r\n Toon alle \r\n {this.storeUi.search_count_own}\r\n resultaten\r\n </React.Fragment>\r\n }\r\n {(this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb > 1) &&\r\n <React.Fragment>\r\n Toon alle \r\n {this.storeUi.search_count_sb}\r\n resultaten\r\n </React.Fragment>\r\n \r\n }\r\n {(this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all > 1) &&\r\n <React.Fragment>\r\n Toon alle \r\n {this.storeUi.search_count_all}\r\n resultaten\r\n </React.Fragment>\r\n \r\n }\r\n\r\n {((this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own === 1) ||\r\n (this.storeGeneral.searchShop === 'SB' &&this.storeUi.search_count_sb === 1) ||\r\n (this.storeGeneral.searchShop === 'ALL' &&this.storeUi.search_count_all === 1)) && \r\n <React.Fragment>\r\n Toon meer over dit boek\r\n </React.Fragment>\r\n }\r\n </span>\r\n </div>\r\n </React.Fragment>\r\n }\r\n \r\n {!this.storeUi.checkFeature('SHOP_ALL') &&\r\n <div>\r\n {((this.storeGeneral.searchShop === 'SB' &&\r\n this.storeUi.search_count_sb !== 0 && this.storeUi.search_count_sb !== null\r\n )) &&\r\n <React.Fragment>\r\n <ul className = \"list--overlay2\">\r\n {this.storeUi.search_results_simple_sb !== null && this.storeUi.search_results_simple_sb.length > 0 && this.storeUi.search_results_simple_sb.map((item,i) => (\r\n i < 10 &&\r\n <SearchOverlayItem\r\n item = {item}\r\n />\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n }\r\n </div>\r\n }\r\n \r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <React.Fragment>\r\n {((this.storeGeneral.searchShop === 'OWN' &&\r\n this.storeUi.search_count_own !== 0 && this.storeUi.search_count_own !== null\r\n )) &&\r\n <React.Fragment>\r\n <ul className = \"list--overlay2\">\r\n {this.storeUi.search_results_simple_own !== undefined && this.storeUi.search_results_simple_own !== null && this.storeUi.search_results_simple_own.length > 0 && this.storeUi.search_results_simple_own.map((item,i) => (\r\n item.sku !== this.storeUi.searchTopItemTitleSku &&\r\n i < 10 &&\r\n <SearchOverlayItem\r\n item = {item}\r\n />\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n }\r\n\r\n {((this.storeGeneral.searchShop === 'SB' &&\r\n this.storeUi.search_count_sb !== 0 && this.storeUi.search_count_sb !== null\r\n )) &&\r\n <React.Fragment>\r\n <ul className = \"list--overlay2\">\r\n {this.storeUi.search_results_simple_sb !== undefined && this.storeUi.search_results_simple_sb !== null && this.storeUi.search_results_simple_sb.length > 0 && this.storeUi.search_results_simple_sb.map((item,i) => (\r\n item.sku !== this.storeUi.searchTopItemTitleSku &&\r\n i < 10 &&\r\n <SearchOverlayItem\r\n item = {item}\r\n />\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n }\r\n\r\n {((this.storeGeneral.searchShop === 'ALL' &&\r\n this.storeUi.search_count_all !== 0 && this.storeUi.search_count_all !== null\r\n )) &&\r\n <React.Fragment>\r\n <ul className = \"list--overlay2\">\r\n {this.storeUi.search_results_simple_all !== undefined && this.storeUi.search_results_simple_all !== null && this.storeUi.search_results_simple_all.length > 0 && this.storeUi.search_results_simple_all.map((item,i) => (\r\n item.sku !== this.storeUi.searchTopItemTitleSku &&\r\n i < 10 &&\r\n <SearchOverlayItem\r\n item = {item}\r\n />\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n } \r\n \r\n {((this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own > 0) ||\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb > 0) ||\r\n (this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all > 0)\r\n ) &&\r\n <div className=\"form-row form-row--buttons\">\r\n <button \r\n className=\"btn btn--primary --search\"\r\n onClick={(e) => this.onSubmit()}\r\n >\r\n {this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_results_simple_own && (\r\n this.storeUi.search_results_simple_own.length > 10\r\n ? 'Toon alle ' + this.storeUi.search_count_own + ' resultaten'\r\n : this.storeUi.search_count_own > 1\r\n ? 'Toon meer informatie over deze ' + this.storeUi.search_count_own + ' resultaten'\r\n : 'Toon meer informatie over dit resultaat'\r\n )}\r\n {this.storeGeneral.searchShop === 'SB' && this.storeUi.search_results_simple_sb && (\r\n this.storeUi.search_results_simple_sb.length > 10\r\n ? 'Toon alle ' + this.storeUi.search_count_sb + ' resultaten'\r\n : this.storeUi.search_count_sb > 1\r\n ? 'Toon meer informatie over deze ' + this.storeUi.search_count_sb + ' resultaten'\r\n : 'Toon meer informatie over dit resultaat'\r\n )}\r\n {this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_results_simple_all && (\r\n this.storeUi.search_results_simple_all.length > 10\r\n ? 'Toon alle ' + this.storeUi.search_count_all + ' resultaten'\r\n : this.storeUi.search_count_all > 1\r\n ? 'Toon meer informatie over deze ' + this.storeUi.search_count_all + ' resultaten'\r\n : 'Toon meer informatie over dit resultaat'\r\n )} \r\n </button>\r\n </div>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchResultOverlay);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookLang from '../../elements/book-lang';\r\nimport BlockBookStock from '../../components/block/block-book-stock';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\n\r\nconst SearchOverlayItemShort = inject(\"stores\") (\r\n observer (\r\n class SearchOverlayItemShort extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let shop;\r\n\r\n if (this.props.intentions) {\r\n shop = await this.storeUi.getShopForSku(this.props.item.sku);\r\n\r\n this.setState({\r\n shop: shop\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n\r\n }\r\n\r\n handleOnClick = (e, result) => {\r\n e.preventDefault();\r\n this.storeUi.setCurrentBook(result.sku);\r\n\r\n if (this.props.shop) {\r\n this.storeGeneral.setActiveShop(this.props.shop);\r\n } else {\r\n this.storeGeneral.setActiveShop(this.state.shop);\r\n }\r\n\r\n if (this.props.shop) {\r\n if (this.props.shop === 'SB') {\r\n this.storeUi.setActiveToggleNav(1);\r\n this.storeGeneral.setActiveShop('SHOP_SB');\r\n }\r\n if (this.props.shop === 'ALL') {\r\n this.storeUi.setActiveToggleNav(2);\r\n this.storeGeneral.setActiveShop('SHOP_ALL');\r\n }\r\n } else {\r\n if (this.state.shop === 'SHOP_SB') {\r\n this.storeUi.setActiveToggleNav(1);\r\n this.storeGeneral.setActiveShop('SHOP_SB');\r\n }\r\n if (this.state.shop === 'SHOP_ALL') {\r\n this.storeUi.setActiveToggleNav(2);\r\n this.storeGeneral.setActiveShop('SHOP_ALL');\r\n }\r\n }\r\n \r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n //url = \"/book/\" + result.sku + \"/\" + id;\r\n url = \"/book/\" + result.sku;\r\n } else {\r\n url = \"/book/\" + result.sku;\r\n }\r\n this.props.history.push({\r\n sku: result.sku,\r\n pathname: url\r\n })\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n\r\n constructAuthor(firstname, prefix, lastname) {\r\n let author = '';\r\n\r\n if (this.props.item.author_firstname) {\r\n author = this.props.item.author_firstname;\r\n if (this.props.item.author_prefix) {\r\n author = author + ' ' + this.props.item.author_prefix;\r\n }\r\n if (this.props.item.author_lastname) {\r\n author = author + ' ' + this.props.item.author_lastname;\r\n }\r\n } else {\r\n if (this.props.item.author_lastname) {\r\n author = this.props.item.author_lastname;\r\n }\r\n if (this.props.item.author_prefix) {\r\n author = this.props.item.author_prefix + ' ' + author;\r\n }\r\n }\r\n\r\n return author;\r\n }\r\n\r\n render() {\r\n return (\r\n <li \r\n className={(this.props.item[\"[elevated]\"] ? \"--elevated\" : \"\") + \" --link\"}\r\n onClick={(e) => this.handleOnClick(e, this.props.item)}\r\n data-content={this.state.elevatedHeader}\r\n >\r\n <div \r\n className=\"search-item\"\r\n >\r\n <div \r\n className=\"search-item__img\"\r\n >\r\n <ImgCover\r\n sku = {this.props.item.sku}\r\n />\r\n </div>\r\n <div \r\n className=\"search-item__data\"\r\n >\r\n <div>\r\n {this.props.item.title &&\r\n <span\r\n className=\"search-item__data--title\"\r\n dangerouslySetInnerHTML={{ __html: utilities.capitalizeTitle(this.props.item.title)}}\r\n />\r\n }\r\n <span\r\n dangerouslySetInnerHTML={{ __html: this.constructAuthor(this.props.item.author_firstname, this.props.item.author_prefix, this.props.item.author_lastname)}}\r\n />\r\n </div>\r\n <div \r\n className=\"search-item__specs\"\r\n >\r\n <ul className=\"block--specs-summary__list\">\r\n <li className=\"block--specs-summary__listitem\">\r\n <BookLang\r\n book = {this.props.item}\r\n />\r\n </li>\r\n </ul>\r\n\r\n </div>\r\n </div>\r\n \r\n </div>\r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchOverlayItemShort);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport SearchOverlayItemShort from './search-overlay-item-short';\r\n\r\nconst SearchResultIntentions = inject(\"stores\") (\r\n observer (\r\n class SearchResultIntentions extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount = () => {\r\n\r\n }\r\n\r\n searchIntention = (searchTerm) => {\r\n this.storeUi.setSearchValue(searchTerm);\r\n } \r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n {this.storeUi.search_intentions.length > 0 &&\r\n <div className=\"search-intentions\">\r\n <div className=\"search-intentions__header\">Of zocht je naar:</div>\r\n <div className=\"search-intentions__results\">\r\n <ul className=\"search-intentions__list\">\r\n {this.storeUi.search_intentions.map((term) => (\r\n term.sku\r\n ? <SearchOverlayItemShort\r\n intentions = {true}\r\n item = {term}\r\n />\r\n : <li \r\n className=\"search-intentions__listitem\" \r\n onClick={(e) => this.searchIntention(term.intention)}\r\n >\r\n {term.sku} {term.intention}\r\n </li>\r\n \r\n ))}\r\n </ul>\r\n </div>\r\n </div>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default SearchResultIntentions;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nconst SearchResultSpellcheck = inject(\"stores\") (\r\n observer (\r\n class SearchResultSpellcheck extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n spellcheck: []\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n this.setState({\r\n spellcheck: this.props.spellcheck\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.spellcheck.length !== this.props.spellcheck.length) {\r\n this.setState({\r\n spellcheck: this.props.spellcheck\r\n })\r\n }\r\n\r\n if (prevProps.searchValue !== this.props.searchValue) {\r\n this.setState({\r\n spellcheck: this.props.spellcheck\r\n })\r\n }\r\n }\r\n\r\n searchIntention = (searchTerm) => {\r\n this.storeUi.setSearchValue(searchTerm);\r\n } \r\n\r\n render() {\r\n return (\r\n <div\r\n className = \"search-overlay__spellcheck\"\r\n >\r\n <React.Fragment>\r\n <div \r\n className = \"search-overlay__spellcheck-header\"\r\n >\r\n Bedoelde je misschien:\r\n </div>\r\n <ul \r\n className = \"search-overlay__spellcheck-list\"\r\n >\r\n {this.state.spellcheck.slice(0, 5).map((item) => (\r\n <li \r\n className = '--link'\r\n onClick={(e) => this.searchIntention(item.word)}\r\n >\r\n {item.word}\r\n </li>\r\n ))}\r\n \r\n </ul>\r\n </React.Fragment>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchResultSpellcheck);\r\n","import React, { PureComponent } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport SearchOverlayItemShort from './search-overlay-item-short';\r\n\r\nconst SearchResultAlternatives = inject(\"stores\") (\r\n observer (\r\n class SearchResultAlternatives extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n results: []\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n onSubmit = () => {\r\n let search_term;\r\n search_term = this.storeUi.search_value;\r\n\r\n //SbC btn in list alternatives\r\n let shop = 'SHOP_ALL';\r\n let segment = 'ALL';\r\n if (this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_sb !== 0) {\r\n shop = 'SHOP_SB';\r\n segment = 'SB';\r\n }\r\n if (this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all !== 0) {\r\n shop = 'SHOP_ALL';\r\n segment = 'ALL';\r\n }\r\n if (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_all !== 0) {\r\n shop = 'SHOP_ALL';\r\n segment = 'ALL';\r\n }\r\n this.storeGeneral.setShop(shop);\r\n this.storeGeneral.setActiveShop(shop);\r\n //this.storeGeneral.setSearchShop(segment);\r\n\r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.getSearchIntentions(search_term);\r\n this.storeUi.setSearchOverlay(false);\r\n this.storeUi.setSearchInputFocus(false);\r\n \r\n this.storeUi.saveSearchQuery(search_term);\r\n this.storeUi.setActiveMainNav(this.storeUi.app_interface.active_search_segment);\r\n\r\n const path = \"/search-results\";\r\n const str_search = \"?q=\" + search_term;\r\n\r\n this.props.history.push({\r\n pathname: path,\r\n search: str_search\r\n })\r\n }\r\n\r\n handleChangeSegment = (shop) => {\r\n let search_term;\r\n let altShop;\r\n let altShopSearch;\r\n search_term = this.storeUi.search_value;\r\n\r\n switch(shop) {\r\n case 'Alle zelfhulpboeken':\r\n altShop = 'SHOP_SB';\r\n altShopSearch = 'SB';\r\n this.storeUi.setActiveToggleNav(1);\r\n break;\r\n case 'Alle boeken':\r\n altShop = 'SHOP_ALL';\r\n altShopSearch = 'ALL';\r\n this.storeUi.setActiveToggleNav(2);\r\n break;\r\n default: \r\n }\r\n\r\n this.storeGeneral.setShop(altShop);\r\n this.storeGeneral.setActiveShop(altShop);\r\n //this.storeGeneral.setSearchShop(altShopSearch);\r\n \r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.getSearchIntentions(search_term);\r\n this.storeUi.setSearchOverlay(false);\r\n this.storeUi.setSearchInputFocus(false);\r\n \r\n this.storeUi.saveSearchQuery(search_term);\r\n this.storeUi.setActiveMainNav(this.storeUi.app_interface.active_search_segment);\r\n\r\n const path = \"/search-results\";\r\n const str_search = \"?q=\" + search_term;\r\n\r\n this.props.history.push({\r\n pathname: path,\r\n search: str_search\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment> \r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <React.Fragment>\r\n {this.storeGeneral.searchShop === 'OWN' && \r\n <React.Fragment>\r\n {(this.storeUi.search_count_own === 0 && this.storeUi.search_count_sb > 1) &&\r\n <React.Fragment>\r\n <span\r\n className = {\"search-overlay__alternatives-header \" + this.props.bemClass}\r\n >\r\n {i18n.t('search.hd_alternatives')}\r\n <span\r\n className = \"--link\"\r\n onClick = {() => this.handleChangeSegment('Alle zelfhulpboeken')}\r\n >\r\n Alle zelfhulpboeken\r\n </span>\r\n </span>\r\n <ul className = \"list--overlay2\">\r\n {this.storeUi.search_results_simple_sb && this.storeUi.search_results_simple_sb.map((item,i) => (\r\n i < 10 &&\r\n this.storeUi.searchTopItemTitleSku !== item.sku &&\r\n <SearchOverlayItemShort\r\n shop = {'SB'}\r\n item = {item}\r\n />\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n }\r\n {(this.storeUi.search_count_own === 0 && this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all > 1) &&\r\n <React.Fragment>\r\n <span\r\n className = {\"search-overlay__alternatives-header \" + this.props.bemClass}\r\n >\r\n {i18n.t('search.hd_alternatives')}\r\n <span\r\n className = \"--link\"\r\n onClick = {() => this.handleChangeSegment('Alle boeken')}\r\n >\r\n Alle boeken:\r\n </span>\r\n </span>\r\n <ul className = \"list--overlay2\">\r\n {this.storeUi.search_results_simple_all && this.storeUi.search_results_simple_all.map((item,i) => (\r\n i < 10 &&\r\n <SearchOverlayItemShort\r\n shop = {'ALL'}\r\n item = {item}\r\n />\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {this.storeGeneral.searchShop === 'SB' && \r\n <React.Fragment>\r\n {(this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all > 1) &&\r\n <React.Fragment>\r\n <span\r\n className = {\"search-overlay__alternatives-header \" + this.props.bemClass}\r\n >\r\n {i18n.t('search.hd_alternatives')}\r\n <span\r\n className = \"--link\"\r\n onClick = {() => this.handleChangeSegment('Alle boeken')}\r\n >\r\n Alle boeken:\r\n </span>\r\n </span>\r\n <ul className = \"list--overlay2\">\r\n {this.storeUi.search_results_simple_all && this.storeUi.search_results_simple_all.map((item,i) => (\r\n i < 10 &&\r\n <SearchOverlayItemShort\r\n shop = {'ALL'}\r\n item = {item}\r\n />\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n } \r\n \r\n {((this.storeGeneral.searchShop === 'OWN' && (this.storeUi.search_count_sb > 0 || this.storeUi.search_count_all > 0)) ||\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_all > 0)\r\n ) &&\r\n <div className=\"form-row form-row--buttons\">\r\n <button \r\n className=\"btn btn--primary --search\"\r\n onClick={(e) => this.onSubmit()}\r\n >\r\n {(this.storeGeneral.searchShop === 'OWN' && \r\n this.storeUi.search_count_sb !== 0) \r\n ? this.storeUi.search_count_sb > 1\r\n ? 'Toon alle ' + this.storeUi.search_count_sb + ' resultaten in Alle zelfhulpboeken'\r\n : 'Toon meer informatie over dit resultaat'\r\n : null\r\n }\r\n {(this.storeGeneral.searchShop === 'OWN' && \r\n this.storeUi.search_count_sb === 0 &&\r\n this.storeUi.search_count_all !== 0) \r\n ? this.storeUi.search_count_all > 1\r\n ? 'Toon alle ' + this.storeUi.search_count_all + ' resultaten in Alle boeken'\r\n : 'Toon meer informatie over dit resultaat'\r\n : null\r\n }\r\n {(this.storeGeneral.searchShop === 'SB' && \r\n this.storeUi.search_count_all !== 0)\r\n ? this.storeUi.search_count_all > 1\r\n ? 'Toon alle ' + this.storeUi.search_count_all + ' resultaten in Alle boeken'\r\n : 'Toon meer informatie over dit resultaat'\r\n : null\r\n } \r\n </button>\r\n </div>\r\n }\r\n \r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchResultAlternatives);\r\n","import React, { PureComponent } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport SearchSelectSegment from './search-select-segment';\r\nimport SearchOverlayItemTop from './search-overlay-item-top';\r\nimport FeedbackNoSearchResultsSuggestion from '../feedback/feedback-no-search-results-suggestion';\r\nimport SearchResultOverlay from './search-result-overlay';\r\nimport SearchResultIntentions from './search-result-intentions';\r\nimport SearchResultSpellcheck from './search-result-spellcheck';\r\nimport SearchResultAlternatives from './search-result-alternatives';\r\n\r\nconst SearchOverlay = inject(\"stores\") (\r\n observer (\r\n class SearchOverlay extends PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.minLength = 5;\r\n\r\n this.state = {\r\n results: [],\r\n shopAlternative: '',\r\n skuAlternative: ''\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let shop;\r\n let section;\r\n let shopAlternative;\r\n let skuAlternative;\r\n let count;\r\n \r\n switch(this.props.searchShop) {\r\n case 'OWN':\r\n shop = 'SHOP_SB';\r\n section = 'sb'; \r\n break;\r\n case 'SB':\r\n shop = 'SHOP_SB';\r\n section = ''; \r\n break;\r\n case 'ALL':\r\n shop = 'SHOP_ALL';\r\n section = ''; \r\n break; \r\n }\r\n\r\n if (this.storeUi.search_input_focus || this.storeUi.search_overlay) {\r\n if (this.props.searchShop === 'OWN') {\r\n\r\n } \r\n\r\n if (this.props.searchShop === 'ALL') {\r\n const searchAlternative = false;\r\n //const results3 = await this.storeUi.getSearchResultsSimple('SHOP_ALL', this.storeUi.search_value, '', this.storeUi.page_view, searchAlternative); \r\n\r\n shopAlternative = 'Alle boeken';\r\n skuAlternative = 'ALL';\r\n this.setState({\r\n shopAlternative: shopAlternative,\r\n skuAlternative: skuAlternative\r\n })\r\n }\r\n } \r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let shop;\r\n let section;\r\n let shopAlternative;\r\n let skuAlternative;\r\n let results;\r\n\r\n if (prevProps.searchInput !== this.props.searchInput || \r\n prevProps.searchInputFocus !== this.props.searchInputFocus || \r\n prevProps.searchShop !== this.props.searchShop) {\r\n\r\n //console.log('SbC suggestions', this.storeUi.search_results_simple_sb)\r\n } \r\n\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n setLayout = () => {\r\n let layoutSearch = 'fullwidth';\r\n\r\n if (this.props.searchShop === 'ALL') {\r\n layoutSearch = 'fullwidth';\r\n } else {\r\n layoutSearch = 'columns';\r\n }\r\n return layoutSearch;\r\n }\r\n\r\n setOverlayRef = (node) => {\r\n this.overlayRef = node;\r\n this.storeUi.setSearchOverlayRef(node);\r\n }\r\n\r\n feedbackShop = (shop) => {\r\n let fb = ' in ';\r\n switch(shop) {\r\n case 'OWN':\r\n fb = fb + 'Boeken eigen uitgeverij';\r\n break;\r\n case 'SB':\r\n fb = fb + 'Zelfhulpboeken';\r\n break;\r\n case 'ALL':\r\n fb = fb + 'Alle boeken';\r\n break;\r\n default: \r\n }\r\n\r\n return fb;\r\n }\r\n\r\n onSubmit = () => {\r\n let search_term;\r\n search_term = this.storeUi.search_value;\r\n\r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.getSearchIntentions(search_term);\r\n this.storeUi.setSearchOverlay(false);\r\n this.storeUi.setSearchInputFocus(false);\r\n \r\n this.storeUi.saveSearchQuery(search_term);\r\n this.storeUi.setActiveMainNav(this.storeUi.app_interface.active_search_segment);\r\n\r\n const path = \"/search-results\";\r\n const str_search = \"?q=\" + search_term;\r\n\r\n this.props.history.push({\r\n pathname: path,\r\n search: str_search\r\n })\r\n }\r\n\r\n // handleChangeSegment = (shop) => {\r\n // let search_term;\r\n // let altShop;\r\n // let altShopSearch;\r\n // search_term = this.storeUi.search_value;\r\n\r\n // switch(shop) {\r\n // case 'Alle zelfhulpboeken':\r\n // altShop = 'SHOP_SB';\r\n // altShopSearch = 'SB';\r\n // this.storeUi.setActiveToggleNav(2);\r\n // break;\r\n // case 'Alle boeken':\r\n // altShop = 'SHOP_ALL';\r\n // altShopSearch = 'ALL';\r\n // this.storeUi.setActiveToggleNav(3);\r\n // break;\r\n // default: \r\n // }\r\n\r\n // this.storeGeneral.setShop(altShop);\r\n // this.storeGeneral.setActiveShop(altShop);\r\n // //this.storeGeneral.setSearchShop(altShopSearch);\r\n \r\n // this.storeUi.setPageView('page', 1);\r\n // this.storeUi.getSearchIntentions(search_term);\r\n // this.storeUi.setSearchOverlay(false);\r\n // this.storeUi.setSearchInputFocus(false);\r\n \r\n // this.storeUi.saveSearchQuery(search_term);\r\n // this.storeUi.setActiveMainNav(this.storeUi.app_interface.active_search_segment);\r\n\r\n // const path = \"/search-results\";\r\n // const str_search = \"?q=\" + search_term;\r\n\r\n // this.props.history.push({\r\n // pathname: path,\r\n // search: str_search\r\n // })\r\n // }\r\n\r\n // handleNav = (page) => {\r\n // this.storeGeneral.setShop(\"SHOP_ALL\");\r\n // this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n // //this.storeGeneral.setSearchShop('ALL');\r\n\r\n // this.storeUi.setSearchOverlay(false);\r\n // const path = \"/\";\r\n // this.props.history.push({\r\n // pathname: path\r\n // })\r\n // }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n {this.storeUi.search_overlay &&\r\n <div \r\n ref={this.setOverlayRef}\r\n className={\"search-overlay\" + ((this.storeUi.search_overlay && (this.storeUi.search_value.trim().length >= 3 || content.searchChars(this.storeUi.search_value.trim()))) ? ' --active' : '')}\r\n >\r\n <div \r\n className = 'search-overlay__columns'\r\n >\r\n <div \r\n className = 'search-overlay__column search-overlay__column--segments'\r\n >\r\n <SearchSelectSegment\r\n //updateSearch = {this.updateSearch}\r\n searchShop = {this.storeGeneral.searchShop}\r\n searchSegment = {this.storeGeneral.searchSegment}\r\n />\r\n </div>\r\n\r\n {(this.storeUi.search_count_sb !== 0 || this.storeUi.search_count_all !== 0) &&\r\n <div \r\n className = 'search-overlay__column search-overlay__column--topitem'\r\n >\r\n <SearchOverlayItemTop\r\n searchValue = {this.storeUi.search_value}\r\n searchTopItemTitle = {this.storeUi.searchTopItemTitle}\r\n searchTopItemTitleSku = {this.storeUi.searchTopItemTitleSku}\r\n searchTopItemScore = {this.storeUi.searchTopItemScore}\r\n items = {this.storeUi.search_results_simple_all}\r\n />\r\n </div>\r\n }\r\n \r\n {/* \r\n SbC solr spelling suggestions\r\n */}\r\n \r\n {this.storeUi.checkFeature('SEARCH_SPELLING') &&\r\n (this.storeUi.search_results_simple_all[0] && this.storeUi.search_value !== this.storeUi.search_results_simple_all[0].sku) &&\r\n <React.Fragment>\r\n {\r\n (\r\n (this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own === 0)\r\n )\r\n ? this.storeUi.search_results_simple_own &&\r\n this.storeUi.search_results_simple_own[0] && \r\n this.storeUi.search_results_simple_own[0].spellcheck && \r\n this.storeUi.search_results_simple_own[0].spellcheck.suggestions && \r\n this.storeUi.search_results_simple_own[0].spellcheck.suggestions[1] && \r\n this.storeUi.search_results_simple_own[0].spellcheck.suggestions[1].suggestion && \r\n <div \r\n className = 'search-overlay__column search-overlay__column--suggestions'\r\n >\r\n <SearchResultSpellcheck\r\n searchValue = {this.storeUi.search_value}\r\n spellcheck = {this.storeUi.search_results_simple_own[0].spellcheck.suggestions[1].suggestion}\r\n />\r\n </div>\r\n : null\r\n } \r\n\r\n {\r\n (\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb === 0)\r\n )\r\n ? this.storeUi.search_results_simple_sb &&\r\n this.storeUi.search_results_simple_sb[0] && \r\n this.storeUi.search_results_simple_sb[0].spellcheck && \r\n this.storeUi.search_results_simple_sb[0].spellcheck.suggestions && \r\n this.storeUi.search_results_simple_sb[0].spellcheck.suggestions[1] && \r\n this.storeUi.search_results_simple_sb[0].spellcheck.suggestions[1].suggestion && \r\n <div \r\n className = 'search-overlay__column search-overlay__column--suggestions'\r\n >\r\n <SearchResultSpellcheck\r\n searchValue = {this.storeUi.search_value}\r\n spellcheck = {this.storeUi.search_results_simple_sb[0].spellcheck.suggestions[1].suggestion}\r\n />\r\n </div>\r\n : null\r\n } \r\n\r\n {\r\n (\r\n (this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all === 0)\r\n )\r\n ? this.storeUi.search_results_simple_all &&\r\n this.storeUi.search_results_simple_all[0] && \r\n this.storeUi.search_results_simple_all[0].spellcheck && \r\n this.storeUi.search_results_simple_all[0].spellcheck.suggestions && \r\n this.storeUi.search_results_simple_all[0].spellcheck.suggestions[1] && \r\n this.storeUi.search_results_simple_all[0].spellcheck.suggestions[1].suggestion && \r\n <div \r\n className = 'search-overlay__column search-overlay__column--suggestions'\r\n >\r\n <SearchResultSpellcheck\r\n searchValue = {this.storeUi.search_value}\r\n spellcheck = {this.storeUi.search_results_simple_all[0].spellcheck.suggestions[1].suggestion}\r\n />\r\n </div>\r\n : null\r\n } \r\n </React.Fragment>\r\n } \r\n\r\n {/* \r\n SbC db suggestions/intentions in column left\r\n */}\r\n {this.storeUi.checkFeature('SEARCH_INTENT') &&\r\n (this.storeUi.search_results_simple_all[0] && this.storeUi.search_value !== this.storeUi.search_results_simple_all[0].sku) &&\r\n <React.Fragment>\r\n {\r\n (\r\n (this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own === 0) ||\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb === 0) ||\r\n (this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all === 0)\r\n )\r\n ? (this.storeUi.search_count_own === 0 && this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all === 0)\r\n ? null\r\n : <SearchResultIntentions\r\n\r\n />\r\n : null\r\n } \r\n </React.Fragment>\r\n } \r\n \r\n {/* \r\n SbC db suggestions/intentions in column right\r\n */}\r\n {this.storeUi.checkFeature('SEARCH_INTENT') &&\r\n (this.storeUi.search_results_simple_all[0] && this.storeUi.search_value !== this.storeUi.search_results_simple_all[0].sku) &&\r\n <React.Fragment>\r\n {\r\n (\r\n (this.storeUi.search_count_own === 0) && (this.storeUi.search_count_sb === 0) && (this.storeUi.search_count_all === 0)\r\n \r\n )\r\n ? <div \r\n className = 'search-overlay__column search-overlay__column--alternatives'\r\n >\r\n <SearchResultIntentions\r\n\r\n />\r\n </div> \r\n : null\r\n }\r\n \r\n {\r\n (\r\n (this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own === 0) &&\r\n (this.storeUi.search_count_sb > 0 || this.storeUi.search_count_all > 0 ) &&\r\n this.storeUi.search_results_simple_all[0] && (this.storeUi.search_value !== this.storeUi.search_results_simple_all[0].sku)\r\n )\r\n ? <div \r\n className = 'search-overlay__column search-overlay__column--alternatives'\r\n >\r\n <SearchResultAlternatives\r\n bemClass = \"--column\"\r\n />\r\n </div>\r\n : null\r\n }\r\n\r\n {\r\n (\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb === 0) &&\r\n this.storeUi.search_count_all > 0 &&\r\n this.storeUi.search_results_simple_all[0] && (this.storeUi.search_value !== this.storeUi.search_results_simple_all[0].sku)\r\n )\r\n ? <div \r\n className = 'search-overlay__column search-overlay__column--alternatives'\r\n >\r\n <SearchResultAlternatives\r\n bemClass = \"--column\"\r\n />\r\n </div>\r\n : null\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {/* \r\n SbC search results for specific isbn \r\n */}\r\n \r\n {this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_all === 1 &&\r\n this.storeUi.search_results_simple_all[0] && (this.storeUi.search_value === this.storeUi.search_results_simple_all[0].sku)\r\n ? <div \r\n className = 'search-overlay__column search-overlay__column--results'\r\n >\r\n <SearchResultAlternatives\r\n bemClass = \"--full\"\r\n />\r\n </div>\r\n : null\r\n }\r\n\r\n {this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_all === 1 &&\r\n this.storeUi.search_results_simple_all[0] && (this.storeUi.search_value === this.storeUi.search_results_simple_all[0].sku)\r\n ? <div \r\n className = 'search-overlay__column search-overlay__column--results'\r\n >\r\n <SearchResultAlternatives\r\n bemClass = \"--full\"\r\n />\r\n </div>\r\n : null\r\n }\r\n \r\n\r\n {/* \r\n SbC search results for selected segment \r\n */}\r\n <div \r\n className = 'search-overlay__column search-overlay__column--results'\r\n >\r\n {\r\n (((this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own > 0 && this.storeUi.searchTopItemTitleSku === '') || (this.storeUi.searchTopItemTitleSku !== '' && this.storeUi.search_count_own > 1)) ||\r\n ((this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb > 0 && this.storeUi.searchTopItemTitleSku === '') || (this.storeUi.searchTopItemTitleSku !== '' && this.storeUi.search_count_sb > 1)) ||\r\n ((this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all > 0 && this.storeUi.searchTopItemTitleSku === '') || (this.storeUi.searchTopItemTitleSku !== '' && this.storeUi.search_count_all > 1)))\r\n ? <div>\r\n <SearchResultOverlay\r\n count = {this.storeUi.search_count_sb}\r\n />\r\n </div>\r\n : null\r\n }\r\n </div>\r\n\r\n {/* \r\n SbC in case no results for all segments\r\n */}\r\n <div \r\n className = 'search-overlay__column search-overlay__column--feedback-tips'\r\n >\r\n {\r\n (this.storeUi.search_count_own === 0 &&\r\n this.storeUi.search_count_sb === 0 &&\r\n this.storeUi.search_count_all === 0) ||\r\n (this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own < 10) ||\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb < 10) ||\r\n (this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all < 10)\r\n ? <div>\r\n <FeedbackNoSearchResultsSuggestion\r\n \r\n />\r\n </div>\r\n : null\r\n }\r\n \r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchOverlay);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {\r\n isBrowser,\r\n isMobile,\r\n isIOS\r\n} from \"react-device-detect\";\r\nimport MetaTags from 'react-meta-tags';\r\nimport queryString from 'query-string';\r\nimport * as rdd from \"react-device-detect\";\r\n\r\nimport * as ui from '../utilities/ui';\r\nimport * as content from '../utilities/content';\r\n\r\nimport SidebarLeft from '../components/grid/sidebar-left';\r\nimport SidebarRight from '../components/grid/sidebar-right';\r\nimport PageHeader from '../elements/page-header';\r\nimport ScrollerTop from '../elements/scroller-top';\r\nimport ButtonBack from '../elements/button-back';\r\nimport BlockBookActions from '../components/block/block-book-actions';\r\nimport SearchOverlay from '../components/search/search-overlay';\r\n//import SearchResultOverlay from '../components/search/search-result-overlay';\r\n\r\nconst Template = inject(\"stores\") (\r\n observer (\r\n class Template extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n icon: '',\r\n isSticky: false\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if (this.props.reset !== false) {\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveCategory('');\r\n }\r\n\r\n this.setNavTab();\r\n\r\n if (this.props.useScroll && this.storeUi.freezeScrolling && this.storeUi.scrollPos !== 0) {\r\n //ui.smoothScrollTo(0, this.storeUi.scrollPos, 500); \r\n window.scrollTo(0, this.storeUi.scrollPos);\r\n } else {\r\n //ui.smoothScrollTo(0, 0, 500); \r\n }\r\n\r\n this.changeFavIcon();\r\n\r\n this.props.sticky && document.addEventListener(\"scroll\", () => {\r\n this.handleScroll();\r\n });\r\n }\r\n\r\n componentDidUpdate = async() => {\r\n let url;\r\n let wk;\r\n let wk_dir;\r\n\r\n const searchString = this.props.location.search;\r\n const params = queryString.parse(searchString);\r\n\r\n if (!params.mailing) {\r\n if (params.view) {\r\n wk = this.props.match.params.week;\r\n wk_dir = await this.constructDir(this.props.match.params.week);\r\n if (params.view === 'pdf') {\r\n url = this.urlAPI + \"/\" + wk_dir + \"/wk\" + wk + \".php?origin=site\";\r\n } else {\r\n url = this.urlAPI + \"/newsletters/newsletter.php?mailing=mailing\" + wk + \"&origin=site\";\r\n }\r\n this.storeUi.openDialogNewsletter(url);\r\n } else {\r\n this.storeUi.closeDialogNewsletter();\r\n }\r\n } else {\r\n if (params.view === 'pdf') {\r\n url = this.urlAPI + \"/mailings/\" + this.storeGeneral.settings_list.latestNewsletter + \".php?origin=site\";\r\n } else {\r\n url = this.urlAPI + \"/newsletters/newsletter.php?mailing=\" + this.storeGeneral.settings_list.tagLatestNewsletter + \"&origin=site\";\r\n }\r\n this.storeUi.openDialogNewsletter(url);\r\n }\r\n\r\n if (!this.props.match.params.tab && \r\n !this.props.noScroll &&\r\n this.props.match.params.view !== 'client') {\r\n //ui.smoothScrollTo(0, 0, 500); \r\n }\r\n\r\n this.changeFavIcon();\r\n\r\n //ui.smoothScrollTo(0, 200, 500); \r\n //window.scrollTo(0, this.storeUi.freezePos);\r\n }\r\n\r\n changeFavIcon = () => {\r\n let link = document.querySelector('link[rel=\"shortcut icon\"]');\r\n \r\n if (!link) {\r\n link = document.createElement('link');\r\n link.id = 'favicon';\r\n link.rel = 'shortcut icon';\r\n document.head.appendChild(link);\r\n link.href = this.urlAPI + \"/public/images/favicon/succesboeken-192x192.png?v=3\";\r\n }\r\n }\r\n\r\n constructDir = async(week) => {\r\n let newsletters;\r\n if (this.storeUi.newsletters.length === 0) {\r\n newsletters = await this.storeUi.getNewsletters();\r\n }\r\n const active_newsletter = this.storeUi.newsletters\r\n .filter(newsletter => newsletter.week === week);\r\n const dir = active_newsletter && active_newsletter[0] && active_newsletter[0].dir;\r\n return dir;\r\n }\r\n\r\n handleScroll = () => {\r\n const position = window.pageYOffset;\r\n\r\n if (this.state.isSticky) {\r\n if (position < 250) {\r\n this.setState({\r\n isSticky: false\r\n })\r\n } \r\n } else { \r\n if ((position >= 250)) {\r\n this.setState({\r\n isSticky: true\r\n })\r\n } \r\n }\r\n }\r\n\r\n setNavTab = () => {\r\n let idx;\r\n let id;\r\n\r\n if (this.props.nav_name) {\r\n const nav_name = this.props.nav_name;\r\n\r\n idx = this.storeUi.main_nav\r\n .findIndex((item) => item.name === this.props.nav_name);\r\n\r\n if (idx > -1) {\r\n this.storeUi.setActiveMainNav(this.storeUi.main_nav[idx].id);\r\n this.storeUi.setActiveSubNav(0);\r\n } else {\r\n idx = this.storeUi.sub_nav\r\n .findIndex((item) => item.name === this.props.nav_name);\r\n id = (idx > -1) ? this.storeUi.sub_nav[idx].id : 0;\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveSubNav(id); \r\n };\r\n } else {\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveSubNav(0); \r\n }\r\n }\r\n \r\n render() {\r\n const class_feature = this.storeUi.checkFeature('SHOP_ALL') ? '--feature-all' : ''\r\n const class_page = this.props.class_page ? this.props.class_page : ''\r\n const pos_top = this.storeUi.app_interface.height_header\r\n\r\n return (\r\n <React.Fragment>\r\n <MetaTags>\r\n {this.storeUi.checkFeature('SHOP_ALL') && this.storeGeneral.shop === 'SHOP_ALL'\r\n ? <React.Fragment>\r\n <title>Succesboeken.nl - Een dag zonder boek ...</title>\r\n <meta property=\"og:title\" content={'Succesboeken.nl - Een dag zonder boek ...'} />\r\n </React.Fragment>\r\n : <React.Fragment>\r\n <title>Succesboeken.nl - De grootste website voor zelfhulpboeken en -producten</title>\r\n <meta property=\"og:title\" content={'Succesboeken.nl - De grootste website voor zelfhulpboeken en -producten'} />\r\n </React.Fragment>\r\n }\r\n </MetaTags>\r\n\r\n {(this.props.type === 'default' || this.props.type === 'custom-authors' || this.props.type === 'error') &&\r\n <div \r\n className={\"content-wrapper\" + ' ' + class_feature}\r\n style = {{marginTop: rdd.isMobile ? 0 : pos_top}}\r\n >\r\n {!this.storeUi.search_overlay && this.props.sticky &&\r\n <div className={\"content-wrapper__segment--sticky\" + (this.state.isSticky ? \" --active\" : \"\")}>\r\n <BlockBookActions\r\n view = {[\"wishlist\", \"cart\"]}\r\n display = {\"full\"}\r\n />\r\n </div>\r\n }\r\n \r\n <SidebarLeft \r\n template = {this.props.type} \r\n />\r\n \r\n <SidebarRight />\r\n \r\n <div className=\"content-wrapper__middle\">\r\n <div className=\"content-wrapper__content\">\r\n {this.props.header &&\r\n <PageHeader\r\n text = {this.props.header}\r\n textCustom = {this.props.headerCustom \r\n ? this.props.headerCustom \r\n : ''\r\n }\r\n personalized = {this.props.personalized}\r\n subtitle = {this.props.subtitle}\r\n />\r\n }\r\n {this.props.children}\r\n </div>\r\n </div>\r\n\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <div \r\n className={\"search-overlay__bg\" + ((this.storeUi.search_overlay && (this.storeUi.search_value.trim().length >= 3 || content.searchChars(this.storeUi.search_value.trim()))) ? ' --active' : '')} \r\n />\r\n }\r\n \r\n <SearchOverlay\r\n searchInput = {this.storeUi.search_value}\r\n searchInputFocus = {this.storeUi.search_input_focus}\r\n inputRef = {this.storeUi.search_inputRef}\r\n searchShop = {this.storeGeneral.searchShop}\r\n />\r\n </div>\r\n }\r\n\r\n {this.props.type === 'single-column' &&\r\n <div \r\n className={\"content-wrapper\" + ' ' + class_feature + ' ' + class_page}\r\n style = {{marginTop: rdd.isMobile ? 0 : pos_top}}\r\n >\r\n <div className=\"content-wrapper__middle\">\r\n <div className=\"content-wrapper__content\">\r\n {this.props.header &&\r\n <PageHeader\r\n text = {this.props.header}\r\n textCustom = {this.props.headerCustom \r\n ? this.props.headerCustom \r\n : ''\r\n }\r\n personalized = {this.props.personalized}\r\n />\r\n } \r\n {this.props.children}\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n {this.props.type !== 'error' && this.props.type !== 'single-column' &&\r\n ((isIOS || isBrowser) && \r\n (this.props.history && this.props.history.location.pathname !== \"/\")) &&\r\n (this.storeUi.templateView !== \"clean\") &&\r\n (!this.storeUi.search_input_focus || !this.storeUi.search_overlay) &&\r\n <ButtonBack />\r\n }\r\n \r\n {(!this.storeUi.search_input_focus || !this.storeUi.search_overlay) &&\r\n <ScrollerTop />\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(Template);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst BlockCatsPopular = inject(\"stores\") (\r\n observer (\r\n class BlockCatsPopular extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {};\r\n }\r\n\r\n componentDidMount = async() => {\r\n const catsPopular = await this.storeBooks.getCategoriesPopular();\r\n\r\n this.setState({\r\n listCategoriesPopular: catsPopular\r\n })\r\n }\r\n\r\n handleOnClickCat = async(cat) => { \r\n let cat_name;\r\n if (this.storeGeneral.shop === 'SHOP_ALL') {\r\n cat_name = cat.category;\r\n } else {\r\n cat_name = cat.name;\r\n }\r\n\r\n if (this.props.shop) {\r\n this.storeGeneral.setActiveShop(this.props.shop);\r\n //SbC depricated??\r\n this.storeGeneral.setShop(this.props.shop);\r\n }\r\n\r\n this.storeUi.setActiveSubCategory(\r\n (cat_name !== this.storeUi.active_category || (cat_name === this.storeUi.active_category && this.storeUi.active_subcategory === '')) ? cat_name : ''\r\n );\r\n if (cat_name !== this.storeUi.active_category ) {\r\n this.storeUi.setActiveCategory(cat_name);\r\n this.storeUi.setPageView('page', 1);\r\n } else {\r\n this.storeUi.setActiveSubCats(cat_name);\r\n }\r\n\r\n let url = \"/category/\" + cat_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n handleGoto = (url) => { \r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"block block--popular\">\r\n <div className=\"block--popular__block-title\">\r\n <div className=\"block--popular__block-title--main\">\r\n <span className=\"blocks__blocks-title--main-section\">Alle boeken</span>\r\n <span \r\n className=\"blocks__blocks-title--main-cat\"\r\n >\r\n {i18n.t(\"block.cats_popular.header\")}\r\n </span>\r\n </div>\r\n </div> \r\n <div className=\"block--popular__content\">\r\n <div className=\"block--popular__content-list\">\r\n <ul className=\"list--cats-popular\">\r\n\r\n {this.state.listCategoriesPopular && this.state.listCategoriesPopular.map((cat) => (\r\n cat.shop.includes(this.storeGeneral.shop) &&\r\n <li \r\n key = {cat.category}\r\n className=\"list--cats-popular__listitem --link\"\r\n onClick={(e) => this.handleOnClickCat(cat)}\r\n >\r\n <div\r\n className=\"list--cats-popular__listitem-bg\" \r\n style={{ backgroundImage: `url('` + this.urlAPI + `/public/images/genres/` + cat.img + `')`}}\r\n />\r\n <div \r\n className=\"list--cats-popular__listitem-fade bg-gradient-textemph\" />\r\n <span \r\n className=\"list--cats-popular__listitem-title\"\r\n dangerouslySetInnerHTML={{ __html: cat.displayValue}}\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n <div \r\n className = \"blocks__list--actions blocks__list--action-icons\"\r\n onClick={(e) => this.handleGoto('/genres')}\r\n >\r\n <div class=\"blocks__list--action\">\r\n <span \r\n className=\"link--read-more\"\r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"block.categories.link_all\")}}\r\n />\r\n <div className=\"paging-forward-wrapper --next\"><div class=\"paging-forward-wrapper__icon\"></div></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockCatsPopular));\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport moment from \"moment\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst BlockLatestUpdate = inject(\"stores\") (\r\n observer (\r\n class BlockLatestUpdate extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n date: ''\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n let now = new Date();\r\n let lastDate = moment(new Date());\r\n let updateDate = moment(lastDate).add(9, 'hours');\r\n \r\n // if (moment(now).isBefore(updateDate)) {\r\n // lastDate = moment(lastDate).add(-1, 'days').format(\"D MMM YYYY\");\r\n // }\r\n\r\n lastDate = moment(updateDate).add(-2, 'days').format(\"D MMM YYYY\");\r\n\r\n this.setState({\r\n date: lastDate\r\n });\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"block block--latest-update\">\r\n Deze website is voor het laatst bijgewerkt op {this.state.date}\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockLatestUpdate);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst IconPreviewCoverPdf = inject(\"stores\") (\r\n observer (\r\n class IconPreviewCoverPdf extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlPublic = process.env.REACT_APP_URL_PUBLIC;\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"book-tools__tool-link book-tools__tool-link--cover\">\r\n <a href={this.urlPublic + \"/public/images/coversGrootPDF/\" + this.props.sku + \".pdf\"}\r\n target=\"_blank\"\r\n className=\"link--pdf\"\r\n >\r\n PDF PREVIEW\r\n </a>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(IconPreviewCoverPdf);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport moment from \"moment\";\r\n\r\nimport BookLang from '../../elements/book-lang';\r\n\r\nconst BlockBookSpecsSummary = inject(\"stores\") (\r\n observer (\r\n class BlockBookSpecsSummary extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n viewTab = (e, tab) => {\r\n this.props.viewTab(e, tab);\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"block block--specs-summary\">\r\n <ul className=\"block--specs-summary__list\">\r\n <li className=\"block--specs-summary__listitem\">\r\n <BookLang\r\n book = {this.props.book}\r\n />\r\n </li>\r\n <li className=\"block--specs-summary__listitem\">{this.props.book.version}</li>\r\n <li className=\"block--specs-summary__listitem\">ISBN: {this.props.book.sku}</li>\r\n {this.props.book.pages > 0 &&\r\n <li className=\"block--specs-summary__listitem\">{this.props.book.pages} pagina's</li>\r\n }\r\n </ul>\r\n {this.props.book.release_date &&\r\n <ul className=\"block--specs-summary__list\">\r\n <li className=\"block--specs-summary__listitem \">Verschijningsdatum: {moment(this.props.book.release_date.date).format(\"DD MMMM YYYY\")}</li>\r\n </ul>\r\n }\r\n <ul className=\"block--specs-summary__list block--specs-summary__list--actions\">\r\n <li>\r\n <div \r\n className=\"blocks__list--actions blocks__list--action-icons\" \r\n >\r\n <div \r\n className=\"blocks__list--action\"\r\n onClick = {(e) => this.viewTab(e, 'description')} \r\n >\r\n <span className=\"link--read-more\">Lees meer</span>\r\n <div className=\"paging-forward-wrapper --down\"><div className=\"paging-forward-wrapper__icon\"></div></div>\r\n </div>\r\n </div>\r\n </li>\r\n <li>\r\n <div \r\n className=\"blocks__list--actions blocks__list--action-icons\" \r\n >\r\n <div \r\n className=\"blocks__list--action\"\r\n onClick = {(e) => this.viewTab(e, 'reviews')} \r\n >\r\n {this.props.nrReviews === 0 \r\n ? <span className=\"link--read-more\">Schrijf een recensie</span>\r\n : <span className=\"link--read-more\">Lees recensies ({this.props.nrReviews})</span>\r\n }\r\n <div className=\"paging-forward-wrapper --down\"><div className=\"paging-forward-wrapper__icon\"></div></div>\r\n </div>\r\n </div>\r\n </li>\r\n <li className=\"block--specs-summary__listitem \">\r\n <div \r\n className=\"blocks__list--actions blocks__list--action-icons\" \r\n >\r\n <div \r\n className=\"blocks__list--action\"\r\n onClick = {(e) => this.viewTab(e, 'specifications')} \r\n >\r\n <span className=\"link--read-more\">Bekijk alle specificaties</span>\r\n <div className=\"paging-forward-wrapper --down\"><div className=\"paging-forward-wrapper__icon\"></div></div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockBookSpecsSummary;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport ReactTooltip from \"react-tooltip\";\r\n\r\nconst DialogTooltip = inject(\"stores\") (\r\n observer (\r\n class DialogTooltip extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const tooltip = await this.storeUi.getTooltip(this.props.sku);\r\n if (tooltip) {\r\n this.setState({\r\n title: tooltip[0].title,\r\n text: tooltip[0].text,\r\n visible: tooltip[0].show_on_sb\r\n })\r\n }\r\n }\r\n\r\n composeTip = () => {\r\n let str = '<span class=\"tooltip__title\">' + this.state.title + '</span>';\r\n str = str + '<span class=\"tooltip__text\">' + this.state.text;\r\n\r\n if (this.props.delivery) {\r\n str = str + ' ' + this.props.delivery;\r\n }\r\n\r\n str = str + '.</span>';\r\n \r\n return str;\r\n }\r\n\r\n render() { \r\n if (this.state.visible === 0 || this.state.visible === '0') {\r\n return null;\r\n } else {\r\n return ( \r\n <React.Fragment>\r\n <div className=\"content__tooltip --link\" \r\n data-tip={this.composeTip()}\r\n >\r\n i\r\n </div>\r\n\r\n <ReactTooltip \r\n type = {\"light\"}\r\n effect = {\"solid\"}\r\n html = {true}\r\n border = {true}\r\n borderColor = {\"#CCC\"}\r\n />\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default DialogTooltip;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport moment from \"moment\";\r\n\r\nconst BookAuthor = inject(\"stores\") (\r\n observer (\r\n class BookAuthor extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let shop;\r\n let count;\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n shop = 'SHOP_ALL';\r\n } else {\r\n shop = 'SHOP_SB';\r\n }\r\n\r\n const str = this.props.author_firstname + ' ' + this.props.author_lastname;\r\n\r\n if (!this.storeUi.search_overlay) {\r\n if (!this.props.is_author_page) {\r\n count = await this.storeUi.returnBookCountForAuthorSimple(shop, str);\r\n } else {\r\n count = await this.storeUi.getBookCountForAuthor('SHOP_ALL', str);\r\n }\r\n }\r\n \r\n this.setState({\r\n count: count\r\n })\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let count;\r\n\r\n if (prevProps.author_firstname !== this.props.author_firstname) {\r\n let shop;\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n shop = 'SHOP_ALL';\r\n } else {\r\n shop = 'SHOP_SB';\r\n }\r\n \r\n const str = this.props.author_firstname + ' ' + this.props.author_lastname;\r\n\r\n if (!this.storeUi.search_overlay) {\r\n if (!this.props.is_author_page) {\r\n count = await this.storeUi.returnBookCountForAuthorSimple(shop, str);\r\n } else {\r\n count = await this.storeUi.getBookCountForAuthor('SHOP_ALL', str);\r\n }\r\n }\r\n \r\n this.setState({\r\n count: count\r\n })\r\n }\r\n }\r\n\r\n constructAuthor = () => {\r\n let author = '';\r\n \r\n author = (this.props.author_firstname && this.props.author_firstname !== null) \r\n ? (this.props.author_firstname + ' ') \r\n : ''\r\n ;\r\n if (this.props.author_prefix && this.props.author_prefix !== null) {\r\n author = author + this.props.author_prefix + ' ';\r\n };\r\n if (this.props.author_lastname && this.props.author_lastname !== null) {\r\n author = author + this.props.author_lastname; \r\n };\r\n\r\n return author;\r\n }\r\n\r\n handleOnClickAuthor = (firstname, lastname) => {\r\n let author = [];\r\n let author_id = 0;\r\n let id = firstname + ' ' + lastname;\r\n\r\n this.storeUi.setPageView('page', 1);\r\n \r\n if (author.length > 0) {\r\n author_id = author[0].id;\r\n this.storeUi.setCurrentAuthor(author_id);\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) { \r\n this.storeBooks.getBooksForAuthor(this.storeUi.page_view, author_id, firstname, lastname, 'SHOP_ALL');\r\n } else {\r\n this.storeBooks.getBooksForAuthor(this.storeUi.page_view, author_id, firstname, lastname, 'SHOP_SB');\r\n }\r\n const url = \"/author/\" + author_id; \r\n this.props.pushHistory(url);\r\n } else {\r\n author = firstname + \" \" + lastname;\r\n this.storeUi.setCurrentAuthor(author);\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) { \r\n this.storeBooks.getBooksForAuthor(this.storeUi.page_view, author, firstname, lastname, 'SHOP_ALL');\r\n } else {\r\n this.storeBooks.getBooksForAuthor(this.storeUi.page_view, author, firstname, lastname, 'SHOP_SB');\r\n }\r\n const url = \"/author/\" + this.constructAuthor(); \r\n this.props.pushHistory(url);\r\n }\r\n }\r\n\r\n checkCurrentAuthor = () => {\r\n const authorPage = this.props.author;\r\n const author = this.props.author_lastname;\r\n\r\n const thisAuthorPage = (authorPage !== undefined && authorPage.includes(author)) ? true : false;\r\n\r\n return thisAuthorPage;\r\n }\r\n \r\n render() {\r\n return (\r\n <React.Fragment>\r\n {(this.state.count > 1 && this.checkCurrentAuthor() === false)\r\n ? <React.Fragment>\r\n {(this.props.str_conn === \"of\" || this.props.str_conn === \"en\") &&\r\n <span className=\"--connector\">\r\n {this.props.str_conn}\r\n </span>\r\n }\r\n <span className=\"--link notranslate\" \r\n onClick={(e) => this.handleOnClickAuthor(this.props.author_firstname, this.props.author_lastname)}\r\n dangerouslySetInnerHTML={{ __html: this.constructAuthor()}}\r\n />\r\n </React.Fragment>\r\n \r\n : this.props.str_conn === \"en\"\r\n ? <React.Fragment>\r\n <span\r\n className=\"--nolink --connector\"\r\n >\r\n {this.props.str_conn}\r\n </span>\r\n <span \r\n className=\"--nolink notranslate\"\r\n dangerouslySetInnerHTML={{ __html: this.constructAuthor()}}\r\n />\r\n </React.Fragment>\r\n : this.props.str_conn !== \"of\" &&\r\n <span \r\n className=\"--nolink notranslate\"\r\n dangerouslySetInnerHTML={{ __html: this.constructAuthor()}}\r\n />\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(BookAuthor);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport moment from \"moment\";\r\n\r\nconst BookTitle = inject(\"stores\") (\r\n observer (\r\n class BookTitle extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n\r\n }\r\n\r\n constructTitle = () => {\r\n let title = this.props.book.title;\r\n let collectionName = '';\r\n let collectionPart = '';\r\n let versionTag = '';\r\n \r\n if (this.props.book.collection_name && this.props.book.collection_name !== null) {\r\n collectionName = this.props.book.collection_name + ': ';\r\n \r\n }\r\n if (this.props.book.collection_part && this.props.book.collection_part !== null) {\r\n collectionPart = ' ' + this.props.book.collection_part;\r\n }\r\n if (this.props.book.version_tag && this.props.book.version_tag !== null) {\r\n versionTag = ' (' + this.props.book.version_tag + ')';\r\n }\r\n\r\n title = collectionName + title + collectionPart + versionTag;\r\n\r\n return title;\r\n }\r\n \r\n render() {\r\n return (\r\n <React.Fragment>\r\n <h1 dangerouslySetInnerHTML={{ __html: this.constructTitle()}} />\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(BookTitle);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nconst BookRanking = inject(\"stores\") (\r\n observer (\r\n class BookRanking extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n ranking: false\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n const ranking = this.findRanking(this.props.sku);\r\n this.setState({\r\n ranking: ranking,\r\n has_ranking: ranking == 0 ? false : true\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.sku !== this.props.sku) {\r\n const ranking = this.findRanking(this.props.sku);\r\n this.setState({\r\n ranking: ranking,\r\n has_ranking: ranking == 0 ? false : true\r\n })\r\n }\r\n }\r\n\r\n findRanking = () => {\r\n const indexOfObject = this.storeBooks.bookList_top60.findIndex((obj) => {\r\n if (obj && obj.sku === this.props.sku) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n return (indexOfObject + 1);\r\n }\r\n\r\n render() {\r\n if (!this.state.ranking || !this.storeUi.checkFeature('SHOP_ALL')) {\r\n return null;\r\n }\r\n\r\n return (\r\n this.state.ranking && this.state.ranking !== 0 &&\r\n <span className=\"list--ranking__ic--rank\">{this.state.ranking}</span>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BookRanking;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst BlockPreviewCoverBack = inject(\"stores\") (\r\n observer (\r\n class BlockPreviewCoverBack extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlPublic = process.env.REACT_APP_URL_PUBLIC;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n hasCoverPng: false,\r\n hasCoverJpg: false,\r\n coverDir: \"CoversAK\"\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n this.checkCovers();\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (prevProps.sku !== this.props.sku) {\r\n this.checkCovers();\r\n }\r\n }\r\n\r\n checkCovers = async() => {\r\n let hasCoverPng = false;\r\n let hasCoverJpg = false;\r\n\r\n const returnPng = await this.storeUi.checkFile(this.props.sku, 'coverBackPng');\r\n if ('error' in returnPng[0]) {\r\n hasCoverPng = false;\r\n } else {\r\n hasCoverPng = true;\r\n }\r\n \r\n if (!hasCoverPng) {\r\n const returnJpg = await this.storeUi.checkFile(this.props.sku, 'coverBackJpg');\r\n if ('error' in returnJpg[0]) {\r\n hasCoverJpg = false;\r\n } else {\r\n hasCoverJpg = true;\r\n }\r\n }\r\n\r\n this.setState({\r\n hasCoverPng: hasCoverPng,\r\n hasCoverJpg: hasCoverJpg,\r\n image: this.urlPublic + \"/public/images/\" + this.state.coverDir + \"/\" + this.props.sku + \".\" + (hasCoverPng ? \"png\" : \"jpg\")\r\n })\r\n }\r\n\r\n handleClick = () => {\r\n const ext = this.state.hasCoverPng \r\n ? \"png\" \r\n : \"jpg\"\r\n\r\n const url = this.urlPublic + \"/public/images/\" + this.state.coverDir + \"/\" + this.props.sku + \".\" + ext;\r\n window.open(url);\r\n }\r\n\r\n handleError = () => {\r\n this.setState({\r\n image: this.urlPublic + \"/public/images/img-not-available.png\"\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n this.state.hasCoverPng || this.state.hasCoverJpg\r\n ? <div \r\n className=\"block-content--book__preview-back --link\"\r\n onClick = {(e) => this.handleClick()}\r\n >\r\n <img \r\n onError={() => this.handleError()} \r\n src={this.state.image} \r\n alt=\"back preview\"\r\n className={(this.props.soldout ? \" --soldout\" : \"\")}\r\n />\r\n <span className=\"circle plus\"></span>\r\n </div>\r\n : null\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockPreviewCoverBack);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst BlockPreviewCoverFront = inject(\"stores\") (\r\n observer (\r\n class BlockPreviewCoverFront extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlPublic = process.env.REACT_APP_URL_PUBLIC;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n hasCoverPng: false,\r\n hasCoverJpg: false,\r\n coverDir: \"CoversVKg-all\"\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n this.checkCovers();\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (prevProps.sku !== this.props.sku) {\r\n this.checkCovers();\r\n }\r\n }\r\n\r\n checkCovers = async() => {\r\n let hasCoverPng = false;\r\n let hasCoverJpg = false;\r\n let coverDir;\r\n\r\n const returnPng = await this.storeUi.checkFile(this.props.sku, 'imgLargePng');\r\n if ('error' in returnPng[0]) {\r\n hasCoverPng = false;\r\n } else {\r\n hasCoverPng = true;\r\n coverDir = \"CoversVKg-all\";\r\n }\r\n \r\n if (!hasCoverPng) {\r\n const returnJpg = await this.storeUi.checkFile(this.props.sku, 'imgLargeJpg');\r\n if ('error' in returnJpg[0]) {\r\n hasCoverJpg = false;\r\n } else {\r\n hasCoverJpg = true;\r\n coverDir = \"CoversVKg\";\r\n }\r\n }\r\n\r\n this.setState({\r\n hasCoverPng: hasCoverPng,\r\n hasCoverJpg: hasCoverJpg,\r\n coverDir: coverDir,\r\n image: this.urlPublic + \"/public/images/\" + coverDir + \"/\" + this.props.sku + \".\" + (hasCoverPng ? \"png\" : \"jpg\")\r\n })\r\n }\r\n\r\n handleClick = () => {\r\n const ext = this.state.hasCoverPng \r\n ? \"png\" \r\n : \"jpg\"\r\n const url = this.urlPublic + \"/public/images/\" + this.state.coverDir + \"/\" + this.props.sku + \".\" + ext;\r\n window.open(url);\r\n }\r\n\r\n handleError = () => {\r\n this.setState({\r\n image: this.urlPublic + \"/public/images/img-not-available.png\"\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n this.state.hasCoverPng || this.state.hasCoverJpg\r\n ? <div \r\n className=\"block-content--book__preview-front --link\"\r\n onClick = {(e) => this.handleClick()}\r\n >\r\n <img \r\n onError={() => this.handleError()} \r\n src={this.state.image} \r\n alt=\"cover preview\"\r\n className={(this.props.soldout ? \" --soldout\" : \"\")}\r\n />\r\n <span className=\"circle plus\"></span>\r\n </div>\r\n : null\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockPreviewCoverFront);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport moment from \"moment\";\r\n\r\nconst BlockNotifications = inject(\"stores\") (\r\n observer (\r\n class BlockNotifications extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n reason: \"\"\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n if (Array.isArray(this.props.notifications)) {\r\n this.props.notifications.map((notification) => {\r\n if (this.props.sku === notification['sku']) {\r\n this.setState({\r\n reason: notification.reason\r\n });\r\n }\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div\r\n className=\"block-content--notification\"\r\n dangerouslySetInnerHTML={{ __html: this.state.reason}}\r\n />\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(BlockNotifications);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport moment from \"moment\";\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport BookPrice from '../../elements/book-price';\r\nimport ImgCover from '../../elements/img-cover';\r\nimport IconPreviewCoverPdf from '../../elements/ic-preview-cover-pdf';\r\nimport BlockBookActions from './block-book-actions';\r\nimport BlockBookSpecsSummary from './block-book-specs-summary';\r\nimport BlockBookStock from './block-book-stock';\r\nimport DialogTooltip from '../../elements/dialog-tooltip';\r\nimport BookAuthor from './book-author';\r\nimport BookTitle from './book-title';\r\nimport BookRanking from '../../elements/book-ranking';\r\nimport BlockPreviewCoverBack from './block-preview-coverback';\r\nimport BlockPreviewCoverFront from './block-preview-coverfront';\r\n//import BlockPreviewPdf from './block-preview-pdf';\r\nimport BlockNotifications from './block-notifications';\r\n\r\n// const controller = new AbortController();\r\n// const { signal } = controller;\r\n\r\nconst BlockBook = inject(\"stores\") (\r\n observer (\r\n class BlockBook extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n count: 0,\r\n redirect: false,\r\n has_cover_pdf: false,\r\n nrReviews: 0\r\n }\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeCatalog = this.props.stores.storeCatalog;\r\n this.storeStock = this.props.stores.storeStock;\r\n this.storeVisuals = this.props.stores.storeVisuals;\r\n }\r\n\r\n componentDidMount = async() => {\r\n let notifications;\r\n let hasNotification = false;\r\n\r\n if (this.props.type === \"productpage\") {\r\n notifications = await this.storeCatalog.getNotifications();\r\n }\r\n \r\n this.getProduct();\r\n\r\n if (this.props.type === \"productpage\") {\r\n if (Array.isArray(notifications)) {\r\n notifications.map((notification) => {\r\n if (this.props.sku === notification['sku']) {\r\n hasNotification = true;\r\n }\r\n })\r\n }\r\n }\r\n\r\n if (this.props.type === \"productpage\") {\r\n const has_pdf = await this.storeUi.checkFile(this.props.sku, 'cover');\r\n\r\n let reviewsList = this.storeBooks.reviewsList;\r\n let nrReviews = 0;\r\n if (reviewsList && reviewsList.length > 0) {\r\n nrReviews = reviewsList.length;\r\n }\r\n\r\n if ('error' in has_pdf[0]) {\r\n this.setState({\r\n sku: this.props.sku,\r\n has_cover_pdf: false,\r\n notifications: notifications,\r\n hasNotification: hasNotification,\r\n nrReviews: nrReviews\r\n })\r\n } else {\r\n this.setState({\r\n sku: this.props.sku,\r\n has_cover_pdf: true,\r\n notifications: notifications,\r\n hasNotification: hasNotification,\r\n nrReviews: nrReviews\r\n })\r\n }\r\n } else {\r\n this.setState({\r\n sku: this.props.sku,\r\n book: this.props.book,\r\n notifications: notifications,\r\n hasNotification: hasNotification\r\n })\r\n }\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n let notifications;\r\n let hasNotification = false;\r\n\r\n if (prevProps.sku !== this.props.sku) {\r\n if (this.props.type === \"productpage\") {\r\n this.getProduct();\r\n const has_pdf = await this.storeUi.checkFile(this.props.sku, 'cover');\r\n\r\n notifications = await this.storeCatalog.getNotifications();\r\n if (Array.isArray(notifications)) {\r\n notifications.map((notification) => {\r\n if (this.props.sku === notification['sku']) {\r\n hasNotification = true;\r\n }\r\n })\r\n }\r\n\r\n if ('error' in has_pdf[0]) {\r\n this.setState({\r\n sku: this.props.sku,\r\n has_cover_pdf: false,\r\n notifications: notifications,\r\n hasNotification: hasNotification,\r\n })\r\n } else {\r\n this.setState({\r\n sku: this.props.sku,\r\n has_cover_pdf: true,\r\n notifications: notifications,\r\n hasNotification: hasNotification,\r\n })\r\n }\r\n } else {\r\n this.getProduct();\r\n this.setState({\r\n sku: this.props.sku\r\n })\r\n }\r\n }\r\n }\r\n\r\n async getProduct() {\r\n let count = 1;\r\n let count2 = 1;\r\n let book = this.props.book;\r\n let shop;\r\n let str;\r\n\r\n if (!this.props.has_details) {\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n shop = 'SHOP_ALL';\r\n } else {\r\n shop = 'SHOP_SB';\r\n }\r\n\r\n shop = await this.storeUi.checkShopForSku(this.props.sku);\r\n\r\n if (this.props.book.media === 'Event') {\r\n shop = 'SHOP_SB';\r\n }\r\n book = await this.storeBooks.returnBookDetailsBySku(shop, this.props.sku);\r\n }\r\n\r\n if (book) {\r\n if (book.author_prefix !== null) {\r\n str = book.author_firstname + ' ' + book.author_prefix + ' ' + book.author_lastname;\r\n } else {\r\n str = book.author_firstname + ' ' + book.author_lastname;\r\n }\r\n if (book.author2_lastname !== null) {\r\n str = book.author2_firstname + ' ' + book.author2_lastname;\r\n }\r\n }\r\n \r\n this.setState({\r\n book: book,\r\n count: count,\r\n count2: count2\r\n })\r\n }\r\n\r\n handleOnClick = (e, sku) => {\r\n if (this.props.match.params.sku !== sku) {\r\n this.storeUi.setCurrentBook(sku);\r\n this.storeBooks.getBookDetailsBySku(sku);\r\n this.setState({\r\n redirect: true\r\n });\r\n }\r\n }\r\n\r\n handleOnClickReplacement = (e, sku) => {\r\n this.storeUi.setCurrentBook(sku);\r\n this.storeBooks.getBookDetailsBySku(sku);\r\n this.setState({\r\n sku: sku,\r\n redirect: this.props.match.params.sku ? false : true\r\n });\r\n\r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n //url = \"/book/\" + sku + \"/\" + id;\r\n url = \"/book/\" + sku;\r\n } else {\r\n url = \"/book/\" + sku;\r\n }\r\n this.props.history.push({\r\n sku: sku,\r\n pathname: url\r\n })\r\n }\r\n\r\n addEllipsis(descr) {\r\n // SbC shorten descr to 200\r\n let descrShort = '';\r\n\r\n if (descr) {\r\n descrShort = descr.substring(0,200);\r\n }\r\n let lastStr = descrShort.split(\" \").pop(\"\");\r\n\r\n // SbC remove last string until space\r\n descrShort = descrShort.substring(0, descrShort.length - lastStr.length )\r\n let correctDescr = descrShort + '...';\r\n\r\n return correctDescr; \r\n }\r\n\r\n pushHistory = (url) => {\r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n let current_book = this.state.book;\r\n let id;\r\n\r\n if (this.state.redirect) {\r\n if (this.state.book.title) {\r\n id = content.formatTitle(this.state.book.title);\r\n }\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n return <Redirect \r\n push to={\"/book/\" + this.props.sku + \"/\" + id} \r\n />;\r\n } else {\r\n return <Redirect \r\n push to={\"/book/\" + this.props.sku} \r\n />;\r\n }\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n {this.props.type === \"productpage\" && this.state.hasNotification &&\r\n <BlockNotifications \r\n sku = {this.props.sku}\r\n notifications = {this.state.notifications}\r\n hasNotification = {this.state.hasNotification}\r\n type = {this.props.type}\r\n />\r\n }\r\n \r\n <div className=\"block-content\">\r\n <div className=\"block-content__column\">\r\n <div className=\"block-content--book__cover\">\r\n <div className=\"cover__wrapper\">\r\n <div \r\n className={\"content\" + (this.props.type !== \"productpage\" ? \" --link\" : \"\")} \r\n onClick={(e) => this.handleOnClick(e, this.props.sku)}\r\n >\r\n <ImgCover\r\n sku = {this.state.sku}\r\n title = {this.state.book && this.state.book.title}\r\n soldout = {(this.state.book && this.storeStock.checkImageCoverTags(this.state.book) === 'soldout') \r\n ? true \r\n : false\r\n }\r\n />\r\n\r\n {this.storeVisuals.getCoverTagBySku('blockBook', this.state.book)}\r\n\r\n {this.props.type !== \"productpage\" && this.storeGeneral.shop === \"SHOP_ALL\" &&\r\n <BookRanking\r\n sku = {this.state.sku}\r\n />\r\n }\r\n {this.props.type === \"productpage\" && this.state.has_cover_pdf &&\r\n <IconPreviewCoverPdf\r\n sku = {this.props.sku}\r\n />\r\n }\r\n </div>\r\n\r\n {/* {this.props.type !== \"productpage\" &&\r\n <BlockPreviewPdf\r\n sku = {this.state.sku}\r\n label = {true}\r\n />\r\n } */}\r\n\r\n {this.props.type === \"productpage\" &&\r\n <div \r\n className={\"block-content--book__preview-covers\" + (this.props.type !== \"productpage\" ? \" --link\" : \"\")} \r\n onClick={(e) => this.handleOnClick(e, this.props.sku)}\r\n > \r\n <BlockPreviewCoverFront \r\n sku = {this.props.sku}\r\n soldout = {(this.state.book && this.storeStock.checkImageCoverTags(this.state.book) === 'soldout') ? true : false}\r\n />\r\n \r\n <BlockPreviewCoverBack \r\n sku = {this.props.sku}\r\n soldout = {(this.state.book && this.storeStock.checkImageCoverTags(this.state.book) === 'soldout') ? true : false}\r\n />\r\n </div>\r\n }\r\n </div> \r\n </div>\r\n </div>\r\n <div className=\"block-content__column\">\r\n {(current_book && current_book.title !== null) && (\r\n this.props.type !== \"summary\"\r\n ? <div \r\n className=\"block-content--book__title\"\r\n >\r\n <BookTitle \r\n book = {current_book}\r\n />\r\n </div>\r\n : <div \r\n className={\"block-content--book__title\" + (this.props.type === \"summary\" ? \" --link\" : '')}\r\n onClick={(e) => this.handleOnClick(e, this.props.sku)}>\r\n <BookTitle \r\n book = {current_book}\r\n />\r\n </div>\r\n )\r\n }\r\n\r\n {/* SbC:: In case book replaced */}\r\n {(current_book && ('alternative' in current_book) && current_book.alternative !== null) &&\r\n <div className=\"block-content--book__subtitle --link --alert\" onClick={(e) => this.handleOnClickReplacement(e, current_book.alternative)}>\r\n {i18n.t(\"content.book_replaced\")} {current_book.alternative}\r\n </div>\r\n }\r\n\r\n {current_book && current_book.subtitle !== null &&\r\n <div className=\"block-content--book__subtitle\" dangerouslySetInnerHTML={{ __html: current_book.subtitle}}>\r\n </div>\r\n }\r\n {current_book && \r\n <React.Fragment>\r\n <div className=\"block-content--book__info--short\">\r\n <div className=\"block-content--book__author\">\r\n {current_book.author_lastname !== '' && current_book.author_lastname !== null &&\r\n <BookAuthor\r\n author = {this.props.author}\r\n author_firstname = {current_book.author_firstname}\r\n author_prefix = {'author_prefix' in current_book ? current_book.author_prefix : ''}\r\n author_lastname = {current_book.author_lastname}\r\n is_author_page = {(this.props.page === 'author' || this.props.type === \"productpage\") ? true : false}\r\n pushHistory = {this.pushHistory}\r\n count = {this.state.count}\r\n />\r\n }\r\n {('author2_lastname' in current_book) && current_book.author2_lastname !== '' && current_book.author2_lastname !== null &&\r\n <React.Fragment>\r\n <BookAuthor\r\n author = {this.props.author}\r\n current_book = {current_book}\r\n author_firstname = {current_book.author2_firstname}\r\n author_prefix = {'author2_prefix' in current_book ? current_book.author2_prefix : ''}\r\n author_lastname = {current_book.author2_lastname}\r\n is_author_page = {(this.props.page === 'author' || this.props.type === \"productpage\") ? true : false}\r\n pushHistory = {this.pushHistory}\r\n str_conn = {(current_book.author_lastname !== '' && current_book.author_lastname !== null) ? \"en\" : \"\"}\r\n count = {this.state.count2}\r\n />\r\n </React.Fragment>\r\n }\r\n {((this.state.count > 1 || this.state.count2 > 1) && this.props.page !== 'author') &&\r\n <span className=\"--link-all\">\r\n (bekijk alles van \r\n {this.state.count > 1 &&\r\n <BookAuthor\r\n author = {this.props.author}\r\n author_firstname = {current_book.author_firstname}\r\n author_prefix = {'author_prefix' in current_book ? current_book.author_prefix : ''}\r\n author_lastname = {current_book.author_lastname}\r\n is_author_page = {(this.props.page === 'author' || this.props.type === \"productpage\") ? true : false}\r\n pushHistory = {this.pushHistory}\r\n count = {this.state.count}\r\n />\r\n }\r\n {current_book.author2_lastname !== '' && current_book.author2_lastname !== null &&\r\n <React.Fragment>\r\n <BookAuthor\r\n author = {this.props.author}\r\n author_firstname = {current_book.author2_firstname}\r\n author_prefix = {'author2_prefix' in current_book ? current_book.author2_prefix : ''}\r\n author_lastname = {current_book.author2_lastname}\r\n is_author_page = {(this.props.page === 'author' || this.props.type === \"productpage\") ? true : false}\r\n pushHistory = {this.pushHistory}\r\n str_conn = {this.state.count > 1 ? \"of\" : \"\"}\r\n count = {this.state.count2}\r\n />\r\n </React.Fragment>\r\n }\r\n ) \r\n </span>\r\n }\r\n </div>\r\n \r\n <div className=\"block-content--book__price\">\r\n {!this.props.hasAlternative\r\n && (current_book && !('alternative' in current_book) || current_book.alternative === null) \r\n && current_book.stock !== 2 \r\n && (current_book.price_incl !== undefined && current_book.price_incl !== null && current_book.price_incl !== 0 && current_book.price_incl !== 99.99) &&\r\n <BookPrice\r\n price = {current_book.price_incl}\r\n />\r\n }\r\n </div>\r\n </div>\r\n\r\n {this.props.type !== \"productpage\" && this.storeUi.page_view.sorting === 'release_date' &&\r\n <div className=\"block-content--compact__subtitle\">\r\n <ul className=\"block--specs-summary__list\"><li className=\"block--specs-summary__listitem \">Verschijningsdatum: {current_book && current_book.release_date && moment(current_book.release_date.date).format('DD MMMM YYYY')}</li></ul>\r\n </div>\r\n }\r\n\r\n {(this.props.type === \"productpage\" || \r\n (this.storeAuth.user.is_loggedin && this.storeAuth.user.is_admin)) &&\r\n <BlockBookSpecsSummary \r\n book = {current_book} \r\n viewTab = {this.props.viewTab}\r\n nrReviews = {this.state.nrReviews}\r\n />\r\n }\r\n\r\n {this.props.type !== \"productpage\" &&\r\n <div className=\"block-content--book__description--short\">\r\n {(current_book && !current_book.description && current_book.short_description) &&\r\n <p dangerouslySetInnerHTML={{ __html: this.addEllipsis(current_book.short_description) }}></p>\r\n }\r\n {(current_book && current_book.description) &&\r\n <p dangerouslySetInnerHTML={{ __html: this.addEllipsis(current_book.description) }}></p>\r\n }\r\n <span className=\"book__read-more --link\" onClick={(e) => this.handleOnClick(e, this.props.sku)}>Lees verder</span>\r\n </div>\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {current_book && !this.props.hasAlternative &&\r\n <React.Fragment>\r\n <BlockBookStock \r\n sku = {current_book.sku}\r\n book = {current_book}\r\n stock_code = {current_book.stock_code}\r\n >\r\n {((current_book.lang && current_book.lang !== 'N') && current_book.stock === 1 && current_book.stock_code !== 21 ) &&\r\n (current_book.price_incl !== undefined && current_book.price_incl !== null && current_book.price_incl !== 0) && \r\n <DialogTooltip\r\n sku = {'tt-delivery-foreign'}\r\n delivery = {current_book.delivery}\r\n />\r\n }\r\n </BlockBookStock>\r\n <div className=\"block-content block-content--actions\"> \r\n <BlockBookActions\r\n sku = {this.props.sku}\r\n book = {current_book}\r\n view = {[\"wishlist\", \"cart\"]}\r\n display = {\"full\"}\r\n />\r\n </div>\r\n </React.Fragment>\r\n }\r\n </div>\r\n </div>\r\n \r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(BlockBook);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Swiper, Slide } from 'react-dynamic-swiper'\r\nimport { withRouter } from \"react-router-dom\";\r\nimport 'swiper/css/swiper.css';\r\nimport sizeMe from 'react-sizeme';\r\n\r\nimport BlockBook from '../block/block-book';\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nconst CarouselNewsletter = inject(\"stores\") (\r\n observer (\r\n class CarouselNewsletter extends Component {\r\n\r\n constructor(props, {size}) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n active_slide: 0\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n setOptions = (swiper) => {\r\n this.swiper = swiper;\r\n this.swiper.slideTo(0);\r\n }\r\n\r\n handleOnClick = (sku) => {\r\n this.storeUi.setCurrentBook(sku);\r\n\r\n const book = this.storeBooks.booksList\r\n .filter((book) => book.sku == sku);\r\n const id = book[0].id;\r\n\r\n this.storeBooks.getBookDetailsBySku(sku);\r\n }\r\n\r\n gotoSlide(slide, sku) {\r\n // if (this.swiper !== null && this.swiper !== undefined) {\r\n // this.swiper.slideTo(slide);\r\n // }\r\n this.handleOnClick(sku);\r\n\r\n const url = \"/book/\" + sku; \r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"carousel--newsletter\">\r\n \r\n <Swiper swiperOptions={{\r\n slidesPerView: 1,\r\n autoHeight: false\r\n }}\r\n {...this.state.options}\r\n onInitSwiper={(swiper, event) => {\r\n this.setOptions(swiper);\r\n }} \r\n >\r\n {this.props.bookList && this.props.bookList.map((book, i) => (\r\n <Slide key={i}>\r\n <div className=\"carousel--newsletter__slide block--book --link\" onClick={(e) => this.handleOnClick(book.sku)}>\r\n <BlockBook \r\n type = \"summary\"\r\n book = {{\r\n id: book.id,\r\n availability: \"available\"\r\n }}\r\n sku = {book.sku}\r\n />\r\n </div>\r\n </Slide>\r\n ))}\r\n </Swiper>\r\n \r\n {/* <div className=\"swiper-pagination--covers\">\r\n {this.props.bookList && this.props.bookList.map((book, i) => (\r\n <div className=\"swiper-pagination--covers__cover\" onClick={() => this.gotoSlide(i, book.sku)}>\r\n <ImgCover\r\n sku = {book.sku}\r\n />\r\n {this.checkOnWishList(book.sku) &&\r\n <div className=\"cover__icon cover__icon--wishlist\"></div>\r\n }\r\n </div>\r\n ))}\r\n </div> */}\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CarouselNewsletter);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as ui from '../utilities/ui';\r\n\r\nconst ButtonPagingBack = inject(\"stores\") (\r\n observer (\r\n class ButtonPagingBack extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n active: true,\r\n btnClass: \"--active\"\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n }\r\n\r\n pagingBack = (btnClass) => {\r\n this.setPage(btnClass);\r\n }\r\n\r\n setPage = (btnClass) => {\r\n let from;\r\n let to;\r\n\r\n if (btnClass === '--active') {\r\n const page = this.props.page - 1;\r\n\r\n if (this.storeUi.page_view.rangeFrom !== 1) {\r\n from = this.storeUi.page_view.rangeFrom - 1;\r\n to = this.storeUi.page_view.rangeTo - 1;\r\n } else {\r\n from = this.storeUi.page_view.rangeFrom;\r\n to = this.storeUi.page_view.rangeTo;\r\n }\r\n\r\n this.storeUi.setPageView('page', page);\r\n this.storeUi.setPageView('rangeFrom', from);\r\n this.storeUi.setPageView('rangeTo', to);\r\n\r\n this.props.setPage();\r\n }\r\n\r\n ui.handleScroll('top');\r\n this.storeUi.setFreezeScrolling(false);\r\n }\r\n\r\n render() { \r\n const btnClass = this.props.page === 1\r\n ? '--inactive'\r\n : '--active'\r\n\r\n return (\r\n <div \r\n className = {\"paging-back-wrapper \" + btnClass} \r\n onClick = {(e) => this.pagingBack(btnClass)}\r\n >\r\n <div className=\"paging-back-wrapper__icon\" />\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(ButtonPagingBack);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as ui from '../utilities/ui';\r\n\r\nconst ButtonPagingFBack = inject(\"stores\") (\r\n observer (\r\n class ButtonPagingFBack extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n active: true,\r\n btnClass: \"--active\"\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n }\r\n\r\n pagingFBack = async(e) => {\r\n this.setPage();\r\n }\r\n\r\n setPage = () => {\r\n let count;\r\n let added = 6;\r\n\r\n let page;\r\n let from;\r\n let to;\r\n\r\n if (this.state.active) {\r\n //SbC check for min\r\n count = this.storeUi.page_view.rangeFrom - 6;\r\n if (count <= 1) {\r\n added = this.storeUi.page_view.rangeFrom;\r\n\r\n page = 1;\r\n from = 1;\r\n to = this.props.displayed;\r\n } else {\r\n page = this.props.page - added;\r\n from = this.storeUi.page_view.rangeFrom - added;\r\n to = this.storeUi.page_view.rangeTo - added;\r\n }\r\n\r\n this.storeUi.setPageView('page', page);\r\n this.storeUi.setPageView('rangeFrom', from);\r\n this.storeUi.setPageView('rangeTo', to);\r\n\r\n this.props.setPage(page);\r\n\r\n if (count >= this.props.pages) {\r\n this.setState({\r\n active: true,\r\n btnClass: \"--active\"\r\n })\r\n }\r\n }\r\n\r\n ui.handleScroll('top');\r\n this.storeUi.setFreezeScrolling(false);\r\n }\r\n\r\n\r\n render() { \r\n //const total = this.storeUi.page_view.total;\r\n let total = this.storeUi.count_total;\r\n const inview = this.storeUi.page_view.inview;\r\n let pages = Math.ceil(parseInt(total) / parseInt(inview));\r\n\r\n const btnClass = this.props.pages < 6 \r\n ? '--inactive' \r\n : this.storeUi.page_view.rangeFrom === 1\r\n ? '--inactive'\r\n : '--active'\r\n\r\n return (\r\n <div \r\n className = {\"paging-back-wrapper \" + btnClass} \r\n onClick = {(e) => this.pagingFBack(e)}\r\n >\r\n <div className=\"paging-back-wrapper__icon\" />\r\n <div className=\"paging-back-wrapper__icon\" />\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(ButtonPagingFBack);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as ui from '../utilities/ui';\r\n\r\nconst ButtonPagingForward = inject(\"stores\") (\r\n observer (\r\n class ButtonPagingForward extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n active: true,\r\n btnClass: \"--active\"\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = (prevProps, prevState) => {\r\n }\r\n\r\n pagingForward = async(btnClass) => {\r\n if (btnClass === '--active') {\r\n this.setPage(btnClass);\r\n }\r\n }\r\n\r\n setPage = (btnClass) => {\r\n let from;\r\n let to;\r\n\r\n //const total = this.storeUi.page_view.total;\r\n const total = this.props.total;\r\n const inview = this.storeUi.page_view.inview;\r\n let pages = Math.ceil(parseInt(total) / parseInt(inview));\r\n\r\n if (btnClass === '--active') {\r\n const page = this.props.page + 1;\r\n\r\n if (this.storeUi.page_view.rangeTo < pages) {\r\n from = this.storeUi.page_view.rangeFrom + 1;\r\n to = this.storeUi.page_view.rangeTo + 1;\r\n } else {\r\n from = this.storeUi.page_view.rangeFrom;\r\n to = this.storeUi.page_view.rangeTo;\r\n }\r\n\r\n this.storeUi.setPageView('page', page);\r\n this.storeUi.setPageView('rangeFrom', from);\r\n this.storeUi.setPageView('rangeTo', to);\r\n\r\n this.props.setPage(page);\r\n }\r\n\r\n ui.handleScroll('top');\r\n this.storeUi.setFreezeScrolling(false);\r\n }\r\n\r\n render() { \r\n //let total = this.storeUi.page_view.total;\r\n let total = this.storeUi.count_total;\r\n \r\n if (this.props.type == 'search') {\r\n if (this.storeGeneral.searchShop == 'OWN') {\r\n total = this.storeUi.search_count_own;\r\n }\r\n if (this.storeGeneral.searchShop == 'SB') {\r\n total = this.storeUi.search_count_sb;\r\n }\r\n if (this.storeGeneral.searchShop == 'ALL') {\r\n total = this.storeUi.search_count_all;\r\n }\r\n }\r\n\r\n const inview = this.storeUi.page_view.inview;\r\n let pages = Math.ceil(parseInt(total) / parseInt(inview));\r\n //let pages = this.props.pages\r\n\r\n const btnClass = (pages > 1 && this.props.page === this.storeUi.page_view.rangeTo && this.props.page === pages) || this.props.page === pages || total === null || pages === 1\r\n ? '--inactive'\r\n : '--active'\r\n\r\n return (\r\n <div \r\n className = {\"paging-forward-wrapper \" + btnClass} \r\n onClick = {(e) => this.pagingForward(btnClass)}\r\n >\r\n <div className=\"paging-forward-wrapper__icon\" />\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(ButtonPagingForward);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as ui from '../utilities/ui';\r\n\r\nconst ButtonPagingFForward = inject(\"stores\") (\r\n observer (\r\n class ButtonPagingFForward extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n active: true,\r\n btnClass: \"--active\"\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n }\r\n\r\n pagingFForward = (btnClass) => {\r\n if (btnClass === '--active') {\r\n this.setPage(btnClass);\r\n }\r\n }\r\n\r\n setPage = (btnClass) => {\r\n let count;\r\n let added = 6;\r\n\r\n if (this.state.active) {\r\n //SbC check for max\r\n count = this.storeUi.page_view.rangeTo + 6;\r\n if (count >= this.props.pages) {\r\n added = this.props.pages - this.storeUi.page_view.rangeTo;\r\n //added = count - this.props.pages;\r\n }\r\n\r\n const page = this.props.page + added;\r\n const from = this.storeUi.page_view.rangeFrom + added;\r\n const to = this.storeUi.page_view.rangeTo + added;\r\n\r\n this.storeUi.setPageView('page', page);\r\n this.storeUi.setPageView('rangeFrom', from);\r\n this.storeUi.setPageView('rangeTo', to);\r\n\r\n this.props.setPage(page);\r\n\r\n if (count >= this.props.pages) {\r\n this.setState({\r\n active: true,\r\n btnClass: \"--active\"\r\n })\r\n }\r\n }\r\n\r\n ui.handleScroll('top');\r\n this.storeUi.setFreezeScrolling(false);\r\n }\r\n\r\n render() { \r\n //let total = this.storeUi.page_view.total;\r\n let total = this.storeUi.count_total;\r\n\r\n if (this.props.type == 'search') {\r\n if (this.storeGeneral.searchShop == 'OWN') {\r\n total = this.storeUi.search_count_own;\r\n }\r\n if (this.storeGeneral.searchShop == 'SB') {\r\n total = this.storeUi.search_count_sb;\r\n }\r\n if (this.storeGeneral.searchShop == 'ALL') {\r\n total = this.storeUi.search_count_all;\r\n }\r\n }\r\n\r\n const inview = this.storeUi.page_view.inview;\r\n let pages = Math.ceil(parseInt(total) / parseInt(inview));\r\n\r\n const btnClass = this.props.pages < 6 \r\n ? '--inactive' \r\n : this.storeUi.page_view.rangeTo === pages\r\n ? '--inactive'\r\n : '--active'\r\n\r\n return (\r\n <div \r\n className = {\"paging-forward-wrapper \" + btnClass} \r\n onClick = {(e) => this.pagingFForward(btnClass)}\r\n >\r\n <div className=\"paging-forward-wrapper__icon\" />\r\n <div className=\"paging-forward-wrapper__icon\" />\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(ButtonPagingFForward);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonPagingBack from '../../elements/button-paging-back';\r\nimport ButtonPagingFBack from '../../elements/button-paging-fback';\r\nimport ButtonPagingForward from '../../elements/button-paging-forward';\r\nimport ButtonPagingFForward from '../../elements/button-paging-fforward';\r\n\r\nconst BlockPaginationPages = inject(\"stores\") (\r\n observer (\r\n class BlockPaginationPages extends Component {\r\n\r\n static defaultProps = {\r\n pageRangeDisplayed: 6,\r\n rangeFrom: 1,\r\n rangeTo: 6\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n rangeFrom: this.props.rangeFrom,\r\n rangeTo: this.props.rangeTo\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeProducts = this.props.stores.storeProducts;\r\n }\r\n\r\n componentDidMount = () => {\r\n this.setState({\r\n page: this.props.page,\r\n total: this.props.total\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.total !== this.props.total) {\r\n this.setState({\r\n total: this.props.total\r\n })\r\n }\r\n if (prevProps.page !== this.props.page) {\r\n this.setState({\r\n page: this.props.page\r\n })\r\n }\r\n }\r\n\r\n // gotoPrev() {\r\n // if (this.state.page > 1 && this.state.page <= this.state.rangeFrom) {\r\n // this.setState({\r\n // rangeFrom: this.state.rangeFrom - 1,\r\n // rangeTo: this.state.rangeTo - 1\r\n // })\r\n // }\r\n // if (this.state.page > 1) {\r\n // this.props.setPage(this.state.page - 1, this.state.rangeFrom - 1, this.state.rangeTo - 1);\r\n // }\r\n // }\r\n\r\n gotoFPrev() {\r\n\r\n }\r\n\r\n // gotoNext(e, pages) {\r\n // if (this.state.page >= this.state.rangeTo && this.state.page < pages) {\r\n // this.setState({\r\n // rangeFrom: this.state.rangeFrom + 1,\r\n // rangeTo: this.state.rangeTo + 1\r\n // })\r\n // }\r\n // this.props.setPage(this.state.page + 1, this.state.rangeFrom + 1, this.state.rangeTo + 1);\r\n // }\r\n\r\n gotoFNext() {\r\n\r\n }\r\n \r\n render() {\r\n const total = this.state.total;\r\n //const total = this.storeUi.count_total;\r\n\r\n const inview = this.storeUi.page_view.inview;\r\n let pages = Math.ceil(parseInt(total) / parseInt(inview));\r\n\r\n // const prevPageLink = (pages > this.props.pageRangeDisplayed && this.state.page !== 1) ? true : false;\r\n // const nextPageLink = (pages > this.props.pageRangeDisplayed && this.state.page !== pages) ? true : false;\r\n \r\n // const fprevPageLink = (pages > this.props.pageRangeDisplayed && this.state.page !== 1) ? true : false;\r\n // const fnextPageLink = (pages > this.props.pageRangeDisplayed && this.state.page !== pages && this.storeUi.page_view.rangeTo < pages) ? true : false; \r\n\r\n const Pages = () => {\r\n let content = [];\r\n\r\n for (let i = 1; i <= pages; i++) {\r\n if (i >= this.storeUi.page_view.rangeFrom && i <= this.storeUi.page_view.rangeTo) {\r\n content.push( \r\n <li \r\n className={\"block--pagination__listitem \" + ((i !== this.storeUi.page_view.page) ? ' --link' : '') + ((i == this.storeUi.page_view.page) ? ' --active' : '') } \r\n onClick={(e) => this.props.setPage(i, this.state.rangeFrom, this.state.rangeTo, this.storeUi.page_view.page)}>{i}</li>\r\n );\r\n }\r\n\r\n \r\n }\r\n return content;\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <li className=\"block--pagination__actions --link\" onClick={(e) => this.gotoFPrev(e)}>\r\n <ButtonPagingFBack\r\n type = {this.props.type}\r\n pages = {pages}\r\n page = {this.state.page}\r\n displayed = {this.props.pageRangeDisplayed}\r\n setPage = {this.props.setRange}\r\n inview = {this.storeUi.page_view.inview}\r\n total = {this.props.total}\r\n />\r\n </li>\r\n\r\n <li className=\"block--pagination__actions --link\">\r\n <ButtonPagingBack\r\n type = {this.props.type}\r\n pages = {pages}\r\n page = {this.state.page}\r\n displayed = {this.props.pageRangeDisplayed}\r\n setPage = {this.props.setRange}\r\n inview = {this.storeUi.page_view.inview}\r\n total = {this.props.total}\r\n />\r\n </li>\r\n \r\n <Pages />\r\n \r\n <li className=\"block--pagination__actions --link\">\r\n <ButtonPagingForward\r\n type = {this.props.type}\r\n pages = {pages}\r\n page = {this.storeUi.page_view.page}\r\n displayed = {this.props.pageRangeDisplayed}\r\n setPage = {this.props.setRange}\r\n inview = {this.storeUi.page_view.inview}\r\n total = {this.props.total}\r\n />\r\n </li>\r\n \r\n <li className=\"block--pagination__actions --link\" onClick={(e) => this.gotoFNext(e, pages)}>\r\n <ButtonPagingFForward\r\n type = {this.props.type}\r\n pages = {pages}\r\n page = {this.state.page}\r\n displayed = {this.props.pageRangeDisplayed}\r\n setPage = {this.props.setRange}\r\n inview = {this.storeUi.page_view.inview}\r\n total = {this.props.total}\r\n />\r\n </li>\r\n \r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockPaginationPages;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport BlockPaginationPages from './block-pagination-pages';\r\n\r\nconst BlockPagination = inject(\"stores\") (\r\n observer (\r\n class BlockPagination extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n total: 0,\r\n inview: 25,\r\n page: 1,\r\n pages: 5\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeProducts = this.props.stores.storeProducts;\r\n\r\n this.views = [10, 25, 50, 100, 250]\r\n }\r\n\r\n componentDidMount = () => { \r\n //const total = this.storeUi.count_total;\r\n //const total = this.storeUi.page_view.total;\r\n const total = this.storeUi.count_total;\r\n const inview = this.storeUi.page_view.inview;\r\n let pages = Math.ceil(total / inview);\r\n this.setState({\r\n total: total,\r\n pages: pages,\r\n page: this.storeUi.page_view.page\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n let total;\r\n if (prevProps.searchShop !== this.props.searchShop) {\r\n if (this.storeGeneral.searchShop === 'OWN') {\r\n total = this.storeUi.search_count_own;\r\n }\r\n if (this.storeGeneral.searchShop === 'SB') {\r\n total = this.storeUi.search_count_sb;\r\n }\r\n if (this.storeGeneral.searchShop === 'ALL') {\r\n total = this.storeUi.search_count_all;\r\n }\r\n\r\n this.setState({\r\n total: total\r\n })\r\n }\r\n if (prevProps.total !== this.props.total) {\r\n this.setState({\r\n total: this.props.total\r\n })\r\n }\r\n if (prevProps.page !== this.props.page) {\r\n this.setState({\r\n page: this.props.page\r\n })\r\n }\r\n }\r\n\r\n setInView = (nr) => {\r\n this.setState({\r\n inview: nr\r\n })\r\n this.storeUi.setPageView('inview', nr);\r\n\r\n if (Math.ceil(this.storeUi.page_view.total/nr) < this.storeUi.page_view.page) {\r\n this.storeUi.setPageView('page', 1);\r\n }\r\n\r\n this.props.setView();\r\n }\r\n\r\n setPage = (nr, from, to, actual) => {\r\n this.setState({\r\n page: nr\r\n })\r\n\r\n if (nr !== actual) {\r\n this.storeUi.setPageView('page', nr);\r\n this.props.setView();\r\n }\r\n\r\n ui.handleScroll('top');\r\n this.storeUi.setFreezeScrolling(false);\r\n }\r\n\r\n setRange = async (nr, from, to) => {\r\n this.props.setView();\r\n }\r\n \r\n render() {\r\n let total = this.state.total;\r\n\r\n if (this.props.type == 'search') {\r\n if (this.storeGeneral.searchShop == 'OWN') {\r\n total = this.storeUi.search_count_own;\r\n }\r\n if (this.storeGeneral.searchShop == 'SB') {\r\n total = this.storeUi.search_count_sb;\r\n }\r\n if (this.storeGeneral.searchShop == 'ALL') {\r\n total = this.storeUi.search_count_all;\r\n }\r\n }\r\n \r\n const inview = this.storeUi.page_view.inview;\r\n let pages = Math.ceil(total / inview);\r\n\r\n return (\r\n <div className={\"block block--pagination\" + (this.props.location === 'top' ? ' block--pagination--top' : '')}>\r\n <div className=\"block--pagination__inview\">\r\n <span>Per pagina: </span>\r\n <ul className=\"block--pagination__list\">\r\n {this.views.map((view) => (\r\n <li className={\"block--pagination__listitem --link\" + ((view == this.storeUi.page_view.inview) ? ' --active' : '')} onClick={(e) => this.setInView(view)}>{view}</li>\r\n ))}\r\n </ul>\r\n </div>\r\n\r\n <div className=\"block--pagination__paging\">\r\n <ul className=\"block--pagination__list\">\r\n <BlockPaginationPages \r\n type = {this.props.type}\r\n total = {this.storeUi.count_total}\r\n pages = {pages}\r\n page = {this.props.page}\r\n setPage = {this.setPage}\r\n setRange = {this.setRange}\r\n />\r\n </ul>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockPagination;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport i18n from \"i18next\";\r\n\r\nconst BlockPreviewPdf = inject(\"stores\") (\r\n observer (\r\n class BlockPreviewPdf extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlPublic = process.env.REACT_APP_URL_PUBLIC;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n hasPdf: false\r\n }\r\n\r\n this.controller = new AbortController();\r\n this.signal = this.controller.signal;\r\n }\r\n\r\n componentDidMount() {\r\n this.setTools();\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.sku !== this.props.sku) {\r\n this.setTools();\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n if (this.controller && this.state.query) {\r\n this.state.query.cancel();\r\n }\r\n }\r\n\r\n async setTools() {\r\n const isbn = this.props.sku;\r\n if (!this.storeUi.search_overlay) {\r\n const q = this.storeUi.checkFileWithAbort(this.props.sku, 'preview', this.controller, this.signal);\r\n\r\n this.setState({\r\n query: q\r\n })\r\n q.then((result) => { \r\n this.setState({\r\n hasPdf: (result.data.length === 0 || 'error' in result.data[0]) ? false : true\r\n })\r\n });\r\n }\r\n }\r\n\r\n handleLinkPdf = (sku) => {\r\n const url = this.urlPublic + \"/public/preview-pdf/\" + sku + \".pdf\";\r\n window.open(url);\r\n }\r\n\r\n render() {\r\n return (this.state.hasPdf\r\n ? <div className=\"book-tools__tool book-tools__tool--pdf\">\r\n <div className=\"book-tools__tool-link book-tools__tool-link--pdf\">\r\n <a href={this.urlPublic + \"/public/preview-pdf/\" + this.props.sku + \".pdf\"}\r\n target=\"_blank\"\r\n className=\"link--pdf\"\r\n />\r\n </div>\r\n {this.props.label &&\r\n <span \r\n className=\"book-tools__tool-title --link\"\r\n onClick={(e) => this.handleLinkPdf(this.props.sku)}\r\n dangerouslySetInnerHTML={{ __html: this.props.labelTxt \r\n ? this.props.labelTxt\r\n : i18n.t(\"book_tools.pdf\")\r\n }}\r\n />\r\n }\r\n </div>\r\n\r\n : null\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockPreviewPdf);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport i18n from \"i18next\";\r\n\r\nimport * as ui from '../../utilities/ui';\r\nimport * as content from '../../utilities/content';\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookPrice from '../../elements/book-price';\r\nimport BlockBookActions from './block-book-actions';\r\nimport BlockPreviewPdf from './block-preview-pdf';\r\nimport BookRanking from '../../elements/book-ranking';\r\n\r\nconst BlockCover = inject(\"stores\") (\r\n observer (\r\n class BlockCover extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.state = {\r\n redirect: false,\r\n has_pdf: false,\r\n has_ranking: false,\r\n ranking: 0\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeStock = this.props.stores.storeStock;\r\n this.storeVisuals = this.props.stores.storeVisuals;\r\n\r\n this.controller = new AbortController();\r\n this.signal = this.controller.signal;\r\n }\r\n\r\n async componentDidMount() {\r\n this.getProduct();\r\n const ranking = this.findRanking(this.props.sku);\r\n this.setState({\r\n ranking: ranking,\r\n has_ranking: ranking == 0 ? false : true\r\n })\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n if (prevProps.sku !== this.props.sku) {\r\n this.getProduct();\r\n const ranking = this.findRanking(this.props.sku);\r\n this.setState({\r\n ranking: ranking,\r\n has_ranking: ranking == 0 ? false : true\r\n })\r\n }\r\n }\r\n\r\n getProduct = async() => {\r\n let book = this.props.book;\r\n\r\n let shop = await this.storeUi.getShopForSku(this.props.sku);\r\n\r\n if (this.props.book.media === 'Event') {\r\n shop = 'SHOP_SB';\r\n }\r\n book = await this.storeBooks.returnBookDetailsBySku(shop, this.props.sku);\r\n\r\n this.setState({\r\n book: book\r\n })\r\n }\r\n\r\n handleOnClick = (e, id, sku) => {\r\n this.storeUi.setCurrentBook(sku);\r\n //SbC DEPRICATED\r\n //this.storeBooks.getBookDetailsBySku(sku);\r\n this.setState({\r\n redirect: true\r\n });\r\n }\r\n\r\n findRanking = (sku) => {\r\n const indexOfObject = this.storeBooks.bookList_top60.findIndex((obj) => {\r\n if (obj && obj.sku === sku) {\r\n return true;\r\n }\r\n return false;\r\n });\r\n return (indexOfObject + 1);\r\n }\r\n \r\n render() {\r\n const book = this.state.book\r\n\r\n if (this.state.book && this.state.redirect) {\r\n const id = content.formatTitle(this.state.book.title);\r\n return <Redirect \r\n push to={\"/book/\" + this.props.sku + \"/\" + id} \r\n />;\r\n }\r\n\r\n let aspectClass;\r\n \r\n if (book) {\r\n const arr = [\"CD\", \"MP3 audio\", \"Audioboek\", \"CD-audio\", \"CD-Rom\", \"CD pack\", \"DVD\"]\r\n const adjustAspect = ui.contains(arr, book.version)\r\n if (adjustAspect) { \r\n aspectClass = '--free';\r\n }\r\n }\r\n\r\n return (\r\n <div className=\"block-content\">\r\n <div className=\"block-content__column\">\r\n <div className=\"block-content--book__cover\">\r\n <div className=\"cover__wrapper\">\r\n <div className=\"content --link\" onClick={(e) => this.handleOnClick(e, this.props.book.id, this.props.sku)}>\r\n <ImgCover\r\n sku = {this.props.sku}\r\n title = {this.props.book.title}\r\n aspect = {aspectClass}\r\n soldout = {(book && this.storeStock.checkImageCoverTags(book) === 'soldout') ? true : false}\r\n />\r\n\r\n {this.storeVisuals.getCoverTagBySku('blockCover', this.state.book)}\r\n\r\n {this.storeGeneral.shop === \"SHOP_ALL\" &&\r\n <BookRanking\r\n sku = {this.props.sku}\r\n />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n {!this.props.actions && this.props.actions !== 'hide' && \r\n <div className=\"block-content--book__cover-info\">\r\n <div className=\"block-content--book__price\">\r\n {/* SbC to prevent lagging in loading book covers */}\r\n {(this.props.page !== 'category' && this.props.page !== 'categorie') &&\r\n <div className=\"block-content--book__preview\">\r\n <BlockPreviewPdf\r\n sku = {this.props.sku}\r\n label = {false}\r\n />\r\n </div>\r\n }\r\n \r\n {(book && book.price_incl !== undefined && book.price_incl !== null && book.price_incl !== 0 && book.price_incl !== 99.99) &&\r\n <BookPrice\r\n price = {book && book.price_incl}\r\n />\r\n }\r\n\r\n <BlockBookActions\r\n sku = {this.props.sku}\r\n book = {this.state.book}\r\n view = {[\"wishlist\", \"cart\"]}\r\n display = {\"icon\"} \r\n />\r\n </div> \r\n </div>\r\n }\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockCover;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport moment from \"moment\";\r\n\r\nimport BookPrice from '../../elements/book-price';\r\nimport BlockBookActions from './block-book-actions';\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BookAuthor from './book-author';\r\nimport BookRanking from '../../elements/book-ranking';\r\n\r\nconst BlockListitem = inject(\"stores\") (\r\n observer (\r\n class BlockListitem extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n redirect: false\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeStock = this.props.stores.storeStock;\r\n this.storeVisuals = this.props.stores.storeVisuals;\r\n }\r\n\r\n async componentDidMount() {\r\n this.getProduct();\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n if (prevProps.sku !== this.props.sku) {\r\n this.getProduct();\r\n }\r\n }\r\n\r\n getProduct = async() => {\r\n let book = this.props.book;\r\n\r\n let shop = await this.storeUi.getShopForSku(this.props.sku);\r\n\r\n if (this.props.book.media === 'Event') {\r\n shop = 'SHOP_SB';\r\n }\r\n book = await this.storeBooks.returnBookDetailsBySku(shop, this.props.sku);\r\n this.setState({\r\n book: book\r\n })\r\n }\r\n\r\n handleOnClick = (e, id, sku) => {\r\n this.storeUi.setCurrentBook(sku);\r\n //this.storeBooks.getBookDetailsBySku(sku);\r\n this.setState({\r\n redirect: true\r\n });\r\n }\r\n \r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/book/\" + this.props.sku} \r\n />;\r\n }\r\n\r\n let current_book = this.state.book;\r\n\r\n return (\r\n <div className=\"block-content block-content--compact\">\r\n <div className=\"block-content--info\">\r\n <div className=\"block-content--compact__image\" onClick={(e) => this.handleOnClick(e, this.props.book.id, this.props.sku)}>\r\n <ImgCover\r\n sku = {this.props.sku}\r\n soldout = {(current_book && this.storeStock.checkImageCoverTags(current_book) === 'soldout') \r\n ? true \r\n : false\r\n }\r\n />\r\n\r\n {this.storeVisuals.getCoverTagBySku('blockListItem', current_book)}\r\n \r\n {this.storeGeneral.shop === \"SHOP_ALL\" &&\r\n <BookRanking\r\n sku = {this.props.sku}\r\n />\r\n }\r\n </div>\r\n <div className=\"block-content--compact__title\" onClick={(e) => this.handleOnClick(e, this.props.book.id, this.props.sku)}>\r\n <span\r\n dangerouslySetInnerHTML={{ __html: current_book && current_book.title}} \r\n />\r\n {current_book && current_book.subtitle !== null &&\r\n <div \r\n className=\"block-content--compact__subtitle\"\r\n dangerouslySetInnerHTML={{ __html: current_book.subtitle}} \r\n />\r\n }\r\n {(this.storeUi.page_view.sorting === 'author_lastname' && (current_book && current_book.author_lastname !== null)) &&\r\n <div className=\"block-content--compact__subtitle\">\r\n <BookAuthor\r\n author = {''}\r\n author_firstname = {current_book ? current_book.author_firstname : ''}\r\n author_prefix = {current_book ? current_book.author_prefix : ''}\r\n author_lastname = {current_book ? current_book.author_lastname : ''}\r\n is_author_page = {false}\r\n pushHistory = {this.pushHistory}\r\n />\r\n </div>\r\n }\r\n {this.storeUi.page_view.sorting === 'release_date' &&\r\n <div className=\"block-content--compact__subtitle\">\r\n Verschijningsdatum: {current_book && current_book.release_date && moment(current_book.release_date.date).format('DD MMMM YYYY')}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n <div className=\"block-content--actions\">\r\n <div className=\"block-content--book__price\">\r\n {(current_book && current_book.price_incl !== undefined && current_book.price_incl !== null && current_book.price_incl !== 0 && current_book.price_incl !== 99.99) &&\r\n <BookPrice\r\n price = {current_book && current_book.price_incl}\r\n />\r\n }\r\n <BlockBookActions\r\n sku = {this.props.sku}\r\n book = {current_book}\r\n view = {[\"wishlist\", \"cart\"]}\r\n display = {\"icon\"} \r\n />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockListitem;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\n\r\nimport BlockBook from '../block/block-book';\r\nimport BlockCover from '../block/block-cover';\r\nimport BlockListitem from '../block/block-listitem';\r\n\r\nconst BlockViews = inject(\"stores\") (\r\n observer (\r\n class BlockViews extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n redirect: false,\r\n view: this.props.view\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n handleOnClick = (e, sku) => {\r\n this.storeUi.setCurrentBook(sku);\r\n this.setState({\r\n redirect: true,\r\n book_sku: sku\r\n });\r\n }\r\n\r\n renderView(view) {\r\n switch(view) {\r\n case \"summaries\":\r\n default:\r\n return <BlockBook \r\n type = \"summary\"\r\n book = {this.props.book}\r\n sku = {this.props.book.sku}\r\n page = {this.props.page}\r\n author = {this.props.author}\r\n has_details = {true}\r\n />;\r\n case \"covers\":\r\n return <BlockCover \r\n book = {this.props.book}\r\n sku = {this.props.book.sku}\r\n page = {this.props.page}\r\n ranking = {this.props.ranking} \r\n /> \r\n case \"list\":\r\n return <BlockListitem \r\n book = {this.props.book}\r\n sku = {this.props.book.sku}\r\n />\r\n }\r\n }\r\n \r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/book/\" + this.state.book_sku} \r\n />;\r\n }\r\n\r\n return (\r\n this.renderView(this.props.view)\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockViews;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport BlockViews from './block-views';\r\n\r\nconst BlocksBookLi = inject(\"stores\") (\r\n observer (\r\n class BlocksBookLi extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n \r\n this.state = {\r\n elevatedHeader: ''\r\n }\r\n\r\n \r\n }\r\n\r\n componentDidMount= async() => {\r\n let elevatedHeader;\r\n\r\n if (this.props.book[\"[elevated]\"]) {\r\n elevatedHeader = await this.getElevatedHeader();\r\n\r\n this.setState({\r\n elevatedHeader: elevatedHeader\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let elevatedHeader;\r\n if (prevProps.book.sku !== this.props.book.sku) {\r\n if (this.props.book[\"[elevated]\"]) {\r\n elevatedHeader = await this.getElevatedHeader();\r\n \r\n this.setState({\r\n elevatedHeader: elevatedHeader\r\n })\r\n }\r\n }\r\n }\r\n\r\n getElevatedHeader = async() => {\r\n let elevatedHeader = 'aanbevolen';\r\n let header = await this.storeUi.getElevatedSku(this.props.book.sku);\r\n \r\n if (header['elevatedHeader'] !== null) {\r\n elevatedHeader = header['elevatedHeader'];\r\n }\r\n \r\n return elevatedHeader;\r\n }\r\n\r\n render() {\r\n return (\r\n <li \r\n className={\"block block--book\" + (this.props.type === 'search' && this.props.book[\"[elevated]\"] ? \" --elevated\" : \"\") + (this.props.book.sku === this.storeGeneral.settings_list.skuSoonAvailable ? \" --soon\" : \"\")} key={this.props.book.sku}\r\n data-content = {this.state.elevatedHeader}\r\n >\r\n <BlockViews \r\n view = {this.props.view}\r\n book = {this.props.book}\r\n page = {this.props.page}\r\n author = {this.props.author}\r\n />\r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlocksBookLi;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nconst LiSort = inject(\"stores\") (\r\n observer (\r\n class LiSort extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n \r\n this.state = {\r\n sorting_dir: 'asc',\r\n sort_class: '',\r\n prev_sort: this.storeUi.page_view.order,\r\n active_class: ''\r\n }\r\n\r\n \r\n }\r\n\r\n componentDidMount= () => {\r\n if (this.props.sorting === this.props.sort) {\r\n this.setState({\r\n sorting_dir: this.state.prev_sort,\r\n active_class: ' --active',\r\n sort_class: this.storeUi.page_view.order === 'asc' ? ' --up' : ' --down'\r\n })\r\n } else {\r\n this.setState({\r\n active_class: '',\r\n sort_class: ''\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.sorting !== this.props.sorting) {\r\n if (this.props.sorting === this.props.sort) {\r\n this.setState({\r\n active_class: ' --active'\r\n })\r\n } else {\r\n this.setState({\r\n active_class: '',\r\n sort_class: ''\r\n })\r\n } \r\n } \r\n }\r\n\r\n handleSort = () => {\r\n this.storeUi.setPageView('page', 1);\r\n \r\n if (this.state.active_class !== '') {\r\n this.setState({\r\n sorting_dir: this.state.sorting_dir === 'asc' ? 'desc' : 'asc',\r\n prev_sort: this.state.sorting_dir === 'asc' ? 'desc' : 'asc',\r\n sort_class: this.state.sorting_dir === 'asc' ? ' --down' : ' --up'\r\n }, () => {\r\n // this.setState({\r\n // sort_class: this.state.prev_sort === 'asc' ? ' --up' : ' --down'\r\n // })\r\n this.props.handleSort(this.props.sort, this.state.sorting_dir)\r\n })\r\n } else {\r\n this.props.handleSort(this.props.sort, this.state.sorting_dir)\r\n this.setState({\r\n sorting_dir: this.state.sorting_dir,\r\n sort_class: this.state.sorting_dir === 'asc' ? ' --up' : ' --down'\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <li className={\"blocks-nav__sortitem blocks-nav__sortitem\" + this.state.sort_class + this.state.active_class} onClick={(e) => this.handleSort()}>\r\n <span>{i18n.t(\"blocks-nav.\" + this.props.sort)}</span>\r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default LiSort;\r\n\r\n","import { runInAction } from 'mobx';\r\nimport React from 'react';\r\n\r\nconst Checkbox = props => {\r\n\r\n let formControl = \"form-control \" + props.className + \" --link\";\r\n let required = props.required ? ' --required' : '';\r\n\r\n return (\r\n <div className={\"form-group form-group--checkbox\" + required}>\r\n <input type=\"checkbox\"\r\n name = {props.name}\r\n value = {props.value}\r\n checked = {props.isSelected}\r\n onChange={props.onCheckboxChange}\r\n className = {'checkbox'}\r\n />\r\n {props.label &&\r\n <React.Fragment>\r\n {typeof props.label === 'object' && \r\n <label \r\n className={formControl}\r\n onClick = {(e) => props.onCheckboxChange()}\r\n >\r\n {props.label}\r\n </label>\r\n }\r\n {typeof props.label !== 'object' && \r\n <label \r\n className={formControl} \r\n onClick = {(e) => props.onCheckboxChange()}\r\n dangerouslySetInnerHTML={{ __html: props.label }} \r\n />\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n );\r\n}\r\n\r\nexport default Checkbox;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nconst LoaderFeedback = inject(\"stores\") (\r\n observer (\r\n class LoaderFeedback extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n }\r\n\r\n render() { \r\n return (\r\n <div className=\"loader__feedback\">\r\n <p \r\n className=\"content--empty\"\r\n dangerouslySetInnerHTML={{ __html: this.storeGeneral.app_interface.feedback_loader}}\r\n />\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <React.Fragment>\r\n {(this.props.type === 'search' && !this.storeUi.search_count && this.storeGeneral.searchShop === 'OWN') &&\r\n <div className=\"content-segment\">\r\n <div className=\"content--empty-segment\">\r\n Of selecteer hierboven <strong>'Alle zelfhulpboeken'</strong> of <strong>'Alle boeken'</strong> om het zoekbereik te vergroten.\r\n </div>\r\n </div>\r\n }\r\n {(this.props.type === 'search' && !this.storeUi.search_count && this.storeGeneral.searchShop === 'SB') &&\r\n <div className=\"content-segment\">\r\n <div className=\"content--empty-segment\">\r\n Of selecteer hierboven <strong>'Alle boeken'</strong> om het zoekbereik te vergroten.\r\n </div>\r\n </div>\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default LoaderFeedback;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport BlockCategory from '../block/block-category';\r\nimport BlockPagination from './block-pagination';\r\nimport BlocksBookLi from './blocks-book-li';\r\nimport LiSort from './block-li-sort';\r\nimport Checkbox from '../../elements/form-input-checkbox';\r\nimport LoaderFeedback from '../../elements/loader-feedback';\r\n\r\nconst BlocksBooks = inject(\"stores\") (\r\n observer (\r\n class BlocksBooks extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeBooksAll = this.props.stores.storeBooksAll;\r\n this.storeProducts = this.props.stores.storeProducts;\r\n this.storeCatalogs = this.props.stores.storeCatalogs;\r\n\r\n this.state = {\r\n view: this.props.default_view ? this.props.default_view : '',\r\n sorting: this.storeUi.page_view.sorting,\r\n sorting_dir: this.storeUi.page_view.order,\r\n formControls: {\r\n stock_priority: {\r\n label: this.props.type === 'search'\r\n ? i18n.t(\"forms.label.stock_priority\")\r\n : i18n.t(\"forms.label.stock_priority_instock\"),\r\n value: this.storeCatalogs.stockPriority,\r\n touched: false,\r\n valid: true\r\n }\r\n },\r\n cat: {},\r\n elevatedHeader: 'aanbevolen'\r\n }\r\n\r\n this.controller = new AbortController();\r\n this.signal = this.controller.signal;\r\n }\r\n\r\n componentDidMount = async() => { \r\n //SbC check if indeed can be ignored\r\n\r\n if (!this.storeUi.freezePaging) {\r\n if (this.props.type == 'category' || this.props.type === 'subcategory' || this.props.type === 'search') {\r\n this.storeUi.setPageView('page', 1);\r\n this.setView();\r\n }\r\n if (this.props.type === 'new') {\r\n this.storeUi.setPageView('page', 1);\r\n this.setView();\r\n }\r\n } else {\r\n this.storeUi.setFreezePaging(false);\r\n //this.setView();\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => { \r\n if (prevProps.type !== this.props.type && this.props.type === 'category') {\r\n this.storeUi.setActiveCategory(this.props.match.params.name);\r\n }\r\n\r\n if (prevProps.blockCat !== this.props.blockCat && this.props.type === 'category') {\r\n this.storeUi.setActiveCategory(this.props.blockCat);\r\n }\r\n\r\n if (prevProps.type !== this.props.type && this.props.type === 'subcategory') {\r\n this.storeUi.setActiveSubCategory(this.props.match.params.name);\r\n }\r\n\r\n if (prevProps.type !== this.props.type) {\r\n this.setState({\r\n type: this.props.type\r\n });\r\n } \r\n \r\n let cat_name = this.props.match.params.name;\r\n if (prevProps.blockCat !== this.props.blockCat || prevProps.subcategory !== this.props.subcategory ) {\r\n const name = 'stock_priority';\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n value: this.storeCatalogs.stockPriority,\r\n selected: this.storeCatalogs.stockPriority ? 1 : 0\r\n }\r\n }\r\n \r\n }, () => this.setView())\r\n }\r\n\r\n if (prevProps.shop !== this.props.shop) {\r\n this.setView();\r\n }\r\n\r\n if (prevProps.author !== this.props.author) {\r\n this.setView();\r\n } \r\n }\r\n\r\n componentWillUnmount = () => {\r\n if (this.props.type === 'subcategory') {\r\n this.state.query && this.state.query.cancel();\r\n }\r\n if (this.props.type === 'category') {\r\n this.state.query && this.state.query.cancel();\r\n }\r\n }\r\n\r\n checkIfInGenre(book) {\r\n let active_genre = this.storeUi.app_interface.active_genre;\r\n \r\n let cats_in_genre = this.storeBooks.connCategoriesGenresList\r\n .filter((conn) => conn.genre_id == active_genre);\r\n let isInGenre = false;\r\n\r\n return isInGenre;\r\n }\r\n\r\n handleBlocksNav = (e, view) => {\r\n this.setState({\r\n view: view\r\n })\r\n this.storeUi.setPageView('view', view)\r\n }\r\n\r\n handleClick = (cat_name) => {\r\n this.storeUi.setActiveSubCategory(''); \r\n this.storeUi.setPageView('page', 1);\r\n\r\n let url = \"/category/\" + cat_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n handleSort = (type, sorting_dir) => {\r\n this.setState({\r\n sorting: type,\r\n sorting_dir: sorting_dir\r\n })\r\n\r\n this.storeUi.setPageView('sorting', type);\r\n this.storeUi.setPageView('order', sorting_dir);\r\n this.setView();\r\n }\r\n\r\n removeSort = () => {\r\n const sorting_dir = 'DESC';\r\n const type = 'ID';\r\n\r\n this.storeUi.setPageView('sorting', type);\r\n this.storeUi.setPageView('order', sorting_dir);\r\n this.setView();\r\n\r\n this.setState({\r\n sorting: 'ID'\r\n })\r\n }\r\n\r\n handleCheckboxChange = (event) => {\r\n const name = 'stock_priority';\r\n\r\n this.storeCatalogs.setStockPriority(!this.state.formControls[name].value);\r\n this.storeUi.setPageView('page', 1);\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n value: !this.state.formControls[name].value,\r\n selected: !this.state.formControls[name].value ? 1 : 0\r\n }\r\n }\r\n \r\n }, () => this.setView())\r\n }\r\n\r\n setView = async() => {\r\n let idx;\r\n let shop;\r\n let mainCats;\r\n let mainCat;\r\n let q;\r\n\r\n const priority = (this.state.formControls.stock_priority.value === 1 || this.state.formControls.stock_priority.value === true) ? 1 : 0; \r\n this.storeUi.setStockPriority(priority);\r\n let cat_name = (this.storeUi.app_interface.active_category_name === undefined) ? this.props.match.params.name : this.storeUi.app_interface.active_category_name;\r\n //const cat_name = this.props.match.params.name;\r\n this.storeUi.setActiveCategory(cat_name);\r\n \r\n if (this.props.type === 'category') { \r\n //this.storeUi.getBookCountForCategory(cat_name);\r\n const count = this.storeUi.returnBookCountForCategorySimple(this.storeGeneral.shop, this.props.blockCat, this.state.formControls.stock_priority.value)\r\n \r\n q = this.storeBooks.getBooksForCategoryWithAbort(cat_name, this.storeUi.page_view, priority, this.controller, this.signal);\r\n q.then((result) => { \r\n this.storeBooks.setBookListCategory(result.data);\r\n });\r\n }\r\n\r\n const breadcrumbs = this.storeCatalogs.getBreadcrumbs();\r\n\r\n if (this.props.type === 'subcategory') {\r\n let subCat = this.props.match.params.name;\r\n\r\n const result = await this.storeUi.checkShopForSubCategory(this.props.match.params.name);\r\n let shop = result.shop;\r\n if (shop === 'SHOP_SB') {\r\n mainCats = await this.storeUi.returnMainCategory('SHOP_SB', subCat);\r\n\r\n if (this.storeCatalogs.activeCategory !== '') {\r\n mainCats.map((cat) => {\r\n if (cat.category === this.storeCatalogs.activeCategory) {\r\n mainCat = cat.category;\r\n this.storeUi.setActiveCategory(mainCat);\r\n }\r\n })\r\n } else {\r\n if (mainCats[0]) {\r\n mainCat = mainCats[0].category;\r\n this.storeUi.setActiveCategory(mainCats[0].category);\r\n }\r\n }\r\n } else {\r\n let mainCatId = result.main_cat;\r\n mainCat = await this.storeUi.getMainCategory(shop, mainCatId);\r\n }\r\n\r\n \r\n const count = await this.storeUi.getBookCountForSubCategory(shop, mainCat, subCat);\r\n this.storeUi.setActiveSubCategory(result.subcategory);\r\n //console.log('SbC check subcat', shop, mainCats, mainCat, subCat, count)\r\n\r\n //SbC should be used in newer version\r\n this.storeCatalogs.setActiveSubCategory(result.subcategory);\r\n this.storeCatalogs.setActiveCount(count);\r\n\r\n q = this.storeBooks.getBooksForSubCategoryWithAbort(mainCat, subCat, this.storeUi.page_view, priority, this.controller, this.signal);\r\n\r\n this.setState({\r\n query: q\r\n })\r\n q.then((result) => { \r\n this.storeBooks.setBookListSubCategory(result.data);\r\n });\r\n } \r\n\r\n if (this.props.type === 'author') {\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n shop = 'SHOP_ALL';\r\n } else {\r\n shop = 'SHOP_SB';\r\n }\r\n this.storeBooks.getBooksForAuthor(this.storeUi.page_view, this.props.match.params.id, '', '', shop); \r\n } \r\n\r\n if (this.props.type === 'search') {\r\n //this.storeUi.getSearchResultsSB(this.storeUi.search_value, this.storeUi.app_interface.active_search_segment, this.storeUi.page_view, '');\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n // if (this.storeGeneral.shop === 'SHOP_ALL') {\r\n // this.storeUi.getSearchResults(this.storeUi.search_value, '', this.storeUi.page_view);\r\n // } else {\r\n // this.storeUi.getSearchResultsSB(this.storeUi.search_value, '', this.storeUi.page_view);\r\n // }\r\n\r\n if (this.storeGeneral.searchShop === 'ALL') {\r\n this.storeUi.getSearchResults(this.storeUi.search_value, '', this.storeUi.page_view);\r\n }\r\n if (this.storeGeneral.searchShop === 'SB') {\r\n this.storeUi.getSearchResultsSB(this.storeUi.search_value, '', this.storeUi.page_view);\r\n }\r\n if (this.storeGeneral.searchShop === 'OWN') {\r\n this.storeUi.getSearchResultsSB(this.storeUi.search_value, 'sb', this.storeUi.page_view);\r\n }\r\n } else {\r\n this.storeUi.getSearchResultsSB(this.storeUi.search_value, '', this.storeUi.page_view);\r\n }\r\n }\r\n\r\n if (this.props.type === 'language') {\r\n if (this.storeUi.active_language !== '') {\r\n idx = this.storeUi.list_languages.findIndex(lang => lang.abbr === this.storeUi.active_language);\r\n } else {\r\n idx = this.storeUi.list_languages.findIndex(lang => lang.display_value === this.props.match.params.lang);\r\n }\r\n this.storeBooks.getBooksForLanguage(this.storeUi.list_languages[idx].query_value, this.storeUi.page_view, priority);\r\n }\r\n\r\n if (this.props.type === 'new') { \r\n const timeframe = this.props.match.params.view; \r\n this.storeBooks.getBooksNew(timeframe, this.storeUi.page_view);\r\n }\r\n\r\n if (this.props.type === 'sb') {\r\n this.storeBooks.getBooks('SHOP_SB', this.storeUi.page_view);\r\n }\r\n\r\n if (this.props.type === 'alternative') {\r\n \r\n }\r\n\r\n if (this.props.type === 'products') {\r\n const priority = (this.state.formControls.stock_priority.value === true) ? 1 : 0; \r\n if (this.props.subgroup === '') {\r\n this.storeProducts.getProductsForCategory(this.storeUi.active_product_group, this.storeUi.page_view, priority);\r\n } else {\r\n this.storeProducts.getProductsForSubGroup(this.storeUi.active_product_group, this.storeUi.active_subgroup, this.storeUi.page_view, priority);\r\n }\r\n ui.handleScroll('top');\r\n }\r\n\r\n this.storeUi.setFreezePaging(false);\r\n \r\n if (!this.storeUi.freezeScrolling) {\r\n ui.handleScroll('top');\r\n }\r\n }\r\n\r\n removeDuplicates = (arr_list) => {\r\n let arr_sku = [];\r\n let list_filtered = [];\r\n const result = arr_list.map(item => {\r\n if (!arr_sku.includes(item.sku)) {\r\n arr_sku.push(item.sku);\r\n list_filtered.push(item);\r\n } \r\n });\r\n return list_filtered;\r\n }\r\n \r\n render() {\r\n const blockCat = (this.props.blockCat) ? this.props.blockCat : this.props.match.params.name;\r\n\r\n //const blockTitle = (this.props.blockTitle) ? this.props.blockTitle : 'Boeken';\r\n // SbC products\r\n const blockTitle = (this.storeUi.active_subgroup == '') ? this.storeUi.active_product_group : this.storeUi.active_subgroup;\r\n const blockSubTitle = (this.storeUi.active_subgroup == '') ? '' : this.storeUi.active_product_group;\r\n\r\n let booksList = [];\r\n let lang;\r\n let idx;\r\n\r\n const author = this.storeBooks.authorsList\r\n .filter((author) => author.id === this.storeUi.app_interface.current_author);\r\n\r\n switch(this.props.type) {\r\n case \"all\":\r\n booksList = this.storeBooks.bookList_all;\r\n break;\r\n case \"author\":\r\n if (this.storeUi.app_interface.current_author === 0) {\r\n booksList = this.storeBooks.booksList;\r\n } else {\r\n booksList = this.storeBooks.authorBooksList\r\n }\r\n break;\r\n case \"author_sb\":\r\n if (this.storeUi.app_interface.current_author === 0) {\r\n booksList = this.storeBooks.booksList;\r\n } else {\r\n booksList = this.storeBooks.authorBooksList\r\n .filter(book => book.sb_edition === \"eigen uitgaven\")\r\n }\r\n break;\r\n case \"category\":\r\n booksList = this.storeBooks.bookList_category\r\n break;\r\n case \"genre\":\r\n if (this.storeUi.app_interface.active_genre === 0) {\r\n booksList = this.storeBooks.booksList;\r\n } else {\r\n booksList = this.storeBooks.booksList\r\n .filter((book) => this.checkIfInGenre(book));\r\n if (this.props.top === true) {\r\n booksList = booksList\r\n .filter((book) => book.top);\r\n } \r\n } \r\n break;\r\n case \"language\":\r\n booksList = this.storeBooks.bookList_language;\r\n if (this.storeUi.active_language !== '') {\r\n idx = this.storeUi.list_languages.findIndex(lang => lang.abbr === this.storeUi.active_language);\r\n } else {\r\n idx = this.storeUi.list_languages.findIndex(lang => lang.display_value === this.props.match.params.lang);\r\n }\r\n lang = this.storeUi.list_languages[idx].display_value;\r\n break;\r\n case \"new\":\r\n booksList = this.storeBooks.bookList_new;\r\n break;\r\n case \"new_this_month\":\r\n booksList = this.storeBooks.bookList_new;\r\n break;\r\n case \"new_this_week\":\r\n booksList = this.storeBooks.bookList_new;\r\n break;\r\n case \"newsletter\":\r\n booksList = this.storeBooks.newsletter_tips;\r\n break;\r\n case \"products\":\r\n booksList = this.storeProducts.list_products;\r\n break;\r\n case \"sb\":\r\n booksList = this.storeBooks.bookList_sb;\r\n break;\r\n case \"search\":\r\n //booksList = this.storeUi.search_results;\r\n if (this.props.searchShop === 'OWN') {\r\n booksList = this.storeUi.search_results_own;\r\n }\r\n if (this.props.searchShop === 'SB') {\r\n booksList = this.storeUi.search_results_sb;\r\n }\r\n if (this.props.searchShop === 'ALL') {\r\n booksList = this.storeUi.search_results_all;\r\n }\r\n break;\r\n case \"alternative\":\r\n if (this.props.searchShop === 'SB') {\r\n booksList = this.storeUi.search_results_sb;\r\n //this.storeUi.setActiveToggleNav(2);\r\n }\r\n if (this.props.searchShop === 'ALL') {\r\n booksList = this.storeUi.search_results_all;\r\n //this.storeUi.setActiveToggleNav(3);\r\n }\r\n break;\r\n case \"subcategory\":\r\n booksList = this.storeBooks.bookList_subcat; \r\n break;\r\n default:\r\n }\r\n\r\n let blockview;\r\n if (this.storeUi.page_view.view && this.storeUi.page_view.view !== '') {\r\n blockview = this.storeUi.page_view.view;\r\n } else {\r\n if (this.state.view == '' ) {\r\n if (booksList !== null && booksList.length < 5) {\r\n blockview = 'summaries'\r\n } else {\r\n blockview = 'covers'\r\n }\r\n } else {\r\n blockview = this.state.view\r\n }\r\n }\r\n\r\n const Li = (view) => {\r\n const activeClass = (view.view === blockview) ? ' --active' : '';\r\n return (\r\n <li className={\"blocks-nav__listitem blocks-nav__listitem--\" + view.view + activeClass} onClick={(e) => this.handleBlocksNav(e, view.view)}>\r\n <span>{view.view}</span>\r\n </li>\r\n )\r\n }\r\n \r\n return (\r\n <div className=\"blocks blocks--books\">\r\n\r\n {(this.props.type === 'category' || \r\n this.props.type === 'subcategory' ||\r\n this.props.type === 'language' ||\r\n this.props.type === 'search') &&\r\n (this.state.sorting === 'ID') &&\r\n <div className=\"block block--stock-priority\">\r\n <Checkbox \r\n name = {\"stock_priority\"} \r\n label = {this.state.formControls[\"stock_priority\"].label}\r\n value = {this.state.formControls[\"stock_priority\"].value}\r\n isSelected = {this.state.formControls[\"stock_priority\"].value}\r\n onCheckboxChange={this.handleCheckboxChange}\r\n className = {\"--reduced\"}\r\n />\r\n </div>\r\n }\r\n\r\n {this.props.type !== 'search' &&\r\n <div className=\"blocks__blocks-title\">\r\n {this.props.type !== 'new' && this.props.type !== 'search' && this.props.type !== 'subcategory' && this.props.blockCat && this.props.blockTitle && blockCat !== '' &&\r\n <React.Fragment>\r\n <span \r\n className = \"blocks__blocks-title--main blocks__blocks-title--main-cat\"\r\n dangerouslySetInnerHTML = {{ __html: this.storeGeneral.shop === 'SHOP_ALL' ? this.storeUi.active_category_display_value : blockCat}}\r\n />\r\n {(this.props.type === 'category' ||\r\n this.props.type === 'language') &&\r\n <span>({this.storeUi.count_total})</span>\r\n }\r\n\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <BlockCategory \r\n type = {this.props.type}\r\n category = {this.storeUi.active_category}\r\n category_name = {this.storeUi.active_category}\r\n cat_active = {this.storeUi.active_category}\r\n subs_active = {this.state.subs_active}\r\n subcategory = {this.props.subcategory}\r\n />\r\n }\r\n </React.Fragment>\r\n } \r\n\r\n {(this.props.type === 'subcategory') &&\r\n <React.Fragment>\r\n {(!this.props.cats_main \r\n || this.props.cats_main.length === 0 \r\n || this.props.cats_main.length === 1\r\n || (typeof this.props.cats_main === 'object' && this.props.cats_main !== null)\r\n ) &&\r\n <React.Fragment>\r\n <span \r\n className = \"blocks__blocks-title--sub --link\"\r\n dangerouslySetInnerHTML = {{ __html: this.storeGeneral.shop === 'SHOP_ALL' ? this.storeUi.active_category_display_value : this.storeUi.active_category}}\r\n onClick = {() => this.handleClick(this.storeUi.active_category)}\r\n />\r\n \r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <BlockCategory \r\n type = {this.props.type}\r\n category = {this.storeUi.active_category}\r\n category_name = {this.storeUi.active_category}\r\n cat_active = {this.storeUi.active_category}\r\n subs_active = {this.state.subs_active}\r\n subcategory = {this.props.subcategory}\r\n />\r\n }\r\n \r\n <span \r\n className=\"blocks__blocks-title--main blocks__blocks-title--main-cat\"\r\n dangerouslySetInnerHTML={{ __html: this.storeGeneral.shop === 'SHOP_ALL' ? this.storeUi.active_subcategory_display_value : this.storeUi.app_interface.active_subcategory_name}}\r\n />\r\n </React.Fragment>\r\n }\r\n\r\n {this.props.cats_main && this.props.cats_main.length > 1 &&\r\n typeof this.props.cats_main !== 'object' &&\r\n <span \r\n className=\"blocks__blocks-title--main\"\r\n dangerouslySetInnerHTML={{ __html: this.storeGeneral.shop === 'SHOP_ALL' ? this.storeUi.active_subcategory_display_value : this.storeUi.app_interface.active_subcategory_name}}\r\n />\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {this.props.type === 'language' &&\r\n <React.Fragment>\r\n <div className=\"blocks__blocks-title\">\r\n <span \r\n className=\"blocks__blocks-title--main-section\"\r\n dangerouslySetInnerHTML={{ __html: 'Anderstalige boeken'}}\r\n />\r\n <span \r\n className=\"blocks__blocks-title--main-cat blocks__blocks-title--main-lang\"\r\n dangerouslySetInnerHTML={{ __html: lang}}\r\n />\r\n <span>\r\n ({this.storeUi.count_total_lang})\r\n </span>\r\n </div> \r\n </React.Fragment>\r\n }\r\n \r\n {(this.props.type === 'subcategory') &&\r\n <React.Fragment>\r\n {/* <span>({this.storeUi.count_total})</span> */}\r\n <span>({this.storeCatalogs.getActiveCount()})</span>\r\n </React.Fragment>\r\n }\r\n\r\n {this.props.type === 'products' &&\r\n <React.Fragment>\r\n <div className=\"blocks__blocks-title\">\r\n {blockSubTitle !== ''\r\n ? <span \r\n className=\"blocks__blocks-title--main-section\"\r\n dangerouslySetInnerHTML={{ __html: blockSubTitle}}\r\n />\r\n : <span \r\n className=\"blocks__blocks-title--main-section\"\r\n dangerouslySetInnerHTML={{ __html: 'Producten'}}\r\n />\r\n }\r\n <span \r\n className=\"blocks__blocks-title--main-cat\"\r\n dangerouslySetInnerHTML={{ __html: blockTitle}}\r\n />\r\n <span>\r\n ({this.storeUi.count_total})\r\n </span>\r\n \r\n </div> \r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <BlockCategory \r\n type = {this.props.type}\r\n category = {this.storeUi.active_category}\r\n category_name = {this.storeUi.active_category}\r\n cat_active = {this.storeUi.active_category}\r\n subs_active = {this.state.subs_active}\r\n subcategory = {this.props.subcategory}\r\n />\r\n }\r\n </React.Fragment>\r\n }\r\n </div> \r\n }\r\n\r\n {((this.props.type === 'author_sb' && this.props.blockTitle) \r\n || (this.props.type === 'author' && this.props.blockTitle)) &&\r\n booksList.length > 0 &&\r\n <div className=\"blocks__blocks-title\">\r\n <span className=\"blocks__blocks-title--main\">{this.props.blockTitle}</span>\r\n </div> \r\n }\r\n\r\n <div className=\"blocks__content\">\r\n {/* {(this.props.type === 'category' || \r\n this.props.type === 'subcategory' ||\r\n this.props.type === 'language' ||\r\n this.props.type === 'search') &&\r\n (this.state.sorting === 'ID') &&\r\n <div className=\"block block--stock-priority\">\r\n <Checkbox \r\n name = {\"stock_priority\"} \r\n label = {this.state.formControls[\"stock_priority\"].label}\r\n value = {this.state.formControls[\"stock_priority\"].value}\r\n isSelected = {this.state.formControls[\"stock_priority\"].value}\r\n onCheckboxChange={this.handleCheckboxChange}\r\n className = {\"--reduced\"}\r\n />\r\n </div>\r\n } */}\r\n\r\n {booksList && booksList.length > 0\r\n ? <React.Fragment> \r\n <div className=\"blocks__filters\">\r\n <div className={\"blocks__nav\" + (this.props.type === 'search' ? \" blocks__nav--top\" : \"\")}>\r\n <div className=\"blocks__nav-actions\">\r\n <div className=\"blocks-nav__list --column\">\r\n {(this.props.type === 'category' || \r\n this.props.type === 'subcategory' || \r\n this.props.type === 'products' || \r\n this.props.type === 'search' || \r\n this.props.type === 'language' || \r\n this.props.type === 'new' || \r\n this.props.type === 'author' ||\r\n this.props.type === 'sb') &&\r\n <ul className=\"blocks-nav__list--sort\">\r\n <li>Sorteer op:</li>\r\n <LiSort \r\n sort = 'title'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n <LiSort \r\n sort = 'price_incl'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n {this.props.type !== 'author' && this.props.type !== 'author_sb' &&\r\n <LiSort \r\n sort = 'author_lastname'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n }\r\n <LiSort \r\n sort = 'release_date'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n </ul> \r\n } \r\n {this.state.sorting !== 'ID' &&\r\n <span className=\"blocks-nav__list--unsort --link\" onClick={(e) => this.removeSort()}>Verwijder sortering</span>\r\n }\r\n </div>\r\n <div className=\"blocks-nav__list\">\r\n <ul className=\"blocks-nav__list--view\">\r\n <Li \r\n view = 'summaries'\r\n />\r\n <Li \r\n view = 'covers'\r\n />\r\n <Li \r\n view = 'list'\r\n />\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {(this.props.type === 'author' || \r\n this.props.type === 'category' || \r\n this.props.type === 'subcategory' || \r\n this.props.type === 'products' || \r\n this.props.type === 'new' || \r\n this.props.type === 'search' || \r\n this.props.type === 'language' ||\r\n this.props.type === 'sb') &&\r\n <BlockPagination \r\n searchShop = {this.storeGeneral.searchShop}\r\n type = {this.props.type}\r\n setView = {this.setView}\r\n total = {this.state.type == 'search' \r\n ? this.storeUi.search_count \r\n : this.storeUi.count_total\r\n }\r\n page = {this.storeUi.page_view.page}\r\n location = {this.props.type === 'search' ? 'top' : ''}\r\n />\r\n }\r\n </div>\r\n\r\n {/* {(this.props.type === 'category' || \r\n this.props.type === 'subcategory' ||\r\n this.props.type === 'language' ||\r\n this.props.type === 'search') &&\r\n (this.state.sorting === 'ID') &&\r\n <div className=\"block block--stock-priority\">\r\n <Checkbox \r\n name = {\"stock_priority\"} \r\n label = {this.state.formControls[\"stock_priority\"].label}\r\n value = {this.state.formControls[\"stock_priority\"].value}\r\n isSelected = {this.state.formControls[\"stock_priority\"].value}\r\n onCheckboxChange={this.handleCheckboxChange}\r\n className = {\"--reduced\"}\r\n />\r\n </div>\r\n } */}\r\n\r\n <ul className={\"blocks__list blocks__list--\" + blockview + \" blocks__list--\" + this.props.type}>\r\n {booksList.map((book, i) => ( \r\n book !== undefined &&\r\n <React.Fragment>\r\n {/* <li \r\n className={\"block block--book\" + (this.props.type === 'search' && book[\"[elevated]\"] ? \" --elevated\" : \"\") + (book.sku === this.storeGeneral.settings_list.skuSoonAvailable ? \" --soon\" : \"\")} key={book.sku}\r\n >\r\n <BlockViews \r\n view = {blockview}\r\n book = {book}\r\n page = {this.props.page}\r\n author = {this.props.author}\r\n />\r\n </li> */}\r\n <BlocksBookLi \r\n type = {this.props.type }\r\n view = {blockview}\r\n book = {book}\r\n page = {this.props.page}\r\n author = {this.props.author}\r\n />\r\n </React.Fragment>\r\n ))}\r\n </ul>\r\n\r\n {(this.props.type == 'author' || \r\n this.props.type == 'category' || \r\n this.props.type == 'subcategory' || \r\n this.props.type == 'products' || \r\n this.props.type === 'new' || \r\n this.props.type === 'search' || \r\n this.props.type === 'language' ||\r\n this.props.type === 'sb') &&\r\n <BlockPagination \r\n searchShop = {this.storeGeneral.searchShop}\r\n type = {this.props.type}\r\n setView = {this.setView}\r\n total = {this.state.type == 'search' \r\n ? this.storeUi.search_count \r\n : this.storeUi.count_total\r\n }\r\n page = {this.storeUi.page_view.page}\r\n />\r\n }\r\n </React.Fragment>\r\n : <React.Fragment>\r\n {this.props.type === \"author\" || this.props.type === \"author_sb\"\r\n ? <React.Fragment>\r\n {this.props.type === \"author\" && this.storeBooks.authorBooksList.findIndex(book => book.sb_edition === \"eigen uitgaven\") === -1 &&\r\n <p className=\"content--empty\">Er zijn momenteel geen boeken van {this.props.author} beschikbaar</p>\r\n }\r\n\r\n {this.props.type === \"author\" && this.storeBooks.authorBooksList.findIndex(book => book.sb_edition === \"eigen uitgaven\") !== -1 &&\r\n <p className=\"content--empty\">Er zijn momenteel geen andere boeken van {this.props.author} beschikbaar</p>\r\n }\r\n\r\n {this.props.type === \"author_sb\" &&\r\n <p className=\"content--empty\">Er zijn momenteel geen boeken van {this.props.author} beschikbaar</p>\r\n }\r\n </React.Fragment>\r\n : <React.Fragment>\r\n <LoaderFeedback \r\n type = {this.props.type}\r\n />\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlocksBooks));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport * as rdd from \"react-device-detect\";\r\n\r\nimport CarouselNewsletter from '../content/carousel-newsletter';\r\nimport BlocksBooks from './blocks-books';\r\nimport BlockBook from '../block/block-book';\r\n\r\nconst BlocksNewsletter = inject(\"stores\") (\r\n observer (\r\n class BlocksNewsletter extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n view: 'carousel'\r\n };\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n }\r\n\r\n toggleNewsletterView = (e) => {\r\n this.setState({\r\n view_list: !this.state.view_list\r\n })\r\n }\r\n\r\n handleClick = (url) => {\r\n document.body.classList.add('dialog-open');\r\n this.storeUi.openDialogNewsletter(url);\r\n }\r\n\r\n handleViewNav = (e, view) => {\r\n switch(view) {\r\n case \"summaries\":\r\n this.setState({\r\n view: 'summaries' \r\n })\r\n break;\r\n case \"carousel\":\r\n default:\r\n this.setState({\r\n view: 'carousel' \r\n })\r\n }\r\n }\r\n \r\n render() {\r\n const Li = (view) => {\r\n const activeClass = (view.view === this.state.view) ? ' --active' : '';\r\n return (\r\n <li className={\"blocks-nav__listitem blocks-nav__listitem--\" + view.view + activeClass} onClick={(e) => this.handleViewNav(e, view.view)}>\r\n <span>lijst</span>\r\n </li>\r\n )\r\n }\r\n\r\n const url = this.urlAPI + \"/mailings/\" + this.storeUi.settings_list.latestNewsletter\r\n const week = parseInt(url.slice(url.length - 4));\r\n\r\n return (\r\n <div className=\"blocks blocks--books blocks--newsletter\">\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">\r\n {i18n.t(\"blocks.newsletter.header\")}\r\n </div> \r\n {/* {((rdd.isMobile && !this.storeAuth.user.is_loggedin) || \r\n (rdd.isMobile && this.storeAuth.user.is_loggedin && !(this.storeUser.user_data.profile.has_subscription === \"1\" || this.storeUser.user_data.profile.has_subscription === 'on'))) && \r\n <div className=\"blocks__blocks-subtitle\">\r\n <Link \r\n className=\"link--subscribe link--subscribe-subtitle link--read-more\"\r\n to=\"/newsletter\"\r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"block.newsletter.link_subscribe_content\")}} \r\n />\r\n </div>\r\n } */}\r\n </div>\r\n <div className=\"blocks__content\">\r\n <div className=\"blocks--newsletter --large\">\r\n <BlocksBooks \r\n type = \"newsletter\"\r\n default_view = \"summaries\"\r\n page = \"newsletter\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlocksNewsletter;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as content from '../utilities/content';\r\n\r\nimport ImgCover from '../elements/img-cover';\r\n\r\nconst ImgCoverRecently = inject(\"stores\") (\r\n observer (\r\n class ImgCoverRecently extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeHistory = this.props.stores.storeHistory;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeStock = this.props.stores.storeStock;\r\n this.storeVisuals = this.props.stores.storeVisuals;\r\n\r\n this.arrTypes = [\r\n 'Boeken (Nederlands)',\r\n 'Boeken (Duits)',\r\n 'Boeken (Spaans)',\r\n 'Boeken (Engels)',\r\n 'Audioboeken (Engels)',\r\n 'Audioboeken (Nederlands)'\r\n ];\r\n\r\n // this.arrExceptions = [\r\n // '9789492665249',\r\n // '9789079872006',\r\n // '9789079872021',\r\n // '9789492665232',\r\n // '9789492665577',\r\n // '9789492665584'\r\n // ]\r\n\r\n this.arrExceptions = [\r\n '9789079872021',\r\n '9789079872006'\r\n ]\r\n\r\n this.state = {\r\n book: {}\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let shop;\r\n let book;\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n shop = 'SHOP_ALL';\r\n } else {\r\n shop = 'SHOP_SB';\r\n }\r\n\r\n book = await this.storeBooks.returnBookDetailsBySku(shop, this.props.sku);\r\n if (!book) {\r\n shop = 'SHOP_SB';\r\n book = await this.storeBooks.returnBookDetailsBySku(shop, this.props.sku);\r\n }\r\n \r\n const media = this.checkMediaType(book.media);\r\n\r\n this.setState({\r\n media: media,\r\n book: book\r\n })\r\n }\r\n\r\n checkMediaType = (value) => {\r\n let type = \"book\";\r\n\r\n if (value !== null) {\r\n if (this.arrTypes.includes(value)) {\r\n type = \"book\";\r\n } else {\r\n type = \"product\"\r\n };\r\n }\r\n\r\n return type;\r\n }\r\n\r\n handleOnClick = async(e, sku) => {\r\n e.preventDefault();\r\n let shop;\r\n\r\n // if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n // shop = 'SHOP_ALL';\r\n // } else {\r\n // shop = 'SHOP_SB';\r\n // }\r\n shop = await this.storeUi.checkShopForSku(sku);\r\n\r\n this.storeGeneral.setShop(shop);\r\n this.storeGeneral.setActiveShop(shop);\r\n\r\n const book = await this.storeBooks.returnBookDetailsBySku(shop, sku);\r\n const id = content.formatTitle(book.title);\r\n\r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n url = \"/book/\" + sku + \"/\" + id;\r\n } else {\r\n url = \"/book/\" + sku;\r\n }\r\n\r\n this.props.history.push({\r\n sku: sku,\r\n pathname: url\r\n })\r\n }\r\n \r\n render() {\r\n return (\r\n <li className={\"block block--book --link block-media--\" + this.state.media} onClick={(e) => this.handleOnClick(e, this.state.book.sku)}>\r\n <div className={\"block-media--\" + this.state.media + \"__content\"}> \r\n <ImgCover\r\n sku = {this.props.sku}\r\n title = {this.state.book && this.state.book.title}\r\n soldout = {(this.state.book && this.storeStock.checkImageCoverTags(this.state.book) === 'soldout') ? true : false}\r\n />\r\n\r\n {(this.state.book && this.state.book.sb_edition == 'eigen uitgaven' && (this.arrExceptions.indexOf(this.state.book.sku) === -1) && this.state.book.sku !== this.storeGeneral.settings_list.skuSoonAvailable && parseInt(this.state.book.stock) !== 2) &&\r\n this.storeVisuals.getCoverTagBySku('blockBook', this.state.book)\r\n }\r\n\r\n {(this.state.book && this.storeStock.checkImageCoverTags(this.state.book) === 'soldout') &&\r\n this.storeVisuals.getCoverTagBySku('blockBook', this.state.book)\r\n }\r\n </div>\r\n </li> \r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(ImgCoverRecently));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport ImgCoverRecently from '../../elements/img-cover-recently';\r\n\r\nconst BlocksRecentlyViewed = inject(\"stores\") (\r\n observer (\r\n class BlocksRecentlyViewed extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeHistory = this.props.stores.storeHistory;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n\r\n render() {\r\n let listRecentlyViewed;\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n if (id !== undefined && id !== 0) {\r\n listRecentlyViewed = this.storeHistory.listRecentlyViewed.user;\r\n } else {\r\n listRecentlyViewed = this.storeHistory.listRecentlyViewed.anonymous;\r\n }\r\n\r\n return (\r\n listRecentlyViewed.length > 0 &&\r\n <div className=\"blocks blocks--books blocks__list--recently-viewed\">\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">\r\n {i18n.t(\"blocks.recently_viewed.header\")}\r\n </div>\r\n </div> \r\n <div className=\"blocks__content\">\r\n <ul className=\"blocks__list blocks__list--covers blocks__list--covers-foldout --collapsed \">\r\n {listRecentlyViewed.map((book, i) => ( \r\n <ImgCoverRecently\r\n key = {book.sku}\r\n sku = {book.sku}\r\n />\r\n ))}\r\n </ul>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlocksRecentlyViewed));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { Redirect } from 'react-router';\r\n\r\nconst BlockQuote = inject(\"stores\") (\r\n observer (\r\n class BlockQuote extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n redirect: false\r\n };\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = async() => {\r\n }\r\n\r\n handleClick = (e, sku) => {\r\n if (sku !== '' && sku !== undefined) {\r\n const book = this.storeBooks.booksList\r\n .filter((book) => book.sku == sku);\r\n const id = book[0].id;\r\n\r\n this.storeUi.setCurrentBook(sku);\r\n this.storeBooks.getBookDetailsBySku(sku);\r\n\r\n this.setState({\r\n sku: sku,\r\n redirect: this.props.match.params.sku ? false : true\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/book/\" + this.state.sku} \r\n />;\r\n }\r\n\r\n const quote = this.storeUi.quote;\r\n let author = quote.author;\r\n\r\n let quoteClass = \"block block--quote\";\r\n if (this.props.bg && this.props.bg !== '') {\r\n quoteClass = quoteClass + ' ' + this.props.bg;\r\n }\r\n\r\n while (author && author.charAt(0) === '-') {\r\n author = author.substring(1);\r\n }\r\n\r\n\r\n return (\r\n <div className={quoteClass}>\r\n {quote &&\r\n <div className=\"quote\" onClick={(e) => this.handleClick(quote.isbn)}>\r\n <div className=\"quote__title\" \r\n dangerouslySetInnerHTML={{ __html: quote.text }} \r\n />\r\n <div className=\"quote__author\"\r\n dangerouslySetInnerHTML={{ __html: author }}\r\n /> \r\n </div>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(BlockQuote);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Swiper, Slide } from 'react-dynamic-swiper'\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport 'swiper/css/swiper.css';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nconst CarouselHome = inject(\"stores\") (\r\n observer (\r\n class CarouselHome extends Component {\r\n\r\n constructor(props, {size}) {\r\n super(props);\r\n this.props = props; \r\n this.state = {\r\n active_slide: 0,\r\n classPrevBtn: '',\r\n classNextBtn: '',\r\n classPauseBtn: '--pause'\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount() {\r\n if (this.storeUi.carousel_home == 'pause') {\r\n this.reactSwiper.swiper().autoplay.stop();\r\n }\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.play !== this.props.play) {\r\n if (this.props.play === 'play') {\r\n this.reactSwiper.swiper().autoplay.start();\r\n } else {\r\n this.reactSwiper.swiper().autoplay.stop();\r\n }\r\n }\r\n }\r\n\r\n handleOnClick = (e, book) => {\r\n const sku = book.sku;\r\n const id = content.formatTitle(book.title);\r\n\r\n this.storeUi.setCurrentBook(sku);\r\n this.storeUi.setActiveToggleNav(1);\r\n \r\n //SbC DEPRICATED\r\n //this.storeBooks.getBookDetailsBySku(sku);\r\n\r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n url = \"/book/\" + sku + \"/\" + id;\r\n } else {\r\n url = \"/book/\" + sku;\r\n }\r\n this.props.history.push(url);\r\n }\r\n\r\n goNext = () => {\r\n this.reactSwiper.swiper().slidePrev();\r\n }\r\n \r\n goPrev = () => {\r\n this.reactSwiper.swiper().slideNext();\r\n }\r\n\r\n checkSliderPos = () => {\r\n this.setState({\r\n classPrevBtn: this.reactSwiper.swiper().isEnd ? 'swiper-button-disabled' : '',\r\n classNextBtn: this.reactSwiper.swiper().isBeginning ? 'swiper-button-disabled' : ''\r\n });\r\n }\r\n \r\n render() {\r\n //SbC breakpoint options for slider work the other way around ... \r\n\r\n return (\r\n <div className=\"carousel--home\">\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">Boeken van onze eigen uitgeverij</div>\r\n </div>\r\n <Swiper \r\n ref={(c) => { this.reactSwiper = c }}\r\n swiperOptions={{\r\n slidesPerView: 1,\r\n autoplay: this.storeUi.carousel_home === 'play' \r\n ? {\r\n delay: 3000,\r\n disableOnInteraction: false\r\n }\r\n : false,\r\n autoHeight: false,\r\n breakpoints: {\r\n 350: {\r\n slidesPerView: 1,\r\n spaceBetween: 10,\r\n },\r\n 540: {\r\n slidesPerView: 2,\r\n spaceBetween: 10,\r\n },\r\n 896: {\r\n slidesPerView: 3,\r\n spaceBetween: 20,\r\n },\r\n 1050: {\r\n slidesPerView: 2,\r\n spaceBetween: 20,\r\n },\r\n 1250: {\r\n slidesPerView: 3,\r\n spaceBetween: 20,\r\n },\r\n 4000: {\r\n slidesPerView: 4,\r\n spaceBetween: 20,\r\n }\r\n },\r\n on: {\r\n slideChangeTransitionEnd: () => {\r\n this.checkSliderPos();\r\n },\r\n },\r\n loop: false,\r\n speed: 750\r\n }}\r\n {...this.state.options} \r\n >\r\n {this.props.bookList && this.props.bookList.map((book, i) => (\r\n <Slide key={i}>\r\n <div className=\"carousel--books__slide --link\" onClick={(e) => this.handleOnClick(e, book)}>\r\n <div className=\"carousel--books__slide-content\">\r\n <ImgCover\r\n sku = {book.sku}\r\n />\r\n </div>\r\n </div>\r\n </Slide>\r\n ))}\r\n </Swiper>\r\n <div className={\"swiper-button-prev-out \" + this.state.classPrevBtn} onClick={() => this.goPrev()}></div>\r\n <div className={\"swiper-button-next-out \" + this.state.classNextBtn} onClick={() => this.goNext()}></div>\r\n\r\n <div className=\"blocks__blocks-title--sub-link\">\r\n <Link to=\"/our-publications\" className=\"link--read-more\">Bekijk alle boeken van onze eigen uitgeverij</Link>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CarouselHome);\r\n\r\n","export function compareValues(key, dir) {\r\n const order = (dir == 'asc') ? 'asc' : 'desc';\r\n return function innerSort(a, b) {\r\n if (!a.hasOwnProperty(key) || !b.hasOwnProperty(key)) {\r\n return 0;\r\n }\r\n const varA = (typeof a[key] === 'string')\r\n ? a[key].toUpperCase() : a[key];\r\n const varB = (typeof b[key] === 'string')\r\n ? b[key].toUpperCase() : b[key];\r\n\r\n let comparison = 0;\r\n if (varA > varB) {\r\n comparison = 1;\r\n } else if (varA < varB) {\r\n comparison = -1;\r\n }\r\n return (\r\n (order === 'desc') ? (comparison * -1) : comparison\r\n );\r\n };\r\n}","import React from 'react';\r\nimport i18n from \"i18next\";\r\n\r\nconst ButtonToggleExpand = (props) => {\r\n \r\n return (\r\n <span className={\"link--read-more actionShowMore\" + (props.foldout ? \"--up\" : \"\")} onClick={(e) => props.expandBlocks(e)}>\r\n {props.foldout \r\n ? i18n.t(props.txt_up, {amount: props.amount})\r\n : i18n.t(props.txt_down, {amount: props.amount})\r\n }\r\n </span>\r\n );\r\n}\r\n\r\nexport default ButtonToggleExpand;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as sort from '../../utilities/sort';\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport BlockViews from './block-views';\r\nimport LiSort from './block-li-sort';\r\nimport ButtonToggleExpand from '../../elements/button-toggle-expand';\r\n\r\nconst BlocksTop60 = inject(\"stores\") (\r\n observer (\r\n class BlocksTop60 extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeBooksAll = this.props.stores.storeBooksAll;\r\n this.storeProducts = this.props.stores.storeProducts;\r\n\r\n this.state = {\r\n view: this.props.default_view ? this.props.default_view : '',\r\n sorting: this.storeUi.page_view.sorting,\r\n sorting_dir: this.storeUi.page_view.order,\r\n foldout: this.storeUi.foldout.top60,\r\n weeknr: 0,\r\n view: 'covers'\r\n }\r\n }\r\n\r\n componentDidMount = async() => { \r\n let weeknr = await this.storeBooks.getWeekTop60();\r\n\r\n if (this.storeBooks.bookList_top60.length === 0 || this.storeBooks.bookList_top60.length === '0') {\r\n \r\n let top60 = await this.storeBooks.getBooksTop60();\r\n this.setState({\r\n weeknr: weeknr\r\n })\r\n }\r\n this.setView();\r\n }\r\n\r\n componentDidUpdate = async() => { \r\n if (this.state.weeknr == 0) {\r\n let weeknr = await this.storeBooks.getWeekTop60();\r\n this.setState({\r\n weeknr: weeknr\r\n })\r\n }\r\n }\r\n\r\n handleBlocksNav = (e, view) => {\r\n this.setState({\r\n view: view\r\n })\r\n //this.storeUi.setPageView('view', view)\r\n }\r\n\r\n handleSort = (type, sorting_dir) => {\r\n this.storeUi.setPageView('sorting', type);\r\n this.storeUi.setPageView('order', sorting_dir);\r\n\r\n this.setState({\r\n sorting: type,\r\n sorting_dir: sorting_dir\r\n }, () => this.setView())\r\n }\r\n\r\n removeSort = () => {\r\n const sorting_dir = 'DESC';\r\n const type = 'ID';\r\n\r\n this.storeUi.setPageView('sorting', type);\r\n this.storeUi.setPageView('order', sorting_dir);\r\n\r\n this.setState({\r\n book_list: this.storeBooks.bookList_top60,\r\n sorting: 'ID'\r\n })\r\n\r\n ui.handleScroll('top');\r\n }\r\n\r\n setView = () => {\r\n let book_list;\r\n let book_list2;\r\n\r\n if (this.state.sorting !== 'release_date') {\r\n book_list = this.storeBooks.bookList_top60\r\n .sort(sort.compareValues(this.state.sorting, this.state.sorting_dir))\r\n } else {\r\n book_list2 = this.storeBooks.bookList_top60;\r\n book_list2.map((book, idx) => {\r\n if (book_list2[idx] !== undefined) {\r\n if ( book_list2[idx]['release_date']) {\r\n return book_list2[idx]['sort_date'] = new Date(book_list2[idx]['release_date']['date']);\r\n } else {\r\n return book_list2[idx]['sort_date'] = new Date();\r\n }\r\n } else {\r\n book_list2[idx] = {};\r\n }\r\n });\r\n\r\n book_list = book_list2\r\n .sort(sort.compareValues('sort_date', this.state.sorting_dir))\r\n }\r\n \r\n this.setState({\r\n book_list: book_list\r\n })\r\n \r\n ui.handleScroll('top');\r\n }\r\n\r\n expandBlocks = (e) => {\r\n if (this.state.foldout) {\r\n this.storeUi.setFoldout('top60', false)\r\n ui.handleScroll('top');\r\n } else {\r\n this.storeUi.setFoldout('top60', true)\r\n }\r\n this.setState(prevState => ({\r\n foldout: !prevState.foldout\r\n }));\r\n }\r\n \r\n render() { \r\n let blockview = this.state.view;\r\n let class_foldout = \"\";\r\n let items_inview = this.state.foldout ? 60 : 15;\r\n\r\n if (this.storeUi.page_view.view && this.storeUi.page_view.view !== '') {\r\n blockview = this.storeUi.page_view.view;\r\n if (blockview === 'covers') {\r\n class_foldout = \" blocks__list--covers-foldout3 \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\");\r\n }\r\n } else {\r\n if (this.state.view == '' ) {\r\n blockview = 'covers';\r\n class_foldout = \" blocks__list--covers-foldout3 \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\");\r\n } else {\r\n blockview = this.state.view;\r\n if (blockview === 'covers') {\r\n class_foldout = \" blocks__list--covers-foldout3 \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\");\r\n }\r\n if (blockview === 'summaries') {\r\n items_inview = this.state.foldout ? 60 : 10;\r\n class_foldout = \" blocks__list--summaries-foldout3 \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\");\r\n }\r\n if (blockview === 'list') {\r\n items_inview = this.state.foldout ? 60 : 15;\r\n class_foldout = \" blocks__list--list-foldout3 \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\");\r\n }\r\n }\r\n }\r\n\r\n const Li = (view) => {\r\n const activeClass = (view.view === blockview) ? ' --active' : '';\r\n return (\r\n <li className={\"blocks-nav__listitem blocks-nav__listitem--\" + view.view + activeClass} onClick={(e) => this.handleBlocksNav(e, view.view)}>\r\n <span>{view.view}</span>\r\n </li>\r\n )\r\n }\r\n\r\n return ( \r\n <div className=\"blocks blocks--books\">\r\n <div className=\"blocks__blocks-title\">\r\n <span className=\"blocks__blocks-title--main-section\">week {this.state.weeknr}</span>\r\n <span \r\n className=\"blocks__blocks-title--main-cat\"\r\n >\r\n Top 60 Bestsellers \r\n </span>\r\n </div>\r\n \r\n <div className=\"blocks__content\">\r\n {this.state.book_list && this.state.book_list.length > 0\r\n ? <React.Fragment> \r\n <div className=\"blocks__nav\">\r\n <div className=\"blocks__nav-actions\">\r\n <div className=\"blocks-nav__list --column\">\r\n <ul className=\"blocks-nav__list--sort\">\r\n <li>Sorteer op:</li>\r\n <LiSort \r\n sort = 'title'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n <LiSort \r\n sort = 'price_incl'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n {this.props.type !== 'author' && this.props.type !== 'author_sb' &&\r\n <LiSort \r\n sort = 'author_lastname'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n }\r\n <LiSort \r\n sort = 'release_date'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n \r\n </ul> \r\n {this.state.sorting !== 'ID' &&\r\n <span className=\"blocks-nav__list--unsort --link\" onClick={(e) => this.removeSort()}>Verwijder sortering</span>\r\n } \r\n </div>\r\n <div className=\"blocks-nav__list\">\r\n <ul className=\"blocks-nav__list--view\">\r\n <Li \r\n view = 'summaries'\r\n />\r\n <Li \r\n view = 'covers'\r\n />\r\n <Li \r\n view = 'list'\r\n />\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ul className={\"blocks__list blocks__list--\" + blockview + class_foldout}>\r\n {this.state.book_list.slice(0, items_inview).map((book, i) => ( \r\n book !== undefined &&\r\n <li className=\"block block--book\" key = {i}>\r\n <BlockViews \r\n view = {blockview}\r\n book = {book}\r\n page = {this.props.page}\r\n ranking = {true}\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n \r\n <div className=\"blocks__list--actions\">\r\n <ButtonToggleExpand\r\n foldout = {this.state.foldout}\r\n expandBlocks = {this.expandBlocks}\r\n txt_down = {\"lists.show_more_top\"}\r\n txt_up = {\"lists.show_less_top\"}\r\n amount = {60}\r\n />\r\n </div>\r\n </React.Fragment>\r\n : <p className=\"content--empty\">De gegevens worden opgehaald</p>\r\n }\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlocksTop60));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport BlockViews from './block-views';\r\nimport ButtonToggleExpand from '../../elements/button-toggle-expand';\r\n\r\nconst BlockTop10Foldout = inject(\"stores\") (\r\n observer (\r\n class BlockTop10Foldout extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n view: \"covers\",\r\n foldout: this.storeUi.foldout.top10\r\n }\r\n\r\n this.blockRef = React.createRef();\r\n }\r\n\r\n async componentDidMount() {\r\n const tag = this.props.tag;\r\n const books = await this.storeBooks.getBooksTop10(tag, this.props.nur, this.props.isAutofill);\r\n this.setState({\r\n tag: tag,\r\n section: this.props.section,\r\n header: \"blocks.\" + tag + \".header\",\r\n booksList: books\r\n })\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n if (prevProps.tag !== this.props.tag) {\r\n const books = await this.storeBooks.getBooksTop10(this.props.tag, this.props.nur, this.props.isAutofill);\r\n this.setState({\r\n tag: this.props.tag,\r\n section: this.props.section,\r\n header: \"blocks.\" + this.props.tag + \".header\",\r\n booksList: books\r\n })\r\n }\r\n }\r\n\r\n handleBlocksNav = (e, view) => {\r\n this.setState({\r\n view: view\r\n })\r\n //this.storeUi.setPageView('view', view)\r\n }\r\n\r\n handleGoto = (url) => { \r\n this.props.handleGoto(url);\r\n }\r\n\r\n expandBlocks = (e) => {\r\n if (this.state.foldout) {\r\n ui.handleScroll(this.blockRef.offsetTop - 80);\r\n this.storeUi.setFoldout('top10', false)\r\n } else {\r\n this.storeUi.setFoldout('top10', true)\r\n }\r\n this.setState(prevState => ({\r\n foldout: !prevState.foldout\r\n }));\r\n }\r\n\r\n render() {\r\n let blockview = \"covers\";\r\n let class_foldout = \"\";\r\n \r\n if (this.state.view == '') {\r\n blockview = 'covers';\r\n class_foldout = \" blocks__list--covers-foldout \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\");\r\n } else {\r\n blockview = this.state.view;\r\n if (blockview == 'covers') {\r\n class_foldout = \" blocks__list--covers-foldout \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\");\r\n }\r\n if (blockview == 'summaries') {\r\n class_foldout = \" blocks__list--summaries-foldout \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\");\r\n }\r\n }\r\n\r\n const Li = (view) => {\r\n const activeClass = (view.view === blockview) ? ' --active' : '';\r\n return (\r\n <li className={\"blocks-nav__listitem blocks-nav__listitem--\" + view.view + activeClass} onClick={(e) => this.handleBlocksNav(e, view.view)}>\r\n <span>{view.view}</span>\r\n </li>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"blocks__content\" ref={ (ref) => this.blockRef=ref }>\r\n <div className=\"blocks__nav\">\r\n <div className=\"blocks__nav-actions\">\r\n <div className=\"blocks-nav__list --column\"></div>\r\n <div className=\"blocks-nav__list\">\r\n <ul className=\"blocks-nav__list--view\">\r\n <Li \r\n view = 'summaries'\r\n />\r\n <Li \r\n view = 'covers'\r\n />\r\n <Li \r\n view = 'list'\r\n />\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ul className={\"blocks__list blocks__list--\" + blockview + class_foldout}>\r\n {this.state.booksList && this.state.booksList.map((book, i) => ( \r\n book !== undefined &&\r\n <li className=\"block block--book\" key = {i}>\r\n <BlockViews \r\n view = {blockview}\r\n book = {book}\r\n page = {this.props.page}\r\n ranking = {true}\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n \r\n {(blockview == 'covers' || blockview == 'summaries') &&\r\n <React.Fragment>\r\n <div className=\"blocks__list--actions\">\r\n <ButtonToggleExpand\r\n foldout = {this.state.foldout}\r\n expandBlocks = {this.expandBlocks}\r\n txt_down = {\"lists.show_more_top\"}\r\n txt_up = {\"lists.show_less_top\"}\r\n amount = {10}\r\n />\r\n </div>\r\n\r\n <div className=\"blocks__list--actions blocks__list--action-icons\">\r\n <div className=\"blocks__list--action\" onClick={() => this.props.viewAll(this.props.section)}>\r\n <span className=\"link--read-more\">Toon alle {i18n.t(\"blocks.\" + this.props.tag + \".all\")}</span>\r\n <div class=\"paging-forward-wrapper --next\"><div class=\"paging-forward-wrapper__icon\"></div></div>\r\n </div>\r\n <div className=\"blocks__list--action\">\r\n <Link \r\n className=\"link\"\r\n to=\"/category/top10\"\r\n >\r\n <span>Toon alle Top 10's</span>\r\n </Link>\r\n <div \r\n class=\"paging-forward-wrapper --next\"\r\n onClick = {() => this.handleGoto(\"/category/top10\")}\r\n >\r\n <div class=\"paging-forward-wrapper__icon\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst BlockTop10Expanded = inject(\"stores\") (\r\n observer (\r\n class BlockTop10Expanded extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n view: \"covers\"\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n async componentDidMount() {\r\n const tag = this.props.tag;\r\n const books = await this.storeBooks.getBooksTop10(tag, this.props.nur, this.props.isAutofill);\r\n this.setState({\r\n tag: tag,\r\n section: this.props.section,\r\n header: \"blocks.\" + tag + \".header\",\r\n booksList: books\r\n })\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n if (prevProps.tag !== this.props.tag) {\r\n const books = await this.storeBooks.getBooksTop10(this.props.tag, this.props.nur, this.props.isAutofill);\r\n this.setState({\r\n tag: this.props.tag,\r\n section: this.props.section,\r\n header: \"blocks.\" + this.props.tag + \".header\",\r\n booksList: books\r\n })\r\n }\r\n }\r\n\r\n handleBlocksNav = (e, view) => {\r\n this.setState({\r\n view: view\r\n })\r\n this.storeUi.setPageView('view', view)\r\n }\r\n\r\n handleGoto = (url) => { \r\n this.props.handleGoto(url);\r\n }\r\n\r\n render() {\r\n let blockview = \"covers\";\r\n \r\n if (this.state.view == '' ) {\r\n if ( this.state.booksList.length < 5) {\r\n blockview = 'summaries'\r\n } else {\r\n blockview = 'covers'\r\n }\r\n } else {\r\n blockview = this.state.view\r\n }\r\n\r\n const Li = (view) => {\r\n const activeClass = (view.view === blockview) ? ' --active' : '';\r\n return (\r\n <li className={\"blocks-nav__listitem blocks-nav__listitem--\" + view.view + activeClass} onClick={(e) => this.handleBlocksNav(e, view.view)}>\r\n <span>{view.view}</span>\r\n </li>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"blocks__content\">\r\n <div className=\"blocks__nav\">\r\n <div className=\"blocks__nav-actions\">\r\n <div className=\"blocks-nav__list --column\"></div>\r\n <div className=\"blocks-nav__list\">\r\n <ul className=\"blocks-nav__list--view\">\r\n <Li \r\n view = 'summaries'\r\n />\r\n <Li \r\n view = 'covers'\r\n />\r\n <Li \r\n view = 'list'\r\n />\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <ul className={\"blocks__list blocks__list--\" + blockview}>\r\n {this.state.booksList && this.state.booksList.map((book, i) => ( \r\n book !== undefined &&\r\n <li className=\"block block--book\" key = {i}>\r\n <BlockViews \r\n view = {blockview}\r\n book = {book}\r\n page = {this.props.page}\r\n ranking = {true}\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n \r\n <div className=\"blocks__list--actions blocks__list--action-icons\">\r\n <div className=\"blocks__list--action\" onClick={() => this.props.viewAll(this.props.section)}>\r\n <span className=\"link--read-more\">Toon alle {i18n.t(\"blocks.\" + this.props.tag + \".all\")}</span>\r\n <div class=\"paging-forward-wrapper --next\"><div class=\"paging-forward-wrapper__icon\"></div></div>\r\n </div>\r\n <div className=\"blocks__list--action\">\r\n <Link \r\n className=\"link\"\r\n to=\"/category/top10\"\r\n >\r\n <span>Toon alle Top 10's</span>\r\n </Link>\r\n <div \r\n class=\"paging-forward-wrapper --next\"\r\n onClick = {() => this.handleGoto(\"/category/top10\")}\r\n >\r\n <div class=\"paging-forward-wrapper__icon\"></div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst BlockTop10 = inject(\"stores\") (\r\n observer (\r\n class BlockTop10 extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n view: this.props.view\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n async componentDidMount() {\r\n const tag = this.props.section.tag;\r\n const books = await this.storeBooks.getBooksTop10(tag, this.props.nur, this.props.isAutofill);\r\n\r\n this.setState({\r\n tag: tag,\r\n section: this.props.section,\r\n header: \"blocks.\" + tag + \".header\",\r\n booksList: books\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"blocks--top10\" ref={this.cardRef} >\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">\r\n <span className=\"blocks__blocks-title--main-section\">Top 10</span>\r\n <span \r\n className=\"blocks__blocks-title--main-cat\"\r\n >\r\n {i18n.t(\"blocks.\" + this.props.section.tag + \".subtitle\")}\r\n </span>\r\n {this.props.section.has_excel &&\r\n <span className=\"blocks__blocks-title--main-sub\">(met positie in lijst van top 60 bestsellers van deze week)</span>\r\n }\r\n </div> \r\n </div> \r\n <ul className=\"blocks__list blocks__list--covers blocks__list--covers-foldout --collapsed\">\r\n {this.state.booksList && this.state.booksList.map((book, i) => ( \r\n book !== undefined &&\r\n <li className=\"block block--book\" key = {i}>\r\n <BlockViews \r\n view = {\"covers\"}\r\n book = {book}\r\n page = {this.props.page}\r\n ranking = {true}\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n <div \r\n className=\"blocks__list--actions blocks__list--action-icons\" \r\n >\r\n <div \r\n className=\"blocks__list--action\"\r\n onClick={() => this.props.viewAll(this.props.section.section, this.props.nur, this.props.isAutofill)}\r\n >\r\n <span className=\"link--read-more\">Toon gehele {this.props.section.display_value}</span>\r\n <div class=\"paging-forward-wrapper --next\"><div class=\"paging-forward-wrapper__icon\"></div></div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst BlocksTop10 = inject(\"stores\") (\r\n observer (\r\n class BlocksTop10 extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n section: \"\",\r\n view: \"covers\"\r\n };\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = async() => {\r\n let nur;\r\n let sections = await this.storeBooks.getTop10s();\r\n let hasExcel;\r\n let isAutofill;\r\n \r\n const section = this.props.tag.substring(5);\r\n\r\n if (this.props.tag !== 'top10') {\r\n const result = await this.storeBooks.getTop10NUR(this.props.tag);\r\n if (result !== undefined && result !== null && result.data !== null) {\r\n nur = result.data[0].nur;\r\n } else {\r\n nur = 0;\r\n }\r\n\r\n const idx = sections.findIndex(sect => sect.section === section);\r\n hasExcel = sections[idx].has_excel;\r\n isAutofill= sections[idx].isAutofill;\r\n } else {\r\n nur = 0;\r\n }\r\n\r\n this.setState({\r\n view_section: this.props.tag == 'top10' ? false : true,\r\n sections: sections,\r\n tag: this.props.tag,\r\n nur: nur,\r\n section: section,\r\n hasExcel: hasExcel,\r\n isAutofill: isAutofill,\r\n header: \"blocks.\" + this.props.tag + \".header\"\r\n })\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let nur = 0;\r\n let hasExcel;\r\n let isAutofill;\r\n\r\n if (prevProps.tag !== this.props.tag) {\r\n const section = this.props.tag.substring(5);\r\n\r\n if (this.props.tag !== 'top10') {\r\n const result = await this.storeBooks.getTop10NUR(this.props.tag);\r\n if (result !== undefined && result !== null) {\r\n nur = result.data[0].nur;\r\n } \r\n\r\n const idx = this.state.sections.findIndex(sect => sect.section === section);\r\n hasExcel = this.state.sections[idx].has_excel;\r\n isAutofill= this.state.sections[idx].isAutofill;\r\n } \r\n\r\n this.setState({\r\n view_section: this.props.tag == 'top10' ? false : true,\r\n tag: this.props.tag,\r\n nur: nur,\r\n section: section,\r\n hasExcel: hasExcel,\r\n isAutofill: isAutofill,\r\n header: \"blocks.\" + this.props.tag + \".header\"\r\n })\r\n } \r\n }\r\n\r\n viewAll = async(section, nur, isAutofill) => {\r\n const tag = \"top10\" + section;\r\n this.setState({\r\n view_section: true,\r\n tag: tag,\r\n nur: nur,\r\n isAutofill: isAutofill,\r\n section: section,\r\n header: \"blocks.\" + tag + \".header\"\r\n })\r\n\r\n const url = \"/subcategory/\" + tag;\r\n this.props.history.push(url);\r\n }\r\n\r\n viewAllCategory = (cat_name) => {\r\n this.storeBooks.getBooksForCategory(cat_name, this.storeUi.page_view);\r\n this.storeUi.setActiveCategory(cat_name);\r\n\r\n const url = \"/category/\" + cat_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n handleGoto = (url) => { \r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"blocks blocks--books\">\r\n {(!this.state.view_section && this.props.type !== 'foldout') &&\r\n <React.Fragment>\r\n <div className=\"blocks__content\">\r\n {this.state.sections && this.state.sections.map((section) => (\r\n <BlockTop10\r\n section = {section}\r\n nur = {section.nur}\r\n isAutofill = {section.isAutofill}\r\n viewAll = {this.viewAll}\r\n />\r\n ))}\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n {(this.state.view_section && this.props.type !== 'foldout') &&\r\n <React.Fragment>\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">\r\n {/* {i18n.t(this.state.header)} */}\r\n <span className=\"blocks__blocks-title--main-section\">Top 10</span>\r\n <span \r\n className=\"blocks__blocks-title--main-cat\"\r\n >\r\n {i18n.t(\"blocks.\" + this.props.tag + \".subtitle\")}\r\n </span>\r\n {(this.state.hasExcel && this.state.isAutofill !== 1) &&\r\n <span className=\"blocks__blocks-title--main-sub\">(met positie in lijst van top 60 bestsellers van deze week)</span> \r\n }\r\n </div> \r\n </div> \r\n\r\n {this.state.nur === 0\r\n ? <div>Er is hiervan geen top 10 gevonden</div>\r\n : <BlockTop10Expanded\r\n tag = {this.state.tag}\r\n nur = {this.state.nur}\r\n isAutofill = {this.state.isAutofill}\r\n section = {this.state.section}\r\n viewAll = {this.viewAllCategory}\r\n handleGoto = {this.handleGoto}\r\n />\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {this.props.type === 'foldout' &&\r\n <React.Fragment>\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">\r\n {/* {i18n.t(this.state.header)} */}\r\n <span className=\"blocks__blocks-title--main-section\">Top 10</span>\r\n <span className=\"blocks__blocks-title--main-cat\">Thrillers</span>\r\n {(this.state.hasExcel && this.state.isAutofill !== 1) &&\r\n <span className=\"blocks__blocks-title--main-sub\">(met positie in lijst van top 60 bestsellers van deze week)</span>\r\n }\r\n </div> \r\n </div>\r\n\r\n <BlockTop10Foldout\r\n tag = {this.state.tag}\r\n nur = {this.state.nur}\r\n isAutofill = {this.state.isAutofill}\r\n section = {this.state.section}\r\n viewAll = {this.viewAllCategory}\r\n handleGoto = {this.handleGoto}\r\n />\r\n </React.Fragment>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlocksTop10));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport BlockCover from '../block/block-cover';\r\n\r\nconst BlockBooksPromoBook = inject(\"stores\") (\r\n observer (\r\n class BlockBooksPromoBook extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {}\r\n }\r\n\r\n componentDidMount = async() => {\r\n const shop = 'SHOP_SB';\r\n const book = await this.storeBooks.getBookBySku(this.props.sku, shop);\r\n\r\n this.setState({\r\n book: book\r\n })\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (prevProps.sku !== this.props.sku) {\r\n const shop = 'SHOP_SB';\r\n const book = await this.storeBooks.getBookBySku(this.props.sku, shop);\r\n\r\n this.setState({\r\n book: book\r\n })\r\n }\r\n }\r\n\r\n handleOnClick = () => {\r\n const url = '/site-explanation';\r\n this.props.history.push(url);\r\n }\r\n \r\n render() { \r\n return (\r\n <div className=\"block__books--promo-book\">\r\n {this.state.book &&\r\n <BlockCover \r\n sku = {this.props.sku}\r\n book = {this.state.book}\r\n />\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockBooksPromoBook));\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Swiper, Slide } from 'react-dynamic-swiper'\r\nimport { withRouter } from \"react-router-dom\";\r\nimport 'swiper/css/swiper.css';\r\nimport {\r\n isBrowser,\r\n isMobile,\r\n isIOS\r\n} from \"react-device-detect\";\r\nimport * as rdd from \"react-device-detect\";\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport BlockBooksPromobook from '../block/block-books-promobook';\r\n\r\nconst CarouselPromoBooks = inject(\"stores\") (\r\n observer (\r\n class CarouselPromoBooks extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.state = {\r\n \r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = async() => {\r\n\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.play !== this.props.play) {\r\n if (this.props.play === 'play') {\r\n this.reactSwiper.swiper().autoplay.start();\r\n } else {\r\n this.reactSwiper.swiper().autoplay.stop();\r\n }\r\n }\r\n }\r\n\r\n handleOnClick = async(e, sku) => {\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveCategory('');\r\n \r\n this.storeUi.setCurrentBook(sku);\r\n const book = await this.storeBooks.returnBookDetailsBySku(this.storeGeneral.shop, sku);\r\n const id = content.formatTitle(book.title);\r\n\r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n url = \"/book/\" + sku + \"/\" + id;\r\n } else {\r\n url = \"/book/\" + sku;\r\n }\r\n this.props.history.push(url);\r\n }\r\n\r\n render() {\r\n return (\r\n rdd.isMobile &&\r\n <div className=\"carousel--promobooks\">\r\n <Swiper \r\n ref={(c) => { this.reactSwiper = c }}\r\n swiperOptions={{\r\n slidesPerView: 1,\r\n initialSlide: 1,\r\n autoplay: this.storeUi.carousel_home === 'play' \r\n ? {\r\n delay: 6000,\r\n disableOnInteraction: false\r\n }\r\n : false,\r\n loop: false,\r\n speed: 1000\r\n }}\r\n {...this.state.options}\r\n >\r\n {this.props.promoBooks && this.props.promoBooks.map((item, i) => (\r\n (item.sku !== null && item.sku !== '') &&\r\n <Slide key={i}>\r\n <div \r\n className=\"carousel--banner__slide\" \r\n onClick={(e) => this.handleOnClick(e, item.sku)}\r\n >\r\n <div \r\n className=\"carousel--banner__slide-content\"\r\n >\r\n <BlockBooksPromobook\r\n sku = {item.sku}\r\n />\r\n </div>\r\n </div>\r\n </Slide>\r\n ))}\r\n </Swiper>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CarouselPromoBooks);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {\r\n isBrowser,\r\n isMobile,\r\n isIOS\r\n} from \"react-device-detect\";\r\nimport * as rdd from \"react-device-detect\";\r\n\r\nimport BlockBooksPromobook from './block-books-promobook';\r\nimport CarouselPromobooks from '../content/carousel-promobooks';\r\n\r\nconst BlockBooksPromo = inject(\"stores\") (\r\n observer (\r\n class BlockBooksPromo extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeContent = this.props.stores.storeContent;\r\n\r\n this.state = {\r\n promoBooks: []\r\n };\r\n }\r\n\r\n componentDidMount = async() => {\r\n let title = i18n.t(\"block.select_segment.header\");\r\n const promoBooks = await this.storeContent.getPromoBooks();\r\n\r\n // promoBooks.map((item) => {\r\n // if ((item.sku === null || item.sku === '') && item.title !== null && item.title !== '') \r\n // {\r\n // title = item.title\r\n // }\r\n // });\r\n\r\n if (promoBooks) {\r\n this.setState({\r\n promoBooks: promoBooks[0],\r\n title: title\r\n });\r\n }\r\n }\r\n\r\n handleOnClick = () => {\r\n const url = '/site-explanation';\r\n this.props.history.push(url);\r\n }\r\n \r\n render() { \r\n return (\r\n this.state.promoBooks.length !== 0\r\n ? <div className=\"block__books--promo\">\r\n <div className=\"block__books--promo__block-title\">\r\n <h2>{this.state.promoBooks && this.state.promoBooks.title}</h2>\r\n <h3>{this.state.promoBooks && this.state.promoBooks.subtitle}</h3>\r\n\r\n {this.state.promoBooks && this.state.promoBooks.description &&\r\n <span className=\"block__books--promo__intro\">\r\n {this.state.promoBooks.description}\r\n </span>\r\n }\r\n </div> \r\n {!rdd.isMobile \r\n ? <ul\r\n className = \"blocks__list blocks__list--covers blocks__list--promos\"\r\n >\r\n {this.state.promoBooks && this.state.promoBooks.sku1 &&\r\n <li>\r\n <BlockBooksPromobook\r\n sku = {this.state.promoBooks.sku1}\r\n />\r\n </li>\r\n }\r\n {this.state.promoBooks && this.state.promoBooks.sku2 &&\r\n <li>\r\n <BlockBooksPromobook\r\n sku = {this.state.promoBooks.sku2}\r\n />\r\n </li>\r\n }\r\n {this.state.promoBooks && this.state.promoBooks.sku3 &&\r\n <li>\r\n <BlockBooksPromobook\r\n sku = {this.state.promoBooks.sku3}\r\n />\r\n </li>\r\n }\r\n </ul>\r\n : <CarouselPromobooks\r\n promoBooks = {this.state.promoBooks}\r\n />\r\n }\r\n </div>\r\n : null\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockBooksPromo));\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport * as rdd from \"react-device-detect\";\r\nimport {isIOS} from 'react-device-detect';\r\n\r\nconst BlockAnkeilerNewsletter = inject(\"stores\") (\r\n observer (\r\n class BlockAnkeilerNewsletter extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n latest: {}\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const newsletters = await this.storeUi.getNewsletters()\r\n \r\n const latest_newsletter = newsletters\r\n .filter(newsletter => newsletter.tag === this.storeGeneral.settings_list.tagLatestNewsletter);\r\n\r\n this.setState({\r\n latest: latest_newsletter[0]\r\n })\r\n } \r\n\r\n handleClick = (url) => {\r\n document.body.classList.add('dialog-open');\r\n this.storeUi.openDialogNewsletter(url);\r\n }\r\n \r\n render() {\r\n const url = this.urlAPI + \"/mailings/\" + this.storeGeneral.settings_list.latestNewsletter;\r\n const url_tag = this.urlAPI + \"/newsletters/newsletter.php?mailing=\" + this.storeGeneral.settings_list.tagLatestNewsletter + \"&origin=site\";\r\n\r\n return (\r\n rdd.isMobile && \r\n <div className=\"blocks blocks--books blocks--newsletter ankeiler--newsletter\">\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">\r\n Onze nieuwsbrief\r\n </div> \r\n <div className=\"block__block-content\">\r\n <span className=\"newsletter__subtitle\">Laatste nieuwsbrief</span>\r\n <span className=\"newsletter__actions\">\r\n {this.state.latest && this.state.latest.has_php === 1 &&\r\n <span \r\n className=\"link--read-more --link\" \r\n onClick={() => this.handleClick(url_tag, 'web')}\r\n >\r\n web\r\n </span>\r\n }\r\n {this.state.latest && this.state.latest.has_pdf === 1 && (\r\n isIOS \r\n ? <a \r\n className=\"link--read-more\"\r\n href={url + \".php?origin=site\"} \r\n target=\"_blank\" \r\n \r\n >\r\n pdf\r\n </a>\r\n : <span \r\n className=\"link--read-more\" \r\n onClick={() => this.handleClick(url + \".php?origin=site\", 'pdf')}\r\n >\r\n pdf\r\n </span>\r\n \r\n )}\r\n </span>\r\n </div>\r\n\r\n <div className=\"block__block-content\">\r\n <Link \r\n className=\"link--read-more\"\r\n to=\"/overview-newsletters\"\r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"block.newsletter.link_all\")}} \r\n />\r\n </div>\r\n\r\n <div className=\"block__block-content\"> \r\n <Link \r\n className=\"link--subscribe link--subscribe-subtitle link--read-more\"\r\n to=\"/newsletter\"\r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"block.newsletter.link_subscribe_ankeiler\")}} \r\n />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockAnkeilerNewsletter;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport TemplateSidebarRight from '../../templates/template-sidebar-right';\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nconst BlockNewestBooksSB = inject(\"stores\") (\r\n observer (\r\n class BlockNewestBooksSB extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n handleOnClick = (e, book) => {\r\n const sku = book.sku;\r\n const id = content.formatTitle(book.title);\r\n\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveCategory('');\r\n \r\n this.storeUi.setCurrentBook(sku);\r\n \r\n this.setState({\r\n sku: sku\r\n });\r\n\r\n let url;\r\n if (parseInt(this.storeGeneral.settings_list.seoTitles) === 1) {\r\n url = \"/book/\" + sku + \"/\" + id;\r\n } else {\r\n url = \"/book/\" + sku;\r\n }\r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"block--newest-books-sb\">\r\n <div className=\"block--newest-books-sb__block-title\">\r\n <h3>{this.props.block_title}</h3>\r\n <h2>{this.props.block_subtitle}</h2>\r\n\r\n {this.props.block_intro &&\r\n <span className=\"block--newest-books-sb__intro\">{i18n.t(this.props.block_intro)}</span>\r\n }\r\n </div> \r\n <div className=\"block--newest-books-sb__list\">\r\n <ul\r\n className = \"blocks__list--covers-foldout --collapsed\"\r\n >\r\n {this.storeBooks.bookList_newest.map((book, i) => (\r\n i < 5 && \r\n <li \r\n className = \"--link\"\r\n onClick={(e) => this.handleOnClick(e, book)}\r\n >\r\n <div className=\"carousel--books__slide-content\">\r\n <ImgCover\r\n sku = {book.sku}\r\n />\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n <div className=\"block--newest-books-sb__link-all\">\r\n <Link to=\"our-publications\">Bekijk alle eigen uitgaven</Link>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockNewestBooksSB));\r\n\r\n","import React, { Component, Suspense } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { Redirect } from 'react-router';\r\nimport queryString from 'query-string';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlockCatsPopular from '../components/block/block-cats-popular';\r\nimport BlockLatestUpdate from '../components/block/block-latest-update';\r\nimport BlocksNewsletter from '../components/blocks/blocks-newsletter';\r\nimport BlocksRecentlyViewed from '../components/blocks/blocks-recently-viewed';\r\nimport BlockQuote from '../components/block/block-quote';\r\nimport CarouselHome from '../components/content/carousel-home';\r\nimport BlocksTop60 from '../components/blocks/blocks-top60';\r\nimport BlocksTop10 from '../components/blocks/blocks-top10';\r\nimport BlockBooksPromo from '../components/block/block-books-promo';\r\n\r\nimport * as ui from '../utilities/ui';\r\nimport BlockAnkeilerNewsletter from '../components/block/block-ankeiler-newsletter';\r\nimport BlockNewestBooksSB from '../components/block/block-newest-books-sb';\r\n\r\nconst Start = inject(\"stores\") (\r\n observer (\r\n class Start extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n redirectISBN: false,\r\n redirectPayment: false,\r\n id_quote: 0\r\n }\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.storeGeneral.shop === '') {\r\n this.storeGeneral.setShop('SHOP_SB');\r\n }\r\n\r\n this.storeUi.setActiveMainNav(0);\r\n\r\n //SbC TEST combine sections\r\n if (this.storeGeneral.activeShop === 'SHOP_SB') {\r\n this.storeUi.setActiveToggleNav(1);\r\n } else {\r\n this.storeUi.setActiveToggleNav(2);\r\n }\r\n \r\n this.storeUi.setUseCase(\"inshop\");\r\n this.storeOrder.setPartnerCode(this.props.location.search);\r\n this.redirectParams(this.props.location.search);\r\n\r\n ui.handleScroll('top');\r\n\r\n this.getCarousel();\r\n }\r\n\r\n componentDidUpdate = () => {\r\n this.redirectParams(this.props.location.search);\r\n }\r\n\r\n redirectParams(searchString) {\r\n const params = queryString.parse(searchString)\r\n \r\n //SbC add more complex redirects \r\n if (params.isbn) {\r\n this.setState({\r\n redirectISBN: true,\r\n isbn: params.isbn\r\n });\r\n }\r\n\r\n if (params.ISBN) {\r\n this.setState({\r\n redirectISBN: true,\r\n isbn: params.ISBN\r\n });\r\n }\r\n\r\n let pc;\r\n if (params.pc) {\r\n pc = params.pc.trim();\r\n this.storeOrder.setAffiliateId(pc);\r\n }\r\n if (params.PC) {\r\n pc = params.PC.trim();\r\n this.storeOrder.setAffiliateId(pc);\r\n }\r\n\r\n if (params.guid) {\r\n this.setState({\r\n redirectPayment: true,\r\n guid: params.guid\r\n });\r\n }\r\n\r\n if (params.quote) {\r\n this.setState({\r\n id_quote: params.quote\r\n });\r\n }\r\n }\r\n\r\n getCarousel() {\r\n let value = this.storeUi.getCarousel();\r\n this.storeUi.setCarousel(value); \r\n }\r\n\r\n goPause = async (e) => {\r\n this.storeUi.setCarousel('pause'); \r\n }\r\n\r\n goPlay = (e) => {\r\n this.storeUi.setCarousel('play'); \r\n }\r\n\r\n render() {\r\n if (this.state.redirectISBN) {\r\n return <Redirect \r\n push to={\"/book/\" + this.state.isbn} \r\n />;\r\n }\r\n\r\n if (this.state.redirectPayment) {\r\n return <Redirect to={{\r\n pathname: '/payment-result',\r\n state: { guid: this.state.guid }\r\n }}\r\n />;\r\n }\r\n\r\n return ( \r\n <Template\r\n type = 'default'\r\n expanded = {[\"categories\", \"products\"]}\r\n > \r\n <React.Fragment>\r\n {/* <BlockNotification \r\n\r\n /> */}\r\n <BlockLatestUpdate \r\n\r\n />\r\n\r\n {this.storeGeneral.shop !== 'SHOP_ALL' &&\r\n <BlockQuote \r\n id = {this.state.id_quote}\r\n quote = {this.storeUi.getQuote(this.state.id_quote)}\r\n />\r\n }\r\n\r\n {this.storeGeneral.shop === 'SHOP_SB' && (\r\n <div className=\"content-wrapper__segment\">\r\n <BlockBooksPromo\r\n // block_title = {\"Nu actueel\"}\r\n // block_subtitle = {\"in de media\"}\r\n // block_intro = {\"Ontdek de achtergronden bij de laatste onwikkelingen.\"}\r\n />\r\n </div>\r\n )}\r\n\r\n {this.storeGeneral.shop === 'SHOP_SB' && (\r\n <div className=\"content-wrapper__segment\">\r\n <BlockNewestBooksSB\r\n block_title = {\"De meest recente uitgaven\"}\r\n block_subtitle = {\"van onze uitgeverij\"}\r\n block_intro = {\"Met regelmaat vertalen we goede zelfhulpboeken naar het Nederlands en publiceren we deze via onze uitgeverij.\"}\r\n />\r\n </div>\r\n )}\r\n\r\n {this.storeGeneral.shop === 'SHOP_SB' && (\r\n <React.Fragment>\r\n <div className=\"content-wrapper__segment\">\r\n <BlockAnkeilerNewsletter />\r\n </div>\r\n\r\n <div className=\"content-wrapper__segment\">\r\n <BlocksNewsletter />\r\n </div>\r\n </React.Fragment>\r\n )}\r\n\r\n {this.storeGeneral.shop === 'SHOP_ALL' &&\r\n <React.Fragment>\r\n <div className=\"content-wrapper__segment\">\r\n <Suspense fallback={<p>loading..</p>}>\r\n <BlocksTop60 />\r\n </Suspense>\r\n </div>\r\n\r\n <div className=\"content-wrapper__segment\">\r\n <BlocksTop10 \r\n tag = {\"top10thrillers\"}\r\n type = {\"foldout\"}\r\n />\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n {/* \r\n <div className=\"content-wrapper__segment\">\r\n <BlocksGenres />\r\n </div>\r\n */}\r\n\r\n {/* \r\n <div className=\"content-wrapper__segment\">\r\n <BlocksCategories \r\n blockTitle = {i18n.t(\"blocks.categories.header\")}\r\n />\r\n </div> \r\n */}\r\n\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <div className=\"content-wrapper__segment content-wrapper__segment--popular\">\r\n <BlockCatsPopular />\r\n </div>\r\n }\r\n\r\n <div className=\"content-wrapper__segment\">\r\n <BlocksRecentlyViewed />\r\n </div>\r\n \r\n </React.Fragment>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(Start));\r\n","export async function sbFetch(endPoint, method, data) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndPoint = urlAPI + endPoint;\r\n let params;\r\n\r\n const controller = new window.AbortController();\r\n const signal = controller.signal;\r\n\r\n if (method === 'GET' || method === 'DELETE') {\r\n params = {\r\n method: method,\r\n headers: new Headers({\r\n }),\r\n signal : signal\r\n }\r\n } \r\n\r\n if (method === 'POST') {\r\n params = {\r\n method: method,\r\n body: JSON.stringify(data),\r\n headers: new Headers({\r\n }),\r\n signal : signal\r\n }\r\n } \r\n\r\n if (method === 'PUT') {\r\n params = {\r\n method: method,\r\n body: JSON.stringify(data),\r\n headers: new Headers({\r\n }),\r\n signal : signal\r\n }\r\n } \r\n\r\n try { \r\n let response = await fetch(urlEndPoint, params);\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error: ', urlEndPoint, error.message);\r\n if (error.name == 'AbortError') {\r\n console.log('SbC abort error')\r\n } else {\r\n throw error;\r\n }\r\n }\r\n}\r\n\r\nexport async function authFetch(endPoint, method, data) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndPoint = urlAPI + endPoint;\r\n let params;\r\n\r\n const controller = new window.AbortController();\r\n const signal = controller.signal;\r\n\r\n const key = process.env.REACT_APP_API_KEY;\r\n\r\n if (method === 'DELETE') {\r\n params = { \r\n method: method\r\n }\r\n\r\n if (process.env.REACT_APP_ENV !== 'dev') {\r\n params['headers'] = new Headers({\r\n Authorization: 'Bearer ' + key\r\n })\r\n }\r\n } \r\n\r\n if (method === 'GET') {\r\n params = { \r\n method: method,\r\n signal : signal\r\n }\r\n\r\n if (process.env.REACT_APP_ENV !== 'dev') {\r\n params['headers'] = new Headers({\r\n Authorization: 'Bearer ' + key\r\n })\r\n }\r\n } \r\n\r\n if (method === 'POST') {\r\n params = {\r\n method: method,\r\n body: JSON.stringify(data),\r\n signal : signal\r\n }\r\n\r\n if (process.env.REACT_APP_ENV !== 'dev') {\r\n params['headers'] = new Headers({\r\n Authorization: 'Bearer ' + key\r\n })\r\n }\r\n } \r\n\r\n if (method === 'PUT') {\r\n params = {\r\n method: method,\r\n body: JSON.stringify(data),\r\n signal : signal\r\n }\r\n\r\n if (process.env.REACT_APP_ENV !== 'dev') {\r\n params['headers'] = new Headers({\r\n Authorization: 'Bearer ' + key\r\n })\r\n }\r\n } \r\n\r\n try {\r\n let response = await fetch(urlEndPoint, params);\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n //let arrData = [];\r\n let arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n if (process.env.REACT_APP_ENV !== 'prod') {\r\n //console.log('SbC auth fetch error: ', urlEndPoint, method, error.message);\r\n }\r\n }\r\n}\r\n\r\nexport function abortFetch(endPoint, method, data, controller, signal) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndPoint = urlAPI + endPoint;\r\n \r\n const promise = new Promise(async (resolve) => {\r\n try {\r\n const response = await fetch(urlEndPoint, {\r\n method: method,\r\n body: JSON.stringify(data),\r\n signal\r\n });\r\n const data2 = await response.json();\r\n //assertIsCharacter(data);\r\n resolve(data2);\r\n } catch (error) {\r\n console.log('SbC fetch abort error')\r\n }\r\n });\r\n\r\n promise.cancel = () => controller.abort();\r\n\r\n return promise;\r\n}","import * as apifetch from './fetch.js';\r\n\r\nexport async function addUser(formControls, form) {\r\n const urlEndpoint = '/v2/accounts/register';\r\n\r\n const postData = {\r\n form: form,\r\n email: formControls.email.value,\r\n pw: formControls.password.value,\r\n firstname: formControls.firstname.value,\r\n lastname: formControls.lastname.value,\r\n subscription: formControls.has_subscription.value,\r\n country: 'Nederland',\r\n country_code: 'NL',\r\n phonenr: formControls.phonenr.value\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function addUserFromOrder(data) {\r\n const urlEndpoint = '/accounts/addUserFromOrder.php';\r\n\r\n const postData = data;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function addAnonymousUser(data) {\r\n const urlEndpoint = '/accounts/addAnonymousUser.php';\r\n \r\n const postData = data;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function checkPw(id, email, pw) {\r\n const urlEndpoint = '/accounts/checkPassword.php';\r\n \r\n const postData = {\r\n id: id,\r\n email: email,\r\n pw: pw\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function editUser(id, form_data) {\r\n const urlEndpoint = '/accounts/editUser.php';\r\n const postData = {\r\n id: id,\r\n form_data: form_data\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function editUserProfile(id, form_data) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/accounts/editUserProfile.php';\r\n\r\n const postData = {\r\n id: id,\r\n form_data: form_data\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error edit user: ', error.message);\r\n }\r\n}\r\n\r\nexport async function editBusinessProfile(id, data) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/profilebusiness';\r\n\r\n const postData = {\r\n id: id,\r\n data: data\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'PUT', postData);\r\n}\r\n\r\n// export async function XeditBusinessProfile(id, form_data) {\r\n// const urlAPI = process.env.REACT_APP_URL_API;\r\n// const urlEndpoint = urlAPI + '/accounts/editBusinessProfile.php';\r\n\r\n// const postData = {\r\n// id: id,\r\n// form_data: form_data\r\n// }\r\n\r\n// try {\r\n// let apiStr = urlEndpoint;\r\n// let response = await fetch(apiStr, {\r\n// method: 'POST',\r\n// body: JSON.stringify(postData),\r\n// headers: new Headers({\r\n \r\n// })\r\n// });\r\n \r\n// let responseJson = await response.json();\r\n// if (responseJson !== null) {\r\n// let arrData = [];\r\n// arrData = responseJson;\r\n\r\n// return arrData;\r\n// }\r\n// } catch (error) {\r\n// console.log('SbC fetch error edit user: ', error.message);\r\n// }\r\n// }\r\n\r\nexport async function retrievePassword(email, sms, sms_count) {\r\n let urlEndpoint;\r\n \r\n const postData = {\r\n email: email,\r\n sms_count: sms_count\r\n }\r\n\r\n if (sms === 1 || sms === '1') {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n urlEndpoint = urlAPI + '/sms/sendSmsPassword.php';\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n \r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error retrieve password: ', error.message);\r\n }\r\n } else {\r\n urlEndpoint = '/v2/accounts/password';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n }\r\n}\r\n\r\nexport async function getCommissionOrders(id) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/commissions';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getCommissionPayouts(id) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/payouts';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function checkEmailExists(email) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/accounts/checkEmailExists.php';\r\n\r\n const postData = {\r\n email: email\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error check email: ', error.message);\r\n }\r\n}\r\n\r\nexport async function checkSubscription(id) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/account';\r\n \r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function addUserFromPartnerForm(data) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/accounts/addPartner.php';\r\n\r\n const postData = {\r\n data: data\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData)\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n let arrData = {'data': [{error : 'An error has occurred'}]};\r\n return arrData;\r\n }\r\n}\r\n\r\nexport async function editUserFromPartnerForm(id, data) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/accounts/editPartner.php';\r\n\r\n const postData = {\r\n id: id,\r\n data: data\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error edit user through partner form: ', error.message);\r\n }\r\n}\r\n\r\nexport async function retrieveOrderId(id) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/order';\r\n \r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function saveWishList(id, data) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/wishlist';\r\n\r\n const postData = {\r\n wishlist: data\r\n }\r\n \r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function retrieveWishList(id) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/wishlist';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function saveShoppingCart(id, data, order_id, guid) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/cart';\r\n \r\n let guid_value;\r\n\r\n if (guid === undefined || guid === 'undefined' || guid === null) {\r\n guid_value = '';\r\n } else {\r\n guid_value = guid;\r\n }\r\n const postData = {\r\n id: id,\r\n order_id: order_id,\r\n guid: guid_value,\r\n cart: data\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function retrieveShoppingCart(id) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/cart';\r\n \r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function retrieveShoppingCart2(id) {\r\n //SbC DEPRICATED?\r\n const urlEndpoint = '/v2/accounts/' + id + '/cart';\r\n \r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function deleteShoppingCart(id) {\r\n const urlEndpoint = '/v2/accounts/' + id + '/cart';\r\n \r\n return apifetch.authFetch(urlEndpoint, 'DELETE');\r\n}\r\n\r\nexport async function unSubscribe(email) {\r\n const urlEndpoint = '/accounts/unSubscribeUser.php';\r\n\r\n const postData = {\r\n email: email\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function sendEmailUnSubscribe(email) {\r\n const urlEndpoint = '/email/sendFormUnsubscribe.php';\r\n\r\n const postData = {\r\n email: email\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getReviewerData(email) {\r\n const urlEndpoint = '/accounts/getReviewerData.php';\r\n\r\n const postData = {\r\n email: email\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function refreshUserData(id) {\r\n const urlEndpoint = '/v2/accounts/' + id;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function retrieveOrderItems(id) {\r\n //SbC id - orderid -> move to order???\r\n const urlEndpoint = '/v2/accounts/' + id + '/orderitems';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n","import moment from \"moment\";\r\n\r\nconst validate = (value, rules, msg) => {\r\n let isValid = true;\r\n let msgError = '';\r\n\r\n for (let rule in rules) {\r\n switch (rule) {\r\n case 'minLength': \r\n // if (!msg) {\r\n // isValid = isValid && minLengthValidator(value, rules[rule]); \r\n // } else {\r\n isValid = {\r\n value: isValid && minLengthValidator(value, rules[rule]),\r\n msg: \"Gebruik minimaal \" + rules[rule] + \" karakters\"\r\n }\r\n\r\n if (!minLengthValidator(value, rules[rule])) {\r\n msgError = \"Gebruik minimaal \" + rules[rule] + \" karakters\";\r\n }\r\n //}\r\n break;\r\n \r\n case 'maxLength': isValid = isValid && maxLengthValidator(value, rules[rule]); break;\r\n \r\n case 'isRequired': isValid = isValid && requiredValidator(value); break;\r\n \r\n case 'isEmail': isValid = isValid && emailValidator(value); break;\r\n \r\n case 'isPhoneNumber': isValid = isValid && phoneNumberValidator(value); break;\r\n\r\n case 'isEmailBasic': isValid = isValid && basicEmailValidator(value); break;\r\n\r\n case 'isInteger': isValid = isValid && integerValidator(value); break;\r\n\r\n case 'onlyNumbers': isValid = isValid && onlyNumbersValidator(value); break;\r\n\r\n case 'noForbiddenCharacters': \r\n //if (!msg) {\r\n //console.log('SbC check..no msg')\r\n // isValid = {\r\n // value: isValid && noForbiddenCharactersValidator(value)\r\n // }\r\n if (!noForbiddenCharactersValidator(value)) {\r\n msgError = 'Je gebruikt tekens, die niet toegestaan zijn';\r\n }\r\n //} else {\r\n //console.log('SbC check msg..')\r\n // isValid = {\r\n // value: isValid && noForbiddenCharactersValidator(value),\r\n // msg: isValid.msg\r\n // }\r\n //}\r\n break;\r\n \r\n case 'passCaptcha': isValid = isValid && captchaValidator(value); break;\r\n \r\n default: isValid = true;\r\n }\r\n\r\n }\r\n\r\n if (msgError !== '') {\r\n isValid = {\r\n value: false,\r\n msg: msgError\r\n }\r\n }\r\n\r\n return isValid;\r\n}\r\n\r\n/**\r\n * minLength Val\r\n * @param value \r\n * @param minLength\r\n * @return \r\n */\r\nconst minLengthValidator = (value, minLength) => {\r\n return value.length >= minLength;\r\n}\r\n\r\n/**\r\n * maxLength Val\r\n * @param value \r\n * @param minLength\r\n * @return \r\n */\r\nconst maxLengthValidator = (value, maxLength) => {\r\n return value.length <= maxLength;\r\n}\r\n\r\n/**\r\n * Check to confirm that field is required\r\n * \r\n * @param value \r\n * @return \r\n */\r\nconst requiredValidator = value => {\r\n if (value && value !== null) {\r\n return value.trim() !== '';\t\r\n } else {\r\n return false;\r\n }\r\n}\r\n\r\n/**\r\n * Check to confirm that field is integer\r\n * \r\n * @param value \r\n * @return \r\n */\r\nconst integerValidator = value => {\t\r\n //SbC allow negatives and numbers\r\n //return /^-?[0-9]*$/.test(value);\r\n return Number.isInteger(Number(value)) === true;\t\r\n}\r\n\r\n/**\r\n * Check to confirm only numbers in field\r\n * \r\n * @param value \r\n * @return \r\n */\r\nconst onlyNumbersValidator = value => {\r\n return /^\\d+$/.test(value);\t\r\n}\r\n\r\n/**\r\n * Check to confirm can be phone number\r\n * \r\n * @param value \r\n * @return \r\n */\r\nconst phoneNumberValidator = value => {\r\n var re = /^[\\+]?([\\ 0-9\\-\\.\\(\\)]+$)/;\t\r\n return re.test(value);\t\r\n}\r\n\r\n/**\r\n * Check to pass captcha\r\n * \r\n * @param value \r\n * @return \r\n */\r\nconst captchaValidator = value => {\r\n const days = ['zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag'];\r\n const today = moment().day();\r\n const isValid = (days.indexOf(value.toLowerCase()) > -1 && days.indexOf(value.toLowerCase()) == today) ? true : false;\r\n return isValid;\r\n}\r\n\r\n/**\r\n * Email validation - basic\r\n * \r\n * @param value\r\n * @return \r\n */\r\nconst basicEmailValidator = value => {\r\n var re = /[@]+[.]+[.(*)]$/;\r\n return re.test(String(value).toLowerCase());\r\n}\r\n\r\n/**\r\n * Email validation\r\n * \r\n * @param value\r\n * @return \r\n */\r\nconst emailValidator = value => {\r\n var last3 = value.slice(-3);\r\n if (last3 === '.co') {\r\n return false;\r\n } else {\r\n var re = /^(([^<>()\\[\\]\\\\.,;:\\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,}))$/;\r\n return re.test(String(value).toLowerCase());\r\n }\r\n}\r\n\r\n/**\r\n * Cheeck for forbidden characters\r\n * \r\n * @param value \r\n * @return \r\n */\r\nconst noForbiddenCharactersValidator = value => {\r\n //SbC characters forbidden in password\r\n var re = /[\"'`]/;\r\n return !re.test(value);\t\r\n}\r\n\r\nexport default validate;\r\n\r\n","import React from 'react';\r\nimport i18n from \"i18next\";\r\n\r\nfunction checkPaste(e, arr) {\r\n if (arr && arr.indexOf(\"paste\") > -1) {\r\n e.preventDefault();\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nfunction checkEnter(e) {\r\n if (e.keyCode == 13) {\r\n e.preventDefault();\r\n }\r\n}\r\n\r\nconst TextInput = (props) => {\r\n let formClass = \"form-field--text\";\r\n\r\n if (props.className && props.className !== '') {\r\n formClass = formClass + ' ' + props.className;\r\n }\r\n\r\n if (props.touched && !props.valid && props.value !== '') {\r\n formClass = formClass + ' --error';\r\n }\r\n\r\n if (props.readonly) {\r\n formClass = formClass + ' --readonly';\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <input \r\n {...props}\r\n type = {props.secret ? \"password\" : \"text\" }\r\n className = {formClass} \r\n onPaste = {(e) => {\r\n checkPaste(e, props.disable)\r\n }} \r\n readOnly = {props.readonly ? 'readonly' : null}\r\n onKeyDown={(e) => {\r\n checkEnter(e)\r\n }}\r\n />\r\n {props.type === 'password' && \r\n <span className={\"form-group__secret-switch\" + (props.secret ? '' : ' --active')} onClick={() => props.showSecret()}>\r\n {props.secret ? 'Toon' : 'Verberg'}\r\n </span>\r\n }\r\n\r\n {(props.valid && props.valid.value === false) &&\r\n <React.Fragment>\r\n {(props.touched && props.value !== '') && \r\n <React.Fragment>\r\n {props.msg\r\n ? <span className=\"form-field--error\">{props.valid.msg}</span>\r\n : <span className=\"form-field--error\">xxx{i18n.t(\"form_errors.general\")}</span>\r\n }\r\n </React.Fragment>\r\n} </React.Fragment>\r\n }\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nexport default TextInput;","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport TextInput from '../../elements/form-input-text';\r\n\r\nconst RowText = inject(\"stores\") (\r\n observer (\r\n class RowText extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n formControls: { \r\n textinput: {\r\n name: this.props.name,\r\n value: this.props.value,\r\n touched: false,\r\n validationRules: this.props.validationRules,\r\n validationMsg: this.props.validationMsg \r\n ? this.props.validationMsg \r\n : this.props.type == 'email' ? i18n.t(\"form_errors.email\") : i18n.t(\"form_errors.general\"),\r\n valid: true,\r\n required: this.props.required,\r\n secret: this.props.type === 'password' ? true : false\r\n }\r\n },\r\n classError: ''\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.props.validateRowOnMount) {\r\n const isValid = validate(this.state.formControls.textinput.value, this.state.formControls.textinput.validationRules);\r\n const classError = (!isValid\r\n ? \" --error\" \r\n : ' '\r\n );\r\n this.setState({\r\n classError: classError\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n const name = 'textinput';\r\n\r\n //if (this.props.syncedEmail && (prevProps.value !== this.props.value)) {\r\n if ((prevProps.value !== this.props.value)) {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n\r\n updatedFormElement.value = this.props.value;\r\n updatedFormElement.valid = validate(this.props.value, updatedFormElement.validationRules);\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n });\r\n }\r\n }\r\n\r\n handleChange = (event, action) => { \r\n const name = 'textinput';\r\n let value = event.target.value;\r\n let validated;\r\n\r\n //SbC no spaces allowed in email\r\n if (this.props.type === 'email') {\r\n value = value.replace(/\\s+/g, '');\r\n }\r\n\r\n //SbC replace apostroph\r\n value = value.replace(/'/g, '`');\r\n\r\n //SbC no trailing spaces in zipcode after 5 characters\r\n if (this.props.name === 'zipcode' && value.length > 6) {\r\n value = value.trim();\r\n }\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n\r\n //updatedFormElement.touched = true;\r\n updatedFormElement.value = value;\r\n \r\n if (updatedFormElement.validationMsg === \"ruleMsg\") {\r\n validated = validate(value, updatedFormElement.validationRules, \"msg\");\r\n updatedFormElement.valid = validated.value;\r\n updatedFormElement.validationMsg = validated.msg;\r\n } else {\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n }\r\n\r\n if (this.props.type === 'email' && !updatedFormElement.touched) {\r\n updatedFormElement.valid = true;\r\n }\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n classError: validate(value, updatedFormElement.validationRules) \r\n ? \" \" \r\n : \" --error\" \r\n }, () => this.props.onValidate(this.props.name, value, updatedFormElement.valid, updatedFormElement.touched)); \r\n }\r\n\r\n handleBlur = () => {\r\n const name = 'textinput';\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n\r\n if (this.state.formControls[name].value === \"\") {\r\n if (updatedFormElement.touched !== true) {\r\n updatedFormElement.touched = true;\r\n }\r\n } else {\r\n updatedFormElement.touched = true;\r\n } \r\n\r\n //SbC remove trailing spaces\r\n let value = updatedFormElement.value;\r\n if (value !== null) {\r\n updatedFormElement.value = value.trim();\r\n }\r\n\r\n if (this.props.type === 'email') {\r\n updatedFormElement.valid = validate(this.state.formControls[name].value, updatedFormElement.validationRules);\r\n }\r\n\r\n updatedControls[name] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.props.onBlur && this.props.onBlur(this.props.name, this.state.formControls[name].value, updatedFormElement.valid, updatedFormElement.touched)); \r\n }\r\n\r\n showSecret = () => {\r\n const name = 'textinput';\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.secret = !this.state.formControls[name].secret;\r\n updatedControls[name] = updatedFormElement;\r\n \r\n this.setState({\r\n formControls: updatedControls\r\n }); \r\n }\r\n\r\n render() {\r\n const objRules = this.props.validationRules;\r\n const required = (Object.keys(objRules).length > 0 && 'isRequired' in objRules)\r\n ? ' --required'\r\n : ''\r\n\r\n return (\r\n <div \r\n className={\"form-row form-row--input\" + (\r\n (Object.keys(objRules).length > 0 && 'isRequired' in objRules && \r\n this.state.formControls.textinput.touched === true && \r\n this.state.formControls.textinput.value === '') ||\r\n (!this.state.formControls.textinput.valid && (Object.keys(objRules).length > 0) && this.state.formControls.textinput.value !== '')\r\n ? \" --error\" \r\n : ' '\r\n ) + this.state.classError} \r\n >\r\n <div className=\"form-column\">\r\n <label className={\"form-label\" + required}>\r\n {this.props.label ? this.props.label : i18n.t(\"forms.label.\" + this.props.name)}\r\n </label>\r\n </div>\r\n <div className=\"form-column\">\r\n <TextInput \r\n type = {this.props.type} \r\n name = {this.props.name} \r\n placeholder = {this.props.placeholder ? this.props.placeholder : i18n.t(\"forms.placeholder.\" + this.props.name)}\r\n value = {this.state.formControls.textinput.value}\r\n touched = {this.state.formControls.textinput.touched}\r\n valid = {this.state.formControls.textinput.valid}\r\n onChange = {this.handleChange}\r\n onBlur = {this.handleBlur}\r\n msg = {this.state.formControls.textinput.validationMsg}\r\n secret = {this.state.formControls.textinput.secret}\r\n showSecret = {this.showSecret}\r\n disable = {this.props.disable}\r\n readonly = {this.props.readOnly}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(RowText);\r\n","import React from 'react';\r\n\r\nconst Select = props => {\r\n\r\n let formControl = \"form-control\";\r\n\r\n return (\r\n <div className=\"form-group\">\r\n <select \r\n className = {formControl} \r\n value = {props.defaultValue} \r\n onChange = {props.onChange} \r\n name = {props.name}\r\n >\r\n {props.options.map(option => (\r\n <option \r\n value = {option.value} \r\n key = {option.value}\r\n >\r\n {option.displayValue}\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n );\r\n}\r\n\r\nexport default Select;","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport * as account from '../../communicator/account';\r\nimport validate from '../../utilities/validation-rules';\r\n\r\nimport RowText from '../form-rows/row-text';\r\n\r\nimport Checkbox from '../../elements/form-input-checkbox';\r\nimport Select from '../../elements/form-input-select';\r\n\r\nconst FormProfile = inject(\"stores\") (\r\n observer (\r\n class FormProfile extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeForms = this.props.stores.storeForms;\r\n\r\n this.state = {\r\n error_email: false,\r\n error_email_empty: false,\r\n formIsValid: false,\r\n formControls: { \r\n firstname: {\r\n type: \"text\",\r\n value: this.storeUser.user_data.is_loggedin\r\n ? this.storeUser.user_data.profile.firstname\r\n : '',\r\n validationRules: {\r\n isRequired: true,\r\n },\r\n valid: (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? this.storeUser.user_data.profile.firstname !== '' \r\n ? true \r\n : false\r\n : true\r\n },\r\n lastname: {\r\n type: \"text\",\r\n value: this.storeUser.user_data.is_loggedin\r\n ? this.storeUser.user_data.profile.lastname\r\n : this.props.view === \"cart\" ? this.storeOrder.order_data.client_profile.lastname : this.storeUser.user_data.profile.lastname,\r\n validationRules: {\r\n isRequired: true,\r\n },\r\n valid: (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? this.storeUser.user_data.profile.lastname !== ''\r\n ? true\r\n : false\r\n : true\r\n }, \r\n email: {\r\n type: \"email\",\r\n value: this.storeAuth.user.is_loggedin\r\n ? this.storeUser.user_data.profile.email\r\n : this.props.view === \"cart\" \r\n ? this.props.email\r\n ? this.props.email\r\n : this.storeOrder.order_data.client_profile.email \r\n : this.storeUser.user_data.profile.email,\r\n validationRules: {\r\n isRequired: true,\r\n isEmail: true\r\n },\r\n validationMsg: i18n.t(\"form_errors.email\"),\r\n valid: this.storeUser.user_data.is_loggedin\r\n ? true\r\n : false\r\n },\r\n phonenr: {\r\n type: \"text\",\r\n value: this.storeUser.user_data.is_loggedin\r\n ? this.storeUser.user_data.profile.phonenr\r\n : this.props.view === \"cart\" ? this.storeOrder.order_data.client_profile.phonenr : this.storeUser.user_data.profile.phonenr,\r\n validationRules: { \r\n isRequired: true,\r\n isPhoneNumber: true\r\n },\r\n valid: (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? this.storeUser.user_data.profile.phonenr !== ''\r\n ? true\r\n : false\r\n : true\r\n },\r\n address: {\r\n type: \"text\",\r\n value: \r\n this.storeUser.user_data.is_loggedin\r\n ? this.storeUser.user_data.profile.address !== null \r\n ? this.storeUser.user_data.profile.address\r\n : ''\r\n : this.props.view === \"cart\" ? this.storeOrder.order_data.client_profile.address : this.storeUser.user_data.profile.address,\r\n validationRules: \r\n (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? {isRequired: true}\r\n : {}\r\n ,\r\n valid: (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? this.storeUser.user_data.profile.address !== '' && this.storeUser.user_data.profile.address !== null\r\n ? true\r\n : false\r\n : true\r\n },\r\n housenr: {\r\n type: \"text\",\r\n value: this.storeUser.user_data.is_loggedin \r\n ? this.storeUser.user_data.profile.housenr !== null\r\n ? this.storeUser.user_data.profile.housenr\r\n : ''\r\n : this.props.view === \"cart\" ? this.storeOrder.order_data.client_profile.housenr : this.storeUser.user_data.profile.housenr,\r\n validationRules: \r\n (this.props.view === \"cart\" || \r\n this.props.view === \"partner\" ||\r\n (this.props.view === \"cart\" && this.storeOrder.order_data.client_id > Number(this.storeUi.settings_list[\"requiredHousenr\"])))\r\n ? {isRequired: true}\r\n : {}\r\n ,\r\n valid: (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? this.storeUser.user_data.profile.housenr !== ''\r\n ? true\r\n : false\r\n : true\r\n },\r\n addition: {\r\n type: \"text\",\r\n value: this.storeUser.user_data.is_loggedin\r\n ? this.storeUser.user_data.profile.addition !== null\r\n ? this.storeUser.user_data.profile.addition\r\n : ''\r\n : this.props.view === \"cart\" ? this.storeOrder.order_data.client_profile.addition : this.storeUser.user_data.profile.addition,\r\n validationRules: {},\r\n validationMsg: i18n.t(\"form_errors.addition\"),\r\n valid: true\r\n },\r\n zipcode: {\r\n type: \"text\",\r\n value: this.storeUser.user_data.is_loggedin\r\n ? this.storeUser.user_data.profile.zipcode !== null\r\n ? this.storeUser.user_data.profile.zipcode\r\n : ''\r\n : this.props.view === \"cart\" ? this.storeOrder.order_data.client_profile.zipcode : this.storeUser.user_data.profile.zipcode,\r\n validationRules: \r\n (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? {isRequired: true}\r\n : {}\r\n ,\r\n valid: (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? this.storeUser.user_data.profile.zipcode !== '' && this.storeUser.user_data.profile.zipcode !== null\r\n ? true\r\n : false\r\n : true\r\n },\r\n city: {\r\n type: \"text\",\r\n value: this.storeUser.user_data.is_loggedin\r\n ? this.storeUser.user_data.profile.city !== null\r\n ? this.storeUser.user_data.profile.city\r\n : ''\r\n : this.props.view === \"cart\" ? this.storeOrder.order_data.client_profile.city : this.storeUser.user_data.profile.city,\r\n validationRules: \r\n (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? {isRequired: true}\r\n : {}\r\n ,\r\n valid: (this.props.view === \"cart\" || this.props.form === \"partner\")\r\n ? this.storeUser.user_data.profile.city !== '' && this.storeUser.user_data.profile.city !== null\r\n ? true\r\n : false\r\n : true\r\n },\r\n country_select: {\r\n type: \"select\",\r\n label: i18n.t(\"forms.label.country\"),\r\n value: this.storeUser.user_data.is_loggedin\r\n ? this.storeUser.user_data.profile.country_code\r\n : this.props.view === \"cart\" \r\n ? this.storeOrder.order_data.client_profile.country_code \r\n : this.storeUser.user_data.profile.country_code !== '' && this.storeUser.user_data.profile.country_code !== undefined && this.storeUser.user_data.profile.country_code !== null\r\n ? this.storeUser.user_data.profile.country_code\r\n : 'NL',\r\n placeholder: i18n.t(\"forms.placeholder.country\"),\r\n options: this.storeOrder.countriesList,\r\n validationRules: {},\r\n valid: true\r\n },\r\n has_subscription: {\r\n label: i18n.t(\"forms.label.subscribe\"),\r\n value: this.storeAuth.user.is_loggedin \r\n ? (this.storeUser.user_data.profile.has_subscription === \"1\" || this.storeUser.user_data.profile.has_subscription === 'on') \r\n ? 1 \r\n : 0\r\n : 1,\r\n validationRules: {},\r\n valid: true\r\n }\r\n }\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n if (this.storeOrder.countriesList.length === 0) {\r\n await (async() => this.storeOrder.getCountries()) ();\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['country_select']\r\n };\r\n updatedFormElement['options'] = this.storeOrder.countriesList;\r\n\r\n updatedControls['country_select'] = updatedFormElement;\r\n this.setState({\r\n formControls: updatedControls\r\n })\r\n }\r\n\r\n //SbC check has_subscription\r\n if (this.storeAuth.user.is_loggedin) {\r\n const has_subscription = await this.storeUser.checkSubscription(this.storeAuth.user.user_id);\r\n \r\n if (has_subscription !== this.state.formControls.has_subscription.value) {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['has_subscription']\r\n };\r\n updatedFormElement['value'] = parseInt(has_subscription);\r\n updatedFormElement.touched = true;\r\n \r\n updatedControls['has_subscription'] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls\r\n });\r\n }\r\n }\r\n\r\n if ('email' in this.props && this.props.email !== '') {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['email']\r\n };\r\n updatedFormElement['value'] = this.props.email;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(this.props.email, updatedFormElement.validationRules);\r\n\r\n updatedControls['email'] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls\r\n }, () => this.validateForm());\r\n } else {\r\n this.validateForm()\r\n }\r\n } \r\n\r\n componentDidUpdate = async(prevProps) => {\r\n //SbC countries sometimes not loaded yet\r\n if ( this.storeOrder.countriesList.length === 0) {\r\n await (async() => this.storeOrder.getCountries()) ();\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['country_select']\r\n };\r\n updatedFormElement['options'] = this.storeOrder.countriesList;\r\n\r\n updatedControls['country_select'] = updatedFormElement;\r\n this.setState({\r\n formControls: updatedControls\r\n })\r\n }\r\n\r\n if (prevProps.loggedin !== this.props.loggedin) {\r\n this.updateFormAfterLogin();\r\n }\r\n\r\n if (prevProps.email !== this.props.email) {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['email']\r\n };\r\n updatedFormElement['value'] = this.props.email;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(this.props.email, updatedFormElement.validationRules);\r\n\r\n updatedControls['email'] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls\r\n }, () => this.validateRow('email', this.props.email, true, true));\r\n }\r\n }\r\n\r\n updateFormAfterLogin = () => {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n let updatedFormElement = {};\r\n \r\n Object.keys(this.state.formControls).map((key, i) => {\r\n updatedFormElement = {\r\n ...updatedControls[key]\r\n };\r\n if (key !== 'country_select' && key !== 'has_subscription') {\r\n updatedFormElement.value = this.storeOrder.order_data.client_profile[key];\r\n }\r\n if (key === 'country_select') {\r\n updatedFormElement.value = this.storeOrder.order_data.client_profile['country_code'];\r\n }\r\n if (key === 'has_subscription') {\r\n updatedFormElement.value = (this.storeUser.user_data.profile.has_subscription === \"1\" || this.storeUser.user_data.profile.has_subscription === 'on') ? 1 : 0;\r\n }\r\n updatedControls[key] = updatedFormElement;\r\n });\r\n\r\n this.setState({\r\n formControls: updatedControls\r\n }, () => this.validateForm());\r\n }\r\n\r\n async checkEmail(value) {\r\n let emailAvailable = true;\r\n emailAvailable = await this.storeUser.checkEmailExists(value);\r\n return emailAvailable; \r\n }\r\n\r\n handleCheckboxChange = (event) => {\r\n const name = 'has_subscription';\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n value: (parseInt(this.state.formControls[name].value) === 1 || this.state.formControls[name].value === \"on\") ? 0 : 1,\r\n selected: (parseInt(this.state.formControls[name].value) === 1 || this.state.formControls[name].value === \"on\") ? 0 : 1\r\n }\r\n }\r\n \r\n }, () => this.validateForm());\r\n }\r\n\r\n handleBlur(e, name, val) {\r\n let countryCode;\r\n let value;\r\n\r\n //SbC store removed trailing spaces\r\n if (val !== null) {\r\n if (val.length !== val.trimEnd().length) {\r\n value = val.trim();\r\n this.validateRow(name, value, true, true);\r\n } else {\r\n value = val;\r\n }\r\n } else {\r\n value = val;\r\n }\r\n\r\n if (name === \"zipcode\") {\r\n //SbC check zipcode for Belgium\r\n let zip_pattern_be = new RegExp(/^\\d+$/);\r\n if (zip_pattern_be.test(value) && value.length === 4) {\r\n countryCode = 'BE';\r\n }\r\n //SbC check zipcode for Netherlands\r\n let zip_pattern_nl = new RegExp(/^[1-9][0-9]{3} ?(?!sa|sd|ss)[a-z]{2}$/i);\r\n if (zip_pattern_nl.test(value)) {\r\n countryCode = 'NL';\r\n }\r\n\r\n if (countryCode === 'BE' || countryCode === 'NL') {\r\n this.handleDropdown('auto', countryCode);\r\n }\r\n }\r\n }\r\n\r\n handleDropdown = (action, countryCode) => {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['country_select']\r\n };\r\n updatedFormElement.value = countryCode;\r\n updatedControls['country_select'] = updatedFormElement;\r\n\r\n this.setState({\r\n notificationCountry: action === 'auto' \r\n ? (countryCode !== this.state.formControls.country_select.value && (countryCode === 'NL' || countryCode === 'BE')) ? true : false\r\n : false,\r\n formControls: updatedControls\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateRow = (name, value, valid, touched) => { \r\n this.storeUi.clearFormFeedback();\r\n\r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid, touched);\r\n\r\n if (name === 'email' && this.props.emailConnected) {\r\n this.props.syncEmail(value);\r\n } \r\n\r\n this.setState({\r\n error: null,\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = async() => {\r\n let emailAvailable = true;\r\n let emailValue = this.state.formControls.email.value;\r\n\r\n if (emailValue !== '' && emailValue !== this.storeUser.user_data.profile.email) {\r\n emailAvailable = await this.checkEmail(emailValue); \r\n }\r\n\r\n const formIsValid = emailAvailable && this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n error_email: !emailAvailable,\r\n error_email_empty: emailValue === '' ? true : false,\r\n formIsValid: formIsValid\r\n }, () => this.props.handleFormChange(this.state.formControls, this.state.formIsValid, 'profile'))\r\n }\r\n\r\n render() {\r\n const TextCheckbox = (props) => {\r\n return (\r\n <React.Fragment>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.subscribe\")}}></span>\r\n <a href=\"#\" onClick={(e) => this.openPS(e)}>privacy statement</a>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.subscribe2\")}}></span>\r\n <br/>\r\n <span>Partners worden altijd op de hoogte gehouden.</span>\r\n \r\n </React.Fragment>\r\n )\r\n }\r\n\r\n return (\r\n <form className=\"form\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {(key !== \"country_select\" && \r\n key !== \"has_subscription\") && \r\n <React.Fragment>\r\n {(this.state.formControls[key].type === \"text\" || this.state.formControls[key].type === \"email\" || this.state.formControls[key].type === \"password\") &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n validationMsg = {this.state.formControls[key].validationMsg}\r\n onValidate = {this.validateRow}\r\n onBlur = {(e) => this.handleBlur(e, key, this.state.formControls[key].value)}\r\n disable = {this.state.formControls[key].disable}\r\n readOnly = {(!this.storeUser.user_data.is_loggedin && this.state.formControls[key].type === \"email\" && this.props.syncedEmail)\r\n ? true\r\n : false\r\n }\r\n validateRowOnMount = {this.storeUser.user_data.is_loggedin \r\n ? true \r\n : false\r\n }\r\n syncedEmail = {this.props.syncedEmail}\r\n />\r\n }\r\n </React.Fragment>\r\n } \r\n\r\n {key === \"firstname\" && this.state.formControls.firstname.touched && (this.state.formControls.firstname.value === '' || this.state.formControls.firstname.value.length === 1) &&\r\n <span className=\"form-field--suggestion\">{i18n.t(\"form_suggestions.firstname\")}</span>\r\n }\r\n\r\n {key === \"email\" && this.state.error_email &&\r\n <span className=\"form-field--error --email\">Dit e-mailadres is al in gebruik. Log <Link to='/login'>hier</Link> in met dit e-mailadres, of vul een ander e-mailadres is.</span>\r\n }\r\n\r\n {key === \"email\" && this.state.formControls.email.touched && this.state.error_email_empty &&\r\n <span className=\"form-field--error --email\">Het e-mailadres kan niet leeg zijn.</span>\r\n }\r\n\r\n {key === \"country_select\" &&\r\n <div className=\"form-row form-row--select\">\r\n {this.state.formControls['country_select'].label}\r\n <Select \r\n name=\"country_select\"\r\n value = {this.state.formControls.country_select.value}\r\n options = {this.state.formControls.country_select.options ? this.state.formControls.country_select.options : []}\r\n touched = {this.state.formControls.country_select.touched}\r\n onChange = {(e) => this.handleDropdown('dd', e.target.value)}\r\n valueSelected = {this.state.formControls.country_select.value}\r\n defaultValue = {this.state.formControls.country_select.value}\r\n />\r\n </div>\r\n }\r\n\r\n {key === \"country_select\" && this.state.notificationCountry &&\r\n <span className=\"form-field--error --email\">Op basis van de postcode is het land aangepast.</span>\r\n }\r\n\r\n {key === \"has_subscription\" && this.props.option_subscription &&\r\n <div className=\"form-row form-row--input\">\r\n <Checkbox \r\n name = {key} \r\n label = {<TextCheckbox \r\n section = {key}\r\n />}\r\n value = {this.state.formControls[key].value}\r\n isSelected = {this.state.formControls[key].value}\r\n onCheckboxChange={this.handleCheckboxChange}\r\n className = {\"--reduced --subscription\"}\r\n />\r\n </div>\r\n }\r\n </React.Fragment>\r\n ))}\r\n </form>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormProfile);\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as account from '../../communicator/account';\r\nimport validate from '../../utilities/validation-rules';\r\n\r\nimport RowText from '../form-rows/row-text';\r\n\r\nconst FormBusiness = inject(\"stores\") (\r\n observer (\r\n class FormBusiness extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeForms = this.props.stores.storeForms;\r\n \r\n this.state = {\r\n formControls: { \r\n company: {\r\n type: \"text\",\r\n value: this.props.data.company \r\n ? this.props.data.company \r\n : this.storeUser.user_data.business.company,\r\n validationRules: {},\r\n valid: true\r\n },\r\n nrKvK: {\r\n type: \"text\",\r\n value: this.props.data.nrKvK \r\n ? this.props.data.nrKvK \r\n : this.storeUser.user_data.business.nrKvK,\r\n validationRules: {\r\n minLength: 4\r\n },\r\n validationMsg: i18n.t(\"forms.validation.nrKvK\"),\r\n valid: true\r\n },\r\n nrVAT: {\r\n type: \"text\",\r\n value: this.props.data.nrVAT \r\n ? this.props.data.nrVAT\r\n : this.storeUser.user_data.business.nrVAT,\r\n validationRules: {\r\n minLength: 3,\r\n },\r\n validationMsg: i18n.t(\"forms.validation.nrVAT\"),\r\n valid: true\r\n }\r\n },\r\n VATcountry: this.props.country_code,\r\n VATcheck: false,\r\n VATfeedback: false,\r\n VATdata: {},\r\n VATerror: '',\r\n VATvalid: true,\r\n formIsValid: true\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.validateForm();\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.country_code !== this.props.country_code) {\r\n this.setState({\r\n VATcountry: this.props.country_code\r\n })\r\n }\r\n\r\n if (prevProps.is_business !== this.props.is_business) {\r\n this.validateForm();\r\n }\r\n }\r\n\r\n validateRow = (name, value, valid, touched) => { \r\n this.storeUi.clearFormFeedback();\r\n\r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid, touched);\r\n\r\n this.setState({\r\n error: null,\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = async() => {\r\n const formIsValid = this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n formIsValid: formIsValid\r\n }, () => this.props.handleFormChange(this.state.formControls, this.state.formIsValid, 'business'))\r\n }\r\n\r\n async checkVATNummer() {\r\n let countryCode = '';\r\n\r\n if (this.storeUi.app_interface.use_case === \"inorder\") { \r\n if (this.storeOrder.order_data.client_profile.country_code === '') {\r\n this.setState({\r\n VATcheck: true,\r\n VATfeedback: true,\r\n VATdata: {},\r\n VATerror: \"Je moet een land selecteren bij je persoonlijke gegevens\",\r\n VATvalid: false\r\n })\r\n } else {\r\n countryCode = this.storeOrder.order_data.client_profile.country_code\r\n }\r\n } else {\r\n if (this.props.country_code === '') {\r\n this.setState({\r\n VATcheck: true,\r\n VATfeedback: true,\r\n VATdata: {},\r\n VATerror: \"Je moet een land selecteren bij je persoonlijke gegevens\",\r\n VATvalid: false\r\n })\r\n } else {\r\n countryCode = this.props.country_code\r\n }\r\n }\r\n\r\n const nrVAT = this.state.formControls['nrVAT'].value;\r\n if (nrVAT !== '') {\r\n const data = await this.storeUi.checkVATNumber(countryCode, nrVAT);\r\n\r\n this.setState({\r\n VATcheck: true,\r\n VATfeedback: true,\r\n VATdata: data,\r\n VATvalid: true\r\n })\r\n\r\n if ('error' in data) {\r\n const error_msg = \"errors.\" + data.error;\r\n this.setState({\r\n VATdata: {},\r\n VATerror: \"De invoer is niet geldig. Of je hebt in je profielgegevens een land buiten de EU geselecteerd of het btw-nummer begint met een ongeldige landcode\",\r\n VATvalid: false\r\n })\r\n } else {\r\n this.setState({\r\n VATerror: ''\r\n })\r\n \r\n if (!data.valid || data.valid === 'false') {\r\n const idx = this.storeOrder.countriesList.findIndex(country => country.code == data.country_code);\r\n const country = this.storeOrder.countriesList[idx].displayValue;\r\n if (data.country_code === data.vat_country) {\r\n this.setState({\r\n VATcheck: true,\r\n VATfeedback: true,\r\n VATdata: {},\r\n VATerror: \"Dit is geen geldig btw-nummer in \" + country + \" (het land geselecteerd in je profielgegevens)\",\r\n VATvalid: false\r\n })\r\n } else {\r\n const idx_vat = this.storeOrder.countriesList.findIndex(country => country.code == data.vat_country);\r\n const country_vat = this.storeOrder.countriesList[idx_vat].displayValue;\r\n this.setState({\r\n VATcheck: true,\r\n VATfeedback: true,\r\n VATdata: {},\r\n VATerror: \"De landcode van het btw-nummer (\" + country_vat + \") komt niet overeen met het geselecteerde land in je profielgegevens (\" + country + \")\",\r\n VATvalid: false\r\n })\r\n }\r\n }\r\n }\r\n } else {\r\n this.setState({\r\n VATcheck: true,\r\n VATfeedback: true,\r\n VATdata: {},\r\n VATerror: \"Het invoerveld voor het btw-nummer kan niet leeg zijn\",\r\n VATvalid: false\r\n })\r\n }\r\n }\r\n\r\n showCheckVAT = () => {\r\n const idx = this.storeOrder.countriesList.findIndex(country => country.code == this.props.country_code);\r\n const showCheck = (idx > -1 && this.storeOrder.countriesList[idx].eu === 1) ? true : false;\r\n\r\n return showCheck;\r\n }\r\n\r\n render() {\r\n return (\r\n <form className=\"form\"> \r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {this.state.formControls[key].type === \"text\" &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n validationMsg = {this.state.formControls[key].validationMsg}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n \r\n {key === 'nrVAT' && this.showCheckVAT() &&\r\n <React.Fragment>\r\n <span className=\"form-link--text\" onClick={() => this.checkVATNummer()}>Controleer btw-nummer</span>\r\n {this.state.VATcheck && this.state.VATfeedback &&\r\n <div className=\"form-row form-row--feedback\">\r\n {this.state.VATvalid === true &&\r\n <React.Fragment>\r\n <span>Dit btw-nummer behoort bij:</span>\r\n <span>{this.state.VATdata.name}</span>\r\n <span>{this.state.VATdata.address}</span>\r\n <span>{this.state.VATdata.country}</span>\r\n </React.Fragment>\r\n }\r\n {this.state.VATvalid === false &&\r\n <span className=\"form-field--error\">{this.state.VATerror}</span>\r\n }\r\n </div>\r\n }\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n \r\n \r\n ))}\r\n </form>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormBusiness);\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport RowText from '../form-rows/row-text';\r\n\r\nconst FormPartner = inject(\"stores\") (\r\n observer (\r\n class FormPartner extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeForms = this.props.stores.storeForms;\r\n\r\n this.state = {\r\n formControls: { \r\n website: {\r\n type: \"text\",\r\n value: this.storeUser.partner_data.partner.website ? this.storeUser.partner_data.partner.website : this.storeUser.user_data.partner.website,\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: this.storeUser.user_data.partner.website !== ''\r\n ? true\r\n : false\r\n },\r\n bank_account: {\r\n type: \"text\",\r\n value: this.storeUser.partner_data.partner.bank_account ? this.storeUser.partner_data.partner.bank_account : this.storeUser.user_data.partner.bank_account,\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: this.storeUser.user_data.partner.bank_account !== ''\r\n ? true\r\n : false\r\n }, \r\n account_holder: {\r\n type: \"text\",\r\n value: this.storeUser.partner_data.partner.account_holder ? this.storeUser.partner_data.partner.account_holder : this.storeUser.user_data.partner.account_holder,\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: this.storeUser.user_data.partner.account_holder !== ''\r\n ? true\r\n : false\r\n },\r\n account_city: {\r\n type: \"text\",\r\n value: this.storeUser.partner_data.partner.account_city ? this.storeUser.partner_data.partner.account_city : this.storeUser.user_data.partner.account_city,\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: this.storeUser.user_data.partner.account_city !== ''\r\n ? true\r\n : false\r\n }\r\n },\r\n error: false\r\n }\r\n }\r\n\r\n componentDidMount =() => {\r\n this.validateForm();\r\n }\r\n\r\n validateRow = (name, value, valid, touched) => { \r\n this.storeUi.clearFormFeedback();\r\n\r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid, touched);\r\n\r\n this.setState({\r\n error: null,\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = async() => {\r\n const formIsValid = this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n formIsValid: formIsValid\r\n }, () => this.props.handleFormChange(this.state.formControls, this.state.formIsValid, 'partner'))\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <div className=\"form-wrapper\">\r\n <form className=\"form\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {this.state.formControls[key].type === \"text\" &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n validationMsg = {this.state.formControls[key].validationMsg}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n </React.Fragment>\r\n ))}\r\n </form>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormPartner);\r\n","import React, { Component } from 'react';\r\nimport { runInAction, reaction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport TextInput from '../../elements/form-input-text';\r\n\r\nconst FormPassword = inject(\"stores\") (\r\n observer (\r\n class FormPassword extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n formControls: { \r\n password: {\r\n type: \"password\",\r\n label: this.props.pw_reset \r\n ? i18n.t(\"forms.label.password_new\") \r\n : this.props.use_case === 'incart' \r\n ? i18n.t(\"forms.label.password_create\")\r\n : i18n.t(\"forms.label.password\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.password\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: true,\r\n minLength: 5\r\n },\r\n validationMsg: \"custom\",\r\n is_secret: true,\r\n secret: true,\r\n required: this.props.required ? true : false\r\n },\r\n password2: {\r\n type: \"password\",\r\n label: this.props.pw_reset ? i18n.t(\"forms.label.repeat_password_new\") : i18n.t(\"forms.label.repeat_password\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.repeat_password\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: true,\r\n minLength: 5\r\n },\r\n validationMsg: \"custom\",\r\n is_secret: true,\r\n secret: true,\r\n required: this.props.required ? true : false\r\n }\r\n },\r\n error: false,\r\n error_pw: false\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.props.pw_reset) {\r\n const password_current = {\r\n label: i18n.t(\"forms.label.password_current\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.password_current\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: true,\r\n minLength: 5\r\n },\r\n validationMsg: \"custom\",\r\n is_secret: true,\r\n secret: true,\r\n required: false\r\n };\r\n\r\n const updatedControls = {\r\n password_current: password_current,\r\n ...this.state.formControls\r\n }\r\n this.setState({\r\n formControls: {\r\n ...updatedControls\r\n }\r\n });\r\n }\r\n\r\n let validInit = this.checkPasswords(this.state.formControls.password.value, this.state.formControls.password2.value)\r\n\r\n if (this.propsinitPassword) this.props.initPassword(validInit) ;\r\n }\r\n\r\n checkPasswordCurrent = async(pw) => {\r\n let valid = false;\r\n const user_id = this.storeUser.user_data.user_id;\r\n const user_email = this.storeUser.user_data.profile.email;\r\n \r\n valid = await this.storeUi.checkPassword(user_id, user_email, pw);\r\n\r\n return valid;\r\n }\r\n\r\n handleChange = event => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n let matchingPw;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n if (updatedFormElement.validationMsg === \"custom\") {\r\n let validated = validate(value, updatedFormElement.validationRules, \"msg\");\r\n updatedFormElement.valid = validated.value;\r\n updatedFormElement.validationMsg = validated.msg;\r\n } else {\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n }\r\n updatedControls[name] = updatedFormElement;\r\n\r\n //SbC check if passwords match\r\n if (updatedControls.password.value == '' && updatedControls.password2.value === '') {\r\n matchingPw = true;\r\n } else {\r\n matchingPw = this.checkPasswords(updatedControls.password.value, updatedControls.password2.value);\r\n }\r\n if (updatedControls.password.touched && updatedControls.password2.touched) {\r\n this.setState({\r\n error_pw: !matchingPw\r\n });\r\n }\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n if ((formIsValid && !matchingPw) || !updatedControls.password.touched || !updatedControls.password2.touched) {\r\n formIsValid = false;\r\n }\r\n \r\n this.setState({\r\n formControls: updatedControls\r\n }, () => this.checkIfPwChangeRequired(updatedControls, formIsValid));\r\n }\r\n\r\n checkIfPwChangeRequired = async(updatedControls, formIsValid) => {\r\n let isValid = formIsValid;\r\n if (this.props.pw_reset) {\r\n const pw_current = this.state.formControls.password_current.value;\r\n const check_pw_current = await this.checkPasswordCurrent(pw_current);\r\n isValid = (check_pw_current === 0) ? false : formIsValid;\r\n } \r\n this.props.handleFormChange(updatedControls, isValid, 'password')\r\n }\r\n\r\n showSecret = (key) => {\r\n const name = key;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.secret = !this.state.formControls[name].secret;\r\n updatedControls[name] = updatedFormElement;\r\n \r\n this.setState({\r\n formControls: updatedControls\r\n }); \r\n }\r\n\r\n checkPasswords = (pw1, pw2) => {\r\n let matching = (pw1 === pw2 && pw1 !== '' && pw2 !== '') ? true : false;\r\n return matching;\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <div className=\"form-wrapper\">\r\n <form className=\"form\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n <div className=\"form-row form-row--input\" key={i}>\r\n <label \r\n className={\"form-label\" + (this.state.formControls[key].required ? ' --required' : '')}\r\n dangerouslySetInnerHTML={{ __html: this.state.formControls[key].label}}\r\n />\r\n <TextInput \r\n type = {this.state.formControls[key].type} \r\n name = {key} \r\n placeholder = {this.state.formControls[key].placeholder}\r\n value = {this.state.formControls[key].value}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls[key].valid}\r\n touched = {this.state.formControls[key].touched}\r\n msg = {this.state.formControls[key].validationMsg}\r\n is_secret = {this.state.formControls[key].is_secret}\r\n secret = {this.state.formControls[key].secret ? true: false} \r\n showSecret = {() => this.showSecret(key)}\r\n />\r\n </div>\r\n\r\n {key === \"password2\" && this.state.error_pw &&\r\n <span className=\"form-field--error --pw\">De wachtwoorden zijn niet gelijk</span>\r\n }\r\n </React.Fragment>\r\n ))}\r\n\r\n {this.state.error &&\r\n <div className=\"form-row form-row--error\">\r\n <p>Er is een fout opgetreden. Controleer je invoergegevens.</p>\r\n </div>\r\n }\r\n </form>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormPassword);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as account from '../../communicator/account';\r\n\r\nimport FormProfile from '../forms/form-profile';\r\nimport FormBusiness from '../../components/forms/form-business';\r\nimport FormPartner from '../../components/forms/form-partner';\r\nimport FormPassword from '../../components/forms/form-password';\r\n\r\nconst AccountProfile = inject(\"stores\") (\r\n observer (\r\n class AccountProfile extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n \"profile\": {\r\n formControls: {},\r\n formIsValid: true\r\n },\r\n \"password\": {\r\n formControls: {},\r\n formIsValid: false\r\n },\r\n \"business\": {\r\n formControls: {},\r\n formIsValid: true\r\n },\r\n \"partner\": {\r\n formControls: {},\r\n formIsValid: true\r\n },\r\n formIsValid: true,\r\n btn_class: '--active'\r\n };\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n this.storeUi.setUseCase(\"inshop\");\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUser.form_feedback = {};\r\n }\r\n \r\n handleFormChange = (formControls, formIsValid, section) => {\r\n Object.keys(this.state).map((key, i) => {\r\n if (key == section) {\r\n let updatedControls = {\r\n ...this.state[key]\r\n };\r\n const updatedFormElement = {\r\n formControls\r\n };\r\n updatedControls = updatedFormElement;\r\n updatedControls['formIsValid'] = formIsValid;\r\n \r\n this.setState({\r\n [key]: updatedControls,\r\n // btn_class: (section === 'profile' && formIsValid === false)\r\n // ? '--disabled'\r\n // : '--active'\r\n }, () => this.checkFormTotal())\r\n }\r\n })\r\n\r\n this.storeUser.clearFormFeedback();\r\n }\r\n\r\n checkFormTotal() {\r\n if (this.state.profile.formIsValid &&\r\n \r\n this.state.business.formIsValid &&\r\n this.state.partner.formIsValid) {\r\n this.setState({\r\n formIsValid: true,\r\n btn_class: '--active'\r\n })\r\n } else {\r\n this.setState({\r\n formIsValid: false,\r\n btn_class: '--disabled'\r\n })\r\n }\r\n }\r\n\r\n submitFormProfile = () => {\r\n if (this.state.formIsValid) {\r\n this.storeUser.changeUserData(this.state);\r\n \r\n //SbC also change user data in order data\r\n this.storeOrder.setDataProfile(this.state.profile.formControls);\r\n this.storeOrder.setDataBusiness(this.state.business.formControls);\r\n }\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"content\">\r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Persoonlijke gegevens</span>\r\n </div>\r\n <FormProfile \r\n handleFormChange = {this.handleFormChange} \r\n use_case = {\"inshop\"}\r\n option_subscription = {true}\r\n syncedEmail = {null}\r\n />\r\n </div>\r\n\r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Wachtwoord wijzigen</span>\r\n <span className=\"form__fieldset-subtitle\">Gebruik alleen indien je het wachtwoord wilt wijzigen</span>\r\n </div>\r\n <FormPassword \r\n handleFormChange = {this.handleFormChange} \r\n use_case = {\"inshop\"}\r\n pw_reset = {true}\r\n />\r\n <div className=\"form__feedback--inline\">\r\n {this.state.password.formIsValid\r\n ? <span className=\"--success\">Je wachtwoord wordt veranderd na het versturen van de wijzingen.</span>\r\n : <span>Je huidige wachtwoord wordt niet veranderd.</span>\r\n }\r\n\r\n {!this.state.password.formIsValid && (\r\n (this.state.password.formControls.password && this.state.password.formControls.password.value !== '') || \r\n (this.state.password.formControls.password2 && this.state.password.formControls.password2.value !== '') ||\r\n (this.state.password.formControls.password_current && this.state.password.formControls.password_current.value !== '')\r\n ) &&\r\n <span><br/>Controleer de ingevoerde wachtwoordgegevens.</span>\r\n }\r\n </div>\r\n </div>\r\n \r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Ben je een zakelijke klant en/of partner?</span>\r\n <span className=\"form__fieldset-subtitle\">(dit o.a in verband met btw-uitsplitsing)</span>\r\n </div>\r\n <FormBusiness \r\n handleFormChange = {this.handleFormChange} \r\n data = {this.storeUser.user_data.business}\r\n country_code = {this.state.profile.formControls.country_select && this.state.profile.formControls.country_select.value}\r\n />\r\n </div>\r\n\r\n {this.storeAuth.user.is_partner &&\r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Partnergegevens</span>\r\n <span className=\"form__fieldset-subtitle\">(in verband met commissiebetalingen)</span>\r\n <span className=\"form__fieldset-subtitle\">Partner code: {this.storeUser.user_data.partner_code}</span>\r\n </div>\r\n <FormPartner \r\n handleFormChange = {this.handleFormChange} \r\n data = {this.storeUser.user_data.partner}\r\n />\r\n </div>\r\n }\r\n\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.submitFormProfile()}>Verstuur wijzigingen</button>\r\n </div>\r\n\r\n {Object.keys(this.storeUser.form_feedback).length > 0 && \r\n <div className=\"form__feedback\">\r\n {this.storeUser.form_feedback && this.storeUser.form_feedback.msg && this.storeUser.form_feedback.msg.success &&\r\n <span>{this.storeUser.form_feedback.msg.success}</span>\r\n }\r\n {this.storeUser.form_feedback && this.storeUser.form_feedback.msg && this.storeUser.form_feedback.msg.error &&\r\n <span className=\"form-field--error\">{this.storeUser.form_feedback.msg.error}</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default AccountProfile;\r\n\r\n\r\n","import React from 'react';\r\nimport i18n from \"i18next\";\r\n\r\nconst ButtonDialog = (props) => {\r\n\r\n let btnClass = \"dialog-footer__button\";\r\n\r\n if (props.btnClass && props.btnClass !== '') {\r\n btnClass = btnClass + ' ' + btnClass + props.btnClass;\r\n }\r\n \r\n return (\r\n <button \r\n className = {btnClass} \r\n onClick = {props.onAction}\r\n >\r\n <span dangerouslySetInnerHTML={{ __html: props.caption}} />\r\n </button>\r\n );\r\n}\r\n\r\nexport default ButtonDialog;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport PropTypes from 'prop-types';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nconst DialogConfirmation = inject(\"stores\") (\r\n observer (\r\n class DialogConfirmation extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n\r\n // const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n // if (this.storeUser.user_data.is_loggedin) { \r\n // if (!this.storeOrder.order_interface.isDialogCompareCartsOpen) {\r\n // (async() => await this.storeOrder.retrieveShoppingCartFromDB(id, 'init'))(); \r\n // (async() => await this.storeOrder.calculateTotal())();\r\n // //this.storeOrder.calculateTotalCart();\r\n // }\r\n // }\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className=\"dialog dialog--confirmation\">\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.title}</h2>\r\n {this.props.subtitle &&\r\n <span className=\"dialog-header__subtitle\">{this.props.subtitle}</span>\r\n }\r\n </div>\r\n <div className=\"dialog-content\">\r\n {this.props.sku &&\r\n <ImgCover\r\n sku = {this.props.sku}\r\n aspect = {'--fixed-height'}\r\n />\r\n }\r\n {this.props.children}\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(DialogConfirmation);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport NewWindow from 'react-new-window';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport * as account from '../../communicator/account';\r\nimport DialogConfirmation from '../dialogs/dialog-confirmation';\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nconst ContentDialog = inject(\"stores\") (\r\n observer (\r\n class ContentDialog extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n render() {\r\n return (\r\n this.props.children\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst OpenOrderLine = inject(\"stores\") (\r\n observer (\r\n class OpenOrderLine extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n sku: 0 \r\n }\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = async() => {\r\n this.getISBN(this.props.id);\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (prevProps.id !== this.props.id) {\r\n this.getISBN(this.props.id);\r\n }\r\n }\r\n\r\n getISBN = async(id) => {\r\n let isbn;\r\n\r\n if (id.toString().length < 10) {\r\n isbn = await this.storeBooks.getBookISBN(id);\r\n } else {\r\n isbn = id;\r\n }\r\n\r\n this.setState({\r\n sku: isbn\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"order-summary__image\">\r\n <ImgCover\r\n sku = {this.state.sku}\r\n />\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst AccountOpenOrder = inject(\"stores\") (\r\n observer (\r\n class AccountOpenOrder extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n order_total_incl: 0,\r\n order_data: [],\r\n isDialogOpen: false\r\n };\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n async componentDidMount() {\r\n let open_order_data = await this.storeOrder.getOrderLinesData(this.props.order.order_id);\r\n this.setState({\r\n order_data: open_order_data\r\n })\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n if (prevProps.order.order_id !== this.props.order.order_id) {\r\n let open_order_data = await this.storeOrder.getOrderLinesData(this.props.order.order_id);\r\n this.setState({\r\n order_data: open_order_data\r\n })\r\n }\r\n }\r\n\r\n async getOrderLineDetails(order_line) {\r\n let book = {};\r\n book = await this.storeBooks.returnBookDetails(order_line.book_id);\r\n let order_data = this.state.order_data;\r\n order_data.push(book);\r\n this.setState({\r\n order_data: order_data\r\n })\r\n }\r\n processOpenOrder = (e) => {\r\n let total = 0;\r\n let total_row = 0;\r\n this.state.order_data && this.state.order_data.map((order_line) => {\r\n if (order_line.book_id !== undefined && parseInt(order_line.book_id) !== 0) {\r\n total_row = order_line.costs * order_line.amount * (1 - (order_line.discount / 100));\r\n total = total + total_row;\r\n }\r\n });\r\n\r\n this.storeUi.setUseCaseOrder('open_order');\r\n this.storeUi.setOrderToProcess(this.props.order.order_id, total);\r\n this.storeUi.setOrderToProcessKey(\"billing_country_code\", this.props.order.billing_country_code);\r\n this.props.setView(\"payment\");\r\n }\r\n\r\n formatCosts = (costs) => {\r\n return utilities.displayPrice(costs);\r\n }\r\n\r\n calculateRowPrice = (order_line) => {\r\n let total;\r\n total = order_line.costs * order_line.amount * (1 - (order_line.discount / 100));\r\n \r\n return utilities.displayPrice(total);\r\n }\r\n\r\n calcShippingCosts = (total) => {\r\n return utilities.displayPrice(total);\r\n }\r\n\r\n calcTotalCosts = () => {\r\n let total = 0;\r\n let total_row = 0;\r\n let isShippingCost;\r\n\r\n this.state.order_data && this.state.order_data.map((order_line) => {\r\n isShippingCost = order_line.description.startsWith(\"Verzendkosten\");\r\n if ((order_line.book_id !== null && parseInt(order_line.book_id) !== 0) || isShippingCost) {\r\n total_row = order_line.costs * order_line.amount * (1 - (order_line.discount / 100));\r\n total_row = Math.round(total_row * 100) / 100;\r\n total = total + total_row;\r\n }\r\n });\r\n \r\n return utilities.displayPrice(total);\r\n }\r\n\r\n openDialog = () => {\r\n this.setState({\r\n isDialogOpen: !this.state.isDialogOpen\r\n });\r\n }\r\n\r\n handleClose = () => {\r\n this.setState({ isDialogOpen: false })\r\n }\r\n \r\n onSubmit = () => {\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n if (id !== 0) {\r\n (async() => await this.storeOrder.removeOrder(this.storeUser.user_data.user_id, this.props.order.order_id) )();\r\n }\r\n this.handleClose();\r\n }\r\n\r\n openDialogPaymentInfo = () => {\r\n this.storeUi.setContentComponent(\r\n <ContentDialog\r\n title = {'Betalingsinformatie bankoverschrijving'}\r\n >\r\n <div className=\"form-row form-row--feedback\">\r\n <span className=\"feedback__title\">Je hebt gekozen voor handmatige overschijving.</span>\r\n <p>Maak het totaalbedrag van <span className=\"amount amount--inline\">{this.calcTotalCosts()}</span> van je bestelling over naar:</p>\r\n <ul>\r\n <React.Fragment>\r\n <li className=\"feedback__section\">Rabobank te Zeist, rekening: NL56 RABO 0357 5205 80<br/>\r\n ten name van Belfra Publishers for Success bv\r\n </li>\r\n <li className=\"feedback__section\">\r\n of:<br/>\r\n Triodosbank te Zeist, rekening: NL35 TRIO 0391 1028 26<br/>\r\n ten name van Belfra Publishers for Success bv\r\n </li>\r\n <li className=\"feedback__section\">\r\n Dolderseweg 49<br/>\r\n 3734 BB Den Dolder<br/>\r\n onder vermelding van \"order <strong>{this.props.order.order_id}</strong>\"\r\n </li>\r\n </React.Fragment>\r\n\r\n {(this.storeOrder.order_data.billing_address.country_code !== this.storeOrder.settings_list.isNL) && (this.storeOrder.order_data.billing_address.country_code !== this.storeOrder.settings_list.isBE) &&\r\n <li className=\"feedback__section\">\r\n <b>Vanuit het buitenland:</b><br/>\r\n Gebruik de volgende gegevens voor een overschrijving vanuit het buitenland:<br/>\r\n Swift-adres (BIC#): RABONL2U<br/>\r\n IBAN: NL56 RABO 0357 5205 80<br/>\r\n ten name van Belfra Publishers for Success bv\r\n onder vermelding van \"order <strong>{this.props.order.order_id}</strong>\"\r\n </li>\r\n }\r\n\r\n {(this.storeOrder.order_data.billing_address.country_code !== this.storeOrder.settings_list.isNL) && (this.storeOrder.order_data.billing_address.country_code == this.storeOrder.settings_list.isBE) &&\r\n <li className=\"feedback__section\">\r\n <b>Vanuit België</b><br/>\r\n Gebruik de volgende gegevens voor een overschrijving vanuit België:<br/>\r\n BNP Paribas Fortis rekening: BE71 0016 6035 5969<br/>\r\n Swift-adres (BIC#): GEBABEBB<br/>\r\n ten name van Belfra Publishers for Success bv<br/>\r\n onder vermelding van \"order <strong>{this.props.order.order_id}</strong>\"\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </ContentDialog>\r\n )\r\n this.storeUi.openDialogContent();\r\n } \r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div className=\"order-summary\">\r\n <span className=\"order-summary__date\">{moment(this.props.order.order_date.date).format(\"DD-MM-YYYY\")}</span>\r\n <div className=\"order-summary__id\">\r\n Order: {this.props.order.order_id}\r\n </div>\r\n <div>\r\n {this.state.order_data && this.state.order_data.map((order_line) => (\r\n order_line.book_id !== '0' && order_line.book_id !== 0 && order_line.book_id !== '' && order_line.book_id !== null\r\n ? <div className=\"order-summary__content\">\r\n <OpenOrderLine\r\n id = {order_line.book_id}\r\n />\r\n <div className=\"order-summary__info\">\r\n <span>\r\n <span dangerouslySetInnerHTML={{ __html: order_line.description}} />: <span className=\"amount\">{this.formatCosts(order_line.costs)}</span>, {order_line.amount}x\r\n {order_line.sku !== 'undefined' &&\r\n <span className=\"order-summary__sku\">ISBN: {order_line.sku}</span>\r\n }\r\n {order_line.discount > 0 &&\r\n <span className=\"order-summary__discount\">(korting: {order_line.discount}%)</span>\r\n }\r\n </span>\r\n <span className=\"amount\">{this.calculateRowPrice(order_line)}</span>\r\n </div>\r\n </div>\r\n : order_line.description.startsWith(\"Verzendkosten\") &&\r\n <div className=\"order-summary__info\">\r\n <span>{order_line.description}:</span>\r\n <span className=\"amount\">{this.calcShippingCosts(order_line.costs)}</span>\r\n </div>\r\n ))}\r\n <div className=\"order-summary__info order-summary__total\">\r\n <span>Totaalbedrag:</span>\r\n <span className=\"amount\">{this.calcTotalCosts()}</span>\r\n </div>\r\n </div>\r\n <div className=\"order-summary__actions\">\r\n {this.props.order.order_status === 'banktransfer' && (\r\n <p className=\"order-summary__descr\">Je hebt aangegeven deze per bankoverschijving te voldoen.<br/>\r\n <a href=\"#\" onClick={(e) => this.openDialogPaymentInfo()}>Bekijk bankoverschijvingsgegevens</a><br/>\r\n Je kunt ook alsnog besluiten deze op een andere manier te betalen</p>\r\n )}\r\n <div className=\"order-summary__buttons\">\r\n {this.props.order.order_status === 'banktransfer'\r\n ? <button className=\"list--orders__button btn btn--primary --active\" onClick={(e) => this.processOpenOrder(e)}>Betaal anders</button>\r\n : <button className=\"list--orders__button btn btn--primary --active\" onClick={(e) => this.processOpenOrder(e)}>Betaal nu</button>\r\n } \r\n {((this.props.order.order_onaccount === null && this.props.order.order_fulfilled !== null && this.props.order.order_paid === null) ||\r\n (this.props.order.order_onaccount === null && this.props.order.order_banktransfer !== null && this.props.order.order_paid === null) ||\r\n (this.props.order.order_status === 'void' && this.props.order.order_onaccount === null && this.props.order.order_fulfilled === null && this.props.order.order_paid === null && this.props.order.order_banktransfer === null)) && \r\n <button className=\"list--orders__button btn btn--secundary --active\" onClick={(e) => this.openDialog(e)}>Verwijder bestelling</button> \r\n }\r\n </div>\r\n </div>\r\n\r\n <div onClick={(e) => this.openDialog(e)} className=\"order-summary__actions--delete --link\">\r\n <span className=\"icon icon--delete\"></span>\r\n </div>\r\n </div>\r\n\r\n {this.state.isDialogOpen &&\r\n <DialogConfirmation\r\n show = {this.state.isDialogOpen}\r\n onClose = {this.handleClose}\r\n title = {i18n.t(\"popups.delete_order.title\")}\r\n buttons = {\r\n [{\r\n text: \"Annuleer\",\r\n onClick: () => this.handleClose(),\r\n btnClass: \"--secundary\"\r\n },{\r\n text: \"Verwijder\",\r\n onClick: () => this.onSubmit(),\r\n btnClass: \"--primary\"\r\n }]\r\n }>\r\n <p>{i18n.t(\"popups.delete_order.description\")}</p>\r\n </DialogConfirmation>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(AccountOpenOrder);\r\n\r\n\r\n","export async function getPaymentProviders() {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/payment/process/getGateways.php';\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'GET',\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error payment gateways: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getPaymentIssuers() {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/payment/process/getIssuers.php';\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'GET',\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error payment issuers: ', error.message);\r\n }\r\n}\r\n\r\nexport async function handlePaymentProcess(order_id, order_guid, payment_data, payment_method, payment_issuer) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/payment/process/processPayment.php';\r\n\r\n const postData = {\r\n order_id: order_id,\r\n order_guid: order_guid,\r\n payment_data: payment_data,\r\n payment_method: payment_method,\r\n payment_issuer: payment_issuer\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error payment process: ', error.message);\r\n }\r\n}\r\n\r\nexport async function handleBankTransfer(order_id, payment_data) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/v2/process/banktransfer/' + order_id;\r\n\r\n const postData = {\r\n order_id: order_id,\r\n payment_data: payment_data\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error banktransfer: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getOrderPaymentDetails(order_id) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/payment/process/getOrderPaymentDetails.php';\r\n\r\n const postData = {\r\n order_id: order_id\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson; \r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error payment details: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getOrderStatus(guid) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/payment/process/getOrderStatus.php';\r\n \r\n const postData = {\r\n guid: guid\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson; \r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error order status: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getPaymentStatus(orderId) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/payment/process/getPaymentStatus.php';\r\n \r\n const postData = {\r\n orderId: orderId\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson; \r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error order status: ', error.message);\r\n }\r\n}","import React from 'react';\r\n\r\nconst Radio = props => {\r\n\r\n let formControl = \"form-control\";\r\n let direction = \"--\" + props.direction;\r\n\r\n return (\r\n <div className={\"form-group form-group--radio \" + direction}>\r\n {props.options.map(option => (\r\n <div className=\"form-group__option\" key={option.value}>\r\n <label>\r\n <input type=\"radio\"\r\n name = {props.name}\r\n value = {option.value}\r\n onChange = {props.onChange}\r\n className = {formControl}\r\n defaultChecked = {props.defaultValue === option.value}\r\n />\r\n <span>{option.displayValue}</span>\r\n </label>\r\n </div>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default Radio;","import React from 'react';\r\n\r\nconst RadioMethod = props => {\r\n\r\n let formControl = \"form-control\";\r\n let direction = \"--\" + props.direction;\r\n\r\n return (\r\n <div className={\"form-group form-group--radio \" + direction}>\r\n {props.options.map(option => (\r\n <React.Fragment>\r\n <div className=\"form-group__option\" key={option.value}>\r\n <label>\r\n {option.displayValue}\r\n {(props.selected === 'BANKTRANS' && option.id === 'BANKTRANS') &&\r\n <span className=\"form-group--radio__description\">LET OP: Klik hieronder op 'Rond je bestelling af' om de betalingsinformatie voor de overschrijving te ontvangen.</span>\r\n }\r\n {/* {(props.selected === 'IDEAL' && option.id === 'IDEAL') &&\r\n <span className=\"form-group--radio__description\">Selecteer hierna je bank en klik daarna op 'Start betaling' om het betaalproces te starten.</span>\r\n } */}\r\n </label>\r\n <input type=\"radio\"\r\n name = {props.name}\r\n value = {option.id}\r\n onChange = {props.onChange}\r\n className = {formControl}\r\n defaultChecked = {props.defaultValue === option.id ? 'defaultChecked' : null}\r\n />\r\n </div>\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n );\r\n}\r\n\r\nexport default RadioMethod;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nconst ImgIssuer = inject(\"stores\") (\r\n observer (\r\n class ImgIssuer extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlPublic = process.env.REACT_APP_URL_PUBLIC;\r\n\r\n this.state = {\r\n errored: false,\r\n ext: \".svg\"\r\n }\r\n }\r\n\r\n handleError = (e) => {\r\n if (!this.state.errored) {\r\n this.setState({\r\n errored: true,\r\n ext: \".png\"\r\n })\r\n } \r\n }\r\n\r\n render() {\r\n return (\r\n <img \r\n src = {this.urlAPI + \"/public/images/payment/\" + this.props.option.code + this.state.ext}\r\n onError = {(e) => this.handleError(e)} \r\n /> \r\n );\r\n \r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default ImgIssuer;","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport * as account from '../../communicator/account';\r\nimport * as payment from '../../communicator/payment';\r\n\r\nimport Radio from '../../elements/form-input-radio';\r\nimport RadioMethod from '../../elements/form-input-radio-method';\r\nimport RadioIssuer from '../../elements/form-input-radio-issuer';\r\nimport Select from '../../elements/form-input-select';\r\n\r\nconst FormPayment = inject(\"stores\") (\r\n observer (\r\n class FormPayment extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n formControls: { \r\n payment_method: {\r\n value: this.props.payment_method_id,\r\n placeholder: 'Select your payment method',\r\n valid: true,\r\n touched: true,\r\n options: this.storeUi.payment_providers\r\n },\r\n // payment_issuer: {\r\n // value: '',\r\n // placeholder: 'Select your bank',\r\n // valid: false,\r\n // touched: false,\r\n // options: this.storeOrder.payment_issuers\r\n // }\r\n },\r\n error: false\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n this.filterOptionsPaymentMethod();\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n if (prevProps.payment_method_id !== this.props.payment_method_id) {\r\n this.filterOptionsPaymentMethod();\r\n\r\n const name = 'payment_method';\r\n const value = this.props.payment_method_id;\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n value: value\r\n }\r\n }\r\n }); \r\n }\r\n }\r\n\r\n filterOptionsPaymentMethod = () => {\r\n const name = 'payment_method';\r\n let payment_providers = this.storeUi.payment_providers.slice(0);\r\n\r\n //SbC:: disable iDeal if not in NL or BE\r\n if (this.props.country_code !== this.storeOrder.settings_list.isNL && this.props.country_code !== 'BE') {\r\n let idx = this.storeUi.payment_providers.findIndex((provider) => provider.id == 'IDEAL');\r\n if (idx > -1) {\r\n payment_providers.splice(idx, 1);\r\n }\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n options: payment_providers\r\n }\r\n }\r\n })\r\n }\r\n }\r\n\r\n handleChange = (event) => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n let idx;\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n value: value\r\n }\r\n }\r\n }); \r\n\r\n //SbC:: use original array as indices have changed if no iDeal available\r\n if (name === 'payment_method') {\r\n idx = this.storeUi.payment_providers.findIndex((provider) => provider.id == value);\r\n this.storeOrder.setPaymentData(name, value, this.storeUi.payment_providers[idx].displayValue)\r\n if (this.props.type == \"open_order\") {\r\n this.storeUi.setOrderToProcessKey(\"payment_method_id\", value)\r\n }\r\n } else {\r\n this.storeOrder.setPaymentData(name, value, this.state.formControls[name].options[value].displayValue)\r\n if (this.props.type == \"open_order\") {\r\n this.storeUi.setOrderToProcessKey(name, value)\r\n }\r\n }\r\n\r\n // if (name === 'payment_issuer') {\r\n // this.props.onScrollToBtn();\r\n // }\r\n }\r\n\r\n setOrderId = () => {\r\n if (this.props.type == \"open_order\") {\r\n return this.storeUi.order_to_process.id\r\n } else {\r\n return this.storeOrder.order_data.order_id\r\n }\r\n } \r\n\r\n render() {\r\n const selectedMethod = this.props.country_code === this.storeOrder.settings_list.isNL \r\n ? (this.props.payment_method_id) === 'XX'\r\n ? 'IDEAL'\r\n : this.props.payment_method_id\r\n : this.props.payment_method_id === 'XX'\r\n ? 'BANKTRANS'\r\n : this.props.payment_method_id\r\n\r\n return (\r\n <div className=\"form-wrapper\">\r\n <div className=\"form-fieldset\">\r\n <form className=\"form --full-width\">\r\n <div className=\"form-row form-row--input\">\r\n <label>Betaalmethode</label>\r\n <RadioMethod \r\n name = \"payment_method\" \r\n placeholder = {this.state.formControls.payment_method.placeholder}\r\n value = {this.state.formControls.payment_method.value}\r\n options = {this.state.formControls.payment_method.options}\r\n direction = {\"vertical\"}\r\n onChange = {this.handleChange}\r\n defaultValue = {this.props.payment_method_id}\r\n selected = {this.state.formControls.payment_method.value}\r\n />\r\n </div>\r\n\r\n {/* {(this.state.formControls.payment_method.value === 'IDEAL') &&\r\n <React.Fragment>\r\n <div className=\"form-row form-row--input\">\r\n <label>Kies je bank</label>\r\n <RadioIssuer \r\n name = \"payment_issuer\" \r\n placeholder = {this.state.formControls.payment_issuer.placeholder}\r\n value = {this.state.formControls.payment_issuer.value}\r\n options = {this.state.formControls.payment_issuer.options}\r\n direction = {\"horizontal\"}\r\n onChange = {this.handleChange}\r\n defaultValue = {this.state.formControls.payment_issuer.defaultValue}\r\n selected = {this.storeOrder.order_data.payment.payment_issuer.code}\r\n />\r\n </div>\r\n </React.Fragment>\r\n } */}\r\n\r\n {this.state.error &&\r\n <div className=\"form-row form-row--error\">\r\n <p>Er is een fout opgetreden. Controleer je invoergegevens.</p>\r\n </div>\r\n }\r\n </form>\r\n </div>\r\n \r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default FormPayment;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport ImgIssuer from './img-issuer';\r\n\r\nconst RadioIssuer = inject(\"stores\") (\r\n observer (\r\n class RadioIssuer extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlPublic = process.env.REACT_APP_URL_PUBLIC;\r\n }\r\n\r\n render() {\r\n let formControl = \"form-control\";\r\n let direction = \"--\" + this.props.direction;\r\n\r\n return (\r\n <div className={\"form-group form-group--radio \" + direction}>\r\n <ul className=\"payment-issuers__list\">\r\n {this.props.options.map(option => (\r\n <li className={\"payment-issuers__listitem\" + (parseInt(this.props.selected) === parseInt(option.code) ? \" --selected\" : '')} key={option.value}>\r\n <label>\r\n <input type=\"radio\"\r\n name = {this.props.name}\r\n value = {option.value}\r\n onChange = {this.props.onChange}\r\n className = {formControl}\r\n defaultChecked = {this.props.defaultValue === option.value}\r\n />\r\n <ImgIssuer\r\n option = {option}\r\n />\r\n <span>{option.displayValue}</span>\r\n </label>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n \r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default RadioIssuer;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport NewWindow from 'react-new-window';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\nimport { Redirect } from 'react-router';\r\n\r\nimport * as account from '../../communicator/account';\r\nimport DialogConfirmation from '../dialogs/dialog-confirmation';\r\n\r\nimport FormPayment from '../forms/form-payment';\r\n\r\nconst AccountOpenOrderPayment = inject(\"stores\") (\r\n observer (\r\n class AccountOpenOrderPayment extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n view: 'overview',\r\n payment_window: false,\r\n order_id: 0,\r\n order_data: [],\r\n redirect: false\r\n };\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.refActions = React.createRef();\r\n }\r\n\r\n componentDidMount = async() => {\r\n let idx\r\n let order_data = await this.storeOrder.getOrderData(this.storeUi.order_to_process.id)\r\n this.setState({\r\n order_data: order_data\r\n })\r\n }\r\n\r\n // checkPaymentResult = () => {\r\n // this.storeOrder.getOrderPaymentDetails(this.state.order_id);\r\n // this.storeOrder.unloadPaymentWindow();\r\n // }\r\n\r\n startPayment = async (payment_id, issuer_code) => {\r\n let order_data = {\r\n order_total_incl: parseFloat(this.storeUi.order_to_process.total)\r\n .toFixed(2)\r\n .toString(),\r\n firstname: this.state.order_data[0].firstname,\r\n lastname: this.state.order_data[0].lastname,\r\n email: this.state.order_data[0].email,\r\n address: this.state.order_data[0].billing_address,\r\n housenr: this.state.order_data[0].billing_housenr,\r\n addition: this.state.order_data[0].billing_addition,\r\n zipcode: this.state.order_data[0].billing_zipcode,\r\n city: this.state.order_data[0].billing_city\r\n }\r\n let order_guid = this.state.order_data[0].guid;\r\n\r\n if (this.storeUi.order_to_process.id !== 0) {\r\n let url = await this.storeOrder.handlePaymentProcess(this.storeUi.order_to_process.id, order_guid, payment_id, issuer_code, 'open_order', order_data);\r\n if (url !== undefined) {\r\n this.setState({\r\n redirect: true\r\n });\r\n }\r\n }\r\n }\r\n\r\n completePayment = async () => {\r\n let order_data = {\r\n order_total_incl: parseFloat(this.storeUi.order_to_process.total)\r\n .toFixed(2)\r\n .toString(),\r\n firstname: this.state.order_data[0].firstname,\r\n lastname: this.state.order_data[0].lastname,\r\n email: this.state.order_data[0].email,\r\n address: this.state.order_data[0].billing_address,\r\n housenr: this.state.order_data[0].billing_housenr,\r\n addition: this.state.order_data[0].billing_addition,\r\n zipcode: this.state.order_data[0].billing_zipcode,\r\n city: this.state.order_data[0].billing_city\r\n }\r\n\r\n this.storeOrder.handleBankTransfer(this.storeUi.order_to_process.id, 'open_order', order_data);\r\n if (this.storeUser.user_data.is_loggedin) {\r\n this.storeOrder.deleteShoppingCartFromDB(this.storeUser.user_data.user_id)\r\n } else {\r\n this.storeOrder.deleteShoppingCartFromLS();\r\n }\r\n await this.storeOrder.getAccountOrders(this.storeUser.user_data.user_id);\r\n this.setView(\"overview\");\r\n }\r\n\r\n setView(view) {\r\n this.props.setView(view);\r\n }\r\n\r\n scrollToBtn = () => {\r\n this.refActions.current.scrollIntoView({\r\n behavior: 'smooth',\r\n block: \"end\"\r\n });\r\n }\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/payment\"} \r\n />;\r\n }\r\n\r\n let payment_method_id = this.storeUi.order_to_process.payment_method_id;\r\n const issuer_code = this.storeOrder.order_data.payment.payment_issuer.code;\r\n\r\n const btn_class = (this.storeUi.order_to_process.payment_method_id !== 'IDEAL')\r\n ? (payment_method_id === 0) ? '--disabled' : '--active'\r\n : (payment_method_id === 'IDEAL' && issuer_code === '9999') ? '--disabled' : '--active';\r\n\r\n return (\r\n <div className=\"content\">\r\n <h2>Kies hoe je wilt betalen</h2>\r\n <FormPayment \r\n type = {\"open_order\"}\r\n payment_method_id = {payment_method_id}\r\n country_code = {this.storeUi.order_to_process.billing_country_code}\r\n onScrollToBtn = {this.scrollToBtn}\r\n />\r\n {payment_method_id !== 'BANKTRANS'\r\n ? <div className=\"cart-data__feedback\">\r\n <p>Klik hieronder op 'Start betaling' om de betaling af te ronden.<br/>\r\n Je komt dan in de betaalomgeving van je bank of onze betaalprovider MultiSafepay. Zij regelen alle betalingen voor de webshop van Succesboeken.nl en is een veilige betaalomgeving.</p>\r\n <p>Houd dit scherm open totdat de melding 'Sluit het scherm om terug te keren naar de webwinkel' verschijnt.</p>\r\n </div>\r\n : <div className=\"cart-data__feedback\">\r\n <p>Klik hieronder op 'Voltooi bestelling' om de betaling via handmatige overschrijving te bevestigen.<br/>\r\n Na ontvangst van de betaling wordt de bestelling onmiddellijk toegestuurd.</p>\r\n </div>\r\n }\r\n\r\n <div className=\"cart__actions\" ref={this.refActions}>\r\n <button className=\"btn btn--secundary\" onClick={(e) => this.setView(\"overview\")}>{i18n.t(\"button.backto_review\")}</button>\r\n {payment_method_id !== 'BANKTRANS'\r\n ? <button className={\"btn btn--primary \" + btn_class} onClick={(e) => this.startPayment(payment_method_id, issuer_code)}>{i18n.t(\"button.goto_payment_provider\")}</button>\r\n : <button className=\"btn btn--primary\" onClick={(e) => this.completePayment()}>{i18n.t(\"button.complete_payment\")}</button>\r\n }\r\n </div>\r\n </div>\r\n \r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(AccountOpenOrderPayment);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport NewWindow from 'react-new-window';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport * as account from '../../communicator/account';\r\nimport DialogConfirmation from '../dialogs/dialog-confirmation';\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nconst PaidOrderLine = inject(\"stores\") (\r\n observer (\r\n class PaidOrderLine extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n \r\n this.state = {\r\n sku: 0\r\n }\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = async() => {\r\n this.getISBN(this.props.id);\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (prevProps.id !== this.props.id) {\r\n this.getISBN(this.props.id);\r\n }\r\n }\r\n\r\n getISBN = async(id) => {\r\n let isbn;\r\n\r\n if (id.toString().length < 10) {\r\n isbn = await this.storeBooks.getBookISBN(id);\r\n } else {\r\n isbn = id;\r\n }\r\n\r\n this.setState({\r\n sku: isbn\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"order-summary__image\">\r\n <ImgCover\r\n sku = {this.state.sku}\r\n />\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst AccountOrderPaid = inject(\"stores\") (\r\n observer (\r\n class AccountOrderPaid extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.state = {\r\n order_total_incl: 0,\r\n order_data: [],\r\n tracktrace: []\r\n };\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n async componentDidMount() {\r\n let open_order_data = await this.storeOrder.getOrderLinesData(this.props.order.order_id);\r\n let arr_tracktrace = this.props.order.tracktrace ? this.props.order.tracktrace.split(',') : [];\r\n\r\n this.setState({\r\n order_data: open_order_data,\r\n tracktrace: arr_tracktrace\r\n })\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n \r\n if (prevProps.order.order_id !== this.props.order.order_id) {\r\n let open_order_data = await this.storeOrder.getOrderLinesData(this.props.order.order_id);\r\n\r\n this.setState({\r\n order_data: open_order_data\r\n })\r\n }\r\n }\r\n\r\n async getOrderLineDetails(order_line) {\r\n let book = {};\r\n book = await this.storeBooks.returnBookDetails(order_line.book_id);\r\n let order_data = this.state.order_data;\r\n order_data.push(book);\r\n this.setState({\r\n order_data: order_data\r\n })\r\n }\r\n // processOpenOrder = (e) => {\r\n // let total = 0;\r\n // let total_row = 0;\r\n // this.state.order_data && this.state.order_data.map((order_line) => {\r\n // total_row = order_line.costs * order_line.amount * (1 - (order_line.discount / 100));;\r\n // total = total + total_row;\r\n // });\r\n\r\n // this.storeUi.setUseCaseOrder('open_order');\r\n // this.storeUi.setOrderToProcess(this.props.order.order_id, total);\r\n // this.storeUi.setOrderToProcessKey(\"billing_country_code\", this.props.order.billing_country_code);\r\n // this.props.setView(\"payment\");\r\n // }\r\n\r\n formatCosts = (costs) => {\r\n return utilities.displayPrice(costs);\r\n }\r\n\r\n calculateRowPrice = (order_line) => {\r\n let total;\r\n total = order_line.costs * order_line.amount * (1 - (order_line.discount / 100));\r\n \r\n return utilities.displayPrice(total);\r\n }\r\n\r\n calcShippingCosts = (total) => {\r\n return utilities.displayPrice(total);\r\n }\r\n\r\n calcTotalCosts = () => {\r\n let total = 0;\r\n let total_row = 0;\r\n let isShippingCost;\r\n\r\n this.state.order_data && this.state.order_data.map((order_line) => {\r\n isShippingCost = order_line.description.startsWith(\"Verzendkosten\");\r\n if ((order_line.book_id !== null && parseInt(order_line.book_id) !== 0) || isShippingCost) {\r\n total_row = order_line.costs * order_line.amount * (1 - (order_line.discount / 100));\r\n total_row = Math.round(total_row * 100) / 100;\r\n total = total + total_row;\r\n }\r\n });\r\n \r\n return utilities.displayPrice(total);\r\n }\r\n\r\n getLinkTrackTrace = (tt) => {\r\n const url_tracktrace = 'https://jouw.postnl.nl/track-and-trace/' + tt + '-' + this.props.order.delivery_country_code + '-' + this.props.order.delivery_zipcode;\r\n return url_tracktrace;\r\n }\r\n\r\n viewOrderPaid = () => {\r\n\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div className=\"order-summary\">\r\n <span className=\"order-summary__date\">{moment(this.props.order.order_date.date).format(\"DD-MM-YYYY\")}</span>\r\n <div className=\"order-summary__id\">\r\n Order: {this.props.order.order_id}\r\n </div>\r\n {(this.props.order.tracktrace !== '' && this.props.order.tracktrace !== undefined && this.props.order.tracktrace !== null) &&\r\n <div className=\"order-summary__tracktrace\">\r\n Track&Trace nummer: \r\n {this.state.tracktrace.map((tt, idx) => (\r\n <React.Fragment>\r\n {idx !== 0 &&\r\n ', '\r\n }\r\n <a className=\"--link\" href={this.getLinkTrackTrace(tt)} target=\"_blank\">{tt}</a>\r\n </React.Fragment>\r\n ))}\r\n \r\n </div>\r\n }\r\n <div>\r\n {this.state.order_data && this.state.order_data.map((order_line) => (\r\n order_line.book_id !== '0' && order_line.book_id !== 0 && order_line.book_id !== '' && order_line.book_id !== null && order_line.amount !== 0 \r\n ? <div className=\"order-summary__content\">\r\n <PaidOrderLine\r\n order_line = {order_line}\r\n id = {order_line.book_id}\r\n />\r\n <div className=\"order-summary__info\">\r\n <span>\r\n <span dangerouslySetInnerHTML={{ __html: order_line.description}} />: <span className=\"amount\">{this.formatCosts(order_line.costs)}</span>, {order_line.amount}x\r\n {order_line.sku !== 'undefined' &&\r\n <span className=\"order-summary__sku\">ISBN: {order_line.sku}</span>\r\n }\r\n {order_line.discount > 0 &&\r\n <span className=\"order-summary__discount\">(korting: {order_line.discount}%)</span>\r\n }\r\n </span>\r\n <span className=\"amount\">{this.calculateRowPrice(order_line)}</span>\r\n </div>\r\n </div>\r\n : order_line.description.startsWith(\"Verzendkosten\") &&\r\n <div className=\"order-summary__info\">\r\n <span>{order_line.description}:</span>\r\n <span className=\"amount\">{this.calcShippingCosts(order_line.costs)}</span>\r\n </div>\r\n ))}\r\n <div className=\"order-summary__info order-summary__total\">\r\n <span>Totaalbedrag:</span>\r\n <span className=\"amount\">{this.calcTotalCosts()}</span>\r\n </div>\r\n </div>\r\n <div className=\"order-summary__actions\">\r\n <span></span>\r\n <a \r\n href={this.urlAPI + \"/invoices/invoice-pdf.php?GUID=\" + this.props.order.guid} \r\n target=\"_blank\"\r\n className=\"btn btn--secundary\">\r\n {i18n.t(\"button.view_invoice_pdf\")}\r\n </a>\r\n <a \r\n href={this.urlAPI + \"/invoices/invoice.php?GUID=\" + this.props.order.guid} \r\n target=\"_blank\"\r\n className=\"btn btn--secundary\">\r\n Bekijk factuur\r\n </a>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(AccountOrderPaid);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\n\r\nimport * as account from '../../communicator/account';\r\n\r\nimport AccountOpenOrder from './account-open-order';\r\nimport AccountOpenOrderPayment from './account-open-order-payment';\r\nimport AccountOrderPaid from './account-order-paid';\r\n\r\nconst AccountOrders = inject(\"stores\") (\r\n observer (\r\n class AccountOrders extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n order_id: 0,\r\n };\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.storeUser.user_data.is_loggedin) {\r\n (async() => await this.storeOrder.getAccountOrders(this.storeUser.user_data.user_id) )();\r\n }\r\n }\r\n\r\n componentDidUpdate = () => {\r\n \r\n }\r\n\r\n setView = (view) => {\r\n this.storeUi.setAccountView(view);\r\n }\r\n\r\n render() {\r\n const orderList = this.storeUser.user_data.is_loggedin ? this.storeOrder.orderHistoryList : []\r\n\r\n let orderList_paid = [];\r\n let orderList_open = [];\r\n\r\n orderList.length > 0 && !('error' in orderList[0]) && (\r\n orderList_paid = orderList\r\n .filter((order) => order.order_paid !== null)\r\n );\r\n\r\n orderList.length > 0 && !('error' in orderList[0]) && (\r\n orderList_open = orderList\r\n .filter((order) => (order.order_status === 'void' && order.order_paid === null) || (order.order_status === 'banktransfer' && order.order_paid === null) || order.order_paid === null)\r\n );\r\n\r\n return (\r\n <React.Fragment>\r\n {this.storeUi.app_interface.view_account == 'overview' &&\r\n <React.Fragment>\r\n <div className=\"content\">\r\n <h3>Openstaande bestellingen:</h3>\r\n {orderList_open.length > 0 && !('error' in orderList[0])\r\n ? <ul className=\"list--orders\">\r\n {orderList_open.map((order, i) => (\r\n <li key={i} className=\"list--orders__order-item\">\r\n <div>\r\n <AccountOpenOrder \r\n order_id = {order.order_id}\r\n order = {order}\r\n setView = {this.setView}\r\n />\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n : <p>Je hebt geen openstaande bestellingen.</p>\r\n }\r\n </div>\r\n\r\n <div className=\"content\">\r\n <h3>Betaalde bestellingen:</h3>\r\n {orderList_paid.length > 0\r\n ? <ul className=\"list--orders\">\r\n {orderList_paid.map((order, i) => (\r\n <li key={i} className=\"list--orders__order-item\"> \r\n <div className=\"list--orders__details\">\r\n <AccountOrderPaid\r\n order = {order}\r\n setView = {this.setView}\r\n />\r\n </div>\r\n </li>\r\n ))}\r\n </ul>\r\n : <p>Je hebt nog geen bestellingen betaald.</p>\r\n }\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n {this.storeUi.app_interface.view_account == 'payment' &&\r\n <AccountOpenOrderPayment \r\n setView = {this.setView}\r\n />\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(AccountOrders);\r\n\r\n\r\n","import * as apifetch from './fetch.js';\r\n\r\n// export async function checkLogin2(email, pw) {\r\n// const urlAPI = process.env.REACT_APP_URL_API;\r\n// const urlEndpoint = urlAPI + '/accounts/checkLogin.php';\r\n\r\n// const postData = {\r\n// email: email,\r\n// pw: pw\r\n// }\r\n\r\n// try {\r\n// let apiStr = urlEndpoint;\r\n// let response = await fetch(apiStr, {\r\n// method: 'POST',\r\n// mode: 'cors',\r\n// body: JSON.stringify(postData),\r\n// headers: {\r\n \r\n// }\r\n// });\r\n// let responseJson = await response.json();\r\n// if (responseJson !== null) {\r\n// let arrData = [];\r\n// arrData = responseJson;\r\n\r\n// return arrData;\r\n// }\r\n// } catch (error) {\r\n// console.log('SbC fetch error login: ', error.message);\r\n// }\r\n// }\r\n\r\nexport async function checkLogin(data) {\r\n const urlEndpoint = '/v2/accounts/login';\r\n\r\n const postData = data;\r\n \r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n // return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport * as login from '../../communicator/login';\r\n\r\nimport TextInput from '../../elements/form-input-text';\r\n\r\nconst FormGeneratePartnerLink = inject(\"stores\") (\r\n observer (\r\n class FormGeneratePartnerLink extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n formControls: { \r\n isbn: {\r\n label: i18n.t(\"forms.label.isbn\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.isbn\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: false\r\n },\r\n validationMsg: i18n.t(\"form_errors.isbn\")\r\n }\r\n },\r\n formIsValid: false,\r\n btn_class: this.props.link_sb ? '--active' : '--disabled',\r\n error: false\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUser.clearFormFeedback();\r\n }\r\n\r\n handleChange = event => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n }); \r\n }\r\n\r\n generatePartnerLink = (e) => {\r\n e.preventDefault();\r\n let sku;\r\n if (!this.props.link_sb) {\r\n sku = this.state.formControls.isbn.value;\r\n } else {\r\n sku = 0;\r\n }\r\n if (this.state.formIsValid || this.props.link_sb) {\r\n this.props.generatePartnerLink(sku);\r\n }\r\n } \r\n\r\n render() {\r\n return (\r\n <div className=\"form-wrapper\"> \r\n {!this.props.link_sb && \r\n <form className=\"form\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <div className=\"form-row form-row--input\" key={i}>\r\n <label className=\"form-label\">{this.state.formControls[key].label}</label>\r\n <TextInput \r\n name = {key} \r\n placeholder = {this.state.formControls[key].placeholder}\r\n value = {this.state.formControls[key].value}\r\n touched = {this.state.formControls[key].touched}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls[key].valid}\r\n msg = {this.state.formControls[key].validationMsg}\r\n />\r\n </div>\r\n ))}\r\n </form>\r\n }\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.generatePartnerLink(e)}>{i18n.t(\"button.generate\")}</button>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormGeneratePartnerLink);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport GeneratePartnerLink from '../../components/forms/form-generate-partnerlink';\r\n\r\nimport {\r\n FacebookIcon,\r\n LinkedinIcon,\r\n TwitterIcon,\r\n WhatsappIcon,\r\n RedditIcon,\r\n TelegramIcon,\r\n TumblrIcon,\r\n} from 'react-share';\r\n\r\nconst ContentDialog = inject(\"stores\") (\r\n observer (\r\n class ContentDialog extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n render() {\r\n return (\r\n this.props.children\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst AccountTechnical = inject(\"stores\") (\r\n observer (\r\n class AccountTechnical extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.urlAPP = process.env.REACT_APP_URL;\r\n //this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlAPI = \"https://www.succesboeken.nl/api\";\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n foldout: false,\r\n shop: this.storeGeneral.shop,\r\n url: 'www.succesboeken.nl'\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n let baseUrlCovers;\r\n let baseExt;\r\n if (this.storeBooks.bookList_sb.length === 0) {\r\n this.storeBooks.getSbPublications('current');\r\n }\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n //if (this.storeGeneral.shop === 'SHOP_ALL') {\r\n baseUrlCovers = '/public/images/CoversVKg-all/';\r\n baseExt = 'png';\r\n // } else {\r\n // baseUrlCovers = '/public/images/CoversVKg/';\r\n // baseExt = 'jpg';\r\n // }\r\n } else {\r\n baseUrlCovers = '/public/images/CoversVKg/';\r\n baseExt = 'jpg';\r\n }\r\n\r\n this.setState({\r\n baseUrlCovers: baseUrlCovers,\r\n baseExt: baseExt\r\n })\r\n }\r\n\r\n expandBlocks = (e) => {\r\n this.setState(prevState => ({\r\n foldout: !prevState.foldout\r\n }));\r\n }\r\n\r\n errorPartnerCode = () => {\r\n return (\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <div className=\"form__feedback--error\">\r\n LET OP: er is een fout opgetreden, hierdoor kloppen de hieronder gegenereerde links nog niet.<br/>\r\n Neem contact met ons op via dit <Link to=\"/contact\">formulier</Link> zodat we dit kunnen herstellen.\r\n <br/><br/>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n\r\n generatePartnerLink = async(sku) => {\r\n let title = '';\r\n let shop;\r\n \r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n shop = 'SHOP_ALL';\r\n } else {\r\n shop = 'SHOP_SB';\r\n }\r\n\r\n if (sku !== 0) {\r\n const book = await this.storeBooks.getBookBySku(sku, shop);\r\n if (book.stock > 0) {\r\n title = book.title;\r\n this.openDialogCode(sku, title, false);\r\n } else {\r\n // this.storeUi.setContentComponent(\r\n // <ContentDialog>\r\n // <div>DIT BOEK IS MOMENTEEL NIET VERKRIJGBAAR</div>\r\n // </ContentDialog>\r\n // )\r\n // this.storeUi.openDialogContent();\r\n title = book.title;\r\n this.openDialogCode(sku, title, true);\r\n }\r\n } else {\r\n title = \"Succesboeken.nl\";\r\n this.openDialogCode(sku, title, false);\r\n }\r\n }\r\n\r\n openDialogCode = (sku, title, alert) => {\r\n let url_shop = \"www.succesboeken.nl\";\r\n let url = (sku === 0) ? (\"https://\" + url_shop + \"/\" + \"?pc=\" + this.storeUser.user_data.partner_code) : (\"https://\" + url_shop + \"/book/\" + sku + \"?pc=\" + this.storeUser.user_data.partner_code);\r\n\r\n this.storeUi.setContentComponent(\r\n <ContentDialog\r\n className = \"content-scrollable\"\r\n >\r\n <div className=\"content-manual\">\r\n <h2>Code om te kopieren</h2>\r\n {this.storeUser.user_data.partner_code === null &&\r\n this.errorPartnerCode()\r\n }\r\n {alert &&\r\n <div className=\"content-manual__alert\">Dit boek is momenteel niet leverbaar. Er kunnen dus geen bestellingen van plaatsvinden.</div>\r\n }\r\n <p>Kopieer de hieronder aangegeven code en plak deze in de code van je eigen website of social media. Je kunt kiezen uit een link met daarin de titel van het boek of een link met daarin de cover van het gekozen boek:</p>\r\n \r\n <div className=\"content-segment__content\">\r\n <p className=\"p--emphasis\">\r\n <strong>Let op:</strong>Indien je een Content Management Systeem (CMS) gebruikt om je website te beheren is het vaak voldoende om alleen de url te gebruiken. Deze vind je onderaan deze pagina bij: \"Direct webadres doorgeven\". Kijk in de handleiding van je CMS om te zien hoe je dit toepast.\r\n </p>\r\n </div>\r\n\r\n <h3>Link met titel</h3>\r\n <p className=\"content-manual__subtitle\">Gebruik onderstaande code voor een link met alleen tekst:</p>\r\n <span className=\"content-manual__code-wrapper\">\r\n {sku === 0\r\n ? <div className=\"content-manual__code\">\r\n {\"<a href='https://\" + url_shop + \"/\" + \"?pc=\" + this.storeUser.user_data.partner_code + \"' target='_blank'>\" +\r\n title +\r\n \"</a>\"}\r\n </div>\r\n : <div className=\"content-manual__code\">\r\n {\"<a href='https://\" + url_shop + \"/book/\" + sku + \"?pc=\" + this.storeUser.user_data.partner_code + \"' target='_blank'>\" +\r\n title +\r\n \"</a>\"}\r\n </div>\r\n }\r\n </span>\r\n <p className=\"content-manual__subtitle\">Resultaat:</p>\r\n <a href={url} target='_blank'>{title}</a>\r\n \r\n <h3>Link met cover</h3>\r\n <p className=\"content-manual__subtitle\">Gebruik onderstaande code om de cover in je link te tonen:</p>\r\n <span className=\"content-manual__code-wrapper\">\r\n {sku === 0\r\n ? <div className=\"content-manual__code\">\r\n {\"<a href='https://\" + url_shop + \"/\" + \"?pc=\" + this.storeUser.user_data.partner_code + \"' target='_blank'>\" +\r\n \"<img src='\" + this.urlAPI + \"/public/images/branding/sb_logo.png' style='border: solid 1px #CCC'>\" +\r\n \"</a>\"}\r\n </div>\r\n : <div className=\"content-manual__code\">\r\n {\"<a href='https://\" + url_shop + \"/book/\" + sku + \"?pc=\" + this.storeUser.user_data.partner_code + \"' target='_blank'>\" +\r\n \"<img src='\" + this.urlAPI + this.state.baseUrlCovers + sku + \".\" + this.state.baseExt + \"' style='border: solid 1px #CCC'>\" +\r\n \"</a>\"}\r\n </div>\r\n }\r\n </span>\r\n <p className=\"content-manual__subtitle\">Resultaat:</p>\r\n <a href={url} target='_blank'>\r\n <img src={this.urlAPI + this.state.baseUrlCovers + sku + \".\"+ this.state.baseExt} className=\"content-manual__code-result\" />\r\n </a>\r\n\r\n <h3>Direct webadres doorgeven</h3>\r\n <p className=\"content-manual__subtitle\">Gebruik onderstaande code indien je het webadres van het boek wilt doorgeven. Dit webadres kan direct in je browser ingevuld worden:</p>\r\n <span className=\"content-manual__code-wrapper\">\r\n {sku === 0\r\n ? <div className=\"content-manual__code\">\r\n {\"https://\" + url_shop + \"/\" + \"?pc=\" + this.storeUser.user_data.partner_code}\r\n </div>\r\n : <div className=\"content-manual__code\">\r\n {\"https://\" + url_shop + \"/book/\" + sku + \"?pc=\" + this.storeUser.user_data.partner_code}\r\n </div>\r\n }\r\n </span>\r\n </div>\r\n </ContentDialog>\r\n )\r\n this.storeUi.openDialogContent();\r\n }\r\n\r\n openDialogCodeLogo = (version) => {\r\n let url_shop = \"www.succesboeken.nl\";\r\n \r\n this.storeUi.setContentComponent(\r\n <div className=\"content-manual\">\r\n {this.storeUser.user_data.partner_code === null &&\r\n this.errorPartnerCode()\r\n }\r\n <h2>Link</h2>\r\n <p>Kopieer de hieronder aangegeven code en plak deze in je website of social media:</p>\r\n <span className=\"content-manual__code-wrapper\">\r\n {version == \"full\" &&\r\n <div className=\"content-manual__code\">\r\n {\"<a href='https://\" + url_shop + \"/\" + \"?pc=\" + this.storeUser.user_data.partner_code + \"' target='_blank'>\" +\r\n \"<img src='\" + this.urlAPI + \"/public/images/branding/sb_logo-full.png' border='0'>\" +\r\n \"</a>\"}\r\n </div>\r\n }\r\n {version == \"img\" &&\r\n <div className=\"content-manual__code\">\r\n {\"<a href='https://\" + url_shop + \"/\" + \"?pc=\" + this.storeUser.user_data.partner_code + \"' target='_blank'>\" +\r\n \"<img src='\" + this.urlAPI + \"/public/images/branding/sb_logo-img.png' border='0'>\" +\r\n \"</a>\"}\r\n </div>\r\n }\r\n {version == \"text\" &&\r\n <div className=\"content-manual__code\">\r\n {\"<a href='https://\" + url_shop + \"/\" + \"?pc=\" + this.storeUser.user_data.partner_code + \"' target='_blank'>\" +\r\n \"<img src='\" + this.urlAPI + \"/public/images/branding/sb_logo-text.png' border='0'>\" +\r\n \"</a>\"}\r\n </div>\r\n }\r\n </span>\r\n </div>\r\n );\r\n this.storeUi.openDialogContent();\r\n }\r\n\r\n render() {\r\n let aspectClass;\r\n \r\n return (\r\n <React.Fragment>\r\n {this.storeUser.user_data.partner_code === null &&\r\n this.errorPartnerCode()\r\n }\r\n \r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p>Hieronder wordt toegelicht hoe je een boek kunt promoten via verschillende social media of via je eigen website.</p>\r\n <p>Kijk hieronder welke methode voor jou bruikbaar is.</p>\r\n <p className=\"p--emphasis\">\r\n <strong>Let op:</strong>Het kan zijn dat er nog een aanpassing nodig is voor jouw specifieke systeem of Content Management Systeem. Voor hulp verwijzen we je naar de online beschikbare handleidingen of de ontwikkelaar van je site. Door alle verschillende manieren en systemen om content op je website te plaatsen, is het onmogelijk om ze hier allemaal te benoemen en toe te lichten.\r\n </p>\r\n <p>Natuurlijk kun je voor vragen contact met ons opnemen via dit <Link to=\"/contact\">formulier</Link>, of door direct een email te sturen aan <a href=\"mailto:info@succesboeken.nl?subject=Vraag over gebruik partnercode\">info@succesboeken.nl</a>.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <h2>Hoe promoot ik een boek?</h2>\r\n <p>Je kunt een boek eenvoudig promoten door het delen van een link naar het boek via je eigen site of via social media. Deze link bevat het isbn-nummer van het boek en je partnercode. Hierdoor weten wij bij een bestelling dat deze via jouw link is binnengekomen.</p> \r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <h2>Hoe krijg ik deze link?</h2>\r\n <p>Als je een boek wilt promoten via social media kun je dit het eenvoudigst doen via de buttons op de detailpagina van een boek. Zodra je ingelogd bent wordt dan namelijk je partnercode met deze link meegestuurd.</p>\r\n <p>Je kunt de code voor de gewenste link ook zelf maken via de hieronder aangegeven werkwijze of door de betreffende aangegeven code te kopieren. Daarna kun je deze code overnemen op de gewenste plek van je eigen website of social media (gebruik voor social media alleen de methode bij 'Link met titel', die getoond wordt in de popup bij het genereren van de link via één van onderstaande methodes).</p> \r\n <p>Indien je een van onze eigen boeken wilt promoten hoef je hieronder alleen maar op de desbetreffende cover te klikken, waarna de link direct voor jou gegenereerd wordt.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <h2>Kopieer de code voor de boeken van de eigen uitgeverij:</h2>\r\n <p>Klik op een cover voor de code:</p>\r\n <ul className={\"cover--previews \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\")}>\r\n {this.storeBooks.bookList_sb.map((book) => (\r\n <li className=\"cover--previews__cover --link\" onClick={() => this.openDialogCode(book.sku, book.title, false)}>\r\n <ImgCover\r\n sku = {book.sku}\r\n aspect = {aspectClass}\r\n />\r\n </li>\r\n ))}\r\n <li className=\"actionShowMore\" onClick={(e) => this.expandBlocks(e)}>\r\n {this.state.foldout \r\n ? i18n.t(\"lists.show_less_covers\")\r\n : i18n.t(\"lists.show_more_covers\")\r\n }\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n \r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content content-manual\">\r\n <h2>Link naar onze website</h2>\r\n <p>Je kunt een van onderstaande logo's gebruiken om op te nemen op je website. Klik op het logo om de code voor de link te genereren. Je bezoekers worden dan naar de homepage van onze site geleid en zodra zij een bestelling plaatsen, wordt je partnercode meegestuurd.</p>\r\n <div className=\" content-manual__examples\">\r\n <ul>\r\n <li onClick={() => this.openDialogCodeLogo(\"full\")}>\r\n <div className=\"example--logo --link\">\r\n <img src={this.urlAPI + \"/public/images/branding/sb_logo-full.png\"} width=\"200px\" />\r\n </div>\r\n </li>\r\n <li onClick={() => this.openDialogCodeLogo(\"img\")}>\r\n <div className=\"example--logo --link\">\r\n <img src={this.urlAPI + \"/public/images/branding/sb_logo-img.png\"} width=\"50px\" />\r\n </div>\r\n </li>\r\n <li onClick={() => this.openDialogCodeLogo(\"text\")}>\r\n <div className=\"example--logo --link\">\r\n <img src={this.urlAPI + \"/public/images/branding/sb_logo-text.png\"} width=\"200px\" />\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <h2>Zelf de code voor een link maken</h2>\r\n <p>Volg de volgende procedure indien je de code zelf wilt maken of indien je een boek dat hierboven niet in de lijst met boeken van de eigen uitgeverij staat, wilt promoten.</p> \r\n <ul className=\"list--bullets\">\r\n <li>Zoek het ISBN-nummer op. Je kunt dit vinden op de detailpagina van het boek onder 'Specificaties'. Let op of het boek nog leverbaar is.</li>\r\n <li>Vul dit nummer hieronder in en klik op 'Genereer code'.</li>\r\n <li>Kopieer de gewenste versie voor de link en gebruik deze op je website of in social media (gebruik voor social media alleen de methode bij 'Link met titel', die getoond wordt in de popup bij het genereren van de link via onderstaande methode)</li>\r\n </ul>\r\n <div className=\"form-fieldset\">\r\n <GeneratePartnerLink\r\n generatePartnerLink = {this.generatePartnerLink} \r\n link_sb = {false} \r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <h2>Hoe promoot ik een boek via social media zoals Facebook, LinkedIn etc?</h2>\r\n <p>Het eenvoudigst is om een boek te delen door gebruik te maken van één van de social-mediabuttons op de detailpagina van een boek:</p>\r\n <ul className=\"list list--icons\">\r\n <li><FacebookIcon size={'1.75rem'} round={true}/></li>\r\n <li><LinkedinIcon size={'1.75rem'} round={true}/></li>\r\n <li><TwitterIcon size={'1.75rem'} round={true}/></li>\r\n <li><WhatsappIcon size={'1.75rem'} round={true}/></li>\r\n {/* <li><RedditIcon size={'1.75rem'} round={true}/></li> */}\r\n <li><TelegramIcon size={'1.75rem'} round={true}/></li>\r\n {/* <li><TumblrIcon size={'1.75rem'} round={true}/></li> */}\r\n </ul>\r\n <p>Dan wordt er een bericht op je tijdlijn geplaatst met daarin direct een link naar het boek met daarbij gebuik van je partnercode.</p>\r\n \r\n <p>Als partner kan je ook een boek via social media promoten door bovenstaande uitleg voor het zelf maken van een link te gebruiken.</p>\r\n <p>Gebruik alleen de methode voor 'Link met titel' (die getoond wordt in de popup bij het genereren van de link via één van bovenstaande methodes) in een bericht op het betreffende social media platform.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <h2>Hoe promoot ik een boek via een Content Management Systeem als WordPress, Drupal of Joomla?</h2>\r\n <p>Voor gebruikers van WordPress, Drupal of Joomla</p>\r\n <p>In een Content Management Systeem kun je eenvoudig een link toevoegen, eventueel met plaatje. Bij het maken van een bericht in de editor-omgeving kun je de code voor de link plaatsen. Daar de exacte manier verschilt per Content Management Systeem verwijzen we hiervoor naar de specifieke handleidingen die hiervoor beschikbaar zijn en je eenvoudig op internet kunt vinden.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <h2>Hoe promoot ik een boek via mijn website?</h2>\r\n <p>Ook hiervoor gebruik je de code die je hierboven kunt genereren. Afhankelijk van de gebruikte programmertaal plaats je de code op de pagina.</p>\r\n <p>De ontwikkelaar van je site kan je hier zeker mee helpen.</p>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default AccountTechnical;\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport AccountCommissionPayouts from './account-commissions-payouts';\r\n\r\nconst AccountCommissionsOverviewIntervalItem = inject(\"stores\") (\r\n observer (\r\n class AccountCommissionsOverviewIntervalItem extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n commissions: [],\r\n showInterval: false\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const invoiceId = this.props.orderItem.id_invoice;\r\n const order = await this.storeOrder.getDataInvoice(invoiceId);\r\n\r\n this.setState({\r\n partner_perc_sb_current: order[0].partner_perc_sb_current,\r\n partner_perc_3rd_current: order[0].partner_perc_3rd_current\r\n })\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n const invoiceId = this.props.orderItem.id_invoice;\r\n\r\n if (prevProps.orderItem.id !== this.props.orderItem.id) {\r\n const order = await this.storeOrder.getDataInvoice(invoiceId);\r\n\r\n this.setState({\r\n partner_perc_sb_current: order[0].partner_perc_sb_current,\r\n partner_perc_3rd_current: order[0].partner_perc_3rd_current\r\n })\r\n }\r\n }\r\n\r\n getPercFee = (orderItem) => {\r\n let percFee = 0;\r\n\r\n if (orderItem.item_discount == 1) {\r\n percFee = this.state.partner_perc_sb_current;\r\n if (!percFee || percFee === null) {\r\n percFee = 30;\r\n }\r\n } else {\r\n percFee = this.state.partner_perc_3rd_current;\r\n if (!percFee || percFee === null) {\r\n percFee = 10;\r\n }\r\n }\r\n \r\n return percFee;\r\n }\r\n\r\n showIntervalData = () => {\r\n this.setState({\r\n showInterval: !this.state.showInterval\r\n })\r\n }\r\n\r\n render() {\r\n const vat_nr = this.storeUser.user_data.profile.nrVAT;\r\n const orderItem = this.props.orderItem\r\n\r\n return (\r\n <React.Fragment>\r\n <li className=\"table--financial__row\">\r\n <div className=\"table--financial__cell table--financial__cell--date\">{orderItem.order_date && moment(orderItem.order_date.date).format(\"DD-MM-YYYY\")}</div>\r\n {/* <div className=\"table--financial__cell table--financial__cell--date\">{order.id_invoice}</div> */}\r\n <div \r\n className=\"table--financial__cell table--financial__cell--title\"\r\n dangerouslySetInnerHTML={{ __html: orderItem.item_description}}\r\n />\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{orderItem.item_amount}</div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">\r\n {vat_nr !== ''\r\n ? utilities.displayPrice(orderItem.order_total)\r\n : utilities.displayPrice(this.storeUser.commissionOrderExclVat(orderItem.order_total, orderItem.order_vat))\r\n }\r\n </div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{this.getPercFee(orderItem)}%</div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">\r\n {vat_nr !== ''\r\n ? utilities.displayPrice(this.storeUser.commissionPartnerInclVat(orderItem, orderItem.order_total, this.getPercFee(orderItem)))\r\n : utilities.displayPrice(this.storeUser.commissionPartnerExclVat(orderItem, orderItem.order_total, this.getPercFee(orderItem), orderItem.order_vat))\r\n }\r\n </div>\r\n </li>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(AccountCommissionsOverviewIntervalItem);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport AccountCommissionPayouts from './account-commissions-payouts';\r\nimport AccountCommissionsOverviewIntervalItem from './account-commissions-overview-interval-item';\r\n\r\nconst AccountCommissionsOverviewInterval = inject(\"stores\") (\r\n observer (\r\n class AccountCommissionsOverviewInterval extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n commissions: [],\r\n showInterval: false\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const commissions = await this.storeUser.getCommissions();\r\n \r\n const settledDate = moment(this.props.payout.settled_date.date).format('YYYY-MM-DD');\r\n const startDatePayout = moment(settledDate).subtract(3, 'months').format('YYYY-MM-DD');\r\n const endDatePayout = settledDate;\r\n \r\n let commissionsInterval = [];\r\n if (commissions && commissions.length > 0) {\r\n commissions.map((commission) => {\r\n if (moment(commission.order_date.date).isBetween(startDatePayout, endDatePayout, 'day', '(]')) {\r\n commissionsInterval.push(commission);\r\n }\r\n })\r\n }\r\n\r\n this.setState({\r\n commissions: commissions,\r\n commissionsInterval: commissionsInterval\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n\r\n }\r\n\r\n showIntervalData = () => {\r\n this.setState({\r\n showInterval: !this.state.showInterval\r\n })\r\n }\r\n\r\n render() {\r\n const vat_nr = this.storeUser.user_data.profile.nrVAT;\r\n\r\n return (\r\n <React.Fragment>\r\n {this.state.showInterval\r\n ? this.state.commissionsInterval && this.state.commissionsInterval.length > 0\r\n ? <React.Fragment>\r\n {this.state.commissionsInterval.map(order =>\r\n <AccountCommissionsOverviewIntervalItem\r\n orderItem = {order}\r\n payout = {this.props.payout}\r\n />\r\n )}\r\n <li \r\n className=\"table--financial__row table--financial__row--toggle --link\" \r\n onClick={() => this.showIntervalData()}>\r\n <div>- Verberg details</div>\r\n </li>\r\n </React.Fragment>\r\n : <li className=\"table--financial__row\">\r\n <div className=\"table--financial__cell--full\">Er zijn nog geen commissies verkregen</div>\r\n </li>\r\n : <li \r\n className=\"table--financial__row table--financial__row--toggle --link \" \r\n onClick={() => this.showIntervalData()}>\r\n <div>+ Toon details</div>\r\n </li>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(AccountCommissionsOverviewInterval);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport AccountCommissionsOverviewInterval from './account-commissions-overview-interval';\r\n\r\nconst AccountCommissionsPayouts = inject(\"stores\") (\r\n observer (\r\n class AccountCommissionsPayouts extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n commission_payouts: []\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const commissions = await this.storeUser.getCommissions();\r\n const commission_payouts = await this.storeUser.getPayouts();\r\n \r\n this.setState({\r\n commissions: commissions,\r\n commission_payouts: commission_payouts\r\n })\r\n }\r\n\r\n render() {\r\n const vat_nr = this.storeUser.user_data.profile.nrVAT;\r\n \r\n return (\r\n <React.Fragment>\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n\r\n <h2>{i18n.t(\"commissions.hd_payouts\")}</h2>\r\n <ul className=\"table--financial\">\r\n <li className=\"table--financial__header\">\r\n <div className=\"table--financial__cell table--financial__cell--date\">{i18n.t(\"commissions.tbl_hd_date\")}</div>\r\n {/* <div className=\"table--financial__cell table--financial__cell\"></div> */}\r\n <div className=\"table--financial__cell table--financial__cell--title\">{i18n.t(\"commissions.tbl_hd_description\")}</div>\r\n <div className=\"table--financial__cell table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">\r\n {vat_nr !== ''\r\n ? i18n.t(\"commissions.tbl_hd_price_incl_vat\")\r\n : i18n.t(\"commissions.tbl_hd_price_excl_vat\")\r\n }\r\n </div>\r\n </li>\r\n {this.state.commission_payouts && this.state.commission_payouts.length > 0\r\n ? <React.Fragment>\r\n {this.state.commission_payouts.map(payout =>\r\n <React.Fragment>\r\n <li className=\"table--financial__header\">\r\n <div className=\"table--financial__cell table--financial__cell--sku\">{payout.payout_date && moment(payout.payout_date.date).format(\"DD-MM-YYYY\")}</div>\r\n {/* <div className=\"table--financial__cell table--financial__cell\"></div> */}\r\n <div className=\"table--financial__cell table--financial__cell--title\">{payout.description}</div>\r\n <div className=\"table--financial__cell table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{utilities.displayPrice(payout.total)}</div>\r\n </li>\r\n {!payout.description.startsWith(\"Correctie\") &&\r\n <AccountCommissionsOverviewInterval\r\n commissions = {this.state.commissions}\r\n payout = {payout}\r\n />\r\n }\r\n </React.Fragment>\r\n )}\r\n <li className=\"table--financial__totals table--financial__totals--top\">\r\n <div className=\"table--financial__cell table--financial__cell--label\">{i18n.t(\"commissions.tbl_hd_total_payouts\")}</div>\r\n {/* <div className=\"table--financial__cell\"></div> */}\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{utilities.displayPrice(this.storeUser.payoutsTotalInclVat)}</div>\r\n </li>\r\n </React.Fragment>\r\n : <li className=\"table--financial__row\">\r\n <div className=\"table--financial__cell--full\">Er zijn nog geen commissies uitgekeerd.</div>\r\n </li>\r\n }\r\n </ul>\r\n {/* <p>* door verandering in btw-nummer zijn dit bedragen excl. btw.</p> */}\r\n </div> \r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(AccountCommissionsPayouts);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport AccountCommissionPayouts from './account-commissions-payouts';\r\n\r\nconst AccountCommissionsOverviewItem = inject(\"stores\") (\r\n observer (\r\n class AccountCommissionsOverviewItem extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storePartners = this.props.stores.storePartners;\r\n\r\n this.state = {\r\n commissions: [],\r\n commissionsOpen: []\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const invoiceId = this.props.orderItem.id_invoice;\r\n\r\n const order = await this.storeOrder.getDataInvoice(invoiceId);\r\n\r\n this.setState({\r\n partner_perc_sb_current: order[0].partner_perc_sb_current,\r\n partner_perc_3rd_current: order[0].partner_perc_3rd_current\r\n })\r\n }\r\n\r\n getPercFee = (orderItem) => {\r\n let percFee = 0;\r\n\r\n if (orderItem.item_discount == 1) {\r\n percFee = this.state.partner_perc_sb_current;\r\n if (!percFee || percFee === null) {\r\n percFee = 30;\r\n }\r\n } else {\r\n percFee = this.state.partner_perc_3rd_current;\r\n if (!percFee || percFee === null) {\r\n percFee = 10;\r\n }\r\n }\r\n \r\n return percFee;\r\n }\r\n\r\n render() {\r\n const vat_nr = this.storeUser.user_data.profile.nrVAT\r\n const orderItem = this.props.orderItem\r\n\r\n return (\r\n <React.Fragment>\r\n <li className=\"table--financial__row\">\r\n <div className=\"table--financial__cell table--financial__cell--date\">{orderItem.order_date && moment(orderItem.order_date.date).format(\"DD-MM-YYYY\")}</div>\r\n <div \r\n className=\"table--financial__cell table--financial__cell--title\"\r\n dangerouslySetInnerHTML={{ __html: orderItem.item_description}}\r\n />\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{orderItem.item_amount}</div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">\r\n {vat_nr !== ''\r\n ? utilities.displayPrice(orderItem.order_total)\r\n : utilities.displayPrice(this.storeUser.commissionOrderExclVat(orderItem.order_total, orderItem.order_vat))\r\n }\r\n </div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{this.getPercFee(orderItem)}%</div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\"> \r\n {vat_nr !== ''\r\n ? utilities.displayPrice(this.storeUser.commissionPartnerInclVat(orderItem, orderItem.order_total, this.getPercFee(orderItem)))\r\n : utilities.displayPrice(this.storeUser.commissionPartnerExclVat(orderItem, orderItem.order_total, this.getPercFee(orderItem), orderItem.order_vat))\r\n }\r\n </div>\r\n </li> \r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(AccountCommissionsOverviewItem);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport AccountCommissionPayouts from './account-commissions-payouts';\r\nimport AccountCommissionsOverviewItem from './account-commissions-overview-item';\r\n\r\nconst AccountCommissionsOverview = inject(\"stores\") (\r\n observer (\r\n class AccountCommissionsOverview extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storePartners = this.props.stores.storePartners;\r\n\r\n this.state = {\r\n commissions: [],\r\n commissionsOpen: []\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let commissionsOpen = [];\r\n let lastPayout;\r\n let orderDate;\r\n const commissions = await this.storeUser.getCommissions();\r\n const commission_payouts = await this.storeUser.getPayouts();\r\n\r\n if (commission_payouts && commission_payouts.length > 0) {\r\n lastPayout = commission_payouts[0].settled_date.date;\r\n //lastPayout =\"2009-07-01\";\r\n lastPayout = moment(lastPayout).format('YYYY-MM-DD');\r\n\r\n commissions.map((commission) => {\r\n orderDate = moment(commission.order_date.date).format('YYYY-MM-DD');\r\n\r\n if (moment(orderDate).isAfter(lastPayout, 'day')) {\r\n commissionsOpen.push(commission);\r\n }\r\n })\r\n }\r\n\r\n if (!commission_payouts) {\r\n commissions.map((commission) => {\r\n commissionsOpen.push(commission);\r\n })\r\n }\r\n\r\n this.storeUser.setCommissionsOpen(commissionsOpen);\r\n\r\n this.setState({\r\n commissions: commissions,\r\n commissionsOpen: commissionsOpen\r\n })\r\n }\r\n\r\n // getDiscountPerc = (order, type) => {\r\n // let perc;\r\n\r\n // if (type == 1) {\r\n // perc = this.storeUser.user_data.commission;\r\n // } else {\r\n // perc = this.storeUser.user_data.commission_3party;\r\n // }\r\n\r\n // // this.storePartners.getPartnerFees();\r\n // const partnerFees = this.storePartners.partnerFees;\r\n // const idx = partnerFees\r\n // .findIndex((item) => parseInt(item.bookId) === parseInt(order.item_id));\r\n \r\n // if (idx !== -1) {\r\n // perc = parseInt(partnerFees[idx].percFee);\r\n // }\r\n\r\n // return perc;\r\n // }\r\n\r\n render() {\r\n const vat_nr = this.storeUser.user_data.profile.nrVAT;\r\n\r\n return (\r\n <React.Fragment>\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\"> \r\n\r\n <h2>{i18n.t(\"commissions.hd_overview_open\")}</h2>\r\n <ul className=\"table--financial\">\r\n <li className=\"table--financial__header\">\r\n <div className=\"table--financial__cell table--financial__cell--date\">{i18n.t(\"commissions.tbl_hd_date\")}</div>\r\n {/* <div className=\"table--financial__cell table--financial__cell--date\">{i18n.t(\"commissions.tbl_hd_invoice\")}</div> */}\r\n <div className=\"table--financial__cell table--financial__cell--title\">{i18n.t(\"commissions.tbl_hd_description\")}</div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{i18n.t(\"commissions.tbl_hd_amount\")}</div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">\r\n {vat_nr !== ''\r\n ? i18n.t(\"commissions.tbl_hd_price_incl_vat\")\r\n : i18n.t(\"commissions.tbl_hd_price_excl_vat\")\r\n }\r\n </div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{i18n.t(\"commissions.tbl_hd_commission_perc\")}</div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{i18n.t(\"commissions.tbl_hd_commission\")}</div>\r\n </li>\r\n {this.state.commissionsOpen && this.state.commissionsOpen.length > 0\r\n ? this.state.commissionsOpen.map(order =>\r\n <AccountCommissionsOverviewItem\r\n orderItem = {order}\r\n />\r\n )\r\n : <li className=\"table--financial__row\">\r\n <div className=\"table--financial__cell--full\">Er zijn nog geen commissies verkregen</div>\r\n </li>\r\n }\r\n {this.state.commissionsOpen && this.state.commissionsOpen.length > 0 &&\r\n <li className=\"table--financial__totals table--financial__totals--top\">\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--label\">{i18n.t(\"commissions.tbl_hd_total_excl_vat\")}</div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{utilities.displayPrice(this.storeUser.commissionTotalExclVat)}</div>\r\n </li>\r\n }\r\n {this.state.commissionsOpen && this.state.commissionsOpen.length > 0 && vat_nr !== '' &&\r\n <React.Fragment>\r\n <li className=\"table--financial__totals\">\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--label\">{i18n.t(\"commissions.tbl_hd_vat_low\")}</div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{utilities.displayPrice(this.storeUser.commissionTotalVatLow)}</div>\r\n </li>\r\n <li className=\"table--financial__totals\">\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--label\">{i18n.t(\"commissions.tbl_hd_vat_high\")}</div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{utilities.displayPrice(this.storeUser.commissionTotalVatHigh)}</div>\r\n </li>\r\n <li className=\"table--financial__totals\">\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--label\">{i18n.t(\"commissions.tbl_hd_total_incl_vat\")}</div>\r\n <div className=\"table--financial__cell\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\"></div>\r\n <div className=\"table--financial__cell table--financial__cell--amount\">{utilities.displayPrice(this.storeUser.commissionTotalInclVat)}</div>\r\n </li>\r\n </React.Fragment>\r\n }\r\n </ul>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(AccountCommissionsOverview);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport moment from \"moment\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport AccountCommissionsOverview from './account-commissions-overview';\r\nimport AccountCommissionsPayouts from './account-commissions-payouts';\r\n\r\nconst AccountCommissions = inject(\"stores\") (\r\n observer (\r\n class AccountCommissions extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storePartners = this.props.stores.storePartners;\r\n\r\n this.state = {\r\n commission_current: this.storeUser.user_data.commission,\r\n commission_3party_current: this.storeUser.user_data.commission_3party\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const partnerFees = await this.storePartners.getPartnerFees();\r\n console.log('SbC user', this.storeUser.user_data)\r\n\r\n let commission_current;\r\n if (isNaN(this.storeUser.user_data.commission_current) || this.storeUser.user_data.commission_current === null) {\r\n commission_current = this.storeUser.user_data.commission;\r\n } else {\r\n commission_current = this.storeUser.user_data.commission_current;\r\n }\r\n\r\n let commission_3party_current;\r\n if (isNaN(this.storeUser.user_data.commission_3party_current) || this.storeUser.user_data.commission_3party_current === null) {\r\n commission_3party_current = this.storeUser.user_data.commission_3party;\r\n } else {\r\n commission_3party_current = this.storeUser.user_data.commission_3party_current;\r\n }\r\n\r\n this.setState({\r\n commission_current: commission_current,\r\n commission_3party_current: commission_3party_current\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n\r\n }\r\n\r\n render() {\r\n const vat_nr = this.storeUser.user_data.profile.nrVAT;\r\n\r\n return (\r\n <React.Fragment>\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <span>Partner code: {this.storeUser.user_data.partner_code}</span>\r\n <span><strong>Vergoedingen over:</strong></span>\r\n <ul>\r\n <li>Eigen uitgaven van Succesboeken.nl: {this.state.commission_current}%. \r\n <Link \r\n to=\"/our-publications\"\r\n className=\"link--read-more\"\r\n >Zie hier de lijst met eigen uitgaven</Link>\r\n </li>\r\n <li>Uitgaven van derden: {this.state.commission_3party_current}%</li>\r\n {/* <li>Voor een aantal producten geldt een afwijkend percentage</li> */}\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n {/* <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p>LET OP:<br/> door verandering van btw-nummer zijn de bedragen een mix van incl. en excl. btw.<br/>\r\n De bedragen excl. btw zijn aangegeven door een *.</p>\r\n </div>\r\n </div> */}\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\"> \r\n {vat_nr !== ''\r\n ? <span>Bedragen worden getoond inclusief btw omdat het btw-nummer is ingevuld bij je zakelijke gegevens (zie tab <Link to=\"/account/profile\">Mijn gegevens</Link>)</span>\r\n : <span>Bedragen worden getoond exclusief btw omdat er geen btw-nummer is ingevuld bij je zakelijke gegevens (zie tab <Link to=\"/account/profile\">Mijn gegevens</Link>)</span>\r\n }\r\n </div>\r\n </div>\r\n \r\n <AccountCommissionsOverview\r\n\r\n />\r\n\r\n <AccountCommissionsPayouts\r\n\r\n />\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(AccountCommissions);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport AccountProfile from '../components/account/account-profile';\r\nimport AccountOrders from '../components/account/account-orders';\r\nimport AccountTechnical from '../components/account/account-technical';\r\nimport AccountCommissions from '../components/account/account-commissions';\r\n\r\nconst AccountTab = inject(\"stores\") (\r\n observer (\r\n class AccountTab extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n view: this.props.view\r\n }\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeUi = this.props.stores.storeUi;\r\n \r\n }\r\n\r\n renderView(view) {\r\n switch(view) {\r\n case \"profile\":\r\n default:\r\n return (\r\n <AccountProfile />\r\n )\r\n case \"technical\":\r\n return (\r\n <AccountTechnical />\r\n ) \r\n case \"orders\":\r\n return (\r\n <AccountOrders /> \r\n )\r\n case \"commissions\":\r\n return (\r\n <AccountCommissions \r\n id = {this.storeUser.user_data.user_id}\r\n />\r\n ) \r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n this.renderView(this.props.view)\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst Account = inject(\"stores\") (\r\n observer (\r\n class Account extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n view: this.storeUi.app_interface.active_tab !== '' ? this.storeUi.app_interface.active_tab : 'profile'\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0);\r\n //this.handleScroll();\r\n if ( this.props.match.params.tab !== undefined) {\r\n this.setState({\r\n view: this.props.match.params.tab\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n // if (this.state.scroll) {\r\n // this.handleScroll();\r\n // }\r\n if (prevProps.match.params.tab !== this.props.match.params.tab) {\r\n this.setState({\r\n view: this.props.match.params.tab\r\n });\r\n } \r\n }\r\n\r\n handleContentTab = (e, view) => {\r\n if (view === 'orders') {\r\n if (this.storeUser.user_data.is_loggedin) {\r\n (async() => await this.storeOrder.getAccountOrders(this.storeUser.user_data.user_id) )();\r\n }\r\n }\r\n\r\n let tab = \"/account/\" + view;\r\n this.props.history.push(tab);\r\n this.setState({\r\n view: view\r\n })\r\n }\r\n \r\n render() {\r\n if (!this.storeUser.user_data.is_loggedin) {\r\n return <Redirect \r\n push to={\"/\"} \r\n />;\r\n }\r\n \r\n const Li = (view) => {\r\n const activeClass = ((view.view === this.state.view) || (view.view == 'profile' && this.state.view == undefined)) ? ' --active' : '';\r\n return (\r\n <li className={\"content-tabs__listitem content-tabs__listitem--\" + view.view + activeClass} onClick={(e) => this.handleContentTab(e, view.view)}>\r\n <span>{i18n.t(\"tabs.\" + view.view)}</span>\r\n </li>\r\n )\r\n }\r\n\r\n return (\r\n <Template\r\n type = 'single-column'\r\n header = \"account\"\r\n noScroll = {true}\r\n >\r\n <div className=\"content-segment\">\r\n <ul className=\"content-tabs__list\">\r\n <Li \r\n view = 'profile'\r\n />\r\n <Li \r\n view = 'orders'\r\n />\r\n {this.storeAuth.user.is_partner &&\r\n <React.Fragment>\r\n <Li \r\n view = 'commissions'\r\n />\r\n <Li \r\n view = 'technical'\r\n />\r\n </React.Fragment>\r\n }\r\n </ul>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <AccountTab\r\n view = {this.state.view}\r\n />\r\n </div>\r\n \r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(Account);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlockAuthor from '../components/block/block-author';\r\nimport BlocksBooks from '../components/blocks/blocks-books';\r\n\r\nconst Author = inject(\"stores\") (\r\n observer (\r\n class Author extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n author: ''\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n this.handleScroll();\r\n let author = this.props.match.params.id;\r\n let shop;\r\n let books;\r\n let count;\r\n\r\n this.storeUi.setCurrentAuthor(this.props.match.params.id);\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) { \r\n shop = this.storeGeneral.shop;\r\n if (shop != 'SHOP_ALL') {\r\n shop = 'SHOP_SB';\r\n } else {\r\n shop = 'SHOP_ALL';\r\n }\r\n } else {\r\n shop = 'SHOP_SB';\r\n }\r\n \r\n books = await this.storeBooks.getBooksForAuthor(this.storeUi.page_view, this.props.match.params.id, '', '', shop); \r\n //count = await this.storeUi.returnBookCountForAuthorSimple('SHOP_ALL', author);\r\n count = await this.storeUi.getBookCountForAuthor('SHOP_ALL', author);\r\n\r\n if (this.storeBooks.authorBooksList == null) {\r\n books = await this.storeBooks.getBooksForAuthor(this.storeUi.page_view, this.props.match.params.id, '', '', 'SHOP_ALL'); \r\n count = await this.storeUi.returnBookCountForAuthorSimple('SHOP_ALL', author);\r\n }\r\n\r\n this.setState({\r\n author: author,\r\n count: count\r\n })\r\n }\r\n\r\n componentDidUpdate = async(prevProps, prevState) => {\r\n let shop;\r\n let books;\r\n let count;\r\n this.handleScroll();\r\n \r\n if (this.props.match.params.id !== this.state.author) { \r\n const author = this.props.match.params.id;\r\n \r\n if (this.storeUi.checkFeature('SHOP_ALL')) { \r\n shop = this.storeGeneral.shop;\r\n if (shop != 'SHOP_ALL') {\r\n shop = 'SHOP_SB';\r\n } else {\r\n shop = 'SHOP_ALL';\r\n }\r\n } else {\r\n shop = 'SHOP_SB';\r\n }\r\n\r\n books = await this.storeBooks.getBooksForAuthor(this.storeUi.page_view, this.props.match.params.id, '', '', shop); \r\n //count = await this.storeUi.returnBookCountForAuthorSimple('SHOP_ALL', author);\r\n count = await this.storeUi.getBookCountForAuthor('SHOP_ALL', author);\r\n\r\n this.storeUi.setPageView('total', count);\r\n this.storeUi.setCountTotal(count);\r\n\r\n this.setState({\r\n author: author,\r\n count: count\r\n })\r\n }\r\n }\r\n\r\n handleScroll = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"all_books_from\"}\r\n personalized = {this.props.match.params.id}\r\n >\r\n <div className=\"content-segment-clean\">\r\n {/* <p>{i18n.t(\"page_subheaders.search_results_count\")}: {this.storeUi.count_total}</p> */}\r\n <p>{i18n.t(\"page_subheaders.search_results_count\")}: {this.state.count}</p>\r\n </div>\r\n\r\n <div className=\"content-wrapper__content\">\r\n {this.storeBooks.authorBooksList && this.storeBooks.authorBooksList.length !== 0\r\n ? <div className=\"author-info\"> \r\n <div className=\"content-wrapper__segment\">\r\n <BlocksBooks \r\n type = \"author\"\r\n page = \"author\"\r\n author = {this.props.match.params.id}\r\n />\r\n </div>\r\n </div>\r\n : <div className=\"author-info\">\r\n <p>Deze auteur is onbekend</p>\r\n </div>\r\n }\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Author;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nconst BlockAuthor = inject(\"stores\") (\r\n observer (\r\n class BlockAuthor extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n\r\n render() {\r\n const author = this.props.author\r\n const authorName = (author) => {\r\n let name = author.firstname + ' ' + author.lastname;\r\n return name;\r\n }\r\n\r\n return (\r\n <div className=\"block-content\">\r\n <div className=\"block-content__column\">\r\n {author.profile_picture !== '' && author.profile_picture !== null &&\r\n <div className=\"block-content--book__cover\">\r\n <div className=\"cover__wrapper\">\r\n <div className=\"content\">\r\n <img src={this.urlAPI + \"/public/images/authors/\" + author.profile_picture} /> \r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n <div className=\"block-content__column\">\r\n {author.description !== '' && author.description !== null\r\n ? <div className=\"block-content--book__description--short\">\r\n {author.description}\r\n </div>\r\n : <div className=\"block-content--book__description--short\">\r\n Er is geen verdere informatie over {authorName(author)} beschikbaar\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockAuthor;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport i18n from \"i18next\";\r\n\r\nconst AuthorName = (props) => {\r\n let name = props.author.lastname + ', ' + props.author.firstname;\r\n return name;\r\n}\r\n\r\nconst BlocksAuthors = inject(\"stores\") (\r\n observer (\r\n class BlocksAuthors extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n redirect: false,\r\n foldout: false\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n handleOnClick = (e, id) => {\r\n this.storeUi.setCurrentAuthor(id);\r\n this.storeBooks.getBooksForAuthor(this.storeUi.page_view, id);\r\n\r\n this.setState({\r\n redirect: true,\r\n author_id: id\r\n });\r\n }\r\n\r\n expandBlocks = (e) => {\r\n this.setState(prevState => ({\r\n foldout: !prevState.foldout\r\n }));\r\n }\r\n \r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/author/\" + this.state.author_id} \r\n />;\r\n }\r\n\r\n const blockCat = (this.props.blockCat) ? this.props.blockCat : '';\r\n const blockTitle = (this.props.blockTitle) ? this.props.blockTitle : 'Auteurs';\r\n\r\n return (\r\n <div className=\"blocks blocks--authors\">\r\n <div className=\"blocks__blocks-title\">\r\n <span className=\"blocks__blocks-title--main\">{blockTitle}</span>\r\n </div>\r\n <div className=\"blocks__content\">\r\n <ul className={\"blocks__list \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\")}>\r\n {this.storeBooks.authorsList.map((author) => ( \r\n author.is_sb === 1 &&\r\n <li className=\"block block--author\">\r\n <div \r\n className=\"block--category__title notranslate\" \r\n onClick={(e)=>this.handleOnClick(e, author.id)}>\r\n <AuthorName\r\n author = {author}\r\n />\r\n </div>\r\n </li>\r\n ))}\r\n <li className=\"block block--action actionShowMore\" onClick={(e) => this.expandBlocks(e)}>\r\n {this.state.foldout \r\n ? \"Toon minder auteurs\"\r\n : \"Toon alle auteurs\"\r\n }\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlocksAuthors;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport BlocksAuthors from '../components/blocks/blocks-authors';\r\n\r\nconst Authors = inject(\"stores\") (\r\n observer (\r\n class Authors extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"content-wrapper\">\r\n <div className=\"content-wrapper__content\">\r\n Al ONZE AUTEURS\r\n\r\n <p>xxx xxx</p>\r\n\r\n <BlocksAuthors \r\n view = {\"all\"}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Authors;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nconst BlockBookCategories = inject(\"stores\") (\r\n observer (\r\n class BlockBookCategories extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n cats: []\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.excluded = [\r\n 'eigen uitgaven', 'nieuw'\r\n ]\r\n\r\n // this.controller = new AbortController();\r\n // this.signal = this.controller.signal;\r\n }\r\n\r\n componentDidMount = async() => {\r\n let has_cats = false;\r\n const categories = await this.storeBooks.getBookCategories(this.props.sku);\r\n if (this.storeGeneral.shop === 'SHOP_ALL') {\r\n this.setState({\r\n cats: categories && categories.length > 0 ? categories : []\r\n })\r\n } else {\r\n categories[0] && Object.entries(categories[0]).map(([key, value]) => {\r\n has_cats = (value !== null && value !== '') ? true : has_cats;\r\n return has_cats;\r\n });\r\n \r\n this.setState({\r\n cats: (has_cats && categories) && categories.length > 0 ? categories[0] : []\r\n })\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (prevProps.sku !== this.props.sku) {\r\n const categories = await this.storeBooks.getBookCategories(this.props.sku);\r\n if (this.storeGeneral.shop === 'SHOP_ALL') {\r\n this.setState({\r\n cats: categories && categories.length > 0 ? categories : []\r\n })\r\n } else {\r\n this.setState({\r\n cats: categories && categories.length > 0 ? categories[0] : []\r\n })\r\n }\r\n }\r\n }\r\n\r\n handleOnClick(key, cat_name, is_main_cat) {\r\n let url;\r\n\r\n if (key === 'categorie' || key === 'categorie1' || key === 'categorie2' || key === 'categorie3') {\r\n //SbC category selected\r\n let id = 0;\r\n this.storeUi.setPageView('page', 1);\r\n //this.storeBooks.getBooksForCategory(cat_name, this.storeUi.page_view);\r\n //this.storeUi.setShowSubCats(cat_name, false);\r\n\r\n //this.storeUi.setActiveCategory(cat_name);\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveProductGroup('');\r\n\r\n url = \"/category/\" + cat_name;\r\n }\r\n if (key === 'sub_categorie' || key === 'sub_categorie1' || key === 'sub_categorie2') {\r\n //SbC subcategory selected\r\n //this.storeUi.setActiveSubCategory(cat_name); \r\n this.storeUi.setNavMobile(false);\r\n this.storeUi.setPageView('page', 1);\r\n \r\n url = \"/subcategory/\" + cat_name;\r\n }\r\n if (key === 'media') {\r\n //SbC product group selected\r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.setActiveProductGroup(cat_name);\r\n this.storeUi.setActiveSubGroup('');\r\n this.storeUi.setActiveCategory('');\r\n this.storeUi.setActiveLanguage('');\r\n this.storeUi.setNavMobile(false);\r\n\r\n url = \"/products/\" + cat_name;\r\n }\r\n\r\n if (key === 'nur') {\r\n this.storeUi.setPageView('page', 1);\r\n\r\n if (is_main_cat === 1) {\r\n url = \"/category/\" + cat_name;\r\n } else {\r\n url = \"/subcategory/\" + cat_name;\r\n }\r\n }\r\n\r\n this.props.history.push(url);\r\n }\r\n\r\n render() {\r\n if (this.state.cats && this.state.cats.length === 0) {\r\n return null;\r\n } else {\r\n return (\r\n <div className=\"block block--categories\">\r\n <span className=\"block--categories__title\">Categorieën</span>\r\n <ul className=\"block--categories__list\">\r\n {(this.storeGeneral.shop === 'SHOP_ALL' && this.state.cats.length > 0) &&\r\n this.state.cats.map((cat, i) => (\r\n <li \r\n className=\"block--tags__listitem --link\" \r\n onClick={(e) => this.handleOnClick('nur', cat['category'], cat['is_main_cat'])}\r\n dangerouslySetInnerHTML={{ __html: cat['display_value']}}\r\n />\r\n ))\r\n }\r\n\r\n {(this.storeGeneral.shop === 'SHOP_SB' && this.state.cats) &&\r\n Object.keys(this.state.cats).map((key, i) => (\r\n this.state.cats[key] !== null && !this.excluded.includes(this.state.cats[key]) && isNaN(this.state.cats[key]) &&\r\n <li \r\n className=\"block--tags__listitem --link\" \r\n onClick={(e) => this.handleOnClick(key, this.state.cats[key])}\r\n dangerouslySetInnerHTML={{ __html: this.state.cats[key]}}\r\n />\r\n ))\r\n }\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockBookCategories));\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nconst BlockBookTags = inject(\"stores\") (\r\n observer (\r\n class BlockBookTags extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n tags: []\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUser = this.props.stores.storeUser; \r\n\r\n this.excluded = [\r\n 'eigen uitgaven', ' eigen uitgaven'\r\n ]\r\n }\r\n\r\n componentDidMount = async() => {\r\n const tags = await this.storeBooks.getBookTags(this.props.sku);\r\n this.setState({\r\n tags: tags.length > 0 ? tags : []\r\n })\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (prevProps.sku !== this.props.sku) {\r\n const tags = await this.storeBooks.getBookTags(this.props.sku);\r\n this.setState({\r\n tags: tags.length > 0 ? tags : []\r\n })\r\n }\r\n }\r\n\r\n handleOnClick(tag) {\r\n let search_term = tag;\r\n this.storeUi.setSearchValue(search_term);\r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.getSearchIntentions(search_term);\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n if (this.storeGeneral.shop === 'SHOP_ALL') {\r\n this.storeUi.getSearchResults(search_term, '', this.storeUi.page_view);\r\n } else {\r\n this.storeUi.getSearchResultsSB(search_term, '', this.storeUi.page_view);\r\n }\r\n } else {\r\n this.storeUi.getSearchResultsSB(search_term, '', this.storeUi.page_view);\r\n }\r\n const path = \"/search-results?q=\" + search_term;\r\n this.props.history.push(path); \r\n }\r\n\r\n render() {\r\n if (this.state.tags && (this.state.tags.length === 0 || this.state.tags[0] === '')) {\r\n return null;\r\n } else {\r\n return (\r\n <div className=\"block block--tags\">\r\n <span className=\"block--tags__title\">Trefwoorden</span>\r\n <ul className=\"block--tags__list\">\r\n {this.state.tags &&\r\n this.state.tags.map((tag, i) => (\r\n tag.substring(0, 1) !== '!' && tag.substring(0, 2) !== ' !' && !this.excluded.includes(tag) &&\r\n <li \r\n className=\"block--tags__listitem --link\" \r\n onClick={(e) => this.handleOnClick(tag)}\r\n >\r\n {tag}\r\n </li>\r\n ))\r\n }\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockBookTags));\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nconst AudioPlayer = inject(\"stores\") (\r\n observer (\r\n class AudioPlayer extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n }\r\n\r\n componentDidMount() {\r\n this.audioRef.pause(); \r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.playing !== this.props.playing) {\r\n if (this.props.playing) {\r\n this.audioRef.currentTime = 0;\r\n this.audioRef.play(); \r\n } else {\r\n this.audioRef.pause(); \r\n }\r\n } else {\r\n //SbC causes the player to autoplay\r\n //this.audioRef.play();\r\n }\r\n }\r\n\r\n setAudio(audiosrc) { \r\n return <audio \r\n controls=\"controls\"\r\n src={audiosrc}\r\n ref={(audioRef) => {\r\n this.audioRef = audioRef;\r\n }}\r\n />\r\n }\r\n\r\n render() {\r\n const filename = this.props.filename\r\n const location = (this.props.duration === \"preview\") ? this.urlAPI + \"/public/preview-audio/\" : this.urlAPI + \"/public/audiobooks/\"\r\n const audiosrc = location + filename\r\n\r\n return (\r\n <div className=\"audioplayer-wrapper\">\r\n <div className=\"audioplayer\">\r\n {this.setAudio(audiosrc)}\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default AudioPlayer;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport AudioPlayer from '../content/audioplayer';\r\n\r\nconst BlockPreviewAudio = inject(\"stores\") (\r\n observer (\r\n class BlockPreviewAudio extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n filename: '',\r\n playing: false\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount() {\r\n const preview_data = this.storeBooks.preview_audio;\r\n this.setState({\r\n filename: this.storeBooks.preview_audio[0].filename,\r\n playing: false\r\n })\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.play !== this.props.play) {\r\n this.setState({\r\n playing: this.props.play\r\n })\r\n }\r\n }\r\n\r\n startAudio = (e, filename) => {\r\n this.setState({\r\n filename: filename,\r\n playing: true\r\n })\r\n }\r\n\r\n stopAudio = (filename) => {\r\n this.setState({\r\n playing: false\r\n })\r\n }\r\n\r\n render() {\r\n const preview_data = this.storeBooks.preview_audio\r\n\r\n if (preview_data.length == 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"blocks blocks--audio\">\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">\r\n {this.props.blockTitle}\r\n </div>\r\n </div> \r\n <div className=\"blocks__content\">\r\n <div className=\"wrapper-media__player--audio\">\r\n <AudioPlayer\r\n type = \"audio\"\r\n duration = \"preview\"\r\n filename = {this.state.filename}\r\n playing = {this.state.playing}\r\n />\r\n </div>\r\n <div className=\"wrapper-media__playlist\">\r\n <ul className=\"list--media-playlist\">\r\n {preview_data.map(preview => (\r\n <li>\r\n <span className=\"title --link\" onClick={(e) => this.startAudio(e, preview.filename)}>\r\n {(preview.title !== '' && preview.title !== undefined)\r\n ? preview.title\r\n : preview.filename\r\n }\r\n </span>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockPreviewAudio);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport i18n from \"i18next\";\r\n\r\nconst BlockPreviewPdfExtra = inject(\"stores\") (\r\n observer (\r\n class BlockPreviewPdfExtra extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlPublic = process.env.REACT_APP_URL_PUBLIC;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n hasPdf: false,\r\n pdfs: []\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n this.setTools();\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.sku !== this.props.sku) {\r\n this.setTools();\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n\r\n }\r\n\r\n async setTools() {\r\n const isbn = this.props.sku;\r\n if (!this.storeUi.search_overlay) {\r\n const pdfs = await this.storeUi.checkPdfExtra(this.props.sku);\r\n\r\n this.setState({\r\n hasPdf: ((pdfs && pdfs.length === 0) || (pdfs && 'error' in pdfs[0])) ? false : true,\r\n pdfs: (pdfs && pdfs.length === 0) ? [] : pdfs\r\n })\r\n }\r\n }\r\n\r\n handleLinkPdf = (filename) => {\r\n const url = this.urlPublic + \"/public/preview-pdf-extra/\" + filename + \".pdf\";\r\n window.open(url);\r\n }\r\n\r\n render() {\r\n return (this.state.hasPdf\r\n ? this.state.pdfs && this.state.pdfs.map((pdf) => (\r\n <div className=\"book-tools__tool book-tools__tool--pdf\">\r\n <div \r\n className=\"book-tools__tool-link book-tools__tool-link--pdf --link\"\r\n onClick={(e) => this.handleLinkPdf(pdf.filename)}\r\n /> \r\n {this.props.label &&\r\n <span \r\n className=\"book-tools__tool-title --link\"\r\n onClick={(e) => this.handleLinkPdf(pdf.filename)}\r\n dangerouslySetInnerHTML={{ __html: pdf.labelText\r\n ? pdf.labelText\r\n : i18n.t(\"book_tools.pdf\")\r\n }}\r\n />\r\n }\r\n </div>\r\n ))\r\n\r\n : null\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockPreviewPdfExtra);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport ReactPlayer from 'react-player'\r\n\r\nconst BlockPreviewVideo = inject(\"stores\") (\r\n observer (\r\n class BlockPreviewVideo extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n filename: ''\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n const preview_data = this.storeBooks.preview_video;\r\n this.setState({\r\n location: preview_data[0].location,\r\n filename: preview_data[0].filename,\r\n playing: false\r\n }) \r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.play !== this.props.play) {\r\n this.setState({\r\n playing: this.props.play\r\n })\r\n }\r\n }\r\n\r\n startVideo = (location, filename) => {\r\n this.setState({\r\n location: location,\r\n filename: filename,\r\n playing: true\r\n })\r\n }\r\n\r\n stopVideo = (filename) => {\r\n this.setState({\r\n playing: false\r\n })\r\n }\r\n\r\n render() {\r\n const preview_data = this.storeBooks.preview_video\r\n \r\n if (preview_data.length == 0) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"blocks blocks--video-clip\">\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">\r\n {this.props.blockTitle}\r\n </div>\r\n </div> \r\n <div className=\"blocks__content\">\r\n <div className=\"wrapper-media__player--video\">\r\n {this.state.location === 'local' &&\r\n <ReactPlayer \r\n url = {this.urlAPI + '/public/videos/' + this.state.filename}\r\n playing = {this.state.playing}\r\n controls = {true}\r\n width = '75%'\r\n />\r\n }\r\n {this.state.location !== 'local' &&\r\n <ReactPlayer \r\n url = {'https://www.youtube.com/watch?v=' + this.state.filename} \r\n playing = {this.state.playing}\r\n controls = {true}\r\n width = '75%'\r\n />\r\n }\r\n </div>\r\n <div className=\"wrapper-media__playlist\">\r\n <ul className=\"list--media-playlist\">\r\n {preview_data.map(preview => (\r\n <li><span className=\"title --link\" onClick={() => this.startVideo(preview.location, preview.filename)}>{preview.title}</span></li>\r\n ))}\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockPreviewVideo);\r\n\r\n","import React, { Component } from 'react';\r\n\r\nclass SocialLink extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n render() {\r\n return (\r\n <div className={\"social-link social-link--\" + this.props.medium + \" --link\"} onClick={this.props.handleSocialLink}></div>\r\n )\r\n }\r\n}\r\n\r\nexport default SocialLink;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport {\r\n FacebookShareButton,\r\n LinkedinShareButton,\r\n TwitterShareButton,\r\n WhatsappShareButton,\r\n RedditShareButton,\r\n TelegramShareButton,\r\n TumblrShareButton,\r\n} from 'react-share';\r\n\r\nimport {\r\n FacebookIcon,\r\n LinkedinIcon,\r\n TwitterIcon,\r\n WhatsappIcon,\r\n RedditIcon,\r\n TelegramIcon,\r\n TumblrIcon,\r\n} from 'react-share';\r\n\r\nimport ShareMastodon from '../content/share-mastodon';\r\n \r\nconst BlockSocialSharing = inject(\"stores\") (\r\n observer (\r\n class BlockSocialSharing extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n sku: ''\r\n }\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.urlAPP = process.env.REACT_APP_URL;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n }\r\n\r\n componentDidMount = async () => {\r\n let partner_code = 0;\r\n let params;\r\n let url;\r\n let direct_url;\r\n\r\n if (this.props.type == 'book') {\r\n if (this.storeAuth.user.is_partner) {\r\n partner_code = this.storeUser.user_data.partner_code;\r\n } \r\n // params = {\r\n // type: this.props.type,\r\n // pc: partner_code,\r\n // sku: this.props.sku,\r\n // title: this.storeBooks.current_book.title,\r\n // description: this.storeBooks.current_book.subtitle\r\n // }\r\n\r\n if (this.storeBooks.current_book) {\r\n if (partner_code !== 0) {\r\n url = 'https://www.succesboeken.nl/api/social/book.php?sku=' + this.props.sku + '&title=' + this.storeBooks.current_book.title + '&pc=' + partner_code;\r\n direct_url = 'https://www.succesboeken.nl/book/' + this.props.sku + '?pc=' + partner_code; \r\n } else {\r\n url = 'https://www.succesboeken.nl/api/social/book.php?sku=' + this.props.sku + '&title=' + this.storeBooks.current_book.title;\r\n direct_url = 'https://www.succesboeken.nl/book/' + this.props.sku;\r\n }\r\n }\r\n }\r\n\r\n if (this.props.type == 'newsletter') {\r\n let ext;\r\n const url_newsletter = \"/mailings/\" + this.storeUi.settings_list.latestNewsletter;\r\n const week = parseInt(url_newsletter.slice(url_newsletter.length - 4));\r\n if (week >= 2030) {\r\n ext = '.pdf';\r\n } else {\r\n ext = '.htm';\r\n }\r\n // params = {\r\n // type: this.props.type,\r\n // pc: partner_code,\r\n // sku: this.props.sku,\r\n // url: url_newsletter + ext,\r\n // title: this.storeUi.newsletter_active.title,\r\n // description: \"Nieuwsbrief van Succesboeken.nl\"\r\n // }\r\n direct_url = 'https://www.succesboeken.nl/api' + url_newsletter + ext;\r\n url = direct_url;\r\n }\r\n\r\n if (this.props.type == 'video') {\r\n // params = {\r\n // type: this.props.type,\r\n // pc: partner_code,\r\n // sku: this.props.sku,\r\n // title: \"Interessante video's op Succesboeken.nl\",\r\n // description: \"Bekijk een aantal bijzondere video's\"\r\n // }\r\n direct_url = 'https://www.succesboeken.nl/videos/' + this.props.reference;\r\n url = direct_url;\r\n }\r\n\r\n if (this.props.type == 'videos') {\r\n // params = {\r\n // type: this.props.type,\r\n // pc: partner_code,\r\n // sku: this.props.sku,\r\n // title: \"Interessante video's op Succesboeken.nl\",\r\n // description: \"Bekijk een aantal bijzondere video's\"\r\n // }\r\n direct_url = 'https://www.succesboeken.nl/videos';\r\n url = direct_url;\r\n }\r\n \r\n this.setState({\r\n sku: this.props.sku,\r\n short_url: url,\r\n direct_url: direct_url\r\n });\r\n }\r\n\r\n componentDidUpdate = async (prevProps) => {\r\n let partner_code = 0;\r\n let params;\r\n let url;\r\n let direct_url;\r\n\r\n if (this.props.type == 'book') {\r\n if (prevProps.sku !== this.props.sku) {\r\n if (this.storeAuth.user.is_partner) {\r\n partner_code = this.storeUser.user_data.partner_code;\r\n } \r\n // params = {\r\n // type: this.props.type,\r\n // pc: partner_code,\r\n // sku: this.props.sku,\r\n // title: this.storeBooks.current_book.title,\r\n // description: this.storeBooks.current_book.subtitle\r\n // }\r\n\r\n if (partner_code !== 0) {\r\n url = 'https://www.succesboeken.nl/api/social/book.php?sku=' + this.props.sku + '&title=' + this.storeBooks.current_book.title + '&pc=' + partner_code;\r\n direct_url = 'https://www.succesboeken.nl/book/' + this.props.sku + '?pc=' + partner_code; \r\n } else {\r\n url = 'https://www.succesboeken.nl/api/social/book.php?sku=' + this.props.sku + '&title=' + this.storeBooks.current_book.title;\r\n direct_url = 'https://www.succesboeken.nl/book/' + this.props.sku;\r\n }\r\n\r\n this.setState({\r\n sku: this.props.sku,\r\n short_url: url,\r\n direct_url: direct_url\r\n });\r\n }\r\n } \r\n }\r\n\r\n handleSocialTooltip = (social) => {\r\n this.props.onMouseEnter(social);\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"block--social-sharing\">\r\n <div \r\n onMouseEnter={(e) => this.handleSocialTooltip('Facebook')}\r\n onMouseLeave={(e) => this.handleSocialTooltip()}\r\n > \r\n <FacebookShareButton \r\n url = {this.state.short_url}\r\n >\r\n <FacebookIcon size={'1.75rem'} round={true}/>\r\n </FacebookShareButton>\r\n </div>\r\n \r\n <div \r\n onMouseEnter={(e) => this.handleSocialTooltip('LinkedIn')}\r\n onMouseLeave={(e) => this.handleSocialTooltip()}\r\n > \r\n <LinkedinShareButton \r\n url = {this.state.short_url}\r\n summary = {\"Summary of book ... \"}\r\n >\r\n <LinkedinIcon size={'1.75rem'} round={true}/>\r\n </LinkedinShareButton>\r\n </div>\r\n \r\n <div \r\n onMouseEnter={(e) => this.handleSocialTooltip('X')}\r\n onMouseLeave={(e) => this.handleSocialTooltip()}\r\n > \r\n <TwitterShareButton \r\n url = {this.state.direct_url}\r\n via = {\"succesboeken.nl\"}\r\n hashtags = {[]}\r\n >\r\n {/* <TwitterIcon size={'1.75rem'} round={true}/> */}\r\n <img \r\n src=\"https://www.succesboeken.nl/api/assets/images/icons/ic-x-trans.png\" \r\n className=\"block--social-sharing__icon--twitter\"\r\n />\r\n </TwitterShareButton>\r\n </div>\r\n \r\n <div \r\n onMouseEnter={(e) => this.handleSocialTooltip('Whatsapp')}\r\n onMouseLeave={(e) => this.handleSocialTooltip()}\r\n > \r\n <WhatsappShareButton \r\n url = {this.state.direct_url}\r\n >\r\n <WhatsappIcon size={'1.75rem'} round={true}/>\r\n </WhatsappShareButton>\r\n </div>\r\n \r\n {/* <div \r\n onMouseEnter={(e) => this.handleSocialTooltip('Reddit')}\r\n onMouseLeave={(e) => this.handleSocialTooltip()}\r\n > \r\n <RedditShareButton \r\n url = {this.state.short_url}\r\n >\r\n <RedditIcon size={'1.75rem'} round={true}/>\r\n </RedditShareButton>\r\n </div> */}\r\n \r\n <div \r\n onMouseEnter={(e) => this.handleSocialTooltip('Telegram')}\r\n onMouseLeave={(e) => this.handleSocialTooltip()}\r\n > \r\n <TelegramShareButton \r\n url = {this.state.direct_url}\r\n >\r\n <TelegramIcon size={'1.75rem'} round={true}/>\r\n </TelegramShareButton>\r\n </div>\r\n \r\n {/* <div \r\n onMouseEnter={(e) => this.handleSocialTooltip('Tumblr')}\r\n onMouseLeave={(e) => this.handleSocialTooltip()}\r\n > \r\n <TumblrShareButton \r\n url = {this.state.short_url}\r\n >\r\n <TumblrIcon size={'1.75rem'} round={true}/>\r\n </TumblrShareButton>\r\n </div> */}\r\n\r\n {/* <ShareMastodon \r\n url= {url}\r\n >\r\n </ShareMastodon> */}\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockSocialSharing);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport NewWindow from 'react-new-window';\r\nimport { RedditShareCount } from 'react-share';\r\n\r\nconst ShareMastodon = inject(\"stores\") (\r\n observer (\r\n class ShareMastodon extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n share_window: false\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n \r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n \r\n }\r\n\r\n handleOnClick = () => {\r\n this.setState({\r\n share_window: !this.state.share_window\r\n })\r\n }\r\n \r\n render() {\r\n const title = 'Lees ook eens dit boek'\r\n const hashtags = ''\r\n const author = this.storeUi.settings_list['socialAuthor']\r\n const instance = this.storeUi.settings_list['urlMastodon']\r\n const mastodon_url = instance + \"share?text=\" + encodeURIComponent(title + \"\\n\\n\" + this.props.url + \"\\n\\n\" + hashtags + \" \" + author);\r\n\r\n return (\r\n <React.Fragment>\r\n <div className=\"social-link--mastodon\" onClick={() => this.handleOnClick()}></div>\r\n\r\n {this.state.share_window &&\r\n <NewWindow\r\n url = {mastodon_url}\r\n >\r\n </NewWindow>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default ShareMastodon;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst TemplateForms = inject(\"stores\") (\r\n observer (\r\n class TemplateForms extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n classFeedback: ''\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n this.storeUi.clearFormFeedback();\r\n }\r\n\r\n handleClose = (e) => {\r\n this.setState({\r\n classFeedback: '--inline'\r\n })\r\n }\r\n \r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div className={\"form-wrapper form-wrapper--\" + this.props.formClass}>\r\n <div className=\"form-wrapper__help\">\r\n <span className=\"form-wrapper__help--required\">{i18n.t(\"form_feedback.required\")}</span>\r\n </div>\r\n \r\n <div className=\"form-fieldset\">\r\n {this.props.children}\r\n\r\n {this.props.type !== 'vraag/opmerking' &&\r\n Object.keys(this.storeUi.form_feedback).length > 0 && \r\n <div className={\"form__feedback form__feedback--dialog \" + this.state.classFeedback}>\r\n <div className=\"btn--close\" onClick={(e) => this.handleClose(e)}><div className=\"btn--icon --link icon--close\">Sluit</div></div>\r\n {'success' in this.storeUi.form_feedback &&\r\n <React.Fragment>\r\n <span className=\"form__feedback--success\">{i18n.t(\"form_feedback.success\", {type: this.props.type})}</span>\r\n {this.props.msg_success && \r\n <span>{this.storeUi.form_feedback.success}</span>\r\n }\r\n </React.Fragment>\r\n }\r\n {'error' in this.storeUi.form_feedback && (\r\n 'error_code' in this.storeUi.form_feedback \r\n ? <span className=\"form__feedback--error\" dangerouslySetInnerHTML={{ __html: this.storeUi.form_feedback.error}} />\r\n : <span className=\"form__feedback--error\">{i18n.t(\"form_feedback.error\", {type: this.props.type})}</span>\r\n )}\r\n\r\n {('error_code' in this.storeUi.form_feedback && this.storeUi.form_feedback.error_code === 101) &&\r\n <span className=\"form__feedback--error\">Of maak een <Link to=\"/register\">nieuw account</Link> aan met dit e-mailadres.</span>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default TemplateForms;\r\n","import React from 'react';\r\n\r\nconst TextArea = props => {\r\n\r\n let formClass = \"form-field--textarea\";\r\n \r\n if (props.className && props.className !== '') {\r\n formClass = formClass + ' ' + props.className;\r\n }\r\n\r\n //if (props.touched && !props.valid) {\r\n if (!props.valid && props.value !== '') {\r\n formClass = formClass + ' --error';\r\n }\r\n\r\n return (\r\n <div className=\"form-group\">\r\n <textarea \r\n {...props} \r\n className = {formClass} \r\n maxLength = {props.maxLength}\r\n />\r\n {!props.valid && props.value !== '' && \r\n <span className=\"form-field--error\">Deze invoer is niet correct.</span>\r\n }\r\n </div>\r\n );\r\n}\r\n\r\nexport default TextArea;","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport moment from \"moment\";\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport TemplateForms from '../../templates/template-forms';\r\n\r\nimport TextArea from '../../elements/form-input-textarea';\r\nimport TextInput from '../../elements/form-input-text';\r\n\r\nconst FormSendToFriend = inject(\"stores\") (\r\n observer (\r\n class FormSendToFriend extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n formControls: { \r\n relations: [{\r\n firstname: {\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.firstname_relation\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n },\r\n lastname: {\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.lastname_relation\"),\r\n valid: true\r\n },\r\n email: {\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.email_relation\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: true,\r\n isEmail: true\r\n }\r\n }\r\n }],\r\n firstname: {\r\n label: i18n.t(\"forms.label.firstname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.firstname : '',\r\n placeholder: i18n.t(\"forms.placeholder.firstname\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: true\r\n },\r\n required: true\r\n },\r\n lastname: {\r\n label: i18n.t(\"forms.label.lastname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.lastname : '',\r\n placeholder: i18n.t(\"forms.placeholder.lastname\"),\r\n touched: false,\r\n valid: true\r\n }, \r\n email: {\r\n label: i18n.t(\"forms.label.email\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.email : '',\r\n placeholder: i18n.t(\"forms.placeholder.email\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: true,\r\n isEmail: true\r\n },\r\n required: true\r\n },\r\n message: {\r\n label: i18n.t(\"forms.label.message\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.message\"),\r\n valid: true\r\n },\r\n partner_code: {\r\n label: i18n.t(\"forms.label.partner\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.partner_code : '',\r\n placeholder: i18n.t(\"forms.placeholder.partner\"),\r\n touched: true,\r\n valid: true\r\n }, \r\n captcha: {\r\n label: i18n.t(\"forms.label.captchar\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.captcha\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: true,\r\n passCaptcha: true\r\n },\r\n required: true\r\n } \r\n },\r\n formIsValid: false,\r\n btn_class: '--disabled',\r\n error: false\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUi.clearFormFeedback();\r\n }\r\n\r\n componentDidMount = () => {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n let updatedFormElement = {};\r\n let formIsValid = true;\r\n \r\n Object.keys(this.state.formControls).map((key, i) => {\r\n if (key !== 'relations') {\r\n updatedFormElement = {\r\n ...updatedControls[key]\r\n };\r\n\r\n updatedFormElement.value = this.state.formControls[key].value;\r\n if (updatedFormElement.value !== null && updatedFormElement.value !== undefined) {\r\n updatedFormElement.valid = validate(updatedFormElement.value, updatedFormElement.validationRules);\r\n }\r\n updatedControls[key] = updatedFormElement;\r\n }\r\n })\r\n\r\n //SbC:: check if form is valid\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls\r\n });\r\n }\r\n\r\n addRelation = (e) => {\r\n e.preventDefault();\r\n this.storeUi.clearFormFeedback();\r\n\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n\r\n let updatedFormElement = {\r\n ...updatedControls['relations']\r\n };\r\n \r\n let relation = [{\r\n firstname: {\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.firstname_relation\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n },\r\n lastname: {\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.lastname_relation\"),\r\n valid: true\r\n },\r\n email: {\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.email_relation\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: true,\r\n isEmail: true\r\n },\r\n required: true\r\n }\r\n }];\r\n\r\n let arr = [];\r\n \r\n Object.keys(updatedFormElement).map((key, i) => {\r\n arr.push(updatedFormElement[key]);\r\n })\r\n updatedFormElement = arr.concat(relation);\r\n updatedControls['relations'] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls\r\n })\r\n }\r\n\r\n handleChange = (event, action) => { \r\n this.storeUi.clearFormFeedback();\r\n\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n \r\n if (name !== 'captcha') {\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n updatedFormElement.touched = true;\r\n }\r\n\r\n if (name === 'captcha') {\r\n if (value.length > 6) {\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n updatedFormElement.touched = true;\r\n } else {\r\n updatedFormElement.valid = false;\r\n }\r\n } \r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n //SbC check if at least one valid email for relation\r\n formIsValid = this.state.formControls.relations[0].email.valid ? formIsValid : false;\r\n //SbC check if at least one valid firstname for relation\r\n formIsValid = this.state.formControls.relations[0].firstname.valid ? formIsValid : false;\r\n \r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n })\r\n\r\n }\r\n\r\n handleChangeRelation = (event, idx) => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls.relations[idx]\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n const allControls = {\r\n ...this.state.formControls\r\n };\r\n allControls.relations[idx] = updatedControls;\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in this.state.formControls) {\r\n if (this.state.formControls[inputIdentifier].required) {\r\n formIsValid = this.state.formControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n //SbC check if at least one valid email for relation\r\n formIsValid = this.state.formControls.relations[0].email.valid ? formIsValid : false;\r\n //SbC check if at least one valid firstname for relation\r\n formIsValid = this.state.formControls.relations[0].firstname.valid ? formIsValid : false;\r\n\r\n this.setState({\r\n formControls: allControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n })\r\n }\r\n\r\n sendSendToFriendForm = async(e) => {\r\n e.preventDefault();\r\n\r\n if (this.state.formIsValid && this.state.formControls.relations[0].email.valid) {\r\n const feedback = await this.storeUi.sendFormSendToFriend(this.state.formControls, this.storeBooks.current_book);\r\n if ('success' in this.storeUi.form_feedback) {\r\n this.clearSendToFriendForm();\r\n }\r\n }\r\n }\r\n\r\n clearSendToFriendForm = () => {\r\n //SbC clear message\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n\r\n let name = 'message';\r\n let updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = '';\r\n updatedControls[name] = updatedFormElement;\r\n //end\r\n\r\n name = 'captcha';\r\n updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = '';\r\n updatedFormElement.touched = false;\r\n updatedFormElement.valid = false;\r\n updatedControls[name] = updatedFormElement;\r\n //end\r\n\r\n //SbC clear recievers\r\n updatedFormElement = [\r\n ...updatedControls['relations']\r\n ];\r\n updatedFormElement.map((el, i) => {\r\n let updatedFormEl = el;\r\n for (let inputIdentifier in updatedFormEl) {\r\n el[inputIdentifier].value = '';\r\n el[inputIdentifier].valid = false;\r\n el[inputIdentifier].touched = false;\r\n }\r\n })\r\n updatedControls['relations'] = updatedFormElement;\r\n //end\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: false,\r\n btn_class: '--disabled'\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <TemplateForms\r\n type = 'sendtofriend'\r\n msg_success = {i18n.t(\"form_feedback.success_review\")}\r\n > \r\n <div className=\"form form--sendtofriend\">\r\n <form> \r\n <p>Ontvanger(s):</p>\r\n {this.state.formControls.relations && this.state.formControls.relations.map((relation, idx) => (\r\n <div className=\"form-row form-row--input\">\r\n {Object.keys(relation).map((key, i) => (\r\n <div className=\"form-column\" key={i}>\r\n <TextInput \r\n name = {key} \r\n placeholder = {relation[key].placeholder}\r\n value = {relation[key].value}\r\n onChange = {(e) => this.handleChangeRelation(e, idx)}\r\n touched = {this.state.formControls[key].touched}\r\n valid = {relation[key].valid}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n ))}\r\n <div className=\"form-row form-row--buttons\">\r\n <button className=\"button button--tertiary button--text\" onClick={(e) => this.addRelation(e)}>Voeg ontvanger toe</button>\r\n </div>\r\n \r\n <p>Dit is wat de ontvanger te zien zal krijgen:</p>\r\n <div className=\"form-row form-row--preview\">\r\n <div className=\"form-column\">\r\n <p>Beste (hier wordt automatisch de voornaam van de ontvanger ingevuld),</p>\r\n <p>Dit boek (of product) kwam ik tegen op Succesboeken.nl met de titel:<br/>\r\n <strong>{this.storeBooks.current_book && this.storeBooks.current_book.title}</strong>.</p>\r\n <p>Ik denk dat het ook interessant voor jou is.</p>\r\n <p>Op de website Succesboeken.nl vind je ook nog andere interessante boeken of producten.</p>\r\n </div>\r\n </div>\r\n \r\n <p>Hieronder kun je dit bericht nog verder aanvullen:</p>\r\n <div className=\"form-row form-row--input\">\r\n <div className=\"form-column\">\r\n <TextArea \r\n name=\"message\"\r\n placeholder = {this.state.formControls.message.placeholder}\r\n value = {this.state.formControls.message.value}\r\n onChange = {(e) => this.handleChange(e)}\r\n valid = {this.state.formControls.message.valid}\r\n />\r\n </div>\r\n </div>\r\n \r\n <p>Met vriendelijke groet,</p>\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {key != 'message' && key != 'relations' && key != 'partner_code' && key != 'captcha' &&\r\n <div className=\"form-row form-row--input\" key={i}>\r\n <div className=\"form-column\">\r\n <label className={\"form-label\" + (this.state.formControls[key].required ? ' --required' : '')}>{this.state.formControls[key].label}</label>\r\n </div>\r\n <div className=\"form-column\">\r\n <TextInput \r\n name = {key} \r\n placeholder = {this.state.formControls[key].placeholder}\r\n value = {this.state.formControls[key].value}\r\n onChange = {this.handleChange}\r\n onBlur = {(e) => this.handleChange(e, 'blur')}\r\n touched = {this.state.formControls[key].touched}\r\n valid = {this.state.formControls[key].valid}\r\n />\r\n </div>\r\n </div>\r\n } \r\n\r\n {key == 'partner_code' &&\r\n <input type=\"hidden\" name= {key} value={this.state.formControls[key].value} />\r\n }\r\n </React.Fragment>\r\n ))}\r\n\r\n <div className=\"form-row form-row--input form-row--input-captcha\">\r\n Om geautomatiseerde (robot) e-mails te voorkomen, willen we weten of je echt een mens bent.\r\n </div>\r\n <div className=\"form-row form-row--input\">\r\n <div className=\"form-column\">\r\n <label className={\"form-label --required\"}>Vul hier de dag van vandaag in</label>\r\n </div>\r\n <div className=\"form-column\">\r\n <TextInput \r\n name = \"captcha\" \r\n placeholder = {this.state.formControls[\"captcha\"].placeholder}\r\n value = {this.state.formControls[\"captcha\"].value}\r\n onChange = {this.handleChange}\r\n onBlur = {(e) => this.handleChange(e, 'blur')}\r\n />\r\n </div>\r\n </div>\r\n {!this.state.formControls.captcha.valid && this.state.formControls.captcha.touched &&\r\n <span className=\"form-field--error --pw\">\r\n De dag van vandaag klopt nog niet.\r\n </span>\r\n }\r\n <div className=\"form-row form-row--input form-row--input-captcha\">\r\n En geniet van deze dag!\r\n </div>\r\n \r\n <div className=\"form-row form-row--buttons\">\r\n {(this.state.formIsValid && this.state.btn_class === '--active')\r\n ? <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.sendSendToFriendForm(e)}>{i18n.t(\"button.submit\")}</button>\r\n : <span className={\"btn btn--primary \" + this.state.btn_class}>{i18n.t(\"button.submit\")}</span>\r\n }\r\n </div>\r\n </form>\r\n\r\n {/* <div className=\"form__feedback\">\r\n {'success' in this.storeUi.form_feedback &&\r\n <span className=\"form__feedback--success\">\r\n {i18n.t(\"form_feedback.success\", {\r\n type: this.state.formControls.relations.length == 1 ? 'aanbeveling' : 'aanbevelingen', \r\n count: this.state.formControls.relations.length\r\n })}\r\n </span>\r\n }\r\n {'error' in this.storeUi.form_feedback &&\r\n <span className=\"form__feedback--error\">\r\n {i18n.t(\"form_feedback.error\", {\r\n type: this.state.formControls.relations.length == 1 ? 'aanbeveling' : 'aanbevelingen', \r\n count: this.state.formControls.relations.length\r\n })}\r\n </span>\r\n }\r\n </div> */}\r\n </div>\r\n </TemplateForms> \r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormSendToFriend);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport BlockPreviewAudio from '../block/block-preview-audio';\r\nimport BlockPreviewPdf from '../block/block-preview-pdf';\r\nimport BlockPreviewPdfExtra from '../block/block-preview-pdf-extra';\r\nimport BlockPreviewVideo from '../block/block-preview-video';\r\nimport SocialLink from '../../elements/social-link';\r\nimport BlockSocialSharing from '../block/block-social-sharing';\r\nimport FormSendToFriend from '../../components/forms/form-sendtofriend';\r\n\r\nconst BlockBookTools = inject(\"stores\") (\r\n observer (\r\n class BlockBookTools extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n social_links: [\r\n 'email'\r\n ],\r\n audio_view: false,\r\n video_view: false,\r\n form_view: false,\r\n medium: 'email',\r\n has_downloads: false,\r\n has_audio: false,\r\n has_video: false,\r\n play_audio: false,\r\n play_video: false,\r\n social_tooltip: i18n.t(\"share.book\"),\r\n type: 'boek'\r\n }\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.urlPublic = process.env.REACT_APP_URL_PUBLIC;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n async componentDidMount() {\r\n await this.setTools();\r\n this.setDefaultTooltip();\r\n const downloads = this.storeBooks.getBookDownloads(this.props.book.sku);\r\n\r\n if (this.storeBooks.list_downloads.length > 0) {\r\n this.setState({\r\n has_downloads: true\r\n })\r\n }\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n if (prevProps.book.sku !== this.props.book.sku) {\r\n await this.setTools();\r\n this.setDefaultTooltip();\r\n }\r\n }\r\n\r\n async setTools() {\r\n const isbn = this.props.book.sku;\r\n\r\n const audio = await this.storeBooks.getPreview('audio', isbn);\r\n const video = await this.storeBooks.getPreview('video', isbn);\r\n\r\n this.setState({\r\n has_audio: this.storeBooks.preview_audio.length > 0 ? true : false,\r\n has_video: this.storeBooks.preview_video.length > 0 ? true : false\r\n })\r\n }\r\n\r\n handleLinkPdf = (sku) => {\r\n const url = this.urlPublic + \"/public/preview-pdf/\" + sku + \".pdf\";\r\n window.open(url);\r\n }\r\n\r\n handleLinkDownloads = (e) => {\r\n this.props.viewDownloads(e);\r\n }\r\n\r\n handleLinkAudio = (medium) => {\r\n this.setState({\r\n audio_view: !this.state.audio_view,\r\n form_view: false,\r\n video_view: false,\r\n medium: medium,\r\n play_audio: false,\r\n play_video: false\r\n })\r\n }\r\n\r\n handleLinkVideo = (medium) => {\r\n this.setState({\r\n audio_view: false,\r\n form_view: false,\r\n video_view: !this.state.video_view,\r\n medium: medium,\r\n play_audio: false,\r\n play_video: false\r\n })\r\n }\r\n\r\n handleLinkSocial = (medium) => {\r\n this.setState({\r\n audio_view: false,\r\n form_view: !this.state.form_view,\r\n video_view: false,\r\n medium: medium,\r\n play_audio: false,\r\n play_video: false\r\n })\r\n }\r\n\r\n setDefaultTooltip = () => {\r\n const type = content.setContentType(this.props.book)\r\n\r\n this.setState({\r\n type: type,\r\n social_tooltip: 'Deel dit ' + type\r\n })\r\n\r\n return type;\r\n }\r\n\r\n onMouseEnterSocial = (social) => {\r\n this.setState({\r\n social_tooltip: (social !== '' && social !== undefined) \r\n ? social \r\n : ('Deel dit ' + this.setDefaultTooltip())\r\n })\r\n }\r\n \r\n render() { \r\n return (\r\n <React.Fragment>\r\n <div className=\"block block--book-tools\">\r\n <div className=\"book-tools__group\">\r\n <BlockPreviewPdf\r\n sku = {this.props.book.sku}\r\n label = {true}\r\n />\r\n <BlockPreviewPdfExtra\r\n sku = {this.props.book.sku}\r\n label = {true}\r\n />\r\n {this.state.has_audio &&\r\n <div className=\"book-tools__tool\" onClick={(e) => this.handleLinkAudio(e)} >\r\n <div className=\"book-tools__tool-link book-tools__tool-link--audio --link\" />\r\n <span className=\"book-tools__tool-title --link\">{i18n.t(\"book_tools.audio\")}</span>\r\n </div> \r\n }\r\n {this.state.has_video &&\r\n <div className=\"book-tools__tool\" onClick={(e) => this.handleLinkVideo(e)} >\r\n <div className=\"book-tools__tool-link book-tools__tool-link--video --link\" />\r\n <span className=\"book-tools__tool-title --link\">{i18n.t(\"book_tools.video\")}</span>\r\n </div>\r\n }\r\n {this.state.has_downloads &&\r\n <div \r\n className=\"book-tools__tool\" \r\n onClick={(e) => this.handleLinkDownloads(e)} \r\n >\r\n <div className=\"book-tools__tool-link book-tools__tool-link--downloads --link\" />\r\n {this.storeBooks.list_downloads.length > 1\r\n ? <span className=\"book-tools__tool-title --link\">{i18n.t(\"book_tools.downloads\")}</span>\r\n : <span className=\"book-tools__tool-title --link\">{this.storeBooks.list_downloads[0].title}</span>\r\n }\r\n \r\n </div>\r\n }\r\n </div>\r\n <div className=\"book-tools__group\">\r\n <div className=\"book-tools__group--social\">\r\n <div className=\"book-tools__tool\">\r\n <div className=\"social-links\">\r\n <BlockSocialSharing \r\n type = 'book'\r\n sku = {this.props.book.sku} \r\n onMouseEnter = {this.onMouseEnterSocial}\r\n />\r\n </div>\r\n <span className=\"book-tools__tool-title\">{this.state.social_tooltip}</span>\r\n </div>\r\n </div>\r\n <div className=\"book-tools__group--social\">\r\n <div className=\"book-tools__tool book-tools__tool--email\">\r\n <div className=\"social-links\">\r\n {this.state.social_links.map((link) => (\r\n <SocialLink \r\n medium = {link}\r\n handleSocialLink = {(e) => this.handleLinkSocial(link)} \r\n />\r\n ))}\r\n </div>\r\n <span className=\"book-tools__tool-title --link\" onClick={(e) => this.handleLinkSocial('email')}\r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"book_tools.tell_a_friend\", {type: this.state.type})}}>\r\n </span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n {this.state.has_audio &&\r\n <div className={\"block-audio--foldout \" + (this.state.audio_view ? \"--expanded\" : \"--collapsed\")}>\r\n <BlockPreviewAudio\r\n book = {this.props.book}\r\n blockTitle = {i18n.t(\"block.preview_audio.header\")}\r\n play = {this.state.play_audio}\r\n />\r\n </div>\r\n }\r\n \r\n {this.state.has_video &&\r\n <div className={\"block-video--foldout \" + (this.state.video_view ? \"--expanded\" : \"--collapsed\")}>\r\n <BlockPreviewVideo\r\n book = {this.props.book}\r\n blockTitle = {i18n.t(\"block.preview_video.header\")}\r\n play = {this.state.play_video}\r\n />\r\n {/* <BlockPreviewVideoIFrame\r\n book = {this.props.book}\r\n blockTitle = {i18n.t(\"block.preview_video.header\")}\r\n play = {this.state.play_video}\r\n /> */}\r\n </div>\r\n }\r\n\r\n <div className={\"block-social--foldout \" + (this.state.form_view ? \"--expanded\" : \"--collapsed\")}>\r\n {this.state.medium === \"email\" && \r\n <div className=\"segment__content--form\">\r\n <p>Het is de moeite waard om een vriend, collega of familielid op dit boek te attenderen. Je kunt dat doen door onderstaande velden in te vullen en te versturen. Daarmee geef je de ontvangers de mogelijkheid om gratis van diverse boeken het eerste hoofdstuk te lezen.</p>\r\n <FormSendToFriend />\r\n </div>\r\n }\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockBookTools);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst BlockDownloads = inject(\"stores\") (\r\n observer (\r\n class BlockDownloads extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = ({\r\n downloads: []\r\n })\r\n }\r\n\r\n componentDidMount = async() => {\r\n const downloads = await this.storeBooks.getBookDownloads(this.props.sku);\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.sku !== this.props.sku) {\r\n const downloads = this.storeBooks.getBookDownloads(this.props.sku);\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n this.storeBooks.list_downloads.length > 0 && \r\n <div \r\n className=\"block--downloads\" \r\n >\r\n <h4>Beschikbare downloads bij dit boek</h4>\r\n <ul>\r\n {this.storeBooks.list_downloads.map((download) => (\r\n <li>\r\n <a href={this.urlAPI + \"/public/downloads/\" + download.filename}\r\n target=\"_blank\"\r\n className=\"link--pdf\"\r\n >\r\n {download.title}\r\n </a>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockDownloads);\r\n\r\n","import React, { Component } from 'react';\r\nimport i18n from \"i18next\";\r\n\r\nclass FormTextIncomplete extends Component {\r\n render() {\r\n return (\r\n <div className=\"form-row form-row--help --incomplete\">\r\n <span \r\n className=\"form-row--help__text\"\r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"form_suggestions.incomplete\")}}\r\n />\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default FormTextIncomplete;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst BlockReview = inject(\"stores\") (\r\n observer (\r\n class BlockReview extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n reviewer: {},\r\n review: {}\r\n }\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n async componentDidMount() {\r\n if (this.props.view === 'review') {\r\n this.getReviewer(this.props.review.reviewer);\r\n this.setState({\r\n review: this.props.review\r\n })\r\n }\r\n\r\n if (this.props.view === 'preview') {\r\n this.convertPreviewData();\r\n }\r\n }\r\n\r\n getReviewer = async (id) => {\r\n const reviewer = await this.storeBooks.getReviewer(id);\r\n if (reviewer.length > 0) {\r\n reviewer[0].website = this.convertUrl(reviewer[0].website);\r\n this.setState({\r\n reviewer: reviewer[0]\r\n })\r\n }\r\n }\r\n\r\n convertPreviewData() {\r\n const data = this.props.src;\r\n\r\n this.setState({\r\n reviewer: {\r\n img: this.props.img,\r\n name: data.firstname.value + ' ' + data.lastname.value,\r\n firstname: data.firstname.value,\r\n lastname: data.lastname.value,\r\n //profession: data.profession.value !== null ? '' : '',\r\n //website: data.website.value !== null ? this.convertUrl(data.website.value) : '',\r\n description: data.profile.value,\r\n show_firstname: data.show_firstname.value,\r\n show_lastname: data.show_lastname.value,\r\n show_profession: data.show_profession.value,\r\n show_website: data.show_website.value,\r\n show_profile: data.show_profile.value,\r\n },\r\n review: {\r\n title: data.review_title.value,\r\n review: data.review.value\r\n }\r\n })\r\n }\r\n \r\n convertUrl(data) {\r\n let url = data;\r\n if (url !== null) {\r\n const prefix = data.substring(0, 4);\r\n if (prefix !== 'http') {\r\n url = 'http://' + url;\r\n } \r\n return url;\r\n }\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"segment__content block--review\">\r\n <div className=\"block--review__header\">\r\n <span className=\"block--review__author\">Recensie door:</span>\r\n </div> \r\n\r\n <div className=\"block--review__reviewer\">\r\n {/* {(this.state.reviewer.img !== '' && this.state.reviewer.img !== null && this.state.reviewer.img !== undefined) &&\r\n <div className=\"block--review__reviewer-photo\">\r\n <img src={this.props.view === 'review' ? (this.urlAPI + '/public/images/reviewers/' + this.state.reviewer.img) : this.state.reviewer.img} />\r\n </div>\r\n } */}\r\n <div className=\"block--review__reviewer-specs\">\r\n <dl>\r\n <dt>Naam</dt>\r\n <dd>\r\n {this.state.reviewer.show_firstname === 1 &&\r\n <span>{this.state.reviewer.firstname} </span>\r\n }\r\n {this.state.reviewer.show_lastname === 1 &&\r\n this.state.reviewer.lastname\r\n }\r\n {(this.state.reviewer.show_firstname !== 1 && this.state.reviewer.show_lastname !== 1) &&\r\n <span>(Naam bekend bij redactie)</span>\r\n }\r\n </dd>\r\n {/* {this.state.reviewer.show_profession === 1 && this.state.reviewer.profession !== null && this.state.reviewer.profession !== '' &&\r\n <React.Fragment>\r\n <dt>Beroep</dt>\r\n <dd>{this.state.reviewer.profession}</dd>\r\n </React.Fragment>\r\n }\r\n\r\n {this.state.reviewer.show_website === 1 && this.state.reviewer.website !== 'http://' && this.state.reviewer.website !== 'https://' &&\r\n <React.Fragment>\r\n <dt>Website</dt>\r\n <dd><a href={this.state.reviewer.website} target=\"_blank\" className=\"link--read-more --link\">{this.state.reviewer.website}</a></dd>\r\n </React.Fragment>\r\n } */}\r\n \r\n {this.state.reviewer.show_profile === 1 && this.state.reviewer.description !== null && this.state.reviewer.description !== '' &&\r\n <React.Fragment>\r\n <dt>Beschrijving</dt>\r\n <dd><span dangerouslySetInnerHTML={{ __html: this.state.reviewer.description}}></span></dd>\r\n </React.Fragment>\r\n }\r\n </dl>\r\n </div>\r\n </div>\r\n \r\n <div className=\"block--review__content\">\r\n {this.state.review.source !== null && this.state.review.source !== undefined && this.state.review.source !== '' &&\r\n <div className=\"block--review__content-text\">Bron: {this.state.review.source}</div>\r\n }\r\n <div className=\"block--review__content-title\" dangerouslySetInnerHTML={{ __html: this.state.review.title}}></div>\r\n <div className=\"block--review__content-text\" dangerouslySetInnerHTML={{ __html: this.state.review.review}}></div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockReview);\r\n\r\n\r\n","import React from 'react';\r\n\r\nexport default class FormInputFile extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n files: []\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.reset !== this.props.reset && this.props.reset == true) {\r\n this.handleReset();\r\n }\r\n }\r\n\r\n handleChange = (e) => {\r\n let files = e.target.files;\r\n var allFiles = [];\r\n for (var i = 0; i < files.length; i++) {\r\n let file = files[i];\r\n\r\n let reader = new FileReader();\r\n reader.readAsDataURL(file);\r\n\r\n reader.onload = () => {\r\n let fileInfo = {\r\n name: file.name,\r\n type: file.type,\r\n size: Math.round(file.size / 1000) + ' kB',\r\n base64: reader.result,\r\n file: file\r\n };\r\n\r\n allFiles.push(fileInfo);\r\n\r\n if (allFiles.length == files.length) {\r\n if (this.props.multiple) {\r\n this.props.onDone(allFiles);\r\n } else {\r\n this.props.onDone(allFiles[0]);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n handleReset = () => {\r\n let fileInfo = {};\r\n this.props.onDone(fileInfo);\r\n this.refs.file_ref.value = '';\r\n }\r\n\r\n render() {\r\n return (\r\n <input\r\n type = \"file\"\r\n onChange = {this.handleChange}\r\n multiple = {this.props.multiple}\r\n ref = \"file_ref\"\r\n />\r\n );\r\n }\r\n}\r\n\r\nFormInputFile.defaultProps = {\r\n multiple: false\r\n};\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport FormInputFile from '../../elements/form-input-file';\r\n\r\nconst BlockImageUpload = inject(\"stores\") (\r\n observer (\r\n class BlockImageUpload extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n file: {},\r\n reset: false\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n getFiles = (file) => {\r\n this.setState({ \r\n file: file, \r\n reset: false\r\n });\r\n\r\n console.log('SbC upload:', file)\r\n this.props.setImageUpload(file);\r\n }\r\n\r\n resetFile = () => {\r\n this.setState({ \r\n file: {} ,\r\n reset: true\r\n });\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"block block--image-upload\">\r\n <FormInputFile\r\n multiple = {false}\r\n onDone = {this.getFiles} \r\n reset = {this.state.reset}\r\n />\r\n\r\n {this.state.file.base64 &&\r\n <div className=\"block--image-upload__container\">\r\n <img src={this.state.file.base64} className=\"block--image-upload__preview\" />\r\n <span className=\"--link\" onClick={(e) => this.resetFile()}>Verwijder</span>\r\n </div>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockImageUpload);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport TemplateForms from '../../templates/template-forms';\r\n\r\n\r\nimport Checkbox from '../../elements/form-input-checkbox';\r\nimport TextArea from '../../elements/form-input-textarea';\r\nimport TextInput from '../../elements/form-input-text';\r\nimport FormTextIncomplete from '../../elements/form-text-incomplete';\r\nimport BlockReview from '../block/block-review';\r\nimport BlockImageUpload from '../block/block-image-upload';\r\n\r\nconst ContentPreview = inject(\"stores\") (\r\n observer (\r\n class ContentPreview extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n render() {\r\n return (\r\n this.props.children\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst FormReview = inject(\"stores\") (\r\n observer (\r\n class FormReview extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n btn_class: '--disabled',\r\n formControls: { \r\n firstname: {\r\n label: i18n.t(\"forms.label.firstname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.firstname : '',\r\n placeholder: i18n.t(\"forms.placeholder.firstname\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n required: true\r\n },\r\n show_firstname: {\r\n label: 'Mag getoond worden',\r\n value: 1,\r\n touched: false,\r\n valid: true\r\n },\r\n lastname: {\r\n label: i18n.t(\"forms.label.lastname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.lastname : '',\r\n placeholder: i18n.t(\"forms.placeholder.lastname\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n required: true\r\n }, \r\n show_lastname: {\r\n label: 'Mag getoond worden',\r\n value: 1,\r\n touched: false,\r\n valid: true\r\n }, \r\n email: {\r\n label: i18n.t(\"forms.label.email\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.email : '',\r\n placeholder: i18n.t(\"forms.placeholder.email\"),\r\n validationRules: {\r\n isRequired: true,\r\n isEmail: true\r\n },\r\n required: true\r\n },\r\n // profession: {\r\n // label: i18n.t(\"forms.label.profession\"),\r\n // value: '',\r\n // placeholder: i18n.t(\"forms.placeholder.profession\"),\r\n // valid: true\r\n // },\r\n show_profession: {\r\n label: 'Mag getoond worden',\r\n value: 0,\r\n touched: false,\r\n valid: true\r\n }, \r\n // website: {\r\n // label: i18n.t(\"forms.label.website\"),\r\n // value: '',\r\n // placeholder: i18n.t(\"forms.placeholder.website\"),\r\n // valid: true\r\n // },\r\n show_website: {\r\n label: 'Mag getoond worden',\r\n value: 0,\r\n touched: false,\r\n valid: true\r\n }, \r\n profile: {\r\n label: i18n.t(\"forms.label.profile\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.profile\", {maxlength: this.storeUi.settings_list[\"maxLengthProfile\"]}),\r\n valid: true\r\n },\r\n show_profile: {\r\n label: 'Mag getoond worden',\r\n value: 0,\r\n touched: false,\r\n valid: true\r\n },\r\n review_title: {\r\n label: i18n.t(\"forms.label.review_title\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.review_title\"),\r\n valid: true\r\n },\r\n review: {\r\n label: i18n.t(\"forms.label.review\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.review\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n required: true\r\n }\r\n },\r\n upload_file: {},\r\n error: false,\r\n str_profile: this.storeUi.settings_list[\"maxLengthProfile\"],\r\n str_review: 2000,\r\n maxLengthReview: 2000,\r\n has_reviews: false\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n //SbC:: check for previous reviews\r\n //let return_data = await this.storeUser.getReviewerData();\r\n //let reviewer_data = return_data[0];\r\n\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n let updatedFormElement = {};\r\n let formIsValid = true;\r\n \r\n Object.keys(this.state.formControls).map((key, i) => {\r\n updatedFormElement = {\r\n ...updatedControls[key]\r\n };\r\n updatedFormElement.value = this.state.formControls[key].value;\r\n\r\n // if (reviewer_data !== undefined && key === 'profession') {\r\n // updatedFormElement.value = reviewer_data.profession;\r\n // }\r\n // if (reviewer_data !== undefined && key === 'website') {\r\n // updatedFormElement.value = reviewer_data.website;\r\n // }\r\n // if (reviewer_data !== undefined && key === 'profile') {\r\n // updatedFormElement.value = reviewer_data.description;\r\n // }\r\n\r\n if (updatedFormElement.value !== null && updatedFormElement.value !== undefined) {\r\n updatedFormElement.valid = validate(updatedFormElement.value, updatedFormElement.validationRules);\r\n }\r\n updatedControls[key] = updatedFormElement;\r\n })\r\n\r\n //SbC:: check if form is valid\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls\r\n });\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUi.clearFormFeedback();\r\n }\r\n\r\n handleChange = (event) => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n if (name === 'profile') {\r\n this.calcRemaining('str_profile', value, this.storeUi.settings_list[\"maxLengthProfile\"]);\r\n }\r\n\r\n if (name === 'review') {\r\n this.calcRemaining('str_review', value, this.state.maxLengthReview);\r\n }\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid\r\n ? '--active'\r\n : '--disabled'\r\n })\r\n }\r\n\r\n calcRemaining(name, str, max) {\r\n const l = str.length;\r\n const remaining = max - str.length;\r\n this.setState({\r\n [name]: remaining\r\n })\r\n }\r\n\r\n handleCheckboxChange = (event, name) => {\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n value: parseInt(this.state.formControls[name].value) === 1 ? 0 : 1,\r\n selected: parseInt(this.state.formControls[name].value) === 1 ? 0 : 1\r\n }\r\n }\r\n \r\n });\r\n }\r\n\r\n setImageUpload = (file) => {\r\n this.setState({\r\n upload_file: file\r\n })\r\n }\r\n\r\n sendReviewForm = (e) => {\r\n e.preventDefault();\r\n let loggedin = this.storeUser.user_data.is_loggedin;\r\n let account_id = 0;\r\n\r\n if (this.storeUser.user_data.is_loggedin) {\r\n account_id = this.storeUser.user_data.user_id;\r\n } \r\n\r\n this.storeUi.addReview(this.props.book.sku, this.props.book.title, this.state.formControls, this.state.upload_file, loggedin, account_id);\r\n this.storeUi.sendFormReview(this.props.book.sku, this.props.book.title, this.state.formControls, this.state.upload_file, loggedin, account_id);\r\n }\r\n\r\n openDialogPreview = () => {\r\n this.storeUi.setContentComponent(\r\n <ContentPreview\r\n className = \"content-scrollable\"\r\n >\r\n <BlockReview \r\n view = 'preview'\r\n src = {this.state.formControls}\r\n img = {this.state.upload_file.base64}\r\n />\r\n </ContentPreview>\r\n )\r\n this.storeUi.openDialogContent();\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <TemplateForms\r\n type = 'recensie'\r\n msg_success = {i18n.t(\"form_feedback.success_review\")}\r\n >\r\n <div>\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__subtitle\">Titel van beoordeelde boek:</span>\r\n <h3 className=\"form__title\">{this.props.book.title}</h3>\r\n <span>\r\n Vul je review en je gegevens in en geef aan welke bij je review(s) getoond mogen worden.<br/>\r\n (je e-mailadres wordt sowieso niet getoond)\r\n </span>\r\n </div>\r\n\r\n <form className=\"form form--review\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {key !== 'review' && key !== 'profile' && (\r\n <div className=\"form-row form-row--input\" key={i}>\r\n <div className=\"form-column\">\r\n {key !== 'show_firstname' && \r\n key !== 'show_lastname' &&\r\n key !== 'show_profession' &&\r\n key !== 'show_website' &&\r\n key !== 'show_profile' &&\r\n <label className={\"form-label\" + (this.state.formControls[key].required ? ' --required' : '')}>{this.state.formControls[key].label}</label>\r\n }\r\n </div>\r\n <div className=\"form-column\">\r\n {(key === 'email' && this.storeUser.user_data.is_loggedin) &&\r\n <span className=\"form-column__input-non-editable\">{this.state.formControls[key].value}</span>\r\n }\r\n {(key !== 'email' || (key === 'email' && !this.storeUser.user_data.is_loggedin)) && (\r\n key !== 'show_firstname' && \r\n key !== 'show_lastname' &&\r\n key !== 'show_profession' &&\r\n key !== 'show_website' &&\r\n key !== 'show_profile'\r\n ) &&\r\n <TextInput \r\n name = {key} \r\n placeholder = {this.state.formControls[key].placeholder}\r\n value = {this.state.formControls[key].value}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls[key].valid}\r\n />\r\n }\r\n {(key === 'show_firstname' || \r\n key === 'show_lastname'\r\n ) &&\r\n <Checkbox \r\n name = {key} \r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n isSelected = {this.state.formControls[key].value}\r\n onCheckboxChange={(e) => this.handleCheckboxChange(e, key)}\r\n className = {\"--reduced\"}\r\n />\r\n }\r\n </div>\r\n </div>\r\n )}\r\n\r\n {key === 'profile' && (\r\n <div className=\"form-row form-row--input\">\r\n <div className=\"form-column\">\r\n <label className={\"form-label\" + (this.state.formControls.profile.required ? ' --required' : '')}>{this.state.formControls['profile'].label}</label>\r\n </div>\r\n <div className=\"form-column\">\r\n <TextArea \r\n name = \"profile\"\r\n maxLength = {this.storeUi.settings_list[\"maxLengthProfile\"]}\r\n placeholder = {this.state.formControls.profile.placeholder}\r\n value = {this.state.formControls.profile.value}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls.profile.valid}\r\n />\r\n <div className=\"form-column--feedback\">\r\n <span>nog {this.state.str_profile} karakters over</span>\r\n </div>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {/* \r\n <div className=\"form-row form-row--input\">\r\n <div className=\"form-column\">\r\n <span>Pasfoto</span>\r\n </div>\r\n <div className=\"form-column\">\r\n <BlockImageUpload \r\n setImageUpload = {this.setImageUpload}\r\n />\r\n </div>\r\n </div>\r\n */}\r\n\r\n </React.Fragment>\r\n ))}\r\n\r\n <div className=\"form-row form-row--input\">\r\n <div className=\"form-column\">\r\n <label className={\"form-label\" + (this.state.formControls.review.required ? ' --required' : '')}>{this.state.formControls['review'].label}</label>\r\n </div>\r\n <div className=\"form-column\">\r\n <TextArea \r\n name=\"review\"\r\n maxLength = {this.state.maxLengthReview}\r\n placeholder = {this.state.formControls.review.placeholder}\r\n value = {this.state.formControls.review.value}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls.review.valid}\r\n />\r\n <div className=\"form-column--feedback\">\r\n <span>nog {this.state.str_review} karakters over</span>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n {this.state.btn_class !== '--active' &&\r\n <FormTextIncomplete />\r\n }\r\n </form>\r\n\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--secundary \" + this.state.btn_class} onClick={(e) => this.openDialogPreview(e)}>{i18n.t(\"button.preview\")}</button>\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.sendReviewForm(e)}>{i18n.t(\"button.submit\")}</button>\r\n </div>\r\n </div>\r\n </TemplateForms>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormReview);\r\n","import React, { Component } from 'react';\r\nimport i18n from \"i18next\";\r\n\r\nclass FormTextConditional extends Component {\r\n render() {\r\n return (\r\n <div className=\"form-row form-row--help\">\r\n <span className=\"form-row--help__text\">{i18n.t(\"form_suggestions.conditional\")}</span>\r\n </div>\r\n )\r\n }\r\n}\r\n\r\nexport default FormTextConditional;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport FormReview from '../forms/form-review';\r\nimport BlockReview from './block-review';\r\nimport FormTextConditional from '../../elements/form-text-conditional';\r\n\r\nconst BlockReviews = inject(\"stores\") (\r\n observer (\r\n class BlockReviews extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n async componentDidMount() {\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"segment__content book__reviews\">\r\n <div className=\"content-segment\">\r\n {this.storeBooks.reviewsList && this.storeBooks.reviewsList.length !== 0 &&\r\n this.storeBooks.reviewsList.map(review => (\r\n <BlockReview\r\n view = 'review'\r\n review = {review} \r\n />\r\n ))\r\n }\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n {this.storeBooks.reviewsList && this.storeBooks.reviewsList.length !== 0 &&\r\n <div className=\"content-segment__header\">\r\n <h3>Stuur een recensie op</h3>\r\n </div>\r\n }\r\n <FormTextConditional />\r\n </div>\r\n\r\n <div className=\"content-wrapper__segment\">\r\n <FormReview \r\n book = {this.props.book}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockReviews);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport moment from \"moment\";\r\n\r\nimport BookLang from '../../elements/book-lang';\r\n\r\nconst BookDimensions = inject(\"stores\") (\r\n observer (\r\n class BookDimensions extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = ({\r\n width: 0,\r\n length: 0,\r\n thickness: 0\r\n })\r\n }\r\n\r\n componentDidMount = () => {\r\n this.setSizes();\r\n }\r\n\r\n setSizes = () => {\r\n const width = this.props.book.width \r\n ? this.props.book.width \r\n : 0;\r\n const length = this.props.book.length \r\n ? this.props.book.length\r\n : 0;\r\n const thickness = this.props.book.thickness \r\n ? this.props.book.thickness \r\n : 0;\r\n\r\n this.setState({\r\n width: width,\r\n length: length,\r\n thickness: thickness\r\n }, () => {\r\n this.setTitle()\r\n this.setDimensions()}\r\n )\r\n }\r\n\r\n setTitle = () => {\r\n let title = 'Afmetingen';\r\n\r\n if (this.state.width !== 0 || this.state.length !== 0 || this.state.thickness !== 0) {\r\n title = title + ' in mm (';\r\n if (this.state.width !== 0) {\r\n title = title + 'b';\r\n }\r\n if ((this.state.length !== 0 || this.state.thickness !== 0) && this.state.width !== 0) {\r\n title = title + ' x ';\r\n }\r\n if (this.state.length !== 0) {\r\n title = title + 'l';\r\n }\r\n if (this.state.length !== 0 && this.state.thickness !== 0) {\r\n title = title + ' x ';\r\n }\r\n if (this.state.thickness !== 0) {\r\n title = title + 'd';\r\n }\r\n\r\n };\r\n\r\n if (this.state.width !== 0 || this.state.length !== 0 || this.state.thickness !== 0) {\r\n title = title + ')';\r\n };\r\n\r\n this.setState({\r\n title: title\r\n })\r\n }\r\n\r\n setDimensions = () => {\r\n let dimensions = '-';\r\n\r\n if (this.state.width !== 0 || this.state.length !== 0 || this.state.thickness !== 0) {\r\n if (this.state.width !== 0) {\r\n dimensions = this.state.width;\r\n }\r\n if ((this.state.length !== 0 || this.state.thickness !== 0) && this.state.width !== 0) {\r\n dimensions = dimensions + ' x ';\r\n } else {\r\n if (this.state.width === 0) {\r\n dimensions = '';\r\n }\r\n }\r\n if (this.state.length !== 0) {\r\n dimensions = dimensions + this.state.length;\r\n }\r\n if (this.state.length !== 0 && this.state.thickness !== 0) {\r\n dimensions = dimensions + ' x ';\r\n }\r\n if (this.state.thickness !== 0) {\r\n dimensions = dimensions + this.state.thickness;\r\n }\r\n };\r\n\r\n this.setState({\r\n dimensions: dimensions\r\n })\r\n }\r\n \r\n render() {\r\n return (\r\n <React.Fragment>\r\n <dt>{this.state.title}</dt>\r\n <dd>{this.state.dimensions}</dd>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst BlockSpecifications = inject(\"stores\") (\r\n observer (\r\n class BlockSpecifications extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"segment__content book__specs\">\r\n <div className=\"book-specs__wrapper\">\r\n <div className=\"book-specs__column\">\r\n <dl>\r\n <dt>Auteur</dt>\r\n <dd>{this.props.book.author_firstname && (this.props.book.author_firstname + ' ')} {this.props.book.author_lastname ? this.props.book.author_lastname : '-'}</dd>\r\n\r\n {this.props.book.release_date &&\r\n <React.Fragment> \r\n <dt>Oorspronkelijke verschijningsdatum</dt>\r\n <dd>{this.props.book.release_date && this.props.book.release_date.date ? moment(this.props.book.release_date.date).format(\"DD MMMM YYYY\") : '-'}</dd>\r\n </React.Fragment> \r\n }\r\n\r\n <dt>ISBN</dt>\r\n <dd>{this.props.book.sku ? this.props.book.sku : '-'}</dd>\r\n\r\n <dt>Aantal pagina's</dt>\r\n <dd>{this.props.book.pages ? this.props.book.pages : '-'}</dd>\r\n </dl>\r\n </div>\r\n <div className=\"book-specs__column\">\r\n <dl>\r\n <dt>Taal</dt>\r\n <dd><BookLang\r\n book = {this.props.book}\r\n />\r\n </dd>\r\n\r\n <dt>Uitvoering</dt>\r\n <dd>{this.props.book.version ? this.props.book.version : '-'}</dd>\r\n\r\n <BookDimensions\r\n book = {this.props.book}\r\n />\r\n\r\n <dt>Gewicht in gr</dt>\r\n <dd>{this.props.book.weight ? this.props.book.weight : '-'}</dd>\r\n </dl>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockSpecifications);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport queryString from 'query-string';\r\nimport MetaTags from 'react-meta-tags';\r\nimport { Redirect } from 'react-router';\r\nimport moment from \"moment\";\r\n\r\nimport * as ui from '../utilities/ui';\r\nimport * as content from '../utilities/content';\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlockBook from '../components/block/block-book';\r\nimport BlockBookCategories from '../components/block/block-book-categories';\r\nimport BlockBookTags from '../components/block/block-book-tags';\r\nimport BlockBookTools from '../components/block/block-book-tools';\r\nimport BlockDownloads from '../components/block/block-downloads';\r\nimport BlockQuote from '../components/block/block-quote';\r\nimport BlocksRecentlyViewed from '../components/blocks/blocks-recently-viewed';\r\nimport BlockReviews from '../components/block/block-reviews';\r\nimport BlockSpecifications from '../components/block/block-specifications';\r\n\r\nconst BookTab = inject(\"stores\") (\r\n observer (\r\n class BookTab extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n view: this.props.view\r\n }\r\n\r\n this.downloadsRef = React.createRef();\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount = async() => {\r\n\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.gotoDownloads !== this.props.gotoDownloads) {\r\n ui.smoothScrollTo(0, this.downloadsRef.offsetTop - 80, 500)\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n\r\n }\r\n\r\n renderView(view, book) {\r\n switch(view) {\r\n case \"description\":\r\n default:\r\n return (\r\n <div className=\"segment__content book__description\">\r\n {book.description !== '0' &&\r\n <p \r\n dangerouslySetInnerHTML={{ __html: book.description }}\r\n />\r\n }\r\n\r\n {book.description === '0' &&\r\n <p>Er is geen beschrijving aanwezig</p>\r\n }\r\n\r\n <div\r\n ref={ (ref) => this.downloadsRef=ref}\r\n >\r\n <BlockDownloads \r\n sku = {book.sku}\r\n />\r\n </div>\r\n </div>\r\n )\r\n case \"reviews\":\r\n return (\r\n <BlockReviews \r\n book = {book}\r\n sku = {book.sku}\r\n />\r\n ) \r\n case \"specifications\":\r\n return (\r\n <BlockSpecifications\r\n book = {book}\r\n />\r\n )\r\n }\r\n }\r\n \r\n\r\n render() {\r\n const book = this.props.book;\r\n\r\n return (\r\n this.renderView(this.props.view, book)\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst Li = inject(\"stores\") (\r\n observer (\r\n class Li extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n active_view: this.props.active_view\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.active_view !== this.props.active_view) {\r\n this.setState({\r\n active_view: this.props.active_view\r\n })\r\n }\r\n }\r\n \r\n render() {\r\n const activeClass = ((this.props.view === this.state.active_view) || (this.props.view == 'description' && this.state.active_view == undefined)) ? ' --active' : '';\r\n\r\n return (\r\n <li className={\"content-tabs__listitem content-tabs__listitem--\" + this.props.view + activeClass} onClick={(e) => this.props.handleContentTab(e, this.props.view)}>\r\n {this.props.view === 'reviews' && this.props.nr === 0\r\n ? <span>{i18n.t(\"tabs.no_reviews\")}</span>\r\n : <React.Fragment>\r\n <span>{i18n.t(\"tabs.\" + this.props.view)}</span> \r\n {this.props.view === 'reviews' && (\r\n <span className=\"content-tabs__listitem--count\">({this.props.nr})</span>\r\n )}\r\n </React.Fragment>\r\n }\r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst Book = inject(\"stores\") (\r\n observer (\r\n class Book extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPP = process.env.REACT_APP_URL;\r\n this.state = {\r\n view: 'description',\r\n scroll: true,\r\n redirect: false,\r\n redirectSku: '',\r\n searching: false,\r\n gotoDownloads: false\r\n }\r\n\r\n this.blockRef = React.createRef();\r\n this.formRef = React.createRef();\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeHistory = this.props.stores.storeHistory;\r\n }\r\n\r\n componentDidMount = async() => {\r\n const quote = this.storeUi.getQuote();\r\n\r\n this.setState({\r\n searching: true,\r\n quote: quote\r\n })\r\n\r\n const shop = await this.storeUi.checkShopForSku(this.props.match.params.sku);\r\n \r\n const redirectSku = await this.checkRedirectISBN(this.props.match.params.sku);\r\n if (redirectSku !== null && redirectSku !== '') { \r\n this.redirectISBN(redirectSku);\r\n } else {\r\n this.setAffiliate(this.props.location.search);\r\n this.storeUi.setCurrentBook(this.props.match.params.sku);\r\n }\r\n\r\n if (this.storeBooks.bookList_top60.length == 0) {\r\n (async() => await this.storeBooks.getBooksTop60() )();\r\n }\r\n\r\n const book = await this.storeBooks.getBookBySku(this.props.match.params.sku, shop);\r\n\r\n if (shop === 'SHOP_ALL') {\r\n this.storeGeneral.setShop(\"SHOP_ALL\");\r\n this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n this.storeUi.setActiveToggleNav(2);\r\n } else {\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n this.storeUi.setActiveToggleNav(1);\r\n }\r\n\r\n let reviews = await this.storeBooks.getReviews(this.props.match.params.sku);\r\n\r\n if ( this.props.match.params.tab !== undefined) {\r\n this.setState({\r\n book: book,\r\n view: 'description'\r\n }, () => this.setCategory());\r\n } else {\r\n this.setState({\r\n book: book,\r\n view: \"description\",\r\n searching: false\r\n }, () => this.setCategory());\r\n }\r\n\r\n //SbC for SEO\r\n //SbC TODO add query string\r\n const id = content.formatTitle(book && book.title);\r\n const url = \"/book/\" + this.props.match.params.sku + \"/\" + id;\r\n //const url = \"/book/\" + this.props.match.params.sku;\r\n this.props.history.replace(url);\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n // if (this.props.match.params.tab !== 'description' && this.props.match.params.tab !== 'reviews' && this.props.match.params.tab !== 'specifications') {\r\n // //ui.handleScroll('top');\r\n // }\r\n\r\n if (prevProps.match.params.sku !== this.props.match.params.sku) {\r\n const quote = this.storeUi.getQuote();\r\n\r\n let shop = await this.storeUi.checkShopForSku(this.props.match.params.sku);\r\n //this.storeGeneral.setShop(shop);\r\n //this.storeGeneral.setActiveShop(shop);\r\n\r\n const redirectSku = await this.checkRedirectISBN(this.props.match.params.sku); \r\n \r\n if (redirectSku !== null && redirectSku !== '') {\r\n this.redirectISBN(redirectSku);\r\n } else {\r\n this.setState({\r\n view: 'description',\r\n redirect: false,\r\n searching: true,\r\n quote: quote\r\n })\r\n }\r\n\r\n let reviews = await this.storeBooks.getReviews(this.props.match.params.sku);\r\n\r\n const book = await this.storeBooks.getBookBySku(this.props.match.params.sku, shop);\r\n\r\n if (shop === 'SHOP_ALL') {\r\n // this.storeGeneral.setShop(\"SHOP_ALL\");\r\n // this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n this.storeUi.setActiveToggleNav(2);\r\n } else {\r\n // this.storeGeneral.setShop(\"SHOP_SB\");\r\n // this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n if (book.sb_edition === 'eigen uitgaven') {\r\n this.storeUi.setActiveToggleNav(1);\r\n } else {\r\n this.storeUi.setActiveToggleNav(2);\r\n }\r\n }\r\n\r\n this.setState({\r\n view: 'description',\r\n book: book,\r\n searching: false\r\n }, () => this.setCategory());\r\n\r\n const id = (this.storeAuth.user.is_loggedin) ? this.storeAuth.user.user_id : 0;\r\n this.storeHistory.addToRecentlyViewed(prevProps.match.params.sku, id);\r\n\r\n let url = this.props.match.params.sku + \"/\" + book.title;\r\n this.props.history.push(url);\r\n \r\n //this.handleScroll();\r\n }\r\n\r\n // if (prevProps.match.params.tab !== this.props.match.params.tab) { \r\n // this.setState({\r\n // view: (this.props.match.params.tab === 'description' || this.props.match.params.tab === 'reviews' || this.props.match.params.tab === 'specifications') ? this.props.match.params.tab : 'description',\r\n // searching: false\r\n // });\r\n // } \r\n }\r\n\r\n componentWillUnmount = () => {\r\n const id = (this.storeAuth.user.is_loggedin) ? this.storeAuth.user.user_id : 0;\r\n this.storeHistory.addToRecentlyViewed(this.props.match.params.sku, id);\r\n }\r\n\r\n handleScroll = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n setAffiliate(searchString) {\r\n const params = queryString.parse(searchString)\r\n \r\n if (params.pc) {\r\n let pc = params.pc.trim();\r\n this.storeOrder.setAffiliateId(pc);\r\n }\r\n }\r\n\r\n checkRedirectISBN = async(sku) => {\r\n let redirectSku = '';\r\n const book = await this.storeBooks.getBookBySku(sku);\r\n if (book && book.alternative !== null && book.alternative !== undefined) {\r\n redirectSku = book.alternative;\r\n }\r\n return redirectSku;\r\n };\r\n\r\n redirectISBN = async(sku) => {\r\n const redirectedBook = await this.storeBooks.getBookDetailsBySku(sku);\r\n\r\n this.setState({\r\n redirect: true,\r\n redirectSku: sku\r\n });\r\n };\r\n\r\n handleContentTab = (e, view) => {\r\n ui.smoothScrollTo(0, this.blockRef.offsetTop - 80, 500)\r\n let tab = \"/book/\" + this.props.match.params.sku + \"/\" + view;\r\n if (view !== 'description' && view !== 'reviews' && view !== 'specifications') {\r\n this.props.history.push(tab);\r\n }\r\n this.setState({\r\n view: view\r\n })\r\n }\r\n\r\n // handleOnClickCat = (e, cat_name) => {\r\n // this.storeUi.setActiveCategory(cat_name);\r\n // let url = \"/category/\" + cat_name;\r\n // this.props.history.push(url);\r\n // }\r\n\r\n // handleOnClickAuthor = (e, firstname, lastname) => {\r\n // const author = this.storeBooks.authorsList\r\n // .filter(author => author.firstname == firstname && author.lastname == lastname)\r\n\r\n // if (author.length > 0) {\r\n // const author_id = author[0].id;\r\n // this.storeUi.setCurrentAuthor(author_id);\r\n // this.storeBooks.getBooksForAuthor(this.storeUi.page_view, author_id);\r\n\r\n // const url = \"/author/\" + author_id; \r\n // this.props.history.push(url);\r\n // }\r\n // }\r\n\r\n handleOnClickMore = (e) => {\r\n //ui.smoothScrollTo(0, this.blockRef.offsetTop - 80, 500);\r\n this.handleContentTab(e, 'description')\r\n }\r\n\r\n handleViewTab = (e, tab) => {\r\n //ui.smoothScrollTo(0, this.blockRef.offsetTop - 80, 500);\r\n this.handleContentTab(e, tab)\r\n }\r\n\r\n handleViewDownloads = (e) => {\r\n //this.handleContentTab(e, tab);\r\n\r\n //ui.smoothScrollTo(0, this.blockRef.offsetTop - 80, 500)\r\n // let tab = \"/book/\" + this.props.match.params.sku + \"/\" + view;\r\n // if (view !== 'description' && view !== 'reviews' && view !== 'specifications') {\r\n // this.props.history.push(tab);\r\n // }\r\n const view = 'description';\r\n\r\n this.setState({\r\n view: view,\r\n gotoDownloads: true\r\n })\r\n }\r\n\r\n setCategory = async() => {\r\n let idx;\r\n let categories = [];\r\n\r\n if (this.storeGeneral.shop === 'SHOP_SB') {\r\n if (this.state.book) {\r\n if (this.storeBooks.categoriesListSB.length === 0) {\r\n categories = await this.storeBooks.returnCategories(this.storeGeneral.shop);\r\n } else {\r\n categories = this.storeBooks.categoriesListSB;\r\n }\r\n idx = categories\r\n .findIndex((item) => item.name === this.state.book.category); \r\n }\r\n \r\n if (idx !== undefined && idx !== -1) {\r\n const cat_name = categories[idx].name;\r\n this.storeUi.setActiveCategory(cat_name);\r\n }\r\n } else {\r\n if (this.state.book) { \r\n categories = await this.storeBooks.getBookCategories(this.state.book.sku);\r\n if (categories) {\r\n idx = categories\r\n .findIndex((item) => item.is_main_cat === 1); \r\n }\r\n }\r\n\r\n if (idx !== undefined && idx !== -1) {\r\n let cat_name = categories[idx].category;\r\n this.storeUi.setActiveCategory(cat_name);\r\n }\r\n }\r\n }\r\n \r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/book/\" + this.state.redirectSku} \r\n />;\r\n }\r\n\r\n //SbC not quite sure if this needed still\r\n //const book = this.storeBooks.current_book;\r\n \r\n let reviewsList = this.storeBooks.reviewsList;\r\n let nrReviews = 0;\r\n if (reviewsList && reviewsList.length > 0) {\r\n nrReviews = reviewsList.length;\r\n }\r\n \r\n return (\r\n <Template\r\n type = 'default'\r\n reset = {false}\r\n sticky = {true}\r\n > \r\n <React.Fragment>\r\n {this.state.searching &&\r\n <div>\r\n {/* De gegevns van het boek worden opgehaald */}\r\n </div>\r\n }\r\n\r\n {!this.state.searching && !this.state.book &&\r\n <div>\r\n Dit boek is nog niet in onze database opgenomen\r\n </div>\r\n }\r\n \r\n {this.state.book &&\r\n <MetaTags>\r\n <title \r\n dangerouslySetInnerHTML={{ __html: this.state.book.title}} \r\n />\r\n <meta \r\n name=\"title\" \r\n content={this.state.book.title} \r\n />\r\n <meta \r\n name=\"description\" \r\n content={this.state.book.short_description} \r\n />\r\n <meta \r\n property=\"og:title\" \r\n content={this.state.book.title + ' | ' + this.state.book.sku} \r\n />\r\n <meta \r\n property=\"og:description\" \r\n content={this.state.book.title + ' | ' + this.state.book.sku} \r\n />\r\n <meta \r\n property=\"og:image\" \r\n content=\"https://www.succesboeken.nl/api/public/images/branding/sb_logo-img.png\" \r\n />\r\n <link \r\n rel=\"canonical\" \r\n href={this.urlAPP + \"/book/\" + this.state.book.sku + '/' + this.state.book.title} \r\n />\r\n </MetaTags>\r\n }\r\n\r\n {this.storeGeneral.shop !== 'SHOP_ALL' &&\r\n <BlockQuote \r\n quote = {this.state.quote}\r\n />\r\n }\r\n\r\n {this.state.book &&\r\n <div className=\"book-wrapper book\">\r\n <div className=\"block--book\">\r\n <BlockBook \r\n type = \"productpage\"\r\n book = {this.state.book}\r\n sku = {this.state.book.sku}\r\n hasAlternative = {this.state.book.alternative !== null ? true : false}\r\n onClickMore = {this.handleOnClickMore}\r\n viewTab = {this.handleViewTab}\r\n />\r\n </div>\r\n \r\n {this.state.book.alternative === null &&\r\n <BlockBookTools \r\n book = {this.state.book}\r\n viewDownloads = {this.handleViewDownloads}\r\n />\r\n }\r\n\r\n <div className=\"content-wrapper__segment\">\r\n {(this.state.book.sku) &&\r\n <React.Fragment>\r\n <BlockBookCategories \r\n sku = {this.state.book.sku}\r\n />\r\n <BlockBookTags \r\n sku = {this.state.book.sku}\r\n />\r\n </React.Fragment>\r\n }\r\n </div>\r\n\r\n <div className=\"content-wrapper__segment\" ref={ (ref) => this.blockRef=ref }>\r\n <div className=\"segment__content\">\r\n <div className=\"book__tabs\">\r\n <ul className=\"content-tabs__list\">\r\n <Li \r\n view = 'description'\r\n active_view = {this.state.view}\r\n handleContentTab = {(e) => this.handleContentTab(e, 'description')}\r\n />\r\n <Li \r\n view = 'reviews'\r\n active_view = {this.state.view}\r\n nr = {nrReviews}\r\n handleContentTab = {(e) => this.handleContentTab(e, 'reviews')}\r\n />\r\n <Li \r\n view = 'specifications'\r\n active_view = {this.state.view}\r\n handleContentTab = {(e) => this.handleContentTab(e, 'specifications')}\r\n />\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n <div className=\"content-wrapper__segment\">\r\n <BookTab\r\n view = {this.state.view}\r\n book = {this.state.book}\r\n gotoDownloads = {this.state.gotoDownloads}\r\n />\r\n </div> \r\n\r\n <div className=\"content-wrapper__segment\">\r\n <BlocksRecentlyViewed />\r\n </div> \r\n </div>\r\n }\r\n </React.Fragment>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(Book);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlocksBooks from '../components/blocks/blocks-books';\r\n\r\nconst BooksNew = inject(\"stores\") (\r\n observer (\r\n class BooksNew extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n view: ''\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n window.scrollTo(0, 0);\r\n\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveCategory('');\r\n \r\n const view = this.props.match.params.view;\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL') && (view === 'week' || view === 'month')) {\r\n this.storeGeneral.setActiveShop('SHOP_ALL');\r\n this.resetView(view);\r\n } else {\r\n this.storeGeneral.setActiveShop('SHOP_SB');\r\n this.resetView('sb');\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (prevProps.match.params.view !== this.props.match.params.view) {\r\n const view = this.props.match.params.view;\r\n this.resetView(view);\r\n }\r\n\r\n this.storeUi.setFreezeScrolling(false);\r\n }\r\n\r\n componentWillUnmount = () => {\r\n const position = window.pageYOffset;\r\n this.storeUi.setFreezePos(position);\r\n }\r\n \r\n resetView = async(view) => {\r\n let books;\r\n let count;\r\n\r\n switch (view) {\r\n case 'month':\r\n this.storeGeneral.setShop('SHOP_ALL');\r\n this.storeUi.setActiveToggleNav(2);\r\n this.storeUi.setActiveMainNav(3);\r\n break;\r\n case 'week':\r\n this.storeGeneral.setShop('SHOP_ALL');\r\n this.storeUi.setActiveToggleNav(2);\r\n this.storeUi.setActiveMainNav(4);\r\n break;\r\n default:\r\n this.storeGeneral.setShop('SHOP_SB');\r\n this.storeUi.setActiveToggleNav(1);\r\n this.storeUi.setActiveMainNav(1);\r\n }\r\n\r\n count = await this.storeUi.getBookCountForBooksNew(view, this.storeUi.page_view);\r\n this.storeUi.setPageView('total', count)\r\n \r\n books = await this.storeBooks.getBooksNew(view, this.storeUi.page_view);\r\n\r\n this.setState({\r\n view: view,\r\n count: count\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = {\"books_new_\" + this.state.view}\r\n expanded = {[\"categories\", \"products\"]}\r\n nav_name = {\"books_new\"}\r\n useScroll = {true}\r\n > \r\n <div className=\"content-segment-clean\">\r\n <p>{i18n.t(\"page_subheaders.search_results_count\")}: {this.state.count ? this.state.count : 0}</p>\r\n </div>\r\n\r\n {((this.state.view !== 'week' && this.state.view !== 'month') || (!this.storeUi.checkFeature('SHOP_ALL'))) && \r\n <React.Fragment>\r\n <div className=\"content-segment\">\r\n <p>{i18n.t(\"page_intros.books_new\")}</p>\r\n </div>\r\n <div className=\"content-segment\">\r\n <BlocksBooks \r\n type = \"new\"\r\n page = \"new\"\r\n />\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n {this.storeUi.checkFeature('SHOP_ALL') && (this.state.view === 'week' || this.state.view === 'month') &&\r\n <div className=\"content-segment\">\r\n <BlocksBooks \r\n type = \"new\"\r\n page = \"new\"\r\n />\r\n </div>\r\n }\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BooksNew);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlocksTop60 from '../components/blocks/blocks-top60';\r\n\r\nconst BooksTop60 = inject(\"stores\") (\r\n observer (\r\n class BooksTop60 extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.storeUi.setActiveMainNav(3);\r\n }\r\n\r\n async componentDidMount() {\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setActiveCategory('');\r\n\r\n window.scrollTo(0, 0);\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = {\"books_top60\"}\r\n expanded = {[\"categories\", \"products\"]}\r\n nav_name = {\"books_top60\"}\r\n > \r\n <div className=\"content-segment\">\r\n <p>{i18n.t(\"page_intros.books_top60\")}</p>\r\n </div>\r\n <div className=\"content-segment\">\r\n <BlocksTop60 \r\n type = \"top60\"\r\n page = \"top60\"\r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BooksTop60);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport i18n from \"i18next\";\r\nimport queryString from 'query-string';\r\n\r\nimport * as ui from '../utilities/ui';\r\nimport Template from '../templates/template';\r\n\r\nimport BlocksBooks from '../components/blocks/blocks-books';\r\nimport BlocksTop10 from '../components/blocks/blocks-top10';\r\nimport BlockQuote from '../components/block/block-quote';\r\n\r\nconst Category = inject(\"stores\") (\r\n observer (\r\n class Category extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n category_name: null,\r\n cats_main: []\r\n }\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeSearch = this.props.stores.storeSearch;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeBooksAll = this.props.stores.storeBooksAll;\r\n this.storeCatalogs = this.props.stores.storeCatalogs;\r\n }\r\n\r\n componentDidMount = async() => {\r\n \tlet url = this.props.location.pathname;\r\n let splitUrl = url.split('/');\r\n let return_data;\r\n let mainCategory;\r\n\r\n // if (this.storeUi.freezeScrolling) {\r\n // ui.smoothScrollTo(0, this.storeUi.scrollPos, 500); \r\n // } else {\r\n // ui.smoothScrollTo(0, 0, 500); \r\n // }\r\n if (this.storeSearch.getSearchViewPos() !== 0) {\r\n\r\n console.log('SbC page back', this.storeUi.page_view.page, this.storeSearch.getSearchViewPage())\r\n // console.log('SbC pos 2', this.storeSearch.getSearchViewPos())\r\n this.storeUi.setPageView('page', this.storeSearch.getSearchViewPage());\r\n // ui.handleScroll(this.storeSearch.getSearchViewPos());\r\n } else {\r\n ui.smoothScrollTo(0, 0, 500); \r\n }\r\n\r\n if (this.props.category == 'category') {\r\n const cat_name = this.props.match.params.name;\r\n\r\n return_data = await this.storeUi.checkShopForCategory(this.props.match.params.name);\r\n this.storeGeneral.setActiveShop(return_data.shop);\r\n\r\n if (return_data.shop !== 'SHOP_SB') {\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n return_data = await this.storeUi.checkShopForCategory(cat_name);\r\n \r\n if (return_data !== undefined) {\r\n this.storeGeneral.setShop(return_data.shop);\r\n }\r\n }\r\n }\r\n\r\n if (cat_name !== this.storeUi.app_interface.active_category_name) {\r\n if (return_data !== undefined && return_data['shop'] === 'SHOP_ALL') {\r\n this.storeUi.setActiveCategory(return_data['category']);\r\n this.storeUi.setActiveCategoryDisplayValue(return_data['display_value']);\r\n } else {\r\n this.storeUi.setActiveCategory(cat_name); \r\n }\r\n } else {\r\n this.storeUi.setActiveCategory(cat_name);\r\n }\r\n const cat_details = await this.storeBooksAll.getCategoryDetails(cat_name);\r\n if (cat_details !== undefined) {\r\n this.storeUi.setActiveCategoryDisplayValue(cat_details.display_value);\r\n }\r\n\r\n //this.storeUi.getBookCountForCategory(cat_name);\r\n this.storeBooks.getBooksForCategory(cat_name, this.storeUi.page_view);\r\n this.storeUi.setActiveSubCategory('');\r\n\r\n ui.handleScroll(this.storeSearch.getSearchViewPos());\r\n }\r\n\r\n if (this.props.category == 'subcategory') {\r\n const subcat_name = this.props.match.params.name;\r\n \r\n return_data = await this.storeUi.checkShopForSubCategory(subcat_name);\r\n this.storeGeneral.setActiveShop(return_data.shop);\r\n\r\n const mainCat = await this.storeUi.getMainCategory(return_data.shop, parseInt(return_data.main_cat));\r\n const subCat = return_data.subcategory;\r\n ///const count = await this.storeUi.getBookCountForSubCategory(mainCat.category, subCat);\r\n // this.storeCatalogs.setActiveCount(50);\r\n\r\n if (this.storeGeneral.shop !== 'SHOP_SB') {\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n return_data = await this.storeUi.checkShopForSubCategory(subcat_name);\r\n if (return_data !== undefined) {\r\n this.storeGeneral.setShop(return_data['shop']);\r\n this.storeUi.setActiveSubCategory(return_data.subcategory);\r\n this.setState({\r\n subcategory_name: return_data.subcategory\r\n }) \r\n } else {\r\n this.storeGeneral.setShop('SHOP_SB');\r\n this.storeUi.setActiveSubCategory(subcat_name);\r\n }\r\n } else {\r\n this.storeGeneral.setShop('SHOP_SB');\r\n \r\n //let cat_main = await this.storeUi.getMainCategory('SHOP_SB', subcat_name);\r\n\r\n // if (cat_main.length === 1) {\r\n // this.storeUi.setActiveCategory(cat_main[0].category);\r\n // this.storeUi.setActiveSubCategory(subcat_name);\r\n // } else {\r\n // this.storeUi.setActiveCategory('');\r\n // }\r\n\r\n // this.setState({\r\n // subcategory_name: subcat_name,\r\n // cats_main: cat_main\r\n // })\r\n }\r\n } \r\n\r\n //SbC if reloaded or direct url\r\n if (this.storeBooks.bookList_subcat.length == 0) {\r\n return_data = await this.storeUi.checkShopForSubCategory(this.props.match.params.name);\r\n this.storeGeneral.setShop(return_data.shop);\r\n const cat_id = parseInt(return_data.main_cat);\r\n const cat_main = await this.storeUi.getMainCategory('SHOP_ALL', cat_id);\r\n mainCategory = cat_main.category;\r\n await this.storeBooks.getBooksForSubCategory(mainCategory, subcat_name, this.storeUi.page_view, 1);\r\n this.storeUi.setActiveCategory(mainCategory);\r\n }\r\n //SbC end\r\n\r\n if (this.storeGeneral.shop === 'SHOP_SB') {\r\n let cat_main = await this.storeUi.getMainCategory('SHOP_SB', subcat_name);\r\n\r\n if (cat_main.length >= 1) {\r\n mainCategory = cat_main[0].category;\r\n\r\n this.storeUi.setActiveCategory(cat_main[0].category);\r\n this.storeUi.setActiveCategoryDisplayValue(cat_main[0].display_value);\r\n this.storeUi.setActiveSubCategory(subcat_name);\r\n\r\n await this.storeBooks.getBooksForSubCategory(mainCategory, subcat_name, this.storeUi.page_view, 1);\r\n } else {\r\n this.storeUi.setActiveCategory('');\r\n }\r\n\r\n this.setState({\r\n subcategory_name: subcat_name,\r\n cats_main: cat_main,\r\n cats_length: cat_main.length\r\n })\r\n }\r\n } \r\n }\r\n\r\n componentDidUpdate = async () => {\r\n let cat_name;\r\n let cat_id;\r\n let cat_main;\r\n let return_data; \r\n\r\n if (this.props.category == 'category') {\r\n cat_name = this.props.match.params.name;\r\n \r\n // if (this.storeGeneral.shop !== 'SHOP_SB') {\r\n // if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n // return_data = await this.storeUi.checkShopForCategory(cat_name);\r\n // if (return_data !== undefined) {\r\n // this.storeGeneral.setShop(return_data['shop']);\r\n // }\r\n // }\r\n // }\r\n \r\n //this.storeUi.getBookCountForCategory(cat_name);\r\n\r\n const cat_details = await this.storeBooksAll.getCategoryDetails(cat_name);\r\n if (cat_details !== undefined) {\r\n this.storeUi.setActiveCategory(cat_details.name);\r\n this.storeUi.setActiveCategoryDisplayValue(cat_details.display_value);\r\n }\r\n }\r\n\r\n if (this.props.category == 'subcategory') {\r\n let subcat_name = this.props.match.params.name;\r\n return_data = await this.storeUi.checkShopForSubCategory(this.props.match.params.name);\r\n // if (return_data !== undefined ) {\r\n // this.storeGeneral.setShop(return_data.shop);\r\n // }\r\n\r\n if (this.storeGeneral.shop !== 'SHOP_SB') {\r\n //SbC causes unnessary reloading in Toplist10 loading from database and subsequent false loading of connecting NUR\r\n\r\n // if (this.storeUi.checkFeature('SHOP_ALL')) { \r\n // return_data = await this.storeUi.checkShopForSubCategory(this.props.match.params.name);\r\n\r\n // if (return_data !== undefined) {\r\n // subcat_name = return_data.subcategory;\r\n // this.storeUi.setActiveSubCategory(subcat_name);\r\n // this.storeGeneral.setShop(return_data['shop']);\r\n // }\r\n // }\r\n }\r\n\r\n if (this.storeGeneral.shop === 'SHOP_ALL') {\r\n // if (return_data === undefined) {\r\n // return_data = await this.storeUi.checkShopForSubCategory(this.props.match.params.name);\r\n // }\r\n cat_id = parseInt(return_data.main_cat);\r\n cat_main = await this.storeUi.getMainCategory('SHOP_ALL', cat_id);\r\n\r\n cat_name = cat_main.display_value;\r\n } else {\r\n //sBC for via direct url\r\n cat_name = this.storeUi.active_category;\r\n }\r\n\r\n if (cat_main && cat_main.length > 1) {\r\n if (!this.props.match.params.name.startsWith('top10')) {\r\n //SbC DEPRICATED?\r\n //this.storeUi.getBookCountForSubCategory(0, this.props.match.params.name);\r\n }\r\n } else {\r\n this.storeUi.setActiveCategoryDisplayValue(cat_name);\r\n if (!this.props.match.params.name.startsWith('top10')) {\r\n //this.storeUi.getBookCountForSubCategory(cat_name, subcat_name);\r\n }\r\n }\r\n\r\n if (subcat_name !== this.state.subcategory_name) {\r\n this.setState({\r\n subcategory_name: subcat_name,\r\n cats_main: cat_main\r\n }) \r\n }\r\n }\r\n\r\n // if (this.storeUi.freezeScrolling) {\r\n // ui.smoothScrollTo(0, this.storeUi.scrollPos, 500); \r\n // } else {\r\n // ui.smoothScrollTo(0, 0, 500); \r\n // }\r\n // this.storeUi.setFreezeScrolling(false);\r\n // this.storeUi.setFreezePos(0);\r\n }\r\n\r\n // componentWillUnmount = () => {\r\n // const position = window.pageYOffset;\r\n // this.storeUi.setFreezePos(position);\r\n // this.storeUi.setFreezeScrolling(true);\r\n // }\r\n\r\n componentWillUnmount = () => {\r\n const position = window.pageYOffset;\r\n //this.storeUi.setFreezePos(position);\r\n\r\n this.storeSearch.setSearchViewPos(position);\r\n this.storeSearch.setSearchViewPage(this.storeUi.page_view.page);\r\n }\r\n \r\n render() {\r\n const category = this.props.match.params.name;\r\n\r\n return (\r\n <Template\r\n type = 'default'\r\n reset = {false}\r\n useScroll = {true}\r\n >\r\n {this.props.match.params.name !== undefined\r\n ? <div className=\"content-wrapper__segments\">\r\n\r\n {this.storeGeneral.shop !== 'SHOP_ALL' &&\r\n <BlockQuote \r\n quote = {this.storeUi.getQuote()}\r\n />\r\n }\r\n \r\n {!this.props.match.params.name.startsWith('top10') &&\r\n <div className=\"content-wrapper__segment\">\r\n {this.props.category == 'category'\r\n ? <BlocksBooks \r\n blockCat = {category}\r\n blockTitle = {i18n.t(\"blocks.books_in_cat.header\")}\r\n shop = {this.storeGeneral.shop}\r\n type = \"category\"\r\n page = \"category\"\r\n />\r\n\r\n : <BlocksBooks \r\n blockCat = {category}\r\n blockTitle = {i18n.t(\"blocks.books_in_cat.header\") + \" in '\" + this.props.match.params.name + \"'\"}\r\n type = \"subcategory\"\r\n subcategory = {this.props.match.params.name}\r\n page = \"category\"\r\n cats_main = {this.state.cats_main}\r\n cats_length = {this.state.cats_length}\r\n />\r\n }\r\n </div>\r\n }\r\n\r\n {this.props.match.params.name.startsWith('top10') &&\r\n <BlocksTop10 \r\n tag = {this.props.match.params.name} \r\n />\r\n }\r\n\r\n {/* <div className=\"content-wrapper__segment\">\r\n NIET GEVONDEN WAT JE ZOEKT?\r\n ...\r\n </div> */}\r\n </div>\r\n : <div>\r\n <p>Deze categorie is onbekend</p>\r\n <h2>Kies hiernaast een categorie</h2>\r\n </div>\r\n }\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Category;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst FormFeedbackRequired = inject(\"stores\") (\r\n observer (\r\n class FormFeedbackRequired extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n render() {\r\n return ( \r\n <div className=\"form-wrapper__help\">\r\n <span className=\"form-wrapper__help--required\">{i18n.t(\"form_feedback.required\")}</span>\r\n </div>\r\n );\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormFeedbackRequired);","import React, { Component } from 'react';\r\nimport { runInAction, reaction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport Checkbox from '../../elements/form-input-checkbox';\r\nimport TextInput from '../../elements/form-input-text';\r\nimport FormTextIncomplete from '../../elements/form-text-incomplete';\r\nimport ContentText from '../../components/content/content-text';\r\nimport RowText from '../form-rows/row-text';\r\nimport FormFeedbackRequired from '../../elements/forms/form-feedback-required';\r\n\r\nconst CheckLabel = inject(\"stores\") (\r\n observer (\r\n class CheckLabel extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n \r\n openPP = () => {\r\n this.storeUi.setContentComponent(\r\n <ContentText\r\n title = {i18n.t(\"page_headers.privacy_policy\")}\r\n page = {\"privacy-policy\"}\r\n className = \"content-scrollable\"\r\n />\r\n );\r\n this.storeUi.openDialogContent();\r\n }\r\n \r\n render() {\r\n return (\r\n <span><span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.subscribe\")}} /> <a href='#' onClick={(e) => this.openPP(e)}>privacy statement</a></span>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst FormRegister = inject(\"stores\") (\r\n observer (\r\n class FormRegister extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeForms = this.props.stores.storeForms;\r\n\r\n this.state = {\r\n form: this.props.form ? this.props.form : 'register',\r\n formControls: { \r\n firstname: {\r\n type: \"text\",\r\n value: '',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n lastname: {\r\n type: \"text\",\r\n value: '',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n }, \r\n email: {\r\n type: \"email\",\r\n value: '',\r\n validationRules: {\r\n isRequired: true,\r\n isEmail: true\r\n },\r\n validationMsg: i18n.t(\"form_errors.email\"),\r\n valid: false\r\n },\r\n email2: {\r\n type: \"email\",\r\n value: '',\r\n validationRules: {\r\n isRequired: true,\r\n isEmail: true\r\n },\r\n validationMsg: i18n.t(\"form_errors.email\"),\r\n valid: false,\r\n disable: [\"paste\"]\r\n },\r\n phonenr: {\r\n type: \"text\",\r\n value: '',\r\n validationRules: { \r\n isPhoneNumber: true\r\n },\r\n valid: true\r\n },\r\n password: {\r\n type: \"password\",\r\n value: '',\r\n validationRules: {\r\n isRequired: true,\r\n minLength: 5,\r\n noForbiddenCharacters: true\r\n },\r\n validationMsg: 'ruleMsg',\r\n valid: false\r\n },\r\n password2: {\r\n type: \"password\",\r\n value: '',\r\n validationRules: {\r\n isRequired: true,\r\n minLength: 5,\r\n noForbiddenCharacters: true\r\n },\r\n validationMsg: 'ruleMsg',\r\n disable: [\"paste\"],\r\n valid: false\r\n },\r\n has_subscription: {\r\n label: <CheckLabel />,\r\n value: this.props.want_newsletter ? (this.props.want_newsletter ? 1 : 0) : false,\r\n validationRules: {},\r\n valid: true\r\n }\r\n },\r\n formIsValid: false,\r\n btn_class: '--disabled',\r\n error: false,\r\n error_email: false,\r\n error_email2: false,\r\n error_email_match: false,\r\n error_pw_match: false,\r\n classFeedback: ''\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n this.storeUser.clearFormFeedback();\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUser.clearFormFeedback();\r\n }\r\n\r\n validateRow = (name, value, valid, touched) => { \r\n this.storeUi.clearFormFeedback();\r\n\r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid, touched);\r\n\r\n this.setState({\r\n error: null,\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = async() => {\r\n let matchingEmail;\r\n let error_email_match;\r\n\r\n let matchingPw;\r\n let error_pw_match;\r\n\r\n let emailAvailable = true;\r\n let emailAvailable2 = true;\r\n\r\n if (this.state.formControls.email.value !== '' && this.state.formControls.email2.value !== '') {\r\n matchingEmail = ui.checkMatchingValues(this.state.formControls.email.value, this.state.formControls.email2.value);\r\n error_email_match = !matchingEmail;\r\n }\r\n\r\n if (this.state.formControls.password.value !== '' && this.state.formControls.password2.value !== '') {\r\n matchingPw = ui.checkMatchingValues(this.state.formControls.password.value, this.state.formControls.password2.value);\r\n error_pw_match = !matchingPw;\r\n }\r\n\r\n console.log('SbC check characters')\r\n\r\n let emailValue = this.state.formControls.email.value;\r\n if (emailValue !== '') {\r\n emailAvailable = await this.checkEmail(emailValue); \r\n }\r\n\r\n let emailValue2 = this.state.formControls.email2.value;\r\n if (emailValue2 !== '') {\r\n emailAvailable2 = await this.checkEmail(emailValue2); \r\n }\r\n\r\n const formIsValid = matchingEmail && matchingPw && emailAvailable && emailAvailable2 && this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n error_firstname: this.state.formControls.firstname.value.length >= 2 ? false : this.state.error_firstname,\r\n error_email: !emailAvailable,\r\n error_email2: !emailAvailable2,\r\n error_email_match: error_email_match,\r\n error_pw_match: error_pw_match,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n });\r\n }\r\n\r\n async checkEmail(value) {\r\n let emailAvailable = await this.storeUser.checkEmailExists(value);\r\n return emailAvailable; \r\n }\r\n\r\n handleBlur = () => {\r\n this.setState({\r\n error_firstname: (this.state.formControls.firstname.value !== '' && this.state.formControls.firstname.value.length === 1) ? true : false\r\n })\r\n }\r\n\r\n registerUser = async(e) => {\r\n e.preventDefault();\r\n if (this.state.formIsValid && this.state.btn_class !== '--disabled') {\r\n this.setState({\r\n btn_class: '--disabled'\r\n })\r\n let registered = await this.storeUser.registerUser(this.state.formControls, this.state.form);\r\n if ('success' in this.storeUser.form_feedback) {\r\n this.props.onNext();\r\n }\r\n }\r\n }\r\n\r\n handleCheckboxChange = (event) => {\r\n const name = 'has_subscription';\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n value: !this.state.formControls[name].value,\r\n selected: !this.state.formControls[name].value ? 1 : 0\r\n }\r\n }\r\n \r\n })\r\n }\r\n\r\n handleClose = (e) => {\r\n this.setState({\r\n classFeedback: '--inline'\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"form-wrapper\">\r\n <FormFeedbackRequired />\r\n\r\n <div className=\"form-fieldset\">\r\n <form className=\"form form--register\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {key !== \"has_subscription\" &&\r\n <React.Fragment>\r\n {(this.state.formControls[key].type === \"text\" || this.state.formControls[key].type === \"email\" || this.state.formControls[key].type === \"password\") &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n validationMsg = {this.state.formControls[key].validationMsg}\r\n onValidate = {this.validateRow}\r\n onBlur = {this.handleBlur}\r\n disable = {this.state.formControls[key].disable}\r\n />\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {key === \"firstname\" && this.state.error_firstname &&\r\n <span className=\"form-field--suggestion\">{i18n.t(\"form_suggestions.firstname\")}</span>\r\n }\r\n\r\n {((key === \"email\" && this.state.error_email) || (key === \"email2\" && this.state.error_email2)) &&\r\n <span className=\"form-field--error --email\">{i18n.t(\"form_errors.email_in_use_extended\")}</span>\r\n }\r\n\r\n {key === \"email2\" && this.state.error_email_match &&\r\n <span className=\"form-field--error --email\">{i18n.t(\"form_errors.email_not_matching\")}</span>\r\n }\r\n\r\n {key === \"password2\" && this.state.error_pw_match &&\r\n <span className=\"form-field--error --pw\">{i18n.t(\"form_errors.pw_not_matching\")}</span>\r\n }\r\n\r\n {key === \"has_subscription\" && (\r\n this.props.show_subscription &&\r\n <div className=\"form-row form-row--input\">\r\n <Checkbox \r\n name = {\"has_subscription\"} \r\n label = {this.state.formControls[\"has_subscription\"].label}\r\n isSelected = {this.state.formControls[\"has_subscription\"].value}\r\n onCheckboxChange={this.handleCheckboxChange}\r\n className = {\"--reduced\"}\r\n />\r\n </div>\r\n )}\r\n </React.Fragment>\r\n ))}\r\n {this.state.error &&\r\n <div className=\"form-row form-row--error\">\r\n <p>{i18n.t(\"errors.error_general\")}</p>\r\n </div>\r\n }\r\n </form>\r\n\r\n <div className=\"form-row form-row--buttons\">\r\n <button \r\n className={\"btn btn--primary \" + this.state.btn_class} \r\n onClick={(e) => this.registerUser(e)}\r\n >\r\n {i18n.t(\"button.register\")}\r\n </button>\r\n </div>\r\n \r\n {Object.keys(this.storeUser.form_feedback).length > 0 &&\r\n <React.Fragment>\r\n {'error' in this.storeUser.form_feedback && \r\n <div className={\"form__feedback form__feedback--dialog \" + this.state.classFeedback}>\r\n <div className=\"btn--close\" onClick={(e) => this.handleClose(e)}><div className=\"btn--icon --link icon--close\">Sluit</div></div>\r\n <span>Er is helaas een fout opgetreden</span>\r\n <span>Probeer het later nog een keer.</span>\r\n </div> \r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormRegister);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport i18n from \"i18next\";\r\nimport { reaction } from 'mobx';\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nconst BlockEBook = inject(\"stores\") (\r\n observer (\r\n class BlockEBook extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.state = {\r\n redirect: false,\r\n foldout: false\r\n }\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeEBooks = this.props.stores.storeEBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.props.ebook.has_paper_version || this.props.ebook.isSupplement) {\r\n this.getEBookDetails();\r\n }\r\n }\r\n\r\n getEBookDetails = async() => {\r\n const ebook = await this.storeEBooks.getEBookDetails(this.props.ebook.sku);\r\n this.setState({\r\n ebook: ebook,\r\n stock: ebook && ebook.stock\r\n })\r\n }\r\n\r\n handleOnClick = (e, book) => {\r\n if (this.props.ebook.has_paper_version === 1) {\r\n this.storeUi.setCurrentBook(book.sku);\r\n this.storeBooks.getBookDetailsBySku(book.sku);\r\n\r\n this.setState({\r\n ebook_sku: book.sku,\r\n redirect: true\r\n })\r\n }\r\n }\r\n\r\n handleToLogin = (e) => {\r\n e.preventDefault();\r\n ui.handleScroll('top');\r\n }\r\n\r\n handleAddToCart = (e, book) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const value = 1;\r\n const id = (this.storeAuth.user.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n this.storeOrder.addToCart(this.storeGeneral.shop, id, book, 'add', value);\r\n this.storeUi.openDialog();\r\n \r\n this.setState({\r\n redirect: false\r\n });\r\n }\r\n\r\n handleDownload = (e) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n const url = this.urlAPI + \"/public/ebooks/\" + this.props.ebook.url_download + \".pdf\";\r\n window.open(url);\r\n }\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/book/\" + this.state.ebook_sku} \r\n />;\r\n }\r\n\r\n return (\r\n <li className=\"block block--book\">\r\n <div className=\"block-content\">\r\n <div className=\"block-content__column\">\r\n <div \r\n className={\"block--ebook__image\" + (this.props.ebook.has_paper_version === 1 ? \" --link\" : \"\")}\r\n onClick={(e)=>this.handleOnClick(e, this.props.ebook)}\r\n >\r\n <img \r\n src={this.urlAPI + \"/public/images/ebooks/\" + this.props.ebook.cover} \r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"block-content__column\">\r\n <div className=\"block-content--book__titles\">\r\n {this.props.view !== 'covers' && \r\n <div \r\n className={\"block-content--book__title\" + (this.props.ebook.has_paper_version === 1 ? \" --link\" : \"\")} \r\n onClick={(e)=>this.handleOnClick(e, this.props.ebook)}\r\n >\r\n {this.props.ebook.title}\r\n </div>\r\n }\r\n\r\n {this.props.view !== 'covers' && \r\n <span \r\n className=\"block-content--book__subtitle\"\r\n dangerouslySetInnerHTML={{ __html: this.props.ebook.subtitle}}\r\n />\r\n }\r\n\r\n {(this.props.view === 'summaries' || this.props.view === 'list') &&\r\n <span className=\"block--ebook__author\">{this.props.ebook.author}</span>\r\n }\r\n\r\n {(this.props.view === 'summaries' && this.props.ebook.language === 'EN') &&\r\n <div className=\"block--specs-summary__list\">\r\n <ul>\r\n <li className=\"block--specs-summary__listitem\">\r\n {this.props.view !== 'covers' && \r\n \r\n <span \r\n className=\"block-content--book__subtitle\"\r\n >\r\n Engelstalig\r\n </span>\r\n }\r\n </li>\r\n </ul>\r\n </div>\r\n } \r\n </div>\r\n\r\n {this.props.view === 'summaries' && \r\n <span \r\n className=\"block--ebook__descr\"\r\n dangerouslySetInnerHTML={{ __html: this.props.ebook.txtDescription}}\r\n />\r\n }\r\n\r\n {(this.props.view === 'summaries' && this.props.ebook.txtRemark !== null && this.props.ebook.txtRemark !== '') &&\r\n <span \r\n className=\"block--ebook__remark\"\r\n dangerouslySetInnerHTML={{ __html: this.props.ebook.txtRemark}}\r\n />\r\n }\r\n\r\n {this.props.view === 'summaries' && \r\n <React.Fragment>\r\n {this.props.ebook.has_paper_version === 1\r\n ? <div>\r\n <span className=\"block--ebook__options\">\r\n Je kunt een pdf downloaden of een<span \r\n onClick={(e)=>this.handleOnClick(e, this.props.ebook)} \r\n className=\"link--read-more\">\r\n papieren exemplaar\r\n </span>\r\n bestellen\r\n </span>\r\n </div>\r\n : this.props.ebook.url_download &&\r\n <div>\r\n <span className=\"block--ebook__options\">Alleen als e-book beschikbaar</span>\r\n </div>\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n <div className=\"block--ebook__actions\">\r\n {!this.storeAuth.user.is_loggedin &&\r\n <span onClick={(e) => this.handleToLogin(e)} className=\"link--read-more\">Log in of meld je aan voor gratis download</span>\r\n }\r\n {this.storeAuth.user.is_loggedin &&\r\n this.props.ebook.url_download\r\n ? <div className=\"block--ebook__btn\">\r\n {this.props.view === 'summaries' &&\r\n <span>Download pdf</span>\r\n }\r\n <div \r\n className=\"block--ebook__btn--download\"\r\n onClick={(e) => this.handleDownload(e)}\r\n />\r\n </div>\r\n : <div className=\"block--ebook__btn\">\r\n {this.props.view === 'summaries' &&\r\n <span>Download pdf</span>\r\n }\r\n <div \r\n className=\"block--ebook__btn--download --disabled\"\r\n />\r\n </div>\r\n }\r\n {this.props.ebook.has_paper_version === 1 &&\r\n <div className=\"block--ebook__btn\">\r\n {this.props.view === 'summaries' &&\r\n <span>Koop een papieren exemplaar</span>\r\n }\r\n {(this.state.stock === 1 || this.state.stock === '1')\r\n ? <div className=\"block--ebook__btn--add --link\" onClick={(e) => this.handleAddToCart(e, this.state.ebook)}>Add</div>\r\n : <div className=\"block--ebook__btn--add --disabled\">Add</div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n\r\n {(this.props.view === 'summaries' && (this.props.ebook.isSupplement === '1' || this.props.ebook.isSupplement === 1)) && \r\n <React.Fragment>\r\n <span \r\n className=\"block--ebook__txtsupplement\"\r\n dangerouslySetInnerHTML={{ __html: this.props.ebook.txtSupplement}}\r\n />\r\n \r\n <div className=\"block--ebook__actions\">\r\n <div className=\"block--ebook__btn\">\r\n {this.props.view === 'summaries' &&\r\n <span>Koop een papieren exemplaar</span>\r\n }\r\n {(this.state.stock === 1 || this.state.stock === '1')\r\n ? <div className=\"block--ebook__btn--add --link\" onClick={(e) => this.handleAddToCart(e, this.props.ebook)}>Add</div>\r\n : <div className=\"block--ebook__btn--add --disabled\">Add</div>\r\n }\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n </div>\r\n </div>\r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlockEBook;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport i18n from \"i18next\";\r\n\r\nimport * as sort from '../../utilities/sort';\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport BlockEBook from '../block/block-ebook20';\r\nimport BlockPagination from './block-pagination';\r\nimport LiSort from './block-li-sort';\r\n\r\nconst BlocksEBooks = inject(\"stores\") (\r\n observer (\r\n class BlocksEBooks extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeEBooks = this.props.stores.storeEBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n \r\n this.state = {\r\n listBooks: [],\r\n sorting: 'id',\r\n view: 'summaries'\r\n }\r\n \r\n this.refScroll = React.createRef();\r\n }\r\n\r\n componentDidMount = () => {\r\n this.setState({\r\n listBooks: this.storeEBooks.eBooksList\r\n })\r\n }\r\n\r\n componentDidMount = async() => {\r\n if (this.state.listBooks.length == 0) {\r\n await this.storeEBooks.getEBooks();\r\n this.setState({\r\n listBooks: this.storeEBooks.eBooksList\r\n })\r\n }\r\n }\r\n\r\n handleDownload = (e, id) => {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n\r\n }\r\n\r\n handleBlocksNav = (e, view) => {\r\n this.setState({\r\n view: view\r\n })\r\n this.storeUi.setPageView('view', view)\r\n }\r\n\r\n handleSort = (type, sorting_dir) => {\r\n this.setState({\r\n sorting: type,\r\n sorting_dir: sorting_dir\r\n }, () => this.setView());\r\n }\r\n\r\n removeSort = () => {\r\n const type = 'id';\r\n const sorting_dir = 'DESC';\r\n\r\n this.setState({\r\n sorting: type,\r\n sorting_dir: sorting_dir\r\n }, () => this.setView());\r\n }\r\n\r\n setView = () => {\r\n let listBooks;\r\n listBooks = this.storeEBooks.eBooksList\r\n .sort(sort.compareValues(this.state.sorting, this.state.sorting_dir))\r\n\r\n this.setState({\r\n listBooks: listBooks\r\n })\r\n \r\n this.scrollToComp();\r\n }\r\n\r\n scrollToComp = () => { \r\n let offsetTop = this.refScroll.current.offsetTop - 30;\r\n ui.handleScroll(offsetTop);\r\n }\r\n \r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/book/\" + this.state.ebook_sku} \r\n />;\r\n }\r\n\r\n let blockview;\r\n if (this.storeUi.page_view.view && this.storeUi.page_view.view !== '') {\r\n blockview = this.storeUi.page_view.view; \r\n } else {\r\n if (this.state.view == '' ) {\r\n if (this.state.listBooks !== null && this.state.listBooks.length < 5) {\r\n blockview = 'summaries'\r\n } else {\r\n blockview = 'covers'\r\n }\r\n } else {\r\n blockview = this.state.view\r\n }\r\n }\r\n\r\n const Li = (view) => {\r\n const activeClass = (view.view === blockview) ? ' --active' : '';\r\n return (\r\n <li className={\"blocks-nav__listitem blocks-nav__listitem--\" + view.view + activeClass} onClick={(e) => this.handleBlocksNav(e, view.view)}>\r\n <span>{view.view}</span>\r\n </li>\r\n )\r\n }\r\n\r\n \r\n\r\n return (\r\n <div className=\"blocks blocks--ebooks\" ref={this.refScroll}>\r\n <div className=\"blocks__content\">\r\n <React.Fragment>\r\n <div className=\"blocks__nav\">\r\n <div className=\"blocks__nav-actions\">\r\n <div className=\"blocks-nav__list --column\">\r\n <ul className=\"blocks-nav__list--sort\">\r\n <li>Sorteer op:</li>\r\n <LiSort \r\n sort = 'title'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n <LiSort \r\n sort = 'author_lastname'\r\n handleSort = {this.handleSort}\r\n sorting = {this.state.sorting}\r\n />\r\n </ul>\r\n {this.state.sorting !== 'id' &&\r\n <span className=\"blocks-nav__list--unsort --link\" onClick={(e) => this.removeSort()}>Verwijder sortering</span>\r\n } \r\n </div>\r\n <div className=\"blocks-nav__list\">\r\n <ul className=\"blocks-nav__list--view\">\r\n <Li \r\n view = 'summaries'\r\n />\r\n <Li \r\n view = 'covers'\r\n />\r\n <Li \r\n view = 'list'\r\n />\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n \r\n {/* <BlockPagination \r\n setView = {this.setView}\r\n total = {this.state.type == 'search' ? this.storeUi.search_count : this.storeUi.count_total}\r\n page = {this.storeUi.page_view.page}\r\n /> */}\r\n \r\n <ul className={\"blocks__list blocks__list--ebooks --\" + blockview}>\r\n {this.state.listBooks.map((ebook, i) => ( \r\n <BlockEBook\r\n ebook = {ebook}\r\n view = {blockview}\r\n />\r\n ))}\r\n </ul>\r\n\r\n {/* <BlockPagination \r\n setView = {this.setView}\r\n total = {this.state.type == 'search' ? this.storeUi.search_count : this.storeUi.count_total}\r\n page = {this.storeUi.page_view.page}\r\n /> */}\r\n </React.Fragment>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlocksEBooks;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as ui from '../utilities/ui';\r\nimport Template from '../templates/template';\r\n\r\nimport FormRegister from '../components/forms/form-register';\r\nimport BlocksEBooks from '../components/blocks/blocks-ebooks';\r\n\r\nconst EBooksAll = inject(\"stores\") (\r\n observer (\r\n class EBooksAll extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount() {\r\n ui.handleScroll('top');\r\n this.storeUi.setActiveToggleNav(1);\r\n }\r\n\r\n componentDidUpdate() {\r\n //ui.handleScroll('top');\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = {!this.storeAuth.user.is_loggedin ? \"ebooks_all\" : \"ebooks\"}\r\n nav_name = {\"ebooks\"}\r\n >\r\n <div className=\"content-wrapper__segment\">\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content content-segment__content--intro\">\r\n {!this.storeAuth.user.is_loggedin &&\r\n <p>{i18n.t(\"pages.ebooks.intro\")}</p>\r\n }\r\n <p>{i18n.t(\"pages.ebooks.intro2\")}</p>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"content-wrapper__segment\">\r\n {!this.storeAuth.user.is_loggedin &&\r\n <FormRegister \r\n form = {'ebooks'}\r\n want_newsletter = {true} \r\n show_subscription = {false}\r\n />\r\n }\r\n </div>\r\n <div className=\"content-wrapper__segment\">\r\n <BlocksEBooks />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(EBooksAll);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport * as ui from '../../utilities/ui';\r\nimport Template from '../../templates/template';\r\n\r\nimport BlocksEvents from '../../components/blocks/blocks-events';\r\n\r\nconst Events = inject(\"stores\") (\r\n observer (\r\n class Events extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = \"events\"\r\n nav_name = {\"events\"}\r\n >\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Ontmoet de auteur</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Alles wat je tot nu toe hebt bereikt is hoogstwaarschijnlijk gegaan via boeken en mondelinge overdracht (denk aan onderwijzers, schoolklas, colleges, cursussen, etc.) Het is net als bij je rijbewijs: na je schooltijd/collegetijd begint het leren pas echt. Daarom is het zo belangrijk om te blijven investeren in jezelf door bijv. goede boeken te lezen of door naar seminars te gaan. Schrijvers te ontmoeten die tientallen jaren een bepaalde materie hebben bestudeerd. En die tientallen jaren, vaak gecombineerd met een boek voor jou, samenvatten in 1 dag. Daarom moet je de stekker er niet uittrekken, maar 'ingeplugd' blijven. Vandaar onderstaande informatie.</p>\r\n <p><strong>Momenteel zijn alle lezingen en/of seminars tot nader bericht uitgesteld.</strong></p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Tip ons</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Organiseer je een seminar - of weet je een seminar - met een schrijver waarvan wij op deze website een boek promoten, <a href=\"mailto:info@succesboeken.nl?subject=seminar promotie\">laat het ons weten</a>.</p>\r\n </div>\r\n </div>\r\n\r\n {/* <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Evenementen</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <BlocksEvents \r\n view = {\"all\"}\r\n />\r\n </div>\r\n </div> */}\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Events;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\n\r\nconst BlocksEvents = inject(\"stores\") (\r\n observer (\r\n class BlocksEvents extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"blocks blocks--books\">\r\n <div className=\"blocks__blocks-title\">\r\n {i18n.t(\"blocks.events.header\")}\r\n </div> \r\n <div className=\"blocks__content\">\r\n <div className=\"block block--book\">Event 1</div>\r\n <div className=\"block block--book\">Event 2</div>\r\n <div className=\"block block--book\">Event 3</div>\r\n </div>\r\n {this.props.view !== \"all\" &&\r\n <div className=\"blocks__footer\">\r\n <Link to=\"/authors\">Bekijk alle events</Link>\r\n </div>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default BlocksEvents;\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport BlockCover from '../block/block-cover';\r\n\r\nconst CategoriesPreviewsBooks = inject(\"stores\") (\r\n observer (\r\n class CategoriesPreviewsBooks extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeCatalogs = this.props.stores.storeCatalogs;\r\n\r\n this.state = {\r\n bookList: []\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const catName = this.props.category;\r\n const bookList = await this.storeBooks.returnBooksForCategory(catName, this.storeUi.page_view);\r\n\r\n this.setState({\r\n bookList: bookList\r\n })\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n\r\n }\r\n\r\n handleOnClickCat = async(cat_name) => { \r\n let id;\r\n\r\n ui.smoothScrollTo(0, 0, 500); \r\n this.storeUi.setFreezeScrolling(false);\r\n this.storeUi.setFreezePos(0);\r\n\r\n this.storeUi.setActiveProductGroup('');\r\n this.storeUi.setActiveSubGroup('');\r\n\r\n if (this.storeGeneral.shop === 'SHOP_SB') {\r\n id = 1;\r\n } else {\r\n id = 2;\r\n }\r\n this.storeUi.setActiveToggleNav(id);\r\n\r\n this.storeCatalogs.setActiveCategory(cat_name);\r\n\r\n this.storeUi.setActiveSubCategory(\r\n (cat_name !== this.storeUi.active_category || (cat_name === this.storeUi.active_category && this.storeUi.active_subcategory === '')) ? cat_name : ''\r\n );\r\n \r\n if (cat_name !== this.storeUi.active_category ) {\r\n this.storeCatalogs.setActiveCategory(cat_name);\r\n this.storeUi.setActiveCategory(cat_name);\r\n\r\n this.storeCatalogs.setActiveSubCategory(''); \r\n this.storeUi.setActiveSubCategory('');\r\n \r\n this.storeUi.setPageView('page', 1);\r\n } else {\r\n this.storeUi.setActiveSubCats(cat_name);\r\n }\r\n \r\n const htmlEntities = {\r\n \"ë\": \"ë\"\r\n };\r\n cat_name = cat_name.replace('ë', match => htmlEntities[match]);\r\n\r\n this.storeUi.setNavMobile(false);\r\n let url = \"/categorie/\" + cat_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"list list--previewcat\"> \r\n <ul \r\n className=\"blocks__list blocks__list--covers blocks__list--covers-foldout --collapsed \"\r\n >\r\n {this.state.bookList && this.state.bookList.map((book, i) => (\r\n book && i < 5 &&\r\n <li \r\n key={i} \r\n className=\"block block--book\" \r\n onClick={(e) => this.handleOnClick(e, book)}\r\n >\r\n <BlockCover \r\n book = {book}\r\n sku = {book.sku}\r\n ranking = {this.props.ranking} \r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(CategoriesPreviewsBooks));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport BlockCategory from './block-category';\r\nimport BlockCategoriesPreviewsBooks from './block-categories-previews-books';\r\n\r\nconst CategoriesPreviewsLi = inject(\"stores\") (\r\n observer (\r\n class CategoriesPreviewsLi extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeCatalogs = this.props.stores.storeCatalogs;\r\n\r\n this.state = {\r\n subs_active: true\r\n }\r\n }\r\n\r\n handleOnClickCat = async(cat_name) => { \r\n let id;\r\n\r\n ui.smoothScrollTo(0, 0, 500); \r\n this.storeUi.setFreezeScrolling(false);\r\n this.storeUi.setFreezePos(0);\r\n\r\n this.storeUi.setActiveProductGroup('');\r\n this.storeUi.setActiveSubGroup('');\r\n\r\n if (this.storeGeneral.shop === 'SHOP_SB') {\r\n id = 1;\r\n } else {\r\n id = 2;\r\n }\r\n this.storeUi.setActiveToggleNav(id);\r\n\r\n this.storeCatalogs.setActiveCategory(cat_name);\r\n\r\n this.storeUi.setActiveSubCategory(\r\n (cat_name !== this.storeUi.active_category || (cat_name === this.storeUi.active_category && this.storeUi.active_subcategory === '')) ? cat_name : ''\r\n );\r\n \r\n if (cat_name !== this.storeUi.active_category ) {\r\n this.storeCatalogs.setActiveCategory(cat_name);\r\n this.storeUi.setActiveCategory(cat_name);\r\n\r\n this.storeCatalogs.setActiveSubCategory(''); \r\n this.storeUi.setActiveSubCategory('');\r\n \r\n this.storeUi.setPageView('page', 1);\r\n } else {\r\n this.storeUi.setActiveSubCats(cat_name);\r\n }\r\n\r\n this.setState({\r\n subs_active: !this.state.subs_active\r\n })\r\n \r\n const htmlEntities = {\r\n \"ë\": \"ë\"\r\n };\r\n cat_name = cat_name.replace('ë', match => htmlEntities[match]);\r\n\r\n this.storeUi.setNavMobile(false);\r\n let url = \"/categorie/\" + cat_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n render() {\r\n return (\r\n <li>\r\n <div className={\"block--categories__cat-preview\"}>\r\n <div className=\"blocks__blocks-title\">\r\n <div className=\"blocks__blocks-title--main\">\r\n <span \r\n className=\"blocks__blocks-title--main-cat\"\r\n dangerouslySetInnerHTML={{ __html: this.props.display_value ? this.props.display_value : this.props.name}}\r\n />\r\n </div>\r\n </div>\r\n\r\n <BlockCategoriesPreviewsBooks\r\n category = {this.props.name}\r\n />\r\n <div \r\n className = \"blocks__list--actions blocks__list--action-icons\"\r\n onClick={(e) => this.handleOnClickCat(this.props.name)}\r\n >\r\n <div class=\"blocks__list--action\">\r\n <span \r\n className=\"link--read-more\"\r\n dangerouslySetInnerHTML={{ __html: this.props.display_value ? (\"Toon alle boeken in \" + this.props.display_value) : (\"Alle boeken in \" + this.props.name)}}\r\n />\r\n <div className=\"paging-forward-wrapper --next\"><div class=\"paging-forward-wrapper__icon\"></div></div>\r\n </div>\r\n </div>\r\n </div> \r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(CategoriesPreviewsLi));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport { Redirect } from 'react-router';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport CategoriesPreviewsLi from './block-categories-previews-li';\r\n\r\nconst BlockCategoriesPreviews = inject(\"stores\") (\r\n observer (\r\n class BlockCategoriesPreviews extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {};\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = async() => {\r\n let categories;\r\n if (this.storeBooks.categoriesList.length === 0) {\r\n categories = await this.storeBooks.returnCategories(this.storeGeneral.shop);\r\n } else {\r\n categories = this.storeBooks.categoriesList;\r\n }\r\n\r\n this.setState({\r\n categories: categories\r\n }) \r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (this.props.shop !== 'SHOP_ALL') {\r\n if (this.storeBooks.categoriesListSB.length === 0) { \r\n const categories = await this.storeBooks.getCategories('SHOP_SB');\r\n } \r\n } else {\r\n if (this.storeBooks.categoriesListALL.length === 0) { \r\n const categories = await this.storeBooks.getCategories('SHOP_ALL');\r\n } \r\n }\r\n }\r\n\r\n render() { \r\n return (\r\n <div className=\"block block--categories\">\r\n <ul className={\"block__block-list\"}>\r\n {this.props.shop === 'SHOP_SB' && this.storeBooks.categoriesListSB && this.storeBooks.categoriesListSB.map((cat, i) => ( \r\n <CategoriesPreviewsLi \r\n key = {i}\r\n shop = {this.props.shop}\r\n category = {cat}\r\n name = {cat.name}\r\n display_value = {cat.display_value}\r\n />\r\n ))}\r\n\r\n {this.props.shop === 'SHOP_ALL' && this.storeBooks.categoriesListALL && this.storeBooks.categoriesListALL.map((cat, i) => ( \r\n <CategoriesPreviewsLi \r\n key = {i}\r\n shop = {this.props.shop}\r\n category = {cat}\r\n name = {cat.name}\r\n display_value = {cat.display_value}\r\n />\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(BlockCategoriesPreviews));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlockCategoriesPreviews from '../components/block/block-categories-previews';\r\n\r\nconst Genres = inject(\"stores\") (\r\n observer (\r\n class Genres extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n reset = {false}\r\n sticky = {false}\r\n header = {\"cats_all\"}\r\n > \r\n <div className=\"content-wrapper\">\r\n <div className=\"content-wrapper__content\">\r\n <BlockCategoriesPreviews\r\n shop = {this.storeGeneral.shop}\r\n expanded = {true}\r\n active_togglenav = {this.storeUi.active_togglenav}\r\n />\r\n </div>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Genres;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as ui from '../../utilities/ui';\r\nimport Template from '../../templates/template';\r\n\r\nconst Jobs = inject(\"stores\") (\r\n observer (\r\n class Jobs extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n }\r\n\r\n componentDidMount = () => {\r\n ui.handleScroll('top');\r\n //this.storeUi.setActiveMainNav(1);\r\n }\r\n\r\n componentDidUpdate = () => {\r\n\r\n }\r\n \r\n render() {\r\n ui.handleScroll('top');\r\n\r\n return (\r\n <Template\r\n type = 'default'\r\n header = {this.storeGeneral.shop === 'SHOP_SB' \r\n ? \"jobs\"\r\n : \"jobs_sb\"\r\n }\r\n nav_name = {\"jobs\"}\r\n >\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Ken je iemand, of ben jij degene, die we zoeken?</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Wij geloven dat het voor de komende jaren cruciaal is om mensen eerlijk voor te lichten over onderwerpen als gezondheid, financiën, persoonlijke groei, klimaat, EU, etc.</p>\r\n <p>En met eerlijk bedoelen wij: zonder industriële belangen, zonder politieke belangen, zonder eigenbelangen: in maar één belang, dat van de persoon zelf.</p>\r\n <p>Daarom willen wij groeien als uitgeverij; we hebben een behoorlijke investering gedaan in ons pand met name om ruimte te creëren voor nieuwe collega's.</p>\r\n <p>We willen een bijzonder bedrijf zijn, waar o.a. de medewerkers ook eigenaar van het bedrijf kunnen worden en waar veel aan sport/fitness gedaan kan worden. We huizen in de bossen nabij Zeist.</p>\r\n </div>\r\n </div>\r\n\r\n {/* <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h3>Opmaker (m/v)</h3>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>We willen graag in contact komen met iemand die bedreven is in het opmaken van boeken.</p>\r\n <p>Kennis van Adobe Indesign, Photoshop en andere programma’s is noodzakelijk. We werken in een Windows omgeving.</p>\r\n <h4>Werktijden:</h4>\r\n <p>In overleg, locatie Den Dolder (om deel uit te maken van het team).</p>\r\n <h4>Leeftijd:</h4>\r\n <p>De kennis en motivatie is belangrijker dan de leeftijd.</p>\r\n <h4>Woonplaats:</h4>\r\n <p>In een straal van max 20 km van onze vestiging Den Dolder (Zeist).</p>\r\n </div>\r\n </div> */}\r\n\r\n {/* <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h3>Een duizendpoot (m/v)</h3>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Die van gezond, maar lekker eten houdt en voor ons team de lunch kan klaarmaken.<br/>Wij zijn wars van zakjes, pakjes, blikvoer, supermarkteten, etc. Wij houden ook niet van 'dood' eten, dus hebben we de magnetron de deur uit gedaan.</p>\r\n <p>Iemand die de bestellingen inpakt voor onze lezers/klanten.</p>\r\n <h4>Werktijden:</h4>\r\n <p>In overleg, locatie Den Dolder.</p>\r\n <h4>Leeftijd:</h4>\r\n <p>Motivatie en iemand die graag voor een ander zorgt, maar zichzelf niet uitvlakt is belangrijker dan de leeftijd.</p>\r\n <h4>Woonplaats:</h4>\r\n <p>In een straal van max 20 km van onze vestiging Den Dolder (Zeist).</p>\r\n </div>\r\n </div> */}\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h3>Rechterhand eigenaar (m/v)</h3>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Wij zoeken iemand die wil leren wat de eigenaar/uitgever nu weet en doet. Heb je er ooit van gedroomd een uitgeverij te runnen of (mede) eigenaar van een uitgeverij te zijn? Mogelijk is dit je kans. Dit is geen parttime functie.</p>\r\n <h4>Werkplaats:</h4>\r\n <p>Den Dolder.</p>\r\n <h4>Woonplaats:</h4>\r\n <p>In een straal van max 20 km van onze vestiging Den Dolder (Zeist).</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h3>PR medewerker (m/v)</h3>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Een boek is zo goed als je erover praat.</p>\r\n <p>Wanneer je als uitgeverij een toptitel hebt, maar niemand praat erover, dan zullen weinig mensen het boek aanschaffen en wordt een toptitel een floptitel. Andersom is ook weleens gebeurd (niet bij onze uitgeverij).</p>\r\n <p>Wij zoeken een PR medewerker die kan praten over een toptitel met:</p>\r\n <ul>\r\n <li>de pers</li>\r\n <li>internetwinkels</li>\r\n <li>bloggers</li>\r\n <li>bedrijven</li>\r\n <li>groothandels</li>\r\n <li>therapeuten</li>\r\n <li>artsen</li>\r\n <li>etc.</li>\r\n </ul>\r\n <h4>Ervaring:</h4>\r\n <p>Affiniteit met PR activiteiten is een pre;<br/>\r\n Inhoudelijk achter onze huidige boeken staan is cruciaal;<br/>\r\n Redactionele ervaring is een pre.</p>\r\n <h4>Werktijden:</h4>\r\n <p>In overleg, locatie Den Dolder (om deel uit te maken van het team).</p>\r\n <h4>Leeftijd:</h4>\r\n <p>De kennis en motivatie is belangrijker dan de leeftijd.</p>\r\n <h4>Woonplaats:</h4>\r\n <p>In een straal van max 20 km van onze vestiging Den Dolder (Zeist).</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h3>Over Succesboeken.nl</h3>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Succesboeken.nl is een uitgeverij van zelfhulpboeken op het gebied van gezondheid, financiën en persoonlijke ontwikkeling. Qua boeken/informatie die we op de markt brengen hebben we een sterke filosofie ontwikkeld. Je zult achter deze filosofie moeten staan of ervoor open moeten willen staan.</p>\r\n <p>Mail je cv naar Succesboeken.nl, inclusief je pasfoto. Schrijf begeleidend je motivatie en waarom je denkt dat we niet meer zonder jou kunnen.</p>\r\n <p>Succesboeken.nl<br/>\r\n e-mail: info@succesboeken.nl</p>\r\n <p>Bellen om direct een afspraak te maken heeft geen zin. Naar aanleiding van de schriftelijke sollicitatie (per e-mail of gewone post) zullen we een aantal sollicitanten uitnodigen om zich te presenteren.</p>\r\n </div>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(Jobs);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlocksBooks from '../components/blocks/blocks-books';\r\n\r\nconst Languages = inject(\"stores\") (\r\n observer (\r\n class Languages extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n }\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = async () => {\r\n let total;\r\n let idx\r\n let params = this.props.match.params;\r\n\r\n if (this.storeUi.active_language !== '') {\r\n idx = this.storeUi.list_languages.findIndex(lang => lang.abbr === this.storeUi.active_language);\r\n } else {\r\n idx = this.storeUi.list_languages.findIndex(lang => lang.display_value === this.props.match.params.lang);\r\n }\r\n (async() => await this.storeBooks.getBooksForLanguage(this.storeUi.list_languages[idx].query_value, this.storeUi.page_view) )();\r\n (async() => await this.storeUi.getBookCountForLanguage(this.storeUi.list_languages[idx].query_value) )();\r\n\r\n this.storeUi.setPageView('total', this.storeUi.count_total);\r\n this.handleScroll();\r\n }\r\n \r\n componentDidUpdate = async() => {\r\n let total;\r\n let idx\r\n let params = this.props.match.params;\r\n\r\n if (this.storeUi.active_language !== '') {\r\n idx = this.storeUi.list_languages.findIndex(lang => lang.abbr === this.storeUi.active_language);\r\n } else {\r\n idx = this.storeUi.list_languages.findIndex(lang => lang.display_value === this.props.match.params.lang);\r\n }\r\n (async() => await this.storeBooks.getBooksForLanguage(this.storeUi.list_languages[idx].query_value, this.storeUi.page_view) )();\r\n (async() => await this.storeUi.getBookCountForLanguage(this.storeUi.list_languages[idx].query_value) )();\r\n\r\n this.storeUi.setPageView('total', this.storeUi.count_total);\r\n this.handleScroll();\r\n }\r\n\r\n handleScroll = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n > \r\n <div className=\"content-segment\">\r\n <div className=\"search-results\">\r\n <BlocksBooks \r\n blockTitle = {i18n.t(\"blocks.languages.header\")}\r\n type = \"language\"\r\n default_view = \"\"\r\n page = \"language\"\r\n />\r\n </div>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Languages;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst LinkDownload = inject(\"stores\") (\r\n observer (\r\n class LinkDownload extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n componentDidMount = () => {\r\n window.scrollTo(0, 0)\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"link_download\"}\r\n >\r\n <div className=\"content-segment\">\r\n <p>Op deze audio MP3 staan de meditaties die behoren bij het boek Jij bent de placebo (ISBN 9789492665034, uitgegeven door Succesboeken.nl) en tevens ook staan afgedrukt achter in het boek. De eerste 9.50 min is een introductie van dr. Joe Dispenza; daarna volgen de meditaties.</p>\r\n <p>De meditaties zijn bedoeld om de overtuigingen en percepties te veranderen die je beperken - de eerste stap in genezing. Jij bent de placebo combineert de nieuwste research in neurowetenschap, biologie, psychologie, hypnose, geconditioneerd gedrag en kwantumfysica om de werking van het placebo-effect te ontsluieren ... en laat zien hoe het schijnbaar onmogelijke, mogelijk kan worden.</p>\r\n <p>Over de auteur: Dr. Joe Dispenza heeft een passie voor het onderwijzen van anderen hoe de laatste ontdekkingen toe te passen uit de neurowetenschappen en kwantumfysica om hun brein opnieuw te programmeren, ziekte te genezen en een meer vervuld leven te leiden. Als een van de experts uit de film What the BLEEP Do We (K)now!? geeft dr. Joe workshops en lezingen over de hele wereld. Hij heeft ook een programma ontworpen waarmee hij zijn model van transformatie naar het bedrijfsleven brengt.</p>\r\n <br/>\r\n <p><a href=\"https://www.succesboeken.nl/api/public/downloads/mp3/Introductie.mp3\">Klik hier met rechter muisknop en kies opslaan om de Introductie mp3 te downloaden.</a></p>\r\n <p><a href=\"https://www.succesboeken.nl/api/public/downloads/mp3/Meditatie.mp3\">Klik hier met rechter muisknop en kies opslaan om de Meditaties mp3 te downloaden.</a></p>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(LinkDownload);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst LinkDownloadDoorbreek = inject(\"stores\") (\r\n observer (\r\n class LinkDownloadDoorbreek extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n componentDidMount = () => {\r\n window.scrollTo(0, 0)\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"link_download_doorbreek\"}\r\n subtitle = {\"(je kunt de Mp3 bestanden onderin deze pagina downloaden)\"}\r\n >\r\n <div className=\"content-segment\">\r\n <p>Op deze <strong>dubbele</strong> audio MP3 staan de meditaties die behoren bij het boek <i>Doorbreek de gewoonte jezelf te zijn</i> (ISBN 9789492665430, uitgegeven door Succesboeken.nl).</p>\r\n <p>De eerste MP3 bevat 3.00 min introductie van dr. Joe Dispenza en daarna volgen de meditaties <i>Lichaamsdeel</i> – totale duur 1 u. 18 min.\r\n <br/>\r\n Op de tweede MP3 staan de meditaties <i>Waterstijging</i> – 1 u. 10 min.</p>\r\n <p>Deze mp3-set bevat een vierweekse geleide meditatie om je te helpen bij het mentaal oefenen van het stappenplan dat beschreven staat in het boek van dr. Joe Dispenza <i>Doorbreek de gewoonte jezelf te zijn</i>. Deze mp3's zijn bedoeld om je van een bèta-hersengolffrequentie (de analytische geest) naar een alfa-staat te brengen en om coherente hersengolfpatronen te ontwikkelen en te handhaven.</p>\r\n <p>Dr. Joe geeft instructies om je aandacht tijdens deze meditatie op verschillende delen van je lichaam te richten <i>in de ruimte</i> en <i>de ruimte rondom je lichaam</i>. Hierdoor verandert je brein en krijg je toegang tot het besturingssysteem van je onderbewuste geest - waar ongewenste gewoonten en programma’s liggen opgeslagen. Het doel is dat je leert hoe je in het nu kunt blijven en de kunst van het mediteren onder de knie krijgt. Als je je hersengolven eenmaal op de juiste manier hebt veranderd en diep in je onderbewustzijn bent binnengedrongen, word je persoonlijk begeleid voorbij je <i>oude zelf</i> en ga je een <i>nieuw zelf</i> en een nieuw leven creëren!</p>\r\n <p>Over de auteur: Dr. Joe Dispenza heeft een passie voor het onderwijzen van anderen hoe de laatste ontdekkingen toe te passen uit de neurowetenschappen en kwantumfysica om hun brein opnieuw te programmeren, ziekte te genezen en een meer vervuld leven te leiden. Als een van de experts uit de film What the BLEEP Do We (K)now!? geeft dr. Joe workshops en lezingen over de hele wereld. Hij heeft ook een programma ontworpen waarmee hij zijn model van transformatie naar het bedrijfsleven brengt.</p>\r\n <br/>\r\n <p><a href=\"https://www.succesboeken.nl/api/public/downloads/mp3/Meditaties-Dispenza-Doorbreek-cd1.mp3\">Klik hier met rechter muisknop en kies opslaan om de introductie en de eerste meditatie-mp3 te downloaden: Lichaamsdeel.</a></p>\r\n <p><a href=\"https://www.succesboeken.nl/api/public/downloads/mp3/Meditaties-Dispenza-Doorbreek-cd2.mp3\">Klik hier met rechter muisknop en kies opslaan om de tweede meditatie-mp3 te downloaden: Waterstijging.</a></p>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(LinkDownloadDoorbreek);\r\n","import React, { Component } from 'react';\r\nimport { reaction, runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport RowText from '../form-rows/row-text';\r\nimport FormFeedbackRequired from '../../elements/forms/form-feedback-required';\r\n\r\nconst FormLogin = inject(\"stores\") (\r\n observer (\r\n class FormLogin extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeCart = this.props.stores.storeCart;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeWishlist = this.props.stores.storeWishlist;\r\n this.storeForms = this.props.stores.storeForms;\r\n this.storePartners = this.props.stores.storePartners;\r\n\r\n this.state = {\r\n formControls: { \r\n email: {\r\n type: \"email\",\r\n value: '',\r\n validationRules: {\r\n isRequired: true,\r\n isEmail: false\r\n },\r\n valid: false\r\n },\r\n password: {\r\n type: \"password\",\r\n value: '',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n }\r\n },\r\n formIsValid: false,\r\n btn_class: '--disabled'\r\n }\r\n }\r\n\r\n validateRow = (name, value, valid) => { \r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid);\r\n this.storeUi.clearFormFeedback();\r\n \r\n if (name == 'email') {\r\n this.props.rememberEmail(value);\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = () => {\r\n const formIsValid = this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid \r\n ? '--active' \r\n : '--disabled'\r\n });\r\n }\r\n\r\n loginUser = async(e) => {\r\n //if (this.state.formIsValid) {\r\n let login = await this.storeAuth.checkLogin(this.state.formControls);\r\n if (!('error' in login)) {\r\n this.storeUser.setLoginState(true);\r\n this.storeOrder.setClientId(login.id);\r\n this.storeUser.setUserData(login);\r\n this.storeAuth.setAuth(login);\r\n this.storeOrder.setOrderProfileFromUser(login);\r\n if ((login.is_partner === 'on' || login.is_partner === 1) && login.partner_code !== '') {\r\n this.storeUi.setPartnerCode(login.partner_code);\r\n this.storeOrder.setAffiliateId(login.partner_code);\r\n } \r\n this.storeUi.getUserDiscounts();\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n this.storeUi.setFeatureAll(true);\r\n }\r\n \r\n this.storeWishlist.retrieveWishlistFromDB(login.id);\r\n\r\n if (this.storeUi.app_interface.use_case === \"inshop\") {\r\n //this.storeOrder.retrieveShoppingCartFromDB(login.id, 'login');\r\n }\r\n //this.storeOrder.retrieveShoppingCart(login.id, 'init');\r\n this.storeOrder.retrieveShoppingCart(login.id, 'login');\r\n\r\n this.storePartners.getPartnerFees();\r\n\r\n this.props.onNext();\r\n\r\n } else {\r\n this.storeUser.setLoginState(false);\r\n this.storeAuth.setLoginState(false);\r\n\r\n this.storeUi.setFormFeedback('error', login.error);\r\n this.storeUi.openDialogFeedbackForm('vraag/opmerking');\r\n }\r\n //}\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <div className=\"form-wrapper\">\r\n <FormFeedbackRequired />\r\n \r\n <div className=\"form-fieldset\">\r\n <form className=\"form\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {(this.state.formControls[key].type === \"text\" || this.state.formControls[key].type === \"email\" || this.state.formControls[key].type === \"password\") &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n </React.Fragment>\r\n ))}\r\n </form>\r\n \r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.loginUser(e)}>{i18n.t(\"button.login\")}</button>\r\n </div>\r\n \r\n {'error' in this.storeUi.form_feedback && (\r\n <div className=\"form-row form-row--error\">\r\n <p \r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"errors.error_login\")}}\r\n />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormLogin);\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport * as login from '../../communicator/login';\r\nimport TemplateForms from '../../templates/template-forms';\r\n\r\nimport TextInput from '../../elements/form-input-text';\r\nimport RowText from '../form-rows/row-text';\r\nimport Checkbox from '../../elements/form-input-checkbox';\r\n\r\nconst FormRetrievePassword = inject(\"stores\") (\r\n observer (\r\n class FormRetrievePassword extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeForms = this.props.stores.storeForms;\r\n\r\n this.state = {\r\n formControls: { \r\n email: {\r\n type: \"email\",\r\n value: this.props.email,\r\n validationRules: {\r\n isRequired: false,\r\n isEmail: false\r\n },\r\n validationMsg: i18n.t(\"form_errors.email\"),\r\n valid: false\r\n },\r\n sms: {\r\n label: i18n.t(\"forms.label.sms\"),\r\n value: 0,\r\n touched: false,\r\n validationRules: {},\r\n valid: true\r\n }\r\n },\r\n formIsValid: false,\r\n btn_class: (this.props.email !== '') ? '--active' : '--disabled',\r\n error: false,\r\n sms_count: 0\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUser.clearFormFeedback();\r\n }\r\n\r\n handleCheckboxChange = (event) => {\r\n const name = 'sms';\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n value: (parseInt(this.state.formControls[name].value) === 1 || this.state.formControls[name].value === \"on\") ? 0 : 1,\r\n selected: (parseInt(this.state.formControls[name].value) === 1 || this.state.formControls[name].value === \"on\") ? 0 : 1\r\n }\r\n }\r\n \r\n });\r\n }\r\n\r\n validateRow = (name, value, valid, touched) => { \r\n this.storeUi.clearFormFeedback();\r\n\r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid, touched);\r\n\r\n this.setState({\r\n error: null,\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = async() => {\r\n const formIsValid = this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n btn_class: formIsValid ? '--active' : '--disabled',\r\n formIsValid: formIsValid\r\n })\r\n }\r\n\r\n retrievePassword = (e) => {\r\n e.preventDefault();\r\n if (this.state.btn_class === '--active') {\r\n if (this.state.formControls.sms.value === 1) {\r\n let sms_count = this.state.sms_count + 1;\r\n this.setState({\r\n sms_count: sms_count,\r\n btn_class: '--disabled'\r\n })\r\n } else {\r\n this.setState({\r\n btn_class: '--disabled'\r\n }) \r\n }\r\n this.storeUi.retrievePassword(this.state.formControls, this.state.sms_count);\r\n }\r\n } \r\n\r\n render() {\r\n return (\r\n <TemplateForms\r\n type = 'verzoek'\r\n msg_success = {i18n.t(\"form_feedback.success_password\")}\r\n >\r\n <form className=\"form\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n (key == 'email' && this.state.formControls[key].type === \"email\") &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n validationMsg = {this.state.formControls[key].validationMsg}\r\n onValidate = {this.validateRow}\r\n onBlur = {this.validateRow}\r\n />\r\n ))}\r\n <div className=\"form-row form-row--feedback\">\r\n Na het versturen van je e-mailadres ontvang je een e-mail met instructies.<br/>\r\n <strong>Bij sommige providers kan dit langer duren dan per omgaand.<br/>Kijk ook in je spam-map.</strong>\r\n </div>\r\n \r\n {this.storeUi.checkFeature('SMS_PW') &&\r\n <React.Fragment>\r\n <div className=\"form-row form-row--feedback\">\r\n <h4>Of</h4>\r\n <span>Maak gebruik van onze extra service om je wachtwoord per SMS te ontvangen (indien je telefoonnummer bij ons bekend is).</span>\r\n </div>\r\n <div className=\"form-row form-row--input\">\r\n <Checkbox \r\n name = {'sms'} \r\n label = {this.state.formControls['sms'].label}\r\n value = {this.state.formControls['sms'].value}\r\n isSelected = {this.state.formControls['sms'].value}\r\n onCheckboxChange={this.handleCheckboxChange}\r\n className = {\"--reduced\"}\r\n />\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n {this.state.error &&\r\n <div className=\"form-row form-row--error\">\r\n <p>{i18n.t(\"errors.error_retrieve\")}</p>\r\n </div>\r\n } \r\n </form>\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.retrievePassword(e)}>{i18n.t(\"button.submit\")}</button>\r\n </div>\r\n </TemplateForms>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormRetrievePassword);\r\n","import React from 'react';\r\nimport i18n from \"i18next\";\r\n\r\nconst Salutation = (props) => {\r\n\r\n return (\r\n <span \r\n className=\"content__salutation\" \r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"inline_text.salutation\")}}\r\n />\r\n );\r\n}\r\n\r\nexport default Salutation;","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\nimport * as rdd from \"react-device-detect\";\r\n\r\nimport FormLogin from '../components/forms/form-login';\r\nimport FormRegister from '../components/forms/form-register';\r\nimport FormRetrievePassword from '../components/forms/form-retrieve-password';\r\nimport Salutation from '../elements/txt-salutation';\r\n\r\nconst Login = inject(\"stores\") (\r\n observer (\r\n class Login extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n redirect: this.storeUser.user_data.is_loggedin ? true : false,\r\n login: true,\r\n retrieve: false,\r\n email: ''\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n window.scrollTo(0, 0);\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveSubNav(0);\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUi.setReturnState(\"new_user\");\r\n }\r\n\r\n toggleSection = () => {\r\n this.setState({\r\n login: !this.state.login\r\n })\r\n }\r\n\r\n onNextAction = () => {\r\n let url;\r\n if (this.storeUi.app_interface.use_case === \"inorder\") {\r\n url = \"/shoppingcart\";\r\n this.props.history.push(url);\r\n } else {\r\n this.props.history.goBack();\r\n }\r\n }\r\n\r\n rememberEmail = (email) => {\r\n this.setState({\r\n email: email\r\n })\r\n }\r\n\r\n toggleRetrievePassword = (e) => {\r\n this.storeUser.clearFormFeedback();\r\n this.setState({\r\n retrieve: !this.state.retrieve\r\n })\r\n }\r\n \r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/\"} \r\n />;\r\n }\r\n\r\n const class_feature = this.storeUi.checkFeature('SHOP_ALL') ? '--feature-all' : ''\r\n const pos_top = this.storeUi.app_interface.height_header\r\n \r\n return (\r\n <div \r\n className={\"content-wrapper\" + ' ' + class_feature}\r\n style = {{marginTop: rdd.isMobile ? 0 : pos_top}}\r\n >\r\n <div className=\"content-wrapper__middle\">\r\n <div className=\"content-wrapper__content\">\r\n {!this.state.retrieve \r\n ? <div className=\"segment__header\">{i18n.t(\"header.login\")}</div>\r\n : <div className=\"segment__header\">{i18n.t(\"header.retrieve\")}</div>\r\n }\r\n </div>\r\n <div className=\"content-wrapper__content\">\r\n {!this.state.retrieve \r\n ? <React.Fragment>\r\n <div className={\"content-section--login \" + (this.state.login ? \"--active\" : '')}>\r\n <div className=\"content-section--login__column content-section--login__column--left\">\r\n <p className=\"content-section--login__header\">\r\n <strong>Bestaande klant of reeds gratis e-boeken gedownload?</strong><br/>\r\n Vul s.v.p. hieronder je gebruikte e-mailadres en wachtwoord in om in te loggen.\r\n </p>\r\n <FormLogin \r\n onNext = {this.onNextAction}\r\n rememberEmail = {this.rememberEmail}\r\n />\r\n <div className=\"form__alternative-actions\">\r\n <span className=\"link--read-more\" onClick={(e) => this.toggleRetrievePassword(e)}>Ben je je wachtwoord vergeten?</span> \r\n </div>\r\n </div>\r\n <div className=\"content-section--login__column content-section--login__column--right\">\r\n {this.storeUi.app_interface.return_state !== 'current_user' && (\r\n <React.Fragment>\r\n <p className=\"content-section--login__header\">\r\n <strong>Kennen we je nog niet?</strong><br/>\r\n <br/>\r\n {/* <span className=\"content__textlink\">\r\n <Link to=\"/register\">{i18n.t(\"pages.login.link_nologin\")}</Link>\r\n </span> */}\r\n {i18n.t(\"pages.login.link_nologin\")}\r\n </p>\r\n <FormRegister \r\n form = {'register'}\r\n want_newsletter = {true} \r\n show_subscription = {true}\r\n onNext = {this.onNextAction}\r\n />\r\n </React.Fragment>\r\n )\r\n }\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n\r\n : <div className=\"content-section--retrieve\">\r\n <FormRetrievePassword \r\n email = {this.state.email}\r\n />\r\n <div className=\"form__alternative-actions\">\r\n <span className=\"link--back\" onClick={(e) => this.toggleRetrievePassword(e)}>Terug</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n\r\n <div className=\"content-wrapper__content\">\r\n <Salutation />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(Login));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as ui from '../utilities/ui';\r\n\r\nimport Template from '../templates/template';\r\nimport FormRegister from '../components/forms/form-register';\r\n\r\nconst NewsletterSubscription = inject(\"stores\") (\r\n observer (\r\n class NewsletterSubscription extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUser = this.props.stores.storeUser;\r\n \r\n }\r\n\r\n componentDidMount = () => {\r\n window.scrollTo(0, 0);\r\n\r\n if (!this.storeUser.user_data.is_loggedin) {\r\n this.storeUi.setReturnState(\"new_user\");\r\n } else {\r\n this.storeUi.setReturnState(\"current_user\");\r\n }\r\n }\r\n\r\n componentDidUpdate = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n handleRoute = (e, url) => {\r\n e.preventDefault();\r\n if (url === '/login') {\r\n this.storeUi.setReturnState(\"current_user\");\r\n } else {\r\n this.storeUi.setReturnState(\"new_user\");\r\n }\r\n this.props.history.push(url);\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'single-column'\r\n header = \"free_newsletter\"\r\n > \r\n {!this.storeUser.user_data.is_loggedin && \r\n <React.Fragment>\r\n <div className=\"content-segment\"> \r\n <p>In deze nieuwsbrief delen we nieuws en informatie over de laatste ontwikkelingen op het gebied van gezondheid, voeding, niet-reguliere geneeswijzen en andere interessante zaken. Uiteraard komen ook de actualiteiten aan bod. Voor sommige mensen zal dit gesneden koek zijn, terwijl het voor andere mensen opzienbarend en soms zelfs confronterend kan zijn.</p>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <h2>Ben je nog niet bekend bij ons?</h2>\r\n <p>En wil je onze nieuwsbrief ontvangen? Vul dan onderstaand formulier in en klik op 'Aanmelden'.</p>\r\n <p>Het lijkt of we veel vragen, maar het is voor je eigen veiligheid.</p>\r\n <FormRegister \r\n form = {'newsletter'}\r\n want_newsletter = {true} \r\n show_subscription = {false}\r\n />\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <h2>Kennen we je e-mailadres al en heb je al een wachtwoord voor onze website?</h2>\r\n <p>Dan is het niet nodig om bovenstaand formulier in te vullen. In dat geval kun je inloggen en de instelling bij 'Mijn gegevens' aanpassen.</p>\r\n <span onClick={(e) => this.handleRoute(e, \"/login\")} className=\"link--read-more\">Ga naar inloggen</span>\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n {this.storeUser.user_data.is_loggedin && this.storeUi.app_interface.return_state === \"new_user\" && \r\n <React.Fragment>\r\n <div className=\"content-segment\">\r\n <span>Dank je voor je aanmelding. We houden je graag op de hoogte van nieuwe uitgaven en nieuws omtrent Succesboeken.nl.</span>\r\n </div>\r\n </React.Fragment>\r\n }\r\n \r\n {this.storeUser.user_data.is_loggedin && this.storeUser.user_data.profile.has_subscription !== '1' && this.storeUser.user_data.profile.has_subscription !== 'on' && this.storeUi.app_interface.return_state === \"current_user\" &&\r\n <div className=\"content-segment\"> \r\n <p>Wil je onze gratis nieuwsbrief ontvangen en op de hoogte blijven van onze nieuwe uitgaven en ander nieuws?</p>\r\n <p>Pas de instelling op de pagina 'Mijn gegevens' aan door het vakje bij 'Ik ontvang graag de nieuwsbrief' aan te vinken.</p>\r\n <span onClick={(e) => this.handleRoute(e, \"/account\")} className=\"link--read-more\">Ga naar 'Mijn gegevens'</span>\r\n </div>\r\n }\r\n\r\n {this.storeUser.user_data.is_loggedin && (this.storeUser.user_data.profile.has_subscription === '1' || this.storeUser.user_data.profile.has_subscription === 'on') && this.storeUi.app_interface.return_state === \"current_user\" &&\r\n <div className=\"content-segment\"> \r\n <p>Je hebt reeds aangegeven dat je onze nieuwsbrief wilt ontvangen en op de hoogte wilt blijven van onze nieuwe uitgaven en ander nieuws.</p>\r\n <p>Eventueel kun je zelf deze instelling op de pagina 'Mijn gegevens' aanpassen.</p>\r\n <span onClick={(e) => this.handleRoute(e, \"/account\")} className=\"link--read-more\">Ga naar 'Mijn gegevens'</span>\r\n </div>\r\n }\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(NewsletterSubscription);\r\n","import React, { Component } from 'react';\r\nimport { runInAction, reaction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport TemplateForms from '../../templates/template-forms';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport TextInput from '../../elements/form-input-text';\r\n\r\nconst FormNewslettersSearch = inject(\"stores\") (\r\n observer (\r\n class FormNewslettersSearch extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n formControls: { \r\n sarchTerm: {\r\n label: i18n.t(\"forms.label.search_newsletters\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.search_newsletters\"),\r\n touched: false,\r\n validationRules: {\r\n },\r\n validationMsg: i18n.t(\"form_errors.search_newsletters\"),\r\n required: false\r\n }\r\n },\r\n formIsValid: false,\r\n btn_class: '--disabled',\r\n error: false\r\n }\r\n }\r\n\r\n componentDidMount = () => { \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n let updatedFormElement = {};\r\n\r\n Object.keys(this.state.formControls).map((key, i) => {\r\n updatedFormElement = {\r\n ...updatedControls[key]\r\n };\r\n\r\n updatedFormElement.value = this.state.formControls[key].value;\r\n if (updatedFormElement.value !== null && updatedFormElement.value !== undefined) {\r\n updatedFormElement.valid = validate(updatedFormElement.value, updatedFormElement.validationRules);\r\n }\r\n updatedControls[key] = updatedFormElement;\r\n });\r\n \r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n }); \r\n }\r\n\r\n handleChange = (event) => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n }); \r\n\r\n this.storeUser.clearFormFeedback();\r\n }\r\n\r\n searchNewsletters = () => {\r\n this.props.searchNewsletters(this.state.formControls.sarchTerm.value);\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <React.Fragment>\r\n <div \r\n className=\"search-newsletters__form\"\r\n >\r\n <div \r\n className=\"search-newsletters__input\"\r\n >\r\n <form\r\n className=\"form\"\r\n >\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <div className=\"form-row form-row--input\" key={i}>\r\n <label className={\"form-label\" + (this.state.formControls[key].required ? ' --required' : '')}>{this.state.formControls[key].label}</label>\r\n <TextInput \r\n name = {key} \r\n placeholder = {this.state.formControls[key].placeholder}\r\n value = {this.state.formControls[key].value}\r\n touched = {this.state.formControls[key].touched}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls[key].valid}\r\n msg = {this.state.formControls[key].validationMsg}\r\n is_secret = {this.state.formControls[key].is_secret}\r\n secret = {this.state.formControls[key].secret ? true: false} \r\n showSecret = {() => this.showSecret(key)}\r\n />\r\n </div>\r\n ))}\r\n </form>\r\n </div>\r\n\r\n <div \r\n className=\"search-newsletters__button\"\r\n >\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.searchNewsletters(e)}>{i18n.t(\"button.search\")}</button>\r\n </div>\r\n </div>\r\n \r\n {this.storeUser.form_feedback &&\r\n <div className=\"form__feedback\">\r\n {'success' in this.storeUser.form_feedback &&\r\n <span>{i18n.t(\"form_feedback.success_unsubscribe\")}</span>\r\n }\r\n {'error' in this.storeUser.form_feedback &&\r\n <span>{this.storeUser.form_feedback['error']}</span>\r\n }\r\n </div>\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormNewslettersSearch);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { Redirect } from 'react-router';\r\n\r\nconst SearchResultNewsletters = inject(\"stores\") (\r\n observer (\r\n class SearchResultNewsletters extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n redirect: false\r\n };\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = async() => {\r\n }\r\n\r\n handleClick = (link, wk, view) => {\r\n const url = link;\r\n const newsletter = wk;\r\n\r\n this.props.handleClick(url, newsletter, view);\r\n }\r\n\r\n clearResults = () => {\r\n this.props.clearResults();\r\n }\r\n\r\n render() {\r\n return (\r\n <div\r\n className = 'search-newsletters'\r\n >\r\n {this.props.searchValue !== '' &&\r\n <React.Fragment>\r\n {this.props.searchResult.length > 0\r\n ? <React.Fragment>\r\n <div\r\n className = 'search-newsletters__header'\r\n >\r\n De volgende linken met betrekking tot \"{this.props.searchValue}\" zijn gevonden: \r\n <span\r\n className = \"search-newsletters__clear --link\"\r\n onClick = {() => this.clearResults()}\r\n >\r\n Verwijder resultaten\r\n </span>\r\n </div>\r\n\r\n {this.props.searchResult.map((result, i) => (\r\n <React.Fragment>\r\n {(i === 0 || (i >= 1 && this.props.searchResult[i].file !== this.props.searchResult[i - 1].file))\r\n ? <div\r\n className = {'search-newsletters__result search-newsletters__result--first' + (i!== 0 ? \" --listitem\" : \"\")}\r\n >\r\n <span\r\n className = 'search-newsletters__file --link'\r\n onClick = {() => this.handleClick(result.file, result.file.substring(7, 11), 'web')}\r\n >\r\n <span\r\n className = 'search-newsletters__date'\r\n >\r\n {result.date}\r\n <span>{result.wk}</span>\r\n </span>\r\n\r\n </span>\r\n <span\r\n className = 'search-newsletters__match'\r\n >\r\n <span\r\n className = 'search-newsletters__match--content'\r\n dangerouslySetInnerHTML={{ __html: result.match}}\r\n />\r\n </span>\r\n </div>\r\n \r\n : <div\r\n className = 'search-newsletters__result'\r\n >\r\n <span\r\n className = 'search-newsletters__file'\r\n />\r\n <span\r\n className = 'search-newsletters__match'\r\n >\r\n <span\r\n className = 'search-newsletters__match--content'\r\n dangerouslySetInnerHTML={{ __html: result.match}}\r\n />\r\n </span>\r\n </div>\r\n }\r\n </React.Fragment>\r\n ))}\r\n \r\n </React.Fragment>\r\n : <div\r\n className = 'search-newsletters__header'\r\n >\r\n Er zijn geen resultaten gevonden\r\n </div>\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchResultNewsletters);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport moment from \"moment\";\r\nimport localization from 'moment/locale/nl';\r\nimport {isIOS} from 'react-device-detect';\r\nimport queryString from 'query-string';\r\n\r\nimport Template from '../templates/template';\r\nimport FormNewslettersSearch from '../components/forms/form-newsletters-search';\r\nimport SearchResultNewsletters from '../components/search/search-result-newsletters';\r\n\r\nconst NewslettersOverview = inject(\"stores\") (\r\n observer (\r\n class NewslettersOverview extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n \r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n neswletter: {},\r\n searchValue: ''\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n let url;\r\n const newsletters = await this.storeUi.getNewsletters();\r\n\r\n if (this.props.match.params.week) {\r\n let wk = this.props.match.params.week;\r\n \r\n const idx = newsletters.findIndex(newsletter => newsletter.tag === ('mailing' + wk));\r\n const newsletter = newsletters[idx];\r\n this.storeUi.setActiveNewsletter(newsletter);\r\n\r\n const search_term = await (async() => this.getSearchParams(this.props.location.search) )();\r\n\r\n if (search_term == 'pdf') {\r\n //if (this.state.newsletter.has_pdf === 1 && this.state.newsletter.has_php === 1) {\r\n // url = this.urlAPI + \"/\" + this.state.newsletter.dir + \"/wk\" + this.state.newsletter.week + \".php?origin=site\";\r\n url = this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".php?origin=site\";\r\n // } else {\r\n // url = this.state.url;\r\n // }\r\n } else {\r\n //if (this.state.newsletter.has_html === 1) {\r\n //url = this.state.newsletter.url;\r\n // } else {\r\n url = this.urlAPI + \"/newsletters/newsletter.php?mailing=mailing\" + wk + \"&origin=site\";\r\n // }\r\n }\r\n this.storeUi.openDialogNewsletter(url);\r\n }\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n let url;\r\n if (this.props.match.params.week || prevProps.match.params.week !== this.props.match.params.week) {\r\n document.body.classList.add('dialog-open');\r\n let wk = this.props.match.params.week;\r\n \r\n if (this.state.newsletter) {\r\n if (this.state.view == 'pdf') {\r\n if (this.state.newsletter.has_pdf === 1 && this.state.newsletter.has_php === 1) {\r\n url = this.urlAPI + \"/\" + this.state.newsletter.dir + \"/wk\" + this.state.newsletter.week + \".php?origin=site\";\r\n } else {\r\n url = this.state.url;\r\n }\r\n } else {\r\n if (this.state.newsletter.has_html === 1) {\r\n url = this.state.newsletter.url;\r\n } else {\r\n url = this.urlAPI + \"/newsletters/newsletter.php?mailing=mailing\" + wk + \"&origin=site\";\r\n }\r\n }\r\n this.storeUi.openDialogNewsletter(url);\r\n }\r\n }\r\n\r\n if (!this.props.match.params.week) {\r\n this.storeUi.closeDialogNewsletter();\r\n }\r\n }\r\n\r\n getSearchParams = async(searchString) => {\r\n const params = queryString.parse(searchString)\r\n let search_term;\r\n\r\n if (params.view) {\r\n search_term = params.view;\r\n }\r\n\r\n return search_term;\r\n }\r\n \r\n convertWeek = (weeknr) => {\r\n let year = '20'+ weeknr.substring(0, 2);\r\n let week = weeknr.substring(2, 4);\r\n let date = year + '-'+ week;\r\n let day = moment(date, \"YYYY-w\").weekday(4).format(\"LL\");\r\n\r\n return day;\r\n }\r\n\r\n handleClick = (url, newsletter, view) => {\r\n this.setState({\r\n newsletter: newsletter,\r\n view: view,\r\n url: url\r\n });\r\n\r\n console.log('sBC newsletter', newsletter)\r\n this.storeUi.setActiveNewsletter(newsletter);\r\n document.body.classList.add('dialog-open');\r\n\r\n const wk = newsletter.week;\r\n const url_dialog = '/overview-newsletters/' + wk + '?view=' + view;\r\n this.props.history.push(url_dialog);\r\n }\r\n\r\n handleClickFromSearch = (url, week, view) => {\r\n // this.setState({\r\n // newsletter: newsletter,\r\n // view: view,\r\n // url: url\r\n // });\r\n\r\n let newsletter = [];\r\n newsletter.week = week;\r\n\r\n this.storeUi.setActiveNewsletter(newsletter);\r\n document.body.classList.add('dialog-open');\r\n\r\n const wk = newsletter.week;\r\n const url_dialog = '/overview-newsletters/' + wk + '?view=' + view;\r\n this.props.history.push(url_dialog);\r\n }\r\n\r\n handleClickOutside = (url, newsletter, view) => {\r\n this.setState({\r\n newsletter: newsletter,\r\n view: view,\r\n url: url\r\n });\r\n\r\n this.storeUi.setActiveNewsletter(newsletter);\r\n // document.body.classList.add('dialog-open');\r\n\r\n // const wk = newsletter.week;\r\n // const url_dialog = '/overview-newsletters/' + wk + '?view=' + view;\r\n // this.props.history.push(url_dialog);\r\n\r\n window.open(url);\r\n }\r\n\r\n searchNewsletters = async(value) => {\r\n const searchResult = await this.storeUi.getSearchResultsNewsletter(value);\r\n\r\n this.setState({\r\n searchValue: value,\r\n searchResult: searchResult\r\n })\r\n }\r\n\r\n clearResults = () => {\r\n console.log('SbC clear')\r\n this.setState({\r\n searchValue: '',\r\n searchResult: []\r\n })\r\n }\r\n\r\n render() {\r\n let newsletter_list = []\r\n newsletter_list = this.storeUi.newsletters;\r\n\r\n return (\r\n <Template\r\n type = 'single-column'\r\n header = \"newsletter_overview\"\r\n >\r\n <div className=\"content-wrapper__segment content-wrapper__segment--search-newsletters\">\r\n <div\r\n className = 'search-newsletters__header'\r\n >\r\n Ben je op zoek naar een link uit één van onze vorige nieuwsbrieven?\r\n <span>(vanaf mei 2021)</span>\r\n </div>\r\n <FormNewslettersSearch\r\n searchNewsletters = {this.searchNewsletters}\r\n />\r\n <SearchResultNewsletters\r\n searchValue = {this.state.searchValue}\r\n searchResult = {this.state.searchResult}\r\n handleClick = {this.handleClickFromSearch}\r\n clearResults = {this.clearResults}\r\n />\r\n </div>\r\n \r\n <div className=\"content-wrapper__segment\">\r\n <div\r\n className = 'search-newsletters__header'\r\n >\r\n Hieronder tref je een overzicht van de wekelijks verzonden nieuwsbrieven van dit jaar en eerder.\r\n </div>\r\n <ul className=\"newsletters__list\">\r\n {newsletter_list.length > 0 && newsletter_list.map((newsletter, i) => (\r\n newsletter.show_on_sb !== 0 &&\r\n <li>\r\n {newsletter.has_file\r\n ? <div className=\"newsletters__listitem\">\r\n <span className=\"newsletter__subtitle\">\r\n {this.convertWeek(newsletter.week)}\r\n <span>wk{newsletter.week}</span>\r\n </span>\r\n {parseInt(newsletter.week) >= 2105 &&\r\n <div className=\"newsletter__title-container\">\r\n <span className=\"newsletter__title\">\r\n {newsletter.title !== null && newsletter.title !== ''\r\n ? newsletter.title\r\n : 'Nieuwsbrief'\r\n } \r\n </span>\r\n <span className=\"newsletter__actions\">\r\n {(newsletter.has_php === 1 && newsletter.title !== null && newsletter.title !== '') &&\r\n <span className=\"link--read-more --link\" onClick={() => this.handleClick(this.urlAPI + \"/newsletters/newsletter.php?mailing=mailing\" + newsletter.week + \"&origin=site\", newsletter, 'web')}>web</span>\r\n }\r\n {newsletter.has_pdf === 1 && (\r\n <React.Fragment>\r\n {isIOS \r\n ? <a href={this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".php?origin=site\"} target=\"_blank\">\r\n pdf\r\n </a>\r\n : <span className=\"link--read-more --link\" onClick={() => this.handleClick(this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".php?origin=site\", newsletter, 'pdf')}>\r\n pdf\r\n </span>\r\n }\r\n </React.Fragment>\r\n )}\r\n </span>\r\n\r\n {this.storeAuth.user.is_loggedin && this.storeAuth.user.is_admin &&\r\n <ul className=\"newsletters__list--admin\">\r\n {(newsletter.has_php === 1 && newsletter.title !== null && newsletter.title !== '') &&\r\n <li>\r\n <span className=\"newsletter__php --link\" onClick={() => this.handleClick(this.urlAPI + \"/newsletters/newsletter.php?mailing=mailing\" + newsletter.week + \"&origin=site\", newsletter, 'web')}>\r\n {this.urlAPI + \"/newsletters/newsletter.php?mailing=mailing\" + newsletter.week}\r\n </span>\r\n </li>\r\n }\r\n\r\n <li>\r\n <a \r\n href={this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".pdf\"} \r\n className=\"newsletter__title newsletter__pdf\" target=\"_blank\"\r\n >\r\n {(newsletter.title !== null && newsletter.title !== '') &&\r\n this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".pdf\"\r\n }\r\n </a>\r\n </li>\r\n </ul>\r\n }\r\n </div>\r\n }\r\n {(parseInt(newsletter.week) >= 2030 && parseInt(newsletter.week) < 2105) && (\r\n isIOS \r\n ? <a href={this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".pdf\"} target=\"_blank\">\r\n {newsletter.title !== null && newsletter.title !== ''\r\n ? newsletter.title\r\n : 'Nieuwsbrief'\r\n }\r\n </a>\r\n : <div className=\"newsletter__title-container\">\r\n {/* <span \r\n className=\"newsletter__title --link\" \r\n onClick={() => this.handleClick(this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".pdf\", newsletter, 'pdf')}\r\n >\r\n {newsletter.title !== null && newsletter.title !== ''\r\n ? newsletter.title\r\n : 'Nieuwsbrief'\r\n }\r\n </span>\r\n {this.storeAuth.user.is_loggedin && this.storeAuth.user.is_admin &&\r\n <a href={this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".pdf\"} className=\"newsletter__pdf\" target=\"_blank\">\r\n {(newsletter.title !== null && newsletter.title !== '') &&\r\n this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".pdf\"\r\n }\r\n </a>\r\n } */}\r\n <a \r\n href={this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".pdf\"} \r\n className=\"newsletter__title newsletter__pdf\" target=\"_blank\"\r\n >\r\n {newsletter.title !== null && newsletter.title !== ''\r\n ? newsletter.title\r\n : 'Nieuwsbrief'\r\n }\r\n </a>\r\n {this.storeAuth.user.is_loggedin && this.storeAuth.user.is_admin &&\r\n <a \r\n href={this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".pdf\"} \r\n className=\"newsletter__title newsletter__pdf\" target=\"_blank\"\r\n >\r\n {(newsletter.title !== null && newsletter.title !== '') &&\r\n this.urlAPI + \"/\" + newsletter.dir + \"/wk\" + newsletter.week + \".pdf\"\r\n }\r\n </a>\r\n }\r\n </div>\r\n )}\r\n {parseInt(newsletter.week) < 2030 &&\r\n <div className=\"newsletter__title-container\">\r\n <span \r\n className=\"newsletter__title --link\" \r\n onClick={() => this.handleClickOutside(newsletter.url, newsletter, 'web')}\r\n >\r\n {newsletter.title !== null && newsletter.title !== ''\r\n ? newsletter.title\r\n : 'Nieuwsbrief'\r\n }\r\n </span>\r\n {this.storeAuth.user.is_loggedin && this.storeAuth.user.is_admin &&\r\n <a \r\n href={newsletter.url} \r\n className=\"newsletter__title newsletter__pdf\" \r\n target=\"_blank\"\r\n >\r\n {newsletter.url}\r\n </a>\r\n }\r\n </div>\r\n }\r\n </div>\r\n : <div className=\"newsletters__listitem\">\r\n <span className=\"newsletter__subtitle\">{this.convertWeek(newsletter.week)}</span>\r\n <span className=\"newsletter__title\">{newsletter.title}</span>\r\n </div>\r\n }\r\n {!newsletter.has_file &&\r\n <span className=\"newsletter__sub\">(Deze nieuwsbrief is momenteel niet beschikbaar)</span>\r\n }\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(NewslettersOverview);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport {withRouter} from 'react-router';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../templates/template';\r\nimport ContentText from '../components/content/content-text';\r\n\r\nimport BlocksBooks from '../components/blocks/blocks-books';\r\n\r\nconst TabCompany = inject(\"stores\") (\r\n observer (\r\n class TabCompany extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n view: this.props.view\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount = () => {\r\n this.storeUi.getBookCountForBooksSB('SHOP_SB', this.storeUi.page_view);\r\n }\r\n\r\n renderView(view) { \r\n switch(view) {\r\n case \"our_books\":\r\n default:\r\n return (\r\n <div className=\"content-wrapper__segment\">\r\n <p>Van onze eigen uitgaven is altijd een inkijkexemplaar van ten minste het eerste hoofdstuk beschikbaar.</p>\r\n \r\n <BlocksBooks \r\n blockTitle = {i18n.t(\"blocks.own_books.header\")}\r\n type = \"sb\"\r\n page = \"our-publications\"\r\n />\r\n </div>\r\n )\r\n case \"tips\":\r\n return (\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"tip-book\"}\r\n />\r\n </div>\r\n ) \r\n case \"own_book\":\r\n return (\r\n <div className=\"content-wrapper__segment\">\r\n <ContentText\r\n page = {\"own-book\"}\r\n />\r\n </div>\r\n \r\n )\r\n }\r\n }\r\n \r\n\r\n render() {\r\n return (\r\n this.renderView(this.props.view)\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst OurPublications = inject(\"stores\") (\r\n observer (\r\n class OurPublications extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeSearch = this.props.stores.storeSearch;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.controller = new AbortController();\r\n this.signal = this.controller.signal;\r\n\r\n this.state = ({\r\n view: \"our_books\",\r\n scroll: true\r\n })\r\n\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveToggleNav(1);\r\n }\r\n\r\n componentDidMount = async() => {\r\n if (this.storeSearch.getSearchViewPos() !== 0) {\r\n\r\n } else {\r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.setPageView('inview', 250);\r\n }\r\n \r\n const page_view = this.storeUi.page_view;\r\n const books = this.storeBooks.getBooksWithAbort('SHOP_SB', page_view, this.controller, this.signal);\r\n\r\n this.setState({\r\n query: books\r\n })\r\n books.then((result) => { \r\n this.storeBooks.setBookListSb(result.data);\r\n // this.setState({\r\n // bookList: result.data\r\n // })\r\n });\r\n\r\n this.handleScroll();\r\n if ( this.props.match.params.tab !== undefined) {\r\n this.setState({\r\n view: this.props.match.params.tab\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (this.state.scroll) {\r\n this.handleScroll();\r\n }\r\n if (prevProps.match.params.tab !== this.props.match.params.tab) {\r\n this.setState({\r\n view: this.props.match.params.tab\r\n });\r\n } \r\n\r\n this.storeUi.setFreezeScrolling(false);\r\n }\r\n\r\n // componentWillUnmount = () => {\r\n // this.state.query.cancel();\r\n // this.storeUi.setPageView('inview', 25);\r\n\r\n // const position = window.pageYOffset;\r\n // this.storeUi.setFreezePos(position);\r\n // }\r\n\r\n componentWillUnmount = () => {\r\n const position = window.pageYOffset;\r\n //this.storeUi.setFreezePos(position);\r\n\r\n this.storeSearch.setSearchViewPos(position);\r\n this.storeSearch.setSearchViewPage(this.storeUi.page_view.page);\r\n }\r\n\r\n handleScroll = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n handleContentTab = (e, view) => {\r\n this.storeUi.setActiveToggleNav(1);\r\n\r\n let tab = \"/our-publications/\" + view;\r\n this.props.history.push(tab);\r\n this.setState({\r\n view: view,\r\n scroll: false\r\n })\r\n }\r\n \r\n render() {\r\n const Li = (view) => {\r\n const activeClass = ((view.view === this.state.view) || (view.view == 'our_books' && this.state.view == undefined)) ? ' --active' : '';\r\n return (\r\n <li className={\"content-tabs__listitem content-tabs__listitem--\" + view.view + activeClass} onClick={(e) => this.handleContentTab(e, view.view)}>\r\n <span>{i18n.t(\"tabs.\" + view.view)}</span>\r\n </li>\r\n )\r\n }\r\n\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"books_sb\"}\r\n expanded = {[\"authors\"]}\r\n nav_name = {\"books_sb\"}\r\n useScroll = {true}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"our-company\"}\r\n />\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"segment__content\">\r\n <div className=\"book__tabs\">\r\n <ul className=\"content-tabs__list\">\r\n <Li \r\n view = 'our_books'\r\n />\r\n <Li \r\n view = 'tips'\r\n />\r\n <Li \r\n view = 'own_book'\r\n />\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <TabCompany\r\n view = {this.state.view}\r\n />\r\n </div> \r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(OurPublications);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst ContentDialog = inject(\"stores\") (\r\n observer (\r\n class ContentDialog extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n render() {\r\n return (\r\n this.props.children\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst OwnBook = inject(\"stores\") (\r\n observer (\r\n class OwnBook extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0);\r\n this.storeUi.setActiveMainNav(2);\r\n }\r\n\r\n openDialogSpecs = () => {\r\n this.storeUi.setContentComponent(\r\n <ContentDialog\r\n className = \"content-scrollable\"\r\n >\r\n <img src={this.urlAPI + \"/public/images/content/opmaakspec_manuscript.jpg\"} className=\"full-size\"/>\r\n </ContentDialog>\r\n )\r\n this.storeUi.openDialogContent();\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"own_book\"}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"own-book\"}\r\n dialog = {<ContentDialog\r\n className = \"content-scrollable\"\r\n >\r\n <img src={this.urlAPI + \"/public/images/content/opmaakspec_manuscript.jpg\"} className=\"full-size\"/>\r\n </ContentDialog>\r\n }\r\n dialog_linktext = \"Bekijk hier meer specificaties\"\r\n dialog_position = {2} \r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default OwnBook;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport {Player, ControlBar, ClosedCaptionButton, BigPlayButton} from 'video-react';\r\nimport '../assets/css/video-react.css';\r\n\r\nconst Video = inject(\"stores\") (\r\n observer (\r\n class Video extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.urlAPP = process.env.REACT_APP_URL;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n if (this.urlAPP === 'http://localhost:3000') {\r\n this.loc_cc = \"./cc/\";\r\n } else {\r\n this.loc_cc = \"../api/public/videos/cc/\";\r\n }\r\n\r\n this.state = {\r\n active_video_cc: \"showing\",\r\n paused: true\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n this.player.subscribeToStateChange(this.handleStateChange);\r\n \r\n if (this.props.location === 'popup') { \r\n if (this.props.current_state) {\r\n this.player.seek(this.props.current_state.currentTime);\r\n }\r\n\r\n if (this.props.idx === this.storeUi.active_video) {\r\n if (this.storeUi.active_video_location === 'popup') {\r\n if (this.storeUi.isDialogVideoOpen) {\r\n if (this.storeUi.active_video_playing) {\r\n this.play();\r\n } else {\r\n this.pause();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (this.props.location === 'list') { \r\n if (this.props.idx === this.storeUi.active_video) {\r\n if (this.storeUi.active_video_location === 'popup') {\r\n if (this.storeUi.isDialogVideoOpen) {\r\n if (this.storeUi.active_video_playing) {\r\n this.play();\r\n } else {\r\n this.pause();\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n if (this.props.location === 'popup') { \r\n this.storeUi.setActiveVideo(this.props.idx - 100);\r\n this.storeUi.setActiveVideoLocation('list');\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n //SbC stopping other videos when video idx starts\r\n if (this.props.location === 'list' && this.storeUi.active_video !== this.props.idx) {\r\n this.pause();\r\n }\r\n\r\n if (this.props.location === 'list' && this.props.location === this.storeUi.active_video_location) {\r\n if (this.storeUi.active_video_playing) {\r\n if (this.props.idx == this.storeUi.active_video) {\r\n this.player.play();\r\n }\r\n }\r\n }\r\n\r\n if (prevProps.active_video_location !== this.props.active_video_location) {\r\n if (this.props.active_video_location === 'list') {\r\n if (this.props.idx === this.storeUi.active_video) {\r\n this.player.seek(this.props.current_state.currentTime);\r\n }\r\n }\r\n }\r\n\r\n if (prevProps.active_video_cc !== this.props.active_video_cc) {\r\n this.setState({\r\n active_video_cc: this.props.active_video_cc\r\n })\r\n }\r\n }\r\n\r\n handleStateChange = (state, prevState) => { \r\n if (this.props.location === 'list') { \r\n if (this.storeUi.active_video_location === 'list') { \r\n if (state.paused) {\r\n if (this.props.idx === this.storeUi.active_video) {\r\n this.storeUi.setActiveVideoPlaying(false);\r\n this.pause();\r\n this.setState({\r\n paused: state.paused\r\n })\r\n } else {\r\n this.pause();\r\n } \r\n }\r\n\r\n\r\n if (!state.paused) {\r\n this.storeUi.setActiveVideo(this.props.idx);\r\n this.storeUi.setActiveVideoPlaying(true);\r\n this.player.play();\r\n this.setState({\r\n paused: false\r\n })\r\n }\r\n } \r\n }\r\n\r\n if (this.props.location === 'popup') { \r\n if (this.storeUi.active_video_location === 'popup') { \r\n if (!state.paused) {\r\n this.storeUi.setActiveVideoPlaying(true);\r\n }\r\n\r\n if (state.paused) {\r\n this.storeUi.setActiveVideoPlaying(false);\r\n }\r\n } else {\r\n this.player.pause();\r\n }\r\n }\r\n\r\n if (state && state.textTracks) {\r\n state.textTracks[0].mode = this.state.active_video_cc;\r\n }\r\n\r\n this.setState({\r\n player: state,\r\n currentTime: state.currentTime\r\n });\r\n\r\n this.props.handleVideoState(state);\r\n }\r\n\r\n handleCC = () => {\r\n\r\n }\r\n\r\n play = () => {\r\n this.player.play();\r\n }\r\n \r\n pause() {\r\n this.player.pause();\r\n }\r\n \r\n load() {\r\n this.player.load();\r\n }\r\n \r\n ref = player => {\r\n this.player = player;\r\n }\r\n\r\n render() {\r\n return (\r\n <Player\r\n ref = {this.ref}\r\n poster = {this.props.video.poster}\r\n key = {this.props.video.url}\r\n preload=\"none\"\r\n >\r\n <source \r\n src = {this.props.video.url} \r\n preload=\"none\"\r\n />\r\n <track\r\n kind = \"captions\"\r\n src = {this.loc_cc + this.props.video.cc_file + \".vtt\"} \r\n srcLang = \"en\"\r\n label = \"Engels\"\r\n default = {this.state.active_video_cc === 'showing' ? true : false}\r\n /> \r\n {(this.props.video.cc_file !== '' && this.props.video.cc_file !== null) &&\r\n <ControlBar \r\n autoHide = {true}\r\n >\r\n </ControlBar>\r\n }\r\n </Player>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(Video);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Video from '../../elements/video';\r\n\r\nconst ContentDialog = inject(\"stores\") (\r\n observer (\r\n class ContentDialog extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n active_video_cc: this.props.active_video_cc\r\n }\r\n }\r\n\r\n handleVideoCC = (cc) => { \r\n this.setState({\r\n active_video_cc: cc\r\n })\r\n this.props.handleVideoCC(cc);\r\n }\r\n\r\n componentDidMount = () => {\r\n this.storeUi.setActiveVideoLocation('popup');\r\n }\r\n\r\n componentWillUnmount = () => {\r\n // console.log('SbC unmounting')\r\n // this.storeUi.setActiveVideoDialog(false);\r\n // this.storeUi.setActiveVideoLocation('list');\r\n }\r\n\r\n setVideoPlaying = (playing) => {\r\n this.props.setVideoPlaying(playing);\r\n }\r\n\r\n render() {\r\n const childrenWithProps = React.Children.map(this.props.children, (child, index) => {\r\n return React.cloneElement(child, {\r\n location: 'popup',\r\n active_video_cc: this.state.active_video_cc\r\n });\r\n });\r\n\r\n return (\r\n <React.Fragment>\r\n {childrenWithProps}\r\n\r\n <div \r\n className=\"block--video__actions\" \r\n >\r\n {this.props.video.has_cc_file == 1 &&\r\n <div \r\n className = {\"block--video__cc --link\" + (this.state.active_video_cc == \"showing\" ? \" --active\" : \"\")}\r\n onClick = {(e) => this.handleVideoCC(this.state.active_video_cc == 'showing' ? 'hidden' : 'showing')}\r\n >\r\n cc\r\n </div>\r\n }\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst BlockVideo = inject(\"stores\") (\r\n observer (\r\n class BlockVideo extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n active_video_location: 'list',\r\n active_video_playing: false,\r\n active_video_cc: 'showing',\r\n isPlaying: false,\r\n isDialogVideoOpen: false\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n\r\n }\r\n\r\n handleClickEnlargeVideo = (video) => {\r\n this.storeUi.setActiveVideo(this.props.idx + 100);\r\n this.storeUi.setActiveVideoLocation('popup');\r\n this.setState({\r\n active_video_location: 'popup',\r\n isDialogVideoOpen: true\r\n }, () => this.openDialog()); \r\n }\r\n \r\n // changeCurrentTime(seconds) {\r\n // return () => {\r\n // const { player } = this.player.getState();\r\n // this.player.seek(player.currentTime + seconds);\r\n // };\r\n // }\r\n \r\n handleVideoState = (state) => {\r\n this.setState({\r\n player: state\r\n })\r\n }\r\n\r\n handleVideoPlaying = (playing) => {\r\n this.setState({\r\n active_video_playing: playing\r\n })\r\n }\r\n\r\n setVideoPlaying = (playing) => {\r\n this.setState({\r\n isPlaying: playing\r\n })\r\n }\r\n \r\n setDialogVideoOpen = (value) => {\r\n this.setState({\r\n isDialogVideoOpen: value\r\n })\r\n }\r\n\r\n handleVideoCC = (cc) => { \r\n this.setState({\r\n active_video_cc: cc\r\n })\r\n }\r\n\r\n openDialog = async() => {\r\n let isOpen = await this.storeUi.setContentComponent(\r\n <ContentDialog\r\n className = \"content-video\"\r\n video = {this.props.video}\r\n active_video_cc = {this.state.active_video_cc}\r\n handleVideoCC = {this.handleVideoCC}\r\n setDialogVideoOpen = {this.setDialogVideoOpen}\r\n //setVideoPlaying = {this.setVideoPlaying}\r\n location = {'popup'}\r\n isPlaying = {this.props.isPlaying}\r\n >\r\n <Video\r\n location = 'popup'\r\n idx = {this.props.idx + 100}\r\n video = {this.props.video}\r\n active_video = {this.storeUi.active_video}\r\n active_video_cc = {this.state.active_video_cc}\r\n active_video_location = {this.storeUi.active_video_location}\r\n current_state = {this.state.player}\r\n handleVideoState = {this.handleVideoState}\r\n handleVideoPlaying = {this.handleVideoPlaying}\r\n handleVideoCC = {this.handleVideoCC}\r\n isDialogVideoOpen = {this.state.isDialogVideoOpen}\r\n isPlaying = {this.props.isPlaying}\r\n setDialogVideoOpen = {this.setDialogVideoOpen}\r\n setVideoPlaying = {this.setVideoPlaying}\r\n />\r\n \r\n </ContentDialog> \r\n );\r\n\r\n this.storeUi.openDialogVideo();\r\n this.setDialogVideoOpen();\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"block--video\">\r\n <div className=\"content-segment__content\">\r\n <div className=\"block--video__player\">\r\n <Video\r\n location = 'list'\r\n idx = {this.props.idx}\r\n video = {this.props.video}\r\n active_video = {this.storeUi.active_video}\r\n active_video_cc = {this.state.active_video_cc}\r\n active_video_location = {this.storeUi.active_video_location}\r\n current_state = {this.state.player}\r\n handleVideoState = {this.handleVideoState}\r\n handleVideoCC = {this.handleVideoCC}\r\n isDialogVideoOpen = {this.state.isDialogVideoOpen}\r\n isPlaying = {this.state.isPlaying}\r\n setDialogVideoOpen = {this.setDialogVideoOpen}\r\n setVideoPlaying = {this.setVideoPlaying}\r\n />\r\n </div>\r\n \r\n <div className=\"block--video__description\">\r\n <div className=\"content-segment__header\">\r\n <h2 dangerouslySetInnerHTML={{ __html: this.props.video.title}}/>\r\n <span \r\n className=\"content-segment__subtitle\" \r\n dangerouslySetInnerHTML={{ __html: this.props.video.subtitle}}\r\n />\r\n\r\n {this.props.video.language === \"DE\" &&\r\n <div className=\"content-segment__specs\">Duitstalig</div>\r\n }\r\n {this.props.video.language === \"FR\" &&\r\n <div className=\"content-segment__specs\">Franstalig</div>\r\n }\r\n {this.props.video.language === \"EN\" &&\r\n <div className=\"content-segment__specs\">Engelstalig</div>\r\n }\r\n {this.props.video.language === \"NL\" &&\r\n <div className=\"content-segment__specs\">Nederlandstalig</div>\r\n }\r\n {this.props.video.subtitles === \"EN\" &&\r\n <div className=\"content-segment__specs\">Engels ondertiteld</div>\r\n }\r\n {this.props.video.subtitles === \"NL\" &&\r\n <div className=\"content-segment__specs\">Nederlands ondertiteld</div>\r\n }\r\n </div>\r\n <div \r\n className=\"block--video__actions\" \r\n >\r\n {this.props.video.has_cc_file == 1 &&\r\n <div \r\n className = {\"block--video__cc --link\" + (this.state.active_video_cc == 'showing' ? \" --active\" : \"\")}\r\n onClick = {(e) => this.handleVideoCC(this.state.active_video_cc == 'showing' ? 'hidden' : 'showing')}\r\n >\r\n cc\r\n </div>\r\n }\r\n <div \r\n className=\"block--video__enlarge --link\" \r\n onClick={(e) => this.handleClickEnlargeVideo(this.props.video)}\r\n >\r\n Open\r\n </div>\r\n </div>\r\n <div className=\"content-segment__content--description\">\r\n <p \r\n dangerouslySetInnerHTML={{ __html: this.props.video.description}} \r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockVideo);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport BlockVideo from '../../components/block/block-video';\r\n\r\nconst BlockViewVideo = inject(\"stores\") (\r\n observer (\r\n class BlockViewVideo extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n filename: \"\",\r\n playing: false\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const idxPreviewVideo = this.storeUi.settings_list['teaserPreviewVideo']\r\n const video = await this.storeUi.getVideoById(idxPreviewVideo);\r\n\r\n this.setState({\r\n video: video[0]\r\n })\r\n }\r\n \r\n render() {\r\n return (\r\n <div className=\"block block--view-video\">\r\n <h2>Heb je nog even tijd voor onderstaande video?</h2>\r\n <div className=\"blocks__content\">\r\n <div className=\"wrapper-media__player--video\">\r\n {this.state.video &&\r\n <BlockVideo\r\n video = {this.state.video}\r\n isDialogVideoOpen = {this.storeUi.isDialogVideoOpen}\r\n active_video = {this.storeUi.active_video}\r\n />\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockViewVideo);\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { Redirect } from 'react-router';\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport BlockPreviewPdf from '../block/block-preview-pdf';\r\n\r\nconst BlockViewBookPreview = inject(\"stores\") (\r\n observer (\r\n class BlockViewBookPreview extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n has_pdf: true,\r\n sku: this.storeUi.banner.sku,\r\n redirect: false\r\n }\r\n }\r\n\r\n handleOnClick = (e) => {\r\n const sku = this.storeUi.banner.sku;\r\n this.storeUi.setCurrentBook(sku);\r\n \r\n //this.storeBooks.getBookDetailsBySku(sku);\r\n \r\n this.setState({\r\n redirect: true\r\n })\r\n }\r\n \r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/book/\" + this.storeUi.banner.sku} \r\n />;\r\n }\r\n\r\n return (\r\n <div className=\"block block--view-pdf\">\r\n <h2>Lees het eerste hoofdstuk van ons nieuwe boek</h2>\r\n <span onClick={(e) => this.handleOnClick()}\r\n target=\"_blank\"\r\n className=\"--link\">\r\n <ImgCover\r\n sku = {this.storeUi.banner.sku}\r\n />\r\n </span>\r\n {this.state.has_pdf &&\r\n <div className=\"book-tools__tool\">\r\n <div className=\"book-tools__tool-link book-tools__tool-link--pdf\">\r\n <a href={this.urlAPI + \"/public/preview-pdf/\" + this.storeUi.banner.sku + \".pdf\"}\r\n target=\"_blank\"\r\n className=\"link--pdf\"\r\n >\r\n PDF PREVIEW\r\n </a>\r\n </div>\r\n <a \r\n href={this.urlAPI + \"/public/preview-pdf/\" + this.storeUi.banner.sku + \".pdf\"}\r\n target=\"_blank\"\r\n className=\"--link\"\r\n >\r\n <span className=\"book-tools__tool-title\" onClick={(e) => this.handleOnClick()}>{i18n.t(\"book_tools.pdf\")}</span>\r\n </a>\r\n </div>\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockViewBookPreview);\r\n\r\n\r\n","import * as apifetch from './fetch.js';\r\n\r\nexport async function createNewOrder(account_id, partner_code) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/order/createNewOrder.php';\r\n\r\n if (partner_code && partner_code !== undefined) {\r\n } else {\r\n partner_code = 0;\r\n }\r\n\r\n const postData = {\r\n account_id: account_id,\r\n partner_code: partner_code\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error order id: ', error.message);\r\n }\r\n}\r\n\r\nexport async function handleOrderItem(order_line, action) {\r\n let urlEndpoint;\r\n \r\n //SbC DEPRICATED\r\n if (action === 'edit') {\r\n //urlEndpoint = '/order/handleOrderItem.php';\r\n }\r\n if (action === 'add') {\r\n //urlEndpoint = '/order/handleOrderItem.php';\r\n }\r\n //SbC only in use for DELETE\r\n if (action === 'delete') {\r\n urlEndpoint = '/order/deleteOrderItem.php';\r\n }\r\n\r\n const postData = order_line;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function addOrderLine(order_line, id, action) {\r\n //console.log('SbC orderline add', order_line)\r\n const urlEndpoint = '/v2/orders/' + id + '/add';\r\n \r\n const postData = order_line;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function editOrderLine(order_line, id, action) {\r\n //console.log('SbC orderline edit', order_line)\r\n const urlEndpoint = '/v2/orders/' + id + '/edit';\r\n \r\n const postData = order_line;\r\n\r\n //console.log('SbC edit', postData)\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'PUT', postData);\r\n}\r\n\r\nexport async function setOrderStatus(account_id, order_id, order_status) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/order/setOrderStatus.php';\r\n\r\n const postData = {\r\n account_id: account_id,\r\n order_id: order_id,\r\n order_status: order_status\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error order status: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getAccountOrders(account_id) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/accounts/getAccountOrders.php';\r\n\r\n const postData = {\r\n account_id: account_id\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error orders for account: ', error.message);\r\n }\r\n}\r\n\r\nexport async function saveOrderDataProfile(order_id, order_data) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/order/saveOrderProfile.php';\r\n\r\n const postData = {\r\n order_id: order_id,\r\n order_data: order_data\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error order profile data: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getOrderData(order_id) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/order/getOrderData.php';\r\n\r\n const postData = {\r\n order_id: order_id\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error order data: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getOrderItemsData(order_id) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/order/getOrderItemsData.php';\r\n\r\n const postData = {\r\n order_id: order_id\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n })\r\n });\r\n \r\n let responseJson = await response.json();\r\n if (responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error order lines data: ', error.message);\r\n }\r\n}\r\n\r\nexport async function setOrderRemark(order_id, remark) {\r\n const urlEndpoint = '/order/setOrderRemark.php';\r\n const postData = {\r\n order_id: order_id,\r\n remark: remark\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function removeOrder(order_id) {\r\n const urlEndpoint = '/order/removeOrder.php';\r\n const postData = {\r\n order_id: order_id\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function activatePCUse(pc) {\r\n const urlEndpoint = '/order/activatePCUse.php';\r\n const postData = {\r\n pc: pc\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getOrderId(guid) {\r\n const urlEndpoint = '/order/getOrderId.php';\r\n\r\n const postData = {\r\n guid: guid\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function checkDiscountsOverruled(order_id) {\r\n const urlEndpoint = '/order/checkDiscountsOverruled.php';\r\n\r\n const postData = {\r\n order_id: order_id\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function checkShippingCostsOverruled(order_id) {\r\n const urlEndpoint = '/order/checkShippingCostsOverruled.php';\r\n\r\n const postData = {\r\n order_id: order_id\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\n// SbC identical to checkShippingCostsOverruled but better naming\r\nexport async function checkNoShippingOrder(orderId) {\r\n const urlEndpoint = '/order/checkShippingCostsOverruled.php';\r\n\r\n const postData = {\r\n order_id: orderId\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function checkShippingCostsCustom(order_id) {\r\n const urlEndpoint = '/order/checkShippingCostsCustom.php';\r\n\r\n const postData = {\r\n order_id: order_id\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getCustomShippingCosts(order_id) {\r\n const urlEndpoint = '/order/getCustomShippingCosts.php';\r\n\r\n const postData = {\r\n order_id: order_id\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getOrderAvailability(order_id) {\r\n const urlEndpoint = '/order/getOrderAvailability.php';\r\n\r\n const postData = {\r\n order_id: order_id\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { Link } from 'react-router-dom';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { Redirect } from 'react-router';\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport Template from '../../templates/template';\r\n\r\nimport BlockViewVideo from '../../components/block/block-view-video';\r\nimport BlockViewBookPreview from '../../components/block/block-view-book-preview';\r\nimport { checkDiscountsOverruled } from '../../communicator/order';\r\n\r\nconst ContentDialog = inject(\"stores\") (\r\n observer (\r\n class ContentDialog extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n render() {\r\n return (\r\n this.props.children\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst PaymentResult = inject(\"stores\") (\r\n observer (\r\n class PaymentResult extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n preview_pdf : this.storeUi.banner.sku,\r\n redirect: false,\r\n guid: '',\r\n order_id: 0,\r\n payment_status: 'payment_check'\r\n }\r\n }\r\n\r\n componentDidMount = async () => {\r\n //const { history } = this.props;\r\n let order_id;\r\n let guid = this.props.location && this.props.location.state && this.props.location.state.guid;\r\n\r\n if (parseInt(guid) === 0) {\r\n const userId = this.storeUser.user_data.user_id;\r\n const orders = await this.storeOrder.getAccountOrders(userId);\r\n order_id = this.storeOrder.orderHistoryList[0].order_id;\r\n guid = this.storeOrder.orderHistoryList[0].guid;\r\n } else {\r\n order_id = await this.storeOrder.getOrderId(guid);\r\n }\r\n\r\n const payment_status = await this.storeOrder.getOrderStatus(guid);\r\n const order_data = await this.storeOrder.getOrderLinesData(order_id);\r\n const total_costs = this.calcTotalCosts(order_data);\r\n\r\n if (guid === null || guid === 'undefined') {\r\n this.setState({\r\n redirect: true\r\n });\r\n } else {\r\n this.setState({\r\n guid: guid,\r\n order_id: order_id,\r\n total_costs: total_costs,\r\n payment_status: payment_status\r\n });\r\n } \r\n \r\n this.storeOrder.clearAllShoppingCarts(this.storeUser.user_data.is_loggedin);\r\n }\r\n\r\n componentDidUpdate = async() => {\r\n // let order_id;\r\n // const guid = this.props.location && this.props.location.state && this.props.location.state.guid;\r\n\r\n // if (parseInt(guid) === 0) {\r\n // const userId = this.storeUser.user_data.user_id;\r\n // const orders = await this.storeOrder.getAccountOrders(userId);\r\n // order_id = this.storeOrder.orderHistoryList[0].order_id;\r\n // guid = this.storeOrder.orderHistoryList[0].guid;\r\n // } else {\r\n // order_id = await this.storeOrder.getOrderId(guid);\r\n // }\r\n\r\n // if (payment_status !== this.state.payment_status) {\r\n // this.setState({\r\n // payment_status: payment_status\r\n // });\r\n // }\r\n\r\n this.storeOrder.clearAllShoppingCarts(this.storeUser.user_data.is_loggedin);\r\n }\r\n\r\n calcTotalCosts = (order_data) => {\r\n let total = 0;\r\n let total_row = 0;\r\n order_data.map((order_line) => {\r\n total_row = order_line.costs * order_line.amount * (1 - (order_line.discount / 100));\r\n total_row = Math.round(total_row * 100) / 100;\r\n total = total + total_row;\r\n });\r\n \r\n return utilities.displayPrice(total);\r\n }\r\n\r\n continueShopping = () => {\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n this.storeOrder.deleteUseCaseFromLS();\r\n this.storeOrder.setCartView(id, \"client\");\r\n this.props.history.push(\"/\");\r\n }\r\n\r\n gotoOrders = () => {\r\n let url = \"/account/orders/\";\r\n this.props.history.push(url);\r\n }\r\n\r\n resetOrder = (use_case) => {\r\n this.storeOrder.resetOrder(use_case, this.storeUser.user_data.is_loggedin);\r\n this.storeUi.setReturnState(\"\");\r\n }\r\n\r\n gotoPayment = () => {\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n this.storeOrder.setCartView(id, \"payment\");\r\n this.storeUi.setUseCase(\"inorder\");\r\n let url = \"/shoppingcart/payment\";\r\n this.props.history.push(url);\r\n }\r\n\r\n openDialogPaymentInfo = () => {\r\n this.storeUi.setContentComponent(\r\n <ContentDialog\r\n title = {'Betalingsinformatie bankoverschrijving'}\r\n >\r\n <div className=\"form-row form-row--feedback\">\r\n <span className=\"feedback__title\">Je hebt gekozen voor handmatige overschijving.</span>\r\n <p>Maak het totaalbedrag van <span className=\"amount amount--inline\">{this.state.total_costs}</span> van je bestelling over naar:</p>\r\n <ul>\r\n <React.Fragment>\r\n <li className=\"feedback__section\">Rabobank te Zeist, rekening: NL56 RABO 0357 5205 80<br/>\r\n ten name van Belfra Publishers for Success bv\r\n </li>\r\n <li className=\"feedback__section\">\r\n of:<br/>\r\n Triodosbank te Zeist, rekening: NL35 TRIO 0391 1028 26<br/>\r\n ten name van Belfra Publishers for Success bv\r\n </li>\r\n <li className=\"feedback__section\">\r\n Dolderseweg 49<br/>\r\n 3734 BB Den Dolder<br/>\r\n onder vermelding van \"order <strong>{this.state.order_id}</strong>\"\r\n </li>\r\n </React.Fragment>\r\n\r\n {(this.storeOrder.order_data.billing_address.country_code !== this.storeOrder.settings_list.isNL) && (this.storeOrder.order_data.billing_address.country_code !== this.storeOrder.settings_list.isBE) &&\r\n <li className=\"feedback__section\">\r\n <b>Vanuit het buitenland:</b><br/>\r\n Gebruik de volgende gegevens voor een overschrijving vanuit het buitenland:<br/>\r\n Swift-adres (BIC#): RABONL2U<br/>\r\n IBAN: NL56 RABO 0357 5205 80<br/>\r\n ten name van Belfra Publishers for Success bv\r\n onder vermelding van \"order <strong>{this.state.order_id}</strong>\"\r\n </li>\r\n }\r\n\r\n {(this.storeOrder.order_data.billing_address.country_code !== this.storeOrder.settings_list.isNL) && (this.storeOrder.order_data.billing_address.country_code == this.storeOrder.settings_list.isBE) &&\r\n <li className=\"feedback__section\">\r\n <b>Vanuit België</b><br/>\r\n Gebruik de volgende gegevens voor een overschrijving vanuit België:<br/>\r\n BNP Paribas Fortis rekening: BE71 0016 6035 5969<br/>\r\n Swift-adres (BIC#): GEBABEBB<br/>\r\n ten name van Belfra Publishers for Success bv<br/>\r\n onder vermelding van \"order <strong>{this.state.order_id}</strong>\"\r\n </li>\r\n }\r\n </ul>\r\n </div>\r\n </ContentDialog>\r\n )\r\n this.storeUi.openDialogContent();\r\n } \r\n\r\n setOrderId = () => {\r\n let order_id;\r\n if (this.props.type == \"open_order\") {\r\n order_id = this.storeUi.order_to_process.id;\r\n } else {\r\n order_id = this.storeOrder.order_data.order_id;\r\n }\r\n\r\n return order_id;\r\n }\r\n \r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/\"} \r\n />;\r\n }\r\n \r\n const payment_status = this.state.payment_status;\r\n // console.log('SbC payment status', payment_status)\r\n \r\n let use_case = this.storeOrder.getUseCaseFromLS();\r\n\r\n if (payment_status === \"banktransfer\") {\r\n this.openDialogPaymentInfo();\r\n }\r\n\r\n //SbC:: payment_status: \"payment_confirmed\", \"payment_completed\", \"completed\", \"banktransfer\"\r\n if (payment_status !== \"void\" && payment_status !== \"pending\") {\r\n this.resetOrder(use_case, this.storeUser.user_data.is_loggedin);\r\n };\r\n\r\n if (!this.storeUser.user_data.is_loggedin && payment_status !== \"void\" && payment_status !== \"pending\") {\r\n this.storeOrder.deleteShoppingCartFromLS();\r\n this.resetOrder(use_case, this.storeUser.user_data.is_loggedin);\r\n }\r\n\r\n (this.storeUser.user_data.is_loggedin && payment_status === \"void\") && this.resetOrder(use_case, this.storeUser.user_data.is_loggedin);\r\n (this.storeUser.user_data.is_loggedin && use_case !== 'open_order') && this.storeOrder.deleteShoppingCartFromDB(this.storeUser.user_data.user_id);\r\n \r\n return (\r\n <Template\r\n type = 'single-column'\r\n header = {(this.state.payment_status === 'payment_confirmed' || this.state.payment_status === 'payment_completed' || this.state.payment_status === 'banktransfer')\r\n ? (this.state.payment_status === 'banktransfer')\r\n ? \"payment_pending\"\r\n : \"payment_success\"\r\n : (this.state.payment_status === 'payment_error'|| this.state.payment_status === 'void')\r\n ? \"payment_error\"\r\n : \"payment_processing\"\r\n }\r\n > \r\n {(this.state.payment_status === 'payment_confirmed' || this.state.payment_status === 'payment_completed') &&\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p>Je bestelling wordt zo snel mogelijk verstuurd.</p>\r\n <div className=\"cart-confirmation--completed\"> \r\n <div className=\"cart__actions\">\r\n <button className=\"btn btn--primary\" onClick={(e) => this.continueShopping(e)}>{i18n.t(\"button.backto_home\")}</button>\r\n </div>\r\n <BlockViewVideo />\r\n <BlockViewBookPreview \r\n sku = {this.state.preview_pdf}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n\r\n {this.state.payment_status === \"void\" &&\r\n <div className=\"content-segment\">\r\n {this.storeUser.user_data.is_loggedin\r\n ? <div className=\"content-segment__content\">\r\n <p>Je bestelling is opgeslagen in je account, maar nog niet betaald en kan daardoor niet verzonden worden.</p>\r\n <h3 className=\"error\">Wat kun je doen?</h3>\r\n <p>Via je bestelgeschiedenis in je account kun je op een later tijdstip alsnog voor deze bestelling betalen. Hier kun je ook kiezen voor een andere betaalmethode. Neem contact met ons op indien je problemen blijft ondervinden bij het afronden van je betaling.</p>\r\n <div className=\"cart-confirmation--completed\">\r\n <div className=\"cart__actions\">\r\n <Link \r\n to=\"/account/orders\"\r\n className=\"btn btn--primary\">Ga naar 'Mijn bestellingen'\r\n </Link>\r\n </div>\r\n </div>\r\n </div>\r\n : <div className=\"content-segment__content\">\r\n <p>Je bestelling is niet betaald en kan daardoor niet verzonden worden.</p>\r\n <p>Je kunt het later nog een keer proberen of kies een andere betaalmethode.<br/>\r\n Neem contact met ons op indien je problemen blijft ondervinden bij het afronden van je betaling.</p>\r\n <div className=\"cart__actions\">\r\n <button className=\"btn btn--primary\" onClick={(e) => this.gotoPayment(e)}>Kies een andere betaalmethode</button>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n }\r\n\r\n {this.state.payment_status === \"banktransfer\" &&\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p>Je hebt aangegeven per bankoverschrijving te betalen.<br/>Zodra je betaling is ontvangen wordt je bestelling verstuurd.</p>\r\n <a href=\"#\" onClick={(e) => this.openDialogPaymentInfo()}>Bekijk bankoverschijvingsgegevens</a>\r\n <h4>Wil je toch liever op een andere manier betalen?</h4>\r\n <p>Je kunt via Mijn Gegevens al je bestellingen bekijken en hier ook op een andere manier betalen.</p>\r\n <div className=\"cart-confirmation--completed\"> \r\n <div className=\"cart__actions\">\r\n <button className=\"btn btn--primary\" onClick={(e) => this.gotoOrders(e)}>{i18n.t(\"button.goto_orders\")}</button>\r\n <button className=\"btn btn--primary\" onClick={(e) => this.continueShopping(e)}>{i18n.t(\"button.backto_home\")}</button>\r\n </div>\r\n <BlockViewVideo />\r\n <BlockViewBookPreview \r\n sku = {this.state.preview_pdf} \r\n />\r\n </div>\r\n </div>\r\n </div>\r\n }\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(PaymentResult);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlocksBooks from '../components/blocks/blocks-books';\r\n\r\nconst Products = inject(\"stores\") (\r\n observer (\r\n class Products extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n }\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeProducts = this.props.stores.storeProducts;\r\n }\r\n\r\n componentDidMount = async() => {\r\n let total;\r\n let products;\r\n let parentgroup = '';\r\n\r\n let params = this.props.match.params;\r\n if (params.group !== undefined) {\r\n parentgroup = await this.storeProducts.checkMainGroup(params.group);\r\n if (parentgroup !== '') {\r\n this.storeUi.setActiveProductGroup(params.group);\r\n this.storeUi.setActiveSubGroup('');\r\n this.storeUi.setActiveCategory('');\r\n this.storeUi.setActiveLanguage('');\r\n\r\n products = await this.storeProducts.getProductsForCategory(this.storeUi.active_product_group, this.storeUi.page_view);\r\n total = await this.storeUi.getProductCountForCategory(this.storeUi.active_product_group);\r\n } else {\r\n parentgroup = await this.storeProducts.getMainGroup(params.group);\r\n this.storeUi.setActiveProductGroup(parentgroup);\r\n this.storeUi.setActiveSubGroup(params.group);\r\n this.storeUi.setActiveCategory('');\r\n this.storeUi.setActiveLanguage('');\r\n\r\n products = await this.storeProducts.getProductsForSubGroup(this.storeUi.active_product_group, this.storeUi.active_subgroup, this.storeUi.page_view);\r\n total = await this.storeUi.getProductCountForSubGroup(this.storeUi.active_product_group, this.storeUi.active_subgroup);\r\n }\r\n this.storeUi.setNavMobile(false);\r\n } \r\n \r\n this.storeUi.setPageView('total', this.storeUi.count_total)\r\n this.handleScroll();\r\n }\r\n \r\n componentDidUpdate = async () => {\r\n let total;\r\n let products;\r\n const product_group = this.props.group;\r\n const subgroup = this.props.subgroup;\r\n \r\n if (subgroup !== undefined && subgroup !== '') {\r\n products = await this.storeProducts.getProductsForSubGroup(product_group, subgroup, this.storeUi.page_view);\r\n total = await this.storeUi.getProductCountForSubGroup(product_group, subgroup);\r\n } else {\r\n this.storeProducts.getProductsForCategory(product_group, this.storeUi.page_view);\r\n total = await this.storeUi.getProductCountForCategory(product_group);\r\n }\r\n\r\n this.storeUi.setPageView('total', this.storeUi.count_total);\r\n this.handleScroll();\r\n }\r\n\r\n handleScroll = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n handleType = (e, audio) => {\r\n this.setState({\r\n value: audio.value\r\n })\r\n //this.storeProducts.getAudioBooks(audio.query_value);\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n > \r\n <div className=\"content-segment\">\r\n <BlocksBooks \r\n type = \"products\"\r\n group = {this.props.group} \r\n subgroup = {this.props.subgroup}\r\n // group = {this.storeUi.active_product_group}\r\n // subgroup = {this.storeUi.active_subgroup}\r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Products;\r\n","import React, { Component } from 'react';\r\nimport { Redirect } from 'react-router';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport FormRegister from '../components/forms/form-register';\r\nimport Salutation from '../elements/txt-salutation';\r\n\r\nconst Register = inject(\"stores\") (\r\n observer (\r\n class Register extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n redirect: this.storeAuth.user.is_loggedin ? true : false\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUi.setReturnState(\"new_user\");\r\n }\r\n\r\n onNextAction = () => {\r\n let url;\r\n if (this.storeUi.app_interface.use_case === \"inorder\") {\r\n url = \"/shoppingcart\";\r\n this.props.history.push(url);\r\n } else {\r\n //SbC return to previous page\r\n this.props.history.goBack();\r\n }\r\n }\r\n \r\n render() {\r\n if (this.storeAuth.user.is_loggedin) {\r\n return <Redirect \r\n push to={\"/\"} \r\n />;\r\n }\r\n\r\n const class_feature = this.storeUi.checkFeature('SHOP_ALL') ? '--feature-all' : ''\r\n const pos_top = this.storeUi.app_interface.height_header\r\n\r\n return (\r\n <div \r\n className={\"content-wrapper\" + ' ' + class_feature}\r\n style = {{marginTop: pos_top}}\r\n >\r\n <div className=\"content-wrapper__middle\">\r\n <div className=\"content-wrapper__content\">\r\n <div className=\"segment__header\">{i18n.t(\"header.create_account\")}</div>\r\n </div>\r\n\r\n <div className=\"content-wrapper__content\">\r\n <div className=\"content-section--register --active\">\r\n <div className=\"content-section--register__column content-section--register__column--left\">\r\n <p>Vul onderstaande gegevens in om je aan te melden.</p>\r\n <FormRegister \r\n form = {'register'}\r\n want_newsletter = {true} \r\n show_subscription = {true}\r\n />\r\n </div>\r\n <div className=\"content-section--register__column content-section--register__column--right\">\r\n <p>\r\n <strong>{i18n.t(\"pages.login.txt_haslogin\")}</strong><br/>\r\n <span className=\"content__textlink\">\r\n <Link to=\"/login\">{i18n.t(\"pages.login.link_haslogin\")}</Link>\r\n </span>\r\n </p>\r\n </div>\r\n </div>\r\n \r\n </div>\r\n\r\n <div className=\"content-wrapper__content\">\r\n <Salutation />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(Register));\r\n","import React from 'react';\r\nimport i18n from \"i18next\";\r\n\r\nfunction checkPaste(e, arr) {\r\n if (arr && arr.indexOf(\"paste\") > -1) {\r\n e.preventDefault();\r\n return false;\r\n } else {\r\n return true;\r\n }\r\n}\r\n\r\nfunction checkEnter(e) {\r\n if (e.keyCode == 13) {\r\n e.preventDefault();\r\n }\r\n}\r\n\r\nconst TextInputSearch = (props) => {\r\n const ref = React.createRef();\r\n\r\n let formClass = \"form-field--text\";\r\n\r\n if (props.className && props.className !== '') {\r\n formClass = formClass + ' ' + props.className;\r\n }\r\n\r\n if (props.touched && !props.valid && props.value !== '') {\r\n formClass = formClass + ' --error';\r\n }\r\n\r\n if (props.readonly) {\r\n formClass = formClass + ' --readonly';\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <input \r\n {...props}\r\n type = {props.secret ? \"password\" : \"text\" }\r\n className = {formClass} \r\n onPaste = {(e) => {\r\n checkPaste(e, props.disable)\r\n }} \r\n readOnly = {props.readonly ? 'readonly' : null}\r\n onKeyDown={(e) => {\r\n checkEnter(e)\r\n }}\r\n onFocus={() =>props.onFocus(ref)} \r\n ref={ref}\r\n autocomplete=\"off\"\r\n />\r\n {props.type === 'password' && \r\n <span className={\"form-group__secret-switch\" + (props.secret ? '' : ' --active')} onClick={() => props.showSecret()}>\r\n {props.secret ? 'Toon' : 'Verberg'}\r\n </span>\r\n }\r\n {props.touched && !props.valid && props.value !== '' && \r\n <React.Fragment>\r\n {props.msg\r\n ? <span className=\"form-field--error\">{props.msg}</span>\r\n : <span className=\"form-field--error\">{i18n.t(\"form_errors.general\")}</span>\r\n }\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n );\r\n}\r\n\r\nexport default TextInputSearch;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport {\r\n isBrowser,\r\n isMobile\r\n} from \"react-device-detect\";\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport * as content from '../../utilities/content';\r\nimport * as utilities from '../../utilities/formats';\r\n\r\nimport TextInputSearch from '../../elements/form-input-text-search';\r\n\r\nconst SearchInput = inject(\"stores\") (\r\n observer (\r\n class SearchInput extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks; \r\n this.storeUser = this.props.stores.storeUser; \r\n \r\n this.state = {\r\n formControls: { \r\n search_input: {\r\n label: i18n.t(\"forms.label.search_input\"),\r\n value: this.storeUi.search_value,\r\n touched: false,\r\n valid: true\r\n }\r\n },\r\n formIsValid: true,\r\n btn_class: '--disabled',\r\n focus: false\r\n }\r\n\r\n this.controller = new AbortController();\r\n this.signal = this.controller.signal;\r\n }\r\n \r\n componentDidMount() {\r\n document.addEventListener('mousedown', this.handleIfFocus);\r\n\r\n document.addEventListener(\"keyup\", (event) => {\r\n if (event.keyCode === 13) {\r\n event.preventDefault();\r\n this.storeUi.setSearchOverlay(false);\r\n this.storeUi.setSearchInputFocus(false);\r\n this.onSubmit(event);\r\n }\r\n });\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.search_value !== this.props.search_value) {\r\n this.handleSuggestion(this.props.search_value);\r\n this.handleInput(this.props.search_value);\r\n }\r\n }\r\n\r\n handleOnEnter = (event) => {\r\n if (this.inputRef) {\r\n this.inputRef.addEventListener(\"keyup\", (event) => {\r\n if (event.keyCode === 13) {\r\n event.preventDefault();\r\n this.onSubmit(event);\r\n }\r\n })\r\n }\r\n }\r\n\r\n handleIfFocus = (event) => {\r\n if ((this.storeUi.search_overlayRef && !this.storeUi.search_overlayRef.contains(event.target)) && \r\n (this.storeUi.search_inputRef && !this.storeUi.search_inputRef.contains(event.target)) &&\r\n (this.storeUi.wrapperRef && this.storeUi.wrapperRef.contains(event.target))) {\r\n if (event.target.innerHTML !== 'Alle boeken' && \r\n event.target.innerHTML !== 'Alle zelfhulpboeken'&& \r\n event.target.innerHTML !== 'Boeken eigen uitgeverij') {\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n this.storeUi.setSearchInputFocus(false);\r\n }\r\n\r\n if (this.storeUi.search_inputRef && this.storeUi.search_inputRef.contains(event.target)) {\r\n this.storeUi.setSearchOverlay(true);\r\n this.storeUi.setSearchInputFocus(true);\r\n }\r\n }\r\n\r\n handleOnFocus = async (value) => {\r\n if (this.storeUi.search_value.trim().length >= 3 || content.searchChars(this.storeUi.search_value.trim())) {\r\n //if (this.storeUi.search_value.length >= 3 || content.searchChars(this.storeUi.search_value)) {\r\n this.storeUi.setSearchOverlay(true);\r\n } else {\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n\r\n this.setState({\r\n focus: value.current\r\n })\r\n }\r\n\r\n removeOnBlur(event) {\r\n if (this.storeUi.search_overlayRef && !this.storeUi.search_overlayRef.contains(event.target)) {\r\n this.storeUi.setSearchOverlay(false);\r\n this.storeUi.setSearchInputFocus(false);\r\n }\r\n \r\n }\r\n\r\n setInputRef = (node) => {\r\n this.inputRef = node;\r\n this.storeUi.setSearchInputRef(node);\r\n }\r\n\r\n handleChange = event => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n if (value !== null && value !== ' ') {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n //updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n }, () => this.handleTimeOut(value)); \r\n } \r\n }\r\n\r\n handleTimeOut = (value) => {\r\n clearTimeout(this.timer);\r\n this.timer = setTimeout(() => {\r\n this.handleInput(value);\r\n }, 500, value);\r\n } \r\n\r\n handleInput = async(value2) => {\r\n let q;\r\n let section;\r\n let value;\r\n\r\n value = value2.replace('?', \"\");\r\n value = value.replace('!', \"\");\r\n //this.storeUi.setSearchValue(value.trim());\r\n value = content.convertHTML(value);\r\n\r\n this.storeUi.setSearchValue(value);\r\n \r\n //if (value !== null && value !== '' && value !== ' ' && (value.trim().length >= 3 || content.searchChars(value.trim()))) {\r\n if (value !== null && value !== '' && value !== ' ' && (value.length >= 3 || content.searchChars(value))) {\r\n this.storeUi.setSearchOverlay(true);\r\n\r\n //SbC section OWN\r\n section = 'sb';\r\n await (async() => this.storeUi.getSearchCountSB(value, section) )();\r\n await (async() => this.storeUi.getSearchCount(value, section) )();\r\n // await (async() => this.storeUi.getSearchResultsSimple('SHOP_SB', value, section, this.storeUi.page_view, false) )();\r\n q = this.storeUi.getSearchResultsSimpleWithAbort('SHOP_SB', value, section, this.storeUi.page_view, false, this.controller, this.signal);\r\n \r\n q.then((result) => { \r\n this.storeUi.setSearchResultsSimple('SHOP_SB', 'sb', result.data, value);\r\n });\r\n\r\n //SbC section SB\r\n section = '';\r\n await (async() => this.storeUi.getSearchCountSB(value, section) )();\r\n await (async() => this.storeUi.getSearchCount(value, section) )();\r\n // await (async() => this.storeUi.getSearchResultsSimple('SHOP_SB', value, '', this.storeUi.page_view, false) )();\r\n q = this.storeUi.getSearchResultsSimpleWithAbort('SHOP_SB', value, section, this.storeUi.page_view, false, this.controller, this.signal);\r\n\r\n q.then((result) => { \r\n this.storeUi.setSearchResultsSimple('SHOP_SB', '', result.data, value);\r\n });\r\n\r\n //SbC section ALL\r\n section = 'all';\r\n await (async() => this.storeUi.getSearchCount(value, section) )();\r\n // await (async() => this.storeUi.getSearchResultsSimple('SHOP_ALL', value, '', this.storeUi.page_view, false) )();\r\n q = this.storeUi.getSearchResultsSimpleWithAbort('SHOP_ALL', value, section, this.storeUi.page_view, false, this.controller, this.signal);\r\n \r\n q.then((result) => { \r\n this.storeUi.setSearchResultsSimple('SHOP_ALL', '', result.data, value);\r\n });\r\n\r\n //SbC get search intentions\r\n this.storeUi.getSearchIntentions(value);\r\n }\r\n\r\n //if (value.trim().length < 3 && !content.searchChars(value.trim())) {\r\n if (value.length < 3 && !content.searchChars(value)) {\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n }\r\n\r\n handleSuggestion = (suggestion) => {\r\n const name = 'search_input';\r\n const value = suggestion;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n //updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n // for (let inputIdentifier in updatedControls) {\r\n // if (updatedControls[inputIdentifier].required) {\r\n // formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n // }\r\n // }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid\r\n }); \r\n }\r\n\r\n handleClear = () => {\r\n const name = 'search_input';\r\n const value = '';\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: false\r\n }); \r\n }\r\n\r\n onSubmit = () => {\r\n let search_term;\r\n search_term = this.state.formControls['search_input'].value;\r\n //search_term = search_term.toString().trim();\r\n\r\n if (this.state.formIsValid && this.state.formControls['search_input'].value) {\r\n // if (utilities.isInteger(search_term)) {\r\n // search_term = parseInt(search_term);\r\n // }\r\n\r\n //SbC:: get search results and intentions\r\n this.storeUi.setSearchValue(search_term);\r\n this.storeUi.setPageView('page', 1);\r\n this.storeUi.getSearchIntentions(search_term);\r\n this.storeUi.saveSearchQuery(search_term);\r\n\r\n //SbC:: set main nav to dropdown value after submit\r\n this.storeUi.setActiveMainNav(this.storeUi.app_interface.active_search_segment);\r\n\r\n const path = \"/search-results\";\r\n const str_search = \"?q=\" + search_term;\r\n\r\n this.props.history.push({\r\n pathname: path,\r\n search: str_search\r\n })\r\n }\r\n\r\n this.storeUi.setSearchOverlay(false);\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div className={\"search__input\" + (this.props.position === \"onpage\" ? ' --onpage' : '')}>\r\n {this.storeUi.app_interface.use_case === \"inshop\" &&\r\n <React.Fragment>\r\n <div ref={this.setInputRef}>\r\n <TextInputSearch \r\n name = {'search_input'} \r\n placeholder = {this.storeAuth.user.is_loggedin \r\n ? i18n.t(\"forms.placeholder.search_input\") + ', ' + utilities.capitalizeFirstChar(this.props.firstname) + '?'\r\n : i18n.t(\"forms.placeholder.search_input\") + '?'\r\n }\r\n value = {this.state.formControls['search_input'].value}\r\n onChange = {this.handleChange}\r\n onBlur = {() => this.removeOnBlur}\r\n onFocus = {this.handleOnFocus}\r\n valid = {1}\r\n />\r\n </div>\r\n\r\n {isMobile &&\r\n <div className=\"search__button--clear btn--icon icon--clear --link\" onClick={(e) => this.handleClear(e)}>\r\n x\r\n </div>\r\n }\r\n\r\n <div className=\"search__buttons\">\r\n <span className=\"search__button--search --link \" onClick={() => this.onSubmit()}>\r\n {i18n.t(\"button.search\")}\r\n </span>\r\n </div>\r\n </React.Fragment>\r\n }\r\n </div> \r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(SearchInput));\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\nimport SearchInput from '../../components/search/search-input';\r\n\r\nconst SearchAdvanced = inject(\"stores\") (\r\n observer (\r\n class SearchAdvanced extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0)\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = \"search\"\r\n >\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <SearchInput \r\n position = {\"onpage\" }\r\n />\r\n </div>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default SearchAdvanced;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport queryString from 'query-string';\r\n\r\nimport * as content from '../../utilities/content';\r\n\r\nimport BlocksBooks from '../blocks/blocks-books';\r\nimport FeedbackNoSearchResults from '../feedback/feedback-no-search-results';\r\nimport FeedbackNoSearchResultsSuggestion from '../feedback/feedback-no-search-results-suggestion';\r\n\r\nconst SearchResult = inject(\"stores\") (\r\n observer (\r\n class SearchResult extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n shopAlternative: '',\r\n skuAlternative: ''\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n let section = '';\r\n let searchTerm = '';\r\n\r\n const searchString = this.props.location.search;\r\n const params = queryString.parse(searchString);\r\n if (params.q) {\r\n searchTerm = params.q;\r\n searchTerm = searchTerm.replace('?', \"\");\r\n searchTerm = searchTerm.replace('!', \"\");\r\n }\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n if (this.props.searchShop === 'OWN') {\r\n section = 'sb';\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, section, this.storeUi.page_view) )();\r\n }\r\n if (this.props.searchShop === 'SB') {\r\n section = '';\r\n if (this.storeUi.search_count_sb !== 0) {\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n } else {\r\n (async() => this.storeUi.getSearchResults(searchTerm, '', this.storeUi.page_view) )(); \r\n }\r\n }\r\n if (this.props.searchShop === 'ALL') {\r\n (async() => this.storeUi.getSearchResults(searchTerm, '', this.storeUi.page_view) )(); \r\n } \r\n } else {\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n }\r\n }\r\n\r\n componentDidUpdate = async (prevProps) => {\r\n let section = '';\r\n let searchTerm = this.props.searchTerm;\r\n\r\n if (prevProps.page !== this.props.page) {\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n if (this.props.searchShop === 'OWN') {\r\n section = 'sb';\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, section, this.storeUi.page_view) )();\r\n }\r\n if (this.props.searchShop === 'SB') {\r\n section = '';\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n } \r\n if (this.props.searchShop === 'ALL') {\r\n (async() => this.storeUi.getSearchResults(searchTerm, '', this.storeUi.page_view) )(); \r\n }\r\n } else {\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n }\r\n } else if (prevProps.inview !== this.props.inview) {\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n if (this.props.searchShop === 'OWN') {\r\n section = 'sb';\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, section, this.storeUi.page_view) )();\r\n }\r\n if (this.props.searchShop === 'SB') {\r\n section = '';\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n } \r\n if (this.props.searchShop === 'ALL') {\r\n (async() => this.storeUi.getSearchResults(searchTerm, '', this.storeUi.page_view) )(); \r\n } \r\n } else {\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n }\r\n } else if (prevProps.searchTerm !== this.props.searchTerm) {\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n if (this.props.searchShop === 'OWN') {\r\n section = 'sb';\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, section, this.storeUi.page_view) )();\r\n }\r\n if (this.props.searchShop === 'SB') {\r\n section = '';\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n } \r\n if (this.props.searchShop === 'ALL') {\r\n (async() => this.storeUi.getSearchResults(searchTerm, '', this.storeUi.page_view) )(); \r\n } \r\n } else {\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n }\r\n } else if (prevProps.searchShop !== this.props.searchShop) {\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n if (this.props.searchShop === 'OWN') {\r\n section = 'sb';\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, section, this.storeUi.page_view) )();\r\n }\r\n if (this.props.searchShop === 'SB') {\r\n section = '';\r\n if (this.storeUi.search_count_sb !== 0) {\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n } else {\r\n (async() => this.storeUi.getSearchResults(searchTerm, '', this.storeUi.page_view) )(); \r\n }\r\n }\r\n if (this.props.searchShop === 'ALL') {\r\n (async() => this.storeUi.getSearchResults(searchTerm, '', this.storeUi.page_view) )(); \r\n } \r\n } else {\r\n (async() => this.storeUi.getSearchResultsSB(searchTerm, '', this.storeUi.page_view) )();\r\n }\r\n }\r\n }\r\n\r\n handleChangeSegment = (shop) => {\r\n this.storeGeneral.setSearchShop(shop);\r\n this.storeUi.setSearchOverlay(false);\r\n const searchTerm = this.storeUi.search_value;\r\n\r\n let path = \"/search-results\";\r\n const strSearch = \"?q=\" + searchTerm;\r\n\r\n // if (shop == 'Alle zelfhulpboeken') {\r\n // this.storeGeneral.setShop(\"SHOP_SB\");\r\n // this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n // this.storeGeneral.setSearchShop('SB');\r\n // this.storeUi.setActiveToggleNav(2);\r\n // }\r\n\r\n // if (shop == 'Alle boeken') {\r\n // this.storeGeneral.setShop(\"SHOP_ALL\");\r\n // this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n // this.storeGeneral.setSearchShop('ALL');\r\n // this.storeUi.setActiveToggleNav(3);\r\n // }\r\n\r\n this.props.history.push({\r\n pathname: path,\r\n search: strSearch\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div className=\"content-segment\">\r\n {!this.storeUi.checkFeature('SHOP_ALL') &&\r\n (this.storeUi.search_value.trim().length >= 3 || content.searchChars(this.storeUi.search_value.trim())) &&\r\n <React.Fragment>\r\n {(this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb > 0) &&\r\n <div className=\"search-results\">\r\n <BlocksBooks \r\n blockTitle = {i18n.t(\"blocks.search_results.header\")}\r\n type = \"search\"\r\n default_view = \"summaries\"\r\n page = \"search\"\r\n searchShop = {this.props.searchShop}\r\n searchTerm = {this.props.searchTerm}\r\n />\r\n </div>\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {!this.storeUi.checkFeature('SHOP_ALL') &&\r\n (this.storeUi.search_value.trim().length >= 3 || content.searchChars(this.storeUi.search_value.trim())) &&\r\n (this.storeUi.search_results_simple || this.storeUi.search_results_simple === null) &&\r\n ((this.storeGeneral.searchShop === 'SB' &&\r\n this.storeUi.search_count_sb === 0 || this.storeUi.search_count_sb === null\r\n )) &&\r\n <React.Fragment>\r\n <p\r\n className=\"content--empty\"\r\n >\r\n We kunnen geen resultaten voor je zoekopdracht vinden.\r\n </p>\r\n <FeedbackNoSearchResultsSuggestion\r\n \r\n />\r\n </React.Fragment>\r\n }\r\n \r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n (this.storeUi.search_value.trim().length >= 3 || content.searchChars(this.storeUi.search_value.trim())) &&\r\n <React.Fragment>\r\n {((this.storeGeneral.searchShop === 'OWN' && this.storeUi.search_count_own > 0) ||\r\n (this.storeGeneral.searchShop === 'SB' && this.storeUi.search_count_sb > 0) ||\r\n (this.storeGeneral.searchShop === 'ALL' && this.storeUi.search_count_all > 0)) &&\r\n <div className=\"search-results\">\r\n <BlocksBooks \r\n blockTitle = {i18n.t(\"blocks.search_results.header\")}\r\n type = \"search\"\r\n default_view = \"summaries\"\r\n page = \"search\"\r\n searchShop = {this.props.searchShop}\r\n searchTerm = {this.props.searchTerm}\r\n />\r\n </div>\r\n }\r\n\r\n {((this.storeGeneral.searchShop === 'OWN' &&\r\n this.storeUi.search_count_own === 0 || this.storeUi.search_count_own === null\r\n ) ||\r\n (this.storeGeneral.searchShop === 'SB' &&\r\n this.storeUi.search_count_sb === 0 || this.storeUi.search_count_sb === null\r\n ) ||\r\n (this.storeGeneral.searchShop === 'ALL' &&\r\n this.storeUi.search_count_all === 0 || this.storeUi.search_count_all === null\r\n )) &&\r\n <div \r\n className = 'search-overlay__column--feedback'\r\n >\r\n <FeedbackNoSearchResults\r\n\r\n />\r\n </div>\r\n }\r\n \r\n {this.storeGeneral.searchShop === 'OWN' && \r\n <React.Fragment>\r\n {(this.storeUi.search_count_own === 0 && this.storeUi.search_count_sb !== 0) &&\r\n <React.Fragment>\r\n <span\r\n className = \"search-overlay__alternatives-header\"\r\n >\r\n Hieronder staan de eerste resultaten uit\r\n <span\r\n className = \"--link\"\r\n onClick = {() => this.handleChangeSegment('Alle zelfhulpboeken')}\r\n >\r\n {'Alle zelfhulpboeken'}\r\n </span>\r\n </span>\r\n <div className=\"search-results\">\r\n <BlocksBooks \r\n blockTitle = {i18n.t(\"blocks.search_results.header\")}\r\n type = \"alternative\"\r\n default_view = \"summaries\"\r\n page = \"search\"\r\n searchShop = {'SB'}\r\n searchTerm = {this.props.searchTerm}\r\n />\r\n </div>\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {this.storeGeneral.searchShop === 'OWN' && \r\n <React.Fragment>\r\n {(this.storeUi.search_count_own === 0 && this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all !== 0) &&\r\n <React.Fragment>\r\n <span\r\n className = \"search-overlay__alternatives-header\"\r\n >\r\n Hieronder staan de eerste resultaten uit\r\n <span\r\n className = \"--link\"\r\n onClick = {() => this.handleChangeSegment('Alle boeken')}\r\n >\r\n {'Alle boeken'}\r\n </span>\r\n </span>\r\n <div className=\"search-results\">\r\n <BlocksBooks \r\n blockTitle = {i18n.t(\"blocks.search_results.header\")}\r\n type = \"alternative\"\r\n default_view = \"summaries\"\r\n page = \"search\"\r\n searchShop = {'ALL'}\r\n searchTerm = {this.props.searchTerm}\r\n />\r\n </div>\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {this.storeGeneral.searchShop === 'SB' && \r\n <React.Fragment>\r\n {(this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all !== 0) &&\r\n <React.Fragment>\r\n <span\r\n className = \"search-overlay__alternatives-header\"\r\n >\r\n Hieronder staan de eerste resultaten uit\r\n <span\r\n className = \"--link\"\r\n onClick = {() => this.handleChangeSegment('Alle boeken')}\r\n >\r\n {'Alle boeken'}\r\n </span>\r\n </span>\r\n <div className=\"search-results\">\r\n <BlocksBooks \r\n blockTitle = {i18n.t(\"blocks.search_results.header\")}\r\n type = \"alternative\"\r\n default_view = \"summaries\"\r\n page = \"search\"\r\n searchShop = {'ALL'}\r\n searchTerm = {this.props.searchTerm}\r\n />\r\n </div>\r\n </React.Fragment>\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {(this.storeUi.search_count_own === 0 && this.storeUi.search_count_sb === 0 && this.storeUi.search_count_all === 0) &&\r\n <FeedbackNoSearchResultsSuggestion\r\n \r\n />\r\n }\r\n </React.Fragment>\r\n }\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(SearchResult);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nconst SearchMinimumChars = inject(\"stores\") (\r\n observer (\r\n class SearchMinimumChars extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <React.Fragment>\r\n <div className=\"search-results\">\r\n Gebruik een langere zoekterm (minimaal 3 letters)\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default SearchMinimumChars;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport queryString from 'query-string';\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../templates/template';\r\nimport * as content from '../utilities/content';\r\nimport * as ui from '../utilities/ui';\r\n\r\nimport SearchSelectSegment from '../components/search/search-select-segment';\r\nimport SearchResult from '../components/search/search-result';\r\nimport SearchMinimumChars from '../components/search/search-minimum-chars';\r\n\r\nconst SearchResults = inject(\"stores\") (\r\n observer (\r\n class SearchResults extends React.PureComponent {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeSearch = this.props.stores.storeSearch;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n search: '',\r\n shop: this.storeGeneral.searchShop,\r\n feedbackChange: false,\r\n reload: true\r\n };\r\n }\r\n\r\n componentDidMount = async () => {\r\n if (this.storeSearch.getSearchViewPos() !== 0) {\r\n ui.handleScroll(this.storeSearch.getSearchViewPos())\r\n this.storeUi.setPageView('page', this.storeSearch.getSearchViewPage());\r\n } else {\r\n this.handleScroll();\r\n \r\n this.storeUi.setActiveMainNav(0);\r\n\r\n await (async() => this.getSearchParams(this.state.shop, this.props.location.search) )();\r\n\r\n const params = queryString.parse(this.props.location.search);\r\n\r\n this.storeUi.setPageView('total', this.storeUi.search_count);\r\n this.storeUi.setSearchOverlay(false);\r\n this.storeUi.setSearchInputFocus(false);\r\n\r\n //SbC on url reload\r\n //this.storeGeneral.setSearchShop('ALL');\r\n this.getSearchResultsInit();\r\n }\r\n\r\n //window.scrollTo(0, this.storeSearch.getSearchViewPos());\r\n }\r\n\r\n componentDidUpdate = async(prevProps, prevState) => {\r\n if (this.storeSearch.getSearchViewPos() !== 0) {\r\n window.scrollTo(this.storeSearch.getSearchViewPos(), 0);\r\n } else {\r\n this.handleScroll();\r\n }\r\n\r\n this.storeUi.setActiveMainNav(0);\r\n let section = '';\r\n\r\n const params = queryString.parse(this.props.location.search);\r\n let search_term = params.q;\r\n \r\n search_term = search_term.replace('?', \"\");\r\n search_term = search_term.replace('!', \"\");\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n if (params.section) {\r\n if ((params.section === 'sb' && this.storeGeneral.searchShop !== 'OWN') ||\r\n (params.section === 'zb' && this.storeGeneral.searchShop !== 'SB') ||\r\n (params.section === 'all' && this.storeGeneral.searchShop !== 'ALL')) {\r\n section = params.section;\r\n if (section === 'sb') {\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n this.storeGeneral.setSearchShop('OWN');\r\n }\r\n if (section === 'zb') {\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n this.storeGeneral.setSearchShop('SB');\r\n }\r\n if (section === 'all') {\r\n this.storeGeneral.setShop(\"SHOP_ALL\");\r\n this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n this.storeGeneral.setSearchShop('ALL');\r\n }\r\n }\r\n }\r\n\r\n if (this.state.search !== search_term) {\r\n await (async() => this.getSearchParams(this.state.shop, this.props.location.search) )();\r\n }\r\n\r\n if (this.storeUi.search_value !== search_term) {\r\n const path = \"/search-results\";\r\n const str_search = \"?q=\" + this.storeUi.search_value;\r\n\r\n this.props.history.push({\r\n pathname: path,\r\n search: str_search\r\n })\r\n }\r\n\r\n } else {\r\n if (this.state.search !== search_term) {\r\n await (async() => this.getSearchParams(this.state.shop, this.props.location.search) )();\r\n }\r\n }\r\n\r\n //this.storeUi.setPageView('total', this.storeUi.search_count);\r\n }\r\n\r\n componentWillUnmount = () => {\r\n const position = window.pageYOffset;\r\n //this.storeUi.setFreezePos(position);\r\n\r\n this.storeSearch.setSearchViewPos(position);\r\n this.storeSearch.setSearchViewPage(this.storeUi.page_view.page);\r\n }\r\n\r\n handleScroll = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n getSearchParams = async(shop, searchString) => {\r\n const params = queryString.parse(searchString);\r\n let section = '';\r\n\r\n if (params.q) {\r\n let search_term = params.q;\r\n search_term = search_term.replace('?', \"\");\r\n search_term = search_term.replace('!', \"\");\r\n\r\n if (params.section && params.section === 'sb') {\r\n section = 'sb';\r\n shop = 'OWN';\r\n\r\n this.setState({\r\n search: search_term,\r\n section: section,\r\n shop: shop\r\n })\r\n } else if (params.section && params.section === 'sball') {\r\n section = 'sb';\r\n shop = 'SB';\r\n\r\n this.setState({\r\n search: search_term,\r\n section: section,\r\n shop: shop\r\n })\r\n } else {\r\n this.setState({\r\n search: search_term,\r\n feedbackChange: false,\r\n reload: true\r\n })\r\n } \r\n\r\n this.storeUi.setSearchValue(search_term);\r\n\r\n let pc;\r\n if (params.pc) {\r\n pc = params.pc.trim();\r\n this.storeOrder.setAffiliateId(pc);\r\n }\r\n if (params.PC) {\r\n pc = params.PC.trim();\r\n this.storeOrder.setAffiliateId(pc);\r\n }\r\n }\r\n }\r\n\r\n getSearchResultsInit = async() => {\r\n const value = this.storeUi.search_value;\r\n let section = 'sb';\r\n \r\n if (this.storeGeneral.shop === 'SHOP_SB') {\r\n await (async() => this.storeUi.getSearchCountSB(value, section))();\r\n this.storeUi.setCountTotal(this.storeUi.search_count_sb);\r\n await (async() => this.storeUi.getSearchResultsSimple('SHOP_SB', value, section, this.storeUi.page_view, false) )();\r\n }\r\n\r\n if (this.storeGeneral.shop === 'SHOP_ALL') {\r\n section = '';\r\n // await (async() => this.storeUi.getSearchCountSB(value, section))();\r\n // await (async() => this.storeUi.getSearchResultsSB(value, '', this.storeUi.page_view))();\r\n // await (async() => this.storeUi.getSearchResultsSimple('SHOP_SB', value, '', this.storeUi.page_view, false))();\r\n await (async() => this.storeUi.getSearchCount(value, section))();\r\n this.storeUi.setCountTotal(this.storeUi.search_count_all);\r\n await (async() => this.storeUi.getSearchResultsSimple('SHOP_ALL', value, '', this.storeUi.page_view, false))();\r\n }\r\n }\r\n \r\n render() { \r\n return (\r\n <Template\r\n type = 'default'\r\n header = {(this.storeUi.checkFeature('SHOP_ALL')) \r\n ? this.storeGeneral.shop === 'SHOP_ALL' ? \"search_results_all\" : \"search_results_sb\"\r\n : \"search_results\"\r\n }\r\n useScroll = {false}\r\n >\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n (this.storeUi.search_value.trim().length >= 3 || content.searchChars(this.storeUi.search_value.trim())) &&\r\n <div className=\"content-segment--clean\">\r\n <SearchSelectSegment\r\n updateSearch = {this.updateSearch}\r\n searchShop = {this.storeGeneral.searchShop}\r\n searchTerm = {this.state.search}\r\n />\r\n </div>\r\n }\r\n\r\n {(this.storeUi.search_value.trim().length >= 3 || content.searchChars(this.storeUi.search_value.trim()))\r\n ? <SearchResult \r\n searchShop = {this.storeGeneral.searchShop}\r\n searchTerm = {this.state.search}\r\n page = {this.storeUi.page_view.page}\r\n inview = {this.storeUi.page_view.inview}\r\n grid = {\"full\"}\r\n />\r\n : <SearchMinimumChars\r\n\r\n />\r\n }\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(SearchResults);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport i18n from \"i18next\";\r\n\r\nconst CartEmpty = inject(\"stores\") (\r\n observer (\r\n class CartEmpty extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.props.section == \"cart\") {\r\n this.storeOrder.deleteOrderLineShipping(this.props.orderId);\r\n }\r\n }\r\n\r\n continueShopping = (e) => {\r\n const id = this.storeUser.user_data.is_loggedin \r\n ? this.storeUser.user_data.user_id \r\n : 0\r\n ;\r\n this.storeOrder.setCartView(id, \"client\");\r\n this.props.history.push(\"/\");\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n {this.props.section == \"wishlist\" &&\r\n <div className=\"cart\">\r\n <p>Er staan nog geen boeken op je verlanglijstje.</p>\r\n </div>\r\n }\r\n\r\n {this.props.section == \"cart\" &&\r\n <div className=\"cart\">\r\n <p>Er staat nog niets in je winkelwagentje</p>\r\n </div>\r\n }\r\n\r\n <div className=\"cart__actions\"> \r\n <button \r\n className=\"btn btn--primary\" \r\n onClick={(e) => this.continueShopping(e)}\r\n >\r\n {i18n.t(\"button.continue_shopping\")}\r\n </button>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CartEmpty);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport i18next from 'i18next';\r\nimport { Redirect } from 'react-router';\r\n\r\nimport * as content from '../utilities/content';\r\n\r\nimport ImgCover from '../elements/img-cover';\r\n\r\nconst TemplateCartProduct = inject(\"stores\") (\r\n observer (\r\n class TemplateCartProduct extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n redirect: false\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n \r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.book !== this.props.book) {\r\n let description = this.constructTitle(this.props.book);\r\n this.setState({\r\n description: description\r\n })\r\n }\r\n }\r\n\r\n constructTitle = () => {\r\n let title = this.props.book ? this.props.book.title : '';\r\n let collectionName = '';\r\n let collectionPart = '';\r\n let versionTag = '';\r\n \r\n if (this.props.book) {\r\n if (this.props.book.collection_name && this.props.book.collection_name !== null) {\r\n collectionName = this.props.book.collection_name + ': ';\r\n \r\n }\r\n if (this.props.book.collection_part && this.props.book.collection_part !== null) {\r\n collectionPart = ' ' + this.props.book.collection_part;\r\n }\r\n if (this.props.book.version_tag && this.props.book.version_tag !== null) {\r\n versionTag = ' (' + this.props.book.version_tag + ')';\r\n }\r\n }\r\n\r\n title = collectionName + title + collectionPart + versionTag;\r\n\r\n return title;\r\n }\r\n\r\n handleClose = () => {\r\n this.storeUi.closeDialogDelete();\r\n }\r\n\r\n handleOnClick = async(sku) => { \r\n if (this.props.editable === true) {\r\n const shop = await this.storeUi.checkShopForSku(sku); \r\n const book = await this.storeBooks.returnBookDetailsBySku(shop, sku);\r\n\r\n this.setState({\r\n book: book,\r\n redirect: true\r\n });\r\n }\r\n }\r\n\r\n openDialog = () => {\r\n this.storeUi.openDialogDelete(this.props.product);\r\n }\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n const id = content.formatTitle(this.state.book.title);\r\n return <Redirect \r\n push to={\"/book/\" + this.props.product.sku + \"/\" + id} \r\n />;\r\n }\r\n\r\n return (\r\n <React.Fragment>\r\n <div className=\"products-table__row--details\">\r\n <div className=\"products-table__cell products-table__cell--details-wrapper\">\r\n <div \r\n className={\"products-table__cell--details-content\" + (this.props.editable === true ? \" --link\" : \"\")} \r\n onClick={() => this.handleOnClick(this.props.product.sku)}\r\n >\r\n <div className=\"products-table__cell products-table__cell--sku\">\r\n <ImgCover\r\n sku = {this.props.product.sku}\r\n />\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--title\"\r\n dangerouslySetInnerHTML={{ __html: this.state.description}}\r\n />\r\n </div>\r\n </div>\r\n\r\n {this.props.children}\r\n\r\n {this.props.editable === true &&\r\n <div onClick={(e) => this.openDialog(e)} className=\"products-table__cell products-table__cell--icon products-table__cell--icon\">\r\n <span className=\"icon icon--delete\"></span>\r\n </div>\r\n }\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default TemplateCartProduct;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport DialogConfirmation from '../dialogs/dialog-confirmation';\r\nimport * as utilities from '../../utilities/formats';\r\nimport validate from '../../utilities/validation-rules';\r\n\r\nimport i18next from 'i18next';\r\n\r\nconst FeedbackOrderLineDiscount = inject(\"stores\") (\r\n observer (\r\n class FeedbackOrderLineDiscount extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n amount: 1,\r\n discount: 0,\r\n discount_perc: 0,\r\n discount_overruled: 0\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n this.setState({\r\n amount: this.props.amount,\r\n discount: this.props.discount,\r\n discount_perc: this.props.discount_perc,\r\n discount_overruled: this.props.discount_overruled\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.sku !== this.props.sku\r\n || (prevProps.discountPerc !== this.props.discountPerc)\r\n || (prevProps['amount'] !== this.props['amount'] || this.state.amount !== this.props['amount'] ) \r\n || (prevProps.discount !== this.props.discount)\r\n || (prevProps.discount_perc !== this.props.discount_perc)\r\n || (prevProps.discount_overruled !== this.props.discount_overruled)) {\r\n this.setState({\r\n discountPerc: this.props.discountPerc,\r\n amount: this.props['amount'],\r\n discount: this.props.discountPerc,\r\n discount_perc: this.props.discount_perc,\r\n discount_overruled: this.props.discount_overruled\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n {(this.state.discount_overruled === 0) &&\r\n <div className=\"products-table__row--details\">\r\n {(this.state.discountPerc > 0)\r\n ? <div className=\"products-table__row--discount --has-discount\">Er is op dit product een korting van {Math.round(this.props.discountPerc)}% toegepast\r\n {((this.state.discount === this.state.discount_overruled && this.state.amount > 1 && this.props.discount_overruled === 1) || (this.props.discount_overruled !== 1)) &&\r\n this.state.amount > 1 &&\r\n <span> (meerdere besteld)</span>\r\n }\r\n </div>\r\n : null\r\n }\r\n </div>\r\n }\r\n\r\n {this.state.discount_overruled !== 0 &&\r\n <div className=\"products-table__row--discount --has-discount\">\r\n Er is op dit product een korting van {this.state.discount_overruled}% toegepast.\r\n </div>\r\n } \r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default FeedbackOrderLineDiscount;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport * as utilities from '../../utilities/formats';\r\nimport validate from '../../utilities/validation-rules';\r\n\r\nimport TextInput from '../../elements/form-input-text';\r\nimport i18next from 'i18next';\r\nimport TemplateCartProduct from '../../templates/template-cart-product';\r\nimport FeedbackOrderLineDiscount from '../feedback/feedback-orderline-discount';\r\n\r\nconst CartProduct = inject(\"stores\") (\r\n observer (\r\n class CartProduct extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeDiscounts = this.props.stores.storeDiscounts;\r\n this.storeShipping = this.props.stores.storeShipping;\r\n\r\n this.state = {\r\n formControls: { \r\n amount: {\r\n value: this.props.product.amount,\r\n valid: false,\r\n validationRules: {\r\n isInteger: true\r\n }\r\n }\r\n },\r\n publicationSB: false,\r\n discount: 0,\r\n discount_perc: 0,\r\n discount_overruled: 0,\r\n book: {}\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n (async() => await this.storeUi.getUserDiscounts())();\r\n (async() => await this.getProduct())();\r\n \r\n const userId = this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.user_id : 0;\r\n //let discount = await this.calculateDiscount();\r\n\r\n this.calculateRowPrice(this.props.product.price);\r\n (async() => await this.calculateShipping() )();\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let discount;\r\n const userId = this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.user_id : 0;\r\n\r\n if (prevProps.sku !== this.props.sku) {\r\n (async() => await this.getProduct())();\r\n \r\n (async() => await this.calculateShipping() )();\r\n\r\n if (this.props.discount_overruled === 1 || this.props.discount_overruled === '1') {\r\n //let discounts_set = this.setDiscountOverruled();\r\n }\r\n\r\n this.calculateRowPrice(this.props.product.price);\r\n }\r\n\r\n if ((prevProps.discount_overruled !== this.props.discount_overruled)) {\r\n if (this.props.discount_overruled === 1 || this.props.discount_overruled === '1') {\r\n //let discounts_set = await this.setDiscountOverruled();\r\n //discount = await this.calculateDiscount();\r\n this.calculateRowPrice(this.props.product.price);\r\n } else {\r\n //SbC\r\n //discount = await this.calculateDiscount();\r\n this.storeOrder.saveShoppingCartToDB(this.storeOrder.order_data.client_id, this.storeOrder.cart.user);\r\n \r\n //SbC from 1 -> 0\r\n this.setState({\r\n discount_perc: 0,\r\n discount_overruled: this.props.discount_overruled\r\n }, () => this.calculateRowPrice(this.props.product.price))\r\n }\r\n }\r\n\r\n if ((prevProps.reload !== this.props.reload) && this.storeUi.app_interface.reload === true ) {\r\n (async() => await this.getProduct())();\r\n \r\n (async() => await this.calculateShipping() )();\r\n\r\n this.storeUi.reloadOrderLines(false);\r\n\r\n if (this.state.formControls.amount.value === null || this.state.formControls.amount.value === '') {\r\n const name = 'amount';\r\n const value = this.state.oldAmount;\r\n\r\n this.handleChange(name, value);\r\n }\r\n\r\n this.calculateRowPrice(this.props.product.price); \r\n }\r\n\r\n if ((prevProps.amount !== this.props.amount)) {\r\n const name = 'amount';\r\n const value = this.props.amount;\r\n (async() => await this.calculateDiscount())();\r\n\r\n //SbC TEST\r\n //this.storeOrder.saveShoppingCartToDB(this.storeOrder.order_data.client_id, this.storeOrder.cart.user);\r\n\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...updatedControls[name],\r\n value\r\n }\r\n },\r\n ['amount']: {\r\n ...this.state.formControls['amount'],\r\n value\r\n }\r\n }, async() => await this.calculateShipping())\r\n }\r\n\r\n if (prevProps.discount_perc !== this.props.discount_perc) {\r\n // SbC CHECK DEPRICATED???\r\n // this.setState({\r\n // discount_perc: this.props.discount_perc\r\n // });\r\n \r\n // const value = this.props.amount;\r\n // (async() => await this.calculateDiscount())();\r\n //SbC end\r\n\r\n this.calculateRowPrice(this.props.product.price);\r\n (async() => await this.calculateShipping() )();\r\n }\r\n }\r\n\r\n calculateShipping = async() => {\r\n let shipping;\r\n // SbC TO BE REPLACED BY store shipping\r\n //shipping = await this.storeOrder.calculateShipping(userId);\r\n\r\n let orderId = this.storeOrder.order_data.order_id;\r\n shipping = await this.storeShipping.calculateShipping(orderId);\r\n }\r\n\r\n setDiscountOverruled = async() => {\r\n // let cart_line = [];\r\n // const order_lines_data = await this.storeOrder.getOrderLinesData(this.storeOrder.order_data.order_id);\r\n\r\n // cart_line = order_lines_data\r\n // .filter((order_line) => parseInt(order_line.book_id) === parseInt(this.props.product.id) || order_line.book_id === this.props.product.sku);\r\n\r\n \r\n // if (cart_line.length > 0) {\r\n // const discount = cart_line[0] \r\n // ? cart_line[0].discount \r\n // : 0;\r\n\r\n // this.storeOrder.setDiscountOverruled(cart_line[0].book_id, cart_line[0].book_id, discount);\r\n // this.setState({\r\n // discount_overruled: discount\r\n // }, async() => await this.calculateDiscount());\r\n // }\r\n }\r\n\r\n async getProduct() {\r\n let shop;\r\n let book;\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n shop = 'SHOP_ALL';\r\n } else {\r\n shop = 'SHOP_SB';\r\n }\r\n\r\n if (this.props.product.sku !== 0 && this.props.product.sku !== undefined) {\r\n book = await this.storeBooks.returnBookDetailsBySku(shop, this.props.product.sku);\r\n } else {\r\n book = {};\r\n }\r\n\r\n const name = 'amount';\r\n const value = this.props.product.amount;\r\n\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n\r\n this.setState({\r\n book: book,\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...updatedControls[name],\r\n value\r\n }\r\n },\r\n ['amount']: {\r\n ...this.state.formControls['amount'],\r\n value\r\n }\r\n }, async() => book && await this.calculateDiscount());\r\n }\r\n\r\n calculateRowPrice = (unit_price) => {\r\n let total = 0;\r\n // let discount = (this.state.discount_applied) ? this.state.discount : 0;\r\n // //discount = (this.state.discount_applied_extra) ? this.state.discount_extra : discount;\r\n // discount = (this.state.discount_overruled) ? this.state.discount_overruled : discount;\r\n\r\n let calculatedDiscount = 0;\r\n\r\n if (this.storeAuth.user.is_loggedin) {\r\n calculatedDiscount = this.state.discountPerc;\r\n }\r\n\r\n if (unit_price) {\r\n let price = unit_price * this.state.formControls.amount.value * (1 - (calculatedDiscount / 100));\r\n price = Math.round(price * 100) / 100;\r\n total = utilities.formatPrice(price);\r\n this.storeOrder.saveRowPrice(this.storeUser.user_data.is_loggedin, this.props.product.id, this.props.product.sku, total, calculatedDiscount);\r\n } else {\r\n total = 'UNKNOWN';\r\n }\r\n\r\n return utilities.displayPrice(total);\r\n }\r\n\r\n calculateDiscount = async() => {\r\n const orderId = this.storeOrder.order_data.order_id;\r\n const calculatedDiscount = await this.storeDiscounts.calcItemDiscount(orderId, this.props.product);\r\n\r\n //console.log('SbC calculated', calculatedDiscount)\r\n this.setState({\r\n discount: calculatedDiscount,\r\n discountPerc: calculatedDiscount,\r\n discount_perc: calculatedDiscount\r\n });\r\n\r\n this.storeOrder.setDiscountOverruled(this.props.product.id, this.props.product.sku, calculatedDiscount);\r\n\r\n //TEST FOR DISAPPPEARING DISCOUNT\r\n //this.storeOrder.saveShoppingCartToDB(this.storeOrder.order_data.client_id, this.storeOrder.cart.user);\r\n\r\n //SbC Update discount %\r\n const userId = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n const value = this.state.formControls.amount.value;\r\n const discount = calculatedDiscount;\r\n\r\n (async() => await this.storeOrder.addToCart(this.storeGeneral.shop, userId, this.state.book, 'replace', value, discount) )();\r\n \r\n return calculatedDiscount;\r\n }\r\n\r\n displayPrice = (price) => {\r\n const total = utilities.formatPrice(price);\r\n return utilities.displayPrice(total);\r\n }\r\n\r\n handleBlur = event => { \r\n if (this.state.formControls.amount.value === null || this.state.formControls.amount.value === '') {\r\n this.storeUi.openDialogDelete(this.props.product);\r\n }\r\n }\r\n\r\n handleChange = async(name, value) => { \r\n const userId = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n //(async() => await this.calculateDiscount())();\r\n //let discount2 = await this.calculateDiscount();\r\n // const orderId = this.storeOrder.order_data.order_id;\r\n // const discount2 = await this.storeDiscounts.calcItemDiscount(orderId, this.props.product);\r\n // console.log('SbC discount2', discount2, this.props.product.discount, this.props.product);\r\n\r\n if (parseInt(value) === 0 || parseInt(value) === '') {\r\n this.setState({\r\n oldAmount: this.state.formControls.amount.value\r\n });\r\n this.storeUi.openDialogDelete(this.props.product);\r\n } else {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n \r\n if (updatedFormElement.valid) {\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...updatedControls[name],\r\n value\r\n }\r\n }\r\n }, async() => {\r\n let discount;\r\n // for (let i = 0; i < this.storeOrder.cart.user.length; i++) {\r\n // if (this.props.sku === this.storeOrder.cart.user[i].sku) {\r\n // discount = this.storeOrder.cart.user[i].discount;\r\n // }\r\n // } \r\n\r\n //SbC update cart DB and orderlines\r\n discount = this.props.product.discount;\r\n (async() => await this.storeOrder.addToCart(this.storeGeneral.shop, userId, this.state.book, 'replace', value, discount) )();\r\n \r\n //this.storeOrder.calculateShipping(userId);\r\n let orderId = this.storeOrder.order_data.order_id;\r\n let shipping = this.storeShipping.calculateShipping(orderId);\r\n });\r\n }\r\n } \r\n }\r\n\r\n render() {\r\n const book = this.state.book;\r\n\r\n return (\r\n <li key={this.props.key} className=\"products-table__row\">\r\n <TemplateCartProduct\r\n sku = {this.props.product.sku}\r\n product = {this.props.product}\r\n editable = {this.props.editable}\r\n book = {book}\r\n >\r\n <div className=\"products-table__cell products-table__cell--price-wrapper\">\r\n <div className=\"products-table__cell products-table__cell--amount\">\r\n <span className=\"amount\">\r\n {book && this.displayPrice(book.price_incl)}\r\n </span>\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--count\">\r\n {this.props.editable === true\r\n ? <TextInput \r\n name = {'amount'} \r\n placeholder = {this.state.formControls['amount'].placeholder}\r\n value = {this.state.formControls.amount.value}\r\n valid = {true}\r\n onChange = {(e) => this.handleChange(e.target.name, e.target.value)}\r\n onBlur = {this.handleBlur}\r\n className = {\"--int-small\"}\r\n />\r\n : this.props.product.amount\r\n }\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--amount\"><span className=\"amount\">{book && this.calculateRowPrice(book.price_incl)}</span></div>\r\n </div>\r\n </TemplateCartProduct>\r\n\r\n {this.props.product.status !== 'deletedx' &&\r\n <FeedbackOrderLineDiscount\r\n sku = {this.props.sku}\r\n amount = {this.state.formControls.amount.value}\r\n discountPerc = {this.state.discountPerc}\r\n discount = {this.state.discount ? this.state.discount : 0}\r\n discount_overruled = {this.state.discount_overruled}\r\n discount_perc = {this.state.discount_perc} \r\n />\r\n }\r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default CartProduct;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport DialogConfirmation from '../dialogs/dialog-confirmation';\r\nimport * as utilities from '../../utilities/formats';\r\nimport validate from '../../utilities/validation-rules';\r\n\r\nimport i18next from 'i18next';\r\n\r\nconst FeedbackOrderDelivery = inject(\"stores\") (\r\n observer (\r\n class FeedbackOrderDelivery extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div className=\"feedback feedback--order-delivery\">\r\n <span className=\"feedback--order-delivery__header\">Let op:</span>\r\n <span className=\"feedback--order-delivery__text\">Bij een bestelling van meerdere artikelen zullen alle artikelen tegelijkertijd worden verstuurd. Bij verschillende levertijden kan het dus gebeuren dat een artikel later geleverd wordt dan de vermelde levertijd.</span>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default FeedbackOrderDelivery;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as utilities from '../utilities/formats';\r\nimport TextInput from '../elements/form-input-text';\r\n\r\nimport CartEmpty from '../components/cart/cart-empty';\r\nimport CartProduct from '../components/cart/cart-product';\r\nimport FeedbackOrderDelivery from '../components/feedback/feedback-order-delivery';\r\n\r\nconst RemarkShippingCosts = inject(\"stores\") (\r\n observer (\r\n class RemarkShippingCosts extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n\r\n }\r\n\r\n discountApplied = () => {\r\n let discount_applied = false;\r\n\r\n let is_reseller = this.storeOrder.order_data.client_settings.is_reseller;\r\n let discount_minamount = (is_reseller) ? this.storeOrder.settings_list[\"resellerMinAmount\"] : 2;\r\n\r\n {this.storeUser.user_data.is_loggedin &&\r\n this.storeOrder.cart.user.map((product) => {\r\n if (product.amount > 0) {\r\n discount_applied = (product.discount > 0) ? true : discount_applied; \r\n discount_applied = (this.storeOrder.order_settings.discounts_overruled === 1 && product.discount > 0) ? true : discount_applied;\r\n }\r\n })\r\n }\r\n return discount_applied;\r\n }\r\n \r\n render() {\r\n const discount_applied = this.discountApplied()\r\n \r\n return (\r\n <span>\r\n {this.storeAuth.user.is_loggedin\r\n ? this.storeAuth.user.is_reseller\r\n ? discount_applied\r\n ? 'Aangezien er op één of meerdere producten korting is toegepast, worden er altijd verzendkosten berekend, tenzij het totaalbedrag groter is dan € 250,-'\r\n : 'Voor orders vanaf € 20,- incl. btw binnen Nederland zijn de verzendkosten voor onze rekening'\r\n : discount_applied\r\n ? 'Aangezien er op één of meerdere producten korting is toegepast, worden er altijd verzendkosten berekend, tenzij het totaalbedrag groter is dan € 250,-'\r\n : 'Voor orders vanaf € 20,- incl. btw binnen Nederland zijn de verzendkosten voor onze rekening'\r\n : 'Voor orders vanaf € 20,- incl. btw binnen Nederland zijn de verzendkosten voor onze rekening'\r\n }\r\n\r\n {(this.storeOrder.order_data.shopping_cart.cart_total_incl > 19.5 && this.storeOrder.order_data.shopping_cart.cart_total_incl < 20)\r\n ? '; helaas is een computer hier niet flexibel in.'\r\n : '.'\r\n }\r\n </span>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst Cart = inject(\"stores\") (\r\n observer (\r\n class Cart extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeShipping = this.props.stores.storeShipping;\r\n\r\n this.state = {\r\n formControls: { \r\n remark: {\r\n label: i18n.t(\"forms.label.remark_order\"),\r\n value: this.storeOrder.order_data.order_remark,\r\n placeholder: i18n.t(\"forms.placeholder.remark_order\"),\r\n touched: false,\r\n valid: true \r\n }\r\n }\r\n }\r\n }\r\n\r\n async componentDidMount() {\r\n window.scrollTo(0, 0);\r\n this.storeOrder.deleteUseCaseFromLS();\r\n const userId = this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.user_id : 0;\r\n\r\n if (userId === 0) {\r\n this.storeOrder.resetOrderData(true);\r\n }\r\n\r\n // const payment_status = await this.storeOrder.getOrderStatus(this.props.storeOrder.order_data.order_guid);\r\n // console.log('SbC check order status', payment_status);\r\n\r\n if (this.storeOrder.settings_list === undefined || this.storeOrder.settings_list.length == 0) {\r\n await this.storeOrder.getSettings();\r\n //(async() => await this.storeOrder.getSettings() )();\r\n }\r\n\r\n if (this.storeOrder.order_data.order_id !== undefined && this.storeOrder.order_data.order_id !== 0) {\r\n await this.checkDiscountsOverruled();\r\n await this.checkShippingCostsOverruled();\r\n await this.checkShippingCostsCustom();\r\n }\r\n\r\n //await this.storeOrder.calculateShipping(userId);\r\n // SbC TODO what if no order id yet ??\r\n let orderId = this.storeOrder.order_data.order_id;\r\n //(async() => await this.storeShipping.calculateShipping(orderId) )();\r\n let shipping = await this.storeShipping.calculateShipping(orderId);\r\n\r\n let view = 'cart';\r\n this.storeOrder.setCartView(userId, view);\r\n let url = \"/shoppingcart/\" + view;\r\n this.props.history.push(url);\r\n }\r\n\r\n componentDidUpdate = async() => {\r\n let payment_status;\r\n let payment2_status = 'current';\r\n\r\n const userId = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n if (this.storeOrder.order_data.order_guid !== '' && this.storeOrder.order_data.order_guid !== null) {\r\n payment_status = await this.storeOrder.getOrderStatus(this.storeOrder.order_data.order_guid);\r\n }\r\n\r\n /* SbC check for payment from other device */\r\n let order_id = this.storeOrder.order_data.order_id;\r\n if (order_id !== 0 && order_id !== '0' && order_id !== 99 && order_id !== '99') {\r\n payment2_status = await this.storeOrder.getPaymentStatus(order_id);\r\n \r\n if (payment2_status === 'payment_completed' || payment2_status === 'payment_confirmed' || payment2_status === 'banktransfer') {\r\n this.storeOrder.clearCartAfterPayment();\r\n }\r\n }\r\n /* */\r\n\r\n if (payment_status === 'payment_confirmed' || payment_status === 'payment_completed' || payment_status === 'banktransfer') {\r\n this.storeOrder.clearAllShoppingCarts(this.storeUser.user_data.is_loggedin, this.storeOrder.order_data.order_guid);\r\n let view = 'cart';\r\n this.storeOrder.setCartView(userId, view);\r\n let url = \"/shoppingcart/\" + view;\r\n this.props.history.push(url);\r\n }\r\n\r\n //await this.storeOrder.calculateShipping(userId);\r\n await this.checkDiscountsOverruled();\r\n await this.checkShippingCostsOverruled();\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeOrder.setCartChanges(false);\r\n }\r\n \r\n continueShopping = () => {\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n this.storeOrder.setCartView(id, \"client\");\r\n this.storeUi.setUseCase(\"inshop\");\r\n this.props.history.push(\"/\");\r\n }\r\n\r\n checkDiscountsOverruled = async() => {\r\n let discount_overruled = false;\r\n discount_overruled = await this.storeOrder.checkDiscountsOverruled();\r\n }\r\n\r\n checkShippingCostsOverruled = async() => {\r\n let shipping_overruled = false;\r\n shipping_overruled = await this.storeOrder.checkShippingCostsOverruled();\r\n }\r\n\r\n checkShippingCostsCustom = async() => {\r\n let shipping_custom = false;\r\n shipping_custom = await this.storeOrder.checkShippingCostsCustom();\r\n }\r\n\r\n checkFeedbackDelivery = () => {\r\n let count = 0;\r\n let feedback = false;\r\n \r\n if (this.storeUser.user_data.is_loggedin) {\r\n this.storeOrder.cart.user.map((product, i) => (\r\n (product.status !== 'deletedx' && product.amount !== 0) && count++\r\n )\r\n )}\r\n\r\n if (!this.storeUser.user_data.is_loggedin) {\r\n this.storeOrder.cart.anonymous.map((product, i) => (\r\n (product.status !== 'deletedx' && product.amount !== 0) && count++\r\n )\r\n )}\r\n \r\n return count > 1 ? true : false;\r\n }\r\n\r\n gotoCart = async() => {\r\n let id;\r\n let data = [];\r\n\r\n this.storeUi.setUseCase(\"inorder\");\r\n\r\n if (this.storeUser.user_data.is_loggedin) {\r\n id = this.storeUser.user_data.user_id;\r\n data = [{\r\n 'is_partner' : this.storeAuth.user.is_partner,\r\n 'is_reseller': this.storeAuth.user.is_reseller\r\n }]\r\n } else {\r\n id = 0;\r\n data = [{\r\n 'is_partner' : 0,\r\n 'is_reseller': 0\r\n }]\r\n }\r\n\r\n this.storeOrder.setClientId(id, data);\r\n\r\n let order_id = this.storeOrder.order_data.order_id; \r\n\r\n //Sbc check!!\r\n const orderId = await this.storeOrder.returnOrderId(id);\r\n if (orderId !== 0 && orderId !== '0' && orderId !== 99 && orderId !== '99') {\r\n order_id = orderId;\r\n } \r\n\r\n if (orderId !== 0 && orderId !== '0' && orderId !== 99 && orderId !== '99') {\r\n let order_availability = await this.storeOrder.getOrderAvailability();\r\n\r\n if (order_availability === 'open') {\r\n await this.storeOrder.editOrder(id, this.state.formControls.remark.value);\r\n\r\n let hasShippingLine = await this.storeOrder.checkOrderLineShipping(order_id);\r\n if (!hasShippingLine) {\r\n await this.storeOrder.addOrderLineShipping();\r\n }\r\n } \r\n if (order_availability === 'closed') {\r\n order_id = await this.storeOrder.createNewOrder(id, this.state.formControls.remark.value);\r\n }\r\n } else {\r\n if (this.storeUser.user_data.is_loggedin) {\r\n order_id = await this.storeOrder.createNewOrder(id, this.state.formControls.remark.value);\r\n }\r\n }\r\n this.storeOrder.calculateTotal();\r\n this.storeOrder.setOrderRemarkLS(this.state.formControls.remark.value);\r\n\r\n // if (this.storeUi.app_interface.return_state == \"review\") {\r\n // this.storeOrder.setCartView(\"review\");\r\n // this.props.history.push(\"/shoppingcart/review\");\r\n // } else {\r\n this.storeOrder.setCartView(id, \"client\");\r\n this.props.history.push(\"/shoppingcart/client\");\r\n //}\r\n }\r\n\r\n handleChange = (event) => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n });\r\n }\r\n\r\n render() {\r\n let country;\r\n let country_code;\r\n let idx;\r\n\r\n // if (this.storeOrder.order_data.client_settings.has_delivery_address === true) {\r\n // idx = this.storeOrder.countriesList.findIndex(country => country.code === this.storeOrder.order_data.delivery_address.country_code)\r\n // country_code = this.storeOrder.order_data.delivery_address.country_code;\r\n // } else {\r\n // if (this.storeAuth.user.is_loggedin) {\r\n // idx = this.storeOrder.countriesList.findIndex(country => country.code === this.storeUser.user_data.profile.country_code)\r\n // country_code = this.storeOrder.order_data.client_profile.country_code;\r\n // } else {\r\n // idx = this.storeOrder.countriesList.findIndex(country => country.code === this.storeOrder.order_data.client_profile.country_code)\r\n // country_code = this.storeOrder.order_data.client_profile.country_code;\r\n // }\r\n // }\r\n\r\n if (this.storeOrder.order_data.client_settings.has_delivery_address === true) {\r\n idx = this.storeOrder.countriesList.findIndex(country => country.code === this.storeOrder.order_data.delivery_address.country_code)\r\n country_code = this.storeOrder.order_data.delivery_address.country_code;\r\n } else {\r\n //SbC check if loggedin -> use country code from profile\r\n if (this.storeAuth.user.is_loggedin) {\r\n country_code = this.storeUser.user_data.profile.country_code;\r\n idx = this.storeOrder.countriesList.findIndex(country => country.code === country_code)\r\n } else {\r\n country_code = this.storeOrder.order_data.client_profile.country_code;\r\n idx = this.storeOrder.countriesList.findIndex(country => country.code === this.storeOrder.order_data.client_profile.country_code)\r\n }\r\n }\r\n\r\n if (idx !== -1) {\r\n country = this.storeOrder.countriesList[idx].displayValue;\r\n }\r\n\r\n let items = this.storeUser.user_data.is_loggedin \r\n ? this.storeOrder.cart.user \r\n : this.storeOrder.cart.anonymous\r\n\r\n idx = items\r\n .findIndex(item => item.status !== 'deletedx' && item.amount !== 0)\r\n\r\n return (\r\n <React.Fragment>\r\n {(items.length > 0 && idx !== -1)\r\n ? <div className=\"cart\">\r\n <ul className=\"products-table\">\r\n <li className=\"products-table__header\">\r\n <div className=\"products-table__cell products-table__cell--sku\">ISBN</div>\r\n <div className=\"products-table__cell products-table__cell--title\">Titel</div>\r\n <div className=\"products-table__cell products-table__cell--amount\">Prijs</div>\r\n <div className=\"products-table__cell products-table__cell--count\">Aantal</div>\r\n <div className=\"products-table__cell products-table__cell--amount\">Totaal</div>\r\n </li>\r\n {this.storeUser.user_data.is_loggedin && this.storeOrder.cart.user.map((product, i) => (\r\n (product.status !== 'deletedx' && product.amount !== 0 && product.sku !== 0 && product.sku !== undefined)\r\n ? <CartProduct\r\n key = {i}\r\n product = {product}\r\n amount = {product.amount}\r\n discount_perc = {product.discount}\r\n sku = {product.sku}\r\n editable = {true}\r\n discount_overruled = {this.storeOrder.order_settings.discounts_overruled}\r\n reload = {this.storeUi.app_interface.reload}\r\n />\r\n : (process.env.REACT_APP_ENV === 'dev') \r\n ? <div><span>{product.description}</span><br/></div> \r\n : null\r\n ))}\r\n\r\n {!this.storeUser.user_data.is_loggedin && this.storeOrder.cart.anonymous.map((product, i) => ( \r\n (product.status !== 'deletedx' && product.amount !== 0)\r\n ? <CartProduct\r\n key = {i}\r\n product = {product}\r\n amount = {product.amount}\r\n discount_perc = {product.discount}\r\n sku = {product.sku}\r\n editable = {true}\r\n discount_overruled = {0}\r\n reload = {this.storeUi.app_interface.reload}\r\n />\r\n : (process.env.REACT_APP_ENV === 'dev') \r\n ? <div><span>{product.description}</span><br/></div>\r\n : null\r\n ))}\r\n </ul>\r\n <ul className=\"totals-table\">\r\n <li className=\"totals-table__row\">\r\n <div className=\"products-table__cell\">Totaal</div>\r\n <div className=\"products-table__cell products-table__cell--amount\">\r\n {/* <span className=\"amount\">{utilities.displayPrice(this.storeOrder.order_data.shopping_cart.cart_total_incl)}</span> */}\r\n <span className=\"amount\">{utilities.displayPrice(this.storeOrder.cartTotalIncl)}</span>\r\n </div>\r\n </li>\r\n <li className=\"totals-table__row\">\r\n <div className=\"products-table__cell\">Verzendkosten *</div>\r\n <div className=\"products-table__cell products-table__cell--amount\">\r\n {/* <span className=\"amount\">{utilities.displayPrice(this.storeOrder.order_data.shipping_costs)}</span> */}\r\n <span className=\"amount\">{utilities.displayPrice(this.storeOrder.shippingCosts)}</span>\r\n </div>\r\n </li>\r\n {process.env.REACT_APP_ENV === 'dev' &&\r\n <li className=\"totals-table__row\">\r\n <div className=\"products-table__cell products-table__cell--descr\">(Gewicht: {this.storeOrder.calculateWeight} gr)</div>\r\n </li>\r\n }\r\n <li className=\"totals-table__row totals-table__row--totals\">\r\n <div className=\"products-table__cell\">\r\n <span className=\"products-table__cell--totals\">Totale kosten (incl. btw)</span>\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--amount\">\r\n <span className=\"products-table__cell--totals\">\r\n <span className=\"amount\">{utilities.displayPrice(this.storeOrder.calculateTotalOrder)}</span>\r\n </span>\r\n </div>\r\n </li>\r\n {/* <li className=\"totals-table__row\">\r\n <div className=\"products-table__cell --small\">(btw {this.storeUi.settings_list[\"btwNull\"]}%</div>\r\n <div className=\"products-table__cell products-table__cell--amount --small\"><span className=\"amount\">{this.storeOrder.calculateVATOrder('btwNull', this.storeUi.settings_list)})</span></div>\r\n </li> */}\r\n <li className=\"totals-table__row\">\r\n <div className=\"products-table__cell --small\">Btw {this.storeUi.settings_list[\"btwLow\"]}%</div>\r\n <div className=\"products-table__cell products-table__cell--amount --small\"><span className=\"amount\">{utilities.displayPrice(this.storeOrder.calculateOrderVAT(this.storeUser.user_data.is_loggedin, 'btwLow'))}</span></div>\r\n </li>\r\n <li className=\"totals-table__row\">\r\n <div className=\"products-table__cell --small\">Btw {this.storeUi.settings_list[\"btwHigh\"]}%</div>\r\n <div className=\"products-table__cell products-table__cell--amount --small\"><span className=\"amount\">{utilities.displayPrice(this.storeOrder.calculateOrderVAT(this.storeUser.user_data.is_loggedin, 'btwHigh'))}</span></div>\r\n </li>\r\n </ul>\r\n \r\n {country_code === 'NL'\r\n ? <div className=\"cart__text--descr-shipping\">\r\n {this.storeOrder.order_settings.no_shipping_costs === 1\r\n ? <React.Fragment>\r\n <span>Er zullen binnen Nederland geen verzendkosten berekend worden.</span>\r\n <br/>\r\n <span>Voor verzending naar andere landen geldt een ander tarief.</span>\r\n </React.Fragment>\r\n : <React.Fragment>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t('cart.shipping_nl', {country: country})}} />\r\n <br/>\r\n <span>Voor verzending naar andere landen geldt een ander tarief.</span>\r\n <br/>\r\n <RemarkShippingCosts />\r\n </React.Fragment>\r\n }\r\n </div>\r\n : <div className=\"cart__text--descr-shipping\" dangerouslySetInnerHTML={{ __html: i18n.t('cart.shipping_abroad', {country: country})}}></div>\r\n }\r\n\r\n <div className=\"cart__remark\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <div className=\"form-row form-row--input\" key={i}>\r\n <label className={\"form-label\" + (this.state.formControls[key].required ? ' --required' : '')}>{this.state.formControls[key].label}</label>\r\n <TextInput \r\n name = {key} \r\n placeholder = {this.state.formControls[key].placeholder}\r\n value = {this.state.formControls[key].value}\r\n touched = {this.state.formControls[key].touched}\r\n msg = {''}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls[key].valid}\r\n />\r\n </div>\r\n ))}\r\n </div>\r\n \r\n {this.checkFeedbackDelivery() &&\r\n <FeedbackOrderDelivery\r\n\r\n />\r\n }\r\n \r\n <div className=\"cart__actions\">\r\n <button \r\n className=\"button button--secundary\" \r\n onClick={(e) => this.continueShopping(e)}\r\n >\r\n {i18n.t(\"button.continue_shopping\")}\r\n </button>\r\n <button \r\n className=\"button button--primary\" \r\n onClick={(e) => this.gotoCart(e)}\r\n >\r\n {i18n.t(\"button.order\")}\r\n </button>\r\n </div>\r\n \r\n </div>\r\n : <CartEmpty\r\n section = \"cart\"\r\n orderId = {this.storeOrder.order_data.order_id}\r\n />\r\n }\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(Cart));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nconst CartProcessStep = inject(\"stores\") (\r\n observer (\r\n class CartProcessStep extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n render() {\r\n const active_view = (this.storeOrder.order_interface.cart_view == 'login')\r\n ? 'client'\r\n : this.storeOrder.order_interface.cart_view\r\n const isActive = this.props.id == active_view \r\n ? true \r\n : false\r\n\r\n return (\r\n <div className={\"cart-step\" + (isActive ? \" --active\" : '')}>\r\n <span className=\"cart-step__nr\">{this.props.step}</span>\r\n <span className=\"cart-step__title\">{this.props.title}</span> \r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CartProcessStep);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport NewWindow from 'react-new-window';\r\nimport { Link } from 'react-router-dom';\r\nimport { reaction } from 'mobx';\r\nimport i18n from \"i18next\";\r\n\r\nimport CartProcessStep from './cart-step';\r\n\r\nconst CartProcessSteps = inject(\"stores\") (\r\n observer (\r\n class CartProcessSteps extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n steps: [{\r\n nr: 1,\r\n id: 'client',\r\n title: \"Vul je bestelgegevens in\",\r\n },{\r\n nr: 2,\r\n id: 'review',\r\n title: \"Controleer je bestelling\",\r\n },{\r\n nr: 3,\r\n id: 'payment',\r\n title: \"Betaling\",\r\n }],\r\n active_step: false\r\n }\r\n\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"cart-steps\">\r\n {this.state.steps.map(step => (\r\n <CartProcessStep\r\n step = {step.nr}\r\n id = {step.id}\r\n title = {step.title}\r\n active_step = {this.storeOrder.order_interface.cart_view} \r\n />\r\n ))}\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CartProcessSteps);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport FormLogin from '../forms/form-login';\r\nimport FormRetrievePassword from '../forms/form-retrieve-password';\r\n\r\nimport FormTextIncomplete from '../../elements/form-text-incomplete';\r\n\r\nconst CartLogin = inject(\"stores\") (\r\n observer (\r\n class CartLogin extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n btn_class: '--disabled',\r\n pw_card: false,\r\n retrieve: false\r\n }\r\n }\r\n\r\n onNextAction = () => {\r\n const view = 'client';\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n this.storeOrder.setCartView(id, view);\r\n // let url = \"/shoppingcart/\" + view;\r\n // this.props.history.push(url);\r\n }\r\n\r\n rememberEmail = (email) => {\r\n this.setState({\r\n email: email\r\n })\r\n }\r\n\r\n toggleRetrievePassword = (e) => {\r\n this.setState({\r\n retrieve: !this.state.retrieve\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"cart-data\">\r\n <div className=\"content-section--login --active\">\r\n {!this.state.retrieve \r\n ? <React.Fragment>\r\n <div className=\"content-section--login-option\">\r\n <h2>Log in om de bij ons bekende gegevens op te halen:</h2>\r\n <div className=\"form-wrapper\">\r\n <FormLogin \r\n onNext = {this.onNextAction}\r\n rememberEmail = {this.rememberEmail}\r\n />\r\n <div className=\"form__alternative-actions\">\r\n <span className=\"link--read-more\" onClick={(e) => this.toggleRetrievePassword(e)}>Ben je je wachtwoord vergeten of heb je nog geen wachtwoord?</span>\r\n </div>\r\n </div>\r\n </div>\r\n <div className=\"content-section--login-option\">\r\n <h2>Ben je nog geen klant bij ons?</h2>\r\n <span className=\"cart-data__subtitle\">En/of heb je nog nooit iets gedownload bij ons?</span>\r\n <span className=\"cart-data__subtitle\"><span className=\"content__textlink\" onClick={() => this.onNextAction()}>Vul je gegevens in bij je bestelling</span></span>\r\n </div>\r\n </React.Fragment>\r\n : <div className=\"content-section--retrieve\">\r\n <div className=\"content-wrapper__segment\">\r\n <div className=\"segment__header\">{i18n.t(\"header.retrieve\")}</div>\r\n </div>\r\n <FormRetrievePassword \r\n email = {this.state.email}\r\n />\r\n <div className=\"form__alternative-actions\">\r\n <span className=\"link--back\" onClick={(e) => this.toggleRetrievePassword(e)}>Terug</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(CartLogin));\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport * as login from '../../communicator/login';\r\n\r\nimport RowText from '../form-rows/row-text';\r\n\r\nconst FormCheckEmail = inject(\"stores\") (\r\n observer (\r\n class FormCheckEmail extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeWishlist = this.props.stores.storeWishlist;\r\n this.storeForms = this.props.stores.storeForms;\r\n\r\n this.state = {\r\n formView: ['email'],\r\n formControls: { \r\n email: {\r\n type: 'email',\r\n value: '',\r\n validationRules: {\r\n isRequired: false,\r\n isEmail: false\r\n },\r\n validationMsg: i18n.t(\"form_errors.email\"),\r\n valid: false\r\n },\r\n password: {\r\n type: 'password',\r\n value: '',\r\n validationRules: {\r\n isRequired: false\r\n },\r\n valid: false\r\n }\r\n },\r\n formIsValid: false,\r\n btn_class: '--disabled',\r\n error: false,\r\n error_email: false,\r\n show_feedback: false\r\n }\r\n\r\n \r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.syncedEmail !== this.props.syncedEmail) { \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['email']\r\n };\r\n updatedFormElement['value'] = this.props.syncedEmail;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(this.props.syncedEmail, updatedFormElement.validationRules);\r\n\r\n updatedControls['email'] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls\r\n }, () => this.validateRow('email', this.props.syncedEmail, updatedFormElement.valid));\r\n }\r\n } \r\n\r\n async checkEmail(email, valid) {\r\n let emailAvailable = true;\r\n\r\n if (email != '') {\r\n emailAvailable = await this.storeUser.checkEmailExists(email);\r\n }\r\n this.setState({\r\n emailAvailable: emailAvailable,\r\n error_email: emailAvailable ? false : true,\r\n show_feedback: (email == '' || !valid) ? false : true\r\n })\r\n\r\n if (email !== '' && valid) {\r\n this.props.showFormProfile(true);\r\n } else {\r\n this.props.showFormProfile(false);\r\n }\r\n }\r\n\r\n validateRow = async(name, value, valid) => { \r\n let emailAvailable = true;\r\n this.storeUi.clearFormFeedback();\r\n \r\n if (name == 'email') {\r\n let testValid = validate(value, this.state.formControls.email.validationRules);\r\n emailAvailable = await this.checkEmail(value, testValid);\r\n this.props.rememberEmail(value);\r\n }\r\n\r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid, this.state.formControls[name].touched);\r\n\r\n this.setState({\r\n error: null,\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = () => {\r\n const formIsValid = this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n });\r\n }\r\n\r\n async loginUser(e) {\r\n e.preventDefault();\r\n if (this.state.formIsValid) {\r\n this.storeUi.setDirectLogin(false);\r\n\r\n try {\r\n let login = await this.storeAuth.checkLogin(this.state.formControls);\r\n runInAction(async() => {\r\n if (!('error' in login)) {\r\n this.storeAuth.setLoginState(true);\r\n this.storeUser.setLoginState(true);\r\n this.storeOrder.setClientId(login.id);\r\n this.storeUser.setUserData(login);\r\n this.storeOrder.setOrderProfileFromUser(login);\r\n if ((login.is_partner === 'on' || login.is_partner === 1) && login.partner_code !== '') {\r\n this.storeUi.setPartnerCode(login.partner_code);\r\n this.storeOrder.setAffiliateId(login.partner_code);\r\n } \r\n this.storeUi.getUserDiscounts();\r\n \r\n this.storeWishlist.retrieveWishlistFromDB(login.id);\r\n\r\n // if (this.storeUi.app_interface.use_case === \"inshop\") {\r\n // this.storeOrder.retrieveShoppingCartFromDB(login.id, 'login');\r\n // }\r\n\r\n // if (this.storeUi.app_interface.use_case === \"inorder\") {\r\n // /* SbC concat carts */\r\n // this.storeOrder.retrieveShoppingCartFromOrder(login.id);\r\n // }\r\n\r\n //SbC retrieve shoppingcart afte login during order\r\n this.storeOrder.retrieveShoppingCart(login.id, 'login');\r\n \r\n let orderId = await this.storeOrder.returnOrderId(login.id);\r\n if (parseInt(orderId) === 0) {\r\n const remark = this.storeOrder.order_data.order_remark;\r\n let orderId = await this.storeOrder.createNewOrder(login.id, remark);\r\n }\r\n\r\n // if (orderId !== 0 && orderId !== '0' && orderId !== 99 && orderId !== '99') {\r\n // order_id = orderId;\r\n // } \r\n\r\n\r\n //SbC check if causes double orderlines after login -> think not\r\n this.storeOrder.editOrderItems();\r\n\r\n } else {\r\n this.storeUser.setLoginState(false);\r\n this.setState({\r\n error: true\r\n })\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.storeAuth.setLoginState(false);\r\n this.storeUser.setLoginState(false);\r\n })\r\n }\r\n }\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <React.Fragment>\r\n <form className=\"form\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n (key === \"email\" || (key == 'password' && this.state.error_email) || this.storeUi.app_interface.login_direct) &&\r\n <React.Fragment>\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n syncedEmail = {this.props.syncedEmail}\r\n />\r\n\r\n {this.state.show_feedback && !this.storeUi.app_interface.login_direct &&\r\n <div className=\"form-row form-row--feedback\">\r\n {key === \"email\" && this.state.error_email &&\r\n <span className=\"form-field--success --email\"><strong>Dit e-mailadres is bekend bij ons.</strong><br/>Vul hieronder je wachtwoord in om je gegevens op te halen.</span>\r\n }\r\n\r\n {key === \"email\" && !this.state.error_email && this.state.formControls.email.value !== '' &&\r\n <span className=\"form-field--success --email-unknown\">\r\n <strong>Het blijkt dat dit e-mailadres nog niet bekend is bij ons:</strong><br/>Maak hieronder om privacyredenen, om makkelijker te winkelen en je bestellingen te beheren, een wachtwoord aan en vul je gegevens verder in.</span>\r\n }\r\n </div>\r\n }\r\n </React.Fragment>\r\n ))}\r\n\r\n \r\n </form>\r\n \r\n {(this.state.error_email || this.storeUi.app_interface.login_direct) &&\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.loginUser(e)}>{i18n.t(\"button.login\")}</button>\r\n </div>\r\n }\r\n\r\n {this.state.error &&\r\n <div className=\"form-row form-row--error\">\r\n <p \r\n dangerouslySetInnerHTML={{ __html: i18n.t(\"errors.error_login\")}}\r\n />\r\n </div>\r\n }\r\n </React.Fragment>\r\n\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormCheckEmail);\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport * as account from '../../communicator/account';\r\nimport validate from '../../utilities/validation-rules';\r\n\r\nimport TextInput from '../../elements/form-input-text';\r\nimport Select from '../../elements/form-input-select';\r\n\r\nconst FormAddress = inject(\"stores\") (\r\n observer (\r\n class FormAddress extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n formControls: { \r\n delivery_name: {\r\n label: i18n.t(\"forms.label.delivery_name\"),\r\n value: this.storeOrder.order_data.delivery_address.delivery_name,\r\n placeholder: i18n.t(\"forms.placeholder.delivery_name\"),\r\n validationRules: {\r\n isRequired: true,\r\n },\r\n required: true\r\n },\r\n delivery_company: {\r\n label: i18n.t(\"forms.label.delivery_company\"),\r\n value: this.storeOrder.order_data.delivery_address.delivery_company,\r\n placeholder: i18n.t(\"forms.placeholder.delivery_company\")\r\n },\r\n address: {\r\n label: i18n.t(\"forms.label.address\"),\r\n value: this.storeOrder.order_data.delivery_address.address,\r\n placeholder: i18n.t(\"forms.placeholder.delivery_address\"),\r\n validationRules: {\r\n isRequired: true,\r\n },\r\n required: true\r\n },\r\n housenr: {\r\n label: i18n.t(\"forms.label.housenr\"),\r\n value: this.storeOrder.order_data.delivery_address.housenr,\r\n placeholder: i18n.t(\"forms.placeholder.housenr\"),\r\n validationRules: {\r\n isRequired: true,\r\n },\r\n required: true\r\n },\r\n addition: {\r\n label: i18n.t(\"forms.label.addition\"),\r\n value: this.storeOrder.order_data.delivery_address.addition,\r\n placeholder: i18n.t(\"forms.placeholder.addition\")\r\n },\r\n zipcode: {\r\n label: i18n.t(\"forms.label.zipcode\"),\r\n value: this.storeOrder.order_data.delivery_address.zipcode,\r\n placeholder: i18n.t(\"forms.placeholder.delivery_zipcode\"),\r\n validationRules: {\r\n isRequired: true,\r\n },\r\n required: true\r\n },\r\n city: {\r\n label: i18n.t(\"forms.label.city\"),\r\n value: this.storeOrder.order_data.delivery_address.city,\r\n placeholder: i18n.t(\"forms.placeholder.delivery_city\"),\r\n validationRules: {\r\n isRequired: true,\r\n },\r\n required: true\r\n },\r\n country_select: {\r\n label: i18n.t(\"forms.label.country\"),\r\n value: this.storeOrder.order_data.delivery_address.country_code !== '' && this.storeOrder.order_data.delivery_address.country_code !== undefined && this.storeOrder.order_data.delivery_address.country_code !== null\r\n ? this.storeOrder.order_data.delivery_address.country_code\r\n : 'NL',\r\n placeholder: i18n.t(\"forms.placeholder.country\"),\r\n touched: false,\r\n validationRules: {\r\n //isRequired: true,\r\n },\r\n options: this.storeOrder.countriesList\r\n }\r\n },\r\n formIsValid: false\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n let updatedFormElement = {};\r\n\r\n Object.keys(this.state.formControls).map((key, i) => {\r\n updatedFormElement = {\r\n ...updatedControls[key]\r\n };\r\n updatedFormElement.value = this.state.formControls[key].value;\r\n if (updatedFormElement.value !== null && updatedFormElement.value !== undefined) {\r\n updatedFormElement.valid = validate(updatedFormElement.value, updatedFormElement.validationRules);\r\n }\r\n updatedControls[key] = updatedFormElement;\r\n });\r\n\r\n //SbC:: check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid ? formIsValid : false;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid\r\n }, () => this.props.handleFormChange(updatedControls, formIsValid, 'address'));\r\n } \r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.toggle !== this.props.toggle) {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n let updatedFormElement = {};\r\n\r\n Object.keys(this.state.formControls).map((key, i) => {\r\n updatedFormElement = {\r\n ...updatedControls[key]\r\n };\r\n if (key !== 'country_select') {\r\n updatedFormElement.value = '';\r\n }\r\n if (key === 'country_select') {\r\n updatedFormElement.value = 'NL';\r\n }\r\n if (updatedFormElement.value !== null && updatedFormElement.value !== undefined) {\r\n updatedFormElement.valid = validate(updatedFormElement.value, updatedFormElement.validationRules);\r\n }\r\n updatedControls[key] = updatedFormElement;\r\n });\r\n\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid ? formIsValid : false;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid\r\n }, () => this.props.handleFormChange(updatedControls, formIsValid, 'address'));\r\n }\r\n }\r\n\r\n handleChange = event => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n if (!updatedControls[inputIdentifier].valid) {\r\n formIsValid = false;\r\n }\r\n }\r\n }\r\n \r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid\r\n }, () => this.props.handleFormChange(updatedControls, formIsValid, 'address'));\r\n }\r\n \r\n render() {\r\n return (\r\n <form className=\"form\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {key !== \"country_select\" &&\r\n <div className=\"form-row form-row--input\">\r\n <label className={\"form-label\" + (this.state.formControls[key].required ? ' --required' : '')}>{this.state.formControls[key].label}</label>\r\n <TextInput \r\n name = {key} \r\n placeholder = {this.state.formControls[key].placeholder}\r\n value = {this.state.formControls[key].value}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls[key].valid}\r\n />\r\n </div>\r\n }\r\n\r\n {key === \"country_select\" &&\r\n <div className=\"form-row form-row--select\">\r\n {this.state.formControls['country_select'].label}\r\n <Select \r\n name=\"country_select\"\r\n value = {this.state.formControls.country_select.value}\r\n options = {this.state.formControls.country_select.options ? this.state.formControls.country_select.options : []}\r\n touched = {this.state.formControls.country_select.touched}\r\n onChange = {this.handleChange}\r\n valueSelected = {this.state.formControls.country_select.value}\r\n defaultValue = {this.state.formControls.country_select.value}\r\n />\r\n </div>\r\n }\r\n </React.Fragment>\r\n ))}\r\n </form> \r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default FormAddress;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport FormCheckEmail from '../forms/form-check-email';\r\nimport FormProfile from '../forms/form-profile';\r\nimport FormPassword from '../forms/form-password';\r\nimport FormRetrievePassword from '../forms/form-retrieve-password';\r\nimport FormAddress from '../forms/form-address';\r\nimport FormBusiness from '../forms/form-business';\r\n\r\nimport Radio from '../../elements/form-input-radio';\r\nimport FormTextIncomplete from '../../elements/form-text-incomplete';\r\n\r\nconst CartProfile = inject(\"stores\") (\r\n observer (\r\n class CartProfile extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeShipping = this.props.stores.storeShipping;\r\n\r\n this.state = {\r\n btn_class: '--disabled',\r\n login: false,\r\n formControls: {\r\n want_account: {\r\n value: 0,\r\n placeholder: 'Create account',\r\n defaultValue: 1,\r\n options: [\r\n { value: 0, displayValue: 'Nee' },\r\n { value: 1, displayValue: 'Ja' }\r\n ]\r\n },\r\n diff_address: {\r\n value: 0,\r\n placeholder: 'Has delivery address?',\r\n defaultValue: this.storeOrder.order_data.client_settings.has_delivery_address === true ? 1 : 0 ,\r\n options: [\r\n { value: 0, displayValue: 'Nee' },\r\n { value: 1, displayValue: 'Ja' }\r\n ]\r\n },\r\n is_business: {\r\n value: 0,\r\n placeholder: 'Is business?',\r\n defaultValue: this.storeOrder.order_data.client_settings.is_business === true ? 1 : 0 ,\r\n options: [\r\n { value: 0, displayValue: 'Nee' },\r\n { value: 1, displayValue: 'Ja' }\r\n ]\r\n }\r\n },\r\n address_card: this.storeOrder.order_data.client_settings.has_delivery_address,\r\n business_card: this.storeUi.app_interface.use_case === \"inorder\" \r\n ? this.storeOrder.order_data.client_settings.is_business \r\n : false,\r\n pw: '',\r\n pw_card: (!this.storeUser.user_data.is_loggedin) ? true : false,\r\n valid_pw: (this.storeUser.user_data.is_loggedin) ? true : false,\r\n valid_address: this.storeOrder.order_data.client_settings.has_delivery_address ? this.storeOrder.order_data.client_settings.has_delivery_address : true,\r\n valid_profile: false,\r\n save_to_account: false,\r\n emailAvailable: (this.storeUser.user_data.is_loggedin) ? true : false,\r\n retrieve: false,\r\n toggle: false,\r\n email: '',\r\n syncedEmail: '',\r\n show_forms: (this.storeUser.user_data.is_loggedin) ? true : false,\r\n }\r\n }\r\n\r\n componentDidUpdate() { \r\n if (this.storeUser.user_data.is_loggedin && !this.state.valid_pw) {\r\n this.setState({\r\n valid_pw: true\r\n })\r\n }\r\n }\r\n \r\n componentWillUnmount() {\r\n //this.storeUi.setDirectLogin(false);\r\n }\r\n\r\n setCartView = async(view) => {\r\n this.storeAuth.setLoginState(true);\r\n\r\n //SbC prevent overwriting closed order when on multiple devices\r\n let order_availability = await this.storeOrder.getOrderAvailability();\r\n if (order_availability === 'closed') {\r\n let order_id = await this.storeOrder.createNewOrder(this.storeOrder.order_data.client_id, this.storeOrder.order_data.order_remark);\r\n }\r\n\r\n //SbC TEST order id 0\r\n if (this.storeOrder.order_data.order_id === 0) {\r\n let order_id = await this.storeOrder.createNewOrder(this.storeOrder.order_data.client_id, this.storeOrder.order_data.order_remark);\r\n }\r\n \r\n if (this.state.formIsValid) {\r\n if (!this.storeOrder.order_data.client_settings.has_delivery_address) {\r\n this.storeOrder.copyDeliveryAddresData();\r\n }\r\n if (this.storeOrder.order_data.client_settings.has_delivery_address && this.storeOrder.order_data.delivery_address.address === '') {\r\n this.storeOrder.copyDeliveryAddresData();\r\n }\r\n \r\n if (this.storeOrder.order_data.client_id !== 0) {\r\n //SbC next line depricated -> already calculated??\r\n //(async() => await this.storeOrder.calculateShipping() )();\r\n (async() => await this.storeOrder.saveOrderDataProfile() )();\r\n }\r\n\r\n if (this.state.save_to_account) {\r\n if (this.state.pw !== '' && this.state.pw !== undefined) {\r\n (async() => await this.registerClientFromOrder() )();\r\n //SbC nog niet voldoende, want haalt data daarna nog niet op in Mijn gegevens\r\n //this.storeUser.setLoginState(true);\r\n } else {\r\n (async() => await this.registerAnonymousClient() )();\r\n }\r\n //(async() => await this.storeOrder.saveOrderDataProfile() )();\r\n }\r\n \r\n if (!this.state.save_to_account && !this.storeUser.user_data.is_loggedin && this.storeOrder.order_data.client_id === 0) {\r\n (async() => await this.registerAnonymousClient() )();\r\n (async() => await this.storeOrder.saveOrderDataProfile() )();\r\n }\r\n \r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n //SbC causes double orderline ... CHECK not anymore ??...\r\n this.storeOrder.setCartView(id, view);\r\n let url = \"/shoppingcart/\" + view;\r\n this.props.history.push(url);\r\n }\r\n }\r\n\r\n registerClientFromOrder = async() => {\r\n const profile_data = {\r\n email: this.storeOrder.order_data.client_profile['email'],\r\n pw: this.state.pw,\r\n firstname: this.storeOrder.order_data.client_profile['firstname'],\r\n lastname: this.storeOrder.order_data.client_profile['lastname'],\r\n telephone: this.storeOrder.order_data.client_profile['phonenr'],\r\n address: this.storeOrder.order_data.client_profile['address'],\r\n housenr: this.storeOrder.order_data.client_profile['housenr'],\r\n addition: this.storeOrder.order_data.client_profile['addition'],\r\n zipcode: this.storeOrder.order_data.client_profile['zipcode'],\r\n city: this.storeOrder.order_data.client_profile['city'],\r\n country: this.storeOrder.order_data.client_profile['country'],\r\n country_code: this.storeOrder.order_data.client_profile['country_code']\r\n }\r\n await this.storeOrder.registerClientFromOrder(profile_data);\r\n }\r\n\r\n registerAnonymousClient = async() => {\r\n const profile_data = {\r\n email: this.storeOrder.order_data.client_profile['email'],\r\n pw: this.state.pw,\r\n firstname: this.storeOrder.order_data.client_profile['firstname'],\r\n lastname: this.storeOrder.order_data.client_profile['lastname'],\r\n telephone: this.storeOrder.order_data.client_profile['phonenr'],\r\n address: this.storeOrder.order_data.client_profile['address'],\r\n housenr: this.storeOrder.order_data.client_profile['housenr'],\r\n addition: this.storeOrder.order_data.client_profile['addition'],\r\n zipcode: this.storeOrder.order_data.client_profile['zipcode'],\r\n city: this.storeOrder.order_data.client_profile['city'],\r\n country: this.storeOrder.order_data.client_profile['country'],\r\n country_code: this.storeOrder.order_data.client_profile['country_code']\r\n }\r\n try {\r\n let returnData = await this.storeOrder.registerAnonymousClient(profile_data);\r\n runInAction(() => {\r\n let data = returnData.data[0];\r\n if (!('error' in returnData.data[0])) {\r\n this.storeAuth.setLoginState(true);\r\n this.storeUser.setLoginState(true);\r\n\r\n this.storeOrder.setClientId(returnData.data[0].id, returnData.data[0]);\r\n\r\n data.user_id = data.id;\r\n data.is_loggedin = true;\r\n \r\n this.storeAuth.setAuth(data);\r\n this.storeUser.setUserData(returnData.data[0]);\r\n this.storeOrder.setOrderProfileFromUser(returnData.data[0]);\r\n\r\n //SbC concat wishlists;\r\n this.storeOrder.compareWishLists('concat');\r\n //SbC concat shoppingcarts;\r\n this.storeOrder.concatLSandDB();\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n \r\n })\r\n }\r\n }\r\n\r\n gotoCart = () => {\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n this.storeOrder.setCartView(id, \"client\");\r\n this.storeUi.setUseCase(\"inshop\"); \r\n }\r\n\r\n toggleSection = () => {\r\n const url = '/shoppingcart/login';\r\n this.props.history.push(url);\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n this.storeOrder.setCartView(id, 'login');\r\n }\r\n\r\n toggleAddress = (event) => {\r\n const name = event.target.name;\r\n const value = event.target.value;\r\n let idx;\r\n\r\n this.setState({\r\n formControls: {\r\n ...this.state.formControls,\r\n [name]: {\r\n ...this.state.formControls[name],\r\n value: value\r\n }\r\n }\r\n }, () => this.toggleAddressData()); \r\n }\r\n\r\n toggleAddressData = async() => {\r\n this.storeOrder.setSettingDeliveryAddress(!this.state.address_card);\r\n this.storeOrder.resetDeliveryAddresData();\r\n\r\n this.setState({\r\n toggle: !this.state.toggle,\r\n address_card: !this.state.address_card,\r\n valid_address: this.state.formControls.diff_address.value === 1 ? false : true\r\n }, () => this.checkForm()) \r\n }\r\n\r\n toggleBusinessData = () => {\r\n this.storeOrder.setSettingBusiness(!this.state.business_card, this.storeUser.user_data.business)\r\n this.setState({\r\n business_card: !this.state.business_card\r\n });\r\n }\r\n\r\n async checkEmail() {\r\n let current_email = this.storeOrder.order_data.client_profile.email;\r\n if (current_email != '') {\r\n //(async () => {\r\n let emailAvailable = await this.storeUser.checkEmailExists(current_email);\r\n this.setState({\r\n emailAvailable: emailAvailable,\r\n //formIsValid: emailAvailable ? this.state.formIsValid : false,\r\n //btn_class: emailAvailable ? this.state.btn_class : '--disabled'\r\n })\r\n //})\r\n }\r\n }\r\n\r\n async checkEmailProfile(email) {\r\n if (email != '') {\r\n let emailAvailable = await this.storeUser.checkEmailExists(email);\r\n this.setState({\r\n emailAvailable: emailAvailable\r\n })\r\n }\r\n }\r\n\r\n handleFormChange = (formControls, formIsValid) => {\r\n this.setState({\r\n valid_profile: formIsValid,\r\n country_code: formControls.country_select.value\r\n }, () => this.checkForm());\r\n\r\n this.storeOrder.setDataProfile(formControls);\r\n if (this.storeUser.user_data.is_loggedin) {\r\n this.storeUser.changeUserProfile(formControls)\r\n }\r\n\r\n if (!this.storeUser.user_data.is_loggedin) {\r\n this.checkEmail();\r\n }\r\n\r\n const userId = this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.user_id : 0;\r\n //this.storeOrder.calculateShipping(userId);\r\n\r\n let orderId = this.storeOrder.order_data.order_id;\r\n (async() => await this.storeShipping.calculateShipping(orderId) )();\r\n }\r\n\r\n handleFormChangeAddress = (formControls, formIsValid) => {\r\n this.storeOrder.setDataDeliveryAddress(formControls);\r\n const userId = this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.user_id : 0;\r\n \r\n //this.storeOrder.calculateShipping(userId);\r\n let orderId = this.storeOrder.order_data.order_id;\r\n (async() => await this.storeShipping.calculateShipping(orderId) )();\r\n\r\n this.setState({\r\n valid_address: this.state.address_card ? (formIsValid ? true : false) : true,\r\n }, () => this.checkForm())\r\n }\r\n\r\n checkForm = () => {\r\n this.setState({\r\n formIsValid: (this.state.valid_address && this.state.valid_profile && this.state.valid_pw) ? true : false, \r\n btn_class: (this.state.valid_address && this.state.valid_profile && this.state.valid_pw) ? '--active' : '--disabled'\r\n })\r\n }\r\n\r\n handleFormChangeBusiness = (formControls) => {\r\n this.storeOrder.setDataBusiness(formControls);\r\n this.storeUser.setDataBusiness(formControls); \r\n\r\n if (this.storeUser.user_data.is_loggedin) {\r\n this.storeUser.changeBusinessProfile(formControls)\r\n }\r\n }\r\n\r\n handleFormChangePassword = (formControls, formIsValid) => {\r\n this.setState({\r\n pw: formControls.password.value,\r\n valid_pw: formIsValid,\r\n btn_class: (formIsValid && this.state.valid_profile) ? '--active' : '--disabled'\r\n })\r\n }\r\n\r\n handleFormChangeCheck = (formControls, formIsValid) => {\r\n if (!this.storeUser.user_data.is_loggedin) {\r\n this.checkEmailProfile(formControls.email.value);\r\n }\r\n }\r\n\r\n initPassword = (valid_pw) => {\r\n this.setState({\r\n valid_pw: valid_pw ? this.state.valid_pw : false,\r\n btn_class: valid_pw ? this.state.btn_class : '--disabled'\r\n })\r\n }\r\n \r\n rememberEmail = (email) => {\r\n this.setState({\r\n email: email\r\n }, () => this.checkEmailProfile(email))\r\n }\r\n\r\n toggleRetrievePassword = (e) => {\r\n this.setState({\r\n retrieve: !this.state.retrieve\r\n })\r\n }\r\n\r\n showFormProfile = (show) => {\r\n this.setState({\r\n show_forms: show\r\n })\r\n }\r\n\r\n syncEmail = (value) => {\r\n this.setState({\r\n syncedEmail: value\r\n })\r\n }\r\n\r\n render() { \r\n return (\r\n !this.state.retrieve \r\n ? <div className=\"cart-data\">\r\n <div className=\"content-section--register --active\">\r\n <div className=\"form-wrapper\">\r\n {!this.storeUser.user_data.is_loggedin &&\r\n <React.Fragment>\r\n <div className=\"form-wrapper__help\">\r\n <span className=\"form-wrapper__help--required\">{i18n.t(\"form_feedback.required\")}</span>\r\n </div>\r\n <div className=\"form-fieldset\">\r\n {this.storeUi.app_interface.login_direct\r\n ? <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Log in om je gegevens op te halen</span>\r\n </div>\r\n : <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Vul je e-mailadres in</span>\r\n </div>\r\n }\r\n <FormCheckEmail \r\n rememberEmail = {this.rememberEmail}\r\n handleFormChange = {this.handleFormChangeCheck}\r\n showFormProfile = {this.showFormProfile}\r\n syncedEmail = {this.state.syncedEmail}\r\n />\r\n {((!this.state.emailAvailable && this.state.email !== '') || this.storeUi.app_interface.login_direct) &&\r\n <div className=\"form-wrapper__row\">\r\n <div className=\"form__alternative-actions\">\r\n <span className=\"link--read-more\" onClick={(e) => this.toggleRetrievePassword(e)}>Ben je je wachtwoord vergeten?</span>\r\n </div>\r\n </div>\r\n }\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n {this.state.show_forms && \r\n <React.Fragment>\r\n\r\n {(!this.storeUser.user_data.is_loggedin && this.state.emailAvailable && this.state.email !== '' && !this.storeUi.app_interface.login_direct) &&\r\n <React.Fragment>\r\n <div className=\"form-wrapper__help\">\r\n <span className=\"form-wrapper__help--required\">{i18n.t(\"form_feedback.required\")}</span>\r\n </div>\r\n <div className=\"form-fieldset\">\r\n {!this.state.login && !this.storeUser.user_data.is_loggedin &&\r\n <React.Fragment>\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Maak zelf een wachtwoord aan</span>\r\n {/* <span className=\"form__fieldset-subtitle\">Hiermee kun je makkelijker winkelen en je bestellingen beheren.</span> */}\r\n </div> \r\n <div className={\"form-fieldset form-fieldset--password \" + (this.state.pw_card ? \"expanded\" : \"collapsed\")}>\r\n {this.state.emailAvailable \r\n ? <FormPassword \r\n initPassword = {this.initPassword}\r\n handleFormChange = {this.handleFormChangePassword}\r\n use_case = {\"incart\"}\r\n required = {true}\r\n />\r\n : <div className=\"form-wrapper\">\r\n <form className=\"form\">\r\n Het hierboven ingevulde e-mailadres is al in gebruik. Je kunt met dit e-mailadres geen nieuw account maken. Log eerst in met dit e-mailadres (rechtsboven) om je gegevens op te halen, of vul hierboven een ander e-mailadres in.\r\n </form>\r\n </div>\r\n }\r\n </div>\r\n \r\n </React.Fragment>\r\n } \r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n {(this.storeUser.user_data.is_loggedin || (this.state.emailAvailable && this.state.email !== '')) && !this.storeUi.app_interface.login_direct &&\r\n <React.Fragment>\r\n <div className=\"form-wrapper__help\">\r\n <span className=\"form-wrapper__help--required\">{i18n.t(\"form_feedback.required\")}</span>\r\n </div>\r\n\r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Vul je persoonsgegevens in</span>\r\n\r\n {/* {this.storeUser.user_data.is_loggedin && this.storeUi.app_interface.use_case === \"inorder\" && */}\r\n {this.storeUser.user_data.is_loggedin &&\r\n <span className=\"form__fieldset-subtitle\">Wijzigingen die je hier aanbrengt zullen ook in je profielgegevens aangepast worden.</span>\r\n }\r\n </div>\r\n <FormProfile \r\n use_case = {\"incart\"}\r\n view = {\"cart\"}\r\n handleFormChange = {this.handleFormChange} \r\n client_profile = {this.storeOrder.order_data.client_profile}\r\n loggedin = {this.storeUser.user_data.is_loggedin}\r\n option_subscription = {true}\r\n email = {this.state.email}\r\n emailConnected = {true}\r\n syncEmail = {this.syncEmail}\r\n syncedEmail = {this.state.syncedEmail}\r\n />\r\n </div>\r\n\r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Wil je een ander adres voor aflevering opgeven?</span>\r\n <span className=\"form__fieldset-subtitle\">Het is niet mogelijk een PostNL of DHL afhaalpunt op te geven</span>\r\n <Radio \r\n name = \"diff_address\" \r\n placeholder = {this.state.formControls.diff_address.placeholder}\r\n value = {this.state.formControls.diff_address.value}\r\n options = {this.state.formControls.diff_address.options}\r\n direction = {\"horizontal\"}\r\n onChange = {this.toggleAddress}\r\n defaultValue = {this.state.formControls.diff_address.defaultValue}\r\n />\r\n </div>\r\n \r\n <div className={\"form-fieldset form-fieldset--address \" + (this.state.address_card ? \"expanded\" : \"collapsed\")}>\r\n <FormAddress \r\n use_case = {\"incart\"}\r\n handleFormChange = {this.handleFormChangeAddress} \r\n toggle = {this.state.toggle}\r\n />\r\n </div> \r\n </div>\r\n\r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Ben je een zakelijke klant?</span>\r\n <span className=\"form__fieldset-subtitle\">(dit o.a in verband met btw-uitsplitsing)</span>\r\n <Radio \r\n name = \"is_business\" \r\n placeholder = {this.state.formControls.is_business.placeholder}\r\n value = {this.state.formControls.is_business.value}\r\n options = {this.state.formControls.is_business.options}\r\n direction = {\"horizontal\"}\r\n onChange = {this.toggleBusinessData}\r\n defaultValue = {this.state.formControls.is_business.defaultValue}\r\n />\r\n </div>\r\n\r\n <div className={\"form-fieldset form-fieldset--address \" + (this.state.business_card ? \"expanded\" : \"collapsed\")}>\r\n <FormBusiness \r\n handleFormChange = {this.handleFormChangeBusiness} \r\n data = {this.storeUser.user_data.business}\r\n country_code = {this.state.country_code}\r\n is_business = {this.state.formControls.is_business.value}\r\n />\r\n </div> \r\n </div>\r\n\r\n {!this.storeUi.app_interface.login_direct &&\r\n (this.storeUser.user_data.is_loggedin && !this.state.login && !this.state.retrieve && this.state.btn_class !== '--active') &&\r\n <FormTextIncomplete />\r\n }\r\n\r\n {this.state.show_forms &&\r\n (!this.storeUser.user_data.is_loggedin && !this.state.login && !this.state.retrieve && this.state.btn_class !== '--active') &&\r\n <FormTextIncomplete />\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n </React.Fragment>\r\n }\r\n </div>\r\n </div> \r\n \r\n {!this.state.login &&\r\n <div className=\"cart__actions\">\r\n <button className=\"btn btn--secundary\" onClick={(e) => this.gotoCart()}>{i18n.t(\"button.backto_overview\")}</button>\r\n {((this.storeUser.user_data.is_loggedin || (this.state.emailAvailable && this.state.email !== '')) && !this.storeUi.app_interface.login_direct) &&\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.setCartView(\"review\")}>{i18n.t(\"button.goto_review\")}</button>\r\n }\r\n </div>\r\n }\r\n\r\n\r\n \r\n </div>\r\n : <div className=\"cart-data\">\r\n <div className=\"content-section--register --active\">\r\n <div className=\"form-wrapper\">\r\n <FormRetrievePassword \r\n email = {this.state.email}\r\n />\r\n <div className=\"form__alternative-actions\">\r\n <span className=\"link--back\" onClick={(e) => this.toggleRetrievePassword(e)}>Terug</span>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(CartProfile));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { Redirect } from 'react-router';\r\n\r\nimport FormPayment from '../../components/forms/form-payment';\r\n\r\nconst CartPayment = inject(\"stores\") (\r\n observer (\r\n class CartPayment extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n btn_submit: \"active\",\r\n redirect: false,\r\n redirect_complete: false\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.refActions = React.createRef();\r\n }\r\n\r\n componentDidMount = () => {\r\n this.handleScroll();\r\n this.sendConfirmationOrder();\r\n }\r\n\r\n handleScroll = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n sendConfirmationOrder = () => {\r\n\r\n }\r\n\r\n setCartView = (view) => {\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n this.storeOrder.setCartView(id, view);\r\n this.handleScroll();\r\n }\r\n\r\n startPayment = async(payment_id, issuer_code) => {\r\n //SbC prevent overwriting closed order when on multiple devices\r\n let order_availability = await this.storeOrder.getOrderAvailability();\r\n if (order_availability === 'closed') {\r\n let order_id = await this.storeOrder.createNewOrder(this.storeOrder.order_data.client_id, this.storeOrder.order_data.order_remark);\r\n (async() => await this.storeOrder.saveOrderDataProfile() )();\r\n }\r\n\r\n if (this.storeOrder.order_data.order_id !== 0) {\r\n let url = await this.storeOrder.handlePaymentProcess(this.storeOrder.order_data.order_id, this.storeOrder.order_data.order_guid, payment_id, issuer_code, 'direct_order');\r\n if (url !== undefined) {\r\n this.setState({\r\n redirect: true\r\n });\r\n }\r\n }\r\n }\r\n\r\n scrollToBtn = () => {\r\n this.refActions.current.scrollIntoView({\r\n behavior: 'smooth',\r\n block: \"end\"\r\n });\r\n }\r\n\r\n completePayment = async() => {\r\n (async() => await this.storeOrder.handleBankTransfer() )();\r\n if (this.storeUser.user_data.is_loggedin) {\r\n this.storeOrder.deleteShoppingCartFromDB(this.storeUser.user_data.user_id)\r\n } else {\r\n this.storeOrder.deleteShoppingCartFromLS();\r\n }\r\n \r\n this.setState({\r\n redirect_complete: true\r\n });\r\n }\r\n\r\n render() {\r\n if (this.state.redirect) {\r\n return <Redirect \r\n push to={\"/payment\"} \r\n />;\r\n }\r\n\r\n if (this.state.redirect_complete) {\r\n return <Redirect to={{\r\n pathname: '/payment-result',\r\n state: { guid: this.storeOrder.order_data.order_guid }\r\n }}\r\n />;\r\n }\r\n\r\n //const payment_id = this.storeOrder.order_data.billing_address.country_code === this.storeOrder.settings_list.isNL \r\n const payment_id = this.storeOrder.order_data.client_profile.country_code === this.storeOrder.settings_list.isNL \r\n ? this.storeOrder.order_data.payment.payment_method.id === 'XX'\r\n ? 'IDEAL'\r\n : this.storeOrder.order_data.payment.payment_method.id\r\n : this.storeOrder.order_data.payment.payment_method.id === 'XX'\r\n ? 'BANKTRANS'\r\n : this.storeOrder.order_data.payment.payment_method.id\r\n\r\n const issuer_code = this.storeOrder.order_data.payment.payment_issuer.code;\r\n\r\n // const formValid = (payment_id === 'IDEAL' && issuer_code === '9999') ? false : true;\r\n // const btn_class = (payment_id === 'IDEAL' && issuer_code === '9999') ? '--disabled' : '--active';\r\n\r\n // SbC no more selection of bank necessary\r\n const formValid = true;\r\n const btn_class = '--active';\r\n\r\n return (\r\n <div className=\"cart-data\">\r\n <h2>Kies hoe je wilt betalen</h2>\r\n <FormPayment \r\n payment_method_id = {payment_id}\r\n //country_code = {this.storeOrder.order_data.billing_address.country_code}\r\n country_code = {this.storeOrder.order_data.client_profile.country_code}\r\n onScrollToBtn = {this.scrollToBtn}\r\n />\r\n\r\n <div className=\"cart__actions\" ref={this.refActions}>\r\n <button className=\"btn btn--secundary\" onClick={(e) => this.setCartView(\"review\")}>{i18n.t(\"button.backto_review\")}</button>\r\n {payment_id !== 'BANKTRANS'\r\n ? formValid\r\n ? <button className={\"btn btn--primary \" + btn_class} onClick={(e) => this.startPayment(payment_id, issuer_code)}>{i18n.t(\"button.goto_payment_provider\")}</button>\r\n : <button className={\"btn btn--primary \" + btn_class}>{i18n.t(\"button.goto_payment_provider\")}</button>\r\n : <button className=\"btn btn--primary\" onClick={(e) => this.completePayment()}>{i18n.t(\"button.complete_payment\")}</button>\r\n }\r\n </div>\r\n\r\n {payment_id !== 'BANKTRANS' &&\r\n <div className=\"cart-data__feedback\">\r\n <p>Je komt op de volgende pagina in de betaalomgeving van je bank of onze betaalprovider MultiSafepay. Zij regelen alle betalingen voor de webshop van Succesboeken.nl en is een veilige betaalomgeving.</p>\r\n <p>Houd dit scherm open totdat de melding 'Sluit het scherm om terug te keren naar de webwinkel' verschijnt.</p>\r\n </div>\r\n }\r\n\r\n {payment_id === 'BANKTRANS' &&\r\n <div className=\"cart-data__feedback\">\r\n <p>Je vindt op de volgende pagina de overschrijvingsgegevens.<br/>Deze zijn ook opgenomen in de bevestigingsmail die je dan toegezonden wordt.</p>\r\n <p>Na ontvangst van de betaling wordt de bestelling onmiddellijk toegestuurd.</p>\r\n </div>\r\n }\r\n \r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CartPayment);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\n\r\nimport * as utilities from '../../utilities/formats';\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport FeedbackOrderLineDiscount from '../feedback/feedback-orderline-discount';\r\n\r\nconst CartReviewProduct = inject(\"stores\") (\r\n observer (\r\n class CartReviewProduct extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n\r\n }\r\n\r\n handleScroll = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n calculateRowPrice = (unit_price) => {\r\n let total = 0;\r\n let calculatedDiscount = 0;\r\n\r\n if (this.storeAuth.user.is_loggedin) {\r\n calculatedDiscount = this.state.discountPerc;\r\n }\r\n\r\n if (unit_price) {\r\n let price = unit_price * this.state.formControls.amount.value * (1 - (calculatedDiscount / 100));\r\n price = Math.round(price * 100) / 100;\r\n total = utilities.formatPrice(price);\r\n this.storeOrder.saveRowPrice(this.storeUser.user_data.is_loggedin, this.props.product.id, this.props.product.sku, total, calculatedDiscount);\r\n } else {\r\n total = 'UNKNOWN';\r\n }\r\n\r\n return utilities.displayPrice(total);\r\n }\r\n\r\n displayPrice = (price) => {\r\n const total = utilities.formatPrice(price);\r\n return utilities.displayPrice(total);\r\n }\r\n\r\n render() {\r\n return (\r\n <li key={this.props.key} className=\"products-table__row\">\r\n <div className=\"products-table__row--details\">\r\n <div className=\"products-table__cell products-table__cell--details-wrapper\">\r\n <div \r\n className={\"products-table__cell--details-content\" + (this.props.editable === true ? \" --link\" : \"\")} \r\n onClick={() => this.handleOnClick(this.props.product.sku)}\r\n >\r\n <div className=\"products-table__cell products-table__cell--sku\">\r\n <ImgCover\r\n sku = {this.props.product.sku}\r\n />\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--title\"\r\n dangerouslySetInnerHTML={{ __html: this.props.product.description}}\r\n />\r\n </div>\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--price-wrapper\">\r\n <div className=\"products-table__cell products-table__cell--amount\">\r\n <span className=\"amount\">\r\n {this.displayPrice(this.props.product.price)}\r\n </span>\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--count\">\r\n {this.props.product.amount}\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--amount\"><span className=\"amount\">{this.props.product.product_total_incl}</span></div>\r\n </div>\r\n </div>\r\n\r\n {this.props.product.status !== 'deletedx' && parseInt(this.props.product.discount) !== 0 &&\r\n <div className=\"products-table__row--discount --has-discount\">\r\n Er is op dit product een korting van {this.props.product.discount}% toegepast.\r\n </div>\r\n }\r\n </li>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CartReviewProduct);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\n\r\nimport * as utilities from '../../utilities/formats';\r\n\r\nimport CartProduct from './cart-product';\r\nimport CartReviewProduct from './cart-review-product';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst CartReview = inject(\"stores\") (\r\n observer (\r\n class CartReview extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeShipping = this.props.stores.storeShipping;\r\n\r\n this.sectionProfile = [\"firstname\", \"lastname\", \"email\", \"phonenr\"];\r\n this.sectionAddress = [\"company\", \"address\", \"housenr\", \"addition\", \"zipcode\", \"city\", \"country_select\"];\r\n this.sectionDeliveryAddress = [\"delivery_name\", \"delivery_company\", \"address\", \"housenr\", \"addition\", \"zipcode\", \"city\", \"country_select\"];\r\n\r\n this.state = {\r\n btn_class: '--disabled',\r\n login: false\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const userId = this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.user_id : 0;\r\n\r\n //this.storeOrder.calculateShipping(userId);\r\n let orderId = this.storeOrder.order_data.order_id;\r\n const shipping = await this.storeShipping.calculateShipping(orderId);\r\n \r\n //SbC shipping might be changed after login when user has discounts\r\n //(async() => await this.storeOrder.editOrderItems() )();\r\n\r\n //this.handleScroll();\r\n this.storeUi.setReturnState('review');\r\n\r\n //console.log('SbC send to MSP::', this.storeOrder.order_data.shopping_cart.cart_total_incl, this.storeOrder.order_data.shipping_costs)\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n let orderId;\r\n\r\n if (prevProps.isLoggedin !== this.props.isLoggedin) {\r\n orderId = this.storeOrder.order_data.order_id;\r\n const shipping = await this.storeShipping.calculateShipping(orderId);\r\n }\r\n } \r\n\r\n handleScroll = () => {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n setCartView = async(view) => {\r\n //SbC prevent overwriting closed order when on multiple devices\r\n let order_availability = await this.storeOrder.getOrderAvailability();\r\n if (order_availability === 'closed') {\r\n let order_id = await this.storeOrder.createNewOrder(this.storeOrder.order_data.client_id, this.storeOrder.order_data.order_remark);\r\n (async() => await this.storeOrder.saveOrderDataProfile() )();\r\n }\r\n\r\n const id = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n if (view === 'cart') {\r\n this.storeOrder.setCartView(id, 'client');\r\n this.storeUi.setUseCase(\"inshop\");\r\n } else {\r\n this.storeOrder.setCartView(id, view);\r\n let url = \"/shoppingcart/\" + view;\r\n this.props.history.push(url);\r\n }\r\n \r\n this.handleScroll();\r\n }\r\n\r\n getShippingCountry = () => {\r\n let country_code = '';\r\n let countryDisplay = '';\r\n if (this.storeOrder.order_data.client_settings.has_delivery_address === true) {\r\n country_code = this.storeOrder.order_data.delivery_address.country_code;\r\n } else {\r\n country_code = this.storeOrder.order_data.client_profile.country_code;\r\n }\r\n\r\n if (this.storeOrder.countriesList[this.storeOrder.countriesList.findIndex(country => country.code == country_code)] !== undefined) {\r\n countryDisplay = this.storeOrder.countriesList[this.storeOrder.countriesList.findIndex(country => country.code == country_code)].displayValue\r\n } else {\r\n countryDisplay = this.storeOrder.countriesList[this.storeOrder.countriesList.findIndex(country => country.code == this.storeOrder.settings_list.isNL)].displayValue\r\n }\r\n\r\n return countryDisplay;\r\n }\r\n\r\n openTC = () => {\r\n this.storeUi.setContentComponent(\r\n <ContentText\r\n title = {i18n.t(\"page_headers.general_terms\")}\r\n page = {\"terms-conditions\"}\r\n className = \"content-scrollable\"\r\n />\r\n );\r\n this.storeUi.openDialogContent();\r\n }\r\n\r\n render() {\r\n const Key = (item) => {\r\n const title = \"forms.label.\" + item.item;\r\n return (\r\n <span className=\"list--dd__dt\">{i18n.t(title)}</span>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"cart-data\">\r\n <div className=\"content-section cart-data__section--cart\">\r\n <h3>Controleer je bestelling</h3>\r\n <ul className=\"cart-data__table\">\r\n {this.storeOrder.cart.user.map((product, i) => (\r\n (product.status !== 'deletedx' && product.amount !== 0 && product.sku !== 0 && product.sku !== undefined) &&\r\n // <CartProduct\r\n // key = {i}\r\n // product = {product}\r\n // sku = {product.sku}\r\n // editable = {false}\r\n // discount_overruled = {this.storeOrder.order_settings.discounts_overruled}\r\n // />\r\n <CartReviewProduct\r\n key = {i}\r\n product = {product}\r\n sku = {product.sku}\r\n editable = {false}\r\n discount_overruled = {this.storeOrder.order_settings.discounts_overruled}\r\n />\r\n ))}\r\n <li className=\"products-table__row\">\r\n <div className=\"products-table__row--details\">\r\n <div className=\"products-table__cell products-table__cell--details-wrapper products-table__cell--details-wrapper-shipping\">\r\n <div className=\"products-table__cell products-table__cell--title\">\r\n Verzendkosten\r\n </div>\r\n <span className=\"products-table__cell products-table__cell--title-subtitle\">(Op basis van land en gewicht)</span>\r\n <span className=\"products-table__cell products-table__cell--subtitle\">Naar \r\n {this.getShippingCountry()}\r\n </span>\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--price-wrapper\">\r\n <div className=\"products-table__cell products-table__cell--amount\">\r\n {/* <span className=\"amount\">{utilities.displayPrice(this.storeOrder.order_data.shipping_costs)}</span> */}\r\n <span className=\"amount\">{utilities.displayPrice(this.storeOrder.shippingCosts)}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n <li className=\"products-table__row\">\r\n <div className=\"products-table__row--details\">\r\n <div className=\"products-table__cell products-table__cell--details-wrapper products-table__cell--details-wrapper-total\">\r\n <div className=\"products-table__cell products-table__cell--title\">\r\n Totaal\r\n </div>\r\n </div>\r\n <div className=\"products-table__cell products-table__cell--price-wrapper\">\r\n <div className=\"products-table__cell products-table__cell--amount\">\r\n <span className=\"amount\">{utilities.displayPrice(this.storeOrder.calculateTotalOrder)}</span>\r\n </div>\r\n </div>\r\n </div>\r\n </li>\r\n </ul>\r\n <div className=\"cart-data__buttons\">\r\n <button className=\"btn btn--tertiary\" onClick={(e) => this.setCartView(\"cart\")}>Wijzig bestelling</button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-section cart-data__section--cart\">\r\n <h3>Persoonlijke gegevens</h3>\r\n <ul>\r\n {Object.keys(this.storeOrder.order_data.client_profile).map((key, i) => (\r\n <React.Fragment>\r\n {this.sectionProfile.indexOf(key) != -1 &&\r\n <li className=\"list--dd__listitem\">\r\n <Key\r\n item = {key}\r\n />\r\n <span className=\"list--dd__dd\">{this.storeOrder.order_data.client_profile[key]}</span>\r\n </li>\r\n }\r\n </React.Fragment>\r\n ))}\r\n </ul>\r\n <div className=\"cart-data__buttons\">\r\n <button className=\"btn btn--tertiary\" onClick={(e) => this.setCartView(\"client\")}>Wijzig persoonlijke gegevens</button>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-section cart-data__section--cart\">\r\n <h3>Adres</h3>\r\n <p>Factuuradres {!this.storeOrder.order_data.client_settings.has_delivery_address && <span>en afleveradres</span>}</p>\r\n <ul>\r\n {this.sectionAddress.map(key => (\r\n ((key !== 'company') || (key === 'company' && this.storeOrder.order_data.company_profile.name !== '' && this.storeOrder.order_data.company_profile.name !== null)) &&\r\n <li className=\"list--dd__listitem\">\r\n <Key\r\n item = {key}\r\n />\r\n <span className=\"list--dd__dd\">\r\n {key != 'country_select'\r\n ? key !== 'company'\r\n ? this.storeOrder.order_data.client_profile[key]\r\n : this.storeOrder.order_data.company_profile.name\r\n : this.storeOrder.countriesList[this.storeOrder.countriesList.findIndex(country => country.code == this.storeOrder.order_data.client_profile.country_code)] !== undefined\r\n ? this.storeOrder.countriesList[this.storeOrder.countriesList.findIndex(country => country.code == this.storeOrder.order_data.client_profile.country_code)].displayValue\r\n : this.storeOrder.countriesList[this.storeOrder.countriesList.findIndex(country => parseInt(country.code) == this.storeOrder.settings_list.isNL)].displayValue\r\n }\r\n </span>\r\n </li>\r\n )) \r\n }\r\n </ul>\r\n\r\n {this.storeOrder.order_data.client_settings.has_delivery_address == true &&\r\n <React.Fragment>\r\n <p>Afleveradres:</p>\r\n <ul>\r\n {this.sectionDeliveryAddress.map((key, i) => (\r\n // {Object.keys(this.storeOrder.order_data.delivery_address).map((key, i) => (\r\n <li className=\"list--dd__listitem\">\r\n <Key\r\n item = {key}\r\n />\r\n <span className=\"list--dd__dd\">\r\n {key != 'country_select'\r\n ? this.storeOrder.order_data.delivery_address[key]\r\n : this.storeOrder.countriesList[this.storeOrder.countriesList.findIndex(country => country.code == this.storeOrder.order_data.delivery_address.country_code)] !== undefined\r\n ? this.storeOrder.countriesList[this.storeOrder.countriesList.findIndex(country => country.code == this.storeOrder.order_data.delivery_address.country_code)].displayValue\r\n : this.storeOrder.countriesList[this.storeOrder.countriesList.findIndex(country => country.code == this.storeOrder.settings_list.isNL)].displayValue\r\n }\r\n </span>\r\n </li>\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n } \r\n <div className=\"cart-data__buttons\"> \r\n <button className=\"btn btn--tertiary\" onClick={(e) => this.setCartView(\"client\")}>Wijzig adresgegevens</button>\r\n </div>\r\n </div>\r\n\r\n {this.storeOrder.order_data.client_settings.is_business == true &&\r\n <div className=\"content-section\">\r\n <h3>Bedrijfsgegevens</h3>\r\n <ul>\r\n <li className=\"list--dd__listitem\">\r\n <Key\r\n item = {\"company\"}\r\n />\r\n <span className=\"list--dd__dd\">\r\n {this.storeOrder.order_data.company_profile.name !== ''\r\n ? this.storeOrder.order_data.company_profile.name\r\n : '--'\r\n }\r\n </span>\r\n </li>\r\n <li className=\"list--dd__listitem\">\r\n <Key\r\n item = {\"nrkvk\"}\r\n />\r\n <span className=\"list--dd__dd\">\r\n {this.storeOrder.order_data.company_profile.nrKvK !== ''\r\n ? this.storeOrder.order_data.company_profile.nrKvK\r\n : '--'\r\n }\r\n </span>\r\n </li>\r\n <li className=\"list--dd__listitem\">\r\n <Key\r\n item = {\"nrvat\"}\r\n />\r\n <span className=\"list--dd__dd\">\r\n {this.storeOrder.order_data.company_profile.nrVAT !== ''\r\n ? this.storeOrder.order_data.company_profile.nrVAT\r\n : '--'\r\n }\r\n </span>\r\n </li>\r\n </ul>\r\n\r\n <div className=\"cart-data__buttons\"> \r\n <button className=\"btn btn--tertiary\" onClick={(e) => this.setCartView(\"client\")}>Wijzig bedrijfsgegevens</button>\r\n </div>\r\n </div>\r\n }\r\n\r\n <div>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.agreement_tc\")}}></span>\r\n <a href=\"#\" onClick={(e) => this.openTC(e)}>algemene voorwaarden</a>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.agreement_tc2\")}}></span>\r\n </div>\r\n\r\n <div className=\"cart__actions\">\r\n <button className=\"btn btn--primary\" onClick={(e) => this.setCartView(\"payment\")}>{i18n.t(\"button.goto_payment\")}</button>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(CartReview);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as ui from '../utilities/ui';\r\n\r\nimport CartProcessSteps from '../components/cart/cart-steps';\r\nimport CartLogin from '../components/cart/cart-login';\r\nimport CartProfile from '../components/cart/cart-profile';\r\nimport CartPayment from '../components/cart/cart-payment';\r\nimport CartReview from '../components/cart/cart-review';\r\n\r\nconst CartProcess = inject(\"stores\") (\r\n observer (\r\n class CartProcess extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n cart_view: \"client\"\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n ui.handleScroll('top');\r\n //this.storeUi.setUseCase(\"inorder\");\r\n this.storeUi.setTemplateView(\"clean\");\r\n }\r\n\r\n componentDidUpdate() {\r\n ui.handleScroll('top');\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUi.setTemplateView();\r\n }\r\n\r\n cartView(view) {\r\n switch(view) {\r\n case \"client\": return <CartProfile />\r\n case \"login\": return <CartLogin />\r\n case \"payment\": return <CartPayment />\r\n case \"review\": return <CartReview \r\n isLoggedin = {this.storeUser.user_data.is_loggedin} \r\n />\r\n }\r\n }\r\n\r\n \r\n\r\n render() {\r\n let cartView = this.storeOrder.order_interface.cart_view;\r\n\r\n return (\r\n <div className=\"cart\">\r\n <CartProcessSteps \r\n \r\n />\r\n {this.cartView(cartView)}\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(CartProcess));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport * as utilities from '../utilities/formats';\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlockQuote from '../components/block/block-quote';\r\nimport Cart from './cart';\r\nimport CartProcess from './cart-process';\r\n\r\nconst ShoppingCart = inject(\"stores\") (\r\n observer (\r\n class ShoppingCart extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeShipping = this.props.stores.storeShipping;\r\n }\r\n\r\n componentDidMount = async() => {\r\n window.scrollTo(0, 0);\r\n this.storeUi.setActiveNav('default');\r\n const userId = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n const orderId = await this.storeOrder.returnOrderId(userId);\r\n const orderStatus = await this.storeOrder.getPaymentStatus(orderId);\r\n\r\n if (orderStatus == 'payment_confirmed' || orderStatus == 'payment_completed') {\r\n this.storeOrder.clearCartAfterPayment();\r\n this.storeOrder.clearAllShoppingCarts(true);\r\n this.storeOrder.saveShoppingCartToDB(userId, this.storeOrder.cart.user);\r\n } else {\r\n //if (orderId !== 99 && orderId !== '99') {\r\n if (this.storeUser.user_data.is_loggedin) { \r\n if (!this.storeOrder.order_interface.isDialogCompareCartsOpen) {\r\n let totalCart = await this.storeOrder.constructShoppingCart(userId, 'init');\r\n (async() => await this.storeOrder.saveShoppingCartToDB(userId, totalCart))();\r\n }\r\n }\r\n //}\r\n }\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n if (this.storeOrder.order_interface.cart_view !== 'review' && this.storeOrder.order_interface.cart_view !== 'client') {\r\n const userId = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n \r\n const orderId = await this.storeOrder.returnOrderId(userId);\r\n const orderStatus = await this.storeOrder.getPaymentStatus(orderId);\r\n\r\n if (orderStatus == 'payment_confirmed' || orderStatus == 'payment_completed') {\r\n this.storeOrder.clearCartAfterPayment();\r\n this.storeOrder.clearAllShoppingCarts(true);\r\n this.storeOrder.saveShoppingCartToDB(userId, this.storeOrder.cart.user);\r\n } else {\r\n //if (orderId !== 99 && orderId !== '99') {\r\n if (this.storeUser.user_data.is_loggedin) { \r\n if (!this.storeOrder.order_interface.isDialogCompareCartsOpen) {\r\n let totalCart = await this.storeOrder.constructShoppingCart(userId, 'init');\r\n (async() => await this.storeOrder.saveShoppingCartToDB(userId, totalCart))();\r\n }\r\n }\r\n\r\n if (prevProps.match.params.view !== this.props.match.params.view) {\r\n let totalCart = await this.storeOrder.constructShoppingCart(userId, 'init');\r\n (async() => await this.storeOrder.saveShoppingCartToDB(userId, totalCart))();\r\n if (userId !== 0) {\r\n (async() => await this.storeOrder.syncShoppingCartWithOrderlines(userId, totalCart))();\r\n }\r\n \r\n if (this.props.match.params.view == 'cart') {\r\n this.storeUi.setUseCase(\"inshop\");\r\n }\r\n this.storeOrder.setCartView(userId, this.props.match.params.view);\r\n this.cartView(this.props.match.params.view)\r\n }\r\n\r\n //await this.storeOrder.calculateShipping(userId);\r\n\r\n // SbC TEST\r\n // SbC TODO what if no order id yet??\r\n let orderId = this.storeOrder.order_data.order_id;\r\n let shipping = await this.storeShipping.calculateShipping(orderId);\r\n // } else {\r\n //SbC reset cart after order closed\r\n //console.log('SbC clear order', orderId)\r\n //this.storeOrder.clearAllShoppingCarts(this.storeUser.user_data.is_loggedin);\r\n }\r\n }\r\n }\r\n\r\n componentWillUnmount = async() => {\r\n window.scrollTo(0, 0);\r\n const userId = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n\r\n if (this.storeUser.user_data.is_loggedin) { \r\n let totalCart = await this.storeOrder.constructShoppingCart(userId, 'init');\r\n (async() => await this.storeOrder.saveShoppingCartToDB(userId, totalCart))();\r\n if (this.storeOrder.cartChanges) {\r\n //console.log('SbC cart has changed!')\r\n }\r\n }\r\n }\r\n\r\n cartView(view) {\r\n switch(view) {\r\n case \"cart\": return <Cart />\r\n case \"cart-process\": return <CartProcess />\r\n }\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {this.storeUi.app_interface.use_case === \"inshop\" ? 'default' : 'single-column'}\r\n header = \"shopping_cart\"\r\n personalized = {this.storeUser.user_data.is_loggedin ? utilities.capitalizeFirstChar(this.storeUser.user_data.profile.firstname) : false}\r\n >\r\n <div className=\"content-segment\">\r\n \r\n {this.storeUi.app_interface.use_case === \"inshop\" \r\n ? this.cartView(\"cart\")\r\n : this.cartView(\"cart-process\")\r\n } \r\n\r\n {this.storeGeneral.shop !== 'SHOP_ALL' &&\r\n this.storeUi.app_interface.use_case === \"inshop\" &&\r\n <BlockQuote \r\n quote = {this.storeUi.getQuote()}\r\n bg = {\"--light\"}\r\n /> \r\n } \r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(ShoppingCart);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst AuthorName = (props) => {\r\n let name = props.author.lastname + ', ' + props.author.firstname;\r\n return name;\r\n}\r\n\r\nconst SitemapAuthors = inject(\"stores\") (\r\n observer (\r\n class SitemapAuthors extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n foldout: false\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n handleOnClickAuthor = (e, id, firstname, lastname) => {\r\n this.storeGeneral.setActiveShop('SHOP_SB');\r\n let name = firstname + ' ' + lastname;\r\n this.storeUi.setCurrentAuthor(name);\r\n this.storeBooks.getBooksForAuthor(this.storeUi.page_view, name, firstname, lastname);\r\n\r\n let url = \"/author/\" + name;\r\n this.props.history.push(url);\r\n }\r\n\r\n handleOnClickAlphabet = (e, letter) => {\r\n\r\n }\r\n\r\n expandBlocks = (e) => {\r\n this.setState(prevState => ({\r\n foldout: !prevState.foldout\r\n }));\r\n }\r\n \r\n render() {\r\n return (\r\n <React.Fragment>\r\n {/* <ul className=\"sitemap__list sitemap__list--alphabet\">\r\n <li className=\"alphabet__listitem\" onClick={(e) => this.handleOnClickAlphabet(e, 'a')}>A</li>\r\n <li className=\"alphabet__listitem\" onClick={(e) => this.handleOnClickAlphabet(e, 'b')}>B</li>\r\n </ul> */}\r\n <ul className={\"sitemap__list sitemap__list--authors \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\")}>\r\n {this.storeBooks.authorsList.map((author, i) => ( \r\n <React.Fragment>\r\n {!this.props.authors_sb && author.is_sb !== 1 &&\r\n <li key={i} className=\"--link\" onClick={(e)=>this.handleOnClickAuthor(e, author.id, author.firstname, author.lastname)}>\r\n <AuthorName \r\n author = {author}\r\n />\r\n </li>\r\n }\r\n {this.props.authors_sb && author.is_sb === 1 &&\r\n <li key={i} className=\"--link\" onClick={(e)=>this.handleOnClickAuthor(e, author.id, author.firstname, author.lastname)}>\r\n <AuthorName \r\n author = {author}\r\n />\r\n </li>\r\n }\r\n </React.Fragment>\r\n ))}\r\n <li className=\"actionShowMore\" onClick={(e) => this.expandBlocks(e)}>\r\n {this.state.foldout \r\n ? i18n.t(\"lists.show_less_authors\")\r\n : i18n.t(\"lists.show_more_authors\")\r\n }\r\n </li>\r\n </ul>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(SitemapAuthors));\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst SitemapCats = inject(\"stores\") (\r\n observer (\r\n class SitemapCats extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n foldout: false\r\n }\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount = async() => {\r\n const categories = await this.storeBooks.returnCategories(this.props.shop);\r\n this.setState({\r\n categories: categories\r\n })\r\n }\r\n\r\n handleOnClickCat = (e, cat_name) => {\r\n this.storeGeneral.setShop(this.props.shop);\r\n this.storeBooks.getBooksForCategory(cat_name, this.storeUi.page_view);\r\n this.storeUi.setActiveCategory(cat_name);\r\n this.storeUi.setActiveSubCategory('');\r\n this.storeUi.setNavMobile(false);\r\n let url = \"/category/\" + cat_name;\r\n this.props.history.push(url);\r\n }\r\n\r\n expandBlocks = (e) => {\r\n this.setState(prevState => ({\r\n foldout: !prevState.foldout\r\n }));\r\n }\r\n \r\n render() {\r\n return (\r\n <ul className={\"sitemap__list sitemap__list--cats \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\")}>\r\n {this.state.categories && this.state.categories.map((cat, i) => ( \r\n <li key={i} className=\"--link\" onClick={(e)=>this.handleOnClickCat(e, cat.name)}>\r\n {this.props.shop == 'SHOP_ALL'\r\n ? <span dangerouslySetInnerHTML={{ __html: cat.display_value}} />\r\n : <span dangerouslySetInnerHTML={{ __html: cat.name}} />\r\n }\r\n </li>\r\n ))}\r\n <li className=\"actionShowMore\" onClick={(e) => this.expandBlocks(e)}>\r\n {this.state.foldout \r\n ? i18n.t(\"lists.show_less_categories\")\r\n : i18n.t(\"lists.show_more_categories\")\r\n }\r\n </li>\r\n </ul>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(SitemapCats));\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\n\r\nconst SitemapPages = inject(\"stores\") (\r\n observer (\r\n class SitemapPages extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n foldout: false\r\n }\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n \r\n render() {\r\n return (\r\n <ul className=\"sitemap__list sitemap__list--pages\">\r\n <li className=\"navigation--footer__column\">\r\n <span className=\"navigation--footer__title\">Succesboeken.nl</span>\r\n <ul className=\"navigation--footer__list\">\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/our-publications\">Boeken eigen uitgeverij</Link></li>\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/all-books\">Alle boeken</Link></li>\r\n }\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/new-books\">Nieuw toegevoegd</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/ebooks\">Gratis e-boeken</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/events\">Ontmoet de auteurs</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/press\">Media/Pers</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/videos\">Video's</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/terms-conditions\">Algemene Voorwaarden</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/privacy-policy\">Privacy Policy</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/disclaimer\">Disclaimer</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/sitemap\">Sitemap</Link></li>\r\n </ul>\r\n </li>\r\n <li className=\"navigation--footer__column\">\r\n <span className=\"navigation--footer__title\">De uitgeverij</span>\r\n <ul className=\"navigation--footer__list\">\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/our-publications\">Onze uitgeverij</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/mission\">Missie & Passie</Link></li>\r\n {this.storeAuth.user.is_loggedin && this.storeUser.user_data.partner_code !== ''\r\n ? <li className=\"navigation--footer__listitem\"><Link to=\"/partner\">Partnercodes</Link></li>\r\n : <li className=\"navigation--footer__listitem\"><Link to=\"/partners\">Partner worden</Link></li>\r\n }\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/business\">Zakelijk - Boekhandel</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/own-book\">Een eigen boek schrijven</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/jobs\">Vacatures</Link></li>\r\n </ul>\r\n </li>\r\n <li className=\"navigation--footer__column\">\r\n <span className=\"navigation--footer__title\">Contact</span>\r\n <ul className=\"navigation--footer__list\">\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/contact\">Opmerkingen/vragen?</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/address\">Adres</Link></li>\r\n </ul>\r\n </li>\r\n </ul>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(SitemapPages));\r\n\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../../templates/template';\r\n\r\nimport SitemapAuthors from '../../components/sitemap/sitemap-authors';\r\nimport SitemapCats from '../../components/sitemap/sitemap-cats';\r\n//import SitemapGenres from '../../components/sitemap/sitemap-genres';\r\nimport SitemapPages from '../../components/sitemap/sitemap-pages';\r\n\r\nconst Sitemap = inject(\"stores\") (\r\n observer (\r\n class Sitemap extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n\r\n render() {\r\n return (\r\n <Template\r\n type = 'single-column'\r\n header = {\"sitemap\"}\r\n nav_name = {\"sitemap\"}\r\n >\r\n {/* <div className=\"content-wrapper__segment\">\r\n <div className=\"sitemap__header\">\r\n {i18n.t(\"sitemap.genres\")}\r\n </div> \r\n <SitemapGenres\r\n />\r\n </div> */}\r\n <div className=\"content-wrapper__segment\">\r\n <div className=\"sitemap__header\">\r\n {i18n.t(\"sitemap.categories_sb\")}\r\n </div> \r\n <SitemapCats \r\n shop = 'SHOP_SB'\r\n />\r\n </div>\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <div className=\"content-wrapper__segment\">\r\n <div className=\"sitemap__header\">\r\n {i18n.t(\"sitemap.categories_all\")}\r\n </div> \r\n <SitemapCats \r\n shop = 'SHOP_ALL'\r\n />\r\n </div>\r\n }\r\n <div className=\"content-wrapper__segment\">\r\n <div className=\"sitemap__header\">\r\n {i18n.t(\"sitemap.other_pages\")}\r\n </div> \r\n <SitemapPages\r\n />\r\n </div>\r\n <div className=\"content-wrapper__segment\">\r\n <div className=\"sitemap__header\">\r\n {this.storeGeneral.shop === 'SHOP_ALL'\r\n ? i18n.t(\"sitemap.authors_sb2\")\r\n : i18n.t(\"sitemap.authors_sb\")\r\n }\r\n </div> \r\n <SitemapAuthors \r\n authors_sb = {true}\r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(Sitemap);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport BlockBook from '../components/block/block-book';\r\nimport BlockQuote from '../components/block/block-quote';\r\nimport CartEmpty from '../components/cart/cart-empty';\r\n\r\nconst WishList = inject(\"stores\") (\r\n observer (\r\n class WishList extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeWishlist = this.props.stores.storeWishlist;\r\n }\r\n\r\n componentDidMount = ()=> {\r\n window.scrollTo(0, 0);\r\n this.storeUi.setActiveNav('default');\r\n }\r\n\r\n componentDidUpdate = () => {\r\n }\r\n\r\n continueShopping = () => {\r\n const id = (this.storeAuth.user.is_loggedin) ? this.storeAuth.user.user_id : 0;\r\n \r\n this.storeOrder.setCartView(id, \"client\");\r\n this.storeUi.setUseCase(\"inshop\");\r\n this.props.history.push(\"/\");\r\n }\r\n \r\n render() {\r\n let wishlist;\r\n const id = (this.storeAuth.user.is_loggedin) ? this.storeAuth.user.user_id : 0;\r\n\r\n if (id !== undefined && id !== 0) {\r\n wishlist = this.storeWishlist.wishlist.user;\r\n } else {\r\n wishlist = this.storeWishlist.wishlist.anonymous;\r\n }\r\n\r\n return (\r\n <Template\r\n type = 'default'\r\n header = \"wishlist\"\r\n >\r\n <div className=\"content-segment\">\r\n {wishlist && wishlist.length > 0\r\n ? <div className=\"wishlist\">\r\n <p>Wil je van een titel meer dan 1 item bestellen, dan kan dat in het winkelmandje.</p>\r\n <p>De volgende titels staan op je verlanglijstje:</p>\r\n <ul className=\"blocks__list--wishlist\">\r\n {wishlist.map((book, i) => ( \r\n <li className=\"block block--book\" key={i}>\r\n <BlockBook \r\n type = \"summary\"\r\n book = {book}\r\n sku = {book.sku}\r\n has_details = {false}\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n <div className=\"cart__actions\">\r\n <button className=\"btn btn--primary\" onClick={(e) => this.continueShopping(e)}>{i18n.t(\"button.continue_shopping\")}</button>\r\n </div>\r\n </div>\r\n : <CartEmpty\r\n section = \"wishlist\"\r\n />\r\n }\r\n\r\n {this.storeGeneral.shop !== 'SHOP_ALL' &&\r\n <BlockQuote \r\n quote = {this.storeUi.getQuote()}\r\n bg = {\"--light\"}\r\n /> \r\n }\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(withTranslation()(WishList));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\n\r\nconst Address = inject(\"stores\") (\r\n observer (\r\n class Address extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0)\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"address\"}\r\n >\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p><strong>Belfra Publishers for Success bv</strong><br/>\r\n (Succesboeken.nl)</p>\r\n <p>Dolderseweg 49<br/>\r\n 3734 BB Den Dolder</p>\r\n <dl className=\"list--dl\">\r\n <dt className=\"list--dl__dt\">KvK:</dt>\r\n <dd className=\"list--dl__dd\">30147850</dd>\r\n\r\n <dt className=\"list--dl__dt\">Btw nr.:</dt>\r\n <dd className=\"list--dl__dd\">8067.90.246.B01</dd>\r\n\r\n <dt className=\"list--dl__dt\">E-mail:</dt>\r\n <dd className=\"list--dl__dd\">info@succesboeken.nl</dd>\r\n\r\n <dt className=\"list--dl__dt\">Tel.:</dt>\r\n <dd className=\"list--dl__dd\">030 2285600</dd>\r\n </dl>\r\n <p>Succesboeken.nl is een handelsnaam van Belfra Publishers for Success bv te Den Dolder.</p>\r\n </div>\r\n </div> \r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Address;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\n\r\nimport Template from '../../templates/template';\r\n\r\nconst Business = inject(\"stores\") (\r\n observer (\r\n class Business extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"business\"}\r\n >\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p>Wanneer je een boekhandel hebt, kun je al onze uitgaven bestellen via het Centraal Boekhuis te Culemborg.<br/>\r\n Indien je géén boekhandel bent, maar een andere bedrijfsvorm hebt, kun je ook een zakelijk account aanmaken.</p>\r\n <p>Tevens kun je partner worden: lees over partner worden:<br/>\r\n <Link \r\n className=\"link--read-more\"\r\n to=\"/partners\">{i18n.t(\"navigation_links.partners\")}\r\n </Link>\r\n </p>\r\n <p>Indien je vragen hebt kun je altijd contact met ons opnemen:<br/>\r\n <Link \r\n className=\"link--read-more\"\r\n to=\"/contact\">{i18n.t(\"navigation_links.contact\")}\r\n </Link>\r\n </p>\r\n <p>Of indien je liever wilt dat wij contact met je opnemen, kun je dit hier doorgeven:<br/>\r\n <Link \r\n className=\"link--read-more\"\r\n to=\"/call-me-back\">{i18n.t(\"navigation_links.call_me_back\")}\r\n </Link></p>\r\n </div>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Business;\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\n\r\nimport TemplateForms from '../../templates/template-forms';\r\n\r\nimport TextArea from '../../elements/form-input-textarea';\r\nimport TextInput from '../../elements/form-input-text';\r\nimport FormTextIncomplete from '../../elements/form-text-incomplete';\r\n\r\nconst FormCallMeBack = inject(\"stores\") (\r\n observer (\r\n class FormCallMeBack extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeForms = this.props.stores.storeForms;\r\n\r\n this.state = {\r\n formControls: { \r\n firstname: {\r\n label: i18n.t(\"forms.label.firstname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.firstname : '',\r\n touched: false,\r\n placeholder: i18n.t(\"forms.placeholder.firstname\"),\r\n validationRules: {\r\n isRequired: true,\r\n minLength: 2\r\n },\r\n required: true \r\n },\r\n lastname: {\r\n label: i18n.t(\"forms.label.lastname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.lastname : '',\r\n touched: false,\r\n placeholder: i18n.t(\"forms.placeholder.lastname\"),\r\n validationRules: {\r\n isRequired: true,\r\n minLength: 2\r\n },\r\n required: true \r\n }, \r\n phonenr: {\r\n label: i18n.t(\"forms.label.phonenr\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.phonenr : '',\r\n touched: false,\r\n placeholder: i18n.t(\"forms.placeholder.phonenr\"),\r\n validationRules: {\r\n isRequired: true,\r\n minLength: 8\r\n },\r\n required: true \r\n }, \r\n email: {\r\n label: i18n.t(\"forms.label.email\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.email : '',\r\n touched: false,\r\n placeholder: i18n.t(\"forms.placeholder.email\"),\r\n validationRules: {\r\n isEmail: true\r\n },\r\n valid: true\r\n },\r\n question: {\r\n label: i18n.t(\"forms.label.question\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.question\"),\r\n valid: true\r\n }\r\n },\r\n formIsValid: false,\r\n btn_class: '--disabled',\r\n error: false\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUi.clearFormFeedback();\r\n }\r\n\r\n componentDidMount = () => {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n let updatedFormElement = {};\r\n let formIsValid = true;\r\n \r\n Object.keys(this.state.formControls).map((key, i) => {\r\n updatedFormElement = {\r\n ...updatedControls[key]\r\n };\r\n\r\n updatedFormElement.value = this.state.formControls[key].value;\r\n if (updatedFormElement.value !== null && updatedFormElement.value !== undefined) {\r\n updatedFormElement.valid = validate(updatedFormElement.value, updatedFormElement.validationRules);\r\n }\r\n updatedControls[key] = updatedFormElement;\r\n\r\n })\r\n\r\n //SbC:: check if form is valid\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n console.log('SBC call me back::', inputIdentifier, updatedControls[inputIdentifier].valid, formIsValid)\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n });\r\n }\r\n\r\n handleChange = event => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n });\r\n \r\n this.storeUi.clearFormFeedback();\r\n }\r\n\r\n sendContactForm = (e) => {\r\n e.preventDefault();\r\n this.storeForms.sendFormCallMeBack(this.state.formControls);\r\n }\r\n\r\n render() {\r\n return (\r\n <TemplateForms\r\n type = 'verzoek'\r\n msg_success = \"We nemen zo spoedig mogelijk contact met je op\"\r\n >\r\n <form className=\"form form--contact\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n key != 'question' &&\r\n <div className=\"form-row form-row--input\" key={i}>\r\n <div className=\"form-column\">\r\n <label className={\"form-label\" + (this.state.formControls[key].required ? ' --required' : '')}>{this.state.formControls[key].label}</label>\r\n </div>\r\n <div className=\"form-column\">\r\n <TextInput \r\n name = {key} \r\n placeholder = {this.state.formControls[key].placeholder}\r\n value = {this.state.formControls[key].value}\r\n touched = {this.state.formControls[key].touched}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls[key].valid}\r\n />\r\n </div>\r\n </div>\r\n ))}\r\n <div className=\"form-row form-row--input\">\r\n <div className=\"form-column\">\r\n <label className={\"form-label\" + (this.state.formControls[\"question\"].required ? ' --required' : '')}>{this.state.formControls['question'].label}</label>\r\n </div>\r\n <div className=\"form-column\">\r\n <TextArea \r\n name=\"question\"\r\n placeholder = {this.state.formControls.question.placeholder}\r\n value = {this.state.formControls.question.value}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls.question.valid}\r\n />\r\n </div>\r\n </div>\r\n\r\n {this.state.btn_class !== '--active' &&\r\n <FormTextIncomplete />\r\n }\r\n </form>\r\n\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.sendContactForm(e)}>{i18n.t(\"button.submit\")}</button>\r\n </div>\r\n </TemplateForms>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormCallMeBack);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\nimport FormCallMeBack from '../../components/forms/form-call-me-back';\r\n\r\nconst CallMeBack = inject(\"stores\") (\r\n observer (\r\n class CallMeBack extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"call_me_back\"}\r\n >\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p>Wanneer je hieronder je gegevens invult en op de verstuur button klikt, bellen we je zo snel mogelijk terug.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <FormCallMeBack />\r\n </div>\r\n </div> \r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default CallMeBack;\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport TextArea from '../../elements/form-input-textarea';\r\n\r\nconst RowTextArea = inject(\"stores\") (\r\n observer (\r\n class RowTextArea extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n formControls: { \r\n textarea: {\r\n label: this.props.label,\r\n value: this.props.value,\r\n placeholder: this.props.placeholder ? this.props.placeholder : i18n.t(\"forms.placeholder.\" + this.props.name + \"2\"),\r\n validationRules: {\r\n isRequired: this.props.required\r\n },\r\n required: this.props.required\r\n }\r\n },\r\n str_textarea: this.props.maxLength\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n\r\n }\r\n\r\n handleChange = (event, action) => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n\r\n updatedFormElement.value = value;\r\n if (this.state.formControls[name].value === \"\") {\r\n updatedFormElement.touched = false;\r\n } else {\r\n updatedFormElement.touched = true;\r\n } \r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n updatedControls[name] = updatedFormElement;\r\n \r\n this.setState({\r\n formControls: updatedControls,\r\n }); \r\n\r\n this.calcRemaining('str_textarea', value, this.props.maxLength);\r\n this.props.onValidate(this.props.name, value, updatedFormElement.valid);\r\n }\r\n\r\n calcRemaining(name, str, max) {\r\n const remaining = max - str.length;\r\n this.setState({\r\n [name]: remaining\r\n })\r\n }\r\n\r\n render() {\r\n const objRules = this.props.validationRules;\r\n const required = (Object.keys(objRules).length > 0 && 'isRequired' in objRules)\r\n ? ' --required'\r\n : ''\r\n\r\n return (\r\n <div className=\"form-row form-row--input\">\r\n <div className=\"form-column\">\r\n <label className={\"form-label\" + required}>{this.state.formControls['textarea'].label}</label>\r\n </div>\r\n <div className=\"form-column\">\r\n <TextArea \r\n name=\"textarea\"\r\n maxLength = {this.props.maxLength}\r\n placeholder = {this.state.formControls.textarea.placeholder}\r\n value = {this.state.formControls.textarea.value}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls.textarea.valid}\r\n />\r\n <div className=\"form-column--feedback\">\r\n <span>nog {this.state.str_textarea} karakters over</span>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(RowTextArea);\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport TemplateForms from '../../templates/template-forms';\r\n\r\nimport FormTextIncomplete from '../../elements/form-text-incomplete';\r\nimport RowText from '../form-rows/row-text';\r\nimport RowTextArea from '../form-rows/row-textarea';\r\n\r\nconst FormContact = inject(\"stores\") (\r\n observer (\r\n class FormContact extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeForms = this.props.stores.storeForms;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n \r\n this.state = {\r\n formControls: { \r\n firstname: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.firstname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.firstname : '',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n lastname: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.lastname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.lastname : '',\r\n validationRules: {},\r\n valid: false\r\n }, \r\n email: {\r\n type: \"email\",\r\n label: i18n.t(\"forms.label.email\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.email : '',\r\n validationRules: {\r\n isRequired: true, \r\n isEmail: true\r\n },\r\n valid: false\r\n },\r\n phonenr: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.phonenr\"),\r\n value: this.props.use_case === \"incart\" ? this.storeOrder.order_data.client_profile.phonenr : this.storeUser.user_data.profile.phonenr,\r\n validationRules: {\r\n isPhoneNumber: true\r\n },\r\n valid: false\r\n },\r\n question: {\r\n type: \"textarea\",\r\n label: i18n.t(\"forms.label.question\"),\r\n placeholder: i18n.t(\"forms.placeholder.question\", {maxlength: this.storeUi.settings_list[\"maxLengthProfile\"]}),\r\n value: '',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n }\r\n },\r\n formIsValid: false,\r\n formIsSubmitted: false,\r\n btn_class: '--disabled',\r\n error: false\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeForms.clearFormFeedback();\r\n }\r\n\r\n componentDidMount = () => {\r\n this.initForm();\r\n }\r\n\r\n initForm = () => {\r\n const updatedControls = this.storeForms.initForm(this.state.formControls);\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateRow = (name, value, valid) => { \r\n this.storeForms.clearFormFeedback();\r\n\r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid);\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = () => {\r\n const formIsValid = this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n });\r\n }\r\n\r\n sendContactForm = (e) => {\r\n e.preventDefault();\r\n\r\n if (this.state.formIsValid) {\r\n this.storeForms.sendFormContact(this.state.formControls);\r\n this.afterSubmit('disable');\r\n }\r\n }\r\n\r\n afterSubmit = (action) => { \r\n if (action === 'disable') {\r\n this.setState({\r\n formIsValid: false,\r\n formIsSubmitted: true,\r\n btn_class: '--disabled'\r\n }); \r\n }\r\n } \r\n\r\n render() {\r\n return (\r\n <TemplateForms\r\n formClass = \"contact\"\r\n type = 'vraag/opmerking'\r\n msg_success = {i18n.t(\"form_feedback.success_contact\")}\r\n >\r\n <form className=\"form form--contact\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {(this.state.formControls[key].type === \"text\" || this.state.formControls[key].type === \"email\") &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n {this.state.formControls[key].type === \"textarea\" &&\r\n <RowTextArea \r\n name = {key}\r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n placeholder = {i18n.t(\"forms.placeholder.question2\", {count: parseInt(this.storeUi.settings_list[\"maxLengthProfile\"])})}\r\n maxLength = {this.storeUi.settings_list[\"maxLengthProfile\"]}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n </React.Fragment>\r\n ))}\r\n\r\n {this.state.btn_class !== '--active' && !this.state.formIsSubmitted &&\r\n <FormTextIncomplete />\r\n }\r\n </form>\r\n\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.sendContactForm(e)}>{i18n.t(\"button.submit\")}</button>\r\n </div>\r\n\r\n <div className=\"form__feedback\">\r\n {'success' in this.storeForms.form_feedback &&\r\n <span>{i18n.t(\"form_feedback.success\", {type: 'vraag/opmerking'})}</span>\r\n }\r\n {'error' in this.storeForms.form_feedback &&\r\n <span>{i18n.t(\"form_feedback.error\", {type: 'vraag/opmerking'})}</span>\r\n }\r\n </div>\r\n </TemplateForms>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormContact);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport MetaTags from 'react-meta-tags';\r\n\r\nimport Template from '../../templates/template';\r\nimport FormContact from '../../components/forms/form-contact';\r\n\r\nconst Contact = inject(\"stores\") (\r\n observer (\r\n class Contact extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0)\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'single-column'}\r\n header = {\"contact\"}\r\n >\r\n <MetaTags>\r\n <title>\r\n Contact\r\n </title>\r\n <meta \r\n name=\"description\" \r\n content=\"Neem contact met ons op\" \r\n />\r\n <meta \r\n property=\"og:title\" \r\n content = 'Succesboeken.nl | Contact' \r\n />\r\n <meta \r\n property=\"og:image\" \r\n content=\"https://www.succesboeken.nl/api/public/images/branding/sb_logo-img.png\" \r\n />\r\n <link \r\n rel=\"canonical\" \r\n href = \"https://www.succesboeken.nl/remarks\" \r\n />\r\n </MetaTags>\r\n \r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <FormContact />\r\n </div>\r\n </div> \r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Contact;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst Disclaimer = inject(\"stores\") (\r\n observer (\r\n class Disclaimer extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = \"disclaimer\"\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"disclaimer\"}\r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Disclaimer;\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport TemplateForms from '../../templates/template-forms';\r\n\r\nimport FormTextIncomplete from '../../elements/form-text-incomplete';\r\nimport RowText from '../form-rows/row-text';\r\n\r\nconst FormEventCouponCheck = inject(\"stores\") (\r\n observer (\r\n class FormEventCouponCheck extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeForms = this.props.stores.storeForms;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n \r\n this.state = {\r\n formControls: { \r\n coupon: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.coupon\"),\r\n value: '',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n }\r\n },\r\n formIsValid: false,\r\n formIsSubmitted: false,\r\n btn_class: '--disabled',\r\n error: false\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeForms.clearFormFeedback();\r\n }\r\n\r\n componentDidMount = () => {\r\n this.initForm();\r\n }\r\n\r\n initForm = () => {\r\n const updatedControls = this.storeForms.initForm(this.state.formControls);\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateRow = (name, value, valid) => { \r\n this.storeForms.clearFormFeedback();\r\n\r\n const validCode = this.props.code;\r\n\r\n if (value && validCode && value.toLowerCase() === validCode.toLowerCase()) {\r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid);\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n } else {\r\n this.setState({\r\n formIsValid: false,\r\n btn_class: '--disabled'\r\n });\r\n }\r\n }\r\n\r\n validateForm = () => {\r\n const formIsValid = this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n });\r\n }\r\n\r\n checkCouponCode = (e) => {\r\n e.preventDefault();\r\n\r\n if (this.state.formIsValid) {\r\n this.props.handleSubmit();\r\n this.afterSubmit('disable');\r\n }\r\n }\r\n\r\n afterSubmit = (action) => { \r\n if (action === 'disable') {\r\n this.setState({\r\n formIsValid: false,\r\n formIsSubmitted: true,\r\n btn_class: '--disabled'\r\n }); \r\n }\r\n } \r\n\r\n render() {\r\n return (\r\n <TemplateForms\r\n formClass = \"contact\"\r\n type = 'vraag/opmerking'\r\n msg_success = {i18n.t(\"form_feedback.success_subscription\")}\r\n >\r\n <form className=\"form form--event\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {((this.state.formControls[key].type === \"text\" || this.state.formControls[key].type === \"email\") &&\r\n (key !== \"guestFirstname\" && key !== \"guestMiddlename\" && key !== \"guestLastname\")) &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n </React.Fragment>\r\n ))}\r\n \r\n {this.state.btn_class !== '--active' && !this.state.formIsSubmitted &&\r\n <FormTextIncomplete />\r\n }\r\n </form>\r\n\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.checkCouponCode(e)}>{i18n.t(\"button.goto_register_form\")}</button>\r\n </div>\r\n </TemplateForms>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormEventCouponCheck);\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport TemplateForms from '../../templates/template-forms';\r\n\r\nimport FormTextIncomplete from '../../elements/form-text-incomplete';\r\nimport RowText from '../form-rows/row-text';\r\nimport RowTextArea from '../form-rows/row-textarea';\r\n\r\nconst FormEventSubscription = inject(\"stores\") (\r\n observer (\r\n class FormEventSubscription extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeForms = this.props.stores.storeForms;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n \r\n this.state = {\r\n formControls: { \r\n firstname: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.firstname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.firstname : '',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n middlename: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.middlename\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.middlename : '',\r\n validationRules: {},\r\n valid: false\r\n }, \r\n lastname: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.lastname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.lastname : '',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n }, \r\n email: {\r\n type: \"email\",\r\n label: i18n.t(\"forms.label.email\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.email : '',\r\n validationRules: {\r\n isRequired: true, \r\n isEmail: true\r\n },\r\n valid: false\r\n },\r\n phonenr: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.phonenr\"),\r\n value: this.props.use_case === \"incart\" ? this.storeOrder.order_data.client_profile.phonenr : this.storeUser.user_data.profile.phonenr,\r\n validationRules: {\r\n isRequired: true, \r\n isPhoneNumber: true\r\n },\r\n valid: false\r\n },\r\n guestFirstname: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.firstname\"),\r\n value: '',\r\n validationRules: {},\r\n valid: false\r\n },\r\n guestMiddlename: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.middlename\"),\r\n value: '',\r\n validationRules: {},\r\n valid: false\r\n }, \r\n guestLastname: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.lastname\"),\r\n value: '',\r\n validationRules: {},\r\n valid: false\r\n },\r\n guestEmail: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.email\"),\r\n value: '',\r\n validationRules: {},\r\n valid: false\r\n },\r\n question: {\r\n type: \"textarea\",\r\n label: i18n.t(\"forms.label.question\"),\r\n placeholder: i18n.t(\"forms.placeholder.question\", {maxlength: this.storeUi.settings_list[\"maxLengthProfile\"]}),\r\n value: '',\r\n validationRules: {},\r\n valid: false\r\n }\r\n },\r\n formIsValid: false,\r\n formIsSubmitted: false,\r\n btn_class: '--disabled',\r\n error: false\r\n }\r\n }\r\n \r\n componentDidMount = () => {\r\n this.initForm();\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeForms.clearFormFeedback();\r\n }\r\n\r\n initForm = () => {\r\n const updatedControls = this.storeForms.initForm(this.state.formControls);\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateRow = (name, value, valid) => { \r\n this.storeForms.clearFormFeedback();\r\n\r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid);\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = () => {\r\n const formIsValid = this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n });\r\n }\r\n\r\n sendEventForm = (e) => {\r\n e.preventDefault();\r\n\r\n if (this.state.formIsValid) {\r\n this.storeForms.sendFormEvent(this.props.eventRef, this.state.formControls);\r\n this.afterSubmit('disable');\r\n }\r\n }\r\n\r\n afterSubmit = (action) => { \r\n if (action === 'disable') {\r\n this.setState({\r\n formIsValid: false,\r\n formIsSubmitted: true,\r\n btn_class: '--disabled'\r\n }); \r\n }\r\n } \r\n\r\n render() {\r\n return (\r\n <TemplateForms\r\n formClass = \"contact\"\r\n type = 'vraag/opmerking'\r\n msg_success = {i18n.t(\"form_feedback.success_subscription\")}\r\n >\r\n <form className=\"form form--event\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {((this.state.formControls[key].type === \"text\" || this.state.formControls[key].type === \"email\") &&\r\n (key !== \"guestFirstname\" && key !== \"guestMiddlename\" && key !== \"guestLastname\" && key !== \"guestEmail\")) &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n </React.Fragment>\r\n ))}\r\n <div\r\n className=\"form--event__guest\"\r\n >\r\n <p>Je kunt eventueel een gast meenemen:<br/>\r\n (Vul voornaam, achternaam en e-mailadres in)</p>\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {((this.state.formControls[key].type === \"text\") &&\r\n (key === \"guestFirstname\" || key === \"guestMiddlename\" || key === \"guestLastname\" || key === \"guestEmail\")) &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n </React.Fragment>\r\n ))}\r\n </div>\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {this.state.formControls[key].type === \"textarea\" &&\r\n <RowTextArea \r\n name = {key}\r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n placeholder = {i18n.t(\"forms.placeholder.question2\", {count: parseInt(this.storeUi.settings_list[\"maxLengthProfile\"])})}\r\n maxLength = {this.storeUi.settings_list[\"maxLengthProfile\"]}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n </React.Fragment>\r\n ))}\r\n\r\n {this.state.btn_class !== '--active' && !this.state.formIsSubmitted &&\r\n <FormTextIncomplete />\r\n }\r\n </form>\r\n\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.sendEventForm(e)}>{i18n.t(\"button.submit\")}</button>\r\n </div>\r\n\r\n <div className=\"form__feedback\">\r\n {'success' in this.storeForms.form_feedback &&\r\n // <span>{i18n.t(\"form_feedback.success\", {type: 'registratie'})}</span>\r\n <span>{this.props.event.textAfterRegistration}</span>\r\n }\r\n {'error' in this.storeForms.form_feedback &&\r\n <span>{i18n.t(\"form_feedback.error\", {type: 'registratie'})}</span>\r\n }\r\n </div>\r\n </TemplateForms>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormEventSubscription);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport MetaTags from 'react-meta-tags';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport Template from '../../templates/template';\r\nimport FormEventCouponCheck from '../../components/forms/form-event-couponcheck';\r\nimport FormEventSubscription from '../../components/forms/form-event-subscription';\r\n\r\nconst EventSubscription = inject(\"stores\") (\r\n observer (\r\n class EventSubscription extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeEvents = this.props.stores.storeEvents;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n\r\n this.state = {\r\n show_code_check: false,\r\n show_orm: false\r\n }\r\n\r\n this.blockRef = React.createRef();\r\n this.blockRef2 = React.createRef();\r\n }\r\n\r\n componentDidMount = async() => {\r\n window.scrollTo(0, 0)\r\n\r\n const event = await this.storeEvents.getEvent('eventtest');\r\n }\r\n\r\n handleGotoTicket = (e) => {\r\n const sku = this.storeEvents.event.sku;\r\n let url = \"/book/\" + sku;\r\n this.props.history.push(url);\r\n }\r\n\r\n handleGotoRegister = (e) => {\r\n this.setState({\r\n show_code_check: true\r\n }, () => this.scrollToCheck())\r\n }\r\n\r\n handleGotoForm = (e) => {\r\n this.setState({\r\n show_form: true\r\n }, () => this.scrollToForm())\r\n }\r\n\r\n scrollToCheck = () => {\r\n ui.smoothScrollTo(0, this.blockRef.offsetTop - 80, 500)\r\n }\r\n\r\n scrollToForm = () => {\r\n ui.smoothScrollTo(0, this.blockRef2.offsetTop - 80, 500)\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'single-column'}\r\n header = {\"event_subscription\"}\r\n headerCustom = {\"Ja, ik wil graag deelnemen aan \" + this.storeEvents.event.title}\r\n class_page = 'content-events'\r\n >\r\n <MetaTags>\r\n <title>\r\n Ja, ik wil graag deelnemen\r\n </title>\r\n <meta \r\n name=\"description\" \r\n content=\"Neem contact met ons op\" \r\n />\r\n <meta \r\n property=\"og:title\" \r\n content = 'Succesboeken.nl | Contact' \r\n />\r\n <meta \r\n property=\"og:image\" \r\n content=\"https://www.succesboeken.nl/api/public/images/branding/sb_logo-img.png\" \r\n />\r\n <link \r\n rel=\"canonical\" \r\n href = \"https://www.succesboeken.nl/remarks\" \r\n />\r\n </MetaTags>\r\n \r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p\r\n dangerouslySetInnerHTML={{ __html: this.storeEvents.event.description}}\r\n />\r\n </div>\r\n </div> \r\n\r\n {(this.storeEvents.event.organisation || this.storeEvents.event.logo1 || this.storeEvents.event.logo2) && \r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <h2>Organisatie</h2>\r\n {this.storeEvents.event.organisation &&\r\n <p>{this.storeEvents.event.organisation}</p>\r\n }\r\n {(this.storeEvents.event.logo1 || this.storeEvents.event.logo2) &&\r\n <div\r\n className=\"content__logos\"\r\n >\r\n {this.storeEvents.event.logo1 &&\r\n <div\r\n className=\"content__logo\"\r\n >\r\n <img src={this.urlAPI + \"/public/images/events/\" + this.storeEvents.event.logo1} />\r\n </div>\r\n }\r\n {this.storeEvents.event.logo1 &&\r\n <div\r\n className=\"content__logo --color\"\r\n >\r\n <img src={this.urlAPI + \"/public/images/events/\" + this.storeEvents.event.logo2} />\r\n </div>\r\n }\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content content__event-data\">\r\n <h2>Evenementgegevens</h2>\r\n <div className=\"event-data\">\r\n <div className=\"event-data__item-header\">\r\n <h3>Datum</h3>\r\n </div>\r\n <div className=\"event-data__item\">\r\n <p>Woensdag 27 september 2023</p>\r\n </div>\r\n <div className=\"event-data__item-header\">\r\n <h3>Aanvang</h3>\r\n </div>\r\n <div className=\"event-data__item\">\r\n <p>19.30 u.<br/>\r\n De zaal is open vanaf 19.00 u.</p>\r\n </div>\r\n <div className=\"event-data__item-header\">\r\n <h3>Eindtijd</h3>\r\n </div>\r\n <div className=\"event-data__item\">\r\n <p>± 23.00 u.<br/>\r\n Dit is mede afhankelijk van de vragen die gesteld worden na afloop.</p>\r\n </div>\r\n <div className=\"event-data__item-header\">\r\n <h3>Locatie</h3>\r\n </div>\r\n <div className=\"event-data__item\">\r\n <p>Antropia<br/>\r\n Cultuur- en Congrescentrum<br/>\r\n Hoofdstraat 8<br/>\r\n 3972 LA Driebergen\r\n </p>\r\n </div>\r\n <div className=\"event-data__item-header\">\r\n <h3>Bereikbaarheid</h3>\r\n </div>\r\n <div className=\"event-data__item\">\r\n <h4>Per auto</h4>\r\n <p>Parkeren is mogelijk in Q-park P&R garage.<br/>\r\n Navigeer naar:<br/>Stationsweg 15B of Oude Stationsweg 13, 3972 LA Driebergen<br/>\r\n Antropia ligt op een paar minuten lopen.</p>\r\n <h4>Per trein</h4>\r\n <p>Antropia ligt op een paar minuten lopen van treinstation Driebergen-Zeist.</p>\r\n </div>\r\n <div className=\"event-data__item-header\">\r\n <h3>Toegangsprijs</h3>\r\n </div>\r\n <div className=\"event-data__item\">\r\n <p>€ 20,-.</p>\r\n </div>\r\n <div className=\"event-data__item-header\">\r\n <h3>Toegangskaarten</h3>\r\n </div>\r\n <div className=\"event-data__item\">\r\n <p>Kaarten kun je aanschaffen in de webshop.</p>\r\n <p>Vergeet niet om bij afname van meerdere kaarten, de namen van de deelnemers in te vullen in het opmerkingenveld bij je bestelling.</p>\r\n <div \r\n className=\"event-data__actions\"\r\n >\r\n <a \r\n className={\"button button--primary button\"} \r\n onClick={(e) => this.handleGotoTicket(e)}\r\n >\r\n {i18n.t(\"button.goto_ticket\")}\r\n </a>\r\n </div> \r\n <p>Degene die 'vriend' zijn van de Stichting Clintel (jaarlijkse donatie) hoeven geen kaart te kopen; wel is het nodig je hier te registreren voor het evenement.</p>\r\n {/* <div \r\n className=\"event-data__actions\"\r\n >\r\n <a \r\n className={\"button button--primary button\"} \r\n onClick={(e) => this.handleGotoRegister(e)}\r\n >\r\n {i18n.t(\"button.goto_register_clintel\")}\r\n </a>\r\n </div> */}\r\n <p>HELAAS IS DIT EVENT UITVERKOCHT</p>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <div \r\n className=\"content-segment\" \r\n ref={ (ref) => this.blockRef=ref }\r\n >\r\n <div className=\"content-segment__content\">\r\n <div \r\n className={\"content-segment__content--code-check\" + (this.state.show_code_check ? \" --active\" : \" --inactive\")}\r\n >\r\n <h2>Couponcode</h2>\r\n <p>Vul de per e-mail ontvangen couponcode in</p>\r\n <FormEventCouponCheck \r\n event = {this.storeEvents.event.reference}\r\n code = {this.storeEvents.event.couponCode}\r\n handleSubmit = {this.handleGotoForm}\r\n />\r\n </div>\r\n <div\r\n className={\"content-segment__content--form\" + (this.state.show_form ? \" --active\" : \" --inactive\")}\r\n ref={ (ref) => this.blockRef2=ref }\r\n >\r\n <h2>Registratieformulier</h2>\r\n {this.storeEvents.event.explanationForm &&\r\n <p>{this.storeEvents.event.explanationForm}</p>\r\n }\r\n <FormEventSubscription \r\n event = {this.storeEvents.event}\r\n eventRef = {this.storeEvents.event.reference}\r\n />\r\n </div>\r\n </div>\r\n </div> \r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(withRouter(EventSubscription));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst Mission = inject(\"stores\") (\r\n observer (\r\n class Mission extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n componentDidMount = () => {\r\n window.scrollTo(0, 0)\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"mission\"}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"mission\"}\r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Mission;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Redirect } from 'react-router';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../templates/template';\r\n\r\nimport AccountProfile from '../components/account/account-profile';\r\nimport AccountOrders from '../components/account/account-orders';\r\nimport AccountTechnical from '../components/account/account-technical';\r\nimport AccountCommissions from '../components/account/account-commissions';\r\n\r\nconst AccountTab = inject(\"stores\") (\r\n observer (\r\n class AccountTab extends Component {\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n view: this.props.view\r\n }\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeUi = this.props.stores.storeUi;\r\n \r\n }\r\n\r\n renderView(view) {\r\n switch(view) {\r\n case \"profile\":\r\n default:\r\n return (\r\n <AccountProfile />\r\n )\r\n case \"technical\":\r\n return (\r\n <AccountTechnical />\r\n ) \r\n case \"orders\":\r\n return (\r\n <AccountOrders /> \r\n )\r\n case \"commissions\":\r\n return (\r\n <AccountCommissions \r\n id = {this.storeUser.user_data.user_id}\r\n />\r\n ) \r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n this.renderView(this.props.view)\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nconst Partner = inject(\"stores\") (\r\n observer (\r\n class Partner extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n view: 'technical'\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n if ( this.props.match.params.tab !== undefined) {\r\n this.setState({\r\n view: this.props.match.params.tab\r\n });\r\n }\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.match.params.tab !== this.props.match.params.tab) {\r\n this.setState({\r\n view: this.props.match.params.tab\r\n });\r\n } \r\n }\r\n\r\n handleContentTab = (e, view) => {\r\n let tab = \"/account/\" + view;\r\n this.props.history.push(tab);\r\n this.setState({\r\n view: view\r\n })\r\n }\r\n \r\n render() {\r\n if (!this.storeAuth.user.is_loggedin) {\r\n return <Redirect \r\n push to={\"/\"} \r\n />;\r\n }\r\n \r\n const Li = (view) => {\r\n const activeClass = ((view.view === this.state.view) || (view.view == 'profile' && this.state.view == undefined)) ? ' --active' : '';\r\n return (\r\n <li className={\"content-tabs__listitem content-tabs__listitem--\" + view.view + activeClass} onClick={(e) => this.handleContentTab(e, view.view)}>\r\n <span>{i18n.t(\"tabs.\" + view.view)}</span>\r\n </li>\r\n )\r\n }\r\n\r\n return (\r\n <Template\r\n type = 'single-column'\r\n header = {(this.storeUser.user_data.partner_status === 'pend' || this.storeUser.user_data.partner_status === '') ? \"partner_codes\" : \"partner\"}\r\n nav_name = {\"partner\"}\r\n >\r\n {this.storeAuth.user.is_partner &&\r\n <div className=\"content-segment\">\r\n <ul className=\"content-tabs__list\">\r\n \r\n <React.Fragment>\r\n <Li \r\n view = 'commissions'\r\n />\r\n <Li \r\n view = 'technical'\r\n />\r\n </React.Fragment>\r\n </ul>\r\n </div>\r\n }\r\n\r\n <div className=\"content-segment\">\r\n <AccountTab\r\n view = {this.state.view}\r\n />\r\n </div>\r\n \r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(Partner);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst Partners = inject(\"stores\") (\r\n observer (\r\n class Partners extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeAuth = this.props.stores.storeAuth;\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0);\r\n }\r\n\r\n componentDidUpdate() {\r\n window.scrollTo(0, 0);\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = \"partnership\"\r\n nav_name = {\"partners\"}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"partnership\"}\r\n />\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Aanvraagformulier</h2>\r\n </div>\r\n {!this.storeAuth.user.is_partner\r\n ? <div className=\"content-segment__content\">\r\n <p>Klik <Link to=\"partner-registration\">hier</Link> om het partnerformulier in te vullen.</p>\r\n </div>\r\n : <div className=\"content-segment__content\">\r\n <p>Je bent reeds als partner geregistreerd.</p>\r\n </div>\r\n }\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Partners;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\n\r\nconst PartnerAgreementText = inject(\"stores\") (\r\n observer (\r\n class PartnerAgreementText extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0)\r\n }\r\n \r\n render() {\r\n return (\r\n <React.Fragment>\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Definities</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <dl>\r\n <dt>Succesboeken.nl:</dt>\r\n <dd>de besloten vennootschap Belfra Publishers bv gevestigd te Dolderseweg 49, 3734 BB Den Dolder met btw-nummer: NL 8067.90.246.B01, Kamer van Koophandel Utrecht 30147850.</dd>\r\n\r\n <dt>Succesboeken website:</dt>\r\n <dd>https://www.succesboeken.nl</dd>\r\n\r\n <dt>Partner:</dt>\r\n <dd>ieder bedrijf of ieder natuurlijke persoon vanaf de leeftijd van achttien (18) jaar die accoord gaat met de Succesboeken overeenkomst partner-program en door Succesboeken.nl als partner is geaccepteerd om bezoekers van zijn/haar site door middel van een link toegang te verschaffen tot de website www.succesboeken.nl.</dd>\r\n\r\n <dt>Producten:</dt>\r\n <dd>alle producten die worden aangeboden op de website van Succesboeken.nl.</dd>\r\n\r\n <dt>Link:</dt>\r\n <dd>een link ten behoeve van het partner-program van de partner naar de website van Succesboeken.nl.</dd>\r\n\r\n <dt>Bezoeker:</dt>\r\n <dd>iedere bezoeker van Internet die zich via de site van de Succesboeken.nl partner door middel van de link toegang verschaft tot de website van Succesboeken.nl en zodoende één of meerdere producten koopt van Succesboeken.nl.</dd>\r\n </dl> \r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Aanmelding en acceptatie</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Aanmelding als Succesboeken.nl partner betekent dat u de overeenkomst partner-program aanvaardt en deze zult respecteren.</p>\r\n <p>Om als Succesboeken.nl partner te worden ingeschreven dient u:</p>\r\n <ol>\r\n <li>het aanmeldingsformulier volledig en naar waarheid in te vullen;</li>\r\n <li>te bevestigen dat u de overeenkomst partner-program heeft aanvaard door de button aan te klikken;</li>\r\n <li>als Succesboeken.nl partner te zijn geaccepteerd door Succesboeken.nl.</li>\r\n </ol>\r\n <p>De acceptatie als Succesboeken.nl partner zal binnen 10(tien) dagen na ontvangst van het aanvraagformulier worden bevestigd of afgewezen.</p>\r\n <p>Succesboeken.nl kan een aanmelding om bepaalde redenen weigeren, zonder opgave van redenen.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Succesboeken.nl partner in de praktijk</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Succesboeken.nl partner zal er geen misverstand over laten bestaan dat de artikelen niet door de partner, maar door Succesboeken.nl worden verkocht. Succesboeken.nl partner is gerechtigd om de naam Succesboeken.nl en het logo van Succesboeken.nl zoals aangegeven, uitsluitend ten behoeve van het Succesboeken.nl partner-program op de door Succesboeken.nl van tijd tot tijd aan te geven wijze te gebruiken en daarbij alle aanwijzingen van Succesboeken.nl steeds op te volgen. Voorwaarde is bovendien dat geen wijzigingen worden aangebracht en het gebruik niet misleidend dan wel schadelijk voor Succesboeken.nl zal kunnen zijn. Succesboeken.nl partner zal te allen tijde de auteursrechten, merkenrechten en overige rechten van exclusieve aard van Succesboeken.nl en derden respecteren. Succesboeken.nl partner zal de content slechts gebruiken ten behoeve van het Succesboeken.nl partner-program en hierin geen wijzigingen aanbrengen. Succesboeken.nl partner draagt er te allen tijde zorg voor dat de prijzen van de producten die (eventueel) op zijn/haar site zijn vermeld in overeenstemming zijn met de prijzen zoals vermeld op de Succesboeken.nl website. Het is niet toegestaan dat de inhoud van de site van de Succesboeken.nl partner:</p>\r\n <ul className=\"list--bullets\">\r\n <li>een erotisch of pornografisch of gewelddadig karakter heeft;</li>\r\n <li>discrimineert naar ras, geslacht, godsdienst of levensovertuiging;</li>\r\n <li>illegale activiteiten ontplooit, bevordert of aanprijst;</li>\r\n <li>afbreuk doet aan de goede naam en reputatie van Succesboeken.nl;</li>\r\n <li>auteursrechten, merkrechten of andere rechten van Succesboeken.nl of enige derde worden geschonden.</li>\r\n </ul>\r\n <p>Succesboeken.nl partner zal te allen tijde in overeenstemming handelen met alle richtlijnen en instructies van Succesboeken.nl terzake van de installatie en het gebruik van de link alsmede terzake van de content. Indien de Succesboeken.nl website hinder ondervindt van de installatie en het gebruik van de link met de partner, is Succesboeken.nl gerechtigd om de link te blokkeren.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Commissie</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Succesboeken.nl partner kan aanspraak maken op commissie van <strong>20%</strong> van alle eigen uitgaven en eigen producten, en <strong>10%</strong> van uitgaven van derden die door Succesboeken.nl aan een bezoeker worden verkocht tijdens een winkelsessie op de Succesboeken.nl website waartoe de bezoeker zich toegang heeft verschaft door middel van de link en de bezoeker aan de betalingsverplichtingen terzake van deze artikelen jegens Succesboeken.nl heeft voldaan. Indien de bezoeker de producten retourneert en/of betaling daarvan ongedaan wordt gemaakt kan de Succesboeken.nl partner geen aanspraak (meer) maken op de betreffende commissie en dient de Succesboeken.nl partner reeds ontvangen commissie terzake aan Succesboeken.nl terug te betalen. Succesboeken.nl is te allen tijde gerechtigd om de betreffende bedragen te verrekenen met hetgeen zij op enig moment aan de Succesboeken.nl partner verschuldigd is of mocht worden. De commissie wordt berekend over de netto verkoopwaarde per product per kalenderkwartaal. Het eerste kwartaal kan langer zijn dan een kwartaal. Onder netto verkoopwaarde wordt verstaan, de prijs van de verkochte en betaalde producten, exclusief btw en verzendkosten. De commissiebedragen zijn exclusief btw. Indien de natuurlijke persoon c.q. rechtspersoon btw-plichtig is, zal over de netto commissie 21,0% btw worden berekend. Deze btw zal naast de netto commissie op de facturen worden vermeld. De registratie van de verkopen via de database van Succesboeken.nl is bindend voor Succesboeken.nl en de partner.</p>\r\n <p><strong>Rekenvoorbeeld commissie:</strong><br/>\r\n Verkoopprijs boek eigen uitgave € 19,95<br/>\r\n Btw eruit 19,95 : 1.09 = € 18,30<br/>\r\n Uw commissie <strong>20%</strong> van € 18,30 = € 3,66<br/>\r\n <br/>\r\n <strong>Rekenvoorbeeld commissie:</strong><br/>\r\n Verkoopprijs boek uitgave derden € 19,95<br/>\r\n Btw eruit 19,95 : 1.09 = € 18,30<br/>\r\n Uw commissie <strong>10%</strong> van € 18,30 = € 1,83\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Commissie voor privépartners</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Privépartners zijn mensen die geen eigen website hebben, maar wel aan derden de boeken/producten promoten van Succesboeken.nl door middel van mailing (geen spam) en/of mondelinge aanbeveling.<br/>Alle hierboven vermelde condities gelden tevens voor privépartners, met dien verstande dat de commissies 5% resp. 10% bedragen.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Betaling</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Betaling van de commissie door Succesboeken.nl aan de Succesboeken.nl partner zal per kwartaal plaatsvinden op het rekeningnummer dat de partner heeft aangegeven op het aanmeldingsformulier. Succesboeken.nl is te allen tijde gerechtigd om hetgeen zij aan de partner verschuldigd is te verrekenen met enig bedrag dat Succesboeken.nl uit welken hoofde dan ook te vorderen heeft van de partner. Het eerste kwartaal kan langer zijn dan een kwartaal. Commissies onder € 5,00 per kwartaal worden om (bank)kostentechnische redenen niet uitgekeerd. Commissies boven € 5,00 maar onder € 10,00 per kwartaal worden maximaal 4 kwartalen om (bank)kostentechnische redenen opgespaard.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Beëindiging Succesboeken.nl partnership</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Succesboeken.nl is te allen tijde gerechtigd om - zonder opgave van redenen - het partnership te beëindigen, met inachtneming van een opzegtermijn van twee (2) weken. De partner zal hier per e-mail van op de hoogte worden gebracht. Onverminderd haar overige rechten is Succesboeken.nl onder meer gerechtigd om het partnership met onmiddellijke ingang te beëindigen in geval:</p>\r\n <ul className=\"list--bullets\">\r\n <li>de partner tekort komt in de nakoming van zijn/haar verplichtingen dan wel in strijd met deze overeenkomst handelt;</li>\r\n <li>de site van de partner naar oordeel van Succesboeken.nl in strijd zou kunnen zijn met de openbare orde of goede zeden dan wel op een of andere wijze aanstootgevend of gewelddadig zou kunnen zijn;</li>\r\n <li>Succesboeken.nl hiervan op een of andere wijze schade van zou kunnen ondervinden;</li>\r\n <li>de partner in het kader van het partner-program onrechtmatig handelt jegens Succesboeken.nl en/of derden, zoals auteurs, uitgevers, producenten, uitvoerend kunstenaars.</li>\r\n </ul>\r\n <p>Het partnership eindigt automatisch in geval:</p>\r\n <ul className=\"list--bullets\">\r\n <li>de partner de link heeft verbroken;</li>\r\n <li>het partner-program is stopgezet door Succesboeken.nl of door de partner;</li>\r\n <li>de partner of Succesboeken.nl in surceance van betaling is;</li>\r\n <li>de partner of Succesboeken.nl failliet is.</li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Gevolgen beëindiging Succesboeken.nl partnership</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Indien het partnerschap, om welke reden dan ook, is beëindigd:</p>\r\n <ol>\r\n <li>worden de link(s) verbroken;</li>\r\n <li>kan de partner geen aanspraak (meer) maken op commissie;</li>\r\n <li>zal de partner onmiddellijk de content in zake Succesboeken.nl van zijn/haar site verwijderen;</li>\r\n <li>is de partner niet langer gerechtigd om de naam Succesboeken.nl en het logo van Succesboeken.nl en/of boekencovers te gebruiken.</li>\r\n </ol>\r\n <p>Indien het partnership is beëindigd zal de partner aanspraak kunnen maken op betaling van commissie terzake van verkopen die zijn verricht vóór de beëindigingsdatum, conform het voorgaande beschrevene. Indien Succesboeken.nl en de partner deze overeenkomst hebben beëindigd kunnen ze geen van beide meer aanspraak maken op enige vergoeding door de andere partij in verband met de beëindiging van het partnership en doen zij hierbij afstand van enig recht op enige (schade)vergoeding.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Aansprakelijkheid</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Succesboeken.nl partner is volledig verantwoordelijk en aansprakelijk voor de ontwikkeling en instandhouding, het functioneren en de inhoud van zijn/haar site. De partner vrijwaart Succesboeken.nl voor alle aanspraken dienaangaande. Tenzij er sprake is van opzet en/of grove schuld van Succesboeken.nl, is Succesboeken.nl niet aansprakelijk voor schade en/of kosten van de partner in verband met deelname aan het partner-program, zoals - maar niet beperkt tot - schade en kosten ten gevolge van het niet behoorlijk functioneren van de Succesboeken.nl website, technische storingen, etc. De partner staat er voor in dat wordt voldaan aan alle verplichtingen op grond van de fiscale wetgeving en vrijwaart Succesboeken.nl terzake van alle aanspraken dienaangaande.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Diversen</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>De partner zal zich nimmer voordoen als een agent of vertegenwoordiger van Succesboeken.nl en zal in het bijzonder geen toezeggingen doen of verplichtingen aangaan voor of namens Succesboeken.nl. De partner is niet gerechtigd om (een deel van) zijn/haar partnership over te dragen aan een derde. Succesboeken.nl is te allen tijde gerechtigd om deze partnerovereenkomst te veranderen. De partner zal hiervan per email op de hoogte worden gebracht. Ingeval de gewijzigde partnerovereenkomst voor de partner niet acceptabel is, is de partner gerechtigd het partnership te beëindigen. Indien de partner niet tot beëindiging van het partnership overgaat, wordt de Succesboeken.nl partner geacht de gewijzigde partnerovereenkomst te hebben aanvaard. Indien enige bepaling van deze overeenkomst in strijd mocht zijn met toepasselijk recht, zal deze bepaling zodanig worden gewijzigd dat zij in overeenstemming met het toepasselijk recht zal zijn met inachtneming van de strekking van de desbetreffende bepaling.</p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n <h2>Toepasselijk recht en bevoegde rechter</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <p>Deze partnerovereenkomst en het partnership worden uitsluitend beheerst door Nederlands recht en geschillen zullen worden voorgelegd aan de Nederlandse rechter.</p>\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default PartnerAgreementText;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\n\r\nimport PartnerAgreementText from './partner-agreement-text';\r\n\r\nconst PartnerAgreement = inject(\"stores\") (\r\n observer (\r\n class PartnerAgreement extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0)\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = \"partner_agreement\"\r\n >\r\n <PartnerAgreementText />\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default PartnerAgreement;\r\n","import React from 'react';\r\n\r\nconst RadioYesNo = props => {\r\n\r\n let formControl = \"form-control\";\r\n let direction = \"--\" + props.direction;\r\n let urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n // if (props.touched && !props.valid) {\r\n // formControl = 'form-control control-error';\r\n // }\r\n\r\n return (\r\n <div className={\"form-group form-group--radio \" + direction}>\r\n <ul className=\"list--yesno\">\r\n {props.options.map(option => (\r\n <li className={\"list--yesno__listitem --link \" + (option.value === 1 ? \"icon icon--ok\" : \"icon icon--clear\") + (parseInt(props.selected) === parseInt(option.value) ? \" --selected\" : '')} key={option.value}>\r\n <label>\r\n <input type=\"radio\"\r\n name = {props.name}\r\n value = {option.value}\r\n onChange = {props.onChange}\r\n className = {formControl}\r\n defaultChecked = {props.defaultValue === option.value}\r\n />\r\n {props.count == 1\r\n ? <span className=\"--link\">{option.displayValueSingle}</span>\r\n : <span className=\"--link\">{option.displayValue}</span>\r\n } \r\n </label>\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n );\r\n}\r\n\r\nexport default RadioYesNo;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport Template from '../../templates/template';\r\nimport FormBusiness from '../../components/forms/form-business';\r\nimport FormPartner from '../../components/forms/form-partner';\r\nimport FormPassword from '../../components/forms/form-password';\r\nimport FormProfile from '../../components/forms/form-profile';\r\n\r\nimport TextArea from '../../elements/form-input-textarea';\r\nimport TextInput from '../../elements/form-input-text';\r\nimport Checkbox from '../../elements/form-input-checkbox';\r\nimport RadioYesNo from '../../elements/form-input-radio-yesno';\r\n\r\nimport ContentText from '../../components/content/content-text';\r\nimport PartnerAgreementText from './partner-agreement-text';\r\n\r\nconst PartnerRegistration = inject(\"stores\") (\r\n observer (\r\n class PartnerRegistration extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n btn_class: '--disabled',\r\n login: false,\r\n \"profile\": {\r\n formControls: {},\r\n formIsValid: false\r\n },\r\n \"password\": {\r\n formControls: {},\r\n formIsValid: false\r\n },\r\n \"business\": {\r\n formControls: {},\r\n formIsValid: true\r\n },\r\n \"partner\": {\r\n formControls: {},\r\n formIsValid: false\r\n },\r\n formControls: {\r\n motivation: {\r\n label: i18n.t(\"forms.label.motivation\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.motivation\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n required: true,\r\n valid: true\r\n },\r\n url_bookpage_yesno: {\r\n label: i18n.t(\"forms.label.url_bookpage_yesno\"),\r\n value: '',\r\n validationRules: {\r\n isRequired: true\r\n },\r\n options: [{\r\n value: 1,\r\n displayValue: 'Ja'\r\n },{\r\n value: 0,\r\n displayValue: 'Nee'\r\n }],\r\n required: true,\r\n valid: true\r\n },\r\n url_bookpage: {\r\n label: i18n.t(\"forms.label.url_bookpage\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.url_bookpage\"),\r\n valid: true\r\n },\r\n subscribe: {\r\n label: i18n.t(\"forms.label.subscribe\"),\r\n value: true,\r\n touched: false,\r\n valid: true\r\n },\r\n no_spam: {\r\n label: i18n.t(\"forms.label.no_spam\"),\r\n value: false,\r\n touched: false,\r\n valid: true,\r\n required: true\r\n },\r\n agreement: {\r\n label: i18n.t(\"forms.label.agreement\"),\r\n value: false,\r\n touched: false,\r\n valid: true,\r\n required: true\r\n }\r\n },\r\n formIsValid: false,\r\n recalc: false,\r\n feedback: false,\r\n str_motivation: 750\r\n };\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n\r\n componentDidMount() {\r\n //window.scrollTo(0, 0);\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUser.form_feedback = {};\r\n }\r\n\r\n calcRemaining(name, str, max) {\r\n const l = str.length;\r\n const remaining = max - str.length;\r\n this.setState({\r\n [name]: remaining\r\n })\r\n }\r\n\r\n handleChange = (event) => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n if (name === 'motivation') {\r\n this.calcRemaining('str_motivation', value, 750);\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => {\r\n this.checkFormRegistrationIsValid();\r\n this.setPartnerDataExtra();\r\n }) \r\n }\r\n\r\n handleCheckboxChange = (event) => {\r\n const name = event.target.name;\r\n\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = !this.state.formControls[name].value;\r\n updatedFormElement.selected = !this.state.formControls[name].value ? 1 : 0\r\n updatedControls[name] = updatedFormElement;\r\n\r\n this.setState({\r\n formControls: updatedControls\r\n }, () => {this.checkFormRegistrationIsValid()})\r\n }\r\n\r\n handleFormChange = (formControls, formIsValid, section) => {\r\n Object.keys(this.state).map((key, i) => {\r\n if (key == section) {\r\n let updatedControls = {\r\n ...this.state[key]\r\n };\r\n const updatedFormElement = {\r\n formControls\r\n };\r\n updatedControls = updatedFormElement;\r\n updatedControls['formIsValid'] = formIsValid;\r\n \r\n this.setState({\r\n [key]: updatedControls,\r\n formIsValid: !formIsValid ? false : this.state.formIsValid,\r\n btn_class: !formIsValid ? '--disabled' : this.state.btn_class\r\n }, () => {this.checkFormRegistrationIsValid()})\r\n }\r\n })\r\n\r\n this.storeUser.setPartnerData(section, formControls)\r\n this.storeUser.clearFormFeedback();\r\n }\r\n\r\n handleOnClick = (e, path) => {\r\n if (path === '/login') {\r\n this.props.history.push(path);\r\n }\r\n }\r\n\r\n checkFormRegistrationIsValid() {\r\n let inputsValid;\r\n let checksValid = true;\r\n let motivationValid = false;\r\n let urlValid = false;\r\n\r\n if (this.storeUser.user_data.is_loggedin) {\r\n inputsValid = (this.state.profile.formIsValid && this.state.business.formIsValid && this.state.partner.formIsValid) ? true : false;\r\n } else {\r\n inputsValid = (this.state.profile.formIsValid && this.state.password.formIsValid && this.state.business.formIsValid && this.state.partner.formIsValid) ? true : false;\r\n checksValid = (this.state.formControls.no_spam.value === true && this.state.formControls.agreement.value === true) ? true : false;\r\n }\r\n motivationValid = this.state.formControls.motivation.value !== '' ? true : false;\r\n urlValid = ((parseInt(this.state.formControls.url_bookpage_yesno.value) === 1 && this.state.formControls.url_bookpage.value !== '') || parseInt(this.state.formControls.url_bookpage_yesno.value) === 0 ) ? true : false;\r\n\r\n this.setState({\r\n formIsValid: (inputsValid && checksValid && motivationValid && urlValid) ? true : false,\r\n btn_class: (inputsValid && checksValid && motivationValid && urlValid) ? '--active' : '--disabled'\r\n });\r\n }\r\n\r\n setPartnerDataExtra = () => {\r\n let partnerDataExtra = {\r\n 'motivation' : this.state.formControls.motivation.value,\r\n 'url_bookpage' : this.state.formControls.url_bookpage.value\r\n }\r\n\r\n this.storeUser.setPartnerDataExtra(partnerDataExtra);\r\n }\r\n\r\n submitFormPartner = () => {\r\n if (this.state.formIsValid) {\r\n this.storeUser.submitFormPartner();\r\n window.scrollTo(0, 0);\r\n this.setState({\r\n feedback: true\r\n })\r\n }\r\n }\r\n\r\n toggleSection = () => {\r\n this.setState({\r\n login: !this.state.login\r\n })\r\n }\r\n\r\n onNextAction = () => {\r\n this.setState({\r\n login: false,\r\n recalc: true\r\n })\r\n }\r\n\r\n openPS = () => {\r\n this.storeUi.setContentComponent(\r\n <ContentText\r\n title = {i18n.t(\"page_headers.privacy_policy\")}\r\n page = {\"privacy-policy\"}\r\n className = \"content-scrollable\"\r\n />\r\n );\r\n this.storeUi.openDialogContent();\r\n }\r\n\r\n openPartnerAgreement = () => {\r\n this.storeUi.setContentComponent(\r\n <PartnerAgreementText \r\n title = {i18n.t(\"page_headers.partner_agreement\")}\r\n className = \"content-scrollable\"\r\n />\r\n );\r\n this.storeUi.openDialogContent();\r\n }\r\n\r\n render() {\r\n const TextCheckbox = (props) => {\r\n switch(props.section) {\r\n case 'subscribe':\r\n return (\r\n <React.Fragment>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.subscribe1\")}}></span>\r\n <a href=\"#\" onClick={(e) => this.openPS(e)}>privacy statement</a>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.subscribe2\")}}></span>\r\n <br/>\r\n <span>Partners worden altijd op de hoogte gehouden.</span>\r\n </React.Fragment>\r\n )\r\n case 'no_spam':\r\n return (\r\n <React.Fragment>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.no_spam\")}}></span>\r\n </React.Fragment>\r\n )\r\n case 'agreement':\r\n return (\r\n <React.Fragment>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.agreement1\")}}></span>\r\n <a href=\"#\" onClick={(e) => this.openPartnerAgreement(e)}>overeenkomst partner-programma</a>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"forms.label.agreement2\")}}></span>\r\n </React.Fragment>\r\n )\r\n }\r\n } \r\n\r\n return (\r\n <Template\r\n type = 'default'\r\n header = {this.storeUser.user_data.partner_status === 'pend' \r\n ? \"partner_pending\"\r\n : this.state.feedback\r\n ? \"partner_processing\"\r\n : \"partner_signup\"\r\n }\r\n noScroll = {true}\r\n > \r\n <div className=\"content-segment\">\r\n {!this.state.login && (this.storeUser.user_data.partner_status !== 'on' && this.storeUser.user_data.partner_status !== 1 && this.storeUser.user_data.partner_status !== 'pend') && !this.state.feedback &&\r\n <div className={\"content-section--register \" + (!this.state.login ? \"--active\" : '')}>\r\n <div className=\"content-segment__content\">\r\n {this.storeUser.user_data.is_loggedin\r\n ? <p>Wijzigingen via dit formulier worden ook in je accountgegevens aangebracht.</p>\r\n : <p>{i18n.t(\"pages.partner.txt_haslogin\")} <span className=\"content__textlink\"onClick={(e)=>this.handleOnClick(e, '/login')}>{i18n.t(\"pages.partner.link_haslogin\")}</span></p>\r\n }\r\n\r\n <div className=\"form-wrapper__help\">\r\n <span className=\"form-wrapper__help--required\">{i18n.t(\"form_feedback.required\")}</span>\r\n </div>\r\n </div>\r\n\r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Persoonlijke gegevens</span>\r\n </div>\r\n\r\n <div className=\"form-wrapper\">\r\n <FormProfile \r\n view = {'partner'}\r\n form = {'partner'}\r\n handleFormChange = {this.handleFormChange} \r\n client_profile = {this.storeUser.user_data.profile}\r\n use_case = {\"inshop\"}\r\n loggedin = {this.storeUser.user_data.is_loggedin}\r\n verifyEmail = {true}\r\n option_email = {true}\r\n option_subscription = {false}\r\n />\r\n </div>\r\n </div>\r\n \r\n {!this.storeUser.user_data.is_loggedin &&\r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Wachtwoord</span>\r\n </div>\r\n <FormPassword \r\n handleFormChange = {this.handleFormChange} \r\n required = {true}\r\n />\r\n </div>\r\n }\r\n \r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Partner gegevens</span>\r\n <span className=\"form__fieldset-subtitle\">Vul onderstaande gegevens in in verband met uitbetalingen</span>\r\n </div>\r\n <FormPartner \r\n handleFormChange = {this.handleFormChange} \r\n data = {this.storeUser.user_data.partner}\r\n />\r\n </div>\r\n\r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">Zakelijke gegevens</span>\r\n <span className=\"form__fieldset-subtitle\">Vul onderstaande gegevens in, indien u geen particulier bent</span>\r\n </div>\r\n <FormBusiness \r\n handleFormChange = {this.handleFormChange} \r\n data = {this.storeUser.user_data.business}\r\n country_code = {this.state.profile.formControls.country_select && this.state.profile.formControls.country_select.value}\r\n />\r\n </div>\r\n \r\n <div className=\"form-fieldset\">\r\n <div className=\"form-wrapper__row\">\r\n <span className=\"form__fieldset-title\">En verder</span>\r\n </div>\r\n <form className=\"form\">\r\n <label className={\"form-label\" + (this.state.formControls.motivation.required ? ' --required' : '')}>{this.state.formControls.motivation.label}</label>\r\n <TextArea \r\n name = \"motivation\"\r\n maxLength = {this.storeUi.settings_list[\"maxLengthProfile\"]}\r\n placeholder = {this.state.formControls.motivation.placeholder}\r\n value = {this.state.formControls.motivation.value}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls.motivation.valid}\r\n />\r\n <div className=\"form-column--feedback\">\r\n <span>nog {this.state.str_motivation} karakters over</span>\r\n </div>\r\n <label className={\"form-label\" + (this.state.formControls.url_bookpage_yesno.required ? ' --required' : '')}>{this.state.formControls.url_bookpage_yesno.label}</label>\r\n <RadioYesNo \r\n name = \"url_bookpage_yesno\" \r\n placeholder = {this.state.formControls.url_bookpage_yesno.placeholder}\r\n value = {this.state.formControls.url_bookpage_yesno.value}\r\n options = {this.state.formControls.url_bookpage_yesno.options}\r\n direction = {\"horizontal\"}\r\n onChange = {this.handleChange}\r\n defaultValue = {this.state.formControls.url_bookpage_yesno.defaultValue}\r\n selected = {this.state.formControls.url_bookpage_yesno.value}\r\n />\r\n <label className={\"form-label\" + (this.state.formControls.url_bookpage.required ? ' --required' : '')}>{this.state.formControls.url_bookpage.label}</label>\r\n <TextInput \r\n name = {'url_bookpage'} \r\n placeholder = {this.state.formControls['url_bookpage'].placeholder}\r\n value = {this.state.formControls['url_bookpage'].value}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls['url_bookpage'].valid}\r\n />\r\n </form>\r\n </div>\r\n \r\n <div className=\"content-segment__content\">\r\n <form className=\"form\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n (key !== 'motivation' && key !== 'url_bookpage_yesno' && key !== 'url_bookpage') &&\r\n ((!this.storeUser.user_data.is_loggedin) || (this.storeUser.user_data.is_loggedin && key === 'subscribe')) &&\r\n <div className=\"form-row form-row--input\" key={i}>\r\n <Checkbox \r\n name = {key} \r\n label = {<TextCheckbox \r\n section = {key}\r\n />}\r\n isSelected = {this.state.formControls[key].value}\r\n onCheckboxChange={this.handleCheckboxChange}\r\n className = {\"--reduced --noflex\"}\r\n required = {this.state.formControls[key].required}\r\n />\r\n </div>\r\n ))}\r\n \r\n {this.state.error &&\r\n <div className=\"form-row form-row--error\">\r\n <p>{i18n.t(\"errors.error_general\")}</p>\r\n </div>\r\n }\r\n </form>\r\n </div>\r\n \r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.submitFormPartner(e)}>{i18n.t(\"button.submit_request\")}</button>\r\n </div>\r\n <div className=\"form__feedback\">\r\n {this.storeUser.form_feedback.msg && this.storeUser.form_feedback.msg.success &&\r\n <span>{this.storeUser.form_feedback.msg.success}</span>\r\n }\r\n {this.storeUser.form_feedback.msg && this.storeUser.form_feedback.msg.error &&\r\n <span className=\"form-field--error\">{this.storeUser.form_feedback.msg.error}</span>\r\n }\r\n </div>\r\n </div>\r\n }\r\n\r\n {!this.state.login && (this.storeUser.user_data.partner_status === 'on' || this.storeUser.user_data.partner_status === 1) &&\r\n <div>Je bent reeds als partner geregistreerd.</div>\r\n }\r\n\r\n {!this.state.login && this.state.feedback &&\r\n <div>\r\n <span>Dank voor je partneraanvraag.</span>\r\n <p>Deze wordt zo spoedig mogelijk beoordeeld.</p>\r\n \r\n <h3>Wat is het vervolg?</h3>\r\n <p>Wij zullen zo snel mogelijk per email laten weten of het assortiment boeken en producten van Succesboeken.nl in overeenstemming is met de door jou aangegeven website.</p>\r\n <p>Gezien de intentie van Succesboeken.nl - mensen helpen beter te worden - passen onze boeken en producten namelijk niet op iedere website.</p>\r\n <p>We laten dat weten door je een partnercode te sturen. Heb een paar dagen geduld.</p>\r\n </div>\r\n }\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(PartnerRegistration);\r\n","import React from 'react';\r\n\r\nclass SelectBook extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n constructOption(str1, str2, str3) {\r\n let str = str1;\r\n let trimmedStr;\r\n\r\n if (str3 !== undefined && str3 !== null && str3 !== '') {\r\n str = str + ' (' + str2 + \" \" + str3 + \")\";\r\n }\r\n let length = 30;\r\n if (str.length > length) {\r\n trimmedStr = str.substring(0, length) + \" ...\";\r\n } else {\r\n trimmedStr = str;\r\n }\r\n return trimmedStr;\r\n }\r\n\r\n render() {\r\n let formControl = \"form-control\";\r\n\r\n return (\r\n <div className=\"form-group\">\r\n <select \r\n className = {formControl} \r\n value = {this.props.defaultValue} \r\n onChange = {this.props.onChange} \r\n name = {this.props.name}\r\n > \r\n <option \r\n value = '0' \r\n key = '0'\r\n >\r\n {this.props.placeholder}\r\n </option>\r\n {this.props.options.map((option, i) => (\r\n <option \r\n value = {i + 1} \r\n key = {option.value}\r\n dangerouslySetInnerHTML={{ __html: this.constructOption(option.title, option.author_firstname, option.author_lastname)}}\r\n >\r\n </option>\r\n ))}\r\n </select>\r\n </div>\r\n );\r\n }\r\n}\r\n\r\nexport default SelectBook;","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport SelectBook from '../../elements/form-input-select-book';\r\n\r\nconst RowSelectBook = inject(\"stores\") (\r\n observer (\r\n class RowSelectBook extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n formControls: { \r\n select: {\r\n name: this.props.name,\r\n label: this.props.label,\r\n placeholder: this.props.placeholder ? this.props.placeholder : i18n.t(\"forms.placeholder.\" + this.props.name),\r\n value: this.props.value,\r\n touched: false,\r\n options: this.props.options,\r\n validationRules: this.props.validationRules,\r\n validationMsg: i18n.t(\"form_errors.general\"),\r\n valid: true,\r\n required: this.props.required\r\n }\r\n }\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n if (prevProps.options !== this.props.options) {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['select']\r\n };\r\n updatedFormElement.options = this.props.options;\r\n updatedControls['select'] = updatedFormElement;\r\n this.setState({\r\n formControls: updatedControls\r\n })\r\n }\r\n\r\n if (prevProps.selected !== this.props.selected) {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['select']\r\n };\r\n updatedFormElement.value = this.props.selected;\r\n updatedControls['select'] = updatedFormElement;\r\n this.setState({\r\n formControls: updatedControls\r\n })\r\n }\r\n }\r\n\r\n handleChange = (event, action) => { \r\n const name = 'select';\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n\r\n updatedFormElement.value = value;\r\n if (this.state.formControls[name].value === \"\") {\r\n updatedFormElement.touched = false;\r\n } else {\r\n updatedFormElement.touched = true;\r\n } \r\n \r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n updatedControls[name] = updatedFormElement;\r\n \r\n this.setState({\r\n formControls: updatedControls,\r\n }); \r\n\r\n this.props.onValidate(this.props.name, value, updatedFormElement.valid);\r\n }\r\n\r\n render() {\r\n const objRules = this.props.validationRules;\r\n const required = (Object.keys(objRules).length > 0 && 'isRequired' in objRules)\r\n ? ' --required'\r\n : ''\r\n\r\n return (\r\n <div \r\n className={\"form-row form-row--input\" + (\r\n (Object.keys(objRules).length > 0 && 'isRequired' in objRules && \r\n this.state.formControls.select.touched === true && \r\n this.state.formControls.select.value === '') ||\r\n (!this.state.formControls.select.valid && (Object.keys(objRules).length > 0) && this.state.formControls.textinput.value !== '')\r\n ? \" --error\" \r\n : ''\r\n )} \r\n >\r\n <div className=\"form-column\">\r\n <label className={\"form-label\" + required}>{this.props.label}</label>\r\n </div>\r\n <div className=\"form-column\">\r\n <SelectBook\r\n name=\"select\"\r\n placeholder = {this.state.formControls.select.placeholder}\r\n value = {this.state.formControls.select.value}\r\n options = {this.state.formControls.select.options ? this.state.formControls.select.options : []}\r\n touched = {this.state.formControls.select.touched}\r\n onChange = {this.handleChange}\r\n valueSelected = {this.state.formControls.select.value}\r\n defaultValue = {this.state.formControls.select.value}\r\n />\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(RowSelectBook);\r\n","import React, { Component } from 'react';\r\nimport { runInAction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\n\r\nimport TextArea from '../../elements/form-input-textarea';\r\nimport RowText from '../form-rows/row-text';\r\nimport RowTextArea from '../form-rows/row-textarea';\r\nimport RowSelectBook from '../form-rows/row-select-book';\r\nimport SelectBook from '../../elements/form-input-select-book';\r\nimport FormTextIncomplete from '../../elements/form-text-incomplete';\r\n\r\nconst FormPress = inject(\"stores\") (\r\n observer (\r\n class FormPress extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeForms = this.props.stores.storeForms;\r\n\r\n this.state = {\r\n formControls: { \r\n firstname: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.firstname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.firstname : '',\r\n placeholder: i18n.t(\"forms.placeholder.firstname\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n lastname: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.lastname\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.lastname : '',\r\n placeholder: i18n.t(\"forms.placeholder.lastname\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n }, \r\n email: {\r\n type: \"email\",\r\n label: i18n.t(\"forms.label.email\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.email : '',\r\n placeholder: i18n.t(\"forms.placeholder.email\"),\r\n validationRules: {\r\n isRequired: true,\r\n isEmail: true\r\n },\r\n valid: false\r\n },\r\n phonenr: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.phonenr\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.phonenr : '',\r\n placeholder: i18n.t(\"forms.placeholder.phonenr\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n address: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.address\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.address : '',\r\n placeholder: i18n.t(\"forms.placeholder.address\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n housenr: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.housenr\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.housenr : '',\r\n placeholder: i18n.t(\"forms.placeholder.housenr\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n zipcode: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.zipcode\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.zipcode : '',\r\n placeholder: i18n.t(\"forms.placeholder.zipcode\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n city: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.city\"),\r\n value: this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.profile.city : '',\r\n placeholder: i18n.t(\"forms.placeholder.city\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n media: {\r\n type: \"text\",\r\n label: i18n.t(\"forms.label.media\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.media\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n },\r\n book_select: {\r\n type: \"select-book\",\r\n label: i18n.t(\"forms.label.select_book\"),\r\n value: this.props.selected,\r\n placeholder: i18n.t(\"forms.placeholder.select_book\"),\r\n validationRules: {},\r\n valid: false\r\n },\r\n remark: {\r\n type: \"textarea\",\r\n label: i18n.t(\"forms.label.remark\"),\r\n value: '',\r\n placeholder: i18n.t(\"forms.placeholder.remark\"),\r\n validationRules: {\r\n isRequired: true\r\n },\r\n valid: false\r\n }\r\n },\r\n btn_class: '--disabled',\r\n error: false,\r\n formIsValid: false\r\n }\r\n }\r\n\r\n componentWillUnmount = () => {\r\n this.storeUi.clearFormFeedback();\r\n }\r\n\r\n componentDidMount = () => {\r\n this.initForm();\r\n }\r\n\r\n async componentDidUpdate(prevProps) {\r\n if (prevProps.selected !== this.props.selected) {\r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls['book_select']\r\n };\r\n updatedFormElement.value = this.props.selected;\r\n updatedControls['book_select'] = updatedFormElement;\r\n this.setState({\r\n formControls: updatedControls\r\n })\r\n }\r\n }\r\n\r\n initForm = () => {\r\n const updatedControls = this.storeForms.initForm(this.state.formControls);\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateRow = (name, value, valid) => { \r\n const updatedControls = this.storeForms.validateRow(this.state.formControls, name, value, valid);\r\n\r\n this.props.handleSelected(name, value);\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n }, () => this.validateForm()); \r\n }\r\n\r\n validateForm = () => {\r\n const formIsValid = this.storeForms.validateForm(this.state.formControls);\r\n\r\n this.setState({\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n });\r\n }\r\n\r\n sendRequestForm = (e) => {\r\n e.preventDefault();\r\n const idx = this.state.formControls.book_select.value - 1;\r\n if (this.state.formIsValid) {\r\n this.storeUi.sendFormPress(this.state.formControls, this.storeUi.settings.sbEmailInfo, this.props.books_sb[idx]);\r\n }\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <div className=\"form-wrapper\">\r\n <div className=\"form-wrapper__help\">\r\n <span className=\"form-wrapper__help--required\">{i18n.t(\"form_feedback.required\")}</span>\r\n </div>\r\n\r\n <div className=\"form-fieldset\">\r\n <form className=\"form form--press\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <React.Fragment>\r\n {(this.state.formControls[key].type === \"text\" || this.state.formControls[key].type === \"email\") &&\r\n <RowText \r\n type = {this.state.formControls[key].type}\r\n name = {key}\r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n\r\n {this.state.formControls[key].type === \"select-book\" &&\r\n <RowSelectBook \r\n name = {key}\r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n placeholder = {this.state.formControls.book_select.placeholder}\r\n options = {this.storeBooks.bookList_sb}\r\n validationRules = {this.state.formControls.book_select.validationRules}\r\n onValidate = {this.validateRow}\r\n selected = {this.state.formControls.book_select.value}\r\n defaultValue = {this.state.formControls.book_select.value}\r\n />\r\n }\r\n\r\n {this.state.formControls[key].type === \"textarea\" &&\r\n <RowTextArea \r\n name = {key}\r\n label = {this.state.formControls[key].label}\r\n value = {this.state.formControls[key].value}\r\n placeholder = {i18n.t(\"forms.placeholder.question2\", {count: parseInt(this.storeUi.settings_list[\"maxLengthProfile\"])})}\r\n maxLength = {this.storeUi.settings_list[\"maxLengthProfile\"]}\r\n validationRules = {this.state.formControls[key].validationRules}\r\n onValidate = {this.validateRow}\r\n />\r\n }\r\n </React.Fragment>\r\n ))}\r\n\r\n {this.state.btn_class !== '--active' &&\r\n <FormTextIncomplete />\r\n }\r\n </form>\r\n\r\n <div className=\"form-row form-row--buttons\">\r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.sendRequestForm(e)}>{i18n.t(\"button.submit\")}</button>\r\n </div>\r\n \r\n <div className=\"form__feedback\">\r\n {'success' in this.storeUi.form_feedback &&\r\n <span>{i18n.t(\"form_feedback.success\", {type: 'verzoek'})}</span>\r\n }\r\n {'error' in this.storeUi.form_feedback &&\r\n <span>{i18n.t(\"form_feedback.error\", {type: 'verzoek'})}</span>\r\n }\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormPress);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\nimport FormPress from '../../components/forms/form-press';\r\n\r\nconst Press = inject(\"stores\") (\r\n observer (\r\n class Press extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n foldout: false,\r\n book_selected: 0\r\n }\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.formRef = React.createRef();\r\n }\r\n\r\n componentDidMount = () => {\r\n ui.handleScroll('top');\r\n this.storeBooks.getSbPublications('current');\r\n }\r\n\r\n expandList = (e) => {\r\n this.setState(prevState => ({\r\n foldout: !prevState.foldout\r\n }));\r\n }\r\n\r\n selectBook = (e, idx) => {\r\n this.setState({\r\n book_selected: idx + 1\r\n })\r\n\r\n ui.handleScroll(this.formRef.offsetTop - 40);\r\n }\r\n\r\n handleSelected = (name, value) => {\r\n if (name == 'book_select' && value !== this.state.book_selected) {\r\n this.setState({\r\n book_selected: parseInt(value)\r\n })\r\n }\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = \"media\"\r\n noScroll = {true}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"media\"}\r\n />\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <ul className={\"content-segment__list content-segment__list--textlines \" + (this.state.foldout ? \"--expanded\" : \"--collapsed\")}>\r\n {this.storeBooks.bookList_sb.map((book, i) => (\r\n <li>\r\n <div className=\"content-segment__listitem-wrapper\">\r\n <span className=\"content-segment__listitem-count\">{i + 1}</span>\r\n <span className={\"--link\" + ((this.state.book_selected === i + 1) ? ' --selected' : '')} onClick={(e) => this.selectBook(e, i)}>\r\n <span dangerouslySetInnerHTML={{ __html: book.title}} /> {book.author_lastname && '('}{book.author_firstname} {book.author_lastname}{book.author_lastname && ')'}</span>\r\n </div>\r\n </li>\r\n ))}\r\n <li className=\"actionShowMore\" onClick={(e) => this.expandList(e)}>\r\n {this.state.foldout \r\n ? i18n.t(\"lists.show_less_books_sb\")\r\n : i18n.t(\"lists.show_more_books_sb\")\r\n }\r\n </li>\r\n </ul>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\" ref={ (ref) => this.formRef=ref }>\r\n <div className=\"content-segment__header\">\r\n <h2>{i18n.t(\"content.press.header_request\")}</h2>\r\n </div>\r\n <div className=\"content-segment__content\">\r\n <FormPress\r\n books_sb = {this.storeBooks.bookList_sb}\r\n selected = {this.state.book_selected}\r\n handleSelected = {this.handleSelected}\r\n />\r\n </div>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(Press);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst PrivacyPolicy = inject(\"stores\") (\r\n observer (\r\n class PrivacyPolicy extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"privacy_policy\"}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"privacy-policy\"}\r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default PrivacyPolicy;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\nimport FormContact from '../../components/forms/form-contact';\r\n\r\nconst Remarks = inject(\"stores\") (\r\n observer (\r\n class Remarks extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0);\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'single-column'}\r\n header = {\"remarks\"}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"contact\"}\r\n />\r\n </div> \r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <FormContact />\r\n </div>\r\n </div> \r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Remarks;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst TermsConditions = inject(\"stores\") (\r\n observer (\r\n class TermsConditions extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"general_terms\"}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"terms-conditions\"}\r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default TermsConditions;\r\n","import React, { Component } from 'react';\r\nimport { runInAction, reaction } from \"mobx\";\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport TemplateForms from '../../templates/template-forms';\r\n\r\nimport validate from '../../utilities/validation-rules';\r\nimport TextInput from '../../elements/form-input-text';\r\n\r\nconst FormUnsubscribe = inject(\"stores\") (\r\n observer (\r\n class FormUnsubscribe extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n formControls: { \r\n email: {\r\n label: i18n.t(\"forms.label.email\"),\r\n value: (this.props.email) \r\n ? this.props.email \r\n : (this.storeAuth.user.is_loggedin) \r\n ? this.storeUser.user_data.profile.email \r\n : '',\r\n placeholder: i18n.t(\"forms.placeholder.email\"),\r\n touched: false,\r\n validationRules: {\r\n isRequired: false,\r\n isEmail: false\r\n },\r\n validationMsg: i18n.t(\"form_errors.email\"),\r\n required: true\r\n }\r\n },\r\n formIsValid: false,\r\n btn_class: '--disabled',\r\n error: false\r\n }\r\n }\r\n\r\n componentDidMount = () => { \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n let updatedFormElement = {};\r\n\r\n Object.keys(this.state.formControls).map((key, i) => {\r\n updatedFormElement = {\r\n ...updatedControls[key]\r\n };\r\n\r\n updatedFormElement.value = this.state.formControls[key].value;\r\n if (updatedFormElement.value !== null && updatedFormElement.value !== undefined) {\r\n updatedFormElement.valid = validate(updatedFormElement.value, updatedFormElement.validationRules);\r\n }\r\n updatedControls[key] = updatedFormElement;\r\n });\r\n \r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n }); \r\n }\r\n\r\n handleChange = (event) => { \r\n const name = event.target.name;\r\n const value = event.target.value;\r\n \r\n const updatedControls = {\r\n ...this.state.formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = true;\r\n updatedFormElement.valid = validate(value, updatedFormElement.validationRules);\r\n \r\n updatedControls[name] = updatedFormElement;\r\n\r\n //SbC check if form is valid\r\n let formIsValid = true;\r\n for (let inputIdentifier in updatedControls) {\r\n if (updatedControls[inputIdentifier].required) {\r\n formIsValid = updatedControls[inputIdentifier].valid && formIsValid;\r\n }\r\n }\r\n\r\n this.setState({\r\n formControls: updatedControls,\r\n formIsValid: formIsValid,\r\n btn_class: formIsValid ? '--active' : '--disabled'\r\n }); \r\n\r\n this.storeUser.clearFormFeedback();\r\n }\r\n\r\n handleSubmit = (action) => { \r\n if (action === 'disable') {\r\n this.setState({\r\n formIsValid: false,\r\n btn_class: '--disabled'\r\n }); \r\n }\r\n } \r\n\r\n // resetForm = () => {\r\n // const updatedControls = {\r\n // ...this.state.formControls\r\n // };\r\n // let updatedFormElement = {};\r\n\r\n // Object.keys(this.state.formControls).map((key, i) => {\r\n // updatedFormElement = {\r\n // ...updatedControls[key]\r\n // };\r\n\r\n // updatedFormElement.value = '';\r\n // updatedControls[key] = updatedFormElement;\r\n // })\r\n \r\n // this.setState({\r\n // formControls: updatedControls,\r\n // formIsValid: false,\r\n // btn_class: '--disabled'\r\n // })\r\n // } \r\n\r\n unsubscribeUser = (e) => {\r\n e.preventDefault();\r\n if (this.state.formIsValid) {\r\n this.storeUser.unSubscribe(this.state.formControls.email.value);\r\n this.storeUser.sendEmailUnSubscribe(this.state.formControls.email.value);\r\n //this.resetForm();\r\n this.handleSubmit('disable');\r\n }\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <TemplateForms\r\n type = 'bericht'\r\n >\r\n <form className=\"form form--unsubscribe\">\r\n {Object.keys(this.state.formControls).map((key, i) => (\r\n <div className=\"form-row form-row--input\" key={i}>\r\n <label className={\"form-label\" + (this.state.formControls[key].required ? ' --required' : '')}>{this.state.formControls[key].label}</label>\r\n <TextInput \r\n name = {key} \r\n placeholder = {this.state.formControls[key].placeholder}\r\n value = {this.state.formControls[key].value}\r\n touched = {this.state.formControls[key].touched}\r\n onChange = {this.handleChange}\r\n valid = {this.state.formControls[key].valid}\r\n msg = {this.state.formControls[key].validationMsg}\r\n is_secret = {this.state.formControls[key].is_secret}\r\n secret = {this.state.formControls[key].secret ? true: false} \r\n showSecret = {() => this.showSecret(key)}\r\n />\r\n </div>\r\n ))}\r\n </form>\r\n\r\n <div className=\"form-row form-row--buttons\"> \r\n <button className={\"btn btn--primary \" + this.state.btn_class} onClick={(e) => this.unsubscribeUser(e)}>{i18n.t(\"button.unsubscribe\")}</button>\r\n </div>\r\n \r\n {this.storeUser.form_feedback &&\r\n <div className=\"form__feedback\">\r\n {'success' in this.storeUser.form_feedback &&\r\n <span>{i18n.t(\"form_feedback.success_unsubscribe\")}</span>\r\n }\r\n {'error' in this.storeUser.form_feedback &&\r\n <span>{this.storeUser.form_feedback['error']}</span>\r\n }\r\n </div>\r\n }\r\n </TemplateForms>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(FormUnsubscribe);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport queryString from 'query-string';\r\n\r\nimport Template from '../../templates/template';\r\n\r\nimport FormUnsubscribe from '../../components/forms/form-unsubscribe';\r\n\r\nconst Unsubscribe = inject(\"stores\") (\r\n observer (\r\n class Unsubscribe extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {};\r\n }\r\n\r\n componentDidMount = () => {\r\n this.setEmail(this.props.location.search);\r\n }\r\n\r\n setEmail = async(urlString) => {\r\n const params = queryString.parse(urlString)\r\n \r\n if (params.email) {\r\n const email = params.email;\r\n this.setState({\r\n email: email\r\n })\r\n }\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'single-column'}\r\n header = {\"unsubscribe\"}\r\n >\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p>Helaas heb je aangegeven onze e-mails niet meer te willen ontvangen.</p>\r\n <p>Echter Succesboeken.nl geeft boeken uit over <b>meer onderwerpen</b> dan het boek waar ons laatste bericht over gaat.</p>\r\n <p>Een volgende uitgave kan wel interessant voor je zijn:<br/>\r\n Onze boeken hebben o.a. betrekking op financiën, communicatie, denkpatronen, leiderschap, persoonlijke ontwikkeling en gezondheid. Kortom boeken waar je beter en wijzer van wordt.</p>\r\n <p>Indien je zeker weet dat je onze berichtgeving over nieuwe uitgaven niet meer wenst te ontvangen, verstuur dan onderstaand formulier en je bent definitief van de mailinglist verwijderd. Wij respecteren je privacy.</p>\r\n <p>Indien je je bedenkt, hoef je verder geen actie te ondernemen.<br/>\r\n We blijven je dan op de hoogte houden.</p>\r\n </div>\r\n\r\n <div className=\"content-segment__content\">\r\n <FormUnsubscribe \r\n email = {this.state.email}\r\n />\r\n </div>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Unsubscribe;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nimport BlockVideo from '../../components/block/block-video';\r\n\r\nimport BlockSocialSharing from '../../components/block/block-social-sharing';\r\n\r\nconst Videos = inject(\"stores\") (\r\n observer (\r\n class Videos extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n social_tooltip: i18n.t(\"share.page_videos\")\r\n }\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0);\r\n this.storeUi.getVideos();\r\n\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveVideo(-1);\r\n }\r\n\r\n onMouseEnterSocial = (social) => {\r\n this.setState({\r\n social_tooltip: (social !== '' && social !== undefined) ? social : i18n.t(\"share.page_videos\")\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = \"videos\"\r\n nav_name = {\"videos\"}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"videos\"}\r\n />\r\n </div>\r\n \r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p>Bekijk ook ons YouTube kanaal:<br/>\r\n <a href=\"https://www.youtube.com/user/Succesboeken/videos\" className=\"link--read-more\" target=\"_blank\">Succesboeken.nl op YouTube</a>\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p><span className=\"book-tools__tool-title\">{this.state.social_tooltip}</span></p>\r\n <BlockSocialSharing \r\n type = 'video'\r\n sku = {\"0\"} \r\n page = {\"videos\"}\r\n onMouseEnter = {this.onMouseEnterSocial}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"blocks__list--video\">\r\n {this.storeUi.videos && this.storeUi.videos.map((video, idx) => ( \r\n <BlockVideo\r\n video = {video}\r\n isDialogVideoOpen = {this.storeUi.isDialogVideoOpen}\r\n idx = {idx}\r\n active_video = {this.storeUi.active_video}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(Videos);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst BlockVideoFilter = inject(\"stores\") (\r\n observer (\r\n class BlockVideoFilter extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeContent = this.props.stores.storeContent;\r\n\r\n this.state = {\r\n categories: [],\r\n tags: [],\r\n active: ''\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n const categories = await this.storeContent.getVideoLabels('categories');\r\n const tags = await this.storeContent.getVideoLabels('tags');\r\n\r\n this.setState({\r\n categories: categories,\r\n tags: tags\r\n })\r\n }\r\n\r\n\r\n componentDidUpdate(prevProps) {\r\n\r\n }\r\n\r\n handleOnClick = async(view, value) => {\r\n const videos = this.storeUi.getVideosByLabel(view, value)\r\n this.setState({\r\n active: value\r\n })\r\n }\r\n\r\n removeFilter = async() => {\r\n const videos = this.storeUi.getVideos();\r\n this.setState({\r\n active: ''\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"block--video-filter\">\r\n <div className=\"content-segment__content\">\r\n <h2 className=\"block--categories__title\">Toon video's voor onderwerp of trefwoord</h2>\r\n\r\n {this.state.categories && this.state.categories.length > 0 &&\r\n <div className=\"block block--categories\">\r\n <span className=\"block--categories__title\">Onderwerpen:</span>\r\n <ul className=\"block--categories__list\">\r\n {this.state.categories.map((cat, i) => (\r\n <li \r\n className={\"block--tags__listitem --link\" + (this.state.active === cat ? \" --active\" : \"\")}\r\n onClick={(e) => this.handleOnClick('category', cat)}\r\n dangerouslySetInnerHTML={{ __html: cat}}\r\n />\r\n ))}\r\n </ul>\r\n </div>\r\n }\r\n\r\n {this.state.tags && this.state.tags.length > 0 &&\r\n <div className=\"block block--tags\">\r\n <span className=\"block--tags__title\">Trefwoorden:</span>\r\n <ul className=\"block--tags__list\">\r\n {this.state.tags.map((tag, i) => (\r\n <li \r\n className={\"block--tags__listitem --link\" + (this.state.active === tag ? \" --active\" : \"\")}\r\n onClick={(e) => this.handleOnClick('tag', tag)}\r\n dangerouslySetInnerHTML={{ __html: tag}}\r\n />\r\n ))}\r\n </ul>\r\n </div>\r\n }\r\n\r\n <span\r\n className=\"block--video-filter__remove --link\"\r\n onClick={(e) => this.removeFilter()}\r\n >\r\n Verwijder filter\r\n </span>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(BlockVideoFilter);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport MetaTags from 'react-meta-tags';\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nimport BlockVideo from '../../components/block/block-video';\r\n\r\nimport BlockSocialSharing from '../../components/block/block-social-sharing';\r\nimport BlockVideoFilter from '../../components/block/block-video-filter';\r\n\r\nconst VideosOverview = inject(\"stores\") (\r\n observer (\r\n class VideosOverview extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n social_tooltip: i18n.t(\"share.page_videos\"),\r\n video_focus: 999\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n window.scrollTo(0, 0);\r\n this.storeUi.getVideos();\r\n\r\n this.storeUi.setActiveMainNav('');\r\n this.storeUi.setActiveVideo(-1);\r\n\r\n if (this.props.match.params.video === undefined) {\r\n this.setState({\r\n video_focus: 999\r\n })\r\n } else {\r\n const reference = this.props.match.params.video;\r\n const video = await this.storeUi.getVideoByReference(reference);\r\n\r\n if (video && video.length > 0) {\r\n this.setState({\r\n video_focus: reference,\r\n video: video[0]\r\n })\r\n }\r\n }\r\n }\r\n\r\n onMouseEnterSocial = (social) => {\r\n this.setState({\r\n social_tooltip: (social !== '' && social !== undefined) ? social : i18n.t(\"share.page_videos\")\r\n })\r\n }\r\n\r\n render() {\r\n return (\r\n <Template\r\n type = 'default'\r\n header = {this.state.video_focus === 999 ? \"videos-overview\" : \"video\"}\r\n nav_name = {\"videos\"}\r\n >\r\n <MetaTags>\r\n <title dangerouslySetInnerHTML={{ __html: \"Video's\"}} />\r\n <meta \r\n name=\"title\" \r\n content={\"Video's\"} \r\n />\r\n <meta \r\n name=\"description\" \r\n content={\"Video's\"} \r\n />\r\n <meta \r\n property=\"og:title\" \r\n content={\"Video's\"} \r\n />\r\n <meta \r\n property=\"og:description\" \r\n content={\"Video's\"} \r\n />\r\n <meta \r\n property=\"og:image\" \r\n content=\"https://www.succesboeken.nl/api/public/images/branding/sb_logo-img.png\" \r\n />\r\n <link \r\n rel=\"canonical\" \r\n href={this.urlAPP + \"/videos\"} \r\n />\r\n </MetaTags>\r\n\r\n {this.state.video_focus !== 999 &&\r\n <React.Fragment>\r\n <div className=\"content-segment\">\r\n <div className=\"block--focus-video\">\r\n <BlockVideo\r\n video = {this.state.video}\r\n isDialogVideoOpen = {this.storeUi.isDialogVideoOpen}\r\n active_video = {this.storeUi.active_video}\r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p><span className=\"book-tools__tool-title\">{i18n.t(\"share.page_video\")}</span></p>\r\n <BlockSocialSharing \r\n type = 'video'\r\n sku = {\"0\"} \r\n page = {\"videos\"}\r\n reference = {this.state.video_focus}\r\n onMouseEnter = {this.onMouseEnterSocial}\r\n />\r\n </div>\r\n </div>\r\n </React.Fragment>\r\n }\r\n\r\n {this.state.video_focus === 999 &&\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"videos\"}\r\n />\r\n </div>\r\n }\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__header\">\r\n {this.state.video_focus !== 999 &&\r\n <h1>Alle video's</h1>\r\n }\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"videos-overview\"}\r\n />\r\n </div>\r\n \r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p>Bekijk ook ons YouTube kanaal:<br/>\r\n <a href=\"https://www.youtube.com/user/Succesboeken/videos\" className=\"link--read-more\" target=\"_blank\">Succesboeken.nl op YouTube</a>\r\n </p>\r\n </div>\r\n </div>\r\n\r\n {this.state.video_focus === 999 &&\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <p><span className=\"book-tools__tool-title\">{i18n.t(\"share.page_videos\")}</span></p>\r\n <BlockSocialSharing \r\n type = 'videos'\r\n sku = {\"0\"} \r\n page = {\"videos\"}\r\n onMouseEnter = {this.onMouseEnterSocial}\r\n />\r\n </div>\r\n </div>\r\n }\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"content-segment__content\">\r\n <BlockVideoFilter\r\n \r\n />\r\n </div>\r\n </div>\r\n\r\n <div className=\"content-segment\">\r\n <div className=\"blocks__list--video\">\r\n {this.storeUi.videos && this.storeUi.videos.map((video, idx) => ( \r\n <BlockVideo\r\n id = {video.id} \r\n video = {video}\r\n //isDialogVideoOpen = {this.storeUi.isDialogVideoOpen}\r\n idx = {idx}\r\n //active_video = {this.storeUi.active_video}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(VideosOverview);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport Template from '../../templates/template';\r\nimport ContentText from '../../components/content/content-text';\r\n\r\nconst SiteExplanation = inject(\"stores\") (\r\n observer (\r\n class SiteExplanation extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'default'}\r\n header = {\"site_explanation\"}\r\n >\r\n <div className=\"content-segment\">\r\n <ContentText\r\n page = {\"site-explanation\"}\r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default SiteExplanation;\r\n","import React, { Component } from \"react\"; \r\n\r\nexport class RedirectPayment extends Component { \r\n constructor(props) { \r\n super(); \r\n this.props = props;\r\n this.state = { ...props }; \r\n } \r\n \r\n componentWillMount = () => { \r\n window.location = this.props.loc; \r\n } \r\n \r\n render(){ \r\n return (\r\n <section>Redirecting...</section>\r\n ) \r\n } \r\n}\r\n\r\nexport default RedirectPayment;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport Template from '../../templates/template';\r\n\r\nconst Error404 = inject(\"stores\") (\r\n observer (\r\n class Error404 extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n \r\n render() {\r\n return (\r\n <Template\r\n type = {'error'}\r\n header = {\"error404\"}\r\n >\r\n <div className=\"content-segment\">\r\n <span\r\n dangerouslySetInnerHTML={{ __html: i18n.t('error.404.content')}}\r\n />\r\n </div>\r\n </Template>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(Error404);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport 'react-dropzone-uploader/dist/styles.css'\r\nimport Dropzone from 'react-dropzone-uploader'\r\n\r\nconst TestUpload = inject(\"stores\") (\r\n observer (\r\n class TestUpload extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n genre_name: \"\",\r\n genre_id: null\r\n }\r\n \r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n }\r\n\r\n async componentDidMount() {\r\n \r\n }\r\n \r\n render() {\r\n const getUploadParams = ({ meta }) => { \r\n return { \r\n url: 'https://httpbin.org/post' \r\n //url: 'http://api.localhost/content/uploadFile.php' \r\n //url: 'http://api.localhost/test/upload/testUpload.php' \r\n } \r\n }\r\n \r\n // called every time a file's `status` changes\r\n const handleChangeStatus = ({ meta, file }, status) => { \r\n console.log(status, meta, file) \r\n }\r\n \r\n // receives array of files that are done uploading when submit button is clicked\r\n const handleSubmit = (files, allFiles) => {\r\n console.log(files.map(f => f.meta))\r\n allFiles.forEach(f => f.remove())\r\n }\r\n\r\n return (\r\n <div className=\"content-wrapper\">\r\n <div className=\"content-wrapper__content\">\r\n <div className=\"content-wrapper__segments\">\r\n <div className=\"content-wrapper__segment\">\r\n <Dropzone\r\n getUploadParams={({file}) => {\r\n const body = new FormData();\r\n body.append('fileField', file);\r\n console.log('SbC file::', file);\r\n return {\r\n url: 'http://api.localhost/test/upload/testUpload.php', \r\n //url: 'https://httpbin.org/post',\r\n body\r\n }\r\n \r\n }}\r\n onChangeStatus={handleChangeStatus}\r\n onSubmit={handleSubmit}\r\n accept=\"image/*,audio/*,video/*\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default TestUpload;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\n\r\nconst TestAbort = inject(\"stores\") (\r\n observer (\r\n class TestAbort extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n \r\n this.controller = new AbortController();\r\n this.signal = this.controller.signal;\r\n\r\n this.state = {\r\n status: 'loading'\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n this.storeUi.setPageView('inview', 100);\r\n const books = this.storeBooks.getBooksWithAbort('SHOP_SB', this.storeUi.page_view, this.controller, this.signal);\r\n\r\n this.setState({\r\n query: books\r\n })\r\n books.then((result) => { \r\n console.log('SbC loaded', this.state.query)\r\n console.log('SbC result', result.data)\r\n this.setState({\r\n bookList: result.data\r\n })\r\n });\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n\r\n }\r\n\r\n handleClick = () => {\r\n this.state.query.cancel();\r\n this.setStatus(\"cancelled\");\r\n }\r\n\r\n setStatus = (status) => {\r\n this.setState({\r\n status: status\r\n })\r\n }\r\n\r\n render() {\r\n if (this.state.status === \"loading\") {\r\n return (\r\n <React.Fragment>\r\n <div style={{ position: 'absolute', top: 200, zIndex: 100 }}>\r\n <div style={{ margin: \"20px 0px 5px\" }}>loading ...</div>\r\n <button\r\n onClick={() => this.handleClick()}\r\n >\r\n Cancel\r\n </button>\r\n </div>\r\n <div>\r\n {this.state.bookList && this.state.bookList.map((book) => (\r\n <div>xxx</div>\r\n ))}\r\n </div>\r\n </React.Fragment>\r\n )}\r\n\r\n if (this.state.status === \"cancelled\") {\r\n return (\r\n <React.Fragment>\r\n <div style={{ position: 'absolute', top: 200, zIndex: 100 }}>\r\n <div style={{ margin: \"20px 0px 5px\" }}>CANCELLED ...</div>\r\n \r\n </div>\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(TestAbort);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Switch, Route } from 'react-router-dom';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport Start from './pages/start';\r\nimport Account from './pages/account';\r\nimport Author from './pages/author';\r\nimport Authors from './pages/authors';\r\nimport Book from './pages/book';\r\nimport BooksNew from './pages/books-new';\r\nimport BooksTop60 from './pages/books-top60';\r\nimport Category from './pages/category';\r\nimport EBooks from './pages/ebooks-all';\r\nimport Events from './pages/content/events';\r\n//import Genre from './pages/genre';\r\nimport Genres from './pages/genres';\r\nimport Jobs from './pages/content/jobs';\r\nimport Languages from './pages/languages';\r\nimport LinkDownload from './pages/content/link-download';\r\nimport LinkDownloadDoorbreek from './pages/content/link-download-doorbreek';\r\nimport Login from './pages/login';\r\nimport NewsletterSubscription from './pages/newsletter-subscription';\r\nimport NewslettersOverview from './pages/newsletters-overview';\r\nimport OurPublications from './pages/our-publications';\r\nimport OwnBook from './pages/content/own-book';\r\nimport PaymentResult from './pages/order/payment-result';\r\nimport Products from './pages/products';\r\nimport Register from './pages/register';\r\nimport SearchAdvanced from './pages/content/search';\r\nimport SearchResults from './pages/search-results';\r\nimport ShoppingCart from './pages/shoppingcart';\r\nimport Sitemap from './pages/content/sitemap';\r\nimport WishList from './pages/wishlist';\r\n\r\nimport Address from './pages/content/address';\r\nimport Business from './pages/content/business';\r\nimport CallMeBack from './pages/content/call-me-back';\r\nimport Contact from './pages/content/contact';\r\nimport Disclaimer from './pages/content/disclaimer';\r\nimport EventSubscription from './pages/content/event-subscription';\r\nimport Mission from './pages/content/mission';\r\nimport Partner from './pages/partner';\r\nimport Partners from './pages/content/partners';\r\nimport PartnerAgreement from './pages/content/partner-agreement';\r\nimport PartnerRegistration from './pages/content/partner-registration';\r\nimport Press from './pages/content/press';\r\nimport PrivacyPolicy from './pages/content/privacy-policy';\r\nimport Remarks from './pages/content/remarks';\r\nimport TermsConditions from './pages/content/terms-conditions';\r\nimport Unsubscribe from './pages/content/unsubscribe';\r\nimport Videos from './pages/content/videos';\r\nimport VideosOverview from './pages/content/videos-overview';\r\nimport SiteExplanation from './pages/content/site-explanation';\r\n\r\nimport RedirectPayment from './components/redirect_payment';\r\n\r\nimport Error404 from './pages/error/error404';\r\n\r\nimport TestUpload from './pages/test/test-upload';\r\nimport TestAbort from './pages/test/test-abort';\r\n\r\nconst Routes = inject(\"stores\") (\r\n observer (\r\n class Routes extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n render() {\r\n return (\r\n <React.Fragment>\r\n <Switch>\r\n <Route exact \r\n path='/' \r\n component={Start}\r\n />\r\n <Route \r\n path='/all-books' \r\n component={Start} \r\n />\r\n <Route \r\n path='/account/:tab?' \r\n component={Account} \r\n />\r\n <Route \r\n path='/address' \r\n component={Address} \r\n />\r\n {/* <Route path='/audiobooks' component={AudioBooks} /> */}\r\n {/* <Route path='/audiobook/:sku' component={Book} /> */}\r\n <Route \r\n path={[\r\n '/author/:id',\r\n '/auteur/:id'\r\n ]} \r\n component={Author} />\r\n <Route \r\n path='/authors' \r\n component={Authors} \r\n />\r\n <Route \r\n path={[\r\n '/book/:sku/:tab?',\r\n '/boek/:sku/:tab?'\r\n ]} \r\n component={Book} />\r\n <Route \r\n path={[\r\n '/business', \r\n '/zakelijk'\r\n ]}\r\n component={Business} />\r\n <Route \r\n path={[\r\n '/call-me-back', \r\n '/belterug',\r\n '/belmeterug'\r\n ]}\r\n component={CallMeBack} />\r\n <Route \r\n path={[\r\n '/category/:name' , \r\n '/categorie/:name' \r\n ]}\r\n render={(routeProps) => (<Category {...routeProps} category={'category'}/>)}\r\n />\r\n <Route \r\n path={[\r\n '/contact', \r\n '/vragen'\r\n ]}\r\n component={Contact} \r\n />\r\n <Route \r\n path='/disclaimer' \r\n component={Disclaimer} \r\n />\r\n <Route \r\n path='/ebooks' \r\n component={EBooks} \r\n />\r\n <Route \r\n path={[\r\n '/events', \r\n '/ontmoet-de-schrijver',\r\n '/ontmoetdeschrijver'\r\n ]}\r\n component={Events} \r\n />\r\n <Route \r\n path={[\r\n '/inschrijving/:ref?', \r\n '/subscription/:ref?'\r\n ]}\r\n component={EventSubscription} \r\n />\r\n {/* <Route \r\n path='/genre/:name' \r\n component={Genre} \r\n /> */}\r\n <Route \r\n path='/genres' \r\n component={Genres} \r\n />\r\n <Route \r\n path={[\r\n '/jobs', \r\n '/vacature',\r\n '/vacatures'\r\n ]}\r\n component={Jobs} \r\n />\r\n <Route \r\n path={[\r\n '/languages/:lang?',\r\n '/taal/:lang?'\r\n ]}\r\n //render={(routeProps) => (<Languages {...routeProps} category={'language'}/>)}\r\n component={Languages}\r\n />\r\n <Route \r\n path={[\r\n 'download-placebo',\r\n '/link-download',\r\n '/link-download-placebo',\r\n ]}\r\n component={LinkDownload} \r\n />\r\n <Route \r\n path={[\r\n '/download-doorbreek',\r\n '/link-download-doorbreek'\r\n ]}\r\n component={LinkDownloadDoorbreek} \r\n />\r\n <Route \r\n path='/login' \r\n component={Login} \r\n />\r\n <Route \r\n path={[\r\n '/mission', \r\n '/missie'\r\n ]}\r\n component={Mission} \r\n />\r\n <Route path={[\r\n '/new-books/:view?', \r\n '/overzichtnw/:view?'\r\n ]}\r\n component={BooksNew} \r\n />\r\n <Route \r\n path={[\r\n '/newsletter', \r\n '/nieuwsbrief2'\r\n ]}\r\n component={NewsletterSubscription} \r\n />\r\n <Route path={[\r\n '/overview-newsletters/:week?', \r\n '/nieuwsbriefoverzicht/:week?'\r\n ]}\r\n component={NewslettersOverview} />\r\n <Route \r\n path={[\r\n '/our-publications/:tab?', \r\n '/onze-publicaties/:tab?',\r\n '/eigen-uitgaven/:tab?',\r\n '/eigenuitgaven/:tab?',\r\n '/boeken-eigen-uitgeverij/:tab?',\r\n '/boekeneigenuitgeverij/:tab?'\r\n ]} \r\n component={OurPublications} />\r\n <Route \r\n path={[\r\n '/own-book', \r\n '/eigen-boek'\r\n ]}\r\n component={OwnBook} \r\n />\r\n <Route \r\n path='/payment-result' \r\n component={PaymentResult} \r\n />\r\n <Route \r\n path='/partner' \r\n component={Partner} \r\n />\r\n <Route \r\n path={[\r\n '/partners', \r\n '/partneruitleg'\r\n ]}\r\n component={Partners} \r\n />\r\n <Route \r\n path='/partner-agreement' \r\n component={PartnerAgreement} \r\n />\r\n <Route \r\n path='/partner-registration' \r\n component={PartnerRegistration} \r\n />\r\n <Route path={[\r\n '/press', \r\n '/pers',\r\n '/media'\r\n ]}\r\n component={Press} />\r\n <Route \r\n path='/privacy-policy' \r\n component={PrivacyPolicy} \r\n />\r\n <Route \r\n path='/products/:group?' \r\n render={(routeProps) => (<Products \r\n {...routeProps} \r\n group={this.storeUi.app_interface.active_product_group} \r\n subgroup={this.storeUi.app_interface.active_subgroup} \r\n />)}\r\n />\r\n <Route \r\n path='/register' \r\n component={Register} \r\n />\r\n <Route \r\n path='/remarks' \r\n component={Remarks} \r\n />\r\n <Route \r\n path='/search-advanced' \r\n component={SearchAdvanced} \r\n />\r\n <Route \r\n path='/search-results/:page?' \r\n component={SearchResults} \r\n />\r\n <Route \r\n path='/site-explanation' \r\n component={SiteExplanation} \r\n />\r\n <Route \r\n path='/shoppingcart/:view?' \r\n component={ShoppingCart} \r\n />\r\n <Route \r\n path='/sitemap' \r\n component={Sitemap} \r\n />\r\n <Route \r\n path={[\r\n '/subcategory/:name', \r\n '/subcategorie/:name'\r\n ]} \r\n render={(routeProps) => (<Category {...routeProps} category={'subcategory'}/>)}\r\n />\r\n <Route \r\n path='/terms-conditions' \r\n component={TermsConditions} \r\n />\r\n <Route \r\n path={[\r\n '/top60'\r\n ]}\r\n component={BooksTop60} />\r\n <Route \r\n path={[\r\n '/unsubscribe', \r\n '/uitschrijven'\r\n ]}\r\n component={Unsubscribe} />\r\n <Route \r\n path={[\r\n '/videos/:video?'\r\n ]}\r\n component={VideosOverview} \r\n />\r\n <Route \r\n path={[\r\n '/videos-overview/:video?'\r\n ]}\r\n component={VideosOverview} \r\n />\r\n <Route \r\n path='/wishlist' \r\n component={WishList} \r\n />\r\n\r\n <Route \r\n path='/404' \r\n component={Error404} \r\n />\r\n\r\n <Route \r\n path=\"/payment\" \r\n render={(routeProps) => (<RedirectPayment {...routeProps} loc={this.storeOrder.order_data.order_status.url} />)}\r\n />\r\n\r\n <Route \r\n path='/test-upload' \r\n component={TestUpload} \r\n />\r\n <Route \r\n path='/test-abort' \r\n component={TestAbort} \r\n />\r\n\r\n <Route \r\n component={Error404} \r\n />\r\n </Switch>\r\n </React.Fragment>\r\n );\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(Routes);","import React from 'react';\r\nimport { observer } from \"mobx-react\";\r\nimport PropTypes from 'prop-types';\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\n\r\nexport default class DialogContent extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n handleClose = (e) => {\r\n this.props.onClose();\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n let dialogClass = \"dialog--\";\r\n\r\n if (this.props.children.props.className && this.props.children.props.className !== '') {\r\n dialogClass = dialogClass + this.props.children.props.className;\r\n } else {\r\n dialogClass = dialogClass + 'content';\r\n }\r\n\r\n return (\r\n this.props.children.props.overlay === false\r\n ? <div className={\"dialog \" + dialogClass}>\r\n <div className=\"btn--close\" onClick={(e) => this.handleClose(e)}><div className=\"btn--icon --link icon--close\">Sluit</div></div>\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.children.props.title}</h2>\r\n </div>\r\n <div className=\"dialog-content\">\r\n {this.props.children}\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n : <div className=\"overlay\">\r\n <div className={\"dialog \" + dialogClass}>\r\n <div className=\"btn--close\" onClick={(e) => this.handleClose(e)}><div className=\"btn--icon --link icon--close\">Sluit</div></div>\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.children.props.title}</h2>\r\n </div>\r\n <div className=\"dialog-content\">\r\n {this.props.children}\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport ContentText from '../content/content-text';\r\n\r\nconst DialogCookies = inject(\"stores\") (\r\n observer (\r\n class DialogCookies extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n is_visible: this.props.visible\r\n };\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.visible !== this.props.visible) {\r\n this.setState({\r\n is_visible: true\r\n });\r\n\r\n setTimeout(() => { \r\n this.setState({\r\n is_visible: false\r\n });\r\n this.storeUi.setCookies();\r\n }, this.storeUi.cookie_duration);\r\n }\r\n }\r\n\r\n hideDialogCookies() {\r\n this.setState({\r\n is_visible: false\r\n });\r\n }\r\n\r\n render() { \r\n let class_visible = this.state.is_visible ? ' --fadeIn' : ' --fadeOut';\r\n\r\n return (\r\n <div className={\"dialog--content-cookies\" + class_visible}>\r\n <div className=\"btn--icon icon--clear --link\" onClick={(e) => this.hideDialogCookies()}/>\r\n <ContentText\r\n page = {\"cookies\"}\r\n className = \"content-cookies\"\r\n />\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default DialogCookies;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nconst DialogCompareShoppingCarts = inject(\"stores\") (\r\n observer (\r\n class DialogCompareShoppingCarts extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.state = {\r\n cart_compare: []\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n let cart_compare = [];\r\n\r\n if (this.props.cart_db.length > 0) {\r\n this.props.cart_db.map((item) => {\r\n if (item.status !== 'deletedx') {\r\n cart_compare.push(item);\r\n }\r\n })\r\n }\r\n\r\n this.setState({\r\n cart_compare: cart_compare\r\n })\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className=\"dialog dialog--carts dialog--carts-scrollable\">\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.title}</h2>\r\n </div>\r\n <div className=\"dialog-content\">\r\n {/* {this.state.cart_compare.length > 0\r\n ? <React.Fragment>\r\n <p>Er bestaan twee winkelmandjes:<br/>1 van een niet-ingelogde versie en 1 van een sessie waarbij je wel was ingelogd.</p>\r\n <p>Beide winkelwagentjes kunnen door verschillende personen aangemaakt zijn.</p>\r\n </React.Fragment>\r\n : <p>Er is mogelijk iemand anders geweest die een winkelmandje heeft gemaakt tijdens een niet-ingelogde sessie:</p>\r\n } */}\r\n {/* <h3>Winkelmandje van een niet-ingelogde sessie:</h3>\r\n <ul className=\"dialog-content__list dialog-content__list--covers\">\r\n {this.props.cart_current.map(item => (\r\n item.status !== 'deletedx' &&\r\n <li className=\"dialog-content__listitem\">\r\n <ImgCover\r\n sku = {item.sku}\r\n aspect = {'--fixed-height'}\r\n />\r\n {item.amount > 1 &&\r\n <span>\r\n ({item.amount}) \r\n </span>\r\n }\r\n </li>\r\n ))}\r\n </ul>\r\n */}\r\n {/* {this.state.cart_compare.length > 0 &&\r\n <React.Fragment>\r\n <h3>Winkelmandje van een ingelogde sessie:</h3>\r\n <ul className=\"dialog-content__list dialog-content__list--covers\">\r\n {this.props.cart_db.map(item => (\r\n (item.status !== 'deletedx' && parseInt(item.amount) >= 1) &&\r\n <li className=\"dialog-content__listitem\">\r\n <ImgCover\r\n sku = {item.sku}\r\n aspect = {'--fixed-height'}\r\n />\r\n {item.amount > 1 &&\r\n <span>\r\n ({item.amount}) \r\n </span>\r\n }\r\n </li>\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n } */}\r\n\r\n {/* {this.state.cart_compare.length > 0\r\n ? <p>Wil je deze winkelmandjes samenvoegen?</p>\r\n : <p>Mag dit winkelmandje van jou worden?</p>\r\n } */}\r\n\r\n <p>\r\n Er zaten nog producten in je winkelmandje van een vorig bezoek. Deze zijn nu samengevoegd.\r\n </p>\r\n <p>\r\n Uiteraard kun je je winkelmandje altijd nog wijzigen.\r\n </p>\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {this.state.cart_compare.length > 0 ? button.text : (button.action === 'keep' ? 'Nee, wel bewaren' : 'Ok!')}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default DialogCompareShoppingCarts;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport ImgCover from '../../elements/img-cover';\r\nimport ButtonDialog from '../../elements/button-dialog';\r\n\r\nconst DialogCompareWishLists = inject(\"stores\") (\r\n observer (\r\n class DialogCompareWishLists extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeWishlist = this.props.stores.storeWishlist;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className=\"dialog dialog--notification\">\r\n <div className=\"dialog-header\">\r\n {this.storeWishlist.wishlist.user.length > 0\r\n ? <h2>{this.props.title}</h2>\r\n : <h2>Verlanglijstje</h2>\r\n }\r\n </div>\r\n <div className=\"dialog-content\">\r\n {/* {this.storeWishlist.wishlist.user.length > 0\r\n ? <React.Fragment>\r\n <p>Er bestaan twee verlanglijstjes:<br/>1 van een niet-ingelogde versie en 1 van een sessie waarbij je wel was ingelogd.</p>\r\n <p>Beide lijstjes kunnen door verschillende personen aangemaakt zijn.</p>\r\n </React.Fragment>\r\n : <p>Er is mogelijk iemand anders geweest die een verlanglijstje heeft gemaakt tijdens een niet-ingelogde sessie:</p>\r\n } */}\r\n \r\n {/* <h4>Verlanglijstje van een niet-ingelogde sessie:</h4>\r\n <ul className=\"dialog-content__list dialog-content__list--covers\">\r\n {this.storeWishlist.wishlist.anonymous.map(item => (\r\n <li className=\"dialog-content__listitem\">\r\n <ImgCover\r\n sku = {item.sku}\r\n aspect = {'--fixed-height'}\r\n />\r\n </li>\r\n ))}\r\n </ul> */}\r\n\r\n {/* {this.storeWishlist.wishlist.user.length > 0 &&\r\n <React.Fragment>\r\n <h4>Verlanglijstje van de ingelogde sessie:</h4>\r\n <ul className=\"dialog-content__list dialog-content__list--covers\">\r\n {this.storeWishlist.wishlist.user.map(item => (\r\n <li className=\"dialog-content__listitem\">\r\n <ImgCover\r\n sku = {item.sku}\r\n aspect = {'--fixed-height'}\r\n />\r\n </li>\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n } */}\r\n\r\n {/* {this.storeWishlist.wishlist.user.length > 0\r\n ? <p>Wil je deze verlanglijstjes samenvoegen?</p>\r\n : <p>Mag dit verlanglijstje van jou worden?</p>\r\n } */}\r\n\r\n<p>\r\n Er stonden nog producten op je verlanglijstje van een vorig bezoek. Deze zijn nu samengevoegd.\r\n </p>\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {this.storeWishlist.wishlist.user.length > 0 \r\n ? button.text \r\n : (button.action === 'keep' ? 'Nee, wel bewaren' : 'Ok!')\r\n }\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default DialogCompareWishLists;\r\n","import React from 'react';\r\nimport { observer } from \"mobx-react\";\r\nimport PropTypes from 'prop-types';\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nexport default class DialogConfirmationWishList extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className={\"dialog dialog--confirmation \" + (this.props.fade ? \"--fadeOut\" : '')}>\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.title}</h2>\r\n </div>\r\n <div className=\"dialog-content\">\r\n <ImgCover\r\n sku = {this.props.sku}\r\n aspect = {'--fixed-height'}\r\n />\r\n {this.props.children}\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { observer } from \"mobx-react\";\r\nimport PropTypes from 'prop-types';\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\nimport ImgCover from '../../elements/img-cover';\r\n\r\nexport default class DialogError extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className=\"dialog dialog--error\">\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.title}</h2>\r\n </div>\r\n <div className=\"dialog-content\">\r\n <p>Er is een technische fout opgetreden.</p>\r\n <p>Neem contact met ons op indien je problemen blijft ondervinden, dan zoeken we samen naar een oplossing.</p>\r\n {this.props.children}\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\n\r\nconst DialogFeedbackForm = inject(\"stores\") (\r\n observer (\r\n class DialogFeedbackForm extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n handleClose = (e) => {\r\n this.props.onClose();\r\n }\r\n\r\n render() {\r\n if (!this.props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className=\"dialog dialog--form\">\r\n <div className=\"btn--close\" onClick={(e) => this.handleClose(e)}><div className=\"btn--icon --link icon--close\">Sluit</div></div>\r\n <div className=\"dialog-content\">\r\n {'success' in this.storeUi.form_feedback &&\r\n <React.Fragment>\r\n <span className=\"form__feedback--success\">{i18n.t(\"form_feedback.success\", {type: this.props.type})}</span>\r\n {this.props.msg_success && \r\n <span>{this.storeUi.form_feedback.msg}</span>\r\n }\r\n </React.Fragment>\r\n }\r\n\r\n {'error' in this.storeUi.form_feedback && (\r\n <React.Fragment>\r\n {'error_code' in this.storeUi.form_feedback &&\r\n <span className=\"form__feedback--error\" dangerouslySetInnerHTML={{ __html: this.storeUi.form_feedback.error}} />\r\n }\r\n {('msg' in this.storeUi.form_feedback && this.storeUi.form_feedback.msg !== '')\r\n ? <span className=\"form__feedback--error\" dangerouslySetInnerHTML={{ __html: this.storeUi.form_feedback.msg}} />\r\n : <span className=\"form__feedback--error\">{i18n.t(\"form_feedback.error\", {type: this.props.type})}</span>\r\n }\r\n </React.Fragment>\r\n )}\r\n </div>\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons && this.props.buttons.map((button) => (\r\n <ButtonDialog\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n )\r\n \r\n export default DialogFeedbackForm;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\n\r\nconst DialogFeedbackForm20 = inject(\"stores\") (\r\n observer (\r\n class DialogFeedbackForm20 extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeForms = this.props.stores.storeForms;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n handleClose = (e) => {\r\n this.props.onClose();\r\n }\r\n\r\n render() {\r\n if (!this.props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className=\"dialog dialog--form\">\r\n <div className=\"btn--close\" onClick={(e) => this.handleClose(e)}><div className=\"btn--icon --link icon--close\">Sluit</div></div>\r\n <div className=\"dialog-content\">\r\n {'success' in this.storeForms.form_feedback &&\r\n <React.Fragment>\r\n <span className=\"form__feedback--success\">{i18n.t(\"form_feedback.success\", {type: this.props.type})}</span>\r\n <span className=\"form__feedback--followup\">{i18n.t(\"form_followup.\" + this.props.type)}</span>\r\n </React.Fragment>\r\n }\r\n\r\n {'error' in this.storeForms.form_feedback && (\r\n <React.Fragment>\r\n {'error_code' in this.storeForms.form_feedback &&\r\n <span className=\"form__feedback--error\" dangerouslySetInnerHTML={{ __html: this.storeForms.form_feedback.error}} />\r\n }\r\n {('msg' in this.storeForms.form_feedback && this.storeForms.form_feedback.msg !== '')\r\n ? <span className=\"form__feedback--error\" dangerouslySetInnerHTML={{ __html: this.storeForms.form_feedback.msg}} />\r\n : <span className=\"form__feedback--error\">{i18n.t(\"form_feedback.error\", {type: this.props.type})}</span>\r\n }\r\n </React.Fragment>\r\n )}\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button) => (\r\n <ButtonDialog\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n )\r\n \r\n export default DialogFeedbackForm20;\r\n","import React from 'react';\r\nimport i18n from \"i18next\";\r\n\r\nconst ButtonDialogClose = (props) => {\r\n\r\n let btnClass = \"btn--icon --link\";\r\n\r\n if (props.btnClass && props.btnClass !== '') {\r\n btnClass = btnClass + ' ' + props.btnClass;\r\n }\r\n \r\n return (\r\n <div className=\"btn--close\">\r\n {props.btnText && \r\n <span className=\"--link\" onClick={props.onAction}>Terug naar vorige pagina</span>\r\n }\r\n <div \r\n className = {btnClass} \r\n onClick = {props.onAction}\r\n >\r\n {props.caption}\r\n </div>\r\n </div>\r\n );\r\n}\r\n\r\nexport default ButtonDialogClose;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport BlockSocialSharing from '../block/block-social-sharing';\r\nimport ButtonDialogClose from '../../elements/button-dialog-close';\r\n\r\nconst DialogNewsletter = inject(\"stores\") (\r\n observer (\r\n class DialogNewsletter extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n iframe: ''\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n\r\n const url = this.storeUi.app_interface.urlNewsletterOpen;\r\n const iframe = '<iframe src=\"'+ url + '\" border=\"0\"></iframe>';\r\n\r\n this.setState({\r\n iframe: iframe\r\n })\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n this.storeUi.closeDialogNewsletter();\r\n }\r\n\r\n onMouseEnterSocial = (social) => {\r\n this.setState({\r\n social_tooltip: (social !== '' && social !== undefined) ? social : i18n.t(\"book_tools.social\")\r\n })\r\n }\r\n\r\n onClose = () => {\r\n this.props.history.goBack();\r\n this.storeUi.closeDialogNewsletter();\r\n }\r\n\r\n onTranslate = () => {\r\n //const url = this.storeUi.app_interface.urlNewsletterOpen;\r\n const url = \"http://api.localhost/admin/tests/pages/test-translate.php\";\r\n console.log('SbC trans', url);\r\n const iframe = '<iframe src=\"'+ url + '\" border=\"0\"></iframe>';\r\n\r\n this.setState({\r\n iframe: iframe\r\n })\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n // const url = this.storeUi.app_interface.urlNewsletterOpen;\r\n // const iframe = '<iframe src=\"'+ url + '\" border=\"0\"></iframe>';\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className=\"dialog dialog--newsletter\">\r\n \r\n <div className=\"dialog-header\">\r\n <div className=\"header-content__payoff\">Uitgeverij & de grootste website voor zelfontwikkeling</div>\r\n <span>{this.props.subtitle}</span>\r\n <BlockSocialSharing \r\n type = 'newsletter'\r\n //url = {url}\r\n onMouseEnter = {this.onMouseEnterSocial}\r\n />\r\n <ButtonDialogClose\r\n caption = {'Sluit'}\r\n onAction = {() => this.onClose()}\r\n btnClass = {'icon--close'}\r\n btnText = {true}\r\n /> \r\n </div>\r\n <div className=\"dialog-content\">\r\n <div dangerouslySetInnerHTML={{ __html: this.state.iframe }} />\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(DialogNewsletter);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\n\r\nconst DialogPayment = inject(\"stores\") (\r\n observer (\r\n class DialogPayment extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeOrder = this.props.stores.storeOrder;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n const url = this.storeOrder.order_data.order_status.url\r\n\r\n const iframe = '<iframe src=\"'+ url + '\" width=\"540\" height=\"450\"></iframe>';\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className=\"dialog dialog--form dialog--payment\">\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.title}</h2>\r\n <span>{this.props.subtitle}</span>\r\n </div>\r\n <div className=\"dialog-content\">\r\n <div dangerouslySetInnerHTML={{ __html: iframe }} />\r\n </div>\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons && this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default DialogPayment;\r\n","import React from 'react';\r\nimport { observer } from \"mobx-react\";\r\nimport PropTypes from 'prop-types';\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\n\r\nexport default class DialogNotification extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div className=\"overlay\">\r\n <div className=\"dialog dialog--notification\">\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.title}</h2>\r\n </div>\r\n <div className=\"dialog-content\">\r\n {this.props.content.map((content => (\r\n <div className=\"notification-content\">\r\n <h3 className=\"notification-content__title\">{content.title}</h3>\r\n <p>{content.description}</p>\r\n </div>\r\n )))\r\n }\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n );\r\n }\r\n}\r\n","import React from 'react';\r\nimport { observer } from \"mobx-react\";\r\nimport PropTypes from 'prop-types';\r\nimport i18n from \"i18next\";\r\n\r\nimport ButtonDialog from '../../elements/button-dialog';\r\n\r\nexport default class DialogVideo extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.props.onClose();\r\n }\r\n }\r\n\r\n handleClose = (e) => {\r\n this.props.onClose();\r\n }\r\n\r\n render() {\r\n if(!this.props.show) {\r\n return null;\r\n }\r\n\r\n let dialogClass = \"dialog--\";\r\n\r\n if (this.props.children.props && this.props.children.props.className && this.props.children.props.className !== '') {\r\n dialogClass = dialogClass + this.props.children.props.className;\r\n } else {\r\n dialogClass = dialogClass + 'content';\r\n }\r\n\r\n return (\r\n this.props.children.props && this.props.children.props.overlay === false\r\n ? <div className={\"dialog \" + dialogClass}>\r\n <div className=\"btn--close\" onClick={(e) => this.handleClose(e)}><div className=\"btn--icon --link icon--close\">Sluit</div></div>\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.children.props.title}</h2>\r\n </div>\r\n <div className=\"dialog-content\">\r\n {this.props.children}\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n : <div className=\"overlay\">\r\n <div className={\"dialog \" + dialogClass}>\r\n <div className=\"btn--close\" onClick={(e) => this.handleClose(e)}><div className=\"btn--icon --link icon--close\">Sluit</div></div>\r\n <div className=\"dialog-header\">\r\n <h2>{this.props.children.props && this.props.children.props.title}</h2>\r\n </div>\r\n <div className=\"dialog-content\">\r\n {this.props.children}\r\n </div>\r\n {this.props.buttons &&\r\n <div className=\"dialog-footer\">\r\n {this.props.buttons.map((button, i) => (\r\n <ButtonDialog\r\n key = {i}\r\n caption = {button.text}\r\n onAction = {button.onClick}\r\n btnClass = {button.btnClass}\r\n />\r\n ))}\r\n </div>\r\n }\r\n </div>\r\n </div>\r\n \r\n );\r\n }\r\n}\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nimport logo_img from '../../assets/images/branding/sb_logo.png';\r\nimport logo_txt from '../../assets/images/branding/sb_logo-text.png';\r\n\r\nconst Branding = inject(\"stores\") (\r\n observer (\r\n class Branding extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidUpdate = () => {\r\n \r\n } \r\n\r\n handleOnClick = (e, path) => {\r\n this.storeUi.setUseCase(\"inshop\");\r\n\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n this.storeGeneral.setSearchShop('SB');\r\n\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveToggleNav(1);\r\n this.props.history.push(path);\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <div className=\"branding\" onClick={(e)=>this.handleOnClick(e, '/')}>\r\n <img src={logo_img} className=\"branding__logo--img\" alt=\"logo image succesboeken.nl\" />\r\n <span className=\"branding__text-container\">\r\n <img src={logo_txt} className=\"branding__logo--txt\" alt=\"logo text succesboeken.nl\" /> \r\n </span>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(Branding);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { NavLink } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nconst NavigationMain = inject(\"stores\") (\r\n observer (\r\n class NavigationMain extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n \r\n this.state = {\r\n dd_active: false\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n if (this.storeGeneral.shop === '') {\r\n this.storeGeneral.setShop('SHOP_SB');\r\n }\r\n }\r\n\r\n handleNavClick = (e, id, path) => {\r\n this.storeUi.setActiveMainNav(id);\r\n this.storeUi.setActiveToggleNav(1);\r\n this.storeUi.setActiveSubNav(0);\r\n this.storeUi.setPageView('page', 1);\r\n\r\n this.props.history.push(path);\r\n\r\n ui.smoothScrollTo(0, 0, 500); \r\n }\r\n\r\n render() {\r\n const nav_id = this.storeUi.active_nav\r\n\r\n const Li = (item) => {\r\n const activeClass = (item.id === nav_id) ? ' --active' : '';\r\n return (\r\n <li className={\"navigation--main__listitem\" + activeClass} onClick={(e) => this.handleNavClick(e, item.id, item.path)}>\r\n <span dangerouslySetInnerHTML={{ __html: item.title}}></span>\r\n </li>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"navigation--main\">\r\n <ul className=\"navigation--main__list\">\r\n {this.storeUi.main_nav.map((item, i) => {\r\n let nav_item;\r\n (item.use == \"all\" && (item.show && item.show.includes(this.storeGeneral.shop)))\r\n ? nav_item = <Li \r\n key = {i}\r\n id = {item.id}\r\n title = {i18n.t(\"navigation.\" + item.name)}\r\n path = {item.path}\r\n />\r\n : item.use == \"restricted\" && this.storeAuth.user.is_loggedin && (\r\n nav_item = <Li \r\n key = {i}\r\n id = {item.id}\r\n title = {i18n.t(\"navigation.\" + item.name)}\r\n path = {item.path}\r\n />\r\n )\r\n return nav_item\r\n })}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(withTranslation()(NavigationMain));","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst NavigationSecundary = inject(\"stores\") (\r\n observer (\r\n class NavigationSecundary extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n\r\n handleNavClick = (e, id, path) => {\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveSubNav(id);\r\n this.props.history.push(path);\r\n }\r\n\r\n render() {\r\n const nav_id = this.storeUi.active_subnav\r\n const partner_code = this.storeUi.app_interface.partner_code\r\n\r\n const Li = (item) => {\r\n const activeClass = (item.id === nav_id) ? ' --active' : '';\r\n return (\r\n <li className={\"navigation--secundary__listitem\" + activeClass} onClick={(e) => this.handleNavClick(e, item.id, item.path)}>\r\n <span dangerouslySetInnerHTML={{ __html: item.title}}></span>\r\n </li>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"navigation--secundary\">\r\n <ul className=\"navigation--secundary__list\">\r\n {this.storeUi.sub_nav.map((item, i) => (\r\n <React.Fragment key={i}>\r\n {item.use === 'all' && (item.show && item.show.includes(this.storeGeneral.shop)) && (\r\n <Li \r\n key = {i}\r\n id = {item.id}\r\n title = {i18n.t(\"navigation.\" + item.name)}\r\n path = {item.path}\r\n />\r\n )}\r\n {item.use === 'partner' && (\r\n <React.Fragment key={i}>\r\n {(!this.storeAuth.user.is_loggedin && item.value === false) &&\r\n <Li \r\n key = {i}\r\n id = {item.id}\r\n title = {i18n.t(\"navigation.\" + item.name)}\r\n path = {item.path}\r\n />}\r\n {(this.storeAuth.user.is_loggedin && (!this.storeAuth.user.is_partner && this.storeAuth.user.is_partner !== 'on') && !item.value) &&\r\n <Li \r\n key = {i}\r\n id = {item.id}\r\n title = {i18n.t(\"navigation.\" + item.name)}\r\n path = {item.path}\r\n />}\r\n {(this.storeAuth.user.is_loggedin && (this.storeAuth.user.is_partner || this.storeAuth.user.is_partner === 'on') && item.value) &&\r\n <Li \r\n key = {i}\r\n id = {item.id}\r\n title = {i18n.t(\"navigation.\" + item.name)}\r\n path = {item.path}\r\n />}\r\n </React.Fragment>\r\n )} \r\n </React.Fragment>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(withTranslation()(NavigationSecundary));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst NavigationSb = inject(\"stores\") (\r\n observer (\r\n class NavigationSb extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount = () => {\r\n\r\n }\r\n\r\n handleNavClick = (e, item) => {\r\n if (item.name === 'books_all') {\r\n this.storeGeneral.setShop('SHOP_ALL');\r\n this.storeBooks.getCategories('SHOP_ALL');\r\n } else {\r\n this.storeGeneral.setShop('SHOP_SB');\r\n this.storeBooks.getCategories('SHOP_SB');\r\n }\r\n\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveToggleNav(item.id);\r\n this.storeUi.setActiveSubNav(0);\r\n this.props.history.push(item.path);\r\n }\r\n\r\n render() {\r\n const nav_id = this.storeUi.active_togglenav\r\n\r\n const Li = (item) => {\r\n const activeClass = (item.id === nav_id) ? ' --active' : '';\r\n return (\r\n <li className={\"navigation--sb__listitem\" + activeClass} onClick={(e) => this.handleNavClick(e, item)}>\r\n <span dangerouslySetInnerHTML={{ __html: item.title}}></span>\r\n </li>\r\n )\r\n }\r\n\r\n return (\r\n <div className=\"navigation--sb\">\r\n <ul className=\"navigation--sb__list\">\r\n {this.storeUi.toggle_nav.map((item, i) => (\r\n <React.Fragment key={i}>\r\n {item.use === 'all' && (item.show && item.show.includes(this.storeGeneral.shop)) && (\r\n <Li \r\n key = {i}\r\n id = {item.id}\r\n title = {i18n.t(\"navigation.\" + item.name)}\r\n path = {item.path}\r\n name = {item.name}\r\n />\r\n )}\r\n </React.Fragment>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(withTranslation()(NavigationSb));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { NavLink } from 'react-router-dom';\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nconst NavigationTools = inject(\"stores\") (\r\n observer (\r\n class NavigationTools extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeCart = this.props.stores.storeCart;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeWishlist = this.props.stores.storeWishlist;\r\n }\r\n\r\n componentDidMount = () => {\r\n\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n \r\n }\r\n \r\n handleOnClick = (e, path) => {\r\n const id = (this.storeAuth.user.is_loggedin) ? this.storeAuth.user.user_id : 0;\r\n\r\n if (path === '/login') {\r\n if (this.storeUi.app_interface.use_case === 'inshop') {\r\n this.props.history.push(path);\r\n } else {\r\n const url = '/shoppingcart/client';\r\n this.props.history.push(url);\r\n this.storeUi.setDirectLogin(true);\r\n this.storeOrder.setCartView(id, 'client');\r\n }\r\n } else {\r\n if (path === '/shoppingcart') {\r\n this.storeCart.getCart();\r\n this.storeUi.setUseCase(\"inshop\");\r\n }\r\n if (path === '/wishlist') {\r\n this.storeUi.setUseCase(\"inshop\");\r\n }\r\n if (path === '/account') {\r\n this.storeUi.setUseCase(\"inshop\");\r\n this.storeUser.refreshUserData();\r\n }\r\n this.props.history.push(path);\r\n }\r\n }\r\n\r\n handleLogOut = (e) => {\r\n this.storeUser.resetUserData();\r\n this.storeAuth.setLogoutState();\r\n this.storeUser.setLogoutState();\r\n this.storeUser.setLoginState(false);\r\n this.storeOrder.resetOrderData(false);\r\n this.storeOrder.retrieveShoppingCartFromLS();\r\n this.storeOrder.resetOrderSettings('discounts_overruled', 0);\r\n this.storeUi.setUseCase(\"inshop\");\r\n this.storeUi.setReturnState(\"\");\r\n this.storeUi.setPartnerCode(0);\r\n this.storeWishlist.retrieveWishlist();\r\n this.storeUi.setFeatureAll(false);\r\n \r\n // SbC DEPRICATE when going live with SHOP_ALL\r\n // this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n // this.storeUi.setActiveToggleNav(2);\r\n \r\n // const idx = this.storeUi.features_list\r\n // .findIndex(feature => feature.sku === 'SHOP_ALL');\r\n // if (idx !== -1 && this.storeUi.features_list[idx].access_level !== 0) {\r\n // this.storeGeneral.setShop(\"SHOP_SB\");\r\n // }\r\n \r\n let url = \"/\";\r\n this.props.history.push(url);\r\n }\r\n\r\n handleNavMobile = (e) => {\r\n this.storeUi.setNavMobile();\r\n }\r\n\r\n render() {\r\n const id = (this.storeAuth.user.is_loggedin) ? this.storeAuth.user.user_id : 0;\r\n\r\n return (\r\n <div className=\"navigation--tools\">\r\n <ul className=\"navigation--tools__list\">\r\n <li className=\"navigation--tools__listitem navigation--tools__listitem--wishlist\" onClick={(e)=>this.handleOnClick(e, '/wishlist')}>\r\n {id === 0 && this.storeWishlist.wishlist.anonymous && this.storeWishlist.wishlist.anonymous.length > 0 &&\r\n <span className=\"navigation--tools__counter\">\r\n <span>\r\n {this.storeWishlist.wishlist.anonymous.length}\r\n </span>\r\n </span>\r\n }\r\n {id !== 0 && this.storeWishlist.wishlist.user && this.storeWishlist.wishlist.user.length > 0 &&\r\n <span className=\"navigation--tools__counter\">\r\n <span>\r\n {this.storeWishlist.wishlist.user.length}\r\n </span>\r\n </span>\r\n }\r\n <span className=\"navigation--tools__tool\">Verlanglijstje</span>\r\n </li>\r\n <li className=\"navigation--tools__listitem navigation--tools__listitem--cart\" onClick={(e)=>this.handleOnClick(e, '/shoppingcart')}>\r\n {this.storeAuth.user.is_loggedin && this.storeOrder.calculateTotalCartItemsUser > 0 &&\r\n <span className=\"navigation--tools__counter\"><span>{this.storeOrder.calculateTotalCartItemsUser}</span></span>\r\n }\r\n {!this.storeAuth.user.is_loggedin && this.storeOrder.calculateTotalCartItemsAnonymous > 0 &&\r\n <span className=\"navigation--tools__counter\"><span>{this.storeOrder.calculateTotalCartItemsAnonymous}</span></span>\r\n }\r\n <span className=\"navigation--tools__tool\">Winkelwagentje</span>\r\n </li>\r\n {this.storeAuth.user.is_loggedin\r\n ? <React.Fragment>\r\n <li className=\"navigation--tools__listitem navigation--tools__listitem--profile\" onClick={(e)=>this.handleOnClick(e, '/account')}><span className=\"navigation--tools__tool\">Mijn gegevens</span></li>\r\n <li className=\"navigation--tools__listitem navigation--tools__listitem--logout\" onClick={(e)=>this.handleLogOut(e)}><span className=\"navigation--tools__tool\">Uitloggen</span></li>\r\n </React.Fragment>\r\n : <li className=\"navigation--tools__listitem navigation--tools__listitem--login\" onClick={(e)=>this.handleOnClick(e, '/login')}><span className=\"navigation--tools__tool\">Inloggen</span></li>\r\n }\r\n <li className=\"navigation--tools__listitem navigation--tools__listitem--mobile-nav-trigger\" onClick={(e)=>this.handleNavMobile(e)}>\r\n </li>\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(NavigationTools);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nconst DialogNavFoldout = inject(\"stores\") (\r\n observer (\r\n class DialogNavFoldout extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidMount = () => {\r\n document.addEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n \r\n componentWillUnmount = () => {\r\n document.removeEventListener(\"keydown\", this.escFunction, false);\r\n }\r\n\r\n escFunction = (event) => {\r\n if (event.keyCode === 27) {\r\n this.storeUi.showTooltip('tip', 0);\r\n this.storeUi.showTooltip('explanation', 0);\r\n }\r\n }\r\n\r\n render() {\r\n // if ((this.props.type == 'tip' && !this.storeUi.toggle_nav[this.props.id - 1].showTip) ||\r\n // (this.props.type == 'explanation' && !this.storeUi.toggle_nav[this.props.id - 1].showExplanation)) {\r\n // return null;\r\n // }\r\n\r\n if ((this.props.type == 'tip' && !this.storeUi.toggle_nav[this.props.id - 1].showTip)) {\r\n // (this.props.type == 'explanation' && !this.storeUi.toggle_nav[this.props.id - 1].showExplanation)) {\r\n return null;\r\n }\r\n\r\n return (\r\n <div \r\n className = {\"content__tooltip-dialog\" + (this.props.mobile ? \" content__tooltip-dialog--mobile\" : \"\")}\r\n >\r\n <div \r\n className=\"dialog-header\"\r\n dangerouslySetInnerHTML={{ __html: this.storeUi.toggle_nav[this.props.id - 1].title}}\r\n />\r\n {this.props.type == 'tip' &&\r\n <div \r\n //className = \"dialog-content\" \r\n dangerouslySetInnerHTML={{ __html: this.storeUi.toggle_nav[this.props.id - 1].textLong}}\r\n />\r\n }\r\n {this.props.type == 'explanation' &&\r\n <div \r\n className=\"dialog-content\"\r\n dangerouslySetInnerHTML={{ __html: this.storeUi.toggle_nav[this.props.id - 1].textLong}}\r\n />\r\n }\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default DialogNavFoldout;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport * as rdd from \"react-device-detect\";\r\n\r\nimport DialogNavFoldout from '../components/dialogs/dialog-nav-foldout';\r\n\r\nconst NavigationToggleListitem = inject(\"stores\") (\r\n observer (\r\n class NavigationToggleListitem extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n }\r\n\r\n hideTooltip = async() => {\r\n this.storeUi.showTooltip('tip', 0);\r\n }\r\n\r\n showTooltip = async(e) => {\r\n e.stopPropagation();\r\n\r\n const tooltipTitle = this.storeUi.toggle_nav[this.props.id - 1].title;\r\n const tooltipText = this.storeUi.toggle_nav[this.props.id - 1].text;\r\n this.storeUi.showTooltip('tip', this.props.id);\r\n\r\n this.setState({\r\n title: tooltipTitle,\r\n text: tooltipText\r\n })\r\n }\r\n\r\n handleTooltip = async(e) => {\r\n e.stopPropagation();\r\n\r\n const tooltipTitle = this.storeUi.toggle_nav[this.props.id - 1].title;\r\n const tooltipText = this.storeUi.toggle_nav[this.props.id - 1].text;\r\n\r\n if (this.storeUi.toggle_nav[this.props.id - 1].showTip) {\r\n this.hideTooltip();\r\n } else {\r\n this.storeUi.showTooltip('tip', this.props.id);\r\n }\r\n\r\n this.setState({\r\n title: tooltipTitle,\r\n text: tooltipText\r\n })\r\n }\r\n\r\n render() { \r\n const activeClass = (this.storeUi.active_togglenav === this.props.item.id) ? ' --active' : '';\r\n\r\n return (\r\n <React.Fragment>\r\n <li \r\n className={\"navigation--toggle__listitem\" + activeClass}\r\n onClick={(e) => this.props.handleNavClick(this.props.item.id, this.props.item.path)}\r\n >\r\n {this.props.item.id === 1 &&\r\n <React.Fragment>\r\n <span \r\n dangerouslySetInnerHTML={{ __html: this.props.title}}\r\n />\r\n <span \r\n dangerouslySetInnerHTML={{ __html: this.props.subtitle}}\r\n />\r\n <span \r\n className = \"title\" \r\n dangerouslySetInnerHTML={{ __html: \"Zelfhulpboeken\"}}\r\n />\r\n </React.Fragment>\r\n }\r\n {this.props.item.id === 2 &&\r\n <React.Fragment>\r\n <span \r\n dangerouslySetInnerHTML={{ __html: this.props.title}}\r\n />\r\n <span \r\n dangerouslySetInnerHTML={{ __html: this.props.subtitle}}\r\n />\r\n </React.Fragment>\r\n }\r\n\r\n {!rdd.isMobile && \r\n <div \r\n className = \"content__tooltip --link notranslate\" \r\n onMouseOver = {async(e) => this.showTooltip(e)}\r\n onMouseOut = {this.hideTooltip}\r\n >\r\n i\r\n </div>\r\n }\r\n {rdd.isMobile && \r\n <div \r\n className = \"content__tooltip --link\" \r\n onClick = {async(e) => this.handleTooltip(e)}\r\n >\r\n i\r\n </div>\r\n }\r\n \r\n {/* <DialogTooltipFoldout\r\n id = {this.props.item.id}\r\n sku = {this.props.item.tooltip}\r\n /> */}\r\n \r\n \r\n {/* {!rdd.isMobile && \r\n <div \r\n className = \"content__tooltip --link\" \r\n onMouseOver = {this.showTooltip}\r\n onMouseOut = {this.hideTooltip}\r\n >\r\n i\r\n </div>\r\n }\r\n {rdd.isMobile && \r\n <div \r\n className = \"content__tooltip --link\" \r\n onClick = {async(e) => this.handleTooltip(e)}\r\n >\r\n i\r\n </div>\r\n } */}\r\n </li>\r\n\r\n <DialogNavFoldout\r\n type = 'tip'\r\n id = {this.props.id}\r\n title = {this.state.title}\r\n description = {this.state.text}\r\n mobile = {rdd.isMobile ? true : false}\r\n />\r\n </React.Fragment>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default NavigationToggleListitem;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport queryString from 'query-string';\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport * as rdd from \"react-device-detect\";\r\n\r\nimport * as ui from '../../utilities/ui';\r\n\r\nimport NavigationToggleListitem from '../../elements/navigation-toggle-listitem';\r\n\r\nconst NavigationToggle = inject(\"stores\") (\r\n observer (\r\n class NavigationToggle extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeBooks = this.props.stores.storeBooks;\r\n\r\n this.state = {\r\n shop: this.storeGeneral.shop\r\n };\r\n }\r\n\r\n componentDidMount = () => {\r\n /*\r\n * SbC DEPRICATED\r\n * Always enter on Zelfhulpboeken\r\n */\r\n const shop = this.storeGeneral.getActiveShop();\r\n this.setState({\r\n shop: shop\r\n })\r\n }\r\n\r\n componentDidUpdate = async(prevProps) => {\r\n // if (prevProps.active_nav !== this.props.active_nav) {\r\n // this.setState({\r\n // active_nav: this.props.active_nav\r\n // })\r\n // }\r\n\r\n // if (prevProps.activeShop !== this.props.activeShop) {\r\n // this.setState({\r\n // active_nav: this.props.active_nav\r\n // })\r\n // }\r\n }\r\n\r\n removeSort = () => {\r\n const sorting_dir = 'DESC';\r\n const type = 'ID';\r\n\r\n this.storeUi.setPageView('sorting', type);\r\n this.storeUi.setPageView('order', sorting_dir);\r\n }\r\n\r\n handleNavClick = async(id, path) => {\r\n let results;\r\n\r\n ui.handleScroll('top');\r\n this.storeUi.setSearchOverlay(false);\r\n \r\n this.storeUi.showTooltip('tip', 0);\r\n this.storeUi.showTooltip('explanation', 0);\r\n\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveSubNav(0);\r\n\r\n this.storeUi.setActiveToggleNav(id);\r\n\r\n this.removeSort();\r\n\r\n // this.setState({\r\n // active_nav: id\r\n // })\r\n\r\n //SbC CHANGE FOR TEST\r\n switch(id) {\r\n // case 1:\r\n // this.storeGeneral.setShop(\"SHOP_SB\");\r\n // this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n // this.storeGeneral.setSearchShop('OWN');\r\n // //results = await this.storeUi.getSearchResultsSimple('SHOP_SB', this.storeUi.search_value, 'sb', this.storeUi.page_view); \r\n // break;\r\n case 1:\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n this.storeGeneral.setSearchShop('SB');\r\n //results = await this.storeUi.getSearchResultsSimple('SHOP_SB', this.storeUi.search_value, '', this.storeUi.page_view); \r\n break;\r\n case 2:\r\n this.storeGeneral.setShop(\"SHOP_ALL\");\r\n this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n this.storeGeneral.setSearchShop('ALL');\r\n //results = await this.storeUi.getSearchResultsSimple('SHOP_ALL', this.storeUi.search_value, '', this.storeUi.page_view, false); \r\n break;\r\n default:\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n //results = await this.storeUi.getSearchResultsSimple('SHOP_SB', this.storeUi.search_value, '', this.storeUi.page_view); \r\n }\r\n\r\n const params = queryString.parse(this.props.location.search);\r\n const search_term = params.q;\r\n\r\n //if (search_term === '' || search_term === undefined) {\r\n this.props.history.push(path);\r\n //}\r\n }\r\n\r\n render() { \r\n return (\r\n <div className=\"navigation--toggle\">\r\n <ul className=\"navigation--toggle__list\">\r\n {this.storeUi.toggle_nav.map((item, i) => (\r\n <NavigationToggleListitem\r\n key = {i}\r\n item = {item}\r\n id = {item.id}\r\n sku = {item.tooltip}\r\n title = {i18n.t(\"navigation.\" + item.name)}\r\n subtitle = {i18n.t(\"navigation.\" + item.name + \"_sub\")}\r\n path = {item.path}\r\n tooltip = {item.tooltip}\r\n handleNavClick = {() => this.handleNavClick(item.id, item.path)}\r\n />\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(withTranslation()(NavigationToggle));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport ButtonDialogClose from '../../elements/button-dialog-close';\r\nimport BlockCategories from '../block/block-categories';\r\nimport BlockProductGroups from '../block/block-product-groups';\r\nimport BlockAuthors from '../block/block-authors';\r\nimport SitemapCats from '../../components/sitemap/sitemap-cats';\r\n\r\nconst NavigationMobile = inject(\"stores\") (\r\n observer (\r\n class NavigationMobile extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n\r\n handleClose = (e) => {\r\n this.storeUi.setNavMobile();\r\n }\r\n\r\n handleNavClick = (e, id, path) => {\r\n this.handleClose(e);\r\n this.storeUi.setActiveMainNav(id);\r\n this.props.history.push(path);\r\n }\r\n\r\n handleToggleClick = (id, path) => {\r\n this.handleClose();\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveSubNav(0);\r\n\r\n switch(id) {\r\n case 1:\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n break;\r\n case 2:\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n break;\r\n case 3:\r\n this.storeGeneral.setShop(\"SHOP_ALL\");\r\n this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n break;\r\n default:\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n }\r\n\r\n\r\n this.props.history.push(path);\r\n }\r\n\r\n render() {\r\n const partner_code = this.storeUi.app_interface.partner_code\r\n \r\n return (\r\n <div className={\"navigation--mobile\" + (this.storeUi.app_interface.nav_mobile ? \" --active\" : \"\")}>\r\n <ButtonDialogClose\r\n caption = {'Sluit'}\r\n onAction = {(e) => this.handleClose(e)}\r\n btnClass = {'icon--close'}\r\n />\r\n\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <div className=\"navigation--mobile__content\">\r\n <ul className=\"navigation--mobile__list\">\r\n {this.storeUi.toggle_nav.map((item, i) => (\r\n <li key={i} className=\"navigation--mobile__listitem\" onClick={(e) => this.handleToggleClick(item.id, item.path)}>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"navigation.\" + item.name)}}/></li>\r\n ))}\r\n </ul>\r\n </div>\r\n }\r\n\r\n <div className=\"navigation--mobile__content\">\r\n <h3>Hoofdgroepen</h3>\r\n <ul className=\"navigation--mobile__list\">\r\n {this.storeUi.main_nav.map((item, i) => (\r\n (item.use == \"all\" && (item.show && item.show.includes(this.storeGeneral.shop))) &&\r\n <li key={i} className=\"navigation--mobile__listitem\" onClick={(e) => this.handleNavClick(e, item.id, item.path)}>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"navigation.\" + item.name)}}/></li>\r\n ))}\r\n </ul>\r\n\r\n <ul className=\"navigation--mobile__list\">\r\n {this.storeUi.sub_nav.map((item, i) => (\r\n (item.use === 'all' || (item.use === 'partner' && partner_code !== 0) || (item.use === 'no-partner' && partner_code === 0)) &&\r\n <li key={i} className=\"navigation--mobile__listitem\" onClick={(e) => this.handleNavClick(e, item.id, item.path)}>\r\n <span dangerouslySetInnerHTML={{ __html: i18n.t(\"navigation.\" + item.name)}} />\r\n </li>\r\n ))}\r\n </ul>\r\n\r\n {/* <h3>Zoek</h3>\r\n <ul className=\"navigation--mobile__list\">\r\n <li className=\"navigation--mobile__listitem\" onClick={(e) => this.handleNavClick(e, 1, \"/search-advanced\")}>{i18n.t(\"navigation.search\")}</li>\r\n </ul> */}\r\n\r\n {this.storeGeneral.shop == 'SHOP_SB' &&\r\n <React.Fragment>\r\n <h3>{i18n.t(\"sitemap.categories_sb\")}</h3>\r\n <BlockCategories \r\n shop = 'SHOP_SB'\r\n clean = {true}\r\n />\r\n </React.Fragment>\r\n }\r\n\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n this.storeGeneral.shop == 'SHOP_ALL' &&\r\n <React.Fragment>\r\n <h3>{i18n.t(\"sitemap.categories_all\")}</h3>\r\n <BlockCategories \r\n shop = 'SHOP_ALL'\r\n clean = {true}\r\n />\r\n </React.Fragment>\r\n }\r\n\r\n {this.storeGeneral.shop == 'SHOP_SB' &&\r\n <React.Fragment>\r\n <h3>Productgroepen</h3>\r\n <BlockProductGroups \r\n clean = {true}\r\n />\r\n </React.Fragment>\r\n }\r\n\r\n {this.storeGeneral.shop == 'SHOP_SB' &&\r\n <React.Fragment>\r\n <h3>Auteurs</h3> \r\n <BlockAuthors \r\n clean = {true}\r\n />\r\n </React.Fragment>\r\n }\r\n </div>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(withTranslation()(NavigationMobile));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nimport SearchInput from '../search/search-input';\r\n\r\nconst Search = inject(\"stores\") (\r\n observer (\r\n class Search extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi; \r\n this.storeUser = this.props.stores.storeUser; \r\n }\r\n\r\n componentDidMount = () => {\r\n }\r\n\r\n componentDidUpdate = () => {\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <div className=\"search\">\r\n <SearchInput \r\n firstname = {(this.storeUser.user_data && this.storeUser.user_data.profile)\r\n ? this.storeUser.user_data.profile.firstname\r\n : ''\r\n } \r\n search_value = {this.storeUi.search_value} \r\n />\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default Search;\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport sizeMe from 'react-sizeme';\r\n\r\nimport Branding from '../header/branding';\r\nimport NavigationMain from '../header/navigation-main';\r\nimport NavigationSecundary from '../header/navigation-secundary';\r\nimport NavigationSb from '../header/navigation-sb';\r\nimport NavigationTools from '../header/navigation-tools';\r\nimport NavigationToggle from '../header/navigation-toggle';\r\nimport NavigationMobile from '../header/navigation-mobile';\r\nimport Search from '../header/search';\r\n\r\nconst Header = inject(\"stores\") (\r\n observer (\r\n class Header extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n\r\n this.state = {\r\n class_header: (this.storeGeneral.shop === 'SHOP_ALL' ? '--shop-all' : '--shop-sb'),\r\n class_feature: ''\r\n }\r\n }\r\n\r\n componentDidMount = async() => {\r\n this.setState({\r\n class_header: (this.storeGeneral.shop === 'SHOP_ALL' ? '--shop-all' : '--shop-sb'),\r\n class_feature: await this.storeUi.checkFeature('SHOP_ALL') ? '--feature-all' : ''\r\n })\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n const { width, height } = this.props.size;\r\n this.storeUi.setHeightHeader(this.props.size.height);\r\n\r\n if (prevProps.shop !== this.props.shop) {\r\n this.setState({\r\n class_header: (this.storeGeneral.shop === 'SHOP_ALL' ? '--shop-all' : '--shop-sb'),\r\n class_feature: this.storeUi.checkFeature('SHOP_ALL') ? '--feature-all' : ''\r\n })\r\n }\r\n\r\n if (prevProps.access_level !== this.props.access_level) {\r\n this.setState({\r\n class_feature: this.storeUi.checkFeature('SHOP_ALL') ? '--feature-all' : ''\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n return (\r\n <header className={\"wrapper-header \" + this.state.class_header + ' ' + this.state.class_feature}>\r\n <div className=\"header-content\">\r\n {this.storeUi.checkFeature('SHOP_ALL') && this.storeGeneral.shop === 'SHOP_ALL'\r\n ? <div className=\"header-content__payoff\">Een dag zonder boek ...</div>\r\n : <div className=\"header-content__payoff\">Uitgeverij & de grootste website voor zelfontwikkeling</div>\r\n }\r\n <div className=\"header-content__top\">\r\n <Branding \r\n\r\n />\r\n <NavigationTools \r\n\r\n />\r\n </div>\r\n {(this.storeUi.checkFeature('SHOP_ALL') &&\r\n this.storeUi.templateView !== \"clean\") &&\r\n <NavigationToggle\r\n active_nav = {this.storeUi.active_togglenav} \r\n activeShop = {this.storeGeneral.shop}\r\n /> \r\n }\r\n <div className=\"wrapper-navigation\">\r\n {this.storeUi.templateView !== \"clean\" &&\r\n <div className=\"navigation\">\r\n <NavigationMain /> \r\n {!this.storeUi.checkFeature('SHOP_ALL') &&\r\n <NavigationSb /> \r\n }\r\n <NavigationSecundary />\r\n </div>\r\n }\r\n <Search \r\n \r\n />\r\n </div>\r\n <NavigationMobile />\r\n </div>\r\n </header>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default sizeMe({ monitorHeight: true })(Header);\r\n\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\nimport { withRouter } from \"react-router-dom\";\r\n \r\nconst NavigationFooter = inject(\"stores\") (\r\n observer (\r\n class NavigationFooter extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeUser = this.props.stores.storeUser;\r\n }\r\n\r\n handleNavClick = (id, path) => {\r\n this.storeUi.setActiveMainNav(0);\r\n this.storeUi.setActiveSubNav(0);\r\n\r\n switch(id) {\r\n case 1:\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n break;\r\n case 2:\r\n this.storeGeneral.setShop(\"SHOP_ALL\");\r\n this.storeGeneral.setActiveShop(\"SHOP_ALL\");\r\n break;\r\n default:\r\n this.storeGeneral.setShop(\"SHOP_SB\");\r\n this.storeGeneral.setActiveShop(\"SHOP_SB\");\r\n }\r\n\r\n if (this.storeGeneral.shop === 'SHOP_SB') {\r\n id = 1;\r\n } else {\r\n id = 2;\r\n }\r\n this.storeUi.setActiveToggleNav(id);\r\n\r\n this.props.history.push(path);\r\n }\r\n\r\n handleSubNavClick = (path) => {\r\n window.scrollTo({\r\n top: 0,\r\n behavior: \"smooth\"\r\n });\r\n this.props.history.push(path);\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"footer__navigation\">\r\n <ul className=\"navigation--footer\">\r\n <li className=\"navigation--footer__column\">\r\n {this.storeUi.checkFeature('SHOP_ALL') &&\r\n <React.Fragment>\r\n <span className=\"navigation--footer__title\">Catalogus</span>\r\n <ul className=\"navigation--footer__list\">\r\n {this.storeUi.toggle_nav.map((item, i) => (\r\n <li \r\n key = {i}\r\n className = \"navigation--footer__listitem --link\" \r\n onClick = {() => this.handleNavClick(item.id, item.path)}\r\n >\r\n {item.name === 'toggle_books_sb' &&\r\n <span>Zelfhulpboeken Succesboeken.nl + andere uitgevers</span>\r\n }\r\n {item.name === 'toggle_books_all' &&\r\n <span>Alle andere NL boeken</span>\r\n }\r\n </li>\r\n ))}\r\n </ul>\r\n </React.Fragment>\r\n }\r\n \r\n <span className=\"navigation--footer__title\">Succesboeken.nl</span>\r\n <ul className=\"navigation--footer__list\">\r\n {this.storeGeneral.shop === 'SHOP_SB' &&\r\n <React.Fragment>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/our-publications\">Boeken eigen uitgeverij</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/new-books\">Nieuw toegevoegd</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/ebooks\">Gratis e-boeken</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/events\"><span dangerouslySetInnerHTML={{ __html: i18n.t(\"navigation.events\")}}></span></Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/press\">Media/Pers</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/videos\">Video's</Link></li>\r\n </React.Fragment>\r\n }\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/terms-conditions\">Algemene Voorwaarden + retouren</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/privacy-policy\">Privacy Policy</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/disclaimer\">Disclaimer</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/sitemap\"><span>{i18n.t(\"navigation.sitemap\")}</span></Link></li>\r\n </ul>\r\n\r\n \r\n </li>\r\n <li className=\"navigation--footer__column\">\r\n <span className=\"navigation--footer__title\">De uitgeverij</span>\r\n <ul className=\"navigation--footer__list\">\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/our-publications\">Onze uitgeverij Succesboeken.nl</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/mission\">Missie & Passie</Link></li>\r\n {this.storeUser.user_data.is_loggedin && this.storeUser.user_data.partner_code !== '' &&\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/partner\"><span dangerouslySetInnerHTML={{ __html: i18n.t(\"navigation.partner\")}}></span></Link></li>\r\n }\r\n {(!this.storeUser.user_data.is_loggedin || (this.storeUser.user_data.is_loggedin && this.storeUser.user_data.partner_code === '')) &&\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/partners\"><span dangerouslySetInnerHTML={{ __html: i18n.t(\"navigation.partners\")}}></span></Link></li>\r\n }\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/business\">Zakelijk - Boekhandel</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/own-book\">Een eigen boek schrijven</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/jobs\"><span>{i18n.t(\"navigation.jobs\")}</span></Link></li>\r\n </ul>\r\n </li>\r\n <li className=\"navigation--footer__column\">\r\n <div>\r\n {this.storeUser.user_data.is_loggedin &&\r\n <React.Fragment>\r\n <span className=\"navigation--footer__title\">Mijn account</span>\r\n <ul className=\"navigation--footer__list\">\r\n <li \r\n className=\"navigation--footer__listitem --link\"\r\n onClick = {() => this.handleSubNavClick(\"/account\")}>\r\n Mijn gegevens\r\n </li>\r\n <li \r\n className = \"navigation--footer__listitem --link\" \r\n onClick = {() => this.handleSubNavClick(\"/account/orders\")}>\r\n Mijn bestellingen\r\n </li>\r\n </ul>\r\n </React.Fragment>\r\n }\r\n <span className=\"navigation--footer__title\">Contact</span>\r\n <ul className=\"navigation--footer__list\">\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/remarks\">Opmerkingen/vragen?</Link></li>\r\n <li className=\"navigation--footer__listitem\"><Link to=\"/address\">Adres & bedrijfsgegevens</Link></li>\r\n </ul>\r\n </div>\r\n </li>\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withRouter(withTranslation()(NavigationFooter));\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\n\r\nconst FooterPayments = inject(\"stores\") (\r\n observer (\r\n class FooterPayments extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.urlAPI = process.env.REACT_APP_URL_API;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n\r\n componentDidUpdate = (prevProps) => {\r\n\r\n }\r\n\r\n render() {\r\n\r\n return (\r\n <div className=\"footer__payments\">\r\n <ul className=\"list list--payments\">\r\n {this.storeUi.payment_providers.length > 0 && this.storeUi.payment_providers.map((method,i) => ( \r\n method.description !== 'Overboeking' && method.description !== 'EPS' &&\r\n <li key={i} className={\"list--payments__logo list--payments__logo--\" + method.description}>\r\n <img src={this.urlAPI +\"/public/images/payment/logo-\" + method.description + \".png\"} alt={\"logo \" + method.description} />\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default FooterPayments;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nconst Disclaimer = inject(\"stores\") (\r\n observer (\r\n class Disclaimer extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n }\r\n \r\n render() {\r\n\r\n return (\r\n <div className=\"footer__disclaimer disclaimer\">\r\n <span className=\"disclaimer__title\">\r\n {i18n.t(\"header.disclaimer\")}\r\n </span>\r\n <span className=\"disclaimer__content\">\r\n {i18n.t(\"text.disclaimer\")}\r\n </span>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(Disclaimer);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Link } from 'react-router-dom';\r\n\r\nimport SocialLink from '../../elements/social-link';\r\n\r\nconst FooterSocial = inject(\"stores\") (\r\n observer (\r\n class FooterSocial extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n }\r\n\r\n render() {\r\n return (\r\n <div className=\"footer__social\">\r\n <ul className=\"social-links\">\r\n {this.storeGeneral.social_links.map((social, i) => ( \r\n <li key={i}>\r\n <a href={social.url} target=\"_blank\">\r\n <SocialLink \r\n medium = {social.brand} \r\n />\r\n </a>\r\n </li>\r\n ))}\r\n\r\n </ul>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default FooterSocial;","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport i18n from \"i18next\";\r\nimport { withTranslation } from 'react-i18next';\r\n\r\nimport packageJson from '../../../package.json';\r\n\r\nconst Version = inject(\"stores\") (\r\n observer (\r\n class Version extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.storeUi = this.props.stores.storeUi;\r\n\r\n this.state = {\r\n year: 2022\r\n }\r\n }\r\n\r\n componentDidMount = () => {\r\n const year = new Date().getFullYear();\r\n this.setState({\r\n year: year\r\n })\r\n }\r\n \r\n render() {\r\n\r\n return (\r\n <div className=\"footer__version version\">\r\n <span className=\"version__content\">\r\n ©{this.state.year} Succesboeken.nl - v{packageJson.version}\r\n </span>\r\n </div>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withTranslation()(Version);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport sizeMe from 'react-sizeme';\r\n\r\nimport NavigationFooter from '../footer/navigation';\r\nimport FooterPayments from '../footer/payments';\r\nimport Disclaimer from '../footer/disclaimer';\r\nimport FooterSocial from '../footer/social';\r\nimport Salutation from '../../elements/txt-salutation';\r\nimport Version from '../footer/version';\r\n\r\nconst Footer = inject(\"stores\") (\r\n observer (\r\n class Footer extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n this.state = {\r\n footerHeight: 0\r\n }\r\n\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n }\r\n\r\n componentDidMount = () => {\r\n\r\n }\r\n\r\n componentDidUpdate = () => {\r\n const { width, height } = this.props.size;\r\n this.storeUi.setHeightFooter(this.props.size.height);\r\n }\r\n \r\n render() {\r\n return (\r\n <footer className=\"wrapper-footer\">\r\n <FooterSocial />\r\n <FooterPayments />\r\n <NavigationFooter />\r\n <Salutation />\r\n {this.storeGeneral.shop === 'SHOP_SB' &&\r\n <Disclaimer />\r\n }\r\n <Version />\r\n </footer>\r\n )\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default sizeMe({ monitorHeight: true })(Footer);\r\n","import React, { Component } from 'react';\r\nimport { inject, observer } from \"mobx-react\";\r\nimport { Switch, Route } from 'react-router-dom';\r\nimport ReactGA from 'react-ga';\r\nimport i18n from \"i18next\";\r\nimport { runInAction } from \"mobx\";\r\nimport { withRouter } from \"react-router-dom\";\r\nimport * as rdd from \"react-device-detect\";\r\nimport CacheBuster from './cacheBuster';\r\nimport { withCookies } from \"react-cookie\"\r\n\r\nimport './assets/scss/succesboeken.scss';\r\n\r\nimport Loader from './elements/loader';\r\n\r\nimport Routes from './routes';\r\n\r\nimport DialogContent from './components/dialogs/dialog-content';\r\nimport DialogCookies from './components/dialogs/dialog-cookies';\r\nimport DialogCompareShoppingCarts from './components/dialogs/dialog-compare-shoppingcarts';\r\nimport DialogCompareWishLists from './components/dialogs/dialog-compare-wishlists';\r\nimport DialogConfirmation from './components/dialogs/dialog-confirmation';\r\nimport DialogConfirmationWishList from './components/dialogs/dialog-confirmation-wishlist';\r\nimport DialogError from './components/dialogs/dialog-error';\r\nimport DialogFeedbackForm from './components/dialogs/dialog-feedback-form';\r\nimport DialogFeedbackForm20 from './components/dialogs/dialog-feedback-form-20';\r\nimport DialogNewsletter from './components/dialogs/dialog-newsletter';\r\nimport DialogPayment from './components/dialogs/dialog-payment';\r\nimport DialogNotification from './components/dialogs/dialog-notification';\r\nimport DialogVideo from './components/dialogs/dialog-video';\r\n\r\nimport Header from './components/grid/header';\r\nimport Footer from './components/grid/footer';\r\n\r\nconst DEFAULT_CONFIG = {\r\n trackingId: 'UA-4967097-1',\r\n debug: false,\r\n gaOptions: {\r\n cookieDomain: 'none'\r\n }\r\n};\r\n\r\nconst App = inject(\"stores\") (\r\n observer (\r\n class App extends Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.props = props;\r\n\r\n this.storeAuth = this.props.stores.storeAuth;\r\n this.storeGeneral = this.props.stores.storeGeneral;\r\n this.storeUi = this.props.stores.storeUi;\r\n this.storeForms = this.props.stores.storeForms;\r\n this.storeOrder = this.props.stores.storeOrder;\r\n this.storeShipping = this.props.stores.storeShipping;\r\n this.storeUser = this.props.stores.storeUser;\r\n this.storeWishlist = this.props.stores.storeWishlist;\r\n\r\n this.state = {\r\n reactGaInitialised: false,\r\n configs: [DEFAULT_CONFIG],\r\n cookie_visible: false\r\n };\r\n\r\n //this.wrapperRef = createRef();\r\n\r\n this.props.cookies.remove(\"_ga\");\r\n this.props.cookies.remove(\"_gid\");\r\n this.props.cookies.remove(\"_gat\");\r\n\r\n this.initReactGA();\r\n }\r\n\r\n async componentDidMount() {\r\n let activeShop;\r\n\r\n try {\r\n const returnId = await this.storeUser.getUserDataFromLS();\r\n runInAction(() => { \r\n this.storeOrder.retrieveShoppingCart(returnId, 'init');\r\n this.storeWishlist.retrieveWishlist(returnId);\r\n if (returnId === 0) {\r\n //this.storeOrder.resetCartUser();\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n //SbC default segment always SHOP_SB\r\n this.storeGeneral.setActiveShop('SHOP_SB');\r\n\r\n //SbC default segment depending on last visit\r\n // if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n // activeShop = await this.storeGeneral.getActiveShop();\r\n\r\n // if (this.storeGeneral.activeShop === 'SHOP_SB') {\r\n // this.storeUi.setActiveToggleNav(2);\r\n // } else {\r\n // this.storeUi.setActiveToggleNav(3);\r\n // }\r\n // } else {\r\n // //this.storeGeneral.setActiveShop('SHOP_SB') \r\n // }\r\n }\r\n\r\n componentDidUpdate = async() => {\r\n let activeShop;\r\n\r\n if (this.storeUi.checkFeature('SHOP_ALL')) {\r\n activeShop = await this.storeGeneral.getActiveShop();\r\n\r\n if (this.storeGeneral.activeShop === 'SHOP_SB') {\r\n if (this.props.location.pathname === '/our-publications' ||\r\n this.props.location.pathname === '/our-publications/tips' ||\r\n this.props.location.pathname === '/our-publications/own_book' ||\r\n this.props.location.pathname === '/our-publications/our_books') {\r\n this.storeUi.setActiveToggleNav(1);\r\n } else {\r\n if (this.storeUi.active_togglenav == 0) {\r\n this.storeUi.setActiveToggleNav(1);\r\n }\r\n }\r\n } else {\r\n this.storeUi.setActiveToggleNav(2);\r\n }\r\n } else {\r\n this.storeGeneral.setActiveShop('SHOP_SB');\r\n } \r\n }\r\n\r\n initReactGA = () => {\r\n ReactGA.initialize(this.state.configs);\r\n ReactGA.pageview('/start');\r\n this.setState({ \r\n reactGaInitialised: true \r\n });\r\n }\r\n\r\n gotoCart = async() => {\r\n const userId = (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0;\r\n let totalCart = await this.storeOrder.constructShoppingCart(userId, 'add');\r\n (async() => await this.storeOrder.saveShoppingCartToDB(userId, totalCart))();\r\n const path = '/shoppingcart';\r\n this.storeUi.setUseCase(\"inshop\");\r\n this.props.history.push(path);\r\n this.storeUi.closeDialog();\r\n }\r\n\r\n clearLocalStorage = () => {\r\n localStorage.removeItem('SB_ORDER');\r\n localStorage.removeItem('APP_USER');\r\n }\r\n\r\n setWrapperRef = (node) => {\r\n this.storeUi.setWrapperRef(node);\r\n }\r\n\r\n render() {\r\n //const margin_bottom = this.storeUi.app_interface.height_footer;\r\n const margin_bottom = 0;\r\n\r\n const loader_colors = [\r\n this.storeGeneral.settings_list[\"loaderColor1\"],\r\n this.storeGeneral.settings_list[\"loaderColor2\"],\r\n this.storeGeneral.settings_list[\"loaderColor3\"]\r\n ]\r\n\r\n const shop = this.storeGeneral.shop;\r\n\r\n return (\r\n <React.Fragment>\r\n <CacheBuster>\r\n {({ loading, isLatestVersion, refreshCacheAndReload }) => {\r\n if (loading) return null;\r\n if (!loading && !isLatestVersion) {\r\n refreshCacheAndReload();\r\n this.clearLocalStorage();\r\n }\r\n\r\n return ( \r\n <React.Fragment>\r\n <div \r\n ref={(c) => this.setWrapperRef(c)}\r\n className={\"app-content \" + (rdd.isMobile ? \"app-content--mobile\" : \"app-content--desktop\") + ' app-content--' + shop}\r\n >\r\n <Header \r\n shop = {this.storeGeneral.shop} \r\n access_level = {this.storeAuth.user.is_loggedin ? this.storeAuth.user.access_level : 0}\r\n />\r\n\r\n <div \r\n className=\"wrapper-main\"\r\n style={{marginBottom: margin_bottom}}\r\n >\r\n <Routes />\r\n </div>\r\n\r\n <Footer />\r\n </div>\r\n </React.Fragment>\r\n\r\n )\r\n }}\r\n </CacheBuster>\r\n \r\n <DialogCookies \r\n visible = {this.state.cookie_visible}\r\n />\r\n\r\n {this.storeUi.app_interface.isDialogOpen &&\r\n <DialogConfirmation\r\n show = {this.storeUi.app_interface.isDialogOpen}\r\n onClose = {() => this.storeUi.closeDialog()}\r\n title = {i18n.t(\"popups.added.title\")}\r\n subtitle = \"Het aantal kun je aanpassen in je winkelmandje.\"\r\n sku = {this.storeOrder.lastAddedBook.sku}\r\n buttons = {\r\n [{\r\n text: \"Naar winkelwagentje\",\r\n onClick: () => this.gotoCart(),\r\n btnClass: \"--primary\"\r\n },{\r\n text: \"Sluit dit venster en winkel verder\",\r\n onClick: () => this.storeUi.closeDialog(),\r\n btnClass: \"--primary\"\r\n }]\r\n }\r\n >\r\n </DialogConfirmation>\r\n }\r\n\r\n {this.storeUi.app_interface.isDialogWishListOpen &&\r\n <DialogConfirmationWishList\r\n show = {this.storeUi.app_interface.isDialogWishListOpen}\r\n onClose = {() => this.storeUi.closeDialogWishList()}\r\n title = {i18n.t(\"popups.added.title-wishlist\")}\r\n sku = {this.storeWishlist.lastAddedBook.sku}\r\n buttons = {\r\n [{\r\n text: \"Sluit dit venster en winkel verder\",\r\n onClick: () => this.storeUi.closeDialogWishList(),\r\n btnClass: \"--primary\"\r\n }]\r\n }\r\n fade = {this.storeUi.app_interface.isDialogFade}\r\n >\r\n </DialogConfirmationWishList>\r\n }\r\n\r\n {this.storeUi.app_interface.isDialogDeleteOpen &&\r\n <DialogConfirmation\r\n show = {this.storeUi.app_interface.isDialogDeleteOpen}\r\n onClose = {() => (\r\n this.storeUi.reloadOrderLines(true),\r\n this.storeUi.closeDialogDelete()\r\n )}\r\n title = {i18n.t(\"popups.delete.title\")}\r\n sku = {this.storeUi.active_product.sku}\r\n buttons = {\r\n [{\r\n text: \"Annuleer\",\r\n onClick: () => (\r\n this.storeUi.reloadOrderLines(true),\r\n this.storeUi.closeDialogDelete()\r\n ),\r\n btnClass: \"--secundary\"\r\n },{\r\n text: \"Verwijder\",\r\n onClick: async() => (\r\n this.storeOrder.submitDeleteOrderLine(\r\n (this.storeUser.user_data.is_loggedin) ? this.storeUser.user_data.user_id : 0,\r\n this.storeUi.active_product\r\n ),\r\n await (async() => this.storeShipping.calculateShipping(this.storeOrder.order_data.order_id) )(),\r\n this.storeOrder.calculateTotalCart((this.storeUser.user_data.is_loggedin) ? true : false),\r\n this.storeUi.closeDialogDelete()\r\n ),\r\n btnClass: \"--primary\"\r\n }]\r\n }\r\n >\r\n <p>{i18n.t(\"popups.delete.description\")}</p>\r\n </DialogConfirmation>\r\n }\r\n\r\n {this.storeOrder.order_interface.payment_window &&\r\n <DialogPayment\r\n show = {this.storeOrder.order_interface.payment_window}\r\n onClose = {() => this.storeOrder.closePaymentWindow()}\r\n title = {i18n.t(\"popups.payment.title\")}\r\n subtitle = {i18n.t(\"popups.payment.subtitle\")}\r\n // buttons = {\r\n // [{\r\n // text: \"Annuleer\",\r\n // onClick: () => {this.storeOrder.closePaymentWindow()},\r\n // btnClass: \"--primary\"\r\n // }]\r\n // }\r\n >\r\n </DialogPayment>\r\n }\r\n\r\n {this.storeOrder.order_interface.error_window &&\r\n <DialogError\r\n show = {this.storeOrder.order_interface.error_window}\r\n onClose = {() => this.storeOrder.closePaymentWindow()}\r\n title = {i18n.t(\"popups.payment.title\")}\r\n subtitle = {i18n.t(\"popups.payment.subtitle\")}\r\n buttons = {\r\n [{\r\n text: \"Ok\",\r\n onClick: () => {this.storeOrder.closeErrorWindow()},\r\n btnClass: \"--primary\"\r\n }]\r\n }\r\n >\r\n </DialogError>\r\n }\r\n\r\n {this.storeUi.app_interface.isDialogNewsletterOpen &&\r\n <DialogNewsletter\r\n show = {this.storeUi.app_interface.isDialogNewsletterOpen}\r\n onClose = {() => this.storeUi.closeDialogNewsletter()}\r\n subtitle = {i18n.t(\"popups.newsletter.subtitle\")}\r\n >\r\n </DialogNewsletter>\r\n }\r\n\r\n {this.storeUi.app_interface.isDialogContentOpen &&\r\n <DialogContent\r\n show = {this.storeUi.app_interface.isDialogContentOpen}\r\n onClose = {() => this.storeUi.closeDialogContent()}\r\n title = {this.storeUi.content_component_title}\r\n buttons = {\r\n [{\r\n text: \"Sluit venster\",\r\n onClick: () => {this.storeUi.closeDialogContent()},\r\n btnClass: \"--primary\"\r\n }]\r\n }\r\n \r\n >\r\n {this.storeUi.content_component}\r\n </DialogContent>\r\n }\r\n\r\n {this.storeUi.app_interface.isDialogVideoOpen &&\r\n <DialogVideo\r\n show = {this.storeUi.app_interface.isDialogVideoOpen}\r\n onClose = {() => this.storeUi.closeDialogVideo()}\r\n title = {this.storeUi.content_component_title}\r\n buttons = {\r\n [{\r\n text: \"Sluit venster\",\r\n onClick: () => {this.storeUi.closeDialogVideo()},\r\n btnClass: \"--primary\"\r\n }]\r\n }\r\n \r\n >\r\n {this.storeUi.content_component}\r\n </DialogVideo>\r\n }\r\n\r\n {this.storeUi.app_interface.isDialogNotificationOpen &&\r\n <DialogNotification\r\n show = {this.storeUi.app_interface.isDialogNotificationOpen}\r\n onClose = {() => this.storeUi.closeDialog()}\r\n content = {this.storeUi.notifications}\r\n buttons = {\r\n [{\r\n text: \"Ok\",\r\n onClick: () => {this.storeUi.closeDialogNotifications()},\r\n btnClass: \"--primary\"\r\n }]\r\n }\r\n >\r\n </DialogNotification>\r\n }\r\n\r\n {this.storeWishlist.isDialogCompareWishlistsOpen &&\r\n <DialogCompareWishLists\r\n show = {this.storeWishlist.isDialogCompareWishlistsOpen}\r\n title = {\"Verlanglijstje\"}\r\n onClose = {() => this.storeWishlist.compareWishLists(this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.user_id : 0, 'keep')}\r\n content = {\"Wil je deze verlanglijstjes samenvoegen?\"}\r\n buttons = {\r\n [{\r\n text: \"Ok!\",\r\n onClick: () => {this.storeWishlist.compareWishLists(this.storeUser.user_data.is_loggedin ? this.storeUser.user_data.user_id : 0, 'concat')},\r\n btnClass: \"--primary\",\r\n action: \"concat\"\r\n }]\r\n }\r\n >\r\n </DialogCompareWishLists>\r\n }\r\n\r\n {this.storeOrder.order_interface.isDialogCompareCartsOpen &&\r\n <DialogCompareShoppingCarts\r\n show = {this.storeOrder.order_interface.isDialogCompareCartsOpen}\r\n title = {\"Winkelmandje\"}\r\n onClose = {() => this.storeOrder.closeDialogCompareCarts()}\r\n content = {\"Kies welke producten je wilt behouden in je mandje:\"}\r\n cart_current = {this.storeOrder.cart.anonymous}\r\n cart_db = {this.storeOrder.shopping_cart_db}\r\n buttons = {\r\n [{\r\n text: \"Ok!\",\r\n onClick: () => {this.storeOrder.concatLSandDB()},\r\n btnClass: \"--primary\",\r\n action: \"concat\"\r\n }]\r\n }\r\n >\r\n </DialogCompareShoppingCarts>\r\n }\r\n\r\n {this.storeUi.app_interface.isDialogFeedbackFormOpen &&\r\n <DialogFeedbackForm\r\n type = {this.storeUi.app_interface.dialog_type}\r\n show = {this.storeUi.app_interface.isDialogFeedbackFormOpen}\r\n onClose = {() => this.storeUi.closeDialogFeedbackForm()}\r\n />\r\n }\r\n\r\n {this.storeForms.isDialogFeedbackFormOpen &&\r\n <DialogFeedbackForm20\r\n type = {this.storeForms.dialog_type}\r\n show = {this.storeForms.isDialogFeedbackFormOpen}\r\n onClose = {() => this.storeForms.closeDialogFeedbackForm()}\r\n />\r\n }\r\n\r\n {(this.storeGeneral.app_interface.loader) &&\r\n <Loader \r\n colors = {loader_colors}\r\n />\r\n }\r\n </React.Fragment>\r\n );\r\n }\r\n }\r\n )\r\n)\r\n\r\nexport default withCookies(withRouter(App));","import React from \"react\";\r\nimport { withRouter } from \"react-router-dom\";\r\n\r\nclass ScrollToTop extends React.Component {\r\n componentDidUpdate(prevProps) {\r\n if (\r\n this.props.location.pathname !== prevProps.location.pathname\r\n ) {\r\n window.scrollTo(0, 0);\r\n }\r\n }\r\n\r\n render() {\r\n return null;\r\n }\r\n}\r\n\r\nexport default ScrollToTop;","import * as apifetch from './fetch.js';\r\n\r\nexport async function getSettings() {\r\n const urlEndpoint = '/settings/getSettings.php';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getFeatures() {\r\n const urlEndpoint = '/settings/getFeatures.php';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getLanguages() {\r\n const urlEndpoint = '/settings/getLanguages.php';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n","import * as apifetch from './fetch.js';\r\n\r\nexport async function getCountries() {\r\n const urlEndpoint = '/tools/countries';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function checkFile(isbn, type) {\r\n const urlEndpoint = '/tools/checkfile';\r\n\r\n const postData = {\r\n isbn: isbn,\r\n type: type\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport function checkFileWithAbort(isbn, type, controller, signal) {\r\n const urlEndpoint = '/tools/checkfile';\r\n\r\n const postData = {\r\n isbn: isbn,\r\n type: type\r\n }\r\n\r\n return apifetch.abortFetch(urlEndpoint, 'POST', postData, controller, signal);\r\n}\r\n\r\nexport async function checkPdfExtra(isbn) {\r\n const urlEndpoint = '/tools/checkpdfextra';\r\n\r\n const postData = {\r\n isbn: isbn\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function checkVATNumber(country_code, vat_nr) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/utilities/vat/checkVATNumber.php';\r\n\r\n const postData = {\r\n country_code: country_code,\r\n vat_nr: vat_nr \r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson.data;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error VAT: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getShippingCosts(weight) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/order/getShippingCosts.php';\r\n\r\n const postData = {\r\n weight: weight \r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error getShippingCosts: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getShippingCostsV2(orderId) {\r\n const urlEndpoint = '/v2/calculations/shipping/' + orderId;\r\n\r\n const postData = {\r\n orderId: orderId \r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport countries from \"i18n-iso-countries\";\r\nimport * as settings from '../communicator/settings';\r\nimport * as sort from '../utilities/sort';\r\nimport * as tools from '../communicator/tools';\r\n\r\nclass StoreGeneral {\r\n shop = 'SHOP_SB'\r\n activeShop = ''\r\n searchShop = ''\r\n searchSegment = ''\r\n app_interface = { \r\n loader: false,\r\n feedback_loader: ''\r\n }\r\n\r\n settings_list = []\r\n social_links = []\r\n countriesList = []\r\n\r\n constructor() {\r\n this.getSettings();\r\n this.getCountries();\r\n this.getSearchShop();\r\n }\r\n\r\n startLoader() {\r\n this.app_interface.loader = true;\r\n this.app_interface.feedback_loader = 'We zoeken een resultaat voor je ...';\r\n }\r\n\r\n stopLoader() {\r\n this.app_interface.loader = false;\r\n this.app_interface.feedback_loader = 'Er zijn geen resultaten gevonden.<br/>Kies een andere categorie of gebruik een andere zoekterm';\r\n }\r\n\r\n async getCountries() {\r\n try {\r\n const returnData = await tools.getCountries();\r\n runInAction(() => {\r\n this.countriesList = returnData.data;\r\n this.translateCountries();\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n \r\n async getSettings() {\r\n let settingsList;\r\n try {\r\n const returnData = await settings.getSettings();\r\n runInAction(() => {\r\n settingsList = returnData.data;\r\n settingsList.map(setting => {\r\n this.settings_list[setting.SettingName] = setting.SettingValue;\r\n })\r\n this.setSocialLinks();\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n getActiveShop() {\r\n let activeShop = '';\r\n\r\n /*\r\n * SbC DEPRICATED\r\n * Always enter on Zelfhulpboeken\r\n */\r\n\r\n // if (localStorage.getItem('SB_LASTVISIT')) {\r\n // activeShop = localStorage.getItem('SB_LASTVISIT');\r\n // this.shop = localStorage.getItem('SB_LASTVISIT');\r\n // this.activeShop = localStorage.getItem('SB_LASTVISIT');\r\n // } else {\r\n // this.shop = 'SHOP_SB';\r\n // this.activeShop = 'SHOP_SB';\r\n // }\r\n\r\n return activeShop;\r\n }\r\n\r\n getSearchShop() {\r\n if (localStorage.getItem('SB_LASTVISIT')) {\r\n if (localStorage.getItem('SB_LASTVISIT') == 'SHOP_ALL') {\r\n this.searchShop = 'ALL';\r\n } else {\r\n this.searchShop = 'SB';\r\n }\r\n \r\n } else {\r\n this.searchShop = 'SB';\r\n }\r\n }\r\n\r\n setShop(shop) {\r\n this.shop = shop;\r\n if (shop == 'SHOP_ALL') {\r\n this.searchShop = 'ALL';\r\n } else {\r\n this.searchShop = 'SB';\r\n }\r\n }\r\n\r\n setActiveShop(shop) {\r\n this.activeShop = shop;\r\n localStorage.setItem('SB_LASTVISIT', shop)\r\n if (shop == 'SHOP_ALL') {\r\n this.searchShop = 'ALL';\r\n } else {\r\n this.searchShop = 'SB';\r\n }\r\n }\r\n\r\n setSearchShop(shop) {\r\n this.searchShop = shop;\r\n }\r\n\r\n setSearchSegment(segment) {\r\n this.searchSegment = segment;\r\n }\r\n\r\n translateCountries() {\r\n //SbC:: get country translations\r\n countries.registerLocale(require(\"i18n-iso-countries/langs/nl.json\"));\r\n\r\n this.countriesList.map((country, i) => {\r\n //SbC:: missing values for AN and CS\r\n switch (country.code) {\r\n case 'BS': \r\n this.countriesList[i].displayValue = 'Bahamas';\r\n break;\r\n case 'AN': \r\n this.countriesList[i].displayValue = 'Nederlandse Antillen';\r\n break;\r\n case 'CS': \r\n this.countriesList[i].displayValue = 'Servie en Montenegro';\r\n break;\r\n default: \r\n this.countriesList[i].displayValue = countries.getName(country.code, \"nl\");\r\n }\r\n })\r\n\r\n this.countriesList = this.countriesList\r\n .sort(sort.compareValues('displayValue', 'asc'))\r\n }\r\n\r\n setSocialLinks() {\r\n this.social_links = [{\r\n brand: 'facebook',\r\n url: this.settings_list['urlFacebook']\r\n },{\r\n brand: 'twitter',\r\n url: this.settings_list['urlTwitter']\r\n },{\r\n brand: 'instagram',\r\n url: this.settings_list['urlInstagram']\r\n },{\r\n brand: 'youtube',\r\n url: this.settings_list['urlYoutube']\r\n },{\r\n brand: 'telegram',\r\n url: this.settings_list['urlTelegram']\r\n }]\r\n }\r\n}\r\n\r\ndecorate(StoreGeneral, {\r\n activeShop: observable,\r\n searchShop: observable,\r\n searchSegment: observable,\r\n app_interface: observable,\r\n countriesList: observable,\r\n settings_list: observable,\r\n shop: observable,\r\n social_links: observable,\r\n getCountries: action,\r\n getSettings: action,\r\n setShop: action,\r\n setActiveShop: action,\r\n setSearchShop: action,\r\n setSocialLinks: action,\r\n setSocialLinks: action,\r\n startLoader: action,\r\n stopLoader: action\r\n})\r\n\r\nexport default StoreGeneral;","import * as apifetch from './fetch.js';\r\n\r\nexport async function getAuthors() {\r\n const urlEndpoint = '/v2/authors';\r\n \r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getAuthorsAll() {\r\n const urlEndpoint = '/v2/authors/all';\r\n \r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getNotifications() {\r\n const urlEndpoint = '/v2/catalog/notifications';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getBooksForAuthor(shop, str, firstname, lastname, page_view) {\r\n let str2 = str.replace(/'/g, \"'\");\r\n str2 = str2.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\")\r\n str2 = str2.replace(/,/g, \",\");\r\n\r\n const urlEndpoint = '/v2/authors/' + str2 + '/list';\r\n \r\n const postData = {\r\n shop: shop,\r\n id: str,\r\n str: str,\r\n firstname: firstname,\r\n lastname: lastname,\r\n page_view: page_view\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookCountForAuthorSimple(shop, str) {\r\n let str2 = str.replace(/'/g, \"'\");\r\n str2 = str2.normalize(\"NFD\").replace(/[\\u0300-\\u036f]/g, \"\")\r\n str2 = str2.replace(/,/g, \",\");\r\n\r\n const urlEndpoint = '/v2/authors/' + str2 + '/countsimple';\r\n\r\n const postData = {\r\n shop: shop,\r\n str: str2\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n}","import * as apifetch from './fetch.js';\r\n\r\nexport async function checkShopForSku(sku) {\r\n const urlEndpoint = '/catalog/checkShopForSku.php';\r\n\r\n const postData = {\r\n sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookDetails(shop, id) {\r\n //SbC DEPRICATED\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/getBookDetails.php';\r\n \r\n const postData = {\r\n shop: shop,\r\n book_id: id\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error book details: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getBookDetailsBySku(shop, sku) {\r\n const urlEndpoint = '/catalog/getBookDetailsBySku.php';\r\n const postData = {\r\n shop: shop,\r\n book_sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookISBN(id) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/getBookISBN.php';\r\n \r\n const postData = {\r\n book_id: id\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error book isbn: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getBookCategories(shop, sku) {\r\n const urlEndpoint = '/catalog/getBookCategories.php';\r\n const postData = {\r\n shop: shop,\r\n sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookTags(sku) {\r\n const urlEndpoint = '/catalog/getBookTags.php';\r\n const postData = {\r\n sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookAlert(sku) {\r\n const urlEndpoint = '/catalog/getBookAlert.php';\r\n const postData = {\r\n sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookDownloads(sku) {\r\n const urlEndpoint = '/catalog/getBookDownloads.php'; \r\n const postData = {\r\n sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}","import * as apifetch from './fetch.js';\r\n\r\nexport async function getBooks(shop, page_view) {\r\n const urlEndpoint = '/v2/catalog/sb';\r\n \r\n const postData = {\r\n page_view: page_view\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport function getBooksWithAbort(shop, page_view, controller, signal) {\r\n const urlEndpoint = '/v2/catalog/sb';\r\n \r\n const postData = {\r\n page_view: page_view\r\n }\r\n\r\n return apifetch.abortFetch(urlEndpoint, 'POST', postData, controller, signal);\r\n}\r\n\r\nexport async function getBookCountForBooksSB(shop, page_view) {\r\n const urlEndpoint = '/v2/catalog/sb/count';\r\n \r\n const postData = {\r\n page_view: page_view\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookCountForCategory(shop, cat, stock_priority) {\r\n const urlEndpoint = '/catalog/getBookCount.php';\r\n\r\n const postData = {\r\n shop: shop,\r\n category: cat,\r\n subcategory: '',\r\n stock_priority: stock_priority\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookCountForSubCategory(shop, cat, subcat, stockPriority) {\r\n const urlEndpoint = '/catalog/getBookCount.php';\r\n\r\n const postData = {\r\n shop: shop,\r\n category: cat,\r\n subcategory: subcat,\r\n stock_priority: stockPriority\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookCountForLanguage(shop, lang) {\r\n const urlEndpoint = '/catalog/getBookCount.php';\r\n\r\n const postData = {\r\n shop: shop,\r\n language: lang\r\n }\r\n \r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBooksForCategory(shop, cat, page_view, stock_priority) {\r\n const urlEndpoint = '/v2/catalog/category';\r\n\r\n const postData = {\r\n shop: shop,\r\n category: cat,\r\n page_view: page_view,\r\n stock_priority: stock_priority\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\n// export async function XgetBooksForCategory(shop, cat, page_view, stock_priority) {\r\n// const urlEndpoint = '/catalog/getBooksForCategory.php';\r\n\r\n// const postData = {\r\n// shop: shop,\r\n// category: cat,\r\n// page_view: page_view,\r\n// stock_priority: stock_priority\r\n// }\r\n\r\n// return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n// }\r\n\r\nexport function getBooksForCategoryWithAbort(shop, cat, page_view, stock_priority, controller, signal) {\r\n //const urlEndpoint = '/catalog/getBooksForCategory.php';\r\n const urlEndpoint = '/v2/catalog/category';\r\n\r\n const postData = {\r\n shop: shop,\r\n category: cat,\r\n page_view: page_view,\r\n stock_priority: stock_priority\r\n }\r\n\r\n return apifetch.abortFetch(urlEndpoint, 'POST', postData, controller, signal);\r\n}\r\n\r\nexport async function getBooksForLanguage(shop, lang, page_view, stock_priority) {\r\n const urlEndpoint = '/catalog/getBooksForLanguage.php';\r\n\r\n const postData = {\r\n shop: shop,\r\n language: lang,\r\n page_view: page_view,\r\n stock_priority: stock_priority\r\n }\r\n \r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBooksForSubCategory(shop, cat, subcat, page_view, stock_priority) {\r\n const urlEndpoint = '/catalog/getBooksForSubCategory.php';\r\n\r\n const postData = {\r\n shop: shop,\r\n category: cat,\r\n subcategory: subcat,\r\n page_view: page_view,\r\n stock_priority: stock_priority\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport function getBooksForSubCategoryWithAbort(shop, cat, subcat, page_view, stock_priority, controller, signal) {\r\n const urlEndpoint = '/catalog/getBooksForSubCategory.php';\r\n\r\n const postData = {\r\n shop: shop,\r\n category: cat,\r\n subcategory: subcat,\r\n page_view: page_view,\r\n stock_priority: stock_priority\r\n }\r\n\r\n return apifetch.abortFetch(urlEndpoint, 'POST', postData, controller, signal);\r\n}\r\n\r\nexport async function getBooksForSubCategoryAll(shop, subcat, page_view, stock_priority) {\r\n const urlEndpoint = '/catalog/getBooksForSubCategory.php';\r\n\r\n const postData = {\r\n shop: shop,\r\n category: 0,\r\n subcategory: subcat,\r\n page_view: page_view,\r\n stock_priority: stock_priority\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBooksAll() {\r\n const urlEndpoint = '/catalog/getBooksAll.php';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function xgetBooksNew(view) {\r\n const urlEndpoint = '/catalog/getBooksNew.php';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getBooksNew(shop, view, page_view) {\r\n let urlEndpoint;\r\n if (shop === 'SHOP_SB') {\r\n urlEndpoint = '/v2/catalog/new';\r\n } else {\r\n urlEndpoint = '/v2/catalog/new/' + view;\r\n }\r\n \r\n const postData = {\r\n shop: shop,\r\n page_view: page_view\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBookCountForBooksNew(shop, view, page_view) {\r\n let urlEndpoint;\r\n if (shop === 'SHOP_SB') {\r\n urlEndpoint = '/v2/catalog/new/count';\r\n } else {\r\n urlEndpoint = '/v2/catalog/new/' + view + '/count';\r\n }\r\n\r\n const postData = {\r\n shop: shop,\r\n page_view: page_view\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBooksNewest() {\r\n const urlEndpoint = '/catalog/getBooksNewest.php';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getBooksNewestAuto() {\r\n const urlEndpoint = '/catalog/getBooksNewestAuto.php';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getTop10s() {\r\n const urlEndpoint = '/v2/catalog/top10s';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getTop10NUR(tag) {\r\n const urlEndpoint = '/v2/catalog/top10NUR';\r\n\r\n const postData = {\r\n tag: tag\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBooksTop10(tag, nur, isAutofill) {\r\n const urlEndpoint = '/v2/catalog/top10';\r\n\r\n const postData = {\r\n tag: tag,\r\n nur: nur,\r\n isAutofill: isAutofill\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getBooksTop20() {\r\n const urlEndpoint = '/v2/catalog/top20';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getBooksTop60() {\r\n const urlEndpoint = '/v2/catalog/top60';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getWeekTop60() {\r\n const urlEndpoint = '/v2/catalog/top60week';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getBooksRelated(sku) {\r\n const urlEndpoint = '/catalog/getBooksRelated.php';\r\n\r\n const postData = {\r\n sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}","import * as apifetch from './fetch.js';\r\n\r\nexport async function checkShopForCategory(cat) {\r\n const urlEndpoint = '/catalog/checkShopForCategory.php';\r\n\r\n const postData = {\r\n category: cat\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function checkShopForSubCategory(cat) {\r\n const urlEndpoint = '/catalog/checkShopForSubCategory.php';\r\n\r\n const postData = {\r\n subcategory: cat\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getCategories(shop) {\r\n const urlEndpoint = '/catalog/getCategories.php';\r\n\r\n const postData = {\r\n shop: shop\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getCategoriesAll() {\r\n const urlEndpoint = '/v2/categories/counts';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getCategoriesPopular() {\r\n const urlEndpoint = '/v2/categories/popular';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getMainCategory(shop, cat) {\r\n const urlEndpoint = '/catalog/getMainCategory.php';\r\n\r\n const postData = {\r\n shop: shop,\r\n cat: cat\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getSubCategories(shop, cat_name) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/getSubCategories.php';\r\n\r\n const postData = {\r\n shop: shop,\r\n cat_name: cat_name\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error subcategories: ', error.message);\r\n }\r\n}\r\n\r\n// export async function getMediaGroups() {\r\n// const urlAPI = process.env.REACT_APP_URL_API;\r\n// const urlEndpoint = urlAPI + '/products/getProductGroups.php';\r\n\r\n// try {\r\n// let apiStr = urlEndpoint;\r\n// let response = await fetch(apiStr, {\r\n// method: 'GET',\r\n// headers: new Headers({\r\n \r\n// }),\r\n// });\r\n// let responseJson = await response.json();\r\n// if(responseJson !== null) {\r\n// let arrData = [];\r\n// arrData = responseJson;\r\n\r\n// return arrData;\r\n// }\r\n// } catch (error) {\r\n// console.log('SbC fetch error media groups: ', error.message);\r\n// }\r\n// }\r\n\r\n\r\n\r\n\r\n","import * as apifetch from './fetch.js';\r\n\r\nexport async function getConnCategoriesGenres() {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/getConnCategoriesGenres.php';\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'GET',\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error genres: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getSbPublications(collection) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/getSbPublications.php';\r\n\r\n const postData = {\r\n collection: collection\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error sb publications: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getPreview(media, isbn) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/getPreview.php';\r\n\r\n const postData = {\r\n media: media,\r\n isbn: isbn\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error preview: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getPreviewVideo(isbn) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/getPreviewVideo.php';\r\n\r\n const postData = {\r\n isbn: isbn\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error preview: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getReviews(sku) {\r\n const urlEndpoint = '/content/reviews/' + sku;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getReviewer(id) {\r\n const urlEndpoint = '/content/reviewer/' + id;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function XgetReviewer(id) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/getReviewer.php';\r\n\r\n const postData = {\r\n id: id\r\n }\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error reviewer: ', error.message);\r\n }\r\n}\r\n\r\nexport async function translateNURtoValue(nur) {\r\n const urlEndpoint = '/catalog/translateNURtoValue.php';\r\n\r\n const postData = {\r\n nur: nur\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function checkIfNURCategory(category) {\r\n const urlEndpoint = '/catalog/checkIfNURCategory.php';\r\n\r\n const postData = {\r\n category: category\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function addReview(form, book_data, form_data, upload_file) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/addReview.php';\r\n\r\n const postData = {\r\n book: book_data,\r\n data: form_data\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n console.log('SbC:: return file upload::', responseJson)\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n let arrData = {'data': [{error : 'An error has occurred'}]};\r\n return arrData;\r\n }\r\n}\r\n\r\nexport async function getNotification($sku) {\r\n const urlEndpoint = '/v2/catalog/notifications/' + $sku;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getNotifications() {\r\n const urlEndpoint = '/v2/catalog/notifications';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\n\r\n\r\n\r\n","import * as apifetch from './fetch.js';\r\n\r\nexport async function getQuote(id) {\r\n let urlEndpoint;\r\n if (id) {\r\n urlEndpoint = '/content/quote/' + id;\r\n } else {\r\n urlEndpoint = '/content/quote'\r\n }\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getBanner() {\r\n const urlEndpoint = '/content/banner';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getPromoBooks() {\r\n const urlEndpoint = '/content/promobooks';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getVideos(view) {\r\n const urlEndpoint = '/content/videos';\r\n\r\n if (view == 'overview') {\r\n const postData = {\r\n view: view\r\n };\r\n return apifetch.authFetch(urlEndpoint, 'POST', postData);\r\n } else {\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n }\r\n}\r\n\r\nexport async function getVideoById(id) {\r\n const urlEndpoint = '/content/video/' + id;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getVideoByReference(reference) {\r\n const urlEndpoint = '/content/video/' + reference;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getVideoLabels(view) {\r\n const urlEndpoint = '/content/videos/' + view;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getVideosByLabel(view, label) {\r\n const urlEndpoint = '/content/videos/' + view + '/' + label;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getNewsletters() {\r\n const urlEndpoint = '/content/newsletters';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getNewsletterTips(newsletter_id) {\r\n const urlEndpoint = '/content/newsletters/' + newsletter_id;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getTipsCarouselHome() {\r\n const urlEndpoint = '/v2/catalog/tipshome';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getNotifications() {\r\n const urlEndpoint = '/content/notifications';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getContentText(page) {\r\n const urlEndpoint = '/content/text/' + page;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getTooltip(sku) {\r\n const urlEndpoint = '/content/tooltip/' + sku;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getContentBlocks(block) {\r\n const urlEndpoint = '/content/blocks/' + block;\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function copyCover(sku) {\r\n const urlEndpoint = '/content/copyCover.php';\r\n\r\n const postData = {\r\n sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function uploadFile(file) {\r\n const urlEndpoint = '/content/uploadFile.php';\r\n\r\n const postData = {\r\n file: file\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getShortUrl(sku, params) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlAPP = process.env.REACT_APP_URL;\r\n const API_KEY_GOTAG = process.env.REACT_APP_KEY_GOTAG;\r\n const urlShortener = 'https://ogtag.me/';\r\n const urlEndpoint = urlShortener + API_KEY_GOTAG;\r\n\r\n let url;\r\n let image;\r\n\r\n if (params.type == 'book') {\r\n image = urlAPI + \"/public/images/CoversVK/\" + sku + \".jpg\";\r\n if (params.pc !== 0) {\r\n url = urlAPP + \"/book/\" + sku + \"?pc=\" + params.pc; \r\n } else {\r\n url = urlAPP + \"/book/\" + sku;\r\n }\r\n }\r\n\r\n if (params.type == 'video') {\r\n image = urlAPI + \"/public/images/sharing/sb_logo-img-small.png\";\r\n url = urlAPP + \"/videos\";\r\n }\r\n\r\n if (params.type == 'newsletter') {\r\n image = urlAPI + \"/public/images/sharing/sb_logo-img-small.png\";\r\n url = urlAPI + params.url;\r\n }\r\n \r\n const postData = {\r\n image : image, \r\n url : url,\r\n description : params.description,\r\n title : params.title\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n })\r\n\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n return responseJson.url;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error short url: ', error.message);\r\n }\r\n}\r\n\r\nexport async function getOnyxTranslation(list, code) {\r\n const urlEndpoint = '/translation/getOnyxTranslation.php';\r\n \r\n const postData = {\r\n onyx_list: list,\r\n stock_code: code\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getOnixTranslationFile() {\r\n const urlEndpoint = '/translation/getOnyxTranslationFile.php';\r\n \r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n","import * as apifetch from './fetch.js';\r\n\r\nexport async function sendFormContact(form, data) {\r\n const urlEndpoint = '/v2/email/contact';\r\n\r\n const postData = data;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function sendFormEvent(ref, data) {\r\n const urlEndpoint = '/v2/events/' + ref + '/registration';\r\n\r\n const postData = data;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function sendFormCallMeBack(form, data) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/email/sendFormCallMeBack.php';\r\n\r\n const postData = {\r\n data: data\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n let arrData = {'data': [{error : 'An error has occurred'}]};\r\n return arrData;\r\n }\r\n}\r\n\r\nexport async function sendFormReview(form, book_data, form_data, upload_file) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/email/sendFormReview.php';\r\n\r\n const postData = {\r\n book: book_data,\r\n data: form_data\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n console.log('SbC:: return file upload::', responseJson)\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n let arrData = {'data': [{error : 'An error has occurred'}]};\r\n return arrData;\r\n }\r\n}\r\n\r\nexport async function sendFormPress(form, data) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/email/sendFormPress.php';\r\n\r\n const postData = {\r\n data: data\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n let arrData = {'data': [{error : 'An error has occurred'}]};\r\n return arrData;\r\n }\r\n}\r\n\r\nexport async function sendFormSendToFriend(form, data, book) {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/email/sendFormSendToFriend.php';\r\n\r\n const postData = {\r\n data: data,\r\n book: book\r\n }\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'POST',\r\n body: JSON.stringify(postData),\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n return arrData;\r\n }\r\n } catch (error) {\r\n let arrData = {'data': [{error : 'An error has occurred'}]};\r\n return arrData;\r\n }\r\n}","import * as apifetch from './fetch.js';\r\n\r\nexport async function getProductGroups() {\r\n const urlEndpoint = '/v2/products/groups';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getProductSubGroups(group_name) {\r\n const urlEndpoint = '/v2/products/' + group_name + '/subgroups';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getProductsForCategory(product_cat, page_view, stock_priority) {\r\n const urlEndpoint = '/v2/products/list';\r\n\r\n const postData = {\r\n product_cat: product_cat,\r\n page_view: page_view,\r\n stock_priority: stock_priority\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getProductsForSubGroup(product_cat, subgroup, page_view, stock_priority) {\r\n const urlEndpoint = '/products/getProductsForSubGroup.php';\r\n\r\n const postData = {\r\n product_cat: product_cat,\r\n subgroup: subgroup,\r\n page_view: page_view,\r\n stock_priority: stock_priority\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getProductCountForCategory(product_cat) {\r\n const urlEndpoint = '/v2/products/count';\r\n\r\n const postData = {\r\n collection: 'product_group',\r\n product_cat: product_cat\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getProductCountForSubGroup(product_cat, subgroup) {\r\n const urlEndpoint = '/v2/products/count';\r\n\r\n const postData = {\r\n collection: 'product_subgroup',\r\n product_cat: product_cat,\r\n subgroup: subgroup\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function checkMainGroup(name) {\r\n const urlEndpoint = '/v2/products/checkmain';\r\n\r\n const postData = {\r\n name: name\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getMainGroup(name) {\r\n const urlEndpoint = '/v2/products/main';\r\n\r\n const postData = {\r\n name: name\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}","import * as apifetch from './fetch.js';\r\n\r\nexport async function getUserDiscounts() {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/order/getUserDiscounts.php';\r\n\r\n try {\r\n let apiStr = urlEndpoint;\r\n let response = await fetch(apiStr, {\r\n method: 'GET',\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error categories: ', error.message);\r\n }\r\n}\r\n","import * as apifetch from './fetch.js';\r\nimport * as formats from '../utilities/formats.js';\r\n\r\nexport async function getSearchCount(search_term, section, page_view, sku_soon) {\r\n let term = formats.removeSpaces(search_term);\r\n term = formats.replaceChars(term);\r\n const urlEndpoint = '/v2/search/' + term + '/count';\r\n\r\n const postData = {\r\n shop: \"SHOP_ALL\",\r\n page_view: page_view,\r\n section: section,\r\n stock_priority: 0,\r\n sku_soon: sku_soon\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getSearchCountSB(search_term, section, page_view, sku_soon) {\r\n let term = formats.removeSpaces(search_term);\r\n term = formats.replaceChars(term);\r\n const urlEndpoint = '/v2/search/' + term + '/count';\r\n\r\n const postData = {\r\n shop: 'SHOP_SB',\r\n page_view: page_view,\r\n section: section,\r\n stock_priority: 0,\r\n sku_soon: sku_soon\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getSearchResults(shop, search_term, section, page_view, stock_priority, sku_soon) {\r\n let term = formats.removeSpaces(search_term);\r\n term = formats.replaceChars(term);\r\n const urlEndpoint = '/v2/search/' + term;\r\n\r\n const postData = {\r\n shop: \"SHOP_ALL\",\r\n page_view: page_view,\r\n section: section,\r\n stock_priority: stock_priority,\r\n sku_soon: sku_soon\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport function getSearchResultsWithAbort(shop, search_term, section, page_view, stock_priority, sku_soon, controller, signal) {\r\n let term = formats.removeSpaces(search_term);\r\n term = formats.replaceChars(term);\r\n const urlEndpoint = '/v2/search/' + term;\r\n\r\n const postData = {\r\n shop: \"SHOP_ALL\",\r\n page_view: page_view,\r\n section: section,\r\n stock_priority: stock_priority,\r\n sku_soon: sku_soon\r\n }\r\n\r\n return apifetch.abortFetch(urlEndpoint, 'POST', postData, controller, signal);\r\n}\r\n\r\nexport async function getSearchResultsSB(shop, search_term, section, page_view, stock_priority, sku_soon) {\r\n let term = formats.removeSpaces(search_term);\r\n term = formats.replaceChars(term);\r\n const urlEndpoint = '/v2/search/' + term;\r\n\r\n const postData = {\r\n shop: 'SHOP_SB',\r\n page_view: page_view,\r\n section: section,\r\n stock_priority: stock_priority,\r\n sku_soon: sku_soon\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getElevatedSku(sku) {\r\n let term = 'elevated';\r\n const urlEndpoint = '/v2/search/' + term + '/' + sku;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getSearchIntentions(search_term) {\r\n const urlEndpoint = '/search/getSearchIntentions.php';\r\n\r\n const postData = {\r\n search_term: search_term\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function saveSearchQuery(search_term) {\r\n const urlEndpoint = '/search/saveSearchQuery.php';\r\n\r\n const postData = {\r\n search_term: search_term\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function getSearchResultsNewsletter(value) {\r\n const urlEndpoint = '/v2/newsletters/search/' + value;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getSearchTitle(term, shop) {\r\n const urlEndpoint = '/v2/search/' + term + '/title/' + shop;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport countries from \"i18n-iso-countries\";\r\nimport * as sort from '../utilities/sort';\r\n\r\nimport * as account from '../communicator/account';\r\nimport * as authors from '../communicator/authors';\r\nimport * as books from '../communicator/books';\r\nimport * as booklists from '../communicator/book-lists';\r\nimport * as categories from '../communicator/categories';\r\nimport * as catalog from '../communicator/catalog';\r\nimport * as content from '../communicator/content';\r\nimport * as forms from '../communicator/forms';\r\nimport * as payment from '../communicator/payment';\r\nimport * as products from '../communicator/products';\r\nimport * as discounts from '../communicator/discounts';\r\nimport * as search from '../communicator/search';\r\nimport * as settings from '../communicator/settings';\r\nimport * as tools from '../communicator/tools';\r\nimport { act } from \"react-dom/test-utils\";\r\n\r\nclass StoreUi {\r\n app_interface = { \r\n active_genre: \"0\",\r\n active_category: \"0\",\r\n active_subcats: '',\r\n active_search_segment: 1,\r\n active_tab: 'profile',\r\n cookie_alert: true,\r\n current_book: \"0\",\r\n current_author: 0,\r\n dialog_type: '',\r\n login_direct: false,\r\n use_case: \"inshop\",\r\n use_case_order: '',\r\n partner_code: 0,\r\n nav_mobile: false,\r\n height_footer: 0,\r\n height_header: 0,\r\n isDialogFade: false,\r\n isDialogOpen: false,\r\n isDialogContentOpen: false,\r\n isDialogDeleteOpen: false,\r\n isDialogWishListOpen: false,\r\n isDialogFeedbackFormOpen: false,\r\n isDialogNewsletterOpen: false,\r\n isDialogNotificationOpen: false,\r\n isDialogVideoOpen: false,\r\n urlNewsletterOpen: '',\r\n reload: false,\r\n return_state: '',\r\n view_account: 'overview'\r\n }\r\n\r\n active_product = {}\r\n\r\n active_nav = 0\r\n active_sbnav = 0\r\n active_togglenav = 0\r\n active_subnav = 0\r\n \r\n active_category = ''\r\n active_category_display_value = ''\r\n active_subcategory = \"\"\r\n active_subcategory_display_value = ''\r\n active_subcats = \"\"\r\n active_product_group = \"\"\r\n active_subgroup = \"\"\r\n active_nur = '0'\r\n active_language = ''\r\n\r\n active_video = 0\r\n active_video_playing = false\r\n active_video_location = 'list'\r\n active_video_cc = 'disabled'\r\n\r\n featureAll = false;\r\n\r\n foldout = {\r\n top10: false,\r\n top60: false\r\n }\r\n \r\n isDialogContentOpen = false\r\n isDialogVideoOpen = false\r\n\r\n carousel_home = ''\r\n carousel_home_class = '--play'\r\n content_component = ''\r\n content_text = []\r\n cookie_duration = 16000\r\n count_total = 0\r\n features_list =[]\r\n form_feedback = {}\r\n searchFeedback = false;\r\n freezePaging = false\r\n freezeScrolling = false\r\n list_languages = []\r\n notifications = []\r\n social_links = []\r\n payment_providers = []\r\n newsletter_active = {}\r\n newsletters = []\r\n userDiscounts = []\r\n settings = {}\r\n settings_list = []\r\n stockPriority = 1;\r\n quote = {}\r\n banner = {}\r\n scrollPos = 0\r\n search_intentions = []\r\n search_input_focus = false\r\n search_overlay = false\r\n search_results = []\r\n search_results_simple = []\r\n search_results_simple_own = []\r\n search_results_simple_sb = []\r\n search_results_simple_all = []\r\n search_results_own = []\r\n search_results_sb = []\r\n search_results_all = []\r\n search_results_alternative = []\r\n search_results_newsletter = []\r\n search_value = ''\r\n search_value_saved = ''\r\n search_count = 0\r\n search_count_alternative = 0\r\n search_count_own = 0\r\n search_count_sb = 0\r\n search_count_all = 0\r\n videos = []\r\n order_to_process = {}\r\n templateView = ''\r\n\r\n page_view = {\r\n total: 0,\r\n sorting: 'ID',\r\n order: 'DESC',\r\n page: 1,\r\n inview: 25,\r\n rangeFrom: 1,\r\n rangeTo: 6\r\n }\r\n\r\n account_nav = [{\r\n id: 1,\r\n name: 'account',\r\n path: \"/account\",\r\n use: \"all\"\r\n }]\r\n\r\n main_nav = [{\r\n id: 1,\r\n name: 'books_new',\r\n path: \"/new-books\",\r\n use: \"all\",\r\n show: [\"SHOP_SB\"] \r\n },{\r\n id: 2,\r\n name: 'ebooks',\r\n path: \"/ebooks\",\r\n use: \"all\",\r\n show: [\"SHOP_SB\"] \r\n },{\r\n id: 3,\r\n name: 'new_this_month',\r\n path: \"/new-books/month\",\r\n use: \"all\",\r\n show: [\"SHOP_ALL\"] \r\n },{\r\n id: 4,\r\n name: 'new_this_week',\r\n path: \"/new-books/week\",\r\n use: \"all\",\r\n show: [\"SHOP_ALL\"] \r\n },{\r\n id: 5,\r\n name: 'top10',\r\n path: \"/category/top10\",\r\n use: \"all\",\r\n show: [\"SHOP_ALL\"] \r\n },{\r\n id: 6,\r\n name: 'sb_publications',\r\n path: \"/our-publications\",\r\n use: \"all\",\r\n show: [\"SHOP_SB\"] \r\n }\r\n ]\r\n\r\n sub_nav = [{\r\n id: 1,\r\n name: 'videos',\r\n path: \"/videos\",\r\n use: \"all\",\r\n show: [\"SHOP_SB\",\"SHOP_ALL\"] \r\n },{\r\n id: 2,\r\n name: 'partners',\r\n path: \"/partners\",\r\n use: \"partner\",\r\n value: false\r\n },{\r\n id: 3,\r\n name: 'partner',\r\n path: \"/partner\",\r\n use: \"partner\",\r\n value: true\r\n },{\r\n id: 4,\r\n name: 'jobs',\r\n path: \"/jobs\",\r\n use: \"all\",\r\n show: [\"SHOP_SB\",\"SHOP_ALL\"] \r\n },{\r\n id: 5,\r\n name: 'sitemap',\r\n path: \"/sitemap\",\r\n use: \"all\",\r\n show: [\"SHOP_SB\",\"SHOP_ALL\"] \r\n },{\r\n id: 6,\r\n name: 'contact',\r\n path: \"/address\",\r\n use: \"all\",\r\n show: [\"SHOP_SB\",\"SHOP_ALL\"] \r\n }]\r\n\r\n toggle_nav = [{\r\n id: 1,\r\n name: 'toggle_books_sb',\r\n path: \"/\",\r\n use: \"all\",\r\n tooltip: \"tt-nav-sb\",\r\n showTip: false,\r\n showExplanation: false\r\n },{\r\n id: 2,\r\n name: 'toggle_books_all',\r\n path: \"/all-books\",\r\n use: \"all\",\r\n tooltip: \"tt-nav-all\",\r\n showTip: false,\r\n showExplanation: false \r\n }]\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeGeneral = this.storeRoot.storeGeneral;\r\n this.storeAuth = this.storeRoot.storeAuth;\r\n this.storeCatalogs = this.storeRoot.storeCatalogs;\r\n this.getLanguages();\r\n this.getSettings();\r\n this.getFeatures();\r\n this.getPaymentProviders();\r\n this.checkNotifications();\r\n this.getTooltips();\r\n }\r\n\r\n async getSettings() {\r\n let settingsList;\r\n try {\r\n const returnData = await settings.getSettings();\r\n runInAction(() => {\r\n settingsList = returnData.data;\r\n settingsList.map(setting => {\r\n this.settings_list[setting.SettingName] = setting.SettingValue;\r\n })\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getFeatures() {\r\n try {\r\n const returnData = await settings.getFeatures();\r\n runInAction(() => {\r\n this.features_list = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getLanguages() {\r\n try {\r\n const returnData = await settings.getLanguages();\r\n runInAction(() => {\r\n this.list_languages = returnData.data;\r\n this.languages = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async translateNURtoValue(nur) {\r\n let display_value = nur;\r\n try {\r\n const returnData = await catalog.translateNURtoValue(nur);\r\n runInAction(() => {\r\n display_value = returnData.data[0].display_value;\r\n return display_value;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return display_value;\r\n }\r\n\r\n checkFeature(sku, is_loggedin, access_level) {\r\n let hasFeature = false; \r\n let accessLevel = this.storeAuth.user.access_level;\r\n let isLoggedin = this.storeAuth.user.is_loggedin;\r\n \r\n const idx = this.features_list\r\n .findIndex(feature => feature.sku === sku);\r\n \r\n if (idx !== -1) {\r\n if (parseInt(this.features_list[idx].access_level) === 0) {\r\n hasFeature = true; \r\n } else {\r\n if (isLoggedin && (parseInt(accessLevel) >= parseInt(this.features_list[idx].access_level))) {\r\n hasFeature = true; \r\n } else {\r\n hasFeature = false; \r\n }\r\n }\r\n } else {\r\n hasFeature = false;\r\n }\r\n\r\n if (sku === 'SHOP_ALL') {\r\n hasFeature = true; \r\n }\r\n \r\n return hasFeature;\r\n }\r\n\r\n async checkIfNURCategory(cat) {\r\n let cat_nur = 0;\r\n try {\r\n const returnData = await catalog.checkIfNURCategory(cat);\r\n runInAction(() => {\r\n cat_nur = parseInt(returnData.data);\r\n return cat_nur;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return cat_nur;\r\n }\r\n\r\n openDialog = () => {\r\n this.app_interface.isDialogOpen = true;\r\n }\r\n\r\n openDialogContent = () => {\r\n this.app_interface.isDialogContentOpen = true;\r\n this.isDialogContentOpen = true;\r\n }\r\n\r\n openDialogVideo = () => {\r\n this.app_interface.isDialogVideoOpen = true;\r\n this.isDialogVideoOpen = true;\r\n }\r\n\r\n openDialogDelete = (product) => {\r\n this.active_product = product;\r\n this.app_interface.isDialogDeleteOpen = true;\r\n }\r\n\r\n openDialogFeedbackForm = (type) => {\r\n this.app_interface.dialog_type = type;\r\n this.app_interface.isDialogFeedbackFormOpen = true;\r\n }\r\n\r\n openDialogWishList = (url) => {\r\n this.app_interface.isDialogWishListOpen = true;\r\n }\r\n\r\n openDialogNewsletter = (url) => {\r\n this.app_interface.urlNewsletterOpen = url;\r\n this.app_interface.isDialogNewsletterOpen = true;\r\n }\r\n\r\n closeDialog = () => {\r\n this.app_interface.isDialogOpen = false;\r\n }\r\n\r\n closeDialogContent = () => {\r\n this.app_interface.isDialogContentOpen = false;\r\n this.isDialogContentOpen = false;\r\n }\r\n\r\n closeDialogVideo = () => {\r\n this.app_interface.isDialogVideoOpen = false;\r\n this.isDialogVideoOpen = false;\r\n //this.active_video_location = 'list';\r\n }\r\n\r\n closeDialogDelete = () => {\r\n this.active_product = {};\r\n this.app_interface.isDialogDeleteOpen = false;\r\n }\r\n\r\n closeDialogFeedbackForm = () => {\r\n this.app_interface.isDialogFeedbackFormOpen = false;\r\n }\r\n\r\n closeDialogWishList = () => {\r\n // this.app_interface.isDialogFade = true;\r\n // setTimeout(() => { \r\n // this.app_interface.isDialogFade = false;\r\n // this.app_interface.isDialogWishListOpen = false;\r\n // }, 2000);\r\n this.app_interface.isDialogWishListOpen = false;\r\n }\r\n\r\n closeDialogNewsletter = () => {\r\n document.body.classList.remove('dialog-open');\r\n this.app_interface.isDialogNewsletterOpen = false;\r\n }\r\n\r\n checkCookies() {\r\n let cookies_alert = true;\r\n if (localStorage.getItem('SB_COOKIES')) {\r\n cookies_alert = JSON.parse(localStorage.getItem('SB_COOKIES')) == true ? false : true;\r\n }\r\n\r\n return cookies_alert;\r\n }\r\n\r\n setCookies() {\r\n localStorage.setItem('SB_COOKIES', true);\r\n }\r\n\r\n setFeatureAll(bool) {\r\n this.featureAll = bool;\r\n }\r\n\r\n setFreezePaging(bool) {\r\n this.freezePaging = bool;\r\n }\r\n\r\n setFreezeScrolling(bool) {\r\n this.freezeScrolling = bool;\r\n }\r\n\r\n setFreezePos(pos) {\r\n this.scrollPos = pos;\r\n }\r\n\r\n async getTooltips(type, idx) {\r\n this.toggle_nav.map(async(nav, id) => {\r\n try {\r\n const returnData = await this.getTooltip(nav.tooltip);\r\n runInAction(() => {\r\n this.toggle_nav[id].title = returnData[0].title;\r\n this.toggle_nav[id].text = returnData[0].text;\r\n this.toggle_nav[id].textLong = returnData[0].textLong;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n })\r\n }\r\n\r\n showTooltip(type, idx) {\r\n if (type === 'tip') {\r\n this.toggle_nav.map((nav, i) => {\r\n this.toggle_nav[i].showExplanation = false;\r\n })\r\n if (idx === 0) {\r\n this.toggle_nav.map((nav, i) => {\r\n this.toggle_nav[i].showTip = false;\r\n })\r\n } else {\r\n this.toggle_nav.map((nav, id) => {\r\n if (id === (idx - 1)) {\r\n this.toggle_nav[id].showTip = true;\r\n } else {\r\n this.toggle_nav[id].showTip = false;\r\n }\r\n })\r\n }\r\n } \r\n \r\n if (type === 'explanation') {\r\n this.toggle_nav.map((nav, i) => {\r\n this.toggle_nav[i].showTip = false;\r\n })\r\n if (idx === 0) {\r\n this.toggle_nav.map((nav, i) => {\r\n this.toggle_nav[i].showExplanation = false;\r\n })\r\n } else {\r\n this.toggle_nav.map((nav, id) => {\r\n if (id === (idx - 1)) {\r\n this.toggle_nav[id].showExplanation = true;\r\n } else {\r\n this.toggle_nav[id].showExplanation = false;\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n async copyCoverForSharing(sku) {\r\n try {\r\n const returnData = await content.copyCover(sku);\r\n runInAction(() => {\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async checkNotifications() {\r\n try {\r\n const returnData = await content.getNotifications();\r\n runInAction(() => {\r\n this.notifications = returnData.data;\r\n if (this.notifications.length > 0) {\r\n this.openDialogNotifications();\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n closeDialogNotifications = () => {\r\n this.app_interface.isDialogNotificationOpen = false;\r\n }\r\n\r\n openDialogNotifications = () => {\r\n this.app_interface.isDialogNotificationOpen = true;\r\n }\r\n\r\n setReturnState(return_state) {\r\n this.app_interface.return_state = return_state;\r\n }\r\n\r\n async getQuote(id) {\r\n const id_quote = id ? id : null;\r\n let quote;\r\n try {\r\n const returnData = await content.getQuote(id_quote);\r\n runInAction(() => {\r\n this.quote = returnData.data[0];\r\n quote = returnData.data[0];\r\n return quote;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return quote;\r\n }\r\n\r\n async getBanner() {\r\n try {\r\n const returnData = await content.getBanner();\r\n runInAction(() => {\r\n this.banner = returnData.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getContentText(page) {\r\n let content_text;\r\n try {\r\n const returnData = await content.getContentText(page);\r\n runInAction(() => {\r\n this.content_text = JSON.parse(returnData.data).data;\r\n content_text = JSON.parse(returnData.data).data;\r\n return content_text;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return content_text;\r\n }\r\n\r\n async getNewsletters() {\r\n let newsletters;\r\n try {\r\n const returnData = await content.getNewsletters();\r\n runInAction(() => {\r\n this.newsletters = returnData.data;\r\n newsletters = returnData.data;\r\n return newsletters;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return newsletters;\r\n }\r\n\r\n async getPaymentProviders() {\r\n const bankTrans = {\r\n id: 'BANKTRANS',\r\n description: 'Overboeking',\r\n displayValue: 'Overboeking'\r\n }\r\n try {\r\n const returnData = await payment.getPaymentProviders();\r\n runInAction(() => {\r\n this.payment_providers = returnData.data;\r\n\r\n this.payment_providers.map((provider, i) => {\r\n this.payment_providers[i].displayValue = this.payment_providers[i].description;\r\n this.payment_providers[i].value = i;\r\n })\r\n\r\n //SbC check if handmatige overschijving is aanwezig\r\n const idx = this.payment_providers\r\n .findIndex((provider) => provider.id === 'BANKTRANS');\r\n if (idx === -1) { \r\n this.payment_providers.push(bankTrans);\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getUserDiscounts() {\r\n try {\r\n const returnData = await discounts.getUserDiscounts();\r\n runInAction(() => {\r\n this.userDiscounts = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n getProductDiscount() {\r\n return 30;\r\n }\r\n\r\n async getVideos(section) {\r\n let view = 'videos';\r\n if (section) {\r\n view = section;\r\n }\r\n try {\r\n const returnData = await content.getVideos(view);\r\n runInAction(() => {\r\n this.videos = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getVideoById(id) {\r\n let video;\r\n try {\r\n const returnData = await content.getVideoById(id);\r\n runInAction(() => {\r\n video = returnData.data;\r\n return video;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return video;\r\n }\r\n\r\n async getVideoByReference(reference) {\r\n let video;\r\n try {\r\n const returnData = await content.getVideoByReference(reference);\r\n runInAction(() => {\r\n video = returnData.data;\r\n return video;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return video;\r\n }\r\n\r\n async getVideosByLabel(view, label) {\r\n try {\r\n const returnData = await content.getVideosByLabel(view, label);\r\n runInAction(() => {\r\n this.videos = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async checkVATNumber(countryCode, nrVAT) {\r\n let vat_validation;\r\n this.storeGeneral.startLoader();\r\n try {\r\n const returnData = await tools.checkVATNumber(countryCode, nrVAT);\r\n runInAction(() => {\r\n vat_validation = returnData;\r\n return vat_validation;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n return vat_validation;\r\n }\r\n\r\n async getElevatedSku(sku) {\r\n let results = [];\r\n let returnData;\r\n try {\r\n returnData = await search.getElevatedSku(sku);\r\n\r\n runInAction(() => {\r\n results = returnData.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n //this.storeGeneral.stopLoader();\r\n }\r\n\r\n return results;\r\n }\r\n\r\n async getSearchResultsSimple(shop, term, section, page_view, alternative) {\r\n let results = [];\r\n let returnData;\r\n //let stockPriority = this.stockPriority;\r\n let stockPriority = 1;\r\n\r\n if (term !== '' && term !== undefined) {\r\n //this.storeGeneral.startLoader();\r\n const skuSoon = this.storeGeneral.settings_list.skuSoonAvailable;\r\n this.setPageView('page', 1);\r\n\r\n try {\r\n if (shop === 'SHOP_SB') {\r\n returnData = await search.getSearchResultsSB(shop, term, section, page_view, stockPriority, skuSoon);\r\n } else {\r\n returnData = await search.getSearchResults(shop, term, section, page_view, stockPriority, skuSoon);\r\n }\r\n runInAction(() => {\r\n results = returnData.data;\r\n //if (alternative) {\r\n this.search_results_alternative = returnData.data;\r\n //this.search_results_simple = [];\r\n //} else {\r\n this.search_results_simple = returnData.data;\r\n //this.search_results_alternative = [];\r\n //}\r\n\r\n // if (shop === 'SHOP_SB') {\r\n // if (section == 'sb') {\r\n // this.search_results_simple_own = returnData.data;\r\n // } else {\r\n // this.search_results_simple_sb = returnData.data;\r\n // }\r\n // } else {\r\n // this.search_results_simple_all = returnData.data;\r\n // }\r\n\r\n return results;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n //this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n getSearchResultsSimpleWithAbort(shop, term, section, page_view, alternative, controller, signal) {\r\n let results = [];\r\n let returnData;\r\n //let stockPriority = this.stockPriority;\r\n let stockPriority = 1;\r\n\r\n if (term !== '' && term !== undefined) {\r\n //this.storeGeneral.startLoader();\r\n const skuSoon = this.storeGeneral.settings_list.skuSoonAvailable;\r\n this.setPageView('page', 1);\r\n this.setPageView('inview', 100);\r\n\r\n try {\r\n if (shop === 'SHOP_SB') {\r\n returnData = search.getSearchResultsSB(shop, term, section, page_view, stockPriority, skuSoon);\r\n } else {\r\n returnData = search.getSearchResultsWithAbort(shop, term, section, page_view, stockPriority, skuSoon, controller, signal);\r\n }\r\n runInAction(() => {\r\n results = returnData;\r\n //if (alternative) {\r\n //this.search_results_alternative = returnData.data;\r\n //this.search_results_simple = [];\r\n //} else {\r\n //this.search_results_simple = returnData.data;\r\n //this.search_results_alternative = [];\r\n //}\r\n\r\n // if (results !== undefined && results !== null) {\r\n // if (shop === 'SHOP_SB') {\r\n // if (section == 'sb') {\r\n // this.search_results_simple_own = returnData.data;\r\n // } else {\r\n // this.search_results_simple_sb = returnData.data;\r\n // }\r\n // } else {\r\n // this.search_results_simple_all = returnData.data;\r\n // }\r\n // }\r\n\r\n return results;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n //this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n return results;\r\n }\r\n\r\n setSearchResultsSimple = (shop, section, results, value) => {\r\n let bestMatch = false;\r\n\r\n if (results !== null && results !== undefined) {\r\n if (shop === 'SHOP_SB') {\r\n if (section === 'sb') {\r\n this.search_results_simple_own = results;\r\n } else {\r\n this.search_results_simple_sb = results;\r\n }\r\n } else {\r\n this.search_results_simple_all = results;\r\n }\r\n\r\n if (results.length > 0) {\r\n if (results[0] && results[0].title !== undefined) {\r\n this.searchTopItemTitle = results[0].title.toLowerCase();\r\n this.searchTopItemTitleSku = results[0].sku;\r\n this.searchTopItemScore = results[0].score;\r\n this.search_results_simple_all = results;\r\n } else {\r\n this.searchTopItemTitleSku = '';\r\n }\r\n\r\n results.map(item => {\r\n let title = '';\r\n if (item.title) {\r\n title = item.title.toLowerCase();\r\n } \r\n \r\n if (!bestMatch && (title === value.toLowerCase())) {\r\n this.searchTopItemTitle = title;\r\n this.searchTopItemTitleSku = item.sku;\r\n //bestMatch = true;\r\n } else {\r\n if (!bestMatch && (title.startsWith(value.toLowerCase()) || title.endsWith(value.toLowerCase()) || title.includes(value.toLowerCase()))) {\r\n this.searchTopItemTitle = title;\r\n this.searchTopItemTitleSku = item.sku;\r\n //bestMatch = true;\r\n }\r\n }\r\n })\r\n }\r\n }\r\n }\r\n\r\n getSearchResultsSimple = async() => {\r\n return this.search_results_simple_all;\r\n }\r\n\r\n async getSearchResults(term, section, page_view) {\r\n //const shop = this.storeGeneral.shop;\r\n const shop = 'SHOP_ALL';\r\n const skuSoon = this.storeGeneral.settings_list.skuSoonAvailable;\r\n this.storeGeneral.startLoader();\r\n\r\n let stockPriority = this.stockPriority;\r\n\r\n try {\r\n const returnData = await search.getSearchResults(shop, term, section, page_view, stockPriority, skuSoon);\r\n runInAction(() => {\r\n //this.search_results = returnData.data;\r\n this.search_results_all = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async getSearchResultsSB(term, section, page_view) {\r\n const shop = 'SHOP_SB';\r\n const skuSoon = this.storeGeneral.settings_list.skuSoonAvailable;\r\n this.storeGeneral.startLoader();\r\n\r\n let stockPriority = this.stockPriority;\r\n\r\n try {\r\n const returnData = await search.getSearchResultsSB(shop, term, section, page_view, stockPriority, skuSoon);\r\n runInAction(() => {\r\n //this.search_results = returnData.data;\r\n if (section === 'sb') {\r\n this.search_results_own = returnData.data;\r\n } else {\r\n this.search_results_sb = returnData.data;\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async getSearchResultsNewsletter(value) {\r\n this.storeGeneral.startLoader();\r\n let result;\r\n\r\n try {\r\n const returnData = await search.getSearchResultsNewsletter(value);\r\n runInAction(() => {\r\n this.search_results_newsletter = returnData.data;\r\n result = returnData.data;\r\n\r\n console.log('SbC search', returnData)\r\n \r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async saveSearchQuery(term) {\r\n try {\r\n const returnData = await search.saveSearchQuery(term);\r\n runInAction(() => {\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n }\r\n }\r\n\r\n async getSearchIntentions(term) {\r\n try {\r\n const returnData = await search.getSearchIntentions(term);\r\n runInAction(() => {\r\n this.search_intentions = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n }\r\n\r\n async getTooltip(sku) {\r\n let tooltip = {};\r\n try {\r\n const returnData = await content.getTooltip(sku);\r\n runInAction(() => {\r\n tooltip = returnData.data;\r\n return tooltip;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return tooltip;\r\n }\r\n\r\n async checkFile(isbn, type) {\r\n let result = [{'error': 'no file'}];\r\n\r\n //SbC TEMP NOT USED\r\n //use only if sarch is <= 25\r\n\r\n if (this.storeGeneral.shop === 'SHOP_SB') {\r\n try {\r\n const returnData = await tools.checkFile(isbn, type);\r\n runInAction(() => {\r\n result = returnData.data;\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async checkPdfExtra(isbn) {\r\n let result = [{'error': 'no file'}];\r\n\r\n try {\r\n const returnData = await tools.checkPdfExtra(isbn);\r\n runInAction(() => {\r\n result = returnData.data;\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return result;\r\n }\r\n\r\n checkFileWithAbort(isbn, type, controller, signal) {\r\n let result = [{'error': 'no file'}];\r\n\r\n try {\r\n const returnData = tools.checkFileWithAbort(isbn, type, controller, signal);\r\n runInAction(() => {\r\n result = returnData;\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return result;\r\n }\r\n\r\n clearFormFeedback() {\r\n this.form_feedback = {};\r\n }\r\n\r\n setFormFeedback(type, msg) {\r\n if (type === 'success') {\r\n this.form_feedback = {\r\n succes: true,\r\n msg: msg\r\n };\r\n } else {\r\n this.form_feedback = {\r\n error: true,\r\n msg: msg\r\n };\r\n }\r\n }\r\n\r\n redirectISBN(searchString) {\r\n //const params = queryString.parse(searchString)\r\n }\r\n\r\n setAccountView(view) {\r\n this.app_interface.view_account = view;\r\n }\r\n\r\n setActiveMainNav(id) {\r\n this.active_nav = id;\r\n this.app_interface.active_search_segment = id;\r\n }\r\n\r\n setActiveSubNav(id) {\r\n this.active_subnav = id;\r\n }\r\n\r\n setActiveSbNav(id) {\r\n this.active_sbnav = id;\r\n }\r\n\r\n setActiveToggleNav(id) {\r\n this.active_togglenav = id;\r\n }\r\n\r\n setActiveGenre(id) {\r\n this.app_interface.active_genre = id;\r\n }\r\n\r\n setActiveCategory(name) {\r\n if (name !== this.active_category) {\r\n this.active_subcats = name;\r\n this.app_interface.active_category_name = name;\r\n this.active_category = name;\r\n }\r\n }\r\n\r\n setActiveCategoryDisplayValue(display_value) {\r\n this.active_category_display_value = display_value;\r\n }\r\n\r\n setActiveSubCats(name) {\r\n if (name === this.active_category && this.active_subcats !== '') {\r\n this.active_subcats = '';\r\n } else {\r\n this.active_subcats = name;\r\n }\r\n }\r\n\r\n setActiveNUR(nur) {\r\n this.active_nur = nur;\r\n }\r\n\r\n // setShowSubCats(name, show) {\r\n // if (show) {\r\n // this.app_interface.active_subcats = name;\r\n // } else {\r\n // console.log('SbC click cat show?', name, this.app_interface.active_category_name, this.app_interface.active_subcats)\r\n // if (name !== this.app_interface.active_category_name || this.app_interface.active_subcats == '') {\r\n // this.app_interface.active_subcats = name;\r\n // } else {\r\n // if (name !== this.app_interface.active_subcats) {\r\n // this.app_interface.active_subcats = name;\r\n // } else {\r\n // this.app_interface.active_subcats = 'x';\r\n // }\r\n // }\r\n // }\r\n // }\r\n\r\n\r\n setActiveLanguage(abbr) {\r\n this.active_language = abbr;\r\n }\r\n\r\n setShowSubCats(name, show) {\r\n if (show) {\r\n //if (this.app_interface.active_subcats === '') {\r\n this.app_interface.active_subcats = name;\r\n //} else {\r\n //this.app_interface.active_subcats = '';\r\n //}\r\n } else {\r\n this.app_interface.active_subcats = '';\r\n }\r\n }\r\n\r\n setActiveNav(name) {\r\n switch (name) { \r\n case 'default':\r\n this.setActiveCategory('default');\r\n this.setActiveProductGroup('default');\r\n this.setCurrentAuthor('default');\r\n break;\r\n case 'authors':\r\n this.setCurrentAuthor(999);\r\n this.setActiveProductGroup(99);\r\n break;\r\n default:\r\n }\r\n \r\n }\r\n\r\n setActiveSubCategory(name) {\r\n this.app_interface.active_subcategory_name = name;\r\n this.active_subcategory = name;\r\n }\r\n\r\n setActiveProductGroup(name) {\r\n this.app_interface.active_product_group = name;\r\n this.active_product_group = name;\r\n }\r\n\r\n setActiveSubGroup(name) {\r\n this.app_interface.active_subgroup = name;\r\n this.active_subgroup = name;\r\n }\r\n\r\n setActiveSearchSegment(id) {\r\n this.app_interface.active_search_segment = id;\r\n }\r\n\r\n setContentComponent(comp) {\r\n this.content_component = comp;\r\n return true;\r\n }\r\n\r\n setCurrentAuthor(id) {\r\n this.app_interface.current_author = id;\r\n }\r\n\r\n setCurrentBook(sku) {\r\n this.app_interface.current_book = sku;\r\n }\r\n\r\n setDirectLogin(login) {\r\n this.app_interface.login_direct = login;\r\n }\r\n\r\n setHeightFooter(num) {\r\n this.app_interface.height_footer = num;\r\n }\r\n\r\n setHeightHeader(num) {\r\n this.app_interface.height_header = num;\r\n }\r\n\r\n setPageView(key, value) {\r\n this.page_view[key] = value;\r\n\r\n if (key == 'page' && value == 1) {\r\n this.page_view['rangeFrom'] = 1;\r\n this.page_view['rangeTo'] = 6;\r\n }\r\n }\r\n\r\n setPartnerCode(code) {\r\n this.app_interface.partner_code = code;\r\n }\r\n\r\n setTemplateView(view) {\r\n if (view) {\r\n this.templateView = view;\r\n } else {\r\n this.templateView = '';\r\n }\r\n }\r\n\r\n setUseCase(type) {\r\n this.app_interface.use_case = type;\r\n }\r\n\r\n setUseCaseOrder(type) {\r\n this.app_interface.use_case_order = type;\r\n }\r\n\r\n setActiveTab(name) {\r\n this.app_interface.active_tab = name;\r\n }\r\n\r\n setActiveVideo(idx) {\r\n this.active_video = idx;\r\n }\r\n\r\n setActiveVideoPlaying(value) {\r\n this.active_video_playing = value;\r\n }\r\n\r\n setActiveVideoLocation(value) {\r\n this.active_video_location = value;\r\n }\r\n\r\n setActiveVideoDialog = (value) => {\r\n this.isDialogVideoOpen = value;\r\n if (value === false) {\r\n this.setActiveVideoLocation('list');\r\n } else {\r\n this.setActiveVideoLocation('popup');\r\n }\r\n }\r\n\r\n setActiveVideoCC(cc) {\r\n this.active_video_cc = cc;\r\n }\r\n\r\n setOrderToProcess(order_id, order_total) {\r\n this.order_to_process = {\r\n id: order_id,\r\n total: order_total,\r\n payment_id: 'IDEAL',\r\n payment_method_id: 0,\r\n issuer_code: 9999\r\n };\r\n }\r\n\r\n setOrderToProcessKey(key, value) {\r\n this.order_to_process[key] = value;\r\n }\r\n\r\n async retrievePassword(formControls, sms_count) {\r\n this.storeGeneral.startLoader();\r\n try {\r\n let returnData = await account.retrievePassword(formControls.email.value, formControls.sms.value, sms_count);\r\n runInAction(() => {\r\n console.log('SbC returnData', returnData)\r\n if (!('error' in returnData.msg)) {\r\n this.form_feedback = returnData.msg.fb;\r\n } else {\r\n this.form_feedback = returnData.msg;\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async checkPassword(id, email, pw) {\r\n let valid;\r\n\r\n this.storeGeneral.startLoader();\r\n try {\r\n let returnData = await account.checkPw(id, email, pw);\r\n runInAction(() => {\r\n valid = returnData.data\r\n return valid;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n return valid;\r\n }\r\n\r\n async sendFormReview(isbn, book_title, form_values, upload_file, loggedin, account_id) {\r\n const book_data = {\r\n isbn: isbn,\r\n title: book_title\r\n }\r\n const form_data = {\r\n from_firstname: form_values['firstname'].value,\r\n from_lastname: form_values['lastname'].value,\r\n from_email: form_values['email'].value,\r\n //profession: form_values['profession'].value,\r\n //website: form_values['website'].value,\r\n profile: form_values['profile'].value,\r\n review_title: form_values['review_title'].value,\r\n review: form_values['review'].value,\r\n account_id: account_id,\r\n show_firstname: form_values['show_firstname'].value,\r\n show_lastname: form_values['show_lastname'].value,\r\n show_profession: form_values['show_profession'].value,\r\n show_website: form_values['show_website'].value,\r\n show_profile: form_values['show_profile'].value\r\n }\r\n\r\n this.storeGeneral.startLoader();\r\n try {\r\n const returnData = await forms.sendFormReview('review', book_data, form_data, upload_file);\r\n runInAction(() => {\r\n this.form_feedback = returnData.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async addReview(isbn, book_title, form_values, upload_file, loggedin, account_id) {\r\n const book_data = {\r\n isbn: isbn,\r\n title: book_title\r\n }\r\n const form_data = {\r\n from_firstname: form_values['firstname'].value,\r\n from_lastname: form_values['lastname'].value,\r\n from_email: form_values['email'].value,\r\n //profession: form_values['profession'].value,\r\n //website: form_values['website'].value,\r\n profile: form_values['profile'].value,\r\n review_title: form_values['review_title'].value,\r\n review: form_values['review'].value,\r\n account_id: account_id,\r\n show_firstname: form_values['show_firstname'].value,\r\n show_lastname: form_values['show_lastname'].value,\r\n show_profession: form_values['show_profession'].value,\r\n show_website: form_values['show_website'].value,\r\n show_profile: form_values['show_profile'].value\r\n }\r\n try {\r\n const returnData = await catalog.addReview('review', book_data, form_data, upload_file);\r\n runInAction(() => {\r\n\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n\r\n }\r\n }\r\n\r\n async sendFormPress(form_values, to_email, book) {\r\n const form_data = {\r\n to_email: to_email,\r\n from_firstname: form_values['firstname'].value,\r\n from_lastname: form_values['lastname'].value,\r\n from_email: form_values['email'].value,\r\n phonenr: form_values['phonenr'].value,\r\n address: form_values['address'].value,\r\n housenr: form_values['housenr'].value,\r\n zipcode: form_values['zipcode'].value,\r\n city: form_values['city'].value,\r\n media: form_values['media'].value,\r\n requested_sku: book.sku,\r\n requested_title: book.title,\r\n content: form_values['remark'].value\r\n }\r\n this.storeGeneral.startLoader();\r\n try {\r\n const returnData = await forms.sendFormPress('press', form_data);\r\n runInAction(() => {\r\n this.form_feedback = returnData.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async sendFormSendToFriend(form_values, book) {\r\n let relations = [];\r\n\r\n form_values['relations'].map((relation, i) => {\r\n let new_rel = {};\r\n new_rel.firstname = relation.firstname.value;\r\n new_rel.lastname = relation.lastname.value;\r\n new_rel.email = relation.email.value;\r\n relations.push(new_rel);\r\n });\r\n\r\n const form_data = {\r\n to_relations: relations,\r\n from_firstname: form_values['firstname'].value,\r\n from_lastname: form_values['lastname'].value,\r\n from_email: form_values['email'].value,\r\n content: form_values['message'].value,\r\n partner_code: form_values['partner_code'].value\r\n }\r\n this.storeGeneral.startLoader();\r\n try {\r\n const returnData = await forms.sendFormSendToFriend('sendtofriend', form_data, book);\r\n runInAction(() => {\r\n this.form_feedback = returnData.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n setNavMobile(state) {\r\n if (state != undefined) {\r\n this.app_interface.nav_mobile = state;\r\n } else {\r\n this.app_interface.nav_mobile = !this.app_interface.nav_mobile;\r\n }\r\n }\r\n\r\n async checkShopForCategory(cat) {\r\n let data;\r\n if (cat !== undefined) {\r\n try {\r\n const returnData = await categories.checkShopForCategory(cat);\r\n runInAction(() => {\r\n if (Array.isArray(returnData.data)) {\r\n data = returnData.data[0];\r\n } else {\r\n data = returnData.data;\r\n }\r\n this.active_category_display_value = data.display_value;\r\n return data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n } else {\r\n data = \"SHOP_SB\";\r\n }\r\n\r\n return data;\r\n }\r\n\r\n async checkShopForSubCategory(cat) {\r\n let data;\r\n if (cat !== undefined) {\r\n try {\r\n const returnData = await categories.checkShopForSubCategory(cat);\r\n runInAction(() => {\r\n if (Array.isArray(returnData.data)) {\r\n data = returnData.data[0];\r\n } else {\r\n data = returnData.data;\r\n }\r\n this.active_subcategory_display_value = data.display_value;\r\n return data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n } else {\r\n data = \"SHOP_SB\";\r\n }\r\n\r\n return data;\r\n }\r\n\r\n async checkShopForSku(sku) {\r\n let data;\r\n try {\r\n const returnData = await books.checkShopForSku(sku);\r\n runInAction(() => {\r\n data = returnData.data.shop;\r\n this.storeGeneral.setShop(data);\r\n return data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return data;\r\n }\r\n\r\n async getShopForSku(sku) {\r\n let data;\r\n try {\r\n const returnData = await books.checkShopForSku(sku);\r\n runInAction(() => {\r\n data = returnData.data.shop;\r\n return data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return data;\r\n }\r\n\r\n /*\r\n * SbC replace by direct fetch from table\r\n */\r\n async getBookCountForCategory(cat) {\r\n const shop = this.storeGeneral.shop;\r\n\r\n let stockPriority = this.stockPriority;\r\n \r\n try {\r\n const returnData = await booklists.getBookCountForCategory(shop, cat, stockPriority);\r\n runInAction(() => {\r\n this.count_total = returnData.data;\r\n this.setPageView('total', this.count_total);\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getProductCountForCategory(cat) {\r\n try {\r\n const returnData = await products.getProductCountForCategory(cat);\r\n runInAction(() => {\r\n this.count_total = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getProductCountForSubGroup(group, subgroup) {\r\n try {\r\n const returnData = await products.getProductCountForSubGroup(group, subgroup);\r\n runInAction(() => {\r\n this.count_total = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getBookCountForSubCategory(shop, cat, subcat) {\r\n let result;\r\n\r\n let stockPriority = this.stockPriority;\r\n\r\n try {\r\n const returnData = await booklists.getBookCountForSubCategory(shop, cat, subcat, stockPriority);\r\n runInAction(() => {\r\n this.count_total = returnData.data;\r\n result = returnData.data\r\n this.setPageView('total', this.count_total);\r\n\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async getBookCountForLanguage(lang) {\r\n const shop = this.storeGeneral.shop;\r\n try {\r\n const returnData = await booklists.getBookCountForLanguage(shop, lang);\r\n runInAction(() => {\r\n this.count_total = returnData.data;\r\n this.count_total_lang = returnData.data;\r\n this.setPageView('total', returnData.data);\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getBookCountForBooksNew(view, page_view) {\r\n const shop = this.storeGeneral.shop;\r\n let count;\r\n try {\r\n const returnData = await booklists.getBookCountForBooksNew(shop, view, page_view);\r\n runInAction(() => {\r\n this.count_total = returnData.data;\r\n count = returnData.data;\r\n return count;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return count;\r\n }\r\n\r\n // async getBookCountForAuthor(shop, str) {\r\n // // try {\r\n // // const returnData = await authors.getBookCountForAuthor2(shop, str);\r\n // // runInAction(() => { \r\n // // this.count_total = returnData.data;\r\n // // this.setPageView('total', this.count_total);\r\n // // })\r\n // // } catch (error) {\r\n // // runInAction(() => {\r\n // // this.state = \"error\"\r\n // // })\r\n // // } finally {\r\n\r\n // // }\r\n // }\r\n\r\n async getBookCountForBooksSB(shop, page_view) {\r\n try {\r\n const returnData = await booklists.getBookCountForBooksSB(shop, page_view);\r\n runInAction(() => { \r\n if (returnData.data !== null) {\r\n this.count_total = returnData.data; \r\n this.setPageView('total', this.count_total);\r\n } else {\r\n this.count_total = 0;\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n\r\n }\r\n }\r\n\r\n getBookCountForAuthor = async(shop, str) => {\r\n let count;\r\n \r\n try {\r\n const returnData = await authors.getBookCountForAuthorSimple(shop, str);\r\n runInAction(() => { \r\n count = returnData.data;\r\n\r\n //SbC REVIEW\r\n //gives wrong count in count summaries in \r\n\r\n //this.count_total = returnData.data;\r\n //this.setPageView('total', this.count_total);\r\n this.setPageView('total', returnData.data);\r\n return count;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n\r\n }\r\n return count;\r\n }\r\n\r\n returnBookCountForAuthorSimple(shop, str) {\r\n let count = 0;\r\n\r\n const author = str.split(\" \");\r\n const firstname = author[0];\r\n const lastname = author[author.length - 1];\r\n\r\n const list = this.storeCatalogs.listAuthors;\r\n\r\n const keyToCheck1 = \"firstname\";\r\n const keyToCheck2 = \"lastname\";\r\n const value1ToMatch = firstname;\r\n const value2ToMatch = lastname;\r\n\r\n if (list) {\r\n list.forEach(obj => {\r\n if (obj[keyToCheck1] === value1ToMatch && obj[keyToCheck2] === value2ToMatch) {\r\n count = obj['bookCountTotal'];\r\n } \r\n });\r\n }\r\n\r\n return count;\r\n }\r\n\r\n returnBookCountForCategorySimple(shop, cat, stock) {\r\n let count = 0;\r\n\r\n const list = this.storeCatalogs.listCategories;\r\n const valueToMatch = cat;\r\n\r\n if (shop === 'SHOP_SB') {\r\n const keyToCheck = \"category\";\r\n\r\n if (list) {\r\n list.forEach(obj => {\r\n if (obj[keyToCheck] === valueToMatch) {\r\n if (stock === true || parseInt(stock) === 1) {\r\n count = obj['bookCountSBStock'];\r\n } else {\r\n count = obj['bookCountSB'];\r\n }\r\n } \r\n });\r\n }\r\n }\r\n\r\n if (shop === 'SHOP_ALL') {\r\n const keyToCheck = \"description\";\r\n\r\n if (list) {\r\n list.forEach(obj => {\r\n if (obj[keyToCheck] === valueToMatch) {\r\n if (stock === true || parseInt(stock) === 1) {\r\n count = obj['bookCountAllStock'];\r\n } else {\r\n count = obj['bookCountAll'];\r\n }\r\n } \r\n });\r\n }\r\n }\r\n\r\n this.setCountTotal(count);\r\n\r\n return count;\r\n }\r\n\r\n async getMainCategory(shop, cat) {\r\n let cat_main;\r\n try {\r\n const returnData = await categories.getMainCategory(shop, cat);\r\n runInAction(() => {\r\n cat_main = returnData.data;\r\n \r\n this.active_category = cat_main[0].category;\r\n this.active_category_display_value = cat_main[0].display_value;\r\n this.active_subcats = cat_main[0].category;\r\n\r\n return cat_main;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return cat_main;\r\n }\r\n\r\n async returnMainCategory(shop, cat) {\r\n let cat_main;\r\n try {\r\n const returnData = await categories.getMainCategory(shop, cat);\r\n runInAction(() => {\r\n cat_main = returnData.data;\r\n return cat_main;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return cat_main;\r\n }\r\n\r\n getCarousel() {\r\n let value;\r\n if (localStorage.getItem('SB_CAROUSEL')) {\r\n value = localStorage.getItem('SB_CAROUSEL');\r\n } else {\r\n value = 'play';\r\n this.setCarousel(value);\r\n }\r\n this.carousel_home = value;\r\n this.carousel_home_class = \"--\" + value;\r\n return value;\r\n }\r\n\r\n setCarousel(play) {\r\n this.carousel_home = play;\r\n this.carousel_home_class = \"--\" + play;\r\n localStorage.setItem('SB_CAROUSEL', play);\r\n }\r\n\r\n async getSearchCount(search_value, section, alternative) {\r\n if (search_value !== '' && search_value !== undefined) {\r\n const skuSoon = this.storeGeneral.settings_list.skuSoonAvailable;\r\n\r\n try {\r\n const returnData = await search.getSearchCount(search_value, section, this.page_view, skuSoon);\r\n runInAction(() => {\r\n // if (alternative) {\r\n // this.search_count_alternative = returnData.data;\r\n // this.search_count = null;\r\n // } else {\r\n // this.search_count_alternative = null;\r\n // this.search_count = returnData.data; \r\n // }\r\n if (returnData.data !== null) {\r\n //if (section === this.storeGeneral.searchShop) {\r\n //this.count_total = returnData.data;\r\n //}\r\n this.search_count_all = returnData.data;\r\n this.setPageView('total', returnData.data)\r\n } else {\r\n this.count_total = 0;\r\n this.search_count_all = 0;\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n } else {\r\n this.count_total = 0;\r\n this.search_value = '';\r\n }\r\n }\r\n\r\n async getSearchCountSB(search_value, section, alternative) {\r\n if (search_value !== '' && search_value !== null && search_value !== undefined) {\r\n let value;\r\n //SbC check...\r\n if (search_value) {\r\n value = search_value;\r\n } else {\r\n value = this.search_value;\r\n }\r\n //** */\r\n\r\n value = this.search_value;\r\n const skuSoon = this.storeGeneral.settings_list.skuSoonAvailable;\r\n\r\n try {\r\n const returnData = await search.getSearchCountSB(value, section, this.page_view, skuSoon);\r\n runInAction(() => {\r\n if (alternative) {\r\n this.search_count_alternative = returnData.data;\r\n this.search_count = null;\r\n } else {\r\n this.search_count_alternative = null;\r\n this.search_count = returnData.data;\r\n }\r\n if (returnData.data !== null) {\r\n this.count_total = returnData.data;\r\n if (section === 'sb') {\r\n this.search_count_own = returnData.data;\r\n } else {\r\n this.search_count_sb = returnData.data;\r\n }\r\n this.count_total = returnData.data;\r\n this.setPageView('total', returnData.data)\r\n } else {\r\n if (section === 'sb') {\r\n this.search_count_own = 0;\r\n } else {\r\n this.search_count_sb = 0;\r\n }\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n } else {\r\n this.search_count = 0;\r\n this.count_total = 0;\r\n this.search_value = '';\r\n }\r\n }\r\n\r\n setStockPriority(value) {\r\n this.stockPriority = value;\r\n }\r\n\r\n setSearchValue(value) {\r\n this.search_value = value.trim();\r\n }\r\n\r\n setSearchOverlay(value) {\r\n const env = process.env.REACT_APP_ENV;\r\n this.search_overlay = value;\r\n\r\n if (env === 'prod' && !value && this.search_value !== '' && this.search_value !== this.search_value_saved) {\r\n this.search_value_saved = this.search_value;\r\n this.saveSearchQuery(this.search_value);\r\n }\r\n }\r\n\r\n resetSearchOverlayValues() {\r\n //this.search_results_alternative = null;\r\n //this.search_count_alternative = 0;\r\n }\r\n\r\n setSearchInputFocus(value) {\r\n this.search_input_focus = value;\r\n }\r\n\r\n setSearchInputRef(value) {\r\n this.search_inputRef = value;\r\n }\r\n\r\n setSearchInputFieldRef(value) {\r\n this.search_inputfieldRef = value;\r\n }\r\n\r\n setSearchOverlayRef(value) {\r\n this.search_overlayRef = value;\r\n }\r\n\r\n setWrapperRef(value) {\r\n this.wrapperRef = value;\r\n }\r\n\r\n setSearchFeedback(bool) {\r\n this.searchFeedback = bool;\r\n }\r\n\r\n setFoldout(list, value) {\r\n switch(list) {\r\n case \"top10\":\r\n this.foldout.top10 = value;\r\n break;\r\n case \"top60\":\r\n this.foldout.top60 = value\r\n default:\r\n }\r\n }\r\n\r\n async getShortUrl(sku, params) {\r\n let url;\r\n try {\r\n const returnData = await content.getShortUrl(sku, params);\r\n runInAction(() => {\r\n url = returnData;\r\n return url;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return url;\r\n }\r\n\r\n setActiveNewsletter(newsletter) {\r\n this.newsletter_active = newsletter;\r\n }\r\n\r\n reloadOrderLines(reload) {\r\n this.app_interface.reload = reload;\r\n }\r\n\r\n setCountTotal(value) {\r\n this.count_total = value;\r\n }\r\n}\r\n\r\n\r\ndecorate(StoreUi, {\r\n app_interface: observable,\r\n active_category: observable,\r\n active_category_display_value: observable,\r\n active_language: observable,\r\n active_nav: observable,\r\n active_nur: observable,\r\n active_subcategory: observable,\r\n active_subcats: observable,\r\n active_product: observable,\r\n active_togglenav: observable,\r\n active_sbnav: observable,\r\n active_subnav: observable,\r\n active_video: observable,\r\n active_video_cc: observable,\r\n active_video_playing: observable,\r\n active_video_location: observable,\r\n carousel_home: observable,\r\n carousel_home_class: observable,\r\n content_component: observable,\r\n content_text: observable,\r\n cookie_duration: observable,\r\n count_total: observable,\r\n features_list: observable,\r\n featureAll: observable,\r\n foldout: observable,\r\n form_feedback: observable,\r\n freezePaging: observable,\r\n freezeScrolling: observable,\r\n isDialogContentOpen: observable,\r\n isDialogVideoOpen: observable,\r\n list_languages: observable,\r\n newsletters: observable,\r\n newsletter_active: observable,\r\n payment_providers: observable,\r\n userDiscounts: observable,\r\n quote: observable,\r\n banner: observable,\r\n notifications: observable,\r\n order_to_process: observable,\r\n page_view: observable,\r\n payment_status: observable,\r\n scrollPos: observable,\r\n search_intentions: observable,\r\n search_inputRef: observable,\r\n search_input_focus: observable,\r\n search_overlay: observable,\r\n search_overlayRef: observable,\r\n search_results: observable,\r\n search_results_simple: observable,\r\n\r\n search_results_simple_own: observable,\r\n search_results_simple_sb: observable,\r\n search_results_simple_all: observable,\r\n\r\n searchTopItemTitle: observable,\r\n searchTopItemTitleSku: observable,\r\n searchTopItemScore: observable,\r\n\r\n search_results_alternative: observable,\r\n \r\n search_results_own: observable,\r\n search_results_sb: observable,\r\n search_results_all: observable,\r\n\r\n search_results_newsletter: observable,\r\n\r\n search_count: observable,\r\n search_count_alternative: observable,\r\n search_count_own: observable,\r\n search_count_sb: observable,\r\n search_count_all: observable,\r\n search_value: observable,\r\n search_value_saved: observable,\r\n searchFeedback: observable,\r\n settings_list: observable,\r\n social_links: observable,\r\n stockPriority: observable,\r\n templateView: observable,\r\n toggle_nav: observable,\r\n wrapperRef: observable,\r\n videos: observable,\r\n addReview: action,\r\n checkCookies: action,\r\n checkFeature: action,\r\n checkFile: action,\r\n checkIfNURCategory: action,\r\n checkPassword: action,\r\n checkVATNumber: action,\r\n checkShopForCategory: action,\r\n checkShopForSubCategory: action,\r\n checkShopForSku: action,\r\n clearFormFeedback: action,\r\n closeDialog: action,\r\n closeDialogContent: action,\r\n closeDialogDelete: action,\r\n closeDialogFeedbackForm: action,\r\n closeDialogNewsletter: action,\r\n closeDialogNotifications: action,\r\n closeDialogVideo: action,\r\n closeDialogWishList: action,\r\n copyCoverForSharing: action,\r\n getBanner: action,\r\n getBookCountForAuthor: action,\r\n getBookCountForCategory: action,\r\n getBookCountForSubCategory: action,\r\n getBookCountForLanguage: action,\r\n getBookCountForBooksNew: action,\r\n getBookCountForBooksSB: action,\r\n getCarousel: action,\r\n getElevatedSku: action,\r\n getMainCategory: action,\r\n getProductCountForCategory: action,\r\n getProductCountForSubGroup: action,\r\n getContentText: action,\r\n getNewsletters: action,\r\n getProductDiscount: action,\r\n getQuote: action,\r\n getSearchCount: action,\r\n getSearchCountSB: action,\r\n getSearchResults: action,\r\n getSearchResultsSB: action,\r\n getSearchResultsSimple: action,\r\n getSearchIntentions: action,\r\n getShortUrl: action,\r\n getTooltip: action,\r\n getUserDiscounts: action,\r\n getVideos: action,\r\n getVideoById: action,\r\n getVideoByReference: action,\r\n openDialog: action,\r\n openDialogContent: action,\r\n openDialogDelete: action,\r\n openDialogFeedbackForm: action,\r\n openDialogNewsletter: action,\r\n openDialogNotifications: action,\r\n openDialogVideo: action,\r\n openDialogWishList: action,\r\n redirectISBN: action,\r\n reloadOrderLines: action,\r\n resetSearchOverlayValues: action,\r\n retrievePassword: action,\r\n returnBookCountForAuthorSimple: action,\r\n saveSearchQuery: action,\r\n sendFormSendToFriend: action,\r\n sendFormPress: action,\r\n sendFormReview: action,\r\n setAccountView: action,\r\n setActiveNav: action,\r\n setActiveGenre: action,\r\n setActiveCategory: action,\r\n setActiveCategoryDisplayValue: action,\r\n setActiveSubCats: action,\r\n setActiveLanguage: action,\r\n setActiveMainNav: action,\r\n setActiveNewsletter: action,\r\n setActiveProductGroup: action,\r\n setActiveSubCategory: action,\r\n setActiveSubGroup: action,\r\n setActiveSearchSegment: action,\r\n setActiveToggleNav: action,\r\n setActiveSubNav: action,\r\n setActiveTab: action,\r\n setActiveVideo: action,\r\n setActiveVideoCC: action,\r\n setCarousel: action,\r\n setContentComponent: action,\r\n setCookies: action,\r\n setCurrentAuthor: action,\r\n setDirectLogin: action,\r\n setFeatureAll: action,\r\n setFoldout: action,\r\n setFreezePaging: action,\r\n setFreezeScrolling: action,\r\n setFreezePos: action,\r\n setOrderToProcess: action,\r\n setOrderToProcessKey: action,\r\n setPageView: action,\r\n setReturnState: action,\r\n setCurrentBook: action,\r\n setSearchFeedback: action,\r\n setSearchInputFocus: action,\r\n setSearchInputRef: action,\r\n setSearchOverlayRef: action,\r\n setSearchOverlay: action,\r\n setSearchResultsSimple: action,\r\n setShowSubCats: action,\r\n setShowSubGroups: action,\r\n setFormFeedback: action,\r\n setHeightFooter: action,\r\n setHeightHeader: action,\r\n setNavMobile: action,\r\n setSearchValue: action,\r\n setTemplateView: action,\r\n setUseCase: action,\r\n setUseCaseOrder: action,\r\n setWrapperRef: action,\r\n showTooltip: action,\r\n translateNURtoValue: action\r\n})\r\n\r\nexport default StoreUi;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as login from '../communicator/login';\r\n\r\nclass StoreAuth {\r\n user = {\r\n user_id: 0,\r\n is_loggedin: false,\r\n is_admin: false,\r\n is_reseller: false,\r\n is_partner: false,\r\n access_level: 0,\r\n no_shipping_costs: false\r\n }\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n async checkLogin(formControls) {\r\n let result;\r\n const data = {\r\n email: formControls.email.value,\r\n pw: formControls.password.value\r\n };\r\n \r\n try {\r\n const returnData = await login.checkLogin(data);\r\n runInAction(() => {\r\n result = returnData.data[0];\r\n if (!('error' in result)) {\r\n this.user.user_id = result.id;\r\n this.user.access_level = result.access_level;\r\n this.user.is_loggedin = true;\r\n this.user.is_admin = (result.admin === \"on\" || result.admin === \"1\")\r\n ? true\r\n : false\r\n this.user.is_partner = (result.is_partner === \"on\" || result.is_partner === \"1\")\r\n ? true\r\n : false\r\n this.user.is_reseller = (result.is_reseller === \"on\" || result.is_reseller === \"1\")\r\n ? true\r\n : false\r\n this.user.no_shipping_costs = (result.no_shipping_costs === \"on\" || result.no_shipping_costs === \"1\")\r\n ? true\r\n : false\r\n } else {\r\n this.user.is_loggedin = false;\r\n }\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.user.is_loggedin = false;\r\n })\r\n }\r\n\r\n return result;\r\n }\r\n\r\n refreshAuth(data) {\r\n if ('is_partner' in data) {\r\n this.user.is_partner = ((data.is_partner === \"on\" || data.is_partner === \"1\") && data.partner_code !== '')\r\n ? true\r\n : false\r\n }\r\n }\r\n\r\n setAuth(data) {\r\n if ('id' in data) {\r\n this.user.user_id = data.id;\r\n };\r\n if ('user_id' in data) {\r\n this.user.user_id = data.user_id;\r\n };\r\n this.user.access_level = data.access_level;\r\n if ('user_id' !== '' && 'user_id' !== '0' && 'user_id' !== 0) {\r\n this.user.is_loggedin = true;\r\n }\r\n if ('is_loggedin' in data) {\r\n this.user.is_loggedin = data.is_loggedin;\r\n }\r\n if ('is_admin' in data) {\r\n this.user.is_admin = (data.is_admin === \"on\" || data.is_admin === \"1\" || data.is_admin === true)\r\n ? true\r\n : false\r\n }\r\n if ('admin' in data) {\r\n this.user.is_admin = (data.admin === \"on\" || data.admin === \"1\")\r\n ? true\r\n : false\r\n }\r\n this.user.is_partner = data.is_partner;\r\n this.user.is_reseller = data.is_reseller;\r\n if ('no_shipping_costs' in data) {\r\n this.user.no_shipping_costs = data.no_shipping_costs;\r\n }\r\n }\r\n\r\n setLoginState(login) {\r\n this.user.is_loggedin = login;\r\n\r\n if (!login) {\r\n this.setLogoutState();\r\n }\r\n }\r\n\r\n setLogoutState() {\r\n this.user.user_id = 0;\r\n this.user.access_level = 0;\r\n this.user.is_loggedin = false;\r\n this.user.is_admin = false;\r\n this.user.is_partner = false;\r\n this.user.is_reseller = false;\r\n this.user.partner_status = '';\r\n this.user.no_shipping_costs = 0;\r\n }\r\n}\r\n\r\ndecorate(StoreAuth, {\r\n user: observable,\r\n checkLogin: action,\r\n refreshAuth: action,\r\n setAuth: action,\r\n setLoginState: action,\r\n setLogoutState: action\r\n})\r\n\r\nexport default StoreAuth;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as account from '../communicator/account';\r\n\r\nfunction autoSave(store, save) {\r\n mobx.autorun(() => {\r\n const json = JSON.stringify(mobx.toJS(store));\r\n save(json);\r\n });\r\n}\r\n\r\nclass StoreHistory {\r\n listRecentlyViewed = {\r\n 'anonymous': [],\r\n 'user': []\r\n }\r\n\r\n constructor(storeRoot) {\r\n this.retrieveRecentlyViewed(0);\r\n\r\n autoSave(this.listRecentlyViewed, this.save.bind(this));\r\n }\r\n\r\n save(json) {\r\n this.saveToLS(json);\r\n }\r\n\r\n saveToLS(json) {\r\n localStorage.setItem('SB_RECENTLYVIEWED20', json)\r\n }\r\n\r\n retrieveRecentlyViewed(id) {\r\n if (localStorage.getItem('SB_RECENTLYVIEWED20')) {\r\n this.listRecentlyViewed = JSON.parse(localStorage.getItem('SB_RECENTLYVIEWED20'));\r\n } else {\r\n this.listRecentlyViewed = {\r\n 'anonymous': [],\r\n 'user': []\r\n };\r\n }\r\n if (this.listRecentlyViewed == null) {\r\n this.listRecentlyViewed = {\r\n 'anonymous': [],\r\n 'user': []\r\n };\r\n }\r\n }\r\n\r\n addToRecentlyViewed(sku, id) {\r\n let items = [];\r\n\r\n if (id !== undefined && id !== 0) {\r\n items = this.listRecentlyViewed.user;\r\n } else {\r\n items = this.listRecentlyViewed.anonymous;\r\n }\r\n\r\n if (!this.checkOnRecentlyViewed(id, sku)) {\r\n const itemViewed = {\r\n sku: sku\r\n }\r\n items.unshift(itemViewed);\r\n\r\n if (items.length > 5) {\r\n items.pop();\r\n }\r\n\r\n if (id !== undefined && id !== 0) {\r\n this.listRecentlyViewed.user = items;\r\n } else {\r\n this.listRecentlyViewed.anonymous = items;\r\n }\r\n\r\n if (id !== undefined && id !== 0) {\r\n //this.saveWishlistToDB(id, this.listRecentlyViewed);\r\n } else {\r\n this.saveRecentlyViewedToLS();\r\n }\r\n }\r\n }\r\n\r\n removeFromRecentlyViewed(sku, id) {\r\n let items;\r\n\r\n if (id !== undefined && id !== 0) {\r\n items = this.listRecentlyViewed.user;\r\n } else {\r\n items = this.listRecentlyViewed.anonymous;\r\n }\r\n\r\n const idx = items.findIndex(item => item.sku === sku);\r\n items.splice(idx, 1);\r\n\r\n if (id !== undefined && id !== 0) {\r\n this.listRecentlyViewed.user = items;\r\n } else {\r\n this.listRecentlyViewed.anonymous = items;\r\n }\r\n\r\n this.saveRecentlyViewedToLS();\r\n // if (id !== undefined && id !== 0) {\r\n // this.saveWishlistToDB(id, this.listRecentlyViewed.user);\r\n // }\r\n }\r\n\r\n checkOnRecentlyViewed = (id, sku) => {\r\n let items;\r\n let idx = -1;\r\n\r\n if (id !== undefined && id !== 0) {\r\n items = this.listRecentlyViewed.user;\r\n } else {\r\n items = this.listRecentlyViewed.anonymous;\r\n }\r\n\r\n if (items.length > 0) {\r\n idx = items\r\n .findIndex((item) => item.sku === sku);\r\n } else {\r\n idx = -1;\r\n }\r\n\r\n return (idx > -1) ? true : false;\r\n }\r\n\r\n saveRecentlyViewedToLS() {\r\n const json = JSON.stringify(this.listRecentlyViewed);\r\n localStorage.setItem('SB_RECENTLYVIEWED20', json)\r\n }\r\n\r\n}\r\n\r\ndecorate(StoreHistory, {\r\n listRecentlyViewed: observable,\r\n addToRecentlyViewed: action,\r\n removeFromRecentlyViewed: action,\r\n retrieveRecentlyViewed: action\r\n})\r\n\r\nexport default StoreHistory;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\nimport moment from \"moment\";\r\n\r\nimport * as account from '../communicator/account';\r\nimport * as tools from '../communicator/tools';\r\nimport * as login from '../communicator/login';\r\nimport * as sort from '../utilities/sort';\r\nimport * as ui from '../utilities/ui';\r\n\r\nfunction autoSave(store) {\r\n mobx.autorun(() => {\r\n const json = JSON.stringify(store.user_data);\r\n localStorage.setItem('APP_USER', json)\r\n });\r\n}\r\n\r\nclass StoreUser {\r\n user_data = { \r\n access_level: 0,\r\n user_id: 0,\r\n is_loggedin: false,\r\n is_reseller: false,\r\n is_partner: false,\r\n partner_status: '',\r\n partner_code: '',\r\n reseller_discount: 0,\r\n reseller_discount_3party: 0,\r\n error_login: false,\r\n profile: {\r\n firstname: '',\r\n lastname: '',\r\n email: '',\r\n phonenr: '',\r\n address: '',\r\n housenr: '',\r\n addition: '',\r\n zipcode: '',\r\n city: '',\r\n country: '',\r\n country_code: '',\r\n company: '',\r\n nrKvK: '',\r\n nrVAT: '',\r\n validVAT: false,\r\n has_subscription: 0\r\n },\r\n business: {\r\n company: '',\r\n nrKvK: '',\r\n nrVAT: '',\r\n validVAT: false\r\n },\r\n partner: {\r\n website: '',\r\n bank_account: '',\r\n account_holder: '',\r\n account_city: ''\r\n }\r\n }\r\n\r\n partner_data = {\r\n profile: {},\r\n business: {},\r\n password: {},\r\n partner: {}\r\n }\r\n\r\n user_settings = {}\r\n\r\n form_feedback = {}\r\n commission_orders = []\r\n commission_payouts = []\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeGeneral = this.storeRoot.storeGeneral;\r\n this.storeAuth = this.storeRoot.storeAuth;\r\n this.storePartners = this.storeRoot.storePartners;\r\n //this.storeUi = this.storeRoot.storeUi;\r\n this.getUserDataFromLS();\r\n autoSave(this);\r\n }\r\n\r\n save(json) {\r\n this.saveToLS(json);\r\n }\r\n\r\n saveToLS(json) {\r\n localStorage.setItem('APP_USER', json)\r\n }\r\n\r\n setLogoutState() {\r\n this.user_data.user_id = 0;\r\n this.user_data.access_level = 0;\r\n this.user_data.is_loggedin = false;\r\n this.user_data.is_admin = false;\r\n this.user_data.is_partner = false;\r\n this.user_data.is_reseller = false;\r\n this.user_data.partner_status = '';\r\n }\r\n\r\n getUserDataFromLS() {\r\n let data;\r\n let user_id = 0;\r\n if (localStorage.getItem('APP_USER')) {\r\n data = JSON.parse(localStorage.getItem('APP_USER'));\r\n if (data) {\r\n this.user_data = data;\r\n if (this.user_data.user_id !== 0) {\r\n user_id = this.user_data.user_id;\r\n }\r\n this.storeAuth.setAuth(data);\r\n } \r\n } \r\n return user_id;\r\n }\r\n\r\n clearFormFeedback() {\r\n this.form_feedback = {};\r\n }\r\n\r\n async getCommissions() {\r\n //const partner_code = this.user_data.partner_code;\r\n const userId = this.storeAuth.user.user_id;\r\n let commissions;\r\n\r\n try {\r\n let returnData = await account.getCommissionOrders(userId);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n this.commission_orders = returnData.data;\r\n commissions = returnData.data;\r\n return commissions;\r\n } else {\r\n this.commission_orders = [];\r\n commissions =[];\r\n return commissions;\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.storeAuth.setLoginState(false);\r\n this.setLoginState(false);\r\n })\r\n }\r\n\r\n return commissions;\r\n }\r\n\r\n async getPayouts() {\r\n const userId = this.storeAuth.user.user_id;\r\n let commission_payouts;\r\n\r\n try {\r\n let returnData = await account.getCommissionPayouts(userId);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n this.commission_payouts = returnData.data;\r\n commission_payouts = returnData.data\r\n return commission_payouts;\r\n } else {\r\n \r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.storeAuth.setLoginState(false);\r\n this.setLoginState(false);\r\n })\r\n }\r\n\r\n return commission_payouts;\r\n }\r\n\r\n setCommissionsOpen(commissions) {\r\n this.commissions_open = commissions;\r\n }\r\n\r\n commissionFee(order, amount, fee) {\r\n let commission = this.user_data.commission;\r\n if (fee === null || fee === '') {\r\n commission = 10;\r\n } else {\r\n commission = fee;\r\n }\r\n\r\n // const partnerFees = this.storePartners.partnerFees;\r\n // const idx = partnerFees\r\n // .findIndex((item) => parseInt(item.bookId) === parseInt(order.item_id));\r\n \r\n // if (idx !== -1) {\r\n // commission = parseInt(partnerFees[idx].percFee);\r\n // }\r\n\r\n let total = amount * (commission / 100);\r\n\r\n return total;\r\n }\r\n\r\n commissionOrderExclVat(amount, vat) {\r\n let total = amount / (1 + (vat / 100));\r\n return total;\r\n }\r\n\r\n commissionFeeInclVat(order, amount, fee) {\r\n let commission = this.user_data.commission;\r\n if (fee === null || fee === '') {\r\n commission = 10;\r\n }\r\n\r\n const partnerFees = this.storePartners.partnerFees;\r\n const idx = partnerFees\r\n .findIndex((item) => parseInt(item.bookId) === parseInt(order.item_id));\r\n \r\n if (idx !== -1) {\r\n commission = parseInt(partnerFees[idx].percFee);\r\n }\r\n\r\n let total = amount * (commission / 100);\r\n return total;\r\n }\r\n\r\n commissionPartnerInclVat(order, amount, fee) {\r\n let commission;\r\n\r\n if (fee === null || fee === '') {\r\n commission = 10;\r\n } else {\r\n commission = fee;\r\n }\r\n\r\n let total = amount * (commission / 100);\r\n return total;\r\n }\r\n\r\n commissionFeeExclVat(order, amount, fee, vat) {\r\n let commission = this.user_data.commission;\r\n if (fee === null || fee === '') {\r\n commission = 10;\r\n }\r\n\r\n const partnerFees = this.storePartners.partnerFees;\r\n const idx = partnerFees\r\n .findIndex((item) => parseInt(item.bookId) === parseInt(order.item_id));\r\n \r\n if (idx !== -1) {\r\n commission = parseInt(partnerFees[idx].percFee);\r\n }\r\n\r\n let total = (amount * (commission / 100)) / (1 + (vat / 100));\r\n return total;\r\n }\r\n\r\n commissionPartnerExclVat(order, amount, fee, vat) {\r\n let commission;\r\n \r\n if (fee === null || fee === '') {\r\n commission = 10;\r\n } else {\r\n commission = fee;\r\n }\r\n\r\n let total = (amount * (commission / 100)) / (1 + (vat / 100));\r\n return total;\r\n }\r\n\r\n get commissionTotalExclVat() {\r\n let total = 0; \r\n total = this.commissionTotalInclVat - (this.commissionTotalVatLow + this.commissionTotalVatHigh);\r\n return total;\r\n }\r\n\r\n get commissionTotalInclVat() {\r\n let total = 0;\r\n let fee = 0;\r\n\r\n this.commissions_open && this.commissions_open.map(order => {\r\n let amount = order.order_total;\r\n\r\n if (parseInt(order.item_discount) === 1) {\r\n fee = order.partner_perc_sb_current;\r\n if (fee === null || fee === '') {\r\n fee = 30;\r\n }\r\n } else {\r\n fee = order.partner_perc_3rd_current;\r\n if (fee === null || fee === '') {\r\n fee = 10;\r\n }\r\n };\r\n \r\n total = total + this.commissionFee(order, amount, fee)\r\n }) \r\n return total;\r\n }\r\n\r\n get commissionTotalVatLow() {\r\n let total = 0;\r\n let vat = 0;\r\n let fee = 0;\r\n let feePerc = 0;\r\n\r\n this.commissions_open && this.commissions_open.map(order => {\r\n if (order.order_vat == 6 || order.order_vat == 9) {\r\n if (parseInt(order.item_discount) === 1) {\r\n feePerc = order.partner_perc_sb_current;\r\n if (feePerc === null || feePerc === '') {\r\n feePerc = 30;\r\n }\r\n } else {\r\n feePerc = order.partner_perc_3rd_current;\r\n if (feePerc === null || feePerc === '') {\r\n feePerc = 10;\r\n }\r\n };\r\n\r\n fee = order.order_total * (feePerc/100);\r\n\r\n vat = parseFloat(fee) - parseFloat(fee / (1 + (order.order_vat/100)));\r\n total = total + vat;\r\n }\r\n }) \r\n\r\n return total;\r\n }\r\n\r\n get commissionTotalVatHigh() {\r\n let total = 0;\r\n let vat = 0;\r\n let fee = 0;\r\n let feePerc = 0;\r\n\r\n this.commissions_open && this.commissions_open.map(order => {\r\n if (order.order_vat == 19 || order.order_vat == 21) {\r\n if (order.item_discount === 1) {\r\n feePerc = order.partner_perc_sb_current;\r\n if (feePerc === null || feePerc === '') {\r\n feePerc = 30;\r\n }\r\n } else {\r\n feePerc = order.partner_perc_3rd_current;\r\n if (feePerc === null || feePerc === '') {\r\n feePerc = 10;\r\n }\r\n };\r\n\r\n fee = order.order_total * (feePerc/100);\r\n\r\n vat = parseFloat(fee) - parseFloat(fee / (1 + (order.order_vat/100)));\r\n total = total + vat;\r\n }\r\n }) \r\n return total;\r\n }\r\n\r\n get ordersTotalExclVat() {\r\n let total = 0;\r\n total = this.ordersTotalInclVat - (this.ordersTotalVatLow + this.ordersTotalVatHigh);\r\n return total;\r\n }\r\n\r\n get ordersTotalInclVat() {\r\n let total = 0;\r\n this.commissions_open && this.commissions_open.map(order => {\r\n total = total + parseFloat(order.order_total);\r\n }) \r\n return total;\r\n }\r\n\r\n get ordersTotalVatLow() {\r\n let total = 0;\r\n let vat = 0;\r\n this.commissions_open && this.commissions_open.map(order => {\r\n if (order.order_vat == 6 || order.order_vat == 9) {\r\n vat = parseFloat(order.order_total) - parseFloat(order.order_total / (1 + (order.order_vat/100)));\r\n total = total + vat;\r\n }\r\n }) \r\n return total;\r\n }\r\n\r\n get ordersTotalVatHigh() {\r\n let total = 0;\r\n let vat = 0;\r\n this.commissions_open && this.commissions_open.map(order => {\r\n if (order.order_vat === 19 || order.order_vat === 21) {\r\n vat = parseFloat(order.order_total) - parseFloat(order.order_total / (1 + (order.order_vat/100)));\r\n total = total + vat;\r\n }\r\n }) \r\n return total;\r\n }\r\n\r\n get payoutsTotalInclVat() {\r\n let total = 0;\r\n this.commission_payouts.map(payout => {\r\n total = total + parseFloat(payout.total);\r\n }) \r\n return total;\r\n }\r\n\r\n setLoginState(login) {\r\n this.user_data.is_loggedin = login;\r\n }\r\n\r\n resetUserData() {\r\n this.user_data.user_id = 0;\r\n this.user_data.partner_code = '';\r\n this.user_data.partner_start = '';\r\n this.user_data.is_loggedin = false;\r\n this.partner_status = '';\r\n this.user_data.profile = {\r\n firstname: '',\r\n lastname: '',\r\n email: '',\r\n phonenr: '',\r\n address: '',\r\n housenr: '',\r\n addition: '',\r\n zipcode: '',\r\n city: '',\r\n country: '',\r\n country_code: '',\r\n company: '',\r\n nrKvK: '',\r\n nrVAT: '',\r\n validVAT: false,\r\n has_subscription: 0\r\n };\r\n this.user_data.business = {\r\n company: '',\r\n nrKvK: '',\r\n nrVAT: '',\r\n validVAT: false\r\n };\r\n this.user_data.partner = {\r\n website: '',\r\n bank_account: '',\r\n account_holder: '',\r\n account_city: ''\r\n }\r\n }\r\n\r\n setUserData(data) {\r\n if (data.id) {\r\n this.user_data.user_id = data.id;\r\n this.user_data.access_level = data.access_level;\r\n if ('admin' in data) {\r\n this.user_data.is_admin = (data.admin === \"on\" || data.admin === \"1\")\r\n ? true\r\n : false\r\n }\r\n }\r\n\r\n const profile = {\r\n email: data.email,\r\n firstname: data.firstname,\r\n lastname: data.lastname,\r\n phonenr: data.phonenr,\r\n address: data.address,\r\n housenr: data.housenr,\r\n addition: data.addition,\r\n zipcode: data.zipcode,\r\n city: data.city,\r\n country: data.country !== null ? 'data.country' : 'Nederland',\r\n country_code: data.country_code !== null ? data.country_code : 'NL',\r\n company: data.company,\r\n nrKvK: data.nrKvK,\r\n nrVAT: data.nrVAT,\r\n validVAT: data.validVAT ? data.validVAT : false,\r\n has_subscription: data.has_subscription\r\n }\r\n\r\n const business = {\r\n company: data.company,\r\n nrKvK: data.nrKvK,\r\n nrVAT: data.nrVAT,\r\n nrVATFrom: data.nrVATFrom,\r\n nrVATUntil: data.nrVATUntil,\r\n validVAT: data.validVAT ? data.validVAT : false\r\n }\r\n\r\n const partner = {\r\n website: data.website,\r\n bank_account: data.bank_account,\r\n account_holder: data.account_holder,\r\n account_city: data.account_city\r\n }\r\n\r\n this.user_data.profile = profile;\r\n this.user_data.business = business;\r\n this.user_data.partner = partner;\r\n if (data.partner_code !== '' && data.partner_code !== null) {this.user_data.is_partner = \"on\"};\r\n this.user_data.partner_status = data.is_partner;\r\n this.user_data.partner_code = data.partner_code;\r\n this.user_data.partner_start = data.partner_start;\r\n \r\n this.user_data.discount = data.discount;\r\n this.user_data.discount_3party = data.discount_3party;\r\n if (this.storeAuth.user.is_reseller) this.user_data.reseller_discount = data.discount;\r\n if (this.storeAuth.user.is_reseller) this.user_data.reseller_discount_3party = data.discount_3party;\r\n \r\n this.user_data.commission = parseInt(data.commission);\r\n this.user_data.commission_current = parseInt(data.commission_current);\r\n this.user_data.commission_3party = parseInt(data.commission_3party);\r\n this.user_data.commission_3party_current = parseInt(data.commission_3party_current);\r\n }\r\n\r\n async registerClient(formControls) {\r\n // this.storeGeneral.startLoader();\r\n\r\n // try {\r\n // let returnData = await account.addUser(formControls.email.value, formControls.password.value, formControls.firstname.value, formControls.lastname.value, formControls.has_subscription.value, 'NL', formControls.phonenr.value);\r\n // runInAction(() => {\r\n // let data = returnData.data[0];\r\n // if (!('error' in data)) {\r\n // this.setLoginState(true);\r\n // this.storeAuth.setAuth(data);\r\n // this.setUserData(data);\r\n // this.form_feedback = returnData.msg;\r\n // } else {\r\n // this.storeAuth.setLoginState(false);\r\n // this.setLoginState(false);\r\n // } \r\n // })\r\n // } catch (error) {\r\n // runInAction(() => {\r\n // this.storeAuth.setLoginState(false);\r\n // this.setLoginState(false);\r\n // })\r\n // } finally {\r\n // this.storeGeneral.stopLoader();\r\n // }\r\n }\r\n\r\n async registerUser(formControls, form) {\r\n this.storeGeneral.startLoader();\r\n\r\n try {\r\n let returnData = await account.addUser(formControls, form);\r\n runInAction(() => {\r\n let data = returnData.data[0];\r\n if (!('error' in data)) {\r\n this.setLoginState(true);\r\n this.storeAuth.setAuth(data);\r\n this.setUserData(data);\r\n this.form_feedback = returnData.msg.fb;\r\n } else {\r\n this.storeAuth.setLoginState(false);\r\n this.setLoginState(false);\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.storeAuth.setLoginState(false);\r\n this.setLoginState(false);\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n setDataBusiness(form_data) {\r\n this.user_data.business['company'] = form_data.company.value;\r\n this.user_data.business['nrKvK'] = form_data.nrKvK.value;\r\n this.user_data.business['nrVAT'] = form_data.nrVAT.value;\r\n }\r\n\r\n async changeUserData(formControls) {\r\n let profile = formControls.profile.formControls;\r\n let password = formControls.password.formControls;\r\n let business = formControls.business.formControls;\r\n let partner = formControls.partner.formControls;\r\n\r\n let country;\r\n\r\n let idx = this.storeGeneral.countriesList.findIndex(country => country.code == profile.country_select.value);\r\n if (idx !== -1) {\r\n country = this.storeGeneral.countriesList[idx].displayValue;\r\n } else {\r\n country = profile.country_select.value;\r\n }\r\n\r\n let form_data = {\r\n firstname: profile.firstname.value,\r\n lastname: profile.lastname.value,\r\n address: profile.address.value,\r\n housenr: profile.housenr.value,\r\n addition: profile.addition.value,\r\n zipcode: profile.zipcode.value,\r\n city: profile.city.value,\r\n country: country,\r\n country_code: profile.country_select.value,\r\n has_subscription: profile.has_subscription.value,\r\n email: profile.email.value,\r\n phonenr: profile.phonenr.value,\r\n company: ('company' in business && business.company.value !== '') ? business.company.value : '',\r\n nrKvK: ('nrKvK' in business && business.nrKvK.value !== '') ? business.nrKvK.value : '',\r\n nrVAT: ('nrVAT' in business && business.nrVAT.value !== '') ? business.nrVAT.value : '',\r\n website: ('website' in partner && partner.website.value !== '') ? partner.website.value : '',\r\n bank_account: ('bank_account' in partner && partner.bank_account.value !== '') ? partner.bank_account.value : '',\r\n account_holder: ('account_holder' in partner && partner.account_holder.value !== '') ? partner.account_holder.value : '',\r\n account_city: ('account_city' in partner && partner.account_city.value !== '') ? partner.account_city.value : ''\r\n }\r\n\r\n if ('password' in password && password.password.value !== '' && formControls.password.formIsValid) {\r\n form_data.password = password.password.value;\r\n }\r\n\r\n try {\r\n let returnData = await account.editUser(this.user_data.user_id, form_data);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n this.setUserData(returnData.data[0]);\r\n this.form_feedback = returnData.data[1];\r\n //this.restoreFields();\r\n } else {\r\n //this.setLoginState(false);\r\n // this.setState({\r\n // error: true\r\n // })\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n //this.setLoginState(false);\r\n })\r\n }\r\n }\r\n\r\n async changeUserProfile(formControls) {\r\n let profile = formControls;\r\n let country;\r\n\r\n let idx = this.storeGeneral.countriesList.findIndex(country => country.code == formControls.country_select.value);\r\n if (idx !== -1) {\r\n country = this.storeGeneral.countriesList[idx].displayValue;\r\n } else {\r\n country = profile.country_select.value;\r\n }\r\n\r\n let form_data = {\r\n firstname: profile.firstname.value,\r\n lastname: profile.lastname.value,\r\n address: profile.address.value,\r\n housenr: profile.housenr.value,\r\n addition: profile.addition.value,\r\n zipcode: profile.zipcode.value,\r\n city: profile.city.value,\r\n country: country,\r\n country_code: profile.country_select.value,\r\n has_subscription: profile.has_subscription.value,\r\n email: profile.email.value,\r\n phonenr: profile.phonenr.value\r\n }\r\n\r\n try {\r\n let returnData = await account.editUserProfile(this.user_data.user_id, form_data);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n this.setUserData(returnData.data[0]);\r\n this.form_feedback = returnData.data[1];\r\n } else {\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n //this.setLoginState(false);\r\n })\r\n }\r\n }\r\n\r\n async changeBusinessProfile(formControls) {\r\n let business = formControls;\r\n\r\n let form_data = {\r\n company: business.company.value,\r\n nrKvK: business.nrKvK.value,\r\n nrVAT: business.nrVAT.value,\r\n }\r\n\r\n try {\r\n let returnData = await account.editBusinessProfile(this.user_data.user_id, form_data);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n //this.setUserData(returnData.data[0]);\r\n this.form_feedback = returnData.data[1];\r\n } else {\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n //this.setLoginState(false);\r\n })\r\n }\r\n }\r\n\r\n async checkEmailExists(email) {\r\n let emailAvailable;\r\n try {\r\n let returnData = await account.checkEmailExists(email);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n emailAvailable = true;\r\n return emailAvailable;\r\n } else {\r\n emailAvailable = false;\r\n return emailAvailable;\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n }\r\n return emailAvailable;\r\n }\r\n\r\n setPartnerData(section, formControls) {\r\n let data = {};\r\n Object.keys(formControls).map((key, i) => {\r\n data[key] = formControls[key].value;\r\n })\r\n this.partner_data[section] = data;\r\n }\r\n\r\n setPartnerDataExtra(data) {\r\n this.partner_data['extra'] = data;\r\n }\r\n\r\n async submitFormPartner() {\r\n this.storeGeneral.startLoader();\r\n\r\n if (this.storeAuth.user.is_loggedin) {\r\n try {\r\n let returnData = await account.editUserFromPartnerForm(this.user_data.user_id, this.partner_data);\r\n runInAction(() => {\r\n let data = returnData.data[0];\r\n if (!('error' in data)) {\r\n this.setUserData(data);\r\n this.storeAuth.setAuth(data);\r\n this.form_feedback = returnData.data[1];\r\n } else {\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n //this.setLoginState(false);\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n } else {\r\n try {\r\n let returnData = await account.addUserFromPartnerForm(this.partner_data);\r\n runInAction(() => {\r\n let data = returnData.data[0];\r\n if (!('error' in data)) {\r\n this.setLoginState(true);\r\n this.storeAuth.setAuth(data);\r\n this.setUserData(data);\r\n this.form_feedback.msg = returnData['msg'];\r\n } else {\r\n this.storeAuth.setLoginState(false);\r\n this.setLoginState(false);\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.storeAuth.setLoginState(false);\r\n this.setLoginState(false);\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n }\r\n\r\n async unSubscribe(email) {\r\n try {\r\n let returnData = await account.unSubscribe(email);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n this.form_feedback = returnData.data[0];\r\n } else {\r\n this.form_feedback = returnData.data[0];\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n } finally {\r\n\r\n }\r\n }\r\n\r\n async sendEmailUnSubscribe(email) {\r\n this.storeGeneral.startLoader();\r\n try {\r\n let returnData = await account.sendEmailUnSubscribe(email);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n this.form_feedback = returnData.data[0];\r\n } else {\r\n this.form_feedback = returnData.data[0];\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async getReviewerData() {\r\n let reviewer;\r\n let email = this.user_data.profile.email;\r\n\r\n this.storeGeneral.startLoader();\r\n try {\r\n let returnData = await account.getReviewerData(email);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n return reviewer = returnData.data;\r\n } else {\r\n\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n return reviewer;\r\n }\r\n\r\n async refreshUserData() {\r\n this.storeGeneral.startLoader();\r\n let id = this.user_data.user_id;\r\n let data;\r\n\r\n try {\r\n let returnData = await account.refreshUserData(id);\r\n runInAction(() => {\r\n data = returnData.data[0];\r\n if (!('error' in data)) {\r\n this.storeAuth.refreshAuth(data);\r\n //this.user_data.is_partner = ((data.is_partner === 'on' || data.is_partner === 1 || data.is_partner === '1') && data.partner_code !== '') ? true : false;\r\n this.user_data.partner_code = data.partner_code;\r\n this.user_data.partner_status = data.is_partner;\r\n this.user_data.discount = data.discount;\r\n this.user_data.discount_3party = data.discount3Party;\r\n } \r\n\r\n return data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n\r\n return data;\r\n }\r\n\r\n async checkSubscription(id) {\r\n let hasSubscription = 0;\r\n try {\r\n let returnData = await account.checkSubscription(id);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n if (returnData.data[0].has_subscription !== null) {\r\n hasSubscription = returnData.data[0].has_subscription;\r\n } else {\r\n hasSubscription = 0;\r\n }\r\n this.user_data.profile.has_subscription = hasSubscription;\r\n return hasSubscription;\r\n } else {\r\n this.form_feedback = returnData.data[0];\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n return hasSubscription;\r\n }\r\n}\r\n\r\ndecorate(StoreUser, {\r\n commission_orders: observable,\r\n commissions_open: observable,\r\n commission_payouts: observable,\r\n form_feedback: observable,\r\n partner_data: observable,\r\n user_data: observable,\r\n user_settings: observable,\r\n store_interface: observable,\r\n changeUserData: action,\r\n changeBusinessProfile: action,\r\n changeUserProfile: action,\r\n checkEmailExists: action,\r\n checkSubscription: action,\r\n clearFormFeedback: action,\r\n getCommissions: action,\r\n getPayouts: action,\r\n getReviewerData: action,\r\n getUserDataFromLS: action,\r\n refreshUserData: action,\r\n registerClient: action,\r\n registerUser: action,\r\n resetUserData: action,\r\n sendEmailUnSubscribe: action,\r\n setCommissionsOpen: action,\r\n submitFormPartner: action,\r\n setDataBusiness: action,\r\n setLoginState: action,\r\n setLogoutState: action,\r\n setPartnerData: action,\r\n setUserData: action,\r\n commissionFee: action,\r\n commissionFeeExclVat: action,\r\n commissionFeeInclVat: action,\r\n commissionOrderExclVat: action,\r\n commissionTotalExclVat: computed,\r\n commissionTotalInclVat: computed,\r\n commissionTotalVatLow: computed,\r\n commissionTotalVatHigh: computed,\r\n ordersTotalExclVat: computed,\r\n ordersTotalInclVat: computed,\r\n ordersTotalVatLow: computed,\r\n ordersTotalVatHigh: computed,\r\n payoutsTotalInclVat: computed,\r\n unSubscribe: action\r\n})\r\n\r\nexport default StoreUser;","export async function getGenres() {\r\n const urlAPI = process.env.REACT_APP_URL_API;\r\n const urlEndpoint = urlAPI + '/catalog/getGenres.php';\r\n\r\n try {\r\n let response = await fetch(urlEndpoint, {\r\n method: 'GET',\r\n headers: new Headers({\r\n \r\n }),\r\n });\r\n let responseJson = await response.json();\r\n if(responseJson !== null) {\r\n let arrData = [];\r\n arrData = responseJson;\r\n\r\n return arrData;\r\n }\r\n } catch (error) {\r\n console.log('SbC fetch error genres: ', error.message);\r\n }\r\n}\r\n\r\n\r\n\r\n","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\nimport moment from \"moment\";\r\n\r\nimport * as authors from '../communicator/authors';\r\nimport * as content from '../communicator/content';\r\nimport * as genres from '../communicator/genres';\r\nimport * as categories from '../communicator/categories';\r\nimport * as catalog from '../communicator/catalog';\r\nimport * as books from '../communicator/books';\r\nimport * as booklists from '../communicator/book-lists';\r\nimport * as products from '../communicator/products';\r\nimport * as settings from '../communicator/settings';\r\nimport * as sort from '../utilities/sort';\r\nimport { createContext } from \"react\";\r\n\r\nclass StoreBooks {\r\n authorsList = []\r\n authorBooksList = []\r\n genresList = []\r\n categoriesList = []\r\n categoriesListSB = []\r\n categoriesListALL = []\r\n connCategoriesGenresList = []\r\n current_book = {};\r\n booksList = []\r\n bookList_all = []\r\n bookList_category = []\r\n bookList_language = []\r\n bookList_sb = []\r\n bookList_new = []\r\n bookList_newest = []\r\n bookList_related = []\r\n bookList_subcat = []\r\n bookList_top10 = []\r\n bookList_top20 = []\r\n bookList_top60 = []\r\n preview_audio = [{}]\r\n preview_video = [{}]\r\n reviewsList = []\r\n newsletter_tips = []\r\n tips_carousel_home = []\r\n settings_list = []\r\n //media_list = []\r\n list_downloads = []\r\n\r\n listCategoriesPopular = []\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeGeneral = this.storeRoot.storeGeneral;\r\n this.getSettings();\r\n //this.getNewsletterTips();\r\n //this.getGenres();\r\n //this.getCategories();\r\n //this.getMediaGroups();\r\n //this.getConnCategoriesGenres();\r\n this.getTipsCarouselHome();\r\n this.getBooksNewestAuto();\r\n this.getBooksTop20();\r\n this.getAuthors();\r\n this.getCategoriesPopular();\r\n this.getBooksTop60();\r\n }\r\n\r\n async getSettings() {\r\n try {\r\n const returnData = await settings.getSettings();\r\n runInAction(() => {\r\n this.getNewsletterTips();\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getAuthors() {\r\n try {\r\n const returnData = await authors.getAuthors();\r\n runInAction(() => {\r\n this.authorsList = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n checkAuthorIsSB(firstname, lastname) {\r\n const idx = this.authorsList\r\n .findIndex((author) => author.firstname === firstname && author.lastname === lastname);\r\n return (idx > -1 && this.authorsList[idx].is_sb) ? true : false;\r\n }\r\n\r\n async getGenres() {\r\n try {\r\n const genre = await genres.getGenres();\r\n runInAction(() => {\r\n this.genresList = genre.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n // async getMediaGroups() {\r\n // try {\r\n // const cats = await categories.getMediaGroups();\r\n // runInAction(() => {\r\n // this.media_list = cats.data;\r\n // })\r\n // } catch (error) {\r\n // runInAction(() => {\r\n // this.state = \"error\"\r\n // })\r\n // }\r\n // }\r\n\r\n async getCategories(id_shop) {\r\n let shop;\r\n\r\n if (id_shop) {\r\n shop = id_shop;\r\n } else {\r\n shop = this.storeGeneral.shop;\r\n }\r\n\r\n try {\r\n const returnData = await categories.getCategories(shop);\r\n runInAction(() => {\r\n this.categoriesList = returnData.data;\r\n\r\n if (shop === 'SHOP_SB') {\r\n this.categoriesListSB = returnData.data;\r\n } else {\r\n this.categoriesListALL = returnData.data;\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async returnCategories(id_shop) {\r\n let shop;\r\n let cats;\r\n\r\n if (id_shop) {\r\n shop = id_shop;\r\n } else {\r\n shop = this.storeGeneral.shop;\r\n }\r\n\r\n try {\r\n const returnData = await categories.getCategories(shop);\r\n runInAction(() => {\r\n cats = returnData.data;\r\n //this.categoriesList = returnData.data;\r\n return cats;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return cats;\r\n }\r\n\r\n async getCategoriesPopular() {\r\n let catsPopular;\r\n try {\r\n const cats = await categories.getCategoriesPopular();\r\n runInAction(() => {\r\n this.listCategoriesPopular = cats.data;\r\n catsPopular = cats.data;\r\n return catsPopular;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return catsPopular;\r\n }\r\n\r\n async getSubCategories(cat) {\r\n const shop = this.storeGeneral.shop;\r\n\r\n let cats;\r\n try {\r\n cats = await categories.getSubCategories(shop, cat);\r\n runInAction(() => {\r\n return cats.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return cats.data;\r\n }\r\n\r\n // async getProductGroups() {\r\n // try {\r\n // const cats = await products.getProductGroups();\r\n // runInAction(() => {\r\n // this.media_list = cats.data;\r\n // })\r\n // } catch (error) {\r\n // runInAction(() => {\r\n // this.state = \"error\"\r\n // })\r\n // }\r\n // }\r\n\r\n async getConnCategoriesGenres() {\r\n try {\r\n const returnData = await catalog.getConnCategoriesGenres();\r\n runInAction(() => {\r\n this.connCategoriesGenresList = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getBooks(shop, page_view) {\r\n try {\r\n const books = await booklists.getBooks(shop, page_view);\r\n runInAction(() => {\r\n this.bookList_sb = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n console.log(error)\r\n })\r\n }\r\n }\r\n\r\n getBooksWithAbort(shop, page_view, controller, signal) {\r\n let books;\r\n try {\r\n books = booklists.getBooksWithAbort(shop, page_view, controller, signal);\r\n runInAction(() => {\r\n //this.bookList_sb = books.data;\r\n return books;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n console.log(error)\r\n })\r\n }\r\n return books;\r\n }\r\n\r\n setBookListSb(books) {\r\n this.bookList_sb = books;\r\n }\r\n\r\n async getSbPublications(collection) {\r\n try {\r\n const books = await catalog.getSbPublications(collection);\r\n runInAction(() => {\r\n this.bookList_sb = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getBooksForAuthor(page_view, str, firstn, lastn, shop) {\r\n this.storeGeneral.startLoader();\r\n let shop2;\r\n let firstname;\r\n let lastname;\r\n\r\n if (firstn !== undefined && lastn !== undefined && firstn !== '' && lastn !== '') {\r\n firstname = firstn;\r\n lastname = lastn;\r\n } else {\r\n if (!Number.isInteger(str)) {\r\n let arr = str.split(/[ ]+/);\r\n\r\n if (arr.length > 2) { \r\n if (arr[1].includes(\".\")) {\r\n firstname = arr[0] + ' ' + arr[1];\r\n lastname = str.substr(str.indexOf('.')+1).trim();\r\n } else {\r\n firstname = str.substr(0, str.indexOf(' '));\r\n lastname = str.substr(str.indexOf(' ') + 1);\r\n }\r\n } else {\r\n firstname = str.substr(0, str.indexOf(' '));\r\n lastname = str.substr(str.indexOf(' ') + 1);\r\n }\r\n } \r\n }\r\n\r\n if (shop !== undefined) {\r\n shop2 = shop;\r\n } else {\r\n if (this.storeGeneral.shop !== 'SHOP_ALL') {\r\n shop2 = 'SHOP_SB';\r\n } else {\r\n if (this.checkAuthorIsSB(firstname, lastname)) {\r\n shop2 = 'SHOP_SB';\r\n } else {\r\n shop2 = 'SHOP_ALL';\r\n }\r\n }\r\n }\r\n\r\n try {\r\n const books = await authors.getBooksForAuthor(shop2, str, firstname, lastname, page_view);\r\n runInAction(() => { \r\n this.authorBooksList = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async getBooksForCategory(cat, page_view, stock_priority) {\r\n this.storeGeneral.startLoader();\r\n const shop = this.storeGeneral.shop;\r\n const priority = (stock_priority !== undefined) ? stock_priority : 1;\r\n \r\n try {\r\n const books = await booklists.getBooksForCategory(shop, cat, page_view, priority);\r\n runInAction(() => {\r\n this.bookList_category = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async returnBooksForCategory(cat, page_view, stock_priority) {\r\n this.storeGeneral.startLoader();\r\n const shop = this.storeGeneral.shop;\r\n const priority = (stock_priority !== undefined) ? stock_priority : 1;\r\n let bookList;\r\n \r\n try {\r\n const books = await booklists.getBooksForCategory(shop, cat, page_view, priority);\r\n runInAction(() => {\r\n bookList = books.data;\r\n \r\n return bookList;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n\r\n return bookList;\r\n }\r\n\r\n getBooksForCategoryWithAbort(cat, page_view, stock_priority, controller, signal) {\r\n this.storeGeneral.startLoader();\r\n const shop = this.storeGeneral.shop;\r\n const priority = (stock_priority !== undefined) ? stock_priority : 1;\r\n let books;\r\n \r\n try {\r\n books = booklists.getBooksForCategoryWithAbort(shop, cat, page_view, priority, controller, signal);\r\n runInAction(() => {\r\n return books;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n return books;\r\n }\r\n\r\n setBookListCategory(books) {\r\n this.bookList_category = books;\r\n }\r\n\r\n async getBooksForSubCategory(cat, subcat, page_view, stock_priority) {\r\n this.storeGeneral.startLoader();\r\n const shop = this.storeGeneral.shop;\r\n\r\n const priority = (stock_priority !== undefined) ? stock_priority : 1;\r\n try {\r\n const books = await booklists.getBooksForSubCategory(shop, cat, subcat, page_view, priority);\r\n runInAction(() => {\r\n this.bookList_subcat = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n getBooksForSubCategoryWithAbort(cat, subcat, page_view, stock_priority, controller, signal) {\r\n this.storeGeneral.startLoader();\r\n const shop = this.storeGeneral.shop;\r\n let books;\r\n \r\n const priority = (stock_priority !== undefined) ? stock_priority : 1;\r\n\r\n try {\r\n books = booklists.getBooksForSubCategoryWithAbort(shop, cat, subcat, page_view, priority, controller, signal);\r\n runInAction(() => {\r\n return books;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n return books;\r\n }\r\n\r\n setBookListSubCategory(books) {\r\n this.bookList_subcat = books;\r\n }\r\n\r\n\r\n async getBooksForSubCategoryAll(subcat, page_view, stock_priority) {\r\n this.storeGeneral.startLoader();\r\n const shop = this.storeGeneral.shop;\r\n\r\n const priority = (stock_priority !== undefined) ? stock_priority : 1;\r\n try {\r\n const books = await booklists.getBooksForSubCategoryAll(shop, subcat, page_view, priority);\r\n runInAction(() => {\r\n this.bookList_subcat = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async getBooksForLanguage(lang, page_view, stock_priority) {\r\n this.storeGeneral.startLoader();\r\n const shop = this.storeGeneral.shop;\r\n const priority = (stock_priority !== undefined) ? stock_priority : 1;\r\n try {\r\n const books = await booklists.getBooksForLanguage(shop, lang, page_view, priority);\r\n runInAction(() => {\r\n this.bookList_language = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async getBookDetails(id) {\r\n //SbC DEPRICATED\r\n // const shop = this.storeGeneral.shop;\r\n\r\n // try {\r\n // const book = await books.getBookDetails(shop, id);\r\n // runInAction(() => {\r\n // this.current_book = book.data[0];\r\n // })\r\n // } catch (error) {\r\n // runInAction(() => {\r\n // this.state = \"error\"\r\n // })\r\n // }\r\n }\r\n\r\n async returnBookDetails(id) {\r\n let book_details;\r\n try {\r\n const book = await books.getBookDetails(id);\r\n runInAction(() => {\r\n book_details = book.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return book_details;\r\n }\r\n\r\n async returnBookDetailsBySku(shop, sku) {\r\n let book_details;\r\n try {\r\n const book = await books.getBookDetailsBySku(shop, sku);\r\n runInAction(() => {\r\n book_details = book.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return book_details;\r\n }\r\n\r\n async getBookDetailsBySku(sku) {\r\n const shop = this.storeGeneral.shop;\r\n //const shop = 'SHOP_ALL';\r\n\r\n try {\r\n const book = await books.getBookDetailsBySku(shop, sku);\r\n runInAction(() => {\r\n this.current_book = book.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getBookBySku(sku, set_shop) {\r\n let shop = this.storeGeneral.shop;\r\n \r\n if (set_shop) {\r\n shop = set_shop;\r\n }\r\n\r\n if (shop === '') {\r\n shop = 'SHOP_ALL';\r\n }\r\n\r\n let current_book;\r\n try {\r\n const book = await books.getBookDetailsBySku(shop, sku);\r\n runInAction(() => {\r\n current_book = book.data[0];\r\n this.current_book = book.data[0];\r\n return current_book;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n return current_book;\r\n }\r\n }\r\n\r\n async getBooksRelated(sku) {\r\n try {\r\n const books = await booklists.getBooksRelated(sku);\r\n runInAction(() => {\r\n this.bookList_related = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getBooksNew(view, page_view) {\r\n let shop = this.storeGeneral.activeShop;\r\n\r\n try {\r\n const books = await booklists.getBooksNew(shop, view, page_view);\r\n runInAction(() => {\r\n this.bookList_new = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getBooksNewest() {\r\n let result_data;\r\n let result_ordering;\r\n this.bookList_newest = [];\r\n let idx;\r\n try {\r\n const returnData = await booklists.getBooksNewest();\r\n runInAction(() => {\r\n result_data = returnData.data;\r\n result_ordering = returnData.order;\r\n\r\n result_ordering.map(sku => {\r\n idx = result_data\r\n .findIndex((item) => item.sku === sku);\r\n this.bookList_newest.push(result_data[idx])\r\n })\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getBooksNewestAuto() {\r\n this.bookList_newest = [];\r\n try {\r\n const returnData = await booklists.getBooksNewestAuto();\r\n runInAction(() => {\r\n this.bookList_newest = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getTop10s() {\r\n let result;\r\n try {\r\n const returnData = await booklists.getTop10s();\r\n runInAction(() => {\r\n result = returnData.data;\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async getTop10NUR(tag) {\r\n let result;\r\n try {\r\n const returnData = await booklists.getTop10NUR(tag);\r\n runInAction(() => {\r\n result = returnData;\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async getBooksTop10(tag, nur, isAutofill) {\r\n let result_data;\r\n let result_ordering;\r\n let bookList_top10 = [];\r\n let idx;\r\n\r\n if (tag !== undefined && nur !== undefined) {\r\n try {\r\n const returnData = await booklists.getBooksTop10(tag, nur, isAutofill);\r\n runInAction(() => {\r\n result_data = returnData.data.data;\r\n result_ordering = returnData.data.order;\r\n\r\n result_ordering.map(sku => {\r\n idx = result_data\r\n .findIndex((item) => item.sku === sku);\r\n bookList_top10.push(result_data[idx])\r\n })\r\n\r\n if (tag === 'top10fiction') {\r\n this.bookList_top10 = bookList_top10;\r\n }\r\n\r\n return bookList_top10;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n } \r\n\r\n return bookList_top10;\r\n }\r\n\r\n async getBooksTop20() {\r\n let result_data;\r\n let result_ordering;\r\n this.bookList_top20 = [];\r\n let idx;\r\n \r\n try {\r\n const returnData = await booklists.getBooksTop20();\r\n runInAction(() => {\r\n result_data = returnData.data.data;\r\n result_ordering = returnData.data.order;\r\n\r\n result_ordering.map(sku => {\r\n idx = result_data\r\n .findIndex((item) => item.sku === sku);\r\n this.bookList_top20.push(result_data[idx])\r\n })\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getBooksTop60() {\r\n let result_data;\r\n let result_ordering;\r\n this.bookList_top60 = [];\r\n let idx;\r\n\r\n try {\r\n const returnData = await booklists.getBooksTop60();\r\n runInAction(() => {\r\n result_data = returnData.data.data;\r\n result_ordering = returnData.data.order;\r\n\r\n if (this.bookList_top60.length === 0) {\r\n result_ordering.map(sku => {\r\n idx = result_data\r\n .findIndex((item) => item.sku == sku);\r\n this.bookList_top60.push(result_data[idx])\r\n })\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getWeekTop60() {\r\n let weeknr;\r\n\r\n try {\r\n const returnData = await booklists.getWeekTop60();\r\n runInAction(() => {\r\n weeknr = returnData.data;\r\n \r\n return weeknr;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return weeknr;\r\n }\r\n\r\n async getNewsletterTips() { \r\n let result_data;\r\n let result_ordering;\r\n this.newsletter_tips = [];\r\n let idx;\r\n const newsletter_id = this.storeGeneral.settings_list['tagLatestNewsletter'];\r\n try {\r\n const returnData = await content.getNewsletterTips(newsletter_id);\r\n runInAction(() => {\r\n result_data = returnData.data.data;\r\n result_ordering = returnData.data.order;\r\n\r\n result_ordering.map(sku => {\r\n idx = result_data\r\n .findIndex((item) => item.sku === sku);\r\n this.newsletter_tips.push(result_data[idx])\r\n })\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getTipsCarouselHome() { \r\n try {\r\n const returnData = await content.getTipsCarouselHome();\r\n runInAction(() => {\r\n this.tips_carousel_home = returnData.data.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getPreview(media, isbn) { \r\n let result;\r\n try {\r\n const preview = await catalog.getPreview(media, isbn);\r\n runInAction(() => {\r\n if (media === 'audio') {\r\n this.preview_audio = preview.data;\r\n }\r\n if (media === 'video') {\r\n this.preview_video = preview.data\r\n }\r\n result = preview.data;\r\n return result;\r\n\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return result;\r\n }\r\n\r\n async getPreviewVideo(media, isbn) { \r\n let result;\r\n try {\r\n const preview = await catalog.getPreviewVideo(isbn);\r\n runInAction(() => {\r\n if (media == 'audio') {\r\n this.preview_audio = preview.data;\r\n }\r\n if (media == 'video') {\r\n this.preview_video = preview.data;\r\n }\r\n result = preview.data;\r\n return result;\r\n\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return result;\r\n }\r\n\r\n async getReviews(sku) { \r\n try {\r\n const reviews = await catalog.getReviews(sku);\r\n runInAction(() => {\r\n this.reviewsList = reviews.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getReviewer(id) { \r\n let result; \r\n try {\r\n const reviewer = await catalog.getReviewer(id);\r\n runInAction(() => {\r\n result = reviewer.data;\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return result;\r\n }\r\n\r\n async getBookISBN(id) {\r\n let isbn;\r\n try {\r\n const returnData = await books.getBookISBN(id);\r\n runInAction(() => {\r\n isbn = returnData.data[0].sku;\r\n return isbn;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return isbn;\r\n }\r\n\r\n async getBookCategories(sku) {\r\n const shop = this.storeGeneral.shop;\r\n let cats;\r\n try {\r\n const returnData = await books.getBookCategories(shop, sku);\r\n runInAction(() => {\r\n cats = returnData.data;\r\n return cats;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return cats;\r\n }\r\n\r\n async getBookTags(sku) {\r\n let tags;\r\n try {\r\n const returnData = await books.getBookTags(sku);\r\n runInAction(() => {\r\n tags = returnData.data;\r\n return tags;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return tags;\r\n }\r\n\r\n async getBookDownloads(sku) {\r\n try {\r\n const returnData = await books.getBookDownloads(sku);\r\n runInAction(() => {\r\n this.list_downloads = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n}\r\n\r\ndecorate(StoreBooks, {\r\n authorsList: observable,\r\n authorBooksList: observable,\r\n booksList: observable,\r\n bookList_all: observable,\r\n bookList_category: observable,\r\n bookList_sb: observable,\r\n bookList_language: observable,\r\n bookList_new: observable,\r\n bookList_newest: observable,\r\n bookList_related: observable,\r\n bookList_subcat: observable,\r\n bookList_top10: observable,\r\n bookList_top20: observable,\r\n bookList_top60: observable,\r\n categoriesList: observable,\r\n categoriesListSB: observable,\r\n categoriesListALL: observable,\r\n current_book: observable,\r\n genresList: observable,\r\n list_downloads: observable,\r\n listCategoriesPopular: observable,\r\n newsletter_tips: observable,\r\n preview_audio: observable,\r\n preview_video: observable,\r\n reviewsList: observable,\r\n settings_list: observable,\r\n tips_carousel_home: observable,\r\n checkAuthorIsSB: action,\r\n getBookCategories: action,\r\n getBookDownloads: action,\r\n getBookISBN: action,\r\n getBooksTop10: action,\r\n getBooksTop60: action,\r\n getBooks: action,\r\n getBooksForAuthor: action,\r\n getBooksForCategory: action,\r\n getBooksForCategoryWithAbort: action,\r\n getBooksForLanguage: action,\r\n getBooksForSubCategory: action,\r\n getBooksForSubCategoryWithAbort: action,\r\n getBooksNew: action,\r\n getBooksNewest: action,\r\n getBooksNewestAuto: action,\r\n getBooksRelated: action,\r\n getBookTags: action,\r\n getCategories: action,\r\n getCategoriesPopular: action,\r\n getNewsletterTips: action,\r\n getSbPublications: action,\r\n getSubCategories: action,\r\n getBookDetails: action,\r\n getBookbySku: action,\r\n getBookDetailsBySku: action,\r\n getPreview: action,\r\n getPreviewVideo: action,\r\n getReviews: action,\r\n getReviewer: action,\r\n getTop10s: action,\r\n getTop10NUR: action,\r\n returnBookDetails: action,\r\n returnCategories: action,\r\n setBookListCategory: action\r\n})\r\n\r\nexport default StoreBooks;","import * as apifetch from './fetch.js';\r\n\r\nexport async function getCategoryDetails(sku) {\r\n const urlEndpoint = '/catalog/getCategoryDetails.php';\r\n\r\n const postData = {\r\n shop: 'SHOP_ALL',\r\n sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData)\r\n}\r\n\r\n\r\n","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as books_all from '../communicator/books-all';\r\n\r\nclass StoreBooksAll {\r\n\r\n constructor() {\r\n }\r\n\r\n async getCategoryDetails(cat) {\r\n let details;\r\n if (cat !== undefined) {\r\n try {\r\n const returnData = await books_all.getCategoryDetails(cat);\r\n runInAction(() => {\r\n details = returnData.data[0];\r\n return details;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n } else {\r\n details = {};\r\n }\r\n return details;\r\n }\r\n}\r\n\r\ndecorate(StoreBooksAll, {\r\n getCategoryDetails: action\r\n})\r\n\r\nexport default StoreBooksAll;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as content from '../communicator/content';\r\n\r\nclass StoreContent {\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n async getContentBlocks(block) {\r\n let result;\r\n\r\n try {\r\n const returnData = await content.getContentBlocks(block);\r\n runInAction(() => {\r\n result = returnData.data;\r\n\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async getPromoBooks() {\r\n let result;\r\n \r\n try {\r\n const returnData = await content.getPromoBooks();\r\n runInAction(() => {\r\n result = returnData.data;\r\n\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async getVideoLabels(view) {\r\n let result;\r\n\r\n try {\r\n const returnData = await content.getVideoLabels(view);\r\n runInAction(() => {\r\n result = returnData.data;\r\n\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return result;\r\n }\r\n}\r\n\r\ndecorate(StoreContent, {\r\n getContentBlocks: action\r\n})\r\n\r\nexport default StoreContent;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as products from '../communicator/products';\r\n\r\nclass StoreProducts {\r\n list_audiobooks = []\r\n list_products = []\r\n count_products = 0\r\n media_list = []\r\n productSubGroups = []\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeGeneral = this.storeRoot.storeGeneral;\r\n this.storeUi = this.storeRoot.storeUi;\r\n\r\n this.getProductGroups();\r\n }\r\n\r\n // async getAudioBooks(medium) {\r\n // try {\r\n // const returnData = await products.getAudioBooks(medium);\r\n // runInAction(() => {\r\n // this.list_audiobooks = returnData.data;\r\n // })\r\n // } catch (error) {\r\n // runInAction(() => {\r\n // this.state = \"error\"\r\n // })\r\n // }\r\n // }\r\n \r\n async getProductsForCategory(cat, page_view, stock_priority) {\r\n this.storeGeneral.startLoader();\r\n const priority = (stock_priority !== undefined) ? stock_priority : 1;\r\n\r\n try {\r\n const returnData = await products.getProductsForCategory(cat, page_view, priority);\r\n runInAction(() => {\r\n this.list_products = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async getProductsForSubGroup(cat, subgroup, page_view, stock_priority) {\r\n this.storeGeneral.startLoader();\r\n const priority = (stock_priority !== undefined) ? stock_priority : 1;\r\n try {\r\n const returnData = await products.getProductsForSubGroup(cat, subgroup, page_view, priority);\r\n runInAction(() => {\r\n this.list_products = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async getProductGroups() {\r\n try {\r\n const cats = await products.getProductGroups();\r\n runInAction(() => {\r\n this.media_list = cats.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getProductSubGroups(group) {\r\n let returnData;\r\n try {\r\n returnData = await products.getProductSubGroups(group);\r\n runInAction(() => {\r\n this.productSubGroups = returnData.data;\r\n return returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return returnData.data;\r\n }\r\n\r\n async checkMainGroup(name) {\r\n let result = '';\r\n try {\r\n const returnData = await products.checkMainGroup(name);\r\n runInAction(() => {\r\n result = returnData.data[0].product_group;\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return result;\r\n }\r\n\r\n async getMainGroup(name) {\r\n let result = '';\r\n try {\r\n const returnData = await products.getMainGroup(name);\r\n runInAction(() => {\r\n result = returnData.data[0].product_group;\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return result;\r\n }\r\n}\r\n\r\ndecorate(StoreProducts, {\r\n count_products: observable,\r\n list_audiobooks: observable,\r\n list_products: observable,\r\n media_list: observable,\r\n productSubGroups: observable,\r\n checkMainGroup: action,\r\n getMainGroup: action,\r\n getProductsForCategory: action,\r\n getProductGroups: action,\r\n getProductSubGroups: action\r\n})\r\n\r\nexport default StoreProducts;","import * as apifetch from './fetch.js';\r\n\r\nexport async function getEBookDetails2(sku) {\r\n const urlEndpoint = '/catalog/getBookDetailsBySku.php';\r\n\r\n const postData = {\r\n shop: 'SHOP_SB',\r\n book_sku: sku\r\n }\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData)\r\n}\r\n\r\nexport async function getEBookDetails(sku) {\r\n const urlEndpoint = '/v2/catalog/details/' + sku;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET')\r\n}\r\n\r\nexport async function getEBooks() {\r\n const urlEndpoint = '/v2/catalog/ebooks';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n\r\n","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as ebooks from '../communicator/ebooks';\r\n\r\nclass StoreEBooks {\r\n eBooksList = []\r\n\r\n constructor() {\r\n this.getEBooks('all');\r\n }\r\n\r\n async getEBooks() {\r\n try {\r\n const books = await ebooks.getEBooks();\r\n runInAction(() => {\r\n this.eBooksList = books.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getEBookDetails(sku) {\r\n let stock;\r\n try {\r\n const books = await ebooks.getEBookDetails(sku);\r\n runInAction(() => {\r\n stock = books.data[0];\r\n return stock;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return stock;\r\n }\r\n}\r\n\r\ndecorate(StoreEBooks, {\r\n eBooksList: observable,\r\n getEBooks: action,\r\n getEBookDetails: action\r\n})\r\n\r\nexport default StoreEBooks;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as forms from '../communicator/forms';\r\n\r\nclass StoreForms {\r\n\r\n dialog_type = ''\r\n form_feedback = {};\r\n isDialogFeedbackFormOpen = false\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeGeneral = this.storeRoot.storeGeneral;\r\n }\r\n\r\n initForm(formControls) {\r\n const updatedControls = {\r\n ...formControls\r\n };\r\n\r\n Object.keys(formControls).map((key, i) => {\r\n const updatedFormElement = {\r\n ...updatedControls[key]\r\n };\r\n\r\n if ('isRequired' in updatedFormElement.validationRules && updatedFormElement.value === '') {\r\n updatedFormElement.valid = false;\r\n } else {\r\n updatedFormElement.valid = true;\r\n }\r\n\r\n updatedControls[key] = updatedFormElement;\r\n });\r\n \r\n return updatedControls;\r\n }\r\n\r\n validateForm(formControls) {\r\n let formIsValid = true;\r\n\r\n Object.keys(formControls).map((key, i) => {\r\n if (Object.keys(formControls[key].validationRules).length !== 0 && formControls[key].valid === false) {\r\n formIsValid = false;\r\n }\r\n })\r\n\r\n return formIsValid;\r\n }\r\n\r\n validateRow(formControls, name, value, valid, touched) { \r\n const updatedControls = {\r\n ...formControls\r\n };\r\n const updatedFormElement = {\r\n ...updatedControls[name]\r\n };\r\n \r\n updatedFormElement.value = value;\r\n updatedFormElement.touched = touched;\r\n if ('isRequired' in updatedFormElement.validationRules) {\r\n updatedFormElement.valid = valid;\r\n } else {\r\n updatedFormElement.valid = true;\r\n }\r\n updatedControls[name] = updatedFormElement;\r\n \r\n return updatedControls;\r\n }\r\n\r\n async sendFormCallMeBack(form_values) {\r\n const form_data = {\r\n from_firstname: form_values['firstname'].value,\r\n from_lastname: form_values['lastname'].value,\r\n from_phonenr: form_values['phonenr'].value,\r\n from_email: form_values['email'].value,\r\n content: form_values['question'].value\r\n }\r\n this.storeGeneral.startLoader();\r\n try {\r\n const returnData = await forms.sendFormCallMeBack('callmeback', form_data);\r\n runInAction(() => {\r\n this.form_feedback = returnData.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async sendFormContact(form_values) {\r\n const form_data = {\r\n from_firstname: form_values['firstname'].value,\r\n from_lastname: form_values['lastname'].value,\r\n from_email: form_values['email'].value,\r\n from_phonenr: form_values['phonenr'].value,\r\n content: form_values['question'].value\r\n }\r\n this.storeGeneral.startLoader();\r\n try {\r\n const returnData = await forms.sendFormContact('contact', form_data);\r\n runInAction(() => {\r\n this.form_feedback = returnData.msg;\r\n this.openDialogFeedbackForm('vraag/opmerking');\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n async sendFormEvent(refEvent, form_values) {\r\n const form_data = {\r\n firstname: form_values['firstname'].value,\r\n middlename: form_values['middlename'].value,\r\n lastname: form_values['lastname'].value,\r\n email: form_values['email'].value,\r\n phonenr: form_values['phonenr'].value,\r\n guestFirstname: form_values['guestFirstname'].value,\r\n guestMiddlename: form_values['guestMiddlename'].value,\r\n guestLastname: form_values['guestLastname'].value,\r\n guestEmail: form_values['guestEmail'].value,\r\n question: form_values['question'].value\r\n }\r\n this.storeGeneral.startLoader();\r\n try {\r\n const returnData = await forms.sendFormEvent(refEvent, form_data);\r\n runInAction(() => {\r\n this.form_feedback = returnData.data;\r\n this.openDialogFeedbackForm('registratie');\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.storeGeneral.stopLoader();\r\n }\r\n }\r\n\r\n clearFormFeedback() {\r\n this.form_feedback = {};\r\n }\r\n\r\n closeDialogFeedbackForm = () => {\r\n this.isDialogFeedbackFormOpen = false;\r\n }\r\n\r\n openDialogFeedbackForm = (type) => {\r\n this.dialog_type = type;\r\n this.isDialogFeedbackFormOpen = true;\r\n }\r\n}\r\n\r\ndecorate(StoreForms, {\r\n dialog_type: observable,\r\n form_feedback: observable,\r\n isDialogFeedbackFormOpen: observable,\r\n initForm: action,\r\n clearFormFeedback: action,\r\n closeDialogFeedbackForm: action,\r\n openDialogFeedbackForm: action,\r\n sendFormCallMeBack: action,\r\n sendFormContact: action,\r\n validateForm: action,\r\n validateRow: action\r\n})\r\n\r\nexport default StoreForms;","import * as apifetch from './fetch.js';\r\n\r\nexport async function monitorOrderData(order_id, client_profile) {\r\n const urlEndpoint = '/monitoring/monitorOrderData.php';\r\n \r\n const postData = {\r\n order_id: order_id,\r\n profile: client_profile\r\n };\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function monitorStartPayment(order_id, device, email) {\r\n const urlEndpoint = '/monitoring/monitorStartPayment.php';\r\n \r\n const postData = {\r\n order_id: order_id,\r\n email: email,\r\n mobile: device.mobile ? 'mobile' : 'desktop',\r\n operating: device.operating ? 'iOS' : 'not iOS',\r\n browserName: device.browserName, \r\n browserVersion: device.browserVersion \r\n };\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}","import * as apifetch from './fetch.js';\r\n\r\n// export async function handleOrderLineShipping(order_line, id, action) {\r\n// const urlEndpoint = '/v2/orders/' + id + '/shipping';\r\n \r\n// const postData = order_line;\r\n\r\n// return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n// }\r\n\r\nexport async function addOrderLineShipping(order_line, id, action) {\r\n const urlEndpoint = '/v2/orders/' + id + '/shipping/add';\r\n \r\n const postData = order_line;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'POST', postData);\r\n}\r\n\r\nexport async function deleteOrderLineShipping(id) {\r\n const urlEndpoint = '/v2/orders/' + id + '/shipping';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'DELETE');\r\n}\r\n\r\nexport async function editOrderLineShipping(order_line, id, action) {\r\n const urlEndpoint = '/v2/orders/' + id + '/shipping/edit';\r\n \r\n const postData = order_line;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'PUT', postData);\r\n}\r\n\r\nexport async function getOrderLineShipping(id) {\r\n const urlEndpoint = '/v2/orders/' + id + '/shipping';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}\r\n\r\nexport async function getDataInvoice(id) {\r\n const urlEndpoint = '/v2/orders/' + id + '/invoice';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET');\r\n}","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\nimport queryString from 'query-string';\r\nimport * as rdd from \"react-device-detect\";\r\n\r\nimport countries from \"i18n-iso-countries\";\r\nimport * as account from '../communicator/account';\r\nimport * as sort from '../utilities/sort';\r\nimport * as books from '../communicator/books';\r\nimport * as monitoring from '../communicator/monitoring';\r\nimport * as payment from '../communicator/payment';\r\nimport * as order from '../communicator/order';\r\nimport * as orders from '../communicator/orders';\r\nimport * as settings from '../communicator/settings'\r\nimport * as tools from '../communicator/tools'\r\n\r\nfunction autoSave(store, save) {\r\n mobx.autorun(() => {\r\n const json = JSON.stringify(mobx.toJS(store));\r\n save(json);\r\n });\r\n}\r\n\r\nclass StoreOrder {\r\n country_default = 154;\r\n country_code_default = 'NL';\r\n country_default_displayValue = 'Nederland';\r\n\r\n order_settings = {\r\n shipping_free: 20,\r\n shipping_free_resellers: 250,\r\n resellers_discount_default: 30,\r\n no_shipping_costs: 0,\r\n custom_shipping_costs: 0,\r\n discounts_overruled: 0\r\n }\r\n\r\n order_data = {\r\n order_id: 0,\r\n order_guid: '',\r\n affiliate_id: 0,\r\n client_id: 0,\r\n client_settings: {\r\n is_partner: false,\r\n is_reseller: false,\r\n is_business: false,\r\n has_delivery_address: false,\r\n },\r\n client_profile: {\r\n firstname: '',\r\n lastname: '',\r\n email: '',\r\n phonenr: '',\r\n address: '',\r\n housenr: '',\r\n addition: '',\r\n zipcode: '',\r\n city: '',\r\n country: this.country_default_displayValue,\r\n country_select: this.country_default,\r\n country_code: this.country_code_default\r\n },\r\n billing_address: {\r\n address: '',\r\n housenr: '',\r\n addition: '',\r\n zipcode: '',\r\n city: '',\r\n country: this.country_default,\r\n country_select: this.country_default,\r\n country_code: this.country_code_default\r\n },\r\n delivery_address: { \r\n delivery_name: '',\r\n delivery_company: '',\r\n address: '',\r\n housenr: '',\r\n addition: '',\r\n zipcode: '',\r\n city: '',\r\n country: this.country_default,\r\n country_select: this.country_default,\r\n country_code: this.country_code_default\r\n },\r\n company_profile: {\r\n name: '',\r\n nrKvK: 0,\r\n nrVAT: 0,\r\n validVAT: false\r\n },\r\n shopping_cart: {\r\n cart_total_incl: 0,\r\n vat_total: 0\r\n },\r\n shipping_costs: 0,\r\n vat_shipping_perc: 0,\r\n vat_shipping: 0,\r\n order_total_incl: 0,\r\n payment: {\r\n payment_method: {\r\n id: 'XX',\r\n title: 'IDEAL'\r\n },\r\n payment_issuer: {\r\n id: 99,\r\n code: '9999',\r\n title: '' \r\n }\r\n },\r\n order_remark: '',\r\n order_status: {\r\n url: '',\r\n handling: '',\r\n payment_status: 'pending'\r\n }\r\n }\r\n\r\n order_interface = {\r\n cart_view: \"client\",\r\n error_window: false,\r\n payment_window: false,\r\n isDialogCompareCartsOpen: false,\r\n isDialogCompareWishListsOpen: false,\r\n isDialogConcatOpen: false,\r\n loader: false\r\n }\r\n\r\n cart = {\r\n anonymous: [],\r\n user: []\r\n }\r\n cartChanges = false;\r\n cartTotalIncl = 0;\r\n\r\n\r\n discounts_overruled = 0;\r\n lastAddedBook = {};\r\n orderHistoryList = []\r\n payment_issuers = []\r\n payment_status = 'pending'\r\n shopping_cart_db = []\r\n shopping_cart_db_id = 0\r\n shopping_cart_db_guid = ''\r\n shippingCosts = 0\r\n wishList = []\r\n wishList_db = []\r\n countriesList = []\r\n partner_code = {\r\n code: '',\r\n last_date: ''\r\n }\r\n settings_list = []\r\n\r\n constructor(storeRoot) {\r\n //this.storeRoot = storeRoot;\r\n //this.storeGeneral = this.storeRoot.storeGeneral;\r\n\r\n this.getOrderDataFromLS();\r\n autoSave(this, this.save.bind(this));\r\n this.getPaymentIssuers();\r\n this.getSettings();\r\n this.getCountries();\r\n this.setCountryDefault();\r\n }\r\n\r\n async getSettings() {\r\n let settingsList;\r\n try {\r\n const returnData = await settings.getSettings();\r\n runInAction(() => {\r\n settingsList = returnData.data;\r\n settingsList.map(setting => {\r\n this.settings_list[setting.SettingName] = setting.SettingValue;\r\n })\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n save(json) {\r\n this.saveToLS(json);\r\n }\r\n\r\n saveToLS(json) {\r\n localStorage.setItem('SB_ORDER', json)\r\n }\r\n\r\n openDialogConcat = (url) => {\r\n this.order_interface.isDialogConcatOpen = true;\r\n }\r\n\r\n openDialogCompareCarts = (url) => {\r\n this.order_interface.isDialogCompareCartsOpen = true;\r\n }\r\n\r\n openDialogCompareWishLists = () => {\r\n this.order_interface.isDialogCompareWishListsOpen = true;\r\n }\r\n\r\n closeDialogConcat = () => {\r\n this.order_interface.isDialogConcatOpen = false;\r\n }\r\n\r\n closeDialogCompareCarts = () => {\r\n this.order_interface.isDialogCompareCartsOpen = false;\r\n }\r\n\r\n closeDialogCompareWishLists = () => {\r\n this.order_interface.isDialogCompareWishListsOpen = false;\r\n }\r\n\r\n startLoader() {\r\n this.order_interface.loader = true;\r\n }\r\n\r\n stopLoader() {\r\n this.order_interface.loader = false;\r\n }\r\n\r\n getOrderDataFromLS() {\r\n let data;\r\n \r\n if (localStorage.getItem('SB_ORDER')) {\r\n data = JSON.parse(localStorage.getItem('SB_ORDER'));\r\n this.order_data = data.order_data;\r\n this.order_settings = data.order_settings;\r\n\r\n if ('cart' in data) {\r\n this.cart.anonymous = data.cart.anonymous;\r\n this.cart.user = data.cart.user;\r\n } else {\r\n this.cart.anonymous = [];\r\n this.cart.user = [];\r\n }\r\n } \r\n }\r\n\r\n async checkDiscountsOverruled() {\r\n let discount_overruled = 0;\r\n try {\r\n const returnData = await order.checkDiscountsOverruled(this.order_data.order_id);\r\n runInAction(() => {\r\n discount_overruled = returnData.data;\r\n \r\n if (returnData.data[0].discounts_overruled === 1 || returnData.data[0].discounts_overruled === '1') {\r\n this.setOverruledDiscountsInCart();\r\n } \r\n if (returnData.data[0].discounts_overruled == null) {\r\n this.discounts_overruled = 0;\r\n this.order_settings.discounts_overruled = 0;\r\n } else {\r\n this.discounts_overruled = parseInt(returnData.data[0].discounts_overruled);\r\n this.order_settings.discounts_overruled = parseInt(returnData.data[0].discounts_overruled);\r\n }\r\n return discount_overruled;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return discount_overruled;\r\n }\r\n\r\n async checkShippingCostsOverruled() {\r\n let no_shipping_costs;\r\n try {\r\n const returnData = await order.checkShippingCostsOverruled(this.order_data.order_id);\r\n runInAction(() => {\r\n no_shipping_costs = returnData.data;\r\n this.order_settings.no_shipping_costs = returnData.data[0].no_shipping_costs;\r\n this.no_shipping_costs = returnData.data[0].no_shipping_costs;\r\n return no_shipping_costs;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return no_shipping_costs;\r\n }\r\n\r\n async checkShippingCostsCustom() {\r\n let custom_shipping_costs;\r\n try {\r\n const returnData = await order.checkShippingCostsCustom(this.order_data.order_id);\r\n runInAction(() => {\r\n custom_shipping_costs = returnData.data;\r\n this.order_settings.custom_shipping_costs = returnData.data[0].custom_shipping_costs;\r\n this.custom_shipping_costs = returnData.data[0].custom_shipping_costs;\r\n return custom_shipping_costs;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return custom_shipping_costs;\r\n }\r\n\r\n setDiscountOverruled(book_id, book_sku, discount) {\r\n for (let i = 0; i < this.cart.user.length; i++) {\r\n if (book_sku === this.cart.user[i].sku) {\r\n this.cart.user[i].discount = discount;\r\n }\r\n } \r\n }\r\n\r\n async setOverruledDiscountsInCart() {\r\n let order_lines = await this.getOrderLinesData(this.order_data.order_id);\r\n\r\n //Sbc vs20\r\n for (let i = 0; i < this.cart.user.length; i++) {\r\n for (let ii = 0; ii < order_lines.length; ii++) {\r\n if (parseInt(order_lines[ii].book_id) === this.cart.user[i].id) {\r\n this.cart.user[i].discount = order_lines[ii].discount;\r\n this.cart.user[i].discount_active = 1;\r\n }\r\n }\r\n }\r\n\r\n //SbC TODO\r\n if (this.order_data.client_id !== 0) {\r\n //this.saveShoppingCartToDB(this.order_data.client_id, this.order_data.shopping_cart['items']);\r\n this.saveShoppingCartToDB(this.order_data.client_id, this.cart.user);\r\n }\r\n }\r\n\r\n closeErrorWindow = () => {\r\n this.order_interface.error_window = false;\r\n }\r\n\r\n closePaymentWindow = () => {\r\n this.order_interface.payment_window = false;\r\n }\r\n\r\n clearPartnerCode() {\r\n this.partner_code.code = '';\r\n this.partner_code.last_date = '';\r\n }\r\n\r\n setPartnerCode(searchString) {\r\n const pc = this.partner_code.code.trim();\r\n const params = queryString.parse(searchString);\r\n\r\n if (pc !== params.pc && params.pc !== undefined) {\r\n this.partner_code.code = params.pc.trim();\r\n this.partner_code.last_date = new Date();\r\n }\r\n }\r\n\r\n async setCountryDefault() {\r\n try {\r\n const returnData = await settings.getSettings();\r\n runInAction(() => {\r\n let settings_list = returnData.data;\r\n this.country_default = parseInt(settings_list[settings_list.findIndex(setting => setting.SettingName === 'defaultCountry')].SettingValue);\r\n this.country_code_default = settings_list[settings_list.findIndex(setting => setting.SettingName === 'defaultCountryCode')].SettingValue;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getCountries() {\r\n try {\r\n const returnData = await tools.getCountries();\r\n runInAction(() => {\r\n this.countriesList = returnData.data;\r\n this.translateCountries();\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n translateCountries() {\r\n //SbC:: get country translations\r\n countries.registerLocale(require(\"i18n-iso-countries/langs/nl.json\"));\r\n\r\n this.countriesList.map((country, i) => {\r\n //SbC missing values for AN and CS\r\n switch (country.code) {\r\n case 'AN': \r\n this.countriesList[i].displayValue = 'Nederlandse Antillen';\r\n break;\r\n case 'CS': \r\n this.countriesList[i].displayValue = 'Servie en Montenegro';\r\n break;\r\n default: \r\n this.countriesList[i].displayValue = countries.getName(country.code, \"nl\");\r\n }\r\n })\r\n\r\n this.countriesList = this.countriesList\r\n .sort(sort.compareValues('displayValue', 'asc'))\r\n }\r\n\r\n async getOrderAvailability() {\r\n let order_availability;\r\n let order_id = this.order_data.order_id;\r\n try {\r\n const returnData = await order.getOrderAvailability(order_id);\r\n runInAction(() => {\r\n order_availability = returnData.data;\r\n return order_availability;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return order_availability;\r\n }\r\n\r\n async createNewOrder(user_id, remark) {\r\n let order_id;\r\n let partner_code = this.partner_code.code;\r\n\r\n try {\r\n const new_order = await order.createNewOrder(user_id, partner_code);\r\n runInAction(() => {\r\n order_id = new_order.data[0].id;\r\n this.order_data.order_id = new_order.data[0].id;\r\n this.order_data.order_guid = new_order.data[0].guid;\r\n\r\n //SbC fix order nr resetting to 0 after new order created\r\n this.shopping_cart_db_id = new_order.data[0].id;\r\n\r\n this.setOrderRemark(new_order.data[0].id, remark);\r\n\r\n //SbC DEPRICATED\r\n //this.saveShoppingCartToDB(user_id, this.cart.user);\r\n //(async() => await this.saveShoppingCartToDB(user_id, this.cart.user))();\r\n\r\n this.addOrderLineShipping();\r\n\r\n return order_id;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return order_id;\r\n }\r\n\r\n async editOrder(user_id, remark) {\r\n //SbC check if causes double orderline after login as anonymous -> think not\r\n (async() => await this.editOrderItems(user_id))();\r\n this.setOrderRemark(this.order_data.order_id, remark);\r\n\r\n if (user_id !== undefined && user_id !== 0) {\r\n this.saveShoppingCartToDB(user_id, this.cart.user)\r\n }\r\n }\r\n\r\n addOrderItems(userId) {\r\n // SbC DEPRECATED\r\n // if (userId === 0) {\r\n // //console.log('SbC add anon')\r\n // this.cart.anonymous.map((item) => {\r\n // this.addOrderLine(item, 'add');\r\n // })\r\n // } else {\r\n // //console.log('SbC add user')\r\n // this.cart.user.map((item) => {\r\n // this.addOrderLine(item, 'add');\r\n // })\r\n // } \r\n }\r\n\r\n async editOrderItems(id) {\r\n let items;\r\n if (id !== undefined && id !== 0 && id !== '0') {\r\n items = this.cart.user;\r\n } else {\r\n items = this.cart.anonymous;\r\n }\r\n\r\n items.map(async (item) => {\r\n const edit_order_item = await this.addOrderLine(item, 'edit');\r\n })\r\n\r\n //const returnData = await this.editOrderLineShipping();\r\n }\r\n\r\n async saveOrderDataProfile() {\r\n let returnData;\r\n // try {\r\n // const returnData = await order.saveOrderDataProfile(this.order_data.order_id, this.order_data);\r\n // runInAction(async() => {\r\n // const returnData = await this.editOrderLineShipping();\r\n // })\r\n // } catch (error) {\r\n // runInAction(() => {\r\n // this.state = \"error\"\r\n // })\r\n // }\r\n //returnData = await order.saveOrderDataProfile(this.order_data.order_id, this.order_data);\r\n //returnData = await this.editOrderLineShipping();\r\n\r\n try {\r\n const returnData = await order.saveOrderDataProfile(this.order_data.order_id, this.order_data);\r\n runInAction(async() => {\r\n //const returnData = await this.editOrderLineShipping();\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async addOrderLine(item, action) {\r\n let book_id;\r\n let new_order_item;\r\n \r\n const userId = this.order_data.client_id;\r\n const orderId = await this.returnOrderId(userId);\r\n\r\n if (item) {\r\n if (item.book_id === null || item.book_id === undefined) {\r\n if (item.id === null || item.id === undefined) {\r\n //book_id = item.sku;\r\n book_id = item.idx;\r\n } else {\r\n book_id = item.id;\r\n }\r\n } else {\r\n book_id = parseInt(item.book_id);\r\n }\r\n \r\n // SbC correct add orderline used\r\n const order_line = {\r\n shop: item.shop,\r\n //order_id: this.order_data.order_id,\r\n book_id: book_id,\r\n sku: item.sku,\r\n description: item.description,\r\n amount: item.amount,\r\n weight: item.weight,\r\n price: item.price,\r\n discount: item.discount,\r\n //discount: 12,\r\n vat: item.vat_perc\r\n } \r\n \r\n if (item.amount !== 0 && item.amount !== '0' && this.order_data.order_id !== 0 && this.order_data.order_id !== 99 && this.order_data.order_id !== '99') {\r\n if (action === 'add') {\r\n new_order_item = await order.addOrderLine(order_line, this.order_data.order_id, action);\r\n\r\n this.addOrderLineShipping();\r\n }\r\n if (action === 'edit') {\r\n if (this.order_data.order_id !== 0) {\r\n let orderlinesDirect = await this.retrieveOrderlinesDirect(this.order_data.client_id);\r\n let idx = orderlinesDirect.findIndex(item => book_id.toString() === order_line.book_id.toString());\r\n if (idx === -1) {\r\n //SbC DEPRICATED??\r\n //new_order_item = await order.addOrderLine(order_line, this.order_data.order_id, 'add');\r\n } else {\r\n new_order_item = await order.editOrderLine(order_line, this.order_data.order_id, 'edit');\r\n }\r\n } else {\r\n //new_order_item = await order.editOrderLine(order_line, this.order_data.order_id, action);\r\n }\r\n }\r\n if (action === 'replace') {\r\n if (this.order_data.order_id !== 0) {\r\n let orderlinesDirect = await this.retrieveOrderlinesDirect(this.order_data.client_id);\r\n let idx = orderlinesDirect.findIndex(item => book_id.toString() === order_line.book_id.toString());\r\n //if (idx === -1) {\r\n // console.log('SbC add 2', action, order_line)\r\n // new_order_item = await order.addOrderLine(order_line, this.order_data.order_id, 'add');\r\n // } else {\r\n new_order_item = await order.editOrderLine(order_line, this.order_data.order_id, 'edit');\r\n // }\r\n } else {\r\n //new_order_item = await order.editOrderLine(order_line, this.order_data.order_id, action);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n async deleteOrderLine(item, action) {\r\n let bookId;\r\n \r\n if ('id' in item) {\r\n bookId = item.id;\r\n } else {\r\n bookId = item.book_id;\r\n }\r\n const order_line = {\r\n order_id: this.order_data.order_id,\r\n book_id: bookId,\r\n sku: item.sku\r\n }\r\n\r\n const returnData = await order.handleOrderItem(order_line, action);\r\n }\r\n\r\n /**\r\n * SbC only when creating new order\r\n */\r\n async addOrderLineShipping() {\r\n const action = 'add';\r\n const order_line = {\r\n order_id: this.order_data.order_id,\r\n price: this.order_data.shipping_costs,\r\n vat: this.order_data.vat_shipping_perc\r\n }\r\n\r\n //const returnData = await orders.handleOrderLineShipping(order_line, this.order_data.order_id);\r\n const returnData = await orders.addOrderLineShipping(order_line, this.order_data.order_id);\r\n }\r\n\r\n async editOrderLineShipping() {\r\n const action = 'edit';\r\n const order_line = {\r\n order_id: this.order_data.order_id,\r\n price: this.order_data.shipping_costs,\r\n vat: this.order_data.vat_shipping_perc\r\n };\r\n\r\n if (this.order_data.order_id !== 0 && this.order_data.order_id !== \"0\") {\r\n //const returnData = await orders.handleOrderLineShipping(order_line, this.order_data.order_id);\r\n const returnData = await orders.editOrderLineShipping(order_line, this.order_data.order_id);\r\n }\r\n }\r\n\r\n saveRowPrice(loggedin, book_id, sku, total, discount) {\r\n let items;\r\n if (loggedin) {\r\n items = this.cart.user;\r\n } else {\r\n items = this.cart.anonymous;\r\n }\r\n const idx = items.findIndex(item => item.sku === sku);\r\n if (idx !== -1) {\r\n items[idx].product_total_incl = total;\r\n //items[idx].discount = discount;\r\n }\r\n\r\n this.calculateTotalCart(loggedin);\r\n }\r\n\r\n calculateTotalCart(loggedin) {\r\n let items;\r\n if (loggedin) {\r\n items = this.cart.user;\r\n } else {\r\n items = this.cart.anonymous;\r\n }\r\n\r\n let totalCart = 0;\r\n items.map((product, i) => {\r\n if (product.status !== 'deletedx' && product.amount > 0 && product.sku !== 0 && product.sku !== undefined) {\r\n totalCart = totalCart + parseFloat(product.product_total_incl);\r\n }\r\n })\r\n\r\n this.order_data.shopping_cart.cart_total_incl = parseFloat(totalCart).toFixed(2);\r\n this.cartTotalIncl = parseFloat(totalCart).toFixed(2);\r\n }\r\n\r\n get calculateTotalOrder() {\r\n let totalOrder = 0;\r\n\r\n totalOrder = parseFloat(this.cartTotalIncl) + parseFloat(this.order_data.shipping_costs);\r\n totalOrder = parseFloat(totalOrder).toFixed(2);\r\n\r\n return totalOrder;\r\n }\r\n\r\n calculateOrderVAT(loggedin, perc) {\r\n let items;\r\n if (loggedin) {\r\n items = this.cart.user;\r\n } else {\r\n items = this.cart.anonymous;\r\n }\r\n\r\n let vat_total = 0;\r\n let vat_perc;\r\n let vat_shipping = 0;\r\n\r\n //SbC get VAT shipping\r\n items.map((product, i) => {\r\n if (product.status !== 'deletedx' && product.amount > 0 && product.sku !== 0 && product.sku !== undefined) {\r\n vat_perc = parseInt(product.vat_perc); \r\n\r\n if (vat_perc > vat_shipping) {\r\n vat_shipping = vat_perc;\r\n }\r\n }\r\n })\r\n\r\n items.map((product, i) => {\r\n if (product.status !== 'deletedx' && product.amount > 0 && product.sku !== 0 && product.sku !== undefined) {\r\n let total_incl = product.product_total_incl;\r\n\r\n vat_perc = parseInt(product.vat_perc); \r\n \r\n if (parseInt(this.settings_list[perc]) === vat_perc) {\r\n let vat = parseFloat(total_incl) - (parseFloat(total_incl) / (1 + vat_perc/100));\r\n\r\n vat_total = parseFloat(vat_total) + parseFloat((Math.round(vat * 100) / 100));\r\n\r\n // if (vat_perc === vat_shipping) {\r\n // vat_shipping = vat_perc;\r\n // }\r\n \r\n }\r\n }\r\n })\r\n\r\n //SbC add vat shipping to high or low\r\n if (parseInt(this.settings_list[perc]) === vat_shipping) {\r\n if (parseFloat(this.shippingCosts) !== 0) {\r\n vat_shipping = this.order_data.vat_shipping;\r\n } else {\r\n vat_shipping = 0;\r\n }\r\n vat_total = parseFloat(vat_total) + vat_shipping;\r\n }\r\n\r\n return vat_total.toFixed(2);\r\n }\r\n\r\n calculateShippingCostsTotal() { \r\n const costs = parseFloat(this.order_data.shipping_costs) + parseFloat(this.order_data.vat_shipping);\r\n this.order_data.shipping_costs = costs.toFixed(2);\r\n this.shippingCosts = costs.toFixed(2);\r\n }\r\n\r\n get calculateWeight() {\r\n let weight = 0;\r\n let weight_box = 80;\r\n if (this.settings_list[\"weightBox\"] !== undefined) {\r\n weight_box = parseInt(this.settings_list[\"weightBox\"]);\r\n }\r\n let items = [];\r\n\r\n const loggedin = this.order_data.client_id !== 0 ? true : false;\r\n if (loggedin) {\r\n items = this.cart.user;\r\n } else {\r\n items = this.cart.anonymous;\r\n }\r\n\r\n weight = weight + weight_box;\r\n items.map((product, i) => {\r\n if (product.status !== 'deletedx' && product.sku !== 0 && product.sku !== undefined) {\r\n if (product.weight === null || product.weight === '') {\r\n //sbC to prevent miscalculation in case no weight set\r\n let defaultWeight = 300;\r\n weight = weight + defaultWeight;\r\n } else {\r\n weight = weight + product.amount * parseInt(product.weight);\r\n }\r\n \r\n return weight;\r\n }\r\n })\r\n\r\n return weight;\r\n }\r\n\r\n //SbC DEPRICATED\r\n async calculateShipping(userId) {\r\n //SbC this is excl VAT !!\r\n //let costsShipping = 0;\r\n \r\n let shipping_abroad = false;\r\n if (this.order_data.client_settings.has_delivery_address === true ) {\r\n shipping_abroad = this.order_data.delivery_address.country_code === 'NL' ? false : true; //SbC is NL\r\n } else {\r\n shipping_abroad = this.order_data.client_profile.country_code === 'NL' ? false : true; //SbC is NL\r\n }\r\n\r\n //SbC calculate weight\r\n let weight = this.calculateWeight;\r\n \r\n //SbC calculate shipping from table\r\n if (!Object.is(weight, NaN)) {\r\n this.getShipping(userId, weight, shipping_abroad);\r\n }\r\n }\r\n\r\n setShippingCosts(shipping) {\r\n this.order_data.shipping_costs = parseFloat(shipping).toFixed(2);\r\n this.shippingCosts = parseFloat(shipping).toFixed(2);\r\n }\r\n\r\n setShippingVAT(vat_perc) {\r\n this.order_data.vat_shipping_perc = vat_perc;\r\n this.order_data.vat_shipping = (vat_perc / 100) * this.order_data.shipping_costs;\r\n }\r\n\r\n calculateTotal() {\r\n const total = this.calculateTotalOrder;\r\n\r\n const vat_low = this.calculateOrderVATLow;\r\n this.order_data.order_vat_low = vat_low;\r\n\r\n this.order_data.order_total_incl = total;\r\n }\r\n\r\n //SbC DEPRICATED\r\n async getShipping(userId, weight, shipping_abroad) {\r\n let shippingData;\r\n let costsShipping;\r\n let shippingType;\r\n\r\n let discountApplied = false;\r\n\r\n let items;\r\n if (userId !== 0) {\r\n items = this.cart.user;\r\n } else {\r\n items = this.cart.anonymous;\r\n }\r\n \r\n let is_reseller = this.order_data.client_settings.is_reseller;\r\n let is_partner = this.order_data.client_settings.is_partner;\r\n\r\n //SbC get from Boekenlijst2008 or user data setting in Accounts\r\n let discount_minamount = (is_reseller) ? this.settings_list[\"resellerMinAmount\"] : 2; \r\n\r\n let returnData;\r\n try { \r\n if (this.order_data.order_id === 0 || this.order_data.order_id === '0') {\r\n // //SbC no order id available yet\r\n // console.log('SbC shipping data 1')\r\n returnData = await tools.getShippingCosts(weight);\r\n } else {\r\n //SbC new v2 shipping costs\r\n //console.log('SbC shipping data 2')\r\n returnData = await tools.getShippingCostsV2(this.order_data.order_id);\r\n }\r\n shippingData = returnData.data[0];\r\n \r\n runInAction(async() => {\r\n if (shipping_abroad) {\r\n let idx = -1;\r\n if (this.order_data.client_settings.has_delivery_address === true) {\r\n idx = this.countriesList.findIndex(country => country.code == this.order_data.delivery_address.country_code);\r\n } else {\r\n idx = this.countriesList.findIndex(country => country.code == this.order_data.client_profile.country_code);\r\n }\r\n \r\n //SbC calculate weight surcharge if applicable\r\n if (idx !== 0) {\r\n costsShipping = this.countriesList[idx].base_shipping;\r\n \r\n if (this.countriesList[idx].surcharge_weight !== null && this.countriesList[idx].surcharge_weight !== '') {\r\n let surcharge = weight/1000 * parseFloat(this.countriesList[idx].surcharge_weight);\r\n costsShipping = parseFloat(costsShipping) + surcharge;\r\n }\r\n }\r\n \r\n //SbC set custom shipping costs for order\r\n if (this.order_settings.custom_shipping_costs === 1) {\r\n costsShipping = await this.getCustomShippingCosts();\r\n }\r\n\r\n //SbC set no shipping costs for order\r\n if (this.order_settings.no_shipping_costs === 1) {\r\n costsShipping = 0;\r\n }\r\n\r\n //SbC only downloads ..\r\n if (weight <= 0) {\r\n costsShipping = 0;\r\n }\r\n } else { \r\n //SbC shipping check on total incl discounts \r\n let totalCart = 0;\r\n // SbC package_type = 1; // as_package\r\n // SbC package_type = 2; // as_letter\r\n let package_type = 2;\r\n\r\n items.map((product) => {\r\n //SbC TODO min amount from database!\r\n if (product.status !== 'deletedx' && product.sku !== 0 && product.sku !== undefined) {\r\n //SbC no need for checking min-amount as product.discount takes that into account\r\n discountApplied = (product.amount > 0 && product.discount > 0) ? true : discountApplied; \r\n discountApplied = (product.amount > 0 && product.discount > 0 && this.order_settings.discounts_overruled === 1) ? true : discountApplied;\r\n \r\n totalCart = (discountApplied) \r\n ? totalCart + parseFloat(product.price) * ((100 - product.discount)/100) * parseFloat(product.amount)\r\n : totalCart + parseFloat(product.price) * parseFloat(product.amount)\r\n\r\n //SbC check if package type is overruled for bottles etc\r\n if (parseInt(product.package_type) === 1 || parseInt(product.weight) === 1 ) {\r\n package_type = 1;\r\n }\r\n }\r\n })\r\n \r\n if (items.length >= 3 && weight > 1000) {\r\n package_type = 1;\r\n }\r\n\r\n if (weight > 1000) {\r\n package_type = 1;\r\n }\r\n\r\n if (shippingData) { \r\n costsShipping = shippingData.as_letter !== null && package_type !== 1\r\n ? shippingData.as_letter <= shippingData.as_package \r\n ? shippingData.as_letter \r\n : shippingData.as_package\r\n : shippingData.as_package\r\n }\r\n\r\n if (!is_reseller && !discountApplied && totalCart >= this.order_settings.shipping_free) {\r\n costsShipping = 0;\r\n }\r\n\r\n if (is_reseller && !discountApplied && totalCart >= this.order_settings.shipping_free) {\r\n costsShipping = 0;\r\n }\r\n\r\n if (is_reseller && totalCart >= this.order_settings.shipping_free_resellers) {\r\n costsShipping = 0;\r\n }\r\n\r\n //SbC free above 250 for all\r\n if (totalCart >= this.order_settings.shipping_free_resellers) {\r\n costsShipping = 0;\r\n }\r\n\r\n if (totalCart < 0) {\r\n costsShipping = 0;\r\n }\r\n\r\n //SbC set custom shipping costs for order\r\n let customShipping = await this.checkShippingCostsCustom();\r\n\r\n if (customShipping[0].custom_shipping_costs === 1) {\r\n costsShipping = await this.getCustomShippingCosts();\r\n }\r\n\r\n //SbC set no shipping costs for order\r\n await this.checkShippingCostsOverruled();\r\n if (this.order_settings.no_shipping_costs === 1) {\r\n costsShipping = 0;\r\n }\r\n\r\n //SbC only downloads ..\r\n if (weight <= 0) {\r\n costsShipping = 0;\r\n } \r\n }\r\n \r\n // this.order_data.shipping_costs = parseFloat(costsShipping).toFixed(2);\r\n // this.shippingCosts = parseFloat(costsShipping).toFixed(2);\r\n\r\n this.calculateShippingVat(userId);\r\n this.calculateShippingCostsTotal();\r\n //SbC necessary from login in order if discount applied\r\n //const returnData = await this.editOrderLineShipping();\r\n\r\n this.calculateTotal();\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } \r\n }\r\n\r\n async getCustomShippingCosts() {\r\n let custom_shipping = 0;\r\n try {\r\n const returnData = await order.getCustomShippingCosts(this.order_data.order_id);\r\n runInAction(() => {\r\n custom_shipping = parseFloat(returnData.data[0].custom_shipping_costs) / (1 + parseFloat(returnData.data[0].shipping_vat) / 100);\r\n return custom_shipping;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return custom_shipping;\r\n }\r\n\r\n calculateShippingVat(id) {\r\n let items;\r\n let loggedin;\r\n \r\n if (id !== undefined && id !== 0 && id !== '0') {\r\n loggedin = true;\r\n items = this.cart.user;\r\n } else {\r\n loggedin = false;\r\n items = this.cart.anonymous;\r\n }\r\n \r\n let vat_perc = 9;\r\n items.map((product) => {\r\n if (product.vat_perc > vat_perc) {\r\n vat_perc = product.vat_perc;\r\n }\r\n })\r\n this.order_data.vat_shipping_perc = vat_perc;\r\n this.order_data.vat_shipping = (vat_perc / 100) * this.order_data.shipping_costs;\r\n }\r\n\r\n presetDataProfile(key, value) {\r\n if (this.order_data.client_profile[key] == '') {\r\n this.order_data.client_profile[key] = value;\r\n }\r\n }\r\n\r\n async removeFromCart(id, sku) {\r\n let items;\r\n let loggedin;\r\n\r\n if (id !== undefined && id !== 0 && id !== '0') {\r\n loggedin = true;\r\n items = this.cart.user;\r\n } else {\r\n loggedin = false;\r\n items = this.cart.anonymous;\r\n }\r\n\r\n let idx = items.findIndex(item => item.sku === sku);\r\n items[idx].status = \"deletedx\";\r\n items[idx].amount = 0;\r\n //items.splice(idx, 1);\r\n\r\n this.calculateTotalCart();\r\n\r\n if (id !== undefined && id !== 0 && id !== '0') {\r\n this.cart.user = items;\r\n } else {\r\n this.cart.anonymous = items;\r\n }\r\n\r\n if (id !== undefined && id !== 0) {\r\n (async() => await this.saveShoppingCartToDB(id, this.cart.user))();\r\n } else {\r\n this.saveShoppingCartToLS(id, this.cart);\r\n }\r\n }\r\n\r\n resetOrder(use_case, is_logged_in) {\r\n this.order_data.order_id = 0;\r\n this.order_data.order_guid = '';\r\n this.order_data.order_remark = '';\r\n\r\n this.resetOrderData(is_logged_in);\r\n this.resetBusinessData();\r\n this.resetDeliveryAddresData();\r\n this.resetPayment();\r\n\r\n if (use_case !== 'open_order') {\r\n this.resetCart(is_logged_in);\r\n }\r\n }\r\n\r\n resetOrderData(stay_logged_in) {\r\n this.order_data['order_id'] = 0;\r\n this.order_data['order_guid'] = '';\r\n this.order_data['order_remark'] = '';\r\n\r\n this.discounts_overruled = 0;\r\n this.order_settings.discounts_overruled = 0;\r\n\r\n if (!stay_logged_in && this.cart.anonymous.length === 0) {\r\n this.cartTotalIncl = 0;\r\n this.shippingCosts = 0;\r\n }\r\n\r\n if (stay_logged_in) {\r\n this.cartTotalIncl = 0;\r\n this.shippingCosts = 0;\r\n }\r\n\r\n if (!stay_logged_in) {\r\n this.order_data['affiliate_id'] = 0;\r\n this.order_data['client_id'] = 0;\r\n this.partner_code.code = '';\r\n this.partner_code.last_date = '';\r\n }\r\n\r\n this.order_data.client_profile['firstname'] = '';\r\n this.order_data.client_profile['lastname'] = '';\r\n this.order_data.client_profile['email'] = '';\r\n this.order_data.client_profile['phonenr'] = '';\r\n this.order_data.client_profile['address'] = '';\r\n this.order_data.client_profile['housenr'] = '';\r\n this.order_data.client_profile['addition'] = '';\r\n this.order_data.client_profile['zipcode'] = '';\r\n this.order_data.client_profile['city'] = '';\r\n this.order_data.client_profile['country'] = this.country_default;\r\n this.order_data.client_profile['country_select'] = this.country_default;\r\n this.order_data.client_profile['country_code'] = this.country_code_default;\r\n\r\n this.order_data.billing_address['address'] = '';\r\n this.order_data.billing_address['housenr'] = '';\r\n this.order_data.billing_address['addition'] = '';\r\n this.order_data.billing_address['zipcode'] = '';\r\n this.order_data.billing_address['city'] = '';\r\n this.order_data.billing_address['country'] = this.country_default;\r\n this.order_data.billing_address['country_select'] = this.country_default;\r\n this.order_data.billing_address['country_code'] = this.country_code_default;\r\n\r\n this.order_data.client_settings['has_delivery_address'] = false;\r\n this.resetDeliveryAddresData();\r\n\r\n this.order_data.client_settings['is_partner'] = false;\r\n this.order_data.client_settings['is_reseller'] = false;\r\n this.order_data.client_settings['is_business'] = false;\r\n this.order_data.client_settings['has_delivery_address'] = false;\r\n this.resetBusinessData();\r\n\r\n localStorage.removeItem('SB_ORDER');\r\n\r\n this.resetPayment();\r\n }\r\n\r\n resetCart(is_logged_in) {\r\n this.order_data.shopping_cart.cart_total_incl = 0;\r\n this.order_data.shopping_cart.vat_total = 0;\r\n\r\n if (is_logged_in) {\r\n this.cart.user = [];\r\n this.resetShoppingCartToDB(this.order_data.client_id);\r\n } else {\r\n this.cart.anonymous = [];\r\n }\r\n\r\n this.order_data.shipping_costs = 0;\r\n this.order_data.vat_shipping_perc = 0;\r\n this.order_data.vat_shipping = 0;\r\n this.order_data.order_total_incl = 0;\r\n }\r\n\r\n resetCartUser() {\r\n this.cart.user = [];\r\n }\r\n\r\n resetBusinessData() {\r\n this.order_data.company_profile['name'] = '';\r\n this.order_data.company_profile['nrKvK'] = '';\r\n this.order_data.company_profile['nrVAT'] = '';\r\n }\r\n\r\n resetDeliveryAddresData() {\r\n this.order_data.delivery_address['delivery_name'] = '';\r\n this.order_data.delivery_address['delivery_company'] = '';\r\n this.order_data.delivery_address['address'] = '';\r\n this.order_data.delivery_address['housenr'] = '';\r\n this.order_data.delivery_address['addition'] = '';\r\n this.order_data.delivery_address['zipcode'] = '';\r\n this.order_data.delivery_address['city'] = '';\r\n this.order_data.delivery_address['country'] = this.country_default;\r\n this.order_data.delivery_address['country_select'] = this.country_default;\r\n this.order_data.delivery_address['country_code'] = this.country_code_default;\r\n }\r\n\r\n copyDeliveryAddresData() {\r\n this.order_data.delivery_address['delivery_name'] = this.order_data.client_profile['firstname'] + ' ' + this.order_data.client_profile['lastname'];\r\n this.order_data.delivery_address['delivery_company'] = this.order_data.company_profile['name'];\r\n this.order_data.delivery_address['address'] = this.order_data.client_profile['address'];\r\n this.order_data.delivery_address['housenr'] = this.order_data.client_profile['housenr'];\r\n this.order_data.delivery_address['addition'] = this.order_data.client_profile['addition'];\r\n this.order_data.delivery_address['zipcode'] = this.order_data.client_profile['zipcode'];\r\n this.order_data.delivery_address['city'] = this.order_data.client_profile['city'];\r\n this.order_data.delivery_address['country'] = this.order_data.client_profile['country'];\r\n this.order_data.delivery_address['country_select'] = this.order_data.client_profile['country_select'];\r\n this.order_data.delivery_address['country_code'] = this.order_data.client_profile['country_code'];\r\n }\r\n\r\n resetPayment() {\r\n this.order_data.payment.payment_method.id = 'XX';\r\n }\r\n\r\n resetOrderStatus() {\r\n this.order_data.order_status.payment_status = 'pending';\r\n }\r\n\r\n getAffiliateId(id) {\r\n this.order_data.affiliate_id = id;\r\n }\r\n\r\n setAffiliateId(id) {\r\n this.order_data.affiliate_id = id;\r\n \r\n const pc = this.partner_code.code;\r\n if (pc !== id) {\r\n this.partner_code.code = id;\r\n this.partner_code.last_date = new Date();\r\n }\r\n\r\n this.activatePCUse(id);\r\n }\r\n\r\n async activatePCUse(pc) {\r\n try {\r\n const returnData = await order.activatePCUse(pc);\r\n runInAction(() => {\r\n let processData = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async setCartView(id, view) {\r\n //SbC cases discount to 0 in review\r\n //SbC DEPRICATED as abundant?\r\n\r\n //SBC not needed if discountsOverruled ...???\r\n //Changing back between DiscountsOverruled ????\r\n \r\n if (view !== 'review' && view !== 'client' && view !== 'payment') {\r\n (async() => await this.editOrderItems(id))();\r\n }\r\n\r\n //SbC copied from editOrderItems - needed due to possible discount\r\n //const returnData = await this.editOrderLineShipping();\r\n this.order_interface.cart_view = view;\r\n }\r\n\r\n setClientId(id) {\r\n this.order_data.client_id = id;\r\n }\r\n\r\n setOrderProfileFromUser(data) {\r\n this.order_data.client_profile = {};\r\n this.order_data.billing_address = {};\r\n this.order_data.delivery_address = {};\r\n this.order_data.company_profile = {};\r\n\r\n this.order_data.client_profile['firstname'] = data.firstname;\r\n this.order_data.client_profile['lastname'] = data.lastname;\r\n this.order_data.client_profile['email'] = data.email;\r\n this.order_data.client_profile['phonenr'] = data.phonenr;\r\n this.order_data.client_profile['address'] = data.address;\r\n this.order_data.client_profile['housenr'] = data.housenr;\r\n this.order_data.client_profile['addition'] = data.addition;\r\n this.order_data.client_profile['zipcode'] = data.zipcode;\r\n this.order_data.client_profile['city'] = data.city;\r\n this.order_data.client_profile['country'] = data.country_select !== null ? data.country_select : 'Nederland';\r\n this.order_data.client_profile['country_select'] = data.country_select !== null ? data.country_select : 'Nederland';\r\n this.order_data.client_profile['country_code'] = data.country_code !== null ? data.country_code : 'NL';\r\n\r\n this.order_data.company_profile['name'] = data.company;\r\n this.order_data.company_profile['nrKvK'] = data.nrKvK;\r\n this.order_data.company_profile['nrVAT'] = data.nrVAT;\r\n\r\n this.order_data.client_settings.is_reseller = (data.is_reseller === 1 || data.is_reseller === '1' || data.is_reseller === 'on') ? true : false;\r\n //his.order_data.client_settings.is_partner = (data.is_partner === 'on' || data.is_partner === 1 || data.is_partner === '1') ? true : false; \r\n\r\n this.order_settings.no_shipping_costs = data.no_shipping_costs;\r\n }\r\n\r\n setDataProfile(form_data) {\r\n let idx;\r\n this.order_data.client_profile['firstname'] = form_data.firstname.value;\r\n this.order_data.client_profile['lastname'] = form_data.lastname.value;\r\n this.order_data.client_profile['email'] = form_data.email.value;\r\n this.order_data.client_profile['phonenr'] = form_data.phonenr.value;\r\n\r\n this.order_data.client_profile['address'] = form_data.address.value;\r\n this.order_data.client_profile['housenr'] = form_data.housenr.value;\r\n this.order_data.client_profile['addition'] = form_data.addition.value;\r\n this.order_data.client_profile['zipcode'] = form_data.zipcode.value;\r\n this.order_data.client_profile['city'] = form_data.city.value;\r\n this.order_data.client_profile['country'] = parseInt(form_data.country_select.value);\r\n this.order_data.client_profile['country_select'] = parseInt(form_data.country_select.value)\r\n idx = this.countriesList.findIndex(country => country.code == form_data.country_select.value);\r\n if (idx !== -1) {\r\n this.order_data.client_profile['country'] = this.countriesList[idx].displayValue;\r\n this.order_data.client_profile['country_code'] = this.countriesList[idx].code;\r\n }\r\n\r\n this.order_data.billing_address['address'] = form_data.address.value;\r\n this.order_data.billing_address['housenr'] = form_data.housenr.value;\r\n this.order_data.billing_address['addition'] = form_data.addition.value;\r\n this.order_data.billing_address['zipcode'] = form_data.zipcode.value;\r\n this.order_data.billing_address['city'] = form_data.city.value;\r\n this.order_data.billing_address['country'] = parseInt(form_data.country_select.value);\r\n this.order_data.billing_address['country_select'] = parseInt(form_data.country_select.value);\r\n if (idx !== -1) {\r\n this.order_data.billing_address['country_code'] = this.countriesList[idx].code;\r\n this.order_data.billing_address['country'] = this.countriesList[idx].displayValue;\r\n }\r\n\r\n //this.editOrderLineShipping();\r\n }\r\n\r\n setDataDeliveryAddress(form_data) {\r\n let idx;\r\n if (this.order_data.client_settings.has_delivery_address && form_data.address.value !== '' && form_data.city.value !== '') {\r\n this.order_data.delivery_address['delivery_name'] = form_data.delivery_name.value;\r\n this.order_data.delivery_address['delivery_company'] = form_data.delivery_company.value;\r\n this.order_data.delivery_address['address'] = form_data.address.value;\r\n this.order_data.delivery_address['housenr'] = form_data.housenr.value;\r\n this.order_data.delivery_address['addition'] = form_data.addition.value;\r\n this.order_data.delivery_address['zipcode'] = form_data.zipcode.value;\r\n this.order_data.delivery_address['city'] = form_data.city.value;\r\n this.order_data.delivery_address['country'] = parseInt(form_data.country_select.value);\r\n this.order_data.delivery_address['country_select'] = parseInt(form_data.country_select.value);\r\n idx = this.countriesList.findIndex(country => country.code == form_data.country_select.value);\r\n if (idx !== -1) {\r\n this.order_data.delivery_address['country'] = this.countriesList[idx].displayValue;\r\n this.order_data.delivery_address['country_code'] = this.countriesList[idx].code;\r\n }\r\n } else {\r\n this.order_data.delivery_address['delivery_name'] = '';\r\n this.order_data.delivery_address['delivery_company'] = '';\r\n this.order_data.delivery_address['address'] = '';\r\n this.order_data.delivery_address['housenr'] = '';\r\n this.order_data.delivery_address['addition'] = '';\r\n this.order_data.delivery_address['zipcode'] = '';\r\n this.order_data.delivery_address['city'] = '';\r\n this.order_data.delivery_address['country'] = this.country_default;\r\n this.order_data.delivery_address['country_select'] = this.country_default;\r\n this.order_data.delivery_address['country_code'] = this.country_code_default;\r\n }\r\n\r\n }\r\n\r\n setDataBusiness(form_data) {\r\n if (this.order_data.client_settings.is_business) {\r\n this.order_data.company_profile['name'] = form_data.company.value;\r\n this.order_data.company_profile['nrKvK'] = form_data.nrKvK.value;\r\n this.order_data.company_profile['nrVAT'] = form_data.nrVAT.value;\r\n }\r\n }\r\n\r\n setSettingDeliveryAddress(setting) {\r\n this.order_data.client_settings.has_delivery_address = setting;\r\n }\r\n\r\n setSettingBusiness(setting, user_business) {\r\n this.order_data.client_settings.is_business = setting;\r\n if (!setting) {\r\n this.order_data.company_profile.name = '';\r\n } else {\r\n this.order_data.company_profile.name = user_business.company;\r\n }\r\n }\r\n\r\n setPaymentData(name, value, display_name) {\r\n this.order_data.payment[name] = {\r\n id: value,\r\n title: display_name\r\n }\r\n if (name === 'payment_issuer') {\r\n this.order_data.payment[name] = {\r\n code: this.payment_issuers[value].code\r\n }\r\n } \r\n if (name === 'payment_method') {\r\n if (value !== 'IDEAL') {\r\n this.order_data.payment['payment_issuer'] = {\r\n code: '9999'\r\n }\r\n }\r\n } \r\n }\r\n\r\n async handlePaymentProcess(order_id, order_guid, payment_id, issuer_code, use_case, order_data) { \r\n this.saveUseCaseToLS(use_case);\r\n this.monitorStartPayment(order_id, this.order_data.client_profile.email);\r\n \r\n let payment_data;\r\n let url;\r\n if (use_case == 'open_order') {\r\n payment_data = order_data;\r\n } else {\r\n payment_data = {\r\n order_total_incl: this.calculateTotalOrder,\r\n firstname: this.order_data.client_profile.firstname,\r\n lastname: this.order_data.client_profile.lastname,\r\n email: this.order_data.client_profile.email,\r\n address: this.order_data.client_profile.address,\r\n housenr: this.order_data.client_profile.housenr,\r\n addition: this.order_data.client_profile.addition,\r\n zipcode: this.order_data.client_profile.zipcode,\r\n city: this.order_data.client_profile.city\r\n }\r\n }\r\n try {\r\n //console.log('SbC total payment', payment_data.order_total_incl)\r\n const returnData = await payment.handlePaymentProcess(order_id, order_guid, payment_data, payment_id, issuer_code);\r\n runInAction(() => {\r\n let processData = returnData.data;\r\n if (processData.url !== null) {\r\n this.order_data.order_status.url = processData.url;\r\n this.order_data.order_status.payment_status = processData.process;\r\n this.payment_status = processData.process;\r\n url = processData.url;\r\n return url;\r\n } else {\r\n this.order_interface.error_window = true;\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return url;\r\n }\r\n\r\n async handleBankTransfer(id, order_id, use_case, order_data) {\r\n let payment_data;\r\n if (use_case == 'open_order') {\r\n payment_data = order_data;\r\n } else {\r\n order_id = this.order_data.order_id;\r\n payment_data = {\r\n order_total_incl: this.calculateTotalOrder,\r\n firstname: this.order_data.client_profile.firstname,\r\n lastname: this.order_data.client_profile.lastname,\r\n email: this.order_data.client_profile.email,\r\n address: this.order_data.client_profile.address,\r\n housenr: this.order_data.client_profile.housenr,\r\n addition: this.order_data.client_profile.addition,\r\n zipcode: this.order_data.client_profile.zipcode,\r\n city: this.order_data.client_profile.city\r\n }\r\n //console.log('SbC open order', order_id, this.order_data, payment_data)\r\n }\r\n \r\n try {\r\n const returnData = await payment.handleBankTransfer(order_id, payment_data);\r\n runInAction(() => {\r\n let processData = returnData;\r\n this.order_data.order_status.payment_status = 'banktransfer';\r\n this.payment_status = 'banktransfer';\r\n this.setCartView(id, \"confirmation\");\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getOrderId(guid) {\r\n let order_id;\r\n try {\r\n const returnData = await order.getOrderId(guid);\r\n runInAction(() => {\r\n order_id = returnData.data[0].order_id;\r\n return order_id;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return order_id;\r\n }\r\n\r\n async getOrderStatus(guid) {\r\n let payment_status;\r\n try {\r\n const returnData = await payment.getOrderStatus(guid);\r\n runInAction(() => {\r\n this.payment_status = returnData.data[0].order_status;\r\n payment_status = returnData.data[0].order_status;\r\n return payment_status;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return payment_status;\r\n }\r\n\r\n async getPaymentStatus(orderId) {\r\n let payment_status;\r\n try {\r\n const returnData = await payment.getPaymentStatus(orderId);\r\n runInAction(() => {\r\n payment_status = returnData.data[0].order_status;\r\n return payment_status;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return payment_status;\r\n }\r\n\r\n async setOrderStatus(client_id, order_id, order_status) {\r\n try {\r\n const returnData = await order.setOrderStatus(client_id, order_id, order_status);\r\n runInAction(() => {\r\n //SbC:: update orderHistoryList\r\n this.getAccountOrders(client_id);\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getAccountOrders(user_id) {\r\n //const user_id2 = 19241;\r\n this.startLoader();\r\n try {\r\n const returnData = await order.getAccountOrders(user_id);\r\n runInAction(() => {\r\n let orderData = returnData;\r\n this.orderHistoryList = orderData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n this.stopLoader();\r\n }\r\n }\r\n\r\n async getPaymentIssuers() {\r\n try {\r\n const returnData = await payment.getPaymentIssuers();\r\n runInAction(() => {\r\n let payment_issuers = returnData.data;\r\n\r\n payment_issuers.map((country, i) => {\r\n payment_issuers[i].displayValue = payment_issuers[i].description;\r\n payment_issuers[i].value = i;\r\n this.payment_issuers[i] = payment_issuers[i];\r\n })\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n unloadPaymentWindow() {\r\n this.order_interface.payment_window = false;\r\n }\r\n\r\n useCartDB() {\r\n //SbC reset ids to prevent order id mixups:\r\n if (this.shopping_cart_db_id !== null) {\r\n this.order_data.order_id = this.shopping_cart_db_id;\r\n this.order_data.order_guid = this.shopping_cart_db_guid;\r\n }\r\n\r\n // this.shopping_cart_db.map((item) => {\r\n // if (item.status == 'deletedx') {\r\n // console.log('sbc permanantly delete!')\r\n // }\r\n // })\r\n this.cart.user = this.shopping_cart_db;\r\n this.shopping_cart_db = [];\r\n this.closeDialogCompareCarts()\r\n }\r\n\r\n async concatLSandDB() {\r\n let idx;\r\n let userId = this.order_data.client_id;\r\n this.cart.user = this.shopping_cart_db;\r\n\r\n this.cart.anonymous.map(async(item_anonymous) => {\r\n idx = this.cart.user\r\n .findIndex((item) => item.sku === item_anonymous.sku);\r\n if (idx !== -1) {\r\n //this.cart.user[idx].amount = parseInt(this.cart.user[idx].amount) + parseInt(item_anonymous.amount);\r\n this.cart.user[idx].amount = parseInt(item_anonymous.amount);\r\n this.cart.user[idx].status = parseInt(item_anonymous.status);\r\n } else {\r\n //SbC add to cart user\r\n this.cart.user.push(item_anonymous); \r\n\r\n //SbC not yet in cart -> also save as orderline \r\n //SbC when logging in no effect casue no order id yet\r\n const orderId = await this.returnOrderId(userId);\r\n\r\n (async() => await this.addOrderLine(item_anonymous, 'add'))();\r\n }\r\n\r\n if (this.shopping_cart_db_id !== null) {\r\n this.order_data.order_id = this.shopping_cart_db_id;\r\n this.order_data.order_guid = this.shopping_cart_db_guid;\r\n }\r\n })\r\n\r\n /* SbC depricated ? */\r\n await this.constructShoppingCart(userId, 'init');\r\n\r\n await this.saveShoppingCartToDB(userId, this.cart.user);\r\n\r\n this.cart.anonymous = [];\r\n this.saveShoppingCartToLS(userId, this.cart);\r\n \r\n this.shopping_cart_db = [];\r\n this.closeDialogCompareCarts();\r\n }\r\n\r\n deleteLSandDB() {\r\n // let id = this.order_data.client_id;\r\n // this.deleteShoppingCartFromDB(id);\r\n // this.deleteShoppingCartFromLS();\r\n // this.shopping_cart_db = [];\r\n }\r\n\r\n /**\r\n * SHOPPING CART actions\r\n * parallel to cart in order_data but used when no order nr is generated yet\r\n */\r\n\r\n async saveShoppingCartToDB(id, shopping_cart) {\r\n const orderId = await this.returnOrderId(id);\r\n\r\n if (id !== 0) {\r\n //if (orderId !== 0 && orderId !== '0') {\r\n if (orderId !== 0 && orderId !== '0' && orderId !== 99 && orderId !== '99') { \r\n this.order_data.order_id = orderId;\r\n }\r\n\r\n try {\r\n //const returnData = await account.saveShoppingCart(id, shopping_cart, this.order_data.order_id, this.order_data.order_guid);\r\n const returnData = await account.saveShoppingCart(id, shopping_cart, orderId, this.order_data.order_guid);\r\n runInAction(() => {\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n //}\r\n }\r\n }\r\n\r\n async syncShoppingCartWithOrderlines(id, shopping_cart) {\r\n let orderlinesDirect;\r\n let sku;\r\n\r\n let orderId = await this.retrieveOrderIdDirect(id);\r\n if (orderId !== 0) {\r\n orderlinesDirect = await this.retrieveOrderlinesDirect(id);\r\n\r\n for (let i = 0; i < shopping_cart.length; i++) {\r\n sku = shopping_cart[i].sku;\r\n let idx = orderlinesDirect\r\n .findIndex((item) => item.sku === sku);\r\n\r\n if (idx === -1) {\r\n //SbC add to orderlines\r\n (async() => await this.addOrderLine(shopping_cart[i], 'add'))();\r\n }\r\n }\r\n } \r\n }\r\n\r\n async resetShoppingCartToDB(id) {\r\n const orderId = 99;\r\n const guid = null;\r\n const cart = [];\r\n \r\n try {\r\n const returnData = await account.saveShoppingCart(id, cart, orderId, guid);\r\n runInAction(() => {\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n retrieveShoppingCart(id, use_case) { \r\n if (id !== undefined && id !== 0 && id !== '0') {\r\n this.retrieveShoppingCartFromDB(id, use_case);\r\n } else {\r\n this.retrieveShoppingCartFromLS();\r\n }\r\n }\r\n\r\n async retrieveShoppingCartFromOrder(id) {\r\n //SbC adds items anonymous to cart\r\n if (this.cart.user.length > 0) {\r\n console.log('SbC needs alert popup');\r\n }\r\n this.cart.user = this.cart.anonymous;\r\n this.cart.anonymous = [];\r\n\r\n //SbC ad cart from not logged in yet\r\n //SbC not yet in cart -> also save as orderline \r\n let userId = this.order_data.client_id;\r\n const orderId = await this.returnOrderId(userId);\r\n this.order_data.order_id = orderId;\r\n\r\n this.cart.user.map((item, idx) => {\r\n (async() => await this.addOrderLine(item, 'add'))();\r\n });\r\n }\r\n\r\n async retrieveShoppingCartFromDB(id, use_case) {\r\n try {\r\n const returnData = await account.retrieveShoppingCart(id);\r\n runInAction(() => {\r\n if (returnData.data.order_id !== null) {\r\n this.shopping_cart_db_id = returnData.data.order_id;\r\n this.shopping_cart_db_guid = returnData.data.guid;\r\n }\r\n this.compareShoppingCarts(returnData.data.cart, use_case);\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async returnOrderId(id) {\r\n let orderId;\r\n\r\n if (this.order_data.order_id === undefined) { \r\n try {\r\n const returnData = await account.retrieveShoppingCart(id);\r\n runInAction(() => {\r\n if (returnData.data.order_id !== null) {\r\n orderId = returnData.data.order_id;\r\n this.order_data.order_id = orderId;\r\n }\r\n return orderId;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n } else {\r\n orderId = this.order_data.order_id;\r\n }\r\n return orderId;\r\n }\r\n\r\n compareShoppingCarts(items, use_case) {\r\n if (this.cart.anonymous.length == 0) {\r\n //SbC LS shoppingcart no items \r\n // items.map((item, idx) => {\r\n // if (item.status == 'deletedx') {\r\n // this.cart.user.map((item2, idx2) => {\r\n // if (item.sku === item2.sku) {\r\n // //if (item.status === 'deletedx') {\r\n // let id = this.order_data.client_id;\r\n // this.removeFromCart(id, item.sku);\r\n // items.splice(idx, 1);\r\n // // } else {\r\n \r\n // // }\r\n // }\r\n // }) \r\n // }\r\n // })\r\n\r\n this.cart.user = items;\r\n\r\n this.order_data.order_id = this.shopping_cart_db_id;\r\n this.order_data.order_guid = this.shopping_cart_db_guid;\r\n } else { \r\n this.shopping_cart_db = items;\r\n let shopping_cart_db_cleaned = [];\r\n\r\n if (use_case == 'init') {\r\n //SbC refresh or F5 relaod\r\n this.useCartDB();\r\n } else { \r\n /* TO REVIEW */\r\n // if (items.length == 0) {\r\n // items.map((item) => {\r\n // if (item.status !== 'deletedx') {\r\n // shopping_cart_db_cleaned.push(item);\r\n // }\r\n // })\r\n // this.openDialogCompareCarts(shopping_cart_db_cleaned);\r\n // }\r\n\r\n // // //SbC DB shoppingcart has no items, LS > 0\r\n // //SbC should transfer LS\r\n // this.openDialogConcatCarts();\r\n // } else {\r\n //SbC DB shoppingcart > 0, LS > 0\r\n \r\n //SbC TEST\r\n //SbC always concat carts but notify if already cart in db\r\n \r\n let concat = false;\r\n if (this.shopping_cart_db.length > 0) {\r\n this.shopping_cart_db.map((item) => {\r\n if (item.status !== 'deletedx') {\r\n concat = true;\r\n }\r\n })\r\n if (concat === true) {\r\n this.openDialogCompareCarts(items);\r\n } else {\r\n this.concatLSandDB();\r\n }\r\n } else {\r\n this.concatLSandDB();\r\n }\r\n //}\r\n }\r\n }\r\n }\r\n\r\n async deleteShoppingCartFromDB(id) {\r\n try {\r\n const returnData = await account.deleteShoppingCart(id);\r\n runInAction(() => {\r\n this.cart.user = [];\r\n //this.order_data.shopping_cart['items'] = [];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n saveShoppingCartToLS(id, cart) {\r\n const json = JSON.stringify(cart);\r\n localStorage.setItem('SB_CART20', json)\r\n }\r\n\r\n retrieveShoppingCartFromLS() {\r\n // if (localStorage.getItem('SB_CART20')) {\r\n // this.cart = JSON.parse(localStorage.getItem('SB_CART20'));\r\n // }\r\n if (localStorage.getItem('SB_ORDER')) {\r\n let data = JSON.parse(localStorage.getItem('SB_ORDER'));\r\n this.cart.anonymous = data.cart.anonymous;\r\n }\r\n this.cart.user = [];\r\n }\r\n\r\n deleteShoppingCartFromLS() {\r\n if (localStorage.getItem('SB_CART20')) {\r\n //SbC can be depricated\r\n let cart = JSON.parse(localStorage.getItem('SB_CART20'));\r\n cart.anonymous = [];\r\n //this.cart.anonymous = [];\r\n const json = JSON.stringify(cart);\r\n localStorage.setItem('SB_CART20', json)\r\n\r\n //SbC cart in SB_ORDER storage\r\n const loggedin = this.order_data.client_id !== 0 ? true : false;\r\n if (loggedin) {\r\n this.cart.user = [];\r\n } else {\r\n this.cart.anonymous = [];\r\n }\r\n }\r\n }\r\n\r\n async getOrderData(order_id) {\r\n let order_data = [];\r\n try {\r\n const returnData = await order.getOrderData(order_id);\r\n runInAction(() => {\r\n order_data = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return order_data;\r\n }\r\n\r\n async getOrderLinesData(order_id) {\r\n let open_order_data = [];\r\n try {\r\n const returnData = await order.getOrderItemsData(order_id);\r\n runInAction(() => {\r\n open_order_data = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return open_order_data;\r\n }\r\n\r\n async getDataInvoice(idInvoice) {\r\n let orderData = [];\r\n try {\r\n const returnData = await orders.getDataInvoice(idInvoice);\r\n runInAction(() => {\r\n orderData = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return orderData;\r\n }\r\n\r\n async deleteOrderLineShipping(orderId) {\r\n try {\r\n const returnData = await orders.deleteOrderLineShipping(orderId);\r\n runInAction(() => {\r\n\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async checkOrderLineShipping(orderId) {\r\n let hasShippingLine = false;\r\n try {\r\n const returnData = await orders.getOrderLineShipping(orderId);\r\n runInAction(() => {\r\n let costs = returnData.data[0].costs;\r\n hasShippingLine = (costs !== '999' && costs !== 999) \r\n ? true \r\n : false\r\n ; \r\n return hasShippingLine;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return hasShippingLine;\r\n }\r\n\r\n async setOrderRemark(id, remark) {\r\n try {\r\n const returnData = await order.setOrderRemark(id, remark);\r\n runInAction(() => {\r\n this.order_data.order_remark = remark;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n setOrderRemarkLS(remark) {\r\n this.order_data.order_remark = remark;\r\n }\r\n\r\n deleteUseCaseFromLS() {\r\n if (localStorage.getItem('SB_USE_CASE')) {\r\n localStorage.removeItem('SB_USE_CASE');\r\n }\r\n }\r\n\r\n getUseCaseFromLS() {\r\n let use_case;\r\n if (localStorage.getItem('SB_USE_CASE')) {\r\n use_case = localStorage.getItem('SB_USE_CASE');\r\n } else {\r\n use_case = '';\r\n }\r\n return use_case;\r\n }\r\n\r\n saveUseCaseToLS(use_case) {\r\n localStorage.setItem('SB_USE_CASE', use_case)\r\n }\r\n\r\n async removeOrder(user_id, order_id) {\r\n try {\r\n const book = await order.removeOrder(order_id);\r\n runInAction(() => {\r\n this.getAccountOrders(user_id);\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async registerAnonymousClient(data) {\r\n let returnData;\r\n try {\r\n returnData = await account.addAnonymousUser(data);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n this.order_data.client_id = returnData.data[0].id;\r\n this.saveOrderDataProfile();\r\n this.cart.user = this.cart.anonymous;\r\n this.cart.anonymous = [];\r\n } \r\n return returnData;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n }\r\n return returnData;\r\n }\r\n\r\n async registerClientFromOrder(data) {\r\n //SbC depricated??\r\n try {\r\n let returnData = await account.addUserFromOrder(data);\r\n runInAction(() => {\r\n if (!('error' in returnData.data[0])) {\r\n this.order_data.client_id = returnData.data[0].id;\r\n this.saveOrderDataProfile();\r\n } else {\r\n\r\n } \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n }\r\n }\r\n\r\n updateOrderEmail(email) {\r\n this.order_data.client_profile.email = email;\r\n }\r\n\r\n async monitorOrderData() {\r\n try {\r\n let returnData = await monitoring.monitorOrderData(this.order_data.order_id, this.order_data.client_profile);\r\n runInAction(() => {\r\n \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n }\r\n }\r\n\r\n async monitorStartPayment(id, email) {\r\n let device = {\r\n mobile: rdd.isMobile,\r\n operating: rdd.isIOS,\r\n browserName: rdd.browserName,\r\n browserVersion: rdd.browserVersion\r\n }\r\n try {\r\n let returnData = await monitoring.monitorStartPayment(this.order_data.order_id, device, this.order_data.client_profile.email);\r\n runInAction(() => {\r\n \r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n\r\n })\r\n }\r\n }\r\n\r\n submitDeleteOrderLine(user_id, product) {\r\n let loggedin;\r\n if (user_id !== undefined && user_id !== 0) {\r\n loggedin = true;\r\n } else {\r\n loggedin = false;\r\n }\r\n \r\n (async() => await this.deleteOrderLine(product, 'delete'))(); \r\n (async() => await this.removeFromCart(user_id, product.sku))(); \r\n // this.calculateShipping();\r\n // this.calculateTotalCart(loggedin);\r\n }\r\n\r\n clearCartAfterPayment() {\r\n this.cart.user = [];\r\n this.order_data.order_id = 99;\r\n }\r\n\r\n clearAllShoppingCarts(is_logged_in) {\r\n // this.order_data.shopping_cart = {\r\n // items: [],\r\n // cart_total_incl: 0,\r\n // vat_total: 0\r\n // };\r\n\r\n this.order_data.order_id = 0;\r\n this.order_data.order_guid = '';\r\n this.order_data.order_remark = '';\r\n\r\n this.resetCart();\r\n this.resetOrderData(is_logged_in);\r\n // this.resetBusinessData();\r\n // this.resetDeliveryAddresData();\r\n // this.resetPayment();\r\n }\r\n\r\n resetOrderSettings(key, value) { \r\n this.order_settings[key] = value;\r\n }\r\n\r\n get calculateTotalCartItemsAnonymous() {\r\n let amount = 0;\r\n\r\n this.cart.anonymous.map((product) => {\r\n if (product.status !== 'deletedx') {\r\n amount = parseInt(amount) + parseInt(product.amount)\r\n }\r\n })\r\n\r\n return amount;\r\n }\r\n\r\n get calculateTotalCartItemsUser() {\r\n let amount = 0;\r\n\r\n this.cart.user.map((product) => {\r\n if (product.status !== 'deletedx') {\r\n amount = parseInt(amount) + parseInt(product.amount);\r\n }\r\n })\r\n\r\n return amount;\r\n }\r\n\r\n async addToCart(shop, id, book, action, amount, discount) {\r\n let items;\r\n let cart_item;\r\n let description;\r\n\r\n if (id !== undefined && id !== 0 && id !== '0') {\r\n let totalCart = await this.constructShoppingCart(id, 'add');\r\n items = totalCart;\r\n\r\n } else {\r\n items = this.cart.anonymous;\r\n }\r\n\r\n //SbC construct description\r\n let title = book.title;\r\n let collectionName = '';\r\n let collectionPart = '';\r\n let versionTag = '';\r\n \r\n if (book.collection_name && book.collection_name !== null) {\r\n collectionName = book.collection_name + ': ';\r\n }\r\n if (book.collection_part && book.collection_part !== null) {\r\n collectionPart = ' ' + book.collection_part;\r\n }\r\n if (book.version_tag && book.version_tag !== null) {\r\n versionTag = ' (' + book.version_tag + ')';\r\n }\r\n\r\n description = collectionName + title + collectionPart + versionTag;\r\n\r\n let idx = items.findIndex(item => item.sku === book.sku);\r\n let percDiscount = (discount && book.discount_active !== 0) ? discount : 0; \r\n\r\n //SbC adj for IDx\r\n if (action === \"add\") {\r\n if ( idx !== -1 && idx !== null) {\r\n items[idx].amount = parseInt(items[idx].amount) + 1;\r\n items[idx].discount = percDiscount;\r\n items[idx].status = 'added';\r\n\r\n cart_item = items[idx];\r\n } else {\r\n cart_item = {\r\n shop: shop,\r\n sku: book.sku,\r\n //id: book.id,\r\n id: (book.id !== null) ? book.id : book.idx,\r\n description: description,\r\n amount: amount,\r\n weight: book.weight,\r\n price: book.price_incl,\r\n discount_active: (book.discount_active === 1 || book.discount_active === '1') ? 1 : book.discount_active,\r\n discount: percDiscount,\r\n vat_perc: book.vat_perc,\r\n status: 'added'\r\n }\r\n items.push(cart_item);\r\n }\r\n }\r\n\r\n if (action === \"replace\") {\r\n if (idx !== -1 && idx !== null) {\r\n items[idx].amount = amount;\r\n items[idx].discount = percDiscount;\r\n items[idx].status = 'added';\r\n\r\n cart_item = items[idx];\r\n }\r\n }\r\n\r\n if (id !== undefined && id !== 0 && id !== '0') {\r\n this.cart.user = items;\r\n } else {\r\n this.cart.anonymous = items;\r\n }\r\n \r\n this.saveShoppingCartToLS(id, this.cart);\r\n if (id !== undefined && id !== 0) {\r\n (async() => await this.saveShoppingCartToDB(id, this.cart.user))();\r\n \r\n //SbC test \r\n //this.editOrderItems(id);\r\n if (action === \"add\") {\r\n (async() => await this.addOrderLine(cart_item, 'add'))();\r\n }\r\n if (action === \"replace\") {\r\n (async() => await this.addOrderLine(cart_item, 'replace'))();\r\n }\r\n } \r\n\r\n this.lastAddedBook.sku = book.sku;\r\n } \r\n\r\n //### CONSTRUCT SHOPPING CART\r\n\r\n async constructShoppingCart(id, action) {\r\n let orderlinesDirect = [];\r\n\r\n if (id !== 0) {\r\n let cartDirect = await this.retrieveShoppingCartDirect(id);\r\n let orderId = await this.retrieveOrderIdDirect(id);\r\n //if (orderId !== 0 && orderId === 99 && orderId === '99') {\r\n if (orderId !== 0) {\r\n orderlinesDirect = await this.retrieveOrderlinesDirect(id);\r\n } \r\n\r\n if ((orderId === 99 || orderId === '99') && action !== 'add') {\r\n //SbC caused loosing orderline from anonymous when logging in using form-check-email\r\n //this.cart.user = [];\r\n };\r\n let totalCart = await this.concatConstructResults(this.cart.user, cartDirect, orderlinesDirect, action);\r\n\r\n //this.updateOrderLinesToLS(totalCart);\r\n\r\n this.calculateTotal();\r\n\r\n return totalCart;\r\n }\r\n }\r\n\r\n async retrieveShoppingCartDirect(id) {\r\n let cart;\r\n\r\n try {\r\n const returnData = await account.retrieveShoppingCart(id);\r\n runInAction(() => {\r\n cart = returnData.data.cart;\r\n return cart;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return cart;\r\n }\r\n\r\n async retrieveOrderIdDirect(id) {\r\n let orderId;\r\n\r\n try {\r\n const returnData = await account.retrieveOrderId(id);\r\n runInAction(() => {\r\n orderId = returnData.data[0];\r\n return orderId;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return orderId;\r\n }\r\n\r\n async retrieveOrderlinesDirect(id) {\r\n let orderlines = [];\r\n\r\n try {\r\n const returnData = await account.retrieveOrderItems(id);\r\n runInAction(() => {\r\n orderlines = returnData.data;\r\n return orderlines;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return orderlines;\r\n }\r\n\r\n async getBookISBN(id) {\r\n let isbn;\r\n try {\r\n const returnData = await books.getBookISBN(id);\r\n runInAction(() => {\r\n isbn = returnData.data[0].sku;\r\n return isbn;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return isbn;\r\n }\r\n\r\n async concatConstructResults(cart, cartDb, orderlines, action) {\r\n let localCart = cart;\r\n let onlineCart = cartDb;\r\n let sku;\r\n let idx;\r\n\r\n //sbC check orderlines with cart in db\r\n if (orderlines && orderlines.length > 0) {\r\n //console.log('SbC orderlines:', orderlines)\r\n for (let i = 0; i < orderlines.length; i++) {\r\n let id = orderlines[i].book_id;\r\n let idText = id.toString();\r\n if (idText.length < 8) {\r\n sku = await this.getBookISBN(id);\r\n } else {\r\n sku = id;\r\n }\r\n\r\n if (cartDb && cartDb.length > 0) {\r\n idx = cartDb\r\n .findIndex((item) => item.sku === sku);\r\n } else {\r\n onlineCart = [];\r\n idx = -1;\r\n }\r\n \r\n if (idx === -1) {\r\n orderlines[i].sku = sku;\r\n orderlines[i].amount = 1;\r\n onlineCart.push(orderlines[i]);\r\n }\r\n\r\n if (idx !== -1) {\r\n cartDb[idx].status = 'added';\r\n cartDb[idx].amount = orderlines[i].amount;\r\n //cartDb[idx].discount = orderlines[i].discount;\r\n\r\n onlineCart[idx].amount = orderlines[i].amount;\r\n onlineCart[idx].discount = orderlines[i].discount; \r\n\r\n //this.cartChanges = true; \r\n }\r\n }\r\n }\r\n\r\n //sbC check combined cart with cart in localstorage\r\n if (onlineCart && onlineCart.length > 0) {\r\n //console.log('SbC onlineCart:', onlineCart)\r\n this.cartChanges = false;\r\n for (let i = 0; i < onlineCart.length; i++) {\r\n let idx = localCart\r\n .findIndex((item) => item.sku === onlineCart[i].sku);\r\n if (idx == -1) {\r\n localCart.push(onlineCart[i]);\r\n //this.cartChanges = true;\r\n }\r\n\r\n if (onlineCart[i].status == 'added' || onlineCart[i].status == 'ok') {\r\n if (idx !== -1) {\r\n if (localCart[idx].status !== 'added') {\r\n //this.cartChanges = true; \r\n }\r\n //localCart[idx].status = 'added';\r\n localCart[idx].status = 'ok';\r\n //localCart[idx].amount = 1;\r\n }\r\n }\r\n\r\n if (action === 'init') {\r\n if (idx !== -1) {\r\n if (localCart[idx].amount !== onlineCart[i].amount) {\r\n //this.cartChanges = true; \r\n }\r\n \r\n if (localCart[idx].status !== onlineCart[i].status) {\r\n //this.cartChanges = true; \r\n }\r\n if (onlineCart[i].status == 'deletedx' && localCart[idx].status !== 'ok') {\r\n if (localCart[idx].status === 'added') {\r\n localCart[idx].status = 'deletedx';\r\n localCart[idx].amount = 0;\r\n }\r\n }\r\n localCart[idx].amount = onlineCart[i].amount;\r\n localCart[idx].discount = onlineCart[i].discount;\r\n }\r\n }\r\n\r\n if (action === 'add') {\r\n localCart[idx].status = 'added';\r\n //localCart[idx].amount = 1;\r\n }\r\n }\r\n\r\n \r\n }\r\n\r\n this.cart.user = localCart;\r\n this.calculateTotalCart(true);\r\n\r\n return localCart;\r\n }\r\n\r\n setCartChanges(status) {\r\n this.cartChanges = status;\r\n }\r\n\r\n}\r\n\r\ndecorate(StoreOrder, {\r\n cart: observable,\r\n cartTotalIncl: observable,\r\n country_default: observable,\r\n country_code_default: observable,\r\n countriesList: observable,\r\n discounts_overruled: observable,\r\n lastAddedBook: observable,\r\n order_data: observable,\r\n order_interface: observable,\r\n orderHistoryList: observable,\r\n partner_code: observable,\r\n payment_issuers: observable,\r\n payment_status: observable,\r\n shippingCosts: observable,\r\n shopping_cart: observable,\r\n shopping_cart_db: observable,\r\n shopping_cart_db_id: observable,\r\n shopping_cart_db_guid: observable,\r\n wishList: observable,\r\n wishList_db: observable,\r\n addToCart: action,\r\n addToWishList: action,\r\n calculateOrderVAT: action,\r\n calculateShipping: action,\r\n calculateTotal: action,\r\n checkDiscountOverruled: action,\r\n checkOnWishList: action,\r\n checkShippingCostsCustom: action,\r\n checkShippingCostsOverruled: action,\r\n clearAllShoppingCarts: action,\r\n clearCartAfterPayment: action,\r\n clearPartnerCode: action,\r\n closeDialogCompareCarts: action,\r\n closeDialogCompareWishLists: action,\r\n closeDialogConcat: action,\r\n closeErrorWindow: action,\r\n closePaymentWindow: action,\r\n concatLSandDB: action,\r\n copyDeliveryAddresData: action,\r\n createNewOrder: action,\r\n deleteShoppingCartFromDB: action,\r\n deleteShoppingCartFromLS: action,\r\n deleteUseCaseFromLS: action,\r\n deleteOrderLineShipping: action,\r\n eidtOrder: action,\r\n getAccountOrders: action,\r\n getAffiliateId: action,\r\n getCountries: action,\r\n getOrderAvailability: action,\r\n getOrderData: action,\r\n getOrderItemsData: action,\r\n //getOrderPaymentDetails: action,\r\n getOrderId: action,\r\n getOrderStatus: action,\r\n getPaymentStatus: action,\r\n getUseCaseFromLS: action,\r\n handleBankTransfer: action,\r\n handlePaymentProcess: action,\r\n monitorOrderData: action,\r\n monitorStartPayment: action,\r\n openDialogCompareCarts: action,\r\n openDialogComparewishLists: action,\r\n openDialogConcat: action,\r\n presetDataProfile: action,\r\n registerAnonymousClient: action,\r\n registerClientFromOrder: action,\r\n removeFromCart: action,\r\n removeFromWishList: action,\r\n removeOrder: action,\r\n resetCart: action,\r\n resetCartUser: action,\r\n resetOrder: action,\r\n resetOrderData: action,\r\n resetOrderStatus: action,\r\n resetBusinessData: action,\r\n resetDeliveryAddresData: action,\r\n resetOrderSettings: action,\r\n retrieveShoppingCart: action,\r\n retrieveShoppingCartFromDB: action,\r\n retrieveShoppingCartFromLS: action,\r\n retrieveWishList: action,\r\n retrieveWishListFromDB: action,\r\n retrieveWishListFromLS: action,\r\n returnOrderId: action,\r\n saveRowPrice: action,\r\n saveOrderDataProfile: action,\r\n saveUseCaseToLS: action,\r\n //sendOrderConfirmation: action,\r\n setAffiliateId: action,\r\n setCartChanges: action,\r\n setCartView: action,\r\n setClientId: action,\r\n setDataBusiness: action,\r\n setDataProfile: action,\r\n setDataDeliveryAddress: action,\r\n setDiscountOverruled: action,\r\n setOrderProfileFromUser: action,\r\n setOrderRemark: action,\r\n setOrderRemarkLS: action,\r\n setPartnerCode: action,\r\n setPaymentData: action,\r\n setSettingBusiness: action,\r\n setSettingDeliveryAddress: action,\r\n setShippingCosts: action,\r\n setTotalPrice: action,\r\n submitDeleteOrderLine: action,\r\n syncShoppingCartWithOrderlines: action,\r\n unloadPaymentWindow: action,\r\n updateOrderEmail: action,\r\n useCartDB: action,\r\n\r\n concatConstructResults: action,\r\n constructShoppingCart: action,\r\n retrieveShoppingCartDirect: action,\r\n retrieveOrderlinesDirect: action,\r\n\r\n calculateTotalCartItemsAnonymous: computed,\r\n calculateTotalCartItemsUser: computed,\r\n calculateTotalOrder: computed,\r\n calculateWeight: computed\r\n})\r\n\r\nexport default StoreOrder;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as account from '../communicator/account';\r\n\r\nclass StoreCart {\r\n cart = {\r\n anonymous: [],\r\n user: []\r\n }\r\n cartChanges = false;\r\n cartTotalIncl = 0;\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeAuth = this.storeRoot.storeAuth;\r\n this.storeOrder = this.storeRoot.storeOrder;\r\n\r\n this.getCart();\r\n }\r\n\r\n async getCart() {\r\n let cart = [];\r\n let orderId = 0;\r\n let orderlines = [];\r\n\r\n const userId = this.storeAuth.user.is_loggedin ? this.storeAuth.user.user_id : 0;\r\n \r\n if (userId !== 0) {\r\n cart = await this.retrieveCartDB(userId);\r\n \r\n // SbC if additional orderline added\r\n orderId = await this.retrieveOrderId(userId);\r\n if (orderId !== 0 && orderId !== '0') {\r\n orderlines = await this.retrieveOrderlinesDB(userId);\r\n cart = this.concatCarts(cart, orderlines);\r\n } \r\n\r\n this.cart.user = cart;\r\n } else {\r\n cart = await this.retrieveCartLS();\r\n \r\n this.cart.anonymous = cart;\r\n }\r\n }\r\n\r\n async retrieveCartLS() {\r\n if (localStorage.getItem('SB_ORDER')) {\r\n let data = JSON.parse(localStorage.getItem('SB_ORDER'));\r\n this.cart.anonymous = data.cart.anonymous;\r\n }\r\n this.cart.user = [];\r\n }\r\n\r\n async retrieveCartDB(id) {\r\n let cart;\r\n\r\n try {\r\n const returnData = await account.retrieveShoppingCart(id);\r\n runInAction(() => {\r\n cart = returnData.data.cart;\r\n return cart;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return cart;\r\n }\r\n\r\n async retrieveOrderId(id) {\r\n let orderId = 0;\r\n\r\n try {\r\n const returnData = await account.retrieveShoppingCart(id);\r\n runInAction(() => {\r\n if (returnData.data.order_id !== null) {\r\n orderId = returnData.data.order_id;\r\n }\r\n return orderId;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return orderId;\r\n }\r\n\r\n async retrieveOrderlinesDB(orderId) {\r\n let orderlines;\r\n\r\n try {\r\n const returnData = await account.retrieveOrderItems(orderId);\r\n runInAction(() => {\r\n orderlines = returnData.data;\r\n //return orderlines;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return orderlines;\r\n }\r\n\r\n concatCarts(cart, orderlines) {\r\n if (orderlines && orderlines.length > 0) {\r\n for (let i = 0; i < orderlines.length; i++) {\r\n let id = orderlines[i].book_id;\r\n let sku = orderlines[i].sku;\r\n // let idText = id.toString();\r\n // if (idText.length < 8) {\r\n // sku = await this.getBookISBN(id);\r\n // } else {\r\n // sku = id;\r\n // }\r\n\r\n let idx = cart\r\n .findIndex((item) => item.sku === sku);\r\n \r\n if (idx === -1) {\r\n orderlines[i].status = 'added';\r\n cart.push(orderlines[i]);\r\n //cartDb[idx].amount = orderlines[i].amount;\r\n //cartDb[idx].discount = orderlines[i].discount;\r\n\r\n //onlineCart[idx].amount = orderlines[i].amount;\r\n //onlineCart[idx].discount = orderlines[i].discount; \r\n } else {\r\n cart[idx].discount = orderlines[i].discount; \r\n }\r\n }\r\n }\r\n\r\n return cart;\r\n }\r\n\r\n}\r\n\r\ndecorate(StoreCart, {\r\n cart: observable,\r\n getCart: action,\r\n retrieveCartDB: action,\r\n retrieveCartLS: action,\r\n retrieveOrderIdDirect: action\r\n})\r\n\r\nexport default StoreCart;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as account from '../communicator/account';\r\n\r\nfunction autoSave(store, save) {\r\n mobx.autorun(() => {\r\n const json = JSON.stringify(mobx.toJS(store));\r\n save(json);\r\n });\r\n}\r\n\r\nclass StoreWishlist {\r\n wishlist = {\r\n 'anonymous': [],\r\n 'user': []\r\n }\r\n wishList_db = []\r\n isDialogConcatOpen = false;\r\n isDialogCompareWishlistsOpen = false\r\n lastAddedBook = {}\r\n\r\n constructor(storeRoot) {\r\n this.retrieveWishlist(0);\r\n\r\n autoSave(this.wishlist, this.save.bind(this));\r\n }\r\n\r\n save(json) {\r\n this.saveToLS(json);\r\n }\r\n\r\n saveToLS(json) {\r\n localStorage.setItem('SB_WISHLIST20', json)\r\n }\r\n\r\n openDialogConcat = (url) => {\r\n this.isDialogConcatOpen = true;\r\n }\r\n\r\n openDialogCompareWishlists = () => {\r\n this.isDialogCompareWishlistsOpen = true;\r\n }\r\n\r\n closeDialogConcat = () => {\r\n this.isDialogConcatOpen = false;\r\n }\r\n\r\n closeDialogCompareWishlists = () => {\r\n this.isDialogCompareWishlistsOpen = false;\r\n }\r\n\r\n async retrieveWishlist(id) {\r\n if (id !== undefined && id !== 0) {\r\n this.retrieveWishlistFromDB(id);\r\n } else {\r\n this.retrieveWishlistFromLS(id);\r\n }\r\n }\r\n\r\n async retrieveWishlistFromDB(id) {\r\n try {\r\n const returnData = await account.retrieveWishList(id);\r\n runInAction(() => {\r\n this.wishlist.user = returnData.data;\r\n\r\n if (this.wishlist.user.length >= 0 && this.wishlist.anonymous.length > 0) {\r\n this.openDialogCompareWishlists();\r\n }\r\n\r\n if (this.wishist.user == null) {\r\n this.wishlist.user = [];\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n retrieveWishlistFromLS(id) {\r\n if (localStorage.getItem('SB_WISHLIST20')) {\r\n this.wishlist = JSON.parse(localStorage.getItem('SB_WISHLIST20'));\r\n } else {\r\n this.wishlist = {\r\n 'anonymous': [],\r\n 'user': []\r\n };\r\n }\r\n if (this.wishlist == null) {\r\n this.wishlist = {\r\n 'anonymous': [],\r\n 'user': []\r\n };\r\n }\r\n }\r\n\r\n addToWishlist(sku, title, id) {\r\n let items = [];\r\n\r\n if (id !== undefined && id !== 0) {\r\n items = this.wishlist.user;\r\n } else {\r\n items = this.wishlist.anonymous;\r\n }\r\n\r\n if (!this.checkOnWishlist(id, sku)) {\r\n const wish_item = {\r\n sku: sku,\r\n title: title\r\n }\r\n items.push(wish_item);\r\n\r\n if (id !== undefined && id !== 0) {\r\n this.wishlist.user = items;\r\n } else {\r\n this.wishlist.anonymous = items;\r\n }\r\n\r\n if (id !== undefined && id !== 0) {\r\n this.saveWishlistToDB(id, this.wishlist);\r\n } else {\r\n this.saveWishlistToLS(this.wishlist);\r\n }\r\n }\r\n \r\n this.lastAddedBook.sku = sku;\r\n }\r\n\r\n removeFromWishlist(sku, id) {\r\n let items;\r\n\r\n if (id !== undefined && id !== 0) {\r\n items = this.wishlist.user;\r\n } else {\r\n items = this.wishlist.anonymous;\r\n }\r\n\r\n const idx = items.findIndex(item => item.sku === sku);\r\n items.splice(idx, 1);\r\n\r\n if (id !== undefined && id !== 0) {\r\n this.wishlist.user = items;\r\n } else {\r\n this.wishlist.anonymous = items;\r\n }\r\n\r\n this.saveWishlistToLS(this.wishlist);\r\n if (id !== undefined && id !== 0) {\r\n this.saveWishlistToDB(id, this.wishlist.user);\r\n }\r\n }\r\n\r\n checkOnWishlist = (id, sku) => {\r\n let items;\r\n let idx = -1;\r\n\r\n if (id !== undefined && id !== 0) {\r\n items = this.wishlist.user;\r\n } else {\r\n items = this.wishlist.anonymous;\r\n }\r\n\r\n if (items.length > 0) {\r\n idx = items\r\n .findIndex((item) => item.sku === sku);\r\n } else {\r\n idx = -1;\r\n }\r\n\r\n return (idx > -1) ? true : false;\r\n }\r\n\r\n async saveWishlistToDB(id, wishlist) {\r\n try {\r\n const returnData = await account.saveWishList(id, wishlist.user);\r\n runInAction(() => {\r\n\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n saveWishlistToLS(wishlist) {\r\n const json = JSON.stringify(this.wishlist);\r\n localStorage.setItem('SB_WISHLIST20', json)\r\n }\r\n\r\n deleteWishlistFromLS() {\r\n if (localStorage.getItem('SB_WISHLIST20')) {\r\n this.cart.user = [];\r\n }\r\n }\r\n\r\n async compareWishLists(id, action) {\r\n const returnData = await account.retrieveWishList(id);\r\n const wishListDB = returnData.data;\r\n \r\n if (action === 'concat') {\r\n let wishListLS = this.wishlist.anonymous;\r\n\r\n wishListLS.map(item => {\r\n if (!this.checkOnWishlist(id, item.sku)) {\r\n const wish_item = {\r\n sku: item.sku\r\n }\r\n this.wishlist.user.push(wish_item);\r\n }\r\n })\r\n wishListLS = [];\r\n this.wishlist.anonymous = [];\r\n \r\n this.saveWishlistToLS(this.wishlist);\r\n this.saveWishlistToDB(id, this.wishlist);\r\n }\r\n if (action === 'keep') {\r\n }\r\n\r\n this.closeDialogCompareWishlists();\r\n }\r\n\r\n countWishlist(id) {\r\n let items = [];\r\n\r\n if (id !== undefined && id !== 0) {\r\n items = this.wishlist.user;\r\n } else {\r\n items = this.wishlist.anonymous;\r\n }\r\n\r\n return items.length;\r\n }\r\n}\r\n\r\ndecorate(StoreWishlist, {\r\n lastAddedBook: observable,\r\n wishlist: observable,\r\n isDialogConcatOpen: observable,\r\n isDialogCompareWishlistsOpen: observable,\r\n addToWishlist: action,\r\n removeFromWishlist: action,\r\n retrieveWishlist: action,\r\n deleteWishlistFromLS: action,\r\n closeDialogCompareWishlists: action,\r\n countWishlist: action,\r\n openDialogCompareWishlists: action,\r\n})\r\n\r\nexport default StoreWishlist;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as books from '../communicator/books';\r\n\r\nclass StoreDiscounts {\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeAuth = this.storeRoot.storeAuth;\r\n this.storeBooks = this.storeRoot.storeBooks;\r\n this.storeOrder = this.storeRoot.storeOrder;\r\n this.storeUser = this.storeRoot.storeUser;\r\n this.storeUi = this.storeRoot.storeUi;\r\n }\r\n\r\n async calcItemDiscount(orderId, orderItem) {\r\n let discountPerc = 0;\r\n\r\n let discountPercOverruled = 0;\r\n let discountPercStandard = 0;\r\n let discountPercReseller = 0;\r\n let discountPercRule = 0;\r\n\r\n const hasDiscountsOverruled = await this.checkDiscountsOverruled(orderId);\r\n const hasDiscountRule = this.checkDiscountRule(orderItem);\r\n const isReseller = await this.checkIsReseller();\r\n const isDiscountAvailable = await this.checkDiscountAvailable(orderItem);\r\n\r\n if (isDiscountAvailable) {\r\n if (hasDiscountsOverruled) {\r\n discountPercOverruled = this.calcDiscountPercOverruled(orderId, orderItem);\r\n discountPerc = discountPercOverruled;\r\n } else {\r\n discountPercStandard = await this.calcDiscountPercStandard(orderItem);\r\n discountPerc = discountPercStandard;\r\n \r\n if (isReseller) {\r\n discountPercReseller = await this.calcDiscountPercReseller(orderItem);\r\n if (discountPercReseller > discountPerc) {\r\n discountPerc = discountPercReseller;\r\n }\r\n }\r\n\r\n if (hasDiscountRule) {\r\n discountPercRule = this.calcDiscountPercRule(orderItem);\r\n discountPerc = discountPercRule;\r\n }\r\n }\r\n }\r\n\r\n //SbC DIRTY HACK, MEEDS DEFINITE FIX\r\n if (parseInt(orderItem.discount_active) === 0 ||\r\n orderItem.sku === \"9789079872021\") {\r\n discountPerc = 0;\r\n }\r\n \r\n return discountPerc;\r\n }\r\n\r\n calcDiscountPercStandard = async(orderItem) => {\r\n //SbC better to get discounts from account again ..\r\n let perc = 0;\r\n const amount = parseInt(orderItem.amount);\r\n const minAmount = 2;\r\n\r\n const userId = this.storeAuth.user.is_loggedin ? this.storeAuth.user.user_id : 0;\r\n const result = await books.getBookDetailsBySku(orderItem.shop, orderItem.sku)\r\n const book = result.data[0];\r\n\r\n if (userId !== 0) {\r\n const userData = await this.storeUser.refreshUserData();\r\n\r\n if (amount >= minAmount) { \r\n const discountStandardPerc = userData.discount;\r\n const discountStandard3PartyPerc = userData.discount_3party;\r\n\r\n if (this.checkIsSB(book)) {\r\n perc = discountStandardPerc;\r\n } else {\r\n perc = discountStandard3PartyPerc;\r\n }\r\n } else {\r\n perc = 0;\r\n }\r\n }\r\n\r\n if (perc === null) {\r\n perc = 0;\r\n }\r\n\r\n return perc;\r\n }\r\n\r\n calcDiscountPercReseller = async(orderItem) => {\r\n let perc = 0;\r\n const amount = parseInt(orderItem.amount);\r\n const minAmount = this.storeOrder.settings_list[\"resellerMinAmount\"];\r\n\r\n const userId = this.storeAuth.user.is_loggedin ? this.storeAuth.user.user_id : 0;\r\n const result = await books.getBookDetailsBySku(orderItem.shop, orderItem.sku)\r\n const book = result.data[0];\r\n\r\n if (userId !== 0) {\r\n if (amount >= minAmount) {\r\n perc = this.getPercReseller(book);\r\n }\r\n }\r\n\r\n return perc;\r\n }\r\n\r\n calcDiscountPercRule = (item) => {\r\n let perc = 0;\r\n\r\n const amount = parseInt(item.amount);\r\n\r\n let rules = this.storeUi.userDiscounts\r\n .filter((rule) => rule.sku === item.sku && parseInt(rule.account_id) === this.storeUser.user_data.user_id && rule.is_active === 1)\r\n .sort((a, b) => a.minamount > b.minamount ? 1 : -1);\r\n\r\n let idx = -1;\r\n rules.map((rule, index) => {\r\n idx = (parseInt(amount) >= parseInt(rule.minamount)) ? index : idx;\r\n return idx;\r\n })\r\n\r\n let minAmount = 2;\r\n if (idx !== -1) {\r\n minAmount = rules[idx].minamount;\r\n }\r\n\r\n if (idx !== -1 && amount >= minAmount) {\r\n perc = rules[idx][\"discount\"];\r\n }\r\n\r\n return perc;\r\n }\r\n\r\n calcDiscountPercOverruled = (orderId, orderItem) => {\r\n let perc = 0;\r\n const amount = parseInt(orderItem.amount);\r\n const minAmount = 1;\r\n\r\n if (amount >= minAmount) {\r\n perc = this.getPercOverruled(orderId, orderItem);\r\n }\r\n\r\n return perc;\r\n }\r\n\r\n /*\r\n * SbC check KortingToepasbaar (discount_active) in item\r\n */\r\n checkDiscountAvailable = async(item) => {\r\n let discountAvailable = true; \r\n\r\n // if (item.discount_active === 0) {\r\n // discountAvailable = false; \r\n // }\r\n //SbC TEMP\r\n if (item.sku === '9789492665740') {\r\n discountAvailable = false; \r\n }\r\n\r\n return discountAvailable;\r\n }\r\n\r\n /*\r\n * SbC check DiscountsOverruled in Bestellingen\r\n */\r\n checkDiscountsOverruled = async(orderId) => {\r\n let isDiscountsOverruled = false;\r\n\r\n if (parseInt(this.storeOrder.order_settings.discounts_overruled) === 1) {\r\n isDiscountsOverruled = true;\r\n }\r\n\r\n const result = await this.storeOrder.checkDiscountsOverruled();\r\n isDiscountsOverruled = result[0].discounts_overruled;\r\n\r\n return isDiscountsOverruled;\r\n }\r\n\r\n checkIsReseller = async() => {\r\n //const isReseller = (this.storeAuth.user.is_reseller) ? true : false; \r\n let isReseller = false;\r\n const userId = this.storeAuth.user.userId;\r\n\r\n if (userId !== 0 && userId !== undefined) {\r\n const userData = await this.storeUser.refreshUserData();\r\n if (userData.is_reseller == 1 || userData.is_reseller === 'on') {\r\n isReseller = true;\r\n } else {\r\n isReseller = false; \r\n }\r\n }\r\n\r\n return isReseller;\r\n }\r\n\r\n checkDiscountRule = (item) => {\r\n // SbC check RulesDiscounts\r\n let hasDiscountRule = false;\r\n const amount = parseInt(item.amount); \r\n \r\n let rules = this.storeUi.userDiscounts\r\n .filter((rule) => rule.sku === item.sku && parseInt(rule.account_id) === this.storeUser.user_data.user_id && rule.is_active === 1)\r\n .sort((a, b) => a.minamount > b.minamount ? 1 : -1);\r\n\r\n let idx = -1;\r\n let rule_minamount = 1;\r\n rules.map((rule, index) => {\r\n idx = (parseInt(amount) >= parseInt(rule.minamount) && parseInt(rule.minamount) >= parseInt(rule_minamount)) ? index : idx;\r\n return idx;\r\n })\r\n \r\n hasDiscountRule = (idx !== -1) ? true : false;\r\n\r\n return hasDiscountRule;\r\n }\r\n\r\n getMinAmount = () => {\r\n let minAmount = 2;\r\n\r\n return minAmount;\r\n }\r\n\r\n getMinAmountRule = () => {\r\n let minAmount = 3;\r\n\r\n return minAmount;\r\n }\r\n\r\n getPercReseller = (item) => {\r\n let perc;\r\n \r\n if (this.checkIsSB(item)) {\r\n perc = 30; \r\n } else {\r\n perc = 10;\r\n }\r\n \r\n return perc;\r\n }\r\n\r\n //SbC get discount from orderline\r\n getPercOverruled = async(orderId, orderItem) => {\r\n let perc = 0;\r\n \r\n let cartLine = [];\r\n const dataOrderLines = await this.storeOrder.getOrderLinesData(orderId);\r\n\r\n cartLine = dataOrderLines\r\n .filter((orderLine) => parseInt(orderLine.book_id) === parseInt(orderItem.id) || orderLine.book_id === orderItem.sku);\r\n\r\n if (cartLine.length > 0) {\r\n perc = cartLine[0] \r\n ? cartLine[0].discount \r\n : 0;\r\n } \r\n \r\n return perc;\r\n }\r\n\r\n checkIsSB = (item) => {\r\n let isSB = false;\r\n\r\n isSB = (item && item.sb_edition === \"eigen uitgaven\")\r\n ? true \r\n : false\r\n ;\r\n\r\n return isSB;\r\n }\r\n}\r\n\r\ndecorate(StoreDiscounts, {\r\n calcDiscountItem: action\r\n})\r\n\r\nexport default StoreDiscounts;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as catalog from '../communicator/catalog';\r\n\r\nclass StoreCatalog {\r\n\r\n constructor() {\r\n }\r\n\r\n async getNotifications() {\r\n let notifications = [];\r\n\r\n try {\r\n const returnData = await catalog.getNotifications();\r\n runInAction(() => {\r\n notifications = returnData.data;\r\n return notifications;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return notifications;\r\n }\r\n}\r\n\r\ndecorate(StoreCatalog, {\r\n getNotifications: action\r\n})\r\n\r\nexport default StoreCatalog;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as authors from '../communicator/authors';\r\nimport * as categories from '../communicator/categories';\r\n\r\nclass StoreCatalogs {\r\n\r\n activeCatalog = ''\r\n activeCategory = ''\r\n activeSubCategory = ''\r\n activeCount = 0\r\n stockPriority = 1\r\n listAuthors = []\r\n listCategories = [];\r\n\r\n constructor() {\r\n this.getCategoriesAll();\r\n this.getAuthorsAll();\r\n }\r\n\r\n async getAuthorsAll() {\r\n try {\r\n const result = await authors.getAuthorsAll();\r\n runInAction(() => {\r\n this.listAuthors = result.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n\r\n }\r\n }\r\n\r\n async getCategoriesAll() {\r\n try {\r\n const result = await categories.getCategoriesAll();\r\n runInAction(() => {\r\n this.listCategories = result.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } finally {\r\n\r\n }\r\n }\r\n\r\n getActiveCatalog() {\r\n return this.activeCatalog;\r\n }\r\n\r\n setActiveCatalog(value){\r\n this.activeCatalog = value;\r\n }\r\n\r\n getActiveCategory() {\r\n return this.activeCategory;\r\n }\r\n\r\n setActiveCategory(value){\r\n this.activeCategory = value;\r\n }\r\n\r\n getActiveSubCategory() {\r\n return this.activeSubCategory;\r\n }\r\n\r\n setActiveSubCategory(value){\r\n this.activeSubCategory = value;\r\n }\r\n\r\n getActiveCount() {\r\n return this.activeCount;\r\n }\r\n\r\n setActiveCount(value){\r\n this.activeCount = value;\r\n }\r\n\r\n setStockPriority(value){\r\n this.stockPriority = value;\r\n }\r\n\r\n getStockPriority(value){\r\n return this.stockPriority;\r\n }\r\n\r\n async getBreadcrumbs() {\r\n const activeCatalog = this.getActiveCatalog();\r\n const activeCategory = this.getActiveCategory();\r\n const activeSubCategory = this.getActiveSubCategory();\r\n const activeCount = this.getActiveCount();\r\n\r\n let breadcrumbs = {\r\n catalog: activeCatalog,\r\n category: activeCategory,\r\n subcategory: activeSubCategory,\r\n count: activeCount\r\n }\r\n\r\n return breadcrumbs;\r\n }\r\n}\r\n\r\ndecorate(StoreCatalogs, {\r\n activeCatalog: observable,\r\n activeCategory: observable,\r\n activeSubCategory: observable,\r\n activeCount: observable,\r\n listAuthors: observable,\r\n listCategories: observable,\r\n stockPriority: observable,\r\n getBreadcrumbs: action\r\n})\r\n\r\nexport default StoreCatalogs;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as order from '../communicator/order';\r\nimport * as tools from '../communicator/tools'\r\n\r\nclass StoreShipping {\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeAuth = this.storeRoot.storeAuth;\r\n this.storeUser = this.storeRoot.storeUser;\r\n this.storeOrder = this.storeRoot.storeOrder;\r\n }\r\n\r\n async calculateShipping(orderId) {\r\n let shipping = 0;\r\n let shipping_abroad = false;\r\n let weight = 0;\r\n let packageType = 2;\r\n\r\n const userId = this.storeAuth.user.is_loggedin ? this.storeAuth.user.user_id : 0;\r\n\r\n const hasNoShippingCustomer = this.checkNoShippingCustomer(userId);\r\n const hasNoShippingOrder = await this.checkNoShippingOrder(orderId);\r\n const hasShippingOrderOverruled = this.checkShippingOrderOverruled(orderId);\r\n const hasNoShippingSku = this.checkNoShippingSku(orderId);\r\n\r\n if (hasNoShippingCustomer) {\r\n shipping = 0;\r\n }\r\n\r\n if (hasNoShippingOrder) {\r\n shipping = 0;\r\n }\r\n \r\n if (hasShippingOrderOverruled) {\r\n shipping = await this.getShippingOrderOverruled(orderId);\r\n }\r\n\r\n if (!hasNoShippingCustomer && !hasNoShippingOrder && !hasShippingOrderOverruled) {\r\n if (userId !== 0) {\r\n shipping_abroad = this.checkShippingCountry();\r\n }\r\n\r\n weight = this.getWeight();\r\n\r\n if (!Object.is(weight, NaN)) {\r\n if (weight <= 0) {\r\n // SbC only downloads\r\n shipping = 0;\r\n } else {\r\n if (shipping_abroad) {\r\n shipping = await this.getShippingCostsAbroad(weight);\r\n } else {\r\n packageType = this.getPackageType(weight);\r\n\r\n shipping = await this.getShippingCosts(orderId, weight, packageType);\r\n shipping = this.checkFreeShippingBoundaries(orderId, shipping);\r\n }\r\n }\r\n }\r\n \r\n }\r\n\r\n if (hasNoShippingSku) {\r\n shipping= 0;\r\n }\r\n\r\n const vatPerc = this.calculateShippingVat();\r\n this.storeOrder.setShippingCosts(shipping);\r\n this.storeOrder.setShippingVAT(vatPerc);\r\n this.storeOrder.calculateShippingCostsTotal();\r\n\r\n /* \r\n * SbC save in orderlines\r\n */\r\n if (!hasShippingOrderOverruled) {\r\n const returnData = await this.storeOrder.editOrderLineShipping();\r\n }\r\n\r\n return shipping;\r\n }\r\n\r\n checkShippingCountry() {\r\n let shipping_abroad = false;\r\n let countryCode = 'NL';\r\n\r\n if (this.storeAuth.user.is_loggedin) {\r\n countryCode = this.storeUser.user_data.profile.country_code;\r\n } else {\r\n countryCode = this.storeOrder.order_data.delivery_address.country_code;\r\n }\r\n\r\n if (this.storeOrder.order_data.client_settings.has_delivery_address === true ) {\r\n countryCode = this.storeOrder.order_data.delivery_address.country_code;\r\n shipping_abroad = countryCode === 'NL' ? false : true;\r\n } else {\r\n shipping_abroad = countryCode === 'NL' ? false : true;\r\n }\r\n\r\n return shipping_abroad;\r\n }\r\n\r\n checkNoShippingCustomer(userId) {\r\n let noShipping = false;\r\n\r\n if (this.storeAuth.user.no_shipping_costs === 1 || this.storeAuth.user.no_shipping_costs === '1') {\r\n noShipping = true;\r\n };\r\n\r\n return noShipping;\r\n }\r\n\r\n checkShippingCustomerOverruled(userId) {\r\n let isOverruled = false;\r\n\r\n if (this.storeAuth.user.no_shipping_costs === 1 || this.storeAuth.user.no_shipping_costs === '1') {\r\n isOverruled = true;\r\n };\r\n\r\n return isOverruled;\r\n }\r\n\r\n checkNoShippingOrder = async(orderId) => {\r\n let noShipping = false;\r\n\r\n try {\r\n const returnData = await order.checkNoShippingOrder(orderId);\r\n runInAction(() => {\r\n const value = returnData.data[0].no_shipping_costs;\r\n\r\n if (value === 1) {\r\n noShipping = true;\r\n } \r\n\r\n return noShipping;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n\r\n return noShipping;\r\n }\r\n\r\n checkNoShippingSku(orderId) {\r\n let noShipping = false;\r\n let items = [];\r\n const loggedin = this.storeOrder.order_data.client_id !== 0 ? true : false;\r\n\r\n const list = [\r\n '9789492665508', //DE\r\n '9789492665317' //EN\r\n ];\r\n\r\n if (loggedin) {\r\n items = this.storeOrder.cart.user;\r\n } else {\r\n items = this.storeOrder.cart.anonymous;\r\n }\r\n\r\n items.map((product) => {\r\n if (list.includes(product.sku) && parseInt(product.amount) !== 0 && product.status !== 'deletedx') {\r\n noShipping = true;\r\n }\r\n });\r\n\r\n return noShipping;\r\n }\r\n\r\n checkShippingOrderOverruled(orderId) {\r\n let isOverruled = false;\r\n\r\n if (this.storeOrder.order_settings.custom_shipping_costs === 1) {\r\n isOverruled = true;\r\n }\r\n\r\n return isOverruled;\r\n }\r\n\r\n // getShippingCustomerOverruled(userId) {\r\n // let shipping;\r\n\r\n // if (this.storeAuth.user.no_shipping_costs === 1 || this.storeAuth.user.no_shipping_costs === '1') {\r\n // shipping = 0;\r\n // };\r\n\r\n // return shipping;\r\n // }\r\n \r\n\r\n checkFreeShippingBoundaries(orderId, shipping) {\r\n let evaluatedShipping = shipping;\r\n let totalCart = 0;\r\n let discountApplied = false;\r\n\r\n let items = [];\r\n const loggedin = this.storeOrder.order_data.client_id !== 0 ? true : false;\r\n if (loggedin) {\r\n items = this.storeOrder.cart.user;\r\n } else {\r\n items = this.storeOrder.cart.anonymous;\r\n }\r\n\r\n items.map((product) => {\r\n if (product.status !== 'deletedx' && product.amount > 0) {\r\n discountApplied = (product.discount > 0) ? true : discountApplied; \r\n discountApplied = (product.discount > 0 && this.storeOrder.order_settings.discounts_overruled === 1) ? true : discountApplied;\r\n \r\n totalCart = (discountApplied) \r\n ? totalCart + parseFloat(product.price) * ((100 - product.discount)/100) * parseFloat(product.amount)\r\n : totalCart + parseFloat(product.price) * parseFloat(product.amount)\r\n }\r\n })\r\n\r\n if (totalCart <= 0) {\r\n evaluatedShipping = 0;\r\n }\r\n\r\n if (!discountApplied && totalCart >= this.storeOrder.order_settings.shipping_free) {\r\n evaluatedShipping = 0;\r\n }\r\n\r\n //SbC free above 250 for all\r\n if (totalCart >= this.storeOrder.order_settings.shipping_free_resellers) {\r\n evaluatedShipping = 0;\r\n }\r\n\r\n return evaluatedShipping;\r\n }\r\n\r\n getShippingOrderOverruled = async(orderId) => {\r\n let shipping;\r\n\r\n if (this.storeOrder.order_settings.custom_shipping_costs === '1' || this.storeOrder.order_settings.custom_shipping_costs === 1) {\r\n shipping = await this.getCustomShippingCosts(orderId);\r\n }\r\n\r\n return shipping;\r\n }\r\n\r\n getCustomShippingCosts = async(orderId) => {\r\n let custom_shipping = 0;\r\n try {\r\n const returnData = await order.getCustomShippingCosts(orderId);\r\n runInAction(() => { \r\n custom_shipping = parseFloat(returnData.data[0].custom_shipping_costs) / (1 + parseFloat(returnData.data[0].shipping_vat) / 100);\r\n\r\n return custom_shipping;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n return custom_shipping;\r\n }\r\n\r\n getWeight() {\r\n let weight = this.calculateWeight;\r\n\r\n return weight;\r\n }\r\n\r\n getPackageType(weight) {\r\n // SbC default is as_letter\r\n let packageType = 2; \r\n\r\n let items = [];\r\n const loggedin = this.storeOrder.order_data.client_id !== 0 ? true : false;\r\n if (loggedin) {\r\n items = this.storeOrder.cart.user;\r\n } else {\r\n items = this.storeOrder.cart.anonymous;\r\n }\r\n\r\n items.map((product) => {\r\n //SbC check if package type is overruled for bottles etc\r\n if (product.package_type === 1 || product.weight === 1) {\r\n packageType = 1;\r\n }\r\n });\r\n\r\n if (items.length >= 3 && weight > 1000) {\r\n packageType = 1;\r\n }\r\n\r\n if (weight > 1000) {\r\n packageType = 1;\r\n }\r\n\r\n return packageType;\r\n }\r\n\r\n getShippingCosts = async(orderId, weight, packageType) => {\r\n //SbC arbitrary default value\r\n let shipping = 8.45;\r\n let shippingData;\r\n\r\n let returnData;\r\n try { \r\n //SbC always based on weight\r\n //SbC CHECK what if digital products only like MP3 of event ticket?\r\n\r\n //if (orderId === 0 || orderId === '0' || parseInt(orderId) === 99) {\r\n returnData = await tools.getShippingCosts(weight);\r\n // } else {\r\n //SbC DEPRICATED as with new order in review first sometimes no orderlines yet, resulting in only package weight of 80\r\n // returnData = await tools.getShippingCostsV2(orderId);\r\n // console.log('SbC return shipping data v2', weight, orderId, returnData.data[0])\r\n // }\r\n shippingData = returnData.data[0];\r\n\r\n runInAction(async() => {\r\n if (shippingData) { \r\n shipping = (shippingData.as_letter !== null && packageType !== 1)\r\n ? shippingData.as_letter <= shippingData.as_package \r\n ? shippingData.as_letter \r\n : shippingData.as_package\r\n : shippingData.as_package\r\n }\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n } \r\n\r\n return shipping;\r\n }\r\n\r\n getShippingCostsAbroad = async(weight) => {\r\n //SbC arbitrary default value\r\n let shipping = 8.45;\r\n let surcharge = 0;\r\n\r\n const countriesList = this.storeOrder.countriesList;\r\n\r\n let idx = -1;\r\n if (this.storeOrder.order_data.client_settings.has_delivery_address === true) {\r\n idx = countriesList.findIndex(country => country.code == this.storeOrder.order_data.delivery_address.country_code);\r\n } else {\r\n if (this.storeAuth.user.is_loggedin) {\r\n idx = countriesList.findIndex(country => country.code == this.storeUser.user_data.profile.country_code);\r\n } else {\r\n idx = countriesList.findIndex(country => country.code == this.storeOrder.order_data.client_profile.country_code);\r\n }\r\n }\r\n\r\n //SbC calculate weight surcharge if applicable\r\n if (idx !== -1) {\r\n shipping = countriesList[idx].base_shipping;\r\n \r\n if (countriesList[idx].surcharge_weight !== null && countriesList[idx].surcharge_weight !== '') {\r\n surcharge = weight/1000 * parseFloat(countriesList[idx].surcharge_weight);\r\n shipping = parseFloat(shipping) + surcharge;\r\n }\r\n }\r\n\r\n return shipping;\r\n }\r\n\r\n calculateShippingVat() {\r\n let items = [];\r\n const loggedin = this.storeOrder.order_data.client_id !== 0 ? true : false;\r\n if (loggedin) {\r\n items = this.storeOrder.cart.user;\r\n } else {\r\n items = this.storeOrder.cart.anonymous;\r\n }\r\n \r\n let vat_perc = 9;\r\n items.map((product) => {\r\n if (product.status !== 'deletedx' && parseInt(product.amount) !== 0 && product.vat_perc > vat_perc) {\r\n vat_perc = product.vat_perc;\r\n }\r\n })\r\n\r\n return vat_perc;\r\n }\r\n\r\n get calculateWeight() {\r\n let weight = 0;\r\n let weight_box = 80;\r\n if (this.storeOrder.settings_list[\"weightBox\"] !== undefined) {\r\n weight_box = parseInt(this.storeOrder.settings_list[\"weightBox\"]);\r\n }\r\n\r\n let items = [];\r\n const loggedin = this.storeOrder.order_data.client_id !== 0 ? true : false;\r\n if (loggedin) {\r\n items = this.storeOrder.cart.user;\r\n } else {\r\n items = this.storeOrder.cart.anonymous;\r\n }\r\n\r\n weight = weight + weight_box;\r\n\r\n items.map((product, i) => {\r\n if (product.status !== 'deletedx' && product.amount > 0) {\r\n if (product.weight === null || product.weight === '') {\r\n //SbC to prevent miscalculation in case no weight set\r\n \r\n let defaultWeight = 300;\r\n weight = weight + defaultWeight;\r\n } else {\r\n weight = weight + product.amount * parseInt(product.weight);\r\n }\r\n \r\n return weight;\r\n }\r\n })\r\n\r\n return weight;\r\n }\r\n}\r\n\r\ndecorate(StoreShipping, {\r\n calculateShipping: action,\r\n calculateWeight: computed\r\n})\r\n\r\nexport default StoreShipping;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\nimport moment from \"moment\";\r\n\r\nimport * as content from '../communicator/content';\r\n\r\nclass StoreStock {\r\n onixTranslationFileStock = {}\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeGeneral = this.storeRoot.storeGeneral;\r\n\r\n this.listOnyx = 65;\r\n this.getOnixTranslationFileStock();\r\n }\r\n\r\n checkStockAvailability(use_case, item) {\r\n let is_available = true;\r\n let valid_codes;\r\n let validCode;\r\n let hasPrice = true;\r\n let disabledSkus;\r\n let disabledSku;\r\n let itemExpected;\r\n \r\n hasPrice = (item.price_incl !== undefined && item.price_incl !== null && item.price_incl !== 0) \r\n ? true\r\n : false;\r\n\r\n if (use_case === 'wishlist') {\r\n valid_codes = [21, 22, 23, 30];\r\n is_available = (((item.stock !== 0) || (valid_codes.indexOf(parseInt(item.stock_code)) > -1)) && hasPrice)\r\n ? true \r\n : false;\r\n }\r\n\r\n if (use_case === 'order') {\r\n let diffDate = 0;\r\n\r\n // SbC using supply_date instead of release_date\r\n let b\r\n if (item.supply_date) {\r\n let a = moment();\r\n if (item.supply_date.date) {\r\n b = moment(item.supply_date.date);\r\n } else {\r\n b = moment(item.supply_date);\r\n }\r\n diffDate = b.diff(a, 'days');\r\n } \r\n \r\n let maxDaysExpected = this.storeGeneral.settings_list[\"maxDaysExpected\"];\r\n\r\n itemExpected = (item.supply_date && diffDate >= 0 && (diffDate < parseInt(maxDaysExpected)))\r\n ? true\r\n : false\r\n ;\r\n\r\n let inStock = (item.stock === 1 || item.stock === \"1\") \r\n ? true \r\n : false\r\n ;\r\n\r\n inStock = (parseInt(item.stock_code) === 32 && (item.stock === 1 || item.stock === \"1\") && !itemExpected) \r\n ? false\r\n : inStock\r\n ;\r\n\r\n inStock = ((item.stock === 0 || item.stock === \"0\") && itemExpected) \r\n ? true\r\n : inStock\r\n ;\r\n\r\n valid_codes = [21, 22, 23, 30, 32];\r\n validCode = ((valid_codes.indexOf(parseInt(item.stock_code)) > -1)) \r\n ? true \r\n : false\r\n ;\r\n\r\n disabledSkus = [];\r\n disabledSku = ((disabledSkus.indexOf(parseInt(item.sku)) > -1)) \r\n ? true \r\n : false\r\n ;\r\n\r\n is_available = (((inStock && validCode && hasPrice) || (inStock && itemExpected && hasPrice) || (itemExpected && hasPrice)) && !disabledSku) \r\n ? true \r\n : false\r\n ;\r\n }\r\n\r\n //SbC temp necessary if no stock code available\r\n if (this.storeGeneral.shop == 'SHOP_SB' && is_available == false && item.stock_code == null) {\r\n if (((item.stock === 1 || item.stock === '1') && hasPrice) && !disabledSku) {\r\n is_available = true;\r\n }\r\n }\r\n\r\n // SbC temp necessary if no stock code available for books SB in SHOP_ALL\r\n if (is_available == false) {\r\n if (((item.stock === 1 || item.stock === '1') && hasPrice) && !disabledSku && item.stock_code == null) {\r\n is_available = true;\r\n }\r\n }\r\n\r\n return is_available;\r\n }\r\n\r\n checkImageCoverTags(item) {\r\n let tag = '';\r\n\r\n const stock = parseInt(item.stock);\r\n const stockCode = parseInt(item.stock_code);\r\n\r\n switch (stockCode) {\r\n case 40:\r\n case 51:\r\n tag = 'soldout';\r\n break;\r\n }\r\n\r\n switch (stock) {\r\n case 2:\r\n tag = 'soldout';\r\n break;\r\n case 3:\r\n tag = 'discontinued';\r\n break;\r\n }\r\n\r\n return tag;\r\n }\r\n\r\n async getOnixTranslationFileStock() {\r\n let result;\r\n\r\n try {\r\n const returnData = await content.getOnixTranslationFile();\r\n runInAction(() => {\r\n result = returnData.data;\r\n this.onixTranslationFileStock = result[1]['Code'];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getOnyxTranslation(list, stockCode) {\r\n //let result = '';\r\n const idx = this.onixTranslationFileStock.findIndex(item => parseInt(item.CodeValue) === parseInt(stockCode));\r\n const result = this.onixTranslationFileStock[idx]['CodeDescription'];\r\n \r\n return result;\r\n }\r\n\r\n getFeedbackStock(book) {\r\n let feedback = '';\r\n let stock;\r\n let stockCode;\r\n\r\n const hasStock = this.checkStock(book);\r\n const hasStockCode = this.checkStockCode(book);\r\n const hasDeliveryTime = this.checkDeliveryTime(book);\r\n \r\n if (book.price_incl === undefined || book.price_incl === null || parseInt(book.price_incl) === 0) {\r\n feedback = 'Niet of niet meer in assortiment';\r\n };\r\n\r\n if (book.price_incl !== undefined && book.price_incl !== null && parseInt(book.price_incl) !== 0) {\r\n if (hasStockCode) {\r\n stockCode = parseInt(this.getStockCode(book));\r\n feedback = this.getFeedbackStockCode(book, stockCode)\r\n\r\n } else {\r\n stock = parseInt(this.getStock(book));\r\n feedback = this.getFeedbackStockSimple(book, stock)\r\n }\r\n }\r\n\r\n return feedback;\r\n }\r\n\r\n checkStock(book) {\r\n let value = false;\r\n if (parseInt(book.stock === 1)) {\r\n value = true;\r\n }\r\n return value;\r\n };\r\n\r\n checkStockCode(book) {\r\n let value = false;\r\n if (book.stock_code && book.stock_code !== null) {\r\n value = true;\r\n }\r\n return value;\r\n };\r\n\r\n checkDeliveryTime(book) {\r\n let value = false;\r\n if (book.delivery !== '' && book.delivery !== null) {\r\n value = true;\r\n }\r\n return value;\r\n };\r\n\r\n checkExpected(book) {\r\n let value = false;\r\n // SbC check SupplyDate\r\n \r\n return value;\r\n };\r\n\r\n checkReleaseDate = (releaseDate) => {\r\n let isAfter = false;\r\n var currentDate = moment().format(\"DD MMMM YYYY\");\r\n\r\n if (releaseDate && releaseDate.date) {\r\n if (moment(currentDate).isSameOrBefore(moment(releaseDate.date))) {\r\n isAfter = true;\r\n }\r\n } else {\r\n if (moment(currentDate).isSameOrBefore(moment(releaseDate))) {\r\n isAfter = true;\r\n }\r\n }\r\n\r\n return isAfter;\r\n }\r\n\r\n getStock(book) {\r\n const value = book.stock;\r\n\r\n return value;\r\n };\r\n\r\n getStockCode(book) {\r\n const value = book.stock_code;\r\n\r\n return value;\r\n };\r\n\r\n getDeliveryTime(book) {\r\n let value = book.delivery;\r\n let podValue = parseInt(value);\r\n\r\n if (!isNaN(value)) {\r\n const start = podValue + 2;\r\n const end = podValue + 4;\r\n value = 'Levertijd: ' + start + '-' + end + ' werkdagen';\r\n } else {\r\n if (value && !value.startsWith(\"Levertijd\")) {\r\n value = \"Levertijd: \" + value;\r\n };\r\n }\r\n\r\n if (!book.delivery) {\r\n value = 99;\r\n }\r\n\r\n return value;\r\n };\r\n\r\n getReleaseDate(book) {\r\n let value = book.release_date.date;\r\n\r\n return value;\r\n };\r\n\r\n getSupplyDate(book) {\r\n let value = book.supply_date.date;\r\n\r\n return value;\r\n };\r\n\r\n getFeedbackStockCode = async(book, stockCode) => {\r\n let value = '';\r\n let result;\r\n\r\n if (stockCode === 21) {\r\n value = 'Levertijd: 1-3 werkdagen';\r\n value = await this.getOnyxTranslation(this.listOnyx, stockCode);\r\n if (this.checkDeliveryTime(book)) {\r\n result = this.getDeliveryTime(book);\r\n if (result !== 99) {\r\n value = result;\r\n }\r\n }\r\n }\r\n \r\n if (parseInt(stockCode) === 22) {\r\n //SbC TO ORDER\r\n value = 'Levertijd: 7-9 werkdagen';\r\n value = await this.getOnyxTranslation(this.listOnyx, stockCode);\r\n if (this.checkDeliveryTime(book)) {\r\n result = this.getDeliveryTime(book);\r\n if (result !== 99) {\r\n value = result;\r\n }\r\n }\r\n }\r\n\r\n if (stockCode === 23) {\r\n //SbC POD\r\n value = 'Levertijd: 1-3 werkdagen';\r\n value = await this.getOnyxTranslation(this.listOnyx, stockCode);\r\n if (this.checkDeliveryTime(book)) {\r\n result = this.getDeliveryTime(book);\r\n if (result !== 99) {\r\n value = result;\r\n }\r\n }\r\n }\r\n\r\n if (stockCode === 30) {\r\n //SbC In bestelling\r\n value = 'Levertijd: 1-3 werkdagen';\r\n value = await this.getOnyxTranslation(this.listOnyx, stockCode);\r\n if (this.checkDeliveryTime(book)) {\r\n result = this.getDeliveryTime(book);\r\n if (result !== 99) {\r\n value = result;\r\n }\r\n }\r\n }\r\n\r\n if (stockCode === 10) {\r\n value = 'Nog niet verschenen';\r\n value = await this.getOnyxTranslation(this.listOnyx, stockCode);\r\n\r\n let isAfter;\r\n if (book.supply_date && book.supply_date.date) {\r\n isAfter = this.checkReleaseDate(book.supply_date);\r\n if (isAfter) {\r\n value = value + ', verwacht op ' + moment(book.supply_date.date).format(\"DD MMMM YYYY\");\r\n }\r\n } else {\r\n isAfter = this.checkReleaseDate(book.supply_date);\r\n if (isAfter) {\r\n value = value + ', verwacht op ' + moment(book.supply_date).format(\"DD MMMM YYYY\");\r\n }\r\n }\r\n }\r\n\r\n if (stockCode === 32) {\r\n value = 'In herdruk';\r\n value = await this.getOnyxTranslation(this.listOnyx, stockCode);\r\n\r\n let isAfter;\r\n if (book.supply_date.date) {\r\n isAfter = this.checkReleaseDate(book.supply_date);\r\n if (isAfter) {\r\n value = value + ', verwacht op ' + moment(book.supply_date.date).format(\"DD MMMM YYYY\");\r\n }\r\n } else {\r\n isAfter = this.checkReleaseDate(book.supply_date);\r\n if (isAfter) {\r\n value = value + ', verwacht op ' + moment(book.supply_date).format(\"DD MMMM YYYY\");\r\n }\r\n }\r\n }\r\n\r\n if (stockCode !== 10 &&\r\n stockCode !== 21 &&\r\n stockCode !== 22 &&\r\n stockCode !== 23 &&\r\n stockCode !== 30 &&\r\n stockCode !== 32) {\r\n value = await this.getOnyxTranslation(this.listOnyx, stockCode);\r\n }\r\n\r\n return value;\r\n }\r\n\r\n getFeedbackStockSimple(book, stock) {\r\n let value = '';\r\n\r\n if (stock === 0) {\r\n value = '(Tijdelijk) niet leverbaar';\r\n if (book.idx !== null && this.checkExpected(book)) {\r\n value = 'Binnen 7 dagen weer leverbaar';\r\n }\r\n }\r\n\r\n if (stock === 1) {\r\n value = 'Levertijd: 1-3 werkdagen';\r\n if (book.id !== null && this.checkDeliveryTime(book)) {\r\n value = this.getDeliveryTime(book);\r\n }\r\n }\r\n\r\n if (stock === 2) {\r\n value = 'Uitverkocht';\r\n }\r\n\r\n if (stock === 3) {\r\n value = 'Niet meer leverbaar';\r\n }\r\n\r\n return value;\r\n }\r\n}\r\n\r\ndecorate(StoreStock, {\r\n checkStockAvailability: action,\r\n checkImageCoverTags: action,\r\n getOnyxTranslation: action,\r\n getFeedbackStock: action\r\n})\r\n\r\nexport default StoreStock;","import * as apifetch from './fetch.js';\r\n\r\nexport async function getEvents() {\r\n const urlEndpoint = '/v2/events';\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET')\r\n}\r\n\r\nexport async function getEvent(ref) {\r\n const urlEndpoint = '/v2/events/' + ref;\r\n\r\n return apifetch.sbFetch(urlEndpoint, 'GET')\r\n}\r\n","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as events from '../communicator/events';\r\n\r\nclass StoreEvents {\r\n events = []\r\n event = {}\r\n\r\n constructor() {\r\n\r\n }\r\n\r\n async getEvents() {\r\n try {\r\n const returnData = await events.getEvents();\r\n runInAction(() => {\r\n this.events = returnData.data;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n\r\n async getEvent(ref) {\r\n try {\r\n const returnData = await events.getEvent(ref);\r\n runInAction(() => {\r\n this.event = returnData.data[0];\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n }\r\n}\r\n\r\ndecorate(StoreEvents, {\r\n events: observable,\r\n event: observable,\r\n getEvents: action,\r\n getEvent: action\r\n})\r\n\r\nexport default StoreEvents;","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as partners from '../communicator/partners';\r\n\r\nclass StorePartners {\r\n\r\n partnerFees = []\r\n\r\n constructor() {\r\n }\r\n\r\n async getPartnerFees() {\r\n let result;\r\n\r\n try {\r\n const returnData = await partners.getPartnerFees();\r\n runInAction(() => {\r\n result = returnData.data;\r\n this.partnerFees = returnData.data;\r\n\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n \r\n return result;\r\n }\r\n}\r\n\r\ndecorate(StorePartners, {\r\n partnerFees: observable,\r\n getPartnerFees: action\r\n})\r\n\r\nexport default StorePartners;","import * as apifetch from './fetch.js';\r\n\r\nexport async function getPartnerFees() {\r\n const urlEndpoint = '/v2/admin/reports/fees';\r\n\r\n return apifetch.authFetch(urlEndpoint, 'GET');\r\n}\r\n","import { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nimport * as search from '../communicator/search';\r\n\r\nclass StoreSearch {\r\n searchResultsTitle = false\r\n searchViewPage = 1\r\n searchViewPos = 0\r\n\r\n constructor() {\r\n }\r\n\r\n async getSearchTitle(term, shop) {\r\n let result;\r\n if (term !== undefined && term !== '') {\r\n try {\r\n const returnData = await search.getSearchTitle(term, shop);\r\n runInAction(() => {\r\n result = returnData.data[0];\r\n return result;\r\n })\r\n } catch (error) {\r\n runInAction(() => {\r\n this.state = \"error\"\r\n })\r\n }\r\n } else {\r\n result = {};\r\n }\r\n return result;\r\n }\r\n\r\n setSearchResultsTitle(value) {\r\n this.searchResultsTitle = value;\r\n }\r\n\r\n setSearchViewPage(value) {\r\n this.searchViewPage = value;\r\n }\r\n\r\n setSearchViewPos(value) {\r\n this.searchViewPos = value;\r\n }\r\n\r\n getSearchResultsTitle() {\r\n return this.searchResultsTitle;\r\n }\r\n\r\n getSearchViewPage() {\r\n return this.searchViewPage;\r\n }\r\n\r\n getSearchViewPos() {\r\n return this.searchViewPos;\r\n }\r\n}\r\n\r\ndecorate(StoreSearch, {\r\n searchResultsTitle: observable,\r\n searchViewPage: observable,\r\n searchViewPos: observable,\r\n getSearchTitle: action\r\n})\r\n\r\nexport default StoreSearch;","import React, { Component } from 'react';\r\nimport { observable, computed, action, decorate } from \"mobx\";\r\nimport * as mobx from 'mobx';\r\nimport { runInAction } from \"mobx\";\r\n\r\nclass StoreVisuals {\r\n\r\n constructor(storeRoot) {\r\n this.storeRoot = storeRoot;\r\n this.storeGeneral = this.storeRoot.storeGeneral;\r\n this.storeStock = this.storeRoot.storeStock;\r\n }\r\n\r\n getCoverTag(value) {\r\n //SbC deprecated\r\n let tag = '';\r\n\r\n switch (value) {\r\n case 'soldout':\r\n tag = <span className=\"cover__soldout\">Uitverkocht</span>;\r\n break;\r\n case 'discontinued':\r\n tag = <span className=\"cover__soldout\">Niet meer leverbaar</span>;\r\n break;\r\n case 'soon':\r\n tag = <span className=\"cover__soon\">Binnenkort</span>;\r\n break;\r\n case 'sbEdition':\r\n tag = <span className=\"cover__tag\">Eigen uitgave</span>;\r\n break;\r\n case 'sbProduct':\r\n tag = <span className=\"cover__product\">Eigen product</span>;\r\n break;\r\n }\r\n\r\n return tag;\r\n }\r\n\r\n getCoverTagBySku(location, book) {\r\n let tag = '';\r\n let sku = book && book.sku;\r\n let value = '';\r\n\r\n if (book && book.sku === '9789492665935') {\r\n console.log('SbC book', book)\r\n }\r\n\r\n if (book && \r\n book.sb_edition === 'eigen uitgaven' && \r\n book.sku !== this.storeGeneral.settings_list.skuSoonAvailable && \r\n parseInt(book.stock) !== 2) {\r\n value = 'sbEdition';\r\n }\r\n \r\n if (this.storeGeneral.settings_list.skuSoonAvailable !== '' && \r\n book && \r\n book.sku === this.storeGeneral.settings_list.skuSoonAvailable) {\r\n value = 'soon';\r\n }\r\n\r\n if (book && \r\n this.storeStock.checkImageCoverTags(book) === 'soldout') {\r\n value = 'soldout';\r\n }\r\n\r\n if (book && \r\n this.storeStock.checkImageCoverTags(book) === 'discontinued') {\r\n value = 'discontinued';\r\n }\r\n\r\n if (value !== '') {\r\n switch (value) {\r\n case 'soldout':\r\n tag = <span className=\"cover__soldout\">Uitverkocht</span>;\r\n break;\r\n case 'discontinued':\r\n tag = <span className=\"cover__discontinued\">Niet meer leverbaar</span>;\r\n break;\r\n case 'soon':\r\n tag = <span className=\"cover__soon\">Binnenkort</span>;\r\n break;\r\n case 'sbEdition':\r\n if (book && \r\n book.version && (\r\n book.version.toLowerCase() === 'hardcover' || \r\n book.version.toLowerCase() === 'softcover'\r\n )\r\n ) {\r\n tag = <span className=\"cover__tag\">Eigen uitgave</span>;\r\n } else {\r\n tag = <span className=\"cover__tag\">Eigen product</span>;\r\n }\r\n break;\r\n }\r\n } else {\r\n tag = null;\r\n }\r\n\r\n return tag;\r\n }\r\n}\r\n\r\ndecorate(StoreVisuals, {\r\n getCoverTag: action,\r\n getCoverTagBySku: action\r\n})\r\n\r\nexport default StoreVisuals;","import { observable, computed, action, decorate } from \"mobx\";\r\n\r\nimport StoreGeneral from './store-general';\r\nimport StoreUi from './store-ui';\r\nimport StoreAuth from './store-auth';\r\nimport StoreHistory from './store-history';\r\nimport StoreUser from './store-user';\r\nimport StoreBooks from './store-books';\r\nimport StoreBooksAll from './store-books-all';\r\nimport StoreContent from './store-content';\r\nimport StoreProducts from './store-products';\r\nimport StoreEBooks from './store-ebooks';\r\nimport StoreForms from './store-forms';\r\nimport StoreOrder from './store-order';\r\nimport StoreCart from './store-cart';\r\nimport StoreWishlist from './store-wishlist';\r\nimport StoreDiscounts from './store-discounts';\r\nimport StoreCatalog from './store-catalog';\r\nimport StoreCatalogs from './store-catalogs';\r\nimport StoreShipping from'./store-shipping';\r\nimport StoreStock from'./store-stock';\r\nimport StoreEvents from'./store-events';\r\nimport StorePartners from'./store-partners';\r\nimport StoreSearch from'./store-search';\r\nimport StoreVisuals from'./store-visuals';\r\n\r\nclass StoreRoot {\r\n constructor() {\r\n this.storeGeneral = new StoreGeneral(this);\r\n this.storeAuth = new StoreAuth(this);\r\n this.storeHistory = new StoreHistory(this);\r\n this.storeCatalogs = new StoreCatalogs(this);\r\n this.storeUi = new StoreUi(this);\r\n this.storeContent = new StoreContent(this);\r\n this.storePartners = new StorePartners(this);\r\n this.storeUser = new StoreUser(this);\r\n this.storeBooks = new StoreBooks(this);\r\n this.storeBooksAll = new StoreBooksAll(this);\r\n this.storeProducts = new StoreProducts(this);\r\n this.storeEBooks = new StoreEBooks(this);\r\n this.storeForms = new StoreForms(this);\r\n this.storeOrder = new StoreOrder(this);\r\n this.storeShipping = new StoreShipping(this);\r\n this.storeCart = new StoreCart(this);\r\n this.storeWishlist = new StoreWishlist(this);\r\n this.storeDiscounts = new StoreDiscounts(this);\r\n this.storeCatalog = new StoreCatalog(this);\r\n this.storeStock = new StoreStock(this);\r\n this.storeEvents = new StoreEvents(this);\r\n this.storeSearch = new StoreSearch(this);\r\n this.storeVisuals = new StoreVisuals(this);\r\n }\r\n}\r\n\r\nexport default StoreRoot;","// 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 'react-app-polyfill/ie11';\r\nimport React , { Suspense } from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport { BrowserRouter } from 'react-router-dom';\r\nimport { Provider } from 'mobx-react';\r\nimport { I18nextProvider } from \"react-i18next\";\r\n\r\nimport i18n from \"./i18n\";\r\nimport App from './app';\r\nimport ScrollToTop from './elements/scroll';\r\nimport StoreRoot from './stores/store-root';\r\n\r\nimport Loader from './elements/loader';\r\n\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nconst startApp = () => {\r\n const storeRoot = new StoreRoot();\r\n\r\n ReactDOM.render(\r\n <Suspense fallback={<Loader />}> \r\n <I18nextProvider i18n={i18n}>\r\n <Provider stores={storeRoot}>\r\n <BrowserRouter>\r\n <ScrollToTop />\r\n <App />\r\n </BrowserRouter>\r\n </Provider>\r\n </I18nextProvider>\r\n </Suspense>,\r\n document.getElementById('root')\r\n );\r\n}\r\n\r\nif (!window.cordova) {\r\n startApp()\r\n} else {\r\n document.addEventListener('deviceready', startApp, false)\r\n}\r\n\r\nserviceWorker.unregister();"],"sourceRoot":""}