import { TextControl, SelectControl } from '@wordpress/components'; import PTRichText from '@admin/components/PTRichText'; import { useEditFormContext } from '@admin/context/EditFormContext'; import type { DefaultValues } from '@admin/sections/EditFields/consts'; import { __ } from '@wordpress/i18n'; import CheckboxInput from '@admin/components/CheckboxInput'; /* * Normalize the default values from the raw data * to ensure they match the expected structure. * * @param raw - The raw default values from the server. * @returns An object with default values for the form fields. */ export const normalizeDefaultValues = (raw: unknown): DefaultValues => { const DEFAULT_SUBJECT = __( 'Thank you for signing the {{petition_title}}', 'petitioner' ); const DEFAULT_CONTENT = __( 'Thank you for signing the {{petition_title}}. Your signature has been recorded and will be sent to {{petition_target}}.', 'petitioner' ); const defaultValues: DefaultValues = { from_field: '', from_name: '', ty_email_subject: DEFAULT_SUBJECT, ty_email: DEFAULT_CONTENT, ty_email_subject_confirm: DEFAULT_SUBJECT, ty_email_confirm: DEFAULT_CONTENT, success_message_title: '', success_message: '', country_list: [], }; if (typeof raw !== 'object' || raw === null) { return defaultValues; } const input = raw as Record; for (const key of Object.keys(defaultValues) as (keyof DefaultValues)[]) { const value = input[key]; if (key === 'country_list') { if (Array.isArray(value)) { defaultValues[key] = value; } continue; } if (typeof value === 'string' && value.trim().length > 0) { defaultValues[key] = value; } } return defaultValues; }; function getThankYouDefaults( defaults: DefaultValues, approvalState: string ): { subject: string; content: string } { const isConfirmEmail = approvalState === 'Email'; return { subject: isConfirmEmail ? defaults.ty_email_subject_confirm : defaults.ty_email_subject, content: isConfirmEmail ? defaults.ty_email_confirm : defaults.ty_email, }; } /** * Advanced Settings Component */ export default function AdvancedSettings() { const { formState, updateFormState } = useEditFormContext(); const defaultValues = normalizeDefaultValues( window.petitionerData?.default_values ); const defaultFromField = defaultValues?.from_field || ''; const defaultFromName = defaultValues?.from_name || ''; const confirmEmails = formState.approval_state === 'Email'; const { subject: defaultTYSubject, content: defaultTYEmailContent } = getThankYouDefaults(defaultValues, formState.approval_state); const defaultSuccessMessageTitle = defaultValues?.success_message_title || ''; const defaultSuccessMessageContent = defaultValues?.success_message || ''; return ( <> updateFormState('add_honeypot', e.target.checked) } />

updateFormState('from_field', value)} />

updateFormState('from_name', value)} />

{ const isChecked = e.target.checked; updateFormState('require_approval', isChecked); updateFormState('approval_state', 'Email'); window.petitionerData.require_approval = isChecked; // Trigger custom event const evt = new CustomEvent('onPtrApprovalChange', { detail: { requireApproval: isChecked, }, }); window.dispatchEvent(evt); }} /> {formState.require_approval && (

{ updateFormState('approval_state', value); window.petitionerData.approval_state = value; // Trigger custom event const evt = new CustomEvent('onPtrApprovalChange', { detail: { approvalState: value, }, }); window.dispatchEvent(evt); }} />

)} {__( 'Use this to customize the thank you email sent when submitting a petition.', 'petitioner' )} {confirmEmails && formState.override_ty_email && ( <>
{__( 'Make sure to include the email confirmation variable.', 'petitioner' )}{' '} {'{{confirmation_link}}'} )} } onChange={(e) => updateFormState('override_ty_email', e.target.checked) } /> {formState.override_ty_email && ( <>

0 ? formState.ty_email_subject : defaultTYSubject } name="petitioner_ty_email_subject" id="petitioner_ty_email_subject" onChange={(value) => updateFormState('ty_email_subject', value) } />

{__( 'This will be the content of the thank you email sent to the signer. You can use the following dynamic tags:', 'petitioner' )}
{formState.approval_state === 'Email' && ( )}
} value={ String(formState?.ty_email).length > 0 ? formState.ty_email : defaultTYEmailContent } onChange={(value) => updateFormState('ty_email', value)} height={150} /> )} updateFormState( 'override_success_message', e.target.checked ) } /> {formState.override_success_message && ( <>

0 ? formState.success_message_title : defaultSuccessMessageTitle } name="petitioner_success_message_title" id="petitioner_success_message_title" onChange={(value) => updateFormState('success_message_title', value) } />

0 ? formState.success_message : defaultSuccessMessageContent } onChange={(value) => updateFormState('success_message', value) } height={150} /> )} updateFormState('hide_last_names', e.target.checked) } />

updateFormState('redirect_url', value) } />


updateFormState('confirm_success_url', value) } />

updateFormState('confirm_error_url', value) } />

); }