|
| 1 | +import { ALIAS_ADDRESS_TYPE, ED25519_ADDRESS_TYPE } from "@iota/iota.js"; |
1 | 2 | import React, { Component, ReactNode } from "react"; |
2 | 3 | import { Link } from "react-router-dom"; |
| 4 | +import { ServiceFactory } from "../../../factories/serviceFactory"; |
| 5 | +import { NodeConfigService } from "../../../services/nodeConfigService"; |
| 6 | +import { Bech32AddressHelper } from "../../../utils/bech32AddressHelper"; |
3 | 7 | import { ClipboardHelper } from "../../../utils/clipboardHelper"; |
| 8 | +import { NameHelper } from "../../../utils/nameHelper"; |
4 | 9 | import MessageButton from "../layout/MessageButton"; |
5 | 10 | import { Bech32AddressProps } from "./Bech32AddressProps"; |
| 11 | +import { Bech32AddressState } from "./Bech32AddressState"; |
6 | 12 |
|
7 | 13 | /** |
8 | 14 | * Component which will display an Bech32Address. |
9 | 15 | */ |
10 | | -class Bech32Address extends Component<Bech32AddressProps> { |
| 16 | +class Bech32Address extends Component<Bech32AddressProps, Bech32AddressState> { |
| 17 | + /** |
| 18 | + * Create a new instance of Bech 32 Address |
| 19 | + * @param props The props. |
| 20 | + */ |
| 21 | + constructor(props: Bech32AddressProps) { |
| 22 | + super(props); |
| 23 | + |
| 24 | + if (this.props.address) { |
| 25 | + const nodeConfigService = ServiceFactory.get<NodeConfigService>("node-config"); |
| 26 | + |
| 27 | + const hash = this.props.address.type === ED25519_ADDRESS_TYPE |
| 28 | + ? this.props.address?.pubKeyHash |
| 29 | + : (this.props.address.type === ALIAS_ADDRESS_TYPE |
| 30 | + ? this.props.address?.aliasId |
| 31 | + : this.props.address?.nftId); |
| 32 | + |
| 33 | + this.state = { |
| 34 | + addressDetails: Bech32AddressHelper.buildAddress( |
| 35 | + hash, |
| 36 | + nodeConfigService.getBech32Hrp(), |
| 37 | + this.props.address.type |
| 38 | + ) |
| 39 | + }; |
| 40 | + } else if (this.props.addressDetails) { |
| 41 | + this.state = { |
| 42 | + addressDetails: this.props.addressDetails |
| 43 | + }; |
| 44 | + } |
| 45 | + } |
| 46 | + |
11 | 47 | /** |
12 | 48 | * Render the component. |
13 | 49 | * @returns The node to render. |
14 | 50 | */ |
15 | 51 | public render(): ReactNode { |
16 | 52 | return ( |
17 | 53 | <div className="bech32-address"> |
18 | | - {this.props.addressDetails?.bech32 && ( |
| 54 | + {this.state.addressDetails.bech32 && ( |
19 | 55 | <React.Fragment> |
20 | 56 | <div className="card--label"> |
21 | | - Address |
| 57 | + {this.state.addressDetails.type |
| 58 | + ? NameHelper.getAddressTypeName(this.state.addressDetails.type) |
| 59 | + : "Address"} |
22 | 60 | </div> |
23 | 61 | <div className="card--value card--value__mono row"> |
24 | 62 | {this.props.activeLinks && ( |
25 | 63 | <Link |
26 | 64 | className="margin-r-t" |
27 | | - to={`/explorer/address/${this.props.addressDetails?.bech32}`} |
| 65 | + to={`/explorer/address/${this.state.addressDetails?.bech32}`} |
28 | 66 | > |
29 | | - {this.props.addressDetails.bech32} |
| 67 | + {this.state.addressDetails.bech32} |
30 | 68 | </Link> |
31 | 69 | )} |
32 | 70 | {!this.props.activeLinks && ( |
33 | | - <span className="margin-r-t">{this.props.addressDetails.bech32}</span> |
| 71 | + <span className="margin-r-t">{this.state.addressDetails.bech32}</span> |
34 | 72 | )} |
35 | 73 | <MessageButton |
36 | | - onClick={() => ClipboardHelper.copy(this.props.addressDetails?.bech32)} |
| 74 | + onClick={() => ClipboardHelper.copy(this.state.addressDetails?.bech32)} |
37 | 75 | buttonType="copy" |
38 | 76 | labelPosition="top" |
39 | 77 | /> |
40 | 78 | </div> |
41 | 79 | </React.Fragment> |
42 | 80 | )} |
43 | | - {this.props.addressDetails?.typeLabel && this.props.addressDetails?.hex && ( |
| 81 | + {this.props.showHexAddress && |
| 82 | + this.state.addressDetails?.hex && ( |
44 | 83 | <React.Fragment> |
45 | 84 | <div className="card--label"> |
46 | | - {this.props.addressDetails.typeLabel} Address |
| 85 | + {this.state.addressDetails.typeLabel} Address |
47 | 86 | </div> |
48 | 87 | <div className="card--value card--value__mono row"> |
49 | 88 | {this.props.activeLinks && ( |
50 | 89 | <Link |
51 | 90 | className="margin-r-t" |
52 | | - to={`/explorer/address/${this.props.addressDetails?.hex}`} |
| 91 | + to={`/explorer/address/${this.state.addressDetails?.hex}`} |
53 | 92 | > |
54 | | - {this.props.addressDetails?.hex} |
| 93 | + {this.state.addressDetails?.hex} |
55 | 94 | </Link> |
56 | 95 | )} |
57 | 96 | {!this.props.activeLinks && ( |
58 | | - <span className="margin-r-t">{this.props.addressDetails?.hex}</span> |
| 97 | + <span className="margin-r-t">{this.state.addressDetails?.hex}</span> |
59 | 98 | )} |
60 | 99 | <MessageButton |
61 | | - onClick={() => ClipboardHelper.copy(this.props.addressDetails?.hex)} |
| 100 | + onClick={() => ClipboardHelper.copy(this.state.addressDetails?.hex)} |
62 | 101 | buttonType="copy" |
63 | 102 | labelPosition="top" |
64 | 103 | /> |
|
0 commit comments