From efa037d34be7b1570efdc767c79fad8d4005f10e Mon Sep 17 00:00:00 2001
From: Michael Lando <ml636r@att.com>
Date: Sun, 19 Feb 2017 12:57:33 +0200
Subject: Add new code new version

Change-Id: Ic02a76313503b526f17c3df29eb387a29fe6a42a
Signed-off-by: Michael Lando <ml636r@att.com>
---
 .../src/nfvo-components/panel/SlidePanel.jsx       | 109 +++++++++++++++++++++
 1 file changed, 109 insertions(+)
 create mode 100644 openecomp-ui/src/nfvo-components/panel/SlidePanel.jsx

(limited to 'openecomp-ui/src/nfvo-components/panel/SlidePanel.jsx')

diff --git a/openecomp-ui/src/nfvo-components/panel/SlidePanel.jsx b/openecomp-ui/src/nfvo-components/panel/SlidePanel.jsx
new file mode 100644
index 0000000000..10c5326300
--- /dev/null
+++ b/openecomp-ui/src/nfvo-components/panel/SlidePanel.jsx
@@ -0,0 +1,109 @@
+import React from 'react';
+import FontAwesome from 'react-fontawesome';
+import ReactDOM from 'react-dom';
+
+class SlidePanel extends React.Component {
+
+	static PropTypes = {
+		direction: React.PropTypes.string.isRequired,
+		className: React.PropTypes.string,
+		title: React.PropTypes.string,
+		isOpen: React.PropTypes.bool
+	};
+
+	static defaultProps = {
+		title: '',
+		className: '',
+		isOpen: true
+	};
+
+	state = {
+		isOpen: this.props.isOpen,
+		direction: this.props.direction,
+		width: 0,
+		arrowWidth: 0
+	};
+
+	componentDidMount() {
+		this.setSliderPosition();
+	}
+
+	componentDidUpdate() {
+		this.setSliderPosition();
+	}
+
+	render() {
+
+		let {children, className} = this.props;
+		let {isOpen} = this.state;
+
+		return (
+			<div className={ `slide-panel ${className}`}>
+				{this.renderHeader(isOpen)}
+				<div className={'slide-panel-content ' + (isOpen ? 'opened' : 'closed')}>{children}</div>
+			</div>
+		);
+	}
+
+	renderHeader(isOpen) {
+		let {direction: initialDirection, title} = this.props;
+		let {direction: currentDirection} = this.state;
+
+		let iconName = currentDirection === 'right' ? 'angle-double-right collapse-double-icon' : 'angle-double-left collapse-double-icon';
+
+		let awestyle = {padding: '5px'};
+
+		if (!isOpen && initialDirection === 'right') {
+			awestyle.marginLeft = '-1px';
+		}
+		return (
+			<div className='slide-panel-header'>
+				{ initialDirection === 'left' && <span className='slide-panel-header-title'>{title}</span>}
+				<FontAwesome
+					ref='arrowIcon'
+					style={awestyle}
+					onClick={this.handleClick}
+					className='pull-right'
+					name={iconName}
+					size='2x'/>
+				{ initialDirection === 'right' && <span className='slide-panel-header-title'>{title}</span>}
+			</div>
+		);
+	}
+
+	handleClick = () => {
+		this.setState({
+			isOpen: !this.state.isOpen,
+			direction: this.state.direction === 'left' ? 'right' : 'left'
+		});
+	}
+
+	setSliderPosition = () => {
+
+		let el = ReactDOM.findDOMNode(this);
+		let {style} = el;
+
+		let {direction: initialDirection} = this.props;
+		let arrowIconSize = Math.floor(ReactDOM.findDOMNode(this.refs.arrowIcon).getBoundingClientRect().width) * 2;
+		if (!this.state.isOpen) {
+			if (this.props.direction === 'left') {
+				style.left = arrowIconSize - el.getBoundingClientRect().width + 'px';
+			}
+			if (initialDirection === 'right') {
+				style.right = arrowIconSize - el.getBoundingClientRect().width + 'px';
+			}
+		}
+		else {
+			if (initialDirection === 'left') {
+				style.left = '0px';
+			}
+
+			if (this.props.direction === 'right') {
+				style.right = '0px';
+			}
+		}
+	}
+
+}
+
+export default SlidePanel;
\ No newline at end of file
-- 
cgit 1.2.3-korg

