1
0
Fork 0
forked from lthn/blockchain

Merge remote-tracking branch 'origin/frontend'

This commit is contained in:
wildkif 2019-02-20 18:01:54 +02:00
commit 10264f7fcf
32 changed files with 157 additions and 144 deletions

View file

@ -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)

View file

@ -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;
}

View file

@ -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();
}

View file

@ -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"

View file

@ -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

View file

@ -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'));
}
}

View file

@ -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]));
}
}
}

View file

@ -12,6 +12,7 @@ export class Wallet {
unlocked_balance: BigNumber;
mined_total: number;
tracking_hey: string;
alias_available: boolean;
alias?: object;
wakeAlias?: boolean;

View file

@ -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);

View file

@ -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;

View file

@ -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>

View file

@ -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(() => {

View file

@ -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>

View file

@ -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;

View file

@ -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>

View file

@ -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;
}
}

View file

@ -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>

View file

@ -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);
}
}

View file

@ -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>

View file

@ -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 {

View file

@ -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
) {}

View file

@ -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>

View file

@ -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 }}

View file

@ -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;

View file

@ -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>

View file

@ -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);
}
}

View file

@ -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"

View file

@ -41,6 +41,13 @@ app-sidebar {
}
}
.icon {
@include themify($themes) {
background-color: themed(blueTextColor);
}
}
.indicator {
@include themify($themes) {