ec45258eb90ce4eb7622f64a9f5efa63667ad9a9
[sdc.git] / openecomp-ui / src / sdc-app / onboarding / onboard / onboardingCatalog / VendorCatalogView.jsx
1 /*
2  * Copyright © 2016-2018 European Support Limited
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 or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 import React from 'react';
17 import VendorItem from './VendorItem.jsx';
18 import CatalogList from '../CatalogList.jsx';
19 import CatalogItemDetails from '../CatalogItemDetails.jsx';
20 import { catalogItemTypes } from './OnboardingCatalogConstants.js';
21 import { filterCatalogItemsByType } from './OnboardingCatalogUtils.js';
22
23 const VendorList = ({
24     onAddVLM,
25     onAddVSP,
26     onSelectVSP,
27     licenseModelList = [],
28     vspOverlay: currentOverlay,
29     onVspOverlayChange,
30     onVendorSelect,
31     filter,
32     onMigrate,
33     users,
34     isArchived
35 }) => {
36     const showAddButtons = !isArchived;
37     const handeleSelectVSP = vsp => onSelectVSP(vsp, users);
38     const handleOnVspButtonClick = (hasVSP, vlm) =>
39         onVspOverlayChange(vlm.id === currentOverlay || !hasVSP ? null : vlm);
40
41     return (
42         <CatalogList
43             onAddVLM={showAddButtons ? onAddVLM : false}
44             onAddVSP={showAddButtons ? onAddVSP : false}>
45             {filterCatalogItemsByType({ items: licenseModelList, filter }).map(
46                 vlm => (
47                     <VendorItem
48                         key={vlm.id}
49                         vlm={vlm}
50                         onAddVSP={onAddVSP}
51                         onSelectVSP={handeleSelectVSP}
52                         shouldShowOverlay={currentOverlay === vlm.id}
53                         onVSPButtonClick={handleOnVspButtonClick}
54                         onVendorSelect={onVendorSelect}
55                         onMigrate={onMigrate}
56                         vendor={vlm}
57                     />
58                 )
59             )}
60         </CatalogList>
61     );
62 };
63
64 const SoftwareProductListByVendor = ({
65     onAddVSP,
66     selectedVendor,
67     onVendorSelect,
68     onSelectVSP,
69     onSelectVLM,
70     filter,
71     onMigrate,
72     users,
73     isArchived
74 }) => {
75     const handleAddVsp = !isArchived
76         ? () => onAddVSP(selectedVendor.id)
77         : false;
78     const handleOnSelect = () => onSelectVLM(selectedVendor, users);
79     return (
80         <div>
81             <CatalogList
82                 onAddVSP={handleAddVsp}
83                 vendorPageOptions={{
84                     selectedVendor,
85                     onBack: () => onVendorSelect(false)
86                 }}>
87                 <CatalogItemDetails
88                     key={selectedVendor.id}
89                     onSelect={handleOnSelect}
90                     catalogItemTypeClass={catalogItemTypes.LICENSE_MODEL}
91                     onMigrate={onMigrate}
92                     catalogItemData={selectedVendor}
93                 />
94                 {filterCatalogItemsByType({
95                     items: selectedVendor.softwareProductList,
96                     filter
97                 }).map(vsp => (
98                     <CatalogItemDetails
99                         key={vsp.id}
100                         catalogItemTypeClass={catalogItemTypes.SOFTWARE_PRODUCT}
101                         onMigrate={onMigrate}
102                         onSelect={() => onSelectVSP(vsp, users)}
103                         catalogItemData={vsp}
104                     />
105                 ))}
106             </CatalogList>
107         </div>
108     );
109 };
110
111 class VendorCatalogView extends React.Component {
112     render() {
113         let { selectedVendor } = this.props;
114         return selectedVendor ? (
115             <SoftwareProductListByVendor {...this.props} />
116         ) : (
117             <VendorList {...this.props} />
118         );
119     }
120 }
121
122 export default VendorCatalogView;