forked from lthn/blockchain
Merge remote-tracking branch 'origin/frontend'
This commit is contained in:
commit
10264f7fcf
32 changed files with 157 additions and 144 deletions
|
|
@ -123,7 +123,7 @@ ENABLE_SHARED_PCH_EXECUTABLE(daemon)
|
|||
|
||||
add_executable(connectivity_tool ${CONN_TOOL})
|
||||
add_dependencies(connectivity_tool version)
|
||||
target_link_libraries(connectivity_tool currency_core crypto common zlibstatic ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
|
||||
target_link_libraries(connectivity_tool currency_core crypto common zlibstatic ${CMAKE_THREAD_LIBS_INIT} ${Boost_LIBRARIES})
|
||||
ENABLE_SHARED_PCH(CONN_TOOL)
|
||||
ENABLE_SHARED_PCH_EXECUTABLE(connectivity_tool)
|
||||
|
||||
|
|
|
|||
|
|
@ -996,7 +996,7 @@ bool handle_download_peer_log(po::variables_map& vm)
|
|||
}
|
||||
|
||||
std::cout << "Remote log from offset " << start_offset << " to offset " << end_offset << " (" << end_offset - start_offset << " bytes) " <<
|
||||
"was successfully downloaded to " << local_filename;
|
||||
"was successfully downloaded to " << local_filename << ENDL;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,6 @@ namespace currency
|
|||
std::string print_kv_structure(const NOTIFY_REQUEST_CHAIN::request& v)
|
||||
{
|
||||
std::stringstream ss;
|
||||
size_t i = 0;
|
||||
ss << "block_ids: {" << ENDL << print_container_of_hashs(v.block_ids, 2) << ENDL << "}";
|
||||
return ss.str();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -166,10 +166,11 @@
|
|||
"BUTTON_ASSIGN": "Assign",
|
||||
"BUTTON_CANCEL": "Cancel",
|
||||
"FORM_ERRORS": {
|
||||
"NAME_REQUIRED": "Name is required.",
|
||||
"NAME_WRONG": "Alias has wrong name.",
|
||||
"NAME_LENGTH": "The alias must be 6-25 characters long.",
|
||||
"NAME_EXISTS": "Alias name already exists."
|
||||
"NAME_REQUIRED": "Name is required",
|
||||
"NAME_WRONG": "Alias has wrong name",
|
||||
"NAME_LENGTH": "The alias must be 6-25 characters long",
|
||||
"NAME_EXISTS": "Alias name already exists",
|
||||
"NO_MONEY": "You do not have enough funds to assign this alias"
|
||||
},
|
||||
"ONE_ALIAS": "You can create only one alias per wallet",
|
||||
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
|
||||
|
|
|
|||
|
|
@ -41,6 +41,13 @@ app-sidebar {
|
|||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
|
||||
@include themify($themes) {
|
||||
background-color: themed(blueTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
.indicator {
|
||||
|
||||
@include themify($themes) {
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -53,6 +53,7 @@ export class InputValidateDirective {
|
|||
const cursorPosition = (<HTMLInputElement>event.target).selectionEnd;
|
||||
(<HTMLInputElement>event.target).value = currentValue;
|
||||
(<HTMLInputElement>event.target).setSelectionRange(cursorPosition, cursorPosition);
|
||||
(<HTMLInputElement>event.target).dispatchEvent(new Event('input'));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,14 +19,14 @@ export class TransactionDetailsComponent implements OnInit, OnDestroy {
|
|||
constructor(private variablesService: VariablesService, private backendService: BackendService, private intToMoneyPipe: IntToMoneyPipe) {}
|
||||
|
||||
ngOnInit() {
|
||||
for (const input in this.transaction.td['rcv']) {
|
||||
if (this.transaction.td['rcv'].hasOwnProperty(input)) {
|
||||
this.inputs.push(this.intToMoneyPipe.transform(this.transaction.td['rcv'][input]));
|
||||
for (const input in this.transaction.td['spn']) {
|
||||
if (this.transaction.td['spn'].hasOwnProperty(input)) {
|
||||
this.inputs.push(this.intToMoneyPipe.transform(this.transaction.td['spn'][input]));
|
||||
}
|
||||
}
|
||||
for (const output in this.transaction.td['spn']) {
|
||||
if (this.transaction.td['spn'].hasOwnProperty(output)) {
|
||||
this.outputs.push(this.intToMoneyPipe.transform(this.transaction.td['spn'][output]));
|
||||
for (const output in this.transaction.td['rcv']) {
|
||||
if (this.transaction.td['rcv'].hasOwnProperty(output)) {
|
||||
this.outputs.push(this.intToMoneyPipe.transform(this.transaction.td['rcv'][output]));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ export class Wallet {
|
|||
unlocked_balance: BigNumber;
|
||||
mined_total: number;
|
||||
tracking_hey: string;
|
||||
alias_available: boolean;
|
||||
|
||||
alias?: object;
|
||||
wakeAlias?: boolean;
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ export class VariablesService {
|
|||
public currentWallet: Wallet;
|
||||
public aliases: any = [];
|
||||
public aliasesChecked: any = {};
|
||||
public aliasesUnconfirmed: any = [];
|
||||
public enableAliasSearch = false;
|
||||
|
||||
getHeightAppEvent = new BehaviorSubject(null);
|
||||
|
|
|
|||
|
|
@ -122,6 +122,7 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||
wallet.balance = data.balance;
|
||||
wallet.unlocked_balance = data.unlocked_balance;
|
||||
wallet.mined_total = data.minied_total;
|
||||
wallet.alias_available = data.is_alias_operations_available;
|
||||
});
|
||||
}
|
||||
});
|
||||
|
|
@ -187,19 +188,6 @@ export class AppComponent implements OnInit, OnDestroy {
|
|||
return;
|
||||
}
|
||||
|
||||
if (this.variablesService.aliasesUnconfirmed.length) {
|
||||
let alias = false;
|
||||
for (let i = 0; i < this.variablesService.aliasesUnconfirmed.length; i++) {
|
||||
if (this.variablesService.aliasesUnconfirmed[i].tx_hash === data.ti.tx_hash) {
|
||||
alias = this.variablesService.aliasesUnconfirmed[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (alias) {
|
||||
this.variablesService.aliasesUnconfirmed.splice(this.variablesService.aliasesUnconfirmed.indexOf(alias), 1);
|
||||
}
|
||||
}
|
||||
|
||||
const wallet_id = data.wallet_id;
|
||||
const tr_info = data.ti;
|
||||
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@
|
|||
<label for="alias-name" tooltip="{{ 'ASSIGN_ALIAS.NAME.TOOLTIP' | translate }}" placement="bottom" tooltipClass="table-tooltip assign-alias-tooltip" [delay]="500">
|
||||
{{ 'ASSIGN_ALIAS.NAME.LABEL' | translate }}
|
||||
</label>
|
||||
<input type="text" id="alias-name" formControlName="name" placeholder="{{ 'ASSIGN_ALIAS.NAME.PLACEHOLDER' | translate }}">
|
||||
<input type="text" id="alias-name" formControlName="name" placeholder="{{ 'ASSIGN_ALIAS.NAME.PLACEHOLDER' | translate }}" (contextmenu)="variablesService.onContextMenu($event)">
|
||||
<div class="error-block" *ngIf="assignForm.controls['name'].invalid && (assignForm.controls['name'].dirty || assignForm.controls['name'].touched)">
|
||||
<div *ngIf="assignForm.controls['name'].errors['required']">
|
||||
{{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_REQUIRED' | translate }}
|
||||
|
|
@ -34,13 +34,18 @@
|
|||
{{ 'ASSIGN_ALIAS.FORM_ERRORS.NAME_EXISTS' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="error-block" *ngIf="notEnoughMoney">
|
||||
<div>
|
||||
{{ 'ASSIGN_ALIAS.FORM_ERRORS.NO_MONEY' | translate }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="input-block textarea">
|
||||
<label for="alias-comment" tooltip="{{ 'ASSIGN_ALIAS.COMMENT.TOOLTIP' | translate }}" placement="bottom" tooltipClass="table-tooltip assign-alias-tooltip" [delay]="500">
|
||||
{{ 'ASSIGN_ALIAS.COMMENT.LABEL' | translate }}
|
||||
</label>
|
||||
<textarea id="alias-comment" formControlName="comment" placeholder="{{ 'ASSIGN_ALIAS.COMMENT.PLACEHOLDER' | translate }}"></textarea>
|
||||
<textarea id="alias-comment" formControlName="comment" placeholder="{{ 'ASSIGN_ALIAS.COMMENT.PLACEHOLDER' | translate }}" (contextmenu)="variablesService.onContextMenu($event)"></textarea>
|
||||
</div>
|
||||
|
||||
<div class="alias-cost">{{ "ASSIGN_ALIAS.COST" | translate : {value: alias.price | intToMoney, currency: variablesService.defaultCurrency} }}</div>
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ import {Wallet} from '../_helpers/models/wallet.model';
|
|||
import {MoneyToIntPipe} from '../_helpers/pipes/money-to-int.pipe';
|
||||
import {IntToMoneyPipe} from '../_helpers/pipes/int-to-money.pipe';
|
||||
import BigNumber from 'bignumber.js';
|
||||
import {Subscription} from "rxjs";
|
||||
import {Subscription} from 'rxjs';
|
||||
|
||||
@Component({
|
||||
selector: 'app-assign-alias',
|
||||
|
|
@ -94,7 +94,6 @@ export class AssignAliasComponent implements OnInit, OnDestroy {
|
|||
this.alias.comment = this.assignForm.get('comment').value;
|
||||
this.backend.registerAlias(this.wallet.wallet_id, this.alias.name, this.wallet.address, this.alias.fee, this.alias.comment, this.alias.rewardOriginal, (status, data) => {
|
||||
if (status) {
|
||||
this.variablesService.aliasesUnconfirmed.push({tx_hash: data.tx_hash, name: this.alias.name});
|
||||
this.wallet.wakeAlias = true;
|
||||
this.modalService.prepareModal('info', 'ASSIGN_ALIAS.REQUEST_ADD_REG');
|
||||
this.ngZone.run(() => {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@
|
|||
<label for="alias-comment">
|
||||
{{ 'EDIT_ALIAS.COMMENT.LABEL' | translate }}
|
||||
</label>
|
||||
<textarea id="alias-comment" [(ngModel)]="alias.comment" [ngModelOptions]="{standalone: true}" placeholder="{{ 'EDIT_ALIAS.COMMENT.PLACEHOLDER' | translate }}"></textarea>
|
||||
<textarea id="alias-comment" [(ngModel)]="alias.comment" [ngModelOptions]="{standalone: true}" placeholder="{{ 'EDIT_ALIAS.COMMENT.PLACEHOLDER' | translate }}" (contextmenu)="variablesService.onContextMenu($event)"></textarea>
|
||||
<div class="error-block" *ngIf="alias.comment.length > 0 && notEnoughMoney">
|
||||
{{ 'EDIT_ALIAS.FORM_ERRORS.NO_MONEY' | translate }}
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
import {Component, NgZone, OnInit} from '@angular/core';
|
||||
import {Location} from '@angular/common';
|
||||
import {Router} from '@angular/router';
|
||||
import {BackendService} from "../_helpers/services/backend.service";
|
||||
import {VariablesService} from "../_helpers/services/variables.service";
|
||||
import {BackendService} from '../_helpers/services/backend.service';
|
||||
import {VariablesService} from '../_helpers/services/variables.service';
|
||||
import {ModalService} from '../_helpers/services/modal.service';
|
||||
import {Wallet} from "../_helpers/models/wallet.model";
|
||||
import {Wallet} from '../_helpers/models/wallet.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-edit-alias',
|
||||
|
|
@ -15,7 +15,7 @@ export class EditAliasComponent implements OnInit {
|
|||
|
||||
wallet: Wallet;
|
||||
alias: any;
|
||||
oldAliasComment: 'string';
|
||||
oldAliasComment: string;
|
||||
notEnoughMoney: boolean;
|
||||
requestProcessing = false;
|
||||
|
||||
|
|
|
|||
|
|
@ -11,8 +11,8 @@
|
|||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<ng-container *ngFor="let item of variablesService.currentWallet.history; let index = index">
|
||||
<tr (click)="openDetails(index)">
|
||||
<ng-container *ngFor="let item of variablesService.currentWallet.history">
|
||||
<tr (click)="openDetails(item.tx_hash)">
|
||||
<td>
|
||||
<div class="status" [class.send]="!item.is_income" [class.received]="item.is_income">
|
||||
<ng-container *ngIf="variablesService.height_app - item.height < 10 || item.height === 0 && item.timestamp > 0">
|
||||
|
|
@ -36,9 +36,9 @@
|
|||
<span *ngIf="item.tx_type === 0 && item.remote_addresses && item.remote_addresses[0]" (contextmenu)="variablesService.onContextMenuOnlyCopy($event, item.remote_addresses[0])">{{item.remote_addresses[0]}}</span>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="transaction-details" [class.open]="index === openedDetails">
|
||||
<tr class="transaction-details" [class.open]="item.tx_hash === openedDetails">
|
||||
<td colspan="5">
|
||||
<ng-container *ngIf="index === openedDetails">
|
||||
<ng-container *ngIf="item.tx_hash === openedDetails">
|
||||
<app-transaction-details [transaction]="item" [sizes]="calculatedWidth"></app-transaction-details>
|
||||
</ng-container>
|
||||
</td>
|
||||
|
|
|
|||
|
|
@ -40,11 +40,11 @@ export class HistoryComponent implements OnInit, OnDestroy, AfterViewChecked {
|
|||
}
|
||||
}
|
||||
|
||||
openDetails(index) {
|
||||
if (index === this.openedDetails) {
|
||||
openDetails(tx_hash) {
|
||||
if (tx_hash === this.openedDetails) {
|
||||
this.openedDetails = false;
|
||||
} else {
|
||||
this.openedDetails = index;
|
||||
this.openedDetails = tx_hash;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2,6 +2,6 @@
|
|||
<img src="{{qrImageSrc}}" alt="qr-code">
|
||||
<div class="wrap-address">
|
||||
<div class="address">{{variablesService.currentWallet.address}}</div>
|
||||
<button #copyButton type="button" class="btn-copy-address copy" (click)="copyAddress()"></button>
|
||||
<button type="button" class="btn-copy-address" [class.copy]="!copyAnimation" [class.copied]="copyAnimation" (click)="copyAddress()"></button>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import {Component, OnInit, OnDestroy, ViewChild, ElementRef, Renderer2} from '@angular/core';
|
||||
import {Component, OnInit, OnDestroy} from '@angular/core';
|
||||
import QRCode from 'qrcode';
|
||||
import {BackendService} from '../_helpers/services/backend.service';
|
||||
import {VariablesService} from '../_helpers/services/variables.service';
|
||||
|
|
@ -12,11 +12,11 @@ import {ActivatedRoute} from '@angular/router';
|
|||
export class ReceiveComponent implements OnInit, OnDestroy {
|
||||
qrImageSrc: string;
|
||||
parentRouting;
|
||||
@ViewChild('copyButton') copy: ElementRef;
|
||||
copyAnimation = false;
|
||||
copyAnimationTimeout;
|
||||
|
||||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
private renderer: Renderer2,
|
||||
private backend: BackendService,
|
||||
private variablesService: VariablesService
|
||||
) {
|
||||
|
|
@ -37,16 +37,15 @@ export class ReceiveComponent implements OnInit, OnDestroy {
|
|||
|
||||
public copyAddress() {
|
||||
this.backend.setClipboard(this.variablesService.currentWallet.address);
|
||||
this.renderer.removeClass(this.copy.nativeElement, 'copy');
|
||||
this.renderer.addClass(this.copy.nativeElement, 'copied');
|
||||
window.setTimeout(() => {
|
||||
this.renderer.removeClass(this.copy.nativeElement, 'copied');
|
||||
this.renderer.addClass(this.copy.nativeElement, 'copy');
|
||||
this.copyAnimation = true;
|
||||
this.copyAnimationTimeout = window.setTimeout(() => {
|
||||
this.copyAnimation = false;
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
ngOnDestroy() {
|
||||
this.parentRouting.unsubscribe();
|
||||
clearTimeout(this.copyAnimationTimeout);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,12 +9,17 @@
|
|||
<span class="balance">{{wallet.balance | intToMoney : '3' }} {{variablesService.defaultCurrency}}</span>
|
||||
</div>
|
||||
<div class="sidebar-account-row account-alias">
|
||||
<span>{{wallet.alias['name']}}</span>
|
||||
<div style="display: flex; align-items: center;">
|
||||
<span>{{wallet.alias['name']}}</span>
|
||||
<ng-container *ngIf="wallet.alias['comment'] && wallet.alias['comment'].length">
|
||||
<i class="icon comment" tooltip="{{wallet.alias['comment']}}" placement="top" tooltipClass="table-tooltip" [delay]="500"></i>
|
||||
</ng-container>
|
||||
</div>
|
||||
<span>$ {{wallet.getMoneyEquivalent(variablesService.moneyEquivalent) | intToMoney | number : '1.2-2'}}</span>
|
||||
</div>
|
||||
<div class="sidebar-account-row account-staking" *ngIf="!(!wallet.loaded && variablesService.daemon_state === 2)">
|
||||
<span class="text">{{ 'SIDEBAR.ACCOUNT.STAKING' | translate }}</span>
|
||||
<app-staking-switch [(wallet_id)]="wallet.wallet_id" [(staking)]="wallet.staking"></app-staking-switch>
|
||||
<app-staking-switch [wallet_id]="wallet.wallet_id" [(staking)]="wallet.staking"></app-staking-switch>
|
||||
</div>
|
||||
<div class="sidebar-account-row account-messages" *ngIf="!(!wallet.loaded && variablesService.daemon_state === 2)">
|
||||
<span class="text">{{ 'SIDEBAR.ACCOUNT.MESSAGES' | translate }}</span>
|
||||
|
|
|
|||
|
|
@ -66,6 +66,16 @@
|
|||
font-size: 1.3rem;
|
||||
line-height: 3.4rem;
|
||||
margin-bottom: 0.7rem;
|
||||
|
||||
.icon {
|
||||
margin-left: 0.5rem;
|
||||
width: 1.2rem;
|
||||
height: 1.2rem;
|
||||
|
||||
&.comment {
|
||||
mask: url(../../assets/icons/alert.svg) no-repeat center;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&.account-staking {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ export class SidebarComponent implements OnInit, OnDestroy {
|
|||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private variablesService: VariablesService,
|
||||
public variablesService: VariablesService,
|
||||
private ngZone: NgZone
|
||||
) {}
|
||||
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
<div>
|
||||
<span class="label">{{ 'STAKING.TITLE' | translate }}</span>
|
||||
<span class="value">
|
||||
<app-staking-switch [(wallet_id)]="variablesService.currentWallet.wallet_id" [(staking)]="variablesService.currentWallet.staking"></app-staking-switch>
|
||||
<app-staking-switch [wallet_id]="variablesService.currentWallet.wallet_id" [(staking)]="variablesService.currentWallet.staking"></app-staking-switch>
|
||||
</span>
|
||||
</div>
|
||||
<div>
|
||||
|
|
|
|||
|
|
@ -31,7 +31,7 @@
|
|||
<label for="alias-transfer">
|
||||
{{ 'TRANSFER_ALIAS.ADDRESS.LABEL' | translate }}
|
||||
</label>
|
||||
<input type="text" id="alias-transfer" [(ngModel)]="transferAddress" [ngModelOptions]="{standalone: true}" (ngModelChange)="changeAddress()" placeholder="{{ 'TRANSFER_ALIAS.ADDRESS.PLACEHOLDER' | translate }}">
|
||||
<input type="text" id="alias-transfer" [(ngModel)]="transferAddress" [ngModelOptions]="{standalone: true}" (ngModelChange)="changeAddress()" placeholder="{{ 'TRANSFER_ALIAS.ADDRESS.PLACEHOLDER' | translate }}" (contextmenu)="variablesService.onContextMenu($event)">
|
||||
<div class="error-block" *ngIf="transferAddress.length > 0 && (transferAddressAlias || !transferAddressValid || (transferAddressValid && !permissionSend) || notEnoughMoney)">
|
||||
<div *ngIf="!transferAddressValid">
|
||||
{{ 'TRANSFER_ALIAS.FORM_ERRORS.WRONG_ADDRESS' | translate }}
|
||||
|
|
|
|||
|
|
@ -1,10 +1,10 @@
|
|||
import {Component, NgZone, OnInit} from '@angular/core';
|
||||
import {Location} from "@angular/common";
|
||||
import {Router} from "@angular/router";
|
||||
import {BackendService} from "../_helpers/services/backend.service";
|
||||
import {VariablesService} from "../_helpers/services/variables.service";
|
||||
import {ModalService} from "../_helpers/services/modal.service";
|
||||
import {Wallet} from "../_helpers/models/wallet.model";
|
||||
import {Location} from '@angular/common';
|
||||
import {Router} from '@angular/router';
|
||||
import {BackendService} from '../_helpers/services/backend.service';
|
||||
import {VariablesService} from '../_helpers/services/variables.service';
|
||||
import {ModalService} from '../_helpers/services/modal.service';
|
||||
import {Wallet} from '../_helpers/models/wallet.model';
|
||||
|
||||
@Component({
|
||||
selector: 'app-transfer-alias',
|
||||
|
|
@ -49,7 +49,7 @@ export class TransferAliasComponent implements OnInit {
|
|||
if (status) {
|
||||
this.backend.getPoolInfo((statusPool, dataPool) => {
|
||||
if (dataPool.hasOwnProperty('aliases_que') && dataPool.aliases_que.length) {
|
||||
this.setStatus(!~dataPool.aliases_que.searchBy('address', this.transferAddress));
|
||||
this.setStatus(!dataPool.aliases_que.some((el) => el.address === this.transferAddress));
|
||||
} else {
|
||||
this.setStatus(status);
|
||||
}
|
||||
|
|
@ -63,7 +63,7 @@ export class TransferAliasComponent implements OnInit {
|
|||
setStatus(statusSet) {
|
||||
this.permissionSend = statusSet;
|
||||
if (statusSet) {
|
||||
this.backend.getAliasByAddress(this.transferAddress, (status, data) => {
|
||||
this.backend.getAliasByAddress(this.transferAddress, (status) => {
|
||||
this.ngZone.run(() => {
|
||||
if (status) {
|
||||
this.transferAddressAlias = true;
|
||||
|
|
|
|||
|
|
@ -2,14 +2,16 @@
|
|||
<div>
|
||||
<h3>{{variablesService.currentWallet.name}}</h3>
|
||||
<!--<button (click)="openInBrowser('docs.zano.org/docs/how-to-get-alias')">-->
|
||||
<button [routerLink]="['/assign-alias']" *ngIf="!variablesService.currentWallet.alias.hasOwnProperty('name')">
|
||||
<button [routerLink]="['/assign-alias']" *ngIf="!variablesService.currentWallet.alias.hasOwnProperty('name') && variablesService.currentWallet.loaded && variablesService.daemon_state === 2 && variablesService.currentWallet.alias_available">
|
||||
<i class="icon account"></i>
|
||||
<span>{{ 'WALLET.REGISTER_ALIAS' | translate }}</span>
|
||||
</button>
|
||||
<div class="alias" *ngIf="variablesService.currentWallet.alias.hasOwnProperty('name')">
|
||||
<div class="alias" *ngIf="variablesService.currentWallet.alias.hasOwnProperty('name') && variablesService.currentWallet.loaded && variablesService.daemon_state === 2">
|
||||
<span>{{variablesService.currentWallet.alias['name']}}</span>
|
||||
<i class="icon edit" [routerLink]="['/edit-alias']"></i>
|
||||
<i class="icon transfer" [routerLink]="['/transfer-alias']"></i>
|
||||
<ng-container *ngIf="variablesService.currentWallet.alias_available">
|
||||
<i class="icon edit" [routerLink]="['/edit-alias']"></i>
|
||||
<i class="icon transfer" [routerLink]="['/transfer-alias']"></i>
|
||||
</ng-container>
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
|
|
@ -25,7 +27,7 @@
|
|||
</div>
|
||||
<div class="address">
|
||||
<span>{{variablesService.currentWallet.address}}</span>
|
||||
<i #copyIcon class="icon copy" (click)="copyAddress()"></i>
|
||||
<i class="icon" [class.copy]="!copyAnimation" [class.copied]="copyAnimation" (click)="copyAddress()"></i>
|
||||
</div>
|
||||
<div class="balance">
|
||||
<span [tooltip]="getTooltip()" [placement]="'bottom'" [tooltipClass]="'balance-tooltip'" [delay]="300" [timeout]="0">{{variablesService.currentWallet.balance | intToMoney : '3'}} {{variablesService.defaultCurrency}}</span>
|
||||
|
|
@ -41,7 +43,7 @@
|
|||
</div>
|
||||
</ng-container>
|
||||
</div>
|
||||
<div class="tabs-content scrolled-content">
|
||||
<div #scrolledContent class="tabs-content scrolled-content">
|
||||
<router-outlet></router-outlet>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,10 @@
|
|||
import {Component, OnInit, OnDestroy, NgZone, ViewChild, ElementRef, Renderer2} from '@angular/core';
|
||||
import {Component, OnInit, OnDestroy, NgZone, ViewChild, ElementRef} from '@angular/core';
|
||||
import {ActivatedRoute, Router} from '@angular/router';
|
||||
import {VariablesService} from '../_helpers/services/variables.service';
|
||||
import {BackendService} from '../_helpers/services/backend.service';
|
||||
import {TranslateService} from '@ngx-translate/core';
|
||||
import {IntToMoneyPipe} from '../_helpers/pipes/int-to-money.pipe';
|
||||
import {BigNumber} from 'bignumber.js';
|
||||
import {Subscription} from "rxjs";
|
||||
import {Subscription} from 'rxjs';
|
||||
|
||||
@Component({
|
||||
selector: 'app-wallet',
|
||||
|
|
@ -15,7 +14,11 @@ import {Subscription} from "rxjs";
|
|||
export class WalletComponent implements OnInit, OnDestroy {
|
||||
subRouting;
|
||||
walletID;
|
||||
@ViewChild('copyIcon') copy: ElementRef;
|
||||
copyAnimation = false;
|
||||
copyAnimationTimeout;
|
||||
|
||||
@ViewChild('scrolledContent') private scrolledContent: ElementRef;
|
||||
|
||||
tabs = [
|
||||
{
|
||||
title: 'WALLET.TABS.HISTORY',
|
||||
|
|
@ -65,7 +68,6 @@ export class WalletComponent implements OnInit, OnDestroy {
|
|||
constructor(
|
||||
private route: ActivatedRoute,
|
||||
private router: Router,
|
||||
private renderer: Renderer2,
|
||||
private backend: BackendService,
|
||||
private variablesService: VariablesService,
|
||||
private ngZone: NgZone,
|
||||
|
|
@ -80,6 +82,9 @@ export class WalletComponent implements OnInit, OnDestroy {
|
|||
for (let i = 0; i < this.tabs.length; i++) {
|
||||
this.tabs[i].active = (this.tabs[i].link === '/' + this.route.snapshot.firstChild.url[0].path);
|
||||
}
|
||||
this.scrolledContent.nativeElement.scrollTop = 0;
|
||||
clearTimeout(this.copyAnimationTimeout);
|
||||
this.copyAnimation = false;
|
||||
});
|
||||
if (this.variablesService.currentWallet.alias.hasOwnProperty('name')) {
|
||||
this.variablesService.currentWallet.wakeAlias = false;
|
||||
|
|
@ -100,17 +105,16 @@ export class WalletComponent implements OnInit, OnDestroy {
|
|||
});
|
||||
this.tabs[index].active = true;
|
||||
this.ngZone.run( () => {
|
||||
this.scrolledContent.nativeElement.scrollTop = 0;
|
||||
this.router.navigate(['wallet/' + this.walletID + this.tabs[index].link]);
|
||||
});
|
||||
}
|
||||
|
||||
copyAddress() {
|
||||
this.backend.setClipboard(this.variablesService.currentWallet.address);
|
||||
this.renderer.removeClass(this.copy.nativeElement, 'copy');
|
||||
this.renderer.addClass(this.copy.nativeElement, 'copied');
|
||||
window.setTimeout(() => {
|
||||
this.renderer.removeClass(this.copy.nativeElement, 'copied');
|
||||
this.renderer.addClass(this.copy.nativeElement, 'copy');
|
||||
this.copyAnimation = true;
|
||||
this.copyAnimationTimeout = window.setTimeout(() => {
|
||||
this.copyAnimation = false;
|
||||
}, 2000);
|
||||
}
|
||||
|
||||
|
|
@ -141,6 +145,7 @@ export class WalletComponent implements OnInit, OnDestroy {
|
|||
ngOnDestroy() {
|
||||
this.subRouting.unsubscribe();
|
||||
this.aliasSubscription.unsubscribe();
|
||||
clearTimeout(this.copyAnimationTimeout);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -166,10 +166,11 @@
|
|||
"BUTTON_ASSIGN": "Assign",
|
||||
"BUTTON_CANCEL": "Cancel",
|
||||
"FORM_ERRORS": {
|
||||
"NAME_REQUIRED": "Name is required.",
|
||||
"NAME_WRONG": "Alias has wrong name.",
|
||||
"NAME_LENGTH": "The alias must be 6-25 characters long.",
|
||||
"NAME_EXISTS": "Alias name already exists."
|
||||
"NAME_REQUIRED": "Name is required",
|
||||
"NAME_WRONG": "Alias has wrong name",
|
||||
"NAME_LENGTH": "The alias must be 6-25 characters long",
|
||||
"NAME_EXISTS": "Alias name already exists",
|
||||
"NO_MONEY": "You do not have enough funds to assign this alias"
|
||||
},
|
||||
"ONE_ALIAS": "You can create only one alias per wallet",
|
||||
"REQUEST_ADD_REG": "The alias will be assigned within 10 minutes"
|
||||
|
|
|
|||
|
|
@ -41,6 +41,13 @@ app-sidebar {
|
|||
}
|
||||
}
|
||||
|
||||
.icon {
|
||||
|
||||
@include themify($themes) {
|
||||
background-color: themed(blueTextColor);
|
||||
}
|
||||
}
|
||||
|
||||
.indicator {
|
||||
|
||||
@include themify($themes) {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue