@stellar-expert/ui-framework 1.12.2 → 1.12.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,37 +1,41 @@
1
+ import React from 'react'
1
2
  import {formatWithPrecision} from '@stellar-expert/formatter'
3
+ import './soroban-tx-metrics.scss'
2
4
 
3
5
  export default function SorobanTxMetricsView({metrics}) {
4
6
  if (!metrics)
5
7
  return null
6
- return <div className="text-tiny row micro-space text-monospace">
7
- {Object.entries(parseMetrics(metrics)).map(([key, value])=><div key={key} className="column column-33">
8
- <span className="dimmed">{key}: </span>{value}
8
+ return <div className="soroban-tx-metrics-info row micro-space text-tiny text-monospace condensed">
9
+ {Object.entries(parseMetrics(metrics)).map(([key, value]) => <div key={key} className="column column-25">
10
+ <span className="dimmed">{key}: </span><MetricValue value={value}/>
9
11
  </div>)}
10
12
  </div>
11
13
  }
12
14
 
15
+ const MetricValue = React.memo(function ({value}) {
16
+ const match = /\D+$/.exec(value)
17
+ if (match)
18
+ return <>{value.substring(0, match.index)}<span className="dimmed value-suffix">{value.substring(match.index)}</span></>
19
+ return <>{value}</>
20
+ })
21
+
13
22
  function parseMetrics(metrics) {
14
23
  const res = {}
15
24
  for (const [key, value] of Object.entries(metrics)) {
16
25
  switch (key) {
17
26
  case 'cpu_insn':
18
- res['CPU instructions'] = formatWithPrecision(value, 0)
27
+ res['Instructions'] = formatWithPrecision(value, 0)
19
28
  break
20
29
  case 'emit_event':
21
30
  if (value > 0) {
22
- res['Emitted events'] = value.toString()
23
- }
24
- break
25
- case 'emit_event_byte':
26
- if (value > 0) {
27
- res['Emitted events'] += ' ' + formatBytes(value)
31
+ res['Emitted events'] = value.toString() + ' ' + formatBytes(value)
28
32
  }
29
33
  break
30
34
  case 'invoke_time_nsecs':
31
35
  res['Invoke time'] = formatWithPrecision(value / 1000, 3) + 'µs'
32
36
  break
33
37
  case 'mem_byte':
34
- res['Memory utilization'] = formatBytes(value)
38
+ res['Memory usage'] = formatBytes(value)
35
39
  break
36
40
  case 'read_code_byte':
37
41
  if (value > 0) {
@@ -75,22 +79,22 @@ function parseMetrics(metrics) {
75
79
  break
76
80
  case 'read_entry':
77
81
  if (value > 0) {
78
- res['Entries read'] = value
82
+ res['Entries read'] = value.toString()
79
83
  }
80
84
  break
81
85
  case 'write_entry':
82
86
  if (value > 0) {
83
- res['Entries write'] = value
87
+ res['Entries write'] = value.toString()
84
88
  }
85
89
  break
90
+ case 'emit_event_byte': //ignore these metrics
86
91
  case 'max_emit_event_byte':
87
92
  case 'max_rw_code_byte':
88
93
  case 'max_rw_data_byte':
89
- case 'max_rw_key_byte': //ignore these metrics
90
- break
91
- case 'type':
94
+ case 'max_rw_key_byte':
95
+ case 'type': //ignore common effect props
92
96
  case 'source':
93
- case 'contract': //ignore other effect params
97
+ case 'contract':
94
98
  break
95
99
  default:
96
100
  console.log('Unsupported metric: ' + key)
@@ -0,0 +1,7 @@
1
+ .soroban-tx-metrics-info {
2
+ line-height: 1.2;
3
+
4
+ .value-suffix {
5
+ padding-left: 2px;
6
+ }
7
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stellar-expert/ui-framework",
3
- "version": "1.12.2",
3
+ "version": "1.12.4",
4
4
  "description": "StellarExpert shared UI components library",
5
5
  "main": "index.js",
6
6
  "module": "./index.js",