"use strict"; (function () { 'use strict'; angular.module('headerNavigationModule') .factory('headerNavigationModel', ['permissionModel', 'configurationModel', 'screenConfigurationModel', 'systemAlertService', 'i18nService', 'roles', '$window', 'pwaModel', 'utilityFunctions', 'searchModel', 'studioModel', '$filter', function (permissionModel, configurationModel, screenConfigurationModel, systemAlertService, i18nService, roles, $window, pwaModel, utilityFunctions, searchModel, studioModel, $filter) { var pvSuffix = pwaModel.isPwaEnabledPromise() ? 'PV' : ''; var studioSuffix = "Studio"; var headerNavigationModel = {}, allNavItems = [ { state: 'dashboard', i18nKey: 'dashboard', type: 'link' }, { i18nKey: 'console', type: 'dropdown', elements: [ { name: 'ticketConsole', state: 'ticketConsole' + studioSuffix, i18nKey: 'ticketConsole', icon: 'file_text_o', roles: [roles.ITSM_AGENT_ROLE, roles.ITSM_CHANGE_USER_ROLE, roles.ITSM_PROBLEM_USER_ROLE] }, { name: 'knowledgeConsole', state: 'knowledgeConsole', i18nKey: 'knowledgeConsole', icon: 'lightbulb_o', app: EntityVO.TYPE_KNOWLEDGE, role: roles.ITSM_KNOWLEDGE_USER_ROLE }, { name: "knowledgeConsoleHKM", handler: handleHKMKnowledgeConsoleClick, i18nKey: 'knowledgeConsole', icon: 'lightbulb_o', app: EntityVO.TYPE_KNOWLEDGE, type: 'link', permission: roles.ITSM_KNOWLEDGE_USER_ROLE }, { name: 'assetConsole', state: 'assetConsole' + studioSuffix, i18nKey: 'assetConsole', icon: 'cube_o', app: EntityVO.TYPE_ASSET, role: roles.ITSM_ASSET_USER_ROLE } ] }, { state: 'calendar' + studioSuffix, i18nKey: 'calendar', type: 'link', roles: [roles.ITSM_CHANGE_USER_ROLE, roles.ITSM_RELEASE_USER_ROLE, roles.ITSM_AGENT_ROLE, roles.ITSM_PROBLEM_USER_ROLE, roles.ITSM_ASSET_USER_ROLE] }, { state: 'smartRecorder', i18nKey: 'smartRecorder', type: 'link', role: roles.ITSM_AGENT_ROLE }, { i18nKey: 'create', type: 'dropdown', elements: [ { name: 'createIncident' + pvSuffix, state: 'createIncident' + pvSuffix, i18nKey: 'incident', icon: 'file_text_o', permission: roles.ITSM_AGENT_ROLE }, { name: 'createWorkorder' + pvSuffix, state: 'createWorkorder' + pvSuffix, i18nKey: 'workorder', icon: 'file_wrench_o', app: EntityVO.TYPE_WORKORDER, permission: roles.ITSM_AGENT_ROLE }, { name: 'createKnowledge', state: 'createKnowledge', i18nKey: 'knowledge', icon: 'lightbulb_o', app: EntityVO.TYPE_KNOWLEDGE, permission: roles.ITSM_KNOWLEDGE_USER_ROLE }, { name: "createKnowledgeHKM", handler: handleHKMKnowledgeClick, i18nKey: 'knowledge', icon: 'lightbulb_o', app: EntityVO.TYPE_KNOWLEDGE, type: 'link', permission: roles.ITSM_KNOWLEDGE_USER_ROLE }, { name: (pvSuffix === 'PV') ? 'createChangePV' : 'createChange.selector', state: (pvSuffix === 'PV') ? 'createChangePV' : 'createChange.selector', i18nKey: 'change', icon: 'files_change_o', app: EntityVO.TYPE_CHANGE, permission: roles.ITSM_CHANGE_USER_ROLE }, { name: 'createRelease.selector', state: 'createRelease.selector', i18nKey: 'release', icon: 'app_box_open_o', app: EntityVO.TYPE_RELEASE, permission: roles.ITSM_RELEASE_USER_ROLE }, { name: 'createProblem' + pvSuffix, state: 'createProblem' + pvSuffix, i18nKey: 'problem', icon: 'search_exclamation', app: EntityVO.TYPE_PROBLEM, permission: roles.ITSM_PROBLEM_USER_ROLE }, { name: 'createKnownerror', state: 'createKnownerror', i18nKey: 'knownerror', icon: 'file_exclamation_o', app: EntityVO.TYPE_KNOWNERROR, permission: roles.ITSM_PROBLEM_USER_ROLE }, { name: 'createBroadcast', state: 'createBroadcast', i18nKey: 'broadcast', icon: 'speaker', permission: roles.ITSM_BROADCAST_USER_ROLE }, { name: 'createAsset' + pvSuffix, state: 'createAsset' + pvSuffix, i18nKey: 'asset', icon: 'cube_o', app: EntityVO.TYPE_ASSET, permission: roles.ITSM_ASSET_USER_ROLE } ] }, { i18nKey: 'workspaces', type: 'dropdown', elements: [ { handler: handleProactiveProblemManagementClick, i18nKey: 'proactiveProblemManagement', icon: 'search_exclamation', app: EntityVO.TYPE_ITSM_INSIGHTS, roles: [roles.ITSM_AGENT_ROLE, roles.ITSM_PROBLEM_USER_ROLE] }, { handler: handleRealtimeIncidentCorrelationClick, i18nKey: 'realtimeIncidentCorrelation', icon: 'file_text_o', app: EntityVO.TYPE_ITSM_INSIGHTS, permission: roles.ITSM_AGENT_ROLE } ] }, { state: 'liveChatAgentConsole', i18nKey: 'liveChat', type: 'link', app: EntityVO.TYPE_LIVE_CHAT, roles: [roles.ITSM_AGENT_ROLE, roles.ESCHAT_AGENT_ROLE] }, { state: 'liveChatDashboard', i18nKey: 'liveChat', type: 'link', app: EntityVO.TYPE_LIVE_CHAT, roles: [roles.ITSM_AGENT_ROLE, roles.ESCHAT_ADMIN_ROLE] }, { i18nKey: 'liveChat', type: 'dropdown', app: EntityVO.TYPE_LIVE_CHAT, elements: [ { name: 'liveChatAgentConsole', state: 'liveChatAgentConsole', i18nKey: 'liveChatAgentConsole', icon: 'comments_o', type: 'dropdownItem', app: EntityVO.TYPE_LIVE_CHAT, roles: [roles.ITSM_AGENT_ROLE, roles.ESCHAT_AGENT_ROLE] }, { name: 'liveChatDashboard', state: 'liveChatDashboard', i18nKey: 'liveChatDashboard', icon: 'app_chart_bar', type: 'dropdownItem', app: EntityVO.TYPE_LIVE_CHAT, roles: [roles.ITSM_AGENT_ROLE, roles.ESCHAT_ADMIN_ROLE] } ] }, { handler: handleHelixDashboardClick, i18nKey: 'helixDashboard', app: EntityVO.TYPE_HELIX_DASHBOARD, type: 'link' }, { handler: handleSmartReporterClick, i18nKey: 'reports', app: EntityVO.TYPE_REPORTS, type: 'link' }, { i18nKey: 'configuration', type: 'dropdown', elements: [ { name: 'screenConfiguration', state: 'screenConfiguration', i18nKey: 'screenConfiguration', icon: 'gear', permission: 'admin:screenConfiguration' }, { name: 'knowledgeStyleConfiguration', state: 'knowledgeStyleConfiguration', i18nKey: 'knowledgeTemplateStyles', icon: 'lightbulb_o', app: EntityVO.TYPE_KNOWLEDGE, role: roles.ITSM_ADMIN_ROLE }, { name: 'createAqiQuestions', state: 'createAqiQuestions', i18nKey: 'aqi', icon: 'pencil', app: EntityVO.TYPE_KNOWLEDGE, permission: roles.ITSM_KCS_COACH_ROLE }, { name: 'adminConsoleConfig', state: 'adminConsoleConfig', i18nKey: 'adminConsoleConfig', icon: 'gear', permission: 'admin:screenConfiguration' }, { type: 'link', i18nKey: 'studioConfig', icon: 'gear', handler: handleStudioConfigClick, permission: 'admin:screenConfiguration' } ] }, { state: 'knowledgeTeam', i18nKey: 'knowledge', type: 'link', app: EntityVO.TYPE_KNOWLEDGE, role: roles.ITSM_KCS_COACH_ROLE }, { i18nKey: 'customActions', type: 'dropdown', hideHeader: true, elements: [] } ], navItemCustom = _.find(allNavItems, { i18nKey: 'customActions' }); function handleSmartReporterClick() { screenConfigurationModel.getSmartReporterUrl().then(function (url) { url = decodeURI(url); $window.open(url, '_blank'); }).catch(function (error) { systemAlertService.error({ text: error.data.errorCode ? i18nService.getLocalizedString('error.unknown') : error.data.error }); }); } function handleHelixDashboardClick() { if (configurationModel.helixDashboardUrl && utilityFunctions.isValidHttpUrl(configurationModel.helixDashboardUrl)) { $window.open(configurationModel.helixDashboardUrl, '_blank'); } else { console.error("Provided Helix Dashboard Url is invalid"); } } function handleHKMKnowledgeClick() { if (configurationModel.comaroundEnabled) { searchModel.getHKMUrls().then(function (urls) { if (urls.createUrl) { urls.createUrl = decodeURI(urls.createUrl); $window.open(urls.createUrl, '_blank'); } }); } } function handleHKMKnowledgeConsoleClick() { if (configurationModel.comaroundEnabled) { searchModel.getHKMUrls().then(function (urls) { if (urls.consoleUrl) { urls.consoleUrl = decodeURI(urls.consoleUrl); $window.open(urls.consoleUrl, '_blank'); } }); } } function handleProactiveProblemManagementClick() { openExtUrl('proactiveProblemManagementURL'); } function handleRealtimeIncidentCorrelationClick() { openExtUrl('realtimeIncidentCorrelationURL'); } function handleStudioConfigClick() { if (studioModel.baseUrlForIS && (studioModel.enableISCalendar || studioModel.enableSharedConsole)) { var configRelativeUrl = '/com.bmc.dsm.itsm-applications/settings/AGGADGGJJ03PPAR1P4VKR1P4VKS8TP'; var extendedUrl = '/helix/index.html#'; $window.open(studioModel.baseUrlForIS + extendedUrl + configRelativeUrl, '_blank'); } else { console.error("Innovation Studio is not configured"); } } function openExtUrl(urlName) { screenConfigurationModel.getExternalUrl(urlName).then(function (url) { url = decodeURI(url); $window.open(url, '_blank'); }).catch(function (error) { systemAlertService.error({ text: error.data.errorCode ? i18nService.getLocalizedString('error.unknown') : error.data.error }); }); } function updateNavigationItems(navItemsArray) { var availableNavItems = [], hasPermission; _.forEach(navItemsArray, function (item) { if (!item.elements) { if (item.roles && item.roles.length) { if (item.app === EntityVO.TYPE_LIVE_CHAT) { if (item.type === 'link') { if (permissionModel.checkLiveChatRoles()) { return; } } else if (item.type === 'dropdownItem') { if (!permissionModel.checkLiveChatRoles()) { return; } } hasPermission = _.every(item.roles, function (role) { return permissionModel.hasRole(role); }); } else { hasPermission = _.some(item.roles, function (role) { return permissionModel.hasRole(role); }); } if (!hasPermission) { return; } } if (item.role && !permissionModel.hasRole(item.role)) { return; } if (item.app && !configurationModel.isServerApplicationEnabled(item.app)) { return; } if (item.permission) { if (item.permission === 'galileo-asset-access') { if (!permissionModel.hasAssetCreatePermission()) { return; } } else if (!permissionModel.hasPermission(item.permission)) { return; } } availableNavItems.push(item); } else { item.elements = updateNavigationItems(item.elements); if (item.elements.length) { availableNavItems.push(item); } } }); return availableNavItems; } headerNavigationModel.updateNavigationItems = function () { return updateNavigationItems(allNavItems); }; headerNavigationModel.clearCustomActions = function () { _.remove(navItemCustom.elements, { extended: true }); }; headerNavigationModel.getCustomActions = function (navConfig) { _.forEach(navConfig.actionList, function (urlItem) { if (_.includes(urlItem.supportedPlatforms, 'web')) { var newElement = { extended: true }; newElement.label = urlItem.labels[i18nService.language] || urlItem.labels.default; newElement.url = urlItem.url; newElement.target = urlItem.target; newElement.sequenceNo = urlItem.sequenceNo; navItemCustom.elements.push(newElement); } }); function getPwaResultLaunchURL() { var midtierUrl = localStorage.getItem('midtierUrl'), homeServer = localStorage.getItem('homeServer'), resultListFormAndView = configurationModel.get('pwaResultListFormAndView'); return midtierUrl + '/pwa/#/forms/' + homeServer + resultListFormAndView; } var isPwaEnabled = pwaModel.isPwaEnabled(); // Remove the flag false when goes live if (isPwaEnabled && false) { var mySequence = 1; if (navItemCustom.elements.length > 0) { mySequence = Math.max.apply(null, navItemCustom.elements.map(function (o) { return o.sequenceNo; })) + 1; } navItemCustom.elements.push({ extended: true, label: $filter('i18n')('header.navigation.pvResultList'), sequenceNo: mySequence, target: 'new', url: getPwaResultLaunchURL() }); } if (navItemCustom.elements.length) { if (navConfig.actionOrder === 'alphabetical') { navItemCustom.elements = _.sortBy(navItemCustom.elements, 'label'); } else { navItemCustom.elements = _.sortBy(navItemCustom.elements, 'sequenceNo'); } } }; return headerNavigationModel; } ]); }());