PluginProbe ʕ •ᴥ•ʔ
GiveWP – Donation Plugin and Fundraising Platform / 3.0.4
GiveWP – Donation Plugin and Fundraising Platform v3.0.4
4.16.4 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 / DonationForms / Blocks / DonationFormBlock / resources / editor / Edit.tsx
give / src / DonationForms / Blocks / DonationFormBlock / resources / editor Last commit date
components 2 years ago hooks 2 years ago images 2 years ago styles 2 years ago types 2 years ago Edit.tsx 2 years ago
Edit.tsx
175 lines
1 import {__} from '@wordpress/i18n';
2 import {InspectorControls, useBlockProps} from '@wordpress/block-editor';
3 import {ExternalLink, PanelBody, PanelRow, SelectControl, TextControl} from '@wordpress/components';
4 import {Fragment, useCallback, useEffect, useState} from '@wordpress/element';
5 import useFormOptions from './hooks/useFormOptions';
6 import ConfirmButton from './components/ConfirmButton';
7 import Logo from './components/Logo';
8 import {BlockEditProps} from '@wordpress/blocks';
9 import ReactSelect from 'react-select';
10 import BlockPreview from './components/BlockPreview';
11
12 import './styles/index.scss';
13
14 /**
15 * @since 3.0.0
16 */
17 export default function Edit({clientId, attributes, setAttributes}: BlockEditProps<any>) {
18 const {formId, blockId, formFormat, openFormButton} = attributes;
19 const {formOptions, isResolving} = useFormOptions();
20 const [showPreview, setShowPreview] = useState<boolean>(!!formId);
21
22 const showOpenFormButton = formFormat === 'reveal' || formFormat === 'modal';
23
24 useEffect(() => {
25 if (!blockId) {
26 setAttributes({blockId: clientId});
27 }
28 }, []);
29
30 const getDefaultFormId = useCallback(() => {
31 if (!isResolving && formOptions.length > 0) {
32 return formId && formOptions?.find(({value}) => value === formId);
33 }
34 }, [isResolving, formId, JSON.stringify(formOptions)]);
35
36 return (
37 <Fragment>
38 {/*block controls*/}
39 <InspectorControls>
40 <PanelBody title={__('Form Settings', 'give')} initialOpen={true}>
41 <PanelRow>
42 {!isResolving && formOptions.length === 0 ? (
43 <p>{__('No forms were found using the GiveWP form builder.', 'give')}</p>
44 ) : (
45 <SelectControl
46 label={__('Choose a donation form', 'give')}
47 value={formId ?? ''}
48 options={[
49 // add a disabled selector manually
50 ...[{value: '', label: __('Select...', 'give'), disabled: true}],
51 ...formOptions,
52 ]}
53 onChange={(newFormId) => {
54 setAttributes({formId: newFormId});
55 }}
56 />
57 )}
58 </PanelRow>
59 <PanelRow>
60 <SelectControl
61 label={__('Form Format', 'give')}
62 value={formFormat}
63 options={[
64 {
65 label: __('Full Form', 'give'),
66 value: 'full',
67 },
68 {
69 label: __('Reveal', 'give'),
70 value: 'reveal',
71 },
72 {
73 label: __('Modal', 'give'),
74 value: 'modal',
75 },
76 ]}
77 onChange={(value) => {
78 setAttributes({formFormat: value});
79 }}
80 />
81 </PanelRow>
82 {showOpenFormButton && (
83 <PanelRow>
84 <TextControl
85 label={__('Open Form Button', 'give')}
86 value={openFormButton}
87 onChange={(value) => {
88 setAttributes({openFormButton: value});
89 }}
90 />
91 </PanelRow>
92 )}
93 <PanelRow>
94 {formId && (
95 <ExternalLink
96 href={`/wp-admin/edit.php?post_type=give_forms&page=givewp-form-builder&donationFormID=${formId}`}
97 >
98 {__('Edit donation form', 'give')}
99 </ExternalLink>
100 )}
101 </PanelRow>
102 </PanelBody>
103 </InspectorControls>
104
105 {/*block preview*/}
106 <div {...useBlockProps()}>
107 {formId && showPreview ? (
108 <BlockPreview
109 clientId={clientId}
110 formId={formId}
111 formFormat={formFormat}
112 openFormButton={openFormButton}
113 />
114 ) : (
115 <div className="givewp-form-block--container">
116 <Logo />
117
118 <div className="givewp-form-block__select--container">
119 <label htmlFor="formId" className="givewp-form-block__select--label">
120 {__('Choose a donation form', 'give')}
121 </label>
122
123 <ReactSelect
124 classNamePrefix="givewp-form-block__select"
125 name="formId"
126 inputId="formId"
127 value={getDefaultFormId()}
128 placeholder={
129 isResolving ? __('Loading Donation Forms...', 'give') : __('Select...', 'give')
130 }
131 onChange={(option) => {
132 if (option) {
133 setAttributes({formId: option.value});
134 }
135 }}
136 noOptionsMessage={() => (
137 <p>{__('No forms were found using the GiveWP form builder.', 'give')}</p>
138 )}
139 options={formOptions}
140 loadingMessage={() => <>{__('Loading Donation Forms...', 'give')}</>}
141 isLoading={isResolving}
142 theme={(theme) => ({
143 ...theme,
144 colors: {
145 ...theme.colors,
146 primary: '#27ae60',
147 },
148 })}
149 styles={{
150 input: (provided, state) => ({
151 ...provided,
152 height: '3rem',
153 }),
154 option: (provided, state) => ({
155 ...provided,
156 paddingTop: '0.8rem',
157 paddingBottom: '0.8rem',
158 fontSize: '1rem',
159 }),
160 control: (provided, state) => ({
161 ...provided,
162 fontSize: '1rem',
163 }),
164 }}
165 />
166 </div>
167
168 <ConfirmButton formId={formId} enablePreview={() => setShowPreview(true)} />
169 </div>
170 )}
171 </div>
172 </Fragment>
173 );
174 }
175