{"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","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","components/orderflow/orderflow-constants.js","components/navigation/route-constants.js","actions/order-actions.js","actions/movielist-actions.js","actions/organizer-actions.js","reducers/order-reducer.js","actions/receipt-actions.js","actions/customer-actions.js","reducers/customer-reducer.js","actions/app-actions.js","api/ticketmaster-api.js","actions/ticketmaster-actions.js","actions/index-actions.js","reducers/receipt-reducer.js","actions/user-actions.js","api/cms-api.js","actions/cms-actions.js","actions/ga-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","components/movielists/MovieListLocale.js","components/movielists/shared.js","components/movie/Poster.js","components/movielists/allfuturemovies/AllFutureMoviesListItem.js","components/movielists/allfuturemovies/AllFutureMoviesList.js","components/movielists/allfuturemovies/AllFutureMoviesListContainer.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/movie/MovieLocale.js","components/movie/MovieInfo.js","components/showtime/ShowtimeType.js","components/showtime/Showtime.js","components/showtime/ShowtimeTypeList.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/allmovies/AllMoviesListItem.js","components/movielists/allmovies/AllMoviesList.js","components/movielists/allmovies/AllMoviesListContainer.js","components/movielists/futuremovies/FutureMovieListItem.js","components/movielists/futuremovies/FutureMoviesList.js","components/movielists/futuremovies/FutureMoviesListContainer.js","components/ticketmaster/TicketMasterLocale.js","components/ticketmaster/list/TicketMasterListItem.js","components/ticketmaster/list/TicketMasterListContainer.js","components/ticketmaster/details/TicketMasterEventContainer.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","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/Payment.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","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","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","fetchItems","templateId","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","authHeader","extractConfigurations","config","organizer","DEFAULT","_timeZone","tz","setDefault","censors","texts","queryParams","_type","_appMode","_showReservedAsRed","openOrderInNewWindow","_openOrderFlowInNewWindow","_customerPasswordEnabled","showLocationOnShowtime","_showLocationOnEventTime","_showDaysBackInProgram","defaultTickets","_defaultTickets","_useCustomStyleSheet","_bottomBarAllwaysVisible","_redeemCuponsOnline","_confirmEmailInput","_languages","extractLocales","summaryExpanded","_summaryExpanded","phoneRestrictions","minLength","_specialAllMovies","_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","parseInt","_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","error","showtime","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","fetchOrganizer","siteType","soap","soapbuilder","organizerCallback","envelope","getOrganizerResponse","getOrganizerResult","_result","configuration","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","timeout","ticketType","pages","order","receipt","orderTypes","buyReservation","ROUTES","TICKETMASTER_ALL_EVENTS","TICKETMASTER_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","RECEIPT","RESERVATION","NOT_FOUND","START_ORDER","INITIAL_FETCH_DONE","startOrder","dispatch","getState","getAvailableTicketsAndExtraPurchases","result","fetchSeatsImage","AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_REQUEST","AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_SUCCESS","AVAILABLE_TICKETS_AND_EXTRA_PURCHASES_FAILED","requestedAt","Date","now","ticketgate","succeededAt","failedAt","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","pathname","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","movielist","selectedShowtime","ticketFee","transactionFee","getMovieList","getFutureMovies","MOVIELIST_REQUEST","MOVIELIST_SUCCESS","MOVIELIST_FAILED","movielistRequest","api","movielistSuccess","movielistFailed","dateSort","monthSort","selectedDate","datesWithShowtimes","showtimes","showInfo","format","includes","backTo","organizers","movieBases","showtimeTypes","showBackInTime","FUTURE_MOVIES_REQUEST","FUTURE_MOVIES_SUCCESS","FUTURE_MOVIES_FAILED","isMultipleTemplates","templates","futureMoviesRequest","futureMoviesSuccess","futureMoviesFailed","promises","Promise","resolve","reject","flatten","merged","exists","changeSelectedShowtime","newShowtime","selectedOrganizer","app","getOrganizer","selectedMovieChanged","selectedShowtimeChanged","SELECTED_MOVIE_CHANGED","newMovieId","selectedMovieUpdate","newMovie","SELECTED_SHOWTIME_CHANGED","TOGGLE_SORT","toggleSort","newSort","CHANGE_DATE","changeDate","newDate","CHANGE_MONTH","changeMonth","newMonth","selectedMonth","FETCH_ORGANIZER_REQUEST","FETCH_ORGANIZER_SUCCESS","FETCH_ORGANIZER_FAILED","getMultiOrgTemplateIds","orgIds","templateIds","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","LANGUAGE_CHANGED","languageChanged","newLocale","SITETYPE_CHANGED","siteTypeChanged","newSiteType","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","event","images","standard","event_date","ticketsUrl","replaceInUrl","price_ranges","extractPrice","currency","venue","postal_code","city","isSoldOut","properties","sold_out","isCancelled","cancelled","extractEvent","eventListSuccess","eventListFailed","EVENTLIST_REQUEST","EVENTLIST_SUCCESS","EVENTLIST_FAILED","getEvent","selectedEvent","selectedEventChanged","ratio","width","SELECTED_EVENT_CHANGED","including_ticket_fees","min","initGoogleTracking","tagManagerArgs","TagManager","initialize","handleMovieAndShowtime","list","className","history","replaceState","movieListActions","checkAndLoadCustomStyles","umbracoOverrides","rel","getElementsByTagName","appendChild","styleOverrides","activated","deleted","clubCardLogin","clubCardLoginRequest","clubCardLoginSuccess","orderActions","clubCardLoginFailed","CLUBCARD_LOGIN_REQUEST","CLUBCARD_LOGIN_SUCCESS","CLUBCARD_LOGIN_FAILED","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","gaTrackPurchase","availableExtras","gaTrackReservation","eventAsDataLayer","gaDeleteReservation","combineReducers","action","lastRequested","lastUpdated","isInitialRequest","initialRequest","clubCardPoints","dataWasUpdated","checkoutComplete","lastFailed","lastSucceeded","cms","initialDate","initialMonth","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","Poster","showFullScreenPoster","toggleFullScreen","setState","threeDBanner","atmosBanner","ageCensor","icon","ageBanner","src","poster","fullScreenPoster","onClick","posterClasses","React","Component","connect","ownProps","AllFutureMoviesListItem","movieClicked","target","preventDefault","currentTarget","tagName","classList","showAsBase","movieNameLocale","names","LOCALE","validShowtimes","AllFutureMoviesList","setTimeout","titles","querySelectorAll","tallestTitle","take","drop","titleHeight","style","sortedMovies","sortMovies","movieItems","removeFromList","movieBaseId","baseId","datetime","isInFuture","isToday","movieListItems","generateMovieListItems","AllFutureMoviesListContainer","actions","scrollTo","pageHeader","dangerouslySetInnerHTML","__html","listConfig","moviesBases","moviesAsBase","baseMovie","alreadyInList","extractMoviesAsBases","bindActionCreators","assign","LanguagePicker","DayNavigator","nextDay","previousDay","nextDateTime","previousDateTime","toggleCalendar","showCalendar","previousDate","nextDate","dateDisplay","capitalize","pickDate","weekdays","weekdaysShort","months","sortByAlphabet","sortByTime","goToAllMovies","tomorrow","WeekDayPicker","maxDays","isAllMovies","weekDays","short","outerWidth","weekDay","add","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","backProgram","backAll","backFuture","backAllFuture","originalTitle","premiere","age","MovieInfo","addClass","descriptionLocale","descriptions","substring","isDefault","ShowtimeType","includeName","index","findIndex","showType","Showtime","countDownFrom","checkForTimerScenarios","hidden","opensAt","minutes","seconds","showtimeClicked","setShowTimer","buyEnabled","buyInfo","buyStart","reserveEnabled","reserveInfo","reserveStart","isNotDefault","setCountDown","diff","countDown","setInterval","duration","asMinutes","clearInterval","clearTimeout","timer","isInsidePeriod","stopPropagation","canReserveNow","canBuyNow","countdown","generateCountdown","data-date-time","data-organizer-id","ShowtimeTypeList","ProgramListItem","showMovieInfo","prevProps","prevState","toggleMovieInfo","movieBaseShowName","generateShowtimesOnDate","data-toggle-movie-info","data-movie-id","showTitle","ProgramList","manipulateTitles","isOnDate","MonthNavigator","nextMonth","previousMonth","monthsWithShowtimes","monthDisplay","stickNavToTop","shortMonth","monthsShort","SpecialEventsListItem","generateShowtimesInMonth","SpecialEventsList","isInMonth","SpecialEventsContainer","orderUrl","open","union","scrollPosition","ProgramContainer","specialMoviesEnabledOnProgram","dateForHeader","extractHeaderDate","Program_AllFutureMovies","ProgramListContainer","Multibio_MovieListItem","maxDateCount","showtimesPerOrganizer","showtimesByDate","groupBy","showtimesPerDate","generateShowtimesPerDate","moreButton","keys","forOwn","dateKey","generateShowtimesPerOrganizer","Multibio_MovieList","showtimesByOrgId","Multibio_ProgramContainer","Multibio_AllContainer","Multibio_FutureMoviesListItem","availableInOrganizers","orgId","Multibio_FutureMoviesList","Multibio_FutureMoviesContainer","AllMoviesListItem","ref","titleRef","AllMovieList","removeToday","formattedDate","removed","AllMoviesListContainer","removetoday","FutureMoviesListItem","FutureMoviesList","FutureMovieListContainer","including","back","MovieListItem","eventClicked","eventId","showtimeText","getShowtimeText","TicketMasterListContainer","eventItems","eventListItems","generateEventListItems","TicketMasterEventContainer","navBack","soldOutOrCancelled","getSoldOutOrCancelledText","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","org","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","bioDkInfo","Vouchers","showToolTip","handleChange","handleSubmit","toggleToolTip","isLetterOrNumber","isKeyStrokeValid","input","every","startValid","lengthValid","isValidConstraints","updatedVouchers","voucherCodes","uniq","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","show","close","canClose","buttons","OrderContainer","canReserveSelected","canBuySelected","navNext","checkAndUpdateReserveAndBuy","existingTicket","remove","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","gdprText","rememberMeCheckbox","circusTextBoxes","generateCircusInputs","defaultChecked","CustomerContainer","goBack","customerIsValid","orderid","nameIsValid","phoneIsValid","emailIsValid","passwordIsValid","zipCodeIsValid","nextButton","customerActions","DibsContainer","sessionState","querystrings","cancel","dibsform","sessionStorage","transact","inputs","generateInputs","form","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","reload","showNavButtons","generateReceipt","navButtons","receiptActions","loading","notFound","unspecified","16","17","29","30","35","40","46","472","474","999","10001","Error","isInWindow","closeButton","Login","resetPassword","focus","onSubmit","ClubCardContainer","showLoginOverlay","toggleLoginOverlay","submitLogin","availableClubCard","pointsLeft","loginTopBar","loginOverlay","userActions","quantityChanged","checkMaxQuantity","maxQuantity","ExtraPurchaseItem","ExtraPurchaseList","selectedClubCardPoints","selectedExtraPurchases","selectedExtra","generateExtraItems","ExtraPurchaseContainer","extraPurchaseQuantityChanged","extraPurchase","existingExtraPurchase","extraPurchaseList","VoucherDisplay","removeActiveVoucher","updatedActiveVouchers","showWithDecimals","validVouchers","giftcard","ticketItems","coupon","couponItems","generateVouchers","VoucherErrors","yourTickets","instructions","BioKlubDkContainer","yourOrder","giftCard","SummaryLocale","GiftCardContainer","ticketPriceAsText","feesAsText","extrasPriceAsText","totalPriceAsText","paymentMethod","creditCardForeign","errorCreditCard","errorBack","CreditCardOption","isChecked","international","Payment","creditCards","giftCardPaymentClicked","creditCardOptions","generateOptions","creditCardError","PaymentContainer","disableBack","paymentIsValid","payment","PriceInfo","showPriceInfo","extraPurchasePrice","showFees","SelectedTickets","seperator","extractSelectedTickets","Summary","togglePriceInfo","includeExtras","OrderFlowContainer","hasTimedOut","errorOverlay","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","TransactionList","toggleReceipt","trans","TransactionReceipt","purchaseReceipt","fadeIn","TransactionsContainer","showReceipt","noEntries","login","invalidInput","subscribed","unsubscribed","Newsletter","triggerEffect","onAnimationEnd","NewslettersContainer","App","ticketMasterAllEventsRoute","ticketMasterEventRoute","multiAllMoviesRoute","exact","multiProgramRoute","multiFutureMoviesRoute","program_AllFutureMoviesRoute","allMoviesRoute","allFutureMoviesRoute","programRoute","speicalMoviesRoute","futureMoviesRoute","FutureMoviesListContainer","circusRoute","movieRoute","orderFlowRoute","reservationRoute","commercialsRoute","userTransactionsRoute","userNewslettersRoute","notFoundRoute","render","isFecthing","NotFound","initializeApp","mode","iframeid","checkIfAppHeightChanged","multiMovieRoute","debug","onLoad","beforeDibsState","persistedCustomer","persistedState","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","compose","store","createStore","rootReducer","applyMiddleware","thunk","getElementById","rid","reservationid","reservationPath","pathToRegexp","exec","cardId","sendLogSms","checkNumber","sum","floor","checkForReservationId","initAsReservationOnly","lang","moviePath","orderFlowPath","setIdsFromUrl","isMultipleOrgs","sitetype","newwin","promoterid","initTicketmaster","templateid","venueIds","ticketMasterActions","eventIdPath","initWith"],"mappings":"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","file":"static/js/main.6efce5ae.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 'devwebsite.tickets.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\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://devwebsite.tickets.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\n\r\n// GET FUTURE MOVIES \r\nexport default function fetchItems(templateId) {\r\n if (!templateId) templateId = -1; //fallback\r\n\r\n return fetch(API_CONSTANTS.baseUrl + API_CONSTANTS.exportPath + '/GetItems?nTemplateNo=' + templateId +\r\n '&REMOTE_HOST=127.0.0.2', {\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))\r\n}\r\n\r\nfunction extractItems(xml) {\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) {\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 ? movie.actors.item : null,\r\n directors: movie.directors ? 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}","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\r\n altAllMovies: config.organizer._specialAllMovies ? {\r\n enabled: true,\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 } : DEFAULT.altAllMovies,\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: 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: 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 \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 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 });\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}","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}","export const ROUTES = {\r\n TICKETMASTER_ALL_EVENTS: '/ticketmaster-alle-events',\r\n TICKETMASTER_EVENT: '/ticketmaster-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 RECEIPT: '/kvittering',\r\n RESERVATION: '/reservation',\r\n },\r\n\r\n NOT_FOUND: '/findes-ikke'\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 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 { startOrder } from './order-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(templateId) {\r\n return dispatch => {\r\n const isMultipleTemplates = _.includes(templateId, ',');\r\n const templates = isMultipleTemplates ? _.split(templateId, ',') : templateId;\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 dispatch(futureMoviesSuccess(merged));\r\n }, error => dispatch(futureMoviesFailed(error)));\r\n } else {\r\n dispatch(futureMoviesRequest(templateId))\r\n return fetchItems(templateId).then(items => dispatch(futureMoviesSuccess(items)),\r\n 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(() => dispatch(selectedShowtimeChanged(newShowtime)))\r\n .then(() => resolve(dispatch(startOrder(newShowtime.id))));\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}","import _ from 'lodash'\r\nimport { getFutureMovies } from './movielist-actions'\r\nimport { fetchOrganizer } from '../api/ticketgate-api'\r\n\r\nexport default {\r\n getOrganizer,\r\n getMultiOrgTemplateIds\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(id, siteType, customerEmail) {\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 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 getMultiOrgTemplateIds(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));\r\n });\r\n }\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 },\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) => { ticketgateNewsletters += `${letter.id}_${letter.checked ? 1 : 0},`; });\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, phone, name, password, email, creditCardCode) {\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, phone, name, password, email, creditCardCode)\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 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 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 (selectedEvent) {\r\n selectedEvent.description = event.description;\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 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, getMultiOrgTemplateIds } from './organizer-actions'\r\nimport * as movieListActions from './movielist-actions'\r\nimport * as ticketMasterActions from './ticketmaster-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\nconst error = { error: true, message: 'Siden kunne ikke initialiseres, tjek at adressen er korrekt og at du har adgang til denne side.' };\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 // 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 }\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));\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 organizerId = queryParameters.org || queryParameters.organizer || API_CONSTANTS.organizerUrls[window.location.host];\r\n const { movieId, showtimeId } = setIdsFromUrl(queryParameters.movie, queryParameters.showtime);\r\n return (dispatch, getState) => {\r\n const customerEmail = getState().customer.email;\r\n const isMultipleOrgs = _.includes(organizerId, ',');\r\n const siteType = queryParameters.sitetype;\r\n\r\n return dispatch(getOrganizer(isMultipleOrgs ? _.split(organizerId, ',')[0] : organizerId, 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);\r\n initGoogleTracking(organizer);\r\n if (queryParameters.newwin) organizer.configuration.openOrderInNewWindow = queryParameters.newwin === 'true';\r\n\r\n if (isMultipleOrgs) {\r\n dispatch(getMultiOrgTemplateIds(organizerId));\r\n return dispatch(movieListActions.getMovieList(organizerId)).then((movielist) => dispatch(handleMovieAndShowtime(movielist, movieId, showtimeId, organizerId, ROUTES.MULTI_PROGRAM)));\r\n }\r\n else {\r\n //For old drupal sites..REMOVE as soon as drupal sites are dead\r\n if (!movieId && showtimeId) {\r\n organizer.configuration.appMode = APP_MODES.ORDERFLOW;\r\n }\r\n //-----\r\n\r\n const appMode = organizer.configuration.appMode;\r\n const debug = `DEBUG: Current organizer: ${organizer.id}. Current app mode: ${appMode}`;\r\n\r\n switch (appMode) {\r\n case APP_MODES.PROGRAM:\r\n if (queryParameters.promoterid) return dispatch(initTicketmaster(queryParameters.promoterid));\r\n else if (_.includes(window.location.pathname, 'ticketmaster')) return dispatch(initTicketmaster(organizer.configuration.ticketmaster.promoterCodes));\r\n else {\r\n dispatch(movieListActions.getMovieList(organizerId)).then((movielist) => dispatch(handleMovieAndShowtime(movielist, movieId, showtimeId, organizerId)));\r\n return dispatch(movieListActions.getFutureMovies(queryParameters.templateid || organizer.futureTemplateId)).then((futureMovies) => dispatch(handleMovieAndShowtime(futureMovies, movieId, showtimeId, organizerId)));\r\n }\r\n case APP_MODES.MOVIE:\r\n case APP_MODES.ORDERFLOW:\r\n return dispatch(movieListActions.getMovieList(organizerId)).then((movielist) => dispatch(handleMovieAndShowtime(movielist, movieId, showtimeId, organizerId)));\r\n default:\r\n return { ...error, debug };\r\n }\r\n }\r\n });\r\n }\r\n\r\n function initTicketmaster(venueIds) {\r\n return (dispatch) => {\r\n return dispatch(ticketMasterActions.getEventList(venueIds)).then((events) => {\r\n const eventIdPath = pathToRegexp(`${ROUTES.TICKETMASTER_EVENT}/:eventId`).exec(window.location.pathname);\r\n if (eventIdPath) {\r\n const eventId = eventIdPath[1];\r\n return dispatch(ticketMasterActions.getEvent(eventId));\r\n } else return events;\r\n });\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 setIdsFromUrl(movieId = 0, showtimeId = 0) {\r\n let page = 0;\r\n const moviePath = pathToRegexp(`${ROUTES.MOVIE}/:movieId`).exec(window.location.pathname);\r\n const orderFlowPath = pathToRegexp('/:page/:movieId/:showtimeId').exec(window.location.pathname);\r\n\r\n if (moviePath) movieId = moviePath[1];\r\n else if (orderFlowPath) {\r\n page = orderFlowPath[1]\r\n movieId = orderFlowPath[2];\r\n showtimeId = orderFlowPath[3];\r\n }\r\n\r\n return { movieId, showtimeId };\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 handleMovieAndShowtime(list, movieId, showtimeId, organizerId, backTo) {\r\n return (dispatch) => {\r\n const showtime = list.showtimes ? _.find(list.showtimes, (showtime) => { return showtime.id == showtimeId }) : null;\r\n\r\n //For old drupal sites..REMOVE as soon as drupal sites are dead\r\n let movie = (list.movies ? _.find(list.movies, (movie) => { return movie.id == movieId }) : null) ||\r\n (list.futureMovies ? _.find(list.futureMovies, (movie) => { return movie.id == movieId }) : null);\r\n\r\n if (!movie && showtime) {\r\n document.body.className = \"drupal\";\r\n window.history.replaceState(null, null, `${ROUTES.ORDERFLOW.TICKETS}/${showtime.movieId}/${showtime.id}?org=${organizerId}`);\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 if (movieId && !showtime) return dispatch(movieListActions.selectedMovieChanged(movieId, backTo));\r\n else if (movieId && showtime) {\r\n return dispatch(movieListActions.selectedMovieChanged(movieId))\r\n .then(() => dispatch(movieListActions.selectedShowtimeChanged(showtime)))\r\n .then(() => dispatch(startOrder(showtime.id)));\r\n }\r\n else return list;\r\n }\r\n}\r\n\r\nfunction checkAndLoadCustomStyles(organizer, siteType) {\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}","import API_CONSTANTS from '../api/api-constants'\r\nimport {\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\nimport initializeApp from '../actions/index-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 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\r\n if (!result.error) {\r\n dispatch(clubCardLoginSuccess(result.clubCardId))\r\n dispatch(customerChanged(result.customer))\r\n dispatch(creditCardChanged(result.creditCard));\r\n\r\n return dispatch(orderActions.getAvailableTicketsAndExtraPurchases(showtimeId, result.clubCardId))\r\n .then(() => dispatch(orderActions.calculatePoints()));\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: 'Prøv igen senere.'\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 //TODO populate the other things needed for receipt view\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 { 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\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})","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 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} 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 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 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: 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 {\r\n da: {\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 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 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}","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 _ from 'lodash'\r\nimport moment from 'moment'\r\nimport LOCALE from '../MovieListLocale'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport Poster from '../../movie/Poster'\r\n\r\nexport default class AllFutureMoviesListItem 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 render() {\r\n const { movie, rowClasses, appLocale, showAsBase, organizerIds } = 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

