premium and price connected

This commit is contained in:
Pablo Martin 2025-03-17 17:49:03 +01:00
parent cca4402126
commit a3643ee9d0
3 changed files with 50 additions and 44 deletions

View file

@ -1,8 +1,9 @@
class PremiumSelector { class PremiumSelector {
constructor({ parentElement, id }) { constructor({ parentElement, id, eventSink }) {
this.element = null; this.element = null;
this.parentElement = parentElement; this.parentElement = parentElement;
this.id = id; this.id = id;
this.eventSink = eventSink;
this.premiumValue = null; this.premiumValue = null;
} }
@ -56,10 +57,11 @@ class PremiumSelector {
const newValue = `${numValue + delta}%`; const newValue = `${numValue + delta}%`;
this.premiumValue.innerText = newValue; this.premiumValue.innerText = newValue;
this.eventSink.dispatchEvent(new Event('premium-changed'));
} }
getPremium() { getPremium() {
return parseInt(this.premiumValue.innerText.match(/-?\d+/)[0]) / 100; return parseInt(this.premiumValue.textContent.match(/-?\d+/)[0]) / 100;
} }
} }

View file

@ -4,12 +4,12 @@ const BuyOrSellButtonGroup = require('../components/BuyOrSellButtonGroup');
const PremiumSelector = require('../components/PremiumSelector'); const PremiumSelector = require('../components/PremiumSelector');
class PriceDisplay { class PriceDisplay {
constructor( constructor({
{parentElement, parentElement,
id, id,
premiumProvidingCallback, premiumProvidingCallback,
priceProvidingCallback} priceProvidingCallback,
) { }) {
this.element = null; this.element = null;
this.parentElement = parentElement; this.parentElement = parentElement;
this.id = id; this.id = id;
@ -18,30 +18,30 @@ class PriceDisplay {
} }
render() { render() {
const container = document.createElement("div"); const container = document.createElement('div');
container.id = "premium-price-display-area"; container.id = 'premium-price-display-area';
const offerParagraph = document.createElement("p"); const offerParagraph = document.createElement('p');
offerParagraph.id = "offer-price-paragraph"; offerParagraph.id = 'offer-price-paragraph';
offerParagraph.textContent = "Tu precio: "; offerParagraph.textContent = 'Tu precio: ';
const offerSpan = document.createElement("span"); const offerSpan = document.createElement('span');
offerSpan.id = "offer-price"; offerSpan.id = 'offer-price';
this.offerPriceSpan = offerSpan this.offerPriceSpan = offerSpan;
offerParagraph.appendChild(offerSpan); offerParagraph.appendChild(offerSpan);
offerParagraph.append("€/BTC"); offerParagraph.append('€/BTC');
const marketParagraph = document.createElement("p"); const marketParagraph = document.createElement('p');
marketParagraph.id = "market-price-paragraph"; marketParagraph.id = 'market-price-paragraph';
marketParagraph.textContent = "(Precio mercado: "; marketParagraph.textContent = '(Precio mercado: ';
const marketSpan = document.createElement("span"); const marketSpan = document.createElement('span');
marketSpan.id = "market-price"; marketSpan.id = 'market-price';
this.marketPriceSpan = marketSpan this.marketPriceSpan = marketSpan;
marketParagraph.appendChild(marketSpan); marketParagraph.appendChild(marketSpan);
marketParagraph.append("€/BTC)"); marketParagraph.append('€/BTC)');
container.appendChild(offerParagraph); container.appendChild(offerParagraph);
container.appendChild(marketParagraph); container.appendChild(marketParagraph);
@ -50,16 +50,13 @@ class PriceDisplay {
this.element = container; this.element = container;
this.parentElement.appendChild(this.element); this.parentElement.appendChild(this.element);
} }
updatePrices() { updatePrices() {
const marketPrice = this.priceProvidingCallback() const marketPrice = this.priceProvidingCallback();
const marketPriceString = formatNumberWithSpaces(marketPrice); const marketPriceString = formatNumberWithSpaces(marketPrice);
const offerPriceString = formatNumberWithSpaces( const offerPriceString = formatNumberWithSpaces(
Math.round(marketPrice * ( Math.round(marketPrice * (1 + this.premiumProvidingCallback()))
1 + this.premiumProvidingCallback()
))
); );
this.marketPriceSpan.innerText = marketPriceString; this.marketPriceSpan.innerText = marketPriceString;
@ -68,6 +65,8 @@ class PriceDisplay {
} }
function offersPage() { function offersPage() {
const createOfferEventBus = new EventTarget();
const publishOfferButton = new PublishOfferButton({ const publishOfferButton = new PublishOfferButton({
parentElement: document.getElementById('submit-button-area'), parentElement: document.getElementById('submit-button-area'),
id: 'button-submit-offer', id: 'button-submit-offer',
@ -88,18 +87,24 @@ function offersPage() {
const premiumSelector = new PremiumSelector({ const premiumSelector = new PremiumSelector({
parentElement: document.getElementById('premium-content-area'), parentElement: document.getElementById('premium-content-area'),
id: 'premium-selector-area', id: 'premium-selector-area',
eventSink: createOfferEventBus,
}); });
premiumSelector.render(); premiumSelector.render();
const priceDisplay = new PriceDisplay( const priceDisplay = new PriceDisplay({
{
parentElement: document.getElementById('premium-content-area'), parentElement: document.getElementById('premium-content-area'),
id: 'premium-price-display-area', id: 'premium-price-display-area',
premiumProvidingCallback: () => {return 0.02}, premiumProvidingCallback: () => {
priceProvidingCallback: () => {return Math.floor(Math.random() * (95000 - 70000 + 1) + 70000)} return premiumSelector.getPremium();
} },
) priceProvidingCallback: () => {
return Math.floor(Math.random() * (95000 - 70000 + 1) + 70000);
},
});
priceDisplay.render(); priceDisplay.render();
createOfferEventBus.addEventListener('premium-changed', () => {
priceDisplay.updatePrices();
});
// ----------- // -----------
const navbuttonHome = document.getElementById('navbutton-home'); const navbuttonHome = document.getElementById('navbutton-home');

View file

@ -38,8 +38,7 @@
<div id="buy-or-sell-area" class="create-offer-step"></div> <div id="buy-or-sell-area" class="create-offer-step"></div>
<div id="premium-area" class="create-offer-step"> <div id="premium-area" class="create-offer-step">
<h3>Premium</h3> <h3>Premium</h3>
<div id="premium-content-area"> <div id="premium-content-area"></div>
</div>
</div> </div>
<div id="amount-area" class="create-offer-step"> <div id="amount-area" class="create-offer-step">
<h3>¿Cuánto?</h3> <h3>¿Cuánto?</h3>