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