{showAsBase ? movie.name : movieNameLocale}

\r\n
\r\n
\r\n
{LOCALE[appLocale].shownFrom} {moment(movie.validShowtimes[0].dateTime).format('DD/MM')}
\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 CONSTANTS from '../movielist-constants'\r\nimport LOCALE from '../MovieListLocale'\r\nimport { setItemClasses } from '../shared'\r\nimport AllFutureMoviesListItem from './AllFutureMoviesListItem'\r\n\r\nexport default class AllFutureMoviesList extends React.Component {\r\n componentDidMount() {\r\n // Hack to handle the unknown

height and align Showtimes for matrix layouts...\r\n const { columns } = this.props;\r\n if (columns != CONSTANTS.columns.one) {\r\n // Timeout hack: wait for the DOM to load h1 font so we get correct height...\r\n setTimeout(() => {\r\n const titles = window.document.querySelectorAll('h1');\r\n\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) tallestTitle = titleHeight;\r\n });\r\n\r\n row.forEach((title) => title.style.height = tallestTitle + \"px\");\r\n counter += columns;\r\n }\r\n }, 200);\r\n //---\r\n }\r\n }\r\n\r\n generateMovieListItems(movies) {\r\n const { posterBanners, movieClicked, columns, organizerIds, appLocale } = 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 } = 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 isInFuture = datetime > moment();\r\n\r\n const formattedDate = datetime.format('YYYY-MM-DD');\r\n const isToday = formattedDate === selectedDate;\r\n if (isToday) 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 && 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 { selectedMovieChanged } from '../../../actions/movielist-actions'\r\nimport AllFutureMoviesList from './AllFutureMoviesList'\r\nimport { setContainerClasses } from '../shared'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\n\r\nclass AllFutureMoviesListContainer 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, 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 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 render() {\r\n const { appLocale, pageHeader, movies, showAsBase, showtimes, posterBanners, columns, organizerIds, sortBy, selectedDate } = this.props;\r\n const header = pageHeader ?
: null;\r\n let classes = setContainerClasses(CONSTANTS.listTypes.allFuture, columns);\r\n\r\n return (\r\n
\r\n
{header}
\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\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.allFutureMovies;\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,\r\n pageHeader,\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 selectedDate: state.movielist.selectedDate,\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({}, { selectedMovieChanged, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(AllFutureMoviesListContainer)","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 [d.] 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))","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 },\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 }\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 ?

') }} /> : 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 ?

{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\r\n return (\r\n
\r\n {originalTitle}\r\n {info}\r\n {premiere}\r\n {length}\r\n {age}\r\n {genre}\r\n {description}\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 _ 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\nexport default class 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 } = 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 if (countdown == null) countdown = !showExpired && !isInFuture ?
Lukket
: null;\r\n let classes = isInFuture && !countdown ? 'Showtime' : 'Showtime disabled';\r\n\r\n const type = showtime.type ? : null;\r\n if (type || countdown) classes += ' double';\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}","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 {_.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 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 } = 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 {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 componentDidMount() {\r\n this.manipulateTitles()\r\n }\r\n\r\n componentDidUpdate(prevProps) {\r\n if (prevProps.selectedDate != this.props.selectedDate)\r\n this.manipulateTitles()\r\n }\r\n\r\n // Hack to handle the unknown

height and align Showtimes for matrix layouts...\r\n manipulateTitles() {\r\n const { columns } = this.props\r\n if (columns != CONSTANTS.columns.one) {\r\n // Timeout hack: wait for the DOM to load h1 font so we get correct height...\r\n setTimeout(() => {\r\n const titles = window.document.querySelectorAll('h1')\r\n\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 }, 200)\r\n //---\r\n }\r\n }\r\n\r\n generateMovieListItems(movies) {\r\n const { posterBanners, appLocale, movieClicked, showtimeClicked, columns, 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\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('ddd [d.] DD/MM [kl.] LT'))}\r\n\r\n \r\n
;\r\n })}\r\n
\r\n }\r\n\r\n render() {\r\n const { movie, rowClasses, appLocale, organizerIds } = 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 {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 componentDidMount() {\r\n // Hack to handle the unknown

height and align Showtimes for matrix layouts...\r\n const { columns } = this.props;\r\n if (columns != CONSTANTS.columns.one) {\r\n // Timeout hack: wait for the DOM to load h1 font so we get correct height...\r\n setTimeout(() => {\r\n const titles = window.document.querySelectorAll('h1');\r\n\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) tallestTitle = titleHeight;\r\n });\r\n\r\n row.forEach((title) => title.style.height = tallestTitle + \"px\");\r\n counter += columns;\r\n }\r\n }, 200);\r\n //---\r\n }\r\n }\r\n\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].noMoviesText}

}\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 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, 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 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 } = 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,\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 }\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 { ROUTES } from '../../navigation/route-constants'\r\nimport CONSTANTS from '../movielist-constants'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\nimport { 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 { 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, 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 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 [d.] 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,\r\n organizers: state.movielist.organizers,\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 }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { selectedMovieChanged, changeDate, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(ProgramContainer)","import React from 'react'\r\nimport AllFutureMoviesListContainer from '../allfuturemovies/AllFutureMoviesListContainer'\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 { 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, 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 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 [d.] 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.movielist.organizerIds,\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({}, { 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 { 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, 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 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.movielist.organizerIds,\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({}, { 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 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, 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 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.movielist.organizerIds,\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({}, { 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 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 } = 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 {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 componentDidMount() {\r\n // Hack to handle the unknown

height and align Showtimes for matrix layouts...\r\n const { columns } = this.props;\r\n if (columns != CONSTANTS.columns.one) {\r\n // Timeout hack: wait for the DOM to load h1 font so we get correct height...\r\n setTimeout(() => {\r\n const titles = window.document.querySelectorAll('h1');\r\n\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) tallestTitle = titleHeight;\r\n });\r\n\r\n row.forEach((title) => title.style.height = tallestTitle + \"px\");\r\n counter += columns;\r\n }\r\n }, 200);\r\n //---\r\n }\r\n }\r\n\r\n generateMovieListItems(movies) {\r\n const { posterBanners, appLocale, movieClicked, showtimeClicked, columns, 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\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 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();\r\n\r\n const formattedDate = datetime.format('YYYY-MM-DD');\r\n const removed = removeToday && formattedDate === selectedDate;\r\n\r\n if (showtime.showInfo.enabled !== true || removed) 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 (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 { selectedMovieChanged, changeSelectedShowtime } from '../../../actions/movielist-actions'\r\nimport AllMoviesList from './AllMoviesList'\r\nimport { 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, 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 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, columns, showLocationOnShowtime, actions, organizerIds, sortBy, selectedDate, removeToday, showExpired } = this.props;\r\n const header = pageHeader ?
: null;\r\n let classes = setContainerClasses(CONSTANTS.listTypes.all, 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 let pageHeader = 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,\r\n pageHeader,\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: getParams().removetoday == \"true\",\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({}, { 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 { 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 } = 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 CONSTANTS from '../movielist-constants'\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 componentDidMount() {\r\n // Hack to handle the unknown

height and align Showtimes for matrix layouts...\r\n const { columns } = this.props;\r\n if (columns != CONSTANTS.columns.one) {\r\n // Timeout hack: wait for the DOM to load h1 font so we get correct height...\r\n setTimeout(() => {\r\n const titles = window.document.querySelectorAll('h1');\r\n\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) tallestTitle = titleHeight;\r\n });\r\n\r\n row.forEach((title) => title.style.height = tallestTitle + \"px\");\r\n counter += columns;\r\n }\r\n }, 200);\r\n //---\r\n }\r\n }\r\n\r\n generateMovieListItems(movies) {\r\n const { posterBanners, appLocale, movieClicked, columns, 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 } = 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 { appHeightChanged } from '../../../actions/app-actions'\r\nimport { 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, 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 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 render() {\r\n const { appLocale, pageHeader, movies, posterBanners, columns, organizerIds} = 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\r\n return {\r\n organizerIds: state.movielist.organizerIds,\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({}, { 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 '../TicketMasterLocale'\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\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 { 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 { 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 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 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({}, { getEvent, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TicketMasterListContainer)","import '../ticketmaster.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 '../TicketMasterLocale'\r\nimport { ROUTES } from '../../navigation/route-constants'\r\nimport { selectedEventChanged } from '../../../actions/ticketmaster-actions'\r\nimport { appHeightChanged } from '../../../actions/app-actions'\r\n\r\nclass TicketMasterEventContainer 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 { 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 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 return {\r\n organizerId: state.organizer.id,\r\n event: state.ticketmaster.selectedEvent,\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({}, { selectedEventChanged, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(TicketMasterEventContainer)","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('dddd [d.] DD/MM [kl.] LT').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('dddd [d.] DD/MM [kl.] LT'))}
\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 { ROUTES } from '../navigation/route-constants'\r\nimport CONSTANTS from '../movielists/movielist-constants'\r\nimport { appHeightChanged } from '../../actions/app-actions'\r\nimport { 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, 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 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 return {\r\n organizerIds: state.movielist.organizerIds,\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({}, { 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.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 } = 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 && 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 } = 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 { APP_MODES } from '../../api/api-constants'\r\nimport LOCALE from './MovieLocale'\r\nimport { ROUTES } from '../navigation/route-constants'\r\nimport { 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, 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 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 } = 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 if (selectedMovie == null || ownProps.match.params.movieId != null && selectedMovie.id != ownProps.match.params.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,\r\n organizers: state.movielist.organizers,\r\n selectedMovie,\r\n configuration: config,\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 }\r\n}\r\n\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { selectedMovieChanged, changeSelectedShowtime, appHeightChanged }), dispatch)\r\n }\r\n}\r\n\r\nexport default connect(mapStateToProps, mapDispatchToProps)(MovieContainer)","export default {\r\n da: {\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 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('dddd [d.] LL [kl.] LT'))}

\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: 'Kuponnummer',\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 bioDkInfo: '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 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 bioDkInfo: 'You can add more voucher numbers when you have typed the first one and clicked submit'\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 } = this.props;\r\n const { value, error, showToolTip } = this.state;\r\n const constraintInfo = type != VOUCHER_TYPES.DISCOUNT ? this.getConstraints() : null;\r\n\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 {type == VOUCHER_TYPES.BIOKLUBDK ? {LOCALE[appLocale].bioDkInfo} : 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 ? 'fade-out' : '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\r\n close() {\r\n const { canClose } = this.props;\r\n if (canClose) this.setState({ show: false });\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 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 fade-out';\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 fade-out';\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 fade-out';\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 if (customer.smsReminder == null) props.actions.smsReminderChanged(props.configuration.smsReminder.checkedByDefault);\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 gdprText = 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 {gdprText}\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.phone, customer.name, customer.password, customer.email, customer.creditCard).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 sessionStorage.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 sessionStorage.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 sessionStorage.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)","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 { startOver, 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 LOCALE from './ReceiptLocale'\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 this.startOver = this.startOver.bind(this);\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 startOver() {\r\n window.location.reload();\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 { showNavButtons, bottomBarAllwaysVisible, appLocale } = this.props;\r\n const receipt = this.generateReceipt();\r\n const navButtons = showNavButtons ?
    \r\n \r\n
    : null;\r\n\r\n return (\r\n
    \r\n {receipt}\r\n {navButtons}\r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n showNavButtons: ownProps.match.params.reservationId == null,\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 bottomBarAllwaysVisible: state.organizer.configuration.bottomBarAllwaysVisible,\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: 'Der er låst for at reservere og købe til dette arrangement.',\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 }\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: 'This showtime is locked for reservation or purchase.',\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 }\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 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\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 buttons = closeButton;\r\n if (error.type == 10001) {\r\n message = LOCALE[appLocale].errors[error.type];\r\n }\r\n break;\r\n case 30:\r\n buttons = this.buttons.startOver;\r\n if (error.type == 32) message = LOCALE[appLocale].errors[error.code];\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}\r\n
    \r\n
    \r\n )\r\n }\r\n}\r\n\r\nconst mapStateToProps = (state, ownProps) => {\r\n return {\r\n show: state.organizer.error != null || state.movielist.error != null || state.order.error != null || state.customer.error != null ||\r\n state.receipt.error != null || state.user.error != null || ownProps.show || false,\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, submit, 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}
    \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 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 });\r\n }\r\n\r\n submitLogin(email, password) {\r\n const { actions } = this.props;\r\n actions.clubCardLogin(email, password)\r\n .then((result) => { !result.error ? this.setState({ showLoginOverlay: false }) : this.setState({ error: 'Ugyldig email eller kode' }) });\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 ?

    {availableClubCard.name}

    \r\n {availableClubCard.loginText}
    : null;\r\n\r\n const loginOverlay = this.state.showLoginOverlay ? : null;\r\n\r\n const user = clubCard ?
    \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
    \r\n

    {extra.name}

    \r\n \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 { appLocale } = this.props;\r\n const extraPurchases = this.generateExtraItems();\r\n\r\n return (\r\n
    \r\n

    {LOCALE[appLocale].extraPurchases}

    \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 } = this.props;\r\n const extraPurchaseList = availableExtraPurchases.length > 0 ?\r\n : null;\r\n\r\n return (\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 }\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 },\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 }\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 },\r\n\r\n en: {\r\n ...OrderFlowLocale.en,\r\n ...SummaryLocale.en,\r\n title: 'Gift Card'\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.phone, customer.name, customer.password, customer.email, customer.creditCard ? customer.creditCard : 'DK').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 giftCard: 'Indløs gavekort ❯',\r\n paymentMethod: 'Vælg betalingsmetode',\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 giftCard: 'Use gift card ❯',\r\n paymentMethod: 'Choose payment method',\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\nimport LOCALE from './PaymentLocale'\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, appLocale, giftCardsEnabled, giftCardPaymentClicked } = 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
    {giftCardsEnabled ? : null}
    \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 Payment from './Payment'\r\nimport LOCALE from './PaymentLocale'\r\n\r\nclass PaymentContainer extends React.Component {\r\n constructor(props) {\r\n super(props);\r\n sessionStorage.removeItem('beforeDibsState')\r\n this.state = {\r\n errors: {\r\n creditCard: '',\r\n disableBack: ''\r\n },\r\n }\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.goBack();\r\n }\r\n\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.phone, customer.name, customer.password, customer.email, customer.creditCard ? customer.creditCard : 'DK').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 render() {\r\n const { orderType, totalPrice, creditCards, configuration, customer, actions, appLocale, disableBack, giftCardAmount } = this.props;\r\n const { errors } = this.state;\r\n\r\n const payment = totalPrice > 0 && (orderType === CONSTANTS.orderTypes.buy || orderType === CONSTANTS.orderTypes.buyReservation) ?\r\n : null;\r\n\r\n return (\r\n
    \r\n
    \r\n

    {LOCALE[appLocale].paymentMethod}

    \r\n {payment}\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 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 * as orderActions from '../../actions/order-actions'\r\nimport { getMovieList } 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 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, 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 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 errorOverlay = error ? : null;\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 {errorOverlay}\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 organizer: state.organizer,\r\n movie: state.movielist.selectedMovie || {},\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 error: state.order.error || state.customer.error || state.receipt.error || null,\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 iframeId: state.app.iframeId\r\n }\r\n}\r\n\r\nconst mapDispatchToProps = (dispatch) => {\r\n return {\r\n actions: bindActionCreators(Object.assign({}, { getMovieList, appHeightChanged }, 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.movielist.isFetching || state.order.isFetching ||\r\n state.customer.isFetching || state.receipt.isFetching || state.user.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 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 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('ddd [d.] DD/MM [kl.] LT'))}, {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 } 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 AllFutureMoviesListContainer from './movielists/allfuturemovies/AllFutureMoviesListContainer'\r\nimport FutureMoviesListContainer from './movielists/futuremovies/FutureMoviesListContainer'\r\nimport SpecialEventsContainer from './movielists/specialevents/SpecialEventsContainer'\r\n\r\nimport TicketMasterListContainer from './ticketmaster/list/TicketMasterListContainer'\r\nimport TicketMasterEventContainer from './ticketmaster/details/TicketMasterEventContainer'\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\r\n multiAllMoviesRoute = ;\r\n multiProgramRoute = ;\r\n multiFutureMoviesRoute = ;\r\n\r\n program_AllFutureMoviesRoute = ;\r\n\r\n allMoviesRoute = ;\r\n allFutureMoviesRoute = ;\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\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.allFutureMoviesRoute}\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 }), dispatch)\r\n }\r\n}\r\n\r\nexport default withRouter(connect(mapStateToProps, mapDispatchToProps)(App))","//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 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(sessionStorage.getItem('beforeDibsState'));\r\nif (beforeDibsState) logTrace('index.js - STARTUP AFTER DIBS', ` transactionId: ${beforeDibsState.order.selected.transactionId}`);\r\n\r\nconst persistedCustomer = localStorageUtils.getItem('customer') || null;\r\nconst persistedState = beforeDibsState ? beforeDibsState : persistedCustomer ? { customer: persistedCustomer } : undefined;\r\nsessionStorage.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":""}