2 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
13 * or implied. See the License for the specific language governing
14 * permissions and limitations under the License.
16 import React from 'react';
17 import ReactDOM from 'react-dom';
18 import {connect} from 'react-redux';
19 import isEqual from 'lodash/isEqual.js';
20 import objectValues from 'lodash/values.js';
22 import i18n from 'nfvo-utils/i18n/i18n.js';
23 import Application from 'sdc-app/Application.jsx';
24 import store from 'sdc-app/AppStore.js';
25 import Configuration from 'sdc-app/config/Configuration.js';
27 import Onboard from './onboard/Onboard.js';
28 import LicenseModel from './licenseModel/LicenseModel.js';
29 import LicenseModelOverview from './licenseModel/overview/LicenseModelOverview.js';
30 import ActivityLog from 'sdc-app/common/activity-log/ActivityLog.js';
31 import {doesHeatDataExist} from './softwareProduct/attachments/SoftwareProductAttachmentsUtils.js';
33 import LicenseAgreementListEditor from './licenseModel/licenseAgreement/LicenseAgreementListEditor.js';
34 import FeatureGroupListEditor from './licenseModel/featureGroups/FeatureGroupListEditor.js';
35 import LicenseKeyGroupsListEditor from './licenseModel/licenseKeyGroups/LicenseKeyGroupsListEditor.js';
36 import EntitlementPoolsListEditor from './licenseModel/entitlementPools/EntitlementPoolsListEditor.js';
37 import SoftwareProduct from './softwareProduct/SoftwareProduct.js';
38 import SoftwareProductLandingPage from './softwareProduct/landingPage/SoftwareProductLandingPage.js';
39 import SoftwareProductDetails from './softwareProduct/details/SoftwareProductDetails.js';
40 import SoftwareProductAttachments from './softwareProduct/attachments/SoftwareProductAttachments.js';
41 import SoftwareProductProcesses from './softwareProduct/processes/SoftwareProductProcesses.js';
42 import SoftwareProductDeployment from './softwareProduct/deployment/SoftwareProductDeployment.js';
43 import SoftwareProductNetworks from './softwareProduct/networks/SoftwareProductNetworks.js';
44 import SoftwareProductDependencies from './softwareProduct/dependencies/SoftwareProductDependencies.js';
46 import SoftwareProductComponentsList from './softwareProduct/components/SoftwareProductComponents.js';
47 import SoftwareProductComponentProcessesList from './softwareProduct/components/processes/SoftwareProductComponentProcessesList.js';
48 import SoftwareProductComponentStorage from './softwareProduct/components/storage/SoftwareProductComponentStorage.js';
49 import SoftwareProductComponentsNetworkList from './softwareProduct/components/network/SoftwareProductComponentsNetworkList.js';
50 import SoftwareProductComponentsGeneral from './softwareProduct/components/general/SoftwareProductComponentsGeneral.js';
51 import SoftwareProductComponentsCompute from './softwareProduct/components/compute/SoftwareProductComponentCompute.js';
52 import SoftwareProductComponentLoadBalancing from './softwareProduct/components/loadBalancing/SoftwareProductComponentLoadBalancing.js';
53 import SoftwareProductComponentsImageList from './softwareProduct/components/images/SoftwareProductComponentsImageList.js';
54 import SoftwareProductComponentsMonitoring from './softwareProduct/components/monitoring/SoftwareProductComponentsMonitoring.js';
56 navigationItems as SoftwareProductNavigationItems,
57 onboardingMethod as onboardingMethodTypes,
58 actionTypes as SoftwareProductActionTypes
59 } from 'sdc-app/onboarding/softwareProduct/SoftwareProductConstants.js';
61 import {statusEnum as VCItemStatus} from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
62 import VersionControllerUtils from 'nfvo-components/panel/versionController/VersionControllerUtils.js';
64 import HeatSetupActionHelper from './softwareProduct/attachments/setup/HeatSetupActionHelper.js';
66 import {actionTypes, enums} from './OnboardingConstants.js';
67 import OnboardingActionHelper from './OnboardingActionHelper.js';
70 class OnboardingView extends React.Component {
72 currentScreen: React.PropTypes.shape({
73 screen: React.PropTypes.oneOf(objectValues(enums.SCREEN)).isRequired,
74 props: React.PropTypes.object.isRequired
79 let element = ReactDOM.findDOMNode(this);
80 element.addEventListener('click', event => {
81 if (event.target.tagName === 'A') {
82 event.preventDefault();
85 ['wheel', 'mousewheel', 'DOMMouseScroll'].forEach(eventType =>
86 element.addEventListener(eventType, event => event.stopPropagation())
91 let {currentScreen} = this.props;
92 let {screen, props} = currentScreen;
95 <div className='dox-ui dox-ui-punch-out dox-ui-punch-out-full-page'>
98 case enums.SCREEN.ONBOARDING_CATALOG:
99 return <Onboard {...props}/>;
101 case enums.SCREEN.LICENSE_AGREEMENTS:
102 case enums.SCREEN.FEATURE_GROUPS:
103 case enums.SCREEN.ENTITLEMENT_POOLS:
104 case enums.SCREEN.LICENSE_KEY_GROUPS:
105 case enums.SCREEN.LICENSE_MODEL_OVERVIEW:
106 case enums.SCREEN.ACTIVITY_LOG:
108 <LicenseModel currentScreen={currentScreen}>
112 case enums.SCREEN.LICENSE_MODEL_OVERVIEW:
113 return <LicenseModelOverview {...props}/>;
114 case enums.SCREEN.LICENSE_AGREEMENTS:
115 return <LicenseAgreementListEditor {...props}/>;
116 case enums.SCREEN.FEATURE_GROUPS:
117 return <FeatureGroupListEditor {...props}/>;
118 case enums.SCREEN.ENTITLEMENT_POOLS:
119 return <EntitlementPoolsListEditor {...props}/>;
120 case enums.SCREEN.LICENSE_KEY_GROUPS:
121 return <LicenseKeyGroupsListEditor {...props}/>;
122 case enums.SCREEN.ACTIVITY_LOG:
123 return <ActivityLog {...props}/>;
130 case enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE:
131 case enums.SCREEN.SOFTWARE_PRODUCT_DETAILS:
132 case enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS:
133 case enums.SCREEN.SOFTWARE_PRODUCT_PROCESSES:
134 case enums.SCREEN.SOFTWARE_PRODUCT_DEPLOYMENT:
135 case enums.SCREEN.SOFTWARE_PRODUCT_NETWORKS:
136 case enums.SCREEN.SOFTWARE_PRODUCT_DEPENDENCIES:
137 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENTS:
138 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_PROCESSES:
139 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_STORAGE:
140 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_NETWORK:
141 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_GENERAL:
142 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_COMPUTE:
143 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING:
144 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_IMAGES:
145 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_MONITORING:
146 case enums.SCREEN.SOFTWARE_PRODUCT_ACTIVITY_LOG:
148 <SoftwareProduct currentScreen={currentScreen}>
152 case enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE:
153 return <SoftwareProductLandingPage {...props}/>;
154 case enums.SCREEN.SOFTWARE_PRODUCT_DETAILS:
155 return <SoftwareProductDetails {...props}/>;
156 case enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS:
157 return <SoftwareProductAttachments className='no-padding-content-area' {...props} />;
158 case enums.SCREEN.SOFTWARE_PRODUCT_PROCESSES:
159 return <SoftwareProductProcesses {...props}/>;
160 case enums.SCREEN.SOFTWARE_PRODUCT_DEPLOYMENT:
161 return <SoftwareProductDeployment {...props}/>;
162 case enums.SCREEN.SOFTWARE_PRODUCT_NETWORKS:
163 return <SoftwareProductNetworks {...props}/>;
164 case enums.SCREEN.SOFTWARE_PRODUCT_DEPENDENCIES:
165 return <SoftwareProductDependencies {...props} />;
166 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENTS:
167 return <SoftwareProductComponentsList {...props}/>;
168 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_PROCESSES:
169 return <SoftwareProductComponentProcessesList {...props}/>;
170 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_STORAGE:
171 return <SoftwareProductComponentStorage {...props}/>;
172 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_NETWORK:
173 return <SoftwareProductComponentsNetworkList {...props}/>;
174 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_GENERAL:
175 return <SoftwareProductComponentsGeneral{...props}/>;
176 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_COMPUTE:
177 return <SoftwareProductComponentsCompute {...props}/>;
178 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING:
179 return <SoftwareProductComponentLoadBalancing{...props}/>;
180 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_IMAGES:
181 return <SoftwareProductComponentsImageList{...props}/>;
182 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_MONITORING:
183 return <SoftwareProductComponentsMonitoring {...props}/>;
184 case enums.SCREEN.SOFTWARE_PRODUCT_ACTIVITY_LOG:
185 return <ActivityLog {...props}/>;
197 const mapStateToProps = ({currentScreen}) => ({currentScreen});
198 let Onboarding = connect(mapStateToProps, null)(OnboardingView);
200 export default class OnboardingPunchOut {
202 render({options: {data, apiRoot, apiHeaders}, onEvent}, element) {
203 if (!this.unsubscribeFromStore) {
204 this.unsubscribeFromStore = store.subscribe(() => this.handleStoreChange());
207 if (!this.isConfigSet) {
208 Configuration.setATTApiRoot(apiRoot);
209 Configuration.setATTApiHeaders(apiHeaders);
210 this.isConfigSet = true;
213 this.onEvent = (...args) => onEvent(...args);
214 this.handleData(data);
216 if (!this.rendered) {
223 this.rendered = true;
228 ReactDOM.unmountComponentAtNode(element);
229 this.rendered = false;
230 this.unsubscribeFromStore();
231 this.unsubscribeFromStore = null;
235 let {breadcrumbs: {selectedKeys = []} = {}} = data;
236 let dispatch = action => store.dispatch(action);
237 let {currentScreen, softwareProductList, softwareProduct: {softwareProductEditor: {data: vspData = {}},
238 softwareProductComponents = {}, softwareProductQuestionnaire = {}},
239 licenseModelList, licenseModel: {licenseModelEditor: {data: {id: currentLicenseModelId, version: currentLicenseModelVersion} = {}}}} = store.getState();
240 let {id: currentSoftwareProductId, version: currentSoftwareProductVersion} = vspData;
241 let {componentEditor: {data: componentData = {}, qdata: componentQData = {}}} = softwareProductComponents;
242 if (this.programmaticBreadcrumbsUpdate) {
243 this.prevSelectedKeys = selectedKeys;
244 this.programmaticBreadcrumbsUpdate = false;
247 if (!isEqual(selectedKeys, this.prevSelectedKeys)) {
248 this.breadcrumbsPrefixSelected = isEqual(selectedKeys, this.prevSelectedKeys && this.prevSelectedKeys.slice(0, selectedKeys.length));
250 const [, screenType, prevVspId, , prevComponentId] = this.prevSelectedKeys || [];
251 let preNavigate = Promise.resolve();
252 if(screenType === enums.BREADCRUMS.SOFTWARE_PRODUCT && vspData.status === VCItemStatus.CHECK_OUT_STATUS && VersionControllerUtils.isCheckedOutByCurrentUser(vspData)) {
253 let dataToSave = prevVspId ? prevComponentId ? {componentData, qdata: componentQData} : {softwareProduct: vspData, qdata: softwareProductQuestionnaire.qdata} : {};
254 preNavigate = OnboardingActionHelper.autoSaveBeforeNavigate(dispatch, {
255 softwareProductId: prevVspId,
256 version: currentSoftwareProductVersion,
257 vspComponentId: prevComponentId,
262 let {currentScreen: {props: {softwareProductId}}, softwareProduct: {softwareProductAttachments: {heatSetup, heatSetupCache}}} = store.getState();
263 let heatSetupPopupPromise = currentScreen.screen === enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS ?
264 HeatSetupActionHelper.heatSetupLeaveConfirmation(dispatch, {softwareProductId, heatSetup, heatSetupCache}) :
266 Promise.all([preNavigate, heatSetupPopupPromise]).then(() => {
267 this.prevSelectedKeys = selectedKeys;
268 if (selectedKeys.length === 0) {
269 OnboardingActionHelper.navigateToOnboardingCatalog(dispatch);
270 } else if (selectedKeys.length === 1 || selectedKeys[1] === enums.BREADCRUMS.LICENSE_MODEL) {
271 let [licenseModelId, , licenseModelScreen] = selectedKeys;
272 if (!licenseModelScreen) {
273 licenseModelScreen = enums.BREADCRUMS.LICENSE_MODEL_OVERVIEW;
275 if (currentLicenseModelId !== licenseModelId) {
276 currentLicenseModelVersion = licenseModelList.find(lm => lm.id === licenseModelId).version;
278 switch (licenseModelScreen) {
279 case enums.BREADCRUMS.LICENSE_MODEL_OVERVIEW:
280 OnboardingActionHelper.navigateToLicenseModelOverview(dispatch, {licenseModelId, version: currentLicenseModelVersion});
282 case enums.BREADCRUMS.LICENSE_AGREEMENTS:
283 OnboardingActionHelper.navigateToLicenseAgreements(dispatch, {licenseModelId, version: currentLicenseModelVersion});
285 case enums.BREADCRUMS.FEATURE_GROUPS:
286 OnboardingActionHelper.navigateToFeatureGroups(dispatch, {licenseModelId, version: currentLicenseModelVersion});
288 case enums.BREADCRUMS.ENTITLEMENT_POOLS:
289 OnboardingActionHelper.navigateToEntitlementPools(dispatch, {licenseModelId, version: currentLicenseModelVersion});
291 case enums.BREADCRUMS.LICENSE_KEY_GROUPS:
292 OnboardingActionHelper.navigateToLicenseKeyGroups(dispatch, {licenseModelId, version: currentLicenseModelVersion});
294 case enums.BREADCRUMS.ACTIVITY_LOG:
295 OnboardingActionHelper.navigateToLicenseModelActivityLog(dispatch, {licenseModelId, version: currentLicenseModelVersion});
298 } else if (selectedKeys.length <= 4 && selectedKeys[1] === enums.BREADCRUMS.SOFTWARE_PRODUCT) {
299 let [licenseModelId, , softwareProductId, softwareProductScreen] = selectedKeys;
300 let softwareProduct = softwareProductId ?
301 softwareProductList.find(({id}) => id === softwareProductId) :
302 softwareProductList.find(({vendorId}) => vendorId === licenseModelId);
303 if (!softwareProductId) {
304 softwareProductId = softwareProduct.id;
306 if (currentSoftwareProductId !== softwareProductId) {
307 currentSoftwareProductVersion = softwareProduct.version;
309 switch (softwareProductScreen) {
310 case enums.BREADCRUMS.SOFTWARE_PRODUCT_LANDING_PAGE:
311 OnboardingActionHelper.navigateToSoftwareProductLandingPage(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
313 case enums.BREADCRUMS.SOFTWARE_PRODUCT_DETAILS:
314 OnboardingActionHelper.navigateToSoftwareProductDetails(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
316 case enums.BREADCRUMS.SOFTWARE_PRODUCT_ATTACHMENTS:
317 OnboardingActionHelper.navigateToSoftwareProductAttachments(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
319 case enums.BREADCRUMS.SOFTWARE_PRODUCT_PROCESSES:
320 OnboardingActionHelper.navigateToSoftwareProductProcesses(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
322 case enums.BREADCRUMS.SOFTWARE_PRODUCT_DEPLOYMENT:
323 OnboardingActionHelper.navigateToSoftwareProductDeployment(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
325 case enums.BREADCRUMS.SOFTWARE_PRODUCT_NETWORKS:
326 OnboardingActionHelper.navigateToSoftwareProductNetworks(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
328 case enums.BREADCRUMS.SOFTWARE_PRODUCT_DEPENDENCIES:
329 OnboardingActionHelper.navigateToSoftwareProductDependencies(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
331 case enums.BREADCRUMS.SOFTWARE_PRODUCT_ACTIVITY_LOG:
332 OnboardingActionHelper.navigateToSoftwareProductActivityLog(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
334 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENTS:
335 OnboardingActionHelper.navigateToSoftwareProductComponents(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
337 type: SoftwareProductActionTypes.TOGGLE_NAVIGATION_ITEM,
339 [SoftwareProductNavigationItems.COMPONENTS]: true
344 OnboardingActionHelper.navigateToSoftwareProductLandingPage(dispatch, {softwareProductId, version: currentSoftwareProductVersion});
347 } else if (selectedKeys.length === 5 && selectedKeys[1] === enums.BREADCRUMS.SOFTWARE_PRODUCT && selectedKeys[3] === enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENTS) {
348 let [licenseModelId, , softwareProductId, , componentId] = selectedKeys;
349 let softwareProduct = softwareProductId ?
350 softwareProductList.find(({id}) => id === softwareProductId) :
351 softwareProductList.find(({vendorId}) => vendorId === licenseModelId);
352 if (!softwareProductId) {
353 softwareProductId = softwareProduct.id;
355 if (currentSoftwareProductId !== softwareProductId) {
356 currentSoftwareProductVersion = softwareProduct.version;
358 OnboardingActionHelper.navigateToSoftwareProductComponentGeneralAndUpdateLeftPanel(dispatch, {softwareProductId, componentId, version: currentSoftwareProductVersion});
359 } else if (selectedKeys.length === 6 && selectedKeys[1] === enums.BREADCRUMS.SOFTWARE_PRODUCT && selectedKeys[3] === enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENTS) {
360 let [licenseModelId, , softwareProductId, , componentId, componentScreen] = selectedKeys;
361 let softwareProduct = softwareProductId ?
362 softwareProductList.find(({id}) => id === softwareProductId) :
363 softwareProductList.find(({vendorId}) => vendorId === licenseModelId);
364 if (!softwareProductId) {
365 softwareProductId = softwareProduct.id;
367 if (currentSoftwareProductId !== softwareProductId) {
368 currentSoftwareProductVersion = softwareProduct.version;
370 switch (componentScreen) {
371 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_GENERAL:
372 OnboardingActionHelper.navigateToSoftwareProductComponentGeneral(dispatch, {softwareProductId, componentId, version: currentSoftwareProductVersion});
374 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_COMPUTE:
375 OnboardingActionHelper.navigateToComponentCompute(dispatch, {softwareProductId, componentId, version: currentSoftwareProductVersion});
377 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING:
378 OnboardingActionHelper.navigateToComponentLoadBalancing(dispatch, {softwareProductId, componentId, version: currentSoftwareProductVersion});
380 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_NETWORK:
381 OnboardingActionHelper.navigateToComponentNetwork(dispatch, {softwareProductId, componentId, version: currentSoftwareProductVersion});
383 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_STORAGE:
384 OnboardingActionHelper.navigateToComponentStorage(dispatch, {softwareProductId, componentId, version: currentSoftwareProductVersion});
386 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_PROCESSES:
387 OnboardingActionHelper.navigateToSoftwareProductComponentProcesses(dispatch, {softwareProductId, componentId, version: currentSoftwareProductVersion});
389 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_MONITORING:
390 OnboardingActionHelper.navigateToSoftwareProductComponentMonitoring(dispatch, {softwareProductId, componentId, version: currentSoftwareProductVersion});
392 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_IMAGES:
393 OnboardingActionHelper.navigateToComponentImages(dispatch, {
396 version: currentSoftwareProductVersion
401 console.error('Unknown breadcrumbs path: ', selectedKeys);
405 type: actionTypes.SET_CURRENT_SCREEN,
408 forceBreadCrumbsUpdate: true
415 handleStoreChange() {
416 let {currentScreen, licenseModelList, softwareProductList,
417 softwareProduct: {softwareProductEditor: {data = {onboardingMethod: ''}},
418 softwareProductComponents: {componentsList, images: {imagesNavigationList}}, softwareProductAttachments: {heatSetup}}} = store.getState();
419 let {onboardingMethod} = data;
420 let breadcrumbsData = {onboardingMethod, currentScreen, licenseModelList, softwareProductList, componentsList, heatSetup, imagesNavigationList};
421 if (currentScreen.forceBreadCrumbsUpdate || !isEqual(breadcrumbsData, this.prevBreadcrumbsData) || this.breadcrumbsPrefixSelected) {
422 this.prevBreadcrumbsData = breadcrumbsData;
423 this.breadcrumbsPrefixSelected = false;
424 this.programmaticBreadcrumbsUpdate = true;
425 let breadcrumbs = this.buildBreadcrumbs(breadcrumbsData);
426 this.onEvent('breadcrumbsupdated', breadcrumbs);
428 type: actionTypes.SET_CURRENT_SCREEN,
431 forceBreadCrumbsUpdate: false
437 buildBreadcrumbs({currentScreen: {screen, props}, onboardingMethod, licenseModelList, softwareProductList, componentsList, heatSetup, imagesNavigationList}) {
438 let screenToBreadcrumb;
440 case enums.SCREEN.ONBOARDING_CATALOG:
443 case enums.SCREEN.LICENSE_AGREEMENTS:
444 case enums.SCREEN.FEATURE_GROUPS:
445 case enums.SCREEN.ENTITLEMENT_POOLS:
446 case enums.SCREEN.LICENSE_KEY_GROUPS:
447 case enums.SCREEN.LICENSE_MODEL_OVERVIEW:
448 case enums.SCREEN.ACTIVITY_LOG:
449 screenToBreadcrumb = {
450 [enums.SCREEN.LICENSE_AGREEMENTS]: enums.BREADCRUMS.LICENSE_AGREEMENTS,
451 [enums.SCREEN.FEATURE_GROUPS]: enums.BREADCRUMS.FEATURE_GROUPS,
452 [enums.SCREEN.ENTITLEMENT_POOLS]: enums.BREADCRUMS.ENTITLEMENT_POOLS,
453 [enums.SCREEN.LICENSE_KEY_GROUPS]: enums.BREADCRUMS.LICENSE_KEY_GROUPS,
454 [enums.SCREEN.LICENSE_MODEL_OVERVIEW]: enums.BREADCRUMS.LICENSE_MODEL_OVERVIEW,
455 [enums.SCREEN.ACTIVITY_LOG]: enums.BREADCRUMS.ACTIVITY_LOG
459 selectedKey: props.licenseModelId,
460 menuItems: licenseModelList.map(({id, vendorName}) => ({
462 displayText: vendorName
466 selectedKey: enums.BREADCRUMS.LICENSE_MODEL,
468 key: enums.BREADCRUMS.LICENSE_MODEL,
469 displayText: i18n('License Model')
471 ...(softwareProductList.findIndex(({vendorId}) => vendorId === props.licenseModelId) === -1 ? [] : [{
472 key: enums.BREADCRUMS.SOFTWARE_PRODUCT,
473 displayText: i18n('Software Products')
476 selectedKey: screenToBreadcrumb[screen],
478 key: enums.BREADCRUMS.LICENSE_MODEL_OVERVIEW,
479 displayText: i18n('Overview')
481 key: enums.BREADCRUMS.LICENSE_AGREEMENTS,
482 displayText: i18n('License Agreements')
484 key: enums.BREADCRUMS.FEATURE_GROUPS,
485 displayText: i18n('Feature Groups')
487 key: enums.BREADCRUMS.ENTITLEMENT_POOLS,
488 displayText: i18n('Entitlement Pools')
490 key: enums.BREADCRUMS.LICENSE_KEY_GROUPS,
491 displayText: i18n('License Key Groups')
493 key: enums.BREADCRUMS.ACTIVITY_LOG,
494 displayText: i18n('Activity Log')
499 case enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE:
500 case enums.SCREEN.SOFTWARE_PRODUCT_DETAILS:
501 case enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS:
502 case enums.SCREEN.SOFTWARE_PRODUCT_PROCESSES:
503 case enums.SCREEN.SOFTWARE_PRODUCT_DEPLOYMENT:
504 case enums.SCREEN.SOFTWARE_PRODUCT_NETWORKS:
505 case enums.SCREEN.SOFTWARE_PRODUCT_DEPENDENCIES:
506 case enums.SCREEN.SOFTWARE_PRODUCT_ACTIVITY_LOG:
507 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENTS:
509 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_PROCESSES:
510 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_COMPUTE:
511 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_STORAGE:
512 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_NETWORK:
513 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_GENERAL:
514 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING:
515 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_IMAGES:
516 case enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_MONITORING:
517 screenToBreadcrumb = {
518 [enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE]: enums.BREADCRUMS.SOFTWARE_PRODUCT_LANDING_PAGE,
519 [enums.SCREEN.SOFTWARE_PRODUCT_DETAILS]: enums.BREADCRUMS.SOFTWARE_PRODUCT_DETAILS,
520 [enums.SCREEN.SOFTWARE_PRODUCT_ATTACHMENTS]: enums.BREADCRUMS.SOFTWARE_PRODUCT_ATTACHMENTS,
521 [enums.SCREEN.SOFTWARE_PRODUCT_PROCESSES]: enums.BREADCRUMS.SOFTWARE_PRODUCT_PROCESSES,
522 [enums.SCREEN.SOFTWARE_PRODUCT_DEPLOYMENT]: enums.BREADCRUMS.SOFTWARE_PRODUCT_DEPLOYMENT,
523 [enums.SCREEN.SOFTWARE_PRODUCT_NETWORKS]: enums.BREADCRUMS.SOFTWARE_PRODUCT_NETWORKS,
524 [enums.SCREEN.SOFTWARE_PRODUCT_DEPENDENCIES]: enums.BREADCRUMS.SOFTWARE_PRODUCT_DEPENDENCIES,
525 [enums.SCREEN.SOFTWARE_PRODUCT_COMPONENTS]: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENTS,
526 [enums.SCREEN.SOFTWARE_PRODUCT_ACTIVITY_LOG]: enums.BREADCRUMS.SOFTWARE_PRODUCT_ACTIVITY_LOG
528 let componentScreenToBreadcrumb = {
529 [enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_PROCESSES]: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_PROCESSES,
530 [enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_COMPUTE]: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_COMPUTE,
531 [enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_STORAGE]: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_STORAGE,
532 [enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_NETWORK]: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_NETWORK,
533 [enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_GENERAL]: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_GENERAL,
534 [enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING]: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING,
535 [enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_IMAGES]: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_IMAGES,
536 [enums.SCREEN.SOFTWARE_PRODUCT_COMPONENT_MONITORING]: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_MONITORING
538 let licenseModelId = softwareProductList.find(({id}) => id === props.softwareProductId).vendorId;
539 let returnedBreadcrumb = [
541 selectedKey: licenseModelId,
542 menuItems: licenseModelList.map(({id, vendorName}) => ({
544 displayText: vendorName
548 selectedKey: enums.BREADCRUMS.SOFTWARE_PRODUCT,
550 key: enums.BREADCRUMS.LICENSE_MODEL,
551 displayText: i18n('License Model')
553 key: enums.BREADCRUMS.SOFTWARE_PRODUCT,
554 displayText: i18n('Software Products')
558 selectedKey: props.softwareProductId,
559 menuItems: softwareProductList
560 .filter(({vendorId}) => vendorId === licenseModelId)
561 .map(({id, name}) => ({
566 ...(/*screen === enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE ? [] :*/ [{
567 selectedKey: screenToBreadcrumb[screen] || enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENTS,
569 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_LANDING_PAGE,
570 displayText: i18n('Overview')
572 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_DETAILS,
573 displayText: i18n('General')
575 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_DEPLOYMENT,
576 displayText: i18n('Deployment Flavors')
578 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_PROCESSES,
579 displayText: i18n('Process Details')
581 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_NETWORKS,
582 displayText: i18n('Networks')
584 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_DEPENDENCIES,
585 displayText: i18n('Components Dependencies')
587 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_ATTACHMENTS,
588 displayText: i18n('Attachments')
590 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_ACTIVITY_LOG,
591 displayText: i18n('Activity Log')
593 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENTS,
594 displayText: i18n('Components')
596 let isHeatData = doesHeatDataExist(heatSetup);
597 let isManualMode = onboardingMethod === onboardingMethodTypes.MANUAL;
599 case enums.BREADCRUMS.SOFTWARE_PRODUCT_ATTACHMENTS:
601 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENTS:
602 return (componentsList.length > 0);
603 case enums.BREADCRUMS.SOFTWARE_PRODUCT_DEPLOYMENT:
605 case enums.BREADCRUMS.SOFTWARE_PRODUCT_DEPENDENCIES:
606 return (componentsList.length > 1);
613 if(props.componentId) {
614 returnedBreadcrumb = [
615 ...returnedBreadcrumb, {
616 selectedKey: props.componentId,
617 menuItems: componentsList
618 .map(({id, displayName}) => ({
620 displayText: displayName
624 selectedKey: componentScreenToBreadcrumb[screen],
626 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_GENERAL,
627 displayText: i18n('General')
629 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_COMPUTE,
630 displayText: i18n('Compute')
632 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_LOAD_BALANCING,
633 displayText: i18n('High Availability & Load Balancing')
635 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_NETWORK,
636 displayText: i18n('Networks')
638 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_STORAGE,
639 displayText: i18n('Storage')
641 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_IMAGES,
642 displayText: i18n('Images')
644 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_PROCESSES,
645 displayText: i18n('Process Details')
647 key: enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_MONITORING,
648 displayText: i18n('Monitoring')
651 case enums.BREADCRUMS.SOFTWARE_PRODUCT_COMPONENT_IMAGES:
652 return (onboardingMethod === onboardingMethodTypes.MANUAL ||
653 (imagesNavigationList && imagesNavigationList[props.componentId] === true));
661 return returnedBreadcrumb;