编辑实体信息
This commit is contained in:
parent
b4f10ebb9a
commit
6cb6f67efb
135
frontend/src/components/EditEntity.js
Normal file
135
frontend/src/components/EditEntity.js
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
import getWeb3 from '../utils/web3';
|
||||||
|
import DeviceManager, { getDefaultAccount } from '../DeviceManager';
|
||||||
|
|
||||||
|
import React, { Component } from 'react';
|
||||||
|
import { Card, Input, Button, Icon, message, notification } from 'antd';
|
||||||
|
|
||||||
|
const { TextArea } = Input;
|
||||||
|
|
||||||
|
const openNotificationWithIcon = (type, message, description) => {
|
||||||
|
notification[type]({
|
||||||
|
message,
|
||||||
|
description
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
class EditEntity extends Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
myData: null,
|
||||||
|
showEdit: false,
|
||||||
|
web3: null,
|
||||||
|
instance: null,
|
||||||
|
loading: true,
|
||||||
|
filter: null
|
||||||
|
}
|
||||||
|
|
||||||
|
this.toggleEdit = this.toggleEdit.bind(this);
|
||||||
|
this.commonChange = this.commonChange.bind(this);
|
||||||
|
this.saveMyData = this.saveMyData.bind(this);
|
||||||
|
this.updateMyData = this.updateMyData.bind(this);
|
||||||
|
this.watchForChanges = this.watchForChanges.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
async componentWillMount() {
|
||||||
|
try {
|
||||||
|
let results = await getWeb3;
|
||||||
|
let instance = await DeviceManager;
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
web3: results.web3,
|
||||||
|
instance
|
||||||
|
});
|
||||||
|
|
||||||
|
await this.updateMyData();
|
||||||
|
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
message.error(error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
watchForChanges() {
|
||||||
|
let filter = this.state.web3.eth.filter('latest', (error, result) => {
|
||||||
|
if (!error) {
|
||||||
|
openNotificationWithIcon('success', 'Transaction mined', 'Your entity data has been updated.');
|
||||||
|
this.state.filter.stopWatching();
|
||||||
|
this.updateMyData();
|
||||||
|
} else {
|
||||||
|
console.error(error);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
filter
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
async updateMyData() {
|
||||||
|
try {
|
||||||
|
let result = await this.state.instance.ownerToEntity(getDefaultAccount());
|
||||||
|
this.setState({
|
||||||
|
myData: result,
|
||||||
|
myDataNew: result,
|
||||||
|
loading: false
|
||||||
|
})
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
message.error(error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
toggleEdit() {
|
||||||
|
this.setState(prevState => ({
|
||||||
|
showEdit: !prevState.showEdit
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
commonChange(e) {
|
||||||
|
this.setState({
|
||||||
|
[e.target.name]: e.target.value
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
async saveMyData() {
|
||||||
|
try {
|
||||||
|
if (this.state.myDataNew !== this.state.myData) {
|
||||||
|
let instance = await DeviceManager;
|
||||||
|
await instance.updateEntityData(this.state.myDataNew, { from: getDefaultAccount() });
|
||||||
|
this.watchForChanges();
|
||||||
|
openNotificationWithIcon('info', 'Transaction sent', 'Once mined, your entity data will be updated.');
|
||||||
|
this.setState({
|
||||||
|
loading: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
this.toggleEdit();
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
message.error(error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
Edit your entity details.
|
||||||
|
</p>
|
||||||
|
<Card style={{ maxWidth: '500px' }} loading={this.state.loading} title={getDefaultAccount()}>
|
||||||
|
{this.state.showEdit ?
|
||||||
|
<div>
|
||||||
|
<TextArea name="myDataNew" value={this.state.myDataNew} onChange={this.commonChange} />
|
||||||
|
<Button type="primary" style={{ marginTop: '10px' }} onClick={this.saveMyData}>Save</Button>
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
<p>{this.state.myData || <em>empty data</em>} <a><Icon type="edit" onClick={this.toggleEdit} /></a></p>
|
||||||
|
}
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default EditEntity;
|
Loading…
Reference in New Issue
Block a user