From 61ffdbc57e6fda320766d4de99f097edac9e58f7 Mon Sep 17 00:00:00 2001 From: Miguel Peixe Date: Fri, 8 Dec 2023 11:01:27 -0300 Subject: [PATCH 1/7] feat(donate): support empty value for "other" tier (#1604) --- .../donate/edit/FrequencyBasedLayout.tsx | 7 +--- src/blocks/donate/edit/index.tsx | 37 +++++++++++-------- src/blocks/donate/frequency-based/index.ts | 22 ++++++++++- src/blocks/donate/frequency-based/style.scss | 3 ++ ...blocks-donate-renderer-frequency-based.php | 1 - src/blocks/donate/styles/editor.scss | 2 +- 6 files changed, 46 insertions(+), 26 deletions(-) diff --git a/src/blocks/donate/edit/FrequencyBasedLayout.tsx b/src/blocks/donate/edit/FrequencyBasedLayout.tsx index 8d8d857d4..6ae184b1b 100644 --- a/src/blocks/donate/edit/FrequencyBasedLayout.tsx +++ b/src/blocks/donate/edit/FrequencyBasedLayout.tsx @@ -166,12 +166,7 @@ const FrequencyBasedLayout = ( props: { isTiered: boolean } & ComponentProps ) =
{ settings.currencySymbol } - +
) : null } diff --git a/src/blocks/donate/edit/index.tsx b/src/blocks/donate/edit/index.tsx index 3abec90ab..10f2551ba 100644 --- a/src/blocks/donate/edit/index.tsx +++ b/src/blocks/donate/edit/index.tsx @@ -51,7 +51,6 @@ const TIER_LABELS = [ __( 'Low-tier', 'newspack-blocks' ), __( 'Mid-tier', 'newspack-blocks' ), __( 'High-tier', 'newspack-blocks' ), - __( 'Other', 'newspack-blocks' ), ]; const Edit = ( { attributes, setAttributes, className }: EditProps ) => { @@ -302,21 +301,27 @@ const Edit = ( { attributes, setAttributes, className }: EditProps ) => { false ) && renderMinAmountWarning() } - { amounts[ frequency ].map( ( suggestedAmount, tierIndex ) => ( - - ) ) } + { amounts[ frequency ].map( ( suggestedAmount, tierIndex ) => { + // The "Other" tier is no longer customizable and should always render empty for tiered layout. + if ( tierIndex === 3 ) { + return null; + } + return ( + + ); + } ) } ) } diff --git a/src/blocks/donate/frequency-based/index.ts b/src/blocks/donate/frequency-based/index.ts index dbed4edd7..b6b2fc195 100644 --- a/src/blocks/donate/frequency-based/index.ts +++ b/src/blocks/donate/frequency-based/index.ts @@ -25,12 +25,13 @@ function domReady( callback: () => void ): void { document.addEventListener( 'DOMContentLoaded', callback ); } -const resetOtherValue = ( container: HTMLElement ) => { +const handleOtherValue = ( container: HTMLElement ) => { const frequencies = container.querySelectorAll( '.tiers' ); if ( ! frequencies?.length ) { return; } const frequencyInputs = container.querySelectorAll( 'input[name="donation_frequency"]' ); + const submitButton = container.querySelector( 'button[type="submit"]' ); frequencies.forEach( frequency => { const tiers = frequency.querySelectorAll( 'input[type="radio"]' ); const input = frequency.querySelector( '.money-input input' ); @@ -41,11 +42,28 @@ const resetOtherValue = ( container: HTMLElement ) => { const reset = () => { input.value = originalValue || ''; }; + const toggleSubmit = () => { + const checkedTier = ( + frequency.querySelector( 'input[type="radio"]:checked' ) + ); + if ( ! checkedTier ) { + return; + } + if ( checkedTier.value === 'other' && ! input.value ) { + submitButton?.setAttribute( 'disabled', 'disabled' ); + } else { + submitButton?.removeAttribute( 'disabled' ); + } + }; + input.addEventListener( 'keyup', toggleSubmit ); + toggleSubmit(); tiers.forEach( tierInput => { tierInput.addEventListener( 'change', reset ); + tierInput.addEventListener( 'change', toggleSubmit ); } ); frequencyInputs.forEach( frequencyInput => { frequencyInput.addEventListener( 'change', reset ); + frequencyInput.addEventListener( 'change', toggleSubmit ); } ); } ); }; @@ -55,7 +73,7 @@ export const processFrequencyBasedElements = ( parentEl = document ) => { '.wpbnbd--frequency-based' ) as NodeListOf< HTMLElement >; elements.forEach( container => { - resetOtherValue( container ); + handleOtherValue( container ); } ); }; diff --git a/src/blocks/donate/frequency-based/style.scss b/src/blocks/donate/frequency-based/style.scss index 1133dc638..60867eba4 100644 --- a/src/blocks/donate/frequency-based/style.scss +++ b/src/blocks/donate/frequency-based/style.scss @@ -42,6 +42,9 @@ @include mixins.media( tablet ) { margin: 0 1.5rem 1.5rem; } + &:disabled { + opacity: 0.5; + } } label.wpbnbd { &__button { diff --git a/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-frequency-based.php b/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-frequency-based.php index eaeba4d7d..078b273c0 100644 --- a/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-frequency-based.php +++ b/src/blocks/donate/frontend/class-newspack-blocks-donate-renderer-frequency-based.php @@ -194,7 +194,6 @@ class='odl' type='number' min='' name='donation_value__other' - value='' id='newspack-tier--other-input' /> diff --git a/src/blocks/donate/styles/editor.scss b/src/blocks/donate/styles/editor.scss index 2975e1ef5..c60703ba9 100644 --- a/src/blocks/donate/styles/editor.scss +++ b/src/blocks/donate/styles/editor.scss @@ -23,7 +23,7 @@ span { margin-bottom: 7px; display: inline-block; - width: 48%; + width: 32%; } input { max-width: 100%; From 115e9fb95c78a13f1d87f4d086e767311dc7007d Mon Sep 17 00:00:00 2001 From: Laurel Date: Tue, 12 Dec 2023 14:24:07 -0800 Subject: [PATCH 2/7] feat: accessibility improvements to the donate block tabs (#1622) --- .../donate/edit/FrequencyBasedLayout.tsx | 32 ++++- src/blocks/donate/frequency-based/index.ts | 62 +++++++++ src/blocks/donate/frequency-based/style.scss | 97 +++++--------- ...blocks-donate-renderer-frequency-based.php | 62 ++++++++- .../donate/styles/style-variations.scss | 125 ++++++++++-------- src/blocks/donate/styles/view.scss | 3 +- 6 files changed, 250 insertions(+), 131 deletions(-) diff --git a/src/blocks/donate/edit/FrequencyBasedLayout.tsx b/src/blocks/donate/edit/FrequencyBasedLayout.tsx index 6ae184b1b..cd70edc42 100644 --- a/src/blocks/donate/edit/FrequencyBasedLayout.tsx +++ b/src/blocks/donate/edit/FrequencyBasedLayout.tsx @@ -7,7 +7,7 @@ import classNames from 'classnames'; * WordPress dependencies */ import { __ } from '@wordpress/i18n'; -import { useMemo, useEffect, useRef } from '@wordpress/element'; +import { useMemo, useEffect, useRef, useState } from '@wordpress/element'; import { SelectControl } from '@wordpress/components'; import { RichText } from '@wordpress/block-editor'; @@ -68,6 +68,8 @@ const FrequencyBasedLayout = ( props: { isTiered: boolean } & ComponentProps ) = const isRenderingStripePaymentForm = window.newspack_blocks_data?.is_rendering_stripe_payment_form; + const [ selectedFrequency, setSelectedFrequency ] = useState( attributes.defaultFrequency ); + const renderFrequencySelect = ( frequencySlug: DonationFrequencySlug ) => ( <> setSelectedFrequency( evt.target.value as 'once' | 'month' | 'year' ) } /> -