diff --git a/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts b/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts index 0e43bfbb6..35aee245c 100644 --- a/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts +++ b/frontend/src/app/components/incoming-transactions-graph/incoming-transactions-graph.component.ts @@ -15,8 +15,8 @@ export class IncomingTransactionsGraphComponent implements OnInit, OnChanges { @Input() height: number | string = '200'; @Input() right: number | string = '10'; @Input() top: number | string = '20'; - @Input() left: number | string = '50'; - @Input() size: ('small' | 'big') = 'small'; + @Input() left: number | string = '0'; + @Input() template: ('widget' | 'advanced') = 'widget'; mempoolStatsChartOption: EChartsOption = {}; windowPreference: string; @@ -43,11 +43,15 @@ export class IncomingTransactionsGraphComponent implements OnInit, OnChanges { top: this.top, left: this.left, }, + animation: false, dataZoom: [{ type: 'inside', realtime: true, + zoomOnMouseWheel: (this.template === 'advanced') ? true : false, + maxSpan: 100, + minSpan: 10, }, { - show: (this.size === 'big') ? true : false, + show: (this.template === 'advanced') ? true : false, type: 'slider', brushSelect: false, realtime: true, @@ -68,7 +72,7 @@ export class IncomingTransactionsGraphComponent implements OnInit, OnChanges { obj[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 80; return obj; }, - extraCssText: `width: ${(['2h', '24h'].includes(this.windowPreference) || this.size === 'small') ? '125px' : '135px'}; + extraCssText: `width: ${(['2h', '24h'].includes(this.windowPreference) || this.template === 'widget') ? '125px' : '135px'}; background: transparent; border: none; box-shadow: none;`, @@ -76,18 +80,18 @@ export class IncomingTransactionsGraphComponent implements OnInit, OnChanges { type: 'line', }, formatter: (params: any) => { - const colorSpan = (color: string) => `
`; + const colorSpan = (color: string) => ``; let itemFormatted = '
' + params[0].axisValue + '
'; params.map((item: any, index: number) => { if (index < 26) { itemFormatted += `
- ${colorSpan(item.color)} +
${colorSpan(item.color)}
${item.value} vB/s
`; } }); - return `
${itemFormatted}
`; + return `
${itemFormatted}
`; } }, xAxis: { diff --git a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts index f7df31fb2..25d0371bc 100644 --- a/frontend/src/app/components/mempool-graph/mempool-graph.component.ts +++ b/frontend/src/app/components/mempool-graph/mempool-graph.component.ts @@ -14,18 +14,19 @@ import { feeLevels, chartColors } from 'src/app/app.constants'; }) export class MempoolGraphComponent implements OnInit, OnChanges { @Input() data: any[]; - @Input() limitFee = 300; + @Input() limitFee = 350; @Input() height: number | string = 200; @Input() top: number | string = 20; @Input() right: number | string = 10; @Input() left: number | string = 75; - @Input() small = false; - @Input() size: ('small' | 'big') = 'small'; + @Input() template: ('widget' | 'advanced') = 'widget'; + @Input() showZoom = true; mempoolVsizeFeesData: any; mempoolVsizeFeesOptions: EChartsOption; windowPreference: string; hoverIndexSerie: -1; + feeLimitIndex: number; constructor( private vbytesPipe: VbytesPipe, @@ -93,15 +94,17 @@ export class MempoolGraphComponent implements OnInit, OnChanges { const { labels, series } = this.mempoolVsizeFeesData; const feeLevelsOrdered = feeLevels.map((sat, i, arr) => { - if (i <= 26) { + if (arr[i] === this.limitFee) { this.feeLimitIndex = i; } + if (arr[i] < this.limitFee) { if (i === 0) { return '0 - 1'; } - if (i === 26) { return '350+'; } - return arr[i - 1] + ' - ' + sat; + return `${arr[i - 1]} - ${arr[i]}`; + } else { + return `${this.limitFee}+`; } }); const yAxisSeries = series.map((value: Array, index: number) => { - if (index <= 26){ + if (index <= this.feeLimitIndex){ return { name: feeLevelsOrdered[index], type: 'line', @@ -114,7 +117,7 @@ export class MempoolGraphComponent implements OnInit, OnChanges { width: 0, opacity: 0, }, - symbolSize: (this.size === 'big') ? 15 : 10, + symbolSize: (this.template === 'advanced') ? 20 : 10, showSymbol: false, areaStyle: { opacity: 1, @@ -122,11 +125,14 @@ export class MempoolGraphComponent implements OnInit, OnChanges { }, emphasis: { focus: 'series', + select: { + areaStyle: { + opacity: 1, + } + }, }, itemStyle: { borderWidth: 30, - color: chartColors[index], - borderColor: chartColors[index], }, data: this.vbytesPipe.transform(value, 2, 'vB', 'MvB', true) }; @@ -138,11 +144,11 @@ export class MempoolGraphComponent implements OnInit, OnChanges { tooltip: { trigger: 'axis', position: (pos, params, el, elRect, size) => { - const positions = { top: -20 }; - positions[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 80; + const positions = { top: (this.template === 'advanced') ? 30 : -30 }; + positions[['left', 'right'][+(pos[0] < size.viewSize[0] / 2)]] = 60; return positions; }, - extraCssText: `width: ${(this.size === 'big') ? '200px' : '170px'}; + extraCssText: `width: ${(this.template === 'advanced') ? '210px' : '200px'}; background: transparent; border: none; box-shadow: none;`, @@ -150,36 +156,69 @@ export class MempoolGraphComponent implements OnInit, OnChanges { type: 'line', }, formatter: (params: any) => { - const colorSpan = (index: number) => `
`; const legendName = (index: number) => feeLevelsOrdered[index]; - let itemFormatted = `
${params[0].axisValue}
`; + const colorSpan = (index: number) => `${legendName(index)}`; + const title = `
${params[0].axisValue}
`; + const rangeLines = params; let total = 0; - params.map((item: any, index: number) => { + rangeLines.map((item: any) => { total += item.value; - if (index <= 26) { + }); + const itemFormatted = []; + let totalParcial = 0; + let progressPercentageText = ''; + rangeLines.map((item: any, index: number) => { + totalParcial += item.value; + let progressPercentage = 0; + let progressPercentageTotalParcial = 0; + if (index <= this.feeLimitIndex) { + progressPercentage = (item.value / total) * 100; + progressPercentageTotalParcial = (totalParcial / total) * 100; let activeItemClass = ''; - if (this.hoverIndexSerie === index){ + if (this.hoverIndexSerie === index) { + progressPercentageText = `
+ ${this.vbytesPipe.transform(totalParcial, 2, 'vB', 'MvB', false)} +
+
`; activeItemClass = 'active'; } - itemFormatted += `
- ${colorSpan(index)} ${legendName(index)} -
-
${this.vbytesPipe.transform(item.value, 2, 'vB', 'MvB', false)}
-
`; + itemFormatted.push(` + ${colorSpan(index)} + ${this.vbytesPipe.transform(item.value, 2, 'vB', 'MvB', false)} + + `); } }); + const progressActiveDiv = `${progressPercentageText}`; const totalDiv = `
Total - ${this.vbytesPipe.transform(total, 2, 'vB', 'MvB', true)} + ${this.vbytesPipe.transform(total, 2, 'vB', 'MvB', false)} +
`; + const advancedClass = (this.template === 'advanced') ? 'fees-wrapper-tooltip-chart-advanced' : ''; + return `
+ ${title} + + + + + + + + + ${itemFormatted.reverse().join('')} +
RangeSize%
+ ${progressActiveDiv} + ${totalDiv}
`; - const bigClass = (this.size === 'big') ? 'fees-wrapper-tooltip-chart-big' : ''; - return `
${itemFormatted} ${totalDiv}
`; } }, dataZoom: [{ type: 'inside', realtime: true, + zoomOnMouseWheel: (this.template === 'advanced') ? true : false, + maxSpan: 100, + minSpan: 10, }, { - show: (this.size === 'big') ? true : false, + show: (this.template === 'advanced' && this.showZoom) ? true : false, type: 'slider', brushSelect: false, realtime: true, @@ -193,6 +232,7 @@ export class MempoolGraphComponent implements OnInit, OnChanges { } } }], + animation: false, grid: { height: this.height, right: this.right, diff --git a/frontend/src/app/components/statistics/statistics.component.html b/frontend/src/app/components/statistics/statistics.component.html index 8e8677267..04cfb5548 100644 --- a/frontend/src/app/components/statistics/statistics.component.html +++ b/frontend/src/app/components/statistics/statistics.component.html @@ -42,10 +42,10 @@
@@ -62,8 +62,8 @@
diff --git a/frontend/src/app/components/television/television.component.html b/frontend/src/app/components/television/television.component.html index 5b8d52bb3..e5134c9bd 100644 --- a/frontend/src/app/components/television/television.component.html +++ b/frontend/src/app/components/television/television.component.html @@ -7,12 +7,12 @@
diff --git a/frontend/src/app/dashboard/dashboard.component.html b/frontend/src/app/dashboard/dashboard.component.html index 5eab01618..6a521e4d2 100644 --- a/frontend/src/app/dashboard/dashboard.component.html +++ b/frontend/src/app/dashboard/dashboard.component.html @@ -48,7 +48,11 @@
- +
diff --git a/frontend/src/styles.scss b/frontend/src/styles.scss index 39c7292f0..bbbfc1e03 100644 --- a/frontend/src/styles.scss +++ b/frontend/src/styles.scss @@ -266,16 +266,29 @@ html:lang(ru) .card-title { min-height: 180px; } -.tx-wrapper-tooltip-chart, .fees-wrapper-tooltip-chart { - background: rgba(#11131f, 0.85); +.tx-wrapper-tooltip-chart, +.fees-wrapper-tooltip-chart { + background: rgba(#11131f, 0.95); border-radius: 4px; - box-shadow: 1px 1px 10px rgba(0,0,0,0.2); + box-shadow: 1px 1px 10px rgba(0,0,0,0.5); color: #b1b1b1; display: flex; flex-direction: column; justify-content: space-between; padding: 10px 15px; text-align: left; + thead { + th { + font-size: 9px; + color: #b1b1b1; + text-align: right; + &:first-child { + text-align: left; + left: -1px; + position: relative; + } + } + } .title { font-size: 12px; font-weight: 700; @@ -284,21 +297,25 @@ html:lang(ru) .card-title { } .active { color: yellow !important; - font-weight: 900; - .value { + .value, + .total-partial { + color: yellow !important; .symbol { color: yellow !important; } } } .item { - display: flex; - .indicator { - margin-right: 5px; - border-radius: 0px; - margin-top: 5px; - width: 9px; - height: 9px; + line-height: 0.8; + .indicator-container { + .indicator { + display: inline-block; + margin-right: 5px; + border-radius: 0px; + margin-top: 5px; + width: 9px; + height: 9px; + } } .value { text-align: right; @@ -307,24 +324,81 @@ html:lang(ru) .card-title { font-size: 9px !important; } } + .total-partial { + text-align: right; + font-size: 10px; + width: 70px; + } + .total-percentage-bar { + padding-left: 8px; + } } .total-label { width: 100%; - margin-top: 0px; - font-size: 10px; text-align: left; color: #fff; + margin-top: 5px; + font-size: 14px; span { - font-weight: 700; - float: right !important; + float: right; + } + .symbol { + margin-left: 3px; + font-size: 9px; + position: relative; + top: 2px; } } + .total-percentage-bar { + margin: auto; + width: 35px; + position: relative; + span { + display: block; + background: #282d47; + height: 5px; + border-radius: 2px; + } + } + .total-parcial-active { + text-align: right; + margin: 5px auto 5px; + padding-left: 0px; + span { + font-size: 10px; + } + .symbol { + font-size: 9px; + } + .total-percentage-bar { + width: 100%; + span { + transition: 1000 all ease-in-out; + } + } + } +} + +.tx-wrapper-tooltip-chart { + .item { + display: flex; + } + .value { + margin-top: 5px; + } + .indicator-container { + border-radius: 2px; + } +} + +.fee-distribution-chart { + height: 250px; } .fees-wrapper-tooltip-chart { .item { font-size: 9px; - line-height: 1; + line-height: 0.8; margin: 0px; } .indicator { @@ -334,8 +408,9 @@ html:lang(ru) .card-title { } } -.fees-wrapper-tooltip-chart-big, .tx-wrapper-tooltip-chart-big { - background: rgba(#1d1f31, 0.85); +.fees-wrapper-tooltip-chart-big, +.tx-wrapper-tooltip-chart-big { + background: rgba(#1d1f31, 0.98); .title { font-size: 15px; margin-bottom: 5px; @@ -343,7 +418,6 @@ html:lang(ru) .card-title { .item { font-size: 12px; line-height: 1; - margin: 2px 0px; .value { .symbol { font-size: 12px !important; @@ -351,25 +425,40 @@ html:lang(ru) .card-title { } } .total-label { - width: 100%; margin-top: 5px; font-size: 14px; span { - font-weight: 700; - float: right !important; + float: right; + } + } + .total-parcial-active { + text-align: right; + margin: 5px auto 5px; + span { + font-size: 10px; + } + .total-percentage-bar { + width: 100%; + left: 0; + span { + transition: 1000 all ease-in-out; + } } } } .tx-wrapper-tooltip-chart-big { - .indicator { - margin: 0px !important;; + .indicator-container { + .indicator { + margin-right: 5px; + border-radius: 0px; + margin-top: 5px; + width: 9px; + height: 9px; + } } } -.fee-distribution-chart { - height: 250px; -} /* MEMPOOL CHARTS - end */