Spaces:
Running
Running
Jimin Huang
commited on
Commit
·
d7db594
1
Parent(s):
7e33fb5
Change settings
Browse files- src/views/LiveView.vue +22 -6
src/views/LiveView.vue
CHANGED
|
@@ -3,7 +3,8 @@
|
|
| 3 |
<!-- Toolbar: assets + mode -->
|
| 4 |
<header class="toolbar">
|
| 5 |
<div class="toolbar__left">
|
| 6 |
-
|
|
|
|
| 7 |
</div>
|
| 8 |
<div class="toolbar__right">
|
| 9 |
<div class="mode">
|
|
@@ -69,6 +70,10 @@ import AssetTabs from '../components/AssetTabs.vue'
|
|
| 69 |
import CompareChartE from '../components/CompareChartE.vue'
|
| 70 |
import { dataService } from '../lib/dataService'
|
| 71 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 72 |
// ---- state ----
|
| 73 |
const mode = ref('usd') // 'usd' | 'pct'
|
| 74 |
const asset = ref('BTC')
|
|
@@ -83,7 +88,13 @@ onMounted(async () => {
|
|
| 83 |
} catch (e) {
|
| 84 |
console.error('LiveView: dataService.load failed', e)
|
| 85 |
}
|
|
|
|
| 86 |
agents.value = Array.isArray(dataService.tableRows) ? dataService.tableRows : []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 87 |
})
|
| 88 |
|
| 89 |
// ---- helpers ----
|
|
@@ -93,9 +104,17 @@ function score(row) {
|
|
| 93 |
const fmtUSD = (n) =>
|
| 94 |
(n ?? 0).toLocaleString(undefined, { style: 'currency', currency: 'USD', maximumFractionDigits: 2 })
|
| 95 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 96 |
// Best model per agent for the selected asset (by balance)
|
| 97 |
const winners = computed(() => {
|
| 98 |
-
const rows =
|
| 99 |
const byAgent = new Map()
|
| 100 |
for (const r of rows) {
|
| 101 |
const k = r.agent_name
|
|
@@ -138,7 +157,7 @@ const winnersSorted = computed(() => [...winners.value].sort((a,b) => score(b) -
|
|
| 138 |
justify-content: space-between;
|
| 139 |
gap: 16px;
|
| 140 |
padding: 8px 0 10px;
|
| 141 |
-
background: #fff;
|
| 142 |
}
|
| 143 |
.toolbar__left { min-width: 0; }
|
| 144 |
.toolbar__right { display: flex; align-items: center; gap: 10px; }
|
|
@@ -223,7 +242,4 @@ const winnersSorted = computed(() => [...winners.value].sort((a,b) => score(b) -
|
|
| 223 |
}
|
| 224 |
.card__left { min-width: 0; }
|
| 225 |
.card__right { display: grid; gap: 4px; justify-items: end; }
|
| 226 |
-
|
| 227 |
-
/* small utility */
|
| 228 |
-
strong { font-weight: 700; }
|
| 229 |
</style>
|
|
|
|
| 3 |
<!-- Toolbar: assets + mode -->
|
| 4 |
<header class="toolbar">
|
| 5 |
<div class="toolbar__left">
|
| 6 |
+
<!-- If AssetTabs supports restricting options, this will remove MRNA from the UI -->
|
| 7 |
+
<AssetTabs v-model="asset" :ordered-assets="orderedAssets" />
|
| 8 |
</div>
|
| 9 |
<div class="toolbar__right">
|
| 10 |
<div class="mode">
|
|
|
|
| 70 |
import CompareChartE from '../components/CompareChartE.vue'
|
| 71 |
import { dataService } from '../lib/dataService'
|
| 72 |
|
| 73 |
+
// ---- config: hide MRNA in tabs; drop Vanilla/Vinilla agents globally ----
|
| 74 |
+
const orderedAssets = ['BTC','ETH','MSFT','BMRN','TSLA'] // ← MRNA removed
|
| 75 |
+
const EXCLUDED_AGENT_NAMES = new Set(['vanilla', 'vinilla']) // case-insensitive match
|
| 76 |
+
|
| 77 |
// ---- state ----
|
| 78 |
const mode = ref('usd') // 'usd' | 'pct'
|
| 79 |
const asset = ref('BTC')
|
|
|
|
| 88 |
} catch (e) {
|
| 89 |
console.error('LiveView: dataService.load failed', e)
|
| 90 |
}
|
| 91 |
+
// Copy rows; we’ll filter “vanilla/vinilla” in computed getters below
|
| 92 |
agents.value = Array.isArray(dataService.tableRows) ? dataService.tableRows : []
|
| 93 |
+
|
| 94 |
+
// Safety: if current asset is MRNA (e.g., from persisted state), push to first allowed
|
| 95 |
+
if (!orderedAssets.includes(asset.value)) {
|
| 96 |
+
asset.value = orderedAssets[0]
|
| 97 |
+
}
|
| 98 |
})
|
| 99 |
|
| 100 |
// ---- helpers ----
|
|
|
|
| 104 |
const fmtUSD = (n) =>
|
| 105 |
(n ?? 0).toLocaleString(undefined, { style: 'currency', currency: 'USD', maximumFractionDigits: 2 })
|
| 106 |
|
| 107 |
+
const filteredRows = computed(() => {
|
| 108 |
+
// exclude agents named vanilla/vinilla, case-insensitive
|
| 109 |
+
return (agents.value || []).filter(r => {
|
| 110 |
+
const name = (r?.agent_name || '').toLowerCase()
|
| 111 |
+
return !EXCLUDED_AGENT_NAMES.has(name)
|
| 112 |
+
})
|
| 113 |
+
})
|
| 114 |
+
|
| 115 |
// Best model per agent for the selected asset (by balance)
|
| 116 |
const winners = computed(() => {
|
| 117 |
+
const rows = filteredRows.value.filter(r => r.asset === asset.value)
|
| 118 |
const byAgent = new Map()
|
| 119 |
for (const r of rows) {
|
| 120 |
const k = r.agent_name
|
|
|
|
| 157 |
justify-content: space-between;
|
| 158 |
gap: 16px;
|
| 159 |
padding: 8px 0 10px;
|
| 160 |
+
background: #fff;
|
| 161 |
}
|
| 162 |
.toolbar__left { min-width: 0; }
|
| 163 |
.toolbar__right { display: flex; align-items: center; gap: 10px; }
|
|
|
|
| 242 |
}
|
| 243 |
.card__left { min-width: 0; }
|
| 244 |
.card__right { display: grid; gap: 4px; justify-items: end; }
|
|
|
|
|
|
|
|
|
|
| 245 |
</style>
|