diff --git a/client/webserver/site/src/html/bodybuilder.tmpl b/client/webserver/site/src/html/bodybuilder.tmpl index 9469118089..a0990a8066 100644 --- a/client/webserver/site/src/html/bodybuilder.tmpl +++ b/client/webserver/site/src/html/bodybuilder.tmpl @@ -103,7 +103,7 @@ {{end}} {{define "bottom"}} - + {{end}} diff --git a/client/webserver/site/src/js/markets.ts b/client/webserver/site/src/js/markets.ts index 00b01c9976..c21204b6f6 100644 --- a/client/webserver/site/src/js/markets.ts +++ b/client/webserver/site/src/js/markets.ts @@ -80,7 +80,7 @@ const epochMatchSummaryRoute = 'epoch_match_summary' const animationLength = 500 const anHour = 60 * 60 * 1000 // milliseconds -const maxActiveOrdersShown = 10 +const maxUserOrdersShown = 10 const check = document.createElement('span') check.classList.add('ico-check') @@ -1439,6 +1439,11 @@ export default class MarketsPage extends BasePage { } } + maxUserOrderCount (): number { + const { dex: { host }, cfg: { name: mktID } } = this.market + return Math.max(maxUserOrdersShown, app().orders(host, mktID).length) + } + async loadUserOrders () { const market = this.market for (const oid in this.metaOrders) delete this.metaOrders[oid] @@ -1446,7 +1451,7 @@ export default class MarketsPage extends BasePage { const filter: OrderFilter = { hosts: [market.dex.host], market: { baseID: market.base.id, quoteID: market.quote.id }, - n: maxActiveOrdersShown + n: this.maxUserOrderCount() } const res = await postJSON('/api/orders', filter) return this.resolveActiveOrders(res.orders || []) @@ -1462,10 +1467,18 @@ export default class MarketsPage extends BasePage { const { page, metaOrders, market } = this const cfg = market.cfg + const orderIsActive = (ord: Order) => ord.status < OrderUtil.StatusExecuted || OrderUtil.hasActiveMatches(ord) + for (const ord of orders) metaOrders[ord.id] = { ord: ord } as MetaOrder let sortedOrders = Object.keys(metaOrders).map((oid: string) => metaOrders[oid]) - sortedOrders.sort((a: MetaOrder, b: MetaOrder) => b.ord.submitTime - a.ord.submitTime) - if (sortedOrders.length > maxActiveOrdersShown) { sortedOrders = sortedOrders.slice(0, maxActiveOrdersShown - 1) } + sortedOrders.sort((a: MetaOrder, b: MetaOrder) => { + const [aActive, bActive] = [orderIsActive(a.ord), orderIsActive(b.ord)] + if (aActive && !bActive) return -1 + else if (!aActive && bActive) return 1 + return b.ord.submitTime - a.ord.submitTime + }) + const n = this.maxUserOrderCount() + if (sortedOrders.length > n) { sortedOrders = sortedOrders.slice(0, n) } for (const oid in metaOrders) delete metaOrders[oid] @@ -1489,7 +1502,7 @@ export default class MarketsPage extends BasePage { const ord = mord.ord const orderID = ord.id - const isActive = ord.status < OrderUtil.StatusExecuted || OrderUtil.hasActiveMatches(ord) + const isActive = orderIsActive(ord) // No need to track in-flight orders here. We've already added it to // display.