diff --git a/manual_trading_hub/static/app.css b/manual_trading_hub/static/app.css
index b47dfb3..144923f 100644
--- a/manual_trading_hub/static/app.css
+++ b/manual_trading_hub/static/app.css
@@ -1272,6 +1272,14 @@ body.market-chart-fs-open {
margin-bottom: 0;
}
+.pos-table-wrap {
+ margin-bottom: 8px;
+}
+
+.data-table-positions tbody tr:not(:last-child) td {
+ border-bottom: 1px dashed var(--border-soft);
+}
+
.pos-action-group {
display: inline-flex;
flex-direction: row;
diff --git a/manual_trading_hub/static/app.js b/manual_trading_hub/static/app.js
index f44d74d..105684e 100644
--- a/manual_trading_hub/static/app.js
+++ b/manual_trading_hub/static/app.js
@@ -1537,16 +1537,25 @@
.join("");
}
- function renderPositionBlock(exchangeId, exchangeKey, x, monitorOrder, trendPlan, tickMap, opts) {
+ function renderPositionTableRow(
+ exchangeId,
+ exchangeKey,
+ x,
+ monitorOrder,
+ trendPlan,
+ tickMap,
+ opts
+ ) {
const options = opts || {};
const compact = !!options.compact;
const symAttr = esc(x.symbol || "").replace(/"/g, """);
- const exKeyAttr = esc(exchangeKey || exchangeId || "").replace(/"/g, """);
const sideAttr = esc((x.side || "").toLowerCase()).replace(/"/g, """);
const side = sideAttr || "long";
- const contractsAttr = esc(String(x.contracts != null ? x.contracts : "")).replace(/"/g, """);
+ const contractsAttr = esc(String(x.contracts != null ? x.contracts : "")).replace(
+ /"/g,
+ """
+ );
const cond = condOrdersFromPosition(x);
- const reg = Array.isArray(x.regular_orders) ? x.regular_orders : [];
const tpsl = resolvePositionTpsl(x, monitorOrder, trendPlan);
const beSecured = isBreakevenSecured(side, tpsl.entry, monitorOrder, cond, x);
const slAttr = esc(String(tpsl.sl)).replace(/"/g, """);
@@ -1559,13 +1568,7 @@
`;
- const ordersBlock = compact
- ? ""
- : renderOrdersCollapse(exchangeId, x.symbol, cond, reg, tickMap);
- return `