|
1 | | -import React, { useState } from 'react'; |
| 1 | +import React, { useState, useRef } from 'react'; |
2 | 2 | import PropTypes from 'prop-types'; |
3 | 3 | import { FormattedMessage, injectIntl, defineMessages } from 'react-intl'; |
4 | 4 | import { reduxForm, Field } from 'redux-form'; |
5 | | -import { OverlayTrigger, Tooltip, Row, Col } from 'react-bootstrap'; |
| 5 | +import { Overlay, Tooltip, Row, Col } from 'react-bootstrap'; |
6 | 6 | import { CopyToClipboard } from 'react-copy-to-clipboard'; |
7 | 7 |
|
8 | 8 | import FormBox from '../../widgets/FormBox'; |
@@ -80,38 +80,36 @@ const GenerateTokenForm = ({ |
80 | 80 | intl: { formatMessage }, |
81 | 81 | }) => { |
82 | 82 | const [copied, setCopied] = useState(false); |
| 83 | + const btnTarget = useRef(null); |
| 84 | + |
83 | 85 | return ( |
84 | 86 | <FormBox |
85 | 87 | title={<FormattedMessage id="app.generateTokenForm.title" defaultMessage="Generate Application Token" />} |
86 | 88 | type={submitSucceeded ? 'success' : undefined} |
87 | 89 | footer={ |
88 | 90 | <div className="text-center"> |
89 | 91 | <TheButtonGroup> |
90 | | - {lastToken && |
91 | | - (copied ? ( |
92 | | - <OverlayTrigger |
93 | | - trigger={['hover', 'focus', 'click']} |
94 | | - defaultShow={true} |
95 | | - placement="bottom" |
96 | | - onToggle={shown => !shown && setCopied(false)} |
97 | | - overlay={ |
98 | | - <Tooltip id={lastToken}> |
99 | | - <FormattedMessage id="app.generateTokenForm.copied" defaultMessage="Copied!" /> |
100 | | - </Tooltip> |
101 | | - }> |
102 | | - <Button variant="secondary" disabled> |
103 | | - <Icon icon="clipboard-check" gapRight={2} fixedWidth /> |
104 | | - <FormattedMessage id="app.generateTokenForm.copyToClipboard" defaultMessage="Copy to Clipboard" /> |
105 | | - </Button> |
106 | | - </OverlayTrigger> |
107 | | - ) : ( |
108 | | - <CopyToClipboard text={lastToken} onCopy={() => setCopied(true)}> |
109 | | - <Button variant="info"> |
110 | | - <CopyIcon gapRight={2} fixedWidth /> |
| 92 | + {lastToken && ( |
| 93 | + <> |
| 94 | + <CopyToClipboard text={lastToken} onCopy={() => setCopied(!copied)}> |
| 95 | + <Button variant={copied ? 'secondary' : 'info'} ref={btnTarget}> |
| 96 | + {copied ? ( |
| 97 | + <Icon icon="clipboard-check" gapRight={2} fixedWidth /> |
| 98 | + ) : ( |
| 99 | + <CopyIcon gapRight={2} fixedWidth /> |
| 100 | + )} |
111 | 101 | <FormattedMessage id="app.generateTokenForm.copyToClipboard" defaultMessage="Copy to Clipboard" /> |
112 | 102 | </Button> |
113 | 103 | </CopyToClipboard> |
114 | | - ))} |
| 104 | + <Overlay target={btnTarget.current} show={copied} placement="bottom"> |
| 105 | + {props => ( |
| 106 | + <Tooltip id="token-copied" {...props}> |
| 107 | + <FormattedMessage id="app.generateTokenForm.copied" defaultMessage="Copied!" /> |
| 108 | + </Tooltip> |
| 109 | + )} |
| 110 | + </Overlay> |
| 111 | + </> |
| 112 | + )} |
115 | 113 |
|
116 | 114 | <SubmitButton |
117 | 115 | id="generateToken" |
|
0 commit comments