grafana/public/app/features/users/InviteeRow.tsx
lzd 50b4695cf5 Admin/user: fix textarea postion in 'Pending Invites' to avoid page scrolling (#19288)
* hide textarea element after click 'Copy Invite' button on firefox
2019-09-23 12:50:35 +02:00

61 lines
1.4 KiB
TypeScript

import React, { createRef, PureComponent } from 'react';
import { connect } from 'react-redux';
import { Invitee } from 'app/types';
import { revokeInvite } from './state/actions';
export interface Props {
invitee: Invitee;
revokeInvite: typeof revokeInvite;
}
class InviteeRow extends PureComponent<Props> {
private copyUrlRef = createRef<HTMLTextAreaElement>();
copyToClipboard = () => {
const node = this.copyUrlRef.current;
if (node) {
node.select();
document.execCommand('copy');
}
};
render() {
const { invitee, revokeInvite } = this.props;
return (
<tr>
<td>{invitee.email}</td>
<td>{invitee.name}</td>
<td className="text-right">
<button className="btn btn-inverse btn-small" onClick={this.copyToClipboard}>
<textarea
readOnly={true}
value={invitee.url}
style={{ position: 'absolute', bottom: 0, right: 0, opacity: 0, zIndex: -10 }}
ref={this.copyUrlRef}
/>
Copy Invite
</button>
&nbsp;
</td>
<td>
<button className="btn btn-danger btn-small" onClick={() => revokeInvite(invitee.code)}>
<i className="fa fa-remove" />
</button>
</td>
</tr>
);
}
}
const mapDispatchToProps = {
revokeInvite,
};
export default connect(
() => {
return {};
},
mapDispatchToProps
)(InviteeRow);