header-ui
Version:
Header UI
176 lines (157 loc) • 5.65 kB
JSX
import React from 'react';
import Popover from '@material-ui/core/Popover';
import Button from '@material-ui/core/Button';
import axios from 'axios';
require('./style.css');
class Notifications extends React.Component {
constructor(props) {
super(props);
this.state = {
open: false,
disableSendBtn: true,
value: '',
};
}
handleTouchTap = event => {
event.preventDefault();
this.setState({
open: true,
anchorEl: event.currentTarget,
feedbackSent: false,
});
this.props.updateBeacon(this.props.beacons, 'dashboardFeedback');
};
handleFeedbackBeaconClick() {
this.props.updateBeacon(this.props.beacons, 'dashboardFeedback');
}
handleRequestClose = () => {
this.setState({ open: false });
};
handleChange(e) {
const value = e.target.value;
if (value) {
this.setState({ disableSendBtn: false, value });
} else {
this.setState({ disableSendBtn: true, value: '' });
}
}
sendFeedback() {
if (this.state.value) {
// post to slack webhook, make chages here for updating webhook
axios({
url:
'https://hooks.slack.com/services/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',
method: 'post',
withCredentials: false,
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
data: {
attachments: [
{
fields: [
{
title: 'Name',
value: this.props.currentUser.user.name,
short: false,
},
{
title: 'Email',
value: this.props.currentUser.user.email,
short: false,
},
{
title: 'Text',
value: this.state.value,
short: false,
},
{
title: 'From',
value: this.props.appName,
short: false,
},
],
},
],
},
}).then(
res => {
this.setState({ value: '' });
},
err => {
this.setState({ value: '' });
},
);
this.setState({ feedbackSent: true, value: '' });
}
}
render() {
return (
<div>
<Button className="header-icon" onClick={this.handleTouchTap.bind(this)}>
<svg
xmlns="http://www.w3.org/2000/svg"
width="29"
height="29"
viewBox="0 -4 26 26"
>
<g fill="none" fillRule="evenodd">
<path
fill="#9e9e9e"
d="M2.666 11.995a304.44 304.44 0 0 1-1.841-.776s-.41-.14-.558-.638c-.148-.498-.187-1.058 0-1.627.187-.57.558-.735.558-.735s9.626-4.07 13.64-5.43c.53-.179 1.18-.156 1.18-.156C17.607 2.702 19 6.034 19 9.9c0 3.866-1.62 6.808-3.354 6.84 0 0-.484.1-1.18-.135-2.189-.733-5.283-1.946-7.971-3.035-.114-.045-.31-.13-.338.177v.589c0 .56-.413.833-.923.627l-1.405-.566c-.51-.206-.923-.822-.923-1.378v-.63c.018-.29-.162-.362-.24-.394zM15.25 15.15c1.367 0 2.475-2.462 2.475-5.5s-1.108-5.5-2.475-5.5-2.475 2.462-2.475 5.5 1.108 5.5 2.475 5.5z"
/>
</g>
</svg>
</Button>
<Popover
open={this.state.open}
anchorEl={this.state.anchorEl}
anchorOrigin={{ horizontal: 'right', vertical: 'bottom' }}
targetOrigin={{ horizontal: 'right', vertical: 'top' }}
onClose={this.handleRequestClose}
className="feedbackpopover"
>
<p className="headingpop">Feedback</p>
<textarea
cols="30"
rows="4"
placeholder="Your thoughts?"
className={!this.state.feedbackSent ? 'feedback-textarea' : 'hide'}
onChange={this.handleChange.bind(this)}
value={this.state.value}
/>
<br />
<div className={!this.state.feedbackSent ? '' : 'hide'}>
<button
className="feedback-sendbtn"
onClick={this.sendFeedback.bind(this)}
disabled={this.state.disableSendBtn}
>
Send Feedback
</button>
</div>
<div className={this.state.feedbackSent ? 'feedbackSent' : 'hide'}>
<Button touch style={{ marginLeft: '37%', marginTop: -30 }}>
<svg
xmlns="http://www.w3.org/2000/svg"
width="50"
height="50"
viewBox="0 -4 26 26"
>
<g fill="none" fillRule="evenodd">
<path
fill="#549afc"
d="M2.666 11.995a304.44 304.44 0 0 1-1.841-.776s-.41-.14-.558-.638c-.148-.498-.187-1.058 0-1.627.187-.57.558-.735.558-.735s9.626-4.07 13.64-5.43c.53-.179 1.18-.156 1.18-.156C17.607 2.702 19 6.034 19 9.9c0 3.866-1.62 6.808-3.354 6.84 0 0-.484.1-1.18-.135-2.189-.733-5.283-1.946-7.971-3.035-.114-.045-.31-.13-.338.177v.589c0 .56-.413.833-.923.627l-1.405-.566c-.51-.206-.923-.822-.923-1.378v-.63c.018-.29-.162-.362-.24-.394zM15.25 15.15c1.367 0 2.475-2.462 2.475-5.5s-1.108-5.5-2.475-5.5-2.475 2.462-2.475 5.5 1.108 5.5 2.475 5.5z"
/>
</g>
</svg>
</Button>
<span className="thanks-text">Thanks</span>
<span className="note-text">
We really appreciate your feedback!
</span>
</div>
</Popover>
</div>
);
}
}
export default Notifications;