Improved interface for copying key after creation

This commit is contained in:
Vertmo 2018-11-05 22:28:52 +01:00 committed by Cassie Tarakajian
parent 4d4f636623
commit 78695d3983
4 changed files with 39 additions and 3 deletions

View file

@ -1,4 +1,6 @@
import React from 'react';
import { browserHistory } from 'react-router'; import { browserHistory } from 'react-router';
import ReactDom from 'react-dom';
import axios from 'axios'; import axios from 'axios';
import crypto from 'crypto'; import crypto from 'crypto';
import * as ActionTypes from '../../constants'; import * as ActionTypes from '../../constants';
@ -227,7 +229,31 @@ export function addApiKey(label) {
const hashedKey = Buffer.from(key).toString('base64'); const hashedKey = Buffer.from(key).toString('base64');
axios.put(`${ROOT_URL}/account/api-keys`, { label, hashedKey }, { withCredentials: true }) axios.put(`${ROOT_URL}/account/api-keys`, { label, hashedKey }, { withCredentials: true })
.then((response) => { .then((response) => {
window.alert(`Here is your key :\n${key}\nNote it somewhere, you won't be able to see it later !`); // window.alert(`Here is your key :\n${key}\nNote it somewhere, you won't be able to see it later !`);
const elt = React.createElement(
'tr', { className: 'new-key' },
React.createElement('td', {}, 'Here is your new key ;\ncopy it somewhere, you won\'t be able to see it later !'),
React.createElement(
'td', {},
React.createElement('input', {
id: 'key-to-copy', type: 'text', value: key, readOnly: true
})
),
React.createElement(
'td', {},
React.createElement('input', {
type: 'submit',
value: 'Copy to clipboard',
className: 'form__table-button-copy',
onClick: () => {
const inputKey = document.getElementById('key-to-copy');
inputKey.select();
document.execCommand('copy');
}
})
)
);
ReactDom.render(elt, document.getElementById('form__table_new_key'));
dispatch({ dispatch({
type: ActionTypes.ADDED_API_KEY, type: ActionTypes.ADDED_API_KEY,
user: response.data user: response.data

View file

@ -13,6 +13,7 @@ class APIKeyForm extends React.Component {
event.preventDefault(); event.preventDefault();
document.getElementById('addKeyForm').reset(); document.getElementById('addKeyForm').reset();
this.props.addApiKey(this.state.keyLabel); this.props.addApiKey(this.state.keyLabel);
this.state.keyLabel = '';
return false; return false;
} }
@ -39,12 +40,13 @@ class APIKeyForm extends React.Component {
/> />
</form> </form>
<table className="form__table"> <table className="form__table">
<tbody id="form__table_new_key"></tbody>
<tbody> <tbody>
{this.props.apiKeys && this.props.apiKeys.map(v => ( {this.props.apiKeys && this.props.apiKeys.map(v => (
<tr key={v.id}> <tr key={v.id}>
<td><b>{v.label}</b><br />Created on: {v.createdAt}</td> <td><b>{v.label}</b><br />Created on: {v.createdAt}</td>
<td>Last used on:<br /> {v.lastUsedAt}</td> <td>Last used on:<br /> {v.lastUsedAt}</td>
<td><button className="form__button-remove" onClick={() => this.removeKey(v.id)}>Delete</button></td> <td><button className="form__table-button-remove" onClick={() => this.removeKey(v.id)}>Delete</button></td>
</tr>))} </tr>))}
</tbody> </tbody>
</table> </table>

View file

@ -50,4 +50,7 @@
& tr:nth-child(even) { & tr:nth-child(even) {
background-color: #f2f2f2; background-color: #f2f2f2;
} }
& tr.new-key {
background-color: #f2f2f2;
}
} }

View file

@ -52,7 +52,7 @@
cursor: not-allowed; cursor: not-allowed;
} }
.form__button-remove { .form__table-button-remove {
@extend %forms-button; @extend %forms-button;
margin: 1rem 0 1rem 0; margin: 1rem 0 1rem 0;
@include themify() { @include themify() {
@ -68,3 +68,8 @@
} }
} }
} }
.form__table-button-copy{
@extend %forms-button;
margin: 1rem 0 1rem 0;
}