Add collaboration feature
[sdc.git] / openecomp-ui / src / sdc-app / onboarding / licenseModel / LicenseModel.js
1 /*!
2  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 import {connect} from 'react-redux';
17
18 import i18n from 'nfvo-utils/i18n/i18n.js';
19 import TabulatedEditor from 'src/nfvo-components/editor/TabulatedEditor.jsx';
20 import ScreensHelper from 'sdc-app/common/helpers/ScreensHelper.js';
21 import {enums, screenTypes} from 'sdc-app/onboarding/OnboardingConstants.js';
22
23 import PermissionsActionHelper from './../permissions/PermissionsActionHelper.js';
24 import RevisionsActionHelper from './../revisions/RevisionsActionHelper.js';
25
26 import LicenseModelActionHelper from './LicenseModelActionHelper.js';
27 import {actionTypes as modalActionTypes} from 'nfvo-components/modal/GlobalModalConstants.js';
28 import {modalContentMapper} from 'sdc-app/common/modal/ModalContentMapper.js';
29 import {CommitModalType} from 'nfvo-components/panel/versionController/components/CommitCommentModal.jsx';
30
31
32 const buildNavigationBarProps = (licenseModel, screen) => {
33         const {id, vendorName, version} = licenseModel;
34         const meta = {version};
35
36         const groups = [{
37                 id,
38                 name: vendorName,
39                 items: [
40                         {
41                                 id: enums.SCREEN.LICENSE_MODEL_OVERVIEW,
42                                 name: i18n('Overview'),
43                                 meta
44                         },
45                         {
46                                 id: enums.SCREEN.LICENSE_AGREEMENTS,
47                                 name: i18n('License Agreements'),
48                                 meta
49                         },
50                         {
51                                 id: enums.SCREEN.FEATURE_GROUPS,
52                                 name: i18n('Feature Groups'),
53                                 meta
54                         },
55                         {
56                                 id: enums.SCREEN.ENTITLEMENT_POOLS,
57                                 name: i18n('Entitlement Pools'),
58                                 meta
59                         },
60                         {
61                                 id: enums.SCREEN.LICENSE_KEY_GROUPS,
62                                 name: i18n('License Key Groups'),
63                                 meta
64                         },
65                         {
66                                 id: enums.SCREEN.ACTIVITY_LOG,
67                                 name: i18n('Activity Log'),
68                                 meta
69                         }
70                 ]
71         }];
72
73         return {
74                 activeItemId: screen, groups
75         };
76 };
77
78
79 const buildVersionControllerProps = ({
80         licenseModelEditor = {data: {}},
81         versions,
82         currentVersion,
83         userInfo,
84         usersList,
85         permissions,
86         itemPermission,
87         isReadOnlyMode
88 }) => {
89         const {isValidityData = true} = licenseModelEditor;
90         return {
91                 version: currentVersion,
92                 viewableVersions: versions,
93                 isFormDataValid: isValidityData,
94                 permissions,
95                 userInfo,
96                 usersList,
97                 itemName: licenseModelEditor.data.vendorName,
98                 itemPermission,
99                 isReadOnlyMode
100         };
101 };
102
103
104 const mapStateToProps = ({
105         users: {userInfo, usersList},
106         licenseModel: {licenseModelEditor},
107         versionsPage: {permissions, versionsList: {versions, itemName}}
108 }, {
109         currentScreen: {screen, itemPermission, props: {isReadOnlyMode, version: currentVersion}}
110 }) => {
111         return {
112                 versionControllerProps: buildVersionControllerProps({
113                         licenseModelEditor,
114                         versions,
115                         currentVersion,
116                         userInfo,
117                         permissions,
118                         usersList,
119                         itemPermission,
120                         isReadOnlyMode
121                 }),
122                 navigationBarProps: buildNavigationBarProps(licenseModelEditor.data, screen)
123         };
124 };
125
126
127 const mapActionsToProps = (dispatch, {currentScreen: {screen, props: {licenseModelId, version}}}) => {
128
129         return {
130                 onVersionControllerAction: (action, version, comment) =>
131                         LicenseModelActionHelper.performVCAction(dispatch, {licenseModelId, action, version, comment}).then(updatedVersion => {
132                                 ScreensHelper.loadScreen(dispatch, {screen, screenType: screenTypes.LICENSE_MODEL, props: {licenseModelId, version: updatedVersion}});
133                         }),
134
135                 onOpenCommentCommitModal: ({onCommit, title}) => dispatch({
136                         type: modalActionTypes.GLOBAL_MODAL_SHOW,
137                         data: {
138                                 modalComponentName: modalContentMapper.COMMIT_COMMENT,
139                                 modalComponentProps: {
140                                         onCommit,
141                                         type: CommitModalType.COMMIT
142                                 },
143                                 title
144                         }
145                 }),
146
147                 onVersionSwitching: version => {
148                         ScreensHelper.loadScreen(dispatch, {screen, screenType: screenTypes.LICENSE_MODEL, props: {licenseModelId, version}});
149                 },
150
151                 onManagePermissions() {
152                         PermissionsActionHelper.openPermissonsManager(dispatch, {itemId: licenseModelId, askForRights: false});
153                 },
154
155                 onMoreVersionsClick: ({itemName, users}) => {
156                         ScreensHelper.loadScreen(dispatch, {screen: enums.SCREEN.VERSIONS_PAGE, screenType: screenTypes.LICENSE_MODEL,
157                                 props: {licenseModelId, licenseModel: {name: itemName}, usersList: users}});
158                 },
159
160                 onOpenPermissions: ({users}) => {
161                         return PermissionsActionHelper.fetchItemUsers(dispatch, {itemId: licenseModelId, allUsers: users});
162                 },
163
164                 onOpenRevisionsModal: () => {
165                         return RevisionsActionHelper.openRevisionsView(dispatch, {itemId: licenseModelId, version: version, itemType: screenTypes.LICENSE_MODEL});
166                 },
167
168                 onNavigate: ({id}) => {
169                         ScreensHelper.loadScreen(dispatch, {screen: id, screenType: screenTypes.LICENSE_MODEL, props: {licenseModelId, version}});
170                 }
171         };
172 };
173
174 export default connect(mapStateToProps, mapActionsToProps)(TabulatedEditor);