Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/components/bitrix/report.analytics.base/templates/.default/
Upload File :
Current File : /var/www/homesaver/www/bitrix/components/bitrix/report.analytics.base/templates/.default/script.js

(function ()
{
	BX.namespace("BX.Report.Analytics");

	BX.Report.Analytics.Page = function (options)
	{
		this.scope = options.scope;
		this.menuScope = options.menuScope;
		// this.menuItemsContainers = this.menuScope.querySelectorAll('[data-role="report-analytics-menu-items-container"]');
		this.changeBoardButtons = this.menuScope.querySelectorAll('[data-role="report-analytics-menu-item"]');
		this.contentContainer = this.scope.querySelector('.report-analytics-content');
		this.currentItem = this.menuScope.querySelector('.report-analytics-sidebar-submenu-item.report-analytics-sidebar-submenu-item-active');
		this.currentSelectedContainer = this.menuScope.querySelector('.report-analytics-sidebar-menu-item.report-analytics-sidebar-menu-item-active');
		this.pageTitle = document.querySelector('.ui-side-panel-wrap-title-name');
		this.pageTitleWrap = document.querySelector('.ui-side-panel-wrap-title-wrap');
		this.pageControlsContainer = document.querySelector('.pagetitle-container.pagetitle-align-right-container');

		this.defaultBoardKey = options.defaultBoardKey;
		this.defaultBoardTitle = options.defaultBoardTitle;

		this.currentPageTitle = top.document.title;
		this.init();
	};

	BX.Report.Analytics.Page.prototype = {
		init: function ()
		{
			BX.addCustomEvent("SidePanel.Slider:onClose", function() {
				this.sliderCloseHandler();
			}.bind(this));
			// this.menuItemsContainers.forEach(function(button) {
			// 	BX.bind(button, 'click', this.handleContainerClick.bind(this));
			// }.bind(this));
			top.document.title = this.defaultBoardTitle;
			this.changeBoardButtons.forEach(function(button) {
				BX.bind(button, 'click', this.handleItemClick.bind(this));
			}.bind(this));
			this.loader = new BX.Loader({size: 80});
			top.onpopstate = this.handlerOnPopState.bind(this);
			this.openBoardWithKey(this.defaultBoardKey);

			const activeButton = Array.from(this.changeBoardButtons).find(button => {
				return button.dataset.reportBoardKey === this.defaultBoardKey;
			});

			this.tryOpenExternalUrl(activeButton);
		},

		tryOpenExternalUrl(button)
		{
			if (BX.Type.isElementNode(button) && button.dataset.isExternal === 'Y')
			{
				if (button.dataset.isSliderSupport === 'N')
				{
					this.openExternalUrlInNewTab(button.dataset.externalUrl);
				}
				else
				{
					this.openExternalUrl(button.dataset.externalUrl, button.dataset.sliderLoader);
				}

				return true;
			}

			return false;
		},

		handleItemClick: function(event)
		{
			event.preventDefault();
			var button = event.currentTarget;

			this.activateButton(event);
			if (!this.tryOpenExternalUrl(button))
			{
				this.openBoardWithKey(button.dataset.reportBoardKey, button.href);
			}
		},
		openExternalUrl: function(url, loader = 'report:analytics')
		{
			BX.SidePanel.Instance.open(url, {
				cacheable: false,
				loader: loader,
			});
		},
		openExternalUrlInNewTab: function(url)
		{
			window.open(url, '_blank');
		},
		openBoardWithKey: function (boardKey, urlForHistory)
		{
			urlForHistory = urlForHistory || "";
			this.cleanPageContent();
			this.showLoader();
			BX.Report.VC.Core.abortAllRunningRequests();

			BX.Report.VC.Core.ajaxPost('analytics.getBoardComponentByKey', {
				data: {
					IFRAME: 'Y',
					boardKey: boardKey
				},
				analyticsLabel: {
					boardKey: boardKey
				},
				onFullSuccess: function(result)
				{
					this.hideLoader();
					if(urlForHistory != "")
					{
						top.history.pushState(null, result.additionalParams.pageTitle, urlForHistory);
						top.history.replaceState({
							reportBoardKey: boardKey,
							href: urlForHistory
						}, result.additionalParams.pageTitle, urlForHistory);
					}

					this.changePageTitle(result.additionalParams.pageTitle);
					this.changePageControls(result.additionalParams.pageControlsParams);

					BX.html(this.contentContainer, result.data);

				}.bind(this)
			})
		},
		cleanPageContent: function ()
		{
			this.pageTitle.innerText = '';
			this.pageControlsContainer.innerText = '';
			BX.cleanNode(this.contentContainer);
			if (BX.Report.Dashboard)
			{
				BX.Report.Dashboard.BoardRepository.destroyBoards();
			}
			if (BX.VisualConstructor && BX.VisualConstructor.BoardRepository)
			{
				BX.VisualConstructor.BoardRepository.destroyBoards();
			}
		},
		changePageControls: function(controlsContent)
		{
			var config = {};
			config.onFullSuccess = function(result) {
				BX.html(this.pageControlsContainer, result.html);
			}.bind(this);
			BX.Report.VC.Core._successHandler(controlsContent, config);
		},

		changePageTitle: function(title)
		{
			this.pageTitle.innerText = title;
			top.document.title = title;
		},
		showLoader: function()
		{
			this.pageTitleWrap.style.display = 'none';

			var preview = BX.create('img', {
				attrs: {
					'src': '/bitrix/images/report/visualconstructor/preview/view-without-menu.svg',
					height: '1200px',
					width: '100%'
				}
			});
			this.contentContainer.appendChild(preview);
		},
		hideLoader: function()
		{
			this.pageTitleWrap.style.display = 'block';
			this.loader.hide();
		},
		activateButton: function(event)
		{
			var item = event.currentTarget;

			if (!this.currentItem)
			{
				this.currentItem = item;
			}

			this.currentItem.classList.remove("report-analytics-sidebar-submenu-item-active");
			this.currentItem = item;
			this.currentItem.classList.add("report-analytics-sidebar-submenu-item-active");
		},
		handlerOnPopState: function(event) {
			var boardKey = this.defaultBoardKey;
			if (event.state.reportBoardKey !== undefined)
			{
				boardKey = event.state.reportBoardKey;
			}

			this.cleanPageContent();
			this.showLoader();
			BX.Report.VC.Core.ajaxPost('analytics.getBoardComponentByKey', {
				data: {
					IFRAME: 'Y',
					boardKey: boardKey
				},
				analyticsLabel: {
					boardKey: boardKey
				},
				onFullSuccess: function(result)
				{
					this.hideLoader();
					this.cleanPageContent();
					this.changePageTitle(result.additionalParams.pageTitle);
					this.changePageControls(result.additionalParams.pageControlsParams);
					BX.html(this.contentContainer, result.data);
				}.bind(this)
			});
		},
		sliderCloseHandler: function()
		{
			top.document.title = this.currentPageTitle;
		}

	}
})();