Add collaboration feature

Issue-ID: SDC-767
Change-Id: I14fb4c1f54086ed03a56a7ff7fab9ecd40381795
Signed-off-by: talig <talig@amdocs.com>
diff --git a/openecomp-ui/src/sdc-app/onboarding/OnboardingReducers.js b/openecomp-ui/src/sdc-app/onboarding/OnboardingReducers.js
index e63bcb1..2eb455f 100644
--- a/openecomp-ui/src/sdc-app/onboarding/OnboardingReducers.js
+++ b/openecomp-ui/src/sdc-app/onboarding/OnboardingReducers.js
@@ -14,21 +14,127 @@
  * permissions and limitations under the License.
  */
 import {actionTypes, enums} from './OnboardingConstants.js';
+import {actionTypes as permissionActionTypes} from './permissions/PermissionsConstants.js';
+import {actionTypes as licenseModelCreateActionTypes} from './licenseModel/creation/LicenseModelCreationConstants.js';
+import {actionTypes as softwareProductCreateActionTypes} from './softwareProduct/creation/SoftwareProductCreationConstants.js';
+import {actionTypes as versionCreateActionTypes} from './versionsPage/creation/VersionsPageCreationConstants.js';
+import {SyncStates} from 'sdc-app/common/merge/MergeEditorConstants.js';
 
-export const currentScreenReducer = (state = {forceBreadCrumbsUpdate: false, screen: enums.SCREEN.ONBOARDING_CATALOG, props: {}}, action) => {
+import {catalogItemStatuses} from './onboard/onboardingCatalog/OnboardingCatalogConstants.js';
+import Configuration from 'sdc-app/config/Configuration.js';
+
+const checkReadOnly = ({isCollaborator = true, inMerge = false, isCertified = false}) => !isCollaborator || inMerge || isCertified;
+
+const currentScreen = (state = {
+	forceBreadCrumbsUpdate: false,
+	screen: enums.SCREEN.ONBOARDING_CATALOG,
+	itemPermission: {},
+	props: {}
+}, action) => {
+
 	switch (action.type) {
-		case actionTypes.SET_CURRENT_SCREEN: 
-			return action.currentScreen;
+
+		case actionTypes.SET_CURRENT_SCREEN: {
+			let itemPermission = {...state.itemPermission};
+			let {currentScreen} = action;
+
+			if (currentScreen.props.version) {
+				let {status} = currentScreen.props.version;
+				itemPermission.isCertified = itemPermission.isCertified && status === catalogItemStatuses.CERTIFIED;
+			}
+
+			let isReadOnlyMode = checkReadOnly(itemPermission);
+			let props = {...currentScreen.props, isReadOnlyMode};
+
+			return {
+				...state,
+				...currentScreen,
+				itemPermission,
+				props
+			};
+		}
+
+		case actionTypes.UPDATE_CURRENT_SCREEN_PROPS:
+			return {
+				...state,
+				props: {
+					...state.props,
+					...action.props,
+					isReadOnlyMode: checkReadOnly(state.itemPermission)
+				}
+			};
+
 		case actionTypes.SET_CURRENT_SCREEN_VERSION:
 			return {
 				...state,
 				props: {
 					...state.props,
-					version: action.version
+					version: action.version,
+					isReadOnlyMode: checkReadOnly(state.itemPermission)
 				}
-			};	
+			};
+
+		case licenseModelCreateActionTypes.LICENSE_MODEL_CREATED:
+		case softwareProductCreateActionTypes.SOFTWARE_PRODUCT_CREATED:
+		case versionCreateActionTypes.VERSION_CREATED:
+			return {
+				...state,
+				itemPermission: {
+					isCollaborator: true,
+					inMerge: false,
+					isCertified: false
+				},
+				props: {
+					...state.props,
+					isReadOnlyMode: false
+				}
+			};
+
+		case permissionActionTypes.ITEM_USERS_LOADED: {
+			let userId = Configuration.get('UserID');
+			let isCollaborator = false;
+
+			if (userId === action.owner.userId) {
+				isCollaborator = true;
+			} else {
+				isCollaborator = action.contributors.reduce(
+					(foundUser, contributor) => foundUser || contributor.userId === userId, false
+				);
+			}
+
+			let itemPermission = {...state.itemPermission, isCollaborator};
+			let isReadOnlyMode = checkReadOnly(itemPermission);
+			let props = {...state.props, isReadOnlyMode};
+
+			return {
+				...state,
+				itemPermission,
+				props
+			};
+		}
+
+		case actionTypes.UPDATE_ITEM_STATUS: {
+			const {itemState: {synchronizationState, dirty}, itemStatus, updatedVersion} = action;
+			const inMerge = synchronizationState === SyncStates.MERGE;
+			const isOutOfSync = synchronizationState === SyncStates.OUT_OF_SYNC;
+			const isUpToDate = synchronizationState === SyncStates.UP_TO_DATE;
+			const isCertified = itemStatus === catalogItemStatuses.CERTIFIED;
+			const itemPermission = {...state.itemPermission, inMerge, isDirty: dirty, isOutOfSync, isUpToDate, isCertified};
+			const isReadOnlyMode = checkReadOnly(itemPermission);
+			const props = {...state.props, isReadOnlyMode, version: {...state.props.version, ...updatedVersion}};
+
+			return {
+				...state,
+				itemPermission,
+				props
+			};
+		}
+
 		default:
 			return state;
-	}	
+
+	}
+
 };
 
+export default currentScreen;