blob: f8693e15bee61a35e51216ac5c7ba40428b1137c [file] [log] [blame]
import { actionTypes } from './UserNotificationsConstants.js';
import i18n from 'nfvo-utils/i18n/i18n.js';
import Configuration from 'sdc-app/config/Configuration.js';
import RestAPIUtil from 'nfvo-utils/RestAPIUtil.js';
import WebSocketUtil, { websocketUrl } from 'nfvo-utils/WebSocketUtil.js';
import { actionsEnum as VersionControllerActionsEnum } from 'nfvo-components/panel/versionController/VersionControllerConstants.js';
import ItemsHelper from 'sdc-app/common/helpers/ItemsHelper.js';
import ScreensHelper from 'sdc-app/common/helpers/ScreensHelper.js';
import MergeEditorActionHelper from 'sdc-app/common/merge/MergeEditorActionHelper.js';
import { actionTypes as modalActionTypes } from 'nfvo-components/modal/GlobalModalConstants.js';
import { SyncStates } from 'sdc-app/common/merge/MergeEditorConstants.js';
function baseUrl() {
const restPrefix = Configuration.get('restPrefix');
return `${restPrefix}/v1.0/notifications`;
}
function fetch() {
return RestAPIUtil.fetch(baseUrl());
}
function updateNotification(notificationId) {
return RestAPIUtil.put(`${baseUrl()}/${notificationId}`);
}
function updateLastSeenNotification(notificationId) {
return RestAPIUtil.put(`${baseUrl()}/last-seen/${notificationId}`);
}
function loadPrevNotifications(lastScanned, endOfPage) {
return RestAPIUtil.fetch(
`${baseUrl()}?LAST_DELIVERED_EVENT_ID=${lastScanned}&END_OF_PAGE_EVENT_ID=${endOfPage}`
);
}
const INITIAL_LAST_SCANNED = '00000000-0000-1000-8080-808080808080';
const UserNotificationsActionHelper = {
notificationsFirstHandling(dispatch) {
console.log('Websocket Url: ', websocketUrl);
UserNotificationsActionHelper.fetchUserNotificationsList(dispatch).then(
({ lastScanned }) => {
WebSocketUtil.open(websocketUrl, {
lastScanned: lastScanned || INITIAL_LAST_SCANNED
});
}
);
},
fetchUserNotificationsList(dispatch) {
return fetch().then(result => {
dispatch({
type: actionTypes.LOAD_NOTIFICATIONS,
result
});
return Promise.resolve({ lastScanned: result.lastScanned });
});
},
loadPreviousNotifications(dispatch, { lastScanned, endOfPage }) {
loadPrevNotifications(lastScanned, endOfPage).then(result =>
dispatch({
type: actionTypes.LOAD_PREV_NOTIFICATIONS,
result
})
);
},
notifyAboutConflicts(
dispatch,
{ itemId, itemName, version, currentScreen }
) {
let { props } = currentScreen;
let currentItemId = props.softwareProductId || props.licenseModelId;
let currentVersion = props.version;
if (currentItemId === itemId && currentVersion.id === version.id) {
MergeEditorActionHelper.analyzeSyncResult(dispatch, {
itemId,
version
}).then(() => ScreensHelper.loadScreen(dispatch, currentScreen));
} else {
dispatch({
type: modalActionTypes.GLOBAL_MODAL_WARNING,
data: {
title: i18n('Conflicts'),
msg: i18n(
'There are conflicts in {itemName} version {versionName} that you have to resolve',
{
itemName: itemName.toUpperCase(),
versionName: version.versionName
}
),
cancelButtonText: i18n('OK')
}
});
}
},
syncItem(
dispatch,
{ itemId, itemName, versionId, versionName, currentScreen }
) {
let version = { id: versionId, versionName };
ItemsHelper.fetchVersion({ itemId, versionId }).then(response => {
let inMerge =
response &&
response.state &&
response.state.synchronizationState === SyncStates.MERGE;
if (!inMerge) {
ItemsHelper.performVCAction({
itemId,
version,
action: VersionControllerActionsEnum.SYNC
}).then(() => {
return ItemsHelper.fetchVersion({ itemId, versionId }).then(
response => {
let inMerge =
response &&
response.state &&
response.state.synchronizationState ===
SyncStates.MERGE;
if (!inMerge) {
return ScreensHelper.loadScreen(
dispatch,
currentScreen
);
} else {
return this.notifyAboutConflicts(dispatch, {
itemId,
itemName,
version,
currentScreen
});
}
}
);
});
} else {
this.notifyAboutConflicts(dispatch, {
itemId,
itemName,
version,
currentScreen
});
}
});
},
updateNotification(dispatch, { notificationForUpdate }) {
updateNotification(notificationForUpdate.eventId).then(response => {
if (
response.status === 'Success' &&
Object.keys(response.errors).length === 0
) {
dispatch({
type: actionTypes.UPDATE_READ_NOTIFICATION,
notificationForUpdate
});
}
});
},
updateLastSeenNotification(dispatch, { notificationId }) {
updateLastSeenNotification(notificationId).then(response => {
if (
response.status === 'Success' &&
Object.keys(response.errors).length === 0
) {
dispatch({ type: actionTypes.RESET_NEW_NOTIFICATIONS });
}
});
}
};
export default UserNotificationsActionHelper;