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