/** * External dependencies */ import { useEffect } from 'react'; import { FieldError, useFormContext, useFormState } from 'react-hook-form'; /** * WordPress dependencies */ import { __ } from '@wordpress/i18n'; /** * Internal dependencies */ import styles from './styles.module.scss'; import AsyncSelectOption from '../AsyncSelectOption'; import useCampaignAsyncSelectOptions from './useCampaignAsyncSelectOptions'; import useFormAsyncSelectOptions from './useFormAsyncSelectOptions'; import { SelectOption } from '@givewp/admin/types'; type CampaignFormGroupProps = { campaignIdFieldName: string; formIdFieldName: string; } /** * @since 4.11.0 */ export default function CampaignFormGroup({ campaignIdFieldName, formIdFieldName }: CampaignFormGroupProps) { const { watch, setValue } = useFormContext(); const { errors } = useFormState(); const campaignId = watch(campaignIdFieldName); const formId = watch(formIdFieldName); const { selectedOption: campaignSelectedOption, loadOptions: campaignLoadOptions, mapOptionsForMenu: campaignMapOptionsForMenu, error: campaignError } = useCampaignAsyncSelectOptions(campaignId); const { selectedOption: formSelectedOption, loadOptions: formLoadOptions, mapOptionsForMenu: formMapOptionsForMenu, error: formError } = useFormAsyncSelectOptions(formId, campaignId); const handleCampaignChange = (selectedOption: SelectOption) => { setValue(campaignIdFieldName, selectedOption?.value ?? null, { shouldDirty: true }); setValue(formIdFieldName, selectedOption?.record?.defaultFormId ?? null, { shouldDirty: true }); }; const handleFormChange = (selectedOption: SelectOption) => { setValue(formIdFieldName, selectedOption?.value ?? null, { shouldDirty: true }); }; return (