2 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 import React from 'react';
18 import OverlayTrigger from 'react-bootstrap/lib/OverlayTrigger.js';
19 import Tooltip from 'react-bootstrap/lib/Tooltip.js';
20 import i18n from 'nfvo-utils/i18n/i18n.js';
21 import SVGIcon from 'sdc-ui/lib/react/SVGIcon.js';
23 const formatTime = (time) => {
24 if (!time) { return ''; }
26 const date = new Date(time);
34 const newDate = date.toLocaleTimeString('en-US', options);
39 const DescriptionField = ({ className, text, useTooltip }) => {
42 <div className={className}>
45 overlay={<Tooltip className='version-description-tooltip' id='version-description-tooltip'>{text}</Tooltip>}>
46 <div className='description-text'>{text}</div>
51 return <div className={className}>{text}</div>;
54 const VersionListItem = ({ data, onSelectVersion, onNavigateToVersion, onCreateVersion, isHeader, isSelected, isCollaborator }) => {
56 let {modificationTime, name, status, description, additionalInfo} = data;
57 const modificationText = !isHeader ? formatTime(modificationTime) : i18n('Last Edited On');
61 data-test-id='version-item-row'
62 className={`version-item-row ${isHeader ? 'header-row' : 'clickable'} ${isSelected ? 'selected' : ''}`}
66 onNavigateToVersion();
68 <div className={`version-item-field ${isHeader ? 'header-field item-version' : 'item-version'}`}>{name}</div>
69 <div className={`version-item-field ${isHeader ? 'header-field item-status' : 'item-status'}`}>{status}</div>
70 <div className={`version-item-field ${isHeader ? 'header-field' : 'item-last-edited'}`}>{modificationText}</div>
72 className={`version-item-field ${isHeader ? 'header-field header-description' : 'item-description'}`}
73 useTooltip={!isHeader && description}
78 <div className='version-item-field header-field actions'>{i18n('Actions')}</div>
80 <div className='version-item-field item-actions'>
81 <div className='version-item-field item-select'>
84 data-test-id='versions-page-select-version'
85 onClick={e => {e.stopPropagation(); onNavigateToVersion();}}
86 label={i18n('Go to this Version')}
87 labelPosition='right' />
89 <div className='version-item-field item-create'>
90 {!isHeader && isCollaborator && additionalInfo.OptionalCreationMethods.length > 0 &&
93 data-test-id='versions-page-create-version'
94 onClick={e => { e.stopPropagation(); onCreateVersion(); }}
95 label={i18n('Create New Version')}
97 disabled={!isCollaborator} />
109 const VersionList = ({ versions, onSelectVersion, onNavigateToVersion, onCreateVersion, selectedVersion, isCollaborator }) => (
110 <div className='version-list'>
112 data={{ name: i18n('Version'), status: i18n('Status'), description: i18n('Description') }}
114 <div className='version-list-items'>
115 {versions.map(version =>
119 onSelectVersion={() => onSelectVersion({version})}
120 onNavigateToVersion={() => onNavigateToVersion({version})}
121 onCreateVersion={() => onCreateVersion({version})}
122 isSelected={selectedVersion === version.id}
123 isCollaborator={isCollaborator} />
129 export default VersionList;