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