Added Export Component in Actionbar => export Addressbook (#2153) (#2847)

This commit is contained in:
Nicolas Gotchac 2016-10-24 18:27:35 +02:00 committed by Gav Wood
parent bc81ae0407
commit 1b42e9a9af
5 changed files with 85 additions and 1 deletions

View File

@ -109,6 +109,7 @@
"blockies": "0.0.2", "blockies": "0.0.2",
"bytes": "^2.4.0", "bytes": "^2.4.0",
"es6-promise": "^3.2.1", "es6-promise": "^3.2.1",
"file-saver": "^1.3.3",
"format-json": "^1.0.3", "format-json": "^1.0.3",
"format-number": "^2.0.1", "format-number": "^2.0.1",
"geopattern": "^1.2.3", "geopattern": "^1.2.3",

View File

@ -0,0 +1,57 @@
// Copyright 2015, 2016 Ethcore (UK) Ltd.
// This file is part of Parity.
// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
import React, { Component, PropTypes } from 'react';
import FileSaver from 'file-saver';
import FileDownloadIcon from 'material-ui/svg-icons/file/file-download';
import { Button } from '../../';
class ActionbarExport extends Component {
static propTypes = {
content: PropTypes.oneOfType([
PropTypes.string,
PropTypes.object
]).isRequired,
filename: PropTypes.string.isRequired,
className: PropTypes.string
}
render () {
const { className } = this.props;
return (
<Button
className={ className }
icon={ <FileDownloadIcon /> }
label='export'
onClick={ this.onDownloadBackup } />
);
}
onDownloadBackup = () => {
const { filename, content } = this.props;
const text = (typeof content === 'string')
? content
: JSON.stringify(content, null, 4);
const blob = new Blob([ text ], { type: 'text/plain;charset=utf-8' });
FileSaver.saveAs(blob, filename);
}
}
export default ActionbarExport;

View File

@ -0,0 +1,17 @@
// Copyright 2015, 2016 Ethcore (UK) Ltd.
// This file is part of Parity.
// Parity is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
// Parity is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
// You should have received a copy of the GNU General Public License
// along with Parity. If not, see <http://www.gnu.org/licenses/>.
export default from './export';

View File

@ -15,6 +15,7 @@
// along with Parity. If not, see <http://www.gnu.org/licenses/>. // along with Parity. If not, see <http://www.gnu.org/licenses/>.
import Actionbar from './Actionbar'; import Actionbar from './Actionbar';
import ActionbarExport from './Actionbar/Export';
import ActionbarSearch from './Actionbar/Search'; import ActionbarSearch from './Actionbar/Search';
import ActionbarSort from './Actionbar/Sort'; import ActionbarSort from './Actionbar/Sort';
import Badge from './Badge'; import Badge from './Badge';
@ -39,6 +40,7 @@ import TxHash from './TxHash';
export { export {
Actionbar, Actionbar,
ActionbarExport,
ActionbarSearch, ActionbarSearch,
ActionbarSort, ActionbarSort,
AddressSelect, AddressSelect,

View File

@ -22,7 +22,7 @@ import { uniq } from 'lodash';
import List from '../Accounts/List'; import List from '../Accounts/List';
import { AddAddress } from '../../modals'; import { AddAddress } from '../../modals';
import { Actionbar, ActionbarSearch, ActionbarSort, Button, Page } from '../../ui'; import { Actionbar, ActionbarExport, ActionbarSearch, ActionbarSort, Button, Page } from '../../ui';
import styles from './addresses.css'; import styles from './addresses.css';
@ -93,6 +93,8 @@ class Addresses extends Component {
} }
renderActionbar () { renderActionbar () {
const { contacts } = this.props;
const buttons = [ const buttons = [
<Button <Button
key='newAddress' key='newAddress'
@ -100,6 +102,11 @@ class Addresses extends Component {
label='new address' label='new address'
onClick={ this.onOpenAdd } />, onClick={ this.onOpenAdd } />,
<ActionbarExport
key='exportAddressbook'
content={ contacts }
filename='addressbook.json' />,
this.renderSearchButton(), this.renderSearchButton(),
this.renderSortButton() this.renderSortButton()
]; ];