diff --git a/src/blocks/donate/edit/FrequencyBasedLayout.tsx b/src/blocks/donate/edit/FrequencyBasedLayout.tsx index 39b463707..1bf6c3cae 100644 --- a/src/blocks/donate/edit/FrequencyBasedLayout.tsx +++ b/src/blocks/donate/edit/FrequencyBasedLayout.tsx @@ -14,9 +14,10 @@ import { RichText } from '@wordpress/block-editor'; * Internal dependencies */ import { AmountValueInput } from './components'; -import { getColorForContrast, getFrequencyLabel } from '../utils'; +import { getColorForContrast, getFrequencyLabel, getFrequencyLabelWithAmount } from '../utils'; import { FREQUENCIES } from '../consts'; import type { ComponentProps, DonationFrequencySlug } from '../types'; +import { updateBlockClassName, getFormData } from '../view' const FrequencyBasedLayout = ( props: { isTiered: boolean } & ComponentProps ) => { // Unique identifier to prevent collisions with other Donate blocks' labels. @@ -26,10 +27,25 @@ const FrequencyBasedLayout = ( props: { isTiered: boolean } & ComponentProps ) = const formRef = useRef< HTMLFormElement >( null ); + // Add event listeners to the form. + useEffect( () => { + if ( formRef.current !== null ) { + const parentElement = formRef.current.closest('.wpbnbd'); + if ( parentElement ) { + updateBlockClassName( parentElement, getFormData( formRef.current )); + } + formRef.current.addEventListener('change', () => { + if ( formRef.current !== null && parentElement ) { + updateBlockClassName( parentElement, getFormData( formRef.current )); + } + }) + } + }, [] ); + // Update selected frequency when available frequencies change. useEffect( () => { if ( formRef.current ) { - const formValues = Object.fromEntries( new FormData( formRef.current ) ); + const formValues = getFormData( formRef.current ); if ( ! formValues.donation_frequency && formRef.current.elements ) { const frequencyRadioInput = formRef.current.elements[ 0 ]; if ( frequencyRadioInput instanceof HTMLInputElement ) { @@ -92,10 +108,17 @@ const FrequencyBasedLayout = ( props: { isTiered: boolean } & ComponentProps ) = // This code is fired on tab select and updates aria elements, tabindex states, and radio buttons const displayAmount = ( amount: number ) => amount.toFixed( 2 ).replace( /\.?0*$/, '' ); + const renderFormHeader = () => { + return ! rendersSingleFrequency && ( +