William O'Beirne a043334685 Node Refactor (#1603)
* Initial work on refactoring node definitions to reduce number of places theyre defined, amount of copy pasting.

* Use makeAutoNodeNAme instead of manually appending _auto

* Add getNetVersion to list of unsupported methods

* PR feedback

* Rework web template node selector to be a network selector. Refactor some types to help with that. Better handle removing custom nodes.

* Remove color dropdown.

* Fix selecting custom networks. Show notification if change network intent fails.

* Use selectors for current node / network instead of intuiting from nodeSelection

* Add id key to all networks, simplify add and remove custom node and network functions.

* Fix a lot of uses of network.name to use network.id instead.

* Dont allow network chainid conflicts

* Fix web3 network by chainid

* Add testnet badge to network selector

* Change nomenclature from change(Node|Network)(Intent)? to change(Node|Network)(Requested|Succeeded)

* tscheck

* Better code for chainid collision

* Remove console logs

* Fix tests

* Network selector becomes self contained component used both by web header and electron nav.

* Dont select node again

* Additional title text

* tscheck

* Custom node behavior in Electron

* Close panel too

* Convert node label data into selector function

* tscheck

* Parens & space
2018-05-29 09:51:42 -05:00

62 lines
1.6 KiB
TypeScript

import React from 'react';
import { connect } from 'react-redux';
import classnames from 'classnames';
import { translateRaw } from 'translations';
import { TRemoveCustomNode, removeCustomNode } from 'actions/config';
import { NodeConfig } from 'types/node';
import './NodeOption.scss';
interface OwnProps {
node: NodeConfig;
isSelected: boolean;
isAutoSelected: boolean;
select(node: NodeConfig): void;
}
interface DispatchProps {
removeCustomNode: TRemoveCustomNode;
}
type Props = OwnProps & DispatchProps;
class NodeOption extends React.PureComponent<Props> {
public render() {
const { node, isSelected, isAutoSelected } = this.props;
return (
<div className="NodeOption" key={node.service}>
<div
className={classnames(
'NodeOption-name',
isSelected && 'is-selected',
isAutoSelected && 'is-auto-selected'
)}
title={translateRaw('NETWORKS_SWITCH_NODE', {
$node: node.isCustom ? node.name : node.service,
$network: node.network
})}
onClick={this.handleSelect}
>
{node.isCustom ? node.name : node.service}
</div>
{node.isCustom && (
<button className="NodeOption-remove" onClick={this.handleRemove}>
<i className="fa fa-times-circle" />
</button>
)}
</div>
);
}
private handleSelect = () => {
this.props.select(this.props.node);
};
private handleRemove = () => {
if (this.props.node.isCustom) {
this.props.removeCustomNode(this.props.node.id);
}
};
}
export default connect(undefined, { removeCustomNode })(NodeOption);