summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--resources/scss/header/_layout.scss19
-rw-r--r--scripts/build/build.sh1
-rw-r--r--src/app/MainScreenWrapper.jsx5
-rw-r--r--src/app/contextHandler/ContextHandlerActions.js3
-rw-r--r--src/app/networking/NetworkCalls.js4
-rw-r--r--src/generic-components/autoCompleteSearchBar/AutoCompleteSearchBar.jsx6
-rw-r--r--src/generic-components/notifications/NotificationReducer.js59
-rw-r--r--test/generic-components/notifications/NotificationReducer.test.js197
8 files changed, 251 insertions, 43 deletions
diff --git a/resources/scss/header/_layout.scss b/resources/scss/header/_layout.scss
index aca42ce..14d90ac 100644
--- a/resources/scss/header/_layout.scss
+++ b/resources/scss/header/_layout.scss
@@ -158,6 +158,12 @@
.vnf-search-button-icon {
background-image: url($icons-folder-path + '/vnfSearchicon.png');
}
+
+ .configurable-view-button-icon {
+ background-image: url($icons-folder-path + '/reports.svg');
+ -webkit-filter: brightness(500);
+ filter: brightness(500);
+ }
}
.main-menu-button:hover, .main-menu-button:focus {
@@ -174,6 +180,12 @@
.vnf-search-button-icon {
background-image: url($icons-folder-path + '/vnfSearchicon_hover.png');
}
+
+ .configurable-view-button-icon {
+ background-image: url($icons-folder-path + '/reports.svg');
+ -webkit-filter: brightness(1);
+ filter: brightness(1);
+ }
}
.main-menu-button-active {
@@ -185,6 +197,7 @@
width: 100%;
height: 90px;
text-align: center;
+ padding-top: 5px;
.view-inspect-button-icon {
background-image: url($icons-folder-path + '/binocularicon_active.png');
@@ -197,6 +210,12 @@
.vnf-search-button-icon {
background-image: url($icons-folder-path + '/vnfSearchicon_active.png');
}
+
+ .configurable-view-button-icon {
+ background-image: url($icons-folder-path + '/reports.svg');
+ -webkit-filter: brightness(0.55);
+ filter: brightness(0.55);
+ }
}
.search-bar {
diff --git a/scripts/build/build.sh b/scripts/build/build.sh
index 7af49cd..24ede22 100644
--- a/scripts/build/build.sh
+++ b/scripts/build/build.sh
@@ -149,6 +149,7 @@ else
npm install --save ${extensionList}
# copy content when there are extensions
UpdateFEwithExtensions
+ UpdateFEWithCustomViews
fi
# Copy style
diff --git a/src/app/MainScreenWrapper.jsx b/src/app/MainScreenWrapper.jsx
index 730ac93..3348494 100644
--- a/src/app/MainScreenWrapper.jsx
+++ b/src/app/MainScreenWrapper.jsx
@@ -140,6 +140,8 @@ class MainScreenWrapper extends Component {
extensibleViewNetworkCallbackData,
onExtensibleViewMessageCallback,
onOverlayNetworkCallback,
+ configurableViewsConfig,
+ customComponents,
customRoutes
} = this.props;
@@ -199,6 +201,8 @@ class MainScreenWrapper extends Component {
});
+ let configurableViewList = getConfigurableRoutes(configurableViewsConfig, customComponents);
+
return (
<Router>
<div className='main-app-container'>
@@ -210,6 +214,7 @@ class MainScreenWrapper extends Component {
<Route key='VnfSearchRoute' path='/vnfSearch/:filters?' component={VnfSearch}/>
{customViewList}
{customRoutes}
+ {configurableViewList}
</div>
</Router>
);
diff --git a/src/app/contextHandler/ContextHandlerActions.js b/src/app/contextHandler/ContextHandlerActions.js
index b4805e1..f3ede6d 100644
--- a/src/app/contextHandler/ContextHandlerActions.js
+++ b/src/app/contextHandler/ContextHandlerActions.js
@@ -105,7 +105,8 @@ function fetchSubscriptionPayload(fetchRequestCallback) {
export function getSubscriptionPayload() {
let externalfetchRequest =
- () => networkCall.getRequest(SUBSCRIPTION_PAYLOAD_URL, GET);
+ () => networkCall.getRequest(SUBSCRIPTION_PAYLOAD_URL, GET);
+
return dispatch => {
dispatch(fetchSubscriptionPayload(externalfetchRequest));
};
diff --git a/src/app/networking/NetworkCalls.js b/src/app/networking/NetworkCalls.js
index e391391..9bf7535 100644
--- a/src/app/networking/NetworkCalls.js
+++ b/src/app/networking/NetworkCalls.js
@@ -55,9 +55,7 @@ function getRequest(URL, GET) {
return fetch(URL, {
credentials: 'same-origin',
method: GET
- }).then(
- (response) => response.json()
- );
+ });
}
const genericRequest = (url, relativeURL, httpMethodType) => {
diff --git a/src/generic-components/autoCompleteSearchBar/AutoCompleteSearchBar.jsx b/src/generic-components/autoCompleteSearchBar/AutoCompleteSearchBar.jsx
index 4f93125..47cdc9a 100644
--- a/src/generic-components/autoCompleteSearchBar/AutoCompleteSearchBar.jsx
+++ b/src/generic-components/autoCompleteSearchBar/AutoCompleteSearchBar.jsx
@@ -164,7 +164,8 @@ export default class AutoCompleteSearchBar extends Component {
<Highlighter key={arrayIndex + 'high'}
highlightClassName='highlight'
searchWords={toHighLightArray}
- textToHighlight={suggestionTextArray[arrayIndex]}/>
+ textToHighlight={suggestionTextArray[arrayIndex]}
+ autoEscape={true}/>
{ ++arrayIndex ? ' ' : ' '}
</span>);
@@ -185,7 +186,8 @@ export default class AutoCompleteSearchBar extends Component {
<Highlighter key={arrayIndex + 'high'}
highlightClassName='highlight'
searchWords={toHighLightArray}
- textToHighlight={suggestionTextArray[arrayIndex]}/>
+ textToHighlight={suggestionTextArray[arrayIndex]}
+ autoEscape={true}/>
{ ++arrayIndex ? ' ' : ' '}
</span>);
diff --git a/src/generic-components/notifications/NotificationReducer.js b/src/generic-components/notifications/NotificationReducer.js
index e20a8fb..1f5122c 100644
--- a/src/generic-components/notifications/NotificationReducer.js
+++ b/src/generic-components/notifications/NotificationReducer.js
@@ -21,43 +21,28 @@
import NotificationConstants from './NotificationConstants.js';
export default (state = null, action) => {
- switch (action.type) {
- case NotificationConstants.NOTIFY_INFO:
- return {
- type: 'default',
- title: action.data.title,
- msg: action.data.msg,
- timeout: action.data.timeout
- };
-
- case NotificationConstants.NOTIFY_ERROR:
- return {
- type: 'error',
- title: action.data.title,
- msg: action.data.msg,
- timeout: action.data.timeout
- };
-
- case NotificationConstants.NOTIFY_WARNING:
- return {
- type: 'warning',
- title: action.data.title,
- msg: action.data.msg,
- timeout: action.data.timeout
- };
-
- case NotificationConstants.NOTIFY_SUCCESS:
- return {
- type: 'success',
+ switch (action.type) {
+ case NotificationConstants.NOTIFY_INFO:
+ return createStatus('default', action);
+ case NotificationConstants.NOTIFY_ERROR:
+ return createStatus('error', action);
+ case NotificationConstants.NOTIFY_WARNING:
+ return createStatus('warning', action);
+ case NotificationConstants.NOTIFY_SUCCESS:
+ return createStatus('success', action);
+ case NotificationConstants.NOTIFY_CLOSE:
+ return null;
+ default:
+ return state;
+ }
+
+};
+
+function createStatus(type, action) {
+ return {
+ type: type,
title: action.data.title,
msg: action.data.msg,
timeout: action.data.timeout
- };
- case NotificationConstants.NOTIFY_CLOSE:
- return null;
-
- default:
- return state;
- }
-
-};
+ };
+}
diff --git a/test/generic-components/notifications/NotificationReducer.test.js b/test/generic-components/notifications/NotificationReducer.test.js
new file mode 100644
index 0000000..40d6b05
--- /dev/null
+++ b/test/generic-components/notifications/NotificationReducer.test.js
@@ -0,0 +1,197 @@
+import NotificationReducer from 'generic-components/notifications/NotificationReducer';
+import NotificationConstants from "generic-components/notifications/NotificationConstants";
+
+
+describe('NotificationReducer', () => {
+ const defaultState = {
+ type: 'default',
+ title: 'some default title',
+ msg: 'some default message',
+ timeout: 1
+ };
+
+ it('Should return default state when action type is not supported', () => {
+ // given
+ const unsupportedAction = {
+ type: undefined
+ };
+
+ // when
+ const actualState = NotificationReducer(defaultState, unsupportedAction);
+
+ // then
+ expect(actualState).toEqual(defaultState);
+ });
+
+ it('Should return state with type default when action type is info', () => {
+ // given
+ const expectedState = {
+ type: 'default',
+ title: 'some title',
+ msg: 'some message',
+ timeout: 5
+ };
+
+ const infoAction = {
+ type: NotificationConstants.NOTIFY_INFO,
+ data: {
+ title: "some title",
+ msg: "some message",
+ timeout: 5
+ }
+ };
+
+ // when
+ const actualState = NotificationReducer(defaultState, infoAction);
+
+ // then
+ expect(actualState).toEqual(expectedState);
+ });
+
+
+ it('Should return status with type success when action type is success', () => {
+ // given
+ const expectedState = {
+ type: 'success',
+ title: 'some title',
+ msg: 'some message',
+ timeout: 2
+ };
+
+ const infoAction = {
+ type: NotificationConstants.NOTIFY_SUCCESS,
+ data: {
+ title: "some title",
+ msg: "some message",
+ timeout: 2
+ }
+ };
+
+ // when
+ const actualState = NotificationReducer(defaultState, infoAction);
+
+ // then
+ expect(actualState).toEqual(expectedState);
+ });
+
+ it('Should return status with type success when action type is success', () => {
+ // given
+ const expectedState = {
+ type: 'success',
+ title: 'some title',
+ msg: 'some message',
+ timeout: 2
+ };
+
+ const infoAction = {
+ type: NotificationConstants.NOTIFY_SUCCESS,
+ data: {
+ title: "some title",
+ msg: "some message",
+ timeout: 2
+ }
+ };
+
+ // when
+ const actualState = NotificationReducer(defaultState, infoAction);
+
+ // then
+ expect(actualState).toEqual(expectedState);
+ });
+
+ it('Should return status with type error when action type is error', () => {
+ // given
+ const expectedState = {
+ type: 'error',
+ title: 'some title',
+ msg: 'some message',
+ timeout: 2
+ };
+
+ const infoAction = {
+ type: NotificationConstants.NOTIFY_ERROR,
+ data: {
+ title: "some title",
+ msg: "some message",
+ timeout: 2
+ }
+ };
+
+ // when
+ const actualState = NotificationReducer(defaultState, infoAction);
+
+ // then
+ expect(actualState).toEqual(expectedState);
+ });
+
+ it('Should return status with type error when action type is error', () => {
+ // given
+ const expectedState = {
+ type: 'error',
+ title: 'some title',
+ msg: 'some message',
+ timeout: 2
+ };
+
+ const infoAction = {
+ type: NotificationConstants.NOTIFY_ERROR,
+ data: {
+ title: "some title",
+ msg: "some message",
+ timeout: 2
+ }
+ };
+
+ // when
+ const actualState = NotificationReducer(defaultState, infoAction);
+
+ // then
+ expect(actualState).toEqual(expectedState);
+ });
+
+ it('Should return status with type warning when action type is warning', () => {
+ // given
+ const expectedState = {
+ type: 'warning',
+ title: 'some title',
+ msg: 'some message',
+ timeout: 2
+ };
+
+ const infoAction = {
+ type: NotificationConstants.NOTIFY_WARNING,
+ data: {
+ title: "some title",
+ msg: "some message",
+ timeout: 2
+ }
+ };
+
+ // when
+ const actualState = NotificationReducer(defaultState, infoAction);
+
+ // then
+ expect(actualState).toEqual(expectedState);
+ });
+
+ it('Should return null when action type is close', () => {
+ // given
+ const expectedState = null;
+
+ const infoAction = {
+ type: NotificationConstants.NOTIFY_CLOSE,
+ data: {
+ title: "some title",
+ msg: "some message",
+ timeout: 2
+ }
+ };
+
+ // when
+ const actualState = NotificationReducer(defaultState, infoAction);
+
+ // then
+ expect(actualState).toEqual(expectedState);
+ });
+
+});