From 754c3cf02e5518818c3f6b9e44c99c386dcf603b Mon Sep 17 00:00:00 2001 From: Pablo Martin Date: Tue, 25 Mar 2025 16:14:18 +0100 Subject: [PATCH] move to separate file --- src/front/components/TrustCheckboxes.js | 118 ++++++++++++++++++++++++ src/front/pages/offers.js | 118 +----------------------- 2 files changed, 119 insertions(+), 117 deletions(-) create mode 100644 src/front/components/TrustCheckboxes.js diff --git a/src/front/components/TrustCheckboxes.js b/src/front/components/TrustCheckboxes.js new file mode 100644 index 0000000..bd47e84 --- /dev/null +++ b/src/front/components/TrustCheckboxes.js @@ -0,0 +1,118 @@ +class TrustCheckboxes { + constructor({ parentElement }) { + this.myTrustedContainer = null; + this.myTrustedCheckboxElement = null; + this.myTrustedTrustedContainer = null; + this.myTrustedTrustedCheckboxElement = null; + this.allMembersContainer = null; + this.allMembersCheckboxElement = null; + this.parentElement = parentElement; + } + + render() { + const checkboxesDetails = [ + { + id: 'my-trusted', + label: 'Mis confiados', + containerProperty: 'myTrustedContainer', + checkboxProperty: 'myTrustedCheckboxElement', + defaultChecked: true, + isDisabled: true, + }, + { + id: 'my-trusted-trusted', + label: 'Los confiados de mis confiados', + containerProperty: 'myTrustedTrustedContainer', + checkboxProperty: 'myTrustedTrustedCheckboxElement', + defaultChecked: true, + isDisabled: false, + }, + { + id: 'all-members', + label: 'Todos los miembros', + containerProperty: 'allMembersContainer', + checkboxProperty: 'allMembersCheckboxElement', + defaultChecked: false, + isDisabled: false, + }, + ]; + + for (const checkboxDetails of checkboxesDetails) { + this[checkboxDetails.containerProperty] = this.buildCheckbox({ + id: checkboxDetails.id, + label: checkboxDetails.label, + }); + + this[checkboxDetails.checkboxProperty] = + this[checkboxDetails.containerProperty].querySelector('input'); + + this[checkboxDetails.checkboxProperty].addEventListener('click', () => { + this.applyTrustCheckboxConstraints( + this[checkboxDetails.checkboxProperty] + ); + }); + + this[checkboxDetails.checkboxProperty].checked = + checkboxDetails.defaultChecked; + this[checkboxDetails.checkboxProperty].disabled = + checkboxDetails.isDisabled; + + this.parentElement.appendChild(this[checkboxDetails.containerProperty]); + } + } + + buildCheckbox({ id, label }) { + const checkboxContainer = document.createElement('div'); + checkboxContainer.className = 'checkbox-row'; + checkboxContainer.id = `${id}-checkbox-area`; + + const checkbox = document.createElement('input'); + checkbox.type = 'checkbox'; + checkbox.name = id; + checkbox.id = `${id}-checkbox`; + checkbox.checked = true; + + const labelElement = document.createElement('label'); + labelElement.htmlFor = checkbox.id; + labelElement.textContent = label; + + checkboxContainer.appendChild(checkbox); + checkboxContainer.appendChild(labelElement); + + return checkboxContainer; + } + + applyTrustCheckboxConstraints(pressedCheckbox) { + if (pressedCheckbox === this.myTrustedTrustedCheckboxElement) { + if ( + !this.myTrustedTrustedCheckboxElement.checked && + this.allMembersCheckboxElement.checked + ) { + this.allMembersCheckboxElement.checked = false; + } + } + + if (pressedCheckbox === this.allMembersCheckboxElement) { + if ( + !this.myTrustedTrustedCheckboxElement.checked && + this.allMembersCheckboxElement.checked + ) { + this.myTrustedTrustedCheckboxElement.checked = true; + } + } + } + + get showOfferToTrusted() { + return this.myTrustedCheckboxElement.checked; + } + + get showOfferToTrustedTrusted() { + return this.myTrustedTrustedCheckboxElement.checked; + } + + get showOfferToAllMembers() { + return this.allMembersCheckboxElement.checked; + } +} + +module.exports = TrustCheckboxes; diff --git a/src/front/pages/offers.js b/src/front/pages/offers.js index eafd4d7..b587106 100644 --- a/src/front/pages/offers.js +++ b/src/front/pages/offers.js @@ -6,123 +6,7 @@ const AmountInput = require('../components/AmountInput'); const PlaceInput = require('../components/PlaceInput'); const TimeInput = require('../components/TimeInput'); const BitcoinMethodCheckboxes = require('../components/BitcoinMethodCheckboxes'); - -class TrustCheckboxes { - constructor({ parentElement }) { - this.myTrustedContainer = null; - this.myTrustedCheckboxElement = null; - this.myTrustedTrustedContainer = null; - this.myTrustedTrustedCheckboxElement = null; - this.allMembersContainer = null; - this.allMembersCheckboxElement = null; - this.parentElement = parentElement; - } - - render() { - const checkboxesDetails = [ - { - id: 'my-trusted', - label: 'Mis confiados', - containerProperty: 'myTrustedContainer', - checkboxProperty: 'myTrustedCheckboxElement', - defaultChecked: true, - isDisabled: true, - }, - { - id: 'my-trusted-trusted', - label: 'Los confiados de mis confiados', - containerProperty: 'myTrustedTrustedContainer', - checkboxProperty: 'myTrustedTrustedCheckboxElement', - defaultChecked: true, - isDisabled: false, - }, - { - id: 'all-members', - label: 'Todos los miembros', - containerProperty: 'allMembersContainer', - checkboxProperty: 'allMembersCheckboxElement', - defaultChecked: false, - isDisabled: false, - }, - ]; - - for (const checkboxDetails of checkboxesDetails) { - this[checkboxDetails.containerProperty] = this.buildCheckbox({ - id: checkboxDetails.id, - label: checkboxDetails.label, - }); - - this[checkboxDetails.checkboxProperty] = - this[checkboxDetails.containerProperty].querySelector('input'); - - this[checkboxDetails.checkboxProperty].addEventListener('click', () => { - this.applyTrustCheckboxConstraints( - this[checkboxDetails.checkboxProperty] - ); - }); - - this[checkboxDetails.checkboxProperty].checked = - checkboxDetails.defaultChecked; - this[checkboxDetails.checkboxProperty].disabled = - checkboxDetails.isDisabled; - - this.parentElement.appendChild(this[checkboxDetails.containerProperty]); - } - } - - buildCheckbox({ id, label }) { - const checkboxContainer = document.createElement('div'); - checkboxContainer.className = 'checkbox-row'; - checkboxContainer.id = `${id}-checkbox-area`; - - const checkbox = document.createElement('input'); - checkbox.type = 'checkbox'; - checkbox.name = id; - checkbox.id = `${id}-checkbox`; - checkbox.checked = true; - - const labelElement = document.createElement('label'); - labelElement.htmlFor = checkbox.id; - labelElement.textContent = label; - - checkboxContainer.appendChild(checkbox); - checkboxContainer.appendChild(labelElement); - - return checkboxContainer; - } - - applyTrustCheckboxConstraints(pressedCheckbox) { - if (pressedCheckbox === this.myTrustedTrustedCheckboxElement) { - if ( - !this.myTrustedTrustedCheckboxElement.checked && - this.allMembersCheckboxElement.checked - ) { - this.allMembersCheckboxElement.checked = false; - } - } - - if (pressedCheckbox === this.allMembersCheckboxElement) { - if ( - !this.myTrustedTrustedCheckboxElement.checked && - this.allMembersCheckboxElement.checked - ) { - this.myTrustedTrustedCheckboxElement.checked = true; - } - } - } - - get showOfferToTrusted() { - return this.myTrustedCheckboxElement.checked; - } - - get showOfferToTrustedTrusted() { - return this.myTrustedTrustedCheckboxElement.checked; - } - - get showOfferToAllMembers() { - return this.allMembersCheckboxElement.checked; - } -} +const TrustCheckboxes = require('../components/TrustCheckboxes'); function offersPage() { const createOfferEventBus = new EventTarget();