mirror of
https://github.com/maybe-finance/maybe.git
synced 2025-07-20 21:59:38 +02:00
* Trade and Transaction builders * Consolidate logic * Remove redundant fields from trade form * Add deposit, withdrawal, and interest form controls
64 lines
No EOL
1.8 KiB
JavaScript
64 lines
No EOL
1.8 KiB
JavaScript
import {Controller} from "@hotwired/stimulus"
|
|
|
|
const TRADE_TYPES = {
|
|
BUY: "buy",
|
|
SELL: "sell",
|
|
TRANSFER_IN: "transfer_in",
|
|
TRANSFER_OUT: "transfer_out",
|
|
INTEREST: "interest"
|
|
}
|
|
|
|
const FIELD_VISIBILITY = {
|
|
[TRADE_TYPES.BUY]: {ticker: true, qty: true, price: true},
|
|
[TRADE_TYPES.SELL]: {ticker: true, qty: true, price: true},
|
|
[TRADE_TYPES.TRANSFER_IN]: {amount: true, transferAccount: true},
|
|
[TRADE_TYPES.TRANSFER_OUT]: {amount: true, transferAccount: true},
|
|
[TRADE_TYPES.INTEREST]: {amount: true}
|
|
}
|
|
|
|
// Connects to data-controller="trade-form"
|
|
export default class extends Controller {
|
|
static targets = ["typeInput", "tickerInput", "amountInput", "transferAccountInput", "qtyInput", "priceInput"]
|
|
|
|
connect() {
|
|
this.handleTypeChange = this.handleTypeChange.bind(this)
|
|
this.typeInputTarget.addEventListener("change", this.handleTypeChange)
|
|
this.updateFields(this.typeInputTarget.value || TRADE_TYPES.BUY)
|
|
}
|
|
|
|
disconnect() {
|
|
this.typeInputTarget.removeEventListener("change", this.handleTypeChange)
|
|
}
|
|
|
|
handleTypeChange(event) {
|
|
this.updateFields(event.target.value)
|
|
}
|
|
|
|
updateFields(type) {
|
|
const visibleFields = FIELD_VISIBILITY[type] || {}
|
|
|
|
Object.entries(this.fieldTargets).forEach(([field, target]) => {
|
|
const isVisible = visibleFields[field] || false
|
|
|
|
// Update visibility
|
|
target.hidden = !isVisible
|
|
|
|
// Update required status based on visibility
|
|
if (isVisible) {
|
|
target.setAttribute('required', '')
|
|
} else {
|
|
target.removeAttribute('required')
|
|
}
|
|
})
|
|
}
|
|
|
|
get fieldTargets() {
|
|
return {
|
|
ticker: this.tickerInputTarget,
|
|
amount: this.amountInputTarget,
|
|
transferAccount: this.transferAccountInputTarget,
|
|
qty: this.qtyInputTarget,
|
|
price: this.priceInputTarget
|
|
}
|
|
}
|
|
} |