PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 4.2.0
GiveWP – Donation Plugin and Fundraising Platform v4.2.0
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 / Campaign / edit.tsx
give / src / Campaigns / Blocks / Campaign Last commit date
CampaignShortcode.php 1 year ago app.tsx 1 year ago block.json 1 year ago edit.tsx 1 year ago index.tsx 1 year ago render.php 1 year ago types.ts 1 year ago
edit.tsx
151 lines
1 import {__} from '@wordpress/i18n';
2 import React, {CSSProperties, useState} from 'react';
3 import {InspectorControls, useBlockProps} from '@wordpress/block-editor';
4 import {BlockEditProps} from '@wordpress/blocks';
5 import {PanelBody, ToggleControl} from '@wordpress/components';
6 import {CampaignBlockType} from './types';
7 import CampaignSelector from '../shared/components/CampaignSelector';
8 import CampaignCard from '../shared/components/CampaignCard';
9 import {BlockNotice} from '@givewp/form-builder-library';
10 import {getCampaignOptionsWindowData, updateUserNoticeOptions, useCampaignEntityRecord, createCampaignPage} from '@givewp/campaigns/utils';
11
12
13 const styles = {
14 title: {
15 fontWeight: 600
16 },
17 notice: {
18 position: 'relative',
19 display: 'flex',
20 flexDirection: 'column',
21 gap: 8,
22 padding: 16,
23 borderRadius: 2,
24 color: '#0e0e0e',
25 background: '#f2f2f2',
26 fontSize: 12,
27 lineHeight: 1.33,
28 },
29 close: {
30 position: 'absolute',
31 cursor: 'pointer',
32 right: 16,
33 top: 16,
34 },
35 link: {
36 color: '#0e0e0e',
37 }
38 } as CSSProperties;
39
40 const CloseIcon = () => (
41 <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
42 <path
43 d="M11.805 5.138a.667.667 0 1 0-.943-.943L8 7.057 5.138 4.195a.667.667 0 1 0-.943.943L7.057 8l-2.862 2.862a.667.667 0 1 0 .943.943L8 8.943l2.862 2.862a.667.667 0 1 0 .943-.943L8.943 8l2.862-2.862z"
44 fill="#0E0E0E" />
45 </svg>
46 )
47
48 export default function Edit({attributes, setAttributes}: BlockEditProps<CampaignBlockType>) {
49 const blockProps = useBlockProps();
50 const campaignWindowData = getCampaignOptionsWindowData();
51 const [showNotification, setShowNotification] = useState(campaignWindowData.admin.showCampaignInteractionNotice);
52 const {campaign, hasResolved, edit, save} = useCampaignEntityRecord(attributes.campaignId);
53
54
55 const Notices = () => {
56 if (!attributes.campaignId) {
57 return null;
58 }
59
60 if (campaign.pageId) {
61 if (!showNotification) {
62 return null;
63 }
64
65 return (
66 <p style={styles['notice']}>
67 <span
68 style={styles['close']}
69 onClick={() => {
70 updateUserNoticeOptions('givewp_campaign_interaction_notice').then(() => setShowNotification(false))
71 }}>
72 <CloseIcon />
73 </span>
74 <span style={styles['title']}>
75 {__('Campaign interaction', 'give ')}
76 </span>
77 <span>
78 {__('Users will be redirected to campaign page.', 'give')}
79 </span>
80 </p>
81 )
82 }
83
84 return (
85 <BlockNotice
86 title={__('There is no Campaign page for this campaign.', 'give ')}
87 description={__('For this campaign block to work properly, create a campaign page.', 'give')}
88 >
89 <a
90 href="#"
91 onClick={async (e) => {
92 e.preventDefault();
93 const campaignPageResponse = await createCampaignPage(campaign.id)
94
95 if (campaignPageResponse) {
96 edit({...campaign, pageId: campaignPageResponse?.id});
97
98 await save();
99 }
100 }}
101 style={styles['link']}
102 >
103 {__('Create campaign page.', 'give')}
104 </a>
105 </BlockNotice>
106 )
107 };
108
109 return (
110 <div {...blockProps}>
111 {hasResolved && (
112 <>
113 <CampaignSelector
114 campaignId={attributes.campaignId}
115 handleSelect={(campaignId: number) => setAttributes({campaignId})}
116 showInspectorControl={true}
117 inspectorControls={<Notices />}
118 >
119 <CampaignCard
120 campaign={campaign}
121 showImage={attributes.showImage}
122 showDescription={attributes.showDescription}
123 showGoal={attributes.showGoal}
124 />
125 </CampaignSelector>
126
127 <InspectorControls>
128 <PanelBody title={__('Display Elements', 'give')} initialOpen={true}>
129 <ToggleControl
130 label={__('Show campaign image', 'give')}
131 checked={attributes.showImage}
132 onChange={(showImage) => setAttributes({showImage})}
133 />
134 <ToggleControl
135 label={__('Show description', 'give')}
136 checked={attributes.showDescription}
137 onChange={(showDescription) => setAttributes({showDescription})}
138 />
139 <ToggleControl
140 label={__('Show goal', 'give')}
141 checked={attributes.showGoal}
142 onChange={(showGoal) => setAttributes({showGoal})}
143 />
144 </PanelBody>
145 </InspectorControls>
146 </>
147 )}
148 </div>
149 )
150 }
151