PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / trunk
GiveWP – Donation Plugin and Fundraising Platform vtrunk
4.16.2 4.16.1 4.16.0 4.15.5 4.15.4 4.15.3 4.15.2 4.15.1 4.15.0 2.3.0 2.3.1 2.3.2 2.30.0 2.31.0 2.31.1 2.32.0 2.33.0 2.33.1 2.33.2 2.33.3 2.33.4 2.33.5 2.4.0 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6 2.4.7 2.5.0 2.5.1 2.5.10 2.5.11 2.5.12 2.5.13 2.5.2 2.5.3 2.5.4 2.5.5 2.5.6 2.5.7 2.5.8 2.5.9 2.6.0 2.6.1 2.6.2 2.6.3 2.7.0 2.7.1 2.7.2 2.7.3 2.7.4 2.7.5 2.8.0 2.8.1 2.9.0 2.9.1 2.9.2 2.9.3 2.9.4 2.9.5 2.9.6 2.9.7 3.0.0 3.0.1 3.0.2 3.0.3 3.0.4 3.1.0 3.1.1 3.1.2 3.10.0 3.11.0 3.12.0 3.12.1 3.12.2 3.12.3 3.13.0 3.14.0 3.14.1 3.14.2 3.15.0 3.15.1 3.16.0 3.16.1 3.16.2 3.16.3 3.16.4 3.16.5 3.17.0 3.17.1 3.17.2 3.18.0 3.19.0 3.19.1 3.19.2 3.19.3 3.19.4 3.2.0 3.2.1 3.2.2 3.20.0 3.21.0 3.21.1 3.22.0 3.22.1 3.22.2 3.3.0 3.3.1 3.4.0 3.4.1 3.4.2 3.5.0 3.5.1 3.6.0 3.6.1 3.6.2 3.7.0 3.8.0 3.9.0 4.0.0 4.1.0 4.1.1 4.10.0 4.10.1 4.11.0 4.12.0 4.13.0 4.13.1 4.13.2 4.14.0 4.14.1 4.14.2 4.14.3 4.14.4 4.14.5 4.14.6 4.2.0 4.2.1 4.3.0 4.3.1 4.3.2 4.4.0 4.5.0 4.6.1 4.7.0 4.7.1 4.8.0 4.8.1 4.9.0 trunk 1.9.0 2.0.0 2.0.1 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.1.0 2.1.1 2.1.2 2.1.3 2.1.4 2.1.5 2.1.6 2.1.7 2.1.8 2.10.0 2.10.1 2.10.2 2.10.3 2.10.4 2.11.0 2.11.1 2.11.2 2.11.3 2.12.0 2.12.1 2.12.2 2.12.3 2.13.0 2.13.1 2.13.2 2.13.3 2.13.4 2.14.0 2.15.0 2.16.0 2.16.1 2.17.0 2.17.1 2.17.3 2.18.0 2.18.1 2.19.1 2.19.2 2.19.3 2.19.4 2.19.5 2.19.6 2.19.7 2.19.8 2.2.0 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.20.0 2.20.1 2.20.2 2.21.0 2.21.1 2.21.2 2.21.3 2.21.4 2.22.0 2.22.1 2.22.2 2.22.3 2.23.0 2.23.1 2.23.2 2.24.0 2.24.1 2.24.2 2.25.0 2.25.1 2.25.2 2.25.3 2.26.0 2.27.0 2.27.1 2.27.2 2.27.3 2.28.0 2.29.0 2.29.1 2.29.2
give / src / Admin / fields / CampaignFormGroup / index.tsx
give / src / Admin / fields / CampaignFormGroup Last commit date
index.tsx 8 months ago styles.module.scss 8 months ago useCampaignAsyncSelectOptions.ts 8 months ago useFormAsyncSelectOptions.ts 8 months ago
index.tsx
84 lines
1 /**
2 * External dependencies
3 */
4 import { useEffect } from 'react';
5 import { FieldError, useFormContext, useFormState } from 'react-hook-form';
6
7 /**
8 * WordPress dependencies
9 */
10 import { __ } from '@wordpress/i18n';
11
12 /**
13 * Internal dependencies
14 */
15 import styles from './styles.module.scss';
16 import AsyncSelectOption from '../AsyncSelectOption';
17 import useCampaignAsyncSelectOptions from './useCampaignAsyncSelectOptions';
18 import useFormAsyncSelectOptions from './useFormAsyncSelectOptions';
19 import { SelectOption } from '@givewp/admin/types';
20
21 type CampaignFormGroupProps = {
22 campaignIdFieldName: string;
23 formIdFieldName: string;
24 }
25
26 /**
27 * @since 4.11.0
28 */
29 export default function CampaignFormGroup({ campaignIdFieldName, formIdFieldName }: CampaignFormGroupProps) {
30 const { watch, setValue } = useFormContext();
31 const { errors } = useFormState();
32 const campaignId = watch(campaignIdFieldName);
33 const formId = watch(formIdFieldName);
34
35 const { selectedOption: campaignSelectedOption, loadOptions: campaignLoadOptions, mapOptionsForMenu: campaignMapOptionsForMenu, error: campaignError } = useCampaignAsyncSelectOptions(campaignId);
36 const { selectedOption: formSelectedOption, loadOptions: formLoadOptions, mapOptionsForMenu: formMapOptionsForMenu, error: formError } = useFormAsyncSelectOptions(formId, campaignId);
37
38 const handleCampaignChange = (selectedOption: SelectOption) => {
39 setValue(campaignIdFieldName, selectedOption?.value ?? null, { shouldDirty: true });
40 setValue(formIdFieldName, selectedOption?.record?.defaultFormId ?? null, { shouldDirty: true });
41 };
42
43 const handleFormChange = (selectedOption: SelectOption) => {
44 setValue(formIdFieldName, selectedOption?.value ?? null, { shouldDirty: true });
45 };
46
47
48 return (
49 <div className={styles.formRow}>
50 <AsyncSelectOption
51 name={campaignIdFieldName}
52 label={__('Campaign', 'give')}
53 handleChange={handleCampaignChange}
54 selectedOption={campaignSelectedOption}
55 loadOptions={campaignLoadOptions}
56 mapOptionsForMenu={campaignMapOptionsForMenu}
57 isLoadingError={campaignError}
58 errorMessage={errors[campaignIdFieldName]?.message as string}
59 searchPlaceholder={__('Search for a campaign...', 'give')}
60 loadingMessage={__('Loading campaigns...', 'give')}
61 loadingError={__('Error loading campaigns. Please try again.', 'give')}
62 ariaLabel={__('Select a campaign', 'give')}
63 noOptionsMessage={__('No campaigns found.', 'give')}
64 />
65 <AsyncSelectOption
66 key={`${campaignId}-${formId}`}
67 name={formIdFieldName}
68 label={__('Form', 'give')}
69 handleChange={handleFormChange}
70 selectedOption={formSelectedOption}
71 loadOptions={formLoadOptions}
72 mapOptionsForMenu={formMapOptionsForMenu}
73 isLoadingError={formError}
74 errorMessage={errors[formIdFieldName]?.message as string}
75 searchPlaceholder={__('Search for a form...', 'give')}
76 loadingMessage={__('Loading forms...', 'give')}
77 loadingError={__('Error loading forms. Please try again.', 'give')}
78 ariaLabel={__('Select a form', 'give')}
79 noOptionsMessage={__('No forms found.', 'give')}
80 />
81 </div>
82 )
83 }
84