You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
95 lines
3.7 KiB
TypeScript
95 lines
3.7 KiB
TypeScript
import { Component, OnInit, OnDestroy, ViewChild, Inject } from '@angular/core';
|
|
import { NgModel } from '@angular/forms';
|
|
import { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';
|
|
import { MatSnackBar } from '@angular/material/snack-bar';
|
|
import { Subject } from 'rxjs';
|
|
import { takeUntil } from 'rxjs/operators';
|
|
import { faCopy, faInfoCircle, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';
|
|
|
|
import { PendingOpenChannel } from '../../../../shared/models/lndModels';
|
|
import { PendingOpenChannelInformation } from '../../../../shared/models/alertData';
|
|
import { TRANS_TYPES } from '../../../../shared/services/consts-enums-functions';
|
|
import { DataService } from '../../../../shared/services/data.service';
|
|
import { LoggerService } from '../../../../shared/services/logger.service';
|
|
|
|
@Component({
|
|
selector: 'rtl-bump-fee',
|
|
templateUrl: './bump-fee.component.html',
|
|
styleUrls: ['./bump-fee.component.scss']
|
|
})
|
|
export class BumpFeeComponent implements OnInit, OnDestroy {
|
|
|
|
private outputIdx: NgModel;
|
|
@ViewChild('outputIdx') set payReq(outIdx: NgModel) {
|
|
if (outIdx) {
|
|
this.outputIdx = outIdx;
|
|
}
|
|
}
|
|
public bumpFeeChannel: PendingOpenChannel;
|
|
public transTypes = [...TRANS_TYPES];
|
|
public selTransType = '2';
|
|
public blocks: number | null = null;
|
|
public fees: number | null = null;
|
|
public outputIndex: number | null = null;
|
|
public faCopy = faCopy;
|
|
public faInfoCircle = faInfoCircle;
|
|
public faExclamationTriangle = faExclamationTriangle;
|
|
public bumpFeeError = '';
|
|
private unSubs: Array<Subject<void>> = [new Subject(), new Subject()];
|
|
|
|
constructor(public dialogRef: MatDialogRef<BumpFeeComponent>, @Inject(MAT_DIALOG_DATA) public data: PendingOpenChannelInformation, private logger: LoggerService, private dataService: DataService, private snackBar: MatSnackBar) { }
|
|
|
|
ngOnInit() {
|
|
this.transTypes = this.transTypes.splice(1);
|
|
this.bumpFeeChannel = this.data.pendingChannel;
|
|
const channelPointArr = this.bumpFeeChannel.channel?.channel_point?.split(':') || [];
|
|
if (this.bumpFeeChannel && this.bumpFeeChannel.channel) {
|
|
this.bumpFeeChannel.channel.txid_str = channelPointArr[0] || (this.bumpFeeChannel.channel && this.bumpFeeChannel.channel.channel_point ? this.bumpFeeChannel.channel.channel_point : '');
|
|
this.bumpFeeChannel.channel.output_index = +channelPointArr[1] || null;
|
|
}
|
|
}
|
|
|
|
onBumpFee(): boolean | void {
|
|
if (this.outputIndex === this.bumpFeeChannel.channel?.output_index) {
|
|
this.outputIdx.control.setErrors({ pendingChannelOutputIndex: true });
|
|
return true;
|
|
}
|
|
if ((!this.outputIndex && this.outputIndex !== 0) || (this.selTransType === '1' && (!this.blocks || this.blocks === 0)) || (this.selTransType === '2' && (!this.fees || this.fees === 0))) {
|
|
return true;
|
|
}
|
|
this.dataService.bumpFee((this.bumpFeeChannel && this.bumpFeeChannel.channel && this.bumpFeeChannel.channel.txid_str ? this.bumpFeeChannel.channel.txid_str : ''), this.outputIndex, (this.blocks || null), (this.fees || null)).pipe(takeUntil(this.unSubs[0])).
|
|
subscribe({
|
|
next: (res) => {
|
|
this.dialogRef.close(false);
|
|
}, error: (err) => {
|
|
this.logger.error(err);
|
|
this.bumpFeeError = err.message ? err.message : err;
|
|
}
|
|
});
|
|
}
|
|
|
|
onCopyID(payload: string) {
|
|
this.snackBar.open('Transaction ID copied.');
|
|
}
|
|
|
|
resetData() {
|
|
this.bumpFeeError = '';
|
|
this.selTransType = '2';
|
|
this.blocks = null;
|
|
this.fees = null;
|
|
this.outputIdx.control.setErrors(null);
|
|
}
|
|
|
|
onClose() {
|
|
this.dialogRef.close(false);
|
|
}
|
|
|
|
ngOnDestroy() {
|
|
this.unSubs.forEach((completeSub) => {
|
|
completeSub.next(<any>null);
|
|
completeSub.complete();
|
|
});
|
|
}
|
|
|
|
}
|