{"version":3,"sources":["webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/DatePickerFilterMobile.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/rows/SpeechAverageScore.js","webpack://fxsWidgets/../src/js/widgets/calendar/constants/gtmIds.js","webpack://fxsWidgets/../src/js/widgets/calendar-common/constants/dateOptions.js","webpack://fxsWidgets/../src/js/widgets/calendar-common/helpers/calendar.js","webpack://fxsWidgets/../node_modules/copy-webpack-plugin/dist/utils/promisify.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/advanced/AdvancedCountryFilterMobile.js","webpack://fxsWidgets/../src/js/widgets/calendar/constants/settings.js","webpack://fxsWidgets/../src/js/widgets/calendar-common/components/CalendarPosts.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/common/TimeFilter.js","webpack://fxsWidgets/../src/js/widgets/calendar/store.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/EventListHeaderMobile.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/rows/PeriodRow.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/rows/EventRowDataMobile.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/rows/EventRowData.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/EventList.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/modal/ModalLegend.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/CalendarContainer.js","webpack://fxsWidgets/../src/js/widgets/calendar/index.js","webpack://fxsWidgets/../src/js/widgets/calendar/helpers/viewHelper.js","webpack://fxsWidgets/../src/js/widgets/calendar/constants/categoryFilterOptions.js","webpack://fxsWidgets/../src/js/widgets/calendar/constants/periodTypeValues.js","webpack://fxsWidgets/../src/js/widgets/calendar/helpers/eventTimeCheck.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/advanced/AdvancedFilterTopDesktop.js","webpack://fxsWidgets/../src/js/widgets/calendar-common/constants/relatedNewsView.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/advanced/AdvancedCategoryFilterDesktop.js","webpack://fxsWidgets/../src/js/widgets/calendar/helpers/render.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/rows/EventRowDataDesktop.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/modal/DetailModal.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/EventListHeaderDesktop.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/DesktopFilter.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/modal/BlockedPopup.js","webpack://fxsWidgets/../src/js/widgets/calendar-common/helpers/oneSignalHelper.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/rows/SpeechScore.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/common/DownloadFilter.js","webpack://fxsWidgets/../src/js/widgets/calendar/helpers/string.js","webpack://fxsWidgets/../src/js/widgets/common/asyncComponents/DatePicker/index.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/rows/EventRowDetailDesktop.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/advanced/AdvancedCategoryFilterMobile.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/MobileFilter.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/EventListFilter.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/rows/EventTime.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/localizationActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/rows/EventRowDetailMobile.js","webpack://fxsWidgets/../src/js/widgets/calendar/helpers/formatDate.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/mappers.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/eventDatesActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/postActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/eventDateDetailsActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/pushActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/modalActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/helpers/filter/prepare.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/filterActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/settingsActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/eventNotifyActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/notificationsActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/constants/timeZonesValues.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/timeZoneActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/calendarSettingsActions.js","webpack://fxsWidgets/../src/js/widgets/calendar/actions/index.js","webpack://fxsWidgets/../src/js/widgets/calendar/helpers/urlFactory.js","webpack://fxsWidgets/../src/js/widgets/calendar/constants/speechScore.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/advanced/AdvancedTimeFilter.js","webpack://fxsWidgets/../src/js/widgets/calendar/helpers/deviation.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/modal/EventDetailModal.js","webpack://fxsWidgets/../src/js/widgets/calendar/constants/timeFormatOptions.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/common/TimezonePicker.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/advanced/AdvancedFilter.js","webpack://fxsWidgets/../src/js/widgets/calendar-common/helpers/periodTypeHelper.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/DatePickerFilterDesktop.js","webpack://fxsWidgets/../src/js/widgets/calendar/constants/countryFilterOptions.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/modal/SpeechTrackerModal.js","webpack://fxsWidgets/../src/js/widgets/calendar/constants/volatilityFilterOptions.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/advanced/AdvancedCountryFilterDesktop.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/filters/advanced/AdvancedFilterTopMobile.js","webpack://fxsWidgets/../src/js/widgets/calendar/helpers/getSpeechScore.js","webpack://fxsWidgets/../src/js/widgets/calendar/components/modal/EventNotifyModal.js"],"names":["DATEPICKER_CONTAINER_ID","DatePickerFilterMobile","_Component","props","_this","_callSuper","state","datePicker","togglePicker","bind","resetDatePicker","onApply","changeRangeOption","renderButton","renderDateTitle","renderModal","scrollTabs","_inherits","key","value","_togglePicker","_asyncToGenerator","this","picker","getAdvancedDatePicker","setState","apply","arguments","undefined","dateRange","from","to","applyFilter","_changeRangeOption","onTimeFilterChanged","_x","_onDateRangeFilterChanged","onDateRangeFilterChanged","_x2","id","element","document","getElementById","newPosition","offsetLeft","scrollLeft","getDateRange","config","culture","getContentGtmId","getContentGa4Id","getGa4Name","showHighlighted","time","translate","_this2","h","type","class","onClick","then","onChangeCustomFilter","_this3","onMouseLeave","closePicker","disabled","TIME_FILTERS_VALUES","RecentNext","Today","Tomorrow","Yesterday","ThisWeek","ThisMonth","NextWeek","NextMonth","PreviousWeek","PreviousMonth","Custom","default","className","applyLabel","locale","_ref","_ref2","_this4","getButtonGtmId","getButtonGa4Id","concat","IconCalendar","IconCaretDown","DetailModal","handleClose","body","componentDidMountAction","Component","connectWithTranslations","actions","speechScore","_ref$includeLabel","includeLabel","isNaN","averageScore","translatedAverageScoreLabel","cssClass","ScoreClasses","averageScoreLevel","averageScoreLabel","SpeechScoreName","formattedAverageScore","parseFloat","toFixed","Fragment","GTM_ID","OPEN_GRAPH","eventDateId","OPEN_LINK_TEXT","ADD_EVENT","OPEN_DASHBOARD","OPEN_SOURCE","OPEN_OVERVIEW","CLOSE_OVERVIEW","OPEN_RELATEDNEWS","OPEN_READFULLREPORT","FILTER_TIME_BUTTON","timeRange","toLowerCase","FILTER_TIME_DROPDOWN","FILTER_TIME_DROPDOWN_OPTION","period","FILTER_CALENDAR_BUTTON","FILTER_CALENDAR_CONTENT","FILTER_IMPACT_DROPDOWN","FILTER_IMPACT_DROPDOWN_OPTION","impact","FILTER_COUNTRY_DROPDOWN","FILTER_COUNTRY_DROPDOWN_OPTION","country","FILTER_CATEGORY_DROPDOWN","FILTER_CATEGORY_DROPDOWN_OPTION","category","FILTER_MY_FILTERS","FILTER_DEFAULTS","FILTER_ADVANCED","MOBILE_FILTER_OPEN","MOBILE_FILTER_CLOSE","ADVANCED_FILTERS_TIME_BUTTON","ADVANCED_FILTERS_TIME_DROPDOWN","ADVANCED_FILTERS_TIME_DROPDOWN_OPTION","ADVANCED_FILTERS_CALENDAR_BUTTON","ADVANCED_FILTERS_CALENDAR_CONTENT","ADVANCED_FILTERS_IMPACT_CHECKBOX","ADVANCED_FILTERS_EVENT_NAME","ADVANCED_FILTERS_COUNTRY_CHECKBOX","ADVANCED_FILTERS_CATEGORY_CHECKBOX","ADVANCED_FILTERS_SAVE_SETTINGS","ADVANCED_FILTERS_APPLY","ADVANCED_FILTERS_CANCEL","TIMEZONE_DROPDOWN","TIMEZONE_DROPDOWN_OPTION","timezone","TIMEZONE_TIMEFORMAT_24H","TIMEZONE_TIMEFORMAT_AMPM","DOWNLOAD","ICSDOWNLOAD","CSVDOWNLOAD","NOTIFICATIONS","NOTIFY_ME_SUBSCRIPTION","NOTIFY_ME_UNSUBSCRIPTION","CONFIGURATION_HELP","DATEPIKER_TIMESELECTOR_BUTTON","DATEPIKER_OPTION","DATEPIKER_APPLY","DATEPIKER_MONTH_SELECTOR","DATEPIKER_YEAR_SELECTOR","DATEPIKER_DAY_SELECTOR","CONFIGURATION_GEAR","CONFIGURATION_MANAGE_EVENT_LIST","HEADER_BASIC_VIEW","HEADER_DEFAULT_VIEW","HEADER_PREMIUM_VIEW","GA4EVENT","NAMES","FEATURES_CALENDAR","ELEMENTS","DATE_OPTIONS","weekday","year","month","day","enabledCalendarNotifications","Boolean","notificationsHelper","oneSignalAppId","downloadCalendar","url","format","fetch","headers","response","Promise","resolve","blob","filename","getAttachmentFileName","window","URL","createObjectURL","Blob","link","createElement","href","setAttribute","appendChild","click","parentNode","removeChild","catch","err","console","error","disposition","get","indexOf","matches","exec","replace","Object","defineProperty","exports","stat","inputFileSystem","path","reject","stats","readFile","CountryCheckboxValue","code","text","style","title","AdvancedCountryFilterMobile","_defineProperty","filtered","translatedCountries","filter","x","name","filteredCountries","map","e","isComposing","keyCode","searchCountries","target","isPickerOpen","selected","applyNewSelectedCountries","countries","getKeysOfNotNullValues","COUNTRY_FILTER_OPTIONS","majorCountries","getMajorCountries","minorCountries","getMinorCountries","selectedCountries","nextProps","includes","newSelected","filteredCountriesCodes","forEach","push","onChange","_ref3","actualMajorCountries","actualMinorCountries","length","majorSelected","getSelected","minorSelected","onKeyUp","filterCountry","placeholder","autocomplete","tracking","onChangeCountriesSelected","getValues","CheckboxPicker","values","checkedValues","renderTitle","renderValue","getOptionGtmId","getOptionGA4Id","getOptionGa4ThirdTrackingId","labelClass","others","result","SETTING_KEYS","Settings","INITIAL_SETTING","timezoneOffset","notificationSoundOn","actualFilterType","FILTER_TYPE","view","CALENDAR_VIEW","Configure_View_Default","volatilities","VOLATILITY_FILTER_OPTIONS","categories","CATEGORY_FILTER_OPTIONS","BASIC_SETTINGS","basic","Configure_View_Basic","Volatility_Medium","Volatility_High","getBasicCountries","INITIAL_EMPTY_SETTING","custom","CalendarPosts","wrapperClass","RelatedNewsTranslation","RELATED_NEWS_VIEW","View_Grid","renderItemFetching","View_Half","View_Mobile","ErrorTranslation","IconFileSearch","item","ByAuthorTranslation","dateNow","customClassnameDict","customPostUrl","Id","Image","Url_Small","src","Url","Title","Author","Name","pubdate","datetime","AdaptativeDate","currentDate","PublicationDate","posts","Date","now","renderItem","children","fetchError","isFetching","renderViewWrapper","renderFetching","renderError","renderNews","TimeFilter","onTimezoneChanged","renderOption","onOptionSelected","timezones","changeTimezoneAndFetch","settings","getSetting","defaultSettings","OffsetValue","persistSettings","_objectSpread","option","selectedOption","isOpen","upButton","downButton","_ref$showDatePicker","showDatePicker","getCalendarTimeOptionGtmId","getCalendarTimeOptionGa4Id","getCalendarButtonGtmId","getCalendarButtonGa4Id","buttonsValues","isMobileOnly","buttonValues","TimezonePicker","currentTimezone","DatePickerFilterDesktop","setSettings","isDefaultSettings","countryCode","INITIAL_STATE","calendarApiUrl","CALENDAR_API_URL","calendarApiVersion","oneSignalUrl","oneSignalDoc","dashboardUrl","notificationSoundUrl","tradeNowUrl","tradeNowRange","tradeNowFnc","getSpeechScoreFnc","isLocked","initOneSignal","safariWebId","timezoneHelper","settingsOpenCloseEventName","subscriptionChangedEventName","calendarUpdateClockEventName","maxMonths","fromYear","hasPremium","premiumUrl","hasPosts","enableSpeechScore","postApiUrl","POST_API_URL","filterType","productFeature","page","take","sendDataFnc","eventDates","eventDetails","eventDateDetails","eventNotifications","notificationsSupported","eventDateDetailShown","eventDateDetailMinimalShown","eventDateMenuShown","eventNotifyShown","eventDatesFetchError","translations","showConnectionError","basicSettings","showAdvancedFilter","showMobileFilter","pushConnectionStartDateUtc","showModalLegend","currentTime","automaticallyTimeZone","timeFormat","TIME_FORMAT_OPTIONS","TwentyFourHours","showSuccessMessage","relatedNews","hasDefautTimezones","showBlockedPopup","convertCountryCode","input","split","convertCulture","keys","settingsMapper","_state$config","isLockedFnc","setSpeechScoreSettings","resultState","storageSettings","EventListHeaderMobile","PeriodRow","date","colspan","FormattedDate","EventRowDataMobile","_classCallCheck","isPastEvent","isPast","event","eventdate","dangerouslySetInnerHTML","__html","ex","log","isSpeech","isReport","isInProgress","labelText","IconLocked","SpeechScore","forceUpperCase","hideScoreNumber","_speech$score","_speech$averageScore","showDetailsClick","renderName","isSubscribed","subscribeToEvent","unsubscribeToEvent","currencyCode","speech","isPreliminary","actual","volatility","potency","unit","isBetterThanExpected","eventId","hasScore","score","hasAverageScore","isSpeechScoreEnabled","isScoreTrackable","eventTimeReached","prefix","percentage","isOneColumn","isAllDay","showEventTime","isTentative","getSpeechScore","EventTime","onEventHappened","hasActual","renderTradeNow","renderOneColumnData","getOneColumnLabelText","renderNumerical","stopPropagation","IconBellSolid","IconBell","eventTimeCheck","EventRowData","_PureComponent","showDetails","showMinimalDetails","fetchDetails","_this$props","fetchEventDateDetails","eventDate","periodType","periodDateUtc","periodText","translationKey","PERIOD_TYPE_VALUES","quarterNumber","Math","floor","getMonth","_this$props2","showEventDateDetails","_this$props3","showEventDateMinimalDetails","onClickDetails","canBeSubscribed","clickMinimal","EventRowDataDesktop","PureComponent","EventList","buildRows","e1","e2","isSameDay","setting","getSettingsWithNoFilter","hasOwnProperty","initNotificationSetting","createElementWrapper","Spinner","WidgetError","message","i","prevEvent","haveDifferentDays","periodRow","toISOString","eventRow","EventRowDetailMobileItem","EventRowDetailMobile","EventRowDetailDesktopItem","EventRowDetailDesktop","eventModalDetail","EventDetailModal","NoDataWidgetError","colSpan","cellSpacing","EventListHeaderDesktop","ModalLegend","toggleModalLegend","IconTimes","renderColorCodes","renderAbbreviations","IconVolumeMute","IconCogSolid","CalendarContainer","trackScrolling","isBottom","getNotificationSetting","initSettingsListener","initTimezones","fetchLocalizations","subscribeToCalendar","initEventNotifications","fxsWidgets","load","trunc","scrollHeight","scrollTop","clientHeight","wrappedElement","classList","contains","remove","add","hideModalConnectionError","showEventNotifyModal","EventNotifyModal","mustOneSignalInit","async","BlockedPopup","show","dir","EventListFilter","onScroll","Modal","sectionClassName","CalendarWidget","store","createCustomStore","createStore","Provider","getViewDefaultSettings","nextSettings","Category_All","Category_BondAuctions","Category_CapitalFlows","Category_CentralBanks","Category_Consumption","Category_EconomicActivity","Category_Energy","Category_Holidays","Category_HousingMarket","Category_Inflation","Category_InterestRates","Category_LaborMarket","Category_Politics","NONE","DAY","MONTH","QUARTER","WrappedComponent","_class","timeUntilEvent","dateUtc","getTime","timeoutId","setTimeout","checkEventTime","clearTimeout","_extends","AdvancedFilterTopDesktop","onEventNameChanged","loadDefaultSettings","loadCustomSettings","IconSearchSolid","eventName","AdvancedTimeFilter","getDropdownButtonGtmId","getDropdownButtonGa4Id","getDropdownOptionGtmId","getDropdownOptionGa4Id","getCalendarContentGtmId","getCalendarContentGa4Id","View_Full","AdvancedCategoryFilterDesktop","selectedCategories","suffix","renderPotency","toLocaleString","potencyTranslations","SpeechAverageScore","speechScoreBuilder","showEventDateMenu","_ref2$settings","ratioDeviation","consensus","previous","revised","countryName","getCountryName","showDashIcon","eventDateDetailIsShown","getDeviation","IconInfoCircle","IconEllipsis","IconFileSolid","formatTemplate","IconChartBar","urlFactory","getEventDateICalendar","IconCalendarPlus","entries","find","_ref4","_ref5","_slicedToArray","onclick","getGTMTracking","Configure_View_Premium","getGA4TrackingElements","DesktopFilter","toggleAdvancedFilter","showPopUp","actualViewSelected","updateSettingsFromStorage","changeSettingsAndSave","changeShowAdvancedFilter","showSucessMessage","onChangeFilter","onChangeFilterDateRange","onApplyRange","role","tabindex","close","CONFIGURATION_CLOSE","ConfirmationPopUp","cancel","save","applyOption","AdvancedFilter","DownloadFilter","openCalendarSettings","SoundAlert","onCheckboxChanged","onNotificationSoundChange","ConfigureView","onOptionChange","showDescription","IconAngleDoubleRight","fetchEventDates","showPermissionAlert","oneSignalInit","OneSignal","appId","notifyButton","enable","welcomeNotification","disable","isHttps","subdomainName","safari_web_id","init","showNativePrompt","_SpeechScoreName$scor","formattedScore","_ref$forceUpperCase","_ref$hideScoreNumber","scoreLevel","isScoreNaN","scoreLabel","translatedScoreLabel","toUpperCase","getOptionGtm","getOptionGa4","getEventDatesICalendar","gtmId","ga4Id","IconDownload","icon","_ref$containerClass","containerClass","_ref$buttonType","buttonType","_ref$buttonSize","buttonSize","options","IconFileICSLight","IconFileCSVLight","Dropdown","getOptionGa4Id","titleClass","str","data","RegExp","datePickerinstance","advancedDatePickerinstance","getDatePicker","BasicCellNumber","DefaultCellNumber","prevState","showSpeechTrackerModal","renderDetail","eventDateDetailData","headline","comments","description","whyMatters","source","urlSource","getPeriodType","nextReleaseDate","getDateString","isSpeechScoreLocked","hasSpeechData","toggleSpeechTrackerModal","isVotingMember","eventDateRelatedNews","_event$isSpeech","_event$speech$score","_event$speech","_event$speech$score2","_event$speech2","_event$speech3","_this$props4","_this$props4$settings","renderSpeechScore","SpeechTrackerModal","renderComments","renderWhyMatters","renderDescription","renderDetailTable","_objectDestructuringEmpty","isVisible","eventDateDetail","eventDateNews","AdvancedCategoryFilterMobile","applyNewSelectedCategories","selectedCatagories","getCategoriesSelected","obj","k","MobileFilter","onMyFilterClick","onDefaultsClick","changeFilter","changeTimezone","changeShowMobileFilter","changeFilterAndFetch","IconFilter","buttonSizeClass","timeOption","Countdown","shouldFinish","updateIntervalSeconds","spinnerDurationSeconds","countdownDurationMinutes","renderSpinner","IconSpinnerSolid","renderCountdown","remainingTime","minutes","renderDateTime","TwelveHours","renderFinished","onCountdownFinished","storeCulture","getState","currentCulture","openModalDetails","showEventDateModalMenu","_this$props2$settings","_this$props2$event","open","dateString","toLocaleDateString","pr","Intl","PluralRules","getOrdinalDay","select","getDate","splitted","join","fromDateString","toDateString","fromString","toDivider","setHours","toString","convertEventDateListToUserTimezone","eventDateList","userTimezoneOffset","ed","convertDateToTimezone","convertEventDateToUserTimezone","eventDatesReceived","_store$getState$setti","filteredEventDates","filterName","filterByEventName","mappedReviseEventDates","previousIsPreliminary","mapRevisedByPreviousIsPreliminary","eventDatesError","eventDatesRequested","_store$getState2","getEventDates","method","Accept","ok","json","status","fetchPosts","eventTags","requested","_store$getState$confi","Values","received","eventDateDetailsError","eventDateDetailsRequested","getEventDateDetails","eventDateDetailsReceived","tags","calendarCrudModifyConsensus","findEventDate","eventDateIndex","findIndex","updateEventDate","updatedEventDate","newEventDates","_toConsumableArray","channels","callback","isBetter","pushDate","_store$getState","newEventDate","playSound","event_date_id","expected_date","push_date","calendarValuesReceived","EventDateId","Actual","Revised","IsBetter","calendarDeviationReceived","RatioDeviation","eventDateChanges","calendarCrudValuesReceived","Changes","calendarSpeechScoreReceived","Score","subscribeToPush","prepareArray","next","Array","isArray","Number","isInteger","JSON","stringify","prepareTime","prepareDateRange","prepareEventName","saveFilter","offset","convertDateToUtc","newSettings","eventNotificationsReceived","eventIds","getEventNotifications","helper","isPushNotificationsEnabled","isEnabled","getSubscriptions","enabledNotifications","getHelper","calendarNotificationHelper","isPushNotificationsSupported","isSupported","addEventListener","detail","subscriptionChangedListener","initSubscriptions","onPermissionChanged","TIMEZONE_VALUES","TimeZoneId","TimeSpan","Location","CurrentTimeZone","HoursUtcOffset","REGEX_EXPRESSION","getTimezoneOffset","sign","test","_offset$slice$split2","slice","clockUpdate","clockUpdateReceived","updateClockListener","getTimezonesModel","timezonesModel","TimeZones","TimeZoneInfoId","offsetValue","IsTwelveTimeFormat","SetAutomaticallyTimeZone","timeZoneOffset","getDefaultTimeZones","start","getUTCSeconds","getUTCMilliseconds","setInterval","updateClockAction","eventDatesActions","eventDateDetailsActions","eventDateModalMenuShown","eventDateDetailsShown","localizationActions","pushActions","modalActions","showModalConnectionError","settingsActions","setTimezone","actualSettings","filterChanges","previousFilter","nextFilter","prepareFilter","filterActions","notificationsActions","subscribe","notifySubscriptions","unsubscribe","timeZoneActions","changeTimeFormat","isTwelveTimeFormat","setTimeFormat","Event","dispatchEvent","calendarSettingsActions","SETTINGS_SAVED_EVENT_NAME","settingsNoFilter","noChangeView","showAdvice","eventNotifyActions","getCalendarBaseUrl","apiVersionParam","dateFromUtc","dateToUtc","calendarBaseUrl","dateFromParam","getUtcDateTimeISOString","dateToParam","apiVersion","query","vol","SpeechScoreLevel","createRef","currentPicker","container","current","_e$path","removeEventListener","handleOutsideClick","_ref$showHighlighted","ref","checked","onCloseClick","showLockedSpeechScore","renderSpeechScoreOrActualOnModal","openTimeZonePicker","IconClock","IconChevronUp","IconChevronDown","for","newFilter","onImpactChanged","onChangeCountries","onChangeEventName","onChangeCategories","onChangeTime","customSettings","parse","AdvancedFilterTopMobile","AdvancedCountryFilterDesktop","getVolatilitiesSelected","containsWrapper","containsContainer","Country_All","Country_UnitedStates","Country_UnitedKingdom","Country_EuropeanMonetaryUnion","Country_Germany","Country_China","Country_Japan","Country_Canada","Country_Australia","Country_NewZealand","Country_Switzerland","Country_France","Country_Italy","Country_Spain","Country_Ukraine","Country_India","Country_Russia","Country_Turkey","Country_SouthAfrica","Country_Brazil","Country_SouthKorea","Country_Indonesia","Country_Singapore","Country_Mexico","Country_Sweden","Country_Norway","Country_Denmark","Country_Greece","Country_Portugal","Country_Ireland","Country_Austria","Country_Belgium","Country_Netherlands","Country_Finland","Country_CzechRepublic","Country_Poland","Country_Hungary","Country_Romania","Country_Chile","Country_Colombia","Country_Argentina","Country_Iceland","Country_HongKong","Country_Slovakia","Country_Israel","Country_SaudiArabia","Country_Vietnam","Country_Kuwait","Country_Egypt","Country_UnitedArabEmirates","Country_Qatar","Country_Thailand","getCountryNameByCountryCode","speechScoreExample","width","height","viewBox","fill","xmlns","d","includeName","Volatility_All","Volatility_None","Volatility_Low","countryTraking","all","clear","SpeechScoreRanges","min","max","level","_eventDate$speech","_eventDate$speech2","_eventDate$speech3","getSpeechScoreRange","matchingRange","range","setModalTransition","modalTransition","toggle","submit"],"mappings":"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","file":"calendar.93592138e6333939d122.js","sourcesContent":["import { Component } from \"preact\";\r\nimport actions from \"../../actions\";\r\nimport { getAdvancedDatePicker } from \"../../../common/asyncComponents/DatePicker\";\r\nimport IconCalendar from \"../../../common/components/icons/IconCalendar\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport IconCaretDown from \"../../../common/components/icons/IconCaretDown\";\r\nimport { TIME_FILTERS_VALUES } from \"../../constants\";\r\nimport { getDateRange } from \"../../helpers/formatDate\";\r\nimport DetailModal from \"../modal/DetailModal\";\r\n\r\nconst DATEPICKER_CONTAINER_ID = \"datepicker_button_container\";\r\n\r\nclass DatePickerFilterMobile extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            datePicker: null,\r\n        };\r\n\r\n        this.togglePicker = this.togglePicker.bind(this);\r\n        this.resetDatePicker = this.resetDatePicker.bind(this);\r\n        this.onApply = this.onApply.bind(this);\r\n        this.changeRangeOption = this.changeRangeOption.bind(this);\r\n        this.renderButton = this.renderButton.bind(this);\r\n        this.renderDateTitle = this.renderDateTitle.bind(this);\r\n        this.renderModal = this.renderModal.bind(this);\r\n        this.scrollTabs = this.scrollTabs.bind(this);\r\n    }\r\n\r\n    async togglePicker() {\r\n        const { datePicker } = this.state;\r\n        if (datePicker) this.resetDatePicker();\r\n        else {\r\n            const picker = await getAdvancedDatePicker();\r\n            this.setState({ datePicker: picker });\r\n        }\r\n    }\r\n\r\n    resetDatePicker() {\r\n        this.setState({ datePicker: undefined });\r\n    }\r\n\r\n    onApply(dateRange) {\r\n        if (dateRange && dateRange.from && dateRange.to)\r\n            this.props.applyFilter(dateRange);\r\n\r\n        this.resetDatePicker();\r\n    }\r\n\r\n    async changeRangeOption(value) {\r\n        this.props.onTimeFilterChanged(value);\r\n\r\n        this.resetDatePicker();\r\n\r\n        const picker = await getAdvancedDatePicker();\r\n        this.setState({ datePicker: picker });\r\n    }\r\n\r\n    async onDateRangeFilterChanged(dateRange) {\r\n        this.props.onDateRangeFilterChanged(dateRange);\r\n    }\r\n\r\n    scrollTabs(id) {\r\n        var element = document.getElementById(id);\r\n        if (element) {\r\n            var newPosition = element.offsetLeft;\r\n            document.getElementById(DATEPICKER_CONTAINER_ID).scrollLeft =\r\n                newPosition - 160;\r\n        }\r\n    }\r\n\r\n    renderDateTitle(dateRange) {\r\n        return getDateRange(dateRange, this.props.config.culture);\r\n    }\r\n\r\n    renderButton(value, getContentGtmId, getContentGa4Id, getGa4Name, showHighlighted, time, translate) {\r\n        return (\r\n            <button\r\n                type=\"button\"\r\n                data-gtmid={getContentGtmId && getContentGtmId(value)}\r\n                data-ga4event-clk-name={getGa4Name && getGa4Name}\r\n                data-ga4event-element={getContentGa4Id && getContentGa4Id(value)}\r\n                class={\r\n                    showHighlighted && time === value\r\n                        ? \"fxs_c_datepicker_button fxs_c_datepicker_button_active\"\r\n                        : \"fxs_c_datepicker_button\"\r\n                }\r\n                onClick={() =>\r\n                    this.changeRangeOption(value).then(() => {\r\n                        this.scrollTabs(value);\r\n                    })\r\n                }\r\n                id={value}\r\n            >\r\n                <span>\r\n                    <span>{translate(value)}</span>\r\n                </span>\r\n            </button>\r\n        );\r\n    }\r\n\r\n    renderModal(\r\n        translate,\r\n        time,\r\n        showHighlighted,\r\n        dateRange,\r\n        getContentGtmId,\r\n        getContentGa4Id,\r\n        culture,\r\n        datePicker,\r\n        onChangeCustomFilter,\r\n        getGa4Name\r\n    ) {\r\n        return (\r\n            <div\r\n                onMouseLeave={this.closePicker}\r\n                class=\"fxs_c_DatePicker-Container\"\r\n            >\r\n                <div class=\"fxs_c_datepicker_header\">\r\n                    <h2 class=\"fxs_headline_medium\">\r\n                        {translate(\"DatePickerMobile_ChooseDate\")}\r\n                    </h2>\r\n                    <p class=\"fxs_entryPlain_txt_large\">\r\n                        {this.renderDateTitle(dateRange)}\r\n                    </p>\r\n                </div>\r\n\r\n                <div\r\n                    class=\"fxs_c_datepicker_button_area\"\r\n                    id={DATEPICKER_CONTAINER_ID}\r\n                >\r\n                    <div class=\"fxs_c_datepicker_button_slider\">\r\n                        <button\r\n                            type=\"button\"\r\n                            disabled\r\n                            class=\"fxs_c_datepicker_button\"\r\n                        ></button>\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.RecentNext,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.Today,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.Tomorrow,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.Yesterday,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.ThisWeek,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.ThisMonth,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.NextWeek,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.NextMonth,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.PreviousWeek,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.PreviousMonth,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        {this.renderButton(\r\n                            TIME_FILTERS_VALUES.Custom,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            getGa4Name,\r\n                            showHighlighted,\r\n                            time,\r\n                            translate\r\n                        )}\r\n                        <button\r\n                            type=\"button\"\r\n                            disabled\r\n                            class=\"fxs_c_datepicker_button\"\r\n                        ></button>\r\n                    </div>\r\n                </div>\r\n                <datePicker.default\r\n                    className=\"fxs_c_DatePicker\"\r\n                    onApply={this.onApply}\r\n                    applyLabel={translate(\"DateSelectorApply\")}\r\n                    dateRange={dateRange}\r\n                    locale={culture}\r\n                    onDateRangeFilterChanged={(dateRange) =>\r\n                        this.onDateRangeFilterChanged(dateRange).then(() => {\r\n                            this.scrollTabs(TIME_FILTERS_VALUES.Custom);\r\n                        })\r\n                    }\r\n                    onChangeCustomFilter={onChangeCustomFilter}\r\n                />\r\n            </div>\r\n        );\r\n    }\r\n\r\n    render(\r\n        {\r\n            translate,\r\n            config: { culture },\r\n            dateRange,\r\n            getButtonGtmId,\r\n            getButtonGa4Id,\r\n            getContentGtmId,\r\n            getContentGa4Id,\r\n            getGa4Name,\r\n            onDateRangeFilterChanged,\r\n            showHighlighted,\r\n            time,\r\n        },\r\n        { datePicker }\r\n    ) {\r\n        return (\r\n            <div class=\"fxs_c_datepicker-wrapper\">\r\n                <button\r\n                    type=\"button\"\r\n                    onClick={this.togglePicker}\r\n                    class={`fxs_btn fxs_c_datepicker_trigger_button fxs_btn_xsmall ${datePicker ? \"fxs_c_datePicker_active\" : \"\"\r\n                        }`}\r\n                    data-gtmid={getButtonGtmId}\r\n                    data-ga4event-clk-name={getGa4Name && getGa4Name}\r\n                    data-ga4event-element={getButtonGa4Id}\r\n                >\r\n                    <IconCalendar /> {this.renderDateTitle(dateRange)}\r\n                    <IconCaretDown />\r\n                </button>\r\n                {datePicker && (\r\n                    <DetailModal\r\n                        handleClose={this.togglePicker}\r\n                        body={this.renderModal(\r\n                            translate,\r\n                            time,\r\n                            showHighlighted,\r\n                            dateRange,\r\n                            getContentGtmId,\r\n                            getContentGa4Id,\r\n                            culture,\r\n                            datePicker,\r\n                            onDateRangeFilterChanged,\r\n                            getGa4Name\r\n                        )}\r\n                        componentDidMountAction={() =>\r\n                            this.scrollTabs(this.props.time)\r\n                        }\r\n                    ></DetailModal>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"config\",\r\n    actions\r\n)(DatePickerFilterMobile);\r\n","import { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport { SpeechScoreName, ScoreClasses } from \"../../constants/speechScore\";\r\n\r\nconst SpeechAverageScore = ({ speechScore, includeLabel = false, translate }) => {\r\n    const hasAverageScore = !isNaN(speechScore?.averageScore);\r\n\r\n    if (!hasAverageScore) {\r\n        return <span>{`${translatedAverageScoreLabel}-`}</span>;\r\n    }\r\n\r\n    const cssClass = ScoreClasses[speechScore.averageScoreLevel];\r\n    const averageScoreLabel = SpeechScoreName[speechScore.averageScoreLevel];\r\n\r\n    const formattedAverageScore = parseFloat(speechScore.averageScore).toFixed(1);\r\n\r\n    return (\r\n        <>\r\n            <span class={`fxs_c_speech_score ${cssClass}`}>\r\n                {includeLabel && <span> {translate(averageScoreLabel)}</span>}\r\n                {formattedAverageScore && ` ${formattedAverageScore}`}\r\n            </span>\r\n        </>\r\n    );\r\n};\r\n\r\nexport default connectWithTranslations()(SpeechAverageScore);\r\n","export const GTM_ID = {\r\n    OPEN_GRAPH: eventDateId => `features-calendar-eventdetails-eventoptions-${eventDateId}`,\r\n    OPEN_LINK_TEXT: eventDateId => `features-calendar-eventdetails-openlinktext-${eventDateId}`,\r\n    ADD_EVENT: eventDateId => `features-calendar-eventdetails-addevent-${eventDateId}`,\r\n    OPEN_DASHBOARD: eventDateId => `features-calendar-eventdetails-dashboard-${eventDateId}`,\r\n    OPEN_SOURCE: eventDateId => `features-calendar-eventdetails-source-${eventDateId}`,\r\n    OPEN_OVERVIEW: eventDateId => `features-calendar-eventdetails-overview-${eventDateId}`,\r\n    CLOSE_OVERVIEW: eventDateId => `features-calendar-eventdetails-close-overview-${eventDateId}`,\r\n    OPEN_RELATEDNEWS: eventDateId => `features-calendar-relatednews-${eventDateId}`,\r\n    OPEN_READFULLREPORT: eventDateId => `features-calendar-eventdetails-readfullreport-${eventDateId}`,\r\n\r\n    FILTER_TIME_BUTTON: timeRange => `features-calendar-filter-${timeRange.toLowerCase()}`,\r\n    FILTER_TIME_DROPDOWN: 'features-calendar-filter-time',\r\n    FILTER_TIME_DROPDOWN_OPTION: period => `features-calendar-timedropdown-${period.toLowerCase()}`,\r\n\r\n    FILTER_CALENDAR_BUTTON: 'features-calendar-filter-calendar',\r\n    FILTER_CALENDAR_CONTENT: 'features-calendar-filter-calendardropdown',\r\n\r\n    FILTER_IMPACT_DROPDOWN: 'features-calendar-filter-impact',\r\n    FILTER_IMPACT_DROPDOWN_OPTION: impact => `features-calendar-impactdropdown-${impact.toLowerCase()}`,\r\n\r\n    FILTER_COUNTRY_DROPDOWN: 'features-calendar-filter-country',\r\n    FILTER_COUNTRY_DROPDOWN_OPTION: country => `features-calendar-countrydropdown-${country.toLowerCase()}`,\r\n\r\n    FILTER_CATEGORY_DROPDOWN: 'features-calendar-filter-category',\r\n    FILTER_CATEGORY_DROPDOWN_OPTION: category => `features-calendar-categorydropdown-${category.toLowerCase()}`,\r\n\r\n    FILTER_MY_FILTERS: 'features-calendar-filter-myfilters',\r\n    FILTER_DEFAULTS: 'features-calendar-filter-defaults',\r\n    FILTER_ADVANCED: 'features-calendar-filter-advancedfilters',\r\n\r\n    MOBILE_FILTER_OPEN: 'features-calendar-filter-openfilter',\r\n    MOBILE_FILTER_CLOSE: 'features-calendar-filter-closefilter',\r\n\r\n    ADVANCED_FILTERS_TIME_BUTTON: timeRange => `features-calendar-advancedfilters-${timeRange.toLowerCase()}`,\r\n    ADVANCED_FILTERS_TIME_DROPDOWN: 'features-calendar-advancedfilters-time',\r\n    ADVANCED_FILTERS_TIME_DROPDOWN_OPTION: period => `features-calendar-filter-${period.toLowerCase()}`,\r\n\r\n    ADVANCED_FILTERS_CALENDAR_BUTTON: 'features-calendar-advancedfilters-calendar',\r\n    ADVANCED_FILTERS_CALENDAR_CONTENT: 'features-calendar-advancedfilters-calendardropdown',\r\n\r\n    ADVANCED_FILTERS_IMPACT_CHECKBOX: impact => `features-calendar-filter-impact-${impact.toLowerCase()}`,\r\n    ADVANCED_FILTERS_EVENT_NAME: 'features-calendar-advancedfilters-eventname',\r\n    ADVANCED_FILTERS_COUNTRY_CHECKBOX: country => `features-calendar-filter-country-${country.toLowerCase()}`,\r\n    ADVANCED_FILTERS_CATEGORY_CHECKBOX: category => `features-calendar-filter-category-${category.toLowerCase()}`,\r\n    ADVANCED_FILTERS_SAVE_SETTINGS: 'features-calendar-filter-savesettings',\r\n    ADVANCED_FILTERS_APPLY: 'features-calendar-filter-apply',\r\n    ADVANCED_FILTERS_CANCEL: 'features-calendar-advancedfilters-cancel',\r\n\r\n    TIMEZONE_DROPDOWN: 'features-calendar-timezone-selector',\r\n    TIMEZONE_DROPDOWN_OPTION: timezone => `features-calendar-timezone-${timezone.toLowerCase()}`,\r\n    TIMEZONE_TIMEFORMAT_24H: 'features-calendar-timezone-24h',\r\n    TIMEZONE_TIMEFORMAT_AMPM: 'features-calendar-timezone-ampm',\r\n\r\n    DOWNLOAD: 'features-calendar-configuration-download',\r\n    ICSDOWNLOAD: 'features-calendar-configuration-downloadics',\r\n    CSVDOWNLOAD: 'features-calendar-configuration-downloadcsv',\r\n    NOTIFICATIONS: 'features-calendar-configuration-notifications',\r\n\r\n    NOTIFY_ME_SUBSCRIPTION: eventDateId => `features-calendar-eventdetails-notifyme-subscription-${eventDateId}`,\r\n    NOTIFY_ME_UNSUBSCRIPTION: eventDateId => `features-calendar-eventdetails-notifyme-unsubscription-${eventDateId}`,\r\n\r\n    CONFIGURATION_HELP: 'features-calendar-configuration-help-button',\r\n\r\n    DATEPIKER_TIMESELECTOR_BUTTON: 'features-calendar-datepicker-timeselector',\r\n    DATEPIKER_OPTION: time => `features-calendar-datepicker-${time.toLowerCase()}`,\r\n    DATEPIKER_APPLY: 'features-calendar-datepicker-apply',\r\n    DATEPIKER_MONTH_SELECTOR: 'features-calendar-datepicker-monthselector',\r\n    DATEPIKER_YEAR_SELECTOR: 'features-calendar-datepicker-yearselector',\r\n    DATEPIKER_DAY_SELECTOR: 'features-calendar-datepicker-dayselector',\r\n\r\n    CONFIGURATION_GEAR: 'features-calendar-configuration-gear',\r\n    CONFIGURATION_MANAGE_EVENT_LIST: 'features-calendar-configuration-manage-event-list',\r\n\r\n    HEADER_BASIC_VIEW: 'basic-calendar-view',\r\n    HEADER_DEFAULT_VIEW: 'default-calendar-view',\r\n    HEADER_PREMIUM_VIEW: 'premium-calendar-view'\r\n}\r\nexport const GA4EVENT = {\r\n    NAMES: { FEATURES_CALENDAR: \"features-calendar\" },\r\n    ELEMENTS: {\r\n        OPEN_GRAPH:  `eventdetails-eventoptions`,\r\n        OPEN_LINK_TEXT:  `eventdetails-openlinktext`,\r\n        ADD_EVENT:  `eventdetails-addevent`,\r\n        OPEN_DASHBOARD:  `eventdetails-dashboard`,\r\n        OPEN_SOURCE:  `eventdetails-source`,\r\n        OPEN_OVERVIEW:  `eventdetails-overview`,\r\n        CLOSE_OVERVIEW:  `eventdetails-close-overview`,\r\n        OPEN_RELATEDNEWS:  `relatednews`,\r\n        OPEN_READFULLREPORT:  `eventdetails-readfullreport`,\r\n    \r\n        FILTER_TIME_BUTTON: timeRange => `filter-${timeRange.toLowerCase()}`,\r\n        FILTER_TIME_DROPDOWN: 'filter-time',\r\n        FILTER_TIME_DROPDOWN_OPTION: period => `timedropdown-${period.toLowerCase()}`,\r\n    \r\n        FILTER_CALENDAR_BUTTON: 'filter-calendar',\r\n        FILTER_CALENDAR_CONTENT: 'filter-calendardropdown',\r\n    \r\n        FILTER_IMPACT_DROPDOWN: 'filter-impact',\r\n        FILTER_IMPACT_DROPDOWN_OPTION: impact => `impactdropdown-${impact.toLowerCase()}`,\r\n    \r\n        FILTER_COUNTRY_DROPDOWN: 'filter-country',\r\n        FILTER_COUNTRY_DROPDOWN_OPTION: country => `countrydropdown-${country.toLowerCase()}`,\r\n    \r\n        FILTER_CATEGORY_DROPDOWN: 'filter-category',\r\n        FILTER_CATEGORY_DROPDOWN_OPTION: category => `categorydropdown-${category.toLowerCase()}`,\r\n    \r\n        FILTER_MY_FILTERS: 'filter-myfilters',\r\n        FILTER_DEFAULTS: 'filter-defaults',\r\n        FILTER_ADVANCED: 'filter-advancedfilters',\r\n    \r\n        MOBILE_FILTER_OPEN: 'filter-openfilter',\r\n        MOBILE_FILTER_CLOSE: 'filter-closefilter',\r\n    \r\n        ADVANCED_FILTERS_TIME_BUTTON: timeRange => `advancedfilters-${timeRange.toLowerCase()}`,\r\n        ADVANCED_FILTERS_TIME_DROPDOWN: 'advancedfilters-time',\r\n        ADVANCED_FILTERS_TIME_DROPDOWN_OPTION: period => `filter-${period.toLowerCase()}`,\r\n    \r\n        ADVANCED_FILTERS_CALENDAR_BUTTON: 'advancedfilters-calendar',\r\n        ADVANCED_FILTERS_CALENDAR_CONTENT: 'advancedfilters-calendardropdown',\r\n    \r\n        ADVANCED_FILTERS_IMPACT_CHECKBOX: impact => `filter-impact-${impact.toLowerCase()}`,\r\n        ADVANCED_FILTERS_EVENT_NAME: 'advancedfilters-eventname',\r\n        ADVANCED_FILTERS_COUNTRY_CHECKBOX:  `filter-country`,\r\n        ADVANCED_FILTERS_CATEGORY_CHECKBOX: category => `filter-category-${category.toLowerCase()}`,\r\n        ADVANCED_FILTERS_SAVE_SETTINGS: 'filter-savesettings',\r\n        ADVANCED_FILTERS_APPLY: 'filter-apply',\r\n        ADVANCED_FILTERS_CANCEL: 'advancedfilters-cancel',\r\n    \r\n        TIMEZONE_DROPDOWN: 'timezone-selector',\r\n        TIMEZONE_DROPDOWN_OPTION: `timezone-configgtm`,\r\n        TIMEZONE_TIMEFORMAT_24H: 'timezone-24h',\r\n        TIMEZONE_TIMEFORMAT_AMPM: 'timezone-ampm',\r\n    \r\n        DOWNLOAD: 'configuration-download',\r\n        ICSDOWNLOAD: 'configuration-downloadics',\r\n        CSVDOWNLOAD: 'configuration-downloadcsv',\r\n        NOTIFICATIONS: 'configuration-notifications',\r\n    \r\n        NOTIFY_ME_SUBSCRIPTION:  `eventdetails-notifyme-subscription`,\r\n        NOTIFY_ME_UNSUBSCRIPTION:  `eventdetails-notifyme-unsubscription`,\r\n    \r\n        CONFIGURATION_HELP: 'configuration-help-button',\r\n    \r\n        DATEPIKER_TIMESELECTOR_BUTTON: 'datepicker-timeselector',\r\n        DATEPIKER_OPTION: time => `datepicker-${time.toLowerCase()}`,\r\n        DATEPIKER_APPLY: 'datepicker-apply',\r\n        DATEPIKER_MONTH_SELECTOR: 'datepicker-monthselector',\r\n        DATEPIKER_YEAR_SELECTOR: 'datepicker-yearselector',\r\n        DATEPIKER_DAY_SELECTOR: 'datepicker-dayselector',\r\n    \r\n        CONFIGURATION_GEAR: 'configuration-gear',\r\n        CONFIGURATION_MANAGE_EVENT_LIST: 'configuration-manage-event-list',\r\n    \r\n        HEADER_BASIC_VIEW: 'basic-calendar-view',\r\n        HEADER_DEFAULT_VIEW: 'default-calendar-view',\r\n        HEADER_PREMIUM_VIEW: 'premium-calendar-view'\r\n        }\r\n}\r\n","export const DATE_OPTIONS = {\r\n    weekday: \"short\",\r\n    year: \"numeric\",\r\n    month: \"short\",\r\n    day: \"numeric\",\r\n};","export const enabledCalendarNotifications = (config) => {\r\n    return Boolean((config.notificationsHelper)  || config.oneSignalAppId);\r\n}\r\n\r\nexport const downloadCalendar = (url, format) => {\r\n    fetch(url, { headers: { 'Accept': format }})\r\n        .then(response => {\r\n            const promise = new Promise((resolve, reject) =>\r\n                response.blob()\r\n                    .then(blob => resolve({ filename: getAttachmentFileName(response), blob }))\r\n            )\r\n            return promise\r\n        })\r\n        .then(({ filename, blob }) => {\r\n            const url = window.URL.createObjectURL(new Blob([blob]))\r\n            const link = document.createElement('a')\r\n            link.href = url\r\n            link.setAttribute('download', filename)\r\n            document.body.appendChild(link)\r\n            link.click()\r\n            link.parentNode.removeChild(link)\r\n        }).catch(err => {\r\n            console.error('Could not download the iCalendar file')\r\n            console.error(err)\r\n        })\r\n}\r\n\r\nconst getAttachmentFileName = (response) => {\r\n    let filename = null\r\n    const disposition = response.headers.get('Content-Disposition')\r\n    if (disposition && disposition.indexOf('attachment') !== -1) {\r\n        const filenameRegex = /filename[^;=\\n]*=((['\"]).*?\\2|[^;\\n]*)/\r\n        var matches = filenameRegex.exec(disposition)\r\n        if (matches !== null && matches[1]) {\r\n            filename = matches[1].replace(/['\"]/g, '')\r\n        }\r\n    }\r\n    return filename\r\n}\r\n\r\n","\"use strict\";\n\nObject.defineProperty(exports, \"__esModule\", {\n    value: true\n});\nvar stat = exports.stat = function stat(inputFileSystem, path) {\n    return new Promise(function (resolve, reject) {\n        inputFileSystem.stat(path, function (err, stats) {\n            if (err) {\n                reject(err);\n            }\n            resolve(stats);\n        });\n    });\n};\n\nvar readFile = exports.readFile = function readFile(inputFileSystem, path) {\n    return new Promise(function (resolve, reject) {\n        inputFileSystem.readFile(path, function (err, stats) {\n            if (err) {\n                reject(err);\n            }\n            resolve(stats);\n        });\n    });\n};","import { h, Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport {\r\n    COUNTRY_FILTER_OPTIONS,\r\n    getMajorCountries,\r\n    getMinorCountries,\r\n    GTM_ID, GA4EVENT,\r\n} from \"../../../constants\";\r\nimport CheckboxPicker from \"../../../../common/components/CheckboxPicker\";\r\nimport IconCaretDown from \"../../../../common/components/icons/IconCaretDown\";\r\nimport actions from \"../../../actions\";\r\nimport { getKeysOfNotNullValues } from \"../../../../common/helpers/objects\";\r\n\r\nconst CountryCheckboxValue = ({ code, text }) => (\r\n    <div class=\"fxs_c_filter_picker\" style=\"display: inline-block\">\r\n        <span\r\n            class={`fxs_flag fxs_${code.toLowerCase()}`}\r\n            title={text}\r\n            style=\"display: inherit\"\r\n        ></span>\r\n        <span class=\"fxs_c_country-name\">{text}</span>\r\n    </div>\r\n);\r\n\r\nclass AdvancedCountryFilterMobile extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            isPickerOpen: false,\r\n            filteredCountries: null,\r\n            selected: [],\r\n        };\r\n\r\n        this.togglePicker = this.togglePicker.bind(this);\r\n        this.applyNewSelectedCountries =\r\n            this.applyNewSelectedCountries.bind(this);\r\n    }\r\n\r\n    componentWillMount() {\r\n        const countries = getKeysOfNotNullValues(COUNTRY_FILTER_OPTIONS);\r\n        const translatedCountries = countries.map((x) => {\r\n            return {\r\n                key: x,\r\n                name: this.props.translate(x),\r\n            };\r\n        });\r\n\r\n        const majorCountries = getMajorCountries(countries);\r\n        const minorCountries = getMinorCountries(countries);\r\n        const selected = this.props.selectedCountries;\r\n\r\n        this.setState({\r\n            countries,\r\n            translatedCountries,\r\n            majorCountries,\r\n            minorCountries,\r\n            selected,\r\n        });\r\n    }\r\n\r\n    componentWillReceiveProps(nextProps) {\r\n        if (this.props.selectedCountries !== nextProps.selectedCountries) {\r\n            const selected = this.state.countries.filter((key) =>\r\n                nextProps.selectedCountries.includes(\r\n                    COUNTRY_FILTER_OPTIONS[key]\r\n                )\r\n            );\r\n\r\n            this.setState({\r\n                selected: selected.map((x) => COUNTRY_FILTER_OPTIONS[x]),\r\n            });\r\n        }\r\n    }\r\n\r\n    togglePicker() {\r\n        if (this.state.isPickerOpen)\r\n            this.setState({\r\n                isPickerOpen: false,\r\n                filteredCountries: null,\r\n                selected: this.props.selectedCountries,\r\n            });\r\n        else this.setState({ isPickerOpen: true });\r\n    }\r\n\r\n    onChangeCountriesSelected(newSelected) {\r\n        if (this.state.filteredCountries !== null) {\r\n            var filteredCountriesCodes = this.state.filteredCountries.map(\r\n                (x) => COUNTRY_FILTER_OPTIONS[x]\r\n            );\r\n            this.state.selected.forEach((element) => {\r\n                if (!filteredCountriesCodes.includes(element)) {\r\n                    newSelected.push(element);\r\n                }\r\n            });\r\n        }\r\n        this.setState({\r\n            selected: newSelected,\r\n        });\r\n    }\r\n\r\n    applyNewSelectedCountries(selected) {\r\n        this.props.onChange(selected);\r\n        this.togglePicker();\r\n    }\r\n\r\n    searchCountries = (text) => {\r\n        let filtered = this.state.translatedCountries.filter((x) => {\r\n            var result = x.name.toLowerCase().indexOf(text.toLowerCase()) > -1;\r\n            return result;\r\n        });\r\n\r\n        this.setState({ filteredCountries: filtered.map((x) => x.key) });\r\n    };\r\n\r\n    filterCountry = (e) => {\r\n        if (e.isComposing || e.keyCode === 229) {\r\n            return;\r\n        }\r\n        let value = e.target.value;\r\n        this.searchCountries(value);\r\n    };\r\n\r\n    render(\r\n        { onChange, translate, config, selectedCountries },\r\n        {\r\n            countries,\r\n            majorCountries,\r\n            minorCountries,\r\n            filteredCountries,\r\n            selected,\r\n        }\r\n    ) {\r\n        let actualMajorCountries = majorCountries;\r\n        let actualMinorCountries = minorCountries;\r\n\r\n        if (filteredCountries && filteredCountries.length > 0) {\r\n            actualMajorCountries = actualMajorCountries.filter((x) =>\r\n                filteredCountries.includes(x)\r\n            );\r\n            actualMinorCountries = actualMinorCountries.filter((x) =>\r\n                filteredCountries.includes(x)\r\n            );\r\n        }\r\n\r\n        const majorSelected = getSelected(majorCountries, selected);\r\n        const minorSelected = getSelected(minorCountries, selected);\r\n\r\n        return (\r\n            <div class=\"fxs_c_advanced-countries-filter\">\r\n                <button\r\n                    type=\"button\"\r\n                    onClick={this.togglePicker}\r\n                    class=\"fxs_c_filter_picker_trigger_button\"\r\n                >\r\n                    <span>\r\n                        {translate(\"CountryFilterTitle\")} ({selected.length})\r\n                    </span>\r\n                    <IconCaretDown />\r\n                </button>\r\n                {this.state.isPickerOpen && (\r\n                    <div\r\n                        class=\"fxs_c_advanced-countries-backdrop\"\r\n                        onClick={this.togglePicker}\r\n                    ></div>\r\n                )}\r\n                {this.state.isPickerOpen && (\r\n                    <div class=\"fxs_c_filters_picker\">\r\n                        <div class=\"fxs_c_countries_search_box\">\r\n                            <input\r\n                                onKeyUp={this.filterCountry}\r\n                                type=\"search\"\r\n                                class=\"fxs_search_input\"\r\n                                placeholder={translate(\r\n                                    \"AdvancedFilter_Search_Country\"\r\n                                )}\r\n                                name=\"search\"\r\n                                autocomplete=\"off\"\r\n                            />\r\n                            <label\r\n                                class=\"fxs_btn_filter\"\r\n                                title={translate(\r\n                                    \"AdvancedFilter_Search_Country\"\r\n                                )}\r\n                            ></label>\r\n                        </div>\r\n                        <div class=\"fxs_clearfix\">\r\n                            <button\r\n                                type=\"button\"\r\n                                class=\"fxs_btn fxs_btn_anchor fxs_btn_large fxs_fLeft\"\r\n                                data-gtmid={\r\n                                    config.tracking &&\r\n                                    GTM_ID.ADVANCED_FILTERS_COUNTRY_CHECKBOX(\r\n                                        \"all\"\r\n                                    )\r\n                                }\r\n                                data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                data-ga4event-element={\r\n                                    config.tracking &&\r\n                                    GA4EVENT.ELEMENTS.ADVANCED_FILTERS_COUNTRY_CHECKBOX\r\n                                }\r\n                                data-ga4event-country={config.tracking && \"all\"}\r\n                                onClick={() =>\r\n                                    this.onChangeCountriesSelected(\r\n                                        getValues(countries, [])\r\n                                    )\r\n                                }\r\n                            >\r\n                                <span>\r\n                                    <span>\r\n                                        {translate(\"AdvancedFilterAllLabel\")}\r\n                                    </span>\r\n                                </span>\r\n                            </button>\r\n                            <button\r\n                                type=\"button\"\r\n                                class=\"fxs_btn fxs_btn_anchor fxs_btn_large fxs_fRight\"\r\n                                data-gtmid={\r\n                                    config.tracking &&\r\n                                    GTM_ID.ADVANCED_FILTERS_COUNTRY_CHECKBOX(\r\n                                        \"clear\"\r\n                                    )\r\n                                }\r\n                                data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                data-ga4event-element={\r\n                                    config.tracking &&\r\n                                    GA4EVENT.ELEMENTS.ADVANCED_FILTERS_COUNTRY_CHECKBOX\r\n                                }\r\n                                data-ga4event-country={config.tracking && \"clear\"}\r\n                                onClick={() =>\r\n                                    this.onChangeCountriesSelected([])\r\n                                }\r\n                            >\r\n                                <span>\r\n                                    <span>\r\n                                        {translate(\"AdvancedFilterNoneLabel\")}\r\n                                    </span>\r\n                                </span>\r\n                            </button>\r\n                        </div>\r\n                        <div class=\"fxs_c_filter_picker_list\">\r\n                            <CheckboxPicker\r\n                                onChange={(values) =>\r\n                                    this.onChangeCountriesSelected(\r\n                                        getValues(values, minorSelected)\r\n                                    )\r\n                                }\r\n                                values={actualMajorCountries}\r\n                                checkedValues={majorSelected}\r\n                                renderTitle={() => { }}\r\n                                renderValue={(value) => (\r\n                                    <CountryCheckboxValue\r\n                                        code={COUNTRY_FILTER_OPTIONS[value]}\r\n                                        text={translate(value)}\r\n                                    />\r\n                                )}\r\n                                getOptionGtmId={(key) =>\r\n                                    config.tracking &&\r\n                                    GTM_ID.ADVANCED_FILTERS_COUNTRY_CHECKBOX(\r\n                                        key\r\n                                            .replace(\"Country_\", \"\")\r\n                                            .toLowerCase()\r\n                                    )\r\n                                }\r\n                                getOptionGA4Id={(key)=>\r\n                                    config.tracking &&\r\n                                    GA4EVENT.ELEMENTS.ADVANCED_FILTERS_COUNTRY_CHECKBOX\r\n                                }\r\n                                getOptionGa4ThirdTrackingId={(key) => ({ \"data-ga4event-country\": `${key.replace(\"Country_\", \"\").toLowerCase()}` })}\r\n                                getGa4Name={\r\n                                    config.tracking &&\r\n                                    GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                }\r\n                                labelClass=\"fxs_c_filter_picker_label\"\r\n                            />\r\n\r\n                            <div class=\"fxs_clearfix\"></div>\r\n                            <hr />\r\n                            <div class=\"fxs_clearfix\"></div>\r\n\r\n                            <CheckboxPicker\r\n                                onChange={(values) =>\r\n                                    this.onChangeCountriesSelected(\r\n                                        getValues(majorSelected, values)\r\n                                    )\r\n                                }\r\n                                values={actualMinorCountries}\r\n                                checkedValues={minorSelected}\r\n                                renderTitle={() => { }}\r\n                                renderValue={(value) => (\r\n                                    <CountryCheckboxValue\r\n                                        code={COUNTRY_FILTER_OPTIONS[value]}\r\n                                        text={translate(value)}\r\n                                    />\r\n                                )}\r\n                                getOptionGtmId={(key) =>\r\n                                    config.tracking &&\r\n                                    GTM_ID.ADVANCED_FILTERS_COUNTRY_CHECKBOX(\r\n                                        key\r\n                                            .replace(\"Country_\", \"\")\r\n                                            .toLowerCase()\r\n                                    )\r\n                                }\r\n                                getOptionGA4Id={(key)=>\r\n                                    config.tracking &&\r\n                                    GA4EVENT.ELEMENTS.ADVANCED_FILTERS_COUNTRY_CHECKBOX\r\n                                }\r\n                                getOptionGa4ThirdTrackingId={(key) => ({ \"data-ga4event-country\": `${key.replace(\"Country_\", \"\").toLowerCase()}` })}\r\n                                getGa4Name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                labelClass=\"fxs_c_filter_picker_label\"\r\n                            />\r\n                        </div>\r\n                        <div class=\"fxs_c_filter_picker_footer\">\r\n                            <button\r\n                                type=\"button\"\r\n                                onClick={() => this.togglePicker()}\r\n                                class=\"fxs_btn fxs_btn_phantom fxs_fLeft\"\r\n                            >\r\n                                {\" \"}\r\n                                {this.props.translate(\"Cancel\")}\r\n                                {\"Cancel\"}\r\n                            </button>\r\n                            <button\r\n                                type=\"button\"\r\n                                onClick={() =>\r\n                                    this.applyNewSelectedCountries(selected)\r\n                                }\r\n                                class=\"fxs_btn fxs_btn_cta fxs_fRight\"\r\n                            >\r\n                                {\" \"}\r\n                                {this.props.translate(\"Done\")}\r\n                                {\"Done\"}\r\n                            </button>\r\n                        </div>\r\n                    </div>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nconst getSelected = (countries, selected) =>\r\n    selected.length === 0\r\n        ? []\r\n        : countries.filter((key) =>\r\n            selected.includes(COUNTRY_FILTER_OPTIONS[key])\r\n        );\r\n\r\nconst getValues = (selected, others) => {\r\n    let result = [];\r\n    result = result.concat(selected.map((x) => COUNTRY_FILTER_OPTIONS[x]));\r\n    result = result.concat(others.map((x) => COUNTRY_FILTER_OPTIONS[x]));\r\n    return result;\r\n};\r\n\r\nexport default connectWithTranslations(\r\n    \"config\",\r\n    actions\r\n)(AdvancedCountryFilterMobile);\r\n","import { TIME_FILTERS_VALUES } from \"./timeFiltersValues\";\r\nimport { FILTER_TYPE } from \"../../calendar-common/constants/filterType\";\r\nimport { VOLATILITY_FILTER_OPTIONS } from \"./volatilityFilterOptions\";\r\nimport {\r\n    COUNTRY_FILTER_OPTIONS,\r\n    getMajorCountries,\r\n    getBasicCountries,\r\n} from \"./countryFilterOptions\";\r\nimport { CATEGORY_FILTER_OPTIONS } from \"./categoryFilterOptions\";\r\nimport { getKeysOfNotNullValues } from \"../../common/helpers/objects\";\r\nimport { CALENDAR_VIEW } from \"../../calendar-common/constants\";\r\n\r\nconst SETTING_KEYS = {\r\n    Settings: \"calendarSettings\",\r\n};\r\n\r\nconst INITIAL_SETTING = {\r\n    timezoneOffset: 0,\r\n    notificationSoundOn: false,\r\n    actualFilterType: FILTER_TYPE.default,\r\n    view: CALENDAR_VIEW.Configure_View_Default,\r\n    filter: {\r\n        type: FILTER_TYPE.default,\r\n        time: TIME_FILTERS_VALUES.RecentNext,\r\n        volatilities: getKeysOfNotNullValues(VOLATILITY_FILTER_OPTIONS).map(\r\n            (x) => VOLATILITY_FILTER_OPTIONS[x]\r\n        ),\r\n        countries: getMajorCountries(\r\n            getKeysOfNotNullValues(COUNTRY_FILTER_OPTIONS)\r\n        ).map((x) => COUNTRY_FILTER_OPTIONS[x]),\r\n        categories: getKeysOfNotNullValues(CATEGORY_FILTER_OPTIONS).map(\r\n            (x) => CATEGORY_FILTER_OPTIONS[x]\r\n        ),\r\n        dateRange: {\r\n            from: null,\r\n            to: null,\r\n        },\r\n    },\r\n};\r\n\r\nconst BASIC_SETTINGS = {\r\n    timezoneOffset: 0,\r\n    notificationSoundOn: false,\r\n    actualFilterType: FILTER_TYPE.basic,\r\n    view: CALENDAR_VIEW.Configure_View_Basic,\r\n    filter: {\r\n        type: FILTER_TYPE.basic,\r\n        time: TIME_FILTERS_VALUES.RecentNext,\r\n        volatilities: [\r\n            VOLATILITY_FILTER_OPTIONS.Volatility_Medium,\r\n            VOLATILITY_FILTER_OPTIONS.Volatility_High,\r\n        ],\r\n        countries: getBasicCountries(\r\n            getKeysOfNotNullValues(COUNTRY_FILTER_OPTIONS)\r\n        ).map((x) => COUNTRY_FILTER_OPTIONS[x]),\r\n        categories: getKeysOfNotNullValues(CATEGORY_FILTER_OPTIONS).map(\r\n            (x) => CATEGORY_FILTER_OPTIONS[x]\r\n        ),\r\n        dateRange: {\r\n            from: null,\r\n            to: null,\r\n        },\r\n    },\r\n};\r\n\r\nconst INITIAL_EMPTY_SETTING = {\r\n    timezoneOffset: 0,\r\n    notificationSoundOn: false,\r\n    actualFilterType: FILTER_TYPE.custom,\r\n    view: CALENDAR_VIEW.Configure_View_Basic,\r\n    filter: {\r\n        type: null,\r\n        time: null,\r\n        volatilities: [],\r\n        countries: [],\r\n        categories: [],\r\n        dateRange: {\r\n            from: null,\r\n            to: null,\r\n        },\r\n    },\r\n};\r\n\r\nexport { SETTING_KEYS, INITIAL_SETTING, BASIC_SETTINGS, INITIAL_EMPTY_SETTING };\r\n","import { h, Component } from \"preact\";\r\nimport IconFileSearch from \"../../common/components/icons/IconFileSearch\";\r\nimport { RELATED_NEWS_VIEW } from \"../constants/relatedNewsView\";\r\nimport AdaptativeDate from \"../../common/components/AdaptativeDate\";\r\nclass CalendarPosts extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n\r\n    renderItemFetching() {\r\n        return (\r\n            <aside class=\"fxs_entriesList\" id=\"renderItemFetching\">\r\n                <ol>\r\n                    <li>\r\n                        <div class=\"fxs_squareImage fxs_squareImage_s fxs_c_news_fake_image\"></div>\r\n                        <article class=\"fxs_entriesList_article_with_image \">\r\n                            <div class=\"fxs_c_news_fake_line\"></div>\r\n                            <div class=\"fxs_c_news_fake_line\"></div>\r\n                            <div class=\"fxs_c_news_fake_meta\"></div>\r\n                        </article>\r\n                    </li>\r\n                    <li>\r\n                        <div class=\"fxs_squareImage fxs_squareImage_s fxs_c_news_fake_image\"></div>\r\n                        <article class=\"fxs_entriesList_article_with_image \">\r\n                            <div class=\"fxs_c_news_fake_line\"></div>\r\n                            <div class=\"fxs_c_news_fake_line\"></div>\r\n                            <div class=\"fxs_c_news_fake_meta\"></div>\r\n                        </article>\r\n                    </li>\r\n                </ol>\r\n            </aside>\r\n        );\r\n    }\r\n\r\n    renderFetching(view, wrapperClass, RelatedNewsTranslation) {\r\n        return view === RELATED_NEWS_VIEW.View_Grid ? (\r\n            <div>\r\n                <h3 class=\"fxs_headline_small\">{RelatedNewsTranslation}</h3>\r\n                <div class={wrapperClass}>{this.renderItemFetching()}</div>\r\n                <div class={wrapperClass}>{this.renderItemFetching()}</div>\r\n            </div>\r\n        ) : view === RELATED_NEWS_VIEW.View_Half ? (\r\n            <div>\r\n                <h3 class=\"fxs_headline_small\">{RelatedNewsTranslation}</h3>\r\n                {this.renderItemFetching()}\r\n            </div>\r\n        ) : view === RELATED_NEWS_VIEW.View_Mobile ? (\r\n            <div class={wrapperClass}>\r\n                <h3 class=\"fxs_headline_small\">{RelatedNewsTranslation}</h3>\r\n                {this.renderItemFetching()}\r\n            </div>\r\n        ) : (\r\n            <aside class=\"fxs_entriesList\">\r\n                <h3 class=\"fxs_headline_small\">{RelatedNewsTranslation}</h3>\r\n                {this.renderItemFetching()}\r\n            </aside>\r\n        );\r\n    }\r\n\r\n    renderError(view, ErrorTranslation, wrapperClass, RelatedNewsTranslation) {\r\n        return view === RELATED_NEWS_VIEW.View_Grid ? (\r\n            <div class={wrapperClass} id=\"renderError\">\r\n                <h3 class=\"fxs_headline_small\">{RelatedNewsTranslation}</h3>\r\n                <div class=\"fxs_c_news_error_wrapper\">\r\n                    <IconFileSearch />\r\n                    <p class=\"fxs_txt_size_nano\">{ErrorTranslation}</p>\r\n                </div>\r\n            </div>\r\n        ) : view === RELATED_NEWS_VIEW.View_Half ? (\r\n            <div id=\"renderError\">\r\n                <h3 class=\"fxs_headline_small\">{RelatedNewsTranslation}</h3>\r\n                <div class=\"fxs_c_news_error_wrapper\">\r\n                    <IconFileSearch />\r\n                    <p class=\"fxs_txt_size_nano\">{ErrorTranslation}</p>\r\n                </div>\r\n            </div>\r\n        ) : view === RELATED_NEWS_VIEW.View_Mobile ? (\r\n            <div class={wrapperClass} id=\"renderError\">\r\n                <h3 class=\"fxs_headline_small\">{RelatedNewsTranslation}</h3>\r\n                <div class=\"fxs_c_news_error_wrapper\">\r\n                    <IconFileSearch />\r\n                    <p class=\"fxs_txt_size_nano\">{ErrorTranslation}</p>\r\n                </div>\r\n            </div>\r\n        ) : (\r\n            <aside class=\"fxs_entriesList\" id=\"renderError\">\r\n                <h3 class=\"fxs_headline_small\">{RelatedNewsTranslation}</h3>\r\n                <div class=\"fxs_c_news_error_wrapper\">\r\n                    <IconFileSearch />\r\n                    <p class=\"fxs_txt_size_nano\">{ErrorTranslation}</p>\r\n                </div>\r\n            </aside>\r\n        );\r\n    }\r\n\r\n    renderItem(item, ByAuthorTranslation, culture, dateNow, customClassnameDict, customPostUrl) {\r\n        customPostUrl = customPostUrl !== undefined ? customPostUrl.replace(\"{postId}\",item.Id): customPostUrl;\r\n        return (\r\n            item && (\r\n                <li>\r\n                    <div className={`fxs_squareImage ${customClassnameDict['fxs_image'] || ' fxs_squareImage_s'}`}>\r\n                        <img\r\n                            class=\"lazyloaded\"\r\n                            data-src={item.Image.Url_Small}\r\n                            src={item.Image.Url_Small}\r\n                        />\r\n                    </div>\r\n                    <article class=\"fxs_entriesList_article_with_image \">\r\n                        <h3 class={`${customClassnameDict['fxs_entryHeadline'] || ' fxs_headline_tiny'}`}>\r\n                            <a\r\n                                href={customPostUrl || item.Url}\r\n                                title={item.Title}\r\n                                target=\"_blank\"\r\n                            >\r\n                                {item.Title}\r\n                            </a>\r\n                        </h3>\r\n                        <address class=\"fxs_entry_metaInfo\">\r\n                            <span class=\"fxs_article_author\">\r\n                                <span>{ByAuthorTranslation} </span>\r\n                                <span> </span>\r\n                                <span class=\"fxs_txt_dark_4_clr\">\r\n                                    {item.Author.Name}\r\n                                </span>\r\n                            </span>\r\n                            <span> | </span>\r\n                            <time pubdate=\"\" datetime=\"\">\r\n                                <AdaptativeDate\r\n                                    currentDate = {item.PublicationDate}\r\n                                    dateNow = {dateNow}\r\n                                    culture = {culture}\r\n                                ></AdaptativeDate>\r\n                            </time>\r\n                        </address>\r\n                    </article>\r\n                </li>\r\n            )\r\n        );\r\n    }\r\n\r\n    renderNews(\r\n        view,\r\n        wrapperClass,\r\n        posts,\r\n        RelatedNewsTranslation,\r\n        ByAuthorTranslation,\r\n        culture,\r\n        customClassnameDict,\r\n        customPostUrl\r\n    ) {\r\n        customClassnameDict = customClassnameDict || {};\r\n        const dateNow = Date.now();\r\n        return view === RELATED_NEWS_VIEW.View_Half ? (\r\n            <div class={wrapperClass}>\r\n                <h3 className={`${customClassnameDict['fxs_subtitle'] || ' fxs_headline_small'}`}>{RelatedNewsTranslation}</h3>\r\n                <aside class=\"fxs_entriesList\">\r\n                    <ol>\r\n                        {posts &&\r\n                            this.renderItem(\r\n                                posts[0],\r\n                                ByAuthorTranslation,\r\n                                culture,\r\n                                dateNow,\r\n                                customClassnameDict,\r\n                                customPostUrl\r\n                            )}\r\n                        {posts &&\r\n                            this.renderItem(\r\n                                posts[1],\r\n                                ByAuthorTranslation,\r\n                                culture,\r\n                                dateNow,\r\n                                customClassnameDict,\r\n                                customPostUrl\r\n                            )}\r\n                    </ol>\r\n                </aside>\r\n            </div>\r\n        ) : view === RELATED_NEWS_VIEW.View_Grid ? (\r\n            <div>\r\n                <h3 className={`${customClassnameDict['fxs_subtitle'] || ' fxs_headline_small'}`}>{RelatedNewsTranslation}</h3>\r\n                <div>\r\n                    <div class={wrapperClass}>\r\n                        <aside class=\"fxs_entriesList\">\r\n                            <ol>\r\n                                {posts &&\r\n                                    this.renderItem(\r\n                                        posts[0],\r\n                                        ByAuthorTranslation,\r\n                                        culture,\r\n                                        dateNow,\r\n                                        customClassnameDict,\r\n                                        customPostUrl\r\n                                    )}\r\n                                {posts &&\r\n                                    this.renderItem(\r\n                                        posts[1],\r\n                                        ByAuthorTranslation,\r\n                                        culture,\r\n                                        dateNow,\r\n                                        customClassnameDict,\r\n                                        customPostUrl\r\n                                    )}\r\n                            </ol>\r\n                        </aside>\r\n                    </div>\r\n                    <div class={wrapperClass}>\r\n                        <aside class=\"fxs_entriesList\">\r\n                            <ol>\r\n                                {posts &&\r\n                                    this.renderItem(\r\n                                        posts[2],\r\n                                        ByAuthorTranslation,\r\n                                        culture,\r\n                                        dateNow,\r\n                                        customClassnameDict,\r\n                                        customPostUrl\r\n                                    )}\r\n                                {posts &&\r\n                                    this.renderItem(\r\n                                        posts[3],\r\n                                        ByAuthorTranslation,\r\n                                        culture,\r\n                                        dateNow,\r\n                                        customClassnameDict,\r\n                                        customPostUrl\r\n                                    )}\r\n                            </ol>\r\n                        </aside>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        ) : view === RELATED_NEWS_VIEW.View_Mobile ? (\r\n            <aside class={`fxs_entriesList ${wrapperClass}`}>\r\n                <h3 className={`${customClassnameDict['fxs_subtitle'] || ' fxs_headline_small'}`}>{RelatedNewsTranslation}</h3>\r\n                <ol>\r\n                    {posts &&\r\n                        this.renderItem(\r\n                            posts[0],\r\n                            ByAuthorTranslation,\r\n                            culture,\r\n                            dateNow,\r\n                            customClassnameDict,\r\n                            customPostUrl\r\n                        )}\r\n                    {posts &&\r\n                        this.renderItem(\r\n                            posts[1],\r\n                            ByAuthorTranslation,\r\n                            culture,\r\n                            dateNow,\r\n                            customClassnameDict,\r\n                            customPostUrl\r\n                        )}\r\n                </ol>\r\n            </aside>\r\n        ) : (\r\n            <aside class=\"fxs_entriesList\">\r\n                <h3 className={`${customClassnameDict['fxs_subtitle'] || ' fxs_headline_small'}`}>{RelatedNewsTranslation}</h3>\r\n                <ol>\r\n                    {\r\n                    posts && posts.map(\r\n                        (item) =>\r\n                            this.renderItem(item, ByAuthorTranslation, culture, dateNow, customClassnameDict, customPostUrl),\r\n                        ByAuthorTranslation\r\n                    )}\r\n                </ol>\r\n            </aside>\r\n        );\r\n    }\r\n\r\n    renderViewWrapper(view, wrapperClass, children) {\r\n        return view === RELATED_NEWS_VIEW.View_Half ? (\r\n            <div class={wrapperClass}>{children}</div>\r\n        ) : (\r\n            children\r\n        );\r\n    }\r\n\r\n    render({\r\n        posts,\r\n        view,\r\n        wrapperClass,\r\n        isFetching,\r\n        fetchError,\r\n        RelatedNewsTranslation,\r\n        ByAuthorTranslation,\r\n        ErrorTranslation,\r\n        culture,\r\n        customClassnameDict,\r\n        customPostUrl\r\n    }) {\r\n        return isFetching\r\n            ? this.renderViewWrapper(\r\n                  view,\r\n                  wrapperClass,\r\n                  this.renderFetching(\r\n                      view,\r\n                      wrapperClass,\r\n                      RelatedNewsTranslation\r\n                  )\r\n              )\r\n            : fetchError\r\n            ? this.renderViewWrapper(\r\n                  view,\r\n                  wrapperClass,\r\n                  this.renderError(\r\n                      view,\r\n                      ErrorTranslation,\r\n                      wrapperClass,\r\n                      RelatedNewsTranslation\r\n                  )\r\n              )\r\n            : this.renderNews(\r\n                  view,\r\n                  wrapperClass,\r\n                  posts,\r\n                  RelatedNewsTranslation,\r\n                  ByAuthorTranslation,\r\n                  culture,\r\n                  customClassnameDict,\r\n                  customPostUrl\r\n              );\r\n    }\r\n}\r\nexport default CalendarPosts;\r\n","import { Component } from \"preact\";\r\nimport { isMobileOnly } from \"react-device-detect\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport { getSetting } from \"../../../../common/helpers/settingStorageHelpers\";\r\nimport { TIME_FILTERS_VALUES, SETTING_KEYS } from \"../../../constants\";\r\nimport DatePickerFilterMobile from \"../DatePickerFilterMobile\";\r\nimport DatePickerFilterDesktop from \"../DatePickerFilterDesktop\";\r\nimport TimezonePicker from \"./TimezonePicker\";\r\nimport actions from \"../../../actions\";\r\nimport { persistSettings } from \"../../../../calendar-common/helpers/settingsHelper\";\r\n\r\nclass TimeFilter extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.onTimezoneChanged = this.onTimezoneChanged.bind(this);\r\n        this.renderTitle = this.renderTitle.bind(this);\r\n        this.renderOption = this.renderOption.bind(this);\r\n        this.onOptionSelected = this.onOptionSelected.bind(this);\r\n    }\r\n\r\n    componentWillMount() {\r\n        const { timezones } = this.props;\r\n        this.setState({\r\n            timezones: timezones,\r\n        });\r\n    }\r\n\r\n    onTimezoneChanged(timezone) {\r\n        this.props.changeTimezoneAndFetch(timezone);\r\n\r\n        let settings = getSetting(SETTING_KEYS.Settings);\r\n        if (!settings) settings = this.props.defaultSettings;\r\n\r\n        var timezoneOffset = timezone.OffsetValue;\r\n        persistSettings({ ...settings, timezoneOffset });\r\n    }\r\n    onOptionSelected(option) {\r\n        this.props.onTimeFilterChanged(option);\r\n    }\r\n\r\n    renderTitle(selectedOption, isOpen, upButton, downButton) {\r\n        return (\r\n            <span>\r\n                <span class=\"fxs_inner\">\r\n                    {this.props.translate(selectedOption)}\r\n                </span>\r\n                {isOpen ? upButton : downButton}\r\n            </span>\r\n        );\r\n    }\r\n\r\n    renderOption(option) {\r\n        return <span>{this.props.translate(option)}</span>;\r\n    }\r\n\r\n    render({\r\n        time,\r\n        dateRange,\r\n        onTimeFilterChanged,\r\n        onDateRangeFilterChanged,\r\n        onChangeCustomFilter,\r\n        applyFilter,\r\n        showDatePicker = true,\r\n        getCalendarTimeOptionGtmId,\r\n        getCalendarTimeOptionGa4Id,\r\n        getCalendarButtonGtmId,\r\n        getCalendarButtonGa4Id,\r\n        getGa4Name,\r\n        settings,\r\n    }) {\r\n        const values = Object.values(TIME_FILTERS_VALUES);\r\n        const buttonsValues = values;\r\n\r\n        return (\r\n            <div class=\"fxs_c_time-filters\">\r\n                {showDatePicker &&\r\n                    (isMobileOnly ? (\r\n                        <div class=\"fxs_c_time_wrapper\">\r\n                            <DatePickerFilterMobile\r\n                                dateRange={dateRange}\r\n                                onDateRangeFilterChanged={\r\n                                    onDateRangeFilterChanged\r\n                                }\r\n                                applyFilter={applyFilter}\r\n                                getButtonGtmId={getCalendarButtonGtmId}\r\n                                getButtonGa4Id={getCalendarButtonGa4Id}\r\n                                getContentGtmId={getCalendarTimeOptionGtmId}\r\n                                getContentGa4Id={getCalendarTimeOptionGa4Id}\r\n                                getGa4Name={getGa4Name}\r\n                                buttonValues={buttonsValues}\r\n                                showHighlighted={true}\r\n                                time={time}\r\n                                onTimeFilterChanged={onTimeFilterChanged}\r\n                                onChangeCustomFilter={onChangeCustomFilter}\r\n                            />\r\n                            <TimezonePicker\r\n                                onTimezoneChanged={this.onTimezoneChanged}\r\n                                currentTimezone={settings.timezoneOffset}\r\n                            />\r\n                        </div>\r\n                    ) : (\r\n                        <DatePickerFilterDesktop\r\n                            dateRange={dateRange}\r\n                            onDateRangeFilterChanged={onDateRangeFilterChanged}\r\n                            applyFilter={applyFilter}\r\n                            getButtonGtmId={getCalendarButtonGtmId}\r\n                            getButtonGa4Id={getCalendarButtonGa4Id}\r\n                            getContentGtmId={getCalendarTimeOptionGtmId}\r\n                            getContentGa4Id={getCalendarTimeOptionGa4Id}\r\n                            getGa4Name={getGa4Name}\r\n                            buttonValues={buttonsValues}\r\n                            showHighlighted={true}\r\n                            time={time}\r\n                            onTimeFilterChanged={onTimeFilterChanged}\r\n                            onChangeCustomFilter={onChangeCustomFilter}\r\n                        />\r\n                    ))}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations('settings,defaultSettings', actions)(TimeFilter);\r\n","import { createCustomStore } from \"../common/helpers/storeHelpers\";\r\nimport {\r\n    SETTING_KEYS,\r\n    INITIAL_SETTING,\r\n    BASIC_SETTINGS,\r\n    TIME_FORMAT_OPTIONS,\r\n    INITIAL_EMPTY_SETTING,\r\n    FILTER_TYPE,\r\n} from \"./constants\";\r\nimport { getSetting } from \"../common/helpers/settingStorageHelpers\";\r\nimport { translations } from \"./actions/localizationActions\";\r\nimport { getDateRange } from \"./helpers/filter/dateRange\";\r\nimport { stat } from \"copy-webpack-plugin/dist/utils/promisify\";\r\n\r\nconst INITIAL_STATE = {\r\n    config: {\r\n        culture: \"en\",\r\n        calendarApiUrl: CALENDAR_API_URL,\r\n        calendarApiVersion: \"v1\",\r\n        oneSignalUrl: \"https://cdn.onesignal.com/sdks/OneSignalSDK.js\",\r\n        oneSignalDoc:\r\n            \"https://documentation.onesignal.com/docs/troubleshooting-web-push#clearing-your-cache-and-resetting-push-permissions\",\r\n        timezoneOffset: null,\r\n        countryCode: [],\r\n        dashboardUrl: null,\r\n        notificationSoundUrl:\r\n            \"https://staticcontent.fxstreet.com/babel-fxstreet/fxstreet/_css/sounds/update.mp3\",\r\n        tracking: false,\r\n        tradeNowUrl: null,\r\n        tradeNowRange: 0,\r\n        tradeNowFnc: null,\r\n        getSpeechScoreFnc: null,\r\n        isLocked: null,\r\n        notificationsHelper: null,\r\n        oneSignalAppId: null,\r\n        initOneSignal: null,\r\n        safariWebId: null,\r\n        timezoneHelper: null,\r\n        settingsOpenCloseEventName: \"calendar-settings-openclose\",\r\n        subscriptionChangedEventName: \"subscription-changed\",\r\n        calendarUpdateClockEventName: null,\r\n        maxMonths: 3,\r\n        fromYear: 2007,\r\n        hasPremium: false,\r\n        premiumUrl: \"\",\r\n        hasPosts: false,\r\n        enableSpeechScore: false,\r\n        postApiUrl: POST_API_URL,\r\n        filterType: \"filter\",\r\n        productFeature: \"NewsFeed\",\r\n        page: 1,\r\n        take: 4,\r\n        customPostUrl: \"\",\r\n        sendDataFnc: null,\r\n    },\r\n    eventDates: null,\r\n    eventDetails: {},\r\n    eventDateDetails: {},\r\n    eventNotifications: [],\r\n    notificationsSupported: true,\r\n    eventDateDetailShown: null,\r\n    eventDateDetailMinimalShown: null,\r\n    eventDateMenuShown: null,\r\n    eventNotifyShown: false,\r\n    isFetching: true,\r\n    eventDatesFetchError: false,\r\n    translations: null,\r\n    showConnectionError: false,\r\n    settings: {},\r\n    basicSettings: {},\r\n    defaultSettings: {},\r\n    showAdvancedFilter: false,\r\n    showMobileFilter: false,\r\n    pushConnectionStartDateUtc: null,\r\n    showModalLegend: false,\r\n    timezones: [],\r\n    currentTimezone: null,\r\n    currentTime: null,\r\n    automaticallyTimeZone: null,\r\n    timeFormat: TIME_FORMAT_OPTIONS.TwentyFourHours,\r\n    showSuccessMessage: false,\r\n    relatedNews: {},\r\n    hasDefautTimezones: false,\r\n    showBlockedPopup: false,\r\n};\r\n\r\nconst convertCountryCode = (input) => {\r\n    const result = input.split(\",\");\r\n    return result;\r\n};\r\n\r\nconst convertCulture = (input) => {\r\n    const result =\r\n        input && Object.keys(translations).includes(input.toLowerCase())\r\n            ? input.toLowerCase()\r\n            : \"en\";\r\n    return result;\r\n};\r\n\r\nconst setSpeechScoreSettings = (state) => {\r\n    const isLockedFnc = state.config?.isLocked;\r\n\r\n    if (isLockedFnc && typeof isLockedFnc === \"function\") {\r\n        state.config.enableSpeechScore = true;\r\n    }\r\n};\r\n\r\nconst settingsMapper = (state) => {\r\n    const defaultSettings = {\r\n        ...INITIAL_SETTING,\r\n    };\r\n\r\n    const basicSettings = {\r\n        ...BASIC_SETTINGS,\r\n    };\r\n\r\n    setSettings(state, defaultSettings, true);\r\n    setSettings(state, basicSettings, false);\r\n\r\n    setSpeechScoreSettings(state);\r\n\r\n    if (state.config.premiumUrl != undefined && state.config.premiumUrl != \"\")\r\n        state.config.hasPremium = true;\r\n\r\n    let resultState = {\r\n        ...state,\r\n        defaultSettings,\r\n        basicSettings,\r\n    };\r\n\r\n    let settings = {};\r\n    let storageSettings = getSetting(SETTING_KEYS.Settings);\r\n\r\n    if (storageSettings) {\r\n        switch (storageSettings.actualFilterType) {\r\n            case FILTER_TYPE.custom:\r\n                settings = { ...INITIAL_EMPTY_SETTING, ...storageSettings };\r\n                settings.filter = {\r\n                    ...INITIAL_EMPTY_SETTING.filter,\r\n                    ...storageSettings.filter,\r\n                };\r\n                break;\r\n\r\n            case FILTER_TYPE.basic:\r\n                settings = basicSettings;\r\n                break;\r\n\r\n            default:\r\n                settings = defaultSettings;\r\n                break;\r\n        }\r\n    } else {\r\n        settings = defaultSettings;\r\n    }\r\n\r\n    resultState = {\r\n        ...resultState,\r\n        settings,\r\n    };\r\n\r\n    return resultState;\r\n};\r\n\r\nconst createStore = (props) => {\r\n    const result = createCustomStore(\r\n        props,\r\n        INITIAL_STATE,\r\n        {\r\n            countryCode: convertCountryCode,\r\n            culture: convertCulture,\r\n        },\r\n        settingsMapper\r\n    );\r\n\r\n    return result;\r\n};\r\n\r\nfunction setSettings(state, settings, isDefaultSettings) {\r\n    if (state.config.timezoneOffset !== undefined) {\r\n        settings.timezoneOffset = state.config.timezoneOffset;\r\n        settings.filter.dateRange = getDateRange(\r\n            { time: settings.filter.time },\r\n            settings.timezoneOffset\r\n        );\r\n    }\r\n\r\n    if (\r\n        state.config.countryCode &&\r\n        state.config.countryCode.length > 0 &&\r\n        isDefaultSettings\r\n    )\r\n        settings.filter.countries = state.config.countryCode;\r\n}\r\n\r\nexport { createStore };\r\n","import { h, Component } from 'preact'\r\nimport { connectWithTranslations } from '../../common/helpers/translationsHelpers'\r\n\r\nclass EventListHeaderMobile extends Component {\r\n    render({ translate }) {\r\n        return (\r\n            <thead class=\"fxs_c_header\">\r\n                <tr>\r\n                    <th class=\"fxs_c_item \">{translate('HeaderTime')}</th>\r\n                    <th class=\"fxs_c_item  fxs_c_item_event_name\">{translate('HeaderEvent')}</th>\r\n                    <th class=\"fxs_c_item \"></th>\r\n                    <th class=\"fxs_c_item fxs_c_actual\">{translate('HeaderActual')}</th>\r\n                    <th class=\"fxs_c_item \"></th>\r\n                </tr>\r\n            </thead>\r\n        )\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations()(EventListHeaderMobile)\r\n","import { h } from \"preact\";\r\nimport FormattedDate from \"../../../common/components/FormattedDate\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport { isMobileOnly } from \"react-device-detect\";\r\nimport { CALENDAR_VIEW } from \"../../../calendar-common/constants\";\r\n\r\nconst PeriodRow = connectWithTranslations(\"settings\")(\r\n    ({ settings, date, translate }) =>\r\n        isMobileOnly ? (\r\n            <tr>\r\n                <td colspan=\"5\" class=\"fxs_c_period fxs_c_period_fixed\">\r\n                    <FormattedDate date={date} format=\"LLLL_noTimeYear\" />\r\n                </td>\r\n            </tr>\r\n        ) : (\r\n            <tr>\r\n                <td colspan={settings.view == CALENDAR_VIEW.Configure_View_Basic ? \"10\" : \"11\"} class=\"fxs_c_period\">\r\n                    <FormattedDate date={date} format=\"LLLL_noTimeYear\" />\r\n                </td>\r\n            </tr>\r\n        )\r\n);\r\n\r\nexport default PeriodRow;\r\n","import { h, Component } from \"preact\";\r\nimport actions from \"../../actions\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport { isPast } from \"../../../common/helpers/dateHelpers\";\r\nimport EventTime from \"./EventTime\";\r\nimport { GTM_ID, GA4EVENT } from \"../../constants\";\r\nimport renderNumerical from \"../../helpers/render\";\r\nimport IconBellSolid from \"../../../common/components/icons/IconBellSolid\";\r\nimport IconBell from \"../../../common/components/icons/IconBell\";\r\nimport IconLocked from \"../../../common/components/icons/IconLocked\";\r\nimport { enabledCalendarNotifications } from \"../../../calendar-common/helpers/calendar\";\r\nimport SpeechScore from \"./SpeechScore\";\r\nimport { CALENDAR_VIEW } from \"../../../calendar-common/constants\";\r\nimport eventTimeCheck from \"../../helpers/eventTimeCheck\";\r\nimport { getSpeechScore } from \"../../helpers/getSpeechScore\";\r\n\r\nclass EventRowDataMobile extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            isPastEvent: isPast(props.event.date, props.settings.timezoneOffset),\r\n        };\r\n    }\r\n    renderTradeNow(config, eventdate) {\r\n        try {\r\n            return (\r\n                <span>\r\n                    &nbsp;\r\n                    <span\r\n                        dangerouslySetInnerHTML={{\r\n                            __html: config.tradeNowFnc(eventdate),\r\n                        }}\r\n                    ></span>\r\n                </span>\r\n            );\r\n        } catch (ex) {\r\n            console.log(\"tradNowFunc\", ex);\r\n        }\r\n    }\r\n\r\n    getOneColumnLabelText(isSpeech, isReport, isInProgress) {\r\n        return isSpeech\r\n            ? isInProgress\r\n                ? \"InProgress\"\r\n                : \"RowSpeech\"\r\n            : isReport\r\n            ? \"RowReport\"\r\n            : \"RowAllDay\";\r\n    }\r\n\r\n    renderOneColumnData(isSpeech, labelText, translate, speechScore, isInProgress) {\r\n        if (speechScore?.isLocked) {\r\n            return (\r\n                <span className=\"fxs_c_label fxs_c_label_info_background fxs_c_label_locked\">\r\n                    <span class=\"fxs_c_label_locked_icon\">\r\n                        <IconLocked />\r\n                    </span>\r\n                </span>\r\n            );\r\n        }\r\n\r\n        if (!isSpeech || !speechScore) {\r\n            return (\r\n                <span\r\n                    className={`fxs_c_label ${\r\n                        isInProgress\r\n                            ? \"fxs_c_label_info_base\"\r\n                            : \"fxs_c_label_info_background\"\r\n                    }`}\r\n                >\r\n                    <span>{translate(labelText)}</span>\r\n                </span>\r\n            );\r\n        }\r\n\r\n        return (\r\n            <SpeechScore\r\n                speechScore={speechScore}\r\n                forceUpperCase={true}\r\n                hideScoreNumber={true}\r\n            />\r\n        );\r\n    }\r\n\r\n    render(\r\n        {\r\n            event,\r\n            translate,\r\n            showDetailsClick,\r\n            renderName,\r\n            config,\r\n            isSubscribed,\r\n            subscribeToEvent,\r\n            unsubscribeToEvent,\r\n            eventTimeReached,\r\n        },\r\n        { isPastEvent }\r\n    ) {\r\n        const {\r\n            id,\r\n            date,\r\n            countryCode,\r\n            currencyCode,\r\n            speech,\r\n            isSpeech,\r\n            isReport,\r\n            isAllDay,\r\n            isTentative,\r\n            isPreliminary,\r\n            actual,\r\n            volatility,\r\n            potency,\r\n            unit,\r\n            isBetterThanExpected,\r\n            eventId,\r\n            isScoreTrackable,\r\n        } = event;\r\n\r\n        let speechScore = null;\r\n\r\n        const hasScore = speech?.score ?? false;\r\n        const hasAverageScore = speech?.averageScore ?? false;\r\n\r\n        const isSpeechScoreEnabled = config.enableSpeechScore;\r\n        const isInProgress =\r\n            !hasScore && isScoreTrackable && eventTimeReached && isSpeechScoreEnabled;\r\n\r\n        const prefix = unit !== \"%\" ? unit : null;\r\n        const percentage = unit === \"%\" ? \"%\" : null;\r\n\r\n        const isOneColumn = isSpeech || isReport || isAllDay;\r\n        const showEventTime = !isTentative || actual !== null;\r\n\r\n        if (isSpeech && isSpeechScoreEnabled && (hasScore || hasAverageScore)) {\r\n            speechScore = getSpeechScore(event);\r\n            if (speechScore) speechScore.isLocked = config.isLocked();\r\n        }\r\n\r\n        return (\r\n            <tr\r\n                data-event-date-id={id}\r\n                class={`fxs_c_row ${isPastEvent ? \"fxs_c_now\" : \"\"}`}\r\n                onClick={showDetailsClick}\r\n                data-gtmid={config.tracking && GTM_ID.OPEN_OVERVIEW(id)}\r\n                data-ga4event-clk-name={\r\n                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                }\r\n                data-ga4event-element={config.tracking && GA4EVENT.ELEMENTS.OPEN_OVERVIEW}\r\n                data-ga4event-eventdateid={id}\r\n            >\r\n                <td class=\"fxs_c_item fxs_c_time\">\r\n                    {showEventTime ? (\r\n                        <EventTime\r\n                            date={date}\r\n                            onEventHappened={() => this.setState({ isPastEvent: true })}\r\n                            hasActual={actual !== null}\r\n                        />\r\n                    ) : (\r\n                        translate(\"RowNotAvailable\")\r\n                    )}\r\n                    <br />\r\n                    <span className=\"fxs_nowrap\">\r\n                        <span\r\n                            class={`fxs_flag ${\r\n                                countryCode ? \"fxs_\" + countryCode.toLowerCase() : \"\"\r\n                            }`}\r\n                        ></span>\r\n                        <strong>{currencyCode}</strong>\r\n                    </span>\r\n                </td>\r\n                <td class=\"fxs_c_item fxs_c_name\">\r\n                    <span>{renderName(event)}</span>\r\n                    {isPreliminary && (\r\n                        <span class=\"fxs_c_preliminary\">\r\n                            {\" \"}\r\n                            {translate(\"RowPreliminaryAbbreviation\")}{\" \"}\r\n                        </span>\r\n                    )}\r\n                    {config.tradeNowFnc !== null && this.renderTradeNow(config, event)}\r\n                </td>\r\n                <td class=\"fxs_c_item fxs_c_impact\">\r\n                    <span\r\n                        class={`fxs_c_impact-icon ${\r\n                            volatility\r\n                                ? \"fxs_c_impact-\" + volatility.toLowerCase()\r\n                                : \"fxs_c_impact-none\"\r\n                        }`}\r\n                    ></span>\r\n                </td>\r\n                {isOneColumn && (\r\n                    <td class=\"fxs_c_item fxs_c_type\">\r\n                        {this.renderOneColumnData(\r\n                            isSpeech,\r\n                            this.getOneColumnLabelText(isSpeech, isReport, isInProgress),\r\n                            translate,\r\n                            speechScore,\r\n                            isInProgress\r\n                        )}\r\n                    </td>\r\n                )}\r\n                {!isOneColumn && (\r\n                    <td class=\"fxs_c_item fxs_c_actual\">\r\n                        {\r\n                            <strong\r\n                                class={\r\n                                    typeof isBetterThanExpected === \"boolean\"\r\n                                        ? isBetterThanExpected\r\n                                            ? \"fxs_c_positive\"\r\n                                            : \"fxs_c_negative\"\r\n                                        : \"\"\r\n                                }\r\n                            >\r\n                                {renderNumerical(\r\n                                    actual,\r\n                                    prefix,\r\n                                    percentage,\r\n                                    potency,\r\n                                    translate\r\n                                )}\r\n                            </strong>\r\n                        }\r\n                    </td>\r\n                )}\r\n                <td\r\n                    class={`fxs_c_item fxs_c_notify ${\r\n                        isSubscribed && enabledCalendarNotifications(config)\r\n                            ? \"fxs_c_notify_active\"\r\n                            : \"\"\r\n                    }`}\r\n                    onClick={(e) => {\r\n                        e.stopPropagation();\r\n                        if (isSubscribed) unsubscribeToEvent(eventId);\r\n                        else {\r\n                            subscribeToEvent(eventId);\r\n                        }\r\n                    }}\r\n                >\r\n                    {isSubscribed && enabledCalendarNotifications(config) ? (\r\n                        <IconBellSolid />\r\n                    ) : (\r\n                        <IconBell />\r\n                    )}\r\n                </td>\r\n            </tr>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"config,settings,eventDateDetailMinimalShown\",\r\n    actions\r\n)(eventTimeCheck(EventRowDataMobile));\r\n","import { h, Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport actions from \"../../actions\";\r\nimport FormattedDate from \"../../../common/components/FormattedDate\";\r\nimport { PERIOD_TYPE_VALUES } from \"../../constants\";\r\nimport EventRowDataDesktop from \"./EventRowDataDesktop\";\r\nimport EventRowDataMobile from \"./EventRowDataMobile\";\r\nimport { isMobileOnly } from \"react-device-detect\";\r\nimport { PureComponent } from \"preact/compat\";\r\n\r\nclass EventRowData extends PureComponent {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.showDetails = this.showDetails.bind(this);\r\n        this.showMinimalDetails = this.showMinimalDetails.bind(this);\r\n        this.fetchDetails = this.fetchDetails.bind(this);\r\n        this.renderName = this.renderName.bind(this);\r\n    }\r\n\r\n    fetchDetails() {\r\n        const {\r\n            event: { id },\r\n            fetchEventDateDetails,\r\n        } = this.props;\r\n\r\n        fetchEventDateDetails(id);\r\n    }\r\n\r\n    renderName(eventDate) {\r\n        let result = <span>{eventDate.name}</span>;\r\n        if (eventDate.periodType && eventDate.periodDateUtc) {\r\n            let periodText = \"\";\r\n            const translationKey = PERIOD_TYPE_VALUES[eventDate.periodType];\r\n            switch (eventDate.periodType) {\r\n                case \"DAY\":\r\n                case \"MONTH\":\r\n                    if (translationKey) {\r\n                        const format = this.props.translate(translationKey);\r\n                        periodText = (\r\n                            <FormattedDate\r\n                                date={eventDate.periodDateUtc}\r\n                                format={format}\r\n                            />\r\n                        );\r\n                    }\r\n                    break;\r\n                case \"QUARTER\":\r\n                    const quarterNumber =\r\n                        Math.floor(eventDate.periodDateUtc.getMonth() / 3) + 1;\r\n                    periodText = this.props.translate(\"Period_QuarterFormat\", [\r\n                        quarterNumber,\r\n                    ]);\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n\r\n            if (periodText && periodText !== \"\") {\r\n                result = (\r\n                    <span>\r\n                        <span>{eventDate.name}</span>\r\n                        <span> (</span>\r\n                        <span>{periodText}</span>\r\n                        <span>)</span>\r\n                    </span>\r\n                );\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    showDetails() {\r\n        const {\r\n            event: { id },\r\n            showEventDateDetails,\r\n        } = this.props;\r\n        showEventDateDetails(id);\r\n        this.fetchDetails();\r\n    }\r\n\r\n    showMinimalDetails() {\r\n        const {\r\n            event: { id },\r\n            showEventDateMinimalDetails,\r\n        } = this.props;\r\n        showEventDateMinimalDetails(id);\r\n        this.fetchDetails();\r\n    }\r\n\r\n    render({ event, onClickDetails, isSubscribed, canBeSubscribed }) {\r\n        const click = onClickDetails || this.showDetails;\r\n        const clickMinimal = onClickDetails || this.showMinimalDetails;\r\n\r\n        return isMobileOnly ? (\r\n            <EventRowDataMobile\r\n                event={event}\r\n                canBeSubscribed={canBeSubscribed}\r\n                isSubscribed={isSubscribed}\r\n                showDetailsClick={clickMinimal}\r\n                renderName={this.renderName}\r\n            />\r\n        ) : (\r\n            <EventRowDataDesktop\r\n                event={event}\r\n                canBeSubscribed={canBeSubscribed}\r\n                isSubscribed={isSubscribed}\r\n                showDetailsClick={click}\r\n                renderName={this.renderName}\r\n            />\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\"settings,config\", actions)(EventRowData);\r\n","import { h, Component } from \"preact\";\r\nimport { isSameDay } from \"date-fns\";\r\nimport EventListHeaderDesktop from \"./EventListHeaderDesktop\";\r\nimport EventListHeaderMobile from \"./EventListHeaderMobile\";\r\nimport actions from \"../actions\";\r\nimport NoDataWidgetError from \"../../common/components/NoDataWidgetError\";\r\nimport Spinner from \"../../common/components/Spinner\";\r\nimport WidgetError from \"../../common/components/WidgetError\";\r\nimport { isMobileOnly } from \"react-device-detect\";\r\nimport PeriodRow from \"./rows/PeriodRow\";\r\nimport EventRowData from \"./rows/EventRowData\";\r\nimport EventRowDetailDesktop from \"./rows/EventRowDetailDesktop\";\r\nimport EventRowDetailMobile from \"./rows/EventRowDetailMobile\";\r\nimport EventDetailModal from \"./modal/EventDetailModal\";\r\nimport EventNotifyModal from \"./modal/EventNotifyModal\";\r\nimport { connectWithTranslations } from \"../../common/helpers/translationsHelpers\";\r\nimport {\r\n    persistSettings,\r\n    getSettingsWithNoFilter,\r\n} from \"../../calendar-common/helpers/settingsHelper\";\r\n\r\nclass EventList extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.buildRows = this.buildRows.bind(this);\r\n    }\r\n    haveDifferentDays(e1, e2) {\r\n        const result = !isSameDay(e1.date, e2.date);\r\n        return result;\r\n    }\r\n    initNotificationSetting() {\r\n        let setting = getSettingsWithNoFilter();\r\n\r\n        if (setting && !setting.hasOwnProperty(\"eventNotifyShown\"))\r\n            persistSettings({\r\n                eventNotifyShown: true,\r\n            });\r\n    }\r\n\r\n    getNotificationSetting() {\r\n        let settings = getSettingsWithNoFilter();\r\n        if (settings)\r\n            return settings.eventNotifyShown;\r\n\r\n        return null;\r\n    }\r\n\r\n    componentDidMount() {\r\n        this.initNotificationSetting();\r\n    }\r\n\r\n    buildRows(\r\n        eventDates,\r\n        isFetching,\r\n        eventDatesFetchError,\r\n        eventNotifications\r\n    ) {\r\n        let result = [];\r\n\r\n        if (isFetching) {\r\n            result.push(this.createElementWrapper(<Spinner />));\r\n        } else {\r\n            if (eventDatesFetchError) {\r\n                result.push(\r\n                    this.createElementWrapper(\r\n                        <WidgetError\r\n                            message={\r\n                                <p>\r\n                                    {this.props.translate(\r\n                                        \"WidgetErrorMessageLine1\"\r\n                                    )}\r\n                                    <br />\r\n                                    {this.props.translate(\r\n                                        \"WidgetErrorMessageLine2\"\r\n                                    )}\r\n                                </p>\r\n                            }\r\n                        />\r\n                    )\r\n                );\r\n            } else {\r\n                if (eventDates && eventDates.length > 0) {\r\n                    for (let i = 0; i < eventDates.length; i++) {\r\n                        const prevEvent = i > 0 ? eventDates[i - 1] : null;\r\n                        const event = eventDates[i];\r\n                        if (\r\n                            !prevEvent ||\r\n                            this.haveDifferentDays(prevEvent, event)\r\n                        ) {\r\n                            const periodRow = (\r\n                                <PeriodRow\r\n                                    key={event.date.toISOString()}\r\n                                    date={event.date}\r\n                                />\r\n                            );\r\n                            result.push(periodRow);\r\n                        }\r\n\r\n                        const { notificationsSupported } = this.props;\r\n                        const canBeSubscribed =\r\n                            notificationsSupported && !event.isAllDay;\r\n                        const isSubscribed =\r\n                            eventNotifications &&\r\n                            eventNotifications.includes(event.eventId);\r\n                        const eventRow = (\r\n                            <EventRowData\r\n                                key={event.id + \"_eventrowdata\"}\r\n                                event={event}\r\n                                canBeSubscribed={canBeSubscribed}\r\n                                isSubscribed={isSubscribed}\r\n                            />\r\n                        );\r\n                        result.push(eventRow);\r\n\r\n                        if (isMobileOnly) {\r\n                            const EventRowDetailMobileItem = (\r\n                                <EventRowDetailMobile\r\n                                    key={event.id + \"_EventRowDetailMobile\"}\r\n                                    event={event}\r\n                                    canBeSubscribed={canBeSubscribed}\r\n                                    isSubscribed={isSubscribed}\r\n                                />\r\n                            );\r\n                            result.push(EventRowDetailMobileItem);\r\n                        } else {\r\n                            const EventRowDetailDesktopItem = (\r\n                                <EventRowDetailDesktop\r\n                                    key={event.id + \"_EventRowDetailDesktop\"}\r\n                                    event={event}\r\n                                    canBeSubscribed={canBeSubscribed}\r\n                                    isSubscribed={isSubscribed}\r\n                                />\r\n                            );\r\n                            result.push(EventRowDetailDesktopItem);\r\n                        }\r\n                    }\r\n                    if (isMobileOnly) {\r\n                        const eventModalDetail = <EventDetailModal />;\r\n                        result.push(eventModalDetail);\r\n                    }\r\n                } else {\r\n                    result.push(\r\n                        this.createElementWrapper(\r\n                            <NoDataWidgetError\r\n                                message={\r\n                                    <p>\r\n                                        {this.props.translate(\r\n                                            \"NoDataWidgetErrorMessageLine1\"\r\n                                        )}\r\n                                        <br />\r\n                                        {this.props.translate(\r\n                                            \"NoDataWidgetErrorMessageLine2\"\r\n                                        )}\r\n                                    </p>\r\n                                }\r\n                            />\r\n                        )\r\n                    );\r\n                }\r\n            }\r\n        }\r\n        return result;\r\n    }\r\n\r\n    createElementWrapper(children) {\r\n        if (isMobileOnly)\r\n            return (\r\n                <tr>\r\n                    <td colSpan=\"5\">{children}</td>\r\n                </tr>\r\n            );\r\n        else\r\n            return (\r\n                <tr>\r\n                    <td colSpan=\"11\">{children}</td>\r\n                </tr>\r\n            );\r\n    }\r\n\r\n    render({\r\n        eventDates,\r\n        isFetching,\r\n        eventDatesFetchError,\r\n        eventNotifications,\r\n        eventNotifyShown,\r\n        showEventNotifyModal,\r\n    }) {\r\n        return isMobileOnly ? (\r\n            <table class=\"fxs_c_table\">\r\n                <EventListHeaderMobile />\r\n                <tbody>\r\n                    {this.buildRows(\r\n                        eventDates,\r\n                        isFetching,\r\n                        eventDatesFetchError,\r\n                        eventNotifications\r\n                    )}\r\n                </tbody>\r\n            </table>\r\n        ) : (\r\n            <table cellSpacing=\"0\" class=\"fxs_c_table\">\r\n                <EventListHeaderDesktop />\r\n                <tbody>\r\n                    {this.buildRows(\r\n                        eventDates,\r\n                        isFetching,\r\n                        eventDatesFetchError,\r\n                        eventNotifications\r\n                    )}\r\n                </tbody>\r\n            </table>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"eventDates, eventNotifications, isFetching, eventDatesFetchError, config, notificationsSupported, eventNotifyShown\",\r\n    actions\r\n)(EventList);\r\n","import { h, Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport IconTimes from \"../../../common/components/icons/IconTimes\";\r\nimport IconVolumeMute from \"../../../common/components/icons/IconVolumeMute\";\r\nimport IconCogSolid from \"../../../common/components/icons/IconCogSolid\";\r\n\r\nimport actions from \"../../actions\";\r\n\r\nclass ModalLegend extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n\r\n    renderColorCodes(translate) {\r\n        return (\r\n            <p class=\"fxs_entryPlain_txt_small\">\r\n                <span class=\"fxs_half\">\r\n                    {translate(\"LegendColorCodeGreen\", [\r\n                        (x) => <strong class=\"fxs_green_txt\">{x}</strong>,\r\n                    ])}\r\n                </span>\r\n                <span class=\"fxs_half\">\r\n                    {translate(\"LegendColorCodeRed\", [\r\n                        (x) => <strong class=\"fxs_red_txt\">{x}</strong>,\r\n                    ])}{\" \"}\r\n                </span>\r\n            </p>\r\n        );\r\n    }\r\n\r\n    renderAbbreviations(translate) {\r\n        return (\r\n            <div>\r\n                <h2 class=\"fxs_headline_small\">\r\n                    {translate(\"LegendAbbreviations\")}\r\n                </h2>\r\n                <p class=\"fxs_entryPlain_txt_small\">\r\n                    <span style=\"display: flex; justify-content: space-between; width:100%;\">\r\n                        {translate(\"LegendAbbreviationsMoM\", [\r\n                            (x) => <strong>{x}</strong>,\r\n                        ])}\r\n\r\n                        {translate(\"LegendAbbreviationsYoY\", [\r\n                            (x) => <strong>{x}</strong>,\r\n                        ])}\r\n\r\n                        {translate(\"LegendAbbreviationsQoQ\", [\r\n                            (x) => <strong>{x}</strong>,\r\n                        ])}\r\n                    </span>\r\n                </p>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    render({ translate, toggleModalLegend }) {\r\n        return (\r\n            <div class=\"fxs_c_modal-backdrop\">\r\n                <div class=\"fxs_c_modal-content\">\r\n                    <button\r\n                        type=\"button\"\r\n                        class=\"fxs_fRight fxs_btn fxs_btn_icon fxs_modal_close\"\r\n                        onClick={toggleModalLegend}\r\n                    >\r\n                        <IconTimes />\r\n                    </button>\r\n                    <h2 class=\"fxs_headline_small\">\r\n                        {translate(\"AdvancedFilterImpactLabel\")}\r\n                    </h2>\r\n                    <div class=\"fxs_quarters_flex\">\r\n                        <div class=\"fxs_quarter\">\r\n                            <span class=\"fxs_c_impact-icon fxs_c_impact-high\"></span>\r\n                            <strong>{translate(\"Volatility_High\")}</strong>\r\n                        </div>\r\n                        <div class=\"fxs_quarter\">\r\n                            <span class=\"fxs_c_impact-icon fxs_c_impact-medium\"></span>\r\n                            <strong>{translate(\"Volatility_Medium\")}</strong>\r\n                        </div>\r\n                        <div class=\"fxs_quarter\">\r\n                            <span class=\"fxs_c_impact-icon fxs_c_impact-low\"></span>\r\n                            <strong>{translate(\"Volatility_Low\")}</strong>\r\n                        </div>\r\n                        <div class=\"fxs_quarter\">\r\n                            <span class=\"fxs_c_impact-icon fxs_c_impact-none\"></span>\r\n                            <strong>{translate(\"Volatility_None\")}</strong>\r\n                        </div>\r\n                    </div>\r\n                    <h2 class=\"fxs_headline_small\">\r\n                        {translate(\"LegendDeviation\")}\r\n                    </h2>\r\n                    <p class=\"fxs_entryPlain_txt_small\">\r\n                        {translate(\"LegendDeviationDescription\")}\r\n                    </p>\r\n                    <h2 class=\"fxs_headline_small\">\r\n                        {translate(\"LegendColorCode\")}\r\n                    </h2>\r\n                    {this.renderColorCodes(translate)}\r\n                    {translate(\"ShowPeriodLegend\") &&\r\n                        this.renderAbbreviations(translate)}\r\n                    <h2 class=\"fxs_headline_small\">\r\n                        {translate(\"SoundAlert\")}\r\n                        <IconVolumeMute />\r\n                    </h2>\r\n                    <p class=\"fxs_entryPlain_txt_small\">\r\n                        {translate(\"SoundAlertDescription\")}\r\n                        <IconCogSolid />.\r\n                    </p>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\nexport default connectWithTranslations(\"\", actions)(ModalLegend);\r\n","import { h, Component } from \"preact\";\r\nimport EventList from \"./EventList\";\r\nimport EventListFilter from \"./filters/EventListFilter\";\r\nimport actions from \"../actions\";\r\nimport { connectWithTranslations } from \"../../common/helpers/translationsHelpers\";\r\nimport Modal from \"../../common/components/Modal\";\r\nimport ModalLegend from \"./modal/ModalLegend\";\r\nimport { mustOneSignalInit } from \"../../calendar-common/helpers/oneSignalHelper\";\r\nimport BlockedPopup from \"./modal/BlockedPopup\";\r\nimport { enabledCalendarNotifications } from \"../../calendar-common/helpers/calendar\";\r\nimport {\r\n    persistSettings,\r\n    getSettingsWithNoFilter,\r\n} from \"../../calendar-common/helpers/settingsHelper\";\r\nimport EventNotifyModal from \"./modal/EventNotifyModal\";\r\n\r\nclass CalendarContainer extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.trackScrolling = this.trackScrolling.bind(this);\r\n        this.isBottom = this.isBottom.bind(this);\r\n        this.getNotificationSetting = this.getNotificationSetting.bind(this);\r\n    }\r\n\r\n    componentWillMount() {\r\n        this.props.initSettingsListener();\r\n        this.props.initTimezones();\r\n        this.props.fetchLocalizations();\r\n        this.props.subscribeToCalendar();\r\n        this.props.initEventNotifications();\r\n    }\r\n\r\n    getNotificationSetting() {\r\n        let settings = getSettingsWithNoFilter();\r\n        if(settings)\r\n            return settings.eventNotifyShown;\r\n\r\n        return null;\r\n    }\r\n\r\n    initNotificationSetting() {\r\n        let settings = getSettingsWithNoFilter();\r\n\r\n        if (settings && !settings.hasOwnProperty(\"eventNotifyShown\"))\r\n            persistSettings({\r\n                eventNotifyShown: true,\r\n            });\r\n    }\r\n\r\n    componentDidMount() {\r\n        fxsWidgets.load(\"calendar-settings\", true);\r\n        this.initNotificationSetting();\r\n    }\r\n\r\n    isBottom(element) {\r\n        return (\r\n            Math.trunc(element.scrollHeight - element.scrollTop) ===\r\n            element.clientHeight\r\n        );\r\n    }\r\n\r\n    trackScrolling() {\r\n        const wrappedElement = document.getElementById(\r\n            \"economic-calendar-events\"\r\n        );\r\n        if (\r\n            this.isBottom(wrappedElement) &&\r\n            wrappedElement.classList.contains(\"fxs_c_ecocal_data_shadow\")\r\n        ) {\r\n            wrappedElement.classList.remove(\"fxs_c_ecocal_data_shadow\");\r\n        } else if (\r\n            !this.isBottom(wrappedElement) &&\r\n            !wrappedElement.classList.contains(\"fxs_c_ecocal_data_shadow\")\r\n        ) {\r\n            wrappedElement.classList.add(\"fxs_c_ecocal_data_shadow\");\r\n        }\r\n    }\r\n\r\n    render({\r\n        translate,\r\n        showConnectionError,\r\n        hideModalConnectionError,\r\n        showModalLegend,\r\n        showBlockedPopup,\r\n        config,\r\n        eventNotifyShown,\r\n        showEventNotifyModal,\r\n    }) {\r\n        return (\r\n            <div className=\"fxs_widget fxs_c_calendar_wrapper\">\r\n                {eventNotifyShown && this.getNotificationSetting() && (\r\n                    <EventNotifyModal\r\n                        showEventNotifyModal={showEventNotifyModal}\r\n                    />\r\n                )}\r\n                {mustOneSignalInit(config) && (\r\n                    <script src={config.oneSignalUrl} async=\"\"></script>\r\n                )}\r\n                {showBlockedPopup && <BlockedPopup />}\r\n                <div\r\n                    fxs-widget\r\n                    name=\"calendar-settings\"\r\n                    show=\"false\"\r\n                    open-close-event-name={config.settingsOpenCloseEventName}\r\n                    subscription-changed-event-name={\r\n                        config.subscriptionChangedEventName\r\n                    }\r\n                    has-notifications={enabledCalendarNotifications(config)}\r\n                    tracking={config.tracking}\r\n                    premium-url={config.premiumUrl}\r\n                    notifications-helper={config.notificationsHelper}\r\n                    culture={this.props.config.culture}\r\n                ></div>\r\n                <div\r\n                    class=\"fxs_widget fxs_c_ecocal\"\r\n                    dir={`${\r\n                        translate(\"IsRightToLeftOriented\") ? \"rtl\" : \"auto\"\r\n                    }`}\r\n                >\r\n                    {showModalLegend && <ModalLegend />}\r\n                    <EventListFilter />\r\n                    <div\r\n                        id=\"economic-calendar-events\"\r\n                        onScroll={this.trackScrolling}\r\n                        class=\"fxs_c_ecocal_data fxs_c_ecocal_data_shadow\"\r\n                    >\r\n                        {showConnectionError && (\r\n                            <Modal\r\n                                handleClose={hideModalConnectionError}\r\n                                sectionClassName=\"fxs_c_modal-main\"\r\n                            >\r\n                                {translate(\"ErrorConnectMessage\")}\r\n                            </Modal>\r\n                        )}\r\n                        <EventList />\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"config,showConnectionError,showModalLegend,showBlockedPopup, eventNotifyShown\",\r\n    actions\r\n)(CalendarContainer);\r\n","import { h, Component } from \"preact\";\r\nimport { Provider } from \"unistore/preact\";\r\nimport { createStore } from \"./store\";\r\n\r\nimport CalendarContainer from \"./components/CalendarContainer\";\r\n\r\nclass CalendarWidget extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.store = createStore(props);\r\n    }\r\n\r\n    render(props) {\r\n        return (\r\n            <Provider store={this.store}>\r\n                <CalendarContainer />\r\n            </Provider>\r\n        );\r\n    }\r\n}\r\n\r\nexport default CalendarWidget;\r\n","import { CALENDAR_VIEW, FILTER_TYPE } from \"../../calendar-common/constants\";\r\n\r\nexport const getViewDefaultSettings = (store) => {\r\n    const { settings } = store;\r\n    let nextSettings;\r\n    if (settings.view == CALENDAR_VIEW.Configure_View_Default) {\r\n        const { defaultSettings } = store;\r\n        nextSettings = defaultSettings;\r\n        nextSettings.actualFilterType = FILTER_TYPE.default;\r\n    } else if (settings.view == CALENDAR_VIEW.Configure_View_Basic) {\r\n        const { basicSettings } = store;\r\n        nextSettings = basicSettings;\r\n        nextSettings.actualFilterType = FILTER_TYPE.basic;\r\n    }\r\n    if (settings.timezoneOffset)\r\n        nextSettings.timezoneOffset = settings.timezoneOffset;\r\n\r\n    return nextSettings;\r\n};\r\n","export const CATEGORY_FILTER_OPTIONS = {\r\n    Category_All: null,\r\n    Category_BondAuctions: '8896AA26-A50C-4F8B-AA11-8B3FCCDA1DFD',\r\n    Category_CapitalFlows: 'FA6570F6-E494-4563-A363-00D0F2ABEC37',\r\n    Category_CentralBanks: 'C94405B5-5F85-4397-AB11-002A481C4B92',\r\n    Category_Consumption: 'E229C890-80FC-40F3-B6F4-B658F3A02635',\r\n    Category_EconomicActivity: '24127F3B-EDCE-4DC4-AFDF-0B3BD8A964BE',\r\n    Category_Energy: 'DD332FD3-6996-41BE-8C41-33F277074FA7',\r\n    Category_Holidays: '7DFAEF86-C3FE-4E76-9421-8958CC2F9A0D',\r\n    Category_HousingMarket: '1E06A304-FAC6-440C-9CED-9225A6277A55',\r\n    Category_Inflation: '33303F5E-1E3C-4016-AB2D-AC87E98F57CA',\r\n    Category_InterestRates: '9C4A731A-D993-4D55-89F3-DC707CC1D596',\r\n    Category_LaborMarket: '91DA97BD-D94A-4CE8-A02B-B96EE2944E4C',\r\n    Category_Politics: 'E9E957EC-2927-4A77-AE0C-F5E4B5807C16'\r\n}\r\n","export const PERIOD_TYPE_VALUES = {\r\n    NONE: null,\r\n    DAY: \"Period_DateFormat_Day\",\r\n    MONTH: \"Period_DateFormat_Month\",\r\n    QUARTER: \"Period_QuarterFormat\"\r\n}","import { Component } from \"preact\";\r\n\r\nconst eventTimeCheck = (WrappedComponent) => {\r\n    return class extends Component {\r\n        constructor(props) {\r\n            super(props);\r\n            this.state = {\r\n                eventTimeReached: false,\r\n            };\r\n        }\r\n\r\n        checkEventTime() {\r\n            this.setState({ eventTimeReached: true });\r\n        };\r\n\r\n        componentDidMount() {\r\n            const { event, config } = this.props;\r\n            const isSpeechScoreEnabled = config.enableSpeechScore;\r\n            const isLockedFnc = config.isLocked;\r\n\r\n            if (isSpeechScoreEnabled && !isLockedFnc() && event?.isScoreTrackable) {\r\n                const timeUntilEvent = new Date(event.dateUtc).getTime() - Date.now();\r\n\r\n                if (timeUntilEvent > 0) {\r\n                    this.timeoutId = setTimeout(this.checkEventTime, timeUntilEvent);\r\n                } else {\r\n                    this.setState({ eventTimeReached: true });\r\n                }\r\n            }\r\n        }\r\n\r\n        componentWillUnmount() {\r\n            if (this.timeoutId) {\r\n                clearTimeout(this.timeoutId);\r\n            }\r\n        }\r\n\r\n        render() {\r\n            return (\r\n                <WrappedComponent\r\n                    eventTimeReached={this.state.eventTimeReached}\r\n                    {...this.props}\r\n                />\r\n            );\r\n        }\r\n    };\r\n};\r\n\r\nexport default eventTimeCheck;\r\n","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport AdvancedTimeFilter from \"./AdvancedTimeFilter\";\r\nimport { FILTER_TYPE, GTM_ID, GA4EVENT } from \"../../../constants\";\r\nimport actions from \"../../../actions\";\r\nimport IconSearchSolid from \"../../../../common/components/icons/IconSearchSolid\";\r\n\r\nclass AdvancedFilterTopDesktop extends Component {\r\n    render({\r\n        filter,\r\n        time,\r\n        onTimeFilterChanged,\r\n        onEventNameChanged,\r\n        translate,\r\n        config,\r\n        loadDefaultSettings,\r\n        loadCustomSettings,\r\n        settings,\r\n        filterType,\r\n    }) {\r\n        return (\r\n            <div class=\"fxs_c_top\">\r\n                <label class=\"fxs_c_event-search\">\r\n                    <IconSearchSolid />\r\n                    <input\r\n                        type=\"search\"\r\n                        value={filter.eventName}\r\n                        onChange={(event) =>\r\n                            onEventNameChanged(\r\n                                event.target.value ? event.target.value : \"\"\r\n                            )\r\n                        }\r\n                        placeholder={translate(\"AdvancedFilterEventNameLabel\")}\r\n                        data-gtmid={\r\n                            config.tracking &&\r\n                            GTM_ID.ADVANCED_FILTERS_EVENT_NAME\r\n                        }\r\n                        data-ga4event-clk-name={ config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                        data-ga4event-element = { config.tracking && GA4EVENT.ELEMENTS.ADVANCED_FILTERS_EVENT_NAME}\r\n\r\n                    />\r\n                </label>\r\n                <div class=\"fxs_fRight\">\r\n                    <AdvancedTimeFilter\r\n                        time={time}\r\n                        onTimeFilterChanged={onTimeFilterChanged}\r\n                        getButtonGtmId={(timeRange) =>\r\n                            config.tracking &&\r\n                            GTM_ID.ADVANCED_FILTERS_TIME_BUTTON(\r\n                                timeRange.replace(\"TimeFilter_\", \"\")\r\n                            )\r\n                        }\r\n                        getButtonGa4Id={(timeRange) =>\r\n                            config.tracking &&\r\n                            GA4EVENT.ELEMENTS.ADVANCED_FILTERS_TIME_BUTTON(\r\n                                timeRange.replace(\"TimeFilter_\", \"\")\r\n                            )\r\n                        }\r\n                        getDropdownButtonGtmId={() =>\r\n                            config.tracking &&\r\n                            GTM_ID.ADVANCED_FILTERS_TIME_DROPDOWN\r\n                        }\r\n                        getDropdownButtonGa4Id={() =>\r\n                            config.tracking &&\r\n                            GA4EVENT.ELEMENTS.ADVANCED_FILTERS_TIME_DROPDOWN\r\n                        }\r\n                        getDropdownOptionGtmId={(timeRange) =>\r\n                            config.tracking &&\r\n                            GTM_ID.ADVANCED_FILTERS_TIME_DROPDOWN_OPTION(\r\n                                timeRange.replace(\"TimeFilter_\", \"\")\r\n                            )\r\n                        }\r\n                        getDropdownOptionGa4Id={(timeRange) =>\r\n                            config.tracking &&\r\n                            GA4EVENT.ELEMENTS.ADVANCED_FILTERS_TIME_DROPDOWN_OPTION(\r\n                                timeRange.replace(\"TimeFilter_\", \"\")\r\n                            )\r\n                        }\r\n                        getCalendarButtonGtmId={() =>\r\n                            config.tracking &&\r\n                            GTM_ID.ADVANCED_FILTERS_CALENDAR_BUTTON\r\n                        }\r\n                        getCalendarButtonGa4Id={() =>\r\n                            config.tracking &&\r\n                            GA4EVENT.ELEMENTS.ADVANCED_FILTERS_CALENDAR_BUTTON\r\n                        }\r\n                        getCalendarContentGtmId={() =>\r\n                            config.tracking &&\r\n                            GTM_ID.ADVANCED_FILTERS_CALENDAR_CONTENT\r\n                        }\r\n                        getCalendarContentGa4Id={() =>\r\n                            config.tracking &&\r\n                            GA4EVENT.ELEMENTS.ADVANCED_FILTERS_CALENDAR_CONTENT\r\n                        }\r\n                        getGa4Name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                    />\r\n                    <button\r\n                        type=\"button\"\r\n                        onClick={loadCustomSettings}\r\n                        data-gtmid={config.tracking && GTM_ID.FILTER_MY_FILTERS}\r\n                        data-ga4event-clk-name={ config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                        data-ga4event-element = { config.tracking && GA4EVENT.ELEMENTS.FILTER_MY_FILTERS}\r\n\r\n                        class={`fxs_btn fxs_btn_table_filter fxs_btn_xsmall ${\r\n                            filterType === FILTER_TYPE.custom\r\n                                ? \" fxs_active\"\r\n                                : \"\"\r\n                        }`}\r\n                    >\r\n                        <span>\r\n                            <span>{translate(\"MyFilterLabel\")}</span>\r\n                        </span>\r\n                    </button>\r\n                    <button\r\n                        type=\"button\"\r\n                        onClick={loadDefaultSettings}\r\n                        data-gtmid={config.tracking && GTM_ID.FILTER_DEFAULTS}\r\n                        data-ga4event-clk-name={ config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                        data-ga4event-element = { config.tracking && GA4EVENT.ELEMENTS.FILTER_DEFAULTS}\r\n\r\n                        class={`fxs_btn fxs_btn_table_filter fxs_btn_xsmall ${\r\n                            filterType === FILTER_TYPE.default ||\r\n                            filterType === FILTER_TYPE.basic\r\n                                ? \" fxs_active\"\r\n                                : \"\"\r\n                        }`}\r\n                    >\r\n                        <span>\r\n                            <span>{translate(\"DefaultsFilterLabel\")}</span>\r\n                        </span>\r\n                    </button>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"config, settings\",\r\n    actions\r\n)(AdvancedFilterTopDesktop);\r\n","export const RELATED_NEWS_VIEW = {\r\n    View_Half: 0,\r\n    View_Grid: 1,\r\n    View_Full: 2,\r\n    View_Mobile: 3,\r\n};\r\n","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport { CATEGORY_FILTER_OPTIONS, GA4EVENT, GTM_ID } from \"../../../constants\";\r\nimport CheckboxPicker from \"../../../../common/components/CheckboxPicker\";\r\nimport { getKeysOfNotNullValues } from \"../../../../common/helpers/objects\";\r\n\r\nclass AdvancedCategoryFilterDesktop extends Component {\r\n    componentWillMount() {\r\n        const selectedCategories = this.props.selectedCategories;\r\n        const categories = getKeysOfNotNullValues(CATEGORY_FILTER_OPTIONS);\r\n\r\n        const selected =\r\n            selectedCategories.length === 0\r\n                ? []\r\n                : categories.filter((key) =>\r\n                    selectedCategories.includes(CATEGORY_FILTER_OPTIONS[key])\r\n                );\r\n\r\n        this.setState({\r\n            selected,\r\n            categories,\r\n        });\r\n    }\r\n\r\n    componentWillReceiveProps(nextProps) {\r\n        if (this.props.selectedCategories !== nextProps.selectedCategories) {\r\n            const selected = this.state.categories.filter((key) =>\r\n                nextProps.selectedCategories.includes(\r\n                    CATEGORY_FILTER_OPTIONS[key]\r\n                )\r\n            );\r\n            this.setState({ selected });\r\n        }\r\n    }\r\n\r\n    render({ onChange, translate, config }, { selected, categories }) {\r\n        return (\r\n            <div>\r\n                <CheckboxPicker\r\n                    onChange={(values) =>\r\n                        onChange(values.map((x) => CATEGORY_FILTER_OPTIONS[x]))\r\n                    }\r\n                    values={categories}\r\n                    checkedValues={selected}\r\n                    renderTitle={() => (\r\n                        <h4 class=\"fxs_headline_tiny fxs_marginBase_vertical\">\r\n                            {translate(\"CategoryFilterTitle\")}\r\n                        </h4>\r\n                    )}\r\n                    renderValue={(value) => <span>{translate(value)}</span>}\r\n                    getOptionGtmId={(key) =>\r\n                        config.tracking &&\r\n                        GTM_ID.ADVANCED_FILTERS_CATEGORY_CHECKBOX(\r\n                            key.replace(\"Category_\", \"\").toLowerCase()\r\n                        )\r\n                    }\r\n                    getOptionGA4Id={(key) =>\r\n                        config.tracking &&\r\n                        GA4EVENT.ELEMENTS.ADVANCED_FILTERS_CATEGORY_CHECKBOX(\r\n                            key.replace(\"Category_\", \"\").toLowerCase()\r\n                        )\r\n                    }\r\n                    getGa4Name={\r\n                        config.tracking &&\r\n                        GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                    }\r\n                />\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\"config\")(AdvancedCategoryFilterDesktop);\r\n","export default  (\r\n    value,\r\n    prefix,\r\n    percentage,\r\n    potency,\r\n    translate\r\n) => {\r\n    if (typeof value === \"undefined\" || value === null) {\r\n        return \"-\";\r\n    }\r\n\r\n    const suffix = `${percentage ? percentage + \" \" : \"\"}${renderPotency(\r\n        potency,\r\n        translate\r\n    )}`;\r\n\r\n    const result = `${prefix ? prefix : \"\"}${(value).toLocaleString('en-us')}${\r\n        suffix ? suffix : \"\"\r\n    }`;\r\n    return result;\r\n};\r\n\r\nconst renderPotency = (potency, translate) => {\r\n    if (potency === null) return \"\";\r\n\r\n    const potencyTranslations = translate(\"Potency\");\r\n    let result = \"\";\r\n    if (potencyTranslations && potencyTranslations.hasOwnProperty(potency)) {\r\n        result = potencyTranslations[potency];\r\n    }\r\n    return result;\r\n};\r\n","import { Component } from \"preact\";\r\nimport actions from \"../../actions\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport { isPast } from \"../../../common/helpers/dateHelpers\";\r\nimport IconInfoCircle from \"../../../common/components/icons/IconInfoCircle\";\r\nimport IconBell from \"../../../common/components/icons/IconBell\";\r\nimport IconBellSolid from \"../../../common/components/icons/IconBellSolid\";\r\nimport IconChartBar from \"../../../common/components/icons/IconChartBar\";\r\nimport IconCalendarPlus from \"../../../common/components/icons/IconCalendarPlus\";\r\nimport IconEllipsis from \"../../../common/components/icons/IconEllipsis\";\r\nimport IconTimes from \"../../../common/components/icons/IconTimes\";\r\nimport IconFileSolid from \"../../../common/components/icons/IconFileSolid\";\r\nimport EventTime from \"./EventTime\";\r\nimport { COUNTRY_FILTER_OPTIONS, GA4EVENT, GTM_ID } from \"../../constants\";\r\nimport { urlFactory, downloadCalendar, formatTemplate } from \"../../helpers\";\r\nimport renderNumerical from \"../../helpers/render\";\r\nimport { getDeviation } from \"../../helpers/deviation\";\r\nimport { CALENDAR_VIEW } from \"../../../calendar-common/constants\";\r\nimport { enabledCalendarNotifications } from \"../../../calendar-common/helpers/calendar\";\r\nimport IconLocked from \"../../../common/components/icons/IconLocked\";\r\nimport SpeechScore from \"./SpeechScore\";\r\nimport SpeechAverageScore from \"./SpeechAverageScore\";\r\nimport eventTimeCheck from \"../../helpers/eventTimeCheck\";\r\nimport { getSpeechScore } from \"../../helpers/getSpeechScore\";\r\n\r\nclass EventRowDataDesktop extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            isPastEvent: isPast(props.event.date, props.settings.timezoneOffset),\r\n        };\r\n    }\r\n\r\n    renderTradeNow(config, eventdate) {\r\n        try {\r\n            return (\r\n                <span>\r\n                    &nbsp;\r\n                    <span\r\n                        dangerouslySetInnerHTML={{\r\n                            __html: config.tradeNowFnc(eventdate),\r\n                        }}\r\n                    ></span>\r\n                </span>\r\n            );\r\n        } catch (ex) {\r\n            console.log(\"tradNowFunc\", ex);\r\n        }\r\n    }\r\n\r\n    getOneColumnLabelText(isSpeech, isReport, isInProgress) {\r\n        return isSpeech\r\n            ? isInProgress\r\n                ? \"InProgress\"\r\n                : \"RowSpeech\"\r\n            : isReport\r\n            ? \"RowReport\"\r\n            : \"RowAllDay\";\r\n    }\r\n\r\n    renderOneColumnData(isSpeech, labelText, translate, speechScore, isInProgress) {\r\n        if (speechScore?.isLocked) {\r\n            return (\r\n                <span className=\"fxs_c_label fxs_c_label_info_background fxs_c_label_locked\">\r\n                    <span class=\"fxs_c_label_locked_icon\">\r\n                        <IconLocked />\r\n                    </span>\r\n                    <span class=\"fxs_c_label_locked_text\">\r\n                        {translate(\"TrackerLocked\")}\r\n                    </span>\r\n                </span>\r\n            );\r\n        }\r\n\r\n        if (!isSpeech || !speechScore) {\r\n            return (\r\n                <span\r\n                    className={`fxs_c_label ${\r\n                        isInProgress\r\n                            ? \"fxs_c_label_info_base\"\r\n                            : \"fxs_c_label_info_background\"\r\n                    }`}\r\n                >\r\n                    <span>{translate(labelText)}</span>\r\n                </span>\r\n            );\r\n        }\r\n\r\n        if (speechScore?.score == null && speechScore?.averageScore != null) {\r\n            return (\r\n                <div className=\"fxs_c_speech_score_wrapper\">\r\n                    <span\r\n                        className={`fxs_c_label ${\r\n                            isInProgress\r\n                                ? \"fxs_c_label_info_base\"\r\n                                : \"fxs_c_label_info_background\"\r\n                        }`}\r\n                    >\r\n                        <span>{translate(labelText)}</span>\r\n                    </span>\r\n                    <span className=\"fxs_c_pipe\">|</span>\r\n                    <span>{translate(\"Average\").concat(\": \")}</span>\r\n                    <SpeechAverageScore speechScore={speechScore} />\r\n                </div>\r\n            );\r\n        }\r\n\r\n        return this.speechScoreBuilder({\r\n            translate,\r\n            speechScore,\r\n        });\r\n    }\r\n\r\n    speechScoreBuilder = ({ translate, speechScore }) => {\r\n        return (\r\n            <div className=\"fxs_c_speech_score_wrapper\">\r\n                <SpeechScore speechScore={speechScore} forceUpperCase={true} />\r\n                {speechScore?.averageScore != null && (\r\n                    <>\r\n                        <span className=\"fxs_c_pipe\">|</span>\r\n                        <span>{translate(\"Average\").concat(\": \")}</span>\r\n                        <SpeechAverageScore speechScore={speechScore} />\r\n                    </>\r\n                )}\r\n            </div>\r\n        );\r\n    };\r\n\r\n    render(\r\n        {\r\n            event,\r\n            translate,\r\n            showDetailsClick,\r\n            showEventDateMenu,\r\n            canBeSubscribed,\r\n            isSubscribed,\r\n            subscribeToEvent,\r\n            unsubscribeToEvent,\r\n            eventDateMenuShown,\r\n            eventDateDetailShown,\r\n            renderName,\r\n            config,\r\n            settings: { timezoneOffset, view },\r\n            eventTimeReached,\r\n        },\r\n        { isPastEvent }\r\n    ) {\r\n        const {\r\n            id,\r\n            date,\r\n            countryCode,\r\n            currencyCode,\r\n            speech,\r\n            isSpeech,\r\n            isReport,\r\n            isAllDay,\r\n            isTentative,\r\n            isPreliminary,\r\n            actual,\r\n            volatility,\r\n            ratioDeviation,\r\n            consensus,\r\n            previous,\r\n            potency,\r\n            unit,\r\n            revised,\r\n            isBetterThanExpected,\r\n            eventId,\r\n            isScoreTrackable,\r\n        } = event;\r\n\r\n        let speechScore = null;\r\n\r\n        const hasScore = speech?.score ?? false;\r\n        const hasAverageScore = speech?.averageScore ?? false;\r\n\r\n        const isSpeechScoreEnabled = config.enableSpeechScore;\r\n\r\n        const isInProgress =\r\n            !hasScore && isScoreTrackable && eventTimeReached && isSpeechScoreEnabled;\r\n        const countryName = getCountryName(countryCode);\r\n        const prefix = unit !== \"%\" ? unit : null;\r\n        const percentage = unit === \"%\" ? \"%\" : null;\r\n\r\n        const isOneColumn = isSpeech || isReport || isAllDay;\r\n        const showEventTime = !isTentative || actual !== null;\r\n        const showDashIcon = !isOneColumn && config.dashboardUrl;\r\n        const eventDateDetailIsShown = eventDateDetailShown === id;\r\n\r\n        if (isSpeech && isSpeechScoreEnabled && (hasScore || hasAverageScore)) {\r\n            speechScore = getSpeechScore(event);\r\n            if (speechScore) speechScore.isLocked = config.isLocked();\r\n        }\r\n\r\n        return (\r\n            <tr\r\n                data-event-date-id={id}\r\n                class={`fxs_c_row ${isPastEvent ? \"fxs_c_now\" : \"\"} ${\r\n                    eventDateDetailIsShown ? \"fxs_c_event_detail_shown\" : \"\"\r\n                }`}\r\n                onClick={showDetailsClick}\r\n                data-gtmid={config.tracking && GTM_ID.OPEN_OVERVIEW(id)}\r\n                data-ga4event-clk-name={\r\n                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                }\r\n                data-ga4event-element={config.tracking && GA4EVENT.ELEMENTS.OPEN_OVERVIEW}\r\n                data-ga4event-eventdateid={id}\r\n            >\r\n                <td class=\"fxs_c_item fxs_c_time\">\r\n                    {showEventTime ? (\r\n                        <EventTime\r\n                            date={date}\r\n                            onEventHappened={() => this.setState({ isPastEvent: true })}\r\n                            hasActual={actual !== null}\r\n                        />\r\n                    ) : (\r\n                        translate(\"RowNotAvailable\")\r\n                    )}\r\n                </td>\r\n\r\n                <td class=\"fxs_c_item fxs_c_flag\">\r\n                    <span\r\n                        title={translate(countryName)}\r\n                        class={`fxs_flag ${\r\n                            countryCode ? \"fxs_\" + countryCode.toLowerCase() : \"\"\r\n                        }`}\r\n                    ></span>\r\n                </td>\r\n\r\n                <td class=\"fxs_c_item fxs_c_currency\">\r\n                    <span>{currencyCode}</span>\r\n                </td>\r\n\r\n                <td class=\"fxs_c_item fxs_c_name\">\r\n                    {renderName(event)}\r\n                    {isPreliminary && (\r\n                        <span class=\"fxs_c_preliminary\">\r\n                            {\" \"}\r\n                            {translate(\"RowPreliminaryAbbreviation\")}{\" \"}\r\n                        </span>\r\n                    )}\r\n                    {config.tradeNowFnc !== null && this.renderTradeNow(config, event)}\r\n                </td>\r\n\r\n                <td class=\"fxs_c_item fxs_c_impact\">\r\n                    <span\r\n                        class={`fxs_c_impact-icon ${\r\n                            volatility\r\n                                ? \"fxs_c_impact-\" + volatility.toLowerCase()\r\n                                : \"fxs_c_impact-none\"\r\n                        }`}\r\n                    ></span>\r\n                </td>\r\n\r\n                {isOneColumn && (\r\n                    <td\r\n                        colspan={view == CALENDAR_VIEW.Configure_View_Basic ? \"3\" : \"4\"}\r\n                        class=\"fxs_c_item fxs_c_type\"\r\n                    >\r\n                        {this.renderOneColumnData(\r\n                            isSpeech,\r\n                            this.getOneColumnLabelText(isSpeech, isReport, isInProgress),\r\n                            translate,\r\n                            speechScore,\r\n                            isInProgress\r\n                        )}\r\n                    </td>\r\n                )}\r\n\r\n                {!isOneColumn && (\r\n                    <td class=\"fxs_c_item fxs_c_actual\">\r\n                        {\r\n                            <strong\r\n                                class={\r\n                                    typeof isBetterThanExpected === \"boolean\"\r\n                                        ? isBetterThanExpected\r\n                                            ? \"fxs_c_positive\"\r\n                                            : \"fxs_c_negative\"\r\n                                        : \"\"\r\n                                }\r\n                            >\r\n                                {renderNumerical(\r\n                                    actual,\r\n                                    prefix,\r\n                                    percentage,\r\n                                    potency,\r\n                                    translate\r\n                                )}\r\n                            </strong>\r\n                        }\r\n                    </td>\r\n                )}\r\n                {!isOneColumn && view != CALENDAR_VIEW.Configure_View_Basic && (\r\n                    <td class=\"fxs_c_item fxs_c_deviation\">\r\n                        {ratioDeviation !== null && ratioDeviation !== undefined\r\n                            ? ratioDeviation.toFixed(2)\r\n                            : getDeviation(actual, consensus)}\r\n                    </td>\r\n                )}\r\n\r\n                {!isOneColumn && (\r\n                    <td class=\"fxs_c_item fxs_c_consensus\">\r\n                        {renderNumerical(\r\n                            consensus,\r\n                            prefix,\r\n                            percentage,\r\n                            potency,\r\n                            translate\r\n                        )}\r\n                    </td>\r\n                )}\r\n\r\n                {!isOneColumn && (\r\n                    <td class=\"fxs_c_item fxs_c_previous\">\r\n                        {typeof revised !== \"undefined\" && revised !== null && (\r\n                            <span class=\"fxs_c_has-tooltip\">\r\n                                <span>\r\n                                    {renderNumerical(\r\n                                        revised,\r\n                                        prefix,\r\n                                        percentage,\r\n                                        potency,\r\n                                        translate\r\n                                    )}\r\n                                </span>\r\n                                <span class=\"fxs_c_tooltip\">\r\n                                    <IconInfoCircle />\r\n                                    <span class=\"fxs_c_content\">\r\n                                        <span class=\"fxs_c_textnode\">\r\n                                            {translate(\"PreviousTooltip\", previous)}\r\n                                        </span>\r\n                                    </span>\r\n                                </span>\r\n                            </span>\r\n                        )}\r\n                        {typeof revised === \"undefined\" ||\r\n                            (revised === null &&\r\n                                renderNumerical(\r\n                                    previous,\r\n                                    prefix,\r\n                                    percentage,\r\n                                    potency,\r\n                                    translate\r\n                                ))}\r\n                    </td>\r\n                )}\r\n                <td\r\n                    class={`fxs_c_item fxs_c_notify ${\r\n                        isSubscribed ? \"fxs_c_notify_active\" : \"\"\r\n                    }`}\r\n                >\r\n                    {canBeSubscribed && enabledCalendarNotifications(config) && (\r\n                        <button\r\n                            type=\"button\"\r\n                            className=\"fxs_btn fxs_btn_icon\"\r\n                            data-gtmid={\r\n                                config.tracking && isSubscribed\r\n                                    ? GTM_ID.NOTIFY_ME_UNSUBSCRIPTION(id)\r\n                                    : GTM_ID.NOTIFY_ME_SUBSCRIPTION(id)\r\n                            }\r\n                            data-ga4event-clk-name={\r\n                                config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                            }\r\n                            data-ga4event-element={\r\n                                config.tracking && isSubscribed\r\n                                    ? GA4EVENT.ELEMENTS.NOTIFY_ME_UNSUBSCRIPTION\r\n                                    : GA4EVENT.ELEMENTS.NOTIFY_ME_SUBSCRIPTION\r\n                            }\r\n                            data-ga4event-eventdateid={id}\r\n                            onClick={(e) => {\r\n                                e.stopPropagation();\r\n                                if (isSubscribed) unsubscribeToEvent(eventId);\r\n                                else {\r\n                                    subscribeToEvent(eventId);\r\n                                }\r\n                            }}\r\n                        >\r\n                            {isSubscribed && enabledCalendarNotifications(config) ? (\r\n                                <IconBellSolid />\r\n                            ) : (\r\n                                <IconBell />\r\n                            )}\r\n                        </button>\r\n                    )}\r\n                </td>\r\n\r\n                <td\r\n                    class={\r\n                        eventDateMenuShown === id\r\n                            ? \"fxs_c_item fxs_c_dashboard fxs_active\"\r\n                            : eventDateDetailShown === id\r\n                            ? \"fxs_c_item fxs_c_dashboard fxs_c_detailActive\"\r\n                            : \"fxs_c_item fxs_c_dashboard\"\r\n                    }\r\n                    data-gtmid={\r\n                        config.tracking &&\r\n                        (eventDateDetailShown === id\r\n                            ? GTM_ID.CLOSE_OVERVIEW(id)\r\n                            : GTM_ID.OPEN_GRAPH(id))\r\n                    }\r\n                    data-ga4event-clk-name={\r\n                        config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                    }\r\n                    data-ga4event-element={\r\n                        eventDateDetailShown === id\r\n                            ? GA4EVENT.ELEMENTS.CLOSE_OVERVIEW\r\n                            : GA4EVENT.ELEMENTS.OPEN_GRAPH\r\n                    }\r\n                    data-ga4event-eventdateid={id}\r\n                    onClick={(e) => {\r\n                        if (eventDateDetailShown !== id) {\r\n                            e.stopPropagation();\r\n                            showEventDateMenu(id);\r\n                        }\r\n                    }}\r\n                >\r\n                    {eventDateDetailShown === id ? (\r\n                        <IconTimes />\r\n                    ) : (\r\n                        <span\r\n                            onClick={(e) => {\r\n                                e.stopPropagation();\r\n                                showEventDateMenu(id);\r\n                            }}\r\n                        >\r\n                            <IconEllipsis />\r\n                        </span>\r\n                    )}\r\n                    {eventDateMenuShown === id && (\r\n                        <div class=\"fxs_c_options\" onClick={(e) => e.stopPropagation()}>\r\n                            <p\r\n                                onClick={(e) => {\r\n                                    if (eventDateDetailShown !== id) showDetailsClick();\r\n                                }}\r\n                                data-gtmid={config.tracking && GTM_ID.OPEN_OVERVIEW(id)}\r\n                                data-ga4event-clk-name={\r\n                                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                }\r\n                                data-ga4event-element={\r\n                                    config.tracking && GA4EVENT.ELEMENTS.OPEN_OVERVIEW\r\n                                }\r\n                                data-ga4event-eventdateid={id}\r\n                            >\r\n                                <IconFileSolid /> {translate(\"Menu_Overview\")}\r\n                            </p>\r\n                            {showDashIcon && (\r\n                                <p>\r\n                                    <a\r\n                                        href={formatTemplate(config.dashboardUrl, {\r\n                                            eventId,\r\n                                            timezoneOffset,\r\n                                        })}\r\n                                        onClick={() => showEventDateMenu(id)}\r\n                                        target=\"_blank\"\r\n                                        title={translate(\"Dashboard\")}\r\n                                        data-gtmid={\r\n                                            config.tracking && GTM_ID.OPEN_DASHBOARD(id)\r\n                                        }\r\n                                        data-ga4event-clk-name={\r\n                                            config.tracking &&\r\n                                            GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                        }\r\n                                        data-ga4event-element={\r\n                                            config.tracking &&\r\n                                            GA4EVENT.ELEMENTS.OPEN_DASHBOARD\r\n                                        }\r\n                                        data-ga4event-eventdateid={id}\r\n                                    >\r\n                                        <IconChartBar /> {translate(\"Dashboard\")}\r\n                                    </a>\r\n                                </p>\r\n                            )}\r\n                            <p>\r\n                                <a\r\n                                    data-gtmid={config.tracking && GTM_ID.ADD_EVENT(id)}\r\n                                    data-ga4event-clk-name={\r\n                                        config.tracking &&\r\n                                        GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                    }\r\n                                    data-ga4event-element={\r\n                                        config.tracking && GA4EVENT.ELEMENTS.ADD_EVENT\r\n                                    }\r\n                                    data-ga4event-eventdateid={id}\r\n                                    onClick={() => {\r\n                                        showEventDateMenu(id);\r\n                                        downloadCalendar(\r\n                                            urlFactory.getEventDateICalendar(config, id),\r\n                                            \"text/calendar\"\r\n                                        );\r\n                                    }}\r\n                                    class=\"fxs_c_mutedLink\"\r\n                                >\r\n                                    <IconCalendarPlus />\r\n                                    <span> </span>\r\n                                    <span class=\"fxs_c_entry_metaInfo\">\r\n                                        {translate(\"DetailAddEvent\")}\r\n                                    </span>\r\n                                </a>\r\n                            </p>\r\n                        </div>\r\n                    )}\r\n                </td>\r\n            </tr>\r\n        );\r\n    }\r\n}\r\n\r\nconst getCountryName = (countryCode) => {\r\n    var countries = Object.entries(COUNTRY_FILTER_OPTIONS).filter(\r\n        (k) => COUNTRY_FILTER_OPTIONS.key !== null\r\n    );\r\n    var countryName = countries.find(([k, v]) => countryCode.includes(v));\r\n    return countryName ? countryName[0] : \"\";\r\n};\r\n\r\nexport default connectWithTranslations(\r\n    \"config,settings,eventDateMenuShown,eventDateDetailShown\",\r\n    actions\r\n)(eventTimeCheck(EventRowDataDesktop));\r\n","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport IconTimes from \"../../../common/components/icons/IconTimes\";\r\nimport actions from \"../../actions\";\r\n\r\nclass DetailModal extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n\r\n    componentDidMount() {\r\n        if (this.props.componentDidMountAction !== undefined)\r\n            this.props.componentDidMountAction();\r\n    }\r\n\r\n    render({ body, handleClose }) {\r\n        return (\r\n            <div class=\"fxs_c_details fxs_modal-open\">\r\n                <div class=\"fxs_c_detail-wrapper\">\r\n                    <div class=\"fxs_c_body\">\r\n                        <button\r\n                            type=\"button\"\r\n                            onclick={handleClose}\r\n                            class=\"fxs_modal_close fxs_btn_icon fxs_btn_functional close\"\r\n                        >\r\n                            <IconTimes />\r\n                        </button>\r\n                        {body}\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(actions)(DetailModal);\r\n","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../common/helpers/translationsHelpers\";\r\nimport IconInfoCircle from \"../../common/components/icons/IconInfoCircle\";\r\nimport { CALENDAR_VIEW } from \"../../calendar-common/constants\";\r\nimport { GTM_ID, GA4EVENT} from \"../constants\";\r\n\r\nconst getGTMTracking = (view) => {\r\n    switch (view) {\r\n        case CALENDAR_VIEW.Configure_View_Basic:\r\n            return GTM_ID.HEADER_BASIC_VIEW;\r\n        case CALENDAR_VIEW.Configure_View_Default:\r\n            return GTM_ID.HEADER_DEFAULT_VIEW;\r\n        case CALENDAR_VIEW.Configure_View_Premium:\r\n            return GTM_ID.HEADER_PREMIUM_VIEW;\r\n    }\r\n};\r\nconst getGA4TrackingElements = (view) => {\r\n    switch (view) {\r\n        case CALENDAR_VIEW.Configure_View_Basic:\r\n            return GA4EVENT.ELEMENTS.HEADER_BASIC_VIEW;\r\n        case CALENDAR_VIEW.Configure_View_Default:\r\n            return GA4EVENT.ELEMENTS.HEADER_DEFAULT_VIEW;\r\n        case CALENDAR_VIEW.Configure_View_Premium:\r\n            return GA4EVENT.ELEMENTS.HEADER_PREMIUM_VIEW;\r\n    }\r\n};\r\n\r\nclass EventListHeaderDesktop extends Component {\r\n    render({ translate, settings: { view }, config }) {\r\n        return (\r\n            <thead class=\"fxs_c_header\">\r\n                <tr \r\n                data-gtmid={config.tracking && getGTMTracking(view)}\r\n                data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                data-ga4event-element={config.tracking && getGA4TrackingElements(view)}\r\n                >\r\n                    <th class=\"fxs_c_item \">{translate(\"HeaderTime\")}</th>\r\n                    <th class=\"fxs_c_item fxs_c_item_event_name\" colspan=\"3\">\r\n                        {translate(\"HeaderEvent\")}\r\n                    </th>\r\n                    <th class=\"fxs_c_item \">{translate(\"HeaderImpact\")}</th>\r\n                    <th class=\"fxs_c_item \">{translate(\"HeaderActual\")}</th>\r\n                    {view != CALENDAR_VIEW.Configure_View_Basic && (\r\n                        <th class=\"fxs_c_item \">\r\n                            {translate(\"HeaderDeviation\")}\r\n                            <span class=\"fxs_c_has-tooltip\">\r\n                                <span class=\"fxs_c_tooltip\">\r\n                                    <IconInfoCircle />\r\n                                    <span class=\"fxs_c_content\">\r\n                                        <span class=\"fxs_c_textnode\">\r\n                                            {translate(\r\n                                                \"HeaderDeviationTooltip\"\r\n                                            )}\r\n                                        </span>\r\n                                    </span>\r\n                                </span>\r\n                            </span>\r\n                        </th>\r\n                    )}\r\n                    <th class=\"fxs_c_item \">{translate(\"HeaderConsensus\")}</th>\r\n                    <th class=\"fxs_c_item \">{translate(\"HeaderPrevious\")}</th>\r\n                    <th class=\"fxs_c_item \"></th>\r\n                    <th class=\"fxs_c_item \"></th>\r\n                </tr>\r\n            </thead>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\"settings,config\")(\r\n    EventListHeaderDesktop\r\n);\r\n","import { Component } from \"preact\";\r\nimport actions from \"../../actions\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport IconInfoCircle from \"../../../common/components/icons/IconInfoCircle\";\r\nimport IconCogSolid from \"../../../common/components/icons/IconCogSolid\";\r\nimport { GTM_ID, GA4EVENT } from \"../../constants\";\r\nimport AdvancedFilter from \"./advanced/AdvancedFilter\";\r\nimport TimezonePicker from \"./common/TimezonePicker\";\r\nimport DownloadFilter from \"./common/DownloadFilter\";\r\nimport TimeFilter from \"./common/TimeFilter\";\r\nimport IconTimes from \"../../../common/components/icons/IconTimes\";\r\nimport IconAngleDoubleRight from \"../../../common/components/icons/IconAngleDoubleRight\";\r\nimport SoundAlert from \"../../../calendar-common/components/SoundAlert\";\r\nimport ConfigureView from \"../../../calendar-common/components/ConfigureView\";\r\nimport { persistSettings } from \"../../../calendar-common/helpers/settingsHelper\";\r\nimport { CALENDAR_VIEW, FILTER_TYPE } from \"../../../calendar-common/constants\";\r\nimport ConfirmationPopUp from \"../../../calendar-common/components/ConfirmationPopUp\";\r\nimport { enabledCalendarNotifications } from \"../../../calendar-common/helpers/calendar\";\r\n\r\nclass DesktopFilter extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.onTimezoneChanged = this.onTimezoneChanged.bind(this);\r\n        this.toggleAdvancedFilter = this.toggleAdvancedFilter.bind(this);\r\n\r\n        this.state = {\r\n            notificationSoundOn: false,\r\n            view: 0,\r\n            showPopUp: false,\r\n            actualViewSelected: 0,\r\n        };\r\n    }\r\n    componentWillMount() {\r\n        this.props.updateSettingsFromStorage();\r\n        this.setState({\r\n            notificationSoundOn: this.props.settings.notificationSoundOn,\r\n            view: this.props.settings.view,\r\n            actualViewSelected: this.props.settings.view,\r\n            showPopUp: false,\r\n        });\r\n    }\r\n    onTimezoneChanged(timezone) {\r\n        this.props.changeTimezoneAndFetch(timezone);\r\n\r\n        var timezoneOffset = timezone.OffsetValue;\r\n        persistSettings({ timezoneOffset });\r\n    }\r\n\r\n    onNotificationSoundChange() {\r\n        this.props.changeSettingsAndSave({\r\n            notificationSoundOn: !this.props.settings.notificationSoundOn,\r\n        });\r\n        persistSettings({\r\n            notificationSoundOn: !this.props.settings.notificationSoundOn,\r\n        });\r\n    }\r\n\r\n    onOptionChange(option) {\r\n        const { settings } = this.props;\r\n        if (\r\n            option != CALENDAR_VIEW.Configure_View_Premium &&\r\n            settings.filter.type != FILTER_TYPE.custom\r\n        ) {\r\n            this.props.changeSettingsAndSave({ view: option });\r\n        } else {\r\n            this.setState({ showPopUp: true, actualViewSelected: option });\r\n        }\r\n    }\r\n\r\n    toggleAdvancedFilter() {\r\n        this.props.changeShowAdvancedFilter(!this.props.showAdvancedFilter);\r\n    }\r\n\r\n    close() {\r\n        this.setState({\r\n            showPopUp: false,\r\n            actualViewSelected: this.state.view,\r\n        });\r\n    }\r\n\r\n    applyOption(option) {\r\n        this.props.changeSettingsAndSave({ view: option });\r\n        this.setState({ showPopUp: false });\r\n        this.props.showSucessMessage();\r\n    }\r\n\r\n    render(\r\n        {\r\n            config,\r\n            settings,\r\n            translate,\r\n            showAdvancedFilter,\r\n            notificationsSupported,\r\n            toggleModalLegend,\r\n            onChangeFilter,\r\n            onChangeFilterDateRange,\r\n            onChangeCustomFilter,\r\n            onApplyRange,\r\n            showSuccessMessage,\r\n        },\r\n        { showPopUp, actualViewSelected }\r\n    ) {\r\n        return (\r\n            <div class=\"fxs_c_desktop-filters\">\r\n                {showSuccessMessage && (\r\n                    <div\r\n                        class=\"fxs_contextual_alert fxs_alert_success alert alert-dismissible fade in\"\r\n                        role=\"alert\"\r\n                    >\r\n                        <p class=\"fxs_alertText\">\r\n                            {translate(\"Success_Message\")}\r\n                        </p>\r\n                    </div>\r\n                )}\r\n                {showPopUp && (\r\n                    <div\r\n                        class=\"fxs_cs_modal\"\r\n                        tabindex=\"-1\"\r\n                        role=\"dialog\"\r\n                        aria-hidden=\"true\"\r\n                    >\r\n                        <div class=\"fxs_cs_modal_content fxs_cs_modal_content_advice\">\r\n                            <button\r\n                                type=\"button\"\r\n                                onClick={() => this.close()}\r\n                                class=\"fxs_modal_close fxs_btn_icon close fxs_cs_modal_close\"\r\n                                data-dismiss=\"modal\"\r\n                                aria-label=\"Close Modal\"\r\n                                data-gtmid={ config.tracking && GTM_ID.CONFIGURATION_CLOSE }\r\n                                data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                data-ga4event-element = {config.tracking && GA4EVENT.ELEMENTS.CONFIGURATION_CLOSE}\r\n\r\n                            >\r\n                                <IconTimes />\r\n                                <span class=\"fxs_skip\">Close</span>\r\n                            </button>\r\n                            <ConfirmationPopUp\r\n                                cancel={() => this.close()}\r\n                                save={() =>\r\n                                    this.applyOption(actualViewSelected)\r\n                                }\r\n                            ></ConfirmationPopUp>\r\n                        </div>\r\n                    </div>\r\n                )}\r\n                {showAdvancedFilter && <div class=\"fxs_c_modal-backdrop\"></div>}\r\n                {showAdvancedFilter && (\r\n                    <AdvancedFilter\r\n                        filter={settings.filter}\r\n                        onTimeFilterChanged={(time) => onChangeFilter({ time })}\r\n                    />\r\n                )}\r\n\r\n                <TimeFilter\r\n                    time={settings.filter.time}\r\n                    dateRange={settings.filter.dateRange}\r\n                    onTimeFilterChanged={(time) => onChangeFilter({ time })}\r\n                    applyFilter={(dateRange) => onApplyRange({ dateRange })}\r\n                    onDateRangeFilterChanged={(dateRange) =>\r\n                        onChangeFilterDateRange({ dateRange })\r\n                    }\r\n                    onChangeCustomFilter={onChangeCustomFilter}\r\n                    getCalendarTimeOptionGtmId={(time) =>\r\n                        config.tracking &&\r\n                        GTM_ID.DATEPIKER_OPTION(time.replace(\"TimeFilter_\", \"\"))\r\n                    }\r\n                    getCalendarTimeOptionGa4Id={(time) =>\r\n                        config.tracking &&\r\n                        GA4EVENT.ELEMENTS.DATEPIKER_OPTION(time.replace(\"TimeFilter_\", \"\"))\r\n                    }\r\n                    getCalendarButtonGtmId={\r\n                        config.tracking && GTM_ID.DATEPIKER_TIMESELECTOR_BUTTON\r\n                    }\r\n                    getCalendarButtonGa4Id={\r\n                        config.tracking && GA4EVENT.ELEMENTS.DATEPIKER_TIMESELECTOR_BUTTON\r\n                    }\r\n                    getGa4Name={\r\n                        config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                    }\r\n\r\n                />\r\n\r\n                <TimezonePicker\r\n                    onTimezoneChanged={this.onTimezoneChanged}\r\n                    currentTimezone={settings.timezoneOffset}\r\n                />\r\n\r\n                <div class=\"fxs_fRight\">\r\n                    <button\r\n                        type=\"button\"\r\n                        class=\"fxs_btn fxs_btn_icon fxs_btn_xsmall fxs_fLeft fxs_btn_legend fxs_btn_phantom\"\r\n                        data-gtmid={ config.tracking && GTM_ID.CONFIGURATION_HELP }\r\n                        data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                        data-ga4event-element = {config.tracking && GA4EVENT.ELEMENTS.CONFIGURATION_HELP}\r\n                        onClick={toggleModalLegend}\r\n                    >\r\n                        <IconInfoCircle />\r\n                    </button>\r\n                    <DownloadFilter />\r\n                    <div class=\"fxs_c_configuration_rollover_trigger\">\r\n                        <button\r\n                            type=\"button\"\r\n                            onClick={() => this.props.openCalendarSettings()}\r\n                            data-gtmid={ config.tracking && GTM_ID.CONFIGURATION_GEAR }\r\n                            data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                            data-ga4event-element = {config.tracking && GA4EVENT.ELEMENTS.CONFIGURATION_GEAR}\r\n                            class=\"fxs_btn fxs_btn_table_filter fxs_btn_xsmall fxs_fLeft fxs_btn_legend\"\r\n                        >\r\n                            <IconCogSolid />\r\n                        </button>\r\n                        <div class=\"fxs_c_configuration_rollover\">\r\n                            <div class=\"fxs_c_configuration_rollover_main\">\r\n                                <SoundAlert\r\n                                    onCheckboxChanged={() =>\r\n                                        this.onNotificationSoundChange()\r\n                                    }\r\n                                    notificationSoundOn={\r\n                                        settings.notificationSoundOn\r\n                                    }\r\n                                    locale={this.props.config.culture}\r\n                                ></SoundAlert>\r\n                                <ConfigureView\r\n                                    view={settings.view}\r\n                                    onOptionSelected={(option) =>\r\n                                        this.onOptionChange(option)\r\n                                    }\r\n                                    showDescription={false}\r\n                                    locale={this.props.config.culture}\r\n                                ></ConfigureView>\r\n                            </div>\r\n                            <footer class=\"fxs_c_configuration_rollover_footer\">\r\n                                <h4 class=\"fxs_headline_tiny fxs_fLeft\">\r\n                                    {enabledCalendarNotifications(config)\r\n                                        ? translate(\"NotificationsLabel\")\r\n                                        : \"\"}\r\n                                </h4>\r\n                                <a\r\n                                    onClick={() =>\r\n                                        this.props.openCalendarSettings()\r\n                                    }\r\n                                    class=\"fxs_fRight\"\r\n                                    data-gtmid={ config.tracking && GTM_ID.CONFIGURATION_MANAGE_EVENT_LIST }\r\n                                    data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                    data-ga4event-element = {config.tracking && GA4EVENT.ELEMENTS.CONFIGURATION_MANAGE_EVENT_LIST}\r\n                                >\r\n                                    {enabledCalendarNotifications(config)\r\n                                        ? translate(\"ManageEventList\")\r\n                                        : translate(\"ViewMore\")}\r\n                                    <IconAngleDoubleRight />\r\n                                </a>\r\n                            </footer>\r\n                        </div>\r\n                    </div>\r\n                    <button\r\n                        type=\"button\"\r\n                        onClick={() => this.toggleAdvancedFilter()}\r\n                        data-gtmid={config.tracking && GTM_ID.FILTER_ADVANCED}\r\n                        class={`fxs_btn fxs_btn_xsmall fxs_btn_default fxs_c_filters_trigger ${\r\n                            this.props.showAdvancedFilter\r\n                                ? \"fxs_c_filters_trigger_active\"\r\n                                : \"\"\r\n                        }`}\r\n                        data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                        data-ga4event-element = {config.tracking && GA4EVENT.ELEMENTS.FILTER_ADVANCED}\r\n                    >\r\n                        <span>\r\n                            <span>{translate(\"AdvancedFilterLabel\")}</span>\r\n                        </span>\r\n                    </button>\r\n                </div>\r\n                {settings.filter.eventName && (\r\n                    <div class=\"fxs_c_filter_event_name\">\r\n                        <span class=\"fxs_c_filter_event_name_label\">\r\n                            {translate(\"ResultsFor\")}\r\n                        </span>{\" \"}\r\n                        <span class=\"fxs_c_filter_event_name_badge\">\r\n                            <span class=\"fxs_c_filter_event_name_name\">\r\n                                {settings.filter.eventName}\r\n                            </span>\r\n                            <buttom\r\n                                class=\"fxs_btn fxs_c_filter_event_name_close_button\"\r\n                                onClick={() => {\r\n                                    onChangeFilter({ eventName: null });\r\n                                    this.props.fetchEventDates();\r\n                                }}\r\n                            >\r\n                                <IconTimes />\r\n                            </buttom>\r\n                        </span>\r\n                    </div>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"settings, defaultSettings, config, showAdvancedFilter, notificationsSupported, showSuccessMessage\",\r\n    actions\r\n)(DesktopFilter);\r\n","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport actions from \"../../actions\";\r\nimport IconTimes from \"../../../common/components/icons/IconTimes\";\r\n\r\nclass BlockedPopup extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n\r\n    render({ translate, showPermissionAlert, config }) {\r\n        return (\r\n            <div\r\n                class=\"fxs_widget fxs_modal_wrap modal fxs_blockedNotificationsModal\"\r\n                tabindex=\"-1\"\r\n                role=\"dialog\"\r\n                aria-hidden=\"true\"\r\n            >\r\n                <div class=\"fxs_modal_content\">\r\n                    <button\r\n                        type=\"button\"\r\n                        onClick={() => showPermissionAlert(false)}\r\n                        class=\"fxs_close_popupBlocked fxs_modal_close fxs_btn_icon close\"\r\n                        data-dismiss=\"modal\"\r\n                        aria-label=\"Close Modal\"\r\n                    >\r\n                        <IconTimes />\r\n                        <span class=\"fxs_skip\">{translate(\"Close\")}</span>\r\n                    </button>\r\n                    <div class=\"fxs_bg_light_5_clr fxs_HowTo\">\r\n                        <img\r\n                            src=\"https://editorial.fxstreet.com/images/CalendarNotifications/onesignalsubscribe.png\"\r\n                        />\r\n                    </div>\r\n                    <div class=\"fxs_detail\">\r\n                        <h2 class=\"fxs_headline_from_small_to_medium\">\r\n                            {translate(\"BlockedPopup_Title\")}\r\n                        </h2>\r\n                        <p class=\"fxs_entryPlain_txt\">\r\n                            {translate(\"BlockedPopup_Summary\")}\r\n                        </p>\r\n                        <a\r\n                            href={config.oneSignalDoc}\r\n                            target=\"_blank\"\r\n                            class=\"fxs_fLeft fxs_mutedLink\"\r\n                        >\r\n                            {translate(\"BlockedPopup_MoreInfo\")}\r\n                        </a>\r\n                        <button\r\n                            class=\"fxs_close_popupBlocked fxs_btn fxs_btn_cta fxs_fRight\"\r\n                            onClick={() => showPermissionAlert(false)}\r\n                        >\r\n                            {translate(\"Close\")}\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\"config\", actions)(BlockedPopup);\r\n","export const oneSignalInit = function (config) {\r\n    window.OneSignal = window.OneSignal || [];\r\n    if (mustOneSignalInit(config)) {\r\n        OneSignal.push(function () {\r\n            let settings = {\r\n                appId: config.oneSignalAppId,\r\n                notifyButton: {\r\n                    enable: false,\r\n                },\r\n                welcomeNotification: {\r\n                    disable: true,\r\n                },\r\n            };\r\n            if (!isHttps(config))\r\n                settings.subdomainName = config.initOneSignal;\r\n            if (config.safariWebId)\r\n                settings.safari_web_id = config.safariWebId;\r\n\r\n            OneSignal.init(settings);\r\n\r\n            if (isHttps(config))\r\n                OneSignal.showNativePrompt();\r\n        });\r\n    }\r\n};\r\n\r\nexport const mustOneSignalInit = (config) => {\r\n    return config.oneSignalAppId && config.initOneSignal;\r\n};\r\n\r\nexport const isHttps = (config) => {\r\n    return config.initOneSignal === \"https\";\r\n};\r\n","import { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport { SpeechScoreName, ScoreClasses } from \"../../constants/speechScore\";\r\n\r\nconst SpeechScore = ({\r\n    speechScore,\r\n    forceUpperCase = false,\r\n    hideScoreNumber = false,\r\n    translate,\r\n}) => {\r\n    const scoreLevel = speechScore.scoreLevel;\r\n    const score = speechScore.score;\r\n    const isScoreNaN = isNaN(score);\r\n\r\n    const scoreLabel = SpeechScoreName[scoreLevel] ?? \"NA\";\r\n    const cssClass = ScoreClasses[scoreLevel];\r\n\r\n    const translatedScoreLabel =\r\n        scoreLabel && forceUpperCase\r\n            ? translate(scoreLabel).toUpperCase()\r\n            : translate(scoreLabel);\r\n\r\n    let formattedScore;\r\n\r\n    if (!isScoreNaN) formattedScore = parseFloat(score).toFixed(1);\r\n\r\n    return (\r\n        <span className={`fxs_c_speech_score ${cssClass}`}>\r\n            {translatedScoreLabel}\r\n            {!hideScoreNumber && formattedScore && ` ${formattedScore}`}\r\n        </span>\r\n    );\r\n};\r\n\r\nexport default connectWithTranslations()(SpeechScore);\r\n","import { h, Component } from \"preact\";\r\nimport actions from \"../../../actions\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport IconFileICSLight from \"../../../../common/components/icons/IconFilterICSLight\";\r\nimport IconFileCSVLight from \"../../../../common/components/icons/IconFileCSVLight\";\r\nimport IconDownload from \"../../../../common/components/icons/IconDownload\";\r\nimport Dropdown from \"../../../../common/components/Dropdown\";\r\nimport { urlFactory, downloadCalendar } from \"../../../helpers\";\r\nimport { GTM_ID, GA4EVENT } from \"../../../constants\";\r\n\r\nclass DownloadFilter extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.renderTitle = this.renderTitle.bind(this);\r\n        this.renderOption = this.renderOption.bind(this);\r\n        this.onOptionSelected = this.onOptionSelected.bind(this);\r\n        this.getOptionGtm = this.getOptionGtm.bind(this);\r\n        this.getOptionGa4 = this.getOptionGa4.bind(this);\r\n    }\r\n\r\n    onOptionSelected(option) {\r\n        const { config, settings } = this.props;\r\n        var url = urlFactory.getEventDatesICalendar(config, settings, \"v1\");\r\n        downloadCalendar(url, option.format);\r\n    }\r\n\r\n    getOptionGtm(option) {\r\n        const { config } = this.props;\r\n        return config.tracking && option.gtmId;\r\n    }\r\n\r\n    getOptionGa4(option) {\r\n        const { config } = this.props;\r\n        return config.tracking && option.ga4Id;\r\n    }\r\n    renderTitle() {\r\n        return (\r\n            <span>\r\n                <IconDownload />\r\n            </span>\r\n        );\r\n    }\r\n\r\n    renderOption(option) {\r\n        return (\r\n            <span class=\"fxs_txt_center fxs_col_100 fxs_dBlock\">\r\n                <span>{option.name} </span>\r\n                {option.icon}\r\n            </span>\r\n        );\r\n    }\r\n\r\n    render({ containerClass = \"\", buttonType = \"fxs_btn_table_filter\", buttonSize = \"fxs_btn_xsmall\", config }) {\r\n        const options = [\r\n            {\r\n                name: \"ICS\",\r\n                format: \"text/calendar\",\r\n                gtmId: GTM_ID.ICSDOWNLOAD,\r\n                icon: <IconFileICSLight />,\r\n            },\r\n            {\r\n                name: \"CSV\",\r\n                format: \"text/csv\",\r\n                gtmId: GTM_ID.CSVDOWNLOAD,\r\n                icon: <IconFileCSVLight />,\r\n            },\r\n        ];\r\n        return (\r\n            <Dropdown\r\n                values={options}\r\n                renderTitle={this.renderTitle}\r\n                renderOption={this.renderOption}\r\n                onOptionSelected={this.onOptionSelected}\r\n                getOptionGtmId={this.getOptionGtm}\r\n                getOptionGa4Id={(key) => this.getOptionGa4}\r\n                getGa4Name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                getButtonGtmId={() => {\r\n                    config.tracking && GTM_ID.DOWNLOAD;\r\n                }}\r\n                getButtonGa4Id={() => {\r\n                    config.tracking && GA4EVENT.ELEMENTS.DOWNLOAD;\r\n                }}\r\n                containerClass={containerClass}\r\n                titleClass={`fxs_btn ${buttonType} ${buttonSize} fxs_btn_download`}\r\n            />\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\"config,settings\", actions)(DownloadFilter);\r\n","export const formatTemplate = (str, data) => {\r\n    data = data || {}\r\n    Object.keys(data).forEach(key => {\r\n        str = str.replace(new RegExp(`{${key}}`, 'g'), data[key])\r\n    })\r\n    return str\r\n}","\r\nlet datePickerinstance = null\r\nlet advancedDatePickerinstance = null\r\n\r\nexport const getDatePicker = async () =>  {\r\n    if (!datePickerinstance) {\r\n        datePickerinstance = await import(/*webpackChunkName: 'date-picker'*/\"./DatePicker\")\r\n    }\r\n\r\n    return datePickerinstance\r\n}\r\nexport const getAdvancedDatePicker = async () =>  {\r\n    if (!advancedDatePickerinstance) {\r\n        advancedDatePickerinstance = await import(/*webpackChunkName: 'advanced-date-picker'*/\"./AdvancedDatePicker\")\r\n    }\r\n\r\n    return advancedDatePickerinstance\r\n}","import { h, Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport Spinner from \"../../../common/components/Spinner\";\r\nimport IconBell from \"../../../common/components/icons/IconBell\";\r\nimport IconBellSolid from \"../../../common/components/icons/IconBellSolid\";\r\nimport IconCalendarPlus from \"../../../common/components/icons/IconCalendarPlus\";\r\nimport IconChartBar from \"../../../common/components/icons/IconChartBar\";\r\nimport IconInfoCircle from \"../../../common/components/icons/IconInfoCircle\";\r\nimport {\r\n    urlFactory,\r\n    downloadCalendar,\r\n    formatTemplate,\r\n    getDateString,\r\n} from \"../../helpers\";\r\nimport { GTM_ID, GA4EVENT } from \"../../constants\";\r\nimport actions from \"../../actions\";\r\nimport { CALENDAR_VIEW } from \"../../../calendar-common/constants\";\r\nimport { RELATED_NEWS_VIEW } from \"../../../calendar-common/constants/relatedNewsView\";\r\nimport IconAngleDoubleRight from \"../../../common/components/icons/IconAngleDoubleRight\";\r\nimport CalendarPosts from \"../../../calendar-common/components/CalendarPosts\";\r\nimport { getPeriodType } from \"../../../calendar-common/helpers/periodTypeHelper\";\r\nimport { enabledCalendarNotifications } from \"../../../calendar-common/helpers/calendar\";\r\nimport SpeechTrackerModal from \"../../components/modal/SpeechTrackerModal\";\r\nimport SpeechScore from \"./SpeechScore\";\r\nimport SpeechAverageScore from \"./SpeechAverageScore\";\r\nimport eventTimeCheck from \"../../helpers/eventTimeCheck\";\r\nimport { getSpeechScore } from \"../../helpers/getSpeechScore\";\r\n\r\nconst BasicCellNumber = \"10\";\r\nconst DefaultCellNumber = \"11\";\r\n\r\nclass EventRowDetailDesktop extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.renderDetail = this.renderDetail.bind(this);\r\n        this.state = {\r\n            showSpeechTrackerModal: false,\r\n        };\r\n    }\r\n\r\n    toggleSpeechTrackerModal = () => {\r\n        this.setState((prevState) => ({\r\n            showSpeechTrackerModal: !prevState.showSpeechTrackerModal,\r\n        }));\r\n    };\r\n\r\n    renderError() {\r\n        const {\r\n            translate,\r\n            settings: { view },\r\n        } = this.props;\r\n\r\n        return (\r\n            <tr>\r\n                <td\r\n                    colspan={\r\n                        view == CALENDAR_VIEW.Configure_View_Basic\r\n                            ? BasicCellNumber\r\n                            : DefaultCellNumber\r\n                    }\r\n                >\r\n                    {translate(\"DetailEventFetchError\")}\r\n                </td>\r\n            </tr>\r\n        );\r\n    }\r\n\r\n    renderFetching() {\r\n        const {\r\n            settings: { view },\r\n        } = this.props;\r\n\r\n        return (\r\n            <tr>\r\n                <td\r\n                    colspan={\r\n                        view == CALENDAR_VIEW.Configure_View_Basic\r\n                            ? BasicCellNumber\r\n                            : DefaultCellNumber\r\n                    }\r\n                >\r\n                    <Spinner />\r\n                </td>\r\n            </tr>\r\n        );\r\n    }\r\n\r\n    renderComments(eventDateDetailData) {\r\n        const { translate, config } = this.props;\r\n\r\n        return (\r\n            <div>\r\n                <h2 class=\"fxs_headline_small\">\r\n                    {translate(\"DetailEventDateDescription\")}\r\n                </h2>\r\n                {eventDateDetailData.headline && (\r\n                    <p class=\"fxs_txt_size_small\">\r\n                        <strong>{eventDateDetailData.headline}</strong>\r\n                    </p>\r\n                )}\r\n                <p\r\n                    class=\"fxs_txt_size_small\"\r\n                    dangerouslySetInnerHTML={{\r\n                        __html: eventDateDetailData.comments,\r\n                    }}\r\n                ></p>\r\n                {eventDateDetailData.link && (\r\n                    <a\r\n                        href={eventDateDetailData.link}\r\n                        class=\"fxs_fRight fxs_txt_size_xsmall\"\r\n                        data-gtmid={\r\n                            config.tracking &&\r\n                            GTM_ID.OPEN_READFULLREPORT(eventDateDetailData.id)\r\n                        }\r\n                        data-ga4event-clk-name={\r\n                            config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                        }\r\n                        data-ga4event-element={\r\n                            config.tracking && GA4EVENT.ELEMENTS.OPEN_READFULLREPORT\r\n                        }\r\n                        data-ga4event-eventdateid={eventDateDetailData.id}\r\n                    >\r\n                        {translate(\"DetailEventReadFullReport\")}\r\n                        <IconAngleDoubleRight />\r\n                    </a>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n\r\n    renderDescription(eventDateDetailData, eventDateRelatedNews) {\r\n        const { config } = this.props;\r\n        return (\r\n            <div className=\"fxs_c_description_wrapper\">\r\n                <p\r\n                    class=\"fxs_txt_size_small\"\r\n                    data-gtmid={\r\n                        config.tracking && GTM_ID.OPEN_LINK_TEXT(eventDateDetailData.id)\r\n                    }\r\n                    data-ga4event-clk-name={\r\n                        config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                    }\r\n                    data-ga4event-element={\r\n                        config.tracking && GA4EVENT.ELEMENTS.OPEN_LINK_TEXT\r\n                    }\r\n                    data-ga4event-eventdateid={eventDateDetailData.id}\r\n                    dangerouslySetInnerHTML={{\r\n                        __html: eventDateDetailData.description,\r\n                    }}\r\n                ></p>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    renderWhyMatters(eventDateDetailData) {\r\n        const { translate } = this.props;\r\n\r\n        return (\r\n            <div class=\"fxs_c_matters_traders\">\r\n                <h2 class=\"fxs_headline_small\">\r\n                    {translate(\"DetailEventDateMattersTradersTitle\")}\r\n                </h2>\r\n                <p\r\n                    class=\"fxs_txt_size_small\"\r\n                    dangerouslySetInnerHTML={{\r\n                        __html: eventDateDetailData.whyMatters,\r\n                    }}\r\n                ></p>\r\n            </div>\r\n        );\r\n    }\r\n    renderDetailTable(eventDateDetailData) {\r\n        const { translate, config } = this.props;\r\n\r\n        return (\r\n            <div class=\"fxs_c_detail_table fxs_txt_size_xsmall\">\r\n                {eventDateDetailData.source && (\r\n                    <div class=\"fxs_c_detail_table_row \">\r\n                        <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                            <strong>{translate(\"DetailEventDateSourceLabel\")}</strong>\r\n                        </div>\r\n                        <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                            <strong>\r\n                                {eventDateDetailData.urlSource ? (\r\n                                    <a\r\n                                        href={eventDateDetailData.urlSource}\r\n                                        target=\"_blank\"\r\n                                        data-gtmid={\r\n                                            config.tracking &&\r\n                                            GTM_ID.OPEN_SOURCE(eventDateDetailData.id)\r\n                                        }\r\n                                        data-ga4event-clk-name={\r\n                                            config.tracking &&\r\n                                            GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                        }\r\n                                        data-ga4event-element={\r\n                                            config.tracking &&\r\n                                            GA4EVENT.ELEMENTS.OPEN_SOURCE\r\n                                        }\r\n                                        data-ga4event-eventdateid={eventDateDetailData.id}\r\n                                    >\r\n                                        {eventDateDetailData.source}\r\n                                    </a>\r\n                                ) : (\r\n                                    <span>{eventDateDetailData.source}</span>\r\n                                )}\r\n                            </strong>\r\n                        </div>\r\n                    </div>\r\n                )}\r\n\r\n                <div class=\"fxs_c_detail_table_row \">\r\n                    <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                        <strong>{translate(\"DetailEventFrequency\")}</strong>\r\n                    </div>\r\n                    <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                        {getPeriodType(eventDateDetailData.periodType, translate)}\r\n                    </div>\r\n                </div>\r\n                {eventDateDetailData.nextReleaseDate && (\r\n                    <div class=\"fxs_c_detail_table_row \">\r\n                        <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                            <strong>{translate(\"DetailEventNextRelease\")}</strong>\r\n                        </div>\r\n                        <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                            {getDateString(\r\n                                new Date(eventDateDetailData.nextReleaseDate),\r\n                                config.culture\r\n                            )}\r\n                        </div>\r\n                    </div>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n\r\n    renderSpeechScore({ isSpeechScoreLocked, speechScore, hasSpeechData, isInProgress }) {\r\n        const { translate } = this.props;\r\n\r\n        return (\r\n            <>\r\n                {isSpeechScoreLocked && (\r\n                    <>\r\n                        <p class=\"fxs_c_unlock\">\r\n                            <span>{translate(\"DetailEventDateUnlock\")}</span>\r\n                            <a\r\n                                href=\"/account/login?uriToRedirect=%2Feconomic-calendar%3Fuser_action%3Dlogin\"\r\n                                class=\"fxs_c_unlock_btn\"\r\n                                data-ga4event-clk-name=\"features-calendar_click\"\r\n                                data-ga4event-element=\"log-in\"\r\n                            >\r\n                                {translate(\"LogIn\")}\r\n                            </a>\r\n                        </p>\r\n                        <p\r\n                            class=\"fxs_c_speed_tracker_mean\"\r\n                            onClick={this.toggleSpeechTrackerModal}\r\n                        >\r\n                            <IconInfoCircle />\r\n                            <span>{translate(\"SpeechTrackerMean\")}</span>\r\n                        </p>\r\n                    </>\r\n                )}\r\n                {!isSpeechScoreLocked && hasSpeechData && (\r\n                    <div className=\"fxs_c_speech_score_detail_wrapper\">\r\n                        {speechScore?.isVotingMember != null && (\r\n                            <p class=\"fxs_c_speech_tracker_score\">\r\n                                <span>{translate(\"VotingMember\").concat(\": \")}</span>\r\n                                <span className=\"fxs_c_speech_score\">\r\n                                    {speechScore?.isVotingMember ? \"Yes\" : \"No\"}\r\n                                </span>\r\n                            </p>\r\n                        )}\r\n                        <p class=\"fxs_c_speech_tracker_score\">\r\n                            <span>\r\n                                {translate(\"SpeechTrackerScoreLabel\").concat(\": \")}\r\n                            </span>\r\n                            {speechScore?.score ? (\r\n                                <SpeechScore speechScore={speechScore} />\r\n                            ) : isInProgress ? (\r\n                                <span className=\"fxs_c_speech_score_label\">\r\n                                    {translate(\"InProgress\")}\r\n                                </span>\r\n                            ) : (\r\n                                <span className=\"fxs_c_speech_score\">-</span>\r\n                            )}\r\n                        </p>\r\n                        <p class=\"fxs_c_speech_tracker_score\">\r\n                            <span>{translate(\"Average\").concat(\": \")}</span>\r\n                            <SpeechAverageScore\r\n                                speechScore={speechScore}\r\n                                includeLabel={true}\r\n                            />\r\n                        </p>\r\n                    </div>\r\n                )}\r\n            </>\r\n        );\r\n    }\r\n\r\n    renderDetail(eventDateDetailData, eventDateRelatedNews, eventTimeReached) {\r\n        const {\r\n            canBeSubscribed,\r\n            isSubscribed,\r\n            subscribeToEvent,\r\n            unsubscribeToEvent,\r\n            translate,\r\n            config,\r\n            showEventNotifyModal,\r\n            settings: { timezoneOffset, view },\r\n            event,\r\n            eventDateDetails,\r\n        } = this.props;\r\n\r\n        const showDashIcon =\r\n            config.dashboardUrl &&\r\n            !(\r\n                eventDateDetailData.isSpeech ||\r\n                eventDateDetailData.isReport ||\r\n                eventDateDetailData.isAllDay\r\n            );\r\n\r\n        let speechScore = null;\r\n        let isSpeechScoreLocked = false;\r\n\r\n        const isSpeech = event?.isSpeech ?? false;\r\n        const hasScore = event?.speech?.score ?? false;\r\n        const hasSpeechData =\r\n            event?.speech?.score ?? event?.speech?.averageScore ?? false;\r\n\r\n        const isSpeechScoreEnabled = config.enableSpeechScore;\r\n\r\n        const isInProgress =\r\n            !hasScore &&\r\n            event?.isScoreTrackable &&\r\n            eventTimeReached &&\r\n            isSpeechScoreEnabled;\r\n\r\n        if (isSpeech && isSpeechScoreEnabled && hasSpeechData) {\r\n            speechScore = getSpeechScore(event);\r\n            isSpeechScoreLocked = config.isLocked();\r\n        }\r\n\r\n        return (\r\n            <tr>\r\n                <td\r\n                    colspan={\r\n                        view == CALENDAR_VIEW.Configure_View_Basic\r\n                            ? BasicCellNumber\r\n                            : DefaultCellNumber\r\n                    }\r\n                    class=\"fxs_c_detail\"\r\n                >\r\n                    {isSpeechScoreEnabled &&\r\n                        this.renderSpeechScore({\r\n                            isSpeechScoreLocked,\r\n                            speechScore,\r\n                            hasSpeechData,\r\n                            isInProgress,\r\n                        })}\r\n                    {this.state.showSpeechTrackerModal && (\r\n                        <SpeechTrackerModal\r\n                            toggleSpeechTrackerModal={this.toggleSpeechTrackerModal}\r\n                        />\r\n                    )}\r\n                    <div class=\"fxs_c_action_buttons fxs_fRight\">\r\n                        <button\r\n                            type=\"button\"\r\n                            data-gtmid={\r\n                                config.tracking &&\r\n                                GTM_ID.ADD_EVENT(eventDateDetailData.id)\r\n                            }\r\n                            data-ga4event-clk-name={\r\n                                config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                            }\r\n                            data-ga4event-element={\r\n                                config.tracking && GA4EVENT.ELEMENTS.ADD_EVENT\r\n                            }\r\n                            data-ga4event-eventdateid={eventDateDetailData.id}\r\n                            onClick={() =>\r\n                                downloadCalendar(\r\n                                    urlFactory.getEventDateICalendar(\r\n                                        config,\r\n                                        eventDateDetailData.id\r\n                                    ),\r\n                                    \"text/calendar\"\r\n                                )\r\n                            }\r\n                            class=\"fxs_c_detail_action_button fxs_c_tooltip_action\"\r\n                        >\r\n                            <IconCalendarPlus />\r\n                            <span class=\"fxs_c_content\">\r\n                                <span class=\"fxs_c_textnode\">\r\n                                    {translate(\"AddEvent\")}\r\n                                </span>\r\n                            </span>\r\n                        </button>\r\n                        {showDashIcon && (\r\n                            <a\r\n                                href={formatTemplate(config.dashboardUrl, {\r\n                                    eventId: eventDateDetailData.eventId,\r\n                                    timezoneOffset,\r\n                                })}\r\n                                class=\"fxs_c_detail_action_button  fxs_c_tooltip_action\"\r\n                                data-gtmid={\r\n                                    config.tracking &&\r\n                                    GTM_ID.OPEN_DASHBOARD(eventDateDetailData.id)\r\n                                }\r\n                                data-ga4event-clk-name={\r\n                                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                }\r\n                                data-ga4event-element={\r\n                                    config.tracking && GA4EVENT.ELEMENTS.OPEN_DASHBOARD\r\n                                }\r\n                                data-ga4event-eventdateid={eventDateDetailData.id}\r\n                                target=\"_blank\"\r\n                            >\r\n                                <IconChartBar />\r\n                                <span class=\"fxs_c_content\">\r\n                                    <span class=\"fxs_c_textnode\">\r\n                                        {translate(\"Dashboard\")}\r\n                                    </span>\r\n                                </span>\r\n                            </a>\r\n                        )}\r\n\r\n                        {canBeSubscribed && enabledCalendarNotifications(config) && (\r\n                            <button\r\n                                type=\"button\"\r\n                                class={`fxs_c_detail_action_button fxs_subscribe fxs_c_tooltip_action\r\n                            ${isSubscribed ? \"fxs_c_detail_action_button_active\" : \"\"}\r\n                        `}\r\n                                data-gtmid={\r\n                                    config.tracking && isSubscribed\r\n                                        ? GTM_ID.NOTIFY_ME_UNSUBSCRIPTION(\r\n                                              eventDateDetailData.id\r\n                                          )\r\n                                        : GTM_ID.NOTIFY_ME_SUBSCRIPTION(\r\n                                              eventDateDetailData.id\r\n                                          )\r\n                                }\r\n                                data-ga4event-clk-name={\r\n                                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                }\r\n                                data-ga4event-element={\r\n                                    config.tracking && isSubscribed\r\n                                        ? GA4EVENT.ELEMENTS.NOTIFY_ME_UNSUBSCRIPTION\r\n                                        : GA4EVENT.ELEMENTS.NOTIFY_ME_SUBSCRIPTION\r\n                                }\r\n                                data-ga4event-eventdateid={eventDateDetailData.id}\r\n                                onClick={() => {\r\n                                    if (isSubscribed)\r\n                                        unsubscribeToEvent(eventDateDetailData.eventId);\r\n                                    else {\r\n                                        subscribeToEvent(eventDateDetailData.eventId);\r\n                                    }\r\n                                }}\r\n                            >\r\n                                {isSubscribed && enabledCalendarNotifications(config) ? (\r\n                                    <IconBellSolid />\r\n                                ) : (\r\n                                    <IconBell />\r\n                                )}\r\n                                <span class=\"fxs_c_content\">\r\n                                    <span class=\"fxs_c_textnode\">\r\n                                        {translate(\"NotifyMe\")}\r\n                                    </span>\r\n                                </span>\r\n                            </button>\r\n                        )}\r\n                    </div>\r\n                    <div class=\"fxs_clearfix\"></div>\r\n                    <div class=\"fxs_c_detail_top_row\">\r\n                        <div\r\n                            class={`fxs_c_detail_half_block ${\r\n                                eventDateDetailData.comments\r\n                                    ? \"fxs_c_detail_comments\"\r\n                                    : \"\"\r\n                            }`}\r\n                        >\r\n                            {eventDateDetailData.comments\r\n                                ? this.renderComments(eventDateDetailData)\r\n                                : eventDateDetailData.whyMatters\r\n                                ? this.renderWhyMatters(eventDateDetailData)\r\n                                : this.renderDescription(\r\n                                      eventDateDetailData,\r\n                                      eventDateRelatedNews\r\n                                  )}\r\n                        </div>\r\n                        <div class=\"fxs_c_detail_half_block\">\r\n                            {this.renderDetailTable(eventDateDetailData)}\r\n                            {(eventDateDetailData.comments ||\r\n                                eventDateDetailData.whyMatters) &&\r\n                                this.renderDescription(\r\n                                    eventDateDetailData,\r\n                                    eventDateRelatedNews\r\n                                )}\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"fxs_clearfix\"></div>\r\n\r\n                    {eventDateDetailData.comments &&\r\n                    eventDateDetailData.whyMatters &&\r\n                    eventDateRelatedNews ? (\r\n                        <div class=\"fxs_c_detail_bottom_row\">\r\n                            <div class=\"fxs_c_detail_half_block\">\r\n                                {this.renderWhyMatters(eventDateDetailData)}\r\n                            </div>\r\n                            {eventDateRelatedNews && (\r\n                                <CalendarPosts\r\n                                    view={RELATED_NEWS_VIEW.View_Half}\r\n                                    wrapperClass=\"fxs_c_detail_half_block\"\r\n                                    posts={eventDateRelatedNews.data}\r\n                                    isFetching={eventDateRelatedNews.isFetching}\r\n                                    fetchError={eventDateRelatedNews.fetchError}\r\n                                    RelatedNewsTranslation={translate(\"RelatedNewsTitle\")}\r\n                                    ByAuthorTranslation={translate(\"ByAuthor\")}\r\n                                    ErrorTranslation={translate(\"ErrorFetchingNews\")}\r\n                                    culture={config.culture}\r\n                                    customPostUrl={config.customPostUrl}\r\n                                />\r\n                            )}\r\n                        </div>\r\n                    ) : (\r\n                        eventDateRelatedNews && (\r\n                            <div\r\n                                class=\"fxs_c_detail_bottom_row\"\r\n                                data-gtmid={\r\n                                    config.tracking &&\r\n                                    GTM_ID.OPEN_RELATEDNEWS(eventDateDetailData.id)\r\n                                }\r\n                                data-ga4event-clk-name={\r\n                                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                }\r\n                                data-ga4event-element={\r\n                                    config.tracking && GA4EVENT.ELEMENTS.OPEN_RELATEDNEWS\r\n                                }\r\n                                data-ga4event-eventdateid={eventDateDetailData.id}\r\n                            >\r\n                                <CalendarPosts\r\n                                    view={RELATED_NEWS_VIEW.View_Grid}\r\n                                    wrapperClass=\"fxs_c_detail_half_block\"\r\n                                    posts={eventDateRelatedNews.data}\r\n                                    isFetching={eventDateRelatedNews.isFetching}\r\n                                    fetchError={eventDateRelatedNews.fetchError}\r\n                                    RelatedNewsTranslation={translate(\"RelatedNewsTitle\")}\r\n                                    ByAuthorTranslation={translate(\"ByAuthor\")}\r\n                                    ErrorTranslation={translate(\"ErrorFetchingNews\")}\r\n                                    culture={config.culture}\r\n                                    customPostUrl={config.customPostUrl}\r\n                                />\r\n                            </div>\r\n                        )\r\n                    )}\r\n                </td>\r\n            </tr>\r\n        );\r\n    }\r\n\r\n    render(\r\n        { event, eventDateDetails, eventDateDetailShown, relatedNews, eventTimeReached },\r\n        {}\r\n    ) {\r\n        const { id } = event;\r\n\r\n        const isVisible = eventDateDetailShown && eventDateDetailShown === id;\r\n        const eventDateDetail = eventDateDetails.hasOwnProperty(id)\r\n            ? eventDateDetails[id]\r\n            : null;\r\n\r\n        const eventDateNews = relatedNews.hasOwnProperty(id) ? relatedNews[id] : null;\r\n\r\n        if (!isVisible || !eventDateDetail) {\r\n            return null;\r\n        }\r\n        if (eventDateDetail.error) {\r\n            return this.renderError();\r\n        }\r\n        if (eventDateDetail.isFetching) {\r\n            return this.renderFetching();\r\n        }\r\n\r\n        return this.renderDetail(eventDateDetail.data, eventDateNews, eventTimeReached);\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"eventDateDetails,eventDateDetailShown,config,settings, relatedNews\",\r\n    actions\r\n)(eventTimeCheck(EventRowDetailDesktop));\r\n","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport { CATEGORY_FILTER_OPTIONS, GTM_ID, GA4EVENT } from \"../../../constants\";\r\nimport CheckboxPicker from \"../../../../common/components/CheckboxPicker\";\r\nimport IconCaretDown from \"../../../../common/components/icons/IconCaretDown\";\r\nclass AdvancedCategoryFilterMobile extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.togglePicker = this.togglePicker.bind(this);\r\n        this.applyNewSelectedCategories =\r\n            this.applyNewSelectedCategories.bind(this);\r\n\r\n        this.state = {\r\n            isPickerOpen: false,\r\n            selected: [],\r\n        };\r\n    }\r\n    componentWillMount() {\r\n        const categories = getKeysOfNotNullValues(CATEGORY_FILTER_OPTIONS);\r\n\r\n        this.setState({\r\n            selected: this.props.selectedCategories,\r\n            categories,\r\n        });\r\n    }\r\n\r\n    componentWillReceiveProps(nextProps) {\r\n        if (this.props.selectedCategories !== nextProps.selectedCategories) {\r\n            const selected = this.state.categories.filter((key) =>\r\n                nextProps.selectedCategories.includes(\r\n                    CATEGORY_FILTER_OPTIONS[key]\r\n                )\r\n            );\r\n            this.setState({\r\n                selected: selected.map((x) => CATEGORY_FILTER_OPTIONS[x]),\r\n            });\r\n        }\r\n    }\r\n\r\n    onChangeCountriesSelected(newSelected) {\r\n        this.setState({\r\n            selected: newSelected,\r\n        });\r\n    }\r\n\r\n    togglePicker() {\r\n        if (this.state.isPickerOpen)\r\n            this.setState({\r\n                isPickerOpen: false,\r\n                selected: this.props.selectedCategories,\r\n            });\r\n        else this.setState({ isPickerOpen: true });\r\n    }\r\n\r\n    applyNewSelectedCategories() {\r\n        this.props.onChange(this.state.selected);\r\n        this.togglePicker();\r\n    }\r\n    render({ onChange, translate, config }, { selected, categories }) {\r\n        const selectedCatagories = getCategoriesSelected(categories, selected);\r\n        return (\r\n            <div>\r\n                <h4 class=\"fxs_headline_small fxs_marginBase_top\">\r\n                    {this.props.translate(\"CategoryFilterTitle\")}\r\n                </h4>\r\n                <button\r\n                    type=\"button\"\r\n                    onClick={this.togglePicker}\r\n                    class=\"fxs_c_filter_picker_trigger_button\"\r\n                >\r\n                    {translate(\"CategoryFilterTitle\")} ({selected.length})\r\n                    <IconCaretDown />\r\n                </button>\r\n                {this.state.isPickerOpen && (\r\n                    <div\r\n                        class=\"fxs_c_advanced-countries-backdrop\"\r\n                        onClick={() => this.togglePicker()}\r\n                    ></div>\r\n                )}\r\n                {this.state.isPickerOpen && (\r\n                    <div class=\"fxs_c_filters_picker\">\r\n                        <h4 class=\"fxs_headline_tiny fxs_marginBase_bottom\">Select category:</h4>\r\n                        <CheckboxPicker\r\n                            containerClass=\"fxs_c_category_picker_inner\"\r\n                            onChange={(values) =>\r\n                                this.onChangeCountriesSelected(\r\n                                    values.map(\r\n                                        (x) => CATEGORY_FILTER_OPTIONS[x]\r\n                                    )\r\n                                )\r\n                            }\r\n                            renderTitle={() => { }}\r\n                            values={categories}\r\n                            checkedValues={selectedCatagories}\r\n                            renderValue={(value) => (\r\n                                <span>{translate(value)}</span>\r\n                            )}\r\n                            getOptionGtmId={(key) =>\r\n                                config.tracking &&\r\n                                GTM_ID.ADVANCED_FILTERS_CATEGORY_CHECKBOX(\r\n                                    key\r\n                                        .replace(\"Category_\", \"\")\r\n                                        .toLowerCase()\r\n                                )\r\n                            }\r\n                            getOptionGA4Id={(key) =>\r\n                                config.tracking &&\r\n                                GA4EVENT.ELEMENTS.ADVANCED_FILTERS_CATEGORY_CHECKBOX(\r\n                                    key\r\n                                        .replace(\"Category_\", \"\")\r\n                                        .toLowerCase()\r\n                                )}\r\n                            getGa4Name={\r\n                                config.tracking &&\r\n                                GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                            }\r\n\r\n\r\n                            labelClass=\"fxs_c_filter_picker_label\"\r\n                        />\r\n                        <div class=\"fxs_c_filter_picker_footer\">\r\n                            <button\r\n                                type=\"button\"\r\n                                onClick={() => this.togglePicker()}\r\n                                class=\"fxs_btn fxs_btn_phantom fxs_fLeft\"\r\n                            >\r\n                                {\" \"}\r\n                                {this.props.translate(\"FilterCancelLabel\")}\r\n                            </button>\r\n                            <button\r\n                                type=\"button\"\r\n                                onClick={() =>\r\n                                    this.applyNewSelectedCategories(selected)\r\n                                }\r\n                                class=\"fxs_btn fxs_btn_cta fxs_fRight\"\r\n                            >\r\n                                {\" \"}\r\n                                {this.props.translate(\"FilterDoneLabel\")}\r\n                            </button>\r\n                        </div>\r\n                    </div>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n}\r\nconst getCategoriesSelected = (categories, selected) =>\r\n    selected.length === 0\r\n        ? []\r\n        : categories.filter((key) =>\r\n            selected.includes(CATEGORY_FILTER_OPTIONS[key])\r\n        );\r\nconst getKeysOfNotNullValues = (obj) =>\r\n    Object.keys(obj).filter((k) => obj[k] !== null);\r\n\r\nexport default connectWithTranslations(\"config\")(AdvancedCategoryFilterMobile);\r\n","import { Component } from \"preact\";\r\nimport actions from \"../../actions\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport { FILTER_TYPE, SETTING_KEYS } from \"../../constants\";\r\nimport { getSetting } from \"../../../common/helpers/settingStorageHelpers\";\r\nimport AdvancedFilter from \"./advanced/AdvancedFilter\";\r\nimport { persistSettings } from \"../../../calendar-common/helpers/settingsHelper\";\r\n\r\nclass MobileFilter extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            filter: {\r\n                type: null,\r\n                time: null,\r\n                dateRange: { from: null, to: null },\r\n                categories: null,\r\n                volatilities: null,\r\n                countries: null,\r\n                eventName: \"\",\r\n            },\r\n            timezoneOffset: null,\r\n            persistSettings: false,\r\n        };\r\n\r\n        this.applyFilter = this.applyFilter.bind(this);\r\n        this.onMyFilterClick = this.onMyFilterClick.bind(this);\r\n        this.onDefaultsClick = this.onDefaultsClick.bind(this);\r\n    }\r\n\r\n    componentWillMount() {\r\n        const { settings } = this.props;\r\n        this.setState({\r\n            filter: settings.filter,\r\n            timezoneOffset: settings.timezoneOffset,\r\n        });\r\n    }\r\n\r\n    applyFilter() {\r\n        this.props.changeFilter({\r\n            ...this.state.filter,\r\n            type: this.state.persistSettings\r\n                ? FILTER_TYPE.custom\r\n                : this.state.filter.type,\r\n        });\r\n        this.props.changeTimezone(this.state.timezoneOffset);\r\n\r\n        this.props.fetchEventDates();\r\n        this.props.changeShowMobileFilter(false);\r\n\r\n        if (this.state.persistSettings) {\r\n            persistSettings({\r\n                ...this.props.settings,\r\n                filter: { ...this.state.filter, type: FILTER_TYPE.custom },\r\n                timezoneOffset: this.state.timezoneOffset,\r\n            });\r\n        }\r\n    }\r\n\r\n    onDefaultsClick() {\r\n        const defaultSettings = { ...this.props.defaultSettings };\r\n        defaultSettings.filter.type = FILTER_TYPE.default;\r\n        this.setState({\r\n            ...defaultSettings,\r\n            persistSettings: this.state.persistSettings,\r\n        });\r\n    }\r\n\r\n    onMyFilterClick() {\r\n        const settings = getSetting(SETTING_KEYS.Settings);\r\n        settings.filter.type = FILTER_TYPE.custom;\r\n        if (settings)\r\n            this.setState({\r\n                ...settings,\r\n                persistSettings: this.state.persistSettings,\r\n            });\r\n    }\r\n\r\n    render({ settings }) {\r\n        return (\r\n            <div class=\"fxs_c_mobile-filters-wrapper\">\r\n                <AdvancedFilter filter={settings.filter} />\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"settings, defaultSettings, config\",\r\n    actions\r\n)(MobileFilter);\r\n","import { Component } from \"preact\";\r\nimport actions from \"../../actions\";\r\nimport MobileFilter from \"./MobileFilter\";\r\nimport DesktopFilter from \"./DesktopFilter\";\r\nimport { isMobileOnly } from \"react-device-detect\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport IconSliders from \"../../../common/components/icons/IconSliders\";\r\nimport IconFilter from \"../../../common/components/icons/IconFilter\";\r\nimport IconTimes from \"../../../common/components/icons/IconTimes\";\r\nimport IconInfoCircle from \"../../../common/components/icons/IconInfoCircle\";\r\nimport { GTM_ID, GA4EVENT} from \"../../constants\";\r\nimport { getDateRange } from \"../../helpers/filter/dateRange\";\r\nimport TimeFilter from \"./common/TimeFilter\";\r\nimport { TIME_FILTERS_VALUES } from \"../../constants\";\r\nimport DownloadFilter from \"./common/DownloadFilter\";\r\nimport IconCogSolid from \"../../../common/components/icons/IconCogSolid\";\r\n\r\nclass EventListFilter extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.onChangeFilter = this.onChangeFilter.bind(this);\r\n        this.onChangeCustomFilter = this.onChangeCustomFilter.bind(this);\r\n        this.onChangeFilterDateRange = this.onChangeFilterDateRange.bind(this);\r\n        this.onApplyRange = this.onApplyRange.bind(this);\r\n    }\r\n\r\n    componentWillMount() {\r\n        this.props.settings.filter.dateRange = getDateRange(\r\n            this.props.settings.filter,\r\n            this.props.settings.timezoneOffset\r\n        );\r\n        this.props.fetchEventDates();\r\n    }\r\n\r\n    onChangeFilter({ time }) {\r\n        var dateRange = getDateRange(\r\n            { time },\r\n            this.props.settings.timezoneOffset\r\n        );\r\n        this.props.changeFilter({ dateRange, time });\r\n    }\r\n\r\n    onChangeFilterDateRange({ dateRange }) {\r\n        var time = TIME_FILTERS_VALUES.Custom;\r\n        this.props.changeFilter({ dateRange, time });\r\n    }\r\n\r\n    onChangeCustomFilter() {\r\n        var time = TIME_FILTERS_VALUES.Custom;\r\n        var dateRange = this.props.settings.filter.dateRange;\r\n        this.props.changeFilter({ dateRange, time });\r\n    }\r\n\r\n    onApplyRange({ dateRange }) {\r\n        var time = this.props.settings.filter.time;\r\n        this.props.changeFilterAndFetch({ dateRange, time });\r\n    }\r\n\r\n    render({\r\n        translate,\r\n        config,\r\n        changeShowMobileFilter,\r\n        showMobileFilter,\r\n        toggleModalLegend,\r\n        settings,\r\n        showSuccessMessage,\r\n    }) {\r\n        return (\r\n            <div class=\"fxs_ecocal_filter\">\r\n                {isMobileOnly ? (\r\n                    <div class=\"fxs_c_header-wrapper\">\r\n                        <div class=\"fxs_c_header-filter-wrapper\">\r\n                            <h1 class=\"fxs_sectionTitle_header\">\r\n                                {translate(\"TitleMob\")}\r\n                            </h1>\r\n                            <div class=\"fxs_fRight\">\r\n                                <button\r\n                                    type=\"button\"\r\n                                    class=\"fxs_btn fxs_btn_phantom fxs_c_mobile-filter-trigger fxs_fRight\"\r\n                                    data-gtmid={\r\n                                        config.tracking &&\r\n                                        (showMobileFilter\r\n                                            ? GTM_ID.MOBILE_FILTER_CLOSE\r\n                                            : GTM_ID.MOBILE_FILTER_OPEN)\r\n                                    }\r\n                                    data-ga4event-clk-name={ config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                    data-ga4event-element = {\r\n                                        config.tracking &&\r\n                                        (showMobileFilter\r\n                                            ? GA4EVENT.ELEMENTS.MOBILE_FILTER_CLOSE\r\n                                            : GA4EVENT.ELEMENTS.MOBILE_FILTER_OPEN)\r\n                                    }\r\n\r\n                                    onClick={() =>\r\n                                        changeShowMobileFilter(\r\n                                            !showMobileFilter\r\n                                        )\r\n                                    }\r\n                                >\r\n                                    <IconFilter />\r\n                                </button>\r\n                                <DownloadFilter\r\n                                    buttonSizeClass=\"fxs_btn fxs_btn_icon  fxs_btn_legend\"\r\n                                    containerClass=\"fxs_fRight\"\r\n                                    buttonType=\"fxs_btn_phantom\"\r\n                                    buttonSize=\"\"\r\n                                />\r\n                                <button\r\n                                    type=\"button\"\r\n                                    class=\"fxs_btn fxs_btn_icon  fxs_btn_legend\"\r\n                                    data-gtmid={\r\n                                        config.tracking &&\r\n                                        GTM_ID.CONFIGURATION_HELP\r\n                                    }\r\n                                    data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                    data-ga4event-element = {config.tracking && GA4EVENT.ELEMENTS.CONFIGURATION_HELP}\r\n\r\n                                    onClick={toggleModalLegend}\r\n                                >\r\n                                    <IconInfoCircle />\r\n                                </button>\r\n\r\n                                <button\r\n                                    type=\"button\"\r\n                                    data-gtmid={\r\n                                        config.tracking &&\r\n                                        GTM_ID.CONFIGURATION_GEAR\r\n                                    }\r\n                                    data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                    data-ga4event-element = {config.tracking && GA4EVENT.ELEMENTS.CONFIGURATION_GEAR}\r\n\r\n                                    onClick={() =>\r\n                                        this.props.openCalendarSettings()\r\n                                    }\r\n                                    class=\"fxs_btn fxs_btn_phantom fxs_btn_legend\"\r\n                                >\r\n                                    <IconCogSolid />\r\n                                </button>\r\n                            </div>\r\n                            <div class=\"fxs_c_ecocal_filter\">\r\n                                {showMobileFilter && <MobileFilter />}\r\n                                <hr class=\"fxs_divider_wide\" />\r\n                            </div>\r\n                        </div>\r\n                        {showSuccessMessage && (\r\n                            <div\r\n                                class=\"fxs_contextual_alert fxs_alert_success alert alert-dismissible fade in\"\r\n                                role=\"alert\"\r\n                            >\r\n                                <p class=\"fxs_alertText\">\r\n                                    {translate(\"Success_Message\")}\r\n                                </p>\r\n                            </div>\r\n                        )}\r\n                        <div class=\"fxs_c_time_filters_wrapper\">\r\n                            {\r\n                                <TimeFilter\r\n                                    time={settings.filter.time}\r\n                                    dateRange={settings.filter.dateRange}\r\n                                    onTimeFilterChanged={(time) =>\r\n                                        this.onChangeFilter({ time })\r\n                                    }\r\n                                    applyFilter={(dateRange) =>\r\n                                        this.onApplyRange({ dateRange })\r\n                                    }\r\n                                    onDateRangeFilterChanged={(dateRange) =>\r\n                                        this.onChangeFilterDateRange({\r\n                                            dateRange,\r\n                                        })\r\n                                    }\r\n                                    onChangeCustomFilter={\r\n                                        this.onChangeCustomFilter\r\n                                    }\r\n                                    getCalendarTimeOptionGtmId={(timeOption) =>\r\n                                        config.tracking &&\r\n                                        GTM_ID.DATEPIKER_OPTION(\r\n                                            timeOption.replace(\r\n                                                \"TimeFilter_\",\r\n                                                \"\"\r\n                                            )\r\n                                        )\r\n                                    }\r\n                                    getCalendarTimeOptionGa4Id={(timeOption) =>\r\n                                        config.tracking &&\r\n                                        GA4EVENT.ELEMENTS.DATEPIKER_OPTION(\r\n                                            timeOption.replace(\r\n                                                \"TimeFilter_\",\r\n                                                \"\"\r\n                                            )\r\n                                        )\r\n                                    }\r\n\r\n                                    getCalendarButtonGtmId={\r\n                                        config.tracking &&\r\n                                        GTM_ID.DATEPIKER_TIMESELECTOR_BUTTON\r\n                                    }\r\n                                    getCalendarButtonGa4Id={\r\n                                        config.tracking &&\r\n                                        GA4EVENT.ELEMENTS.DATEPIKER_TIMESELECTOR_BUTTON\r\n                                    }\r\n                                    getGa4Name={\r\n                                        config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                    }\r\n                                />\r\n                            }\r\n                        </div>\r\n                        {settings.filter.eventName && (\r\n                            <div class=\"fxs_c_filter_event_name\">\r\n                                <span class=\"fxs_c_filter_event_name_label\">\r\n                                    {translate(\"ResultsFor\")}\r\n                                </span>{\" \"}\r\n                                <span class=\"fxs_c_filter_event_name_badge\">\r\n                                    <span class=\"fxs_c_filter_event_name_name\">\r\n                                        {settings.filter.eventName}\r\n                                    </span>\r\n                                    <buttom\r\n                                        class=\"fxs_btn fxs_c_filter_event_name_close_button\"\r\n                                        onClick={() => {\r\n                                            this.onChangeFilter({\r\n                                                eventName: null,\r\n                                            });\r\n                                            this.props.fetchEventDates();\r\n                                        }}\r\n                                    >\r\n                                        <IconTimes />\r\n                                    </buttom>\r\n                                </span>\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n                ) : (\r\n                    <div class=\"fxs_c_header-filter-wrapper\">\r\n                        <DesktopFilter\r\n                            onChangeFilter={this.onChangeFilter}\r\n                            onChangeFilterDateRange={\r\n                                this.onChangeFilterDateRange\r\n                            }\r\n                            onChangeCustomFilter={this.onChangeCustomFilter}\r\n                            onApplyRange={this.onApplyRange}\r\n                        />\r\n                    </div>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"showMobileFilter, config, settings, notificationsSupported, showSuccessMessage\",\r\n    actions\r\n)(EventListFilter);\r\n","import { h } from 'preact'\r\nimport { connectWithTranslations } from '../../../common/helpers/translationsHelpers'\r\nimport Countdown from '../../../common/components/Countdown'\r\nimport FormattedDate from '../../../common/components/FormattedDate'\r\nimport IconSpinnerSolid from '../../../common/components/icons/IconSpinnerSolid'\r\nimport { TIME_FORMAT_OPTIONS } from '../../constants'\r\n\r\nconst EventTime = ({ date, hasActual, onEventHappened, settings: { timezoneOffset},timeFormat,translate }) => (\r\n    <Countdown\r\n        date={date}\r\n        shouldFinish={hasActual}\r\n        timezoneOffset={timezoneOffset}\r\n        updateIntervalSeconds={60}\r\n        spinnerDurationSeconds={60}\r\n        countdownDurationMinutes={59}\r\n        renderSpinner={() => <span class=\"fxs_centered\"><IconSpinnerSolid /></span>}\r\n        renderCountdown={remainingTime => remainingTime && <span>{`${remainingTime.minutes}${translate('MinuteAbbreviation')}`}</span>}\r\n        renderDateTime={date => <FormattedDate date={date} format = {timeFormat === TIME_FORMAT_OPTIONS.TwelveHours ? 'shortTime' : 'HH:MM'} />}\r\n        renderFinished={date => <FormattedDate date={date} format = {timeFormat === TIME_FORMAT_OPTIONS.TwelveHours ? 'shortTime' : 'HH:MM'} />}\r\n        onCountdownFinished={onEventHappened}\r\n    />\r\n)\r\n\r\nexport default connectWithTranslations('settings,timeFormat')(EventTime)\r\n","export const translations = {\r\n    \"ar\": () => import(/*webpackChunkName: 'calendar-t-ar'*/\"../translations/ar\"),\r\n    \"de\": () => import(/*webpackChunkName: 'calendar-t-de'*/\"../translations/de\"),\r\n    \"en\": () => import(/*webpackChunkName: 'calendar-t-en'*/\"../translations/en\"),\r\n    \"es\": () => import(/*webpackChunkName: 'calendar-t-es'*/\"../translations/es\"),\r\n    \"fr\": () => import(/*webpackChunkName: 'calendar-t-fr'*/\"../translations/fr\"),\r\n    \"id\": () => import(/*webpackChunkName: 'calendar-t-id'*/\"../translations/id\"),\r\n    \"ru\": () => import(/*webpackChunkName: 'calendar-t-ru'*/\"../translations/ru\"),\r\n    \"tr\": () => import(/*webpackChunkName: 'calendar-t-tr'*/\"../translations/tr\"),\r\n    \"zh-cht\": () => import(/*webpackChunkName: 'calendar-t-zh-cht'*/\"../translations/zh-cht\"),\r\n    \"zh-cn\": () => import(/*webpackChunkName: 'calendar-t-zh-cn'*/\"../translations/zh-cn\"),\r\n    \"vi\": () => import(/*webpackChunkName: 'calendar-t-vi'*/\"../translations/vi\"),\r\n    \"fa\": () => import(/*webpackChunkName: 'calendar-t-fa'*/\"../translations/fa\"),\r\n    \"pt\": () => import(/*webpackChunkName: 'calendar-t-pt'*/\"../translations/pt\"),\r\n    \"cs\": () => import(/*webpackChunkName: 'calendar-t-cs'*/\"../translations/cs\"),\r\n}\r\n\r\nexport const fetchLocalizations = async (store) => {\r\n    const storeCulture = store.getState().config.culture\r\n    const culture = storeCulture ? storeCulture.toLowerCase() : 'en'\r\n\r\n    const currentCulture = translations.hasOwnProperty(culture) ? culture : 'en'\r\n\r\n    const fetchedTranslations = await translations[currentCulture]()\r\n\r\n    return {\r\n        translations: fetchedTranslations.default\r\n    }\r\n}\r\n","import { Component, h } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport Spinner from \"../../../common/components/Spinner\";\r\nimport IconBell from \"../../../common/components/icons/IconBell\";\r\nimport IconBellSolid from \"../../../common/components/icons/IconBellSolid\";\r\nimport IconCalendarPlus from \"../../../common/components/icons/IconCalendarPlus\";\r\nimport IconChartBar from \"../../../common/components/icons/IconChartBar\";\r\nimport IconFileSolid from \"../../../common/components/icons/IconFileSolid\";\r\nimport IconInfoCircle from \"../../../common/components/icons/IconInfoCircle\";\r\nimport { urlFactory, downloadCalendar, formatTemplate } from \"../../helpers\";\r\nimport { GTM_ID, GA4EVENT } from \"../../constants\";\r\nimport actions from \"../../actions\";\r\nimport renderNumerical from \"../../helpers/render\";\r\nimport { getDeviation } from \"../../helpers/deviation\";\r\nimport { CALENDAR_VIEW } from \"../../../calendar-common/constants\";\r\nimport { enabledCalendarNotifications } from \"../../../calendar-common/helpers/calendar\";\r\nimport SpeechTrackerModal from \"../../components/modal/SpeechTrackerModal\";\r\nimport SpeechScore from \"./SpeechScore\";\r\nimport SpeechAverageScore from \"./SpeechAverageScore\";\r\nimport eventTimeCheck from \"../../helpers/eventTimeCheck\";\r\nimport { getSpeechScore } from \"../../helpers/getSpeechScore\";\r\n\r\nclass EventRowDetailMobile extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.renderDetail = this.renderDetail.bind(this);\r\n        this.openModalDetails = this.openModalDetails.bind(this);\r\n        this.state = {\r\n            showSpeechTrackerModal: false,\r\n        };\r\n    }\r\n\r\n    toggleSpeechTrackerModal = () => {\r\n        this.setState((prevState) => ({\r\n            showSpeechTrackerModal: !prevState.showSpeechTrackerModal,\r\n        }));\r\n    };\r\n\r\n    renderError() {\r\n        return (\r\n            <tr>\r\n                <td colSpan=\"5\">Error fetching event detail</td>\r\n            </tr>\r\n        );\r\n    }\r\n\r\n    renderFetching() {\r\n        return (\r\n            <tr>\r\n                <td colSpan=\"5\">\r\n                    <Spinner />\r\n                </td>\r\n            </tr>\r\n        );\r\n    }\r\n\r\n    openModalDetails() {\r\n        const {\r\n            event: { id },\r\n            showEventDateModalMenu,\r\n        } = this.props;\r\n        showEventDateModalMenu(id);\r\n    }\r\n\r\n    renderSpeechScore({ isSpeechScoreLocked, speechScore, hasSpeechData, isInProgress }) {\r\n        const { translate } = this.props;\r\n\r\n        return (\r\n            <>\r\n                {isSpeechScoreLocked && (\r\n                    <>\r\n                        <p class=\"fxs_c_unlock\">\r\n                            <span>{translate(\"DetailEventDateUnlock\")}</span>\r\n                            <a\r\n                                href=\"/account/login?uriToRedirect=%2Feconomic-calendar%3Fuser_action%3Dlogin\"\r\n                                class=\"fxs_c_unlock_btn\"\r\n                                data-ga4event-clk-name=\"features-calendar_click\"\r\n                                data-ga4event-element=\"log-in\"\r\n                            >\r\n                                {translate(\"LogIn\")}\r\n                            </a>\r\n                        </p>\r\n                        <p\r\n                            class=\"fxs_c_speed_tracker_mean\"\r\n                            onClick={this.toggleSpeechTrackerModal}\r\n                        >\r\n                            <IconInfoCircle />\r\n                            <span>{translate(\"SpeechTrackerMean\")}</span>\r\n                        </p>\r\n                    </>\r\n                )}\r\n                {!isSpeechScoreLocked && hasSpeechData && (\r\n                    <div className=\"fxs_c_speech_score_detail_wrapper\">\r\n                        {speechScore?.isVotingMember != null && (\r\n                            <p class=\"fxs_c_speech_tracker_score\">\r\n                                <span>{translate(\"Voting\")}</span>\r\n                                <span className=\"fxs_c_speech_score\">\r\n                                    {speechScore?.isVotingMember ? \"Yes\" : \"No\"}\r\n                                </span>\r\n                            </p>\r\n                        )}\r\n                        <p class=\"fxs_c_speech_tracker_score\">\r\n                            <span>\r\n                                {translate(\"SpeechTrackerScoreLabel\").concat(\": \")}\r\n                            </span>\r\n                            {speechScore?.score ? (\r\n                                <SpeechScore speechScore={speechScore} />\r\n                            ) : isInProgress ? (\r\n                                <span className=\"fxs_c_speech_score_label\">\r\n                                    {translate(\"InProgress\")}\r\n                                </span>\r\n                            ) : (\r\n                                <span className=\"fxs_c_speech_score\">-</span>\r\n                            )}\r\n                        </p>\r\n                        <p class=\"fxs_c_speech_tracker_score\">\r\n                            <span>{translate(\"Average\")}</span>\r\n                            <SpeechAverageScore\r\n                                speechScore={speechScore}\r\n                                includeLabel={true}\r\n                            />\r\n                        </p>\r\n                    </div>\r\n                )}\r\n            </>\r\n        );\r\n    }\r\n\r\n    renderDetail(eventDateDetailData, eventTimeReached) {\r\n        const {\r\n            canBeSubscribed,\r\n            isSubscribed,\r\n            subscribeToEvent,\r\n            unsubscribeToEvent,\r\n            translate,\r\n            config,\r\n            settings: { timezoneOffset, view },\r\n            event,\r\n            event: {\r\n                actual,\r\n                prefix,\r\n                percentage,\r\n                potency,\r\n                consensus,\r\n                previous,\r\n                ratioDeviation,\r\n                revised,\r\n                isBetterThanExpected,\r\n                speech,\r\n                isSpeech,\r\n                isReport,\r\n                isAllDay,\r\n            },\r\n        } = this.props;\r\n\r\n        let speechScore = null;\r\n        let isSpeechScoreLocked = false;\r\n\r\n        const hasScore = event?.speech?.score ?? false;\r\n        const hasSpeechData =\r\n            event?.speech?.score ?? event?.speech?.averageScore ?? false;\r\n\r\n        const isSpeechScoreEnabled = config.enableSpeechScore;\r\n\r\n        const isInProgress =\r\n            !hasScore &&\r\n            event?.isScoreTrackable &&\r\n            isSpeechScoreEnabled &&\r\n            eventTimeReached;\r\n\r\n        if (isSpeech && isSpeechScoreEnabled && hasSpeechData) {\r\n            speechScore = getSpeechScore(event);\r\n            isSpeechScoreLocked = config.isLocked();\r\n        }\r\n\r\n        const isOneColumn = isSpeech || isReport || isAllDay;\r\n\r\n        return (\r\n            <tr>\r\n                <td colSpan=\"5\" class=\"fxs_c_detail\">\r\n                    {isSpeechScoreEnabled &&\r\n                        this.renderSpeechScore({\r\n                            isSpeechScoreLocked,\r\n                            speechScore,\r\n                            hasSpeechData,\r\n                            isInProgress,\r\n                        })}\r\n                    {this.state.showSpeechTrackerModal && (\r\n                        <SpeechTrackerModal\r\n                            toggleSpeechTrackerModal={this.toggleSpeechTrackerModal}\r\n                        />\r\n                    )}\r\n                    {!isOneColumn && (\r\n                        <div class=\"fxs_c_detail_data\">\r\n                            <div class=\"fxs_c_detail_data_item\">\r\n                                <header class=\"fxs_c_detail_data_header\">\r\n                                    {translate(\"HeaderActual\")}\r\n                                </header>\r\n                                <p\r\n                                    class={`fxs_c_detail_data_data  ${\r\n                                        typeof isBetterThanExpected === \"boolean\"\r\n                                            ? isBetterThanExpected\r\n                                                ? \"fxs_c_positive\"\r\n                                                : \"fxs_c_negative\"\r\n                                            : \"\"\r\n                                    }`}\r\n                                >\r\n                                    {renderNumerical(\r\n                                        actual,\r\n                                        prefix,\r\n                                        percentage,\r\n                                        potency,\r\n                                        translate\r\n                                    )}\r\n                                </p>\r\n                            </div>\r\n                            {view != CALENDAR_VIEW.Configure_View_Basic && (\r\n                                <div class=\"fxs_c_detail_data_item\">\r\n                                    <header class=\"fxs_c_detail_data_header\">\r\n                                        {translate(\"RowDeviation\")}.\r\n                                    </header>\r\n                                    <p class=\"fxs_c_detail_data_data\">\r\n                                        {ratioDeviation !== null &&\r\n                                        ratioDeviation !== undefined\r\n                                            ? ratioDeviation.toFixed(2)\r\n                                            : getDeviation(actual, consensus)}\r\n                                    </p>\r\n                                </div>\r\n                            )}\r\n                            <div class=\"fxs_c_detail_data_item\">\r\n                                <header class=\"fxs_c_detail_data_header\">\r\n                                    {translate(\"RowConsensus\")}\r\n                                </header>\r\n                                <p class=\"fxs_c_detail_data_data\">\r\n                                    {renderNumerical(\r\n                                        consensus,\r\n                                        prefix,\r\n                                        percentage,\r\n                                        potency,\r\n                                        translate\r\n                                    )}\r\n                                </p>\r\n                            </div>\r\n                            <div class=\"fxs_c_detail_data_item\">\r\n                                <header class=\"fxs_c_detail_data_header\">\r\n                                    {translate(\"RowPrevious\")}\r\n                                </header>\r\n                                <p class=\"fxs_c_detail_data_data\">\r\n                                    {typeof revised !== \"undefined\" &&\r\n                                        revised !== null &&\r\n                                        renderNumerical(\r\n                                            revised,\r\n                                            prefix,\r\n                                            percentage,\r\n                                            potency,\r\n                                            translate\r\n                                        )}\r\n                                    {typeof revised === \"undefined\" ||\r\n                                        (revised === null &&\r\n                                            renderNumerical(\r\n                                                previous,\r\n                                                prefix,\r\n                                                percentage,\r\n                                                potency,\r\n                                                translate\r\n                                            ))}\r\n                                </p>\r\n                            </div>\r\n                        </div>\r\n                    )}\r\n                    <div class=\"fxs_c_detail_buttons\">\r\n                        <button\r\n                            type=\"button\"\r\n                            class={`fxs_c_detail_button fxs_c_detail_toggled_button`}\r\n                            onClick={() => {\r\n                                this.openModalDetails(this);\r\n                            }}\r\n                        >\r\n                            <IconFileSolid />\r\n                        </button>\r\n                        <button\r\n                            type=\"button\"\r\n                            class={`fxs_c_detail_button fxs_c_detail_toggled_button`}\r\n                            onClick={() => {\r\n                                window.open(\r\n                                    formatTemplate(\r\n                                        config.dashboardUrl,\r\n                                        {\r\n                                            eventId: eventDateDetailData.eventId,\r\n                                            timezoneOffset,\r\n                                        },\r\n                                        \"_blank\"\r\n                                    )\r\n                                );\r\n                            }}\r\n                            data-gtmid={\r\n                                config.tracking &&\r\n                                GTM_ID.OPEN_DASHBOARD(eventDateDetailData.id)\r\n                            }\r\n                            data-ga4event-clk-name={\r\n                                config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                            }\r\n                            data-ga4event-element={\r\n                                config.tracking && GA4EVENT.ELEMENTS.OPEN_DASHBOARD\r\n                            }\r\n                            data-ga4event-eventdateid={eventDateDetailData.id}\r\n                        >\r\n                            <IconChartBar />\r\n                        </button>\r\n                        <button\r\n                            type=\"button\"\r\n                            class={`fxs_c_detail_button fxs_c_detail_toggled_button`}\r\n                            data-gtmid={\r\n                                config.tracking &&\r\n                                GTM_ID.ADD_EVENT(eventDateDetailData.id)\r\n                            }\r\n                            data-ga4event-clk-name={\r\n                                config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                            }\r\n                            data-ga4event-element={\r\n                                config.tracking && GA4EVENT.ELEMENTS.ADD_EVENT\r\n                            }\r\n                            data-ga4event-eventdateid={eventDateDetailData.id}\r\n                            onClick={() =>\r\n                                downloadCalendar(\r\n                                    urlFactory.getEventDateICalendar(\r\n                                        config,\r\n                                        eventDateDetailData.id\r\n                                    ),\r\n                                    \"text/calendar\"\r\n                                )\r\n                            }\r\n                        >\r\n                            <IconCalendarPlus />\r\n                        </button>\r\n                        <button\r\n                            type=\"button\"\r\n                            class={\r\n                                isSubscribed\r\n                                    ? \"fxs_c_detail_button fxs_c_detail_button_active\"\r\n                                    : \"fxs_c_detail_button\"\r\n                            }\r\n                            data-gtmid={\r\n                                config.tracking && isSubscribed\r\n                                    ? GTM_ID.NOTIFY_ME_UNSUBSCRIPTION(\r\n                                          eventDateDetailData.id\r\n                                      )\r\n                                    : GTM_ID.NOTIFY_ME_SUBSCRIPTION(\r\n                                          eventDateDetailData.id\r\n                                      )\r\n                            }\r\n                            data-ga4event-clk-name={\r\n                                config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                            }\r\n                            data-ga4event-element={\r\n                                config.tracking && isSubscribed\r\n                                    ? GA4EVENT.ELEMENTS.NOTIFY_ME_UNSUBSCRIPTION\r\n                                    : GA4EVENT.ELEMENTS.NOTIFY_ME_SUBSCRIPTION\r\n                            }\r\n                            data-ga4event-eventdateid={eventDateDetailData.id}\r\n                            onClick={() => {\r\n                                if (isSubscribed)\r\n                                    unsubscribeToEvent(eventDateDetailData.eventId);\r\n                                else {\r\n                                    subscribeToEvent(eventDateDetailData.eventId);\r\n                                }\r\n                            }}\r\n                            disabled={\r\n                                !canBeSubscribed && enabledCalendarNotifications(config)\r\n                            }\r\n                        >\r\n                            {isSubscribed && enabledCalendarNotifications(config) ? (\r\n                                <IconBellSolid />\r\n                            ) : (\r\n                                <IconBell />\r\n                            )}\r\n                        </button>\r\n                    </div>\r\n                </td>\r\n            </tr>\r\n        );\r\n    }\r\n\r\n    render({\r\n        event,\r\n        eventDateDetails,\r\n        eventDateDetailMinimalShown,\r\n        showEventNotifyModal,\r\n        eventTimeReached,\r\n    }) {\r\n        const { id } = event;\r\n        const isVisible =\r\n            eventDateDetailMinimalShown && eventDateDetailMinimalShown === id;\r\n        const eventDateDetail = eventDateDetails.hasOwnProperty(id)\r\n            ? eventDateDetails[id]\r\n            : null;\r\n\r\n        if (!isVisible || !eventDateDetail) {\r\n            return null;\r\n        }\r\n        if (eventDateDetail.error) {\r\n            return this.renderError();\r\n        }\r\n        if (eventDateDetail.isFetching) {\r\n            return this.renderFetching();\r\n        }\r\n        return this.renderDetail(eventDateDetail.data, eventTimeReached);\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"eventDateDetails,eventDateDetailMinimalShown,config,settings\",\r\n    actions\r\n)(eventTimeCheck(EventRowDetailMobile));\r\n","import { DATE_OPTIONS } from \"../../calendar-common/constants/dateOptions\";\r\nimport { getOrdinalDay } from \"../../calendar-common/helpers/formatDate\";\r\n\r\nexport const getDateString = (date, culture) => {\r\n    if (date === undefined || date === null) {\r\n        return \"\";\r\n    }\r\n\r\n    var locale = culture.split(\"-\")[0];\r\n    var dateString = date.toLocaleDateString(locale, DATE_OPTIONS);\r\n\r\n    if (locale !== \"en\") {\r\n        return dateString;\r\n    }\r\n\r\n    const pr = new Intl.PluralRules(locale, { type: \"ordinal\" });\r\n    const day = getOrdinalDay(pr.select(date.getDate()));\r\n\r\n    var splitted = dateString.split(\",\");\r\n    splitted[1] += day;\r\n    dateString = splitted.join(\",\");\r\n\r\n    return dateString;\r\n};\r\n\r\nexport const getDatePostString = (date) => {\r\n    if (date === undefined || date === null) {\r\n        return \"\";\r\n    }\r\n\r\n    var splittedDate = date.toString().split(\" \");\r\n    var splittedHours = splittedDate[4].split(\":\");\r\n    var finalDate =\r\n        splittedDate[1] +\r\n        \" \" +\r\n        splittedDate[2] +\r\n        \", \" +\r\n        splittedHours[0] +\r\n        \":\" +\r\n        splittedHours[1] +\r\n        \" GMT\";\r\n\r\n    return finalDate;\r\n};\r\n\r\nexport const getDateRange = (dateRange, culture) => {\r\n    var fromDateString = getDateString(dateRange.from, culture);\r\n    var toDateString = getDateString(dateRange.to, culture);\r\n    var from = new Date(dateRange.from);\r\n    var to = new Date(dateRange.to);\r\n\r\n    var fromString = from ? fromDateString : \" \";\r\n    var toDivider =\r\n        (to && !from) ||\r\n        (to && from && from.setHours(0, 0, 0, 0) != to.setHours(0, 0, 0, 0))\r\n            ? \" - \"\r\n            : \"\";\r\n    var toString =\r\n        (to && !from) ||\r\n        (to && from && from.setHours(0, 0, 0, 0) != to.setHours(0, 0, 0, 0))\r\n            ? toDateString\r\n            : \"\";\r\n\r\n    return (\r\n        <span>\r\n            <span>{fromString}</span>\r\n            <span>{toDivider}</span>\r\n            <span>{toString}</span>\r\n        </span>\r\n    );\r\n};\r\n","import { convertDateToTimezone } from \"../../common/helpers/dateHelpers\";\r\n\r\nconst convertEventDateToUserTimezone = (eventDate, userTimezoneOffset) => {\r\n    let result = {\r\n        ...eventDate,\r\n        date: convertDateToTimezone(eventDate.dateUtc, userTimezoneOffset),\r\n        periodDateUtc: eventDate.periodDateUtc\r\n            ? convertDateToTimezone(eventDate.periodDateUtc, 0)\r\n            : null,\r\n    };\r\n    return result;\r\n};\r\n\r\nexport const convertEventDateListToUserTimezone = (\r\n    eventDateList,\r\n    userTimezoneOffset\r\n) => {\r\n    const result = eventDateList.map((ed) =>\r\n        convertEventDateToUserTimezone(ed, userTimezoneOffset)\r\n    );\r\n    return result;\r\n};\r\n\r\nexport const filterByEventName = (eventDateList, eventName) => {\r\n    if (!eventName || eventName === \"\") return eventDateList;\r\n\r\n    const filterName = eventName.replace(/\\s+/g, \"\").toLowerCase();\r\n    const result = eventDateList.filter((ed) => {\r\n        return ed.name.replace(/\\s+/g, \"\").toLowerCase().includes(filterName);\r\n    });\r\n    return result;\r\n};\r\n\r\nexport const mapRevisedByPreviousIsPreliminary = (eventDates) => {\r\n    return eventDates.map((item) => {\r\n        return {\r\n            ...item,\r\n            revised: item.previousIsPreliminary ? null : item.revised,\r\n        };\r\n    });\r\n};\r\n","import {\r\n    convertEventDateListToUserTimezone,\r\n    filterByEventName,\r\n    mapRevisedByPreviousIsPreliminary\r\n} from \"./mappers\";\r\nimport { urlFactory } from \"../helpers\";\r\n\r\nconst eventDatesRequested = (store) => {\r\n    store.setState({\r\n        isFetching: true,\r\n        eventDatesFetchError: false,\r\n        eventDates: null,\r\n        eventDetails: {},\r\n    });\r\n};\r\n\r\nconst eventDatesReceived = (store, eventDates) => {\r\n    const {\r\n        settings: {\r\n            timezoneOffset,\r\n            filter: { eventName },\r\n        },\r\n    } = store.getState();\r\n    const filteredEventDates = filterByEventName(eventDates, eventName);\r\n    const mappedEventDates = convertEventDateListToUserTimezone(\r\n        filteredEventDates,\r\n        timezoneOffset\r\n    );\r\n    const mappedReviseEventDates =\r\n        mapRevisedByPreviousIsPreliminary(mappedEventDates);\r\n\r\n    store.setState({\r\n        isFetching: false,\r\n        eventDatesFetchError: false,\r\n        eventDates: mappedReviseEventDates,\r\n    });\r\n};\r\n\r\nconst eventDatesError = (store) => {\r\n    store.setState({\r\n        eventDates: null,\r\n        isFetching: false,\r\n        eventDatesFetchError: true,\r\n    });\r\n};\r\n\r\nexport const fetchEventDates = (store) => {\r\n    eventDatesRequested(store);\r\n\r\n    const { config, settings } = store.getState();\r\n\r\n    const url = urlFactory.getEventDates(config, settings);\r\n    fetch(url, {\r\n        method: \"GET\",\r\n        headers: { Accept: \"application/json\" },\r\n    })\r\n        .then((response) => {\r\n            if (response.ok) {\r\n                response\r\n                    .json()\r\n                    .then((eventDates) =>\r\n                        eventDatesReceived(store, eventDates)\r\n                    );\r\n            } else if (response.status === 404) {\r\n                eventDatesReceived(store, []);\r\n            } else {\r\n                eventDatesError(store);\r\n            }\r\n        })\r\n        .catch((err) => {\r\n            console.error(err);\r\n            eventDatesError(store);\r\n        });\r\n};\r\n","const requested = (store, eventDateId) => {\r\n    const eventDateRelatedNews = {\r\n        ...store.getState().relatedNews,\r\n        [eventDateId]: {\r\n            isFetching: true,\r\n            fetchError: false,\r\n            data: null,\r\n        },\r\n    };\r\n    store.setState({\r\n        relatedNews: eventDateRelatedNews,\r\n    });\r\n};\r\n\r\nconst received = (store, response, eventDateId) => {\r\n    const eventDateRelatedNews = {\r\n        ...store.getState().relatedNews,\r\n        [eventDateId]: {\r\n            isFetching: false,\r\n            fetchError: false,\r\n            data: response.Values,\r\n        },\r\n    };\r\n    store.setState({\r\n        relatedNews: eventDateRelatedNews,\r\n    });\r\n};\r\n\r\nconst error = (store, eventDateId) => {\r\n    const eventDateRelatedNews = {\r\n        ...store.getState().relatedNews,\r\n        [eventDateId]: {\r\n            isFetching: false,\r\n            fetchError: true,\r\n            data: null,\r\n        },\r\n    };\r\n    store.setState({\r\n        relatedNews: eventDateRelatedNews,\r\n    });\r\n};\r\n\r\nexport const fetchPosts = (store, eventTags, eventDateId) => {\r\n    if (!eventTags) return;\r\n    requested(store, eventDateId);\r\n\r\n    const { postApiUrl, culture, filterType, productFeature, page, take } =\r\n        store.getState().config;\r\n    const url = `${postApiUrl}/v4/${culture}/post/${filterType}/${productFeature}/${eventTags}/${page}/${take}`;\r\n\r\n    fetch(url, {\r\n        method: \"GET\",\r\n        headers: { Accept: \"application/json\" },\r\n    })\r\n        .then((response) => {\r\n            if (response.ok) {\r\n                response\r\n                    .json()\r\n                    .then((values) => received(store, values, eventDateId));\r\n            } else {\r\n                error(store, eventDateId);\r\n            }\r\n        })\r\n        .catch((err) => {\r\n            console.error(err);\r\n            error(store, eventDateId);\r\n        });\r\n};\r\n","import { urlFactory } from '../helpers'\r\nimport { fetchPosts } from './postActions'\r\n\r\nconst eventDateDetailsRequested = (store, eventDateId) => {\r\n    const eventDateDetails = {\r\n        ...store.getState().eventDateDetails,\r\n        [eventDateId]: {\r\n            isFetching: true,\r\n            data: null,\r\n            error: false\r\n        }\r\n    }\r\n\r\n    store.setState({\r\n        eventDateDetails\r\n    })\r\n}\r\n\r\nconst eventDateDetailsReceived = (store, eventDateId, eventDateDetail) => {\r\n    const eventDateDetails = {\r\n        ...store.getState().eventDateDetails,\r\n        [eventDateId]: {\r\n            isFetching: false,\r\n            data: eventDateDetail,\r\n            error: false\r\n        }\r\n    }\r\n\r\n    store.setState({\r\n        eventDateDetails\r\n    })\r\n}\r\n\r\nconst eventDateDetailsError = (store, eventDateId) => {\r\n    const eventDateDetails = {\r\n        ...store.getState().eventDateDetails,\r\n        [eventDateId]: {\r\n            isFetching: false,\r\n            data: null,\r\n            error: true\r\n        }\r\n    }\r\n\r\n    store.setState({\r\n        eventDateDetails\r\n    })\r\n}\r\n\r\nexport const fetchEventDateDetails = (store, eventDateId) => {\r\n    const eventDateDetails = store.getState().eventDateDetails[eventDateId]\r\n    if (eventDateDetails && (eventDateDetails.isFetching || eventDateDetails.data))\r\n        return\r\n\r\n    eventDateDetailsRequested(store, eventDateId)\r\n\r\n    const config = store.getState().config\r\n    const url = urlFactory.getEventDateDetails(config, eventDateId)\r\n    fetch(url, {\r\n        method: 'GET',\r\n        headers: { 'Accept': 'application/json' }\r\n    })\r\n        .then(response => {\r\n            if (response.ok) {\r\n                response.json().then(eventDateDetails => {\r\n                    eventDateDetailsReceived(store, eventDateId, eventDateDetails);\r\n                    if(config.hasPosts)\r\n                        fetchPosts(store, eventDateDetails.tags, eventDateId)\r\n                })\r\n            } else {\r\n                eventDateDetailsError(store, eventDateId)\r\n            }\r\n        })\r\n        .catch(err => {\r\n            console.error(err)\r\n            eventDateDetailsError(store)\r\n        })\r\n}\r\n\r\nexport const showEventDateDetails = (store, eventDateId) => {\r\n    const eventDateDetailShown = store.getState().eventDateDetailShown\r\n\r\n    store.setState({\r\n        eventDateDetailShown: eventDateDetailShown === eventDateId ? null : eventDateId,\r\n        eventDateMenuShown: null\r\n    })\r\n}\r\n\r\nexport const showEventDateMenu = (store, eventDateId) => {\r\n    const eventDateMenuShown = store.getState().eventDateMenuShown\r\n\r\n    store.setState({\r\n        eventDateMenuShown: eventDateMenuShown === eventDateId ? null : eventDateId,\r\n        eventDateDetailsShown: null\r\n    })\r\n}\r\n\r\nexport const showEventDateMinimalDetails = (store, eventDateId) => {\r\n    const eventDateDetailMinimalShown = store.getState().eventDateDetailMinimalShown\r\n\r\n    store.setState({\r\n        eventDateDetailMinimalShown: eventDateDetailMinimalShown === eventDateId ? null : eventDateId,\r\n        eventDateModalMenuShown: null\r\n    })\r\n}\r\n\r\nexport const showEventDateModalMenu = (store, eventDateId) => {\r\n    const eventDateModalMenuShown = store.getState().eventDateModalMenuShown\r\n\r\n    store.setState({\r\n        eventDateModalMenuShown: eventDateModalMenuShown === eventDateId ? null : eventDateId\r\n    })\r\n}\r\n","import subscribeToPush from \"../../common/helpers/subscribeToPush\";\r\nimport { playSound } from \"../../common/helpers/soundHelpers\";\r\n\r\nconst calendarValuesReceived = (store, eventDateId, actual, revised, isBetter) => {\r\n    const pushDate = new Date().toISOString();\r\n    const {\r\n        config: { notificationSoundUrl, sendDataFnc },\r\n        settings: { notificationSoundOn },\r\n    } = store.getState();\r\n    const eventDate = findEventDate(store, eventDateId);\r\n    if (eventDate) {\r\n        const newEventDate = {\r\n            ...eventDate,\r\n            actual: actual !== null ? actual : eventDate.actual,\r\n            revised: revised !== null ? revised : eventDate.revised,\r\n            isBetterThanExpected: actual !== null ? isBetter : eventDate.isBetterThanExpected,\r\n        };\r\n\r\n        updateEventDate(store, eventDateId, newEventDate);\r\n\r\n        if (notificationSoundOn) playSound(notificationSoundUrl);\r\n\r\n        if (actual !== null && sendDataFnc) {\r\n            sendDataFnc({\r\n                event: \"calendar_push_release\",\r\n                event_date_id: eventDate.id,\r\n                expected_date: eventDate.dateUtc,\r\n                push_date: pushDate,\r\n                actual: actual,\r\n            });\r\n        }\r\n    }\r\n};\r\n\r\nconst calendarDeviationReceived = (store, eventDateId, ratioDeviation) => {\r\n    const eventDate = findEventDate(store, eventDateId);\r\n    if (eventDate) {\r\n        const newEventDate = {\r\n            ...eventDate,\r\n            ratioDeviation: ratioDeviation !== null ? ratioDeviation : eventDate.ratioDeviation,\r\n        };\r\n        updateEventDate(store, eventDateId, newEventDate);\r\n    }\r\n};\r\n\r\nconst calendarCrudValuesReceived = (store, eventDateId, eventDateChanges) => {\r\n    const eventDate = findEventDate(store, eventDateId);\r\n    if (eventDate && eventDateChanges?.consensus !== undefined) {\r\n        const newEventDate = calendarCrudModifyConsensus(eventDate, eventDateChanges.consensus);\r\n        updateEventDate(store, eventDateId, newEventDate);\r\n    }\r\n};\r\n\r\nconst calendarCrudModifyConsensus = (eventDate, consensus) => {\r\n    const newEventDate = {\r\n        ...eventDate,\r\n        consensus: consensus,\r\n    };\r\n    return newEventDate;\r\n};\r\n\r\nconst calendarSpeechScoreReceived = (store, eventDateId, score) => {\r\n    const eventDate = findEventDate(store, eventDateId);\r\n    if (eventDate) {\r\n        const newEventDate = {\r\n            ...eventDate,\r\n            speech: {\r\n                ...eventDate.speech,\r\n                score: score !== null ? score : eventDate.speech.score,\r\n            },\r\n        };\r\n        updateEventDate(store, eventDateId, newEventDate);\r\n    }\r\n};\r\n\r\nconst findEventDate = (store, eventDateId) => {\r\n    const { eventDates } = store.getState();\r\n    const eventDateIndex = eventDates.findIndex((ed) => ed.id.toLowerCase() === eventDateId.toLowerCase());\r\n    if (eventDateIndex >= 0) {\r\n        const eventDate = eventDates[eventDateIndex];\r\n        return eventDate;\r\n    }\r\n    return null;\r\n};\r\n\r\nconst updateEventDate = (store, eventDateId, updatedEventDate) => {\r\n    const { eventDates } = store.getState();\r\n    const eventDateIndex = eventDates.findIndex((ed) => ed.id.toLowerCase() === eventDateId.toLowerCase());\r\n    let newEventDates = [...eventDates];\r\n    newEventDates[eventDateIndex] = updatedEventDate;\r\n\r\n    store.setState({ eventDates: newEventDates });\r\n};\r\n\r\nexport const subscribeToCalendar = (store) => {\r\n    const channels = [\r\n        {\r\n            name: \"updatedValues\",\r\n            callback: (message) => {\r\n                calendarValuesReceived(store, message.EventDateId, message.Actual, message.Revised, message.IsBetter, message.previousIsPreliminary);\r\n            },\r\n        },\r\n        {\r\n            name: \"updatedDeviation\",\r\n            callback: (message) => {\r\n                calendarDeviationReceived(store, message.EventDateId, message.RatioDeviation);\r\n            },\r\n        },\r\n        {\r\n            name: \"updatedCrudValues\",\r\n            callback: (message) => {\r\n                calendarCrudValuesReceived(store, message.EventDateId, message.Changes);\r\n            },\r\n        },\r\n        {\r\n            name: \"speechScored\",\r\n            callback: (message) => {\r\n                calendarSpeechScoreReceived(store, message.EventDateId, message.Score);\r\n            },\r\n        },\r\n    ];\r\n\r\n    try {\r\n        subscribeToPush(\"calendarHub\", channels);\r\n    } catch (ex) {\r\n        console.error(\"Could not connect to push.\");\r\n        console.log(ex);\r\n    }\r\n};\r\n","export const hideModalConnectionError = (store) => {\r\n    store.setState({\r\n        showConnectionError: false\r\n    })\r\n}\r\n\r\nexport const showModalConnectionError = (store) => {\r\n    store.setState({\r\n        showConnectionError: true\r\n    })\r\n}\r\n\r\nexport const toggleModalLegend = (store) => {\r\n    const showModalLegend = !store.getState().showModalLegend\r\n    store.setState({ showModalLegend })\r\n}\r\n\r\nexport const showPermissionAlert = (store, show) => {\r\n    store.setState({\r\n        showBlockedPopup: show\r\n    })\r\n}\r\n","const prepareDateRange = (next, previous) => {\r\n    if (!next && !previous)\r\n        return null;\r\n\r\n    if (next && (next.to || next.from)) {\r\n        return {\r\n            from: next.from,\r\n            to: next.to\r\n        };\r\n    }\r\n\r\n    return {\r\n        from: previous.from,\r\n        to: previous.to\r\n    };\r\n}\r\n\r\nconst prepareTime = (next, previous) => {\r\n    if (!next && !previous)\r\n        return null\r\n\r\n    if(next){\r\n        return next\r\n    }\r\n\r\n    return previous\r\n}\r\n\r\nconst prepareArray = (previous, next) => {\r\n    if (!next)\r\n        return null\r\n\r\n    let result = []\r\n    if (Array.isArray(next))\r\n        result = next\r\n    else if (Number.isInteger(next))\r\n        result = [next]\r\n\r\n    if (JSON.stringify(previous) === JSON.stringify(next))\r\n        return null\r\n\r\n    return result\r\n}\r\n\r\nconst prepareEventName = (previous, next) => {\r\n    if (next === null || previous === null)\r\n        return null\r\n    if(next !== null)\r\n        return next\r\n\r\n    return previous\r\n}\r\n\r\nexport default (previous, next) => {\r\n    let filter = { ...previous }\r\n\r\n    filter.type = next.type\r\n\r\n    const time = prepareTime(next.time, previous.time)\r\n    if (time !== null)\r\n        filter = { ...filter, time}\r\n    else{\r\n        filter = { ...filter, time: undefined  }\r\n    }\r\n    const dateRange = prepareDateRange(next.dateRange, previous.dateRange)\r\n    if (dateRange !== null)\r\n        filter = { ...filter, dateRange }\r\n    else{\r\n        filter = { ...filter, dateRange: { from: undefined, to: undefined }}\r\n    }\r\n    const volatilities = prepareArray(previous.volatilities, next.volatilities)\r\n    if (volatilities !== null)\r\n        filter.volatilities = volatilities\r\n\r\n    const countries = prepareArray(previous.countries, next.countries)\r\n    if (countries !== null)\r\n        filter.countries = countries\r\n\r\n    const categories = prepareArray(previous.categories, next.categories)\r\n    if (categories !== null)\r\n        filter.categories = categories\r\n\r\n    const eventName = prepareEventName(previous.eventName, next.eventName)\r\n    if (eventName !== null)\r\n        filter.eventName = eventName\r\n\r\n    if (filter === previous)\r\n        return null\r\n\r\n    return filter\r\n}\r\n","import { fetchEventDates } from './eventDatesActions'\r\nimport prepareFilter from '../helpers/filter/prepare'\r\n\r\nconst saveFilter = (store, filter) => {\r\n    const { settings } = store.getState()\r\n\r\n    store.setState({\r\n        settings: {\r\n            ...settings,\r\n            filter\r\n        }\r\n    })\r\n}\r\n\r\nexport const changeFilter = (store, filterChanges) => {\r\n    const previousFilter = store.getState().settings.filter\r\n    const nextFilter = prepareFilter(previousFilter, filterChanges)\r\n\r\n    if (nextFilter) {\r\n        saveFilter(store, nextFilter)\r\n    }\r\n}\r\n\r\nexport const changeFilterAndFetch = (store, filterChanges) => {\r\n    const previousFilter = store.getState().settings.filter\r\n    const nextFilter = prepareFilter(previousFilter, filterChanges)\r\n\r\n    if (nextFilter !== null) {\r\n        nextFilter.type = null\r\n\r\n        saveFilter(store, nextFilter)\r\n        fetchEventDates(store)\r\n    }\r\n}\r\n\r\nexport const changeShowAdvancedFilter = (store, show) => {\r\n    return { showAdvancedFilter: show }\r\n}\r\n\r\nexport const changeShowMobileFilter = (store, show) => {\r\n    return { showMobileFilter: show }\r\n}\r\n","import { fetchEventDates } from \"./eventDatesActions\";\r\nimport { convertDateToUtc } from \"../../common/helpers/dateHelpers\";\r\nimport {\r\n    getSettingsWithNoFilter,\r\n    persistSettings,\r\n} from \"../../calendar-common/helpers/settingsHelper\";\r\nimport { getViewDefaultSettings } from \"../helpers\";\r\n\r\nexport const changeTimezone = (store, offset, timezone) => {\r\n    const { settings, defaultSettings, currentTime } = store.getState();\r\n\r\n    if (offset === null) offset = defaultSettings.timezoneOffset;\r\n\r\n    if (settings.timezoneOffset === offset) return;\r\n\r\n    var time = convertDateToUtc(currentTime, offset);\r\n\r\n    store.setState({\r\n        settings: {\r\n            ...settings,\r\n            timezoneOffset: offset,\r\n        },\r\n        currentTimezone: timezone,\r\n        currentTime: time,\r\n    });\r\n};\r\n\r\nexport const changeTimezoneAndFetch = (store, timezone) => {\r\n    changeTimezone(store, timezone.OffsetValue, timezone);\r\n    fetchEventDates(store);\r\n\r\n    const { config } = store.getState();\r\n    if (config.timezoneHelper) {\r\n        config.timezoneHelper().then((helper) => {\r\n            helper.setTimezone(timezone);\r\n        });\r\n    }\r\n};\r\n\r\nexport const updateSettingsFromStorage = (store) => {\r\n    let storageSettings = getSettingsWithNoFilter();\r\n    const { settings } = store.getState();\r\n\r\n    let newSettings = { ...settings, ...storageSettings };\r\n    store.setState({ settings: newSettings });\r\n\r\n    if (settings.view === newSettings.view) return;\r\n\r\n    newSettings = getViewDefaultSettings(store.getState());\r\n    store.setState({ settings: newSettings });\r\n    fetchEventDates(store);\r\n    return newSettings;\r\n};\r\n\r\nexport const changeSettingsAndSave = (store, newSettings) => {\r\n    const { settings } = store.getState();\r\n    let actualSettings = { ...settings, ...newSettings };\r\n    store.setState({ settings: actualSettings });\r\n    persistSettings(newSettings);\r\n\r\n    if (newSettings.view != undefined && settings.view !== newSettings.view) {\r\n        actualSettings = getViewDefaultSettings(store.getState());\r\n        store.setState({ settings: actualSettings });\r\n        persistSettings({actualFilterType: actualSettings.actualFilterType });\r\n        fetchEventDates(store);\r\n    }\r\n};\r\n","export const showEventNotifyModal = (store, show) => {\r\n    store.setState({\r\n        eventNotifyShown: show\r\n    })\r\n}\r\n","import { calendarNotificationHelper } from \"../../calendar-common/helpers/calendarNotificationHelper\";\r\nimport { enabledCalendarNotifications } from \"../../calendar-common/helpers/calendar\";\r\nimport { notifySubscriptions } from \"../../calendar-common/helpers/notifySubscriptionHelper\";\r\nimport { oneSignalInit } from \"../../calendar-common/helpers/oneSignalHelper\";\r\nimport { showPermissionAlert } from \"./modalActions\";\r\nimport {showEventNotifyModal} from \"./eventNotifyActions\";\r\n\r\nconst eventNotificationsReceived = (store, eventIds) => {\r\n    store.setState({\r\n        eventNotifications: eventIds,\r\n    });\r\n};\r\n\r\nconst getEventNotifications = (store, helper) => {\r\n    helper.isPushNotificationsEnabled().then((isEnabled) => {\r\n        if (isEnabled) {\r\n            helper\r\n                .getSubscriptions()\r\n                .then((eventIds) =>\r\n                    eventNotificationsReceived(store, eventIds)\r\n                );\r\n        }\r\n    });\r\n};\r\n\r\nconst subscriptionChangedListener = (store) => {\r\n    const { config } = store.getState();\r\n    if (config.subscriptionChangedEventName) {\r\n        document.addEventListener(\r\n            config.subscriptionChangedEventName,\r\n            function (e) {\r\n                eventNotificationsReceived(store, e.detail);\r\n            },\r\n            false\r\n        );\r\n    }\r\n};\r\n\r\nconst enabledNotifications = (store) => {\r\n    const { config } = store.getState();\r\n\r\n    return enabledCalendarNotifications(config);\r\n};\r\n\r\nconst getHelper = (store) => {\r\n    const { config } = store.getState();\r\n\r\n    const helper = config.notificationsHelper || calendarNotificationHelper;\r\n    if (typeof helper === 'function')\r\n        return helper();\r\n\r\n    return new Promise(function (resolve, reject){ reject(\"Error getting notificationsHelper\");});\r\n};\r\n\r\nconst initOneSignal = (store) => {\r\n    const { config } = store.getState();\r\n\r\n    oneSignalInit(config);\r\n};\r\n\r\nexport const initEventNotifications = (store) => {\r\n    if (!enabledNotifications(store)) return;\r\n\r\n    initOneSignal(store);\r\n\r\n    getHelper(store)\r\n        .then((helper) => {\r\n            helper.isPushNotificationsSupported().then((isSupported) => {\r\n                store.setState({ notificationsSupported: isSupported });\r\n                subscriptionChangedListener(store);\r\n\r\n                if (isSupported) {\r\n                    if (helper.initSubscriptions) {\r\n                        helper\r\n                            .initSubscriptions()\r\n                            .then(() => getEventNotifications(store, helper));\r\n                    } else {\r\n                        getEventNotifications(store, helper);\r\n                    }\r\n\r\n                    helper.onPermissionChanged((isEnabled) => {\r\n                        if (isEnabled) getEventNotifications(store, helper);\r\n                        else eventNotificationsReceived(store, []);\r\n                    });\r\n                }\r\n            });\r\n        })\r\n        .catch((err) => console.error(err));\r\n};\r\n\r\nexport const subscribeToEvent = (store, eventId) => {\r\n    const { config } = store.getState();\r\n    if (!enabledNotifications(store)) return;\r\n\r\n    getHelper(store).then((helper) => {\r\n        helper\r\n            .subscribe(eventId)\r\n\r\n            .then((eventTags) => {\r\n                notifySubscriptions(\r\n                    eventTags,\r\n                    config.subscriptionChangedEventName\r\n                );\r\n                showEventNotifyModal(store, true);\r\n            })\r\n            .catch((err) => {\r\n                if (err === \"DENIED\") showPermissionAlert(store, true);\r\n\r\n                console.error(\"Could not subscribe to event \" + eventId);\r\n                console.error(err);\r\n            });\r\n    });\r\n};\r\n\r\nexport const unsubscribeToEvent = (store, eventId) => {\r\n    const { config } = store.getState();\r\n    if (!enabledNotifications(store)) return;\r\n\r\n    getHelper(store).then((helper) => {\r\n        helper\r\n            .unsubscribe(eventId)\r\n            .then((eventTags) => {\r\n                notifySubscriptions(\r\n                    eventTags,\r\n                    config.subscriptionChangedEventName\r\n                );\r\n            })\r\n            .catch((err) => {\r\n                console.error(\"Could not unsubscribe to event \" + eventId);\r\n                console.error(err);\r\n            });\r\n    });\r\n};\r\n\r\n","export const TIMEZONE_VALUES = [\r\n    {\r\n        TimeZoneId: \"Dateline Standard Time\",\r\n        TimeSpan: \"-12:00\",\r\n        Location: \"International Date Line West\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -12,\r\n        OffsetValue: 720,\r\n    },\r\n    {\r\n        TimeZoneId: \"UTC-11\",\r\n        TimeSpan: \"-11:00\",\r\n        Location: \"Coordinated Universal Time-11\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -11,\r\n        OffsetValue: 660,\r\n    },\r\n    {\r\n        TimeZoneId: \"Hawaiian Standard Time\",\r\n        TimeSpan: \"-10:00\",\r\n        Location: \"Hawaii\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -10,\r\n        OffsetValue: 600\r\n    },\r\n    {\r\n        TimeZoneId: \"Marquesas Standard Time\",\r\n        TimeSpan: \"-09:30\",\r\n        Location: \"Marquesas Islands\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -9.5,\r\n        OffsetValue: 570,\r\n    },\r\n    {\r\n        TimeZoneId: \"Aleutian Standard Time\",\r\n        TimeSpan: \"-09:00\",\r\n        Location: \"Aleutian Islands\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -9,\r\n        OffsetValue: 540,\r\n    },\r\n    {\r\n        TimeZoneId: \"Alaskan Standard Time\",\r\n        TimeSpan: \"-08:00\",\r\n        Location: \"Alaska\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -8,\r\n        OffsetValue: 480,\r\n    },\r\n    {\r\n        TimeZoneId: \"Pacific Standard Time\",\r\n        TimeSpan: \"-07:00\",\r\n        Location: \"Pacific Time (US & Canada)\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -7,\r\n        OffsetValue: 420,\r\n    },\r\n    {\r\n        TimeZoneId: \"Mountain Standard Time\",\r\n        TimeSpan: \"-06:00\",\r\n        Location: \"Mountain Time (US & Canada)\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -6,\r\n        OffsetValue: 360,\r\n    },\r\n    {\r\n        TimeZoneId: \"Central Standard Time\",\r\n        TimeSpan: \"-05:00\",\r\n        Location: \"Central Time (US & Canada)\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -5,\r\n        OffsetValue: 300,\r\n    },\r\n    {\r\n        TimeZoneId: \"Eastern Standard Time\",\r\n        TimeSpan: \"-04:00\",\r\n        Location: \"Eastern Time (US & Canada)\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -4,\r\n        OffsetValue: 240,\r\n    },{\r\n        TimeZoneId: \"Argentina Standard Time\",\r\n        TimeSpan: \"-03:00\",\r\n        Location: \"City of Buenos Aires\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -3,\r\n        OffsetValue: 180,\r\n    },\r\n    {\r\n        TimeZoneId: \"Newfoundland Standard Time\",\r\n        TimeSpan: \"-02:30\",\r\n        Location: \"Newfoundland\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -2.5,\r\n        OffsetValue: 150,\r\n    },\r\n    {\r\n        TimeZoneId: \"Greenland Standard Time\",\r\n        TimeSpan: \"-02:00\",\r\n        Location: \"Greenland\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -2,\r\n        OffsetValue: 120,\r\n    },\r\n    {\r\n        TimeZoneId: \"Mid-Atlantic Standard Time\",\r\n        TimeSpan: \"-01:00\",\r\n        Location: \"Mid-Atlantic - Old\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: -1,\r\n        OffsetValue: 60,\r\n    },\r\n    {\r\n        TimeZoneId: \"Greenwich Standard Time\",\r\n        TimeSpan: \"\",\r\n        Location: \"Monrovia, Reykjavik\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 0,\r\n        OffsetValue: 0,\r\n    },\r\n    {\r\n        TimeZoneId: \" Standard Time\",\r\n        TimeSpan: \"+01:00\",\r\n        Location: \"Dublin, Edinburgh, Lisbon, London\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 1,\r\n        OffsetValue: -60,\r\n    },\r\n    {\r\n        TimeZoneId: \"Central Europe Standard Time\",\r\n        TimeSpan: \"+02:00\",\r\n        Location: \"Belgrade, Bratislava, Budapest, Ljubljana, Prague\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 2,\r\n        OffsetValue: -120,\r\n    },\r\n    {\r\n        TimeZoneId: \"Middle East Standard Time\",\r\n        TimeSpan: \"+03:00\",\r\n        Location: \"Beirut\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 3,\r\n        OffsetValue: -180,\r\n    },\r\n    {\r\n        TimeZoneId: \"Iran Standard Time\",\r\n        TimeSpan: \"+03:30\",\r\n        Location: \"Tehran\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 3.5,\r\n        OffsetValue: -210,\r\n    },\r\n    {\r\n        TimeZoneId: \"Arabian Standard Time\",\r\n        TimeSpan: \"+04:00\",\r\n        Location: \"Abu Dhabi, Muscat\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 4,\r\n        OffsetValue: -240,\r\n    },\r\n    {\r\n        TimeZoneId: \"West Asia Standard Time\",\r\n        TimeSpan: \"+05:00\",\r\n        Location: \"Ashgabat, Tashkent\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 5,\r\n        OffsetValue: -300,\r\n    },\r\n    {\r\n        TimeZoneId: \"India Standard Time\",\r\n        TimeSpan: \"+05:30\",\r\n        Location: \"Chennai, Kolkata, Mumbai, New Delhi\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 5.5,\r\n        OffsetValue: -330,\r\n    },\r\n    {\r\n        TimeZoneId: \"Nepal Standard Time\",\r\n        TimeSpan: \"+05:45\",\r\n        Location: \"Kathmandu\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 5.75,\r\n        OffsetValue: -345,\r\n    },\r\n    {\r\n        TimeZoneId: \"Central Asia Standard Time\",\r\n        TimeSpan: \"+06:00\",\r\n        Location: \"Astana\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 6,\r\n        OffsetValue: -360,\r\n    },\r\n    {\r\n        TimeZoneId: \"Myanmar Standard Time\",\r\n        TimeSpan: \"+06:30\",\r\n        Location: \"Yangon (Rangoon)\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 6.5,\r\n        OffsetValue: -390,\r\n    },\r\n    {\r\n        TimeZoneId: \"North Asia Standard Time\",\r\n        TimeSpan: \"+07:00\",\r\n        Location: \"Krasnoyarsk\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 7,\r\n        OffsetValue: -420,\r\n    },\r\n    {\r\n        TimeZoneId: \"China Standard Time\",\r\n        TimeSpan: \"+08:00\",\r\n        Location: \"Beijing, Chongqing, Hong Kong, Urumqi\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 8,\r\n        OffsetValue: -480,\r\n    },\r\n    {\r\n        TimeZoneId: \"Aus Central W. Standard Time\",\r\n        TimeSpan: \"+08:45\",\r\n        Location: \"Eucla\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 8.75,\r\n        OffsetValue: -525,\r\n    },\r\n    {\r\n        TimeZoneId: \"Tokyo Standard Time\",\r\n        TimeSpan: \"+09:00\",\r\n        Location: \"Osaka, Sapporo, Tokyo\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 9,\r\n        OffsetValue: -540,\r\n    },\r\n    {\r\n        TimeZoneId: \"AUS Central Standard Time\",\r\n        TimeSpan: \"+09:30\",\r\n        Location: \"Darwin\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 9.5,\r\n        OffsetValue: -570,\r\n    },\r\n    {\r\n        TimeZoneId: \"Cen. Australia Standard Time\",\r\n        TimeSpan: \"+10:30\",\r\n        Location: \"Adelaide\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 10.5,\r\n        OffsetValue: -630,\r\n    },\r\n    {\r\n        TimeZoneId: \"E. Australia Standard Time\",\r\n        TimeSpan: \"+10:00\",\r\n        Location: \"Brisbane\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 10,\r\n        OffsetValue: -600,\r\n    },{\r\n        TimeZoneId: \"Central Pacific Standard Time\",\r\n        TimeSpan: \"+11:00\",\r\n        Location: \"Solomon Is., New Caledonia\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 11,\r\n        OffsetValue: -660,\r\n    }, \r\n    {\r\n        TimeZoneId: \"Norfolk Standard Time\",\r\n        TimeSpan: \"+12:00\",\r\n        Location: \"Norfolk Island\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 12,\r\n        OffsetValue: -720,\r\n    },\r\n    {\r\n        TimeZoneId: \"Kamchatka Standard Time\",\r\n        TimeSpan: \"+13:00\",\r\n        Location: \"Petropavlovsk-Kamchatsky - Old\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 13,\r\n        OffsetValue: -780,\r\n    },\r\n    {\r\n        TimeZoneId: \"Line Islands Standard Time\",\r\n        TimeSpan: \"+14:00\",\r\n        Location: \"Kiritimati Island\",\r\n        CurrentTimeZone: false,\r\n        HoursUtcOffset: 14,\r\n        HoursUtcOffset: -840,\r\n    }\r\n];\r\n","import { persistSettings } from \"../../calendar-common/helpers/settingsHelper\";\r\nimport { TIME_FORMAT_OPTIONS, TIMEZONE_VALUES } from \"../constants\";\r\n\r\nconst REGEX_EXPRESSION = /[^\\d.+:-]/g;\r\n\r\nconst getTimezoneOffset = (offset) => {\r\n    if (offset === \"\") return 0;\r\n\r\n    var sign = /^-/.test(offset) ? 1 : -1;\r\n    var [h, m] = offset.slice(-5).split(\":\");\r\n\r\n    var result = sign * h * 60 + sign * m;\r\n    return result;\r\n};\r\n\r\nconst clockUpdateReceived = (store, time) => {\r\n    store.setState({\r\n        currentTime: time,\r\n    });\r\n};\r\n\r\nconst updateClockListener = (store) => {\r\n    const { config } = store.getState();\r\n    if (config.calendarUpdateClockEventName) {\r\n        document.addEventListener(\r\n            config.calendarUpdateClockEventName,\r\n            function (e) {\r\n                clockUpdateReceived(store, e.detail);\r\n            },\r\n            false\r\n        );\r\n    }\r\n};\r\nconst clockUpdate = (store) => {\r\n    store.setState({\r\n        currentTime: new Date(),\r\n    });\r\n};\r\nconst updateClockAction = (store) => {\r\n    var now = new Date();\r\n    var delay = 60 * 1000;\r\n    var start = delay - now.getUTCSeconds() * 1000 + now.getUTCMilliseconds();\r\n\r\n    setTimeout(function () {\r\n        setInterval(clockUpdate, delay, store);\r\n        clockUpdate(store);\r\n    }, start);\r\n\r\n    // Added timeout to run after initTimezones\r\n    setTimeout(function () {\r\n        clockUpdate(store);\r\n    }, 1000);\r\n};\r\n\r\nexport const initTimezones = (store) => {\r\n    const { config } = store.getState();\r\n\r\n    if (!config.timezoneHelper) {\r\n        getDefaultTimeZones(store);\r\n        updateClockAction(store);\r\n    } else {\r\n        updateClockListener(store);\r\n        config.timezoneHelper().then((helper) => {\r\n            helper\r\n                .getTimezonesModel()\r\n                .then((timezonesModel) => {\r\n                    timezonesModel.TimeZones.forEach((element) => {\r\n                        if (element.TimeZoneId !== null)\r\n                            element.OffsetValue = getTimezoneOffset(\r\n                                element.TimeSpan.replace(REGEX_EXPRESSION, \"\")\r\n                            );\r\n                    });\r\n                    if (timezonesModel.TimeZoneInfoId) {\r\n                        timezonesModel.CurrentTimeZone =\r\n                            timezonesModel.TimeZones.find(\r\n                                (x) =>\r\n                                    x.TimeZoneId ===\r\n                                    timezonesModel.TimeZoneInfoId\r\n                            );\r\n                    } else if (\r\n                        timezonesModel.CurrentTimeZone != null &&\r\n                        timezonesModel.CurrentTimeZone.TimeZoneId != null\r\n                    ) {\r\n                        const offsetValue = getTimezoneOffset(\r\n                            timezonesModel.CurrentTimeZone.TimeSpan.replace(\r\n                                REGEX_EXPRESSION,\r\n                                \"\"\r\n                            )\r\n                        );\r\n                        timezonesModel.CurrentTimeZone.OffsetValue =\r\n                            offsetValue;\r\n                    } else {\r\n                        const offsetValue = new Date().getTimezoneOffset();\r\n                        timezonesModel.CurrentTimeZone =\r\n                            timezonesModel.TimeZones.find(\r\n                                (x) => x.OffsetValue === offsetValue\r\n                            );\r\n                    }\r\n\r\n                    var timeFormat = timezonesModel.IsTwelveTimeFormat\r\n                        ? TIME_FORMAT_OPTIONS.TwelveHours\r\n                        : TIME_FORMAT_OPTIONS.TwentyFourHours;\r\n\r\n                    store.setState({\r\n                        timezones: timezonesModel.TimeZones,\r\n                        currentTimezone: timezonesModel.CurrentTimeZone,\r\n                        timezoneOffset:\r\n                            timezonesModel.CurrentTimeZone.OffsetValue,\r\n                        timeFormat: timeFormat,\r\n                        automaticallyTimeZone:\r\n                            timezonesModel.SetAutomaticallyTimeZone,\r\n                        currentTime: new Date(),\r\n                    });\r\n\r\n                    const { settings } = store.getState();\r\n                    settings.timezoneOffset =\r\n                        timezonesModel.CurrentTimeZone.OffsetValue;\r\n                    persistSettings(store, settings);\r\n                })\r\n                .catch((err) => {\r\n                    console.error(\"Could not get timezones\");\r\n                    console.error(err);\r\n                });\r\n        });\r\n    }\r\n};\r\n\r\nexport const changeTimeFormat = (store, timeFormat) => {\r\n    if (timeFormat != undefined) {\r\n        store.setState(timeFormat);\r\n        const isTwelveTimeFormat =\r\n            Object.values(timeFormat)[0] == TIME_FORMAT_OPTIONS.TwelveHours;\r\n        const { config } = store.getState();\r\n        if (!config.timezoneHelper) return;\r\n\r\n        config.timezoneHelper().then((helper) => {\r\n            helper.setTimeFormat(isTwelveTimeFormat);\r\n        });\r\n    }\r\n};\r\n\r\nfunction getDefaultTimeZones(store) {\r\n    var actualTime = new Date();\r\n    var timeZoneOffset = actualTime.getTimezoneOffset();\r\n\r\n    var currentTimezone = TIMEZONE_VALUES.find(\r\n        (x) => x.OffsetValue === timeZoneOffset\r\n    );\r\n    store.setState({\r\n        timezones: TIMEZONE_VALUES,\r\n        currentTimezone: currentTimezone,\r\n        timezoneOffset: timeZoneOffset,\r\n        timeFormat: TIME_FORMAT_OPTIONS.TwentyFourHours,\r\n        hasDefautTimezones: true,\r\n    });\r\n\r\n    const { settings } = store.getState();\r\n    settings.timezoneOffset = timeZoneOffset;\r\n    persistSettings(store, settings);\r\n}\r\n","import { SETTINGS_SAVED_EVENT_NAME } from \"../../calendar-common/constants\";\r\nimport { persistSettings } from \"../../calendar-common/helpers/settingsHelper\";\r\nimport { updateSettingsFromStorage } from \"../actions/settingsActions\";\r\n\r\nexport const showSucessMessage = (store) => {\r\n    store.setState({ showSuccessMessage: true });\r\n    setTimeout(function () {\r\n        store.setState({ showSuccessMessage: false });\r\n    }, 3000);\r\n};\r\n\r\nexport const openCalendarSettings = (store) => {\r\n    const { config } = store.getState();\r\n\r\n    if (!config.settingsOpenCloseEventName) return;\r\n\r\n    const event = new Event(config.settingsOpenCloseEventName);\r\n    document.dispatchEvent(event);\r\n};\r\n\r\nexport const initSettingsListener = (store) => {\r\n    document.addEventListener(\r\n        SETTINGS_SAVED_EVENT_NAME,\r\n        function (e) {\r\n            let actualSettings = updateSettingsFromStorage(store);\r\n            let settingsNoFilter = { ...{}, ...actualSettings };\r\n            delete settingsNoFilter.filter;\r\n            persistSettings(settingsNoFilter);\r\n            if (!e.detail.noChangeView && e.detail.showAdvice)\r\n                showSucessMessage(store);\r\n        },\r\n        false\r\n    );\r\n};\r\n","import * as eventDatesActions from './eventDatesActions'\r\nimport * as eventDateDetailsActions from './eventDateDetailsActions'\r\nimport * as localizationActions from './localizationActions'\r\nimport * as pushActions from './pushActions'\r\nimport * as modalActions from './modalActions'\r\nimport * as filterActions from './filterActions'\r\nimport * as settingsActions from './settingsActions'\r\nimport * as notificationsActions from './notificationsActions'\r\nimport * as timeZoneActions from './timeZoneActions'\r\nimport * as calendarSettingsActions from './calendarSettingsActions'\r\nimport * as fetchPosts  from './postActions'\r\nimport * as eventNotifyActions from './eventNotifyActions'\r\n\r\nexport default (store) => ({\r\n    fetchEventDates: (state) => eventDatesActions.fetchEventDates(store),\r\n\r\n    fetchEventDateDetails: (state, eventDateId) => eventDateDetailsActions.fetchEventDateDetails(store, eventDateId),\r\n    showEventDateDetails: (state, eventDateId) => eventDateDetailsActions.showEventDateDetails(store, eventDateId),\r\n    showEventDateMinimalDetails: (state, eventDateId) => eventDateDetailsActions.showEventDateMinimalDetails(store, eventDateId),\r\n    showEventDateMenu: (state, eventDateId) => eventDateDetailsActions.showEventDateMenu(store, eventDateId),\r\n    showEventDateModalMenu: (state, eventDateId) => eventDateDetailsActions.showEventDateModalMenu(store, eventDateId),\r\n\r\n    fetchLocalizations: (state) => localizationActions.fetchLocalizations(store),\r\n\r\n    subscribeToCalendar: (state) => pushActions.subscribeToCalendar(store),\r\n\r\n    hideModalConnectionError: (state) => modalActions.hideModalConnectionError(store),\r\n    showModalConnectionError: (state) => modalActions.showModalConnectionError(store),\r\n    toggleModalLegend: (state) => modalActions.toggleModalLegend(store),\r\n    showPermissionAlert: (state, show) => modalActions.showPermissionAlert(store, show),\r\n\r\n    changeTimezone: (state, timezoneOffset) => settingsActions.changeTimezone(store, timezoneOffset),\r\n    changeTimezoneAndFetch: (state, timezone) => settingsActions.changeTimezoneAndFetch(store, timezone),\r\n    updateSettingsFromStorage: (state) => settingsActions.updateSettingsFromStorage(store),\r\n    changeSettingsAndSave: (state, newSettings) => settingsActions.changeSettingsAndSave(store, newSettings),\r\n\r\n    changeFilter: (state, filterChanges) => filterActions.changeFilter(store, filterChanges),\r\n    changeFilterAndFetch: (state, filterChanges) => filterActions.changeFilterAndFetch(store, filterChanges),\r\n    changeShowAdvancedFilter: (state, show) => filterActions.changeShowAdvancedFilter(store, show),\r\n    changeShowMobileFilter: (state, show) => filterActions.changeShowMobileFilter(store, show),\r\n\r\n    initEventNotifications: (state) => notificationsActions.initEventNotifications(store),\r\n    subscribeToEvent: (state, eventId) => notificationsActions.subscribeToEvent(store, eventId),\r\n    unsubscribeToEvent: (state, eventId) => notificationsActions.unsubscribeToEvent(store, eventId),\r\n\r\n    initTimezones: (state) => timeZoneActions.initTimezones(store),\r\n    changeTimeFormat: (state, timeFormat) => timeZoneActions.changeTimeFormat(store, timeFormat),\r\n\r\n    openCalendarSettings: (state) => calendarSettingsActions.openCalendarSettings(store),\r\n    initSettingsListener: (state) => calendarSettingsActions.initSettingsListener(store),\r\n    showSucessMessage:(state) => calendarSettingsActions.showSucessMessage(store),\r\n\r\n    showEventNotifyModal:(state, show) => eventNotifyActions.showEventNotifyModal(store, show),\r\n\r\n    fetchPosts: (state) => fetchPosts(store)\r\n})\r\n","import { getUtcDateTimeISOString, convertDateToUtc } from \"../../common/helpers/dateHelpers\";\r\nimport { getDateRange } from \"../helpers/filter/dateRange\";\r\n\r\nconst getCalendarBaseUrl = (config) => {\r\n    const defaultCalendarApiUrl = CALENDAR_API_URL;\r\n\r\n    const calendarBaseUrl = config.calendarApiUrl || defaultCalendarApiUrl;\r\n    const result = `${calendarBaseUrl}/${config.culture}`;\r\n    return result;\r\n};\r\n\r\nconst urlFactory = {\r\n    getEventDates: (config, settings, path, apiVersionParam = null) => {\r\n        const dateRange = getDateRange(settings.filter, settings.timezoneOffset);\r\n        const dateFromUtc = convertDateToUtc(dateRange.from, settings.timezoneOffset);\r\n        const dateToUtc = convertDateToUtc(dateRange.to, settings.timezoneOffset);\r\n        const calendarBaseUrl = getCalendarBaseUrl(config);\r\n        const dateFromParam = getUtcDateTimeISOString(dateFromUtc);\r\n        const dateToParam = getUtcDateTimeISOString(dateToUtc);\r\n        const volatilities = settings.filter.volatilities;\r\n        const countries = settings.filter.countries;\r\n        const categories = settings.filter.categories;\r\n        const apiVersion = apiVersionParam ?? config.calendarApiVersion ?? \"v1\";\r\n\r\n        let result = `${calendarBaseUrl}/api/${apiVersion}/eventDates/${dateFromParam}/${dateToParam}${path || \"\"}`;\r\n        let query = \"\";\r\n\r\n        if (volatilities && volatilities.length > 0) volatilities.forEach((vol) => (query = `${query}&volatilities=${vol}`));\r\n\r\n        if (countries && countries.length > 0) countries.forEach((country) => (query = `${query}&countries=${country}`));\r\n\r\n        if (categories && categories.length > 0) categories.forEach((category) => (query = `${query}&categories=${category}`));\r\n\r\n        if (query) result = `${result}?${query}`;\r\n\r\n        return result;\r\n    },\r\n    getEventDateDetails: (config, eventDateId) => {\r\n        const calendarBaseUrl = getCalendarBaseUrl(config);\r\n        const result = `${calendarBaseUrl}/api/v1/eventDates/${eventDateId}`;\r\n        return result;\r\n    },\r\n    getEventDateICalendar: (config, eventDateId) => {\r\n        const calendarBaseUrl = getCalendarBaseUrl(config);\r\n        const result = `${calendarBaseUrl}/api/v1/eventDates/${eventDateId}`;\r\n        return result;\r\n    },\r\n    getEventDatesICalendar(config, settings, apiVersionParam = null) {\r\n        const result = urlFactory.getEventDates(config, settings, \"\", apiVersionParam);\r\n        return result;\r\n    },\r\n};\r\n\r\nexport { urlFactory };\r\n","const SpeechScoreLevel = {\r\n    DOVISH: 1,\r\n    NEUTRAL: 0,\r\n    HAWKISH: -1,\r\n};\r\n\r\nexport const SpeechScoreName = {\r\n    [SpeechScoreLevel.DOVISH]: \"Dovish\",\r\n    [SpeechScoreLevel.NEUTRAL]: \"Neutral\",\r\n    [SpeechScoreLevel.HAWKISH]: \"Hawkish\",\r\n};\r\n\r\nexport const ScoreClasses = {\r\n    [SpeechScoreLevel.DOVISH]: \"fxs_c_speech_score_dovish\",\r\n    [SpeechScoreLevel.NEUTRAL]: \"fxs_c_speech_score_neutral\",\r\n    [SpeechScoreLevel.HAWKISH]: \"fxs_c_speech_score_hawkish\",\r\n};","import { Component, createRef } from \"preact\";\r\nimport { isMobileOnly } from \"react-device-detect\";\r\nimport IconCalendar from \"../../../../common/components/icons/IconCalendar\";\r\nimport IconCaretDown from \"../../../../common/components/icons/IconCaretDown\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport { GA4EVENT, TIME_FILTERS_VALUES } from \"../../../constants\";\r\n\r\nclass AdvancedTimeFilter extends Component {\r\n    container = createRef();\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.renderTitle = this.renderTitle.bind(this);\r\n        this.renderOption = this.renderOption.bind(this);\r\n        this.onOptionSelected = this.onOptionSelected.bind(this);\r\n        this.togglePicker = this.togglePicker.bind(this);\r\n        this.state = {\r\n            isPickerOpen: false,\r\n            timeOption: null,\r\n        };\r\n    }\r\n    componentWillMount() {\r\n        this.setState({ timeOption: this.props.time });\r\n    }\r\n\r\n    componentWillReceiveProps(nextProps) {\r\n        this.setState({ timeOption: nextProps.time });\r\n    }\r\n\r\n    onOptionSelected(option) {\r\n        if (isMobileOnly) this.setState({ timeOption: option });\r\n        else {\r\n            this.setState({ timeOption: option });\r\n            this.props.onTimeFilterChanged(option);\r\n            this.togglePicker();\r\n        }\r\n    }\r\n\r\n    apply() {\r\n        this.props.onTimeFilterChanged(this.state.timeOption);\r\n        this.togglePicker();\r\n    }\r\n\r\n    togglePicker() {\r\n        if (this.state.isPickerOpen) {\r\n            this.setState({ isPickerOpen: false, timeOption: this.props.time });\r\n            document.removeEventListener(\"click\", this.handleOutsideClick, false);\r\n        } else {\r\n            this.setState({ isPickerOpen: true });\r\n            document.addEventListener(\"click\", this.handleOutsideClick, false);\r\n        }\r\n    }\r\n    handleOutsideClick = (e) => {\r\n        let currentPicker = this.container;\r\n        if (currentPicker.current != null) {\r\n            try {\r\n                let timeFilterContainer = e.path?.indexOf(currentPicker.current) !== -1;\r\n                if (!timeFilterContainer) {\r\n                    this.togglePicker();\r\n                }\r\n            } catch (error) {\r\n                console.log(error);\r\n            }\r\n        }\r\n    };\r\n\r\n    renderTitle(selectedOption, isOpen, upButton, downButton) {\r\n        return (\r\n            <span>\r\n                <span class=\"fxs_inner\">{this.props.translate(selectedOption)}</span>\r\n                {isOpen ? upButton : downButton}\r\n            </span>\r\n        );\r\n    }\r\n\r\n    renderOption(option) {\r\n        return <span>{this.props.translate(option)}</span>;\r\n    }\r\n\r\n    render({ time, translate, showHighlighted = true }) {\r\n        const values = Object.values(TIME_FILTERS_VALUES).filter(\r\n            (x) => x !== TIME_FILTERS_VALUES.Custom\r\n        );\r\n\r\n        const selected = values.find((x) => x === time);\r\n\r\n        return (\r\n            <div class=\"fxs_c_time-filters\" ref={this.container}>\r\n                <button\r\n                    type=\"button\"\r\n                    onClick={this.togglePicker}\r\n                    class=\"fxs_btn fxs_btn_xsmall fxs_btn_phantom\"\r\n                >\r\n                    <IconCalendar /> <IconCaretDown />{\" \"}\r\n                    <span>{translate(this.state.timeOption)}</span>\r\n                </button>\r\n                <div class=\"fxs_clearfix\"></div>\r\n                {this.state.isPickerOpen && isMobileOnly && (\r\n                    <div class=\"fxs_c_advanced-countries-backdrop\"></div>\r\n                )}\r\n                {this.state.isPickerOpen && (\r\n                    <div\r\n                        class={`${\r\n                            isMobileOnly\r\n                                ? \"fxs_c_filters_picker\"\r\n                                : \"fxs_c_time_filter_dropdown\"\r\n                        }`}\r\n                    >\r\n                        <p class=\"fxs_c_time_filter_disclaimer\">\r\n                            {translate(\"AdvancedTimeFilter_Description\")}\r\n                        </p>\r\n                        <h4 class=\"fxs_c_time_filter_title\">\r\n                            {translate(\"AdvancedTimeFilter_Selector\")}\r\n                        </h4>\r\n                        <form>\r\n                            {values.map((value) => (\r\n                                <div>\r\n                                    <input\r\n                                        type=\"radio\"\r\n                                        name=\"dateTimeOption\"\r\n                                        data-gtmid={this.props.getDropdownOptionGtmId(\r\n                                            value\r\n                                        )}\r\n                                        data-ga4event-clk-name={this.props.getGa4Name}\r\n                                        data-ga4event-element={this.props.getDropdownOptionGa4Id(\r\n                                            value\r\n                                        )}\r\n                                        onClick={() => this.onOptionSelected(value)}\r\n                                        checked={\r\n                                            showHighlighted &&\r\n                                            this.state.timeOption === value\r\n                                        }\r\n                                        id={value}\r\n                                    />\r\n                                    <span\r\n                                        onClick={() => this.onOptionSelected(value)}\r\n                                        class=\"fxs_c_time_filter_item\"\r\n                                    >\r\n                                        {translate(value)}\r\n                                    </span>\r\n                                </div>\r\n                            ))}\r\n                        </form>\r\n                        {isMobileOnly && (\r\n                            <div class=\"fxs_c_time_filter_footer\">\r\n                                <button\r\n                                    type=\"button\"\r\n                                    onClick={() => this.togglePicker()}\r\n                                    class=\"fxs_btn fxs_btn_phantom  fxs_fLeft\"\r\n                                >\r\n                                    {\" \"}\r\n                                    {this.props.translate(\"Cancel\")}\r\n                                    {\"Cancel\"}\r\n                                </button>\r\n                                <button\r\n                                    type=\"button\"\r\n                                    onClick={() => this.apply()}\r\n                                    class=\"fxs_btn fxs_btn_cta   fxs_fRight\"\r\n                                >\r\n                                    {\" \"}\r\n                                    {this.props.translate(\"Done\")}\r\n                                    {\"Done\"}\r\n                                </button>\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations()(AdvancedTimeFilter);\r\n","export const getDeviation = (actual, consensus) => {\r\n    var result = \"-\";\r\n\r\n    if (consensus && actual && consensus === actual) {\r\n        result = 0;\r\n    }\r\n\r\n    return result;\r\n}\r\n","import { h, Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport { urlFactory, downloadCalendar, formatTemplate } from \"../../helpers\";\r\nimport Spinner from \"../../../common/components/Spinner\";\r\nimport IconChartBar from \"../../../common/components/icons/IconChartBar\";\r\nimport IconBell from \"../../../common/components/icons/IconBell\";\r\nimport IconBellSolid from \"../../../common/components/icons/IconBellSolid\";\r\nimport IconCalendarPlus from \"../../../common/components/icons/IconCalendarPlus\";\r\nimport IconAngleDoubleRight from \"../../../common/components/icons/IconAngleDoubleRight\";\r\nimport IconTimes from \"../../../common/components/icons/IconTimes\";\r\nimport IconLocked from \"../../../common/components/icons/IconLocked\";\r\nimport actions from \"../../actions\";\r\nimport { GTM_ID, GA4EVENT } from \"../../constants\";\r\nimport { PERIOD_TYPE_VALUES } from \"../../constants\";\r\nimport { isPast } from \"../../../common/helpers/dateHelpers\";\r\nimport FormattedDate from \"../../../common/components/FormattedDate\";\r\nimport { enabledCalendarNotifications } from \"../../../calendar-common/helpers/calendar\";\r\nimport { getPeriodType } from \"../../../calendar-common/helpers/periodTypeHelper\";\r\nimport { getDateString } from \"../../helpers\";\r\nimport CalendarPosts from \"../../../calendar-common/components/CalendarPosts\";\r\nimport { RELATED_NEWS_VIEW } from \"../../../calendar-common/constants/relatedNewsView\";\r\nimport SpeechScore from \"../rows/SpeechScore\";\r\nimport { getSpeechScore } from \"../../helpers/getSpeechScore\";\r\n\r\nclass EventDetailModal extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.onClickDetails = this.onClickDetails.bind(this);\r\n        this.onCloseClick = this.onCloseClick.bind(this);\r\n        this.renderDetail = this.renderDetail.bind(this);\r\n    }\r\n\r\n    renderError() {\r\n        return <div>Error fetching event detail</div>;\r\n    }\r\n\r\n    renderFetching() {\r\n        return (\r\n            <div>\r\n                <Spinner />\r\n            </div>\r\n        );\r\n    }\r\n\r\n    onClickDetails() {}\r\n\r\n    onCloseClick() {\r\n        const { showEventDateModalMenu, eventDateModalMenuShown } = this.props;\r\n        showEventDateModalMenu(eventDateModalMenuShown);\r\n    }\r\n\r\n    renderName(eventDate) {\r\n        let result = <span>{eventDate.name}</span>;\r\n        if (eventDate.periodType && eventDate.periodDateUtc) {\r\n            let periodText = \"\";\r\n            const translationKey = PERIOD_TYPE_VALUES[eventDate.periodType];\r\n            switch (eventDate.periodType) {\r\n                case \"DAY\":\r\n                case \"MONTH\":\r\n                    if (translationKey) {\r\n                        const format = this.props.translate(translationKey);\r\n                        periodText = (\r\n                            <FormattedDate\r\n                                date={eventDate.periodDateUtc}\r\n                                format={format}\r\n                            />\r\n                        );\r\n                    }\r\n                    break;\r\n                case \"QUARTER\":\r\n                    const quarterNumber =\r\n                        Math.floor(eventDate.periodDateUtc.getMonth() / 3) + 1;\r\n                    periodText = this.props.translate(\"Period_QuarterFormat\", [\r\n                        quarterNumber,\r\n                    ]);\r\n                    break;\r\n                default:\r\n                    break;\r\n            }\r\n\r\n            if (periodText && periodText !== \"\") {\r\n                result = (\r\n                    <span>\r\n                        <span>{eventDate.name}</span>\r\n                        <span>(</span>\r\n                        <span>{periodText}</span>\r\n                        <span>)</span>\r\n                    </span>\r\n                );\r\n            }\r\n        }\r\n\r\n        return result;\r\n    }\r\n\r\n    renderNumerical(value, prefix, percentage, potency) {\r\n        if (typeof value === \"undefined\" || value === null) {\r\n            return \"-\";\r\n        }\r\n\r\n        const suffix = `${percentage ? percentage + \" \" : \"\"}${this.renderPotency(\r\n            potency\r\n        )}`;\r\n\r\n        const result = `${prefix ? prefix : \"\"}${value}${suffix ? \" \" + suffix : \"\"}`;\r\n        return result;\r\n    }\r\n\r\n    renderPotency(potency) {\r\n        if (potency === null) return \"-\";\r\n\r\n        const { translate } = this.props;\r\n\r\n        const potencyTranslations = translate(\"Potency\");\r\n        let result = \"\";\r\n        if (potencyTranslations && potencyTranslations.hasOwnProperty(potency)) {\r\n            result = potencyTranslations[potency];\r\n        }\r\n        return result;\r\n    }\r\n\r\n    renderSpeechScoreOrActualOnModal({ isSpeechScoreLocked, speechScore, hasScore }) {\r\n        const isSpeechScoreProvided = speechScore ?? false;\r\n\r\n        if (!isSpeechScoreProvided) return null;\r\n\r\n        const { translate } = this.props;\r\n\r\n        const showLockedSpeechScore = isSpeechScoreLocked && hasScore;\r\n\r\n        return (\r\n            <div className=\"fxs_c_modal_data\">\r\n                <div\r\n                    className={`\r\n                        fxs_c_item\r\n                        fxs_c_type\r\n                        ${hasScore ? \"fxs_c_speech_score\" : \"fxs_c_actual\"}\r\n                        ${hasScore ? \"fxs_c_speech_tracker\" : \"\"}\r\n                    `}\r\n                >\r\n                    {!showLockedSpeechScore ? (\r\n                        <>\r\n                            <span>{translate(\"SpeechTrackerScoreLabel\")}</span>\r\n                            <SpeechScore speechScore={speechScore} />\r\n                        </>\r\n                    ) : showLockedSpeechScore ? (\r\n                        <span className=\"fxs_c_label_locked_icon\">\r\n                            <IconLocked />\r\n                        </span>\r\n                    ) : null}\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    renderDetail(eventDateDetailData, eventDates, eventDateRelatedNews) {\r\n        const {\r\n            translate,\r\n            eventNotifications,\r\n            subscribeToEvent,\r\n            unsubscribeToEvent,\r\n            notificationsSupported,\r\n            config,\r\n            settings: { timezoneOffset },\r\n        } = this.props;\r\n        const event = eventDates.find(function (e) {\r\n            return e.id === eventDateDetailData.id;\r\n        });\r\n        this.state = {\r\n            isPastEvent: isPast(event.date, this.props.settings.timezoneOffset),\r\n        };\r\n        const showDashIcon =\r\n            config.dashboardUrl &&\r\n            !(\r\n                eventDateDetailData.isSpeech ||\r\n                eventDateDetailData.isReport ||\r\n                eventDateDetailData.isAllDay\r\n            );\r\n        const canBeSubscribed = notificationsSupported && !event.isAllDay;\r\n        const isSubscribed =\r\n            eventNotifications && eventNotifications.includes(event.eventId);\r\n        const isOneColumn =\r\n            eventDateDetailData.isSpeech ||\r\n            eventDateDetailData.isReport ||\r\n            eventDateDetailData.isAllDay;\r\n\r\n        const showEventTime = !event.isTentative || event.actual !== null;\r\n\r\n        let speechScore = null;\r\n        let isSpeechScoreLocked = false;\r\n\r\n        const isSpeech = event?.isSpeech ?? false;\r\n        const hasScore = event?.speech?.score ?? false;\r\n        const isSpeechScoreEnabled = config.enableSpeechScore;\r\n\r\n        if (isSpeech && isSpeechScoreEnabled && hasScore) {\r\n            speechScore = getSpeechScore(event);\r\n            isSpeechScoreLocked = config.isLocked();\r\n        }\r\n\r\n        return (\r\n            <div class=\"fxs_c_details fxs_modal-open\">\r\n                <div class=\"fxs_c_detail-wrapper\">\r\n                    <div\r\n                        class=\"fxs_c_event\"\r\n                        data-gtmid={\r\n                            config.tracking && GTM_ID.OPEN_OVERVIEW(event.eventId)\r\n                        }\r\n                        data-ga4event-clk-name={\r\n                            config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                        }\r\n                        data-ga4event-element={\r\n                            config.tracking && GA4EVENT.ELEMENTS.OPEN_OVERVIEW\r\n                        }\r\n                        data-ga4event-eventdateid={event.id}\r\n                    >\r\n                        <div class=\"fxs_c_header\">\r\n                            <div class=\"fxs_clearfix\">\r\n                                <span class=\"fxs_c_flag fxs_fLeft\">\r\n                                    <span\r\n                                        class={`fxs_flag ${\r\n                                            event.countryCode\r\n                                                ? \"fxs_\" + event.countryCode.toLowerCase()\r\n                                                : \"\"\r\n                                        }`}\r\n                                    ></span>\r\n                                </span>\r\n                                <h3 class=\"fxs_headline_small fxs_fLeft\">\r\n                                    {event.currencyCode}\r\n                                </h3>\r\n                                {isOneColumn && (\r\n                                    <span class={`fxs_c_label fxs_c_label_info`}>\r\n                                        {translate(\r\n                                            eventDateDetailData.isSpeech\r\n                                                ? \"RowSpeech\"\r\n                                                : eventDateDetailData.isReport\r\n                                                ? \"RowReport\"\r\n                                                : \"RowAllDay\"\r\n                                        )}\r\n                                    </span>\r\n                                )}\r\n                            </div>\r\n                            <p class=\"fxs_txt_large\">\r\n                                <span>{this.renderName(event)}</span>\r\n                                {event.isPreliminary && (\r\n                                    <span class=\"fxs_c_preliminary\">\r\n                                        {\" \"}\r\n                                        {translate(\"RowPreliminaryAbbreviation\")}{\" \"}\r\n                                    </span>\r\n                                )}\r\n                            </p>\r\n\r\n                            {isOneColumn ? (\r\n                                this.renderSpeechScoreOrActualOnModal({\r\n                                    isSpeechScoreLocked,\r\n                                    speechScore,\r\n                                    hasScore,\r\n                                })\r\n                            ) : (\r\n                                <div class=\"fxs_c_modal_data\">\r\n                                    <div class=\"fxs_c_item\">\r\n                                        <span class=\"fxs_txt_size_xsmall fxs_txt_light_1_clr\">\r\n                                            {translate(\"HeaderActual\")}\r\n                                        </span>\r\n                                        <br />\r\n                                        <h4\r\n                                            class={`fxs_headline_small ${\r\n                                                typeof event.isBetterThanExpected ===\r\n                                                \"boolean\"\r\n                                                    ? event.isBetterThanExpected\r\n                                                        ? \"fxs_c_positive\"\r\n                                                        : \"fxs_c_negative\"\r\n                                                    : \"\"\r\n                                            }`}\r\n                                        >\r\n                                            {this.renderNumerical(\r\n                                                event.actual,\r\n                                                event.prefix,\r\n                                                event.percentage,\r\n                                                event.potency\r\n                                            )}\r\n                                        </h4>\r\n                                    </div>\r\n                                    <div class=\"fxs_c_item\">\r\n                                        <span class=\"fxs_txt_size_xsmall fxs_txt_light_1_clr\">\r\n                                            {translate(\"HeaderDeviation\")}.\r\n                                        </span>\r\n                                        <br />\r\n                                        <h4 class=\"fxs_headline_small\">\r\n                                            {event.ratioDeviation !== null &&\r\n                                            event.ratioDeviation !== undefined\r\n                                                ? event.ratioDeviation.toFixed(2)\r\n                                                : \"-\"}\r\n                                        </h4>\r\n                                    </div>\r\n                                    <div class=\"fxs_c_item\">\r\n                                        <span class=\"fxs_txt_size_xsmall fxs_txt_light_1_clr\">\r\n                                            {translate(\"HeaderConsensus\")}\r\n                                        </span>\r\n                                        <br />\r\n                                        <h4 class=\"fxs_headline_small\">\r\n                                            {this.renderNumerical(\r\n                                                event.consensus,\r\n                                                event.prefix,\r\n                                                event.percentage,\r\n                                                event.potency\r\n                                            )}\r\n                                        </h4>\r\n                                    </div>\r\n                                    <div class=\"fxs_c_item\">\r\n                                        <span class=\"fxs_txt_size_xsmall fxs_txt_light_1_clr\">\r\n                                            {translate(\"HeaderPrevious\")}\r\n                                        </span>\r\n                                        <br />\r\n                                        <h4 class=\"fxs_headline_small\">\r\n                                            <span>\r\n                                                {this.renderNumerical(\r\n                                                    event.previous,\r\n                                                    event.prefix,\r\n                                                    event.percentage,\r\n                                                    event.potency\r\n                                                )}\r\n                                            </span>\r\n                                        </h4>\r\n                                    </div>\r\n                                </div>\r\n                            )}\r\n\r\n                            <button\r\n                                type=\"button\"\r\n                                onClick={this.onCloseClick}\r\n                                class=\"fxs_modal_close fxs_btn_icon fxs_btn_functional close\"\r\n                            >\r\n                                <IconTimes />\r\n                            </button>\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"fxs_c_detail_table fxs_txt_size_small\">\r\n                        {eventDateDetailData.source && (\r\n                            <div class=\"fxs_c_detail_table_row \">\r\n                                <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                                    <strong>\r\n                                        {translate(\"DetailEventDateSourceLabel\")}\r\n                                    </strong>\r\n                                </div>\r\n                                <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                                    <strong>\r\n                                        {eventDateDetailData.urlSource ? (\r\n                                            <a\r\n                                                href={eventDateDetailData.urlSource}\r\n                                                target=\"_blank\"\r\n                                                data-gtmid={\r\n                                                    config.tracking &&\r\n                                                    GTM_ID.OPEN_SOURCE(\r\n                                                        eventDateDetailData.id\r\n                                                    )\r\n                                                }\r\n                                                data-ga4event-clk-name={\r\n                                                    config.tracking &&\r\n                                                    GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                                }\r\n                                                data-ga4event-element={\r\n                                                    config.tracking &&\r\n                                                    GA4EVENT.ELEMENTS.OPEN_SOURCE\r\n                                                }\r\n                                                data-ga4event-eventdateid={\r\n                                                    eventDateDetailData.id\r\n                                                }\r\n                                            >\r\n                                                {eventDateDetailData.source}\r\n                                            </a>\r\n                                        ) : (\r\n                                            <span>{eventDateDetailData.source}</span>\r\n                                        )}\r\n                                    </strong>\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n\r\n                        <div class=\"fxs_c_detail_table_row \">\r\n                            <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                                <strong>{translate(\"DetailEventFrequency\")}</strong>\r\n                            </div>\r\n                            <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                                {getPeriodType(eventDateDetailData.periodType, translate)}\r\n                            </div>\r\n                        </div>\r\n                        {eventDateDetailData.nextReleaseDate && (\r\n                            <div class=\"fxs_c_detail_table_row \">\r\n                                <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                                    <strong>{translate(\"DetailEventNextRelease\")}</strong>\r\n                                </div>\r\n                                <div class=\"fxs_c_detail_table_cell fxs_paddingHalf_bottom\">\r\n                                    {getDateString(\r\n                                        new Date(eventDateDetailData.nextReleaseDate),\r\n                                        config.culture\r\n                                    )}\r\n                                </div>\r\n                            </div>\r\n                        )}\r\n                    </div>\r\n\r\n                    <div class=\"fxs_c_detail_buttons\">\r\n                        <button\r\n                            class={`fxs_c_detail_button fxs_c_detail_toggled_button`}\r\n                            onClick={() => {\r\n                                window.open(\r\n                                    formatTemplate(\r\n                                        config.dashboardUrl,\r\n                                        {\r\n                                            eventId: eventDateDetailData.eventId,\r\n                                            timezoneOffset,\r\n                                        },\r\n                                        \"_blank\"\r\n                                    )\r\n                                );\r\n                            }}\r\n                            data-gtmid={\r\n                                config.tracking &&\r\n                                GTM_ID.OPEN_DASHBOARD(eventDateDetailData.id)\r\n                            }\r\n                            data-ga4event-clk-name={\r\n                                config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                            }\r\n                            data-ga4event-element={\r\n                                config.tracking && GA4EVENT.ELEMENTS.OPEN_DASHBOARD\r\n                            }\r\n                            data-ga4event-eventdateid={eventDateDetailData.id}\r\n                        >\r\n                            <IconChartBar />\r\n                        </button>\r\n                        <button\r\n                            class={`fxs_c_detail_button fxs_c_detail_toggled_button`}\r\n                            data-gtmid={\r\n                                config.tracking &&\r\n                                GTM_ID.ADD_EVENT(eventDateDetailData.id)\r\n                            }\r\n                            data-ga4event-clk-name={\r\n                                config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                            }\r\n                            data-ga4event-element={\r\n                                config.tracking && GA4EVENT.ELEMENTS.ADD_EVENT\r\n                            }\r\n                            data-ga4event-eventdateid={eventDateDetailData.id}\r\n                            onClick={() =>\r\n                                downloadCalendar(\r\n                                    urlFactory.getEventDateICalendar(\r\n                                        config,\r\n                                        eventDateDetailData.id\r\n                                    ),\r\n                                    \"text/calendar\"\r\n                                )\r\n                            }\r\n                        >\r\n                            <IconCalendarPlus />\r\n                        </button>\r\n                        <button\r\n                            class={\r\n                                isSubscribed\r\n                                    ? \"fxs_c_detail_button fxs_c_detail_button_active\"\r\n                                    : \"fxs_c_detail_button\"\r\n                            }\r\n                            data-gtmid={\r\n                                config.tracking && isSubscribed\r\n                                    ? GTM_ID.NOTIFY_ME_UNSUBSCRIPTION(\r\n                                          eventDateDetailData.id\r\n                                      )\r\n                                    : GTM_ID.NOTIFY_ME_SUBSCRIPTION(\r\n                                          eventDateDetailData.id\r\n                                      )\r\n                            }\r\n                            data-ga4event-clk-name={\r\n                                config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                            }\r\n                            data-ga4event-element={\r\n                                config.tracking && isSubscribed\r\n                                    ? GA4EVENT.ELEMENTS.NOTIFY_ME_UNSUBSCRIPTION\r\n                                    : GA4EVENT.ELEMENTS.NOTIFY_ME_SUBSCRIPTION\r\n                            }\r\n                            data-ga4event-eventdateid={eventDateDetailData.id}\r\n                            onClick={() => {\r\n                                isSubscribed\r\n                                    ? unsubscribeToEvent(eventDateDetailData.eventId)\r\n                                    : subscribeToEvent(eventDateDetailData.eventId);\r\n                            }}\r\n                            disabled={\r\n                                !canBeSubscribed && enabledCalendarNotifications(config)\r\n                            }\r\n                        >\r\n                            {isSubscribed && enabledCalendarNotifications(config) ? (\r\n                                <IconBellSolid />\r\n                            ) : (\r\n                                <IconBell />\r\n                            )}\r\n                        </button>\r\n                    </div>\r\n                    {eventDateDetailData.comments && (\r\n                        <div class=\"fxs_c_comments fxs_c_event_detail_modal_item\">\r\n                            <h2 class=\"fxs_headline_small\">\r\n                                {translate(\"DetailEventDateDescription\")}\r\n                            </h2>\r\n                            {eventDateDetailData.headline && (\r\n                                <h3 class=\"fxs_headline_tiny\">\r\n                                    {eventDateDetailData.headline}\r\n                                </h3>\r\n                            )}\r\n                            <p\r\n                                class=\"fxs_txt_size_small fxs_txt_weight_300\"\r\n                                dangerouslySetInnerHTML={{\r\n                                    __html: eventDateDetailData.comments,\r\n                                }}\r\n                            ></p>\r\n                            {eventDateDetailData.link && (\r\n                                <a\r\n                                    href={eventDateDetailData.link}\r\n                                    class=\"fxs_fRight fxs_txt_size_small fxs_c_comments_link fxs_txt_weight_700\"\r\n                                    data-gtmid={\r\n                                        config.tracking &&\r\n                                        GTM_ID.OPEN_READFULLREPORT(eventDateDetailData.id)\r\n                                    }\r\n                                    data-ga4event-clk-name={\r\n                                        config.tracking &&\r\n                                        GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                    }\r\n                                    data-ga4event-element={\r\n                                        config.tracking &&\r\n                                        GA4EVENT.ELEMENTS.OPEN_READFULLREPORT\r\n                                    }\r\n                                    data-ga4event-eventdateid={eventDateDetailData.id}\r\n                                >\r\n                                    {translate(\"DetailEventReadFullReport\")}\r\n                                    <IconAngleDoubleRight />\r\n                                </a>\r\n                            )}\r\n                        </div>\r\n                    )}\r\n                    {eventDateDetailData.description && (\r\n                        <div class=\"fxs_c_description fxs_c_event_detail_modal_item\">\r\n                            <h2 class=\"fxs_headline_small\">\r\n                                {translate(\"DetailEventDescription\")}\r\n                            </h2>\r\n                            <p\r\n                                class=\"fxs_txt_size_small fxs_txt_weight_300\"\r\n                                dangerouslySetInnerHTML={{\r\n                                    __html: eventDateDetailData.description,\r\n                                }}\r\n                                data-gtmid={\r\n                                    config.tracking && GTM_ID.OPEN_LINK_TEXT(event.id)\r\n                                }\r\n                                data-ga4event-clk-name={\r\n                                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                }\r\n                                data-ga4event-element={\r\n                                    config.tracking && GA4EVENT.ELEMENTS.OPEN_LINK_TEXT\r\n                                }\r\n                                data-ga4event-eventdateid={event.id}\r\n                            ></p>\r\n                        </div>\r\n                    )}\r\n                    {eventDateDetailData.whyMatters && (\r\n                        <div class=\"fxs_c_matters_traders fxs_c_event_detail_modal_item\">\r\n                            <h2 class=\"fxs_headline_small\">\r\n                                {translate(\"DetailEventDateMattersTradersTitle\")}\r\n                            </h2>\r\n                            <p\r\n                                class=\"fxs_txt_size_small fxs_txt_weight_300\"\r\n                                dangerouslySetInnerHTML={{\r\n                                    __html: eventDateDetailData.whyMatters,\r\n                                }}\r\n                            ></p>\r\n                        </div>\r\n                    )}\r\n                    {eventDateRelatedNews && (\r\n                        <CalendarPosts\r\n                            view={RELATED_NEWS_VIEW.View_Mobile}\r\n                            wrapperClass=\"fxs_c_event_detail_modal_item\"\r\n                            posts={eventDateRelatedNews.data}\r\n                            isFetching={eventDateRelatedNews.isFetching}\r\n                            fetchError={eventDateRelatedNews.fetchError}\r\n                            RelatedNewsTranslation={translate(\"RelatedNewsTitle\")}\r\n                            ByAuthorTranslation={translate(\"ByAuthor\")}\r\n                            ErrorTranslation={translate(\"ErrorFetchingNews\")}\r\n                            culture={config.culture}\r\n                            customPostUrl={config.customPostUrl}\r\n                        />\r\n                    )}\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    render({ eventDates, eventDateDetails, eventDateModalMenuShown, relatedNews }) {\r\n        if (!eventDateModalMenuShown) return null;\r\n\r\n        const eventDateDetail = eventDateDetails.hasOwnProperty(eventDateModalMenuShown)\r\n            ? eventDateDetails[eventDateModalMenuShown]\r\n            : null;\r\n        let eventDateNews = null;\r\n        if (eventDateDetail) {\r\n            const event = eventDates.find(function (e) {\r\n                return e.id === eventDateDetail.data.id;\r\n            });\r\n            const { id } = event;\r\n            eventDateNews = relatedNews.hasOwnProperty(id) ? relatedNews[id] : null;\r\n        }\r\n        if (!eventDateDetail) {\r\n            return null;\r\n        } else if (eventDateDetail.error) {\r\n            return this.renderError();\r\n        } else if (eventDateDetail.isFetching) {\r\n            return this.renderFetching();\r\n        } else return this.renderDetail(eventDateDetail.data, eventDates, eventDateNews);\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"eventDates,eventDateDetails,eventNotifications,eventDateModalMenuShown,config,settings,notificationsSupported,relatedNews\",\r\n    actions\r\n)(EventDetailModal);\r\n","export const TIME_FORMAT_OPTIONS = {\r\n    TwelveHours: 'ampm',\r\n    TwentyFourHours: '24h',\r\n}","import { Component, createRef } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport IconClock from \"../../../../common/components/icons/IconClock\";\r\nimport IconChevronDown from \"../../../../common/components/icons/IconChevronDown\";\r\nimport IconChevronUp from \"../../../../common/components/icons/IconChevronUp\";\r\nimport { GTM_ID, GA4EVENT, TIME_FORMAT_OPTIONS } from \"../../../constants\";\r\nimport actions from \"../../../actions\";\r\nimport FormattedDate from \"../../../../common/components/FormattedDate\";\r\nimport DetailModal from \"../../modal/DetailModal\";\r\nimport { isMobileOnly } from \"react-device-detect\";\r\n\r\nclass TimezonePicker extends Component {\r\n    container = createRef();\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.renderTitle = this.renderTitle.bind(this);\r\n        this.renderOption = this.renderOption.bind(this);\r\n        this.renderDetail = this.renderDetail.bind(this);\r\n        this.onOptionSelected = this.onOptionSelected.bind(this);\r\n        this.togglePicker = this.togglePicker.bind(this);\r\n\r\n        this.state = {\r\n            openTimeZonePicker: false,\r\n        };\r\n    }\r\n\r\n    onOptionSelected(option) {\r\n        if (option.TimeZoneId === null) {\r\n            var offsetValue = new Date().getTimezoneOffset();\r\n            option = this.props.timezones.find((x) => x.OffsetValue === offsetValue);\r\n        }\r\n\r\n        this.props.onTimezoneChanged(option);\r\n\r\n        this.togglePicker();\r\n    }\r\n\r\n    togglePicker() {\r\n        if (this.state.openTimeZonePicker) {\r\n            this.setState({ openTimeZonePicker: false });\r\n            document.removeEventListener(\"click\", this.handleOutsideClick, false);\r\n        } else {\r\n            this.setState({ openTimeZonePicker: true });\r\n            document.addEventListener(\"click\", this.handleOutsideClick, false);\r\n        }\r\n    }\r\n\r\n    handleOutsideClick = (e) => {\r\n        let currentPicker = this.container;\r\n        if (currentPicker.current != null) {\r\n            try {\r\n                let timeZoneContainer = e.path?.indexOf(currentPicker.current) !== -1;\r\n                if (!timeZoneContainer) {\r\n                    this.togglePicker();\r\n                }\r\n            } catch (error) {\r\n                console.log(error);\r\n            }\r\n        }\r\n    };\r\n\r\n    changeTimeFormat(timeFormat) {\r\n        this.props.changeTimeFormat({ timeFormat });\r\n        this.togglePicker();\r\n    }\r\n\r\n    renderTitle(isOpen) {\r\n        if (!this.props.currentTime || !this.props.currentTimezone)\r\n            return (\r\n                <span>\r\n                    <IconClock /> {this.props.translate(\"Loading\")}\r\n                </span>\r\n            );\r\n\r\n        return (\r\n            <span>\r\n                <IconClock />{\" \"}\r\n                <FormattedDate\r\n                    date={this.props.currentTime}\r\n                    format={this.props.timeFormat === \"ampm\" ? \"shortTime\" : \"HH:MM\"}\r\n                />{\" \"}\r\n                <span>\r\n                    {this.props.currentTimezone && this.props.hasDefautTimezones\r\n                        ? `${this.props.translate(\"GMT\")}${\" \"}${\r\n                              this.props.currentTimezone.TimeSpan\r\n                          }`\r\n                        : this.props.currentTimezone.TimeSpan}{\" \"}\r\n                </span>\r\n                {isOpen ? <IconChevronUp /> : <IconChevronDown />}\r\n            </span>\r\n        );\r\n    }\r\n\r\n    renderOption(option) {\r\n        return (\r\n            <span>\r\n                {option.TimeZoneId && (\r\n                    <span>\r\n                        <span>\r\n                            (\r\n                            {this.props.hasDefautTimezones\r\n                                ? this.props.translate(\"GMT\") + option.TimeSpan\r\n                                : option.TimeSpan}\r\n                            ){\" \"}\r\n                        </span>\r\n                        <span>{\"    \"}</span>\r\n                        <span class=\"fxs_c_timezone-id\">{option.TimeZoneId}</span>\r\n                    </span>\r\n                )}\r\n            </span>\r\n        );\r\n    }\r\n\r\n    renderDetail(config, timezones, timeFormat, automaticallyTimeZone, isMobileOnly) {\r\n        return (\r\n            <div class=\"fxs_c_timezone-container\">\r\n                <div class=\"fxs_c_timezone_header\">\r\n                    {isMobileOnly ? (\r\n                        <h3 class=\"fxs_headline_small\">\r\n                            {this.props.translate(\"TimeZone_TimeFormat\")}\r\n                        </h3>\r\n                    ) : (\r\n                        <span>{this.props.translate(\"TimeZone_TimeFormat\")}</span>\r\n                    )}\r\n                    {isMobileOnly ? (\r\n                        <form>\r\n                            <div>\r\n                                <input\r\n                                    type=\"radio\"\r\n                                    name=\"timeFormat\"\r\n                                    onClick={() =>\r\n                                        this.changeTimeFormat(\r\n                                            TIME_FORMAT_OPTIONS.TwentyFourHours\r\n                                        )\r\n                                    }\r\n                                    checked={\r\n                                        timeFormat === TIME_FORMAT_OPTIONS.TwentyFourHours\r\n                                    }\r\n                                    id={TIME_FORMAT_OPTIONS.TwentyFourHours}\r\n                                    data-gtmid={\r\n                                        config.tracking &&\r\n                                        GTM_ID.TIMEZONE_DROPDOWN_OPTION(\"notampm\")\r\n                                    }\r\n                                    data-ga4event-clk-name={\r\n                                        config.tracking &&\r\n                                        GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                    }\r\n                                    data-ga4event-element={\r\n                                        config.tracking &&\r\n                                        GA4EVENT.ELEMENTS.TIMEZONE_DROPDOWN_OPTION\r\n                                    }\r\n                                    data-ga4event-timezone={config.tracking && \"notampm\"}\r\n                                />\r\n                                <label for={TIME_FORMAT_OPTIONS.TwentyFourHours}>\r\n                                    24h\r\n                                </label>\r\n                            </div>\r\n                            <div>\r\n                                <input\r\n                                    type=\"radio\"\r\n                                    name=\"timeFormat\"\r\n                                    onClick={() =>\r\n                                        this.changeTimeFormat(\r\n                                            TIME_FORMAT_OPTIONS.TwelveHours\r\n                                        )\r\n                                    }\r\n                                    checked={\r\n                                        timeFormat === TIME_FORMAT_OPTIONS.TwelveHours\r\n                                    }\r\n                                    id={TIME_FORMAT_OPTIONS.TwelveHours}\r\n                                    data-gtmid={\r\n                                        config.tracking &&\r\n                                        GTM_ID.TIMEZONE_DROPDOWN_OPTION(\"ampm\")\r\n                                    }\r\n                                    data-ga4event-clk-name={\r\n                                        config.tracking &&\r\n                                        GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                    }\r\n                                    data-ga4event-element={\r\n                                        config.tracking &&\r\n                                        GA4EVENT.ELEMENTS.TIMEZONE_DROPDOWN_OPTION\r\n                                    }\r\n                                    data-ga4event-timezone={config.tracking && \"ampm\"}\r\n                                />\r\n                                <label for={TIME_FORMAT_OPTIONS.TwelveHours}>AM/PM</label>\r\n                            </div>\r\n                        </form>\r\n                    ) : (\r\n                        <form>\r\n                            <input\r\n                                type=\"radio\"\r\n                                name=\"timeFormat\"\r\n                                data-gtmid={\r\n                                    config.tracking && GTM_ID.TIMEZONE_TIMEFORMAT_24H\r\n                                }\r\n                                data-ga4event-clk-name={\r\n                                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                }\r\n                                data-ga4event-element={\r\n                                    config.tracking &&\r\n                                    GA4EVENT.ELEMENTS.TIMEZONE_TIMEFORMAT_24H\r\n                                }\r\n                                onClick={() =>\r\n                                    this.changeTimeFormat(\r\n                                        TIME_FORMAT_OPTIONS.TwentyFourHours\r\n                                    )\r\n                                }\r\n                                checked={\r\n                                    timeFormat === TIME_FORMAT_OPTIONS.TwentyFourHours\r\n                                }\r\n                                id={TIME_FORMAT_OPTIONS.TwentyFourHours}\r\n                            />\r\n                            <label for={TIME_FORMAT_OPTIONS.TwentyFourHours}>24h</label>\r\n\r\n                            <input\r\n                                type=\"radio\"\r\n                                name=\"timeFormat\"\r\n                                data-gtmid={\r\n                                    config.tracking && GTM_ID.TIMEZONE_TIMEFORMAT_AMPM\r\n                                }\r\n                                data-ga4event-clk-name={\r\n                                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                }\r\n                                data-ga4event-element={\r\n                                    config.tracking &&\r\n                                    GA4EVENT.ELEMENTS.TIMEZONE_TIMEFORMAT_AMPM\r\n                                }\r\n                                onClick={() =>\r\n                                    this.changeTimeFormat(TIME_FORMAT_OPTIONS.TwelveHours)\r\n                                }\r\n                                checked={timeFormat === TIME_FORMAT_OPTIONS.TwelveHours}\r\n                                id={TIME_FORMAT_OPTIONS.TwelveHours}\r\n                            />\r\n                            <label for={TIME_FORMAT_OPTIONS.TwelveHours}>AM/PM</label>\r\n                        </form>\r\n                    )}\r\n                </div>\r\n                <hr class=\"fxs_c_datePicker_button_divider\" />\r\n                <dl>\r\n                    {timezones\r\n                        .filter((timezone) => timezone.TimeZoneId !== null)\r\n                        .map((timezone) => (\r\n                            <dt\r\n                                data-gtmid={\r\n                                    config.tracking &&\r\n                                    GTM_ID.TIMEZONE_DROPDOWN_OPTION(\r\n                                        \"configgtm\" + timezone.TimeSpan.replace(\"GMT\", \"\")\r\n                                    )\r\n                                }\r\n                                data-ga4event-clk-name={\r\n                                    config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                }\r\n                                data-ga4event-element={\r\n                                    config.tracking &&\r\n                                    GA4EVENT.ELEMENTS.TIMEZONE_DROPDOWN_OPTION\r\n                                }\r\n                                data-ga4event-timezone={\r\n                                    config.tracking &&\r\n                                    timezone.TimeSpan.replace(\"GMT\", \"\")\r\n                                }\r\n                                onClick={() => this.onOptionSelected(timezone)}\r\n                            >\r\n                                {this.renderOption(timezone)}\r\n                            </dt>\r\n                        ))}\r\n                </dl>\r\n                <button\r\n                    type=\"button\"\r\n                    onClick={() => this.onOptionSelected(automaticallyTimeZone)}\r\n                    data-gtmid={\r\n                        config.tracking &&\r\n                        GTM_ID.TIMEZONE_DROPDOWN_OPTION(\"setautomatically\")\r\n                    }\r\n                    data-ga4event-clk-name={\r\n                        config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                    }\r\n                    data-ga4event-element={\r\n                        config.tracking && GA4EVENT.ELEMENTS.TIMEZONE_DROPDOWN_OPTION\r\n                    }\r\n                    data-ga4event-timezone={config.tracking && \"setautomatically\"}\r\n                    class=\"fxs_btn fxs_btn_anchor fxs_fRight\"\r\n                >\r\n                    <span>{automaticallyTimeZone && automaticallyTimeZone.TimeSpan}</span>\r\n                </button>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    render({\r\n        currentTimezone,\r\n        buttonSizeClass = \"fxs_btn_xsmall\",\r\n        containerClass = \"\",\r\n        config,\r\n        settings,\r\n        timezones,\r\n        timeFormat,\r\n        automaticallyTimeZone,\r\n    }) {\r\n        return isMobileOnly ? (\r\n            <div class=\"fxs_c_timezone-wrapper\" ref={this.container}>\r\n                <button\r\n                    type=\"button\"\r\n                    data-gtmid={config.tracking && GTM_ID.TIMEZONE_DROPDOWN}\r\n                    data-ga4event-clk-name={\r\n                        config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                    }\r\n                    data-ga4event-element={\r\n                        config.tracking && GA4EVENT.ELEMENTS.TIMEZONE_DROPDOWN\r\n                    }\r\n                    onClick={this.togglePicker}\r\n                    class=\"fxs_btn fxs_btn_xsmall fxs_btn_phantom\"\r\n                >\r\n                    {this.renderTitle(this.state.openTimeZonePicker)}\r\n                </button>\r\n                {this.state.openTimeZonePicker && (\r\n                    <DetailModal\r\n                        handleClose={this.togglePicker}\r\n                        body={this.renderDetail(\r\n                            config,\r\n                            timezones,\r\n                            timeFormat,\r\n                            automaticallyTimeZone,\r\n                            isMobileOnly\r\n                        )}\r\n                    />\r\n                )}\r\n            </div>\r\n        ) : (\r\n            <div class=\"fxs_c_timezone-wrapper\" ref={this.container}>\r\n                <button\r\n                    type=\"button\"\r\n                    data-gtmid={config.tracking && GTM_ID.TIMEZONE_DROPDOWN}\r\n                    data-ga4event-clk-name={\r\n                        config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                    }\r\n                    data-ga4event-element={\r\n                        config.tracking && GA4EVENT.ELEMENTS.TIMEZONE_DROPDOWN\r\n                    }\r\n                    onClick={this.togglePicker}\r\n                    class=\"fxs_btn fxs_btn_xsmall fxs_btn_phantom\"\r\n                >\r\n                    {this.renderTitle(this.state.openTimeZonePicker)}\r\n                </button>\r\n                {this.state.openTimeZonePicker &&\r\n                    this.renderDetail(\r\n                        config,\r\n                        timezones,\r\n                        timeFormat,\r\n                        automaticallyTimeZone,\r\n                        isMobileOnly\r\n                    )}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"config, timezones, settings, timeFormat, currentTime, automaticallyTimeZone, currentTimezone, hasDefautTimezones\",\r\n    actions\r\n)(TimezonePicker);\r\n","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport actions from \"../../../actions\";\r\nimport AdvancedFilterTopDesktop from \"./AdvancedFilterTopDesktop\";\r\nimport AdvancedCountryFilterDesktop from \"./AdvancedCountryFilterDesktop\";\r\nimport AdvancedCategoryFilterDesktop from \"./AdvancedCategoryFilterDesktop\";\r\nimport {\r\n    FILTER_TYPE,\r\n    GTM_ID, GA4EVENT,\r\n    SETTING_KEYS,\r\n    TIME_FILTERS_VALUES,\r\n    VOLATILITY_FILTER_OPTIONS,\r\n} from \"../../../constants\";\r\nimport CheckboxPicker from \"../../../../common/components/CheckboxPicker\";\r\nimport { isMobileOnly } from \"react-device-detect\";\r\nimport AdvancedFilterTopMobile from \"./AdvancedFilterTopMobile\";\r\nimport AdvancedCountryFilterMobile from \"./AdvancedCountryFilterMobile\";\r\nimport AdvancedCategoryFilterMobile from \"./AdvancedCategoryFilterMobile\";\r\nimport { getKeysOfNotNullValues } from \"../../../../common/helpers/objects\";\r\nimport DetailModal from \"../../modal/DetailModal\";\r\nimport { getDateRange } from \"../../../helpers/filter/dateRange\";\r\nimport { getSetting } from \"../../../../common/helpers/settingStorageHelpers\";\r\nimport IconSearchSolid from \"../../../../common/components/icons/IconSearchSolid\";\r\nimport { persistSettings } from \"../../../../calendar-common/helpers/settingsHelper\";\r\nimport { getViewDefaultSettings } from \"../../../helpers\";\r\n\r\nclass AdvancedFilter extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            timezoneOffset: null,\r\n            persistSettings: false,\r\n            volatilities: getKeysOfNotNullValues(VOLATILITY_FILTER_OPTIONS),\r\n            newFilter: {\r\n                eventName: null,\r\n                countries: [],\r\n                categories: [],\r\n                volatilities: [],\r\n                time: null,\r\n                type: null,\r\n            },\r\n        };\r\n\r\n        this.loadDefaultSettings = this.loadDefaultSettings.bind(this);\r\n        this.loadCustomSettings = this.loadCustomSettings.bind(this);\r\n        this.applyFilter = this.applyFilter.bind(this);\r\n        this.onImpactChanged = this.onImpactChanged.bind(this);\r\n        this.onChangeCountries = this.onChangeCountries.bind(this);\r\n        this.onChangeEventName = this.onChangeEventName.bind(this);\r\n        this.onChangeCategories = this.onChangeCategories.bind(this);\r\n        this.onChangeTime = this.onChangeTime.bind(this);\r\n    }\r\n\r\n    componentWillMount() {\r\n        const { settings } = this.props;\r\n        var newFilter = settings.filter;\r\n        var actualFilterType = settings.actualFilterType;\r\n\r\n        if (settings.filter.time === TIME_FILTERS_VALUES.Custom) {\r\n            newFilter.time = TIME_FILTERS_VALUES.RecentNext;\r\n        }\r\n\r\n        this.setState({\r\n            newFilter,\r\n            timezoneOffset: settings.timezoneOffset,\r\n            actualFilterType,\r\n        });\r\n    }\r\n\r\n    onImpactChanged(values) {\r\n        var vol = values.map((x) => VOLATILITY_FILTER_OPTIONS[x]);\r\n        var newFilter = { ...this.state.newFilter };\r\n        newFilter.volatilities = vol;\r\n        newFilter.type = null;\r\n        this.setState({\r\n            newFilter,\r\n        });\r\n    }\r\n\r\n    onChangeCountries(countries) {\r\n        var newFilter = {\r\n            ...this.state.newFilter,\r\n        };\r\n        newFilter.countries = countries;\r\n        newFilter.type = null;\r\n        this.setState({\r\n            newFilter,\r\n        });\r\n    }\r\n\r\n    onChangeEventName(eventName) {\r\n        var newFilter = { ...this.state.newFilter };\r\n        newFilter.eventName = eventName;\r\n        newFilter.type = null;\r\n        this.setState({\r\n            newFilter,\r\n        });\r\n    }\r\n\r\n    onChangeCategories(categories) {\r\n        var newFilter = {\r\n            ...this.state.newFilter,\r\n        };\r\n        newFilter.categories = categories;\r\n        newFilter.type = null;\r\n        this.setState({\r\n            newFilter,\r\n        });\r\n    }\r\n\r\n    onChangeTime({ time }) {\r\n        var dateRange = getDateRange(\r\n            { time },\r\n            this.state.newFilter.timezoneOffset\r\n        );\r\n\r\n        var newFilter = { ...this.state.newFilter };\r\n        newFilter.time = time;\r\n        newFilter.dateRange = dateRange;\r\n        newFilter.type = null;\r\n\r\n        this.setState({\r\n            newFilter,\r\n        });\r\n    }\r\n\r\n    loadDefaultSettings() {\r\n        let nextSettings = getViewDefaultSettings(this.props);\r\n\r\n        this.setState({\r\n            newFilter: nextSettings.filter,\r\n            timezoneOffset: nextSettings.timezoneOffset,\r\n            actualFilterType: nextSettings.actualFilterType,\r\n        });\r\n    }\r\n\r\n    loadCustomSettings() {\r\n        let customSettings = getSetting(SETTING_KEYS.Settings);\r\n        if (customSettings && customSettings.filter) {\r\n            customSettings.filter.dateRange.to = new Date(\r\n                Date.parse(customSettings.filter.dateRange.to)\r\n            );\r\n            customSettings.filter.dateRange.from = new Date(\r\n                Date.parse(customSettings.filter.dateRange.from)\r\n            );\r\n\r\n            this.setState({\r\n                newFilter: customSettings.filter,\r\n                timezoneOffset: customSettings.timezoneOffset,\r\n                actualFilterType: FILTER_TYPE.custom,\r\n            });\r\n        }\r\n    }\r\n\r\n    applyFilter() {\r\n        this.state.newFilter.dateRange = getDateRange(\r\n            this.state.newFilter,\r\n            this.state.timezoneOffset\r\n        );\r\n\r\n        var settings = this.props.settings;\r\n\r\n        if (this.state.persistSettings) {\r\n            settings.filter = this.state.newFilter;\r\n            settings.actualFilterType = FILTER_TYPE.custom;\r\n\r\n            persistSettings({ ...settings });\r\n            this.props.filter.type = FILTER_TYPE.custom;\r\n        } else {\r\n            persistSettings({ actualFilterType: this.state.actualFilterType });\r\n        }\r\n\r\n        this.props.changeFilter(this.state.newFilter);\r\n        this.props.fetchEventDates();\r\n\r\n        if (isMobileOnly) {\r\n            this.props.changeShowMobileFilter(false);\r\n        } else {\r\n            this.props.changeShowAdvancedFilter(false);\r\n        }\r\n    }\r\n\r\n    renderDetail() {\r\n        return (\r\n            <div class=\"fxs_c_advanced-filter\">\r\n                <div class=\"fxs_c_content\">\r\n                    <div class=\"fxs_c_inner\">\r\n                        <div class=\"fxs_clearfix\"></div>\r\n                        {isMobileOnly ? (\r\n                            <AdvancedFilterTopMobile\r\n                                filter={this.state.newFilter}\r\n                                time={this.state.newFilter.time}\r\n                                onTimeFilterChanged={(time) =>\r\n                                    this.onChangeTime({ time })\r\n                                }\r\n                                loadDefaultSettings={this.loadDefaultSettings}\r\n                                loadCustomSettings={this.loadCustomSettings}\r\n                                filterType={this.state.newFilter.type}\r\n                            />\r\n                        ) : (\r\n                            <AdvancedFilterTopDesktop\r\n                                filter={this.state.newFilter}\r\n                                time={this.state.newFilter.time}\r\n                                onTimeFilterChanged={(time) =>\r\n                                    this.onChangeTime({ time })\r\n                                }\r\n                                onEventNameChanged={(eventName) =>\r\n                                    this.onChangeEventName(eventName)\r\n                                }\r\n                                loadDefaultSettings={this.loadDefaultSettings}\r\n                                loadCustomSettings={this.loadCustomSettings}\r\n                                filterType={this.state.newFilter.type}\r\n                            />\r\n                        )}\r\n\r\n                        <div\r\n                            class={`fxs_clearfix  ${isMobileOnly ? \"fxs_c_mobile_filter_main\" : \"\"\r\n                                }`}\r\n                        >\r\n                            {isMobileOnly && (\r\n                                <label class=\"fxs_c_event-search\">\r\n                                    <IconSearchSolid />\r\n                                    <input\r\n                                        type=\"search\"\r\n                                        value={this.state.newFilter.eventName}\r\n                                        onChange={(event) =>\r\n                                            this.onChangeEventName(\r\n                                                event.target.value\r\n                                                    ? event.target.value\r\n                                                    : \"\"\r\n                                            )\r\n                                        }\r\n                                        placeholder={this.props.translate(\r\n                                            \"AdvancedFilterEventNameLabel\"\r\n                                        )}\r\n                                        data-gtmid={ this.props.config.tracking && GTM_ID.ADVANCED_FILTERS_EVENT_NAME }\r\n                                        data-ga4event-clk-name={ this.props.config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                        data-ga4event-element={ this.props.config.tracking && GA4EVENT.ELEMENTS.ADVANCED_FILTERS_EVENT_NAME}\r\n                                    />\r\n                                </label>\r\n                            )}\r\n                            <div class=\"fxs_c_grid\">\r\n                                {isMobileOnly && (\r\n                                    <h4 class=\"fxs_headline_small fxs_marginBase_top\">\r\n                                        {this.props.translate(\r\n                                            \"CountryFilterTitle\"\r\n                                        )}\r\n                                    </h4>\r\n                                )}\r\n                                {isMobileOnly ? (\r\n                                    <AdvancedCountryFilterMobile\r\n                                        selectedCountries={\r\n                                            this.state.newFilter.countries\r\n                                        }\r\n                                        onChange={(countries) =>\r\n                                            this.onChangeCountries(countries)\r\n                                        }\r\n                                    />\r\n                                ) : (\r\n                                    <AdvancedCountryFilterDesktop\r\n                                        selectedCountries={\r\n                                            this.state.newFilter.countries\r\n                                        }\r\n                                        onChange={(countries) =>\r\n                                            this.onChangeCountries(countries)\r\n                                        }\r\n                                    />\r\n                                )}\r\n\r\n                                {isMobileOnly && (\r\n                                    <div class=\"fxs_clearfix fxs_marginBase_bottom\" />\r\n                                )}\r\n                                {!isMobileOnly && <div class=\"fxs_clearfix\" />}\r\n                                {!isMobileOnly && <hr />}\r\n                                {!isMobileOnly && <div class=\"fxs_clearfix\" />}\r\n\r\n                                <CheckboxPicker\r\n                                    onChange={(values) =>\r\n                                        this.onImpactChanged(values)\r\n                                    }\r\n                                    values={this.state.volatilities}\r\n                                    checkedValues={getVolatilitiesSelected(\r\n                                        this.state.volatilities,\r\n                                        this.state.newFilter.volatilities\r\n                                    )}\r\n                                    renderTitle={() => (\r\n                                        <h4\r\n                                            class={`${isMobileOnly\r\n                                                ? \"fxs_headline_small fxs_marginBase_top\"\r\n                                                : \"fxs_headline_tiny fxs_marginBase_vertical\"\r\n                                                } `}\r\n                                        >\r\n                                            {this.props.translate(\r\n                                                \"AdvancedFilterImpactLabel\"\r\n                                            )}\r\n                                        </h4>\r\n                                    )}\r\n                                    renderValue={(value) => (\r\n                                        <span>\r\n                                            {\" \"}\r\n                                            {this.props.translate(value)}{\" \"}\r\n                                        </span>\r\n                                    )}\r\n                                    getOptionGtmId={(key) =>\r\n                                        this.props.config.tracking &&\r\n                                        GTM_ID.ADVANCED_FILTERS_IMPACT_CHECKBOX(\r\n                                            key\r\n                                                .replace(\"Volatility_\", \"\")\r\n                                                .toLowerCase()\r\n                                        )\r\n                                    }\r\n                                    getOptionGA4Id={(key) =>\r\n                                        this.props.config.tracking && \r\n                                        GA4EVENT.ELEMENTS.ADVANCED_FILTERS_IMPACT_CHECKBOX(\r\n                                        key\r\n                                            .replace(\"Volatility_\", \"\")\r\n                                            .toLowerCase()\r\n                                    ) }\r\n                                    getGa4Name={\r\n                                        this.props.config.tracking &&\r\n                                        GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                                    }                \r\n                                    labelClass=\"fxs_half fxs_c_filter_picker_label\"\r\n                                />\r\n\r\n                                {isMobileOnly && (\r\n                                    <div class=\"fxs_clearfix fxs_marginBase_bottom\" />\r\n                                )}\r\n                                {!isMobileOnly && <div class=\"fxs_clearfix\" />}\r\n                                {!isMobileOnly && <hr />}\r\n                                {!isMobileOnly && <div class=\"fxs_clearfix\" />}\r\n\r\n                                {isMobileOnly ? (\r\n                                    <AdvancedCategoryFilterMobile\r\n                                        selectedCategories={\r\n                                            this.state.newFilter.categories\r\n                                        }\r\n                                        onChange={(categories) =>\r\n                                            this.onChangeCategories(categories)\r\n                                        }\r\n                                    />\r\n                                ) : (\r\n                                    <AdvancedCategoryFilterDesktop\r\n                                        selectedCategories={\r\n                                            this.state.newFilter.categories\r\n                                        }\r\n                                        onChange={(categories) =>\r\n                                            this.onChangeCategories(categories)\r\n                                        }\r\n                                    />\r\n                                )}\r\n                                <div class=\"fxs_clearfix\" />\r\n                                <hr class=\"fxs_marginBase_top\" />\r\n                                <div class=\"fxs_c_filter_footer\">\r\n                                    <div class=\"fxs_fLeft\">\r\n                                        <label class=\"fxs_btn fxs_resetMargin fxs_resetPadding\">\r\n                                            <input\r\n                                                type=\"checkbox\"\r\n                                                checked={\r\n                                                    this.state.persistSettings\r\n                                                }\r\n                                                data-gtmid={ this.props.config.tracking && GTM_ID.ADVANCED_FILTERS_SAVE_SETTINGS }\r\n                                                data-ga4event-clk-name={ this.props.config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                                data-ga4event-element={ this.props.config.tracking && GA4EVENT.ELEMENTS.ADVANCED_FILTERS_SAVE_SETTINGS}\r\n\r\n                                                onChange={(event) =>\r\n                                                    this.setState({\r\n                                                        persistSettings:\r\n                                                            event.target\r\n                                                                .checked,\r\n                                                    })\r\n                                                }\r\n                                            />\r\n                                            <span>\r\n                                                {\" \"}\r\n                                                {isMobileOnly\r\n                                                    ? this.props.translate(\r\n                                                        \"FilterSaveMobileLabel\"\r\n                                                    )\r\n                                                    : this.props.translate(\r\n                                                        \"FilterSaveLabel\"\r\n                                                    )}{\" \"}\r\n                                            </span>\r\n                                        </label>\r\n                                    </div>\r\n                                    <div class=\"fxs_fRight\">\r\n                                        <button\r\n                                            type=\"button\"\r\n                                            onClick={this.applyFilter}\r\n                                            class=\"fxs_btn fxs_btn_cta fxs_resetMargin\"\r\n                                            data-gtmid={ this.props.config.tracking && GTM_ID.ADVANCED_FILTERS_APPLY }\r\n                                            data-ga4event-clk-name={ this.props.config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                                            data-ga4event-element={ this.props.config.tracking && GA4EVENT.ELEMENTS.ADVANCED_FILTERS_APPLY}\r\n\r\n                                        >\r\n                                            <span>\r\n                                                <span>\r\n                                                    {\" \"}\r\n                                                    {this.props.translate(\r\n                                                        \"FilterApplyLabel\"\r\n                                                    )}{\" \"}\r\n                                                </span>\r\n                                            </span>\r\n                                        </button>\r\n                                    </div>\r\n                                </div>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n\r\n    render({ changeShowMobileFilter }) {\r\n        return isMobileOnly ? (\r\n            <DetailModal\r\n                handleClose={() => {\r\n                    changeShowMobileFilter(false);\r\n                }}\r\n                body={this.renderDetail()}\r\n            ></DetailModal>\r\n        ) : (\r\n            this.renderDetail()\r\n        );\r\n    }\r\n}\r\n\r\nconst getVolatilitiesSelected = (volatilities, selected) =>\r\n    selected.length === 0\r\n        ? []\r\n        : volatilities.filter((key) =>\r\n            selected.includes(VOLATILITY_FILTER_OPTIONS[key])\r\n        );\r\n\r\nexport default connectWithTranslations(\r\n    \"settings, defaultSettings, basicSettings, config\",\r\n    actions\r\n)(AdvancedFilter);\r\n","export const getPeriodType = (periodType, translate) => {\r\n\r\n    switch(periodType) { \r\n        case \"DAY\": { \r\n           return translate(\"DetailEventReleaseWeekly\") \r\n        } \r\n        case \"MONTH\": { \r\n           return translate(\"DetailEventReleaseMonthly\")\r\n        }\r\n  \r\n        case \"QUARTER\": { \r\n            return translate(\"DetailEventReleaseQuarterly\")\r\n        } \r\n        default: { \r\n            return translate(\"DetailEventReleaseIrregular\")\r\n        }\r\n    }\r\n  }","import { Component, createRef } from \"preact\";\r\nimport actions from \"../../actions\";\r\nimport { getAdvancedDatePicker } from \"../../../common/asyncComponents/DatePicker\";\r\nimport IconCalendar from \"../../../common/components/icons/IconCalendar\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport IconCaretDown from \"../../../common/components/icons/IconCaretDown\";\r\nimport { TIME_FILTERS_VALUES } from \"../../constants\";\r\nimport { getDateRange } from \"../../helpers/formatDate\";\r\n\r\nclass DatePickerFilterDesktop extends Component {\r\n    picker = createRef();\r\n\r\n    constructor(props) {\r\n        super(props);\r\n\r\n        this.state = {\r\n            datePicker: null,\r\n            isOpen: false,\r\n        };\r\n\r\n        this.togglePicker = this.togglePicker.bind(this);\r\n        this.resetDatePicker = this.resetDatePicker.bind(this);\r\n        this.onApply = this.onApply.bind(this);\r\n        this.changeRangeOption = this.changeRangeOption.bind(this);\r\n        this.renderButton = this.renderButton.bind(this);\r\n    }\r\n\r\n    async togglePicker() {\r\n        const { isOpen } = this.state;\r\n        if (isOpen) {\r\n            document.removeEventListener(\"click\", this.handleOutsideClick, false);\r\n            this.resetDatePicker();\r\n            this.setState({ isOpen: false });\r\n        } else {\r\n            const picker = await getAdvancedDatePicker();\r\n            this.setState({ datePicker: picker, isOpen: true });\r\n            document.addEventListener(\"click\", this.handleOutsideClick, false);\r\n        }\r\n    }\r\n\r\n    handleOutsideClick = (e) => {\r\n        let currentPicker = this.picker;\r\n        if (currentPicker.current != null) {\r\n            try {\r\n                let containsWrapper = currentPicker.current.contains(e.target);\r\n                let containsContainer = e.path?.indexOf(currentPicker.current) !== -1;\r\n                if (!containsWrapper && !containsContainer) {\r\n                    this.togglePicker();\r\n                }\r\n            } catch (error) {\r\n                console.log(error);\r\n            }\r\n        }\r\n    };\r\n\r\n    resetDatePicker() {\r\n        this.setState({ datePicker: undefined });\r\n    }\r\n\r\n    onApply(dateRange) {\r\n        if (dateRange && dateRange.from && dateRange.to)\r\n            this.props.applyFilter(dateRange);\r\n\r\n        this.resetDatePicker();\r\n    }\r\n\r\n    async changeRangeOption(value) {\r\n        this.props.onTimeFilterChanged(value);\r\n\r\n        this.resetDatePicker();\r\n\r\n        const picker = await getAdvancedDatePicker();\r\n        this.setState({ datePicker: picker });\r\n    }\r\n\r\n    renderButton(\r\n        value,\r\n        getContentGtmId,\r\n        getContentGa4Id,\r\n        getGa4Name,\r\n        showHighlighted,\r\n        time,\r\n        translate\r\n    ) {\r\n        return (\r\n            <button\r\n                type=\"button\"\r\n                data-gtmid={getContentGtmId && getContentGtmId(value)}\r\n                data-ga4event-clk-name={getGa4Name && getGa4Name}\r\n                data-ga4event-element={getContentGa4Id && getContentGa4Id(value)}\r\n                class={\r\n                    showHighlighted && time === value\r\n                        ? \"fxs_c_datepicker_button fxs_c_datepicker_button_active\"\r\n                        : \"fxs_c_datepicker_button\"\r\n                }\r\n                onClick={() => this.changeRangeOption(value)}\r\n            >\r\n                <span>\r\n                    <span>{translate(value)}</span>\r\n                </span>\r\n            </button>\r\n        );\r\n    }\r\n\r\n    render(\r\n        {\r\n            translate,\r\n            config: { culture },\r\n            dateRange,\r\n            onDateRangeFilterChanged,\r\n            onChangeCustomFilter,\r\n            getButtonGtmId,\r\n            getButtonGa4Id,\r\n            getContentGtmId,\r\n            getContentGa4Id,\r\n            getGa4Name,\r\n            showHighlighted,\r\n            time,\r\n        },\r\n        { datePicker, isOpen }\r\n    ) {\r\n        return (\r\n            <div class=\"fxs_c_datepicker-wrapper\" ref={this.picker}>\r\n                <button\r\n                    type=\"button\"\r\n                    onClick={this.togglePicker}\r\n                    class={`fxs_btn fxs_c_datepicker_trigger_button fxs_btn_xsmall ${\r\n                        datePicker ? \"fxs_c_datePicker_active\" : \"\"\r\n                    }`}\r\n                    data-gtmid={getButtonGtmId}\r\n                    data-ga4event-clk-name={getGa4Name}\r\n                    data-ga4event-element={getButtonGa4Id}\r\n                >\r\n                    <IconCalendar />\r\n                    <span> {getDateRange(dateRange, this.props.config.culture)} </span>\r\n                    <IconCaretDown />\r\n                </button>\r\n                {isOpen && datePicker && (\r\n                    <div class=\"fxs_c_DatePicker-Container\">\r\n                        <div class=\"fxs_c_datepicker_button_area\">\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.RecentNext,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.Today,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n\r\n                            <hr class=\"fxs_c_datePicker_button_divider\" />\r\n\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.Tomorrow,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.Yesterday,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n\r\n                            <hr class=\"fxs_c_datePicker_button_divider\" />\r\n\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.ThisWeek,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.ThisMonth,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.NextWeek,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.NextMonth,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.PreviousWeek,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.PreviousMonth,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n\r\n                            <hr class=\"fxs_c_datePicker_button_divider\" />\r\n\r\n                            {this.renderButton(\r\n                                TIME_FILTERS_VALUES.Custom,\r\n                                getContentGtmId,\r\n                                getContentGa4Id,\r\n                                getGa4Name,\r\n                                showHighlighted,\r\n                                time,\r\n                                translate\r\n                            )}\r\n                        </div>\r\n                        <datePicker.default\r\n                            className=\"fxs_c_DatePicker\"\r\n                            onApply={this.onApply}\r\n                            applyLabel={translate(\"DateSelectorApply\")}\r\n                            dateRange={dateRange}\r\n                            locale={culture}\r\n                            onDateRangeFilterChanged={onDateRangeFilterChanged}\r\n                            onChangeCustomFilter={onChangeCustomFilter}\r\n                        />\r\n                    </div>\r\n                )}\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\"config\", actions)(DatePickerFilterDesktop);\r\n","const COUNTRY_FILTER_OPTIONS = {\r\n    Country_All: null,\r\n    Country_UnitedStates: \"US\",\r\n    Country_UnitedKingdom: \"UK\",\r\n    Country_EuropeanMonetaryUnion: \"EMU\",\r\n    Country_Germany: \"DE\",\r\n    Country_China: \"CN\",\r\n    Country_Japan: \"JP\",\r\n    Country_Canada: \"CA\",\r\n    Country_Australia: \"AU\",\r\n    Country_NewZealand: \"NZ\",\r\n\r\n    Country_Switzerland: \"CH\",\r\n    Country_France: \"FR\",\r\n    Country_Italy: \"IT\",\r\n    Country_Spain: \"ES\",\r\n\r\n    Country_Ukraine: \"UA\",\r\n\r\n    Country_India: \"IN\",\r\n    Country_Russia: \"RU\",\r\n    Country_Turkey: \"TR\",\r\n    Country_SouthAfrica: \"ZA\",\r\n    Country_Brazil: \"BR\",\r\n    Country_SouthKorea: \"KR\",\r\n    Country_Indonesia: \"ID\",\r\n    Country_Singapore: \"SG\",\r\n    Country_Mexico: \"MX\",\r\n    Country_Sweden: \"SE\",\r\n    Country_Norway: \"NO\",\r\n    Country_Denmark: \"DK\",\r\n    Country_Greece: \"GR\",\r\n    Country_Portugal: \"PT\",\r\n    Country_Ireland: \"IE\",\r\n    Country_Austria: \"AT\",\r\n    Country_Belgium: \"BE\",\r\n    Country_Netherlands: \"NL\",\r\n    Country_Finland: \"FI\",\r\n    Country_CzechRepublic: \"CZ\",\r\n    Country_Poland: \"PL\",\r\n    Country_Hungary: \"HU\",\r\n    Country_Romania: \"RO\",\r\n    Country_Chile: \"CL\",\r\n    Country_Colombia: \"CO\",\r\n    Country_Argentina: \"AR\",\r\n    Country_Iceland: \"IS\",\r\n    Country_HongKong: \"HK\",\r\n    Country_Slovakia: \"SK\",\r\n    Country_Israel: \"IL\",\r\n    Country_SaudiArabia: \"SA\",\r\n    Country_Vietnam: \"VN\",\r\n    Country_Kuwait: \"KW\",\r\n    Country_Egypt: \"EG\",\r\n    Country_UnitedArabEmirates: \"AE\",\r\n    Country_Qatar: \"QA\",\r\n    Country_Thailand: \"TH\",\r\n};\r\n\r\nconst getBasicCountries = (countries) => {\r\n    if (!countries) return null;\r\n\r\n    return countries.slice(0, 9);\r\n};\r\n\r\nconst getMajorCountries = (countries) => {\r\n    if (!countries) return null;\r\n\r\n    return countries.slice(0, 14);\r\n};\r\n\r\nconst getMinorCountries = (countries) => {\r\n    if (!countries) return null;\r\n\r\n    return countries.slice(14);\r\n};\r\n\r\nconst getCountryNameByCountryCode = (code) => {\r\n\r\n    return Object.keys(COUNTRY_FILTER_OPTIONS).find(key => COUNTRY_FILTER_OPTIONS[key] === code);\r\n}\r\n\r\nexport {\r\n    COUNTRY_FILTER_OPTIONS,\r\n    getBasicCountries,\r\n    getMajorCountries,\r\n    getMinorCountries,\r\n    getCountryNameByCountryCode,\r\n};\r\n","import { h, Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport SpeechScore from \"../rows/SpeechScore\";\r\nimport SpeechAverageScore from \"../rows/SpeechAverageScore\";\r\nclass SpeechTrackerModal extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n    }\r\n\r\n    render({ translate }) {\r\n        const speechScoreExample = {\r\n            scoreLevel: -1,\r\n            score: 6.7,\r\n            averageScore: 3.3,\r\n            averageScoreLevel: 1,\r\n            isVotingMember: false,\r\n        };\r\n\r\n        return (\r\n            <div class=\"fxs_c_modal-backdrop\">\r\n                <div class=\"fxs_c_modal_content_speech_tracker\">\r\n                    <p class=\"fxs_c_speech_tracker_modal-title\">\r\n                        New Speech Tracker\r\n                    </p>\r\n                    <svg\r\n                        class=\"fxs_c_speech_tracker_modal-close\"\r\n                        width=\"35\"\r\n                        height=\"35\"\r\n                        viewBox=\"0 0 35 35\"\r\n                        fill=\"none\"\r\n                        xmlns=\"http://www.w3.org/2000/svg\"\r\n                        onClick={this.props.toggleSpeechTrackerModal}\r\n                    >\r\n                        <path\r\n                            d=\"M19.6924 17.5L22.8639 14.3728C23.2531 13.9891 23.2531 13.3669 22.8639 12.9828L22.1591 12.2878C21.7699 11.9041 21.1389 11.9041 20.7494 12.2878L17.5779 15.415L14.4064 12.2878C14.0172 11.9041 13.3862 11.9041 12.9967 12.2878L12.2919 12.9828C11.9027 13.3666 11.9027 13.9887 12.2919 14.3728L15.4634 17.5L12.2919 20.6272C11.9027 21.0109 11.9027 21.6331 12.2919 22.0172L12.9967 22.7122C13.3859 23.0959 14.0172 23.0959 14.4064 22.7122L17.5779 19.585L20.7494 22.7122C21.1386 23.0959 21.7699 23.0959 22.1591 22.7122L22.8639 22.0172C23.2531 21.6334 23.2531 21.0113 22.8639 20.6272L19.6924 17.5Z\"\r\n                            fill=\"#1B1C23\"\r\n                        />\r\n                    </svg>\r\n                    <img src=\"https://editorial.blob.core.windows.net/images/EcoCal/speechTrackerModalImage.png\" />\r\n\r\n                    <div class=\"fxs_c_speech_tracker_modal_wrapper\">\r\n                        <p class=\"fxs_c_speech_tracker_modal_description\">\r\n                            {translate(\"SpeechTrackerModalDescription\")}\r\n                        </p>\r\n                        <div class=\"fxs_c_speech_tracker_modal_block\">\r\n                            <div className=\"fxs_c_speech_score_detail_wrapper\">\r\n                                <p class=\"fxs_c_speech_tracker_average_score\">\r\n                                    <span>{`${translate(\"VotingMember\")}: `}</span>\r\n                                    <span className=\"fxs_c_speech_score\">\r\n                                        {speechScoreExample?.isVotingMember\r\n                                            ? translate(\"Yes\")\r\n                                            : translate(\"No\")}\r\n                                    </span>\r\n                                </p>\r\n                                <p class=\"fxs_c_speech_tracker_score\">\r\n                                    <span>\r\n                                        {translate(\"SpeechTrackerScoreLabel\")}\r\n                                    </span>\r\n                                    {speechScoreExample.score ? (\r\n                                        <SpeechScore\r\n                                            speechScore={speechScoreExample}\r\n                                        />\r\n                                    ) : (\r\n                                        <span className=\"fxs_c_speech_score\">\r\n                                            -\r\n                                        </span>\r\n                                    )}\r\n                                </p>\r\n                                <p class=\"fxs_c_speech_tracker_average_score\">\r\n                                    <SpeechAverageScore\r\n                                        speechScore={speechScoreExample}\r\n                                        includeName={true}\r\n                                    />\r\n                                </p>\r\n                            </div>\r\n                            <p class=\"fxs_c_speech_tracker_modal_description\">\r\n                                {translate(\"SpeechTrackerModalDisclaimer\")}\r\n                            </p>\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"fxs_c_speech_tracker_modal_buttons\">\r\n                        <a\r\n                            href=\"#bottom\"\r\n                            class=\"fxs_c_read_more_btn\"\r\n                            onClick={this.props.toggleSpeechTrackerModal}\r\n                        >\r\n                            {translate(\"ReadMore\")}\r\n                        </a>\r\n                        <a\r\n                            href=\"/account/login?uriToRedirect=%2Feconomic-calendar%3FuserAction%3Dlogin\"\r\n                            class=\"fxs_c_unlock_btn\"\r\n                            data-ga4event-clk-name=\"features-calendar_click\"\r\n                            data-ga4event-element=\"log-in\"\r\n                        >\r\n                            {translate(\"LogIn\")}\r\n                        </a>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\nexport default connectWithTranslations(\"\")(SpeechTrackerModal);\r\n","export const VOLATILITY_FILTER_OPTIONS = {\r\n    Volatility_All: null,\r\n    Volatility_None: 'NONE',\r\n    Volatility_Low: 'LOW',\r\n    Volatility_Medium: 'MEDIUM',\r\n    Volatility_High: 'HIGH'\r\n}","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport {\r\n    COUNTRY_FILTER_OPTIONS,\r\n    getMajorCountries,\r\n    getMinorCountries,\r\n    GTM_ID,\r\n    GA4EVENT\r\n} from \"../../../constants\";\r\nimport CheckboxPicker from \"../../../../common/components/CheckboxPicker\";\r\nimport { getKeysOfNotNullValues } from \"../../../../common/helpers/objects\";\r\n\r\nconst CountryCheckboxValue = ({ code, text }) => (\r\n    <div class=\"fxs_c_filter_picker\">\r\n        <span class={`fxs_flag fxs_${code.toLowerCase()}`} title={text}></span>\r\n        <span class=\"fxs_c_country-name\">{text}</span>\r\n    </div>\r\n);\r\n\r\nclass AdvancedCountryFilterDesktop extends Component {\r\n    componentWillMount() {\r\n        const countryTraking = {\r\n            all: \"all\",\r\n            clear: \"clear\",\r\n            country: \"Country_\",\r\n        };\r\n        const countries = getKeysOfNotNullValues(COUNTRY_FILTER_OPTIONS);\r\n        const majorCountries = getMajorCountries(countries);\r\n        const minorCountries = getMinorCountries(countries);\r\n\r\n        this.setState({\r\n            countries,\r\n            majorCountries,\r\n            minorCountries,\r\n            countryTraking,\r\n        });\r\n    }\r\n\r\n    componentWillReceiveProps(nextProps) {\r\n        if (this.props.selectedCountries !== nextProps.selectedCountries) {\r\n            const selected = this.state.countries.filter((key) =>\r\n                nextProps.selectedCountries.includes(\r\n                    COUNTRY_FILTER_OPTIONS[key]\r\n                )\r\n            );\r\n            this.setState({ selected });\r\n        }\r\n    }\r\n\r\n    render(\r\n        { onChange, translate, config, selectedCountries },\r\n        { countries, majorCountries, minorCountries, countryTraking }\r\n    ) {\r\n        const majorSelected = getSelected(majorCountries, selectedCountries);\r\n        const minorSelected = getSelected(minorCountries, selectedCountries);\r\n\r\n        return (\r\n            <div class=\"fxs_c_advanced-countries-filter\">\r\n                <h4 class=\"fxs_headline_tiny  fxs_marginBase_vertical\">\r\n                    <span>{translate(\"CountryFilterTitle\")}</span>\r\n                    <span class=\"fxs_c_all-none\">\r\n                        <button\r\n                            type=\"button\"\r\n                            class=\"fxs_btn fxs_btn_anchor fxs_btn_xsmall\"\r\n                            data-gtmid={\r\n                                config.tracking &&\r\n                                GTM_ID.ADVANCED_FILTERS_COUNTRY_CHECKBOX(\r\n                                    countryTraking.all\r\n                                )\r\n                            }\r\n                            data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                            data-ga4event-element={\r\n                                config.tracking &&\r\n                                GA4EVENT.ELEMENTS.ADVANCED_FILTERS_COUNTRY_CHECKBOX\r\n                            }\r\n                            data-ga4event-country = {config.tracking && countryTraking.all.toLowerCase()}\r\n                            onClick={() => onChange(getValues(countries, []))}\r\n                        >\r\n                            <span>\r\n                                <span>\r\n                                    {translate(\"AdvancedFilterAllLabel\")}\r\n                                </span>\r\n                            </span>\r\n                        </button>\r\n                        <span class=\"fxs_c_slash-divider\">/</span>\r\n                        <button\r\n                            type=\"button\"\r\n                            class=\"fxs_btn fxs_btn_anchor fxs_btn_xsmall\"\r\n                            data-gtmid={\r\n                                config.tracking &&\r\n                                GTM_ID.ADVANCED_FILTERS_COUNTRY_CHECKBOX(\r\n                                    countryTraking.clear\r\n                                )\r\n                            }\r\n                            data-ga4event-clk-name={config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                            data-ga4event-element={\r\n                                config.tracking &&\r\n                                GA4EVENT.ELEMENTS.ADVANCED_FILTERS_COUNTRY_CHECKBOX\r\n                            }\r\n                            data-ga4event-country = {config.tracking && countryTraking.clear.toLowerCase()}\r\n                            onClick={() => onChange([])}\r\n                        >\r\n                            <span>\r\n                                <span>\r\n                                    {translate(\"AdvancedFilterNoneLabel\")}\r\n                                </span>\r\n                            </span>\r\n                        </button>\r\n                    </span>\r\n                </h4>\r\n\r\n                <CheckboxPicker\r\n                    onChange={(values) =>\r\n                        onChange(getValues(values, minorSelected))\r\n                    }\r\n                    values={majorCountries}\r\n                    checkedValues={majorSelected}\r\n                    renderTitle={() => { }}\r\n                    renderValue={(value) => (\r\n                        <CountryCheckboxValue\r\n                            code={COUNTRY_FILTER_OPTIONS[value]}\r\n                            text={translate(value)}\r\n                        />\r\n                    )}\r\n                    getOptionGtmId={(key) =>\r\n                        config.tracking &&\r\n                        GTM_ID.ADVANCED_FILTERS_COUNTRY_CHECKBOX(\r\n                            key\r\n                                .replace(countryTraking.country, \"\")\r\n                                .toLowerCase()\r\n                        )\r\n                    }\r\n                    getOptionGA4Id={(key) =>\r\n                        config.tracking &&\r\n                        GA4EVENT.ELEMENTS.ADVANCED_FILTERS_COUNTRY_CHECKBOX\r\n                    }\r\n                    getOptionGa4ThirdTrackingId={\r\n                        (key)=>({\"data-ga4event-country\":`${key.replace(countryTraking.country, \"\").toLowerCase()}`})}\r\n                    getGa4Name={\r\n                        config.tracking &&\r\n                        GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                    }\r\n                />\r\n\r\n                <div class=\"fxs_clearfix\" />\r\n                <div class=\"fxs_marginBase_vertical\" />\r\n                <div class=\"fxs_clearfix\" />\r\n\r\n                <CheckboxPicker\r\n                    onChange={(values) =>\r\n                        onChange(getValues(majorSelected, values))\r\n                    }\r\n                    values={minorCountries}\r\n                    checkedValues={minorSelected}\r\n                    renderTitle={() => { }}\r\n                    renderValue={(value) => (\r\n                        <CountryCheckboxValue\r\n                            code={COUNTRY_FILTER_OPTIONS[value]}\r\n                            text={translate(value)}\r\n                        />\r\n                    )}\r\n                    getOptionGtmId={(key) =>\r\n                        config.tracking &&\r\n                        GTM_ID.ADVANCED_FILTERS_COUNTRY_CHECKBOX(\r\n                            key.replace(\"Country_\", \"\").toLowerCase()\r\n                        )\r\n                    }\r\n                    getOptionGA4Id={(key) =>\r\n                        config.tracking &&\r\n                        GA4EVENT.ELEMENTS.ADVANCED_FILTERS_COUNTRY_CHECKBOX\r\n                    }\r\n                    getOptionGa4ThirdTrackingId={\r\n                        (key)=>({\"data-ga4event-country\":`${key.replace(\"Country_\", \"\").toLowerCase()}`})}\r\n\r\n                    getGa4Name={\r\n                        config.tracking &&\r\n                        GA4EVENT.NAMES.FEATURES_CALENDAR\r\n                    }\r\n                />\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nconst getSelected = (countries, selected) =>\r\n    selected.length === 0\r\n        ? []\r\n        : countries.filter((key) =>\r\n            selected.includes(COUNTRY_FILTER_OPTIONS[key])\r\n        );\r\n\r\nconst getValues = (selected, others) => {\r\n    const result = selected\r\n        .concat(others)\r\n        .map((x) => COUNTRY_FILTER_OPTIONS[x]);\r\n    return result;\r\n};\r\n\r\nexport default connectWithTranslations(\"config\")(AdvancedCountryFilterDesktop);\r\n","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../../common/helpers/translationsHelpers\";\r\nimport AdvancedTimeFilter from \"./AdvancedTimeFilter\";\r\nimport { FILTER_TYPE, GTM_ID, GA4EVENT } from \"../../../constants\";\r\nimport actions from \"../../../actions\";\r\n\r\nclass AdvancedFilterTopMobile extends Component {\r\n    render({\r\n        time,\r\n        onTimeFilterChanged,\r\n        translate,\r\n        config,\r\n        loadDefaultSettings,\r\n        loadCustomSettings,\r\n        filterType,\r\n    }) {\r\n        return (\r\n            <div class=\"fxs_c_top\">\r\n                <h3 class=\"fxs_headline_medium\">\r\n                    {translate(\"MobileFilterFilters\")}\r\n                </h3>\r\n                <div class=\"fxs_clearfix\"></div>\r\n                <AdvancedTimeFilter\r\n                    time={time}\r\n                    onTimeFilterChanged={onTimeFilterChanged}\r\n                    getButtonGtmId={(timeRange) =>\r\n                        config.tracking &&\r\n                        GTM_ID.ADVANCED_FILTERS_TIME_BUTTON(\r\n                            timeRange.replace(\"TimeFilter_\", \"\")\r\n                        )\r\n                    }\r\n                    getButtonGa4Id={(timeRange) =>\r\n                        config.tracking &&\r\n                        GA4EVENT.ELEMENTS.ADVANCED_FILTERS_TIME_BUTTON(\r\n                            timeRange.replace(\"TimeFilter_\", \"\")\r\n                        )\r\n                    }\r\n                    getDropdownButtonGtmId={() =>\r\n                        config.tracking && GTM_ID.ADVANCED_FILTERS_TIME_DROPDOWN\r\n                    }\r\n                    getDropdownButtonGa4Id={() =>\r\n                        config.tracking && GA4EVENT.ELEMENTS.ADVANCED_FILTERS_TIME_DROPDOWN\r\n                    }\r\n                    getDropdownOptionGtmId={(timeRange) =>\r\n                        config.tracking &&\r\n                        GTM_ID.ADVANCED_FILTERS_TIME_DROPDOWN_OPTION(\r\n                            timeRange.replace(\"TimeFilter_\", \"\")\r\n                        )\r\n                    }\r\n                    getDropdownOptionGa4Id={(timeRange) =>\r\n                        config.tracking &&\r\n                        GA4EVENT.ELEMENTS.ADVANCED_FILTERS_TIME_DROPDOWN_OPTION(\r\n                            timeRange.replace(\"TimeFilter_\", \"\")\r\n                        )\r\n                    }\r\n                    getCalendarButtonGtmId={() =>\r\n                        config.tracking &&\r\n                        GTM_ID.ADVANCED_FILTERS_CALENDAR_BUTTON\r\n                    }\r\n                    getCalendarButtonGa4Id={() =>\r\n                        config.tracking &&\r\n                        GA4EVENT.ELEMENTS.ADVANCED_FILTERS_CALENDAR_BUTTON\r\n                    }\r\n                    getCalendarContentGtmId={() =>\r\n                        config.tracking &&\r\n                        GTM_ID.ADVANCED_FILTERS_CALENDAR_CONTENT\r\n                    }\r\n                    getCalendarContentGa4Id={() =>\r\n                        config.tracking &&\r\n                        GA4EVENT.ELEMENTS.ADVANCED_FILTERS_CALENDAR_CONTENT\r\n                    }\r\n                    getGa4Name= {config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                />\r\n                <div class=\"fxs_clearfix\"></div>\r\n                <div class=\"fxs_c_filter_selector\">\r\n                    <button\r\n                        type=\"button\"\r\n                        onClick={loadCustomSettings}\r\n                        data-gtmid={config.tracking && GTM_ID.FILTER_MY_FILTERS}\r\n                        data-ga4event-clk-name={ config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                        data-ga4event-element = { config.tracking && GA4EVENT.ELEMENTS.FILTER_MY_FILTERS}\r\n\r\n                        class={`fxs_btn fxs_btn_table_filter  fxs_half ${\r\n                            filterType === FILTER_TYPE.custom\r\n                                ? \" fxs_active\"\r\n                                : \"\"\r\n                        }`}\r\n                    >\r\n                        <span>\r\n                            <span>{translate(\"MyFilterLabel\")}</span>\r\n                        </span>\r\n                    </button>\r\n                    <button\r\n                        type=\"button\"\r\n                        onClick={loadDefaultSettings}\r\n                        data-gtmid={config.tracking && GTM_ID.FILTER_DEFAULTS}\r\n                        data-ga4event-clk-name={ config.tracking && GA4EVENT.NAMES.FEATURES_CALENDAR}\r\n                        data-ga4event-element = { config.tracking && GA4EVENT.ELEMENTS.FILTER_DEFAULTS}\r\n\r\n                        class={`fxs_btn fxs_btn_table_filter  fxs_half ${\r\n                            filterType === FILTER_TYPE.default\r\n                                ? \" fxs_active\"\r\n                                : \"\"\r\n                        }`}\r\n                    >\r\n                        <span>\r\n                            <span>{translate(\"DefaultsFilterLabel\")}</span>\r\n                        </span>\r\n                    </button>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(\r\n    \"config\",\r\n    actions\r\n)(AdvancedFilterTopMobile);\r\n","const SpeechScoreRanges = [\r\n    { min: 0, max: 3.99, level: 1 },\r\n    { min: 4, max: 6, level: 0 },\r\n    { min: 6.01, max: 10, level: -1 },\r\n];\r\nexport const getSpeechScore = (eventDate) => {\r\n    try {\r\n        if (eventDate == null) {\r\n            console.error(\"EventDate hasn't been provided\");\r\n            return null;\r\n        }\r\n\r\n        let result = {};\r\n\r\n        const score = eventDate.speech?.score;\r\n        const averageScore = eventDate.speech?.averageScore;\r\n        const isVotingMember = eventDate.speech?.isVotingMember;\r\n\r\n        const scoreLevel = getSpeechScoreRange(score);\r\n        const averageScoreLevel = getSpeechScoreRange(averageScore);\r\n\r\n        result.score = score;\r\n        result.scoreLevel = scoreLevel;\r\n        result.averageScore = averageScore;\r\n        result.averageScoreLevel = averageScoreLevel;\r\n        result.isVotingMember = isVotingMember;\r\n\r\n        return result;\r\n    } catch (error) {\r\n        console.error(\"speech-score:\" + error);\r\n        return null;\r\n    }\r\n};\r\n\r\nconst getSpeechScoreRange = (score) => {\r\n    if (score == null || isNaN(score)) return null;\r\n\r\n    const matchingRange = SpeechScoreRanges.find(\r\n        (range) => score >= range.min && score <= range.max\r\n    );\r\n\r\n    return matchingRange ? matchingRange.level : null;\r\n};\r\n","import { Component } from \"preact\";\r\nimport { connectWithTranslations } from \"../../../common/helpers/translationsHelpers\";\r\nimport { persistSettings } from \"../../../calendar-common/helpers/settingsHelper\";\r\nimport IconBellSolid from \"../../../common/components/icons/IconBellSolid\";\r\nimport actions from \"../../actions\";\r\n\r\nclass EventNotifyModal extends Component {\r\n    constructor(props) {\r\n        super(props);\r\n        this.state = {\r\n            modalTransition: false,\r\n        };\r\n        this.setModalTransition = this.setModalTransition.bind(this);\r\n    }\r\n\r\n    setModalTransition() {\r\n        this.setState({\r\n            modalTransition: true,\r\n        });\r\n    }\r\n\r\n    componentDidMount() {\r\n        if (this.props.componentDidMountAction !== undefined)\r\n            this.props.componentDidMountAction();\r\n    }\r\n\r\n    toggle = () => {\r\n        let checked = !this.state.checked;\r\n        this.setState({ checked });\r\n    };\r\n\r\n    submit = () => {\r\n        this.setModalTransition();\r\n        setTimeout(() => {\r\n            this.props.showEventNotifyModal(false);\r\n            persistSettings({\r\n                eventNotifyShown: !this.state.checked,\r\n            });\r\n        }, 1000);\r\n    };\r\n\r\n    render({ translate, showEventNotifyModal }, { checked }) {\r\n        return (\r\n            <div\r\n                class={` fxs_c_notify_modal_backdrop  ${\r\n                    this.state.modalTransition ? \"fxs_slide_top\" : \"\"\r\n                }`}\r\n            >\r\n                <div\r\n                    class={`fxs_c_notify_modal ${\r\n                        this.state.modalTransition ? \"fxs_fade_out\" : \"\"\r\n                    }`}\r\n                >\r\n                    <div class=\"fxs_c_notify_modal_inner\">\r\n                        <h2 className=\"fxs_headline_small\">\r\n                            <IconBellSolid /> {translate(\"Notify_You_Top\")}\r\n                        </h2>\r\n                        <p\r\n                            className=\"fxs_entryPlain_txt\"\r\n                            dangerouslySetInnerHTML={{\r\n                                __html: translate(\"Notify_You_Info\"),\r\n                            }}\r\n                        ></p>\r\n                        <label class=\"fxs_txt_size_small\">\r\n                            <input\r\n                                type=\"checkbox\"\r\n                                checked={checked}\r\n                                onClick={this.toggle}\r\n                            />\r\n                            {translate(\"Dont_Show_Again\")}\r\n                        </label>\r\n                        <button\r\n                            type=\"button\"\r\n                            onClick={() => this.submit()}\r\n                            class=\"fxs_btn fxs_btn_cta fxs_fRight fxs_btn_small\"\r\n                            role=\"button\"\r\n                        >\r\n                            {translate(\"Accept\")}\r\n                        </button>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        );\r\n    }\r\n}\r\n\r\nexport default connectWithTranslations(actions)(EventNotifyModal);\r\n"],"sourceRoot":""}