{"version":3,"sources":["lib/xml-to-js.js","lib/html5-dataset.js","components/movielists/movielist-constants.js","api/api-constants.js","utilities/location-utilities.js","api/orderflow-api.js","api/export-api.js","components/navigation/route-constants.js","actions/movielist-actions.js","api/soap-builder.js","api/ticketgate-extractions/organizer.js","api/ticketgate-extractions/available-tickets-and-extra-purchases.js","api/ticketgate-extractions/transaction.js","utilities/localstorage-utilities.js","api/ticketgate-api.js","actions/organizer-actions.js","components/orderflow/orderflow-constants.js","actions/order-actions.js","reducers/order-reducer.js","actions/receipt-actions.js","actions/customer-actions.js","reducers/customer-reducer.js","reducers/receipt-reducer.js","actions/user-actions.js","api/cms-api.js","actions/cms-actions.js","actions/ga-actions.js","actions/app-actions.js","api/ticketmaster-api.js","actions/ticketmaster-actions.js","reducers/root-reducer.js","reducers/organizer-reducer.js","reducers/user-reducer.js","reducers/cms-reducer.js","reducers/ga-reducer.js","reducers/app-reducer.js","reducers/movielist-reducer.js","reducers/ticketmaster-reducer.js","reducers/external-reducer.js","reducers/error-reducer.js","components/movielists/MovieListLocale.js","components/movielists/shared.js","components/movie/MovieLocale.js","components/movie/MovieInfo.js","components/showtime/ShowtimeType.js","components/showtime/Showtime.js","components/movie/Poster.js","components/showtime/ShowtimeTypeList.js","components/movielists/allmovies/AllMoviesListItem.js","components/movielists/allmovies/AllMoviesList.js","components/movielists/allmovies/AllMoviesListContainer.js","components/languagepicker/LanguagePicker.js","components/datepicker/DayNavigator.js","components/datepicker/DatePickerLocale.js","components/datepicker/WeekDayPicker.js","components/datepicker/Calendar.js","components/datepicker/DatePickerContainer.js","components/movielists/program/ProgramListItem.js","components/movielists/program/ProgramList.js","components/datepicker/MonthNavigator.js","components/movielists/specialevents/SpecialEventsListItem.js","components/movielists/specialevents/SpecialEventsList.js","components/movielists/specialevents/SpecialEventsContainer.js","components/movielists/program/ProgramListContainer.js","components/movielists/combinations/Program_AllFutureMovies.js","components/movielists/multibio/Multibio_MovieListItem.js","components/movielists/multibio/Multibio_MovieList.js","components/movielists/multibio/Multibio_ProgramContainer.js","components/movielists/multibio/Multibio_AllContainer.js","components/movielists/multibio/futuremovies/Multibio_FutureMovieListItem.js","components/movielists/multibio/futuremovies/Multibio_FutureMoviesList.js","components/movielists/multibio/futuremovies/Multibio_FutureMoviesContainer.js","components/movielists/futuremovies/FutureMovieListItem.js","components/movielists/futuremovies/FutureMoviesList.js","components/movielists/futuremovies/FutureMoviesListContainer.js","components/external/ExternalLocale.js","components/external/ticketmaster/TicketmasterListItem.js","components/external/ticketmaster/TicketmasterListContainer.js","components/external/ticketmaster/TicketmasterDetailsContainer.js","api/billetten-api.js","actions/billetten-actions.js","components/external/billetten/BillettenListItem.js","components/external/billetten/BillettenListContainer.js","components/external/billetten/BillettenDetailsContainer.js","components/circus/CircusListItem.js","components/circus/CircusList.js","components/circus/CircusListContainer.js","components/movie/Trailer.js","components/movie/VersionSelector.js","components/showtime/ShowtimeSchedule.js","components/movie/Pictures.js","components/movie/Movie.js","components/movie/MovieContainer.js","components/orderflow/topbar/TopBarLocale.js","components/orderflow/topbar/TopBar.js","components/orderflow/order/ticketselection/QuantitySelector.js","components/orderflow/OrderFlowLocale.js","components/orderflow/order/OrderLocale.js","components/orderflow/order/ticketselection/Ticket.js","components/orderflow/vouchers/VoucherLocale.js","components/orderflow/vouchers/VoucherInput.js","components/orderflow/order/ticketselection/AvailableTickets.js","components/orderflow/order/seatselection/SelectedSeats.js","components/orderflow/order/seatselection/SeatColors.js","components/orderflow/order/seatselection/SeatSelection.js","components/overlays/Info.js","components/orderflow/order/OrderContainer.js","utilities/validation-utilities.js","components/orderflow/customer/CustomerLocale.js","components/orderflow/customer/Customer.js","components/orderflow/customer/CustomerContainer.js","components/orderflow/payment/DibsContainer.js","api/reepay-api.js","components/orderflow/payment/ReepayContainer.js","components/orderflow/receipt/ReceiptLocale.js","components/orderflow/receipt/Reservation.js","components/orderflow/receipt/Purchase.js","components/orderflow/receipt/ReceiptContainer.js","components/overlays/OverlayLocales.js","components/overlays/Error.js","components/orderflow/clubcard/Login.js","components/orderflow/clubcard/ClubCardContainer.js","components/orderflow/extrapurchases/QuantitySelector.js","components/orderflow/extrapurchases/ExtraPurchaseLocale.js","components/orderflow/extrapurchases/ExtraPurchaseItem.js","components/orderflow/extrapurchases/ExtraPurchaseList.js","components/orderflow/extrapurchases/ExtraPurchaseContainer.js","components/orderflow/vouchers/VoucherDisplay.js","components/orderflow/vouchers/VoucherErrors.js","components/orderflow/biografklubdanmark/BioKlubDkLocale.js","components/orderflow/biografklubdanmark/BioKlubDkContainer.js","components/orderflow/summary/SummaryLocale.js","components/orderflow/giftcards/GiftCardLocale.js","components/orderflow/giftcards/GiftCardContainer.js","components/orderflow/payment/PaymentLocale.js","components/orderflow/payment/CreditCardOption.js","components/orderflow/payment/CreditCards.js","components/orderflow/payment/PaymentContainer.js","components/orderflow/summary/PriceInfo.js","components/orderflow/summary/SelectedTickets.js","components/orderflow/summary/Summary.js","components/orderflow/summary/SummaryContainer.js","components/orderflow/OrderFlowContainer.js","components/overlays/Spinner.js","components/overlays/NotFound.js","components/commercials/CommercialListItem.js","components/commercials/CommercialsList.js","components/commercials/CommercialsContainer.js","components/user/transactions/TransactionsLocale.js","components/user/transactions/TransactionsLogin.js","components/user/transactions/TransactionListItem.js","components/user/transactions/TransactionList.js","components/user/transactions/TransactionReceipt.js","components/user/transactions/TransactionsContainer.js","components/user/newsletters/NewslettersLocale.js","components/user/newsletters/Newsletter.js","components/user/newsletters/NewslettersContainer.js","components/App.js","actions/index-actions.js","index.js"],"names":["xmlToJSON","this","version","options","mergeCDATA","grokAttr","grokText","normalize","xmlns","namespaceKey","textKey","valueKey","attrKey","cdataKey","attrsAsObject","stripAttrPrefix","stripElemPrefix","childrenAsArray","prefixMatch","RegExp","trimMatch","String","prototype","firstLetterToLowerCase","charAt","toLowerCase","slice","grokType","sValue","test","isFinite","parseFloat","parseString","xmlString","opt","parseXML","stringToXML","oXMLParent","key","vResult","nLength","sCollectedTxt","namespaceURI","attributes","length","vAttribs","oAttrib","item","vContent","attribName","name","replace","value","hasChildNodes","oNode","sProp","nItem","childNodes","nodeType","nodeValue","hasOwnProperty","constructor","Array","push","nodeName","undefined","xmlToString","xmlDoc","xml","XMLSerializer","serializeToString","err","DOMParser","parseFromString","e","call","module","exports","Function","bind","oThis","TypeError","aArgs","arguments","fToBind","FNOP","fBound","apply","concat","window","location","origin","protocol","hostname","port","ObjectProto","Object","defineGetter","__defineGetter__","defineSetter","__defineSetter__","lookupGetter","__lookupGetter__","lookupSetter","__lookupSetter__","hasOwnProp","defineProperty","obj","prop","descriptor","writable","enumerable","configurable","get","set","getOwnPropertyDescriptor","getter","setter","defineProperties","props","document","documentElement","dataset","Element","propDescriptor","i","HTML5_DOMStringMap","attrVal","attrName","propName","attribute","attsLength","toUpperCase","n0","setAttribute","removeAttribute","e1","createElement","substr","e2","types","normal","special","showtimeListType","timesOnly","dateTime","columns","one","two","five","six","sort","alphabet","time","hourWhenDateShifts","listTypes","all","allFuture","date","future","external","APP_MODES","PROGRAM","MOVIE","ORDERFLOW","ORGANIZER_TYPES","AVAILABLE_LOCALES","id","flag","FILTER_TEXTS","1","2","SITE_TYPES","WEB","APP","UMBRACO","VOUCHER_TYPES","GIFTCARD","TICKETS","BIOKLUBDK","DISCOUNT","AGE_CENSORS","organizerId","baseUrl","indexOf","extractEnvironmentFromUrl","exportPath","ticketgatePath","organizerUrls","defaultConfiguration","organizerType","appLocale","appMode","showReservedAsRed","customerPasswordEnabled","openOrderFlowInNewWindow","hasCustomStyles","timezone","bottomBarAllwaysVisible","giftCardsEnabled","repeatEmail","availableLocales","phoneMinLength","altAllMovies","payWithDibs","posterBanners","show3D","showAtmos","pageHeaders","allMovies","futureMovies","movie","orderflow","myTickets","movielists","base","CONSTANTS","enabledOnProgram","fees","reserveTransaction","reserveTicket","buyTransaction","buyTicket","newsletters","smsReminder","enabled","checkedByDefault","receiptTexts","reserve","buy","errorText","soldOut","gdprTexts","pointsLoginText","isiPhone","navigator","userAgent","match","getParams","url","params","href","split","forEach","pair","decodeURIComponent","fetchMovieList","organizerIds","daysBack","queryParameters","filterId","filter","updateCache","querystring","fetch","then","response","ok","json","fetchMovie","movieId","fetchUserTransactions","emailOrPhone","password","fetchNewsletters","customerEmail","postNewsletter","body","method","headers","JSON","stringify","postLog","host","logTrace","message","logLevel","entry","client","sendLogSms","fetchItems","templateId","queryParams","showAllwaysIfEvents","showallwaysifevents","ShowAllwaysIfEvents","showIfEvents","API_CONSTANTS","Headers","text","itemList","xml2js","movies","isArray","items","dateTimeNow","moment","_publishDate","_","enablePeriod","start","end","find","_movieNo","info","futureMovie","posterBaseUrl","_no","type","description","isEmpty","synopsis","posters","small","path","large","largePath","hd","hDPath","live","livePoster","advertisement","subName","originalName","ageCensoring","censoring","dimension","genre","pictures","map","picture","actors","directors","trailer","vimeoId","imdb","iMDb","is3D","isAtmos","movieFormat","extractMovies","_organizerNo","openingDate","sortBy","extractItems","ROUTES","TICKETMASTER_ALL_EVENTS","TICKETMASTER_EVENT","BILLETTEN_ALL_EVENTS","BILLETTEN_EVENT","MULTI_ALL_MOVIES","MULTI_FUTURE_MOVIES","MULTI_PROGRAM","MULTI_MOVIE","HOME","COMMERCIALS","PAGES","PROGRAM_AND_ALL_FUTURE_MOVIES","ALL_MOVIES","ALL_FUTURE_MOVIES","FUTURE_MOVIES","SPECIAL_MOVIES","CIRCUS","USER_TRANSACTIONS","NEWSLETTERS","EXTRA_PURCHASES","CUSTOMER","BIOKLUB_DK","PAYMENT","GIFTCARDS","DIBS","REEPAY","RECEIPT","RESERVATION","NOT_FOUND","getMovieList","getFutureMovies","MOVIELIST_REQUEST","MOVIELIST_SUCCESS","MOVIELIST_FAILED","dispatch","getState","config","organizer","configuration","movielistRequest","api","movielistSuccess","error","movielistFailed","requestedAt","Date","now","dateSort","monthSort","selectedDate","datesWithShowtimes","showtimes","showtime","showInfo","format","includes","backTo","pathname","succeededAt","organizers","movieBases","showtimeTypes","showBackInTime","parseInt","failedAt","FUTURE_MOVIES_REQUEST","FUTURE_MOVIES_SUCCESS","FUTURE_MOVIES_FAILED","templateIds","isMultipleTemplates","templates","futureMoviesRequest","futureMoviesSuccess","futureMoviesFailed","promises","Promise","resolve","reject","result","flatten","merged","exists","changeSelectedShowtime","newShowtime","movielist","selectedOrganizer","siteType","app","getOrganizer","selectedMovieChanged","selectedShowtimeChanged","SELECTED_MOVIE_CHANGED","newMovieId","selectedMovieUpdate","newMovie","SELECTED_SHOWTIME_CHANGED","selectedShowtime","TOGGLE_SORT","toggleSort","newSort","CHANGE_DATE","changeDate","newDate","CHANGE_MONTH","changeMonth","newMonth","selectedMonth","authHeader","extractConfigurations","DEFAULT","_timeZone","tz","setDefault","censors","texts","_type","_appMode","_showReservedAsRed","openOrderInNewWindow","_openOrderFlowInNewWindow","_customerPasswordEnabled","showLocationOnShowtime","_showLocationOnEventTime","_showDaysBackInProgram","defaultTickets","_defaultTickets","_useCustomStyleSheet","_bottomBarAllwaysVisible","_redeemCuponsOnline","_confirmEmailInput","_languages","extractLocales","summaryExpanded","_summaryExpanded","phoneRestrictions","minLength","_payWithDIBS","paymentMethods","_reePayMethods","_name","da","_da","en","_en","ticketmaster","promoterCodes","_promoterCodes","cameFrom","_cameFrom","brand","_brand","googleAnalytics","googleAnalId","gtmId","_gTM","uaId","_uA","cookiePolicy","title","_show3D","_showAtmos","_reserveTransactionFee","_reserveTicketFee","_buyTransactionFee","_buyTicketFee","letter","_promptInFlow","checked","_status","_enabled","_defaultOn","_reserve","_buy","errorTexts","_soldout","gDPRText","_newsletter","listHeaders","extractPageHeaders","eventlist","_base","cols","_columns","_sort","showExpired","showexpired","showAsWeekButtons","datebuttons","futureeventlist","specialeventlist","month","clubCard","bonus","_bonusName","loginText","reservationConstraints","denyReservation","extractReservationConstraints","calendarText","programAvailableText","_text","locationTexts","locationText","_locationNo","ageCensorIcons","censor","_censorShort","toString","_censor","image","_picture","organizerName","header","mapped","_eventTypeNo","replaceTags","allFutureMovies","headerText","filterText","extractCreditCards","creditcards","card","_code","_path","isInternational","_international","languages","ids","locale","constraints","deny","area","_area","row","_row","seats","_seats","extractAvailableTicketsAndExtraPurchases","arrangement","bonusProfiles","availableTickets","ticket","voucherConstraints","availableVouchers","availableVoucher","extraPurchases","concessions","clubExtraPurchases","bonusVouchers","bonusProfile","tickets","a","b","_default","defaultQuantity","defaultValue","price","from","priceFrom","to","priceTo","points","bonusPoints","canReserve","_res","reserveMax","resMax","canBuy","buyMax","saleMax","extractAvailableTickets","vouchers","voucher","_isBKD","prefix","_prefix","_len","_imageLink","extractvoucherConstraints","bioKlubDk","available","_bKDRedeemOnLine","_bKDCuponImage","_resMax","_saleMax","extractExtraPurchases","discountEnabled","_discountCodesAvailable","discountActivated","_discountCodesActivated","customer","_customer","_points","extras","clubPurchases","note","_price","buyOnly","_useOnlyOnDenyReservation","extractFromTransaction","transaction","ticketInfo","totalTicketPrice","totalTicketQuantity","selectedTickets","_count","_ticketNo","quantity","extractTickets","totalExtraPurchasesPrice","extractSeats","seatTexts","line","extractSeatTexts","seatText","prices","amounts","_total","total","extractPrices","redeemBarCodes","redeemedBarcodes","giftCards","gift","barCode","_barCode","amount","_redeemAmount","remainingAmount","_restAmount","extractGiftCards","coupons","cupons","extractVouchers","ifOnlyOne","active","errors","showDetails","movieID","showtimeId","cinema","cinemaID","locationName","auditoriumName","cinemaName","address","cinemaAddress","hasNumberedSeats","_numbered","transactionId","_refNo","_orgNo","phone","email","eMail","pickupInfo","collect","orderId","cardHolder","seatsInfo","seat","_location","localStorageIsSupported","isSupported","localStorage","setItem","removeItem","getItem","parse","object","xmlFetch","callback","credentials","logError","answer","code","_error","_message","orderflowApi","cardholder","setCardholder","cardId","fetchOrganizer","soap","soapbuilder","organizerCallback","envelope","getOrganizerResponse","getOrganizerResult","_result","validCreditCards","creditCard","newsGroups","newsGroup","futureTemplateId","_futureTemplateNo","extractOrganizer","availableTicketsAndExtraPurchases","cardNumber","discountCode","availableTicketsCallback","getAvailableTicketsAndConcessionResponse","getAvailableTicketsAndConcessionResult","blockSeats","ticketsXml","ticketsQuantity","buildTicketsXml","hostaddress","blockSeatsCallback","blockSeats_v2Response","blockSeats_v2Result","seatsImage","seatsImageCallback","seatsImageResult","seatsImageResponse","moveSeats","x","y","moveSeatsCallback","moveSeatsResponse","moveSeatsResult","getConcessionsCallback","getConcessionResponse","getConcessionResult","addConcessions","concessionXml","extraPurchasesXml","extra","buildConcessionsXml","cardholderId","quickuserId","addConcessionsCallback","addConcessionResponse","addConcessionResult","addVouchers","voucherXml","buildVouchersXml","addVouchersCallback","addVoucherResponse","addVoucherResult","zipCode","userId","quickuser","reserveCallback","reserveResponse","reserveResult","preBook","creditCardCode","quickUser","preBookCallback","preBookResponse","preBookResult","dibs","book","reference","paytype","bookCallback","bookResponse","bookResult","cancelReservation","reservationId","cancelReservationCallback","cancelReservationResponse","cancelReservationResult","activateReservation","activateReservationCallback","activateReservationResponse","activateReservationResult","getReservation","getReservationCallback","getReservationInfoResponse","getReservationInfoResult","cancelTransaction","cancelTransactionCallback","cancelTransactionResponse","cancelTransactionResult","getUser","getUserCallback","user","getUserResponse","getUserResult","cookie","localStorageUtils","clubCardId","firstName","lastName","credtCard","FETCH_ORGANIZER_REQUEST","FETCH_ORGANIZER_SUCCESS","FETCH_ORGANIZER_FAILED","multibioIds","getMultiOrgFutureMovies","orgIds","timeout","ticketType","pages","order","receipt","orderTypes","buyReservation","START_ORDER","INITIAL_FETCH_DONE","startOrder","getAvailableTicketsAndExtraPurchases","fetchSeatsImage","AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_REQUEST","AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_SUCCESS","AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_FAILED","ticketgate","BLOCK_SEATS_REQUEST","BLOCK_SEATS_SUCCESS","BLOCK_SEATS_FAILED","blockSeatsRequest","checkReserveConstraints","blockSeatsSuccess","calculateTotalPrice","blockSeatsFailed","selected","giftCardAmount","sumBy","totalFees","constraint","splittedSeats","containsSeats","some","splitted","SEATS_IMAGE_REQUEST","SEATS_IMAGE_SUCCESS","SEATS_IMAGE_FAILED","MOVE_SEATS_REQUEST","MOVE_SEATS_SUCCESS","MOVE_SEATS_FAILED","couldReserve","showInfoBox","addExtraPurchase","GET_EXTRA_PURCHASES_REQUEST","GET_EXTRA_PURCHASES_SUCCESS","GET_EXTRA_PURCHASES_FAILED","getExtraPurchases","ADD_EXTRA_PURCHASE_REQUEST","ADD_EXTRA_PURCHASE_SUCCESS","ADD_EXTRA_PURCHASE_FAILED","priced","each","extraPurchaseRequest","extraPurchaseSuccess","extraPurchaseFailed","calculatePoints","TOTAL_PRICE_CHANGED","currentPage","isTicketsPage","startsWith","showReceiptData","ticketPrice","extraPurchasesActive","availableExtraPurchases","priceBeforeFees","orderType","totalPrice","CALCULATE_POINTS","usedPoints","existing","remainingPoints","RESET_ORDER","resetOrder","ORDER_TYPE_CHANGED","orderTypeChanged","newType","calculateFees","ticketQuantityChanged","activeVouchers","vouchersChanged","ticketFee","transactionFee","initialState","isFetching","totalPoints","initialFetchDone","RECEIPT_RESET","receiptReset","RECEIPT_SUCCESS","receiptSuccess","suceededAt","DELETE_RESERVATION_REQUEST","DELETE_RESERVATION_SUCCESS","DELETE_RESERVATION_FAILED","deleteReservation","deleteReservationRequest","deleteReservationSuccess","deleteReservationFailed","ACTIVATE_RESERVATION_REQUEST","ACTIVATE_RESERVATION_SUCCESS","ACTIVATE_RESERVATION_FAILED","activateReservationRequest","activateReservationSuccess","activateReservationFailed","GET_RESERVATION_SUCCESS","GET_RESERVATION_REQUEST","GET_RESERVATION_FAILED","getReservationInfo","getReservationRequest","getReservationSuccess","getReservationFailed","RESERVE_REQUEST","RESERVE_SUCCESS","RESERVE_FAILED","ticketgateNewsletters","chainNewsletters","trimEnd","PRE_BOOK_REQUEST","PRE_BOOK_SUCCESS","PRE_BOOK_FAILED","parameters","dataChanged","currentSeats","newSeats","areEqualSeats","current","newSeat","isEqual","seatsAreEqual","preBookFailed","preBookSuccess","BOOK_REQUEST","BOOK_SUCCESS","BOOK_FAILED","bookRequest","bookSuccess","bookFailed","CUSTOMER_CHANGED","NEWSLETTERS_CHANGED","SMS_REMINDER_CHANGED","CREDIT_CARD_CHANGED","CONDITIONS_ACCEPTED_CHANGED","REMEMBER_ME_CHANGED","UPDATE_CUSTOMER_LOCAL_STORAGE","customerChanged","newCustomer","smsReminderChanged","newSmsReminder","newsletterChanged","newNewsletters","creditCardChanged","newCreditCard","conditionsAcceptedChanged","newConditionsAccepted","conditionsAccepted","rememberMeChanged","newRememberMe","rememberMe","updateCustomerLocalStorage","setCustomerInLocalStorage","state","activated","deleted","clubCardLogin","clubCardLoginRequest","orderActions","clubCardLoginFailed","clubCardLoginSuccess","CLUBCARD_LOGIN_REQUEST","CLUBCARD_LOGIN_SUCCESS","CLUBCARD_LOGIN_FAILED","close","show","getUserTransactions","transactionsRequest","transactionsSuccess","transactionsFailed","TRANSACTIONS_REQUEST","TRANSACTIONS_SUCCESS","TRANSACTIONS_FAILED","transactions","getNewsletters","newslettersRequest","newslettersSuccess","newslettersFailed","NEWSLETTERS_REQUEST","NEWSLETTERS_SUCCESS","NEWSLETTERS_FAILED","NEWSLETTER_CHANGED","isSubscribed","fetchCommercials","FETCH_COMMERCIALS_REQUEST","FETCH_COMMERCIALS_SUCCESS","FETCH_COMMERCIALS_FAILED","getCommercials","commercials","TRACK_CHECKOUT_STEP","TRACK_PURCHASE","TRACK_RESERVATION","TRACK_DELETE_RESERVATION","gaTrackCheckoutStep","step","selectedMovie","datetimeNow","showtimeDay","products","averageTicketPrice","ticketsAsProduct","dataLayer","isSame","event","gaTrackPurchase","availableExtras","gaTrackReservation","eventAsDataLayer","gaDeleteReservation","LANGUAGE_CHANGED","languageChanged","newLocale","SITETYPE_CHANGED","siteTypeChanged","newSiteType","INIT_FROM_PARENT_SITE","initFromParentSite","APP_HEIGHT_CHANGED","appHeightChanged","initIframeId","scrollToIframeTop","parent","height","iframeId","querySelector","newPageHeight","Math","max","scrollHeight","offsetHeight","clientHeight","console","log","oldHeight","newHeight","postMessage","iframeHeight","scrollToTop","appHeight","fetchEvents","fetchEvent","fetchEventImg","apiKey","shared","US_baseUrl","US_apiKey","getEventList","eventListRequest","events","extractEvent","eventListSuccess","eventListFailed","EVENTLIST_REQUEST","EVENTLIST_SUCCESS","EVENTLIST_FAILED","getEvent","selectedEvent","selectedEventChanged","images","ratio","width","SELECTED_EVENT_CHANGED","standard","event_date","ticketsUrl","replaceInUrl","price_ranges","extractPrice","currency","venue","postal_code","city","isSoldOut","properties","sold_out","isCancelled","cancelled","including_ticket_fees","min","combineReducers","action","lastRequested","lastUpdated","isInitialRequest","initialRequest","clubCardPoints","dataWasUpdated","checkoutComplete","lastFailed","lastSucceeded","cms","initialDate","initialMonth","longDateTimeFormat","shortDateTimeFormat","noMoviesText","noMoviesTodayText","noMoreMoviesTodayText","noMovieTypesTodayText","noEventsText","readMore","moreInfo","moreShowtimes","readMoreShowtimes","buyTickets","movieInfo","allShowtimes","searchCircus","today","shownFrom","setContainerClasses","listType","isMultiBio","classes","setItemClasses","counter","calculateRowPlacement","rowClasses","isInsideShowPeriod","isBetween","manipulateTitles","titles","querySelectorAll","tallestTitle","take","drop","titleHeight","style","backProgram","backAll","backFuture","backAllFuture","originalTitle","premiere","age","actor","director","MovieInfo","addClass","isObject","className","dangerouslySetInnerHTML","__html","descriptionLocale","descriptions","movieNameLocale","names","substring","LOCALE","isDefault","join","React","Component","ShowtimeType","includeName","index","findIndex","showType","connect","ownProps","Showtime","countDownFrom","checkForTimerScenarios","hidden","opensAt","minutes","seconds","showtimeClicked","setShowTimer","buyEnabled","buyInfo","buyStart","add","reserveEnabled","reserveInfo","reserveStart","isInFuture","isNotDefault","setCountDown","diff","setTimeout","setState","countDown","setInterval","duration","asMinutes","clearInterval","clearTimeout","timer","isInsidePeriod","preventDefault","stopPropagation","target","currentTarget","canReserveNow","canBuyNow","countdown","generateCountdown","data-date-time","data-organizer-id","onClick","Poster","showFullScreenPoster","toggleFullScreen","threeDBanner","atmosBanner","ageCensor","icon","ageBanner","src","poster","fullScreenPoster","posterClasses","ShowtimeTypeList","AllMoviesListItem","maxDateCount","showMovieInfo","movieClicked","prevProps","prevState","toggleMovieInfo","tagName","classList","showtimesByDate","groupBy","validShowtimes","showtimesPerDate","generateShowtimesPerDate","showAsBase","forOwn","dateKey","capitalize","movieBaseShowName","moreButton","keys","data-movie-id","ref","titleRef","data-toggle-movie-info","showTitle","AllMovieList","sortedMovies","sortMovies","movieItems","removeToday","removeFromList","movieBaseId","baseId","datetime","formattedDate","isToday","isAfter","movieListItems","generateMovieListItems","AllMoviesListContainer","actions","scrollTo","history","orderUrl","open","pageHeader","listConfig","moviesBases","moviesAsBase","baseMovie","alreadyInList","extractMoviesAsBases","org","removetoday","bindActionCreators","assign","LanguagePicker","DayNavigator","nextDay","previousDay","nextDateTime","previousDateTime","toggleCalendar","showCalendar","previousDate","nextDate","dateDisplay","pickDate","weekdays","weekdaysShort","months","sortByAlphabet","sortByTime","goToAllMovies","tomorrow","WeekDayPicker","maxDays","isAllMovies","weekDays","short","outerWidth","weekDay","extractWeekDays","Calendar","handleDayClick","disabledDays","_ref","disabled","day","lastDate","last","toDate","firstDate","first","fromMonth","toMonth","weekdaysLong","firstDayOfWeek","enableOutsideDays","selectedDays","onDayClick","fixedWeeks","DatePickerContainer","hasListHeader","datePickerClasses","withRouter","isOneColumn","ProgramListItem","generateShowtimesOnDate","ProgramList","isOnDate","MonthNavigator","nextMonth","previousMonth","monthsWithShowtimes","monthDisplay","stickNavToTop","shortMonth","monthsShort","SpecialEventsListItem","generateShowtimesInMonth","SpecialEventsList","isInMonth","SpecialEventsContainer","union","scrollPosition","movieListActions","ProgramContainer","specialMoviesEnabledOnProgram","dateForHeader","extractHeaderDate","Program_AllFutureMovies","ProgramListContainer","Multibio_MovieListItem","showtimesPerOrganizer","generateShowtimesPerOrganizer","Multibio_MovieList","showtimesByOrgId","Multibio_ProgramContainer","Multibio_AllContainer","Multibio_FutureMoviesListItem","availableInOrganizers","orgId","Multibio_FutureMoviesList","Multibio_FutureMoviesContainer","FutureMoviesListItem","hasShowtimes","FutureMoviesList","FutureMovieListContainer","templateid","including","back","TicketmasterListItem","eventClicked","eventId","showtimeText","getShowtimeText","TicketmasterListContainer","promoterIds","promoterid","eventItems","eventListItems","generateEventListItems","TicketmasterDetailsContainer","navBack","soldOutOrCancelled","getSoldOutOrCancelledText","venueIds","extractEvents","shows","event_no","event_name","event_notes","event_images","medium","show_time","show_link","location_name","location_street","location_zip","location_city","availability","minBy","min_price","maxBy","max_price","changeSelectedEvent","MovieListItem","BilletttenListContainer","BillettenDetailsContainer","CircusListItem","search","searchInputChanged","locations","locationId","generateShowtimeRow","locationMatch","dateMatch","minPrice","maxPrice","roadAndNumber","zip","generateShowtimes","placeholder","onChange","CircusList","sortedEvents","sortEvents","listItems","generateListItems","CircusListContainer","Trailer","isPlaying","trailerClicked","resizeIframe","pageHeight","toggledPlay","innerWidth","iframe","refs","iframeContainer","children","Player","play","trailerUrl","iframeContainerClasses","vimeoPlayer","overlay","VersionSelector","allVersions","versions","ShowtimeSchedule","handleWindowResize","debounce","determineTakeFromScreenWidth","schedule","extractShowtimeSchedule","skip","nextWeek","previousWeek","nextProps","addEventListener","removeEventListener","scheduleWidth","scrollWidth","offsetWidth","clientWidth","round","showtimesOnDate","showtimesOnDay","showtimesOnPage","emptyElementsNeeded","prevWeekClasses","nextWeekClasses","showtimeOnPage","Pictures","pictureUrls","Movie","showtimeSchedules","orgName","generateShowtimeSchedules","MovieContainer","showtimesForMovie","backText","generatBackbutton","circus","durationTo","TopBar","clubCardEnabled","pageHeaderEnabled","generateDuration","topBarClasses","typeName","QuantitySelector","debounceMultipleClicks","availableTicket","selectedTicket","increment","decrement","freeSeats","canIncrementTotalQuantity","canIncrementTotalPoints","newQuantity","canIncrement","incrementTotalQuantity","decrementTotalQuantity","decrementClasses","incrementClasses","next","nextReserve","nextBuy","OrderFlowLocale","showtimeUnNumbered","oneSeat","multiSeats","seatsUnNumbered","seatBlue","seatGreen","seatWhite","seatRed","chooseSeats","chooseTickets","discountTextBioKlubDk","discountTextGiftCard","discountTextBoth","noOnlineOrder","noReserveClubCard","noReserve","noBuy","backMovie","nextBuyBioKlubDk","extraPurchasesReset","Ticket","bioDkActive","generatePrice","ticketInteraction","generateTicketInteraction","placeholderBioKlubDk","placeholderGiftCard","placeholderDiscount","submit","errorInvalidType","remaningAmount","toolTipOne","toolTipStartsWith","toolTipMulti","Vouchers","showToolTip","handleChange","handleSubmit","toggleToolTip","isLetterOrNumber","isKeyStrokeValid","input","every","startValid","lengthValid","isValidConstraints","updatedVouchers","voucherCodes","uniq","inputInfo","constraintInfo","getConstraints","toolTip","getPlaceholder","AvailableTickets","selectedPoints","nextSelected","incrementBy","newTotal","selectedIdsHandled","submitDiscountCode","generateTickets","voucherText","getVoucherText","getLocationText","SelectedSeats","selectedSeats","label","rowsAndSeats","extractRowsAndSeats","SeatColors","SeatSelection","selectedSeatsChanged","setError","boundingClientRect","getBoundingClientRect","pageX","left","pageXOffset","pageY","top","pageYOffset","naturalWidth","naturalHeight","seatsImageClass","errorMessage","Info","canClose","remove","buttons","OrderContainer","canReserveSelected","canBuySelected","navNext","checkAndUpdateReserveAndBuy","existingTicket","page","navTo","bioKlubDkAvailable","buyBioKlubDk","canReserveTotalQuantity","canBuyTotalQuantity","canReserveTicketQuantity","canBuyTicketQuantity","reserveClasses","buyClasses","data-buy-bio-klub-dk","programButton","data-nav-to","movieButton","backButtons","generateBackButtons","reserveButton","generateReserveButton","buyButton","generateBuyButton","buyBioKlubDkButton","generateBioKlubDkButton","navButtonClasses","seatSelection","infoText","gaActions","isValidPhone","number","isValidEmail","isValidPassword","hasDecimals","isNaN","withTwoDecimals","toFixed","customerInfo","passwordReserveText","passwordBuyText","acceptConditions","errorName","errorPhone","errorEmail","errorRepeatEmail","errorPassword","errorZipCode","errorConditionsAccepted","Customer","isValid","validators","nameChanged","phoneChanged","emailChanged","repeatEmailChanged","passwordChanged","zipCodeChanged","noteChanged","numbersOnly","repeatEmailIsValid","newsletter","remembered","isReserve","onBlur","passwordTextBox","generatePasswordInput","newsletterCheckboxes","generateNewsletters","smsReminderCheckbox","newsletterGdpr","rememberMeCheckbox","circusTextBoxes","generateCircusInputs","defaultChecked","CustomerContainer","goBack","customerIsValid","orderid","nameIsValid","phoneIsValid","emailIsValid","passwordIsValid","zipCodeIsValid","nextButton","gdprText","customerActions","DibsContainer","sessionState","querystrings","cancel","dibsform","transact","inputs","generateInputs","form","fetchSessionId","reepayObject","ReepayContainer","invoice","acceptUrl","cancelUrl","base64Url","btoa","handle","first_name","metadata","iframeUrl","accept_url","cancel_url","payment_methods","merchant","session","sessionId","reepay","Reepay","WindowCheckout","startOver","reservationSuccess","purchaseSuccess","print","delete","deleteText","deletedText","confirm","pickUp","Reservation","deactivateButtons","showDeleteConfirm","handleTimeout","deleteConfirmResult","navigateAfterActivate","printBtn","reserveText","qrCode","generateButtons","generateDeletedOverlay","generateDeleteConfirmOverlay","pickup","Purchase","buyText","ReceiptContainer","completed","generateReceipt","receiptActions","loading","notFound","unspecified","16","17","29","30","35","40","46","472","474","475","476","999","10001","10004","Error","isInWindow","closeButton","Login","resetPassword","focus","onSubmit","ClubCardContainer","showLoginOverlay","toggleLoginOverlay","submitLogin","availableClubCard","pointsLeft","loginTopBar","loginOverlay","resetError","userActions","quantityChanged","checkMaxQuantity","maxQuantity","ExtraPurchaseItem","ExtraPurchaseList","selectedClubCardPoints","selectedExtraPurchases","selectedExtra","generateExtraItems","ExtraPurchaseContainer","extraPurchaseQuantityChanged","extraPurchase","existingExtraPurchase","extraText","extraPurchaseList","VoucherDisplay","removeActiveVoucher","updatedActiveVouchers","showWithDecimals","validVouchers","giftcard","ticketItems","coupon","couponItems","generateVouchers","VoucherErrors","yourTickets","instructions","BioKlubDkContainer","yourOrder","giftCard","SummaryLocale","GiftCardContainer","ticketPriceAsText","feesAsText","extrasPriceAsText","totalPriceAsText","paymentMethod","payWithReepay","creditCardForeign","errorCreditCard","errorBack","CreditCardOption","isChecked","international","Payment","creditCards","creditCardOptions","generateOptions","creditCardError","PaymentContainer","disableBack","giftCardPaymentClicked","go","paymentIsValid","payment","chooseCreditCard","PriceInfo","showPriceInfo","extraPurchasePrice","showFees","SelectedTickets","seperator","extractSelectedTickets","Summary","togglePriceInfo","includeExtras","OrderFlowContainer","hasTimedOut","reload","clubcard","component","ExtraPurchasesContainer","Spinner","LOCALES","Commercial","commercialClicked","commercial","navigateTo","CommercialsList","generateCommercialItems","CommercialsContainer","loginName","loginPassword","findTickets","noUserTickets","forgotPassword","reservation","paid","reserved","getReceiptError","TransactionLogin","Transaction","getReceipt","ticketCount","removed","TransactionList","toggleReceipt","trans","list","TransactionReceipt","purchaseReceipt","fadeIn","TransactionsContainer","showReceipt","noEntries","login","invalidInput","subscribed","unsubscribed","Newsletter","triggerEffect","onAnimationEnd","NewslettersContainer","App","ticketMasterAllEventsRoute","ticketMasterEventRoute","billettenAllEventsRoute","BillettenListContainer","billettenEventRoute","multiAllMoviesRoute","exact","multiProgramRoute","multiFutureMoviesRoute","program_AllFutureMoviesRoute","allMoviesRoute","programRoute","speicalMoviesRoute","futureMoviesRoute","FutureMoviesListContainer","circusRoute","movieRoute","orderFlowRoute","reservationRoute","commercialsRoute","userTransactionsRoute","userNewslettersRoute","notFoundRoute","render","isFecthing","NotFound","initializeApp","mode","iframeid","checkIfAppHeightChanged","multiMovieRoute","debug","onLoad","initGoogleTracking","tagManagerArgs","TagManager","initialize","checkAndLoadCustomStyles","design","umbracoOverrides","rel","getElementsByTagName","appendChild","styleOverrides","beforeDibsState","persistedCustomer","persistedState","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","store","createStore","rootReducer","applyMiddleware","thunk","getElementById","rid","reservationid","reservationPath","pathToRegexp","exec","URL","checkNumber","sum","floor","checkForReservationId","replaceState","initAsReservationOnly","lang","sitetype","newwin","initWith"],"mappings":"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","file":"static/js/main.6fb0d410.chunk.js","sourcesContent":["/* Copyright 2015 William Summers, MetaTribal LLC\r\n * adapted from https://developer.mozilla.org/en-US/docs/JXON\r\n *\r\n * Licensed under the MIT License, Version 2.0 (the \"License\");\r\n * you may not use this file except in compliance with the License.\r\n * You may obtain a copy of the License at\r\n *\r\n * https://opensource.org/licenses/MIT\r\n *\r\n * Unless required by applicable law or agreed to in writing, software\r\n * distributed under the License is distributed on an \"AS IS\" BASIS,\r\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r\n * See the License for the specific language governing permissions and\r\n * limitations under the License.\r\n */\r\n/**\r\n * @author William Summers\r\n *\r\n */\r\n\r\nvar xmlToJSON = (function () {\r\n\r\n this.version = \"1.3\";\r\n\r\n var options = { // set up the default options\r\n mergeCDATA: true, // extract cdata and merge with text\r\n grokAttr: true, // convert truthy attributes to boolean, etc\r\n grokText: true, // convert truthy text/attr to boolean, etc\r\n normalize: true, // collapse multiple spaces to single space\r\n xmlns: true, // include namespaces as attribute in output\r\n namespaceKey: '_ns', // tag name for namespace objects\r\n textKey: '_text', // tag name for text nodes\r\n valueKey: '_value', // tag name for attribute values\r\n attrKey: '_', // tag for attr groups\r\n cdataKey: '_cdata', // tag for cdata nodes (ignored if mergeCDATA is true)\r\n attrsAsObject: false, // if false, key is used as prefix to name, set prefix to '' to merge children and attrs.\r\n stripAttrPrefix: true, // remove namespace prefixes from attributes\r\n stripElemPrefix: true, // for elements of same name in diff namespaces, you can enable namespaces and access the nskey property\r\n childrenAsArray: false // force children into arrays\r\n };\r\n\r\n var prefixMatch = new RegExp(/(?!xmlns)^.*:/);\r\n var trimMatch = new RegExp(/^\\s+|\\s+$/g);\r\n\r\n String.prototype.firstLetterToLowerCase = function () {\r\n return this.charAt(0).toLowerCase() + this.slice(1);\r\n }\r\n\r\n this.grokType = function (sValue) {\r\n if (/^\\s*$/.test(sValue)) {\r\n return null;\r\n }\r\n if (/^(?:true|false)$/i.test(sValue)) {\r\n return sValue.toLowerCase() === \"true\";\r\n }\r\n if (isFinite(sValue)) {\r\n return parseFloat(sValue);\r\n }\r\n return sValue;\r\n };\r\n\r\n this.parseString = function (xmlString, opt) {\r\n return this.parseXML(this.stringToXML(xmlString), opt);\r\n }\r\n\r\n this.parseXML = function (oXMLParent, opt) {\r\n\r\n // initialize options\r\n for (var key in opt) {\r\n options[key] = opt[key];\r\n }\r\n\r\n var vResult = {},\r\n nLength = 0,\r\n sCollectedTxt = \"\";\r\n\r\n // parse namespace information\r\n if (options.xmlns && oXMLParent.namespaceURI) {\r\n vResult[options.namespaceKey] = oXMLParent.namespaceURI;\r\n }\r\n\r\n // parse attributes\r\n // using attributes property instead of hasAttributes method to support older browsers\r\n if (oXMLParent.attributes && oXMLParent.attributes.length > 0) {\r\n var vAttribs = {};\r\n\r\n for (nLength; nLength < oXMLParent.attributes.length; nLength++) {\r\n var oAttrib = oXMLParent.attributes.item(nLength);\r\n vContent = {};\r\n var attribName = '';\r\n\r\n if (options.stripAttrPrefix) {\r\n attribName = oAttrib.name.replace(prefixMatch, '').firstLetterToLowerCase();\r\n\r\n } else {\r\n attribName = oAttrib.name.firstLetterToLowerCase();\r\n }\r\n\r\n if (options.grokAttr) {\r\n if (attribName !== 'barCode') {\r\n vContent[options.valueKey] = this.grokType(oAttrib.value.replace(trimMatch, ''));\r\n } else vContent[options.valueKey] = oAttrib.value;\r\n } else {\r\n vContent[options.valueKey] = oAttrib.value.replace(trimMatch, '');\r\n }\r\n\r\n if (options.xmlns && oAttrib.namespaceURI) {\r\n vContent[options.namespaceKey] = oAttrib.namespaceURI;\r\n }\r\n\r\n if (options.attrsAsObject) { // attributes with same local name must enable prefixes\r\n vAttribs[attribName] = vContent;\r\n } else {\r\n vResult[options.attrKey + attribName] = vContent[options.valueKey];\r\n }\r\n }\r\n\r\n if (options.attrsAsObject) {\r\n vResult[options.attrKey] = vAttribs;\r\n } else { }\r\n }\r\n\r\n // iterate over the children\r\n if (oXMLParent.hasChildNodes()) {\r\n for (var oNode, sProp, vContent, nItem = 0; nItem < oXMLParent.childNodes.length; nItem++) {\r\n oNode = oXMLParent.childNodes.item(nItem);\r\n\r\n if (oNode.nodeType === 4) {\r\n if (options.mergeCDATA) {\r\n sCollectedTxt += oNode.nodeValue;\r\n } else {\r\n if (vResult.hasOwnProperty(options.cdataKey)) {\r\n if (vResult[options.cdataKey].constructor !== Array) {\r\n vResult[options.cdataKey] = [vResult[options.cdataKey]];\r\n }\r\n vResult[options.cdataKey].push(oNode.nodeValue);\r\n\r\n } else {\r\n if (options.childrenAsArray) {\r\n vResult[options.cdataKey] = [];\r\n vResult[options.cdataKey].push(oNode.nodeValue);\r\n } else {\r\n vResult[options.cdataKey] = oNode.nodeValue;\r\n }\r\n }\r\n }\r\n } /* nodeType is \"CDATASection\" (4) */\r\n else if (oNode.nodeType === 3) {\r\n sCollectedTxt += oNode.nodeValue;\r\n } /* nodeType is \"Text\" (3) */\r\n else if (oNode.nodeType === 1) { /* nodeType is \"Element\" (1) */\r\n\r\n if (nLength === 0) {\r\n vResult = {};\r\n }\r\n\r\n // using nodeName to support browser (IE) implementation with no 'localName' property\r\n if (options.stripElemPrefix) {\r\n sProp = oNode.nodeName.replace(prefixMatch, '').firstLetterToLowerCase();\r\n } else {\r\n sProp = oNode.nodeName.firstLetterToLowerCase();\r\n }\r\n\r\n vContent = xmlToJSON.parseXML(oNode);\r\n\r\n if (vResult.hasOwnProperty(sProp)) {\r\n if (vResult[sProp].constructor !== Array) {\r\n vResult[sProp] = [vResult[sProp]];\r\n }\r\n vResult[sProp].push(vContent);\r\n\r\n } else {\r\n if (options.childrenAsArray) {\r\n vResult[sProp] = [];\r\n vResult[sProp].push(vContent);\r\n } else {\r\n vResult[sProp] = vContent;\r\n }\r\n nLength++;\r\n }\r\n }\r\n }\r\n } else if (oXMLParent.attributes.length === 0 && !sCollectedTxt) { // no children and no text, return null\r\n if (options.childrenAsArray) {\r\n vResult[options.textKey] = [];\r\n vResult[options.textKey].push(null);\r\n } else {\r\n vResult = null;\r\n }\r\n }\r\n\r\n if (sCollectedTxt) {\r\n if (options.grokText) {\r\n if (oXMLParent.nodeName !== 'ActiveBarcodes' && oXMLParent.nodeName !== 'ErrorBarcodes') {\r\n var value = this.grokType(sCollectedTxt.replace(trimMatch, ''));\r\n if (value !== null && value !== undefined) {\r\n vResult = value;\r\n }\r\n } else vResult = sCollectedTxt;\r\n } else if (options.normalize) {\r\n vResult = sCollectedTxt.replace(trimMatch, '').replace(/\\s+/g, \" \");\r\n } else {\r\n vResult = sCollectedTxt.replace(trimMatch, '');\r\n }\r\n }\r\n\r\n return vResult;\r\n }\r\n\r\n\r\n // Convert xmlDocument to a string\r\n // Returns null on failure\r\n this.xmlToString = function (xmlDoc) {\r\n try {\r\n var xmlString = xmlDoc.xml ? xmlDoc.xml : (new XMLSerializer()).serializeToString(xmlDoc);\r\n return xmlString;\r\n } catch (err) {\r\n return null;\r\n }\r\n }\r\n\r\n // Convert a string to XML Node Structure\r\n // Returns null on failure\r\n this.stringToXML = function (xmlString) {\r\n try {\r\n var xmlDoc = null;\r\n var parser = new DOMParser();\r\n xmlDoc = parser.parseFromString(xmlString, \"text/xml\");\r\n return xmlDoc;\r\n } catch (e) {\r\n return null;\r\n }\r\n }\r\n\r\n return this;\r\n}).call({});\r\n\r\nif (typeof module != \"undefined\" && module !== null && module.exports) module.exports = xmlToJSON;","/**\r\n * Add dataset support to elements\r\n * No globals, no overriding prototype with non-standard methods, \r\n * handles CamelCase properly, attempts to use standard \r\n * Object.defineProperty() (and Function bind()) methods, \r\n * falls back to native implementation when existing\r\n * Inspired by http://code.eligrey.com/html5/dataset/ \r\n * (via https://github.com/adalgiso/html5-dataset/blob/master/html5-dataset.js )\r\n * Depends on Function.bind and Object.defineProperty/Object.getOwnPropertyDescriptor (polyfills below)\r\n * All code below is Licensed under the X11/MIT License\r\n*/\r\n\r\n// Inspired by https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind#Compatibility\r\nif (!Function.prototype.bind) {\r\n Function.prototype.bind = function (oThis) {\r\n 'use strict';\r\n if (typeof this !== \"function\") {\r\n // closest thing possible to the ECMAScript 5 internal IsCallable function\r\n throw new TypeError(\"Function.prototype.bind - what is trying to be bound is not callable\");\r\n }\r\n\r\n var aArgs = Array.prototype.slice.call(arguments, 1),\r\n fToBind = this,\r\n FNOP = function () {},\r\n fBound = function () {\r\n return fToBind.apply(\r\n this instanceof FNOP && oThis ? this : oThis,\r\n aArgs.concat(Array.prototype.slice.call(arguments))\r\n );\r\n };\r\n\r\n FNOP.prototype = this.prototype;\r\n fBound.prototype = new FNOP();\r\n\r\n return fBound;\r\n };\r\n}\r\n\r\n/*\r\n * Xccessors Standard: Cross-browser ECMAScript 5 accessors\r\n * http://purl.eligrey.com/github/Xccessors\r\n * \r\n * 2010-06-21\r\n * \r\n * By Eli Grey, http://eligrey.com\r\n * \r\n * A shim that partially implements Object.defineProperty,\r\n * Object.getOwnPropertyDescriptor, and Object.defineProperties in browsers that have\r\n * legacy __(define|lookup)[GS]etter__ support.\r\n * \r\n * Licensed under the X11/MIT License\r\n * See LICENSE.md\r\n*/\r\n\r\n// Removed a few JSLint options as Notepad++ JSLint validator complaining and \r\n// made comply with JSLint; also moved 'use strict' inside function\r\n/*jslint white: true, undef: true, plusplus: true,\r\n bitwise: true, regexp: true, newcap: true, maxlen: 90 */\r\n\r\n/*! @source http://purl.eligrey.com/github/Xccessors/blob/master/xccessors-standard.js*/\r\n\r\n(function () {\r\n 'use strict';\r\n\r\n //Just adding this here...\r\n if (!window.location.origin) { // Some browsers (mainly IE) does not have this property, so we need to build it manually...\r\n window.location.origin = window.location.protocol + '//' + window.location.hostname + (window.location.port ? (':' + window.location.port) : '');\r\n }\r\n //----------\r\n\r\n var ObjectProto = Object.prototype,\r\n defineGetter = ObjectProto.__defineGetter__,\r\n defineSetter = ObjectProto.__defineSetter__,\r\n lookupGetter = ObjectProto.__lookupGetter__,\r\n lookupSetter = ObjectProto.__lookupSetter__,\r\n hasOwnProp = ObjectProto.hasOwnProperty;\r\n \r\n if (defineGetter && defineSetter && lookupGetter && lookupSetter) {\r\n\r\n if (!Object.defineProperty) {\r\n Object.defineProperty = function (obj, prop, descriptor) {\r\n if (arguments.length < 3) { // all arguments required\r\n throw new TypeError(\"Arguments not optional\");\r\n }\r\n \r\n prop += \"\"; // convert prop to string\r\n\r\n if (hasOwnProp.call(descriptor, \"value\")) {\r\n if (!lookupGetter.call(obj, prop) && !lookupSetter.call(obj, prop)) {\r\n // data property defined and no pre-existing accessors\r\n obj[prop] = descriptor.value;\r\n }\r\n\r\n if ((hasOwnProp.call(descriptor, \"get\") ||\r\n hasOwnProp.call(descriptor, \"set\"))) \r\n {\r\n // descriptor has a value prop but accessor already exists\r\n throw new TypeError(\"Cannot specify an accessor and a value\");\r\n }\r\n }\r\n\r\n // can't switch off these features in ECMAScript 3\r\n // so throw a TypeError if any are false\r\n if (!(descriptor.writable && descriptor.enumerable && \r\n descriptor.configurable))\r\n {\r\n throw new TypeError(\r\n \"This implementation of Object.defineProperty does not support\" +\r\n \" false for configurable, enumerable, or writable.\"\r\n );\r\n }\r\n \r\n if (descriptor.get) {\r\n defineGetter.call(obj, prop, descriptor.get);\r\n }\r\n if (descriptor.set) {\r\n defineSetter.call(obj, prop, descriptor.set);\r\n }\r\n \r\n return obj;\r\n };\r\n }\r\n\r\n if (!Object.getOwnPropertyDescriptor) {\r\n Object.getOwnPropertyDescriptor = function (obj, prop) {\r\n if (arguments.length < 2) { // all arguments required\r\n throw new TypeError(\"Arguments not optional.\");\r\n }\r\n \r\n prop += \"\"; // convert prop to string\r\n\r\n var descriptor = {\r\n configurable: true,\r\n enumerable : true,\r\n writable : true\r\n },\r\n getter = lookupGetter.call(obj, prop),\r\n setter = lookupSetter.call(obj, prop);\r\n\r\n if (!hasOwnProp.call(obj, prop)) {\r\n // property doesn't exist or is inherited\r\n return descriptor;\r\n }\r\n if (!getter && !setter) { // not an accessor so return prop\r\n descriptor.value = obj[prop];\r\n return descriptor;\r\n }\r\n\r\n // there is an accessor, remove descriptor.writable;\r\n // populate descriptor.get and descriptor.set (IE's behavior)\r\n delete descriptor.writable;\r\n descriptor.get = descriptor.set = undefined;\r\n \r\n if (getter) {\r\n descriptor.get = getter;\r\n }\r\n if (setter) {\r\n descriptor.set = setter;\r\n }\r\n \r\n return descriptor;\r\n };\r\n }\r\n\r\n if (!Object.defineProperties) {\r\n Object.defineProperties = function (obj, props) {\r\n var prop;\r\n for (prop in props) {\r\n if (hasOwnProp.call(props, prop)) {\r\n Object.defineProperty(obj, prop, props[prop]);\r\n }\r\n }\r\n };\r\n }\r\n }\r\n}());\r\n\r\n// Begin dataset code\r\n\r\nif (!document.documentElement.dataset && \r\n // FF is empty while IE gives empty object\r\n (!Object.getOwnPropertyDescriptor(Element.prototype, 'dataset') ||\r\n !Object.getOwnPropertyDescriptor(Element.prototype, 'dataset').get)\r\n ) {\r\n var propDescriptor = {\r\n enumerable: true,\r\n get: function () {\r\n 'use strict';\r\n var i, \r\n that = this,\r\n HTML5_DOMStringMap, \r\n attrVal, attrName, propName,\r\n attribute,\r\n attributes = this.attributes,\r\n attsLength = attributes.length,\r\n toUpperCase = function (n0) {\r\n return n0.charAt(1).toUpperCase();\r\n },\r\n getter = function () {\r\n return this;\r\n },\r\n setter = function (attrName, value) {\r\n return (typeof value !== 'undefined') ? \r\n this.setAttribute(attrName, value) : \r\n this.removeAttribute(attrName);\r\n };\r\n try { // Simulate DOMStringMap w/accessor support\r\n // Test setting accessor on normal object\r\n ({}).__defineGetter__('test', function () {});\r\n HTML5_DOMStringMap = {};\r\n }\r\n catch (e1) { // Use a DOM object for IE8\r\n HTML5_DOMStringMap = document.createElement('div');\r\n }\r\n for (i = 0; i < attsLength; i++) {\r\n attribute = attributes[i];\r\n // Fix: This test really should allow any XML Name without \r\n // colons (and non-uppercase for XHTML)\r\n if (attribute && attribute.name && \r\n (/^data-\\w[\\w\\-]*$/).test(attribute.name)) {\r\n attrVal = attribute.value;\r\n attrName = attribute.name;\r\n // Change to CamelCase\r\n propName = attrName.substr(5).replace(/-./g, toUpperCase);\r\n try {\r\n Object.defineProperty(HTML5_DOMStringMap, propName, {\r\n enumerable: this.enumerable,\r\n get: getter.bind(attrVal || ''),\r\n set: setter.bind(that, attrName)\r\n });\r\n }\r\n catch (e2) { // if accessors are not working\r\n HTML5_DOMStringMap[propName] = attrVal;\r\n }\r\n }\r\n }\r\n return HTML5_DOMStringMap;\r\n }\r\n };\r\n try {\r\n // FF enumerates over element's dataset, but not \r\n // Element.prototype.dataset; IE9 iterates over both\r\n Object.defineProperty(Element.prototype, 'dataset', propDescriptor);\r\n } catch (e) {\r\n propDescriptor.enumerable = false; // IE8 does not allow setting to true\r\n Object.defineProperty(Element.prototype, 'dataset', propDescriptor);\r\n }\r\n}\r\n","export default {\r\n types: {\r\n normal: 'Normal',\r\n special: 'Special'\r\n },\r\n\r\n showtimeListType: {\r\n timesOnly: 'timesOnly',\r\n dateTime: 'dateTime'\r\n },\r\n \r\n columns: {\r\n one: 1,\r\n two: 2,\r\n five: 5,\r\n six: 6\r\n },\r\n \r\n sort: {\r\n alphabet: 'alphabet',\r\n time: 'time'\r\n },\r\n\r\n hourWhenDateShifts: 3,\r\n\r\n listTypes: {\r\n all: 'all',\r\n allFuture: 'all-future',\r\n date: 'date',\r\n future: 'future',\r\n special: 'special',\r\n external: 'external'\r\n }\r\n}","import CONSTANTS from '../components/movielists/movielist-constants'\r\n\r\nexport const APP_MODES = {\r\n PROGRAM: 'program',\r\n MOVIE: 'movie',\r\n ORDERFLOW: 'orderflow'\r\n}\r\n\r\nexport const ORGANIZER_TYPES = {\r\n CINEMA: 'cinema',\r\n CIRCUS: 'circus'\r\n}\r\n\r\nexport const AVAILABLE_LOCALES = [\r\n { id: 'da', name: 'Dansk', flag: '/images/flags/DK.png' },\r\n { id: 'en', name: 'English', flag: '/images/flags/UK.png' }\r\n];\r\n\r\nexport const FILTERS = {\r\n BABYBIO: 1,\r\n SENIORBIO: 2\r\n}\r\n\r\nexport const FILTER_TEXTS = {\r\n 1: 'Baby Bio',\r\n 2: 'Seniro Bio'\r\n}\r\n\r\nexport const SITE_TYPES = {\r\n WEB: 0,\r\n APP: 1,\r\n UMBRACO: 2\r\n}\r\n\r\nexport const VOUCHER_TYPES = {\r\n GIFTCARD: 'giftcard',\r\n TICKETS: 'tickets',\r\n BIOKLUBDK: 'bioklubdk',\r\n DISCOUNT: 'rabat'\r\n}\r\n\r\nexport const AGE_CENSORS = {\r\n 'alle': 'all',\r\n '7': 'seven',\r\n '11': 'eleven',\r\n '15': 'fifteen'\r\n}\r\n\r\nexport default {\r\n organizerId: 3,\r\n baseUrl: extractEnvironmentFromUrl(),\r\n exportPath: '/systemnative/export.asmx',\r\n ticketgatePath: '/systemnative/ticketgate.asmx',\r\n\r\n organizerUrls: {\r\n 'localhost:3000': 3,\r\n 'dev.ebillet.dk': 3\r\n },\r\n\r\n defaultConfiguration: {\r\n organizerType: ORGANIZER_TYPES.CINEMA,\r\n appLocale: 'da',\r\n appMode: APP_MODES.PROGRAM,\r\n showReservedAsRed: false,\r\n customerPasswordEnabled: true,\r\n openOrderFlowInNewWindow: false,\r\n hasCustomStyles: false,\r\n timezone: 'Europe/Copenhagen',\r\n bottomBarAllwaysVisible: false,\r\n giftCardsEnabled: false,\r\n repeatEmail: false,\r\n availableLocales: AVAILABLE_LOCALES,\r\n phoneMinLength: 8,\r\n altAllMovies: false,\r\n payWithDibs: false,\r\n\r\n posterBanners: {\r\n show3D: false,\r\n showAtmos: false\r\n },\r\n\r\n pageHeaders: {\r\n allMovies: null,\r\n date: null,\r\n futureMovies: null,\r\n movie: null,\r\n orderflow: null,\r\n myTickets: null\r\n },\r\n\r\n movielists: {\r\n all: {\r\n base: true,\r\n columns: CONSTANTS.columns.five,\r\n sort: CONSTANTS.sort.alphabet\r\n },\r\n date: {\r\n base: true,\r\n columns: CONSTANTS.columns.five,\r\n sort: CONSTANTS.sort.time\r\n },\r\n future: {\r\n columns: CONSTANTS.columns.one,\r\n },\r\n special: {\r\n enabledOnProgram: false,\r\n columns: CONSTANTS.columns.two,\r\n sort: CONSTANTS.sort.alphabet\r\n }\r\n },\r\n\r\n fees: {\r\n reserveTransaction: 5,\r\n reserveTicket: 0,\r\n buyTransaction: 5,\r\n buyTicket: 0\r\n },\r\n\r\n newsletters: [],\r\n\r\n smsReminder: {\r\n enabled: false,\r\n checkedByDefault: false\r\n },\r\n\r\n receiptTexts: {\r\n reserve: 'Oplys dit telefonnummer eller vis denne side når du henter dine billetter.',\r\n buy: 'Denne side er gyldig som billet.',\r\n },\r\n\r\n errorText: {\r\n soldOut: 'Denne forestilling er desværre udsolgt.'\r\n },\r\n\r\n gdprTexts: {\r\n reserve: '',\r\n buy: '',\r\n },\r\n\r\n pointsLoginText: 'Optjen points på dit køb'\r\n }\r\n}\r\n\r\nfunction extractEnvironmentFromUrl() {\r\n const origin = window.location.origin;\r\n return origin.indexOf('localhost') !== -1 ? 'http://dev.ebillet.dk' : origin;\r\n}","export function isiPhone() {\r\n return navigator.userAgent.match(/iPhone/i) != null;\r\n}\r\n\r\nexport function getParams(url) {\r\n let params = {};\r\n url = url ? url : window.location.href;\r\n const match = url.match(/\\?(.*)$/);\r\n\r\n if (match && match[1]) {\r\n match[1].split('&').forEach((pair) => {\r\n pair = pair.split('=');\r\n params[pair[0]] = decodeURIComponent(pair[1]);\r\n });\r\n }\r\n return params;\r\n}","import fetch from 'isomorphic-fetch'\r\nimport { getParams } from '../utilities/location-utilities'\r\n\r\nexport default {\r\n fetchMovieList,\r\n fetchMovie,\r\n fetchUserTransactions,\r\n fetchNewsletters,\r\n postNewsletter,\r\n postLog\r\n}\r\n\r\nconst baseUrl = window.location.href.indexOf('localhost') != -1 ? 'https://localhost:44390/' : window.location.protocol + '//' + window.location.host + '/api/';\r\n\r\nfunction fetchMovieList(organizerIds, daysBack) {\r\n const queryParameters = getParams(window.location.href);\r\n const filterId = queryParameters.filter || null;\r\n const updateCache = queryParameters.updateCache || false;\r\n const querystring = `?organizerIds=${organizerIds}${daysBack ? '&daysBack=' + daysBack : ''}${filterId ? '&filterId=' + filterId : ''}${updateCache ? '&updateCache=' + updateCache : ''}`;\r\n return fetch(baseUrl + `movies${querystring}`).then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n });\r\n}\r\n\r\nfunction fetchMovie(movieId, organizerIds) {\r\n const url = `movies/${movieId}?organizerIds=${organizerIds}`;\r\n return fetch(baseUrl + url).then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n });\r\n}\r\n\r\nfunction fetchUserTransactions(emailOrPhone, password) {\r\n return fetch(`${baseUrl}transactions?emailOrPhone=${emailOrPhone}&password=${password}`).then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n });\r\n}\r\n\r\n\r\nfunction fetchNewsletters(organizerId, customerEmail) {\r\n return fetch(`${baseUrl}newsletters?organizerId=${organizerId}&customerEmail=${customerEmail}`).then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n });\r\n}\r\n\r\nfunction postNewsletter(body) {\r\n return fetch(`${baseUrl}newsletters`, {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n}\r\n\r\nfunction postLog(body) {\r\n return fetch(baseUrl + 'logs', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(body)\r\n });\r\n}\r\n\r\n\r\nexport function logTrace(method, message, logLevel = 'information') {\r\n const body = {\r\n logLevel,\r\n entry: {\r\n origin: 'Frontend',\r\n method,\r\n message\r\n },\r\n client: {\r\n id: 1,\r\n name: 'OrderFlow.WebApp',\r\n url: window.location.href\r\n }\r\n }\r\n\r\n postLog(body);\r\n}\r\n\r\nexport function sendLogSms(message) {\r\n return fetch(baseUrl + 'logs/send-sms', {\r\n method: 'POST',\r\n headers: { 'Content-Type': 'application/json' },\r\n body: JSON.stringify(message)\r\n });\r\n}","import fetch from 'isomorphic-fetch'\r\nimport xml2js from '../lib/xml-to-js'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport CONSTANTS from '../components/movielists/movielist-constants'\r\nimport API_CONSTANTS from './api-constants'\r\nimport { getParams } from '../utilities/location-utilities'\r\n\r\n// GET FUTURE MOVIES \r\nexport default function fetchItems(templateId) {\r\n const queryParams = getParams();\r\n const showAllwaysIfEvents = queryParams.showallwaysifevents == \"true\" || queryParams.ShowAllwaysIfEvents == \"TRUE\";\r\n const showIfEvents = showAllwaysIfEvents ? '&ShowAllwaysIfEvents=true' : '';\r\n if (!templateId) templateId = -1; //fallback\r\n\r\n return fetch(`${API_CONSTANTS.baseUrl}${API_CONSTANTS.exportPath}/GetItems?nTemplateNo=${templateId}${showIfEvents}&REMOTE_HOST=127.0.0.2`,\r\n {\r\n method: 'GET',\r\n headers: new Headers({ 'Content-Type': 'text/xml' })\r\n })\r\n .then(response => response.text())\r\n .then(xml => extractItems(xml, showAllwaysIfEvents))\r\n}\r\n\r\nfunction extractItems(xml, showAllwaysIfEvents) {\r\n const json = xml2js.parseString(xml);\r\n const itemList = json.itemList;\r\n const movies = itemList.movies ? (Array.isArray(itemList.movies.movie) ? itemList.movies.movie : [itemList.movies.movie]) : null;\r\n const items = itemList.items ? (Array.isArray(itemList.items.item) ? itemList.items.item : [itemList.items.item]) : null;\r\n\r\n let futureMovies = [];\r\n const dateTimeNow = moment(itemList._publishDate);\r\n _.forEach(items, (item) => {\r\n const insidePeriod = dateTimeNow >= moment(item.enablePeriod.start) && dateTimeNow <= moment(item.enablePeriod.end);\r\n if (insidePeriod || showAllwaysIfEvents) {\r\n const movie = _.find(movies, { '_no': item._movieNo });\r\n if (movie) {\r\n movie.info = item.info;\r\n const organizerId = item._organizerNo;\r\n const futureMovie = extractMovies(movie, organizerId);\r\n futureMovie.openingDate = +moment(item.enablePeriod.end);\r\n futureMovies.push(futureMovie);\r\n }\r\n }\r\n });\r\n return _.sortBy(futureMovies, ['openingDate']);\r\n}\r\n\r\nfunction extractMovies(movie, organizerId) {\r\n const posterBaseUrl = 'https://poster.ebillet.dk/';\r\n return {\r\n id: movie._no,\r\n organizerId: organizerId,\r\n type: movie._no ? CONSTANTS.types.normal : CONSTANTS.types.special,\r\n name: movie.name,\r\n description: _.isEmpty(movie.synopsis) ? null : movie.synopsis,\r\n posters: {\r\n small: posterBaseUrl + movie.path,\r\n large: posterBaseUrl + movie.largePath,\r\n hd: posterBaseUrl + movie.hDPath,\r\n live: posterBaseUrl + movie.livePoster,\r\n advertisement: posterBaseUrl + movie.advertisement\r\n },\r\n subName: movie.subName,\r\n originalName: _.isEmpty(movie.originalName) ? null : movie.originalName,\r\n ageCensoring: _.isEmpty(movie.censoring) ? null : movie.censoring,\r\n dimension: movie.dimension,\r\n genre: _.isEmpty(movie.genre) ? null : movie.genre,\r\n length: !_.isEmpty(movie.length) && movie.length !== '00:00' ? movie.length : null,\r\n pictures: movie.pictures ? (Array.isArray(movie.pictures.item) ? movie.pictures.item.map(function (picture) { return 'https://ebillet.dk/poster/pictures/' + picture }) : movie.pictures.item) : null,\r\n actors: movie.actors ? (Array.isArray(movie.actors.item) ? movie.actors.item : [movie.actors.item]) : null,\r\n directors: movie.directors ? (Array.isArray(movie.directors.item) ? movie.directors.item : [movie.directors.item]) : null,\r\n trailer: movie.vimeoId ? 'https://player.vimeo.com/video/' + movie.vimeoId : null,\r\n imdb: _.isEmpty(movie.iMDb) ? null : 'https://www.imdb.com/name/' + movie.iMDb,\r\n is3D: +movie.dimension === 3,\r\n isAtmos: +movie.movieFormat & 1 === 1 ? true : false,\r\n info: movie.info ? movie.info : null\r\n }\r\n}","export const ROUTES = {\r\n TICKETMASTER_ALL_EVENTS: '/ticketmaster-alle-events',\r\n TICKETMASTER_EVENT: '/ticketmaster-event',\r\n\r\n BILLETTEN_ALL_EVENTS: '/billetten-alle-events',\r\n BILLETTEN_EVENT: '/billetten-event',\r\n\r\n MULTI_ALL_MOVIES: '/multibio-alle-film',\r\n MULTI_FUTURE_MOVIES: '/multibio-kommende-film',\r\n MULTI_PROGRAM: '/multibio-program',\r\n MULTI_MOVIE: '/multibio-film-info',\r\n\r\n HOME: '/',\r\n COMMERCIALS: '/reklamer',\r\n PAGES: '/pages',\r\n MOVIE: '/film-info',\r\n\r\n PROGRAM_AND_ALL_FUTURE_MOVIES: '/program-og-fremtidige-film',\r\n\r\n ALL_MOVIES: '/alle-film',\r\n ALL_FUTURE_MOVIES: '/alle-fremtidige-film',\r\n PROGRAM: '/program',\r\n FUTURE_MOVIES: '/kommende-film',\r\n SPECIAL_MOVIES: '/specielle-arrangementer',\r\n CIRCUS: '/cirkus',\r\n\r\n USER_TRANSACTIONS: '/mine-billetter',\r\n NEWSLETTERS: '/nyhedsbreve',\r\n\r\n ORDERFLOW: {\r\n TICKETS: '/billetter',\r\n EXTRA_PURCHASES: '/tilkøb',\r\n CUSTOMER: '/kunde-oplysninger',\r\n BIOKLUB_DK: '/biografklub-danamark',\r\n PAYMENT: '/betaling',\r\n GIFTCARDS: '/gavekort',\r\n DIBS: '/dibs',\r\n REEPAY: '/reepay',\r\n RECEIPT: '/kvittering',\r\n RESERVATION: '/reservation',\r\n },\r\n\r\n NOT_FOUND: '/findes-ikke'\r\n}","import _ from 'lodash'\r\nimport api from '../api/orderflow-api'\r\nimport moment from 'moment'\r\nimport { getParams } from '../utilities/location-utilities'\r\nimport fetchItems from '../api/export-api'\r\nimport { getOrganizer } from './organizer-actions'\r\nimport { ROUTES } from '../components/navigation/route-constants'\r\n\r\nexport default {\r\n getMovieList,\r\n getFutureMovies\r\n}\r\n\r\nexport const MOVIELIST_REQUEST = 'MOVIELIST_REQUEST'\r\nexport const MOVIELIST_SUCCESS = 'MOVIELIST_SUCCESS'\r\nexport const MOVIELIST_FAILED = 'MOVIELIST_FAILED'\r\n\r\nexport function getMovieList(organizerIds) {\r\n return (dispatch, getState) => {\r\n const config = getState().organizer.configuration;\r\n dispatch(movielistRequest());\r\n\r\n return api.fetchMovieList(organizerIds, config.daysBack)\r\n .then(json => {\r\n json.filterId = getParams().filter || null;\r\n return dispatch(movielistSuccess(json, organizerIds, config));\r\n }, error => dispatch(movielistFailed(error)));\r\n }\r\n}\r\n\r\nconst movielistRequest = () => {\r\n return {\r\n type: MOVIELIST_REQUEST,\r\n requestedAt: Date.now()\r\n }\r\n}\r\n\r\nexport const movielistSuccess = (json, organizerIds, config) => {\r\n const dateSort = config.movielists.date.sort;\r\n const monthSort = config.movielists.special.sort;\r\n const queryParameters = getParams(window.location.href);\r\n const selectedDate = queryParameters.date ? queryParameters.date : null;\r\n\r\n const datesWithShowtimes = []\r\n _.forEach(json.showtimes, (showtime) => {\r\n if (showtime.showInfo.enabled === true) {\r\n const date = moment(showtime.dateTime).format('YYYY-MM-DD');\r\n if (!_.includes(datesWithShowtimes, date)) datesWithShowtimes.push(date);\r\n }\r\n });\r\n\r\n //Setting the backTo path if coming from a list\r\n let backTo = ROUTES.PROGRAM;\r\n const path = window.location.pathname;\r\n if (path == ROUTES.ALL_FUTURE_MOVIES || path == ROUTES.ALL_MOVIES || path == ROUTES.CIRCUS || path == ROUTES.FUTURE_MOVIES\r\n || path == ROUTES.MULTI_ALL_MOVIES || path == ROUTES.MULTI_FUTURE_MOVIES || path == ROUTES.PROGRAM || path == ROUTES.PROGRAM_AND_ALL_FUTURE_MOVIES) {\r\n backTo = path;\r\n }\r\n //--\r\n\r\n return {\r\n type: MOVIELIST_SUCCESS,\r\n succeededAt: Date.now(),\r\n organizerIds,\r\n organizers: json.organizers,\r\n movies: _.sortBy(json.movies, ['name']),\r\n movieBases: _.sortBy(json.movieBases, ['name']),\r\n showtimes: json.showtimes,\r\n showtimeTypes: json.showtimeTypes,\r\n datesWithShowtimes,\r\n sort: dateSort,\r\n monthSort,\r\n showBackInTime: config.daysBack > 0,\r\n selectedDate,\r\n backTo,\r\n filterId: parseInt(json.filterId)\r\n }\r\n}\r\n\r\nconst movielistFailed = (error) => {\r\n return {\r\n type: MOVIELIST_FAILED,\r\n failedAt: Date.now(),\r\n error: {\r\n ...error,\r\n message: 'Der var ingen data at hente. Prøv igen senere.'\r\n }\r\n }\r\n}\r\n\r\nexport const FUTURE_MOVIES_REQUEST = 'FUTURE_MOVIES_REQUEST'\r\nexport const FUTURE_MOVIES_SUCCESS = 'FUTURE_MOVIES_SUCCESS'\r\nexport const FUTURE_MOVIES_FAILED = 'FUTURE_MOVIES_FAILED'\r\n\r\nexport function getFutureMovies(templateIds, organizerIds) {\r\n return dispatch => {\r\n const isMultipleTemplates = _.includes(templateIds, ',');\r\n const templates = isMultipleTemplates ? _.split(templateIds, ',') : templateIds;\r\n\r\n if (isMultipleTemplates) {\r\n const promises = [];\r\n _.forEach(templates, (id) => {\r\n promises.push(new Promise((resolve, reject) => {\r\n dispatch(futureMoviesRequest());\r\n resolve(fetchItems(id));\r\n }));\r\n });\r\n\r\n Promise.all(promises).then(result => {\r\n const items = _.flatten(result);\r\n const merged = [];\r\n _.forEach(items, (item) => {\r\n const exists = _.find(merged, { id: item.id });\r\n if (exists) {\r\n if (Array.isArray(exists.organizerId)) exists.organizerId.push(item.organizerId);\r\n else exists.organizerId = [exists.organizerId, item.organizerId];\r\n } else {\r\n item.organizerId = [item.organizerId];\r\n merged.push(item);\r\n }\r\n });\r\n\r\n return dispatch(getMovieList(organizerIds)).then(() => dispatch(futureMoviesSuccess(merged)));\r\n }, error => dispatch(futureMoviesFailed(error)));\r\n } else {\r\n dispatch(futureMoviesRequest(templateIds));\r\n return dispatch(getMovieList(organizerIds)).then(() => fetchItems(templateIds)).then(items => dispatch(futureMoviesSuccess(items)), error => dispatch(futureMoviesFailed(error)));\r\n }\r\n }\r\n}\r\n\r\nconst futureMoviesRequest = (templateId) => {\r\n return {\r\n type: FUTURE_MOVIES_REQUEST,\r\n requestedAt: Date.now(),\r\n templateId\r\n }\r\n}\r\n\r\nconst futureMoviesSuccess = (futureMovies) => {\r\n return {\r\n type: FUTURE_MOVIES_SUCCESS,\r\n succeededAt: Date.now(),\r\n futureMovies\r\n }\r\n}\r\n\r\nconst futureMoviesFailed = (error) => {\r\n return {\r\n type: FUTURE_MOVIES_FAILED,\r\n failedAt: Date.now(),\r\n error: {\r\n ...error,\r\n message: 'Der var ingen data at hente. Prøv igen senere.',\r\n }\r\n }\r\n}\r\n\r\n// CHANGE HANDLERS\r\nexport function changeSelectedShowtime(newShowtime, backTo) {\r\n return (dispatch, getState) => {\r\n const isInFuture = moment(newShowtime.dateTime) > moment();\r\n if (isInFuture) {\r\n const organizers = getState().movielist.organizers;\r\n const isMultipleOrgs = organizers.length > 1;\r\n if (isMultipleOrgs) {\r\n const selectedOrganizer = _.find(organizers, { 'id': newShowtime.organizerId });\r\n const siteType = getState().app.siteType;\r\n dispatch(getOrganizer(selectedOrganizer.id, siteType));\r\n }\r\n return new Promise((resolve) => {\r\n return dispatch(selectedMovieChanged(newShowtime.movieId, backTo))\r\n .then(() => resolve(dispatch(selectedShowtimeChanged(newShowtime))));\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const SELECTED_MOVIE_CHANGED = 'SELECTED_MOVIE_CHANGED'\r\nexport function selectedMovieChanged(newMovieId, backTo) {\r\n return (dispatch, getState) => {\r\n let movie = _.find(getState().movielist.movies, (movie) => { return movie.id == newMovieId }) ||\r\n _.find(getState().movielist.futureMovies, (movie) => { return movie.id == newMovieId });\r\n\r\n const organizerIds = getState().movielist.organizerIds;\r\n if (!movie && organizerIds) {\r\n return api.fetchMovie(newMovieId, organizerIds).then((result) => dispatch(selectedMovieUpdate(result.movies[0], backTo)));\r\n } else {\r\n return new Promise((resolve) => {\r\n return resolve(dispatch(selectedMovieUpdate(movie, backTo)));\r\n });\r\n }\r\n }\r\n}\r\n\r\nconst selectedMovieUpdate = (newMovie, backTo) => {\r\n return {\r\n type: SELECTED_MOVIE_CHANGED,\r\n movie: newMovie,\r\n backTo\r\n }\r\n}\r\n\r\n\r\nexport const SELECTED_SHOWTIME_CHANGED = 'SELECTED_SHOWTIME_CHANGED'\r\nexport const selectedShowtimeChanged = (newShowtime) => {\r\n return {\r\n type: SELECTED_SHOWTIME_CHANGED,\r\n selectedShowtime: newShowtime\r\n }\r\n}\r\n\r\nexport const TOGGLE_SORT = 'TOGGLE_SORT'\r\nexport const toggleSort = (newSort) => {\r\n return {\r\n type: TOGGLE_SORT,\r\n sort: newSort\r\n }\r\n}\r\n\r\nexport const CHANGE_DATE = 'CHANGE_DATE'\r\nexport const changeDate = (newDate) => {\r\n return {\r\n type: CHANGE_DATE,\r\n selectedDate: newDate\r\n }\r\n}\r\n\r\nexport const CHANGE_MONTH = 'CHANGE_MONTH'\r\nexport const changeMonth = (newMonth) => {\r\n return {\r\n type: CHANGE_MONTH,\r\n selectedMonth: newMonth\r\n }\r\n}","const authHeader = ''\r\n + 'web'\r\n + 'web'\r\n + '10'\r\n + '';\r\n\r\nexport function getOrganizer(organizerId, siteType = 0, customerEmail) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + organizerId + ''\r\n + '' + siteType + ''\r\n + '' + customerEmail + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function getAvailableTicketsAndConcession(organizerId, movieId, cardholder, discountCode) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + organizerId + ''\r\n + '' + movieId + ''\r\n + '' + cardholder + ''\r\n + '' + discountCode + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function ticketsXml(organizerId, showtimeId, tickets) {\r\n return ''\r\n + ''\r\n + ''\r\n + tickets\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function blockSeats(transactionId, cardholder, hostaddress, tickets, vouchers, defaultTickets) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + transactionId + ''\r\n + '' + cardholder + ''\r\n + '' + hostaddress + ''\r\n + '' + tickets + ''\r\n + '' + vouchers + ''\r\n + '' + defaultTickets + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function seatsImage() {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function moveSeats(transactionId, x, y) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + transactionId + ''\r\n + '' + x + ''\r\n + '' + y + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function getConcessions(organizerId, showtimeId, cardholderId) {\r\n return ''\r\n + ''\r\n + ''\r\n + ''\r\n + '' + organizerId + ''\r\n + '' + showtimeId + ''\r\n + '' + cardholderId + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function concessionXml(organizerId, showtimeId, concessions) {\r\n return ''\r\n + ''\r\n + ''\r\n + concessions\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function addConcession(transactionId, cardholderId, quickuserId, concessions) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + transactionId + ''\r\n + '' + cardholderId + ''\r\n + '' + quickuserId + ''\r\n + '' + concessions + ''\r\n + ''\r\n + ''\r\n + ''\r\n}\r\n\r\nexport function voucherXml(organizerId, showtimeId, vouchers) {\r\n return ''\r\n + ''\r\n + ''\r\n + vouchers\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function addVouchers(transactionId, cardholderId, vouchers) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + transactionId + ''\r\n + '' + cardholderId + ''\r\n + '' + vouchers + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function preBook(transactionId, userId, phone, name, password, email, cardholder, creditCardCode, quickUser) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + transactionId + ''\r\n + '' + userId + ''\r\n + '' + phone + ''\r\n + '' + name + ''\r\n + '' + password + ''\r\n + '' + email + ''\r\n + '' + cardholder + ''\r\n + '' + creditCardCode + ''\r\n + '' + quickUser + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function reserve(transactionId, userId, phone, name, password, email, hostaddress, quickuser, newsletters, smsReminder, zipCode, note) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + transactionId + ''\r\n + '' + userId + ''\r\n + '' + phone + ''\r\n + '' + name + ''\r\n + '' + password + ''\r\n + '' + email + ''\r\n + '' + hostaddress + ''\r\n + '' + quickuser + ''\r\n + '' + newsletters + ''\r\n + '' + smsReminder + ''\r\n + '' + zipCode + ''\r\n + '' + note + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function book(transactionId, userId, phone, name, password, email, cardholder, reference, orderId, amount, hostaddress, quickuser, newsletters, zipCode, note) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + transactionId + ''\r\n + '' + userId + ''\r\n + '' + phone + ''\r\n + '' + name + ''\r\n + '' + password + ''\r\n + '' + email + ''\r\n + '' + cardholder + ''\r\n + '' + reference + ''\r\n + '' + orderId + ''\r\n + '' + amount + ''\r\n + '' + hostaddress + ''\r\n + '' + quickuser + ''\r\n + '' + newsletters + ''\r\n + 'true'\r\n + '' + zipCode + ''\r\n + '' + note +''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function activateReservation(reservationId) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + reservationId + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function getReservation(reservationId) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + reservationId + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function cancelReservation(reservationId, userId, phone, password, hostaddress, quickuser) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + reservationId + ''\r\n + '' + userId + ''\r\n + '' + phone + ''\r\n + '' + password + ''\r\n + '' + hostaddress + ''\r\n + '' + quickuser + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function cancelTransaction(transactionId) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + transactionId + ''\r\n + ''\r\n + ''\r\n + '';\r\n}\r\n\r\nexport function getUser(email, password) {\r\n return ''\r\n + ''\r\n + ''\r\n + authHeader\r\n + ''\r\n + ''\r\n + ''\r\n + '' + email + ''\r\n + '' + password + ''\r\n + ''\r\n + ''\r\n + ''\r\n}","import moment from 'moment-timezone'\r\nimport 'moment/locale/da'\r\nimport _ from 'lodash'\r\nimport API_CONSTANTS, { FILTER_TEXTS } from '../api-constants'\r\nimport { AVAILABLE_LOCALES, FILTERS } from '../api-constants'\r\nimport { getParams } from '../../utilities/location-utilities'\r\n\r\nexport default function extractOrganizer(organizer) {\r\n const config = organizer.configuration;\r\n const smsReminder = config.smsReminder && Array.isArray(config.smsReminder) ? config.smsReminder[0] : config.smsReminder;\r\n\r\n const validCreditCards = organizer.validCreditCards ? organizer.validCreditCards.creditCard : null;\r\n const creditcards = validCreditCards && Array.isArray(validCreditCards) ? validCreditCards : [validCreditCards];\r\n\r\n const newsGroups = organizer.newsGroups ? organizer.newsGroups.newsGroup : null;\r\n const newsletters = newsGroups ? (Array.isArray(newsGroups) ? newsGroups : [newsGroups]) : [];\r\n\r\n return {\r\n id: organizer._no,\r\n name: organizer._name,\r\n futureTemplateId: organizer._futureTemplateNo,\r\n configuration: extractConfigurations(config, smsReminder, newsletters, organizer),\r\n creditcards: extractCreditCards(creditcards)\r\n }\r\n}\r\n\r\nfunction extractConfigurations(config, smsReminder, newsletters, organizer) {\r\n const DEFAULT = API_CONSTANTS.defaultConfiguration;\r\n\r\n const timezone = config.organizer._timeZone || DEFAULT.timezone;\r\n moment.tz.setDefault(timezone);\r\n\r\n const queryParams = getParams();\r\n\r\n return config ? {\r\n type: config.organizer._type ? config.organizer._type : DEFAULT.organizerType,\r\n appMode: config.organizer._appMode || DEFAULT.appMode,\r\n showReservedAsRed: config.organizer._showReservedAsRed,\r\n openOrderInNewWindow: config.organizer._openOrderFlowInNewWindow,\r\n customerPasswordEnabled: config.organizer._customerPasswordEnabled,\r\n showLocationOnShowtime: config.organizer._showLocationOnEventTime,\r\n daysBack: config.organizer._showDaysBackInProgram,\r\n defaultTickets: config.organizer._defaultTickets,\r\n hasCustomStyles: config.organizer._useCustomStyleSheet || DEFAULT.hasCustomStyles,\r\n bottomBarAllwaysVisible: config.organizer._bottomBarAllwaysVisible || DEFAULT.bottomBarAllwaysVisible,\r\n giftCardsEnabled: config.organizer._redeemCuponsOnline || DEFAULT.giftCardsEnabled,\r\n repeatEmail: config.organizer._confirmEmailInput || DEFAULT.repeatEmail,\r\n availableLocales: config.organizer._languages ? extractLocales(config.organizer._languages) : [{ id: 'da', name: 'Dansk', flag: '/images/flags/DK.png' }], //default to Danish\r\n summaryExpanded: config.organizer._summaryExpanded,\r\n phoneMinLength: organizer.phoneRestrictions.minLength || DEFAULT.phoneMinLength,\r\n payWithDibs: config.organizer._payWithDIBS || DEFAULT.payWithDibs,\r\n paymentMethods: config.organizer._reePayMethods,\r\n\r\n texts: config.texts ? _.map(config.texts.text, (text) => {\r\n return {\r\n id: text._name,\r\n da: text._da,\r\n en: text._en\r\n }\r\n }) : {},\r\n\r\n ticketmaster: config.ticketmaster ? {\r\n promoterCodes: config.ticketmaster._promoterCodes,\r\n cameFrom: config.ticketmaster._cameFrom,\r\n brand: config.ticketmaster._brand\r\n } : {},\r\n\r\n googleAnalytics: config.googleAnalId ? {\r\n gtmId: config.googleAnalId._gTM,\r\n uaId: config.googleAnalId._uA\r\n } : {},\r\n\r\n cookiePolicy: config.cookiePolicy ? {\r\n title: config.cookiePolicy.title,\r\n text: config.cookiePolicy.text\r\n } : DEFAULT.cookiePolicy,\r\n\r\n posterBanners: {\r\n show3D: config.organizer._show3D,\r\n showAtmos: config.organizer._showAtmos\r\n },\r\n\r\n fees: config.fees ? {\r\n reserveTransaction: +config.fees._reserveTransactionFee.replace(',', '.'),\r\n reserveTicket: +config.fees._reserveTicketFee.replace(',', '.'),\r\n buyTransaction: +config.fees._buyTransactionFee.replace(',', '.'),\r\n buyTicket: +config.fees._buyTicketFee.replace(',', '.')\r\n } : DEFAULT.fees,\r\n\r\n newsletters: newsletters.length > 0 ? _.map(newsletters, (letter) => {\r\n return {\r\n id: letter._no,\r\n name: letter.name,\r\n enabled: letter._promptInFlow,\r\n checked: letter._status\r\n }\r\n }) : DEFAULT.newsletters,\r\n\r\n smsReminder: smsReminder ? {\r\n enabled: smsReminder._enabled,\r\n checkedByDefault: smsReminder._defaultOn\r\n } : DEFAULT.smsReminder,\r\n\r\n receiptTexts: config.receiptTexts ? {\r\n reserve: config.receiptTexts ? config.receiptTexts._reserve : DEFAULT.receiptTexts.reserve,\r\n buy: config.receiptTexts ? config.receiptTexts._buy : DEFAULT.receiptTexts.buy\r\n } : DEFAULT.receiptTexts,\r\n\r\n errorTexts: config.errorTexts ? {\r\n soldOut: config.errorTexts ? config.errorTexts._soldout : DEFAULT.errorTexts.soldOut\r\n } : DEFAULT.errorTexts,\r\n\r\n gdprTexts: config.gDPRText ? {\r\n reserve: config.gDPRText ? config.gDPRText._reserve : DEFAULT.gDPRText.reserve,\r\n buy: config.gDPRText ? config.gDPRText._buy : DEFAULT.gDPRText.buy,\r\n newsletters: config.gDPRText ? config.gDPRText._newsletter : ''\r\n } : DEFAULT.gDPRText,\r\n\r\n pageHeaders: config.listHeaders ? extractPageHeaders(config.listHeaders, organizer._name) : DEFAULT.pageHeaders,\r\n\r\n movielists: {\r\n all: config.eventlist.all ? {\r\n base: queryParams.base ? queryParams.base == \"true\" : config.eventlist.all._base,\r\n columns: queryParams.cols ? parseInt(queryParams.cols) : config.eventlist.all._columns,\r\n sort: config.eventlist.all._sort,\r\n showExpired: queryParams.showexpired == \"true\",\r\n } : DEFAULT.movielists.all,\r\n\r\n date: config.eventlist.date ? {\r\n base: queryParams.base ? queryParams.base == \"true\" : config.eventlist.date._base,\r\n columns: queryParams.cols ? parseInt(queryParams.cols) : config.eventlist.date._columns,\r\n sort: config.eventlist.date._sort,\r\n showAsWeekButtons: queryParams.datebuttons == \"true\",\r\n showExpired: queryParams.showexpired == \"true\",\r\n } : DEFAULT.movielists.date,\r\n\r\n future: config.futureeventlist.all ? {\r\n columns: queryParams.cols ? parseInt(queryParams.cols) : config.futureeventlist.all._columns\r\n } : DEFAULT.movielists.future,\r\n\r\n special: config.specialeventlist ? {\r\n enabledOnProgram: config.specialeventlist._enabled,\r\n columns: queryParams.cols ? parseInt(queryParams.cols) : config.specialeventlist.month._columns,\r\n sort: DEFAULT.movielists.special.sort\r\n } : DEFAULT.movielists.special\r\n },\r\n\r\n clubCard: config.bonus ? {\r\n name: config.bonus._bonusName,\r\n loginText: DEFAULT.pointsLoginText\r\n } : null,\r\n\r\n reservationConstraints: config.denyReservation ? extractReservationConstraints(config.denyReservation) : [],\r\n\r\n calendarText: config.programAvailableText ? config.programAvailableText._text : null,\r\n locationTexts: config.locationText ? extractLocationTexts(config.locationText.text) : null,\r\n ageCensorIcons: config.censoring ? extractCensorIcons(config.censoring.censor) : null\r\n\r\n } : DEFAULT;\r\n}\r\n\r\nfunction extractPageHeaders(headers, organizerName) {\r\n const pageHeaders = headers.header ? (Array.isArray(headers.header) ? headers.header : [headers.header]) : null;\r\n const filterId = parseInt(getParams()).filter || 0;\r\n\r\n const mapped = _.map(pageHeaders, (header) => {\r\n return {\r\n type: header._type,\r\n filter: header._eventTypeNo,\r\n text: replaceTags(header._text, organizerName, header._eventTypeNo)\r\n }\r\n });\r\n\r\n const allMovies = _.find(mapped, (header) => { return header.type == 'allmovies' && header.filter == filterId });\r\n const allFutureMovies = _.find(mapped, (header) => { return header.type == 'allfuturemovies' && header.filter == filterId });\r\n const date = _.find(mapped, (header) => { return header.type == 'date' && header.filter == filterId });\r\n const futureMovies = _.find(mapped, (header) => { return header.type == 'futuremovies' && header.filter == filterId });\r\n const movie = _.find(mapped, (header) => { return header.type == 'movieinfo' && header.filter == filterId });\r\n const orderflow = _.find(mapped, (header) => { return header.type == 'flow' && header.filter == filterId });\r\n const myTickets = _.find(mapped, (header) => { return header.type == 'tickets' && header.filter == filterId });\r\n\r\n return {\r\n allMovies: allMovies ? allMovies.text : null,\r\n allFutureMovies: allFutureMovies ? allFutureMovies.text : null,\r\n date: date ? date.text : null,\r\n futureMovies: futureMovies ? futureMovies.text : null,\r\n movie: movie ? movie.text : null,\r\n orderflow: orderflow ? orderflow.text : null,\r\n myTickets: myTickets ? myTickets.text : null\r\n }\r\n}\r\n\r\nfunction replaceTags(headerText, organizerName, filterId) {\r\n headerText = _.replace(headerText, 'ORG_NAME', organizerName);\r\n\r\n let filterText = FILTER_TEXTS[filterId] + ' ';\r\n headerText = _.replace(headerText, 'EVENT_TYPE ', filterText);\r\n\r\n return headerText;\r\n}\r\n\r\nfunction extractCreditCards(creditcards) {\r\n return _.map(creditcards, function (card) {\r\n return {\r\n name: card._name,\r\n type: card._code,\r\n image: card._path,\r\n isInternational: card._international\r\n }\r\n });\r\n}\r\n\r\nfunction extractLocales(languages) {\r\n const ids = _.split(languages, (','));\r\n return _.map(ids, (id) => {\r\n const match = _.find(AVAILABLE_LOCALES, (locale) => { return locale.id == id });\r\n if (match) return match;\r\n });\r\n}\r\n\r\nfunction extractReservationConstraints(constraints) {\r\n const test = constraints ? (Array.isArray(constraints.location) ? constraints.location : [constraints.location]) : null;\r\n return _.map(test, (deny) => {\r\n return {\r\n location: deny._name,\r\n area: deny._area,\r\n row: deny._row,\r\n seats: deny._seats\r\n }\r\n })\r\n}\r\n\r\nfunction extractLocationTexts(texts) {\r\n return _.map(texts, (text) => {\r\n return {\r\n id: text._locationNo,\r\n text: text._text\r\n }\r\n });\r\n}\r\n\r\nfunction extractCensorIcons(censors) {\r\n return _.map(censors, (censor) => {\r\n return {\r\n id: censor._censorShort.toString(),\r\n text: censor._censor,\r\n image: censor._picture\r\n }\r\n });\r\n}","import _ from 'lodash'\r\nimport { VOUCHER_TYPES } from '../api-constants';\r\n\r\nexport default function extractAvailableTicketsAndExtraPurchases(arrangement, bonusProfiles) {\r\n const availableTickets = arrangement.ticket ? ((Array.isArray(arrangement.ticket) ? arrangement.ticket : [arrangement.ticket])) : [];\r\n const voucherConstraints = arrangement.availableVouchers ? ((Array.isArray(arrangement.availableVouchers.availableVoucher) ? arrangement.availableVouchers.availableVoucher : [arrangement.availableVouchers.availableVoucher])) : [];\r\n const extraPurchases = arrangement.concessions ? ((Array.isArray(arrangement.concessions.item) ? arrangement.concessions.item : [arrangement.concessions.item])) : [];\r\n const clubExtraPurchases = arrangement.bonusVouchers ? ((Array.isArray(arrangement.bonusVouchers.item) ? arrangement.bonusVouchers.item : [arrangement.bonusVouchers.item])) : [];\r\n const clubCard = bonusProfiles ? ((Array.isArray(bonusProfiles.bonusProfile) ? bonusProfiles.bonusProfile[0] : bonusProfiles.bonusProfile)) : null;\r\n\r\n const tickets = extractAvailableTickets(availableTickets);\r\n const vouchers = extractvoucherConstraints(voucherConstraints);\r\n const bioKlubDk = { available: arrangement._bKDRedeemOnLine, image: arrangement._bKDCuponImage };\r\n return {\r\n id: arrangement._no,\r\n bioKlubDk,\r\n availableTickets: tickets,\r\n voucherConstraints: vouchers,\r\n reserveMax: arrangement._resMax,\r\n buyMax: arrangement._saleMax,\r\n extraPurchases: extractExtraPurchases(extraPurchases, clubExtraPurchases),\r\n discountEnabled: arrangement._discountCodesAvailable,\r\n discountActivated: arrangement._discountCodesActivated,\r\n clubCard: clubCard ? {\r\n id: clubCard._no,\r\n name: clubCard.name,\r\n customer: clubCard._customer,\r\n points: clubCard._points\r\n } : null\r\n };\r\n}\r\n\r\nfunction extractAvailableTickets(tickets) {\r\n tickets.sort((a, b) => {\r\n if (a._default && !b._default) return -1;\r\n else if (!a._default && b._default) return 1;\r\n else return 0;\r\n });\r\n\r\n let availableTickets = _.map(tickets, (ticket) => {\r\n return {\r\n id: ticket._no,\r\n name: ticket.name,\r\n type: 'quantity',\r\n defaultQuantity: ticket.defaultValue,\r\n price: {\r\n from: ticket.priceFrom ? parseFloat(ticket.priceFrom.replace(',', '.')) : null,\r\n to: ticket.priceTo ? parseFloat(ticket.priceTo.replace(',', '.')) : null\r\n },\r\n points: ticket.bonusPoints,\r\n canReserve: ticket._res,\r\n reserveMax: ticket.resMax,\r\n canBuy: ticket._buy,\r\n buyMax: ticket.saleMax\r\n }\r\n });\r\n\r\n return availableTickets;\r\n}\r\n\r\nfunction extractvoucherConstraints(voucherConstraints) {\r\n return _.map(voucherConstraints, (voucher) => {\r\n return {\r\n name: voucher._name,\r\n type: voucher._isBKD ? VOUCHER_TYPES.BIOKLUBDK : VOUCHER_TYPES.GIFTCARD,\r\n prefix: voucher._prefix,\r\n length: voucher._len,\r\n image: voucher._imageLink,\r\n }\r\n });\r\n}\r\n\r\nexport function extractExtraPurchases(extras, clubPurchases) {\r\n let extraPurchases = _.map(extras, (item) => {\r\n return {\r\n id: item._no,\r\n name: item.name,\r\n image: item.path,\r\n note: item.note,\r\n price: item._price,\r\n buyMax: item.saleMax,\r\n buyOnly: item._useOnlyOnDenyReservation\r\n };\r\n });\r\n\r\n if (clubPurchases.length > 0) {\r\n _.forEach(clubPurchases, (item) => {\r\n extraPurchases.push({\r\n id: item._no,\r\n name: item.name,\r\n image: item.path,\r\n note: item.note,\r\n points: item.points,\r\n buyOnly: item._useOnlyOnDenyReservation\r\n });\r\n });\r\n }\r\n return extraPurchases;\r\n}","import _ from 'lodash'\r\nimport { VOUCHER_TYPES } from '../api-constants'\r\n\r\nexport default function extractFromTransaction(transaction) {\r\n const ticketInfo = transaction.tickets;\r\n const totalTicketPrice = typeof ticketInfo._price === 'string' ? parseFloat(ticketInfo._price.replace(',', '.')) : ticketInfo._price;\r\n const { selectedTickets, totalTicketQuantity } = extractTickets(ticketInfo);\r\n\r\n const concessions = transaction.concessions;\r\n const totalExtraPurchasesPrice = typeof concessions._price === 'string' ? parseFloat(concessions._price.replace(',', '.')) : concessions._price;\r\n\r\n const seats = extractSeats(transaction.seats);\r\n const seatTexts = extractSeatTexts(transaction.seatText);\r\n const extraPurchases = extractExtraPurchases(concessions, transaction.vouchers);\r\n const prices = transaction.amounts ? extractPrices(transaction.amounts) : {};\r\n\r\n const redeemBarCodes = transaction.redeemedBarcodes;\r\n const giftCards = redeemBarCodes && redeemBarCodes.giftCards ? extractGiftCards(redeemBarCodes.giftCards) : '';\r\n const coupons = redeemBarCodes && redeemBarCodes.cupons && redeemBarCodes.cupons.item ? extractVouchers(redeemBarCodes.cupons) : '';\r\n const ifOnlyOne = giftCards ? giftCards : coupons;\r\n const vouchers = redeemBarCodes ? {\r\n active: coupons && giftCards ? _.concat(coupons, giftCards) : ifOnlyOne,\r\n errors: redeemBarCodes.errors ? Array.isArray(redeemBarCodes.errors.error) ? redeemBarCodes.errors.error : [redeemBarCodes.errors.error] : null\r\n } : { active: '', errors: '' }\r\n\r\n const showtime = transaction.showDetails ? {\r\n movieId: transaction.showDetails.movieID,\r\n showtimeId: transaction.showDetails._no,\r\n cinema: {\r\n id: transaction.showDetails.cinemaID,\r\n locationName: transaction.showDetails.auditoriumName,\r\n name: transaction.showDetails.cinemaName,\r\n address: transaction.showDetails.cinemaAddress\r\n },\r\n hasNumberedSeats: transaction.showDetails._numbered\r\n } : null;\r\n\r\n return {\r\n id: transaction._no,\r\n transactionId: transaction._refNo,\r\n organizerId: transaction._orgNo,\r\n ...showtime,\r\n\r\n tickets: selectedTickets,\r\n totalTicketQuantity,\r\n totalTicketPrice,\r\n seats,\r\n seatTexts,\r\n giftCards,\r\n extraPurchases,\r\n totalExtraPurchasesPrice,\r\n vouchers,\r\n\r\n customer: transaction.customer ? {\r\n name: transaction.customer.name,\r\n phone: transaction.customer.phone,\r\n email: transaction.customer.eMail,\r\n password: transaction.customer.password\r\n } : null,\r\n\r\n prices,\r\n\r\n pickupInfo: transaction._type === \"Reservation\" ? transaction.collect.info : '',\r\n orderId: transaction._type === \"Sale\" ? (transaction.customer.cardHolder ? transaction.customer.cardHolder.card : transaction.orderId) : 0, //if the user is logged in we put the card number as orderId for the receipt page\r\n }\r\n}\r\n\r\nfunction extractTickets(ticketInfo) {\r\n const tickets = ticketInfo && ticketInfo.ticket ? Array.isArray(ticketInfo.ticket) ? ticketInfo.ticket : [ticketInfo.ticket] : [];\r\n let totalTicketQuantity = 0;\r\n const selectedTickets = _.map(tickets, (ticket) => {\r\n totalTicketQuantity += ticket._count;\r\n\r\n return {\r\n id: ticket._ticketNo,\r\n name: ticket._name,\r\n quantity: ticket._count\r\n };\r\n })\r\n return { selectedTickets, totalTicketQuantity };\r\n}\r\n\r\nexport function extractSeatTexts(seatTexts) {\r\n let seats = seatTexts && seatTexts.line ? seatTexts.line: [];\r\n return Array.isArray(seats) ? seats : [seats];\r\n}\r\n\r\nexport function extractSeats(seatsInfo) {\r\n let seats = seatsInfo && seatsInfo.seat ? seatsInfo.seat : [];\r\n seats = Array.isArray(seats) ? seats : [seats];\r\n return _.map(seats, function (seat) {\r\n return {\r\n location: seatsInfo._location,\r\n seat: seat._name,\r\n row: seat._row,\r\n area: seat._area\r\n };\r\n })\r\n}\r\n\r\nfunction extractExtraPurchases(concessions, bonusVouchers) {\r\n const extras = concessions && concessions.item ? Array.isArray(concessions.item) ? concessions.item : [concessions.item] : [];\r\n const clubPurchases = bonusVouchers && bonusVouchers.item ? ((Array.isArray(bonusVouchers.item) ? bonusVouchers.item : [bonusVouchers.item])) : [];\r\n\r\n let extraPurchases = _.map(extras, (item) => {\r\n return {\r\n id: item._no,\r\n quantity: item._count\r\n };\r\n });\r\n\r\n if (clubPurchases.length > 0) {\r\n _.forEach(clubPurchases, (item) => {\r\n extraPurchases.push({\r\n id: item._no,\r\n points: item._points,\r\n quantity: item._count\r\n });\r\n });\r\n }\r\n\r\n return extraPurchases;\r\n}\r\n\r\nfunction extractVouchers(vouchers) {\r\n const items = vouchers && vouchers.item ? Array.isArray(vouchers.item) ? vouchers.item : [vouchers.item] : [];\r\n return _.map(items, (voucher) => {\r\n return {\r\n id: voucher._no,\r\n type: VOUCHER_TYPES.TICKETS,\r\n name: voucher._name,\r\n barCode: voucher._barCode\r\n };\r\n })\r\n}\r\n\r\nfunction extractGiftCards(giftCards) {\r\n const items = giftCards && giftCards.item ? Array.isArray(giftCards.item) ? giftCards.item : [giftCards.item] : [];\r\n return _.map(items, (gift) => {\r\n return {\r\n id: gift._no,\r\n type: VOUCHER_TYPES.GIFTCARD,\r\n name: gift._name,\r\n barCode: gift._barCode,\r\n amount: gift._redeemAmount / 100, //convert from \"ører\" til \"kroner\"\r\n remainingAmount: gift._restAmount / 100 //convert from \"ører\" til \"kroner\"\r\n };\r\n })\r\n}\r\n\r\nfunction extractPrices(amounts) {\r\n let tickets = amounts.tickets;\r\n tickets = typeof tickets === 'string' ? parseFloat(tickets.replace(',', '.')) : tickets;\r\n\r\n let extras = amounts.concessions;\r\n extras = typeof extras === 'string' ? parseFloat(extras.replace(',', '.')) : extras;\r\n \r\n let fees = amounts.fees._total;\r\n fees = typeof fees === 'string' ? parseFloat(fees.replace(',', '.')) : fees;\r\n\r\n let total = amounts._total;\r\n total = typeof total === 'string' ? parseFloat(total.replace(',', '.')) : total;\r\n\r\n return { tickets, fees, extras, total };\r\n}\r\n\r\n\r\nfunction extractVoucherErrors(errors) {\r\n return _.map(errors, (error) => {\r\n return {\r\n code: error.barcode,\r\n message: error.shortError\r\n }\r\n });\r\n}","export default {\r\n // Safari, in Private Browsing Mode, looks like it supports localStorage but all calls to setItem\r\n // throw QuotaExceededError. We're going to detect this and just silently drop any calls to setItem\r\n // to avoid the entire page breaking, without having to do a check at each usage of Storage.\r\n localStorageIsSupported: (() => {\r\n var isSupported = false;\r\n try {\r\n window.localStorage.setItem('localStorage', 1);\r\n window.localStorage.removeItem('localStorage');\r\n isSupported = true;\r\n } catch (e) {\r\n isSupported = false;\r\n }\r\n return function () { return isSupported; };\r\n })(),\r\n\r\n getItem(key) {\r\n if (this.localStorageIsSupported()) return JSON.parse(window.localStorage.getItem(key));\r\n },\r\n\r\n setItem(key, object) {\r\n if (this.localStorageIsSupported()) window.localStorage.setItem(key, JSON.stringify(object));\r\n },\r\n\r\n removeItem(key) {\r\n if (this.localStorageIsSupported()) window.localStorage.removeItem(key);\r\n }\r\n}","import fetch from 'isomorphic-fetch'\r\nimport xml2js from '../lib/xml-to-js'\r\nimport _ from 'lodash'\r\nimport orderflowApi from './orderflow-api'\r\nimport * as soapbuilder from './soap-builder'\r\nimport API_CONSTANTS from './api-constants'\r\nimport extractOrganizer from './ticketgate-extractions/organizer'\r\nimport extractAvailableTicketsAndExtraPurchases, { extractExtraPurchases } from './ticketgate-extractions/available-tickets-and-extra-purchases'\r\nimport extractFromTransaction from './ticketgate-extractions/transaction'\r\nimport { extractSeats } from './ticketgate-extractions/transaction'\r\nimport localStorageUtils from '../utilities/localstorage-utilities'\r\n\r\nfunction xmlFetch(method, url, body, callback) {\r\n return fetch(url, {\r\n method,\r\n headers: { 'Content-Type': 'text/xml;charset=UTF-8' },\r\n credentials: 'include',\r\n body\r\n }).then(response => {\r\n if (response.ok) return response.text();\r\n else throw response;\r\n }).then(xml => callback(xml))\r\n}\r\n\r\nfunction logError(method, answer) {\r\n const body = {\r\n client: {\r\n id: 1,\r\n name: 'OrderFlow.WebApp',\r\n url: window.location.href\r\n },\r\n logLevel: 'error',\r\n entry: {\r\n origin: 'TicketGate',\r\n method: method,\r\n code: answer._code,\r\n error: answer._error,\r\n message: answer._message,\r\n }\r\n }\r\n\r\n return orderflowApi.postLog(body);\r\n}\r\n\r\nconst url = API_CONSTANTS.baseUrl + API_CONSTANTS.ticketgatePath;\r\nlet cardholder = 0;\r\nlet organizerId = -1;\r\n\r\nexport function setCardholder(cardId) {\r\n cardholder = cardId;\r\n}\r\n\r\n// ORGANIZER\r\nexport function fetchOrganizer(id, siteType, customerEmail) {\r\n organizerId = id;\r\n const soap = soapbuilder.getOrganizer(organizerId, siteType, customerEmail);\r\n return xmlFetch('POST', url, soap, organizerCallback);\r\n}\r\n\r\nfunction organizerCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const organizer = json.envelope.body.getOrganizerResponse.getOrganizerResult.message.organizer;\r\n const answer = json.envelope.body.getOrganizerResponse.getOrganizerResult.message.answer;\r\n if (answer._result === true) return extractOrganizer(organizer);\r\n else {\r\n logError('organizerCallback', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// AVAILABLE TICKETS AND EXTRA PURCHASES\r\nexport function availableTicketsAndExtraPurchases(showtimeId, cardNumber, discountCode) {\r\n cardholder = cardNumber;\r\n const soap = soapbuilder.getAvailableTicketsAndConcession(organizerId, showtimeId, cardholder, discountCode);\r\n return xmlFetch('POST', url, soap, availableTicketsCallback);\r\n}\r\n\r\nfunction availableTicketsCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const arrangement = json.envelope.body.getAvailableTicketsAndConcessionResponse.getAvailableTicketsAndConcessionResult.message.arrangement;\r\n const bonusProfiles = json.envelope.body.getAvailableTicketsAndConcessionResponse.getAvailableTicketsAndConcessionResult.message.bonusProfiles;\r\n const answer = json.envelope.body.getAvailableTicketsAndConcessionResponse.getAvailableTicketsAndConcessionResult.message.answer;\r\n if (answer._result === true && answer._error == 0 && answer._code != 46) return extractAvailableTicketsAndExtraPurchases(arrangement, bonusProfiles);\r\n else {\r\n logError('AvailableTicketsAndConcessions', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };;\r\n }\r\n}\r\n\r\n// BLOCK SEATS\r\nexport function blockSeats(showtimeId, transactionId, tickets, vouchers, defaultTickets) {\r\n const ticketsXml = buildTicketsXml(showtimeId, tickets);\r\n if (defaultTickets == null) defaultTickets = 0;\r\n const soap = soapbuilder.blockSeats(transactionId, cardholder, '0.0.0.0', ticketsXml, vouchers, defaultTickets);\r\n return xmlFetch('POST', url, soap, blockSeatsCallback);\r\n}\r\n\r\nfunction buildTicketsXml(showtimeId, tickets) {\r\n let ticketsQuantity = '';\r\n tickets.forEach((ticket) => { ticketsQuantity += ''; });\r\n return soapbuilder.ticketsXml(organizerId, showtimeId, ticketsQuantity);\r\n}\r\n\r\nfunction blockSeatsCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const transaction = json.envelope.body.blockSeats_v2Response.blockSeats_v2Result.message.transaction;\r\n const answer = json.envelope.body.blockSeats_v2Response.blockSeats_v2Result.message.answer;\r\n if (answer._result === true) return extractFromTransaction(transaction);\r\n else {\r\n logError('BlockSeats_v2', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// SEATS IMAGE\r\nexport function seatsImage() {\r\n const soap = soapbuilder.seatsImage();\r\n return xmlFetch('POST', url, soap, seatsImageCallback);\r\n}\r\n\r\nfunction seatsImageCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const seatsImageResult = json.envelope.body.seatsImageResponse.seatsImageResult;\r\n if (seatsImageResult == null) logError('SeatsImage', { _message: seatsImageResult });\r\n return json.envelope.body.seatsImageResponse.seatsImageResult;\r\n}\r\n\r\n// MOVE SEATS\r\nexport function moveSeats(transactionId, x, y) {\r\n const soap = soapbuilder.moveSeats(transactionId, x, y);\r\n return xmlFetch('POST', url, soap, moveSeatsCallback);\r\n}\r\n\r\nfunction moveSeatsCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const transaction = json.envelope.body.moveSeatsResponse.moveSeatsResult.message.transaction;\r\n const answer = json.envelope.body.moveSeatsResponse.moveSeatsResult.message.answer;\r\n if (answer._result === true) return extractFromTransaction(transaction);\r\n else {\r\n logError('MoveSeats', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// GET EXTRA PURCHASES\r\nexport function getConcessions(showtimeId, cardNumber) {\r\n cardholder = cardNumber;\r\n const soap = soapbuilder.getConcessions(organizerId, showtimeId, cardholder);\r\n return xmlFetch('POST', url, soap, getConcessionsCallback);\r\n}\r\n\r\nfunction getConcessionsCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const concessions = json.envelope.body.getConcessionResponse.getConcessionResult.message.arrangement.concessions;\r\n const extraPurchases = concessions ? ((Array.isArray(concessions.item) ? concessions.item : [concessions.item])) : [];\r\n const answer = json.envelope.body.getConcessionResponse.getConcessionResult.message.answer;\r\n if (answer._result === true) return { extraPurchases: extractExtraPurchases(extraPurchases, []) };\r\n else {\r\n logError('GetConcessions', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };;\r\n }\r\n}\r\n\r\n// ADD CONCESSIONS\r\nexport function addConcessions(transactionId, showtimeId, extraPurchases) {\r\n var concessionXml = buildConcessionsXml(showtimeId, extraPurchases);\r\n var soap = soapbuilder.addConcession(transactionId, cardholder, 0, concessionXml);\r\n return xmlFetch('POST', url, soap, addConcessionsCallback);\r\n}\r\n\r\nfunction buildConcessionsXml(showtimeId, extraPurchases) {\r\n let extraPurchasesXml = '';\r\n extraPurchases.forEach((extra) => { extraPurchasesXml += ``; });\r\n return soapbuilder.concessionXml(organizerId, showtimeId, extraPurchasesXml);\r\n}\r\n\r\nfunction addConcessionsCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const transaction = json.envelope.body.addConcessionResponse.addConcessionResult.message.transaction;\r\n const answer = json.envelope.body.addConcessionResponse.addConcessionResult.message.answer;\r\n if (answer._result === true) return extractFromTransaction(transaction);\r\n else {\r\n logError('AddConcessions', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// ADD BONUS VOUCHERS\r\nexport function addVouchers(transactionId, showtimeId, extraPurchases) {\r\n const voucherXml = buildVouchersXml(showtimeId, extraPurchases);\r\n const soap = soapbuilder.addVouchers(transactionId, cardholder, voucherXml);\r\n return xmlFetch('POST', url, soap, addVouchersCallback);\r\n}\r\n\r\nfunction buildVouchersXml(showtimeId, extraPurchases) {\r\n let extraPurchasesXml = '';\r\n extraPurchases.forEach((extra) => { extraPurchasesXml += ``; });\r\n return soapbuilder.voucherXml(organizerId, showtimeId, extraPurchasesXml);\r\n}\r\n\r\nfunction addVouchersCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const transaction = json.envelope.body.addVoucherResponse.addVoucherResult.message.transaction;\r\n const answer = json.envelope.body.addVoucherResponse.addVoucherResult.message.answer;\r\n if (answer._result === true) return extractFromTransaction(transaction);\r\n else {\r\n logError('AddVouchers', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// RESERVE\r\nexport function reserve(transactionId, phone, name, password, email, newsletters, smsReminder, zipCode, note) {\r\n const soap = soapbuilder.reserve(transactionId, '', phone, name, password, email, '0.0.0.0', 0, newsletters, smsReminder, zipCode, note);\r\n return xmlFetch('POST', url, soap, reserveCallback);\r\n}\r\n\r\nfunction reserveCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const answer = json.envelope.body.reserveResponse.reserveResult.message.answer;\r\n const transaction = json.envelope.body.reserveResponse.reserveResult.message.transaction;\r\n if (answer._result === true) return extractFromTransaction(transaction);\r\n else {\r\n logError('Reserve', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// PRE BOOK\r\nexport function preBook(transactionId, phone, name, password, email, creditCardCode) {\r\n const soap = soapbuilder.preBook(transactionId, '', phone, name, password, email, cardholder, creditCardCode, 0);\r\n return xmlFetch('POST', url, soap, preBookCallback);\r\n}\r\n\r\nfunction preBookCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const message = json.envelope.body.preBookResponse.preBookResult.message;\r\n const answer = message.answer;\r\n const dibs = message.dibs;\r\n if (answer._result === true) {\r\n const seats = extractSeats(message.transaction.seats);\r\n return { dibs, seats };\r\n }\r\n else {\r\n logError('PreBook', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// BOOK\r\nexport function book(transactionId, phone, name, password, email, reference, orderId, amount, newsletters, paytype, zipCode, note) {\r\n const soap = soapbuilder.book(transactionId, '', phone, name, password, email, cardholder, reference, orderId, amount, '0.0.0.0', 0, newsletters, zipCode, note);\r\n return xmlFetch('POST', url + '?paytype=' + paytype, soap, bookCallback);\r\n}\r\n\r\nfunction bookCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const answer = json.envelope.body.bookResponse.bookResult.message.answer;\r\n const transaction = json.envelope.body.bookResponse.bookResult.message.transaction;\r\n if (answer._result === true) return extractFromTransaction(transaction);\r\n else {\r\n logError('Book', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// CANCEL RESERVATION\r\nexport function cancelReservation(reservationId, phone, password) {\r\n const soap = soapbuilder.cancelReservation(reservationId, '', phone, password, '0.0.0.0', 0);\r\n return xmlFetch('POST', url, soap, cancelReservationCallback);\r\n}\r\n\r\nfunction cancelReservationCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const answer = json.envelope.body.cancelReservationResponse.cancelReservationResult.message.answer;\r\n if (answer._result === true) return answer._result;\r\n else {\r\n logError('CancelReservation', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// ACTIVATE RESERVATION\r\nexport function activateReservation(reservationId) {\r\n const soap = soapbuilder.activateReservation(reservationId);\r\n return xmlFetch('POST', url, soap, activateReservationCallback);\r\n}\r\n\r\nfunction activateReservationCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const transaction = json.envelope.body.activateReservationResponse.activateReservationResult.message.transaction;\r\n const answer = json.envelope.body.activateReservationResponse.activateReservationResult.message.answer;\r\n if (answer._result === true) return extractFromTransaction(transaction);\r\n else {\r\n logError('ActivateReservation', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// GET RESERVATION\r\nexport function getReservation(reservationId) {\r\n const soap = soapbuilder.getReservation(reservationId);\r\n return xmlFetch('POST', url, soap, getReservationCallback);\r\n}\r\n\r\nfunction getReservationCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const transaction = json.envelope.body.getReservationInfoResponse.getReservationInfoResult.message.transaction;\r\n const answer = json.envelope.body.getReservationInfoResponse.getReservationInfoResult.message.answer;\r\n if (answer._result === true) return extractFromTransaction(transaction);\r\n else {\r\n logError('getReservation', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error,\r\n message: answer._message\r\n };\r\n }\r\n}\r\n\r\n// CANCEL TRANSACTION\r\nexport function cancelTransaction(transactionId) {\r\n const soap = soapbuilder.cancelTransaction(transactionId);\r\n return xmlFetch('POST', url, soap, cancelTransactionCallback);\r\n}\r\n\r\nfunction cancelTransactionCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const answer = json.envelope.body.cancelTransactionResponse.cancelTransactionResult.message.answer;\r\n if (answer._result === true) return answer._result;\r\n else {\r\n logError('CancelTransaction', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}\r\n\r\n// GET USER\r\nexport function getUser(email, password) {\r\n const soap = soapbuilder.getUser(email, password);\r\n return xmlFetch('POST', url, soap, getUserCallback);\r\n}\r\n\r\nfunction getUserCallback(xml) {\r\n const json = xml2js.parseString(xml);\r\n const user = json.envelope.body.getUserResponse.getUserResult.message.user;\r\n const answer = json.envelope.body.getUserResponse.getUserResult.message.answer;\r\n if (answer._result === true) {\r\n const cookie = localStorageUtils.getItem('customer');\r\n\r\n return {\r\n clubCardId: user._no,\r\n customer: {\r\n name: user.firstName + ' ' + user.lastName,\r\n phone: user.phone ? user.phone : '',\r\n email: user.email,\r\n repeatEmail: user.email\r\n },\r\n creditCard: cookie ? cookie.credtCard : null\r\n }\r\n }\r\n else {\r\n logError('GetUser', answer);\r\n throw {\r\n code: answer._code,\r\n type: answer._error\r\n };\r\n }\r\n}","import _ from 'lodash'\r\nimport { getFutureMovies, getMovieList } from './movielist-actions'\r\nimport { fetchOrganizer } from '../api/ticketgate-api'\r\n\r\nexport default {\r\n getOrganizer,\r\n getMultiOrgFutureMovies\r\n}\r\n\r\nexport const FETCH_ORGANIZER_REQUEST = 'FETCH_ORGANIZER_REQUEST'\r\nexport const FETCH_ORGANIZER_SUCCESS = 'FETCH_ORGANIZER_SUCCESS'\r\nexport const FETCH_ORGANIZER_FAILED = 'FETCH_ORGANIZER_FAILED'\r\n\r\nexport function getOrganizer(organizerIds, siteType, customerEmail) {\r\n const isMultipleOrgs = _.includes(organizerIds, ',');\r\n const id = isMultipleOrgs ? _.split(organizerIds, ',')[0] : organizerIds;\r\n\r\n return dispatch => {\r\n dispatch({\r\n type: FETCH_ORGANIZER_REQUEST,\r\n requestedAt: Date.now(),\r\n id\r\n });\r\n\r\n return fetchOrganizer(id, siteType, customerEmail).then(\r\n response => dispatch({\r\n type: FETCH_ORGANIZER_SUCCESS,\r\n succeededAt: Date.now(),\r\n id: response.id,\r\n multibioIds: organizerIds,\r\n name: response.name,\r\n futureTemplateId: response.futureTemplateId,\r\n configuration: response.configuration,\r\n creditcards: response.creditcards\r\n }), error => dispatch({\r\n type: FETCH_ORGANIZER_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n })\r\n );\r\n }\r\n}\r\n\r\nexport function getMultiOrgFutureMovies(organizerIds) {\r\n return dispatch => {\r\n const orgIds = _.split(organizerIds, ',');\r\n const promises = [];\r\n _.forEach(orgIds, (id) => {\r\n promises.push(new Promise((resolve, reject) => {\r\n resolve(fetchOrganizer(id));\r\n }));\r\n });\r\n\r\n Promise.all(promises).then(result => {\r\n let templateIds;\r\n _.forEach(result, (organizer) => {\r\n templateIds ? templateIds += ',' + organizer.futureTemplateId : templateIds = organizer.futureTemplateId;\r\n });\r\n return dispatch(getFutureMovies(templateIds, organizerIds));\r\n });\r\n }\r\n}","export default {\r\n timeout: 3000,\r\n ticketType: {\r\n quantity: 'quantity',\r\n voucher: 'voucher'\r\n },\r\n\r\n pages: {\r\n order: 'order',\r\n customer: 'customer',\r\n dibs: 'dibs',\r\n receipt: 'receipt'\r\n },\r\n\r\n orderTypes: {\r\n reserve: 'reserve',\r\n buy: 'buy',\r\n buyReservation: 'buyReservation'\r\n } \r\n}","import _ from 'lodash'\r\nimport * as ticketgate from '../api/ticketgate-api'\r\nimport CONSTANTS from '../components/orderflow/orderflow-constants'\r\nimport { ROUTES } from '../components/navigation/route-constants'\r\n\r\nexport const START_ORDER = ' START_ORDER';\r\nexport const INITIAL_FETCH_DONE = 'INITIAL_FETCH_DONE'\r\nexport function startOrder(showtimeId, clubCardId = 0) {\r\n return (dispatch, getState) => {\r\n return dispatch(getAvailableTicketsAndExtraPurchases(showtimeId, clubCardId, ''))\r\n .then(() => {\r\n return dispatch(blockSeats(showtimeId, 0, [], '', getState().organizer.configuration.defaultTickets))\r\n // call next then if no error from blockseats, otherwise if gets overridden and not shown in ui....\r\n .then((result) => !result.error ? dispatch(fetchSeatsImage()) : result)\r\n .then((result) => !result.error ? dispatch({ type: INITIAL_FETCH_DONE }) : result)\r\n });\r\n }\r\n}\r\n\r\n// AVAILABLE TICKETS AND EXTRA PURCHASES\r\nexport const AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_REQUEST = 'AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_REQUEST'\r\nexport const AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_SUCCESS = 'AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_SUCCESS'\r\nexport const AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_FAILED = 'AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_FAILED'\r\n\r\nexport function getAvailableTicketsAndExtraPurchases(showtimeId, clubCardId = 0, discountCode = '') {\r\n return (dispatch) => {\r\n dispatch({\r\n type: AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_REQUEST,\r\n requestedAt: Date.now(),\r\n });\r\n\r\n return ticketgate.availableTicketsAndExtraPurchases(showtimeId, clubCardId, discountCode).then(\r\n response => dispatch({\r\n type: AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_SUCCESS,\r\n succeededAt: Date.now(),\r\n availableTickets: response.availableTickets,\r\n reserveMax: response.reserveMax,\r\n buyMax: response.buyMax,\r\n bioKlubDk: response.bioKlubDk,\r\n extraPurchases: response.extraPurchases,\r\n clubCard: response.clubCard,\r\n discountEnabled: response.discountEnabled,\r\n discountActivated: response.discountActivated,\r\n voucherConstraints: response.voucherConstraints\r\n }),\r\n error => dispatch({\r\n type: AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n })\r\n );\r\n }\r\n}\r\n\r\n// BLOCK SEATS\r\nexport const BLOCK_SEATS_REQUEST = 'BLOCK_SEATS_REQUEST'\r\nexport const BLOCK_SEATS_SUCCESS = 'BLOCK_SEATS_SUCCESS'\r\nexport const BLOCK_SEATS_FAILED = 'BLOCK_SEATS_FAILED'\r\n\r\nexport function blockSeats(showtimeId, transactionId, tickets, vouchers, defaultTickets) {\r\n return (dispatch, getState) => {\r\n dispatch(blockSeatsRequest());\r\n\r\n return ticketgate.blockSeats(showtimeId, transactionId, tickets, vouchers, defaultTickets)\r\n .then(response => {\r\n const canReserve = checkReserveConstraints(getState().organizer.configuration.reservationConstraints, response.seats);\r\n dispatch(blockSeatsSuccess(response, canReserve));\r\n return dispatch(calculateTotalPrice());\r\n }, error => {\r\n if (defaultTickets == 2 && error.code == 17 && error.type != 10001)\r\n return dispatch(blockSeats(showtimeId, transactionId, tickets, vouchers, 1));\r\n else if (defaultTickets == 1 && error.code == 17 && error.type == 68) {\r\n error.message = getState().organizer.configuration.errorTexts.soldOut;\r\n return dispatch(blockSeatsFailed(error));\r\n } else return dispatch(blockSeatsFailed(error));\r\n });\r\n }\r\n}\r\n\r\nconst blockSeatsRequest = () => {\r\n return {\r\n type: BLOCK_SEATS_REQUEST,\r\n requestedAt: Date.now(),\r\n }\r\n}\r\n\r\nexport const blockSeatsSuccess = (selected, canReserve) => {\r\n return {\r\n type: BLOCK_SEATS_SUCCESS,\r\n succeededAt: Date.now(),\r\n transactionId: selected.transactionId,\r\n tickets: selected.tickets,\r\n totalTicketQuantity: selected.totalTicketQuantity,\r\n totalTicketPrice: selected.totalTicketPrice,\r\n location: selected.location,\r\n seats: selected.seats,\r\n seatTexts: selected.seatTexts,\r\n vouchers: selected.vouchers,\r\n giftCardAmount: _.sumBy(selected.vouchers.active, 'amount'),\r\n totalFees: selected.totalFees || 0,\r\n canReserve\r\n }\r\n}\r\n\r\nfunction checkReserveConstraints(constraints, seats) {\r\n let canReserve = true;\r\n if (constraints.length > 0) {\r\n _.forEach(seats, function (seat) {\r\n _.forEach(constraints, (constraint) => {\r\n const location = constraint.location;\r\n const area = constraint.area;\r\n const row = constraint.row;\r\n const splittedSeats = _.split(constraint.seats, ',');\r\n const containsSeats = _.some(splittedSeats, (splitted) => {\r\n return splitted == seat.seat\r\n });\r\n\r\n if ((location == null || location.toUpperCase() == seat.location.toUpperCase()) &&\r\n (area == null || area == seat.area) &&\r\n (row == null || row == seat.row) &&\r\n (constraint.seats == null || containsSeats)) {\r\n canReserve = false;\r\n return false;\r\n }\r\n });\r\n });\r\n }\r\n return canReserve;\r\n}\r\n\r\nconst blockSeatsFailed = (error) => {\r\n return {\r\n type: BLOCK_SEATS_FAILED,\r\n failedAt: Date.now(),\r\n error,\r\n }\r\n}\r\n\r\n// SEAT SELECTION IMAGE\r\nexport const SEATS_IMAGE_REQUEST = 'SEATS_IMAGE_REQUEST'\r\nexport const SEATS_IMAGE_SUCCESS = 'SEATS_IMAGE_SUCCESS'\r\nexport const SEATS_IMAGE_FAILED = 'SEATS_IMAGE_FAILED'\r\n\r\nexport function fetchSeatsImage() {\r\n return dispatch => {\r\n dispatch({\r\n type: SEATS_IMAGE_REQUEST,\r\n requestedAt: Date.now(),\r\n });\r\n\r\n return ticketgate.seatsImage().then(\r\n response => dispatch({\r\n type: SEATS_IMAGE_SUCCESS,\r\n succeededAt: Date.now(),\r\n seatsImage: response ? 'data:image/gif;base64,' + response : ''\r\n }),\r\n error => dispatch({\r\n type: SEATS_IMAGE_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n }));\r\n }\r\n}\r\n\r\n// MOVE SEATS\r\nexport const MOVE_SEATS_REQUEST = 'MOVE_SEATS_REQUEST'\r\nexport const MOVE_SEATS_SUCCESS = 'MOVE_SEATS_SUCCESS'\r\nexport const MOVE_SEATS_FAILED = 'MOVE_SEATS_FAILED'\r\n\r\nexport function moveSeats(transactionId, x, y) {\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: MOVE_SEATS_REQUEST,\r\n requestedAt: Date.now(),\r\n });\r\n\r\n return ticketgate.moveSeats(transactionId, x, y).then(\r\n response => {\r\n const couldReserve = getState().order.canReserve;\r\n const canReserve = checkReserveConstraints(getState().organizer.configuration.reservationConstraints, response.seats);\r\n let showInfoBox = false;\r\n if (couldReserve && !canReserve && response.extraPurchases.length > 0 || !couldReserve && canReserve && response.extraPurchases.length > 0) {\r\n showInfoBox = true; //info boks til kunden at tilkøb er blevet nulstillet\r\n dispatch(addExtraPurchase(response.transactionId, response.showtimeId, []));\r\n }\r\n\r\n dispatch({\r\n type: MOVE_SEATS_SUCCESS,\r\n succeededAt: Date.now(),\r\n seats: response.seats,\r\n seatTexts: response.seatTexts,\r\n tickets: response.tickets,\r\n totalTicketPrice: response.totalTicketPrice,\r\n transactionId: response.transactionId,\r\n canReserve,\r\n showInfoBox\r\n });\r\n\r\n return dispatch(calculateTotalPrice());\r\n },\r\n error => dispatch({\r\n type: MOVE_SEATS_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n })).then(() => dispatch(fetchSeatsImage()));\r\n };\r\n}\r\n\r\n// GET EXTRA PURCHASES\r\nexport const GET_EXTRA_PURCHASES_REQUEST = 'GET_EXTRA_PURCHASES_REQUEST'\r\nexport const GET_EXTRA_PURCHASES_SUCCESS = 'GET_EXTRA_PURCHASES_SUCCESS'\r\nexport const GET_EXTRA_PURCHASES_FAILED = 'GET_EXTRA_PURCHASES_FAILED'\r\n\r\nexport function getExtraPurchases(showtimeId, clubCardId = 0) {\r\n return (dispatch) => {\r\n dispatch({ type: GET_EXTRA_PURCHASES_REQUEST, requestedAt: Date.now() });\r\n\r\n return ticketgate.getConcessions(showtimeId, clubCardId).then(\r\n response => dispatch({\r\n type: GET_EXTRA_PURCHASES_SUCCESS,\r\n succeededAt: Date.now(),\r\n extraPurchases: response.extraPurchases\r\n }),\r\n error => dispatch({\r\n type: GET_EXTRA_PURCHASES_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n })\r\n );\r\n }\r\n}\r\n\r\n// ADD EXTRA PURCHASE\r\nexport const ADD_EXTRA_PURCHASE_REQUEST = 'ADD_EXTRA_PURCHASE_REQUEST'\r\nexport const ADD_EXTRA_PURCHASE_SUCCESS = 'ADD_EXTRA_PURCHASE_SUCCESS'\r\nexport const ADD_EXTRA_PURCHASE_FAILED = 'ADD_EXTRA_PURCHASE_FAILED'\r\n\r\nexport function addExtraPurchase(transactionId, showtimeId, extraPurchases) {\r\n return (dispatch, getState) => {\r\n const priced = [];\r\n const points = [];\r\n _.each(extraPurchases, (extra) => {\r\n if (extra.points != null) points.push(extra);\r\n else priced.push(extra);\r\n });\r\n\r\n if (getState().order.clubCard) {\r\n dispatch(extraPurchaseRequest());\r\n ticketgate.addVouchers(transactionId, showtimeId, points)\r\n .then(response => dispatch(extraPurchaseSuccess(response)), error => dispatch(extraPurchaseFailed(error)))\r\n .then(() => dispatch(calculatePoints()));\r\n }\r\n\r\n dispatch(extraPurchaseRequest());\r\n return ticketgate.addConcessions(transactionId, showtimeId, priced)\r\n .then(response => {\r\n dispatch(extraPurchaseSuccess(response))\r\n return dispatch(calculateTotalPrice())\r\n }, error => dispatch(extraPurchaseFailed(error)));\r\n }\r\n}\r\n\r\nconst extraPurchaseRequest = () => {\r\n return { type: ADD_EXTRA_PURCHASE_REQUEST, requestedAt: Date.now() };\r\n}\r\n\r\nconst extraPurchaseSuccess = (response) => {\r\n return {\r\n type: ADD_EXTRA_PURCHASE_SUCCESS,\r\n succeededAt: Date.now(),\r\n transactionId: response.transactionId,\r\n extraPurchases: response.extraPurchases,\r\n totalExtraPurchasesPrice: response.totalExtraPurchasesPrice,\r\n seats: response.seats\r\n }\r\n}\r\n\r\nconst extraPurchaseFailed = (error) => {\r\n return {\r\n\r\n type: ADD_EXTRA_PURCHASE_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n }\r\n};\r\n\r\n//HANDLERS\r\nexport const TOTAL_PRICE_CHANGED = 'TOTAL_PRICE_CHANGED'\r\nexport function calculateTotalPrice() {\r\n return (dispatch, getState) => {\r\n const { receipt, order, organizer } = getState();\r\n const currentPage = window.location.pathname;\r\n const isTicketsPage = _.startsWith(currentPage, ROUTES.ORDERFLOW.TICKETS);\r\n const showReceiptData = receipt.transactionId != 0 && (_.startsWith(currentPage, ROUTES.ORDERFLOW.RECEIPT) || _.startsWith(currentPage, ROUTES.ORDERFLOW.RESERVATION));\r\n const ticketPrice = showReceiptData ? receipt.prices.tickets : order.selected.totalTicketPrice;\r\n\r\n const extraPurchasesActive = !order.canReserve || _.some(order.availableExtraPurchases, (extra) => { return extra.buyOnly === false });\r\n const includeExtras = !isTicketsPage && order.orderType !== CONSTANTS.orderTypes.reserve && extraPurchasesActive;\r\n const extraPurchasePrice = includeExtras ? (showReceiptData ? receipt.prices.extras : order.selected.totalExtraPurchasesPrice) : 0;\r\n\r\n const priceBeforeFees = ticketPrice + extraPurchasePrice;\r\n const totalFees = !isTicketsPage && priceBeforeFees > 0 ? (showReceiptData ? receipt.prices.fees : order.selected.totalFees) : 0;\r\n\r\n const giftCardAmount = order.selected.giftCardAmount;\r\n let totalPrice = giftCardAmount ? priceBeforeFees + totalFees - giftCardAmount : priceBeforeFees + totalFees;\r\n\r\n return dispatch({ type: TOTAL_PRICE_CHANGED, totalPrice });\r\n }\r\n}\r\n\r\nexport const CALCULATE_POINTS = 'CALCULATE_POINTS'\r\nexport function calculatePoints() {\r\n return (dispatch, getState) => {\r\n const { order } = getState();\r\n const available = _.concat(order.availableExtraPurchases, order.availableTickets);\r\n const selected = _.concat(order.selected.extraPurchases, order.selected.tickets);\r\n\r\n let usedPoints = 0;\r\n _.forEach(selected, (item) => {\r\n const existing = _.find(available, (available) => { return available.id == item.id });\r\n if (existing && existing.points) usedPoints += (existing.points * item.quantity);\r\n });\r\n\r\n return dispatch({\r\n type: CALCULATE_POINTS,\r\n usedPoints,\r\n remainingPoints: order.clubCard ? order.clubCard.points - usedPoints : 0\r\n })\r\n };\r\n}\r\n\r\nexport const RESET_ORDER = 'RESET_ORDER';\r\nexport function resetOrder() {\r\n return (dispatch, getState) => {\r\n ticketgate.cancelTransaction(getState().order.selected.transactionId);\r\n return dispatch({ type: RESET_ORDER });\r\n }\r\n}\r\n\r\nexport const ORDER_TYPE_CHANGED = 'ORDER_TYPE_CHANGED';\r\nexport const orderTypeChanged = (newType) => {\r\n return (dispatch, getState) => {\r\n const fees = getState().organizer.configuration.fees;\r\n const selected = getState().order.selected;\r\n const totalFees = selected.totalTicketPrice > 0 ? calculateFees(fees, selected.tickets, newType) : 0;\r\n\r\n return dispatch({\r\n type: ORDER_TYPE_CHANGED,\r\n orderType: newType,\r\n totalFees\r\n });\r\n }\r\n}\r\n\r\nexport function ticketQuantityChanged(showtimeId, transactionId, tickets, vouchers) {\r\n return (dispatch, getState) => {\r\n dispatch(blockSeatsRequest());\r\n let activeVouchers = '';\r\n _.map(vouchers.active, (voucher) => { return activeVouchers += voucher.barCode + ','; });\r\n return ticketgate.blockSeats(showtimeId, transactionId, tickets, activeVouchers, 0)\r\n .then(selected => {\r\n const canReserve = checkReserveConstraints(getState().organizer.configuration.reservationConstraints, selected.seats);\r\n dispatch(blockSeatsSuccess(selected, canReserve));\r\n dispatch(fetchSeatsImage());\r\n if (getState().order.clubCard) dispatch(calculatePoints());\r\n return dispatch(calculateTotalPrice());\r\n }, error => dispatch(blockSeatsFailed(error)));\r\n };\r\n}\r\n\r\nexport function vouchersChanged(vouchers) {\r\n return (dispatch, getState) => {\r\n dispatch(blockSeatsRequest());\r\n\r\n const { transactionId, tickets } = getState().order.selected;\r\n const showtime = getState().movielist.selectedShowtime;\r\n const fees = getState().organizer.configuration.fees;\r\n return ticketgate.blockSeats(showtime.id, transactionId, tickets, vouchers, 0)\r\n .then(selected => {\r\n selected.totalFees = calculateFees(fees, tickets, CONSTANTS.orderTypes.buy);\r\n const canReserve = checkReserveConstraints(getState().organizer.configuration.reservationConstraints, selected.seats);\r\n dispatch(blockSeatsSuccess(selected, canReserve));\r\n return dispatch(calculateTotalPrice());\r\n }, error => dispatch(blockSeatsFailed(error)));\r\n };\r\n}\r\n\r\nfunction calculateFees(fees, tickets, orderType) {\r\n let ticketFee = 0;\r\n _.forEach(tickets, (ticket) => {\r\n if (orderType === CONSTANTS.orderTypes.reserve)\r\n ticketFee += ticket.quantity * fees.reserveTicket;\r\n else if (orderType === CONSTANTS.orderTypes.buy || orderType === CONSTANTS.orderTypes.buyReservation)\r\n ticketFee += ticket.quantity * fees.buyTicket;\r\n });\r\n\r\n const transactionFee = orderType === CONSTANTS.orderTypes.reserve ? fees.reserveTransaction : fees.buyTransaction;\r\n return ticketFee + transactionFee;\r\n}","import _ from 'lodash'\r\nimport {\r\n AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_REQUEST,\r\n AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_SUCCESS,\r\n AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_FAILED,\r\n BLOCK_SEATS_REQUEST,\r\n BLOCK_SEATS_SUCCESS,\r\n BLOCK_SEATS_FAILED,\r\n CALCULATE_POINTS,\r\n SEATS_IMAGE_REQUEST,\r\n SEATS_IMAGE_SUCCESS,\r\n SEATS_IMAGE_FAILED,\r\n MOVE_SEATS_REQUEST,\r\n MOVE_SEATS_SUCCESS,\r\n MOVE_SEATS_FAILED,\r\n GET_EXTRA_PURCHASES_REQUEST,\r\n GET_EXTRA_PURCHASES_SUCCESS,\r\n GET_EXTRA_PURCHASES_FAILED,\r\n ADD_EXTRA_PURCHASE_REQUEST,\r\n ADD_EXTRA_PURCHASE_SUCCESS,\r\n ADD_EXTRA_PURCHASE_FAILED,\r\n ORDER_TYPE_CHANGED,\r\n RESET_ORDER,\r\n INITIAL_FETCH_DONE,\r\n TOTAL_PRICE_CHANGED\r\n} from '../actions/order-actions'\r\n\r\nconst initialState = {\r\n isFetching: false,\r\n orderType: '',\r\n availableTickets: [],\r\n availableExtraPurchases: [],\r\n bioKlubDk: { available: false },\r\n discountEnabled: false,\r\n discountActivated: false,\r\n clubCard: null,\r\n seatsImage: '',\r\n selected: {\r\n transactionId: 0,\r\n tickets: [],\r\n totalTicketPrice: 0,\r\n location: '',\r\n seats: [],\r\n seatTexts: [],\r\n vouchers: { active: '', error: '' },\r\n giftCardAmount: 0,\r\n extraPurchases: [],\r\n totalExtraPurchasesPrice: 0,\r\n totalFees: 0,\r\n totalPoints: null,\r\n quantity: 0\r\n },\r\n voucherConstraints: [],\r\n totalPrice: 0,\r\n canReserve: true,\r\n error: null,\r\n initialFetchDone: false,\r\n showInfoBox: false\r\n}\r\n\r\nexport default function order(\r\n state = initialState, action) {\r\n switch (action.type) {\r\n case AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.succeededAt,\r\n availableTickets: action.availableTickets,\r\n reserveMax: action.reserveMax,\r\n buyMax: action.buyMax,\r\n bioKlubDk: action.bioKlubDk,\r\n availableExtraPurchases: action.extraPurchases,\r\n clubCard: action.clubCard,\r\n discountEnabled: action.discountEnabled,\r\n discountActivated: action.discountActivated,\r\n voucherConstraints: action.voucherConstraints,\r\n error: null\r\n }\r\n case AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case BLOCK_SEATS_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case BLOCK_SEATS_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.suceededAt,\r\n selected: {\r\n ...state.selected,\r\n transactionId: action.transactionId,\r\n tickets: action.tickets,\r\n totalTicketQuantity: action.totalTicketQuantity,\r\n totalTicketPrice: action.totalTicketPrice,\r\n location: action.location,\r\n seats: action.seats,\r\n seatTexts: action.seatTexts,\r\n vouchers: action.vouchers,\r\n totalFees: action.totalFees,\r\n giftCardAmount: action.giftCardAmount\r\n },\r\n canReserve: action.canReserve,\r\n error: null,\r\n isInitialRequest: action.initialRequest\r\n }\r\n case BLOCK_SEATS_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case INITIAL_FETCH_DONE:\r\n return {\r\n ...state,\r\n initialFetchDone: true,\r\n isFetching: false,\r\n }\r\n case CALCULATE_POINTS:\r\n return {\r\n ...state,\r\n clubCard: {\r\n ...state.clubCard,\r\n remainingPoints: action.remainingPoints\r\n },\r\n selected: {\r\n ...state.selected,\r\n clubCardPoints: action.usedPoints\r\n }\r\n }\r\n case SEATS_IMAGE_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case SEATS_IMAGE_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.suceededAt,\r\n seatsImage: action.seatsImage,\r\n error: null\r\n }\r\n case SEATS_IMAGE_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case MOVE_SEATS_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case MOVE_SEATS_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.suceededAt,\r\n selected: {\r\n ...state.selected,\r\n tickets: action.tickets,\r\n totalTicketPrice: action.totalTicketPrice,\r\n seats: action.seats,\r\n seatTexts: action.seatTexts,\r\n transactionId: action.transactionId,\r\n },\r\n canReserve: action.canReserve,\r\n showInfoBox: action.showInfoBox,\r\n error: null\r\n }\r\n case MOVE_SEATS_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case GET_EXTRA_PURCHASES_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case GET_EXTRA_PURCHASES_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.succeededAt,\r\n availableExtraPurchases: action.extraPurchases,\r\n error: null\r\n }\r\n case GET_EXTRA_PURCHASES_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case ADD_EXTRA_PURCHASE_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n dataWasUpdated: false,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case ADD_EXTRA_PURCHASE_SUCCESS:\r\n const dataWasUpdated = !seatsAreEqual(state.selected.seats, action.seats);\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.suceededAt,\r\n selected: {\r\n ...state.selected,\r\n transactionId: action.transactionId,\r\n extraPurchases: action.extraPurchases,\r\n totalExtraPurchasesPrice: action.totalExtraPurchasesPrice\r\n },\r\n error: dataWasUpdated ? {\r\n ...state.error,\r\n code: 16 //Simulating error response for problem with multiple sessions in ticketgate\r\n } : null\r\n }\r\n case ADD_EXTRA_PURCHASE_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case ORDER_TYPE_CHANGED:\r\n return {\r\n ...state,\r\n orderType: action.orderType,\r\n selected: {\r\n ...state.selected,\r\n totalFees: action.totalFees\r\n }\r\n }\r\n case RESET_ORDER:\r\n return initialState;\r\n case TOTAL_PRICE_CHANGED:\r\n return {\r\n ...state,\r\n totalPrice: action.totalPrice\r\n }\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nfunction seatsAreEqual(currentSeats, newSeats) {\r\n let areEqualSeats = false;\r\n _.forEach(currentSeats, (current) => {\r\n _.forEach(newSeats, (newSeat) => {\r\n areEqualSeats = _.isEqual(current, newSeat);\r\n });\r\n });\r\n return areEqualSeats;\r\n}","import * as ticketgate from '../api/ticketgate-api'\r\nimport { blockSeatsSuccess } from './order-actions'\r\n\r\nexport const RECEIPT_RESET = 'RECEIPT_RESET'\r\nexport const receiptReset = () => {\r\n return {\r\n type: RECEIPT_RESET\r\n }\r\n}\r\n\r\nexport const RECEIPT_SUCCESS = 'RECEIPT_SUCCESS'\r\nexport const receiptSuccess = (receipt) => {\r\n return {\r\n type: RECEIPT_SUCCESS,\r\n suceededAt: Date.now(),\r\n receipt\r\n }\r\n}\r\n\r\nexport const DELETE_RESERVATION_REQUEST = 'DELETE_RESERVATION_REQUEST'\r\nexport const DELETE_RESERVATION_SUCCESS = 'DELETE_RESERVATION_SUCCESS'\r\nexport const DELETE_RESERVATION_FAILED = 'DELETE_RESERVATION_FAILED'\r\n\r\nexport function deleteReservation(reservationId, phone, password) {\r\n return dispatch => {\r\n dispatch(deleteReservationRequest());\r\n return ticketgate.cancelReservation(reservationId, phone, password)\r\n .then(result => dispatch(deleteReservationSuccess(result)), error => dispatch(deleteReservationFailed(error)));\r\n };\r\n}\r\n\r\nconst deleteReservationRequest = () => {\r\n return {\r\n type: DELETE_RESERVATION_REQUEST,\r\n requestedAt: Date.now()\r\n }\r\n}\r\n\r\nconst deleteReservationSuccess = (result) => {\r\n return {\r\n type: DELETE_RESERVATION_SUCCESS,\r\n suceededAt: Date.now(),\r\n result\r\n }\r\n}\r\n\r\nconst deleteReservationFailed = (error) => {\r\n return {\r\n type: DELETE_RESERVATION_FAILED,\r\n failedAt: Date.now(),\r\n error: {\r\n ...error,\r\n message: 'Din reservation kunne ikke slettes.'\r\n }\r\n }\r\n}\r\n\r\nexport const ACTIVATE_RESERVATION_REQUEST = 'ACTIVATE_RESERVATION_REQUEST'\r\nexport const ACTIVATE_RESERVATION_SUCCESS = 'ACTIVATE_RESERVATION_SUCCESS'\r\nexport const ACTIVATE_RESERVATION_FAILED = 'ACTIVATE_RESERVATION_FAILED'\r\n\r\nexport function activateReservation(reservationId) {\r\n return dispatch => {\r\n dispatch(activateReservationRequest());\r\n return ticketgate.activateReservation(reservationId).then(receipt => {\r\n dispatch(activateReservationSuccess(receipt));\r\n dispatch(blockSeatsSuccess(receipt));\r\n receipt.id = reservationId;\r\n return dispatch(receiptSuccess(receipt));\r\n }, error => dispatch(activateReservationFailed(error)));\r\n };\r\n}\r\n\r\nconst activateReservationRequest = () => {\r\n return {\r\n type: ACTIVATE_RESERVATION_REQUEST,\r\n requestedAt: Date.now()\r\n }\r\n}\r\n\r\nconst activateReservationSuccess = (transaction) => {\r\n return {\r\n type: ACTIVATE_RESERVATION_SUCCESS,\r\n suceededAt: Date.now(),\r\n transaction\r\n }\r\n}\r\n\r\nconst activateReservationFailed = (error) => {\r\n return {\r\n type: ACTIVATE_RESERVATION_FAILED,\r\n failedAt: Date.now(),\r\n error: {\r\n ...error,\r\n message: 'Det er ikke muligt at aktivere reservationen, da den er købt eller afbestilt.'\r\n }\r\n }\r\n}\r\n\r\nexport const GET_RESERVATION_SUCCESS = 'GET_RESERVATION_SUCCESS'\r\nexport const GET_RESERVATION_REQUEST = 'GET_RESERVATION_REQUEST'\r\nexport const GET_RESERVATION_FAILED = 'GET_RESERVATION_FAILED'\r\n\r\nexport function getReservationInfo(reservationId) {\r\n return dispatch => {\r\n dispatch(getReservationRequest());\r\n return ticketgate.getReservation(reservationId).then(receipt => {\r\n return dispatch(getReservationSuccess(receipt));\r\n }, error => dispatch(getReservationFailed(error)));\r\n };\r\n}\r\n\r\nconst getReservationRequest = () => {\r\n return {\r\n type: GET_RESERVATION_REQUEST,\r\n requestedAt: Date.now()\r\n }\r\n}\r\n\r\nconst getReservationSuccess = (transaction) => {\r\n return {\r\n type: GET_RESERVATION_SUCCESS,\r\n suceededAt: Date.now(),\r\n transaction\r\n }\r\n}\r\n\r\nconst getReservationFailed = (error) => {\r\n return {\r\n type: GET_RESERVATION_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n }\r\n}","import * as ticketgate from '../api/ticketgate-api'\r\nimport _ from 'lodash'\r\nimport { receiptReset, receiptSuccess } from './receipt-actions'\r\nimport { orderTypeChanged } from './order-actions'\r\nimport CONSTANTS from '../components/orderflow/orderflow-constants'\r\n\r\n// RESERVE\r\nexport const RESERVE_REQUEST = 'RESERVE_REQUEST'\r\nexport const RESERVE_SUCCESS = 'RESERVE_SUCCESS'\r\nexport const RESERVE_FAILED = 'RESERVE_FAILED'\r\n\r\nexport function reserve(transactionId, customer) {\r\n return dispatch => {\r\n dispatch(receiptReset());\r\n dispatch({ type: RESERVE_REQUEST, requestedAt: Date.now(), });\r\n\r\n let ticketgateNewsletters = chainNewsletters(customer.newsletters);\r\n return ticketgate.reserve(transactionId, customer.phone, customer.name, customer.password, customer.email, ticketgateNewsletters, customer.smsReminder, customer.zipCode, customer.note).then(\r\n response => {\r\n dispatch({ type: RESERVE_SUCCESS, requestedAt: Date.now() });\r\n return dispatch(receiptSuccess(response))\r\n },\r\n error => dispatch({\r\n type: RESERVE_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n }));\r\n };\r\n}\r\n\r\nfunction chainNewsletters(newsletters) {\r\n let ticketgateNewsletters = '';\r\n _.each(newsletters, (letter) => {\r\n if (letter.enabled)\r\n ticketgateNewsletters += `${letter.id}_${letter.checked ? 1 : 0},`;\r\n });\r\n return _.trimEnd(ticketgateNewsletters, ',');\r\n}\r\n\r\n// PRE BOOK\r\nexport const PRE_BOOK_REQUEST = 'PRE_BOOK_REQUEST'\r\nexport const PRE_BOOK_SUCCESS = 'PRE_BOOK_SUCCESS'\r\nexport const PRE_BOOK_FAILED = 'PRE_BOOK_FAILED'\r\n\r\nexport function preBook(transactionId, customer) {\r\n return (dispatch, getState) => {\r\n dispatch({\r\n type: PRE_BOOK_REQUEST,\r\n requestedAt: Date.now(),\r\n });\r\n\r\n return ticketgate.preBook(transactionId, customer.phone, customer.name, customer.password, customer.email, 'DK') //TODO remove 'DK'\r\n .then(result => {\r\n const { order } = getState();\r\n // PreBook doesn't handle totalAmount with giftCards so we override it here\r\n result.dibs.parameters.amount = order.totalPrice * 100; //i øre\r\n\r\n const hasNumberedSeats = getState().movielist.selectedShowtime.hasNumberedSeats;\r\n const currentSeats = order.selected.seats;\r\n const dataChanged = !seatsAreEqual(currentSeats, result.seats);\r\n return result.dibs && (!dataChanged || !hasNumberedSeats) ? dispatch(preBookSuccess(result.dibs)) : dispatch(preBookFailed({ code: 16 }));\r\n }, error => dispatch(preBookFailed(error)));\r\n };\r\n}\r\n\r\nfunction seatsAreEqual(currentSeats, newSeats) {\r\n let areEqualSeats = false;\r\n _.forEach(currentSeats, (current) => {\r\n _.forEach(newSeats, (newSeat) => {\r\n areEqualSeats = _.isEqual(current, newSeat);\r\n });\r\n });\r\n return areEqualSeats;\r\n}\r\n\r\nconst preBookSuccess = (dibs) => {\r\n return {\r\n type: PRE_BOOK_SUCCESS,\r\n suceededAt: Date.now(),\r\n dibs\r\n }\r\n}\r\n\r\nconst preBookFailed = (error) => {\r\n return {\r\n type: PRE_BOOK_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n }\r\n}\r\n\r\n// BOOK\r\nexport const BOOK_REQUEST = 'BOOK_REQUEST'\r\nexport const BOOK_SUCCESS = 'BOOK_SUCCESS'\r\nexport const BOOK_FAILED = 'BOOK_FAILED'\r\n\r\nexport function book(transactionId, customer, reference, orderId, amount, paytype) {\r\n return dispatch => {\r\n dispatch(receiptReset());\r\n dispatch(bookRequest());\r\n\r\n let ticketgateNewsletters = chainNewsletters(customer.newsletters);\r\n return ticketgate.book(transactionId, customer.phone, customer.name, customer.password, customer.email, reference, orderId, amount, ticketgateNewsletters, paytype, customer.zipCode, customer.note)\r\n .then(receipt => {\r\n dispatch(bookSuccess());\r\n dispatch(orderTypeChanged(CONSTANTS.orderTypes.buy));\r\n return dispatch(receiptSuccess(receipt))\r\n }, error => dispatch(bookFailed(error)));\r\n };\r\n}\r\n\r\nconst bookRequest = () => {\r\n return {\r\n type: BOOK_REQUEST,\r\n requestedAt: Date.now(),\r\n }\r\n}\r\n\r\nconst bookSuccess = () => {\r\n return {\r\n type: BOOK_SUCCESS,\r\n succeededAt: Date.now(),\r\n }\r\n}\r\n\r\nexport const bookFailed = (error) => {\r\n return {\r\n type: BOOK_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n }\r\n}\r\n\r\n// CHANGE HANDLERS\r\nexport const CUSTOMER_CHANGED = 'CUSTOMER_CHANGED'\r\nexport const NEWSLETTERS_CHANGED = 'NEWSLETTER_CHANGED'\r\nexport const SMS_REMINDER_CHANGED = 'SMS_REMINDER_CHANGED'\r\nexport const CREDIT_CARD_CHANGED = 'CREDIT_CARD_CHANGED'\r\nexport const CONDITIONS_ACCEPTED_CHANGED = 'CONDITIONS_ACCEPTED_CHANGED'\r\nexport const REMEMBER_ME_CHANGED = 'REMEMBER_ME_CHANGED'\r\nexport const UPDATE_CUSTOMER_LOCAL_STORAGE = 'UPDATE_CUSTOMER_LOCAL_STORAGE'\r\n\r\nexport const customerChanged = (newCustomer) => {\r\n return {\r\n type: CUSTOMER_CHANGED,\r\n customer: newCustomer\r\n }\r\n}\r\n\r\nexport const smsReminderChanged = (newSmsReminder) => {\r\n return {\r\n type: SMS_REMINDER_CHANGED,\r\n smsReminder: newSmsReminder\r\n }\r\n}\r\n\r\nexport const newsletterChanged = (newNewsletters) => {\r\n return {\r\n type: NEWSLETTERS_CHANGED,\r\n newsletters: newNewsletters\r\n }\r\n}\r\n\r\nexport const creditCardChanged = (newCreditCard) => {\r\n return {\r\n type: CREDIT_CARD_CHANGED,\r\n creditCard: newCreditCard\r\n }\r\n}\r\n\r\nexport const conditionsAcceptedChanged = (newConditionsAccepted) => {\r\n return {\r\n type: CONDITIONS_ACCEPTED_CHANGED,\r\n conditionsAccepted: newConditionsAccepted\r\n }\r\n}\r\n\r\nexport const rememberMeChanged = (newRememberMe) => {\r\n return {\r\n type: REMEMBER_ME_CHANGED,\r\n rememberMe: newRememberMe\r\n }\r\n}\r\n\r\nexport const updateCustomerLocalStorage = () => {\r\n return {\r\n type: UPDATE_CUSTOMER_LOCAL_STORAGE\r\n }\r\n}","import localStorageUtils from '../utilities/localstorage-utilities'\r\nimport {\r\n RESERVE_REQUEST,\r\n RESERVE_SUCCESS,\r\n RESERVE_FAILED,\r\n PRE_BOOK_REQUEST,\r\n PRE_BOOK_SUCCESS,\r\n PRE_BOOK_FAILED,\r\n BOOK_REQUEST,\r\n BOOK_SUCCESS,\r\n BOOK_FAILED,\r\n CUSTOMER_CHANGED,\r\n SMS_REMINDER_CHANGED,\r\n NEWSLETTERS_CHANGED,\r\n CREDIT_CARD_CHANGED,\r\n CONDITIONS_ACCEPTED_CHANGED,\r\n REMEMBER_ME_CHANGED,\r\n UPDATE_CUSTOMER_LOCAL_STORAGE\r\n} from '../actions/customer-actions'\r\n\r\nexport default function customer(\r\n state = {\r\n isFetching: false,\r\n name: '',\r\n phone: '',\r\n email: '',\r\n repeatEmail: '',\r\n password: '',\r\n rememberMe: false,\r\n creditCard: '',\r\n conditionsAccepted: false,\r\n dibs: { parameters: {} }, \r\n checkoutComplete: false,\r\n newsletters: [],\r\n zipCode: '',\r\n note:'',\r\n error: null\r\n }, action) {\r\n switch (action.type) {\r\n case RESERVE_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case RESERVE_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.succeededAt,\r\n error: null\r\n }\r\n case RESERVE_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastFailed: action.failedAt,\r\n error: action.error\r\n }\r\n case PRE_BOOK_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case PRE_BOOK_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.succeededAt,\r\n dibs: action.dibs,\r\n error: null\r\n }\r\n case PRE_BOOK_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case BOOK_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case BOOK_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.succeededAt,\r\n checkoutComplete: true,\r\n error: null\r\n }\r\n case BOOK_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case CUSTOMER_CHANGED: {\r\n return {\r\n ...state,\r\n name: action.customer.name,\r\n phone: action.customer.phone,\r\n email: action.customer.email,\r\n repeatEmail: action.customer.repeatEmail,\r\n password: action.customer.password,\r\n zipCode: action.customer.zipCode,\r\n note: action.customer.note\r\n }\r\n }\r\n case SMS_REMINDER_CHANGED:\r\n return {\r\n ...state,\r\n smsReminder: action.smsReminder\r\n }\r\n case NEWSLETTERS_CHANGED:\r\n return {\r\n ...state,\r\n newsletters: action.newsletters\r\n }\r\n case CREDIT_CARD_CHANGED:\r\n return {\r\n ...state,\r\n creditCard: action.creditCard\r\n }\r\n case CONDITIONS_ACCEPTED_CHANGED:\r\n return {\r\n ...state,\r\n conditionsAccepted: action.conditionsAccepted\r\n }\r\n case REMEMBER_ME_CHANGED:\r\n if (action.rememberMe) setCustomerInLocalStorage(state);\r\n else localStorageUtils.removeItem('customer');\r\n return {\r\n ...state,\r\n rememberMe: action.rememberMe\r\n }\r\n case UPDATE_CUSTOMER_LOCAL_STORAGE:\r\n setCustomerInLocalStorage(state);\r\n default:\r\n return state\r\n }\r\n}\r\n\r\nfunction setCustomerInLocalStorage(state) {\r\n localStorageUtils.setItem('customer', {\r\n name: state.name,\r\n phone: state.phone,\r\n email: state.email,\r\n repeatEmail: state.repeatEmail,\r\n password: state.password,\r\n newsletters: state.newsletters,\r\n smsReminder: state.smsReminder,\r\n conditionsAccepted: state.conditionsAccepted,\r\n rememberMe: true,\r\n dibs: { parameters: {} },\r\n zipCode: state.zipCode,\r\n note: state.note\r\n });\r\n}","import {\r\n RECEIPT_RESET,\r\n RECEIPT_SUCCESS,\r\n DELETE_RESERVATION_REQUEST,\r\n DELETE_RESERVATION_SUCCESS,\r\n DELETE_RESERVATION_FAILED,\r\n ACTIVATE_RESERVATION_REQUEST,\r\n ACTIVATE_RESERVATION_SUCCESS,\r\n ACTIVATE_RESERVATION_FAILED\r\n} from '../actions/receipt-actions'\r\n\r\nconst initialState = {\r\n isFetching: false,\r\n activated: false,\r\n deleted: false,\r\n id: 0,\r\n transactionId: 0,\r\n orderId: 0,\r\n organizerId: 0,\r\n movieId: 0,\r\n movies: [],\r\n showtimeId: 0,\r\n customer: {},\r\n cinema: {},\r\n tickets: {},\r\n seats: [],\r\n seatTexts: [],\r\n hasNumberedSeats: true,\r\n prices: {},\r\n pickupInfo: '',\r\n error: null\r\n}\r\n\r\nexport default function receipt(\r\n state = initialState, action) {\r\n switch (action.type) {\r\n case RECEIPT_RESET:\r\n return initialState;\r\n case RECEIPT_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.suceededAt,\r\n id: action.receipt.id,\r\n transactionId: action.receipt.transactionId,\r\n orderId: action.receipt.orderId,\r\n organizerId: action.receipt.organizerId,\r\n movieId: action.receipt.movieId,\r\n showtimeId: action.receipt.showtimeId,\r\n customer: action.receipt.customer,\r\n cinema: action.receipt.cinema,\r\n tickets: action.receipt.tickets,\r\n seats: action.receipt.seats,\r\n seatTexts: action.receipt.seatTexts,\r\n hasNumberedSeats: action.receipt.hasNumberedSeats,\r\n prices: action.receipt.prices,\r\n pickupInfo: action.receipt.pickupInfo,\r\n error: null,\r\n }\r\n case DELETE_RESERVATION_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case DELETE_RESERVATION_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.suceededAt,\r\n deleted: action.result,\r\n error: null\r\n }\r\n case DELETE_RESERVATION_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case ACTIVATE_RESERVATION_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case ACTIVATE_RESERVATION_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n activated: true,\r\n lastUpdated: action.suceededAt,\r\n error: null\r\n }\r\n case ACTIVATE_RESERVATION_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n default:\r\n return state\r\n }\r\n}","import _ from 'lodash'\r\nimport * as ticketgate from '../api/ticketgate-api'\r\nimport orderflow from '../api/orderflow-api'\r\nimport * as orderActions from './order-actions'\r\nimport { customerChanged, creditCardChanged } from './customer-actions'\r\nimport { receiptSuccess } from './receipt-actions'\r\n\r\n// CLUBCARD LOGIN\r\nexport function clubCardLogin(email, password) {\r\n return (dispatch, getState) => {\r\n dispatch(clubCardLoginRequest());\r\n\r\n return ticketgate.getUser(email, password)\r\n .then((result) => {\r\n const showtimeId = getState().movielist.selectedShowtime.id; \r\n if (!result.error) {\r\n return dispatch(orderActions.getAvailableTicketsAndExtraPurchases(showtimeId, result.clubCardId))\r\n .then((response) => {\r\n if (response.clubCard == null || response.clubCard.id == 0) {\r\n const appLocale = getState().app.locale;\r\n const errorText = _.find(getState().organizer.configuration.texts, (text) => { return text.id == 'NotMemberInfo' }) || 'Du er ikke klubmedlem i denne biograf.';\r\n return dispatch(clubCardLoginFailed({ message: errorText[appLocale] }));\r\n }\r\n else {\r\n dispatch(clubCardLoginSuccess(result.clubCardId))\r\n dispatch(customerChanged(result.customer))\r\n dispatch(creditCardChanged(result.creditCard));\r\n return dispatch(orderActions.calculatePoints());\r\n }\r\n });\r\n } else return result;\r\n }, error => dispatch(clubCardLoginFailed(error)));\r\n }\r\n}\r\n\r\nexport const CLUBCARD_LOGIN_REQUEST = 'CLUBCARD_LOGIN_REQUEST'\r\nexport const CLUBCARD_LOGIN_SUCCESS = 'CLUBCARD_LOGIN_SUCCESS'\r\nexport const CLUBCARD_LOGIN_FAILED = 'CLUBCARD_LOGIN_FAILED'\r\n\r\nconst clubCardLoginRequest = () => {\r\n return {\r\n type: CLUBCARD_LOGIN_REQUEST,\r\n requestedAt: Date.now(),\r\n }\r\n}\r\n\r\nconst clubCardLoginSuccess = (clubCardId) => {\r\n return {\r\n type: CLUBCARD_LOGIN_SUCCESS,\r\n succeededAt: Date.now(),\r\n clubCardId\r\n }\r\n}\r\n\r\nconst clubCardLoginFailed = (error) => {\r\n return {\r\n type: CLUBCARD_LOGIN_FAILED,\r\n failedAt: Date.now(),\r\n error: {\r\n ...error,\r\n message: error.message || 'Ugyldig email eller kode',\r\n close: true,\r\n show: false\r\n }\r\n }\r\n}\r\n\r\n// TRANSACTIONS\r\nexport function getUserTransactions(emailOrPhone, password) {\r\n return (dispatch) => {\r\n dispatch(transactionsRequest());\r\n return orderflow.fetchUserTransactions(emailOrPhone, password)\r\n .then((result) => {\r\n result.transactionId = result.id; // for the receipt...\r\n dispatch(receiptSuccess(result));\r\n return dispatch(transactionsSuccess(result))\r\n }, error => dispatch(transactionsFailed(error)));\r\n }\r\n}\r\n\r\nexport const TRANSACTIONS_REQUEST = 'TRANSACTIONS_REQUEST'\r\nexport const TRANSACTIONS_SUCCESS = 'TRANSACTIONS_SUCCESS'\r\nexport const TRANSACTIONS_FAILED = 'TRANSACTIONS_FAILED'\r\n\r\nconst transactionsRequest = () => {\r\n return {\r\n type: TRANSACTIONS_REQUEST,\r\n requestedAt: Date.now(),\r\n }\r\n}\r\n\r\nconst transactionsSuccess = (transactions) => {\r\n return {\r\n type: TRANSACTIONS_SUCCESS,\r\n succeededAt: Date.now(),\r\n transactions\r\n }\r\n}\r\n\r\nconst transactionsFailed = (error) => {\r\n return {\r\n type: TRANSACTIONS_FAILED,\r\n failedAt: Date.now(),\r\n error: {\r\n ...error,\r\n message: 'Prøv igen senere.'\r\n }\r\n }\r\n}\r\n\r\n// NEWSLETTERS\r\nexport function getNewsletters(organizerId, customerEmail) {\r\n return (dispatch) => {\r\n dispatch(newslettersRequest());\r\n return orderflow.fetchNewsletters(organizerId, customerEmail)\r\n .then((result) => {\r\n return dispatch(newslettersSuccess(result, customerEmail))\r\n }, error => dispatch(newslettersFailed(error)));\r\n }\r\n}\r\n\r\nexport const NEWSLETTERS_REQUEST = 'NEWSLETTERS_REQUEST'\r\nexport const NEWSLETTERS_SUCCESS = 'NEWSLETTERS_SUCCESS'\r\nexport const NEWSLETTERS_FAILED = 'NEWSLETTERS_FAILED'\r\nexport const NEWSLETTER_CHANGED = 'NEWSLETTER_CHANGED'\r\n\r\nconst newslettersRequest = () => {\r\n return {\r\n type: NEWSLETTERS_REQUEST,\r\n requestedAt: Date.now(),\r\n }\r\n}\r\n\r\nconst newslettersSuccess = (newsletters, customerEmail) => {\r\n return {\r\n type: NEWSLETTERS_SUCCESS,\r\n succeededAt: Date.now(),\r\n newsletters,\r\n customerEmail\r\n }\r\n}\r\n\r\nconst newslettersFailed = (error) => {\r\n return {\r\n type: NEWSLETTERS_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n }\r\n}\r\n\r\nexport function newsletterChanged(id, checked) {\r\n return (dispatch, getState) => {\r\n const customerEmail = getState().user.customerEmail;\r\n const newsletters = getState().user.newsletters;\r\n const newsletter = _.find(newsletters, ['id', id]);\r\n newsletter.isSubscribed = checked;\r\n\r\n orderflow.postNewsletter({\r\n id,\r\n isSubscribed: checked,\r\n customerEmail\r\n }).then(() => dispatch(newslettersSuccess(newsletters, customerEmail)));\r\n }\r\n}","import fetch from 'isomorphic-fetch'\r\n\r\nexport default {\r\n fetchCommercials\r\n}\r\n\r\nexport const baseUrl = window.location.href.indexOf('localhost') != -1 ? 'http://devadmin.tickets.dk' : 'http://admin.ebillet.dk'\r\n\r\nasync function fetchCommercials(organizerId) {\r\n return await fetch(`${baseUrl}/api/linkblocks?organizerId=${organizerId}`).then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n });\r\n}","import api from '../api/cms-api'\r\n\r\nexport const FETCH_COMMERCIALS_REQUEST = 'FETCH_COMMERCIALS_REQUEST'\r\nexport const FETCH_COMMERCIALS_SUCCESS = 'FETCH_COMMERCIALS_SUCCESS'\r\nexport const FETCH_COMMERCIALS_FAILED = 'FETCH_COMMERCIALS_FAILED'\r\n\r\nexport default {\r\n getCommercials\r\n}\r\n\r\nfunction getCommercials(organizerId) {\r\n return dispatch => {\r\n dispatch({\r\n type: FETCH_COMMERCIALS_REQUEST,\r\n requestedAt: Date.now()\r\n });\r\n\r\n return api.fetchCommercials(organizerId).then(\r\n commercials => dispatch({\r\n type: FETCH_COMMERCIALS_SUCCESS,\r\n succeededAt: Date.now(),\r\n commercials: commercials\r\n }),\r\n error => dispatch({\r\n type: FETCH_COMMERCIALS_FAILED,\r\n failedAt: Date.now(),\r\n error\r\n })\r\n );\r\n }\r\n}","import _ from 'lodash'\r\nimport moment from 'moment'\r\n\r\nexport const TRACK_CHECKOUT_STEP = 'TRACK_CHECKOUT_STEP';\r\nexport const TRACK_PURCHASE = 'TRACK_PURCHASE';\r\nexport const TRACK_RESERVATION = 'TRACK_RESERVATION';\r\nexport const TRACK_DELETE_RESERVATION = 'TRACK_DELETE_RESERVATION';\r\n\r\nexport const gaTrackCheckoutStep = (step) => {\r\n return (dispatch, getState) => {\r\n if (getState().organizer.configuration.googleAnalytics.gtmId) {\r\n const movie = getState().movielist.selectedMovie;\r\n const showtime = getState().movielist.selectedShowtime;\r\n const selected = getState().order.selected;\r\n const datetimeNow = moment();\r\n const showtimeDay = moment(showtime.dateTime);\r\n \r\n const products = [];\r\n const averageTicketPrice = (selected.totalTicketPrice + selected.totalFees) / selected.totalTicketQuantity;\r\n _.each(selected.tickets, (ticket) => products.push(ticketsAsProduct(movie, averageTicketPrice, ticket, showtime)));\r\n \r\n const event = 'checkout';\r\n const dataLayer = {\r\n 'transaction_step': step,\r\n 'event': event,\r\n 'ecommerce': {\r\n 'checkout': {\r\n 'actionField': { 'step': step, 'option': '' },\r\n 'products': products,\r\n 'sameday_buy': showtimeDay.isSame(datetimeNow, 'day'),\r\n 'day_of_the_week': datetimeNow.format('ddd')\r\n },\r\n } \r\n };\r\n\r\n window.dataLayer.push(dataLayer);\r\n\r\n return dispatch({\r\n type: TRACK_CHECKOUT_STEP,\r\n event,\r\n step,\r\n dataLayer\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const gaTrackPurchase = () => {\r\n return (dispatch, getState) => {\r\n if (getState().organizer.configuration.googleAnalytics.gtmId) {\r\n const movie = getState().movielist.selectedMovie;\r\n const showtime = getState().movielist.selectedShowtime;\r\n const selected = getState().order.selected;\r\n const availableExtras = getState().order.availableExtraPurchases;\r\n const receipt = getState().receipt;\r\n const datetimeNow = moment();\r\n const showtimeDay = moment(showtime.dateTime);\r\n\r\n const products = [];\r\n const averageTicketPrice = (selected.totalTicketPrice + selected.totalFees) / selected.totalTicketQuantity;\r\n _.each(selected.tickets, (ticket) => products.push(ticketsAsProduct(movie, averageTicketPrice, ticket, showtime)));\r\n\r\n if (selected.extraPurchases.length > 0) {\r\n _.each(selected.extraPurchases, (extra) => {\r\n const available = _.find(availableExtras, (item) => item.id == extra.id);\r\n const price = available ? available.price : '';\r\n products.push({\r\n 'name': movie.name,\r\n 'id': movie.id,\r\n 'price': price,\r\n 'brand': '',\r\n 'category': extra.name,\r\n 'variant': showtime.dateTime,\r\n 'quantity': extra.quantity\r\n });\r\n })\r\n }\r\n\r\n const event = 'transactionComplete';\r\n const dataLayer = {\r\n 'ecommerce': {\r\n 'purchase': {\r\n 'actionField': {\r\n 'id': receipt.transactionId,\r\n 'affiliation': 'Ebillet Orderflow',\r\n 'revenue': receipt.prices.total,\r\n 'tax': receipt.prices.total * 0.25,\r\n 'shipping': 0,\r\n 'coupon': ''\r\n },\r\n 'products': products,\r\n 'sameday_buy': showtimeDay.isSame(datetimeNow, 'day'),\r\n 'day_of_the_week': datetimeNow.format('ddd')\r\n }\r\n },\r\n 'event': event,\r\n 'JS - Null referrer on thank you page': null\r\n };\r\n\r\n window.dataLayer.push(dataLayer);\r\n\r\n return dispatch({\r\n type: TRACK_PURCHASE,\r\n event,\r\n dataLayer\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const gaTrackReservation = () => {\r\n return (dispatch, getState) => {\r\n if (getState().organizer.configuration.googleAnalytics.gtmId) {\r\n const movie = getState().movielist.selectedMovie;\r\n const selected = getState().order.selected;\r\n const datetimeNow = moment();\r\n const showtimeDay = moment(getState().movielist.selectedShowtime.dateTime);\r\n\r\n const event = 'ticket_reservation';\r\n const dataLayer = eventAsDataLayer(movie, selected, event, showtimeDay, datetimeNow);\r\n window.dataLayer.push(dataLayer);\r\n\r\n return dispatch({\r\n type: TRACK_RESERVATION,\r\n event,\r\n dataLayer\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const gaDeleteReservation = () => {\r\n return (dispatch, getState) => {\r\n if (getState().organizer.configuration.googleAnalytics.gtmId) {\r\n const movie = getState().movielist.selectedMovie;\r\n const selected = getState().order.selected;\r\n const datetimeNow = moment();\r\n const showtimeDay = moment(getState().movielist.selectedShowtime.dateTime);\r\n\r\n const event = 'delete_reservation';\r\n const dataLayer = eventAsDataLayer(movie, selected, event, showtimeDay, datetimeNow);\r\n window.dataLayer.push(dataLayer);\r\n\r\n return dispatch({\r\n type: TRACK_DELETE_RESERVATION,\r\n event,\r\n dataLayer\r\n });\r\n }\r\n }\r\n}\r\n\r\nfunction eventAsDataLayer(movie, selected, event, showtimeDay, datetimeNow) {\r\n return {\r\n 'movie_name': movie.name,\r\n 'expected_revenue': selected.totalTicketPrice + selected.totalFees,\r\n 'quantity': selected.totalTicketQuantity,\r\n 'event': event,\r\n 'sameday_buy': showtimeDay.isSame(datetimeNow, 'day'),\r\n 'day_of_the_week': datetimeNow.format('ddd')\r\n };\r\n}\r\n\r\nfunction ticketsAsProduct(movie, averageTicketPrice, ticket, showtime) {\r\n return {\r\n 'name': movie.name,\r\n 'id': movie.id,\r\n 'price': averageTicketPrice,\r\n 'brand': '',\r\n 'category': ticket.name,\r\n 'variant': showtime.dateTime,\r\n 'quantity': ticket.quantity,\r\n };\r\n}\r\n","import moment from 'moment-timezone'\r\nimport 'moment/locale/da'\r\nimport _ from 'lodash'\r\n\r\nexport const LANGUAGE_CHANGED = 'LANGUAGE_CHANGED'\r\nexport function languageChanged(newLocale) {\r\n return (dispatch, getState) => {\r\n const availableLocales = getState().organizer.configuration.availableLocales;\r\n const isAvailable = _.find(availableLocales, { id: newLocale });\r\n if (isAvailable) {\r\n moment.locale(newLocale);\r\n\r\n return dispatch({\r\n type: LANGUAGE_CHANGED,\r\n locale: newLocale,\r\n });\r\n }\r\n }\r\n}\r\n\r\nexport const SITETYPE_CHANGED = 'SITETYPE_CHANGED'\r\nexport const siteTypeChanged = (newSiteType) => {\r\n return {\r\n type: SITETYPE_CHANGED,\r\n siteType: newSiteType\r\n }\r\n}\r\n\r\nexport const INIT_FROM_PARENT_SITE = 'INIT_FROM_PARENT_SITE'\r\nexport function initFromParentSite(origin) {\r\n return (dispatch, getState) => {\r\n return dispatch({\r\n type: INIT_FROM_PARENT_SITE,\r\n origin\r\n });\r\n };\r\n}\r\n\r\nexport const APP_HEIGHT_CHANGED = 'APP_HEIGHT_CHANGED'\r\nexport function appHeightChanged(initIframeId, scrollToIframeTop = false) {\r\n return (dispatch, getState) => {\r\n if (window.parent != window) {\r\n let { height, iframeId } = getState().app;\r\n if (!iframeId) iframeId = initIframeId;\r\n\r\n const app = document.querySelector('.App');\r\n const newPageHeight = Math.max(app.scrollHeight, app.offsetHeight, app.clientHeight);\r\n\r\n if (iframeId !== null && height != newPageHeight) {\r\n console.log('[CHILD] AppHeightChanged! Posting to parent: ');\r\n console.log({ iframeId: iframeId, oldHeight: height, newHeight: newPageHeight, scrollToIframeTop: scrollToIframeTop });\r\n\r\n window.parent.postMessage({\r\n iframeId: iframeId,\r\n iframeHeight: newPageHeight,\r\n scrollToTop: scrollToIframeTop\r\n }, '*');\r\n\r\n return dispatch({\r\n type: APP_HEIGHT_CHANGED,\r\n iframeId,\r\n appHeight: newPageHeight\r\n });\r\n }\r\n }\r\n }\r\n}","import fetch from 'isomorphic-fetch'\r\n\r\nexport default {\r\n fetchEvents,\r\n fetchEvent,\r\n fetchEventImg\r\n}\r\n\r\n//International Discovery Api;\r\nexport const baseUrl = 'https://app.ticketmaster.eu/mfxapi/v2';\r\nconst apiKey = 'ZyseZ7zPA0qMzTKYYG3Y6r3cHyvsjar5';\r\nconst shared = '&domain=denmark&lang=da-dk';\r\n\r\n//US Discovery Api\r\nexport const US_baseUrl = 'https://app.ticketmaster.com/discovery/v2/events/legacy/MFX-DK-';\r\nconst US_apiKey = 'rCAZin3R6zCNGuVp7pMnGeUvnbydlRGz';\r\n\r\n\r\nasync function fetchEvents(promoterCodes) {\r\n return await fetch(`${baseUrl}/events?apikey=${apiKey}&venue_ids=${promoterCodes}&start=0&rows=250${shared}`)\r\n .then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n });\r\n}\r\n\r\nasync function fetchEvent(id) {\r\n return await fetch(`${baseUrl}/events/${id}?apikey=${apiKey}&${shared}`)\r\n .then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n });\r\n}\r\n\r\nasync function fetchEventImg(id) {\r\n return await fetch(`${US_baseUrl}${id}?locale=da-dk&apikey=${US_apiKey}`)\r\n .then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n });\r\n}","import _ from 'lodash'\r\nimport api from '../api/ticketmaster-api'\r\n\r\nexport function getEventList(promoterCodes) {\r\n return (dispatch, getState) => {\r\n dispatch(eventListRequest());\r\n const config = getState().organizer.configuration.ticketmaster;\r\n return api.fetchEvents(promoterCodes)\r\n .then(result => {\r\n const events = _.map(result.events, (event) => extractEvent(event, config));\r\n return dispatch(eventListSuccess(events))\r\n }, error => dispatch(eventListFailed(error)));\r\n }\r\n}\r\n\r\nexport const EVENTLIST_REQUEST = 'EVENTLIST_REQUEST'\r\nconst eventListRequest = () => {\r\n return { type: EVENTLIST_REQUEST }\r\n}\r\n\r\nexport const EVENTLIST_SUCCESS = 'EVENTLIST_SUCCESS'\r\nconst eventListSuccess = (events) => {\r\n return {\r\n type: EVENTLIST_SUCCESS,\r\n events: _.sortBy(events, 'dateTime')\r\n }\r\n}\r\n\r\nexport const EVENTLIST_FAILED = 'EVENTLIST_FAILED'\r\nconst eventListFailed = (error) => {\r\n return {\r\n type: EVENTLIST_FAILED,\r\n error: {\r\n ...error,\r\n message: 'Der var ingen data at hente. Prøv igen senere.'\r\n }\r\n }\r\n}\r\n\r\nexport function getEvent(id) {\r\n return (dispatch, getState) => {\r\n let selectedEvent = _.find(getState().ticketmaster.events, (event) => { return id == event.id });\r\n if (selectedEvent && selectedEvent.description) {\r\n return new Promise((resolve) => {\r\n return resolve(dispatch(selectedEventChanged(selectedEvent)));\r\n });\r\n } else return api.fetchEvent(id)\r\n .then(event => {\r\n if (event) {\r\n const config = getState().organizer.configuration.ticketmaster;\r\n selectedEvent = extractEvent(event, config);\r\n\r\n return api.fetchEventImg(id)\r\n .then(result => {\r\n let image = _.find(result.images, (image) => { return image.ratio == '16_9' && image.width == 2048 });\r\n if (!image) image = _.find(result.images, (image) => { return image.ratio == '16_9' && image.width == 1136 });\r\n if (image.url) selectedEvent.posters.large = image.url;\r\n\r\n return dispatch(selectedEventChanged(selectedEvent));\r\n });\r\n } else return dispatch(eventListFailed());\r\n }, error => dispatch(eventListFailed(error)));\r\n }\r\n}\r\n\r\nexport function changeSelectedEvent(id) {\r\n return (dispatch, getState) => {\r\n const event = _.find(getState().ticketmaster.events, (event) => { return event.id == id });\r\n return dispatch(selectedEventChanged(event));\r\n }\r\n}\r\n\r\nexport const SELECTED_EVENT_CHANGED = 'SELECTED_EVENT_CHANGED'\r\nexport const selectedEventChanged = (selectedEvent) => {\r\n return {\r\n type: SELECTED_EVENT_CHANGED,\r\n selectedEvent: selectedEvent\r\n }\r\n}\r\n\r\nfunction extractEvent(event, config) {\r\n return {\r\n id: event.id,\r\n name: event.name,\r\n description: event.description,\r\n posters: event.images ? {\r\n standard: event.images.standard ? event.images.standard.url : null,\r\n large: event.images.large ? event.images.large.url : null\r\n } : {},\r\n dateTime: event.event_date ? event.event_date.value : null,\r\n ticketsUrl: replaceInUrl(event.url, config),\r\n price: event.price_ranges ? extractPrice(event.price_ranges) + ' ' + event.currency : null,\r\n venue: event.venue ? {\r\n name: event.venue.name,\r\n address: `${event.venue.location.address.address}, ${event.venue.location.address.postal_code} ${event.venue.location.address.city}`\r\n } : null,\r\n isSoldOut: event.properties ? event.properties.sold_out : null,\r\n isCancelled: event.properties ? event.properties.cancelled : null\r\n }\r\n}\r\n\r\nfunction replaceInUrl(url, config) {\r\n url = url.replace(/camefrom=(.*)&/, `camefrom=${config.cameFrom}&`);\r\n url += `&brand=${config.brand}`;\r\n return url;\r\n}\r\n\r\nfunction extractPrice(price) {\r\n const from = price.including_ticket_fees.min;\r\n const to = price.including_ticket_fees.max;\r\n\r\n if (from === to) return from;\r\n else if (from && to) return from + ' - ' + to;\r\n else if (from && !to) return from;\r\n else if (!from && to) return to;\r\n else return null;\r\n}","import { combineReducers } from 'redux'\r\nimport organizer from './organizer-reducer'\r\nimport order from './order-reducer'\r\nimport customer from './customer-reducer'\r\nimport receipt from './receipt-reducer'\r\nimport user from './user-reducer'\r\nimport cms from './cms-reducer'\r\nimport googleAnalytics from './ga-reducer'\r\nimport app from './app-reducer'\r\nimport movielist from './movielist-reducer'\r\nimport ticketmaster from './ticketmaster-reducer'\r\nimport external from './external-reducer'\r\nimport error from './error-reducer'\r\n\r\nexport default combineReducers({\r\n organizer,\r\n order,\r\n customer,\r\n receipt,\r\n user,\r\n cms,\r\n googleAnalytics,\r\n app,\r\n movielist,\r\n ticketmaster,\r\n external,\r\n error\r\n})","import API_CONSTANTS from '../api/api-constants'\r\n\r\nimport {\r\n FETCH_ORGANIZER_REQUEST,\r\n FETCH_ORGANIZER_SUCCESS,\r\n FETCH_ORGANIZER_FAILED\r\n} from '../actions/organizer-actions'\r\n\r\nexport default function organizer(\r\n state = {\r\n isFetching: false,\r\n id: 0,\r\n name: '',\r\n futureTemplateId: 0,\r\n configuration: API_CONSTANTS.defaultConfiguration,\r\n creditcards: [],\r\n error: null\r\n }, action) {\r\n switch (action.type) {\r\n case FETCH_ORGANIZER_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case FETCH_ORGANIZER_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.suceededAt,\r\n id: action.id,\r\n multibioIds: action.multibioIds,\r\n name: action.name,\r\n futureTemplateId: action.futureTemplateId,\r\n configuration: action.configuration,\r\n creditcards: action.creditcards,\r\n error: null\r\n }\r\n case FETCH_ORGANIZER_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n\r\n default:\r\n return state\r\n }\r\n}","import {\r\n CLUBCARD_LOGIN_REQUEST,\r\n CLUBCARD_LOGIN_SUCCESS,\r\n CLUBCARD_LOGIN_FAILED,\r\n TRANSACTIONS_REQUEST,\r\n TRANSACTIONS_SUCCESS,\r\n TRANSACTIONS_FAILED,\r\n NEWSLETTERS_REQUEST,\r\n NEWSLETTERS_SUCCESS,\r\n NEWSLETTERS_FAILED\r\n} from '../actions/user-actions'\r\n\r\nexport default function user(\r\n state = {\r\n isFetching: false,\r\n name: '',\r\n clubCard: null,\r\n transactions: [],\r\n newsletters: [],\r\n error: null\r\n }, action) {\r\n switch (action.type) {\r\n case CLUBCARD_LOGIN_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case CLUBCARD_LOGIN_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastSucceeded: action.succeededAt,\r\n clubCardId: action.clubCardId,\r\n error: null\r\n }\r\n case CLUBCARD_LOGIN_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastFailed: action.failedAt,\r\n error: action.error\r\n }\r\n case TRANSACTIONS_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case TRANSACTIONS_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastSucceeded: action.succeededAt,\r\n transactions: action.transactions,\r\n error: null\r\n }\r\n case TRANSACTIONS_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastFailed: action.failedAt,\r\n error: action.error\r\n }\r\n case NEWSLETTERS_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case NEWSLETTERS_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastSucceeded: action.succeededAt,\r\n newsletters: action.newsletters,\r\n customerEmail: action.customerEmail,\r\n error: null\r\n }\r\n case NEWSLETTERS_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastFailed: action.failedAt,\r\n error: action.error\r\n }\r\n default:\r\n return state\r\n }\r\n}","import {\r\n FETCH_COMMERCIALS_REQUEST,\r\n FETCH_COMMERCIALS_SUCCESS,\r\n FETCH_COMMERCIALS_FAILED\r\n} from '../actions/cms-actions'\r\n\r\nexport default function cms(\r\n state = {\r\n isFetching: false,\r\n commercials: [],\r\n error: null\r\n }, action) {\r\n switch (action.type) {\r\n case FETCH_COMMERCIALS_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n lastRequested: action.requestedAt,\r\n error: null\r\n }\r\n case FETCH_COMMERCIALS_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.suceededAt,\r\n commercials: action.commercials,\r\n error: null\r\n }\r\n case FETCH_COMMERCIALS_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n default:\r\n return state\r\n }\r\n}","import {\r\n TRACK_CHECKOUT_STEP,\r\n TRACK_PURCHASE,\r\n TRACK_RESERVATION,\r\n TRACK_DELETE_RESERVATION\r\n} from '../actions/ga-actions'\r\n\r\nexport default function googleAnalytics(\r\n state = {\r\n event: '',\r\n step: 0,\r\n dataLayer: {}\r\n }, action) {\r\n switch (action.type) {\r\n case TRACK_CHECKOUT_STEP:\r\n return {\r\n ...state,\r\n event: action.event,\r\n step: action.step,\r\n dataLayer: action.dataLayer\r\n }\r\n case TRACK_PURCHASE:\r\n return {\r\n ...state,\r\n event: action.event,\r\n dataLayer: action.dataLayer\r\n }\r\n case TRACK_RESERVATION:\r\n return {\r\n ...state,\r\n event: action.event,\r\n dataLayer: action.dataLayer\r\n }\r\n case TRACK_DELETE_RESERVATION:\r\n return {\r\n ...state,\r\n event: action.event,\r\n dataLayer: action.dataLayer\r\n }\r\n default:\r\n return state\r\n }\r\n}","import {\r\n LANGUAGE_CHANGED,\r\n SITETYPE_CHANGED,\r\n APP_HEIGHT_CHANGED,\r\n INIT_FROM_PARENT_SITE\r\n} from '../actions/app-actions'\r\n\r\nexport default function app(\r\n state = {\r\n isFetching: false,\r\n locale: 'da',\r\n height: 300,\r\n iframeId: null,\r\n origin: null,\r\n error: null\r\n }, action) {\r\n switch (action.type) {\r\n case LANGUAGE_CHANGED:\r\n return {\r\n ...state,\r\n locale: action.locale\r\n }\r\n case SITETYPE_CHANGED:\r\n return {\r\n ...state,\r\n siteType: action.siteType\r\n }\r\n case APP_HEIGHT_CHANGED:\r\n return {\r\n ...state,\r\n iframeId: action.iframeId,\r\n height: action.appHeight\r\n }\r\n case INIT_FROM_PARENT_SITE:\r\n return {\r\n ...state,\r\n origin: action.origin\r\n }\r\n default:\r\n return state\r\n }\r\n}","import _ from 'lodash'\r\nimport moment from 'moment'\r\nimport CONSTANTS from '../components/movielists/movielist-constants'\r\nimport { ROUTES } from '../components/navigation/route-constants'\r\n\r\nimport {\r\n MOVIELIST_REQUEST,\r\n MOVIELIST_SUCCESS,\r\n MOVIELIST_FAILED,\r\n FUTURE_MOVIES_REQUEST,\r\n FUTURE_MOVIES_SUCCESS,\r\n FUTURE_MOVIES_FAILED,\r\n SELECTED_MOVIE_CHANGED,\r\n SELECTED_SHOWTIME_CHANGED,\r\n TOGGLE_SORT,\r\n CHANGE_DATE,\r\n CHANGE_MONTH\r\n} from '../actions/movielist-actions'\r\n\r\nexport default function movies(state = {\r\n isFetching: false,\r\n organizerIds: '',\r\n organizers: [],\r\n movies: [],\r\n movieBases: [],\r\n futureMovies: [],\r\n showtimes: [],\r\n datesWithShowtimes: [],\r\n selectedOrganizer: {},\r\n selectedMovie: {},\r\n selectedShowtime: {},\r\n initialDate: moment().format('YYYY-MM-DD'),\r\n selectedDate: moment().format('YYYY-MM-DD'),\r\n selectedMonth: moment().month(),\r\n sort: CONSTANTS.sort.alphabet,\r\n backTo: ROUTES.PROGRAM,\r\n showBackInTime: false,\r\n error: null,\r\n filterId: null\r\n}, action) {\r\n switch (action.type) {\r\n case MOVIELIST_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n error: null\r\n }\r\n case MOVIELIST_SUCCESS:\r\n const dateTimeNow = moment();\r\n const initialDate = dateTimeNow.format('YYYY-MM-DD');\r\n const initialMonth = dateTimeNow.month();\r\n \r\n return {\r\n ...state,\r\n isFetching: false,\r\n lastUpdated: action.succeededAt,\r\n organizerIds: action.organizerIds,\r\n organizers: action.organizers,\r\n movies: action.movies,\r\n movieBases: action.movieBases,\r\n showtimes: action.showtimes,\r\n showtimeTypes: action.showtimeTypes,\r\n datesWithShowtimes: action.datesWithShowtimes,\r\n initialDate,\r\n initialMonth,\r\n selectedDate: action.selectedDate ? action.selectedDate : initialDate,\r\n selectedMonth: action.selectedDate ? moment(action.selectedDate).month() : initialMonth,\r\n sort: action.sort,\r\n showBackInTime: action.showBackInTime,\r\n backTo: action.backTo,\r\n filterId: action.filterId\r\n }\r\n case MOVIELIST_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case FUTURE_MOVIES_REQUEST:\r\n return {\r\n ...state,\r\n error: null\r\n }\r\n case FUTURE_MOVIES_SUCCESS:\r\n return {\r\n ...state,\r\n lastUpdated: action.succeededAt,\r\n futureMovies: action.futureMovies,\r\n error: null\r\n }\r\n case FUTURE_MOVIES_FAILED:\r\n return {\r\n ...state,\r\n error: action.error\r\n }\r\n case TOGGLE_SORT:\r\n return {\r\n ...state,\r\n sort: action.sort,\r\n }\r\n case CHANGE_DATE:\r\n return {\r\n ...state,\r\n selectedDate: action.selectedDate,\r\n }\r\n case CHANGE_MONTH:\r\n return {\r\n ...state,\r\n selectedMonth: action.selectedMonth,\r\n }\r\n case SELECTED_MOVIE_CHANGED:\r\n return {\r\n ...state,\r\n selectedMovie: action.movie,\r\n backTo: action.backTo && action.backTo !== state.backTo ? action.backTo : state.backTo\r\n }\r\n case SELECTED_SHOWTIME_CHANGED:\r\n return {\r\n ...state,\r\n selectedShowtime: action.selectedShowtime\r\n }\r\n default:\r\n return state\r\n }\r\n}","import {\r\n EVENTLIST_REQUEST,\r\n EVENTLIST_SUCCESS,\r\n EVENTLIST_FAILED,\r\n SELECTED_EVENT_CHANGED\r\n} from '../actions/ticketmaster-actions'\r\n\r\nexport default function ticketmaster(\r\n state = {\r\n isFetching: false,\r\n events: [],\r\n selectedEvent: {\r\n posters: {}\r\n },\r\n error: null\r\n }, action) {\r\n switch (action.type) {\r\n case EVENTLIST_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n error: null\r\n }\r\n case EVENTLIST_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n events: action.events\r\n }\r\n case EVENTLIST_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case SELECTED_EVENT_CHANGED:\r\n return {\r\n ...state,\r\n selectedEvent: action.selectedEvent\r\n }\r\n default:\r\n return state\r\n }\r\n}","import {\r\n EVENTLIST_REQUEST,\r\n EVENTLIST_SUCCESS,\r\n EVENTLIST_FAILED,\r\n SELECTED_EVENT_CHANGED\r\n} from '../actions/ticketmaster-actions'\r\n\r\nexport default function external(\r\n state = {\r\n isFetching: false,\r\n events: [],\r\n selectedEvent: null,\r\n error: null\r\n }, action) {\r\n switch (action.type) {\r\n case EVENTLIST_REQUEST:\r\n return {\r\n ...state,\r\n isFetching: true,\r\n error: null\r\n }\r\n case EVENTLIST_SUCCESS:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n events: action.events\r\n }\r\n case EVENTLIST_FAILED:\r\n return {\r\n ...state,\r\n isFetching: false,\r\n error: action.error\r\n }\r\n case SELECTED_EVENT_CHANGED:\r\n return {\r\n ...state,\r\n selectedEvent: action.selectedEvent\r\n }\r\n default:\r\n return state\r\n }\r\n}","export default function error(\r\n state = {\r\n code: null,\r\n type: null,\r\n message: null,\r\n close: null,\r\n show: true\r\n }, action) {\r\n\r\n if (!action.error) {\r\n return {\r\n ...state,\r\n code: null,\r\n type: null,\r\n message: null,\r\n close: null,\r\n show: null\r\n }\r\n }\r\n\r\n return {\r\n ...state,\r\n code: action.error.code,\r\n type: action.error.type,\r\n message: action.error.message,\r\n close: action.error.close,\r\n show: action.error.show == null ? true : action.error.show // default true, but can be set explicitly to false\r\n }\r\n\r\n return state;\r\n}","export default {\r\n da: {\r\n longDateTimeFormat: 'dddd [d.] LL [kl.] LT',\r\n shortDateTimeFormat: 'ddd [d.] DD/MM [kl.] LT',\r\n noMoviesText: 'Der er ingen film',\r\n noMoviesTodayText: 'Der er ingen forestillinger i dag',\r\n noMoreMoviesTodayText: 'Der er ikke flere forestillinger i dag',\r\n noMovieTypesTodayText: 'Der er ingen programlagte INSERT_TYPE forestillinger',\r\n noEventsText: 'Der er ingen arrangementer',\r\n readMore: 'Læs mere...',\r\n moreInfo: 'Mere info',\r\n moreShowtimes: 'Flere tider ❯',\r\n readMoreShowtimes: 'Læs mere og se alle tider ❯',\r\n buyTickets: 'Køb Billetter',\r\n\r\n movieInfo: 'Filminfo',\r\n allShowtimes: 'Alle spilletider',\r\n\r\n searchCircus: 'Søg dato eller by',\r\n today: 'I dag',\r\n shownFrom: 'Vises fra '\r\n },\r\n\r\n en: {\r\n longDateTimeFormat: 'dddd LL [at] LT',\r\n shortDateTimeFormat: 'ddd, DD/MM [at] LT',\r\n noMoviesText: 'There are no movies',\r\n noEventsText: 'There are no events',\r\n readMore: \"Read more...\",\r\n moreInfo: 'More info',\r\n moreShowtimes: \"More showtimes ❯\",\r\n readMoreShowtimes: \"Read more and all showtimes ❯\",\r\n buyTickets: 'Buy Tickets',\r\n\r\n movieInfo: 'Movie info',\r\n allShowtimes: 'All showtimes',\r\n\r\n searchCircus: 'Search date or city',\r\n today: 'Today',\r\n shownFrom: 'Shown from '\r\n }\r\n}","import _ from 'lodash'\r\nimport moment from 'moment'\r\nimport CONSTANTS from './movielist-constants'\r\n\r\nexport function setContainerClasses(listType, columns, isMultiBio) {\r\n let classes = `MovieListContainer ${listType}`;\r\n if (isMultiBio) classes += ' multibio';\r\n switch (columns) {\r\n case CONSTANTS.columns.one:\r\n return classes += ' one-column';\r\n case CONSTANTS.columns.two:\r\n return classes += ' two-columns';\r\n case CONSTANTS.columns.five:\r\n return classes += ' five-columns';\r\n case CONSTANTS.columns.six:\r\n return classes += ' six-columns';\r\n default: return classes;\r\n }\r\n}\r\n\r\nexport function setItemClasses(counter, columns) {\r\n let classes = 'MovieListItem';\r\n\r\n switch (columns) {\r\n case CONSTANTS.columns.six:\r\n return calculateRowPlacement(counter, classes += ' six-columns');\r\n case CONSTANTS.columns.five:\r\n return calculateRowPlacement(counter, classes += ' five-columns');\r\n case CONSTANTS.columns.two:\r\n return calculateRowPlacement(counter, classes += ' two-columns');\r\n case CONSTANTS.columns.one:\r\n return calculateRowPlacement(counter, classes += ' one-column');\r\n }\r\n\r\n function calculateRowPlacement(counter, rowClasses) {\r\n if (counter > 1) {\r\n for (let i = 2; i <= 7; i++) {\r\n if (counter % i == 0) rowClasses += ' first-in-row' + i;\r\n }\r\n }\r\n return rowClasses;\r\n }\r\n}\r\n\r\nexport function isInsideShowPeriod(showtime) {\r\n if (showtime.showInfo.enabled === true) {\r\n const from = moment(showtime.showInfo.start);\r\n const to = moment(showtime.showInfo.end);\r\n return moment().isBetween(from, to);\r\n } else return false;\r\n}\r\n\r\n// Aligns Showtimes for matrix layouts...\r\nexport function manipulateTitles(movielist, columns) {\r\n const titles = movielist.querySelectorAll('h1')\r\n let counter = 0\r\n while (counter < titles.length) {\r\n let tallestTitle = 45 // approx. min for 1 row\r\n\r\n const row = _.take(_.drop(titles, counter), columns)\r\n row.forEach((title) => {\r\n const titleHeight = Math.max(title.scrollHeight, title.offsetHeight, title.clientHeight)\r\n if (titleHeight > tallestTitle)\r\n tallestTitle = titleHeight\r\n })\r\n\r\n row.forEach((title) => title.style.height = tallestTitle + \"px\")\r\n counter += columns\r\n }\r\n}","export default {\r\n da: {\r\n backProgram: '❮ Program',\r\n backAll: '❮ Alle Film',\r\n backFuture: '❮ Kommende Film',\r\n backAllFuture: '❮ Fremtidige Film',\r\n\r\n originalTitle: 'Orig. titel: ',\r\n premiere: 'Premiere: ',\r\n length: 'Længde: ',\r\n age: 'Censur: ',\r\n genre: 'Genre: ',\r\n actor: 'Skuespiller: ',\r\n actors: 'Skuespillere: ',\r\n director: 'Instruktør: ',\r\n directors: 'Instruktører: '\r\n },\r\n\r\n en: {\r\n backProgram: '❮ Program',\r\n backAll: '❮ All Movies',\r\n backFuture: '❮ Future Movies',\r\n\r\n originalTitle: 'Orig. title: ',\r\n premiere: 'Premiere: ',\r\n length: 'Length: ',\r\n age: 'Censoring: ',\r\n genre: 'Genre: ',\r\n actor: 'Actor',\r\n actors: 'Actors: ',\r\n director: 'Director: ',\r\n directors: 'Directors: '\r\n }\r\n}","import React from 'react'\r\nimport moment from 'moment'\r\nimport _ from 'lodash'\r\nimport LOCALE from './MovieLocale'\r\n\r\nexport default class MovieInfo extends React.Component {\r\n render() {\r\n const { movie, appLocale, addClass } = this.props;\r\n const info = movie.info && !_.isObject(movie.info) ?

') }} /> : null;\r\n const descriptionLocale = movie.descriptions ? (movie.descriptions[appLocale] ? movie.descriptions[appLocale] : movie.descriptions['da']) : movie.description;\r\n const description = descriptionLocale ?

') }} /> : null;\r\n\r\n const movieNameLocale = movie.names ? (movie.names[appLocale] ? movie.names[appLocale] : movie.names['da']) : movie.name;\r\n const originalTitle = movieNameLocale && movie.originalName && movieNameLocale.substring(0, movie.originalName.length) !== movie.originalName ?\r\n

{LOCALE[appLocale].originalTitle}

: null;\r\n\r\n const isDefault = moment(movie.openingDate).isSame(moment('1600-01-01'), 'date');\r\n const premiere = movie.openingDate && !isDefault ?

{LOCALE[appLocale].premiere}

: null;\r\n const length = movie.length ?

{LOCALE[appLocale].length}

: null;\r\n const age = movie.ageCensoring ?

{LOCALE[appLocale].age}

: null;\r\n const genre = movie.genre ?

{LOCALE[appLocale].genre}

: null;\r\n const actors = movie.actors && movie.actors.length > 0 ?\r\n

{movie.actors.length > 1 ? LOCALE[appLocale].actors : LOCALE[appLocale].actor} \r\n

: null;\r\n\r\n const directors = movie.directors && movie.directors.length > 0 ?\r\n

{movie.directors.length > 1 ? LOCALE[appLocale].directors : LOCALE[appLocale].director} \r\n

: null;\r\n\r\n return (\r\n
\r\n {premiere}\r\n {info}\r\n {description}\r\n {originalTitle}\r\n {actors}\r\n {directors}\r\n {genre}\r\n {length}\r\n\r\n {age}\r\n
)\r\n }\r\n}","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\n\r\nclass ShowtimeType extends React.Component {\r\n\r\n render() {\r\n const { type, includeName, showtimeTypes } = this.props;\r\n const name = includeName ? type.name : '';\r\n const index = showtimeTypes ? _.findIndex(showtimeTypes, (showType) => { return type.id == showType.id }) : null;\r\n\r\n return (\r\n
\r\n {index + 1} {name}\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n showtimeTypes: state.movielist.showtimeTypes\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(ShowtimeType)","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { ROUTES } from '../navigation/route-constants'\r\nimport { isInsideShowPeriod } from '../movielists/shared'\r\nimport ShowtimeTypeIcon from '../showtime/ShowtimeType'\r\n\r\nclass Showtime extends React.Component {\r\n countDownFrom = 60;\r\n\r\n constructor(props) {\r\n super(props);\r\n const { showtime, showExpired } = props;\r\n const { hidden, opensAt } = this.checkForTimerScenarios(showtime, showExpired);\r\n\r\n this.state = {\r\n hidden,\r\n opensAt,\r\n minutes: null,\r\n seconds: null\r\n };\r\n\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n }\r\n\r\n checkForTimerScenarios(showtime, showExpired) {\r\n const dateTimeNow = moment();\r\n let opensAt = null;\r\n let hidden = !isInsideShowPeriod(showtime);\r\n if (showExpired && showtime.showInfo.enabled) hidden = false;\r\n\r\n if (hidden) {\r\n opensAt = moment(showtime.showInfo.start);\r\n this.setShowTimer(showtime);\r\n } else {\r\n const buyEnabled = showtime.buyInfo.enabled;\r\n const buyStart = moment(showtime.buyInfo.start).add(55, 'seconds');\r\n\r\n const reserveEnabled = showtime.reserveInfo.enabled;\r\n const reserveStart = moment(showtime.reserveInfo.start).add(55, 'seconds');\r\n\r\n if (buyEnabled && !reserveEnabled)\r\n opensAt = buyStart;\r\n else if (reserveEnabled && !buyEnabled)\r\n opensAt = reserveStart;\r\n else if (buyEnabled && reserveEnabled)\r\n opensAt = moment.min(buyStart, reserveStart);\r\n\r\n if (opensAt != null) {\r\n const isInFuture = opensAt > dateTimeNow;\r\n const isNotDefault = !opensAt.isSame('0001-01-01', 'day');\r\n if (isInFuture && isNotDefault) this.setCountDown(opensAt);\r\n else opensAt = null;\r\n }\r\n }\r\n\r\n return { hidden, opensAt };\r\n }\r\n\r\n\r\n setShowTimer(showtime) {\r\n const dateTime = moment(showtime.showInfo.start);\r\n const diff = dateTime.diff(moment());\r\n\r\n this.timeout = setTimeout(() => {\r\n // Checking again to see if we are allowed to show now or if we need to start the next timer\r\n const { hidden, opensAt } = this.checkForTimerScenarios(showtime);\r\n\r\n this.setState({\r\n hidden,\r\n opensAt,\r\n });\r\n }, diff);\r\n }\r\n\r\n setCountDown(opensAt) {\r\n this.countDown = setInterval(() => {\r\n const dateTimeNow = moment();\r\n const diff = opensAt.diff(dateTimeNow);\r\n const duration = moment.duration(diff);\r\n\r\n if (duration.asMinutes() <= this.countDownFrom) {\r\n const { minutes, seconds } = this.state;\r\n\r\n if (minutes === 0 && seconds === 0) {\r\n clearInterval(this.countDown);\r\n this.setState({\r\n opensAt: null,\r\n minutes: null,\r\n seconds: null\r\n });\r\n }\r\n else {\r\n this.setState({\r\n minutes: duration.minutes(),\r\n seconds: duration.seconds()\r\n });\r\n }\r\n }\r\n }, 1000);\r\n }\r\n\r\n componentWillUnmount() {\r\n clearInterval(this.countDown);\r\n clearTimeout(this.timer);\r\n }\r\n\r\n canReserveNow(dateTimeNow) {\r\n const { showtime } = this.props;\r\n const isInsidePeriod = dateTimeNow >= moment(showtime.reserveInfo.start) && dateTimeNow <= moment(showtime.reserveInfo.end);\r\n return showtime.reserveInfo.enabled && isInsidePeriod;\r\n }\r\n\r\n canBuyNow(dateTimeNow) {\r\n const { showtime } = this.props;\r\n const isInsidePeriod = dateTimeNow >= moment(showtime.buyInfo.start) && dateTimeNow <= moment(showtime.buyInfo.end);\r\n return showtime.buyInfo.enabled && isInsidePeriod;\r\n }\r\n\r\n showtimeClicked(e) {\r\n e.preventDefault();\r\n e.stopPropagation();\r\n const target = e.currentTarget;\r\n if (target.className.indexOf('disabled') === -1) {\r\n const dateTimeNow = moment();\r\n const isInFuture = moment(target.dataset.dateTime) > dateTimeNow && (this.canReserveNow(dateTimeNow) || this.canBuyNow(dateTimeNow));\r\n if (!isInFuture) target.className += ' disabled';\r\n else {\r\n const showtimeId = target.id;\r\n const organizerId = target.dataset.organizerId;\r\n this.props.showtimeClicked(organizerId, showtimeId);\r\n }\r\n }\r\n }\r\n\r\n generateCountdown(opensAt, dateTimeNow) {\r\n const { minutes, seconds } = this.state;\r\n\r\n let countdown = null\r\n if (opensAt != null && opensAt > dateTimeNow) {\r\n countdown = minutes == null && seconds == null ?
Aktiv d.{opensAt.format('DD/MM HH:mm')}
: null\r\n\r\n if (countdown == null)\r\n countdown = opensAt.isSame(dateTimeNow, 'day') ?\r\n
Aktiv om {minutes}:{seconds < 10 ? `0${seconds}` : seconds}
: null\r\n }\r\n return countdown\r\n }\r\n\r\n render() {\r\n const { hidden, opensAt } = this.state;\r\n const { showtime, text, showExpired, filterId } = this.props;\r\n const dateTimeNow = moment();\r\n const isInFuture = moment(showtime.dateTime) > dateTimeNow;\r\n\r\n let countdown = this.generateCountdown(opensAt, dateTimeNow);\r\n let classes = isInFuture && !countdown ? 'Showtime' : 'Showtime disabled';\r\n if (countdown == null) countdown = !showExpired && !isInFuture ?
Lukket
: null;\r\n\r\n const type = !filterId && showtime.type ? : null;\r\n if (countdown) classes += ' has-count-down';\r\n\r\n return hidden ? Tid vises d.{opensAt.format('DD/MM HH:mm')} :\r\n \r\n {type} {text}\r\n {countdown}\r\n \r\n }\r\n}\r\n\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n filterId: state.movielist.filterId\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(Showtime)","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport { AGE_CENSORS } from '../../api/api-constants'\r\n\r\nclass Poster extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = { showFullScreenPoster: false }\r\n this.toggleFullScreen = this.toggleFullScreen.bind(this);\r\n }\r\n\r\n toggleFullScreen() {\r\n if (this.state.showFullScreenPoster) this.setState({ showFullScreenPoster: false });\r\n else this.setState({ showFullScreenPoster: true });\r\n }\r\n\r\n render() {\r\n const { movie, config } = this.props;\r\n const { showFullScreenPoster } = this.state;\r\n const posters = movie.posters;\r\n const posterBanners = config.posterBanners;\r\n\r\n const threeDBanner = !showFullScreenPoster && posterBanners.show3D && movie.is3D ?
3D
: null;\r\n const atmosBanner = !showFullScreenPoster && posterBanners.showAtmos && movie.isAtmos ?
ATMOS
: null;\r\n const ageCensor = movie.ageCensoring ? _.find(config.ageCensorIcons, (icon) => { return movie.ageCensoring.includes(icon.id) }) : null;\r\n const ageBanner = !showFullScreenPoster && ageCensor ?
: null;\r\n\r\n const poster = posters.large || posters.small;\r\n const fullScreenPoster = posters.hd || posters.large;\r\n const image = poster ? : null;\r\n const posterClasses = fullScreenPoster && showFullScreenPoster ? 'Poster fullscreen' : 'Poster';\r\n\r\n return (\r\n
\r\n {image}\r\n {threeDBanner}\r\n {atmosBanner}\r\n {ageBanner}\r\n
)\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n\r\n return {\r\n config\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(Poster)","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport ShowtimeType from './ShowtimeType'\r\n\r\nclass ShowtimeTypeList extends React.Component {\r\n\r\n render() {\r\n const { types } = this.props;\r\n\r\n return (\r\n
\r\n
\r\n {_.map(types, (type) => {\r\n return

;\r\n })}\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n showtimeTypes: state.movielist.showtimeTypes\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(ShowtimeTypeList)","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport { isInsideShowPeriod } from '../shared'\r\nimport MovieInfo from '../../movie/MovieInfo'\r\nimport Showtime from '../../showtime/Showtime'\r\nimport Poster from '../../movie/Poster'\r\nimport ShowtimeTypeList from '../../showtime/ShowtimeTypeList'\r\n\r\nexport default class AllMoviesListItem extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n maxDateCount: 2,\r\n showMovieInfo: false\r\n }\r\n this.movieClicked = this.movieClicked.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevState.showMovieInfo != this.state.showMovieInfo) {\r\n const { appHeightChanged } = this.props;\r\n setTimeout(() => { appHeightChanged() }, 500); //Workaround for the duration it takes the DOM to rerender with the expanded element so we get the right height...\r\n }\r\n }\r\n\r\n movieClicked(e) {\r\n const { showMovieInfo } = this.state;\r\n const { columns, movieClicked } = this.props;\r\n const dataset = e.target.dataset;\r\n e.preventDefault();\r\n\r\n if (columns == CONSTANTS.columns.one && dataset.toggleMovieInfo) {\r\n if (showMovieInfo == false) this.setState({ showMovieInfo: true });\r\n else this.setState({ showMovieInfo: false });\r\n } else {\r\n const movieId = e.currentTarget.id || dataset.movieId;\r\n if (e.target.tagName == 'IMG' || e.target.tagName == 'H1' || e.target.tagName == 'INPUT' || _.includes(e.target.classList, 'poster-banner'))\r\n movieClicked(movieId);\r\n }\r\n }\r\n\r\n generateShowtimes() {\r\n const { movie } = this.props;\r\n const showtimesByDate = _.groupBy(movie.validShowtimes, (showtime) => { return moment(showtime.dateTime).format('ddd DD/MM'); });\r\n const showtimesPerDate = this.generateShowtimesPerDate(showtimesByDate);\r\n return { showtimesPerDate };\r\n }\r\n\r\n showtimeTypes = [];\r\n generateShowtimesPerDate(showtimesByDate) {\r\n const { maxDateCount } = this.state;\r\n const { showLocationOnShowtime, showtimeClicked, columns, showAsBase, showExpired } = this.props;\r\n const showtimesPerDate = [];\r\n let counter = 0;\r\n\r\n _.forOwn(showtimesByDate, (showtimes, dateKey) => {\r\n if (counter < maxDateCount) {\r\n showtimesPerDate.push(
\r\n
{_.capitalize(dateKey)}
\r\n\r\n {_.map(showtimes, (showtime) => {\r\n if (showtime.type && !_.find(this.showtimeTypes, showtime.type)) this.showtimeTypes.push(showtime.type);\r\n\r\n const dateTime = moment(showtime.dateTime);\r\n return
\r\n {columns == CONSTANTS.columns.one || showLocationOnShowtime ?
{showtime.locationName}
: ''}\r\n \r\n\r\n {isInsideShowPeriod && columns == CONSTANTS.columns.one ?
\r\n
{showtime.type ? showtime.type.name : ''} {showAsBase ? showtime.movieBaseShowName : null}
\r\n
: null}\r\n {columns == CONSTANTS.columns.one ?
{showtime.info}
: null}\r\n
\r\n })}\r\n
);\r\n counter++;\r\n } else return false;\r\n })\r\n\r\n return showtimesPerDate;\r\n }\r\n\r\n render() {\r\n const { maxDateCount, showMovieInfo } = this.state;\r\n const { movie, rowClasses, appLocale, showAsBase, columns, organizerIds, filterId } = this.props;\r\n\r\n const poster = movie.posters ?\r\n \r\n : null;\r\n\r\n const movieNameLocale = movie.names ? (movie.names[appLocale] ? movie.names[appLocale] : movie.names['da']) : movie.name;\r\n\r\n const showtimesByDate = _.groupBy(movie.validShowtimes, (showtime) => { return moment(showtime.dateTime).format('ddd DD/MM'); });\r\n const showtimesPerDate = this.generateShowtimesPerDate(showtimesByDate);\r\n\r\n const moreButton = columns !== CONSTANTS.columns.one && _.keys(showtimesByDate).length > maxDateCount ?\r\n
:
;\r\n\r\n return (\r\n
\r\n {poster}\r\n\r\n
\r\n \r\n

{showAsBase ? movie.name : movieNameLocale}

\r\n
{showtimesPerDate}
\r\n {!filterId && this.showtimeTypes.length > 0 ? : null}\r\n {moreButton}\r\n\r\n {columns === CONSTANTS.columns.one ?
\r\n \r\n \r\n\r\n {columns === CONSTANTS.columns.one ? : null}\r\n
: null}\r\n
\r\n
\r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport { setItemClasses } from '../shared'\r\nimport AllMoviesListItem from './AllMoviesListItem'\r\n\r\nexport default class AllMovieList extends React.Component {\r\n generateMovieListItems(movies) {\r\n const { posterBanners, appLocale, movieClicked, showtimeClicked, columns, showLocationOnShowtime, showAsBase, appHeightChanged, organizerIds, showExpired, filterId } = this.props;\r\n let sortedMovies = this.sortMovies(movies);\r\n let movieItems = [];\r\n let counter = 0;\r\n\r\n _.forEach(sortedMovies, (movie) => {\r\n let rowClasses = setItemClasses(counter, columns);\r\n\r\n movieItems.push();\r\n\r\n counter++;\r\n });\r\n\r\n return movieItems;\r\n }\r\n\r\n sortMovies(movies) {\r\n const { sortBy, showtimes, showAsBase, selectedDate, removeToday, showExpired } = this.props;\r\n\r\n let sortedMovies = [];\r\n _.forEach(movies, (movie) => {\r\n let removeFromList = [];\r\n\r\n movie.validShowtimes = _.filter(showtimes, (showtime) => {\r\n if ((showtime.movieId == movie.id || (showAsBase && showtime.movieBaseId > 0 && showtime.movieBaseId == movie.baseId))) {\r\n const datetime = moment(showtime.dateTime);\r\n const now = moment();\r\n const isInFuture = datetime > now;\r\n\r\n const formattedDate = datetime.format('YYYY-MM-DD');\r\n const isToday = removeToday && formattedDate === selectedDate;\r\n if (isToday && datetime.isAfter(now)) removeFromList.push(movie.id);\r\n\r\n if (showtime.showInfo.enabled !== true || isToday) return false;\r\n else return sortBy == CONSTANTS.sort.alphabet || sortBy == CONSTANTS.sort.time && showExpired || sortBy == CONSTANTS.sort.time && isInFuture\r\n }\r\n });\r\n\r\n if (!_.includes(removeFromList, movie.id) && movie.validShowtimes.length > 0) {\r\n movie.validShowtimes = _.sortBy(movie.validShowtimes, ['dateTime']);\r\n sortedMovies.push(movie);\r\n }\r\n });\r\n\r\n if (sortBy === CONSTANTS.sort.alphabet) sortedMovies = _.sortBy(sortedMovies, ['name']);\r\n else if (sortBy === CONSTANTS.sort.time)\r\n sortedMovies.sort((a, b) => { return moment(a.validShowtimes[0].dateTime) - moment(b.validShowtimes[0].dateTime); });\r\n\r\n return sortedMovies;\r\n }\r\n\r\n render() {\r\n const { movies, appLocale } = this.props;\r\n const movieListItems = this.generateMovieListItems(movies);\r\n\r\n return (\r\n
\r\n {movieListItems.length > 0 ? movieListItems :

{LOCALE[appLocale].noMoviesText}

}\r\n
)\r\n }\r\n}","import '../css/movielists.scss'\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport { getParams } from '../../../utilities/location-utilities'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport { getMovieList, selectedMovieChanged, changeSelectedShowtime } from '../../../actions/movielist-actions'\r\nimport AllMoviesList from './AllMoviesList'\r\nimport { manipulateTitles, setContainerClasses } from '../shared'\r\n\r\nclass AllMoviesListContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.movieClicked = this.movieClicked.bind(this);\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, movies, organizerIds, iframeId } = this.props;\r\n if (movies.length == 0) actions.getMovieList(organizerIds);\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n\r\n this.manipulateTitles();\r\n }\r\n\r\n componentDidUpdate() {\r\n this.manipulateTitles();\r\n }\r\n\r\n manipulateTitles() {\r\n const { columns, listType } = this.props\r\n if (columns != CONSTANTS.columns.one) {\r\n const movielist = document.querySelector(`.MovieListContainer.${listType}`)\r\n manipulateTitles(movielist, columns);\r\n }\r\n }\r\n\r\n movieClicked(id) {\r\n const { organizerIds, actions, history, movies } = this.props;\r\n const movie = _.find(movies, (movie) => { return movie.id == id });\r\n actions.selectedMovieChanged(movie.id, history.location.pathname).then(() => history.push(`${ROUTES.MOVIE}/${id}?org=${organizerIds}`));\r\n }\r\n\r\n showtimeClicked(organizerId, showtimeId) {\r\n const { openOrderInNewWindow, actions, history, showtimes } = this.props;\r\n const showtime = _.find(showtimes, (showtime) => { return showtime.id == showtimeId && showtime.organizerId == organizerId });\r\n if (showtime) {\r\n actions.changeSelectedShowtime(showtime, history.location.pathname).then(() => {\r\n const orderUrl = `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${showtime.organizerId}`;\r\n if (openOrderInNewWindow) window.open(orderUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes');\r\n else history.push(orderUrl);\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const { appLocale, listType, pageHeader, movies, showAsBase, showtimes, posterBanners, columns, showLocationOnShowtime, actions, organizerIds, sortBy, selectedDate, removeToday, showExpired, filterId } = this.props;\r\n const header = pageHeader ?
: null;\r\n let classes = setContainerClasses(listType, columns);\r\n\r\n return (\r\n
\r\n
{header}
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n const listConfig = config.movielists;\r\n\r\n let movies = listConfig.all.base ? extractMoviesAsBases(state.movielist.movies) : state.movielist.movies;\r\n let showAsBase = listConfig.all.base;\r\n const listType = ownProps.listType || CONSTANTS.listTypes.all;\r\n let pageHeader = listType == CONSTANTS.listTypes.allFuture ? config.pageHeaders.allFutureMovies : config.pageHeaders.allMovies;\r\n\r\n function extractMoviesAsBases(movies) {\r\n const moviesBases = state.movielist.movieBases;\r\n const moviesAsBase = [];\r\n _.each(movies, (movie) => {\r\n if (movie.baseId) {\r\n const baseMovie = _.find(moviesBases, (base) => { return base.id == movie.baseId; });\r\n const alreadyInList = _.some(moviesAsBase, ['baseId', movie.baseId]);\r\n if (baseMovie && !alreadyInList) moviesAsBase.push({ ...movie, name: baseMovie.name, posters: baseMovie.posters });\r\n } else moviesAsBase.push(movie);\r\n });\r\n return moviesAsBase;\r\n }\r\n\r\n return {\r\n organizerIds: state.movielist.organizerIds || getParams().org,\r\n pageHeader,\r\n listType,\r\n movies,\r\n showAsBase,\r\n columns: listConfig.all.columns,\r\n sortBy: listConfig.all.sort,\r\n showtimes: state.movielist.showtimes,\r\n posterBanners: config.posterBanners,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n showLocationOnShowtime: config.showLocationOnShowtime,\r\n selectedDate: state.movielist.selectedDate,\r\n iframeId: state.app.iframeId,\r\n removeToday: listType == CONSTANTS.listTypes.allFuture || getParams().removetoday == \"true\",\r\n showExpired: config.movielists.all.showExpired,\r\n filterId: state.movielist.filterId,\r\n listType\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getMovieList, selectedMovieChanged, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AllMoviesListContainer)","import React from 'react'\r\nimport _ from 'lodash'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { languageChanged } from '../../actions/app-actions'\r\n\r\nclass LanguagePicker extends React.Component {\r\n constructor() {\r\n super();\r\n this.languageChanged = this.languageChanged.bind(this);\r\n }\r\n\r\n languageChanged(e) {\r\n const locale = e.currentTarget.id;\r\n const { actions } = this.props;\r\n actions.languageChanged(locale);\r\n }\r\n\r\n render() {\r\n const { appLocale, availableLocales } = this.props;\r\n return (\r\n
\r\n {_.map(availableLocales, (locale) => {\r\n const selected = appLocale == locale.id;\r\n if (!selected)\r\n return
\r\n \r\n
\r\n })}\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n availableLocales: state.organizer.configuration.availableLocales,\r\n appLocale: state.app.locale\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators({ languageChanged }, dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(LanguagePicker)","import React from 'react'\r\nimport moment from 'moment'\r\nimport _ from 'lodash'\r\n\r\nexport default class DayNavigator extends React.Component {\r\n\r\n constructor() {\r\n super();\r\n this.nextDay = this.nextDay.bind(this);\r\n this.previousDay = this.previousDay.bind(this);\r\n }\r\n\r\n nextDay() {\r\n const { datesWithShowtimes, selectedDate, changeDate } = this.props;\r\n const nextDateTime = datesWithShowtimes[datesWithShowtimes.indexOf(selectedDate) + 1];\r\n if (nextDateTime) changeDate(nextDateTime);\r\n\r\n }\r\n\r\n previousDay() {\r\n const { datesWithShowtimes, selectedDate, changeDate, initialDate } = this.props;\r\n const previousDateTime = datesWithShowtimes[datesWithShowtimes.indexOf(selectedDate) - 1] || initialDate;\r\n if (previousDateTime) changeDate(previousDateTime);\r\n }\r\n\r\n render() {\r\n const { toggleCalendar, datesWithShowtimes, selectedDate, showCalendar } = this.props;\r\n let previousDate = null;\r\n let nextDate = null;\r\n let dateDisplay =
Vælg dato
;\r\n \r\n if (selectedDate) {\r\n if (!showCalendar) {\r\n previousDate = datesWithShowtimes.indexOf(selectedDate) - 1 > -1 ?\r\n : ;\r\n\r\n nextDate = datesWithShowtimes.indexOf(selectedDate) < datesWithShowtimes.length - 1 ?\r\n : ;\r\n }\r\n\r\n const date = moment(selectedDate);\r\n\r\n dateDisplay =
\r\n \r\n {_.capitalize(date.format('dddd'))},{_.capitalize(date.format('ddd'))},\r\n {date.format('D.')}\r\n {date.format('MMMM')}\r\n {date.format('MMM')}\r\n {date.format('YYYY')}\r\n
;\r\n }\r\n\r\n return (\r\n
\r\n {previousDate}\r\n {dateDisplay}\r\n {nextDate}\r\n
\r\n );\r\n }\r\n}","export default {\r\n da: {\r\n pickDate: \"Vælg dato\",\r\n weekdays: ['Søndag', 'Mandag', 'Tirsdag', 'Onsdag', 'Torsdag', 'Fredag', 'Lørdag'],\r\n weekdaysShort: ['Søn', 'Man', 'Tirs', 'Ons', 'Tors', 'Fre', 'Lør'],\r\n months: ['Januar', 'Februar', 'Marts', 'April', 'Maj', 'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'December'],\r\n sortByAlphabet: 'Sortér alfabetisk på titel',\r\n sortByTime: 'Sortér efter fremtidige spilletider',\r\n goToAllMovies: 'Gå til alle film',\r\n today: 'I dag',\r\n tomorrow: 'I morgen'\r\n },\r\n\r\n en: {\r\n pickDate: \"Pick a date\",\r\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\r\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\r\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'Juli', 'August', 'September', 'October', 'November', 'December'],\r\n sortByAlphabet: 'Sort by alphabet',\r\n sortByTime: 'Sort by showtime',\r\n goToAllMovies: 'Go to all movies',\r\n today: 'Today',\r\n tomorrow: 'Tomorrow'\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport LOCALE from './DatePickerLocale'\r\n\r\nexport default class WeekDayPicker extends React.Component {\r\n maxDays = 5;\r\n\r\n extractWeekDays() {\r\n const { selectedDate, changeDate, isAllMovies, datesWithShowtimes } = this.props;\r\n const weekDays = [];\r\n const short = window.outerWidth < 800;\r\n\r\n for (var i = 2; i < _.take(datesWithShowtimes, this.maxDays).length; i++) {\r\n const weekDay = moment().add(i, 'days');\r\n if (weekDays.length <= this.maxDays && _.includes(datesWithShowtimes, weekDay.format('YYYY-MM-DD'))) {\r\n weekDays.push(
{_.capitalize(short ? weekDay.format('ddd DD/MM') : weekDay.format('dddd DD/MM'))}
);\r\n }\r\n }\r\n return weekDays;\r\n }\r\n\r\n render() {\r\n const { appLocale, selectedDate, changeDate, isAllMovies, datesWithShowtimes } = this.props;\r\n const weekDays = this.extractWeekDays();\r\n const today = moment();\r\n const tomorrow = moment().add(1, 'days');\r\n\r\n return (\r\n
\r\n {_.includes(datesWithShowtimes, today.format('YYYY-MM-DD')) ?
\r\n {LOCALE[appLocale].today}\r\n
: null}\r\n\r\n {_.includes(datesWithShowtimes, tomorrow.format('YYYY-MM-DD')) ?
{LOCALE[appLocale].tomorrow}
: null}\r\n\r\n {weekDays}\r\n
\r\n );\r\n }\r\n}","import React from 'react'\r\nimport moment from 'moment'\r\nimport DayPicker from 'react-day-picker';\r\nimport _ from 'lodash'\r\nimport LOCALE from './DatePickerLocale'\r\n\r\nexport default class Calendar extends React.Component {\r\n\r\n constructor() {\r\n super();\r\n this.handleDayClick = this.handleDayClick.bind(this);\r\n this.disabledDays = this.disabledDays.bind(this);\r\n }\r\n\r\n handleDayClick(datetime, _ref) {\r\n const { toggleCalendar, changeDate } = this.props;\r\n const disabled = _ref.disabled;\r\n if (!disabled) {\r\n toggleCalendar();\r\n const date = moment(datetime).format('YYYY-MM-DD');\r\n changeDate(date);\r\n }\r\n }\r\n\r\n disabledDays(dateTime) {\r\n const { datesWithShowtimes } = this.props;\r\n const day = moment(dateTime).format('YYYY-MM-DD');\r\n const dayHasShowtime = _.indexOf(datesWithShowtimes, day) != -1;\r\n if (!dayHasShowtime) return day;\r\n }\r\n\r\n render() {\r\n const { datesWithShowtimes, selectedDate, showCalendar, appLocale, toggleCalendar, calendarText } = this.props;\r\n const lastDate = moment(_.last(datesWithShowtimes)).toDate();\r\n const firstDate = moment(_.first(datesWithShowtimes)).toDate();\r\n const selected = selectedDate ? moment(selectedDate).toDate() : null;\r\n\r\n return (\r\n
\r\n \r\n \r\n {calendarText ?

: null}\r\n
\r\n );\r\n }\r\n}","import './datepicker.scss'\r\nimport './daypicker.scss'\r\n\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport { SITE_TYPES } from '../../api/api-constants'\r\nimport LanguagePicker from '../languagepicker/LanguagePicker';\r\nimport DayNavigator from './DayNavigator'\r\nimport WeekDayPicker from './WeekDayPicker'\r\nimport Calendar from './Calendar'\r\n\r\nclass DatePickerContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = { showCalendar: false }\r\n this.toggleCalendar = this.toggleCalendar.bind(this);\r\n this.changeDate = this.changeDate.bind(this);\r\n }\r\n\r\n toggleCalendar() {\r\n const showCalendar = this.state.showCalendar ? false : true;\r\n this.setState({ showCalendar });\r\n }\r\n\r\n changeDate(e) {\r\n const date = e.currentTarget.id;\r\n const { showCalendar } = this.state;\r\n const { changeDate } = this.props;\r\n if (showCalendar) this.toggleCalendar();\r\n changeDate(date);\r\n }\r\n\r\n render() {\r\n const { showAsWeekButtons, hasListHeader, isAllMovies, datesWithShowtimes, selectedDate, initialDate, appLocale, availableLocales, changeDate, calendarText } = this.props;\r\n const { showCalendar } = this.state;\r\n\r\n let datePickerClasses = showCalendar ? 'DatePicker calendar-open' : 'DatePicker';\r\n if (showAsWeekButtons) datePickerClasses += ' show-as-week-buttons';\r\n if (hasListHeader) datePickerClasses += ' list-header-active';\r\n\r\n return (\r\n
\r\n {!showAsWeekButtons && availableLocales.length > 1 ? : null}\r\n\r\n {!showAsWeekButtons ?\r\n : null}\r\n\r\n {showAsWeekButtons ? : null}\r\n\r\n {availableLocales.length > 1 ? : null}\r\n\r\n
\r\n {showAsWeekButtons ?
Flere datoer
: null}\r\n\r\n \r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n const siteType = state.app.siteType;\r\n return {\r\n organizerId: state.organizer.id,\r\n initialDate: state.movielist.initialDate,\r\n selectedDate: state.movielist.selectedDate,\r\n datesWithShowtimes: state.movielist.datesWithShowtimes,\r\n appLocale: state.app.locale,\r\n availableLocales: config.availableLocales,\r\n calendarText: config.calendarText,\r\n siteType,\r\n showAsWeekButtons: config.movielists.date.showAsWeekButtons || ownProps.isOneColumn && siteType == SITE_TYPES.UMBRACO\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, {}), dispatch)\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(DatePickerContainer))","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport { isInsideShowPeriod } from '../shared'\r\nimport MovieInfo from '../../movie/MovieInfo'\r\nimport Showtime from '../../showtime/Showtime'\r\nimport Poster from '../../movie/Poster'\r\nimport ShowtimeTypeList from '../../showtime/ShowtimeTypeList'\r\n\r\nexport default class ProgramListItem extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { showMovieInfo: false }\r\n this.movieClicked = this.movieClicked.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevState.showMovieInfo != this.state.showMovieInfo) {\r\n const { appHeightChanged } = this.props;\r\n setTimeout(() => { appHeightChanged() }, 500); //Workaround for the duration it takes the DOM to rerender with the expanded element so we get the right height...\r\n }\r\n }\r\n\r\n movieClicked(e) {\r\n const { showMovieInfo } = this.state;\r\n const { columns, movieClicked } = this.props;\r\n const dataset = e.target.dataset;\r\n e.preventDefault();\r\n\r\n if (columns == CONSTANTS.columns.one && dataset.toggleMovieInfo) {\r\n if (showMovieInfo == false) this.setState({ showMovieInfo: true });\r\n else this.setState({ showMovieInfo: false });\r\n } else {\r\n const movieId = e.currentTarget.id || dataset.movieId;\r\n if (e.target.tagName == 'IMG' || e.target.tagName == 'H1' || e.target.tagName == 'INPUT' || _.includes(e.target.classList, 'poster-banner'))\r\n movieClicked(movieId);\r\n }\r\n }\r\n\r\n showtimeTypes = [];\r\n generateShowtimesOnDate() {\r\n const { movie, showLocationOnShowtime, showtimeClicked, columns, showAsBase, showExpired } = this.props;\r\n this.showtimeTypes = []; //reset it so types don't bleed into dates where they don't apply.\r\n\r\n return
\r\n {_.map(movie.validShowtimes, (showtime) => {\r\n if (showtime.type && !_.find(this.showtimeTypes, showtime.type)) this.showtimeTypes.push(showtime.type);\r\n\r\n const dateTime = moment(showtime.dateTime);\r\n return
\r\n
\r\n {columns == CONSTANTS.columns.one && showLocationOnShowtime ?
{showtime.locationName}
: ''}\r\n \r\n {isInsideShowPeriod && columns == CONSTANTS.columns.one ?
\r\n
{showtime.type ? showtime.type.name : ''} {showAsBase ? showtime.movieBaseShowName : null}
\r\n
: null}\r\n
\r\n {columns == CONSTANTS.columns.one ?
{showtime.info}
: null}\r\n
\r\n })}\r\n
\r\n }\r\n\r\n render() {\r\n const { showMovieInfo } = this.state;\r\n const { movie, rowClasses, appLocale, showAsBase, columns, organizerIds, filterId } = this.props;\r\n\r\n const poster = movie.posters ?\r\n \r\n : null;\r\n\r\n const movieNameLocale = movie.names ? (movie.names[appLocale] ? movie.names[appLocale] : movie.names['da']) : movie.name;\r\n\r\n return (\r\n
\r\n {poster}\r\n
\r\n

{showAsBase ? movie.name : movieNameLocale}

\r\n
{this.generateShowtimesOnDate()}
\r\n {!filterId && this.showtimeTypes.length > 0 ? : null}\r\n\r\n {columns === CONSTANTS.columns.one ?
\r\n \r\n \r\n\r\n {columns === CONSTANTS.columns.one ? : null}\r\n
: null}\r\n
\r\n
\r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { FILTER_TEXTS } from '../../../api/api-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport ProgramListItem from './ProgramListItem'\r\nimport { setItemClasses } from '../shared'\r\n\r\nexport default class ProgramList extends React.Component {\r\n generateMovieListItems(movies) {\r\n const { posterBanners, appLocale, movieClicked, showtimeClicked, columns, showLocationOnShowtime, showAsBase, appHeightChanged, organizerIds, showExpired, filterId } = this.props;\r\n let sortedMovies = this.sortMovies(movies);\r\n let movieItems = [];\r\n let counter = 0;\r\n\r\n _.forEach(sortedMovies, (movie) => {\r\n let rowClasses = setItemClasses(counter, columns);\r\n\r\n movieItems.push();\r\n\r\n counter++;\r\n });\r\n\r\n return movieItems;\r\n }\r\n\r\n noMoviesText = null;\r\n sortMovies(movies) {\r\n const { sortBy, showtimes, selectedDate, showBackInTime, showAsBase, showExpired, appLocale } = this.props;\r\n\r\n let sortedMovies = [];\r\n _.forEach(movies, (movie) => {\r\n movie.validShowtimes = _.filter(showtimes, (showtime) => {\r\n if ((showtime.movieId == movie.id || (showAsBase && showtime.movieBaseId > 0 && showtime.movieBaseId == movie.baseId))) {\r\n const datetime = moment(showtime.dateTime);\r\n const isInFuture = datetime > moment() || showBackInTime;\r\n\r\n if (showtime.showInfo.enabled !== true) return false;\r\n\r\n const formattedDate = datetime.format('YYYY-MM-DD');\r\n const isOnDate = formattedDate === selectedDate;\r\n if (this.noMoviesText == null && isOnDate) this.noMoviesText = LOCALE[appLocale].noMoreMoviesTodayText;\r\n\r\n return (sortBy == CONSTANTS.sort.alphabet || sortBy == CONSTANTS.sort.time && showExpired || sortBy == CONSTANTS.sort.time && isInFuture) && isOnDate;\r\n }\r\n });\r\n\r\n if (movie.validShowtimes.length > 0) {\r\n movie.validShowtimes = _.sortBy(movie.validShowtimes, ['dateTime']);\r\n sortedMovies.push(movie);\r\n }\r\n });\r\n\r\n if (sortBy === CONSTANTS.sort.alphabet) sortedMovies = _.sortBy(sortedMovies, ['name']);\r\n else if (sortBy === CONSTANTS.sort.time)\r\n sortedMovies.sort((a, b) => { return moment(a.validShowtimes[0].dateTime) - moment(b.validShowtimes[0].dateTime); });\r\n\r\n return sortedMovies;\r\n }\r\n\r\n render() {\r\n const { movies, appLocale, filterId } = this.props;\r\n const movieListItems = this.generateMovieListItems(movies);\r\n const noMoviesText = this.noMoviesText ? this.noMoviesText :\r\n (filterId ? LOCALE[appLocale].noMovieTypesTodayText.replace('INSERT_TYPE', FILTER_TEXTS[filterId]) : LOCALE[appLocale].noMoviesTodayText)\r\n\r\n return (\r\n
\r\n {movieListItems.length > 0 ? movieListItems :

{noMoviesText}

}\r\n
)\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\n\r\nexport default class MonthNavigator extends React.Component {\r\n\r\n constructor() {\r\n super();\r\n this.nextMonth = this.nextMonth.bind(this);\r\n this.previousMonth = this.previousMonth.bind(this);\r\n }\r\n\r\n nextMonth() {\r\n const { monthsWithShowtimes, selectedMonth, changeMonth } = this.props;\r\n const nextMonth = monthsWithShowtimes[monthsWithShowtimes.indexOf(selectedMonth) + 1];\r\n if (nextMonth != -1) changeMonth(nextMonth);\r\n }\r\n\r\n previousMonth() {\r\n const { monthsWithShowtimes, selectedMonth, changeMonth } = this.props;\r\n const previousMonth = monthsWithShowtimes[monthsWithShowtimes.indexOf(selectedMonth) - 1];\r\n if (previousMonth != -1) changeMonth(previousMonth);\r\n }\r\n\r\n render() {\r\n const { selectedMonth, monthsWithShowtimes, stickNavToTop } = this.props;\r\n let previousMonth = null;\r\n let monthDisplay = null;\r\n let nextMonth = null;\r\n\r\n previousMonth = monthsWithShowtimes.indexOf(selectedMonth) - 1 > -1 ?\r\n : ;\r\n\r\n nextMonth = monthsWithShowtimes.indexOf(selectedMonth) < monthsWithShowtimes.length - 1 ?\r\n : ;\r\n\r\n const month = _.capitalize(moment.months()[selectedMonth]);\r\n const shortMonth = _.capitalize(moment.monthsShort()[selectedMonth]);\r\n\r\n monthDisplay =
{month}{shortMonth}
;\r\n\r\n return (\r\n
\r\n {previousMonth}\r\n {monthDisplay}\r\n {nextMonth}\r\n
\r\n );\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport Showtime from '../../showtime/Showtime'\r\nimport Poster from '../../movie/Poster'\r\nimport ShowtimeTypeList from '../../showtime/ShowtimeTypeList'\r\n\r\nexport default class SpecialEventsListItem extends React.Component {\r\n constructor() {\r\n super();\r\n this.movieClicked = this.movieClicked.bind(this);\r\n }\r\n\r\n movieClicked(e) {\r\n const { movieClicked } = this.props;\r\n const dataset = e.target.dataset;\r\n e.preventDefault();\r\n\r\n const movieId = e.currentTarget.id || dataset.movieId;\r\n if (e.target.tagName == 'IMG' || e.target.tagName == 'H1' || e.target.tagName == 'INPUT' || _.includes(e.target.classList, 'poster-banner'))\r\n movieClicked(movieId);\r\n }\r\n\r\n showtimeTypes = [];\r\n generateShowtimesInMonth() {\r\n const { movie, showtimeClicked, appLocale } = this.props;\r\n this.showtimeTypes = []; //reset it so types don't bleed into months where they don't apply.\r\n\r\n return
\r\n {_.map(movie.validShowtimes, (showtime) => {\r\n if (showtime.type && !_.find(this.showtimeTypes, showtime.type)) this.showtimeTypes.push(showtime.type);\r\n\r\n const dateTime = moment(showtime.dateTime);\r\n return
\r\n {_.capitalize(dateTime.format(LOCALE[appLocale].shortDateTimeFormat))}\r\n\r\n \r\n
;\r\n })}\r\n
\r\n }\r\n\r\n render() {\r\n const { movie, rowClasses, appLocale, organizerIds, filterId } = this.props;\r\n\r\n const poster = movie.posters ?\r\n \r\n : null;\r\n\r\n const movieNameLocale = movie.names ? (movie.names[appLocale] ? movie.names[appLocale] : movie.names['da']) : movie.name;\r\n\r\n return (\r\n
\r\n {poster}\r\n
\r\n

{movieNameLocale}

\r\n
{this.generateShowtimesInMonth()}
\r\n {!filterId && this.showtimeTypes.length > 0 ? : null}\r\n
\r\n
\r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport { setItemClasses } from '../shared'\r\nimport SpecialEventListItem from './SpecialEventsListItem'\r\n\r\nexport default class SpecialEventsList extends React.Component {\r\n generateMovieListItems(movies) {\r\n const { posterBanners, appLocale, movieClicked, showtimeClicked, organizerIds, columns } = this.props;\r\n let sortedMovies = this.sortMovies(movies);\r\n let movieItems = [];\r\n let counter = 0;\r\n\r\n _.forEach(sortedMovies, (movie) => {\r\n let rowClasses = setItemClasses(counter, columns);\r\n\r\n movieItems.push();\r\n\r\n counter++;\r\n });\r\n\r\n return movieItems;\r\n }\r\n\r\n sortMovies(movies) {\r\n const { sortBy, showtimes, selectedMonth } = this.props;\r\n\r\n let sortedMovies = [];\r\n _.forEach(movies, (movie) => {\r\n movie.validShowtimes = _.filter(showtimes, (showtime) => {\r\n if (showtime.movieId == movie.id) {\r\n const datetime = moment(showtime.dateTime);\r\n const isInFuture = datetime > moment();\r\n if (showtime.showInfo.enabled !== true) return false;\r\n else {\r\n const month = datetime.month();\r\n const isInMonth = month === selectedMonth;\r\n return (sortBy == CONSTANTS.sort.alphabet || sortBy == CONSTANTS.sort.time && isInFuture) && isInMonth;\r\n }\r\n }\r\n });\r\n\r\n if (movie.validShowtimes.length > 0) {\r\n movie.validShowtimes = _.sortBy(movie.validShowtimes, ['dateTime']);\r\n sortedMovies.push(movie);\r\n }\r\n });\r\n\r\n if (sortBy === CONSTANTS.sort.alphabet) sortedMovies = _.sortBy(sortedMovies, ['name']);\r\n else if (sortBy === CONSTANTS.sort.time)\r\n sortedMovies.sort((a, b) => { return moment(a.validShowtimes[0].dateTime) - moment(b.validShowtimes[0].dateTime); });\r\n\r\n return sortedMovies;\r\n }\r\n\r\n render() {\r\n const { movies, appLocale } = this.props;\r\n const movieListItems = this.generateMovieListItems(movies);\r\n\r\n return (\r\n
\r\n {movieListItems.length > 0 ? movieListItems :

{LOCALE[appLocale].noEventsText}

}\r\n
)\r\n }\r\n}","import React from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { getParams } from '../../../utilities/location-utilities'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport * as movieListActions from '../../../actions/movielist-actions'\r\nimport * as orderActions from '../../../actions/order-actions'\r\nimport MonthNavigator from '../../datepicker/MonthNavigator'\r\nimport SpecialEventsList from './SpecialEventsList'\r\n\r\nclass SpecialEventsContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.movieClicked = this.movieClicked.bind(this);\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, movies, organizerIds, iframeId } = this.props;\r\n if (movies.length == 0) actions.getMovieList(organizerIds);\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n movieClicked(id) {\r\n const { organizerIds, actions, history, movies } = this.props;\r\n const movie = _.find(movies, (movie) => { return movie.id == id });\r\n actions.selectedMovieChanged(movie.id, history.location.pathname).then(() => history.push(`${ROUTES.MOVIE}/${id}?org=${organizerIds}`));\r\n }\r\n\r\n showtimeClicked(organizerId, showtimeId) {\r\n const { openOrderInNewWindow, actions, history, showtimes } = this.props;\r\n const showtime = _.find(showtimes, (showtime) => { return showtime.id == showtimeId && showtime.organizerId == organizerId });\r\n if (showtime) {\r\n actions.changeSelectedShowtime(showtime, history.location.pathname).then(() => {\r\n const orderUrl = `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${showtime.organizerId}`;\r\n if (openOrderInNewWindow) window.open(orderUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes');\r\n else history.push(orderUrl);\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const { movies, columns, initialMonth, selectedMonth, monthsWithShowtimes, actions, posterBanners, appLocale, showtimes, sortBy, filterId } = this.props;\r\n\r\n return (\r\n
\r\n

Specialarrangementer

\r\n \r\n\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n let monthsWithShowtimes = [];\r\n const movies = _.filter(state.movielist.movies, (movie) => movie.type == CONSTANTS.types.special);\r\n const showtimes = _.filter(state.movielist.showtimes, (showtime) => {\r\n if (_.find(movies, { 'id': showtime.movieId })) {\r\n monthsWithShowtimes = _.union(monthsWithShowtimes, [moment(showtime.dateTime).month()]);\r\n return true;\r\n }\r\n });\r\n\r\n\r\n return {\r\n organizerIds: state.movielist.organizerIds || getParams().org,\r\n movies,\r\n initialMonth: monthsWithShowtimes[0],\r\n selectedMonth: state.movielist.selectedMonth,\r\n monthsWithShowtimes,\r\n columns: config.movielists.special.columns,\r\n posterBanners: config.posterBanners,\r\n scrollPosition: state.movielist.scrollPosition,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n appLocale: state.app.locale,\r\n columns: config.movielists.special.columns,\r\n showtimes,\r\n sortBy: config.movielists.special.sort,\r\n iframeId: state.app.iframeId,\r\n filterId: state.movielist.filterId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, movieListActions, orderActions, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(SpecialEventsContainer))","import '../css/movielists.scss'\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { getParams } from '../../../utilities/location-utilities'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport { getMovieList, changeDate, selectedMovieChanged, changeSelectedShowtime } from '../../../actions/movielist-actions'\r\nimport DatePickerContainer from '../../datepicker/DatePickerContainer'\r\nimport ProgramList from './ProgramList'\r\nimport SpecialEventsContainer from '../specialevents/SpecialEventsContainer'\r\nimport { manipulateTitles, setContainerClasses } from '../shared'\r\n\r\nclass ProgramContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.changeDate = this.changeDate.bind(this);\r\n this.movieClicked = this.movieClicked.bind(this);\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, movies, organizerIds, iframeId } = this.props;\r\n if (movies.length == 0) actions.getMovieList(organizerIds);\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n\r\n this.manipulateTitles()\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n this.manipulateTitles()\r\n }\r\n\r\n manipulateTitles() {\r\n const { columns, listType } = this.props\r\n if (columns != CONSTANTS.columns.one) {\r\n const movielist = document.querySelector(`.MovieListContainer.${listType}`)\r\n manipulateTitles(movielist, columns);\r\n }\r\n }\r\n\r\n changeDate(date) {\r\n const { history, organizerIds, actions } = this.props;\r\n actions.changeDate(date);\r\n history.push(`${window.location.pathname}?org=${organizerIds}&date=${date}`);\r\n }\r\n\r\n movieClicked(id) {\r\n const { organizerIds, actions, history, movies } = this.props;\r\n const movie = _.find(movies, (movie) => { return movie.id == id });\r\n actions.selectedMovieChanged(movie.id, history.location.pathname).then(() => history.push(`${ROUTES.MOVIE}/${id}?org=${organizerIds}`));\r\n }\r\n\r\n showtimeClicked(organizerId, showtimeId) {\r\n const { openOrderInNewWindow, actions, history, showtimes } = this.props;\r\n const showtime = _.find(showtimes, (showtime) => { return showtime.id == showtimeId && showtime.organizerId == organizerId });\r\n if (showtime) {\r\n actions.changeSelectedShowtime(showtime, history.location.pathname).then(() => {\r\n const orderUrl = `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${showtime.organizerId}`;\r\n if (openOrderInNewWindow) window.open(orderUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes');\r\n else history.push(orderUrl);\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const { appLocale, pageHeader, movies, showAsBase, showtimes, posterBanners, selectedDate, columns, showExpired,\r\n showLocationOnShowtime, specialMoviesEnabledOnProgram, showBackInTime, actions, organizerIds, sortBy, filterId } = this.props;\r\n\r\n const header = pageHeader ?
: null;\r\n let classes = setContainerClasses(CONSTANTS.listTypes.date, columns);\r\n\r\n return (\r\n
\r\n
\r\n {header}\r\n \r\n
\r\n\r\n \r\n\r\n {specialMoviesEnabledOnProgram ? : null}\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n const listConfig = config.movielists;\r\n const selectedDate = state.movielist.selectedDate;\r\n const movies = listConfig.date.base ? extractMoviesAsBases(state.movielist.movies) : state.movielist.movies;\r\n\r\n let dateForHeader = extractHeaderDate(selectedDate);\r\n const pageHeader = _.replace(config.pageHeaders.date, 'SELECTED_DATE', _.capitalize(dateForHeader));\r\n\r\n function extractHeaderDate(selectedDate) {\r\n const date = moment(selectedDate);\r\n if (date.isSame(moment(), 'day')) return 'i dag ';\r\n else if (date.isSame(moment().add(1, 'days'), 'day')) return 'i morgen ';\r\n else return date.format('dddd DD/MM');\r\n\r\n }\r\n\r\n function extractMoviesAsBases(movies) {\r\n const moviesBases = state.movielist.movieBases;\r\n const moviesAsBase = [];\r\n _.each(movies, (movie) => {\r\n if (movie.baseId) {\r\n const baseMovie = _.find(moviesBases, (base) => { return base.id == movie.baseId; });\r\n const alreadyInList = _.some(moviesAsBase, ['baseId', movie.baseId]);\r\n if (baseMovie && !alreadyInList) moviesAsBase.push({ ...movie, name: baseMovie.name, posters: baseMovie.posters });\r\n } else moviesAsBase.push(movie);\r\n });\r\n return moviesAsBase;\r\n }\r\n\r\n return {\r\n organizerIds: state.movielist.organizerIds || getParams().org,\r\n pageHeader,\r\n columns: listConfig.date.columns,\r\n movies,\r\n sortBy: listConfig.date.sort,\r\n showAsBase: listConfig.date.base,\r\n showtimes: state.movielist.showtimes,\r\n posterBanners: config.posterBanners,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n selectedDate,\r\n initialDate: state.movielist.initialDate,\r\n showLocationOnShowtime: config.showLocationOnShowtime,\r\n specialMoviesEnabledOnProgram: config.movielists.special.enabledOnProgram,\r\n showBackInTime: config.daysBack > 0,\r\n iframeId: state.app.iframeId,\r\n showExpired: config.movielists.date.showExpired,\r\n filterId: state.movielist.filterId,\r\n listType: CONSTANTS.listTypes.date\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getMovieList, selectedMovieChanged, changeDate, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProgramContainer)","import React from 'react'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport AllMoviesListContainer from '../allmovies/AllMoviesListContainer'\r\nimport ProgramListContainer from '../program/ProgramListContainer'\r\n\r\nexport default class Program_AllFutureMovies extends React.Component {\r\n //NOTE! We need to pass down the props, so we get history from the router so the containers can navigate...\r\n\r\n render() {\r\n return (\r\n
\r\n \r\n \r\n
\r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport MovieInfo from '../../movie/MovieInfo'\r\nimport Showtime from '../../showtime/Showtime'\r\nimport Poster from '../../movie/Poster'\r\nimport { isInsideShowPeriod } from '../shared'\r\nimport ShowtimeTypeList from '../../showtime/ShowtimeTypeList'\r\n\r\nexport default class Multibio_MovieListItem extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n maxDateCount: props.organizers.length > 1 ? 1 : 2,\r\n showMovieInfo: false\r\n }\r\n this.movieClicked = this.movieClicked.bind(this);\r\n }\r\n\r\n componentDidUpdate(prevProps, prevState) {\r\n if (prevState.showMovieInfo != this.state.showMovieInfo) {\r\n const { appHeightChanged } = this.props;\r\n setTimeout(() => { appHeightChanged() }, 500); //Workaround for the duration it takes the DOM to rerender with the expanded element so we get the right height...\r\n }\r\n }\r\n\r\n movieClicked(e) {\r\n const { showMovieInfo } = this.state;\r\n const { columns, movieClicked } = this.props;\r\n const dataset = e.target.dataset;\r\n e.preventDefault();\r\n\r\n if (columns == CONSTANTS.columns.one && dataset.toggleMovieInfo) {\r\n if (showMovieInfo == false) this.setState({ showMovieInfo: true });\r\n else this.setState({ showMovieInfo: false });\r\n } else {\r\n const movieId = e.currentTarget.id || dataset.movieId;\r\n if (e.target.tagName == 'IMG' || e.target.tagName == 'H1' || e.target.tagName == 'INPUT' || _.includes(e.target.classList, 'poster-banner'))\r\n movieClicked(movieId);\r\n }\r\n }\r\n\r\n generateShowtimesPerOrganizer() {\r\n const { maxDateCount } = this.state;\r\n const { organizers, movie, appLocale, columns } = this.props;\r\n const showtimesPerOrganizer = [];\r\n\r\n _.each(organizers, (organizer) => {\r\n const showtimesByDate = _.groupBy(movie.validShowtimes, (showtime) => {\r\n return showtime.organizerId == organizer.id ? moment(showtime.dateTime).format('ddd DD/MM') : -1;\r\n });\r\n const showtimesPerDate = this.generateShowtimesPerDate(showtimesByDate);\r\n const moreButton = columns !== CONSTANTS.columns.one && organizers.length == 1 && _.keys(showtimesByDate).length > maxDateCount ?\r\n
: null;\r\n\r\n showtimesPerOrganizer.push(
\r\n {organizers.length > 1 ?

{organizer.name}

: null}\r\n {showtimesPerDate}\r\n {moreButton}\r\n
);\r\n });\r\n\r\n return showtimesPerOrganizer;\r\n }\r\n\r\n generateShowtimesPerDate(showtimesByDate) {\r\n const { maxDateCount } = this.state;\r\n const { showLocationOnShowtime, showtimeClicked, listType, columns, showAsBase, showExpired } = this.props;\r\n const showtimesPerDate = [];\r\n let counter = 0;\r\n\r\n _.forOwn(showtimesByDate, (showtimes, dateKey) => {\r\n if (dateKey != -1) {\r\n if (counter < maxDateCount) {\r\n showtimesPerDate.push(
\r\n {listType === CONSTANTS.listTypes.all ?
{_.capitalize(dateKey)}
: null}\r\n\r\n {_.map(showtimes, (showtime) => {\r\n const dateTime = moment(showtime.dateTime);\r\n return
\r\n
\r\n {columns == CONSTANTS.columns.one || showLocationOnShowtime ?
{showtime.locationName}
: ''}\r\n \r\n {isInsideShowPeriod && columns == CONSTANTS.columns.one ?
\r\n
{showtime.type ? showtime.type.name : ''} {showAsBase ? showtime.movieBaseShowName : null}
\r\n
: null}\r\n
\r\n {columns == CONSTANTS.columns.one ?
{showtime.info}
: null}\r\n
\r\n })}\r\n
);\r\n counter++;\r\n } else return false;\r\n }\r\n })\r\n return showtimesPerDate;\r\n }\r\n\r\n render() {\r\n const { showMovieInfo } = this.state;\r\n const { movie, rowClasses, appLocale, showAsBase, columns, organizerIds } = this.props;\r\n const showtimesPerOrganizer = this.generateShowtimesPerOrganizer();\r\n\r\n const poster = movie.posters ?\r\n \r\n : null;\r\n\r\n const movieNameLocale = movie.names ? (movie.names[appLocale] ? movie.names[appLocale] : movie.names['da']) : movie.name;\r\n\r\n return (\r\n
\r\n {poster}\r\n
\r\n

{showAsBase ? movie.name : movieNameLocale}

\r\n
{showtimesPerOrganizer}
\r\n {columns === CONSTANTS.columns.one ?
\r\n \r\n \r\n \r\n
: null}\r\n
\r\n
\r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport Multibio_MovieListItem from './Multibio_MovieListItem'\r\nimport { setItemClasses } from '../shared'\r\n\r\nexport default class Multibio_MovieList extends React.Component {\r\n\r\n generateMovieListItems(movies) {\r\n const { organizers, posterBanners, appLocale, movieClicked, showtimeClicked, columns, listType, showLocationOnShowtime, showAsBase, appHeightChanged, organizerIds, showExpired } = this.props;\r\n let sortedMovies = this.sortMovies(movies);\r\n let movieItems = [];\r\n let counter = 0;\r\n\r\n _.forEach(sortedMovies, (movie) => {\r\n let rowClasses = setItemClasses(counter, columns);\r\n const showtimesByOrgId = _.groupBy(movie.validShowtimes, 'organizerId');\r\n\r\n movieItems.push();\r\n\r\n counter++;\r\n });\r\n\r\n return movieItems;\r\n }\r\n\r\n sortMovies(movies) {\r\n const { sortBy, showtimes, selectedDate, selectedMonth, listType, showBackInTime, showAsBase, showExpired } = this.props;\r\n\r\n let sortedMovies = [];\r\n _.forEach(movies, (movie) => {\r\n movie.validShowtimes = _.filter(showtimes, (showtime) => {\r\n if ((showtime.movieId == movie.id || (showAsBase && showtime.movieBaseId > 0 && showtime.movieBaseId == movie.baseId))) {\r\n const isInFuture = moment(showtime.dateTime) > moment() || showBackInTime;\r\n const datetime = moment(showtime.dateTime);\r\n if (showtime.showInfo.enabled !== true) return false;\r\n else {\r\n if (listType === CONSTANTS.listTypes.special) {\r\n const month = datetime.month();\r\n const isInMonth = month === selectedMonth;\r\n return (sortBy == CONSTANTS.sort.alphabet || sortBy == CONSTANTS.sort.time && isInFuture) && isInMonth;\r\n }\r\n else {\r\n const formattedDate = datetime.format('YYYY-MM-DD');\r\n const isOnDate = formattedDate === selectedDate;\r\n return (sortBy == CONSTANTS.sort.alphabet || sortBy == CONSTANTS.sort.time && showExpired || sortBy == CONSTANTS.sort.time && isInFuture) &&\r\n (listType !== CONSTANTS.listTypes.all ? isOnDate : true);\r\n }\r\n }\r\n }\r\n });\r\n\r\n if (movie.validShowtimes.length > 0) {\r\n movie.validShowtimes = _.sortBy(movie.validShowtimes, ['dateTime']);\r\n sortedMovies.push(movie);\r\n }\r\n else if (listType == CONSTANTS.listTypes.future) sortedMovies.push(movie);\r\n });\r\n\r\n if (sortBy === CONSTANTS.sort.alphabet) sortedMovies = _.sortBy(sortedMovies, ['name']);\r\n else if (sortBy === CONSTANTS.sort.time)\r\n sortedMovies.sort((a, b) => { return moment(a.validShowtimes[0].dateTime) - moment(b.validShowtimes[0].dateTime); });\r\n\r\n return sortedMovies;\r\n }\r\n\r\n render() {\r\n const { movies, appLocale, organizers } = this.props;\r\n const movieListItems = this.generateMovieListItems(movies);\r\n\r\n return (\r\n
1 ? 'MovieList multibio' : 'MovieList'}>\r\n {movieListItems.length > 0 ? movieListItems :

{LOCALE[appLocale].noMoviesText}

}\r\n
)\r\n }\r\n}","import '../css/movielists.scss'\r\nimport '../css/multibio.scss'\r\n\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport { getMovieList, changeDate, selectedMovieChanged, changeSelectedShowtime } from '../../../actions/movielist-actions'\r\nimport DatePickerContainer from '../../datepicker/DatePickerContainer'\r\nimport MultibioMovieList from './Multibio_MovieList'\r\nimport { setContainerClasses } from '../shared'\r\n\r\nclass Multibio_ProgramContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.changeDate = this.changeDate.bind(this);\r\n this.movieClicked = this.movieClicked.bind(this);\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, movies, organizerIds, iframeId } = this.props;\r\n if (movies.length == 0) actions.getMovieList(organizerIds);\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n changeDate(date) {\r\n const { history, organizerIds, actions } = this.props;\r\n actions.changeDate(date);\r\n history.push(`${window.location.pathname}?org=${organizerIds}&date=${date}`);\r\n }\r\n\r\n movieClicked(id) {\r\n const { organizerIds, actions, history, movies } = this.props;\r\n const movie = _.find(movies, (movie) => { return movie.id == id });\r\n actions.selectedMovieChanged(movie.id, history.location.pathname).then(() => history.push(`${ROUTES.MOVIE}/${id}?org=${organizerIds}`));\r\n }\r\n\r\n showtimeClicked(organizerId, showtimeId) {\r\n const { openOrderInNewWindow, actions, history, showtimes } = this.props;\r\n const showtime = _.find(showtimes, (showtime) => { return showtime.id == showtimeId && showtime.organizerId == organizerId });\r\n if (showtime) {\r\n actions.changeSelectedShowtime(showtime, history.location.pathname).then(() => {\r\n const orderUrl = `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${showtime.organizerId}`;\r\n if (openOrderInNewWindow) window.open(orderUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes');\r\n else history.push(orderUrl);\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const { appLocale, pageHeader, organizers, movies, showAsBase, showtimes, posterBanners, selectedDate, columns,\r\n showLocationOnShowtime, showBackInTime, actions, organizerIds, sortBy, showExpired } = this.props;\r\n\r\n const listType = CONSTANTS.listTypes.date;\r\n const header = pageHeader ?
: null;\r\n let classes = setContainerClasses(listType, columns, true);\r\n\r\n return (\r\n
\r\n
\r\n {header}\r\n \r\n
\r\n\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n const listConfig = config.movielists;\r\n const selectedDate = state.movielist.selectedDate;\r\n const url = ownProps.match.url;\r\n\r\n const movies = listConfig.date.base ? extractMoviesAsBases(state.movielist.movies) : state.movielist.movies;\r\n let columns = listConfig.date.columns;\r\n let dateForHeader = extractHeaderDate(selectedDate);\r\n dateForHeader = _.capitalize(dateForHeader);\r\n const pageHeader = _.replace(config.pageHeaders.date, 'SELECTED_DATE', dateForHeader);\r\n\r\n if (url == ROUTES.MULTI_PROGRAM) columns = CONSTANTS.columns.one;\r\n\r\n function extractHeaderDate(selectedDate) {\r\n const date = moment(selectedDate);\r\n if (date.isSame(moment(), 'day')) return 'i dag ';\r\n else if (date.isSame(moment().add(1, 'days'), 'day')) return 'i morgen ';\r\n else return date.format('dddd DD/MM');\r\n }\r\n\r\n function extractMoviesAsBases(movies) {\r\n const moviesBases = state.movielist.movieBases;\r\n const moviesAsBase = [];\r\n _.each(movies, (movie) => {\r\n if (movie.baseId) {\r\n const baseMovie = _.find(moviesBases, (base) => { return base.id == movie.baseId; });\r\n const alreadyInList = _.some(moviesAsBase, ['baseId', movie.baseId]);\r\n if (baseMovie && !alreadyInList) moviesAsBase.push({ ...movie, name: baseMovie.name, posters: baseMovie.posters });\r\n } else moviesAsBase.push(movie);\r\n });\r\n return moviesAsBase;\r\n }\r\n\r\n return {\r\n organizerIds: state.organizer.multibioIds,\r\n organizers: state.movielist.organizers,\r\n pageHeader,\r\n columns,\r\n movies,\r\n sortBy: listConfig.date.sort,\r\n showAsBase: listConfig.date.base,\r\n showtimes: state.movielist.showtimes,\r\n posterBanners: config.posterBanners,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n selectedDate,\r\n initialDate: state.movielist.initialDate,\r\n showLocationOnShowtime: config.showLocationOnShowtime,\r\n specialMoviesEnabledOnProgram: config.movielists.special.enabledOnProgram,\r\n showBackInTime: config.daysBack > 0,\r\n iframeId: state.app.iframeId,\r\n showExpired: config.movielists.date.showExpired\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getMovieList, selectedMovieChanged, changeDate, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Multibio_ProgramContainer)","import '../css/movielists.scss'\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport { getMovieList, selectedMovieChanged, changeSelectedShowtime } from '../../../actions/movielist-actions'\r\nimport Multibio_MovieList from './Multibio_MovieList'\r\nimport { setContainerClasses } from '../shared'\r\n\r\nclass Multibio_AllContainer extends React.Component {\r\n constructor() {\r\n super();\r\n\r\n this.movieClicked = this.movieClicked.bind(this);\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, movies, organizerIds, iframeId } = this.props;\r\n if (movies.length == 0) actions.getMovieList(organizerIds);\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n movieClicked(id) {\r\n const { organizerIds, actions, history, movies } = this.props;\r\n const movie = _.find(movies, (movie) => { return movie.id == id });\r\n actions.selectedMovieChanged(movie.id, history.location.pathname).then(() => history.push(`${ROUTES.MOVIE}/${id}?org=${organizerIds}`));\r\n }\r\n\r\n showtimeClicked(organizerId, showtimeId) {\r\n const { openOrderInNewWindow, actions, history, showtimes } = this.props;\r\n const showtime = _.find(showtimes, (showtime) => { return showtime.id == showtimeId && showtime.organizerId == organizerId });\r\n if (showtime) {\r\n actions.changeSelectedShowtime(showtime, history.location.pathname).then(() => {\r\n const orderUrl = `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${showtime.organizerId}`;\r\n if (openOrderInNewWindow) window.open(orderUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes');\r\n else history.push(orderUrl);\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const { appLocale, pageHeader, organizers, movies, showAsBase, showtimes, posterBanners, selectedDate, columns,\r\n listType, showLocationOnShowtime, showBackInTime, actions, organizerIds, sortBy, showExpired } = this.props;\r\n\r\n const header = pageHeader ?
: null;\r\n let classes = setContainerClasses(listType, columns, true);\r\n\r\n return (\r\n
\r\n
{header}
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n const listConfig = config.movielists;\r\n const selectedDate = state.movielist.selectedDate;\r\n const url = ownProps.match.url;\r\n\r\n let movies = listConfig.all.base ? extractMoviesAsBases(state.movielist.movies) : state.movielist.movies;\r\n let showAsBase = listConfig.all.base;\r\n let pageHeader = config.pageHeaders.allMovies;\r\n let columns = listConfig.all.columns;\r\n let sortBy = listConfig.all.sort;\r\n let listType = CONSTANTS.listTypes.all\r\n\r\n if (url == ROUTES.MULTI_ALL_MOVIES) columns = CONSTANTS.columns.one;\r\n\r\n function extractMoviesAsBases(movies) {\r\n const moviesBases = state.movielist.movieBases;\r\n const moviesAsBase = [];\r\n _.each(movies, (movie) => {\r\n if (movie.baseId) {\r\n const baseMovie = _.find(moviesBases, (base) => { return base.id == movie.baseId; });\r\n const alreadyInList = _.some(moviesAsBase, ['baseId', movie.baseId]);\r\n if (baseMovie && !alreadyInList) moviesAsBase.push({ ...movie, name: baseMovie.name, posters: baseMovie.posters });\r\n } else moviesAsBase.push(movie);\r\n });\r\n return moviesAsBase;\r\n }\r\n\r\n return {\r\n organizerIds: state.organizer.multibioIds,\r\n organizers: state.movielist.organizers,\r\n pageHeader,\r\n columns,\r\n sortBy,\r\n movies,\r\n showAsBase,\r\n listType,\r\n showtimes: state.movielist.showtimes,\r\n posterBanners: config.posterBanners,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n selectedDate,\r\n initialDate: state.movielist.initialDate,\r\n showLocationOnShowtime: config.showLocationOnShowtime,\r\n specialMoviesEnabledOnProgram: config.movielists.special.enabledOnProgram,\r\n showBackInTime: config.daysBack > 0,\r\n iframeId: state.app.iframeId,\r\n showExpired: config.movielists.all.showExpired\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getMovieList, selectedMovieChanged, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Multibio_AllContainer)","import React from 'react'\r\nimport _ from 'lodash'\r\nimport { ROUTES } from '../../../navigation/route-constants'\r\nimport LOCALE from '../../MovieListLocale'\r\nimport MovieInfo from '../../../movie/MovieInfo'\r\nimport Poster from '../../../movie/Poster'\r\n\r\nexport default class Multibio_FutureMoviesListItem extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.movieClicked = this.movieClicked.bind(this);\r\n }\r\n\r\n movieClicked(e) {\r\n const { movieClicked } = this.props;\r\n const dataset = e.target.dataset;\r\n e.preventDefault();\r\n\r\n const movieId = e.currentTarget.id || dataset.movieId;\r\n if (e.target.tagName == 'IMG' || e.target.tagName == 'H1' || e.target.tagName == 'INPUT' || _.includes(e.target.classList, 'poster-banner'))\r\n movieClicked(movieId);\r\n }\r\n\r\n render() {\r\n const { movie, rowClasses, appLocale, organizerIds, organizers } = this.props;\r\n const poster = movie.posters ?\r\n \r\n : null;\r\n\r\n const movieNameLocale = movie.names ? (movie.names[appLocale] ? movie.names[appLocale] : movie.names['da']) : movie.name;\r\n\r\n const availableInOrganizers = _.map(movie.organizerId, (orgId) => {\r\n const organizer = _.find(organizers, { id: orgId });\r\n return

{organizer.name}

\r\n });\r\n\r\n return (\r\n
\r\n {poster}\r\n < div className=\"movie-info\" >\r\n

{movieNameLocale}

\r\n
\r\n {availableInOrganizers}\r\n
\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport LOCALE from '../../MovieListLocale'\r\nimport { setItemClasses } from '../../shared'\r\nimport Multibio_FutureMoviesListItem from './Multibio_FutureMovieListItem'\r\n\r\nexport default class Multibio_FutureMoviesList extends React.Component {\r\n\r\n generateMovieListItems(movies) {\r\n const { organizers, posterBanners, appLocale, movieClicked, columns, appHeightChanged, organizerIds } = this.props;\r\n let movieItems = [];\r\n let counter = 0;\r\n\r\n _.forEach(movies, (movie) => {\r\n let rowClasses = setItemClasses(counter, columns);\r\n\r\n movieItems.push();\r\n\r\n counter++;\r\n });\r\n\r\n return movieItems;\r\n }\r\n\r\n render() {\r\n const { movies, appLocale, organizers } = this.props;\r\n const movieListItems = this.generateMovieListItems(movies);\r\n\r\n return (\r\n
1 ? 'MovieList multibio' : 'MovieList'}>\r\n {movieListItems.length > 0 ? movieListItems :

{LOCALE[appLocale].noMoviesText}

}\r\n
)\r\n }\r\n}","import '../../css/movielists.scss'\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport { ROUTES } from '../../../navigation/route-constants'\r\nimport CONSTANTS from '../../movielist-constants'\r\nimport { appHeightChanged } from '../../../../actions/app-actions'\r\nimport { selectedMovieChanged, changeSelectedShowtime } from '../../../../actions/movielist-actions'\r\nimport { getMultiOrgFutureMovies } from '../../../../actions/organizer-actions'\r\nimport Multibio_FutureMoviesList from './Multibio_FutureMoviesList'\r\nimport { setContainerClasses } from '../../shared'\r\n\r\nclass Multibio_FutureMoviesContainer extends React.Component {\r\n constructor() {\r\n super();\r\n\r\n this.movieClicked = this.movieClicked.bind(this);\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, movies, organizerIds, iframeId } = this.props;\r\n if (movies.length == 0) actions.getMultiOrgFutureMovies(organizerIds);\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n\r\n }\r\n\r\n movieClicked(id) {\r\n const { organizerIds, actions, history, movies } = this.props;\r\n const movie = _.find(movies, (movie) => { return movie.id == id });\r\n actions.selectedMovieChanged(movie.id, history.location.pathname).then(() => history.push(`${ROUTES.MOVIE}/${id}?org=${organizerIds}`));\r\n }\r\n\r\n showtimeClicked(organizerId, showtimeId) {\r\n const { openOrderInNewWindow, actions, history, showtimes } = this.props;\r\n const showtime = _.find(showtimes, (showtime) => { return showtime.id == showtimeId && showtime.organizerId == organizerId });\r\n if (showtime) {\r\n actions.changeSelectedShowtime(showtime, history.location.pathname).then(() => {\r\n const orderUrl = `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${showtime.organizerId}`;\r\n if (openOrderInNewWindow) window.open(orderUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes');\r\n else history.push(orderUrl);\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const { appLocale, pageHeader, organizers, movies, showtimes, posterBanners, columns,\r\n listType, showLocationOnShowtime, actions, organizerIds } = this.props;\r\n\r\n const header = pageHeader ?
: null;\r\n let classes = setContainerClasses(listType, columns, true);\r\n\r\n return (\r\n
\r\n
{header}
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n\r\n return {\r\n organizerIds: state.organizer.multibioIds,\r\n organizers: state.movielist.organizers,\r\n pageHeader: config.pageHeaders.futureMovies,\r\n columns: CONSTANTS.columns.one,\r\n movies: state.movielist.futureMovies,\r\n listType: CONSTANTS.listTypes.future,\r\n showtimes: state.movielist.showtimes,\r\n posterBanners: config.posterBanners,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n selectedDate: state.movielist.selectedDate,\r\n initialDate: state.movielist.initialDate,\r\n showLocationOnShowtime: config.showLocationOnShowtime,\r\n specialMoviesEnabledOnProgram: config.movielists.special.enabledOnProgram,\r\n showBackInTime: config.daysBack > 0,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getMultiOrgFutureMovies, selectedMovieChanged, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Multibio_FutureMoviesContainer)","import React from 'react'\r\nimport _ from 'lodash'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport MovieInfo from '../../movie/MovieInfo'\r\nimport Poster from '../../movie/Poster'\r\n\r\nexport default class FutureMoviesListItem extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.movieClicked = this.movieClicked.bind(this);\r\n }\r\n\r\n movieClicked(e) {\r\n const { movieClicked } = this.props;\r\n const dataset = e.target.dataset;\r\n e.preventDefault();\r\n\r\n const movieId = e.currentTarget.id || dataset.movieId;\r\n if (e.target.tagName == 'IMG' || e.target.tagName == 'H1' || e.target.tagName == 'INPUT' || _.includes(e.target.classList, 'poster-banner'))\r\n movieClicked(movieId);\r\n }\r\n\r\n render() {\r\n const { movie, rowClasses, appLocale, organizerIds, columns, hasShowtimes } = this.props;\r\n const poster = movie.posters ?\r\n \r\n : null;\r\n\r\n const movieNameLocale = movie.names ? (movie.names[appLocale] ? movie.names[appLocale] : movie.names['da']) : movie.name;\r\n\r\n return (\r\n
\r\n {poster}\r\n < div className=\"movie-info\" >\r\n

{movieNameLocale}

\r\n
\r\n \r\n
\r\n
\r\n
\r\n \r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport LOCALE from '../MovieListLocale'\r\nimport { setItemClasses } from '../shared'\r\nimport FutureMoviesListItem from './FutureMovieListItem'\r\n\r\nexport default class FutureMoviesList extends React.Component {\r\n generateMovieListItems(movies) {\r\n const { posterBanners, appLocale, movieClicked, columns, organizerIds, showtimes } = this.props;\r\n let movieItems = [];\r\n let counter = 0;\r\n\r\n _.forEach(movies, (movie, i) => {\r\n let rowClasses = setItemClasses(counter, columns);\r\n const hasShowtimes = _.some(showtimes, (showtime) => {\r\n return showtime.movieId == movie.id\r\n });\r\n\r\n movieItems.push();\r\n\r\n counter++;\r\n });\r\n\r\n return movieItems;\r\n }\r\n\r\n render() {\r\n const { movies, appLocale } = this.props;\r\n const movieListItems = this.generateMovieListItems(movies);\r\n\r\n return (\r\n
\r\n {movieListItems.length > 0 ? movieListItems :

{LOCALE[appLocale].noMoviesText}

}\r\n
)\r\n }\r\n}","import '../css/movielists.scss'\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport { getParams } from '../../../utilities/location-utilities'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport { getFutureMovies, selectedMovieChanged, changeSelectedShowtime } from '../../../actions/movielist-actions'\r\nimport MovieList from './FutureMoviesList'\r\nimport { setContainerClasses } from '../shared'\r\n\r\nclass FutureMovieListContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.movieClicked = this.movieClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, movies, templateIds, organizerIds, iframeId } = this.props;\r\n if (movies.length == 0) actions.getFutureMovies(templateIds, organizerIds);\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n movieClicked(id) {\r\n const { organizerIds, actions, history } = this.props;\r\n actions.selectedMovieChanged(id, history.location.pathname).then(() => history.push(`${ROUTES.MOVIE}/${id}?org=${organizerIds}`));\r\n }\r\n\r\n render() {\r\n const { appLocale, pageHeader, movies, posterBanners, columns, organizerIds, showtimes } = this.props;\r\n const header = pageHeader ?
: null;\r\n const classes = setContainerClasses(CONSTANTS.listTypes.future, columns);\r\n\r\n return (\r\n
\r\n
{header}
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n const listConfig = config.movielists;\r\n const queryParams = getParams();\r\n\r\n return {\r\n templateIds: queryParams.templateid || state.organizer.futureTemplateId,\r\n organizerIds: state.movielist.organizerIds || queryParams.org,\r\n pageHeader: config.pageHeaders.futureMovies,\r\n columns: listConfig.future.columns,\r\n movies: state.movielist.futureMovies,\r\n showtimes: state.movielist.showtimes,\r\n posterBanners: config.posterBanners,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getFutureMovies, selectedMovieChanged, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(FutureMovieListContainer)","export default {\r\n da: {\r\n price: 'Pris: ',\r\n including: 'inkl. gebyr',\r\n back: '❮ Tilbage',\r\n buyTickets: 'Køb Billetter',\r\n soldOut: 'Udsolgt',\r\n cancelled: 'Aflyst',\r\n },\r\n\r\n en: {\r\n price: 'Price: ',\r\n including: 'incl. fees',\r\n back: '❮ Back',\r\n buyTickets: 'Buy Tickets',\r\n soldOut: 'Sold out',\r\n cancelled: 'Cancelled',\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport LOCALE from '../ExternalLocale'\r\n\r\nexport default class TicketmasterListItem extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.eventClicked = this.eventClicked.bind(this);\r\n }\r\n\r\n eventClicked(e) {\r\n const { eventClicked } = this.props;\r\n const dataset = e.target.dataset;\r\n e.preventDefault();\r\n\r\n const eventId = e.currentTarget.id || dataset.movieId;\r\n if (e.target.tagName == 'IMG' || e.target.tagName == 'H1')\r\n eventClicked(eventId);\r\n }\r\n\r\n getShowtimeText() {\r\n const { event, appLocale } = this.props;\r\n if (event.isSoldOut) return LOCALE[appLocale].soldOut;\r\n else if (event.isCancelled) return LOCALE[appLocale].cancelled;\r\n else return LOCALE[appLocale].buyTickets;\r\n }\r\n\r\n render() {\r\n const { event, rowClasses, organizerId } = this.props;\r\n const showtimeText = this.getShowtimeText();\r\n let classes = 'Showtime ';\r\n if (event.isSoldOut) classes += 'sold-out disabled';\r\n if (event.isCancelled) classes += 'cancelled disabled';\r\n\r\n return (\r\n
\r\n
\r\n

{event.name}

\r\n\r\n
\r\n {event.dateTime ? _.capitalize(moment(event.dateTime).format('ddd [d.] DD/MM [kl.] LT')) : null}\r\n window.open(event.ticketsUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes')}>\r\n {showtimeText}\r\n \r\n
\r\n
\r\n )\r\n }\r\n}","import '../../movielists/css/movielists.scss'\r\n\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport { getParams } from '../../../utilities/location-utilities'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../../movielists/movielist-constants'\r\nimport LOCALE from '../../movielists/MovieListLocale'\r\nimport { getEventList, getEvent } from '../../../actions/ticketmaster-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport TicketmasterListItem from './TicketmasterListItem'\r\n\r\nclass TicketmasterListContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.eventClicked = this.eventClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { promoterIds, actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n\r\n const queryParameters = getParams();\r\n actions.getEventList(queryParameters.promoterid ? queryParameters.promoterid : promoterIds);\r\n\r\n }\r\n\r\n eventClicked(id) {\r\n const { organizerId, actions, history } = this.props;\r\n actions.getEvent(id).then(() => history.push(`${ROUTES.TICKETMASTER_EVENT}/${id}?org=${organizerId}`));;\r\n }\r\n\r\n generateEventListItems() {\r\n const { events, organizerId, appLocale, listType } = this.props;\r\n let eventItems = [];\r\n let counter = 0;\r\n\r\n _.forEach(events, (event) => {\r\n let rowClasses = this.calculateRowPlacement(counter, 'MovieListItem five-columns external');\r\n if (event.isSoldOut || event.isCancelled) rowClasses += ' disabled';\r\n\r\n eventItems.push();\r\n\r\n counter++;\r\n });\r\n\r\n return eventItems;\r\n }\r\n\r\n calculateRowPlacement(counter, rowClasses) {\r\n if (counter > 1) {\r\n for (let i = 2; i <= 7; i++) {\r\n if (counter % i == 0) rowClasses += ' first-in-row' + i;\r\n }\r\n }\r\n return rowClasses;\r\n }\r\n\r\n render() {\r\n const { appLocale } = this.props;\r\n const eventListItems = this.generateEventListItems();\r\n\r\n return (\r\n
\r\n {eventListItems.length > 0 ?\r\n
{eventListItems}
:

{LOCALE[appLocale].noEventsText}

}\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n\r\n return {\r\n organizerId: state.organizer.id,\r\n promoterIds: config.ticketmaster.promoterCodes,\r\n events: state.ticketmaster.events,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getEventList, getEvent, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TicketmasterListContainer)","import '../external.scss'\r\n\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport LOCALE from '../ExternalLocale'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport { getEvent, selectedEventChanged } from '../../../actions/ticketmaster-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\n\r\nclass TicketmasterDetailsContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n this.navBack = this.navBack.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { eventId, event, actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n\r\n if (!event.id && eventId) actions.getEvent(eventId);\r\n }\r\n\r\n showtimeClicked() {\r\n const { event } = this.props;\r\n window.open(event.ticketsUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes')\r\n }\r\n\r\n navBack() {\r\n const { organizerId, history } = this.props;\r\n history.push(`${ROUTES.TICKETMASTER_ALL_EVENTS}?org=${organizerId}`);\r\n }\r\n\r\n getSoldOutOrCancelledText() {\r\n const { event, appLocale } = this.props;\r\n if (event.isSoldOut) return - {LOCALE[appLocale].soldOut};\r\n else if (event.isCancelled) return - {LOCALE[appLocale].cancelled};\r\n }\r\n\r\n render() {\r\n const { event, pageHeader, appLocale } = this.props;\r\n const header = pageHeader ?
: null;\r\n const description = event.description ?

') }} /> : null\r\n const price = event.price ?

{event.price} {LOCALE[appLocale].including}

: null;\r\n const venue = event.venue ?
{event.venue.name}
{event.venue.address}
: null;\r\n const soldOutOrCancelled = this.getSoldOutOrCancelledText();\r\n\r\n return (\r\n
\r\n {header}\r\n
\r\n
\r\n
\r\n

\r\n {event.name}\r\n {soldOutOrCancelled}\r\n

\r\n

{event.dateTime ? _.capitalize(moment(event.dateTime).format('dddd [d.] DD/MM [kl.] LT')) : null}

\r\n {price}\r\n
\r\n
\r\n
\r\n {description}\r\n {venue}\r\n
\r\n
\r\n \r\n {!event.isSoldOut && !event.isCancelled ? : null}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const organizer = state.organizer;\r\n const config = organizer.configuration;\r\n\r\n return {\r\n organizerId: organizer.id,\r\n venueIds: config.ticketmaster.promoterCodes,\r\n pageHeader: config.pageHeaders.event,\r\n eventId: parseInt(ownProps.match.params.eventId),\r\n event: state.ticketmaster.selectedEvent,\r\n appLocale: state.app.locale,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getEvent, selectedEventChanged, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TicketmasterDetailsContainer)","import fetch from 'isomorphic-fetch'\r\nimport _ from 'lodash'\r\n\r\nexport default {\r\n fetchEvents\r\n}\r\n\r\nconst baseUrl = window.location.href.indexOf('localhost') != -1 ? 'https://localhost:44390/' : window.location.protocol + '//' + window.location.host + '/api/';\r\nasync function fetchEvents(organizerId) {\r\n return await fetch(`${baseUrl}billetten?organizerId=${organizerId}`, {\r\n headers: { 'Content-Type': 'text/xml;charset=UTF-8' },\r\n }).then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n }).then(events => extractEvents(events));\r\n}\r\n\r\n\r\nfunction extractEvents(events) {\r\n return _.map(events, (event) => {\r\n const show = event.shows ? event.shows[0] : {}; // Ser ud som om der altid kun er en per event (hvilket vi også kun understøtter i vores layout lige pt.)\r\n return {\r\n id: event.event_no,\r\n name: event.event_name,\r\n description: event.event_notes,\r\n posters: event.event_images ? {\r\n small: event.event_images.small,\r\n medium: event.event_images.medium,\r\n large: event.event_images.large,\r\n } : null,\r\n dateTime: show.show_time,\r\n ticketsUrl: show.show_link,\r\n price: show.prices ? extractPrice(show.prices) : null,\r\n venue: {\r\n name: show.location_name,\r\n address: `${show.location_street}, ${show.location_zip} ${show.location_city}`\r\n },\r\n isSoldOut: show.availability == 1\r\n }\r\n });\r\n}\r\n\r\nfunction extractPrice(prices) {\r\n const min = _.minBy(prices, (price) => price.min_price);\r\n const from = min ? min.min_price : null;\r\n const max = _.maxBy(prices, (price) => price.max_price);\r\n const to = max ? max.max_price : null;\r\n\r\n if (from === to) return from;\r\n else if (from && to) return from + ' - ' + to;\r\n else if (from && !to) return from;\r\n else if (!from && to) return to;\r\n else return null;\r\n}","import _ from 'lodash'\r\nimport api from '../api/billetten-api'\r\n\r\nexport function getEventList(organizerId) {\r\n return (dispatch) => {\r\n dispatch(eventListRequest());\r\n return api.fetchEvents(organizerId)\r\n .then(events => {\r\n return dispatch(eventListSuccess(events))\r\n }, error => dispatch(eventListFailed(error)));\r\n }\r\n}\r\n\r\nexport const EVENTLIST_REQUEST = 'EVENTLIST_REQUEST'\r\nconst eventListRequest = () => {\r\n return { type: EVENTLIST_REQUEST }\r\n}\r\n\r\nexport const EVENTLIST_SUCCESS = 'EVENTLIST_SUCCESS'\r\nconst eventListSuccess = (events) => {\r\n return {\r\n type: EVENTLIST_SUCCESS,\r\n events: _.sortBy(events, 'dateTime')\r\n }\r\n}\r\n\r\nexport const EVENTLIST_FAILED = 'EVENTLIST_FAILED'\r\nconst eventListFailed = (error) => {\r\n return {\r\n type: EVENTLIST_FAILED,\r\n error: {\r\n ...error,\r\n message: 'Der var ingen data at hente. Prøv igen senere.'\r\n }\r\n }\r\n}\r\n\r\nexport function changeSelectedEvent(id) {\r\n return (dispatch, getState) => {\r\n const events = getState().external.events;\r\n const event = _.find(events, (event) => { return event.id == id });\r\n return new Promise((resolve) => resolve(dispatch(selectedEventChanged(event))));\r\n }\r\n}\r\n\r\nexport const SELECTED_EVENT_CHANGED = 'SELECTED_EVENT_CHANGED'\r\nexport const selectedEventChanged = (selectedEvent) => {\r\n return {\r\n type: SELECTED_EVENT_CHANGED,\r\n selectedEvent: selectedEvent\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport LOCALE from '../ExternalLocale'\r\n\r\nexport default class MovieListItem extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.eventClicked = this.eventClicked.bind(this);\r\n }\r\n\r\n eventClicked(e) {\r\n const { eventClicked } = this.props;\r\n const dataset = e.target.dataset;\r\n e.preventDefault();\r\n\r\n const eventId = e.currentTarget.id || dataset.movieId;\r\n if (e.target.tagName == 'IMG' || e.target.tagName == 'H1')\r\n eventClicked(eventId);\r\n }\r\n\r\n getShowtimeText() {\r\n const { event, appLocale } = this.props;\r\n if (event.isSoldOut) return LOCALE[appLocale].soldOut;\r\n else if (event.isCancelled) return LOCALE[appLocale].cancelled;\r\n else return LOCALE[appLocale].buyTickets;\r\n }\r\n\r\n render() {\r\n const { event, rowClasses, organizerId } = this.props;\r\n const showtimeText = this.getShowtimeText();\r\n const image = event.posters.medium || event.posters.small;\r\n\r\n return (\r\n
\r\n
\r\n

{event.name}

\r\n\r\n
\r\n {event.dateTime ? _.capitalize(moment(event.dateTime).format('ddd [d.] DD/MM [kl.] LT')) : null}\r\n window.open(event.ticketsUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes')}>\r\n {showtimeText}\r\n \r\n
\r\n
\r\n )\r\n }\r\n}","import '../../movielists/css/movielists.scss'\r\n\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../../movielists/movielist-constants'\r\nimport LOCALE from '../../movielists/MovieListLocale'\r\nimport { getEventList, changeSelectedEvent } from '../../../actions/billetten-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport BillettenListItem from './BillettenListItem'\r\n\r\nclass BilletttenListContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.eventClicked = this.eventClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { events, actions, organizerId, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n\r\n if (events.length == 0) actions.getEventList(organizerId);\r\n }\r\n\r\n eventClicked(id) {\r\n const { organizerId, actions, history } = this.props;\r\n actions.changeSelectedEvent(id).then(() => history.push(`${ROUTES.BILLETTEN_EVENT}/${id}?org=${organizerId}`));;\r\n }\r\n\r\n generateEventListItems() {\r\n const { events, organizerId, appLocale, listType } = this.props;\r\n let eventItems = [];\r\n let counter = 0;\r\n\r\n _.forEach(events, (event) => {\r\n let rowClasses = this.calculateRowPlacement(counter, 'MovieListItem five-columns external');\r\n if (event.isSoldOut || event.isCancelled) rowClasses += ' disabled';\r\n\r\n eventItems.push();\r\n\r\n counter++;\r\n });\r\n\r\n return eventItems;\r\n }\r\n\r\n calculateRowPlacement(counter, rowClasses) {\r\n if (counter > 1) {\r\n for (let i = 2; i <= 7; i++) {\r\n if (counter % i == 0) rowClasses += ' first-in-row' + i;\r\n }\r\n }\r\n return rowClasses;\r\n }\r\n\r\n render() {\r\n const { appLocale } = this.props;\r\n const eventListItems = this.generateEventListItems();\r\n\r\n return (\r\n
\r\n {eventListItems.length > 0 ?\r\n
{eventListItems}
:

{LOCALE[appLocale].noEventsText}

}\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n\r\n return {\r\n organizerId: state.organizer.id,\r\n events: state.external.events,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getEventList, changeSelectedEvent, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BilletttenListContainer)","import '../external.scss'\r\n\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport LOCALE from '../ExternalLocale'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport { getEventList, changeSelectedEvent } from '../../../actions/billetten-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\n\r\nclass BillettenDetailsContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n this.navBack = this.navBack.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { events, actions, iframeId, organizerId, eventId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n\r\n if (events.length == 0) actions.getEventList(organizerId).then(() => actions.changeSelectedEvent(eventId));\r\n else actions.changeSelectedEvent(eventId);\r\n }\r\n\r\n showtimeClicked() {\r\n const { event } = this.props;\r\n window.open(event.ticketsUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes')\r\n }\r\n\r\n navBack() {\r\n const { organizerId, history } = this.props;\r\n history.push(`${ROUTES.BILLETTEN_ALL_EVENTS}?org=${organizerId}`);\r\n }\r\n\r\n getSoldOutOrCancelledText() {\r\n const { event, appLocale } = this.props;\r\n if (event.isSoldOut) return - {LOCALE[appLocale].soldOut};\r\n else if (event.isCancelled) return - {LOCALE[appLocale].cancelled};\r\n }\r\n\r\n render() {\r\n const { event, pageHeader, appLocale } = this.props;\r\n const header = pageHeader ?
: null;\r\n const description = event.description ?

: null\r\n const price = event.price ?

{event.price} {LOCALE[appLocale].including}

: null;\r\n const venue = event.venue ?
{event.venue.name}
{event.venue.address}
: null;\r\n const soldOutOrCancelled = this.getSoldOutOrCancelledText();\r\n\r\n return (\r\n
\r\n {header}\r\n
\r\n
\r\n
\r\n

\r\n {event.name}\r\n {soldOutOrCancelled}\r\n

\r\n

{event.dateTime ? _.capitalize(moment(event.dateTime).format('dddd [d.] DD/MM [kl.] LT')) : null}

\r\n {price}\r\n
\r\n
\r\n
\r\n {description}\r\n {venue}\r\n
\r\n
\r\n \r\n {!event.isSoldOut && !event.isCancelled ? : null}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n organizerId: state.organizer.id,\r\n events: state.external.events,\r\n event: state.external.selectedEvent || { posters: {} },\r\n eventId: ownProps.match.params.eventId,\r\n pageHeader: state.organizer.configuration.pageHeaders.event,\r\n appLocale: state.app.locale,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getEventList, changeSelectedEvent, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BillettenDetailsContainer)","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport LOCALE from '../movielists/MovieListLocale'\r\nimport Showtime from '../showtime/Showtime'\r\nimport Poster from '../movie/Poster'\r\n\r\nexport default class CircusListItem extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = { search: '' };\r\n this.searchInputChanged = this.searchInputChanged.bind(this);\r\n }\r\n\r\n searchInputChanged(e) {\r\n const value = e.target.value;\r\n this.setState({ search: value });\r\n }\r\n\r\n generateShowtimes() {\r\n const { organizer, event, showtimeClicked, appLocale } = this.props;\r\n return _.map(event.validShowtimes, (showtime) => {\r\n const search = this.state.search.toUpperCase();\r\n const location = _.find(organizer.locations, (location) => { return showtime.locationId == location.id });\r\n if (search) {\r\n const locationMatch = _.includes(location.name.toUpperCase(), search);\r\n const dateMatch = _.includes(moment(showtime.dateTime).format(LOCALE[appLocale].longDateTimeFormat).toUpperCase(), search)\r\n if (locationMatch || dateMatch) return this.generateShowtimeRow(showtime, appLocale, showtimeClicked, location);\r\n\r\n } else return this.generateShowtimeRow(showtime, appLocale, showtimeClicked, location);\r\n });\r\n }\r\n\r\n generateShowtimeRow(showtime, appLocale, showtimeClicked, location) {\r\n return
\r\n
\r\n
\r\n
{_.capitalize(moment(showtime.dateTime).format(LOCALE[appLocale].longDateTimeFormat))}
\r\n
{showtime.minPrice == showtime.maxPrice ? `${showtime.minPrice} kr.` : `${showtime.minPrice} kr. til ${showtime.maxPrice} kr.`}
\r\n
\r\n\r\n
\r\n \r\n
\r\n
\r\n\r\n
\r\n
{location.name} {location.address.roadAndNumber}, {location.address.zip}, {location.address.city}
\r\n
\r\n {showtime.type ? showtime.type.name : ''}\r\n {showtime.info ? : null}\r\n
\r\n
\r\n
;\r\n }\r\n\r\n render() {\r\n const { search } = this.state;\r\n const { event, appLocale } = this.props;\r\n const showtimes = this.generateShowtimes();\r\n const movieNameLocale = event.names ? (event.names[appLocale] ? event.names[appLocale] : event.names['da']) : event.name;\r\n const descriptionLocale = event.descriptions ? (event.descriptions[appLocale] ? event.descriptions[appLocale] : event.descriptions['da']) : event.description;\r\n\r\n return (\r\n
\r\n
\r\n {event.posters ? : null}\r\n

{movieNameLocale}

\r\n \r\n

') }} />\r\n

\r\n
\r\n {showtimes}\r\n
\r\n
\r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport LOCALE from '../movielists/MovieListLocale'\r\nimport CircusListItem from './CircusListItem'\r\n\r\nexport default class CircusList extends React.Component {\r\n\r\n generateListItems(events) {\r\n const { organizer, posterBanners, appLocale, showtimeClicked, columns, appHeightChanged } = this.props;\r\n let sortedEvents = this.sortEvents(events);\r\n return _.map(sortedEvents, (event) => {\r\n return ;\r\n });\r\n }\r\n\r\n sortEvents(events) {\r\n const { showtimes } = this.props;\r\n\r\n let sortedEvents = [];\r\n _.forEach(events, (event) => {\r\n event.validShowtimes = _.filter(showtimes, (showtime) => {\r\n if (showtime.movieId == event.id && showtime.showInfo.enabled === true) {\r\n return moment(showtime.dateTime) > moment(); //isInFuture;\r\n }\r\n });\r\n\r\n if (event.validShowtimes.length > 0) {\r\n event.validShowtimes = _.sortBy(event.validShowtimes, ['dateTime']);\r\n sortedEvents.push(event);\r\n }\r\n });\r\n\r\n return sortedEvents;\r\n }\r\n\r\n render() {\r\n const { events, appLocale } = this.props;\r\n const listItems = this.generateListItems(events);\r\n\r\n return (\r\n
\r\n {listItems.length > 0 ? listItems :

{LOCALE[appLocale].noMoviesText}

}\r\n
)\r\n }\r\n}","import '../movielists/css/movielists.scss'\r\nimport './circuslist.scss'\r\n\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport { getParams } from '../../utilities/location-utilities'\r\nimport { ROUTES } from '../navigation/route-constants'\r\nimport CONSTANTS from '../movielists/movielist-constants'\r\nimport { appHeightChanged } from '../../actions/app-actions'\r\nimport { getMovieList, changeSelectedShowtime } from '../../actions/movielist-actions'\r\nimport CircusList from './CircusList'\r\n\r\nclass CircusListContainer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, events, organizerIds, iframeId } = this.props;\r\n if (events.length == 0) actions.getMovieList(organizerIds);\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n showtimeClicked(organizerId, showtimeId) {\r\n const { openOrderInNewWindow, actions, history, showtimes } = this.props;\r\n const showtime = _.find(showtimes, (showtime) => { return showtime.id == showtimeId && showtime.organizerId == organizerId });\r\n if (showtime) {\r\n actions.changeSelectedShowtime(showtime, history.location.pathname).then(() => {\r\n const orderUrl = `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${showtime.organizerId}`;\r\n if (openOrderInNewWindow) window.open(orderUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes');\r\n else history.push(orderUrl);\r\n })\r\n }\r\n }\r\n\r\n render() {\r\n const { appLocale, organizer, events, showtimes, columns, actions } = this.props;\r\n\r\n return (\r\n
\r\n \r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const config = state.organizer.configuration;\r\n\r\n return {\r\n organizerIds: state.movielist.organizerIds || getParams().org,\r\n organizer: state.movielist.organizers[0],\r\n columns: CONSTANTS.columns.one,\r\n sortBy: CONSTANTS.sort.time,\r\n events: state.movielist.movies,\r\n showtimes: state.movielist.showtimes,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getMovieList, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CircusListContainer)","import React from 'react'\r\nimport Player from '@vimeo/player'\r\n\r\nexport default class Trailer extends React.Component {\r\n\r\n constructor() {\r\n super();\r\n this.state = { isPlaying: false }\r\n this.trailerClicked = this.trailerClicked.bind(this);\r\n this.resizeIframe = this.resizeIframe.bind(this);\r\n }\r\n \r\n //This is for handling dynamic height when inside an iframe\r\n resizeIframe(e) {\r\n const { iframeId } = this.props;\r\n if (window.parent != window) {\r\n const app = document.querySelector('.App');\r\n const pageHeight = Math.max(app.scrollHeight, app.offsetHeight, app.clientHeight) + 300;\r\n\r\n console.log('Trailer clicked!');\r\n console.log('iframeId: ' + iframeId);\r\n console.log('setting height: ' + pageHeight);\r\n\r\n window.parent.postMessage({\r\n iframeId: iframeId,\r\n iframeHeight: pageHeight\r\n }, '*');\r\n }\r\n }\r\n\r\n trailerClicked(e) {\r\n const toggledPlay = this.state.isPlaying ? false : true;\r\n this.setState({ isPlaying: toggledPlay });\r\n\r\n if (!window.innerWidth < 500) {\r\n const iframe = this.refs.iframeContainer.children[0];\r\n const player = new Player(iframe);\r\n player.play();\r\n }\r\n\r\n setTimeout(() => { this.resizeIframe() }, 500); //Workaround for the duration it takes the DOM to rerender with the expanded element so we get the right height...\r\n }\r\n\r\n render() {\r\n const { trailerUrl } = this.props;\r\n const { isPlaying } = this.state;\r\n\r\n //React can't read the webkit and mox allowfullscreens https://github.com/facebook/react/issues/7848\r\n //So until this is fixed we'll use dangerouslySetInnerHTML ...\r\n const iframeContainerClasses = isPlaying ? 'iframe-container is-playing' : 'iframe-container';\r\n const vimeoPlayer = trailerUrl ?
' }} /> : null;\r\n\r\n const overlay = !isPlaying ?
: null;\r\n\r\n return (\r\n
\r\n {overlay}\r\n {vimeoPlayer}\r\n
)\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\n\r\nexport default class VersionSelector extends React.Component {\r\n constructor() {\r\n super();\r\n this.movieClicked = this.movieClicked.bind(this);\r\n }\r\n\r\n movieClicked(e) {\r\n e.preventDefault();\r\n const movieId = e.currentTarget.id;\r\n this.props.movieClicked(movieId);\r\n }\r\n\r\n render() {\r\n const { movie } = this.props;\r\n const allVersions = _.map(movie.versions, (version, i) => {\r\n // const versionName = version.name.substr(version.base.name.length + 3); //name plus space, hyphen and space\r\n const classes = movie.id === version.id ? 'version selected' : 'version';\r\n //const name = versionName ? versionName : '2D';\r\n return
{version.name}
\r\n });\r\n\r\n return (\r\n
\r\n {allVersions}\r\n
\r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport Showtime from './Showtime'\r\nimport ShowtimeTypeList from './ShowtimeTypeList';\r\n\r\nexport default class ShowtimeSchedule extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n const schedule = this.extractShowtimeSchedule(props.movie);\r\n this.state = {\r\n schedule,\r\n skip: 0,\r\n take: 0\r\n }\r\n\r\n this.nextWeek = this.nextWeek.bind(this)\r\n this.previousWeek = this.previousWeek.bind(this)\r\n this.handleWindowResize = this.handleWindowResize.bind(this);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.props.movie.id != nextProps.movie.id || this.props.appLocale != nextProps.appLocale)\r\n this.setState({ schedule: this.extractShowtimeSchedule(nextProps.movie) });\r\n }\r\n\r\n componentDidMount() {\r\n window.addEventListener('resize', this.handleWindowResize);\r\n this.setState({ take: this.determineTakeFromScreenWidth() });\r\n }\r\n\r\n componentWillUnmount() {\r\n window.removeEventListener('resize', this.handleWindowResize);\r\n }\r\n\r\n handleWindowResize = _.debounce(() => { this.setState({ take: this.determineTakeFromScreenWidth() }); }, 400)\r\n\r\n determineTakeFromScreenWidth() {\r\n const schedule = document.querySelector('.schedule');\r\n const scheduleWidth = Math.max(schedule.scrollWidth, schedule.offsetWidth, schedule.clientWidth);\r\n return Math.round(scheduleWidth / 120); //120 being the width wanted for the Showtimes\r\n }\r\n\r\n nextWeek() {\r\n const { schedule, skip, take } = this.state;\r\n if (skip < schedule.length) this.setState({ skip: skip + take });\r\n }\r\n\r\n previousWeek() {\r\n const { skip, take } = this.state;\r\n if (skip > 0) this.setState({ skip: skip - take });\r\n }\r\n\r\n showtimeTypes = [];\r\n extractShowtimeSchedule(movie) {\r\n const { showtimeClicked, showExpired } = this.props;\r\n let schedule = [];\r\n _.forOwn(movie.showtimesByDate, (showtimes, dateKey) => {\r\n const date = moment(dateKey);\r\n\r\n const showtimesOnDate = [];\r\n _.each(showtimes, (showtime) => {\r\n if (showtime.showInfo.enabled && showtime.type && !_.find(this.showtimeTypes, showtime.type)) this.showtimeTypes.push(showtime.type);\r\n\r\n const isInFuture = moment(showtime.dateTime) > moment();\r\n if (showtime.showInfo.enabled === true && (showExpired || isInFuture)) {\r\n showtimesOnDate.push(\r\n );\r\n }\r\n });\r\n\r\n if (showtimesOnDate.length > 0) {\r\n const showtimesOnDay =
\r\n
{_.capitalize(date.format('ddd DD/MM'))}
\r\n {showtimesOnDate}\r\n
;\r\n schedule.push(showtimesOnDay);\r\n }\r\n });\r\n return schedule;\r\n }\r\n\r\n showtimesOnPage() {\r\n const { schedule, skip, take } = this.state;\r\n let showtimesOnPage = _.take(_.drop(schedule, skip), take);\r\n\r\n if (showtimesOnPage.length > 0 && showtimesOnPage.length < take) {\r\n var emptyElementsNeeded = take - showtimesOnPage.length;\r\n for (var i = 0; i < emptyElementsNeeded; i++) {\r\n showtimesOnPage.push(
);\r\n }\r\n }\r\n return showtimesOnPage;\r\n }\r\n\r\n render() {\r\n const { schedule, skip, take } = this.state;\r\n const { isMultiBio, filterId } = this.props;\r\n const disabled = 'week-nav disabled';\r\n const prevWeekClasses = skip !== 0 ? 'week-nav' : disabled;\r\n const nextWeekClasses = skip + take < schedule.length ? 'week-nav' : disabled;\r\n const showNavs = true; //prevWeekClasses != disabled && nextWeekClasses != disabled;\r\n const showtimeOnPage = this.showtimesOnPage();\r\n\r\n return (\r\n
\r\n {showNavs ?
:
}\r\n
{showtimeOnPage}
\r\n {showNavs ?
:
}\r\n\r\n {!isMultiBio && !filterId && this.showtimeTypes.length > 0 ? : null}\r\n
\r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\n\r\nconst Pictures = ({ pictureUrls }) => {\r\n const images = _.map(pictureUrls, (picture, i) => );\r\n\r\n return (\r\n
\r\n {images}\r\n
)\r\n}\r\n\r\nexport default Pictures","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport Trailer from './Trailer'\r\nimport VersionSelector from './VersionSelector'\r\nimport ShowtimeSchedule from '../showtime/ShowtimeSchedule'\r\nimport MovieInfo from './MovieInfo'\r\nimport Pictures from './Pictures'\r\nimport Poster from './Poster'\r\n\r\nexport default class Movie extends React.Component {\r\n\r\n generateShowtimeSchedules() {\r\n const { movie, showtimeClicked, appLocale, organizers, showExpired, filterId } = this.props;\r\n\r\n let showtimeSchedules = [];\r\n if (movie.showtimesByOrgId) {\r\n _.forOwn(movie.showtimesByOrgId, (showtimes, orgId) => {\r\n if (showtimes.length > 0) {\r\n const isMultiBio = organizers.length > 1;\r\n const orgName = _.find(organizers, (org) => { return org.id == orgId });\r\n const showtimesByDate = _.groupBy(showtimes, (showtime) => { return moment(showtime.dateTime).format('YYYY-MM-DD') });\r\n showtimeSchedules.push(\r\n
\r\n {isMultiBio && orgName ?

{orgName.name}

: null}\r\n \r\n
);\r\n }\r\n });\r\n }\r\n\r\n return showtimeSchedules;\r\n }\r\n\r\n render() {\r\n const { movie, movieClicked, appLocale, iframeId } = this.props;\r\n const trailer = movie.trailer ? : null;\r\n const allVersions = movie.versions.length > 1 ? : null;\r\n const poster = movie.posters ? : null;\r\n const pictures = movie.pictures ? : null;\r\n const movieNameLocale = movie.names ? (movie.names[appLocale] ? movie.names[appLocale] : movie.names['da']) : movie.name;\r\n\r\n return (\r\n
\r\n {trailer}\r\n {allVersions}\r\n
{this.generateShowtimeSchedules()}
\r\n
\r\n

{movieNameLocale}

\r\n {poster}\r\n \r\n
\r\n {pictures}\r\n
\r\n );\r\n }\r\n}","import './movie.scss'\r\n\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport { getParams } from '../../utilities/location-utilities'\r\nimport { APP_MODES } from '../../api/api-constants'\r\nimport LOCALE from './MovieLocale'\r\nimport { ROUTES } from '../navigation/route-constants'\r\nimport { getMovieList, changeSelectedShowtime, selectedMovieChanged } from '../../actions/movielist-actions'\r\nimport Movie from './Movie'\r\nimport { appHeightChanged } from '../../actions/app-actions'\r\n\r\nclass MovieContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.movieClicked = this.movieClicked.bind(this);\r\n this.showtimeClicked = this.showtimeClicked.bind(this);\r\n this.navBack = this.navBack.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, movies, movieId, organizerIds, iframeId } = this.props;\r\n if (movies.length == 0) actions.getMovieList(organizerIds).then(() => actions.selectedMovieChanged(movieId));\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n movieClicked(id) {\r\n const { organizerIds, actions, history } = this.props;\r\n actions.selectedMovieChanged(id).then(() => history.replace(`${ROUTES.MOVIE}/${id}?org=${organizerIds}`));\r\n }\r\n\r\n showtimeClicked(organizerId, showtimeId) {\r\n const { openOrderInNewWindow, actions, history, selectedMovie } = this.props;\r\n const showtime = _.find(selectedMovie.showtimesForMovie, (showtime) => { return showtime.id == showtimeId && showtime.organizerId == organizerId });\r\n if (showtime) {\r\n actions.changeSelectedShowtime(showtime).then(() => {\r\n const orderUrl = `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${showtime.organizerId}`;\r\n if (openOrderInNewWindow) window.open(orderUrl, '_blank', 'width=1170,height=800,resizable=yes,scrollbars=yes');\r\n else history.push(orderUrl);\r\n })\r\n }\r\n }\r\n\r\n navBack() {\r\n const { organizerIds, history, backTo } = this.props;\r\n history.push(`${backTo}?org=${organizerIds}`);\r\n }\r\n\r\n generatBackbutton() {\r\n const { backTo, appLocale } = this.props;\r\n let backText = LOCALE[appLocale].backProgram;\r\n switch (backTo) {\r\n case ROUTES.PROGRAM:\r\n backText = LOCALE[appLocale].backProgram;\r\n break;\r\n case ROUTES.ALL_MOVIES:\r\n backText = LOCALE[appLocale].backAll;\r\n break;\r\n case ROUTES.ALL_FUTURE_MOVIES:\r\n backText = LOCALE[appLocale].backAllFuture;\r\n break;\r\n case ROUTES.FUTURE_MOVIES:\r\n backText = LOCALE[appLocale].backFuture;\r\n break;\r\n }\r\n\r\n return ;\r\n }\r\n\r\n render() {\r\n const { selectedMovie, configuration, pageHeader, appLocale, organizers, iframeId, showtimeTypes, showExpired, filterId } = this.props;\r\n\r\n const header = pageHeader ?
: null;\r\n const movie = !_.isEmpty(selectedMovie) ?\r\n : null;\r\n\r\n return (\r\n
1 ? 'multibio' : ''}`}>\r\n {header}\r\n {movie}\r\n
\r\n {configuration.appMode !== APP_MODES.MOVIE ? this.generatBackbutton() : null}\r\n
\r\n
\r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n let selectedMovie = state.movielist.selectedMovie;\r\n\r\n const movieId = ownProps.match.params.movieId;\r\n if (selectedMovie == null || movieId != null && selectedMovie.id != movieId)\r\n selectedMovie = _.find(state.movielist.movies, (movie) => { return movie.id == ownProps.match.params.movieId }) || {};\r\n\r\n selectedMovie.versions = [];\r\n if (selectedMovie.baseId) {\r\n selectedMovie.versions = _.filter(state.movielist.movies, (movie) => { return movie.baseId === selectedMovie.baseId });\r\n selectedMovie.base = _.find(state.movielist.movieBases, { 'id': selectedMovie.baseId });\r\n }\r\n const showtimesForMovie = _.filter(state.movielist.showtimes, (showtime) => { return showtime.movieId == selectedMovie.id });\r\n selectedMovie.showtimesByOrgId = showtimesForMovie ? _.groupBy(showtimesForMovie, 'organizerId') : null;\r\n selectedMovie.showtimesForMovie = showtimesForMovie;\r\n\r\n const config = state.organizer.configuration;\r\n const backTo = state.movielist.backTo;\r\n const showExpired = _.includes(ownProps.location.search, 'showexpired=true') ||\r\n (backTo == ROUTES.ALL_MOVIES || backTo == ROUTES.MULTI_ALL_MOVIES) && config.movielists.all.showExpired ||\r\n (backTo == ROUTES.PROGRAM || backTo == ROUTES.MULTI_PROGRAM || backTo == ROUTES.PROGRAM_AND_ALL_FUTURE_MOVIES) && config.movielists.date.showExpired\r\n\r\n return {\r\n organizerIds: state.movielist.organizerIds || getParams().org,\r\n organizers: state.movielist.organizers,\r\n selectedMovie,\r\n configuration: config,\r\n movieId,\r\n movies: state.movielist.movies,\r\n backTo,\r\n pageHeader: config.pageHeaders.movie,\r\n appLocale: state.app.locale,\r\n openOrderInNewWindow: config.openOrderInNewWindow,\r\n iframeId: state.app.iframeId,\r\n showtimeTypes: state.movielist.showtimeTypes,\r\n showExpired,\r\n filterId: state.movielist.filterId\r\n }\r\n}\r\n\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getMovieList, selectedMovieChanged, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MovieContainer)","export default {\r\n da: {\r\n longDateTimeFormat: 'dddd [d.] LL [kl.] LT',\r\n cinema: 'Biograf',\r\n circus: 'Cirkus',\r\n age: 'Censur',\r\n duration: 'Varighed',\r\n durationTo: 'til ca.'\r\n },\r\n\r\n en: {\r\n longDateTimeFormat: 'dddd LL [at] LT',\r\n cinema: 'Cinema',\r\n circus: 'Circus',\r\n age: 'Censoring',\r\n duration: 'Duration',\r\n durationTo: 'to approx.'\r\n }\r\n}","import './topbar.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport Poster from '../../movie/Poster'\r\nimport { ORGANIZER_TYPES } from '../../../api/api-constants'\r\nimport CONSTANTS from '../../movielists/movielist-constants'\r\nimport LOCALE from './TopBarLocale'\r\nimport ShowtimeType from '../../showtime/ShowtimeType'\r\n\r\nclass TopBar extends React.Component {\r\n\r\n generateDuration() {\r\n const { movie, showtime, appLocale } = this.props;\r\n const from = moment(showtime.dateTime);\r\n const duration = movie.type == CONSTANTS.types.special ? moment.duration(movie.length) : moment.duration(showtime.duration);\r\n const to = moment(from).add(duration);\r\n return
\r\n
{from.format('HH:mm')} {LOCALE[appLocale].durationTo} {to.format('HH:mm')}
\r\n
\r\n }\r\n\r\n render() {\r\n const { organizer, movie, showtime, clubCardEnabled, pageHeaderEnabled, appLocale } = this.props;\r\n const poster = movie.posters ? : null;\r\n const duration = showtime.duration ? this.generateDuration() : null;\r\n const age = movie.ageCensoring ?
{movie.ageCensoring}
: null;\r\n const dateTime = moment(showtime.dateTime);\r\n\r\n let topBarClasses = 'TopBar';\r\n if (clubCardEnabled) topBarClasses += ' club-enabled'\r\n if (pageHeaderEnabled) topBarClasses += ' header-enabled';\r\n\r\n const movieNameLocale = movie.names[appLocale] ? movie.names[appLocale] : movie.names['da'];\r\n const typeName = showtime.type ?

: null;\r\n\r\n return (\r\n
\r\n {poster}\r\n
\r\n

{movieNameLocale}

\r\n

{_.capitalize(dateTime.format(LOCALE[appLocale].longDateTimeFormat))}

\r\n
{`${organizer.name}, ${showtime.locationName}`}
\r\n {age}\r\n {duration}\r\n\r\n {typeName}\r\n
\r\n
\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n showtimeTypes: state.movielist.showtimeTypes\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(TopBar)","import React from 'react'\r\nimport _ from 'lodash'\r\n\r\nexport default class QuantitySelector extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n const { selectedTicket } = props;\r\n const quantity = selectedTicket ? selectedTicket.quantity : 0;\r\n\r\n this.state = { quantity };\r\n this.increment = this.increment.bind(this);\r\n this.decrement = this.decrement.bind(this);\r\n }\r\n\r\n debounceMultipleClicks = _.debounce((quantity) => {\r\n const { ticketQuantityChanged, availableTicket } = this.props;\r\n ticketQuantityChanged(availableTicket.id, quantity);\r\n }, 400)\r\n\r\n canIncrement(quantity) {\r\n const { freeSeats, availableTicket, canIncrementTotalQuantity, canIncrementTotalPoints, order } = this.props;\r\n const newQuantity = quantity + 1;\r\n const totalTicketQuantity = order.selected.totalTicketQuantity;\r\n const canIncrement = (freeSeats > 1 || freeSeats == 1 && quantity == 0 && totalTicketQuantity == 0) && (newQuantity <= Math.max(availableTicket.buyMax, availableTicket.reserveMax)) && canIncrementTotalQuantity();\r\n if (availableTicket.points) return canIncrementTotalPoints(availableTicket.points, newQuantity) && canIncrement;\r\n else return canIncrement;\r\n }\r\n\r\n increment() {\r\n const { incrementTotalQuantity } = this.props;\r\n let { quantity } = this.state;\r\n if (this.canIncrement(quantity)) {\r\n this.setState({ quantity: ++quantity });\r\n incrementTotalQuantity();\r\n this.debounceMultipleClicks(quantity);\r\n }\r\n }\r\n\r\n decrement() {\r\n const { decrementTotalQuantity } = this.props;\r\n let { quantity } = this.state;\r\n if (quantity > 0) {\r\n this.setState({ quantity: --quantity });\r\n decrementTotalQuantity();\r\n this.debounceMultipleClicks(quantity);\r\n }\r\n }\r\n\r\n render() {\r\n const { availableTicket, order, canIncrementTotalQuantity, freeSeats } = this.props;\r\n const { quantity } = this.state;\r\n const decrementClasses = !order.isFetching && quantity > 0 ? 'decrement' : 'decrement deactivated';\r\n let incrementClasses = !order.isFetching && (freeSeats > 1 || freeSeats == 1 && quantity == 0 && order.selected.totalTicketQuantity == 0) && canIncrementTotalQuantity() ? 'increment' : 'increment deactivated';\r\n if (order.clubCard && availableTicket.points > order.clubCard.remainingPoints) incrementClasses = 'increment deactivated';\r\n\r\n return (\r\n
\r\n
\r\n
{quantity}
\r\n
\r\n
\r\n )\r\n }\r\n}","export default {\r\n da: {\r\n next: 'Næste ❯',\r\n nextReserve: 'Reserver ❯',\r\n nextBuy: 'Køb ❯',\r\n back: '❮ Tilbage',\r\n\r\n currency: 'kr.',\r\n points: 'points'\r\n },\r\n\r\n en: {\r\n next: 'Next ❯',\r\n nextReserve: 'Reserve ❯',\r\n nextBuy: ' Buy ❯',\r\n back: '❮ Back',\r\n\r\n currency: 'DKK',\r\n points: 'points'\r\n }\r\n}","import OrderFlowLocale from \"../OrderFlowLocale\";\r\n\r\nexport default {\r\n da: {\r\n ...OrderFlowLocale.da,\r\n showtimeUnNumbered: 'Venligst bemærk at pladserne i salen er unummereret.
Først til mølle princippet gælder.',\r\n oneSeat: 'Valgt plads: ',\r\n multiSeats: 'Valgte pladser: ',\r\n row: 'Række',\r\n seat: 'Sæde',\r\n seats: 'Sæder',\r\n seatsUnNumbered: 'Unummereret',\r\n seatBlue: 'Dit valg',\r\n seatGreen: 'Ledige',\r\n seatWhite: 'Reserveret',\r\n seatRed: 'Optaget',\r\n chooseSeats: 'Du skal vælge mindst en billet for at vælge sæder',\r\n chooseTickets: 'Du skal vælge mindst en billet for at fortsætte',\r\n discountTextBioKlubDk: 'Biografklub Danmark kan ikke angives her. Disse indtastes senere i forløbet.',\r\n discountTextGiftCard: 'Gavekort kan ikke angives her. Disse indtastes senere i forløbet.',\r\n discountTextBoth: 'Biografklub Danmark og gavekort kan ikke angives her. Disse indtastes senere i forløbet.',\r\n\r\n noOnlineOrder: 'Denne forestilling kan ikke bestilles online på nuværende tidspunkt',\r\n noReserveClubCard: 'Du kan ikke reservere når du er logget på klubkort',\r\n noReserve: 'De valgte billetter kan ikke reserveres',\r\n noBuy: 'De valgte billetter kan ikke købes',\r\n\r\n backProgram: '❮ Program',\r\n backAll: '❮ Alle Film',\r\n backFuture: '❮ Kommende Film',\r\n backMovie: '❮ Andre Tider',\r\n\r\n nextBuyBioKlubDk: ' Køb med Biografklub Danmark ❯ ',\r\n\r\n extraPurchasesReset: 'Du har flyttet dine sæder til eller fra pladser med specialtilkøb tilgængeligt, så dine valgte tilkøb er blevet nulstillet.'\r\n },\r\n\r\n en: {\r\n ...OrderFlowLocale.en,\r\n showtimeUnNumbered: 'Please note that the seats in this hall are unnumbered.
First come, first serve.',\r\n oneSeat: 'Chosen seat: ',\r\n multiSeats: 'Chosen seats: ',\r\n row: 'Row',\r\n seat: 'Seat',\r\n seats: 'Seats',\r\n seatsUnNumbered: 'Unnumbered',\r\n seatBlue: 'Your seats',\r\n seatGreen: 'Available',\r\n seatWhite: 'Reserved',\r\n seatRed: 'Sold',\r\n chooseSeats: 'You have to select minimum one ticket to choose seats',\r\n chooseTickets: 'You have to select minimum one ticket to continue',\r\n discountTextBioKlubDk: '\"Biografklub Danmark\" can not be used here. They can be added later in the process.',\r\n discountTextGiftCard: 'Gift cards can not be used here. They can be added later in the process.',\r\n discountTextBoth: '\"Biografklub Danmark\" and gift cards can not be used here. They can be added later in the process.',\r\n\r\n noOnlineOrder: 'This showtime can\\'t be ordered online',\r\n noReserveClubCard: 'You can\\'t reserve tickets when you are logged into as a club card owner',\r\n noReserve: 'The chosen tickets can\\'t be reserved',\r\n noBuy: 'The chosen tickets can\\'t be bought',\r\n\r\n backProgram: '❮ Program',\r\n backAll: '❮ All Movies',\r\n backFuture: '❮ Future Movies',\r\n backMovie: '❮ Other Showtimes',\r\n\r\n nextBuyBioKlubDk: 'Buy with \"Biografklub Danmark\"',\r\n\r\n extraPurchasesReset: 'You have moved your seats to or from places where there are special extra purchases available. Your previously chosen extra purchases have been reset.'\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport CONSTANTS from '../../orderflow-constants'\r\nimport QuantitySelector from './QuantitySelector'\r\nimport LOCALE from '../OrderLocale'\r\n\r\nexport default class Ticket extends React.Component {\r\n generatePrice(price) {\r\n if (price.from === price.to) return price.from;\r\n else if (price.from && price.to) return price.from + ' - ' + price.to;\r\n else if (price.from && !price.to) return price.from;\r\n else if (!price.from && price.to) return price.to;\r\n else return null;\r\n }\r\n\r\n generateTicketInteraction(availableTicket) {\r\n const { order, selectedTicket, bioDkActive, ticketQuantityChanged, canIncrementTotalQuantity, incrementTotalQuantity, decrementTotalQuantity, canIncrementTotalPoints, freeSeats } = this.props;\r\n switch (availableTicket.type) {\r\n case CONSTANTS.ticketType.quantity:\r\n return \r\n }\r\n }\r\n\r\n render() {\r\n const { availableTicket, appLocale } = this.props;\r\n let price = availableTicket.price ? this.generatePrice(availableTicket.price) + ` ${LOCALE[appLocale].currency}` : null;\r\n price = availableTicket.points ? availableTicket.points + ` ${LOCALE[appLocale].points}` : null;\r\n const ticketInteraction = this.generateTicketInteraction(availableTicket);\r\n\r\n return (\r\n
\r\n

{availableTicket.name}

\r\n
{price}
\r\n {ticketInteraction}\r\n
\r\n )\r\n }\r\n}","export default {\r\n da: {\r\n placeholderBioKlubDk: 'Indtast kuponnummer eller TAST-SELV-KODE',\r\n placeholderGiftCard: 'Gavekortnummer',\r\n placeholderDiscount: 'Rabatkode',\r\n submit: 'Indløs',\r\n error: 'Kun bogstaver og numre tilladt',\r\n errorInvalidType: 'Ugyldigt nummer',\r\n currency: 'kr.',\r\n remaningAmount: 'Ny saldo: ',\r\n toolTipOne: 'Du kan indtaste',\r\n toolTipStartsWith: 'som starter med',\r\n toolTipMulti: 'Du kan indtaste følgende typer: '\r\n },\r\n\r\n en: {\r\n placeholderBioKlubDk: 'Coupon number',\r\n placeholderGiftCard: 'Gift card number',\r\n placeholderDiscount: 'Discount code',\r\n submit: 'Redeem',\r\n error: 'Only letters and numbers allowed',\r\n errorInvalidType: 'Invalid code',\r\n currency: 'DKK',\r\n remaningAmount: 'Remaining amount: ',\r\n toolTipOne: 'You can only enter',\r\n toolTipStartsWith: 'starting with',\r\n toolTipMulti: 'You can only enter the following types:'\r\n }\r\n}","import './vouchers.scss'\r\nimport React from 'react'\r\nimport _ from 'lodash'\r\nimport { VOUCHER_TYPES } from '../../../api/api-constants'\r\nimport LOCALE from './VoucherLocale'\r\n\r\nexport default class Vouchers extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = { value: '', error: '', showToolTip: false };\r\n this.handleChange = this.handleChange.bind(this);\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.toggleToolTip = this.toggleToolTip.bind(this);\r\n }\r\n\r\n componentDidUpdate() {\r\n const { appHeightChanged, iframeId } = this.props;\r\n if (window.parent != window) appHeightChanged(iframeId);\r\n }\r\n\r\n handleChange(e) {\r\n const { appLocale } = this.props;\r\n const value = e.target.value.toUpperCase();\r\n if (!this.isLetterOrNumber(value)) this.setState({ error: LOCALE[appLocale].error });\r\n else if (this.isKeyStrokeValid(value)) this.setState({ value, error: '' });\r\n }\r\n\r\n isKeyStrokeValid(input) {\r\n const { type, appLocale, voucherConstraints } = this.props;\r\n const constraints = type == VOUCHER_TYPES.BIOKLUBDK ? _.filter(voucherConstraints, (voucher) => { return voucher.type == type }) : voucherConstraints;\r\n if (type != VOUCHER_TYPES.DISCOUNT && constraints.length > 0) {\r\n const vouchers = _.split(input, ',');\r\n const isValid = _.every(vouchers, (voucher) => {\r\n if (voucher.length <= 5) return true; // only check after 5 chars on each voucher number\r\n return _.some(constraints, (constraint) => {\r\n const startValid = voucher.startsWith(constraint.prefix);\r\n const lengthValid = voucher.length <= constraint.length;\r\n return startValid && lengthValid;\r\n });\r\n });\r\n\r\n if (!isValid) {\r\n this.setState({ error: LOCALE[appLocale].errorInvalidType });\r\n return false;\r\n } else return true;\r\n } else { //There are no constraints on this type and we proceeed.\r\n this.setState({ error: '' });\r\n return true;\r\n }\r\n }\r\n\r\n handleSubmit(e) {\r\n e.preventDefault();\r\n const { value } = this.state;\r\n const { type, vouchers, vouchersChanged } = this.props;\r\n if (type == VOUCHER_TYPES.DISCOUNT) {\r\n vouchersChanged(value);\r\n this.setState({ value: '' });\r\n } else if (this.isValidConstraints(value)) {\r\n let updatedVouchers = '';\r\n const voucherCodes = _.uniq(_.concat(_.split(value, ','), _.map(vouchers.active, 'barCode')));\r\n _.map(voucherCodes, (code) => { return updatedVouchers += code + ','; });\r\n updatedVouchers = _.trimEnd(updatedVouchers, ',');\r\n\r\n vouchersChanged(updatedVouchers);\r\n this.setState({ value: '' });\r\n }\r\n }\r\n\r\n isLetterOrNumber(input) {\r\n const regex = /^[A-Z0-9,]*$/;\r\n return regex.test(input);\r\n }\r\n\r\n isValidConstraints(input) {\r\n const { type, appLocale, voucherConstraints } = this.props;\r\n const constraints = type == VOUCHER_TYPES.BIOKLUBDK ? _.filter(voucherConstraints, (voucher) => { return voucher.type == type }) : voucherConstraints;\r\n if (constraints.length > 0) {\r\n const vouchers = _.split(input, ',');\r\n const isValid = _.every(vouchers, (voucher) => {\r\n return _.some(constraints, (constraint) => {\r\n const startValid = voucher.startsWith(constraint.prefix);\r\n const lengthValid = voucher.length == constraint.length;\r\n return startValid && lengthValid;\r\n });\r\n });\r\n\r\n if (!isValid) {\r\n this.setState({ error: LOCALE[appLocale].errorInvalidType });\r\n return false;\r\n } else return true;\r\n } else { //There are no constraints on this type and we proceeed.\r\n this.setState({ error: '' });\r\n return true;\r\n }\r\n }\r\n\r\n getPlaceholder() {\r\n const { type, appLocale } = this.props;\r\n switch (type) {\r\n case VOUCHER_TYPES.GIFTCARD:\r\n return LOCALE[appLocale].placeholderGiftCard;\r\n case VOUCHER_TYPES.BIOKLUBDK:\r\n return LOCALE[appLocale].placeholderBioKlubDk;\r\n case VOUCHER_TYPES.DISCOUNT:\r\n return LOCALE[appLocale].placeholderDiscount;\r\n }\r\n }\r\n\r\n getConstraints() {\r\n const { type, voucherConstraints, appLocale } = this.props;\r\n const constraints = type == VOUCHER_TYPES.BIOKLUBDK ? _.filter(voucherConstraints, (voucher) => { return voucher.type == type }) : voucherConstraints;\r\n if (constraints.length > 1) {\r\n const mapped = _.map(constraints, (constraint, i) => {\r\n return
  • {constraint.name} {LOCALE[appLocale].toolTipStartsWith} {constraint.prefix}
  • ;\r\n });\r\n return
    {LOCALE[appLocale].toolTipMulti} {mapped}
    ;\r\n } else if (constraints.length > 0)\r\n return
    {LOCALE[appLocale].toolTipOne} {constraints[0].name} {LOCALE[appLocale].toolTipStartsWith} {constraints[0].prefix}
    ;\r\n }\r\n\r\n toggleToolTip() {\r\n const { showToolTip } = this.state;\r\n if (showToolTip) this.setState({ showToolTip: false });\r\n else this.setState({ showToolTip: true });\r\n }\r\n\r\n render() {\r\n const { type, appLocale, inputInfo } = this.props;\r\n const { value, error, showToolTip } = this.state;\r\n const constraintInfo = type != VOUCHER_TYPES.DISCOUNT ? this.getConstraints() : null;\r\n const toolTip = type != VOUCHER_TYPES.DISCOUNT ?
    : null;\r\n\r\n return (\r\n
    \r\n \r\n \r\n {toolTip}\r\n {inputInfo ?
    : null}\r\n {!error ?
    {constraintInfo}
    : null}\r\n {error ?
    \r\n {error}\r\n {constraintInfo}\r\n
    : null}\r\n
    \r\n );\r\n }\r\n} ","import React from 'react'\r\nimport _ from 'lodash'\r\nimport Ticket from './Ticket'\r\nimport VoucherInput from '../../vouchers/VoucherInput'\r\nimport LOCALE from '../OrderLocale'\r\nimport { VOUCHER_TYPES } from '../../../../api/api-constants';\r\n\r\nexport default class AvailableTickets extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n totalTicketQuantity: props.order.selected.totalTicketQuantity || 0,\r\n selectedPoints: props.order.selected.clubCardPoints || 0\r\n }\r\n\r\n this.canIncrementTotalQuantity = this.canIncrementTotalQuantity.bind(this);\r\n this.canIncrementTotalPoints = this.canIncrementTotalPoints.bind(this);\r\n this.incrementTotalQuantity = this.incrementTotalQuantity.bind(this);\r\n this.decrementTotalQuantity = this.decrementTotalQuantity.bind(this);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n const { order } = this.props;\r\n const selected = order.selected;\r\n const nextSelected = nextProps.order.selected;\r\n const { totalTicketQuantity, selectedPoints } = this.state;\r\n\r\n if (selected.totalTicketQuantity && totalTicketQuantity != nextSelected.totalTicketQuantity)\r\n this.setState({ totalTicketQuantity: nextSelected.totalTicketQuantity });\r\n if (selected.clubCardPoints && selectedPoints != nextSelected.clubCardPoints)\r\n this.setState({ selectedPoints: nextSelected.clubCardPoints });\r\n }\r\n\r\n canIncrementTotalQuantity() {\r\n let { totalTicketQuantity } = this.state;\r\n const { order } = this.props;\r\n const newTotal = totalTicketQuantity + 1;\r\n return newTotal <= Math.max(order.buyMax, order.reserveMax);\r\n }\r\n\r\n incrementTotalQuantity() {\r\n let { totalTicketQuantity } = this.state;\r\n this.setState({ totalTicketQuantity: ++totalTicketQuantity })\r\n }\r\n\r\n decrementTotalQuantity() {\r\n let { totalTicketQuantity } = this.state;\r\n if (totalTicketQuantity > 0) {\r\n this.setState({ totalTicketQuantity: --totalTicketQuantity })\r\n }\r\n }\r\n\r\n canIncrementTotalPoints(incrementBy) {\r\n const { selectedPoints } = this.state;\r\n const { order } = this.props;\r\n const newTotal = selectedPoints + incrementBy;\r\n const canIncrement = newTotal <= order.clubCard.points;\r\n if (canIncrement) this.setState({ selectedPoints: newTotal });;\r\n return canIncrement;\r\n }\r\n\r\n generateTickets() {\r\n const { order, ticketQuantityChanged, bioDkActive, freeSeats, appLocale, discountEnabled } = this.props;\r\n const selected = order.selected;\r\n let selectedIdsHandled = [];\r\n let tickets = [];\r\n\r\n _.forEach(order.availableTickets, (available) => {\r\n const selectedTicket = _.find(selected.tickets, (ticket) => { return available.id === ticket.id; });\r\n if (selectedTicket != null) selectedIdsHandled.push(selectedTicket.id);\r\n\r\n tickets.push();\r\n });\r\n\r\n //Checking if there have been added other selected tickets that are not in available tickets, such as biografklub dk\r\n if (bioDkActive && selectedIdsHandled.length < selected.tickets.length) {\r\n _.forEach(selected.tickets, (ticket) => {\r\n const existing = _.find(selectedIdsHandled, (id) => { return id === ticket.id });\r\n if (!existing) {\r\n tickets.push(
    \r\n

    {ticket.name}

    \r\n
    {ticket.quantity}
    \r\n
    )\r\n }\r\n });\r\n }\r\n\r\n return tickets;\r\n }\r\n\r\n getVoucherText() {\r\n const { configuration, order, appLocale } = this.props;\r\n if (!configuration.giftCardsEnabled && order.bioKlubDk.available)\r\n return {LOCALE[appLocale].discountTextBioKlubDk};\r\n else if (configuration.giftCardsEnabled && !order.bioKlubDk.available)\r\n return {LOCALE[appLocale].discountTextGiftCard};\r\n else if (configuration.giftCardsEnabled && order.bioKlubDk.available)\r\n return {LOCALE[appLocale].discountTextBoth};\r\n else return null;\r\n }\r\n\r\n getLocationText() {\r\n const { configuration, locationId } = this.props;\r\n const locationText = _.find(configuration.locationTexts, (text) => { return text.id == locationId });\r\n return locationText ? locationText.text : null;\r\n }\r\n\r\n render() {\r\n const { initialFetchDone, discountEnabled, discountActivated, appLocale, submitDiscountCode, appHeightChanged } = this.props;\r\n const tickets = initialFetchDone ? this.generateTickets() : null;\r\n const voucherText = this.getVoucherText();\r\n const locationText = this.getLocationText();\r\n\r\n return (\r\n
    \r\n {locationText ?
    : null}\r\n {tickets}\r\n {!discountActivated && discountEnabled ?
    \r\n {voucherText}
    : null}\r\n
    \r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport LOCALE from '../OrderLocale'\r\n\r\nexport default class SelectedSeats extends React.Component {\r\n\r\n extractRowsAndSeats() {\r\n const { hasNumberedSeats, selectedSeats, appLocale } = this.props;\r\n if (hasNumberedSeats) {\r\n return _.map(selectedSeats, (seatText, i) => {\r\n return
    {seatText}
    ;\r\n });\r\n } else return LOCALE[appLocale].seatsUnNumbered;\r\n }\r\n\r\n render() {\r\n const { label } = this.props;\r\n const rowsAndSeats = this.extractRowsAndSeats();\r\n return (\r\n
    \r\n {label}\r\n
    {rowsAndSeats}
    \r\n
    \r\n )\r\n }\r\n}","import React from 'react'\r\nimport LOCALE from '../OrderLocale'\r\n\r\nconst SeatColors = ({ showReservedAsRed, appLocale }) => {\r\n return showReservedAsRed ?\r\n
    \r\n {LOCALE[appLocale].seatBlue}\r\n {LOCALE[appLocale].seatGreen}\r\n {LOCALE[appLocale].seatRed}\r\n
    \r\n :\r\n
    \r\n {LOCALE[appLocale].seatBlue}\r\n {LOCALE[appLocale].seatGreen}\r\n {LOCALE[appLocale].seatWhite}\r\n {LOCALE[appLocale].seatRed}\r\n
    ; \r\n}\r\n\r\nexport default SeatColors","import React from 'react'\r\nimport _ from 'lodash'\r\nimport SelectedSeats from './SelectedSeats'\r\nimport SeatColors from './SeatColors'\r\nimport LOCALE from '../OrderLocale'\r\n\r\nexport default class SeatSelection extends React.Component {\r\n constructor() {\r\n super();\r\n this.selectedSeatsChanged = this.selectedSeatsChanged.bind(this);\r\n }\r\n\r\n selectedSeatsChanged(e) {\r\n const { selected, moveSeats, setError, appLocale } = this.props;\r\n\r\n if (selected.tickets.length > 0) {\r\n setError('');\r\n const target = e.target;\r\n const boundingClientRect = target.getBoundingClientRect();\r\n let x = (e.pageX - boundingClientRect.left) - window.pageXOffset;\r\n let y = (e.pageY - boundingClientRect.top) - window.pageYOffset;\r\n\r\n if (target.naturalWidth != target.width) {\r\n x = x * target.naturalWidth / target.width;\r\n y = y * target.naturalHeight / target.height;\r\n }\r\n moveSeats(selected.transactionId, parseInt(x), parseInt(y));\r\n } else setError(LOCALE[appLocale].chooseSeats);\r\n }\r\n\r\n render() {\r\n const { showtime, seatsImage, selected, configuration, error, showReceiptData, receipt, appLocale } = this.props;\r\n const seatsImageClass = selected.tickets.length === 0 && !selected.vouchers.active ? 'dim' : 'fade-in';\r\n const errorMessage = error ?
    {error}
    : null;\r\n \r\n const seats = showReceiptData ? receipt.seatTexts : selected.seatTexts;\r\n const prefix = selected.seats.length == 0 ? null : (selected.seats.length > 1 ? LOCALE[appLocale].multiSeats : LOCALE[appLocale].oneSeat);\r\n\r\n return (\r\n
    \r\n {errorMessage}\r\n {showtime.hasNumberedSeats ?\r\n
    \r\n \r\n \r\n \r\n
    \r\n :

    \r\n }\r\n
    \r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\n\r\nexport default class Info extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = { show: false };\r\n this.close = this.close.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n setTimeout(() => { this.setState({ show: true }); }, 0) // css transition workaround\r\n\r\n const body = document.querySelector('body');\r\n body.classList.add('no-scroll');\r\n }\r\n\r\n close() {\r\n const { canClose } = this.props;\r\n if (canClose) {\r\n const body = document.querySelector('body');\r\n body.classList.remove('no-scroll');\r\n\r\n this.setState({ show: false });\r\n }\r\n }\r\n\r\n render() {\r\n const { show } = this.state;\r\n const { title, text, buttons } = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n

    {title}

    \r\n

    ') }} />\r\n

    {buttons}
    \r\n
    \r\n
    \r\n )\r\n }\r\n}","import './order.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport CONSTANTS from '../orderflow-constants'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport { APP_MODES } from '../../../api/api-constants'\r\nimport * as orderActions from '../../../actions/order-actions'\r\nimport * as gaActions from '../../../actions/ga-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport AvailableTickets from './ticketselection/AvailableTickets'\r\nimport SeatSelection from './seatselection/SeatSelection'\r\nimport LOCALE from './OrderLocale'\r\nimport Info from '../../overlays/Info'\r\n\r\nclass OrderContainer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n error: '',\r\n canReserveSelected: true,\r\n canBuySelected: true,\r\n showInfoBox: false\r\n };\r\n props.actions.calculateTotalPrice();\r\n this.ticketQuantityChanged = this.ticketQuantityChanged.bind(this);\r\n this.submitDiscountCode = this.submitDiscountCode.bind(this);\r\n this.navBack = this.navBack.bind(this)\r\n this.navNext = this.navNext.bind(this);\r\n this.setError = this.setError.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, iframeId } = this.props; \r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n\r\n this.checkAndUpdateReserveAndBuy();\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (!this.props.order.isFetching && this.props.selected.totalTicketQuantity != null)\r\n this.checkAndUpdateReserveAndBuy();\r\n\r\n if (this.props.showInfoBox != nextProps.showInfoBox) {\r\n this.setState({ showInfoBox: nextProps.showInfoBox });\r\n }\r\n }\r\n\r\n ticketQuantityChanged(id, quantity) {\r\n this.setError('');\r\n const { actions, showtime, selected } = this.props;\r\n let selectedTickets = [...selected.tickets];\r\n const existingTicket = _.find(selectedTickets, (ticket) => { return id === ticket.id; });\r\n if (existingTicket) {\r\n if (quantity > 0) existingTicket.quantity = quantity;\r\n else _.remove(selectedTickets, (ticket) => { return ticket.id === existingTicket.id });\r\n } else selectedTickets.push({ id, quantity });\r\n\r\n this.checkAndUpdateReserveAndBuy();\r\n actions.ticketQuantityChanged(showtime.id, selected.transactionId, selectedTickets, selected.vouchers);\r\n }\r\n\r\n submitDiscountCode(discountCode) {\r\n const { showtime, clubCardId, actions } = this.props;\r\n actions.getAvailableTicketsAndExtraPurchases(showtime.id, clubCardId, discountCode);\r\n }\r\n\r\n setError(message) {\r\n this.setState({ error: message });\r\n }\r\n\r\n navBack(e) {\r\n const { organizerId, history, actions } = this.props;\r\n actions.resetOrder();\r\n const page = e.target.dataset.navTo;\r\n history.push(`${page}?org=${organizerId}`);\r\n }\r\n\r\n navNext(e) {\r\n const { organizerId, showtime, order, selected, actions, history, appLocale, bioKlubDkAvailable } = this.props;\r\n const { canReserveSelected, canBuySelected } = this.state;\r\n if (selected.tickets.length > 0) {\r\n const orderType = e.target.id;\r\n\r\n if (orderType === CONSTANTS.orderTypes.reserve && (!this.canReserveNow() || !canReserveSelected))\r\n order.clubCard ? this.setError(LOCALE[appLocale].noReserveClubCard) : this.setError(LOCALE[appLocale].noReserve);\r\n else if (orderType === CONSTANTS.orderTypes.buy && (!this.canBuyNow() || !canBuySelected))\r\n this.setError(LOCALE[appLocale].noBuy);\r\n else {\r\n actions.gaTrackCheckoutStep(1);\r\n actions.orderTypeChanged(orderType);\r\n if (e.target.dataset.buyBioKlubDk && bioKlubDkAvailable) history.push(`${ROUTES.ORDERFLOW.BIOKLUB_DK}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n else history.push(`${ROUTES.ORDERFLOW.EXTRA_PURCHASES}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n } else this.setError(LOCALE[appLocale].chooseTickets);\r\n }\r\n\r\n canReserveNow() {\r\n const { showtime } = this.props;\r\n const datetimeNow = moment();\r\n const isInsidePeriod = datetimeNow >= moment(showtime.reserveInfo.start) && datetimeNow <= moment(showtime.reserveInfo.end);\r\n return showtime.reserveInfo.enabled && isInsidePeriod;\r\n }\r\n\r\n canBuyNow() {\r\n const { showtime } = this.props;\r\n const datetimeNow = moment();\r\n const isInsidePeriod = datetimeNow >= moment(showtime.buyInfo.start) && datetimeNow <= moment(showtime.buyInfo.end);\r\n return showtime.buyInfo.enabled && isInsidePeriod;\r\n }\r\n\r\n checkAndUpdateReserveAndBuy() {\r\n const { order } = this.props;\r\n const canReserveTotalQuantity = order.selected.totalTicketQuantity <= order.reserveMax;\r\n const canBuyTotalQuantity = order.selected.totalTicketQuantity <= order.buyMax;\r\n let canReserveTicketQuantity = true, canBuyTicketQuantity = true;\r\n _.some(order.selected.tickets, function (selectedTicket) {\r\n const availableTicket = _.find(order.availableTickets, (available) => { return selectedTicket.id == available.id; });\r\n if (availableTicket) {\r\n canReserveTicketQuantity = availableTicket.canReserve !== false && selectedTicket.quantity <= availableTicket.reserveMax;\r\n canBuyTicketQuantity = availableTicket.canBuy !== false && selectedTicket.quantity <= availableTicket.buyMax;\r\n }\r\n });\r\n\r\n this.setState({\r\n canReserveSelected: canReserveTotalQuantity && canReserveTicketQuantity && !order.clubCard && order.canReserve,\r\n canBuySelected: canBuyTotalQuantity && canBuyTicketQuantity\r\n });\r\n }\r\n\r\n generateReserveButton(selected) {\r\n const { bioDkActive, appLocale, configuration, canReserve } = this.props;\r\n const { canReserveSelected } = this.state;\r\n let reserveClasses = canReserve && selected.tickets.length > 0 && canReserveSelected ? 'next green fade-in' : 'next green dim';\r\n if (configuration.openOrderInNewWindow) reserveClasses += ' no-top-margin';\r\n return !bioDkActive && this.canReserveNow() ? : null;\r\n }\r\n\r\n generateBuyButton(selected) {\r\n const { canBuySelected } = this.state;\r\n const { appLocale, configuration } = this.props;\r\n let buyClasses = selected.tickets.length > 0 && canBuySelected ? 'next green fade-in' : 'next green dim';\r\n if (configuration.openOrderInNewWindow) buyClasses += ' no-top-margin';\r\n return this.canBuyNow() ? : null;\r\n }\r\n\r\n generateBioKlubDkButton(selected) {\r\n const { canBuySelected } = this.state;\r\n const { appLocale, configuration } = this.props;\r\n let buyClasses = selected.tickets.length > 0 && canBuySelected ? 'next green fade-in' : 'next green dim';\r\n if (configuration.openOrderInNewWindow) buyClasses += ' no-top-margin';\r\n return this.canBuyNow() ? : null;\r\n }\r\n\r\n generateBackButtons(configuration, showtime) {\r\n const { backTo, appLocale } = this.props;\r\n let backText = LOCALE[appLocale].backProgram;\r\n switch (backTo) {\r\n case ROUTES.PROGRAM:\r\n backText = LOCALE[appLocale].backProgram;\r\n break;\r\n case ROUTES.ALL_MOVIES:\r\n backText = LOCALE[appLocale].backAll;\r\n break;\r\n case ROUTES.FUTURE_MOVIES:\r\n backText = LOCALE[appLocale].backFuture;\r\n break;\r\n }\r\n\r\n const programButton = configuration.appMode !== APP_MODES.ORDERFLOW && configuration.appMode !== APP_MODES.MOVIE ?\r\n : null;\r\n\r\n const movieButton = configuration.appMode !== APP_MODES.ORDERFLOW ? : null;\r\n\r\n return
    {programButton}{movieButton}
    ;\r\n }\r\n\r\n render() {\r\n const { showInfoBox } = this.state;\r\n const { showtime, order, selected, configuration, actions, bioDkActive, initialFetchDone, appLocale, discountEnabled, discountActivated, bioKlubDkAvailable } = this.props;\r\n const backButtons = !configuration.openOrderInNewWindow ? this.generateBackButtons(configuration, showtime) : null;\r\n const reserveButton = showtime ? this.generateReserveButton(selected) : null;\r\n const buyButton = showtime ? this.generateBuyButton(selected) : null;\r\n const buyBioKlubDkButton = showtime && bioKlubDkAvailable ? this.generateBioKlubDkButton(selected) : null;\r\n const disabled = !reserveButton && !buyButton ? {LOCALE[appLocale].noOnlineOrder} : null;\r\n const navButtonClasses = configuration.bottomBarAllwaysVisible ? 'nav-buttons fixed' : 'nav-buttons';\r\n\r\n const seatSelection = showtime ? : null;\r\n\r\n let infoText = '';\r\n if (showtime.info) infoText = showtime.info;\r\n else if (showInfoBox) infoText = LOCALE[appLocale].extraPurchasesReset;\r\n\r\n return (\r\n
    \r\n {infoText ? this.setState({ showInfoBox: false })} value=\"OK\" />} /> : null}\r\n\r\n
    \r\n \r\n {seatSelection}\r\n
    \r\n
    \r\n {backButtons}\r\n
    \r\n {buyButton}\r\n {buyBioKlubDkButton}\r\n {reserveButton}\r\n
    \r\n {disabled}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n currentPage: ownProps.currentPage,\r\n organizerId: state.organizer.id,\r\n showtime: state.movielist.selectedShowtime,\r\n order: state.order,\r\n selected: state.order.selected,\r\n configuration: state.organizer.configuration,\r\n bioKlubDkAvailable: state.order.bioKlubDk.available,\r\n bioDkActive: state.order.selected.vouchers.active != '',\r\n backTo: state.movielist.backTo,\r\n initialFetchDone: state.order.initialFetchDone,\r\n appLocale: state.app.locale,\r\n discountEnabled: state.order.discountEnabled,\r\n discountActivated: state.order.discountActivated,\r\n clubCardId: state.user.clubCardId,\r\n canReserve: state.order.canReserve,\r\n showInfoBox: state.order.showInfoBox,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, orderActions, gaActions, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(OrderContainer)","export function isValidPhone(number, minLength) {\r\n const regex = new RegExp(`^\\\\d{${minLength},}$`);\r\n return regex.test(number);\r\n}\r\n\r\nexport function isValidEmail(email) {\r\n const regex = /^([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,4})+$/;\r\n return regex.test(email);\r\n}\r\n\r\nexport function isValidPassword(password) {\r\n const regex = /^[a-zA-Z0-9_.-]*$/;\r\n return regex.test(password) && password !== '';\r\n}\r\n\r\nexport function hasDecimals(number) {\r\n if (!isNaN(number)) return number % 1 != 0;\r\n else return false;\r\n}\r\n\r\nexport function withTwoDecimals(number) { return number.toFixed(2).replace('.', ',') }","import OrderFlowLocale from '../OrderFlowLocale'\r\n\r\nexport default {\r\n da: {\r\n ...OrderFlowLocale.da,\r\n customerInfo: 'Dine oplysninger',\r\n name: 'Navn',\r\n phone: 'Telefon',\r\n email: 'Email',\r\n repeatEmail: 'Gentag email',\r\n password: 'Opret kode',\r\n zipCode: 'Postnr.',\r\n note: 'Note',\r\n passwordReserveText: 'Hvis du ønsker at slette din bestilling senere',\r\n passwordBuyText: 'Koden skal bruges, hvis du ønsker at finde dit køb frem senere',\r\n rememberMe: 'Husk mig',\r\n smsReminder: 'Gratis SMS påmindelse',\r\n acceptConditions: 'Jeg accepterer købsvilkårene for dette køb',\r\n\r\n errorName: 'Skal være udfyldt',\r\n errorPhone: 'Skal bestå af minimum INSERT_NUMBER tal',\r\n errorEmail: 'Skal være en gyldig email',\r\n errorRepeatEmail: 'De indtastede e-mails er ikke ens',\r\n errorPassword: 'Må kun indeholde bogstaver og tal',\r\n errorZipCode: 'Skal være et gyldigt post nummer',\r\n errorConditionsAccepted: 'Du skal acceptere købsvilkårene for at fortsætte'\r\n },\r\n\r\n en: {\r\n ...OrderFlowLocale.en,\r\n customerInfo: 'Your information',\r\n name: 'Name',\r\n phone: 'Phone',\r\n email: 'Email',\r\n repeatEmail: 'Repeat email',\r\n password: 'Add password',\r\n zipCode: 'Zip code',\r\n note: 'Note',\r\n passwordReserveText: 'If you wish to cancel your reservation later',\r\n passwordBuyText: 'The password is needed if you wish to find your purchase information later',\r\n rememberMe: 'Remember me',\r\n smsReminder: 'Free SMS reminder',\r\n acceptConditions: 'I accept the purchase agreement for this order',\r\n\r\n errorName: 'Has to be filled out',\r\n errorPhone: 'Has to be minimum INSERT_NUMBER numbers',\r\n errorEmail: 'Has to be a valid email',\r\n errorRepeatEmail: 'The entered emails are not the same',\r\n errorPassword: 'Can only contain letters and numbers',\r\n errorZipCode: 'Has to be a valid zip code',\r\n errorConditionsAccepted: 'You have to accept the purchase agreement to continue'\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport * as validators from '../../../utilities/validation-utilities'\r\nimport LOCALE from './CustomerLocale'\r\nimport { ORGANIZER_TYPES } from '../../../api/api-constants';\r\n\r\nexport default class Customer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n const customer = props.customer;\r\n this.state = {\r\n isValid: {\r\n name: customer.name !== '',\r\n phone: validators.isValidPhone(customer.phone, props.configuration.phoneMinLength),\r\n email: validators.isValidEmail(customer.email),\r\n repeatEmail: validators.isValidEmail(customer.repeatEmail) && customer.email === customer.repeatEmail,\r\n password: validators.isValidPassword(customer.password),\r\n conditionsAccepted: customer.conditionsAccepted === true,\r\n zipCode: customer.zipCode !== ''\r\n },\r\n name: customer.name,\r\n phone: customer.phone,\r\n email: customer.email,\r\n repeatEmail: customer.repeatEmail,\r\n password: customer.password,\r\n smsReminder: customer.smsReminder == null ? props.configuration.smsReminder.checkedByDefault : customer.smsReminder,\r\n rememberMe: customer.rememberMe,\r\n conditionsAccepted: customer.conditionsAccepted,\r\n zipCode: customer.zipCode,\r\n note: customer.note\r\n }\r\n\r\n // Need this in customer store for reserve and book\r\n if (customer.smsReminder == null) props.actions.smsReminderChanged(props.configuration.smsReminder.checkedByDefault);\r\n if (customer.newsletters.length == 0 && props.configuration.newsletters.length > 0) props.actions.newsletterChanged(props.configuration.newsletters);\r\n //--\r\n\r\n this.nameChanged = this.nameChanged.bind(this);\r\n this.phoneChanged = this.phoneChanged.bind(this);\r\n this.emailChanged = this.emailChanged.bind(this);\r\n this.repeatEmailChanged = this.repeatEmailChanged.bind(this);\r\n this.passwordChanged = this.passwordChanged.bind(this);\r\n this.newsletterChanged = this.newsletterChanged.bind(this);\r\n this.smsReminderChanged = this.smsReminderChanged.bind(this);\r\n this.rememberMeChanged = this.rememberMeChanged.bind(this);\r\n this.customerChanged = this.customerChanged.bind(this);\r\n this.conditionsAcceptedChanged = this.conditionsAcceptedChanged.bind(this);\r\n this.zipCodeChanged = this.zipCodeChanged.bind(this);\r\n this.noteChanged = this.noteChanged.bind(this);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n if (this.props.clubCardId) {\r\n const customer = nextProps.customer;\r\n this.setState({\r\n isValid: {\r\n name: customer.name !== '',\r\n phone: validators.isValidPhone(customer.phone, nextProps.configuration.phoneMinLength),\r\n email: validators.isValidEmail(customer.email),\r\n repeatEmail: validators.isValidEmail(customer.repeatEmail) && customer.email === customer.repeatEmail,\r\n conditionsAccepted: customer.conditionsAccepted === true,\r\n zipCode: customer.zipCode !== ''\r\n },\r\n name: customer.name,\r\n phone: customer.phone,\r\n email: customer.email,\r\n repeatEmail: customer.repeatEmail,\r\n conditionsAccepted: customer.conditionsAccepted,\r\n zipCode: customer.zipCode,\r\n note: customer.note\r\n });\r\n }\r\n }\r\n\r\n customerChanged() {\r\n const customer = this.state;\r\n this.props.actions.customerChanged({\r\n name: customer.name,\r\n phone: customer.phone,\r\n email: customer.email,\r\n repeatEmail: customer.repeatEmail,\r\n password: customer.password,\r\n zipCode: customer.zipCode,\r\n note: customer.note\r\n });\r\n }\r\n\r\n nameChanged(e) {\r\n const name = e.target.value;\r\n const isValid = name !== '';\r\n this.setState({ name, isValid: { ...this.state.isValid, name: isValid } });\r\n }\r\n\r\n phoneChanged(e) {\r\n const { configuration } = this.props;\r\n let phone = e.target.value;\r\n phone = this.numbersOnly(phone);\r\n\r\n const isValid = validators.isValidPhone(phone, configuration.phoneMinLength);\r\n this.setState({ phone, isValid: { ...this.state.isValid, phone: isValid } });\r\n }\r\n\r\n numbersOnly(input) {\r\n const nonNumericRegex = /[^0-9]+/g;\r\n input = input.replace(nonNumericRegex, '');\r\n return input;\r\n }\r\n\r\n emailChanged(e) {\r\n const email = e.target.value;\r\n const isValid = validators.isValidEmail(email);\r\n const repeatEmail = this.state.repeatEmail;\r\n const repeatEmailIsValid = validators.isValidEmail(repeatEmail) && email === repeatEmail;\r\n this.setState({ email, isValid: { ...this.state.isValid, email: isValid, repeatEmail: repeatEmailIsValid } });\r\n }\r\n\r\n repeatEmailChanged(e) {\r\n const repeatEmail = e.target.value;\r\n const isValid = validators.isValidEmail(repeatEmail) && this.state.email === repeatEmail;\r\n this.setState({ repeatEmail, isValid: { ...this.state.isValid, repeatEmail: isValid } });\r\n }\r\n\r\n passwordChanged(e) {\r\n const password = e.target.value;\r\n const isValid = validators.isValidPassword(password);\r\n this.setState({ password, isValid: { ...this.state.isValid, password: isValid } });\r\n }\r\n\r\n newsletterChanged(e) {\r\n const id = e.target.id;\r\n const checked = e.target.checked;\r\n const { customer, configuration, actions } = this.props;\r\n const newsletters = customer.newsletters.length > 0 ? customer.newsletters : configuration.newsletters;\r\n const letter = _.find(newsletters, (letter) => { return letter.id == id });\r\n letter.checked = checked;\r\n actions.newsletterChanged(newsletters);\r\n }\r\n\r\n smsReminderChanged(e) {\r\n const checked = e.target.checked;\r\n this.setState({ smsReminder: checked });\r\n this.props.actions.smsReminderChanged(checked);\r\n }\r\n\r\n rememberMeChanged(e) {\r\n const checked = e.target.checked;\r\n this.setState({ rememberMe: checked });\r\n this.props.actions.rememberMeChanged(checked);\r\n }\r\n\r\n conditionsAcceptedChanged(e) {\r\n const checked = e.target.checked;\r\n const isValid = checked === true;\r\n this.setState({ conditionsAccepted: checked, isValid: { ...this.state.isValid, conditionsAccepted: isValid } });\r\n this.props.actions.conditionsAcceptedChanged(checked);\r\n }\r\n\r\n zipCodeChanged(e) {\r\n let zipCode = e.target.value;\r\n zipCode = this.numbersOnly(zipCode);\r\n const isValid = zipCode !== '';\r\n this.setState({ zipCode, isValid: { ...this.state.isValid, zipCode: isValid } });\r\n }\r\n\r\n noteChanged(e) {\r\n const note = e.target.value;\r\n this.setState({ note });\r\n }\r\n\r\n generateNewsletters(newsletters) {\r\n const { customer } = this.props;\r\n return _.map(newsletters, (newsletter) => {\r\n if (newsletter.enabled) {\r\n const remembered = _.find(customer.newsletters, (letter) => { return newsletter.id == letter.id });\r\n return \r\n }\r\n });\r\n }\r\n\r\n generatePasswordInput() {\r\n const { configuration, isReserve, errors, clubCardId, appLocale } = this.props;\r\n const { password, isValid } = this.state;\r\n\r\n return configuration.customerPasswordEnabled && !clubCardId ?
    \r\n \r\n \r\n
    {isReserve ? LOCALE[appLocale].passwordReserveText : LOCALE[appLocale].passwordBuyText}
    \r\n
    {!isValid.password ? errors.password : ''}
    \r\n
    : null;\r\n }\r\n\r\n generateCircusInputs() {\r\n const { appLocale, errors } = this.props;\r\n const { isValid, zipCode, note } = this.state;\r\n\r\n return
    \r\n
    \r\n \r\n \r\n
    {!isValid.zipCode ? errors.zipCode : ''}
    \r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n }\r\n\r\n render() {\r\n const { configuration, isReserve, errors, clubCardId, appLocale, organizerType } = this.props;\r\n const { name, phone, email, repeatEmail, isValid, smsReminder, rememberMe, conditionsAccepted } = this.state;\r\n\r\n const passwordTextBox = this.generatePasswordInput();\r\n const newsletterCheckboxes = configuration.newsletters.length > 0 && !clubCardId ? this.generateNewsletters(configuration.newsletters) : null;\r\n const smsReminderCheckbox = configuration.smsReminder.enabled && isReserve ? : null;\r\n const newsletterGdpr = newsletterCheckboxes && configuration.gdprTexts.newsletters && !clubCardId ?
    : null;\r\n const rememberMeCheckbox = !clubCardId ? : null;\r\n\r\n const circusTextBoxes = organizerType == ORGANIZER_TYPES.CIRCUS ? this.generateCircusInputs() : null;\r\n\r\n return (\r\n
    \r\n

    {LOCALE[appLocale].customerInfo}

    \r\n
    \r\n \r\n \r\n
    {!isValid.name ? errors.name : ''}
    \r\n
    \r\n
    \r\n \r\n \r\n
    {!isValid.phone ? errors.phone : ''}
    \r\n
    \r\n
    \r\n \r\n \r\n
    {!isValid.email ? errors.email : ''}
    \r\n
    \r\n {configuration.repeatEmail ?
    \r\n \r\n \r\n
    {!isValid.repeatEmail ? errors.repeatEmail : ''}
    \r\n
    : null}\r\n {passwordTextBox}\r\n {circusTextBoxes}\r\n\r\n
    \r\n
    \r\n {rememberMeCheckbox}\r\n {smsReminderCheckbox}\r\n {newsletterCheckboxes}\r\n
    \r\n {newsletterGdpr}\r\n\r\n {!isReserve ?
    \r\n \r\n
    {!isValid.conditionsAccepted ? errors.conditionsAccepted : ''}
    \r\n
    : null}\r\n
    \r\n
    \r\n )\r\n }\r\n}","import './customer.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport * as orderActions from '../../../actions/order-actions'\r\nimport * as customerActions from '../../../actions/customer-actions'\r\nimport * as gaActions from '../../../actions/ga-actions'\r\nimport * as validators from '../../../utilities/validation-utilities'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../orderflow-constants'\r\nimport Customer from './Customer'\r\nimport LOCALE from './CustomerLocale'\r\nimport { ORGANIZER_TYPES } from '../../../api/api-constants';\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\n\r\nclass CustomerContainer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n\r\n this.state = {\r\n errors: {\r\n name: '',\r\n phone: '',\r\n email: '',\r\n repeatEmail: '',\r\n password: '',\r\n conditionsAccepted: '',\r\n zipCode: ''\r\n },\r\n }\r\n\r\n props.actions.gaTrackCheckoutStep(2);\r\n this.navBack = this.navBack.bind(this);\r\n this.navNext = this.navNext.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n navBack() {\r\n const { customer, history, actions, clubCardId } = this.props;\r\n if (customer.rememberMe === true && !clubCardId) actions.updateCustomerLocalStorage();\r\n history.goBack();\r\n }\r\n\r\n navNext(e) {\r\n const id = e.target.id;\r\n const { organizerId, actions, transactionId, customer, showtime, clubCardId, totalPrice, history } = this.props;\r\n if (customer.rememberMe === true && !clubCardId) actions.updateCustomerLocalStorage();\r\n\r\n if (this.customerIsValid(id) === true) {\r\n if (id === CONSTANTS.orderTypes.reserve) {\r\n actions.reserve(transactionId, customer)\r\n .then((result) => { if (!result.error) { history.push(`${ROUTES.ORDERFLOW.RECEIPT}/${showtime.movieId}/${showtime.id}?org=${organizerId}`); } });\r\n } else if (totalPrice === 0) {\r\n actions.preBook(transactionId, customer).then((result) => {\r\n if (!result.error) {\r\n actions.book(transactionId, customer, 'Free', result.dibs.parameters.orderid, totalPrice, null)\r\n .then((result) => { if (!result.error) history.push(`${ROUTES.ORDERFLOW.RECEIPT}/${showtime.movieId}/${showtime.id}?org=${organizerId}`) });\r\n }\r\n });\r\n } else history.push(`${ROUTES.ORDERFLOW.PAYMENT}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n }\r\n\r\n customerIsValid(orderType) {\r\n const isReserve = orderType === CONSTANTS.orderTypes.reserve\r\n const { customer, configuration, appLocale, organizerType } = this.props;\r\n const nameIsValid = customer.name !== '',\r\n phoneIsValid = validators.isValidPhone(customer.phone, configuration.phoneMinLength),\r\n emailIsValid = validators.isValidEmail(customer.email),\r\n repeatEmailIsValid = configuration.repeatEmail ? validators.isValidEmail(customer.repeatEmail) && customer.email === customer.repeatEmail : true,\r\n passwordIsValid = !configuration.customerPasswordEnabled ? true : validators.isValidPassword(customer.password),\r\n conditionsAccepted = !isReserve ? customer.conditionsAccepted === true : true, //only check for buy\r\n zipCodeIsValid = organizerType == ORGANIZER_TYPES.CIRCUS ? customer.zipCode !== '' : true; //only for circus\r\n\r\n const errors = {\r\n name: !nameIsValid ? LOCALE[appLocale].errorName : '',\r\n phone: !phoneIsValid ? LOCALE[appLocale].errorPhone.replace('INSERT_NUMBER', configuration.phoneMinLength) : '',\r\n email: !emailIsValid ? LOCALE[appLocale].errorEmail : '',\r\n repeatEmail: !repeatEmailIsValid ? LOCALE[appLocale].errorRepeatEmail : '',\r\n password: !passwordIsValid ? LOCALE[appLocale].errorPassword : '',\r\n conditionsAccepted: !isReserve && !conditionsAccepted ? LOCALE[appLocale].errorConditionsAccepted : '',\r\n zipCode: !zipCodeIsValid ? LOCALE[appLocale].errorZipCode : ''\r\n }\r\n\r\n\r\n this.setState({ errors });\r\n return nameIsValid && phoneIsValid && emailIsValid && repeatEmailIsValid && passwordIsValid && conditionsAccepted && zipCodeIsValid;\r\n }\r\n\r\n render() {\r\n const { orderType, configuration, customer, actions, clubCardId, appLocale, organizerType } = this.props;\r\n const { errors } = this.state;\r\n\r\n\r\n const nextButton = orderType === CONSTANTS.orderTypes.buy || orderType === CONSTANTS.orderTypes.buyReservation ?\r\n :\r\n ;\r\n\r\n const gdprText = orderType !== CONSTANTS.orderTypes.reserve ?
    :\r\n
    ;\r\n\r\n return (\r\n
    \r\n \r\n\r\n {gdprText}\r\n\r\n
    \r\n \r\n {nextButton}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n //TODO make this an action like calculateTotalPrice and store in state\r\n const totalTicketPrice = state.order.selected.totalTicketPrice;\r\n const totalExtraPurchasesPrice = state.order.selected.totalExtraPurchasesPrice;\r\n const priceBeforeFees = totalTicketPrice + totalExtraPurchasesPrice;\r\n const totalFees = state.order.selected.totalFees;\r\n const totalPrice = priceBeforeFees > 0 ? priceBeforeFees + totalFees : priceBeforeFees;\r\n //----\r\n\r\n return {\r\n organizerId: state.organizer.id,\r\n showtime: state.movielist.selectedShowtime,\r\n orderType: state.order.orderType,\r\n configuration: state.organizer.configuration,\r\n customer: state.customer,\r\n transactionId: state.order.selected.transactionId,\r\n receipt: state.receipt,\r\n clubCardId: state.user.clubCardId,\r\n totalPrice,\r\n appLocale: state.app.locale,\r\n organizerType: state.organizer.configuration.type,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, orderActions, customerActions, gaActions, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(CustomerContainer)","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport { logTrace } from '../../../api/orderflow-api'\r\nimport { resetOrder } from '../../../actions/order-actions'\r\nimport { book } from '../../../actions/customer-actions'\r\nimport { gaTrackCheckoutStep } from '../../../actions/ga-actions'\r\nimport { getParams } from '../../../utilities/location-utilities'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\n\r\nclass DibsContainer extends React.Component {\r\n componentDidMount() {\r\n window.scrollTo(0, 0);\r\n const { checkoutComplete, customer, actions, history, sessionState, showtime, organizerId, transactionId } = this.props;\r\n actions.gaTrackCheckoutStep(3);\r\n\r\n const querystrings = getParams();\r\n\r\n //new dibs transaction\r\n if (!querystrings.cancel && !querystrings.orderid && !_.isEmpty(customer.dibs.parameters) && document.dibsform) {\r\n localStorage.setItem('beforeDibsState', JSON.stringify(sessionState));\r\n const message = `transactionId: ${transactionId}, orgId: ${organizerId}, customer email: ${customer.email}, customer phone: ${customer.phone}`;\r\n logTrace('DibsContainer - NEW TRANSACTION', message);\r\n document.dibsform.submit();\r\n }\r\n\r\n // cancel dibs transaction\r\n else if (querystrings.cancel) {\r\n const message = `transactionId: ${transactionId}, orgId: ${organizerId}, customer email: ${customer.email}, customer phone: ${customer.phone}`;\r\n logTrace('DibsContainer - CANCEL TRANSACTION', message);\r\n localStorage.removeItem('beforeDibsState');\r\n actions.resetOrder();\r\n window.location.href = `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${organizerId}`;\r\n }\r\n\r\n // complete dibs transaction\r\n else if (checkoutComplete) {\r\n const message = `transactionId: ${transactionId}, orderId: ${querystrings.orderid}, dibs transact: ${querystrings.transact}, orgId: ${organizerId}, customer email: ${customer.email}, customer phone: ${customer.phone}, payType: ${querystrings.paytype}`;\r\n logTrace('DibsContainer - COMPLETED TRANSACTION', message);\r\n localStorage.removeItem('beforeDibsState');\r\n history.push(`${ROUTES.ORDERFLOW.RECEIPT}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n }\r\n\r\n generateInputs(dibs) {\r\n const { showtime, organizerId } = this.props;\r\n const callback = window.location.origin + `/dibs/${showtime.movieId}/${showtime.id}?org=${organizerId}`;\r\n let inputs = _.map(dibs.parameters, function (value, key) { return });\r\n inputs.push();\r\n inputs.push();\r\n inputs.push();\r\n return inputs;\r\n }\r\n\r\n render() {\r\n const dibs = this.props.customer.dibs;\r\n const inputs = this.generateInputs(dibs);\r\n const form = dibs.url && inputs ?
    {inputs}
    : null;\r\n return (\r\n
    \r\n {form}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n organizerId: state.organizer.id,\r\n showtime: state.movielist.selectedShowtime,\r\n customer: state.customer,\r\n transactionId: state.order.selected.transactionId,\r\n checkoutComplete: state.customer.checkoutComplete,\r\n\r\n //for session storage after dibs payment on seperate page\r\n sessionState: {\r\n organizer: state.organizer,\r\n movielist: {\r\n selectedMovie: { ...state.movielist.selectedMovie, versions: [] },\r\n selectedShowtime: state.movielist.selectedShowtime\r\n },\r\n order: { ...state.order, seatsImage: null },\r\n customer: state.customer,\r\n user: state.user,\r\n }\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators({ book, gaTrackCheckoutStep, resetOrder }, dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(DibsContainer)","import fetch from 'isomorphic-fetch'\r\nimport _ from 'lodash'\r\n\r\nexport default {\r\n fetchSessionId\r\n}\r\n\r\nasync function fetchSessionId(apiKey, reepayObject) { \r\n return await fetch('https://checkout-api.reepay.com/v1/session/charge', {\r\n method: 'POST',\r\n headers: {\r\n 'Authorization': `Basic ${apiKey}`,\r\n 'Content-Type': 'application/json'\r\n },\r\n body: JSON.stringify(reepayObject)\r\n }).then(response => {\r\n if (response.ok) return response.json();\r\n else throw response\r\n });\r\n}","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport api from '../../../api/reepay-api'\r\nimport { logTrace } from '../../../api/orderflow-api'\r\nimport { resetOrder } from '../../../actions/order-actions'\r\nimport { preBook, book } from '../../../actions/customer-actions'\r\nimport { gaTrackCheckoutStep } from '../../../actions/ga-actions'\r\nimport { getParams } from '../../../utilities/location-utilities'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport { SITE_TYPES } from '../../../api/api-constants'\r\n\r\nclass ReepayContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = { error: '' }\r\n }\r\n\r\n componentDidMount() {\r\n window.scrollTo(0, 0);\r\n const { iframeId, siteType, customer, actions, history, sessionState, showtime, organizerId, transactionId, checkoutComplete, origin, paymentMethods } = this.props;\r\n actions.gaTrackCheckoutStep(3);\r\n\r\n const querystrings = getParams();\r\n\r\n //new reepay transaction\r\n if (!querystrings.cancel && !querystrings.invoice) {\r\n localStorage.setItem('beforeDibsState', JSON.stringify(sessionState));\r\n const message = `transactionId: ${transactionId}, orgId: ${organizerId}, customer email: ${customer.email}, customer phone: ${customer.phone}`;\r\n logTrace('ReepayContainer - NEW TRANSACTION', message);\r\n\r\n //TODO make an action\r\n actions.preBook(transactionId, customer).then((result) => {\r\n if (!result.error) {\r\n const preBook = result.dibs.parameters;\r\n const type = siteType ? `&sitetype=${siteType}` : '';\r\n let callback = window.location.origin + `/reepay/${showtime.movieId}/${showtime.id}?org=${organizerId}&amount=${preBook.amount}&iframeid=${iframeId}${type}`; //Book skal bruge amount..!\r\n let acceptUrl = callback + '&accept=true';\r\n let cancelUrl = callback + '&cancel=true';\r\n\r\n if (siteType == SITE_TYPES.UMBRACO && origin) {\r\n const base64Url = btoa(callback);\r\n acceptUrl = `${origin}/reepay-landing-page/?iframeid=${iframeId}&iframeurl=${base64Url}`;\r\n cancelUrl = `${origin}/reepay-landing-page/?cancel=true&iframeid=${iframeId}&iframeurl=${base64Url}`;\r\n }\r\n\r\n const reepayObject = {\r\n order: {\r\n handle: preBook.orderid,\r\n customer: {\r\n first_name: customer.name,\r\n phone: customer.phone,\r\n email: customer.email\r\n },\r\n amount: preBook.amount,\r\n metadata: {\r\n showtimeId: showtime.id,\r\n movieId: showtime.movieId,\r\n organizerId: showtime.organizerId,\r\n iframeUrl: callback\r\n },\r\n },\r\n accept_url: acceptUrl,\r\n cancel_url: cancelUrl\r\n };\r\n\r\n if (paymentMethods)\r\n reepayObject.payment_methods = _.split(paymentMethods, ',');\r\n\r\n logTrace('REEPAY - SESSION ID REQUEST', JSON.stringify(reepayObject));\r\n api.fetchSessionId(btoa(preBook.merchant), reepayObject).then((session) => {\r\n logTrace('REEPAY - SESSION ID SUCCESS', session.id);\r\n if (siteType == SITE_TYPES.UMBRACO && window.parent != window) { \r\n console.log('[CHILD] Start Reepay! Posting to parent: ');\r\n console.log({ iframeId, sessionId: session.id });\r\n\r\n window.parent.postMessage({\r\n iframeId: iframeId,\r\n reepay: {\r\n sessionId: session.id\r\n }\r\n }, '*');\r\n } else {\r\n new window.Reepay.WindowCheckout(session.id);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n\r\n // cancel reepay transaction\r\n if (querystrings.cancel) {\r\n const message = `transactionId: ${transactionId}, orgId: ${organizerId}, customer email: ${customer.email}, customer phone: ${customer.phone}`;\r\n logTrace('ReepayContainer - CANCEL TRANSACTION', message);\r\n localStorage.removeItem('beforeDibsState');\r\n actions.resetOrder();\r\n history.push(`${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n\r\n // complete reepay transaction\r\n else if (checkoutComplete) {\r\n const message = `transactionId: ${transactionId}, orderId: ${querystrings.invoice}, reepay sessionId: ${querystrings.id}, orgId: ${organizerId}, customer email: ${customer.email}, customer phone: ${customer.phone}`;\r\n logTrace('ReepayContainer - COMPLETED TRANSACTION', message);\r\n localStorage.removeItem('beforeDibsState');\r\n history.push(`${ROUTES.ORDERFLOW.RECEIPT}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n }\r\n\r\n render() {\r\n const { error } = this.state;\r\n return (\r\n
    \r\n
    {error}
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n organizerId: state.organizer.id,\r\n showtime: state.movielist.selectedShowtime,\r\n customer: state.customer,\r\n transactionId: state.order.selected.transactionId,\r\n checkoutComplete: state.customer.checkoutComplete,\r\n iframeId: state.app.iframeId,\r\n siteType: state.app.siteType,\r\n origin: state.app.origin,\r\n paymentMethods: state.organizer.configuration.paymentMethods,\r\n\r\n //for session storage after reepay payment on seperate page\r\n sessionState: {\r\n organizer: state.organizer,\r\n movielist: {\r\n selectedMovie: { ...state.movielist.selectedMovie, versions: [] },\r\n selectedShowtime: state.movielist.selectedShowtime\r\n },\r\n order: { ...state.order, seatsImage: null },\r\n customer: state.customer,\r\n user: state.user\r\n }\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators({ preBook, book, gaTrackCheckoutStep, resetOrder }, dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ReepayContainer)","export default {\r\n da: {\r\n startOver: 'Start forfra',\r\n reservationSuccess: 'Reservation gennemført på',\r\n purchaseSuccess: 'Køb gennemført på',\r\n name: 'Navn',\r\n email: 'Email',\r\n print: 'Print',\r\n reserve: 'Reserver',\r\n buy: 'Køb',\r\n delete: 'Afbestil',\r\n deleteText: 'Ønsker du at afbestille reservationen?',\r\n deletedText: 'Din reservation er afbestilt',\r\n confirm: 'Ja',\r\n cancel: 'Nej',\r\n pickUp: 'Afhentes'\r\n },\r\n\r\n en: {\r\n startOver: 'Start over',\r\n reservationSuccess: 'Reservation completed on',\r\n purchaseSuccess: 'Purchase completed on',\r\n name: 'Name',\r\n email: 'Email',\r\n print: 'Print',\r\n reserve: 'Reserve',\r\n buy: 'Buy',\r\n delete: 'Cancel',\r\n deleteText: 'Do you wish to cancel your reservation?',\r\n deletedText: 'Your reservation is cancelled',\r\n confirm: 'Yes',\r\n cancel: 'No',\r\n pickUp: 'Pick up'\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport moment from 'moment'\r\nimport { isiPhone } from '../../../utilities/location-utilities'\r\nimport SelectedSeats from '../order/seatselection/SelectedSeats'\r\nimport Info from '../../overlays/Info'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../orderflow-constants'\r\nimport LOCALE from './ReceiptLocale'\r\nimport { ORGANIZER_TYPES } from '../../../api/api-constants';\r\n\r\nexport default class Reservation extends React.Component {\r\n timeout = 300000;\r\n timer = null;\r\n\r\n constructor() {\r\n super()\r\n this.state = {\r\n deactivateButtons: false,\r\n showDeleteConfirm: false\r\n }\r\n\r\n this.handleTimeout = this.handleTimeout.bind(this);\r\n this.activateReservation = this.activateReservation.bind(this);\r\n this.deleteReservation = this.deleteReservation.bind(this);\r\n this.deleteConfirmResult = this.deleteConfirmResult.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.timer = setTimeout(this.handleTimeout, this.timeout);\r\n }\r\n\r\n componentWillUnmount() {\r\n clearTimeout(this.timer);\r\n }\r\n\r\n handleTimeout() {\r\n this.setState({ deactivateButtons: true });\r\n }\r\n\r\n activateReservation() {\r\n const { actions, receipt } = this.props;\r\n if (receipt.activated) this.navigateAfterActivate();\r\n else actions.activateReservation(receipt.id).then(() => this.navigateAfterActivate());\r\n }\r\n\r\n navigateAfterActivate() {\r\n const { actions, history, showtime, organizerId } = this.props;\r\n actions.orderTypeChanged(CONSTANTS.orderTypes.buyReservation);\r\n history.push(`${ROUTES.ORDERFLOW.EXTRA_PURCHASES}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n\r\n deleteReservation() {\r\n this.setState({ showDeleteConfirm: true });\r\n }\r\n\r\n deleteConfirmResult(e) {\r\n if (e.target.id === 'delete') {\r\n const { actions, receipt } = this.props;\r\n actions.deleteReservation(receipt.id, receipt.customer.phone, receipt.customer.password).then(() => {\r\n actions.gaDeleteReservation();\r\n this.setState({ showDeleteConfirm: false });\r\n });\r\n } else this.setState({ showDeleteConfirm: false });\r\n }\r\n\r\n generateButtons() {\r\n const { appLocale } = this.props;\r\n const { deactivateButtons } = this.state;\r\n const printBtn = !isiPhone() ? : null;\r\n const buyButton = this.generateBuyButton();\r\n return
    \r\n \r\n {printBtn}\r\n {buyButton}\r\n
    ;\r\n }\r\n\r\n generateBuyButton() {\r\n const { showtime, appLocale } = this.props;\r\n const { deactivateButtons } = this.state;\r\n const datetimeNow = moment();\r\n const isInsidePeriod = datetimeNow >= moment(showtime.buyInfo.start) && datetimeNow <= moment(showtime.buyInfo.end);\r\n const canBuy = showtime.buyInfo.enabled && isInsidePeriod;\r\n return canBuy ? : null;\r\n }\r\n\r\n generateDeleteConfirmOverlay() {\r\n const { appLocale } = this.props;\r\n const { showDeleteConfirm } = this.state;\r\n return showDeleteConfirm ?\r\n \r\n \r\n \r\n
    } />\r\n : null;\r\n }\r\n\r\n generateDeletedOverlay() {\r\n const { appLocale } = this.props;\r\n return ;\r\n }\r\n\r\n render() {\r\n const { showtime, receipt, organizerType, reserveText, appLocale } = this.props;\r\n const qrCode = organizerType == ORGANIZER_TYPES.CIRCUS ? null : 'https://www.ebillet.dk/system/barcode.asmx/QRBarCode?text=' + receipt.customer.phone;\r\n const buttons = this.generateButtons();\r\n const info = receipt.deleted ? this.generateDeletedOverlay() : this.generateDeleteConfirmOverlay();\r\n\r\n return (\r\n
    \r\n

    {LOCALE[appLocale].reservationSuccess} {receipt.customer.phone}

    \r\n \r\n

    {LOCALE[appLocale].pickUp} : {receipt.pickupInfo || showtime.reserveInfo.pickup}

    \r\n \r\n\r\n
    \r\n \r\n

    \r\n {receipt.cinema.name}
    \r\n {receipt.cinema.address}\r\n

    \r\n

    \r\n {LOCALE[appLocale].name}: {receipt.customer.name}
    \r\n {LOCALE[appLocale].email}: {receipt.customer.email}\r\n

    \r\n
    \r\n {buttons}\r\n {info}\r\n
    \r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport { isiPhone } from '../../../utilities/location-utilities'\r\nimport SelectedSeats from '../order/seatselection/SelectedSeats'\r\nimport LOCALE from './ReceiptLocale'\r\n\r\nexport default class Purchase extends React.Component {\r\n render() {\r\n const { receipt, buyText, appLocale } = this.props;\r\n const qrCode = 'https://www.ebillet.dk/system/barcode.asmx/QRBarCode?text=' + receipt.orderId;\r\n const printBtn = !isiPhone() ?
    : null;\r\n\r\n return (\r\n
    \r\n

    {LOCALE[appLocale].purchaseSuccess} {receipt.customer.phone}

    \r\n

    \r\n \r\n\r\n
    \r\n \r\n

    \r\n {receipt.cinema.name}
    \r\n {receipt.cinema.address}\r\n

    \r\n

    \r\n {LOCALE[appLocale].name}: {receipt.customer.name}
    \r\n {LOCALE[appLocale].email}: {receipt.customer.email}\r\n

    \r\n
    \r\n {printBtn}\r\n
    \r\n )\r\n }\r\n}","import './receipt.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../orderflow-constants'\r\nimport Reservation from './Reservation'\r\nimport Purchase from './Purchase'\r\nimport * as receiptActions from '../../../actions/receipt-actions'\r\nimport * as orderActions from '../../../actions/order-actions'\r\nimport * as gaActions from '../../../actions/ga-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\n\r\nclass ReceiptContainer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { completed: true };\r\n const { receipt, organizerId, showtime, history } = props;\r\n //prevent going back after wiping receipt in startOver\r\n if (receipt.transactionId <= 0)\r\n history.push(`${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n\r\n props.orderType == CONSTANTS.orderTypes.buy ? props.actions.gaTrackPurchase() : props.actions.gaTrackReservation();\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n componentWillUnmount() {\r\n const { organizerId, showtime, history } = this.props;\r\n if (history.action == 'POP' && this.state.completed)\r\n history.push(`${ROUTES.ORDERFLOW.RECEIPT}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n\r\n }\r\n\r\n generateReceipt() {\r\n const { orderType, texts, receipt, customer, showtime, actions, history, organizerId, organizerType, appLocale } = this.props;\r\n switch (orderType) {\r\n case CONSTANTS.orderTypes.reserve:\r\n case CONSTANTS.orderTypes.buyReservation:\r\n return \r\n case CONSTANTS.orderTypes.buy:\r\n return ;\r\n }\r\n }\r\n\r\n render() {\r\n const receipt = this.generateReceipt();\r\n\r\n return (\r\n
    \r\n {receipt}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n organizerId: state.organizer.id,\r\n organizerType: state.organizer.configuration.type,\r\n showtime: state.movielist.selectedShowtime,\r\n orderType: state.order.orderType,\r\n receipt: state.receipt,\r\n texts: state.organizer.configuration.receiptTexts,\r\n customer: state.customer,\r\n completed: state.receipt.completed,\r\n appLocale: state.app.locale,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, orderActions, receiptActions, gaActions, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ReceiptContainer)","export default {\r\n da: {\r\n loading: 'Indlæser...',\r\n notFound: 'Siden findes ikke.',\r\n unspecified: 'Der skete en fejl.',\r\n close: 'Luk',\r\n errors: {\r\n 16: 'Du har allerede en anden aktiv bestilling i et andet faneblad, færdiggør den der eller start forfra.',\r\n 17: 'Det ønskede antal pladser er desværre ikke ledige til denne forestilling.',\r\n 29: 'Vi kunne ikke kontakte betalingstjenesten. Prøv igen senere.',\r\n 30: 'Du har været for længe om at indtaste dine oplysninger.',\r\n 35: 'Din session er udløbet, da du har været for længe om at gennemføre din bestilling.',\r\n 40: 'Det er ikke muligt at aktivere reservationen, da den er købt eller afbestilt.',\r\n 46: 'Den angivne bruger har ikke noget medlemskab eller det er udløbet.',\r\n 472: 'Det er ikke muligt at reservere/købe til dette arrangement. Tjek at forestillingen ikke allerede er begyndt eller overstået.',\r\n 474: 'Køb og reservering er ikke aktiveret på denne forestilling.',\r\n 475: 'Køb er ikke aktiveret på denne forestilling.',\r\n 476: 'Reservering er ikke aktiveret på denne forestilling.',\r\n 999: 'Denne arrangør er ikke opsat.',\r\n 10001: 'Arrangøren kan ikke kontaktes i øjeblikket. Prøv igen senere eller ring til arrangøren.',\r\n 10004: 'Det er ikke muligt, at kontakte billet-udbyderens billet system. Prøv igen lidt senere.'\r\n }\r\n },\r\n en: {\r\n loading: 'Loading...',\r\n notFound: 'Page not found.',\r\n unspecified: 'An error occured.',\r\n close: 'close',\r\n errors: {\r\n 16: 'You already have an active order in another tab, complete is there or start over.',\r\n 17: 'The requested amount of seats unfortunately are not available for this showtime.',\r\n 29: 'We could not contact the payment service. Try again later.',\r\n 30: 'You have been too slow filling in your information.',\r\n 35: 'Your session has expired, you have been too slow filling out your order.',\r\n 40: 'It is not possble to activate the reservation, it has already been purchased or deleted.',\r\n 46: 'This user does not have a membership or it has expired.',\r\n 472: 'It is not possible to reserve/purchase tickets for this showtime. Check that the show has not already begun or is in the past.',\r\n 474: 'Purchasing and reserving is not activated on this showtime.',\r\n 475: 'Purchasing is not activated on this showtime.',\r\n 476: 'Reserving is not activated on this showtime.',\r\n 999: 'This organizer is not configured.',\r\n 10001: 'The organizer can not be contacted right now. Try again later or call directly to the organizer.',\r\n 10004: 'It is not possible to reach the ticket system. Try again later.'\r\n }\r\n }\r\n}","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport LOCALE from './OverlayLocales'\r\n\r\nclass Error extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n show: this.props.show\r\n }\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.show != this.props.show)\r\n this.setState({ show: this.props.show });\r\n }\r\n\r\n render() {\r\n let { error, buttons, isInWindow, appLocale } = this.props;\r\n const { show } = this.state;\r\n let message = error.message || LOCALE[appLocale].errors[error.code] || LOCALE[appLocale].errors[error.type] || LOCALE[appLocale].unspecified;\r\n const closeButton = this.setState({ show: false })} value={LOCALE[appLocale].close} />;\r\n\r\n switch (error.code) {\r\n case 17:\r\n if (error.type == 10001) message = LOCALE[appLocale].errors[error.type];\r\n if (error.type == 10004) message = LOCALE[appLocale].errors[error.type];\r\n break;\r\n case 29:\r\n if (error.type == 475) message = LOCALE[appLocale].errors[error.type];\r\n break;\r\n case 30:\r\n if (error.type == 32) message = LOCALE[appLocale].errors[error.code];\r\n break;\r\n case 35:\r\n if (error.type == 476) message = LOCALE[appLocale].errors[error.type];\r\n break;\r\n case 666:\r\n buttons = isInWindow ? null : closeButton;\r\n break;\r\n }\r\n\r\n return (\r\n
    \r\n
    \r\n

    {message} ({error.code}, {error.type})

    \r\n {buttons || error.buttons || (error.close ? closeButton : null)}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n show: state.error.show && (state.error.code != null || state.error.type != null || state.error.message != null),\r\n error: ownProps.error || state.error,\r\n isInWindow: state.organizer.configuration.openOrderInNewWindow,\r\n appLocale: state.app.locale\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(Error)","import React from 'react'\r\nimport _ from 'lodash'\r\n\r\n\r\nexport default class Login extends React.Component {\r\n\r\n constructor() {\r\n super();\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.resetPassword = this.resetPassword.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n this.email.focus();\r\n }\r\n\r\n handleSubmit(e) {\r\n e.preventDefault();\r\n this.props.submit(this.email.value, this.password.value);\r\n }\r\n\r\n resetPassword() {\r\n const resetUrl = 'https://www.ebillet.dk/system/resetpassword.aspx';\r\n window.open(resetUrl, '_blank', 'width=400,height=400,resizable=yes,scrollbars=yes');\r\n }\r\n\r\n render() {\r\n const { title, close, error } = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n
    \r\n

    {title}

    \r\n
    \r\n this.email = email} />\r\n
    \r\n
    \r\n this.password = password} />\r\n
    \r\n
    Jeg har glemt min kode
    \r\n
    \r\n {error ?
    {error}
    : null}\r\n \r\n \r\n
    \r\n
    \r\n
    \r\n
    \r\n )\r\n }\r\n}","import './clubcard.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport * as userActions from '../../../actions/user-actions'\r\nimport Login from './Login'\r\n\r\nclass ClubCardContainer extends React.Component {\r\n\r\n constructor() {\r\n super();\r\n this.state = {\r\n showLoginOverlay: false,\r\n error: ''\r\n };\r\n\r\n this.toggleLoginOverlay = this.toggleLoginOverlay.bind(this);\r\n this.submitLogin = this.submitLogin.bind(this);\r\n }\r\n\r\n toggleLoginOverlay() {\r\n const show = this.state.showLoginOverlay;\r\n if (!show) this.setState({ showLoginOverlay: true });\r\n else this.setState({ showLoginOverlay: false, error: '' });\r\n }\r\n\r\n submitLogin(email, password) {\r\n const { actions } = this.props;\r\n this.setState({ error: '' });\r\n actions.clubCardLogin(email, password)\r\n .then((result) => { !result.error ? this.setState({ showLoginOverlay: false }) : this.setState({ error: result.error.message }) });\r\n }\r\n\r\n render() {\r\n const { clubCard, availableClubCard } = this.props;\r\n const pointsLeft = clubCard ? clubCard.remainingPoints : null;\r\n\r\n const loginTopBar = availableClubCard && (!clubCard || clubCard.id == 0) ?

    {availableClubCard.name}

    \r\n {availableClubCard.loginText}
    : null;\r\n\r\n const loginOverlay = this.state.showLoginOverlay ?\r\n : null;\r\n\r\n const user = clubCard && clubCard.id != 0 ?
    \r\n

    {clubCard.customer}

    \r\n

    Dine points: {pointsLeft}

    \r\n
    : null;\r\n\r\n return (\r\n
    \r\n {loginTopBar}\r\n {user}\r\n {loginOverlay}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n return {\r\n clubCard: state.order.clubCard,\r\n availableClubCard: state.organizer.configuration.clubCard\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(userActions, dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ClubCardContainer)","import React from 'react'\r\nimport _ from 'lodash'\r\n\r\nexport default class QuantitySelector extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n id: props.id,\r\n quantity: props.quantity\r\n };\r\n this.increment = this.increment.bind(this);\r\n this.decrement = this.decrement.bind(this);\r\n }\r\n\r\n debounceMultipleClicks = _.debounce((quantity) => {\r\n const { quantityChanged } = this.props;\r\n const { id } = this.state;\r\n quantityChanged(id, quantity);\r\n }, 400)\r\n\r\n canIncrement(quantity) {\r\n const { extra, canIncrementTotalPoints } = this.props;\r\n if (extra.points) return canIncrementTotalPoints(extra.points, quantity) && this.checkMaxQuantity(quantity);\r\n else return this.checkMaxQuantity(quantity);\r\n }\r\n\r\n increment() {\r\n let { quantity } = this.state;\r\n const newQuantity = quantity + 1;\r\n if (this.canIncrement(newQuantity)) {\r\n this.setState({ quantity: newQuantity });\r\n this.debounceMultipleClicks(newQuantity);\r\n }\r\n }\r\n\r\n decrement() {\r\n let { quantity } = this.state;\r\n if (quantity > 0) {\r\n this.setState({ quantity: --quantity });\r\n this.debounceMultipleClicks(quantity);\r\n }\r\n }\r\n\r\n checkMaxQuantity(quantity) {\r\n const { maxQuantity } = this.props;\r\n return maxQuantity === 0 || maxQuantity > 0 && quantity < maxQuantity;\r\n }\r\n\r\n render() {\r\n const { clubCard, extra, isFetching } = this.props;\r\n const { quantity } = this.state;\r\n const decrementClasses = !isFetching && quantity > 0 ? 'decrement' : 'decrement deactivated';\r\n let incrementClasses = !isFetching && this.checkMaxQuantity(quantity) ? 'increment' : 'increment deactivated';\r\n if (clubCard && extra.points > clubCard.remainingPoints) incrementClasses = 'increment deactivated';\r\n\r\n return (\r\n
    \r\n
    \r\n
    {quantity}
    \r\n
    \r\n
    \r\n )\r\n }\r\n}","import OrderFlowLocale from '../OrderFlowLocale'\r\n\r\nexport default {\r\n da: {\r\n ...OrderFlowLocale.da,\r\n extraPurchases: 'Tilkøb',\r\n price: 'Pris'\r\n },\r\n\r\n en: {\r\n ...OrderFlowLocale.en,\r\n extraPurchases: 'Extras',\r\n price: 'Price'\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport QuantitySelector from './QuantitySelector'\r\nimport LOCALE from './ExtraPurchaseLocale'\r\n\r\nconst ExtraPurchaseItem = ({ extra, quantity, isFetching, quantityChanged, clubCard, canIncrementTotalPoints, appLocale }) => (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {extra.name}

    \r\n \r\n \r\n
    \r\n
    \r\n
    \r\n)\r\n\r\nexport default ExtraPurchaseItem","import React from 'react'\r\nimport _ from 'lodash'\r\nimport ExtraPurchaseItem from './ExtraPurchaseItem'\r\nimport LOCALE from './ExtraPurchaseLocale'\r\n\r\nexport default class ExtraPurchaseList extends React.Component {\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { selectedPoints: props.selectedClubCardPoints || 0 }\r\n this.canIncrementTotalPoints = this.canIncrementTotalPoints.bind(this);\r\n }\r\n\r\n componentWillReceiveProps(nextProps) {\r\n const { selectedClubCardPoints } = this.props;\r\n const { selectedPoints } = this.state;\r\n\r\n if (selectedClubCardPoints && selectedPoints != nextProps.selectedClubCardPoints)\r\n this.setState({ selectedPoints: nextProps.selectedClubCardPoints });\r\n }\r\n\r\n canIncrementTotalPoints(incrementBy) {\r\n const { selectedPoints } = this.state;\r\n const { clubCard } = this.props;\r\n const newTotal = selectedPoints + incrementBy;\r\n const canIncrement = newTotal <= clubCard.points;\r\n if (canIncrement) this.setState({ selectedPoints: newTotal });\r\n return canIncrement;\r\n }\r\n\r\n generateExtraItems() {\r\n const { isFetching, availableExtraPurchases, selectedExtraPurchases, quantityChanged, clubCard, appLocale } = this.props;\r\n return _.map(availableExtraPurchases, (extra, i) => {\r\n const selectedExtra = _.find(selectedExtraPurchases, (selected) => { return selected.id === extra.id; });\r\n return \r\n }, this);\r\n }\r\n\r\n render() {\r\n const extraPurchases = this.generateExtraItems();\r\n\r\n return (\r\n
    \r\n {extraPurchases}\r\n
    \r\n )\r\n }\r\n}","import './extrapurchases.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport * as orderActions from '../../../actions/order-actions'\r\nimport * as customerActions from '../../../actions/customer-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport CONSTANTS from '../orderflow-constants'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport ExtraPurchaseList from './ExtraPurchaseList'\r\nimport LOCALE from './ExtraPurchaseLocale'\r\n\r\nclass ExtraPurchaseContainer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n const { orderType, history, showtime, isFetching, availableExtraPurchases, actions } = props;\r\n\r\n if (!isFetching && (orderType == CONSTANTS.orderTypes.reserve || availableExtraPurchases.length == 0))\r\n history.replace(`${ROUTES.ORDERFLOW.CUSTOMER}/${showtime.movieId}/${showtime.id}${history.location.search}`);\r\n\r\n actions.calculateTotalPrice();\r\n this.extraPurchaseQuantityChanged = this.extraPurchaseQuantityChanged.bind(this);\r\n this.navBack = this.navBack.bind(this);\r\n this.navNext = this.navNext.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n extraPurchaseQuantityChanged(id, quantity) {\r\n const { actions, showtime, availableExtraPurchases, selected } = this.props;\r\n const extra = _.find(availableExtraPurchases, (extraPurchase) => { return id === extraPurchase.id; });\r\n\r\n let selectedExtraPurchases = selected.extraPurchases;\r\n const existingExtraPurchase = _.find(selectedExtraPurchases, (extraPurchase) => { return id === extraPurchase.id; })\r\n\r\n if (existingExtraPurchase) {\r\n if (quantity > 0) existingExtraPurchase.quantity = quantity;\r\n else _.remove(selectedExtraPurchases, (extraPurchase) => { return extraPurchase.id === existingExtraPurchase.id });\r\n } else selectedExtraPurchases.push({ ...extra, quantity });\r\n\r\n actions.addExtraPurchase(selected.transactionId, showtime.id, selectedExtraPurchases)\r\n }\r\n\r\n navBack() {\r\n const { orderType, history, actions } = this.props;\r\n if (orderType != CONSTANTS.orderTypes.buyReservation) actions.orderTypeChanged('');\r\n history.goBack();\r\n }\r\n\r\n navNext() {\r\n const { organizerId, showtime, history } = this.props;\r\n history.push(`${ROUTES.ORDERFLOW.CUSTOMER}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n\r\n render() {\r\n const { isFetching, availableExtraPurchases, selected, clubCard, bottomBarAllwaysVisible, appLocale, extraText } = this.props;\r\n const extraPurchaseList = availableExtraPurchases.length > 0 ?\r\n : null;\r\n\r\n return (\r\n
    \r\n

    {LOCALE[appLocale].extraPurchases}

    \r\n {extraText ?

    {extraText[appLocale]}

    : null}\r\n\r\n {extraPurchaseList}\r\n\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const availableExtraPurchases = !state.order.canReserve ? state.order.availableExtraPurchases : _.filter(state.order.availableExtraPurchases, (extra) => { return extra.buyOnly === false });\r\n return {\r\n organizerId: state.organizer.id,\r\n showtime: state.movielist.selectedShowtime,\r\n customer: state.customer,\r\n availableExtraPurchases,\r\n selected: state.order.selected,\r\n orderType: state.order.orderType,\r\n isFetching: state.order.isFetching === true,\r\n clubCard: state.order.clubCard,\r\n bottomBarAllwaysVisible: state.organizer.configuration.bottomBarAllwaysVisible || false,\r\n appLocale: state.app.locale,\r\n canReserve: state.order.canReserve,\r\n iframeId: state.app.iframeId,\r\n extraText: _.find(state.organizer.configuration.texts, (text) => { return text.id == 'AddOn_Extra' })\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, orderActions, customerActions, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ExtraPurchaseContainer)","import './vouchers.scss'\r\nimport React from 'react'\r\nimport _ from 'lodash'\r\nimport LOCALE from './VoucherLocale'\r\nimport { withTwoDecimals } from '../../../utilities/validation-utilities'\r\nimport { VOUCHER_TYPES } from '../../../api/api-constants';\r\n\r\nexport default class VoucherDisplay extends React.Component {\r\n constructor() {\r\n super();\r\n this.removeActiveVoucher = this.removeActiveVoucher.bind(this);\r\n }\r\n\r\n removeActiveVoucher(e) {\r\n const { vouchers, vouchersChanged } = this.props;\r\n const code = e.target.id;\r\n const updatedActiveVouchers = _.filter(vouchers.active, (voucher) => { return voucher.barCode != code });\r\n\r\n let updatedVouchers = '';\r\n _.map(updatedActiveVouchers, (voucher) => { return updatedVouchers += voucher.barCode + ','; });\r\n updatedVouchers = _.trimEnd(updatedVouchers, ',');\r\n vouchersChanged(updatedVouchers);\r\n }\r\n\r\n generateVouchers() {\r\n const { type, vouchers, tickets, showWithDecimals, appLocale } = this.props;\r\n const validVouchers = _.filter(vouchers.active, (voucher) => { return voucher.type == type });\r\n\r\n if (type == VOUCHER_TYPES.GIFTCARD) {\r\n return _.map(validVouchers, (giftcard, i) => {\r\n const giftCardAmount = showWithDecimals ? withTwoDecimals(giftcard.amount) : giftcard.amount;\r\n return

    {giftcard.name}: {giftcard.barCode}\r\n \r\n {LOCALE[appLocale].remaningAmount} {showWithDecimals ? withTwoDecimals(giftcard.remainingAmount) : giftcard.remainingAmount} {LOCALE[appLocale].currency}\r\n {giftCardAmount} {LOCALE[appLocale].currency}\r\n

    \r\n });\r\n } else if (type == VOUCHER_TYPES.TICKETS) {\r\n const ticketItems = _.map(tickets, (ticket, i) => {\r\n const voucher = _.find(validVouchers, (coupon) => { return coupon.id == ticket.id });\r\n if (!voucher) return

    {ticket.quantity} x {ticket.name}

    \r\n });\r\n\r\n const couponItems = _.map(validVouchers, (voucher, i) => {\r\n return

    \r\n });\r\n\r\n return _.concat(ticketItems, couponItems);\r\n }\r\n }\r\n\r\n render() {\r\n const { type } = this.props;\r\n\r\n return (\r\n
    \r\n
    {this.generateVouchers()}
    \r\n
    \r\n );\r\n }\r\n} ","import './vouchers.scss'\r\nimport React from 'react'\r\nimport _ from 'lodash'\r\n\r\nconst VoucherErrors = ({ errors }) => (\r\n errors ?\r\n
    \r\n {_.map(errors, (error, i) => {\r\n return
    {error}
    \r\n })}\r\n
    : null\r\n)\r\n\r\nexport default VoucherErrors","import OrderFlowLocale from '../OrderFlowLocale'\r\n\r\nexport default {\r\n da: {\r\n ...OrderFlowLocale.da,\r\n bioKlubDk: 'Biografklub Danmark',\r\n yourTickets: 'Dine billetter',\r\n instructions: 'Er du medlem af Biografklub Danmark, kan du indtaste din kuponkode her, og spare halvdelen af billetprisen.',\r\n description: 'Kuponnummeret finder du på din Biografklub Danmark kupon under stregkoden.',\r\n info: 'Du får mulighed for at indtaste flere kuponnumre, når du har tastet det første og klikket indløs.'\r\n },\r\n\r\n en: {\r\n ...OrderFlowLocale.en,\r\n bioKlubDk: 'Cinema club: \"Biografklub Danmark\"',\r\n yourTickets: 'Your tickets',\r\n instructions: 'If you are a member of the cinema club \"Biografklub Danmark\" you can enter your coupon code here, and save half of the ticket price.',\r\n description: 'The coupon number is located on your \"Biografklub Danmark\" coupon underneath the bar code.',\r\n info: 'You can add more voucher numbers when you have typed the first one and clicked submit.'\r\n }\r\n}","import './bioklubdk.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport * as orderActions from '../../../actions/order-actions'\r\nimport * as customerActions from '../../../actions/customer-actions'\r\nimport * as gaActions from '../../../actions/ga-actions'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport VoucherInput from '../vouchers/VoucherInput'\r\nimport VoucherDisplay from '../vouchers/VoucherDisplay'\r\nimport VoucherErrors from '../vouchers/VoucherErrors'\r\nimport { VOUCHER_TYPES } from '../../../api/api-constants'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport LOCALE from './BioKlubDkLocale'\r\n\r\nclass BioKlubDkContainer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.navBack = this.navBack.bind(this);\r\n this.navNext = this.navNext.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n componentDidUpdate() {\r\n const { actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n }\r\n\r\n navBack() {\r\n const { history } = this.props;\r\n history.goBack();\r\n }\r\n\r\n navNext() {\r\n const { organizerId, showtime, history } = this.props;\r\n history.push(`${ROUTES.ORDERFLOW.EXTRA_PURCHASES}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n\r\n render() {\r\n const { bioKlubDk, bottomBarAllwaysVisible, appLocale, vouchers, tickets, actions, voucherConstraints } = this.props;\r\n const image = bioKlubDk.image ? : null;\r\n\r\n return (\r\n
    \r\n
    \r\n

    {LOCALE[appLocale].bioKlubDk}

    \r\n

    {LOCALE[appLocale].instructions}

    \r\n\r\n {vouchers.active.length > 0 ?
    \r\n

    {LOCALE[appLocale].yourTickets}:

    \r\n
    : null}\r\n\r\n \r\n \r\n\r\n {!image ? LOCALE[appLocale].description : image}\r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n organizerId: state.organizer.id,\r\n showtime: state.movielist.selectedShowtime,\r\n orderType: state.order.orderType,\r\n bottomBarAllwaysVisible: state.organizer.configuration.bottomBarAllwaysVisible,\r\n bioKlubDk: state.order.bioKlubDk,\r\n totalPrice: state.order.totalPrice,\r\n customer: state.customer,\r\n transactionId: state.order.selected.transactionId,\r\n appLocale: state.app.locale,\r\n vouchers: state.order.selected.vouchers,\r\n tickets: state.order.selected.tickets,\r\n voucherConstraints: state.order.voucherConstraints,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, orderActions, customerActions, gaActions, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(BioKlubDkContainer)","import OrderFlowLocale from '../OrderFlowLocale'\r\n\r\nexport default {\r\n da: {\r\n ...OrderFlowLocale.da,\r\n yourOrder: 'Din Bestilling',\r\n extraPurchase: 'tilkøb',\r\n totalPrice: 'Pris i alt',\r\n tickets: 'Billetter',\r\n fees: 'Gebyr',\r\n giftCard: 'Gavekort',\r\n clubCard: 'Klubkort'\r\n },\r\n\r\n en: {\r\n ...OrderFlowLocale.en,\r\n yourOrder: 'Your Order',\r\n extraPurchase: 'extras',\r\n totalPrice: 'Total price',\r\n tickets: 'Tickets',\r\n fees: 'Fees',\r\n giftCard: 'Gift card',\r\n clubCard: 'Club card'\r\n }\r\n}","import OrderFlowLocale from '../OrderFlowLocale'\r\nimport SummaryLocale from '../summary/SummaryLocale'\r\n\r\nexport default {\r\n da: {\r\n ...OrderFlowLocale.da,\r\n ...SummaryLocale.da,\r\n title: 'Gavekort',\r\n info: 'Du kan indtaste flere kuponnumre, når du har tastet det første og klikket indløs.
    Hvis du indløser et saldo gavekort og der er et restbeløb tilbage, vil du kunne bruge dette senere, med samme gavekort nummer.'\r\n },\r\n\r\n en: {\r\n ...OrderFlowLocale.en,\r\n ...SummaryLocale.en,\r\n title: 'Gift Card',\r\n info: 'You can add more cupon numbers after you have input and submitted the first one.
    If you submit a gift card and there is any remaining balance, you will be able to use this later with the same gift card number.'\r\n }\r\n}","import './giftcards.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport { hasDecimals, withTwoDecimals } from '../../../utilities/validation-utilities'\r\nimport * as orderActions from '../../../actions/order-actions'\r\nimport * as customerActions from '../../../actions/customer-actions'\r\nimport * as gaActions from '../../../actions/ga-actions'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport VoucherDisplay from '../vouchers/VoucherDisplay'\r\nimport VoucherInput from '../vouchers/VoucherInput'\r\nimport VoucherErrors from '../vouchers/VoucherErrors'\r\nimport { VOUCHER_TYPES } from '../../../api/api-constants'\r\nimport LOCALE from './GiftCardLocale'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\n\r\nclass GiftCardContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.navBack = this.navBack.bind(this);\r\n this.navNext = this.navNext.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n navBack() {\r\n const { history } = this.props;\r\n history.goBack();\r\n }\r\n\r\n navNext() {\r\n const { organizerId, showtime, transactionId, customer, actions, totalPrice, history, giftCardAmount } = this.props;\r\n\r\n if (giftCardAmount > 0 && giftCardAmount < totalPrice && customer.creditCard || totalPrice === 0) {\r\n actions.preBook(transactionId, customer).then((result) => {\r\n if (!result.error) {\r\n if (totalPrice === 0) {\r\n actions.book(transactionId, customer, 'Free', result.dibs.parameters.orderid, totalPrice, result.dibs.parameters.paytype)\r\n .then((result) => { if (!result.error) history.push(`${ROUTES.ORDERFLOW.RECEIPT}/${showtime.movieId}/${showtime.id}?org=${organizerId}`) });\r\n } else history.push(`${ROUTES.ORDERFLOW.DIBS}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n });\r\n } else history.push(`${ROUTES.ORDERFLOW.PAYMENT}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n\r\n render() {\r\n const { bottomBarAllwaysVisible, appLocale, totalPrice, selected, vouchers, actions, voucherConstraints } = this.props;\r\n const showWithDecimals = hasDecimals(selected.totalTicketPrice) || hasDecimals(selected.totalFees) || hasDecimals(selected.totalExtraPurchasesPrice) || hasDecimals(selected.giftCardAmount) || hasDecimals(totalPrice);\r\n\r\n const ticketPriceAsText = showWithDecimals ? withTwoDecimals(selected.totalTicketPrice) : selected.totalTicketPrice;\r\n const feesAsText = showWithDecimals ? withTwoDecimals(selected.totalFees) : selected.totalFees;\r\n const extrasPriceAsText = showWithDecimals ? withTwoDecimals(selected.totalExtraPurchasesPrice) : selected.totalExtraPurchasesPrice;\r\n const totalPriceAsText = showWithDecimals ? withTwoDecimals(totalPrice) : totalPrice;\r\n const clubCardPoints = selected.clubCardPoints ?

    {LOCALE[appLocale].clubCard} {selected.clubCardPoints} points

    : null;\r\n\r\n return (\r\n
    \r\n
    \r\n

    {LOCALE[appLocale].title}

    \r\n
    \r\n

    {LOCALE[appLocale].tickets} {ticketPriceAsText} {LOCALE[appLocale].currency}

    \r\n\r\n \r\n\r\n {selected.totalFees > 0 ?

    {LOCALE[appLocale].fees} {feesAsText} {LOCALE[appLocale].currency}

    : null}\r\n {selected.extraPurchases.length > 0 ?

    {_.capitalize(LOCALE[appLocale].extraPurchase)} {extrasPriceAsText} {LOCALE[appLocale].currency}

    : null}\r\n\r\n \r\n\r\n
    \r\n

    {LOCALE[appLocale].totalPrice} {totalPriceAsText} {LOCALE[appLocale].currency}

    \r\n {clubCardPoints}\r\n
    \r\n\r\n \r\n\r\n \r\n
    \r\n\r\n
    \r\n \r\n \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n return {\r\n organizerId: state.organizer.id,\r\n showtime: state.movielist.selectedShowtime,\r\n orderType: state.order.orderType,\r\n bottomBarAllwaysVisible: state.organizer.configuration.bottomBarAllwaysVisible,\r\n bioKlubDk: state.order.bioKlubDk,\r\n totalPrice: state.order.totalPrice,\r\n customer: state.customer,\r\n transactionId: state.order.selected.transactionId,\r\n appLocale: state.app.locale,\r\n selected: state.order.selected,\r\n vouchers: state.order.selected.vouchers,\r\n tickets: state.order.selected.tickets,\r\n giftCardAmount: state.order.selected.giftCardAmount,\r\n voucherConstraints: state.order.voucherConstraints,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, orderActions, customerActions, gaActions, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(GiftCardContainer)","import OrderFlowLocale from '../OrderFlowLocale'\r\n\r\nexport default {\r\n da: {\r\n ...OrderFlowLocale.da,\r\n paymentMethod: 'Vælg betalingsmetode',\r\n giftCard: 'Indløs gavekort ❯',\r\n payWithReepay: 'Fortsæt til betaling ❯',\r\n creditCardForeign: 'Udenlandsk',\r\n errorCreditCard: 'Du skal vælge et kreditkort for at fortsætte',\r\n errorBack: 'Du kan ikke gå tilbage når du har indløst gavekort'\r\n },\r\n\r\n en: {\r\n ...OrderFlowLocale.en,\r\n paymentMethod: 'Choose payment method',\r\n giftCard: 'Use gift card ❯',\r\n payWithReepay: 'Continue to payment ❯',\r\n creditCardForeign: 'Foreign',\r\n errorCreditCard: 'You have to choose a credit card to continue',\r\n errorBack: 'You can not go back when you have added a gift card voucher'\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport LOCALE from './PaymentLocale'\r\n\r\nexport default class CreditCardOption extends React.Component {\r\n constructor() {\r\n super();\r\n this.creditCardChanged = this.creditCardChanged.bind(this);\r\n }\r\n \r\n creditCardChanged(e) {\r\n const creditCard = e.target.value;\r\n this.props.creditCardChanged(creditCard);\r\n }\r\n\r\n render() {\r\n const { creditCard, isChecked, appLocale } = this.props;\r\n const international = creditCard.isInternational ? `${LOCALE[appLocale].creditCardForeign} ` : null;\r\n\r\n return (\r\n \r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport CreditCardOption from './CreditCardOption'\r\n\r\nexport default class Payment extends React.Component {\r\n \r\n generateOptions(creditCard, creditCardChanged) {\r\n const { creditCards, appLocale } = this.props;\r\n return creditCards.map((card, i) => {\r\n return \r\n }, this);\r\n }\r\n\r\n render() {\r\n const { customer, actions, errors } = this.props;\r\n const creditCardOptions = this.generateOptions(customer.creditCard, actions.creditCardChanged);\r\n const creditCardError = !customer.creditCard ?
    {errors.creditCard}
    : null;\r\n\r\n return (\r\n
    \r\n
    {creditCardOptions}
    \r\n {creditCardError}\r\n
    \r\n )\r\n }\r\n}","import './payment.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport * as orderActions from '../../../actions/order-actions'\r\nimport * as customerActions from '../../../actions/customer-actions'\r\nimport * as gaActions from '../../../actions/ga-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../orderflow-constants'\r\nimport CreditCards from './CreditCards'\r\nimport LOCALE from './PaymentLocale'\r\n\r\nclass PaymentContainer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n localStorage.removeItem('beforeDibsState')\r\n this.state = {\r\n errors: {\r\n creditCard: '',\r\n disableBack: ''\r\n },\r\n }\r\n\r\n const { configuration, showtime, history } = props;\r\n if (!configuration.giftCardsEnabled && !configuration.payWithDibs)\r\n history.replace(`${ROUTES.ORDERFLOW.REEPAY}/${showtime.movieId}/${showtime.id}${history.location.search}`);\r\n\r\n this.giftCardPaymentClicked = this.giftCardPaymentClicked.bind(this);\r\n this.navBack = this.navBack.bind(this);\r\n this.navNext = this.navNext.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n giftCardPaymentClicked() {\r\n const { showtime, organizerId, history } = this.props;\r\n history.push(`${ROUTES.ORDERFLOW.GIFTCARDS}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n\r\n navBack() {\r\n const { history, disableBack, appLocale } = this.props;\r\n const { errors } = this.state;\r\n if (disableBack) this.setState({ errors: { ...errors, disableBack: LOCALE[appLocale].errorBack } });\r\n else history.go(-2); // the Reepay iframe init is two steps back..but if we go to giftcard it becomes 3...TODO fix this\r\n }\r\n\r\n // IF DIBS\r\n navNext(e) {\r\n const { organizerId, actions, transactionId, customer, showtime, totalPrice, history } = this.props;\r\n\r\n if (this.paymentIsValid(customer) === true) {\r\n actions.preBook(transactionId, customer).then((result) => {\r\n if (!result.error) {\r\n if (totalPrice === 0) {\r\n actions.book(transactionId, customer, 'Free', result.dibs.parameters.orderid, totalPrice, result.dibs.parameters.paytype)\r\n .then((result) => { if (!result.error) history.push(`${ROUTES.ORDERFLOW.RECEIPT}/${showtime.movieId}/${showtime.id}?org=${organizerId}`) });\r\n } else history.push(`${ROUTES.ORDERFLOW.DIBS}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\r\n }\r\n });\r\n }\r\n }\r\n\r\n paymentIsValid(payment) {\r\n const { totalPrice, appLocale, giftCardAmount } = this.props;\r\n if (totalPrice === 0) return true;\r\n else {\r\n const errors = {\r\n ...errors,\r\n creditCard: !payment.creditCard && (!giftCardAmount > 0 || giftCardAmount > 0 && giftCardAmount < totalPrice) ? LOCALE[appLocale].errorCreditCard : ''\r\n }\r\n\r\n this.setState({ errors });\r\n return errors.creditCard == '';\r\n }\r\n }\r\n //---\r\n\r\n render() {\r\n const { orderType, totalPrice, configuration, customer, actions, appLocale, disableBack, organizerId, history, showtime, creditCards } = this.props;\r\n const { errors } = this.state;\r\n\r\n const chooseCreditCard = totalPrice > 0 && (orderType === CONSTANTS.orderTypes.buy || orderType === CONSTANTS.orderTypes.buyReservation) && configuration.payWithDibs ?\r\n : null;\r\n\r\n return (\r\n
    \r\n
    \r\n

    {LOCALE[appLocale].paymentMethod}

    \r\n
    {configuration.giftCardsEnabled ? : null}
    \r\n
    {configuration.giftCardsEnabled && !configuration.payWithDibs ? history.push(`${ROUTES.ORDERFLOW.REEPAY}/${showtime.movieId}/${showtime.id}?org=${organizerId}`)} /> : null}
    \r\n {chooseCreditCard}\r\n
    \r\n\r\n

    \r\n
    \r\n \r\n {configuration.payWithDibs ? : null}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n organizerId: state.organizer.id,\r\n showtime: state.movielist.selectedShowtime,\r\n orderType: state.order.orderType,\r\n configuration: state.organizer.configuration,\r\n creditCards: state.organizer.creditcards || [],\r\n customer: state.customer,\r\n transactionId: state.order.selected.transactionId,\r\n receipt: state.receipt,\r\n totalPrice: state.order.totalPrice,\r\n clubCardId: state.user.clubCardId,\r\n appLocale: state.app.locale,\r\n disableBack: state.order.selected.giftCardAmount > 0,\r\n giftCardAmount: state.order.selected.giftCardAmount,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, orderActions, customerActions, gaActions, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(PaymentContainer)","import React from 'react'\r\nimport _ from 'lodash'\r\nimport { withTwoDecimals } from '../../../utilities/validation-utilities'\r\nimport LOCALE from './SummaryLocale'\r\n\r\nexport default class PriceInfo extends React.Component {\r\n render() {\r\n const { showWithDecimals, showPriceInfo, ticketPrice, extraPurchasePrice, totalFees, totalPrice, showFees, selected, appLocale } = this.props;\r\n\r\n const ticketPriceAsText = showWithDecimals ? withTwoDecimals(ticketPrice) : ticketPrice;\r\n const feesAsText = showFees ? (showWithDecimals ? withTwoDecimals(totalFees) : totalFees) : '';\r\n const extrasPriceAsText = showFees ? (showWithDecimals ? withTwoDecimals(extraPurchasePrice) : extraPurchasePrice) : '';\r\n const totalPriceAsText = showWithDecimals ? withTwoDecimals(totalPrice) : totalPrice;\r\n\r\n const giftCardAmount = selected.giftCardAmount ? (showWithDecimals ? withTwoDecimals(selected.giftCardAmount) : selected.giftCardAmount) : '';\r\n const giftCards = giftCardAmount ?

    {LOCALE[appLocale].giftCard} - {giftCardAmount} {LOCALE[appLocale].currency}

    : null;\r\n const clubCardPoints = selected.clubCardPoints ?

    {LOCALE[appLocale].clubCard} {selected.clubCardPoints} points

    : null;\r\n\r\n return (\r\n
    \r\n

    {LOCALE[appLocale].tickets} {ticketPriceAsText} {LOCALE[appLocale].currency}

    \r\n

    {LOCALE[appLocale].fees} {feesAsText} {LOCALE[appLocale].currency}

    \r\n

    0 ? '' : 'disabled'}>{_.capitalize(LOCALE[appLocale].extraPurchase)} {extrasPriceAsText} {LOCALE[appLocale].currency}

    \r\n {giftCards}\r\n
    \r\n

    {LOCALE[appLocale].totalPrice} {totalPriceAsText} {LOCALE[appLocale].currency}

    \r\n {clubCardPoints}\r\n
    \r\n )\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\n\r\nexport default class SelectedTickets extends React.Component {\r\n\r\n extractSelectedTickets() {\r\n const { tickets } = this.props;\r\n if (tickets) {\r\n return _.map(tickets, function (ticket, index) {\r\n const seperator = index < tickets.length - 1 ? ', ' : null;\r\n return {ticket.quantity} x {ticket.name}{seperator};\r\n });\r\n }\r\n }\r\n\r\n render() {\r\n const selectedTickets = this.extractSelectedTickets();\r\n return (\r\n
    \r\n {selectedTickets}\r\n
    \r\n )\r\n }\r\n}","import React from 'react'\r\nimport { hasDecimals, withTwoDecimals } from '../../../utilities/validation-utilities'\r\nimport PriceInfo from './PriceInfo'\r\nimport SelectedTickets from './SelectedTickets'\r\nimport LOCALE from './SummaryLocale'\r\n\r\nexport default class Summary extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = { showPriceInfo: props.summaryExpanded };\r\n\r\n this.togglePriceInfo = this.togglePriceInfo.bind(this);\r\n }\r\n\r\n togglePriceInfo() {\r\n const { showPriceInfo } = this.state;\r\n if (showPriceInfo === false) this.setState({ showPriceInfo: true });\r\n else this.setState({ showPriceInfo: false });\r\n\r\n //iframe resize\r\n if (window.parent != window) {\r\n const { actions } = this.props;\r\n setTimeout(() => { actions.appHeightChanged() }, 500); //Workaround for the duration it takes the DOM to rerender with the expanded element so we get the right height...\r\n }\r\n }\r\n\r\n render() {\r\n const { tickets, ticketPrice, extraPurchasePrice, totalFees, totalPrice, showFees, includeExtras, selected, bottomBarAllwaysVisible, appLocale } = this.props;\r\n const { showPriceInfo } = this.state;\r\n const icon = showPriceInfo ? : ;\r\n\r\n const showWithDecimals = hasDecimals(ticketPrice) || hasDecimals(totalFees) || hasDecimals(extraPurchasePrice) || hasDecimals(selected.giftCardAmount) || hasDecimals(totalPrice);\r\n const totalPriceAsText = showWithDecimals ? withTwoDecimals(totalPrice) : totalPrice;\r\n\r\n return (\r\n
    \r\n

    {icon} {LOCALE[appLocale].yourOrder}

    \r\n
    \r\n
    \r\n \r\n {selected.extraPurchases.length > 0 ? `, ${LOCALE[appLocale].extraPurchase}` : ''}\r\n
    \r\n
    {LOCALE[appLocale].totalPrice}: {totalPriceAsText} {LOCALE[appLocale].currency}
    \r\n
    \r\n \r\n
    \r\n )\r\n }\r\n}","import './summary.scss'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport _ from 'lodash'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../orderflow-constants'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport Summary from './Summary'\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const { receipt, order } = state;\r\n const showReceiptData = receipt.transactionId != 0 && (ownProps.currentPage === ROUTES.ORDERFLOW.RECEIPT || ownProps.currentPage === ROUTES.ORDERFLOW.RESERVATION);\r\n\r\n const ticketPrice = showReceiptData ? receipt.prices.tickets : order.selected.totalTicketPrice;\r\n const tickets = showReceiptData ? receipt.tickets : (order.selected ? order.selected.tickets : null);\r\n\r\n const extraPurchasesActive = !state.order.canReserve || _.some(state.order.availableExtraPurchases, (extra) => { return extra.buyOnly === false });;\r\n const includeExtras = ownProps.currentPage !== ROUTES.ORDERFLOW.TICKETS && order.orderType !== CONSTANTS.orderTypes.reserve && extraPurchasesActive;\r\n const extraPurchasePrice = includeExtras ? (showReceiptData ? receipt.prices.extras : order.selected.totalExtraPurchasesPrice) : 0;\r\n\r\n const priceBeforeFees = ticketPrice + extraPurchasePrice;\r\n const showFees = ownProps.currentPage !== ROUTES.ORDERFLOW.TICKETS;\r\n const totalFees = showFees && priceBeforeFees > 0 ? (showReceiptData ? receipt.prices.fees : order.selected.totalFees) : 0;\r\n\r\n const totalPrice = showReceiptData ? receipt.prices.total : state.order.totalPrice;\r\n\r\n return {\r\n tickets,\r\n ticketPrice,\r\n extraPurchasePrice,\r\n totalFees,\r\n totalPrice,\r\n showFees,\r\n includeExtras,\r\n selected: state.order.selected,\r\n bottomBarAllwaysVisible: state.organizer.configuration.bottomBarAllwaysVisible,\r\n appLocale: state.app.locale,\r\n summaryExpanded: state.organizer.configuration.summaryExpanded\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(Summary)","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport { Switch, Route } from 'react-router-dom'\r\nimport _ from 'lodash'\r\nimport { getParams } from '../../utilities/location-utilities'\r\nimport * as orderActions from '../../actions/order-actions'\r\nimport * as movieListActions from '../../actions/movielist-actions'\r\nimport TopBar from './topbar/TopBar'\r\nimport OrderContainer from './order/OrderContainer'\r\nimport CustomerContainer from './customer/CustomerContainer'\r\nimport DibsContainer from './payment/DibsContainer'\r\nimport ReepayContainer from './payment/ReepayContainer'\r\nimport ReceiptContainer from './receipt/ReceiptContainer'\r\nimport { ROUTES } from '../navigation/route-constants'\r\nimport CONSTANTS from './orderflow-constants'\r\nimport { appHeightChanged } from '../../actions/app-actions'\r\nimport Error from '../overlays/Error'\r\nimport Info from '../overlays/Info'\r\nimport ClubCardContainer from './clubcard/ClubCardContainer';\r\nimport ExtraPurchasesContainer from './extrapurchases/ExtraPurchaseContainer'\r\nimport BioKlubDkContainer from './biografklubdanmark/BioKlubDkContainer'\r\nimport GiftCardContainer from './giftcards/GiftCardContainer'\r\nimport PaymentContainer from './payment/PaymentContainer'\r\nimport Summary from './summary/SummaryContainer'\r\n\r\nclass OrderFlowContainer extends React.Component {\r\n timeout = 1800000; //30 minutes\r\n timer = null;\r\n\r\n componentWillUnmount() {\r\n clearTimeout(this.timer);\r\n }\r\n\r\n constructor(props) {\r\n super(props);\r\n this.state = { hasTimedOut: false };\r\n const { currentPage, match, history } = props;\r\n\r\n if (currentPage !== ROUTES.ORDERFLOW.RESERVATION && currentPage !== ROUTES.ORDERFLOW.TICKETS) //entry points into the flow\r\n history.replace(`${ROUTES.ORDERFLOW.TICKETS}/${match.params.movieId}/${match.params.showtimeId}${history.location.search}`);\r\n\r\n this.handleTimeout = this.handleTimeout.bind(this);\r\n this.timer = setTimeout(this.handleTimeout, this.timeout);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, movies, movieId, showtimeId, organizerIds, receipt, backTo, iframeId } = this.props;\r\n if (!receipt.transactionId) {\r\n if (movies.length == 0 && movieId && showtimeId) {\r\n actions.getMovieList(organizerIds)\r\n .then((movielist) => {\r\n const showtime = movielist.showtimes ? _.find(movielist.showtimes, (showtime) => { return showtime.id == showtimeId }) : null;\r\n return actions.selectedMovieChanged(movieId, backTo).then(() => actions.selectedShowtimeChanged(showtime)).then(() => actions.startOrder(showtime.id));\r\n });\r\n } else actions.startOrder(showtimeId);\r\n }\r\n\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n componentWillUnmount() {\r\n this.props.actions.resetOrder();\r\n }\r\n\r\n resetTimeout() {\r\n clearTimeout(this.timer);\r\n this.timer = setTimeout(this.handleTimeout, this.timeout);\r\n }\r\n\r\n handleTimeout() {\r\n clearTimeout(this.timer);\r\n this.setState({ hasTimedOut: true });\r\n }\r\n\r\n render() {\r\n const { hasTimedOut } = this.state;\r\n const { currentPage, organizer, movie, showtime, posterBanners, orderType, error, clubCardEnabled, pageHeader, appLocale } = this.props;\r\n const info = hasTimedOut && currentPage !== ROUTES.ORDERFLOW.RECEIPT ? window.location.reload()} />} /> : null;\r\n\r\n const params = '/:movieId/:showtimeId/';\r\n const clubcard = clubCardEnabled && orderType != CONSTANTS.orderTypes.buyReservation && orderType != CONSTANTS.orderTypes.reserve ? : null;\r\n const header = pageHeader ?
    : null;\r\n\r\n const orderFlow = !_.isEmpty(movie) && !_.isEmpty(showtime) ?
    \r\n {clubcard}\r\n {header}\r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n {info}\r\n
    : null;\r\n\r\n return (\r\n orderFlow\r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n const currentPage = '/' + ownProps.match.params.page;\r\n const showReceiptData = state.receipt.transactionId != 0 && (currentPage === ROUTES.ORDERFLOW.RECEIPT || currentPage === ROUTES.ORDERFLOW.RESERVATION);\r\n\r\n return {\r\n currentPage,\r\n showReceiptData,\r\n organizerIds: state.movielist.organizerIds || getParams().org,\r\n organizer: state.organizer,\r\n movieId: ownProps.match.params.movieId,\r\n movie: state.movielist.selectedMovie || {},\r\n movies: state.movielist.movies || [],\r\n showtimeId: ownProps.match.params.showtimeId,\r\n showtime: state.movielist.selectedShowtime || {},\r\n selected: state.order.selected,\r\n orderType: state.order.orderType,\r\n posterBanners: state.organizer.configuration.posterBanners,\r\n receipt: state.receipt,\r\n clubCardEnabled: state.organizer.configuration.clubCard != null,\r\n pageHeader: state.organizer.configuration.pageHeaders.orderflow,\r\n appLocale: state.app.locale,\r\n backTo: state.movielist.backTo,\r\n iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { appHeightChanged }, movieListActions, orderActions), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(OrderFlowContainer)","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport LOCALES from './OverlayLocales'\r\n\r\nclass Spinner extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = { show: true };\r\n }\r\n\r\n componentDidMount() {\r\n const { show } = this.props;\r\n setTimeout(() => { this.setState({ show }); }, 0) // css transition workaround\r\n }\r\n\r\n render() {\r\n const { show, appLocale } = this.props;\r\n return (\r\n
    \r\n

    {LOCALES[appLocale].loading}

    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n show: state.organizer.isFetching || state.movielist.isFetching || state.external.isFetching || state.order.isFetching ||\r\n state.customer.isFetching || state.receipt.isFetching || state.user.isFetching || state.ticketmaster.isFetching || state.cms.isFetching || ownProps.show || false,\r\n appLocale: state.app.locale\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(Spinner)","import React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport LOCALE from './OverlayLocales'\r\n\r\nclass Spinner extends React.Component {\r\n render() {\r\n const { appLocale } = this.props;\r\n return (\r\n
    \r\n
    \r\n

    {LOCALE[appLocale].notFound}

    \r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n appLocale: state.app.locale\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps)(Spinner)","import React from 'react'\r\nimport { baseUrl } from '../../api/cms-api'\r\n\r\nexport default class Commercial extends React.Component {\r\n constructor() {\r\n super();\r\n this.commercialClicked = this.commercialClicked.bind(this);\r\n }\r\n\r\n commercialClicked() {\r\n const { commercial, commercialClicked } = this.props;\r\n if (commercial.navigateTo) commercialClicked(commercial.navigateTo);\r\n }\r\n\r\n render() {\r\n const { commercial } = this.props;\r\n //TODO remove specific path on img...\r\n return (\r\n
    \r\n
    \r\n \r\n
    \r\n
    \r\n

    {commercial.title}

    \r\n

    {commercial.description}

    \r\n
    \r\n
    \r\n );\r\n }\r\n}","import React from 'react'\r\nimport { withRouter } from 'react-router-dom'\r\nimport _ from 'lodash'\r\nimport Commercial from './CommercialListItem'\r\n\r\nclass CommercialsList extends React.Component {\r\n constructor() {\r\n super();\r\n this.commercialClicked = this.commercialClicked.bind(this);\r\n }\r\n\r\n commercialClicked(navigateTo) {\r\n const { organizerId, history } = this.props;\r\n if (navigateTo.startsWith('http')) window.open(navigateTo, '_blank');\r\n else history.push(`${navigateTo}?org=${organizerId}`);\r\n }\r\n\r\n generateCommercialItems() {\r\n const { commercials } = this.props;\r\n return _.map(commercials, function (commercial, i) {\r\n return \r\n }.bind(this));\r\n }\r\n\r\n render() {\r\n const items = this.props.commercials ? this.generateCommercialItems() : null;\r\n\r\n return (\r\n
    \r\n {items}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nexport default withRouter(CommercialsList)","import './commercials.scss'\r\nimport React from 'react'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport { withRouter } from 'react-router-dom'\r\nimport { ROUTES } from '../navigation/route-constants'\r\nimport getCommercials from '../../actions/cms-actions'\r\nimport CommercialsList from './CommercialsList'\r\n\r\nclass CommercialsContainer extends React.Component {\r\n\r\n componentDidMount() {\r\n const { actions, organizerId, history } = this.props;\r\n actions.getCommercials(organizerId).then((result => {\r\n if (result.error || result.commercials.length == 0) history.replace(`${ROUTES.PROGRAM}?org=${organizerId}`);\r\n }));\r\n }\r\n\r\n render() {\r\n const { history, organizerId, commercials } = this.props;\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n history.push(`${ROUTES.PROGRAM}?org=${organizerId}`)} value=\"Dagens Program\" />\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n organizerId: state.organizer.id,\r\n commercials: state.cms.commercials\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(getCommercials, dispatch)\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(CommercialsContainer))","export default {\r\n da: {\r\n shortDateTimeFormat: 'ddd [d.] DD/MM [kl.] LT',\r\n loginName: 'Telefonnummer eller e-mail',\r\n loginPassword: 'Kode',\r\n findTickets: 'Find Billetter',\r\n noUserTickets: 'Der er ingen billetter med disse loginoplysninger',\r\n forgotPassword: 'Har du glemt din kode? Nulstil her',\r\n\r\n ticket: 'billet',\r\n tickets: 'billetter',\r\n reservation: 'reservation',\r\n paid: 'Betalt',\r\n reserved: 'Reserveret',\r\n deleted: 'Slettet',\r\n close: 'LUK',\r\n getReceiptError: 'Kvitteringen kunne ikke hentes.'\r\n },\r\n\r\n en: {\r\n shortDateTimeFormat: 'ddd, DD/MM [at] LT',\r\n loginName: 'Telephone number or e-mail',\r\n loginPassword: 'Password',\r\n findTickets: 'Find Tickets',\r\n noUserTickets: 'There are no tickets for this login',\r\n forgotPassword: 'Did you forget your password? Reset here',\r\n\r\n ticket: 'ticket',\r\n tickets: 'tickets',\r\n reserved: 'Reserved',\r\n paid: 'Paid',\r\n reservation: 'reservation',\r\n deleted: 'Deleted', \r\n close: 'CLOSE',\r\n getReceiptError: 'We couldn\\'t get your receipt.'\r\n }\r\n}","import React from 'react'\r\nimport _ from 'lodash'\r\nimport LOCALE from './TransactionsLocale'\r\n\r\nexport default class TransactionLogin extends React.Component {\r\n constructor() {\r\n super();\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n\r\n }\r\n\r\n componentDidMount() {\r\n this.email.focus();\r\n }\r\n\r\n handleSubmit(e) {\r\n e.preventDefault();\r\n this.props.submit(this.email.value, this.password.value);\r\n }\r\n\r\n render() {\r\n const { customer, error, appLocale } = this.props;\r\n\r\n return (\r\n
    \r\n
    \r\n this.email = email} />\r\n
    \r\n
    \r\n this.password = password} />\r\n
    \r\n
    \r\n \r\n
    \r\n {error ?
    {LOCALE[appLocale].noUserTickets}
    : null}\r\n
    \r\n
    \r\n )\r\n }\r\n}","import React from 'react'\r\nimport moment from 'moment'\r\nimport _ from 'lodash'\r\nimport CONSTANTS from '../../orderflow/orderflow-constants'\r\nimport Poster from '../../movie/Poster'\r\nimport LOCALE from './TransactionsLocale'\r\nimport { ORGANIZER_TYPES } from '../../../api/api-constants';\r\n\r\nconst Transaction = ({ transaction = {}, rowClasses, getReceipt, appLocale, organizerType }) => {\r\n const dateTime = moment(transaction.showtime.dateTime);\r\n const tickets = transaction.ticketCount == 1 ? LOCALE[appLocale].ticket : LOCALE[appLocale].tickets;\r\n\r\n return (\r\n
    \r\n {transaction.movie.posters ? : null}\r\n
    \r\n

    {transaction.movie.name}

    \r\n
    {_.capitalize(dateTime.format(LOCALE[appLocale].shortDateTimeFormat))}, {transaction.showtime.locationName}
    \r\n\r\n {organizerType == ORGANIZER_TYPES.CIRCUS ?\r\n

    \r\n {transaction.location.name}
    \r\n {transaction.location.address}
    \r\n {transaction.location.city}\r\n

    :\r\n

    \r\n {transaction.organizer.name}
    \r\n {transaction.organizer.address}
    \r\n {transaction.organizer.city}\r\n

    \r\n }\r\n

    {transaction.orderType == CONSTANTS.orderTypes.buy ? LOCALE[appLocale].paid : LOCALE[appLocale].reserved} {transaction.ticketCount} {tickets}

    \r\n {transaction.removed == false ?
    :
    {LOCALE[appLocale].deleted}
    }\r\n
    \r\n
    \r\n )\r\n}\r\n\r\nexport default Transaction","import React from 'react'\r\nimport _ from 'lodash'\r\nimport Transaction from './TransactionListItem'\r\nimport LOCALE from './TransactionsLocale'\r\n\r\nexport default class TransactionList extends React.Component {\r\n constructor() {\r\n super();\r\n this.getReceipt = this.getReceipt.bind(this);\r\n }\r\n\r\n getReceipt(e) {\r\n e.preventDefault();\r\n const target = e.target;\r\n const currentTarget = e.currentTarget;\r\n if (!currentTarget.className.includes('removed') && (target.tagName == 'IMG' || target.tagName == 'H1' || target.tagName == 'INPUT')) {\r\n const { transactions, toggleReceipt, appLocale } = this.props;\r\n const transaction = _.find(transactions, (trans) => trans.id == currentTarget.id);\r\n if (transaction) toggleReceipt(transaction);\r\n else this.setState({ error: LOCALE[appLocale].getReceiptError });\r\n }\r\n }\r\n\r\n generateListItems() {\r\n const { transactions, appLocale, organizerType } = this.props;\r\n return _.map(transactions, (transaction, i) => {\r\n let rowClasses = this.calculateRowPlacement(i, 'Transaction two-columns');\r\n if (transaction.removed == true) rowClasses += ' removed';\r\n return \r\n });\r\n }\r\n\r\n calculateRowPlacement(counter, rowClasses) {\r\n if (counter > 1) {\r\n for (let i = 2; i <= 7; i++) {\r\n if (counter % i == 0) rowClasses += ' first-in-row' + i;\r\n }\r\n }\r\n return rowClasses;\r\n }\r\n\r\n render() {\r\n const list = this.generateListItems();\r\n\r\n return (\r\n
    \r\n {list}\r\n
    \r\n )\r\n }\r\n}\r\n","import React from 'react'\r\nimport _ from 'lodash'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../../orderflow/orderflow-constants'\r\nimport LOCALE from './TransactionsLocale'\r\n\r\nexport default class TransactionReceipt extends React.Component {\r\n\r\n getReceipt() {\r\n const { transaction } = this.props;\r\n if (transaction.orderType == CONSTANTS.orderTypes.reserve) {\r\n return \r\n\r\n } else if (transaction.orderType == CONSTANTS.orderTypes.buy) {\r\n return
    \r\n }\r\n }\r\n\r\n render() {\r\n const { toggleReceipt, fadeIn, appLocale } = this.props;\r\n const receipt = this.getReceipt();\r\n return (\r\n
    \r\n
    \r\n \r\n {receipt}\r\n
    \r\n
    \r\n )\r\n }\r\n}","import './transactions.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport * as userActions from '../../../actions/user-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport Login from './TransactionsLogin'\r\nimport TransactionList from './TransactionList'\r\nimport TransactionReceipt from './TransactionReceipt';\r\n\r\nclass TransactionsContainer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n showReceipt: false,\r\n transaction: null,\r\n noEntries: null\r\n };\r\n\r\n this.submitLogin = this.submitLogin.bind(this);\r\n this.toggleReceipt = this.toggleReceipt.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const { actions, iframeId } = this.props;\r\n if (window.parent != window) actions.appHeightChanged(iframeId, true);\r\n else window.scrollTo(0, 0);\r\n }\r\n\r\n submitLogin(email, password) {\r\n const { actions } = this.props;\r\n actions.getUserTransactions(email, password).then((result) => {\r\n if (result.transactions.length == 0) this.setState({ noEntries: true });\r\n });\r\n }\r\n\r\n toggleReceipt(transaction) {\r\n const show = this.state.showReceipt;\r\n if (show == true) {\r\n document.body.classList.remove('no-scroll');\r\n this.setState({ showReceipt: false });\r\n }\r\n else {\r\n document.body.classList.add('no-scroll');\r\n this.setState({ showReceipt: true, transaction });\r\n }\r\n }\r\n\r\n render() {\r\n const { transactions, pageHeader, appLocale, customer, organizerType } = this.props;\r\n const { showReceipt, transaction, noEntries } = this.state;\r\n const header = pageHeader ?
    : null;\r\n const login = transactions.length == 0 ? : null;\r\n\r\n return (\r\n
    \r\n {header}\r\n {login}\r\n \r\n {showReceipt ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n return {\r\n transactions: state.user.transactions,\r\n pageHeader: state.organizer.configuration.pageHeaders.myTickets,\r\n appLocale: state.app.locale,\r\n customer: state.customer,\r\n organizerType: state.organizer.configuration.type,\r\n iframeId: state.app.iframeId,\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, userActions, { appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TransactionsContainer)","export default {\r\n da: {\r\n pageHeader: 'Dine Nyhedsbreve',\r\n info: 'Tilmeld eller afmeld ',\r\n email: 'Email',\r\n find: 'Søg',\r\n invalidInput: 'Ugyldig email',\r\n subscribed: 'Tilmeldt',\r\n unsubscribed: 'Frameldt',\r\n },\r\n\r\n en: {\r\n pageHeader: 'Your Newsletters',\r\n info: 'Subscribe or unsubscribe ',\r\n email: 'Email',\r\n find: 'Search',\r\n invalidInput: 'Invalid email'\r\n }\r\n}","import React from 'react'\r\nimport LOCALE from './NewslettersLocale'\r\n\r\nexport default class Newsletter extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n this.state = {\r\n isChecked: props.newsletter.isSubscribed,\r\n triggerEffect: false\r\n }\r\n\r\n this.newsletterChanged = this.newsletterChanged.bind(this);\r\n }\r\n\r\n newsletterChanged(e) {\r\n const id = e.target.id;\r\n const checked = e.target.checked;\r\n const { newsletterChanged } = this.props;\r\n this.setState({ isChecked: checked });\r\n newsletterChanged(parseInt(id), checked);\r\n }\r\n\r\n render() {\r\n const { isChecked, triggerEffect } = this.state;\r\n const { newsletter, appLocale } = this.props;\r\n\r\n return (\r\n \r\n )\r\n }\r\n}\r\n\r\n","import './newsletters.scss'\r\nimport React from 'react'\r\nimport { connect } from 'react-redux'\r\nimport { bindActionCreators } from 'redux'\r\nimport _ from 'lodash'\r\nimport * as userActions from '../../../actions/user-actions'\r\nimport LOCALE from './NewslettersLocale'\r\nimport { getParams } from '../../../utilities/location-utilities'\r\nimport * as validators from '../../../utilities/validation-utilities'\r\nimport Error from '../../overlays/Error'\r\nimport Newsletter from './Newsletter'\r\n\r\nclass NewslettersContainer extends React.Component {\r\n constructor() {\r\n super();\r\n this.state = {\r\n organizerId: 0,\r\n customerEmail: '',\r\n invalidInput: false\r\n }\r\n this.handleSubmit = this.handleSubmit.bind(this);\r\n this.newsletterChanged = this.newsletterChanged.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n const queryParameters = getParams(window.location.href);\r\n const organizerId = queryParameters.org;\r\n const customerEmail = queryParameters.email;\r\n this.setState({ organizerId, customerEmail });\r\n\r\n if (organizerId && customerEmail && validators.isValidEmail(customerEmail)) {\r\n this.props.actions.getNewsletters(organizerId, customerEmail);\r\n }\r\n }\r\n\r\n handleSubmit(e) {\r\n e.preventDefault();\r\n const { organizerId } = this.state;\r\n const customerEmail = this.email.value;\r\n\r\n if (validators.isValidEmail(customerEmail)) {\r\n this.setState({ customerEmail });\r\n this.props.actions.getNewsletters(organizerId, customerEmail);\r\n }\r\n else this.setState({ invalidInput: true });\r\n }\r\n\r\n newsletterChanged(id, checked) {\r\n const { actions } = this.props;\r\n actions.newsletterChanged(id, checked);\r\n }\r\n\r\n render() {\r\n const { customerEmail, invalidInput } = this.state;\r\n const { newsletters, appLocale, error } = this.props;\r\n\r\n return (\r\n
    \r\n

    {LOCALE[appLocale].pageHeader}

    \r\n

    {LOCALE[appLocale].info} {customerEmail}

    \r\n\r\n {!customerEmail ?
    \r\n this.email = email} />\r\n \r\n
    {invalidInput ? LOCALE[appLocale].invalidInput : ''}
    \r\n\r\n
    : null}\r\n\r\n {customerEmail ? _.map(newsletters, (newsletter) => {\r\n return \r\n }) : null}\r\n {error ? : null}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n\r\n return {\r\n newsletters: state.user.newsletters,\r\n appLocale: state.app.locale,\r\n error: state.user.error\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, userActions), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(NewslettersContainer)","import '../styles/general.scss'\r\nimport '../styles/icomoon.scss'\r\nimport '../styles/print.scss'\r\n\r\nimport './showtime/showtime.scss'\r\n\r\nimport React from 'react';\r\nimport _ from 'lodash'\r\nimport { bindActionCreators } from 'redux'\r\nimport { connect } from 'react-redux'\r\nimport { Switch, Route, withRouter } from 'react-router-dom'\r\nimport { getParams } from '../utilities/location-utilities'\r\nimport { ROUTES } from './navigation/route-constants'\r\nimport { APP_MODES } from '../api/api-constants'\r\nimport { appHeightChanged, initFromParentSite } from '../actions/app-actions'\r\n\r\nimport Program_AllFutureMovies from './movielists/combinations/Program_AllFutureMovies'\r\n\r\nimport Multibio_ProgramContainer from './movielists/multibio/Multibio_ProgramContainer'\r\nimport Multibio_AllContainer from './movielists/multibio/Multibio_AllContainer'\r\nimport Multibio_FutureMoviesContainer from './movielists/multibio/futuremovies/Multibio_FutureMoviesContainer'\r\n\r\nimport ProgramListContainer from './movielists/program/ProgramListContainer'\r\nimport AllMoviesListContainer from './movielists/allmovies/AllMoviesListContainer'\r\nimport FutureMoviesListContainer from './movielists/futuremovies/FutureMoviesListContainer'\r\nimport SpecialEventsContainer from './movielists/specialevents/SpecialEventsContainer'\r\n\r\nimport TicketmasterListContainer from './external/ticketmaster/TicketmasterListContainer'\r\nimport TicketmasterDetailsContainer from './external/ticketmaster/TicketmasterDetailsContainer'\r\nimport BillettenListContainer from './external/billetten/BillettenListContainer'\r\nimport BillettenDetailsContainer from './external/billetten/BillettenDetailsContainer'\r\n\r\n\r\nimport CircusListContainer from './circus/CircusListContainer'\r\nimport MovieContainer from './movie/MovieContainer'\r\nimport OrderFlowContainer from './orderflow/OrderFlowContainer'\r\nimport Spinner from './overlays/Spinner'\r\nimport Error from './overlays/Error'\r\nimport NotFound from './overlays/NotFound'\r\nimport CommercialsContainer from './commercials/CommercialsContainer'\r\nimport TransactionsContainer from './user/transactions/TransactionsContainer'\r\nimport NewslettersContainer from './user/newsletters/NewslettersContainer'\r\n\r\nclass App extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n const queryParameters = getParams();\r\n this.state = {\r\n app: this.initializeApp(props.mode),\r\n iframeId: queryParameters.iframeid\r\n }\r\n this.checkIfAppHeightChanged = this.checkIfAppHeightChanged.bind(this);\r\n }\r\n\r\n componentDidMount() {\r\n // Sometimes the onLoad isn't triggered on ;\r\n ticketMasterEventRoute = ;\r\n billettenAllEventsRoute = ;\r\n billettenEventRoute = ;\r\n\r\n multiAllMoviesRoute = ;\r\n multiProgramRoute = ;\r\n multiFutureMoviesRoute = ;\r\n\r\n program_AllFutureMoviesRoute = ;\r\n\r\n allMoviesRoute = ;\r\n programRoute = ;\r\n speicalMoviesRoute = ;\r\n futureMoviesRoute = ;\r\n circusRoute = ;\r\n\r\n movieRoute = ;\r\n orderFlowRoute = ;\r\n reservationRoute = ;\r\n commercialsRoute = ;\r\n\r\n userTransactionsRoute = ;\r\n userNewslettersRoute = ;\r\n notFoundRoute = !this.props.isFecthing ? : null} />;\r\n\r\n initializeApp(mode) {\r\n switch (mode) {\r\n case APP_MODES.PROGRAM:\r\n return \r\n {this.ticketMasterAllEventsRoute}\r\n {this.ticketMasterEventRoute}\r\n {this.billettenAllEventsRoute}\r\n {this.billettenEventRoute}\r\n\r\n {this.multiAllMoviesRoute}\r\n {this.multiProgramRoute}\r\n {this.multiFutureMoviesRoute}\r\n {this.multiMovieRoute}\r\n\r\n {this.commercialsRoute}\r\n\r\n {this.program_AllFutureMoviesRoute}\r\n\r\n {this.programRoute}\r\n {this.speicalMoviesRoute}\r\n {this.allMoviesRoute}\r\n {this.futureMoviesRoute}\r\n {this.circusRoute}\r\n\r\n {this.movieRoute}\r\n {this.orderFlowRoute}\r\n {this.reservationRoute}\r\n\r\n {this.userTransactionsRoute}\r\n {this.userNewslettersRoute}\r\n {this.notFoundRoute}\r\n \r\n case APP_MODES.MOVIE:\r\n return \r\n {this.movieRoute}\r\n {this.orderFlowRoute}\r\n {this.reservationRoute}\r\n {this.notFoundRoute}\r\n \r\n case APP_MODES.ORDERFLOW:\r\n return \r\n {this.orderFlowRoute}\r\n {this.reservationRoute}\r\n {this.notFoundRoute}\r\n \r\n default:\r\n {\r\n const error = { message: 'Siden kunne ikke initialiseres', debug: 'DEBUG: App.js could not determine app mode' };\r\n return \r\n }\r\n }\r\n }\r\n\r\n render() {\r\n const { mode } = this.props;\r\n const { app } = this.state;\r\n\r\n return (\r\n
    \r\n \r\n
    \r\n {app}\r\n
    \r\n
    \r\n );\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n isFecthing: state.organizer.isFetching || state.movielist.isFetching || state.order.isFetching || state.customer.isFetching || state.receipt.isFetching || false,\r\n mode: state.organizer.configuration.appMode,\r\n pageHeight: state.app.height\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { appHeightChanged, initFromParentSite }), dispatch)\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(App))","import React from 'react'\r\nimport pathToRegexp from 'path-to-regexp'\r\nimport _ from 'lodash'\r\nimport TagManager from 'react-gtm-module'\r\n\r\nimport { ROUTES } from '../components/navigation/route-constants'\r\nimport CONSTANTS from '../components/orderflow/orderflow-constants'\r\nimport { APP_MODES, SITE_TYPES } from '../api/api-constants'\r\nimport API_CONSTANTS from '../api/api-constants'\r\nimport { setCardholder } from '../api/ticketgate-api'\r\nimport { getParams } from '../utilities/location-utilities'\r\nimport { logTrace, sendLogSms } from '../api/orderflow-api'\r\nimport { languageChanged, siteTypeChanged } from './app-actions'\r\nimport { getOrganizer } from './organizer-actions'\r\nimport * as movieListActions from './movielist-actions'\r\nimport { orderTypeChanged, startOrder } from './order-actions'\r\nimport { bookFailed } from './customer-actions'\r\nimport { getReservationInfo, receiptSuccess } from './receipt-actions'\r\nimport { getExtraPurchases } from './order-actions'\r\nimport { book } from './customer-actions'\r\n\r\nexport default function initializeApp() {\r\n const queryParameters = getParams(window.location.href);\r\n\r\n let rid = queryParameters.rid || queryParameters.reservationid;\r\n const reservationPath = pathToRegexp(`${ROUTES.ORDERFLOW.RESERVATION}/:reservationId`).exec(window.location.pathname);\r\n if (reservationPath) rid = reservationPath[1];\r\n\r\n return (dispatch, getState) => {\r\n //TODO move this to DibsContainer if possible:\r\n // complete transaction if we came from dibs\r\n if (queryParameters.orderid && queryParameters.transact) {\r\n const organizer = getState().organizer;\r\n checkAndLoadCustomStyles(organizer);\r\n initGoogleTracking(organizer);\r\n const customer = getState().customer;\r\n const transactionId = getState().order.selected.transactionId;\r\n setCardholder(getState().user.clubCardId || 0);\r\n\r\n const message = `transactionId: ${transactionId}, orderId: ${queryParameters.orderid}, dibs transact: ${queryParameters.transact}, orgId: ${organizer.id}, customer email: ${customer.email}, customer phone: ${customer.phone}, payType: ${queryParameters.paytype}`;\r\n logTrace('initializeApp - AFTER DIBS ACCEPT URL', message);\r\n\r\n if (transactionId) {\r\n logTrace('initializeApp - CALLING BOOK', message);\r\n return dispatch(book(transactionId, customer, queryParameters.transact, queryParameters.orderid, parseInt(queryParameters.amount), queryParameters.paytype));\r\n }\r\n else {\r\n logTrace('initializeApp - NO TRANSACTIONID = NO BOOK', message, \"critical\");\r\n sendLogSms({ message: 'NO BOOK! ' + message });\r\n\r\n const { location } = window;\r\n const path = _.replace(location.pathname, '/dibs', ROUTES.ORDERFLOW.TICKETS);\r\n dispatch(bookFailed({ //The lack of actually calling book is the failure\r\n message: 'Der skete en fejl! Din bestilling gik ikke igennem, prøv igen.',\r\n buttons: location.href = `${location.origin}${path}?org=${queryParameters.org}`} value=\"OK\" />\r\n }));\r\n }\r\n } else if (!queryParameters.cancel && queryParameters.invoice) { //Reepay..Can we move this to ReepayContainer?\r\n const organizer = getState().organizer;\r\n checkAndLoadCustomStyles(organizer);\r\n initGoogleTracking(organizer);\r\n const customer = getState().customer;\r\n const transactionId = getState().order.selected.transactionId;\r\n setCardholder(getState().user.clubCardId || 0);\r\n\r\n const message = `transactionId: ${transactionId}, orderId: ${queryParameters.invoice}, reepay id: ${queryParameters.id}, orgId: ${organizer.id}, customer email: ${customer.email}, customer phone: ${customer.phone}`;\r\n logTrace('initializeApp - AFTER REEPAY ACCEPT URL ', document.URL);\r\n\r\n if (transactionId) {\r\n logTrace('initializeApp - CALLING BOOK', message);\r\n return dispatch(book(transactionId, customer, queryParameters.id, queryParameters.invoice, parseInt(queryParameters.amount), 'DK')); //TODO get paytype from reepay and also transaction gebyr?\r\n }\r\n else {\r\n logTrace('initializeApp - NO TRANSACTIONID = NO BOOK', message, \"critical\");\r\n sendLogSms({ message: 'NO BOOK! ' + message });\r\n\r\n const { location } = window;\r\n const path = _.replace(location.pathname, '/reepay', ROUTES.ORDERFLOW.TICKETS);\r\n dispatch(bookFailed({ //The lack of actually calling book is the failure\r\n message: 'Der skete en fejl! Din bestilling gik ikke igennem, prøv igen.',\r\n buttons: location.href = `${location.origin}${path}?org=${queryParameters.org}`} value=\"OK\" />\r\n }));\r\n }\r\n }\r\n //---\r\n if (rid) return dispatch(initAsReservationOnly(rid, queryParameters.lang));\r\n else return dispatch(initWith(queryParameters));\r\n }\r\n}\r\n\r\nfunction initAsReservationOnly(rid, appLocale) {\r\n const reservationId = checkForReservationId(rid);\r\n return (dispatch) => {\r\n return dispatch(getReservationInfo(reservationId)).then((result) => {\r\n if (!result.error) {\r\n const movieId = result.transaction.movieId;\r\n const showtimeId = result.transaction.showtimeId;\r\n return dispatch(getOrganizer(result.transaction.organizerId)).then((organizer) => {\r\n if (appLocale) dispatch(languageChanged(appLocale));\r\n\r\n checkAndLoadCustomStyles(organizer);\r\n initGoogleTracking(organizer);\r\n\r\n return dispatch(movieListActions.getMovieList(organizer.id)).then((movielist) => {\r\n const movie = movielist.movies ? _.find(movielist.movies, (movie) => { return movie.id == movieId }) : null;\r\n const showtime = movielist.showtimes ? _.find(movielist.showtimes, (showtime) => { return showtime.id == showtimeId }) : null;\r\n if (movie && showtime) {\r\n window.history.replaceState(null, null, `${ROUTES.ORDERFLOW.RESERVATION}/${rid}`);\r\n dispatch(movieListActions.selectedMovieChanged(movie.id));\r\n dispatch(movieListActions.selectedShowtimeChanged(showtime));\r\n dispatch(getExtraPurchases(showtime.id)); //separate call for only extra puchases in case user wants to buy\r\n result.transaction.id = reservationId;\r\n dispatch(receiptSuccess(result.transaction)); //for the reservationId to receipt.id...\r\n return dispatch(orderTypeChanged(CONSTANTS.orderTypes.reserve)); //for the reserve fees\r\n }\r\n return movielist;\r\n });\r\n });\r\n } else return { error: result.error }\r\n });\r\n }\r\n}\r\n\r\nfunction initWith(queryParameters) {\r\n const organizerIds = queryParameters.org || queryParameters.organizer || API_CONSTANTS.organizerUrls[window.location.host];\r\n return (dispatch, getState) => {\r\n const customerEmail = getState().customer.email;\r\n const siteType = queryParameters.sitetype;\r\n\r\n return dispatch(getOrganizer(organizerIds, siteType, customerEmail)).then((organizer) => {\r\n if (organizer.error) return organizer;\r\n if (queryParameters.lang) dispatch(languageChanged(queryParameters.lang));\r\n\r\n dispatch(siteTypeChanged(siteType));\r\n checkAndLoadCustomStyles(organizer, siteType, queryParameters.design);\r\n initGoogleTracking(organizer);\r\n if (queryParameters.newwin) organizer.configuration.openOrderInNewWindow = queryParameters.newwin === 'true';\r\n\r\n //For old drupal sites..REMOVE as soon as drupal sites are dead\r\n const showtimeId = queryParameters.showtime;\r\n if (queryParameters.organizer && showtimeId) {\r\n organizer.configuration.appMode = APP_MODES.ORDERFLOW; // Mutating directly because it's used to determine to show backbuttons...\r\n\r\n return dispatch(movieListActions.getMovieList(organizerIds)).then((movielist) => {\r\n const showtime = movielist.showtimes ? _.find(movielist.showtimes, (showtime) => { return showtime.id == showtimeId }) : null;\r\n document.body.className = \"drupal\";\r\n window.history.replaceState(null, null, `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${showtime.organizerId}`);\r\n\r\n return dispatch(movieListActions.selectedMovieChanged(showtime.movieId))\r\n .then(() => dispatch(movieListActions.selectedShowtimeChanged(showtime)))\r\n .then(() => dispatch(startOrder(showtime.id)));\r\n });\r\n }\r\n //---\r\n\r\n return organizer;\r\n });\r\n }\r\n}\r\n\r\nfunction initGoogleTracking(organizer) {\r\n if (organizer.configuration.googleAnalytics && organizer.configuration.googleAnalytics.gtmId) {\r\n const tagManagerArgs = { gtmId: organizer.configuration.googleAnalytics.gtmId };\r\n TagManager.initialize(tagManagerArgs);\r\n }\r\n}\r\n\r\nfunction checkForReservationId(rid) {\r\n const length = rid.length;\r\n const checkNumber = +rid.substr(length - 1, length);\r\n const reservationId = +rid.substr(0, length - 1);\r\n let value = reservationId;\r\n let sum = 0;\r\n\r\n while (value) {\r\n sum += value % 10;\r\n value = Math.floor(value / 10);\r\n }\r\n\r\n return sum % 10 === checkNumber ? reservationId : null;\r\n}\r\n\r\nfunction checkAndLoadCustomStyles(organizer, siteType, design) {\r\n if (siteType == SITE_TYPES.APP) {\r\n const path = '/css/mobile-app.css';\r\n let umbracoOverrides = document.createElement('link');\r\n umbracoOverrides.href = path;\r\n umbracoOverrides.rel = 'stylesheet';\r\n document.getElementsByTagName('head')[0].appendChild(umbracoOverrides);\r\n }\r\n else if (siteType == SITE_TYPES.UMBRACO) {\r\n const path = '/css/umbraco.css';\r\n let umbracoOverrides = document.createElement('link');\r\n umbracoOverrides.href = path;\r\n umbracoOverrides.rel = 'stylesheet';\r\n document.getElementsByTagName('head')[0].appendChild(umbracoOverrides);\r\n }\r\n\r\n if (organizer.configuration && organizer.configuration.hasCustomStyles) {\r\n const path = '/custom-organizer-styles/organizer_' + organizer.id + '.css';\r\n let styleOverrides = document.createElement('link');\r\n styleOverrides.href = path;\r\n styleOverrides.rel = 'stylesheet';\r\n document.getElementsByTagName('head')[0].appendChild(styleOverrides);\r\n }\r\n\r\n if (design) {\r\n const path = '/css/designs/design_' + design + '.css';\r\n let styleOverrides = document.createElement('link');\r\n styleOverrides.href = path;\r\n styleOverrides.rel = 'stylesheet';\r\n document.getElementsByTagName('head')[0].appendChild(styleOverrides);\r\n }\r\n}","//TODO if < ie 11\r\nimport 'raf/polyfill'\r\nimport 'babel-polyfill'\r\nimport './lib/html5-dataset'\r\nimport 'react-app-polyfill/ie9';\r\n//------------\r\n\r\nimport './styles/normalize.css'\r\nimport './components/overlays/overlay.scss'\r\nimport React from 'react'\r\nimport thunk from 'redux-thunk'\r\nimport { createStore, applyMiddleware, compose } from 'redux'\r\nimport { render } from 'react-dom'\r\nimport { Provider } from 'react-redux'\r\nimport { BrowserRouter as Router } from 'react-router-dom'\r\nimport rootReducer from './reducers/root-reducer'\r\nimport { logTrace } from './api/orderflow-api'\r\nimport localStorageUtils from './utilities/localstorage-utilities'\r\nimport { getParams } from './utilities/location-utilities'\r\nimport App from './components/App'\r\nimport Spinner from './components/overlays/Spinner'\r\nimport Error from './components/overlays/Error'\r\nimport initializeApp from './actions/index-actions'\r\n\r\nconst beforeDibsState = JSON.parse(localStorage.getItem('beforeDibsState'));\r\nif (beforeDibsState) {\r\n const queryParameters = getParams();\r\n const transactionId = beforeDibsState.order ? (beforeDibsState.order.selected ? beforeDibsState.order.selected.transactionId : null) : null;\r\n const customer = beforeDibsState.customer ? beforeDibsState.customer : null;\r\n const message = `FROM SESSION STATE: transactionId: ${transactionId}, orgId: ${beforeDibsState.organizer ? beforeDibsState.organizer.id : null}, customer email: ${customer ? customer.email : null}, customer phone: ${customer ? customer.phone : null}, FROM QUERY PARAMS: ${queryParameters.transact}, ${queryParameters.orderid}`;\r\n logTrace('index.js - STARTUP AFTER REEPAY/DIBS', message);\r\n}\r\n\r\nconst persistedCustomer = localStorageUtils.getItem('customer') || null;\r\nconst persistedState = beforeDibsState ? beforeDibsState : persistedCustomer ? { customer: persistedCustomer } : undefined;\r\nlocalStorage.removeItem('beforeDibsState');\r\n\r\n//REDUX DEV TOOLS\r\nconst composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\r\nconst store = createStore(rootReducer, persistedState, composeEnhancers(applyMiddleware(thunk)));\r\n\r\nrender(, document.getElementById('root'));\r\nstore.dispatch(initializeApp()).then((result) => {\r\n render(\r\n \r\n \r\n {!result.error ? : }\r\n \r\n ,\r\n document.getElementById('root')\r\n )\r\n});"],"sourceRoot":""}