From d3cee0b3ada112cb8945019309446bf528b0843e Mon Sep 17 00:00:00 2001
From: JoeGruffins <34998433+JoeGruffins@users.noreply.github.com>
Date: Thu, 20 Feb 2025 06:40:02 +0000
Subject: [PATCH] client: Add penalty comps message. (#3188)
---
client/core/types.go | 1 +
client/webserver/locales/en-us.go | 2 ++
client/webserver/site/src/html/dexsettings.tmpl | 2 +-
client/webserver/site/src/html/markets.tmpl | 11 +++++++++++
client/webserver/site/src/js/dexsettings.ts | 17 +----------------
client/webserver/site/src/js/markets.ts | 9 +++++++--
6 files changed, 23 insertions(+), 19 deletions(-)
diff --git a/client/core/types.go b/client/core/types.go
index f05a9f806e..b61691c57e 100644
--- a/client/core/types.go
+++ b/client/core/types.go
@@ -844,6 +844,7 @@ func newDEXAccount(acctInfo *db.AccountInfo, viewOnly bool) *dexAccount {
targetTier: acctInfo.TargetTier,
maxBondedAmt: acctInfo.MaxBondedAmt,
bondAsset: acctInfo.BondAsset,
+ penaltyComps: acctInfo.PenaltyComps,
}
}
diff --git a/client/webserver/locales/en-us.go b/client/webserver/locales/en-us.go
index dff882b00b..2cfc67effe 100644
--- a/client/webserver/locales/en-us.go
+++ b/client/webserver/locales/en-us.go
@@ -82,8 +82,10 @@ var EnUS = map[string]*intl.Translation{
"posting_bonds_shortly": {T: "Creating bonds..."},
"bond_creation_pending_msg": {T: `In order to trade at bond(s) will be created shortly.`},
"action_required_to_trade": {T: "ACTION REQUIRED TO TRADE"},
+ "set_penalty_comps": {T: `Your account has penalties but is only authorized for penalty comps.`},
"acct_tier_post_bond": {T: `Your account tier is . You need to post new bonds to trade.`},
"enable_bond_maintenance": {T: "Enable bond maintenance from DEX Settings page."},
+ "update_penalty_comps": {T: "Update penalty comps from DEX Settings page."},
"Buy": {T: "Buy"},
"Sell": {T: "Sell"},
"lot_size": {T: "Lot Size"},
diff --git a/client/webserver/site/src/html/dexsettings.tmpl b/client/webserver/site/src/html/dexsettings.tmpl
index acb38bc92d..6b2e3b40a6 100644
--- a/client/webserver/site/src/html/dexsettings.tmpl
+++ b/client/webserver/site/src/html/dexsettings.tmpl
@@ -63,7 +63,7 @@
-
+
diff --git a/client/webserver/site/src/html/markets.tmpl b/client/webserver/site/src/html/markets.tmpl
index 78915a9629..0fb2b1d0ec 100644
--- a/client/webserver/site/src/html/markets.tmpl
+++ b/client/webserver/site/src/html/markets.tmpl
@@ -240,6 +240,17 @@
+ {{- /* PENALTY COMPS REQUIRED TO TRADE */ -}}
+
+
[[[action_required_to_trade]]]
+
+
+
{{- /* BOND REQUIRED TO TRADE */ -}}
[[[action_required_to_trade]]]
diff --git a/client/webserver/site/src/js/dexsettings.ts b/client/webserver/site/src/js/dexsettings.ts
index 8151c5ef4d..8d2d59ea47 100644
--- a/client/webserver/site/src/js/dexsettings.ts
+++ b/client/webserver/site/src/js/dexsettings.ts
@@ -129,30 +129,17 @@ export default class DexSettingsPage extends BasePage {
if (!this.accountDisabled) page.toggleAutoRenew.click()
})
- page.penaltyComps.textContent = String(xc.auth.penaltyComps)
- const hideCompInput = () => {
- Doc.hide(page.penaltyCompInput)
- Doc.show(page.penaltyComps)
- }
+ page.penaltyCompInput.value = String(xc.auth.penaltyComps)
Doc.bind(page.penaltyCompBox, 'click', (e: MouseEvent) => {
e.stopPropagation()
const xc = app().exchanges[this.host]
page.penaltyCompInput.value = String(xc.auth.penaltyComps)
- Doc.hide(page.penaltyComps)
- Doc.show(page.penaltyCompInput)
page.penaltyCompInput.focus()
- const checkClick = (e: MouseEvent) => {
- if (Doc.mouseInElement(e, page.penaltyCompBox)) return
- hideCompInput()
- Doc.unbind(document, 'click', checkClick)
- }
- Doc.bind(document, 'click', checkClick)
})
Doc.bind(page.penaltyCompInput, 'keyup', async (e: KeyboardEvent) => {
Doc.hide(page.penaltyCompsErr)
if (e.key === 'Escape') {
- hideCompInput()
return
}
if (!(e.key === 'Enter')) return
@@ -166,13 +153,11 @@ export default class DexSettingsPage extends BasePage {
try {
await this.updateBondOptions({ penaltyComps })
loaded()
- page.penaltyComps.textContent = String(penaltyComps)
} catch (e) {
loaded()
Doc.show(page.penaltyCompsErr)
page.penaltyCompsErr.textContent = intl.prep(intl.ID_API_ERROR, { msg: e.msg })
}
- hideCompInput()
})
this.dexAddrForm = new forms.DEXAddressForm(page.dexAddrForm, async (xc: Exchange) => {
diff --git a/client/webserver/site/src/js/markets.ts b/client/webserver/site/src/js/markets.ts
index 689ea7771b..18fd9cf783 100644
--- a/client/webserver/site/src/js/markets.ts
+++ b/client/webserver/site/src/js/markets.ts
@@ -978,7 +978,7 @@ export default class MarketsPage extends BasePage {
this.updateRegistrationStatusView()
const showSection = (section: PageElement | undefined) => {
- const elements = [page.registrationStatus, page.bondRequired, page.bondCreationPending, page.notRegistered]
+ const elements = [page.registrationStatus, page.bondRequired, page.bondCreationPending, page.notRegistered, page.penaltyCompsRequired]
for (const el of elements) {
Doc.setVis(el === section, el)
}
@@ -999,6 +999,11 @@ export default class MarketsPage extends BasePage {
} else if (market.dex.viewOnly) {
page.unregisteredDex.textContent = market.dex.host
showSection(page.notRegistered)
+ } else if (market.dex.auth.targetTier > 0 && market.dex.auth.rep.penalties > market.dex.auth.penaltyComps) {
+ page.acctPenalties.textContent = `${market.dex.auth.rep.penalties}`
+ page.acctPenaltyComps.textContent = `${market.dex.auth.penaltyComps}`
+ page.compsDexSettingsLink.href = `/dexsettings/${market.dex.host}`
+ showSection(page.penaltyCompsRequired)
} else if (this.hasPendingBonds()) {
showSection(page.registrationStatus)
} else if (market.dex.auth.targetTier > 0) {
@@ -1120,7 +1125,7 @@ export default class MarketsPage extends BasePage {
// Hide the balance widget
this.balanceWgt.setBalanceVisibility(false)
- Doc.hide(page.notRegistered, page.bondRequired, page.noWallet)
+ Doc.hide(page.notRegistered, page.bondRequired, page.noWallet, page.penaltyCompsRequired)
// If we have not yet connected, there is no dex.assets or any other
// exchange data, so just put up a message and wait for the connection to be