PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.16.2
GiveWP – Donation Plugin and Fundraising Platform v4.16.2
4.16.3 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 / Campaigns / Blocks / shared / components / CampaignSelector / Selector.tsx
give / src / Campaigns / Blocks / shared / components / CampaignSelector Last commit date
images 1 year ago Inspector.tsx 1 year ago Selector.tsx 7 months ago index.tsx 1 year ago reactSelectStyles.ts 1 year ago styles.scss 1 year ago
Selector.tsx
81 lines
1 import {useState} from 'react';
2 import {__} from '@wordpress/i18n';
3 import {Campaign} from '@givewp/campaigns/admin/components/types';
4 import ReactSelect from 'react-select';
5 import {EmotionStylesProvider} from '@givewp/admin/providers';
6 import {reactSelectStyles, reactSelectThemeStyles} from './reactSelectStyles';
7 import logo from './images/givewp-logo.svg';
8
9 import './styles.scss';
10
11 type CampaignSelectorProps = {
12 hasResolved: boolean;
13 campaigns: Campaign[];
14 handleSelect: (id: number) => void;
15 }
16
17 /**
18 * @since 4.0.0
19 */
20 export default ({campaigns, hasResolved, handleSelect}: CampaignSelectorProps) => {
21 const [selectedCampaign, setSelectedCampaign] = useState<number>(null);
22
23 const campaignOptions = (() => {
24 if (!hasResolved) {
25 return [{label: __('Loading...', 'give'), value: ''}];
26 }
27
28 if (campaigns.length) {
29 const campaignOptions = campaigns.map((campaign) => ({
30 label: `${campaign.title} ${campaign.status === 'draft' ? `(${__('Draft', 'give')})` : ''}`.trim(),
31 value: campaign.id,
32 }));
33
34 return [{label: __('Select a campaign', 'give'), value: ''}, ...campaignOptions];
35 }
36
37 return [{label: __('No campaigns found.', 'give'), value: ''}];
38 })();
39
40 const campaign = campaignOptions.find(option => option.value === selectedCampaign);
41
42 return (
43 <div className="givewp-campaign-selector">
44 <img className="givewp-campaign-selector__logo" src={logo} alt="givewp-logo" />
45 <div className="givewp-campaign-selector__select">
46 <label htmlFor="campaignId" className="givewp-campaign-selector__label">
47 {__('Choose a campaign', 'give')}
48 </label>
49
50 <EmotionStylesProvider cacheKey="givewp-campaign-selector">
51 <ReactSelect
52 name="campaignId"
53 inputId="campaignId"
54 value={campaign}
55 //@ts-ignore
56 onChange={(option) => setSelectedCampaign(option?.value)}
57 noOptionsMessage={() => <p>{__('No campaigns were found.', 'give')}</p>}
58 //@ts-ignore
59 options={campaignOptions}
60 loadingMessage={() => <>{__('Loading Campaigns...', 'give')}</>}
61 isLoading={!hasResolved}
62 theme={reactSelectThemeStyles}
63 styles={reactSelectStyles}
64 />
65 </EmotionStylesProvider>
66 </div>
67
68 <button
69 className="givewp-campaign-selector__submit"
70 type="button"
71 disabled={!selectedCampaign}
72 onClick={() => {
73 handleSelect(selectedCampaign);
74 }}
75 >
76 {__('Confirm', 'give')}
77 </button>
78 </div>
79 );
80 }
81