查找设备和实体
This commit is contained in:
parent
8e45793111
commit
f7d4af5d9c
56
frontend/src/components/LookupDevice.js
Normal file
56
frontend/src/components/LookupDevice.js
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
import React, { Component } from 'react';
|
||||||
|
import ManageDevice from './ManageDevice';
|
||||||
|
|
||||||
|
import { Input, Divider } from 'antd';
|
||||||
|
|
||||||
|
const { Search } = Input;
|
||||||
|
|
||||||
|
class LookupDevice extends Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
match: {
|
||||||
|
params: {
|
||||||
|
deviceId: 1
|
||||||
|
}
|
||||||
|
},
|
||||||
|
searched: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lookupDevice(value) {
|
||||||
|
this.setState({
|
||||||
|
match: {
|
||||||
|
params: {
|
||||||
|
deviceId: value
|
||||||
|
}
|
||||||
|
},
|
||||||
|
searched: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
Search for any device.
|
||||||
|
</p>
|
||||||
|
<Search
|
||||||
|
placeholder="Device ID"
|
||||||
|
onSearch={value => this.lookupDevice(value)}
|
||||||
|
size="large"
|
||||||
|
enterButton
|
||||||
|
/>
|
||||||
|
{this.state.searched &&
|
||||||
|
<div>
|
||||||
|
<Divider />
|
||||||
|
<ManageDevice match={this.state.match} />
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LookupDevice;
|
121
frontend/src/components/LookupEntity.js
Normal file
121
frontend/src/components/LookupEntity.js
Normal file
@ -0,0 +1,121 @@
|
|||||||
|
import DeviceManager, { getDefaultAccount } from '../DeviceManager';
|
||||||
|
import ethUtil from 'ethereumjs-util';
|
||||||
|
|
||||||
|
import React, { Component } from 'react';
|
||||||
|
import { Link } from 'react-router-dom';
|
||||||
|
import { Button, Tag, Card, Input, Divider, Timeline, message } from 'antd';
|
||||||
|
|
||||||
|
const Search = Input.Search;
|
||||||
|
|
||||||
|
const eventsToSave = ['EntityDataUpdated', 'DeviceCreated', 'DeviceTransfered', 'DeviceSigned'];
|
||||||
|
|
||||||
|
class LookupEntity extends Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
loading: false,
|
||||||
|
searchValue: '',
|
||||||
|
address: this.props.match.params.address,
|
||||||
|
data: [],
|
||||||
|
searched: false
|
||||||
|
}
|
||||||
|
|
||||||
|
this.lookupEntity = this.lookupEntity.bind(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
componentWillMount() {
|
||||||
|
const { address } = this.state;
|
||||||
|
if (address != null) {
|
||||||
|
this.reloadWithAddress(address);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
reloadWithAddress(address) {
|
||||||
|
this.setState({
|
||||||
|
searchValue: address
|
||||||
|
})
|
||||||
|
this.lookupEntity(address).then(() => { });
|
||||||
|
}
|
||||||
|
|
||||||
|
async lookupEntity(address) {
|
||||||
|
if (!ethUtil.isValidAddress(address)) {
|
||||||
|
message.error('Invalid entity address.');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
this.setState({
|
||||||
|
loading: true
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
let instance = await DeviceManager;
|
||||||
|
|
||||||
|
let allEvents = instance.allEvents({ fromBlock: 0, toBlock: 'latest' });
|
||||||
|
allEvents.get((error, logs) => {
|
||||||
|
let filteredData = logs.filter(el => eventsToSave.includes(el.event) && (el.args.owner === address || el.args.oldOwner === address || el.args.newOwner === address || el.args.signer === address));
|
||||||
|
if (!error) {
|
||||||
|
this.setState({
|
||||||
|
address: address,
|
||||||
|
data: filteredData,
|
||||||
|
loading: false,
|
||||||
|
searched: true
|
||||||
|
})
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.log(error);
|
||||||
|
message.error(error.message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div>
|
||||||
|
<p>
|
||||||
|
Search for any entity.
|
||||||
|
</p>
|
||||||
|
<Search
|
||||||
|
placeholder="Input address"
|
||||||
|
onSearch={value => this.lookupEntity(value)}
|
||||||
|
size="large"
|
||||||
|
enterButton
|
||||||
|
value={this.state.searchValue}
|
||||||
|
onChange={(e) => this.setState({ searchValue: e.target.value })}
|
||||||
|
/>
|
||||||
|
<br /><br />
|
||||||
|
<Button size="small" onClick={() => this.setState({ searchValue: getDefaultAccount() })}>Set to my address</Button>
|
||||||
|
{this.state.searched &&
|
||||||
|
<div>
|
||||||
|
<Divider />
|
||||||
|
<Card loading={this.state.loading} title={'Historical events for entity (oldest to newest)'}>
|
||||||
|
{this.state.data.length !== 0 ?
|
||||||
|
<div>
|
||||||
|
<p style={{ marginBottom: '20px' }}>Events that are filtered are {eventsToSave.join(', ')} </p>
|
||||||
|
<Timeline style={{ marginTop: '10px' }}>
|
||||||
|
{this.state.data.map(el => {
|
||||||
|
if (el.event === 'EntityDataUpdated')
|
||||||
|
return <Timeline.Item>Entity data updated to <code>{el.args.newData}</code></Timeline.Item>
|
||||||
|
if (el.event === 'DeviceCreated')
|
||||||
|
return <Timeline.Item color='green'>Created device with <Link to={"/manage-device/" + el.args.deviceId.toNumber()}><Tag>ID {el.args.deviceId.toNumber()}</Tag></Link>, identifier <code>{el.args.identifier}</code>, metadata hash <code>{el.args.metadataHash}</code> and firmware hash <code>{el.args.firmwareHash}</code></Timeline.Item>
|
||||||
|
if (el.event === 'DeviceTransfered')
|
||||||
|
return <Timeline.Item color='orange'>Device with <Link to={"/manage-device/" + el.args.deviceId.toNumber()}><Tag>ID {el.args.deviceId.toNumber()}</Tag></Link>transfered {el.args.newOwner === this.state.address && <span>from <Tag onClick={() => this.reloadWithAddress(el.args.oldOwner)}>{el.args.oldOwner}</Tag></span>}{el.args.oldOwner === this.state.address && <span>to <Tag onClick={() => this.reloadWithAddress(el.args.newOwner)}>{el.args.newOwner}</Tag></span>}</Timeline.Item>
|
||||||
|
if (el.event === 'DeviceSigned')
|
||||||
|
return <Timeline.Item color='purple'>Signed device with <Link to={"/manage-device/" + el.args.deviceId.toNumber()}><Tag>ID {el.args.deviceId.toNumber()}</Tag></Link></Timeline.Item>
|
||||||
|
else
|
||||||
|
return null
|
||||||
|
})}
|
||||||
|
</Timeline>
|
||||||
|
</div>
|
||||||
|
:
|
||||||
|
<p><em>empty</em></p>
|
||||||
|
}
|
||||||
|
</Card>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
</div>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export default LookupEntity;
|
Loading…
Reference in New Issue
Block a user