summaryrefslogtreecommitdiffstats
path: root/openecomp-ui/src
diff options
context:
space:
mode:
authorsvishnev <shlomo-stanisla.vishnevetskiy@amdocs.com>2018-05-24 13:20:51 +0300
committerEinav Keidar <einavw@amdocs.com>2018-05-24 12:01:09 +0000
commit7c727c1a2bc672f20e87260ad3dc9c33ca31bbd4 (patch)
tree5d14fd827b96058e8478a023fa567dbefe02531f /openecomp-ui/src
parentbc65a048ed742cfa3457b8159a5c5c316341d594 (diff)
Healing process flow integration
Issue-ID: SDC-1360 Change-Id: I4d786b53b4357901d10e041c31145b7b1b065725 Signed-off-by: svishnev <shlomo-stanisla.vishnevetskiy@amdocs.com>
Diffstat (limited to 'openecomp-ui/src')
-rw-r--r--openecomp-ui/src/nfvo-components/notification/Notifications.js68
-rw-r--r--openecomp-ui/src/nfvo-components/notification/NotificationsConstants.js66
-rw-r--r--openecomp-ui/src/nfvo-components/notification/NotificationsMiddleware.js33
-rw-r--r--openecomp-ui/src/nfvo-components/notification/NotificationsReducer.js28
-rw-r--r--openecomp-ui/src/nfvo-utils/i18n/en.json3
-rw-r--r--openecomp-ui/src/sdc-app/AppStore.js5
-rw-r--r--openecomp-ui/src/sdc-app/Application.jsx4
-rw-r--r--openecomp-ui/src/sdc-app/Reducers.js7
-rw-r--r--openecomp-ui/src/sdc-app/onboarding/OnboardingActionHelper.js91
-rw-r--r--openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js11
-rw-r--r--openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js6
-rw-r--r--openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js4
-rw-r--r--openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx8
13 files changed, 296 insertions, 38 deletions
diff --git a/openecomp-ui/src/nfvo-components/notification/Notifications.js b/openecomp-ui/src/nfvo-components/notification/Notifications.js
new file mode 100644
index 0000000000..046412a68d
--- /dev/null
+++ b/openecomp-ui/src/nfvo-components/notification/Notifications.js
@@ -0,0 +1,68 @@
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import React from 'react';
+import { Portal, Notification } from 'sdc-ui/lib/react/';
+import { connect } from 'react-redux';
+import { removeNotification } from './NotificationsConstants.js';
+import { CSSTransition, TransitionGroup } from 'react-transition-group';
+
+export const mapStateToProps = ({ popupNotifications = [] }) => {
+ return {
+ notifications: popupNotifications
+ };
+};
+
+const mapActionToProps = dispatch => {
+ return {
+ onClick: item => {
+ dispatch(removeNotification(item));
+ }
+ };
+};
+
+class Notifications extends React.Component {
+ render() {
+ const { notifications, onClick } = this.props;
+
+ return (
+ <Portal>
+ <div className="onboarding-notifications-container position-top-right">
+ <TransitionGroup>
+ {notifications.map(item => (
+ <CSSTransition
+ in={true}
+ timeout={500}
+ unmountOnExit
+ classNames="react-transition"
+ key={`notification-transition-${item.id}`}>
+ <Notification
+ key={item.id}
+ type={item.type}
+ title={item.title}
+ message={item.message}
+ onClick={() => onClick(item)}
+ />
+ </CSSTransition>
+ ))}
+ </TransitionGroup>
+ </div>
+ </Portal>
+ );
+ }
+}
+
+export default connect(mapStateToProps, mapActionToProps, null)(Notifications);
diff --git a/openecomp-ui/src/nfvo-components/notification/NotificationsConstants.js b/openecomp-ui/src/nfvo-components/notification/NotificationsConstants.js
new file mode 100644
index 0000000000..329c557cb0
--- /dev/null
+++ b/openecomp-ui/src/nfvo-components/notification/NotificationsConstants.js
@@ -0,0 +1,66 @@
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import UUID from 'uuid-js';
+
+export const actionTypes = {
+ ADD_NOTIFICATION: 'ADD_NOTIFICATION',
+ REMOVE_NOTIFICATION: 'REMOVE_NOTIFICATION'
+};
+
+export const notificationActions = {
+ showNotification: item => ({
+ type: actionTypes.ADD_NOTIFICATION,
+ payload: {
+ ...item,
+ id: UUID.create().toString()
+ }
+ }),
+
+ showSuccess: ({ title, message, timeout }) =>
+ notificationActions.showNotification({
+ title,
+ message,
+ timeout,
+ type: 'success'
+ }),
+ showInfo: ({ title, message, timeout }) =>
+ notificationActions.showNotification({
+ title,
+ message,
+ timeout,
+ type: 'info'
+ }),
+ showWarning: ({ title, message, timeout }) =>
+ notificationActions.showNotification({
+ title,
+ message,
+ timeout,
+ type: 'warning'
+ }),
+ showError: ({ title, message, timeout }) =>
+ notificationActions.showNotification({
+ title,
+ message,
+ timeout,
+ type: 'error'
+ }),
+ removeNotification: item => ({
+ type: actionTypes.REMOVE_NOTIFICATION,
+ payload: item
+ })
+};
+
+export const notificationTimeout = 4000;
diff --git a/openecomp-ui/src/nfvo-components/notification/NotificationsMiddleware.js b/openecomp-ui/src/nfvo-components/notification/NotificationsMiddleware.js
new file mode 100644
index 0000000000..f32f20bc50
--- /dev/null
+++ b/openecomp-ui/src/nfvo-components/notification/NotificationsMiddleware.js
@@ -0,0 +1,33 @@
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import {
+ actionTypes,
+ notificationActions,
+ notificationTimeout
+} from './NotificationsConstants.js';
+
+const notifications = store => next => action => {
+ if (action.type === actionTypes.ADD_NOTIFICATION) {
+ const { timeout, ...data } = action.payload;
+ const interval = timeout || notificationTimeout;
+ setTimeout(() => {
+ store.dispatch(notificationActions.removeNotification(data));
+ }, interval);
+ }
+ return next(action);
+};
+
+export default notifications;
diff --git a/openecomp-ui/src/nfvo-components/notification/NotificationsReducer.js b/openecomp-ui/src/nfvo-components/notification/NotificationsReducer.js
new file mode 100644
index 0000000000..9b97381c22
--- /dev/null
+++ b/openecomp-ui/src/nfvo-components/notification/NotificationsReducer.js
@@ -0,0 +1,28 @@
+/*
+ * Copyright © 2016-2018 European Support Limited
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+import { actionTypes } from './NotificationsConstants';
+
+export default (state = [], action) => {
+ switch (action.type) {
+ case actionTypes.ADD_NOTIFICATION:
+ return [...state, action.payload];
+
+ case actionTypes.REMOVE_NOTIFICATION:
+ return state.filter(item => item.id !== action.payload.id);
+ default:
+ return state;
+ }
+};
diff --git a/openecomp-ui/src/nfvo-utils/i18n/en.json b/openecomp-ui/src/nfvo-utils/i18n/en.json
index 10ddb4202e..d02904d90a 100644
--- a/openecomp-ui/src/nfvo-utils/i18n/en.json
+++ b/openecomp-ui/src/nfvo-utils/i18n/en.json
@@ -364,7 +364,8 @@
"Contributor": "Contributor",
"Active Items": "Active Items",
"Archived Items": "Archived Items",
-
+ "This is the current version of the VSP, as a result of healing": "This is the current version of the VSP, as a result of healing",
+
"VendorSoftwareProduct": "VSP",
"VendorSoftwareProduct/category": "Category",
"VendorSoftwareProduct/description": "Description",
diff --git a/openecomp-ui/src/sdc-app/AppStore.js b/openecomp-ui/src/sdc-app/AppStore.js
index 5cab6ae561..db47650723 100644
--- a/openecomp-ui/src/sdc-app/AppStore.js
+++ b/openecomp-ui/src/sdc-app/AppStore.js
@@ -1,5 +1,5 @@
/*
- * Copyright © 2016-2017 European Support Limited
+ * Copyright © 2016-2018 European Support Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@
import { createStore, applyMiddleware, compose } from 'redux';
import Reducers from './Reducers.js';
import filterUpdater from 'sdc-app/onboarding/onboard/filter/FilterMiddleware.js';
+import notifications from 'nfvo-components/notification/NotificationsMiddleware.js';
const thunk = store => next => action =>
typeof action === 'function'
@@ -29,7 +30,7 @@ export const storeCreator = initialState =>
createStore(
Reducers,
initialState,
- composeEnhancers(applyMiddleware(thunk, filterUpdater))
+ composeEnhancers(applyMiddleware(thunk, filterUpdater, notifications))
);
const store = storeCreator();
diff --git a/openecomp-ui/src/sdc-app/Application.jsx b/openecomp-ui/src/sdc-app/Application.jsx
index abebb6d89a..f96bd73c21 100644
--- a/openecomp-ui/src/sdc-app/Application.jsx
+++ b/openecomp-ui/src/sdc-app/Application.jsx
@@ -1,5 +1,5 @@
/*!
- * Copyright © 2016-2017 European Support Limited
+ * Copyright © 2016-2018 European Support Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -17,6 +17,7 @@ import React from 'react';
import PropTypes from 'prop-types';
import { Provider } from 'react-redux';
import GlobalModal from 'nfvo-components/modal/GlobalModal.js';
+import Notifications from 'nfvo-components/notification/Notifications.js';
import Loader from 'nfvo-components/loader/Loader.jsx';
import WebSocketUtil from 'nfvo-utils/WebSocketUtil.js';
import UserNotificationsActionHelper from 'sdc-app/onboarding/userNotifications/UserNotificationsActionHelper.js';
@@ -44,6 +45,7 @@ class Application extends React.Component {
<Provider store={store}>
<div>
<GlobalModal />
+ <Notifications />
{this.props.children}
<Loader />
</div>
diff --git a/openecomp-ui/src/sdc-app/Reducers.js b/openecomp-ui/src/sdc-app/Reducers.js
index 9f424235cb..684c20c878 100644
--- a/openecomp-ui/src/sdc-app/Reducers.js
+++ b/openecomp-ui/src/sdc-app/Reducers.js
@@ -1,5 +1,5 @@
/*
- * Copyright © 2016-2017 European Support Limited
+ * Copyright © 2016-2018 European Support Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -20,7 +20,7 @@ import flowsReducersMap from './flows/FlowsReducersMap.js';
import loaderReducer from 'nfvo-components/loader/LoaderReducer.js';
import globalModalReducer from 'nfvo-components/modal/GlobalModalReducer.js';
import notificationsReducer from 'sdc-app/onboarding/userNotifications/NotificationsReducer.js';
-
+import { default as popupNotifications } from 'nfvo-components/notification/NotificationsReducer.js';
export default combineReducers({
// on-boarding reducers
...onBoardingReducersMap,
@@ -29,5 +29,6 @@ export default combineReducers({
...flowsReducersMap,
modal: globalModalReducer,
loader: loaderReducer,
- notifications: notificationsReducer
+ notifications: notificationsReducer,
+ popupNotifications
});
diff --git a/openecomp-ui/src/sdc-app/onboarding/OnboardingActionHelper.js b/openecomp-ui/src/sdc-app/onboarding/OnboardingActionHelper.js
index b8ce714bce..b9ffdc3076 100644
--- a/openecomp-ui/src/sdc-app/onboarding/OnboardingActionHelper.js
+++ b/openecomp-ui/src/sdc-app/onboarding/OnboardingActionHelper.js
@@ -1,5 +1,5 @@
/*
- * Copyright © 2016-2017 European Support Limited
+ * Copyright © 2016-2018 European Support Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -47,6 +47,8 @@ import { tabsMapping as attachmentsTabsMapping } from 'sdc-app/onboarding/softwa
import SoftwareProductAttachmentsActionHelper from 'sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachmentsActionHelper.js';
import { actionTypes as filterActionTypes } from './onboard/filter/FilterConstants.js';
import FeaturesActionHelper from 'sdc-app/features/FeaturesActionHelper.js';
+import { notificationActions } from 'nfvo-components/notification/NotificationsConstants.js';
+import i18n from 'nfvo-utils/i18n/i18n.js';
function setCurrentScreen(dispatch, screen, props = {}) {
dispatch({
@@ -208,37 +210,82 @@ const OnboardingActionHelper = {
status
});
},
+ async getUpdatedSoftwareProduct(dispatch, { softwareProductId, version }) {
+ const response = await SoftwareProductActionHelper.fetchSoftwareProduct(
+ dispatch,
+ {
+ softwareProductId,
+ version
+ }
+ );
+ let newResponse = false;
+ let newVersion = false;
+ // checking if there was healing and a new version should be open
+ if (response[0].version !== version.id) {
+ newResponse = await SoftwareProductActionHelper.fetchSoftwareProduct(
+ dispatch,
+ {
+ softwareProductId,
+ version: { ...version, id: response[0].version }
+ }
+ );
+ newVersion = await ItemsHelper.fetchVersion({
+ itemId: softwareProductId,
+ versionId: response[0].version
+ });
- navigateToSoftwareProductLandingPage(
+ dispatch(
+ notificationActions.showInfo({
+ message: i18n(
+ 'This is the current version of the VSP, as a result of healing'
+ )
+ })
+ );
+ }
+ return Promise.resolve(
+ newResponse
+ ? { softwareProduct: newResponse[0], newVersion }
+ : { softwareProduct: response[0], newVersion: version }
+ );
+ },
+ async navigateToSoftwareProductLandingPage(
dispatch,
{ softwareProductId, version, status }
) {
SoftwareProductComponentsActionHelper.clearComponentsStore(dispatch);
+ /**
+ * TODO remove when Filter toggle will be removed
+ */
LicenseModelActionHelper.fetchFinalizedLicenseModels(dispatch);
- SoftwareProductActionHelper.fetchSoftwareProduct(dispatch, {
+
+ const {
+ softwareProduct,
+ newVersion
+ } = await this.getUpdatedSoftwareProduct(dispatch, {
softwareProductId,
version
- }).then(response => {
- let { vendorId: licenseModelId, licensingVersion } = response[0];
- SoftwareProductActionHelper.loadSoftwareProductDetailsData(
- dispatch,
- { licenseModelId, licensingVersion }
- );
- SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(
- dispatch,
- { softwareProductId, version: version }
- );
- if (response[0].onboardingOrigin === onboardingOriginTypes.ZIP) {
- SoftwareProductActionHelper.loadSoftwareProductHeatCandidate(
- dispatch,
- { softwareProductId, version: version }
- );
- }
- setCurrentScreen(
+ });
+
+ let { vendorId: licenseModelId, licensingVersion } = softwareProduct;
+ SoftwareProductActionHelper.loadSoftwareProductDetailsData(dispatch, {
+ licenseModelId,
+ licensingVersion
+ });
+ SoftwareProductComponentsActionHelper.fetchSoftwareProductComponents(
+ dispatch,
+ { softwareProductId, version: newVersion }
+ );
+ if (softwareProduct.onboardingOrigin === onboardingOriginTypes.ZIP) {
+ SoftwareProductActionHelper.loadSoftwareProductHeatCandidate(
dispatch,
- enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE,
- { softwareProductId, licenseModelId, version, status }
+ { softwareProductId, version: newVersion }
);
+ }
+ setCurrentScreen(dispatch, enums.SCREEN.SOFTWARE_PRODUCT_LANDING_PAGE, {
+ softwareProductId,
+ licenseModelId,
+ version: newVersion,
+ status
});
},
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js
index db3cc04f76..d3d7b96a5d 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/SoftwareProduct.js
@@ -127,7 +127,8 @@ const buildNavigationBarProps = ({
screen,
componentId,
componentsList,
- mapOfExpandedIds
+ mapOfExpandedIds,
+ isCertified
}) => {
const {
softwareProductEditor: { data: currentSoftwareProduct = {} }
@@ -235,7 +236,7 @@ const buildNavigationBarProps = ({
return {
activeItemId,
groups,
- disabled: !!candidateOnboardingOrigin
+ disabled: !!candidateOnboardingOrigin && !isCertified
};
};
@@ -268,7 +269,8 @@ const buildVersionControllerProps = ({
userInfo,
usersList,
isManual: onboardingMethod === onboardingMethodType.MANUAL,
- candidateInProcess: !!candidateOnboardingOrigin
+ candidateInProcess:
+ !!candidateOnboardingOrigin && !itemPermission.isCertified
};
};
@@ -360,7 +362,8 @@ const mapStateToProps = (
screen,
componentId,
componentsList,
- mapOfExpandedIds
+ mapOfExpandedIds,
+ isCertified: itemPermission.isCertified
}),
meta
};
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js
index 4d5887be6f..9b0f681eaf 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/attachments/SoftwareProductAttachments.js
@@ -36,7 +36,8 @@ export const mapStateToProps = state => {
heatSetupCache,
heatValidation: { errorList }
}
- }
+ },
+ currentScreen: { itemPermission: { isCertified } }
} = state;
let { unassigned = [], modules = [] } = heatSetup;
@@ -61,7 +62,8 @@ export const mapStateToProps = state => {
version,
onboardingOrigin,
activeTab,
- candidateInProcess: !!currentSoftwareProduct.candidateOnboardingOrigin
+ candidateInProcess:
+ !!currentSoftwareProduct.candidateOnboardingOrigin && !isCertified
};
};
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js
index f5f3b7ebdb..52a69803a6 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPage.js
@@ -25,7 +25,8 @@ import VNFImportActionHelper from '../vnfMarketPlace/VNFImportActionHelper.js';
export const mapStateToProps = ({
softwareProduct,
- licenseModel: { licenseAgreement }
+ licenseModel: { licenseAgreement },
+ currentScreen: { itemPermission: { isCertified } }
}) => {
let {
softwareProductEditor: { data: currentSoftwareProduct = {} },
@@ -67,6 +68,7 @@ export const mapStateToProps = ({
licenseAgreementName,
fullCategoryDisplayName
},
+ isCertified,
componentsList,
isManual:
currentSoftwareProduct.onboardingMethod === onboardingMethod.MANUAL
diff --git a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx
index 00f0c2a0cb..dcc9645750 100644
--- a/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx
+++ b/openecomp-ui/src/sdc-app/onboarding/softwareProduct/landingPage/SoftwareProductLandingPageView.jsx
@@ -65,8 +65,12 @@ class SoftwareProductLandingPageView extends React.Component {
onAddComponent: PropTypes.func
};
componentDidMount() {
- const { onCandidateInProcess, currentSoftwareProduct } = this.props;
- if (currentSoftwareProduct.candidateOnboardingOrigin) {
+ const {
+ onCandidateInProcess,
+ currentSoftwareProduct,
+ isCertified
+ } = this.props;
+ if (currentSoftwareProduct.candidateOnboardingOrigin && !isCertified) {
onCandidateInProcess(currentSoftwareProduct.id);
}
}