React version upgrade
[sdc.git] / dox-sequence-diagram-ui / src / main / webapp / lib / ecomp / asdc / sequencer / components / editor / components / designer / components / lifeline / LifelineNew.jsx
1 /*!
2  * Copyright © 2016-2017 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
13  * or implied. See the License for the specific language governing
14  * permissions and limitations under the License.
15  */
16
17 import React from 'react';
18 import PropTypes from 'prop-types';
19 import { DragSource } from 'react-dnd';
20
21 import Icon from '../../../../../icons/Icon';
22 import iconPlus from '../../../../../../../../../../res/ecomp/asdc/sequencer/sprites/icons/plus.svg';
23 import iconHandle from '../../../../../../../../../../res/ecomp/asdc/sequencer/sprites/icons/handle.svg';
24
25 /**
26  * LHS lifeline row view.
27  */
28 class LifelineNew extends React.Component {
29
30   // ///////////////////////////////////////////////////////////////////////////////////////////////
31
32   /**
33    * Construct view.
34    * @param props element properties.
35    * @param context react context.
36    */
37   constructor(props, context) {
38     super(props, context);
39
40     // Bindings.
41
42     this.onClickAdd = this.onClickAdd.bind(this);
43   }
44
45   // ///////////////////////////////////////////////////////////////////////////////////////////////
46
47   /**
48    * Handle click event.
49    */
50   onClickAdd() {
51     this.props.designer.addLifeline();
52   }
53
54   // ///////////////////////////////////////////////////////////////////////////////////////////////
55
56   /**
57    * Render view.
58    * @returns {*}
59    */
60   render() {
61     const { connectDragSource } = this.props;
62     return connectDragSource(
63       <div className="asdcs-designer-lifeline asdcs-designer-lifeline-new">
64         <table className="asdcs-designer-layout asdcs-designer-lifeline-new">
65           <tbody>
66             <tr>
67               <td>
68                 <div className="asdcs-designer-sort asdcs-designer-icon">
69                   <Icon glyph={iconHandle} />
70                 </div>
71               </td>
72               <td>
73                 <div className="asdcs-designer-label" onClick={this.onClickAdd}>
74                   Add Lifeline
75                 </div>
76               </td>
77               <td>
78                 <div className="asdcs-designer-icon" onClick={this.onClickAdd}>
79                   <Icon glyph={iconPlus} />
80                 </div>
81               </td>
82               <td>&nbsp;</td>
83             </tr>
84           </tbody>
85         </table>
86       </div>
87     );
88   }
89 }
90
91 /** Element properties. */
92 LifelineNew.propTypes = {
93   designer: PropTypes.object.isRequired,
94   lifelines: PropTypes.object.isRequired,
95   connectDragSource: PropTypes.func.isRequired,
96 };
97
98 /** DND. */
99 const source = {
100   beginDrag(props) {
101     return { id: props.id };
102   },
103 };
104
105 /** DND. */
106 const collect = function collection(connect, monitor) {
107   return {
108     connectDragSource: connect.dragSource(),
109     isDragging: monitor.isDragging(),
110   };
111 };
112
113 export default DragSource('lifeline-new', source, collect)(LifelineNew);