PluginProbe
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz / 0.0.3
SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz v0.0.3
2.12.6 2.12.5 2.12.4 2.12.3 2.12.2 2.12.1 2.12.0 2.11.1 2.11.0 2.10.1 2.10.0 2.9.1 2.9.0 2.8.2 2.8.1 2.7.0 2.7.1 2.8.0 trunk 0.0.10 0.0.11 0.0.12 0.0.13 0.0.2 0.0.3 All 96 releases
sureforms / src / admin / settings / Component.js

Component.js in SureForms – Contact Form Builder, AI Forms, Payment Form, Survey & Quiz 0.0.3, at src/admin/settings/Component.js

520 lines 17.4 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import { __ } from '@wordpress/i18n';
2 // settings icons.
3 import GeneralIcon from './settingsIcon.js';
4 import { BaseControl, TabPanel } from '@wordpress/components';
5 import { useState, useEffect, Fragment } from '@wordpress/element';
6 import { ToastContainer, toast } from 'react-toastify';
7 import 'react-toastify/dist/ReactToastify.css';
8 import apiFetch from '@wordpress/api-fetch';
9 import EmailSummary from './tabs/EmailSummary.js';
10
11 const Component = ( { path } ) => {
12 const [ sureformsV2CheckboxSite, setSureformsV2CheckboxSite ] =
13 useState( '' );
14 const [ sureformsV2CheckboxSecret, setSureformsV2CheckboxSecret ] =
15 useState( '' );
16 const [ sureformsV2InvisibleSite, setSureformsV2InvisibleSite ] =
17 useState( '' );
18 const [ sureformsV2InvisibleSecret, setSureformsV2InvisibleSecret ] =
19 useState( '' );
20 const [ sureformsV3Site, setSureformsV3Site ] = useState( '' );
21 const [ sureformsV3Secret, setSureformsV3Secret ] = useState( '' );
22
23 const [ formData, setFormData ] = useState( {} );
24 const [ honeyPot, setHoneyPot ] = useState( false );
25 const [ isIpLog, setIsIpLog ] = useState( false );
26
27 const onSelect = () => {};
28
29 const handleChange = ( e ) => {
30 const { name, value, type, checked } = e.target;
31 const newValue = value;
32
33 if ( name === 'srfm_v2_checkbox_secret' ) {
34 setSureformsV2CheckboxSecret( newValue );
35 setFormData( () => ( {
36 srfm_v2_checkbox_site: sureformsV2CheckboxSite,
37 srfm_v2_invisible_site: sureformsV2InvisibleSite,
38 srfm_v2_invisible_secret: sureformsV2InvisibleSecret,
39 srfm_v3_site: sureformsV3Site,
40 srfm_v3_secret: sureformsV3Secret,
41 honeypot_toggle: honeyPot,
42 srfm_ip_log: isIpLog,
43 [ name ]: newValue,
44 } ) );
45 } else if ( name === 'srfm_v2_checkbox_site' ) {
46 setSureformsV2CheckboxSite( newValue );
47 setFormData( () => ( {
48 srfm_v2_checkbox_secret: sureformsV2CheckboxSecret,
49 srfm_v2_invisible_site: sureformsV2InvisibleSite,
50 srfm_v2_invisible_secret: sureformsV2InvisibleSecret,
51 srfm_v3_site: sureformsV3Site,
52 srfm_v3_secret: sureformsV3Secret,
53 honeypot_toggle: honeyPot,
54 srfm_ip_log: isIpLog,
55 [ name ]: newValue,
56 } ) );
57 } else if ( name === 'srfm_v2_invisible_secret' ) {
58 setSureformsV2InvisibleSecret( newValue );
59 setFormData( () => ( {
60 srfm_v2_invisible_site: sureformsV2InvisibleSite,
61 srfm_v2_checkbox_site: sureformsV2CheckboxSite,
62 srfm_v2_checkbox_secret: sureformsV2CheckboxSecret,
63 srfm_v3_site: sureformsV3Site,
64 srfm_v3_secret: sureformsV3Secret,
65 honeypot_toggle: honeyPot,
66 srfm_ip_log: isIpLog,
67 [ name ]: newValue,
68 } ) );
69 } else if ( name === 'srfm_v2_invisible_site' ) {
70 setSureformsV2InvisibleSite( newValue );
71 setFormData( () => ( {
72 srfm_v2_invisible_secret: sureformsV2InvisibleSecret,
73 srfm_v2_checkbox_site: sureformsV2CheckboxSite,
74 srfm_v2_checkbox_secret: sureformsV2CheckboxSecret,
75 srfm_v3_site: sureformsV3Site,
76 srfm_v3_secret: sureformsV3Secret,
77 honeypot_toggle: honeyPot,
78 srfm_ip_log: isIpLog,
79 [ name ]: newValue,
80 } ) );
81 } else if ( name === 'srfm_v3_secret' ) {
82 setSureformsV3Secret( newValue );
83 setFormData( () => ( {
84 srfm_v2_invisible_secret: sureformsV2InvisibleSecret,
85 srfm_v2_checkbox_site: sureformsV2CheckboxSite,
86 srfm_v2_checkbox_secret: sureformsV2CheckboxSecret,
87 srfm_v3_site: sureformsV3Site,
88 srfm_v2_invisible_site: sureformsV2InvisibleSite,
89 honeypot_toggle: honeyPot,
90 srfm_ip_log: isIpLog,
91 [ name ]: newValue,
92 } ) );
93 } else if ( name === 'srfm_v3_site' ) {
94 setSureformsV3Site( newValue );
95 setFormData( () => ( {
96 srfm_v2_invisible_secret: sureformsV2InvisibleSecret,
97 srfm_v2_checkbox_site: sureformsV2CheckboxSite,
98 srfm_v2_checkbox_secret: sureformsV2CheckboxSecret,
99 srfm_v3_secret: sureformsV3Secret,
100 srfm_v2_invisible_site: sureformsV2InvisibleSite,
101 honeypot_toggle: honeyPot,
102 srfm_ip_log: isIpLog,
103 [ name ]: newValue,
104 } ) );
105 } else if ( name === 'honeypot_toggle' ) {
106 const honeyPotValue = type === 'checkbox' ? checked : value;
107
108 setHoneyPot( ! honeyPot );
109 setFormData( () => ( {
110 srfm_v2_invisible_site: sureformsV2InvisibleSite,
111 srfm_v2_invisible_secret: sureformsV2InvisibleSecret,
112 srfm_v2_checkbox_site: sureformsV2CheckboxSite,
113 srfm_v2_checkbox_secret: sureformsV2CheckboxSecret,
114 srfm_v3_site: sureformsV3Site,
115 srfm_v3_secret: sureformsV3Secret,
116 srfm_ip_log: isIpLog,
117 [ name ]: honeyPotValue,
118 } ) );
119 } else if ( name === 'ip_toggle' ) {
120 const ipValue = type === 'checkbox' ? checked : value;
121 setIsIpLog( ! isIpLog );
122 setFormData( () => ( {
123 srfm_v2_invisible_site: sureformsV2InvisibleSite,
124 srfm_v2_invisible_secret: sureformsV2InvisibleSecret,
125 srfm_v2_checkbox_site: sureformsV2CheckboxSite,
126 srfm_v2_checkbox_secret: sureformsV2CheckboxSecret,
127 srfm_v3_site: sureformsV3Site,
128 srfm_v3_secret: sureformsV3Secret,
129 honeypot_toggle: honeyPot,
130 srfm_ip_log: ipValue,
131 } ) );
132 }
133 };
134
135 const handleSubmit = async ( e ) => {
136 e.preventDefault();
137 try {
138 await apiFetch( {
139 path: 'sureforms/v1/srfm-settings',
140 method: 'POST',
141 body: JSON.stringify( formData ),
142 headers: {
143 'content-type': 'application/json',
144 'X-WP-Nonce': srfm_admin.global_settings_nonce,
145 },
146 } );
147 toast.success( __( 'Settings Saved Successfully!', 'sureforms' ), {
148 position: 'bottom-right',
149 hideProgressBar: true,
150 } );
151 } catch ( error ) {
152 toast.error( __( 'Error Saving Settings!', 'sureforms' ), {
153 position: 'bottom-right',
154 hideProgressBar: true,
155 } );
156 console.error( error );
157 }
158 };
159
160 useEffect( () => {
161 const fetchData = async () => {
162 try {
163 const data = await apiFetch( {
164 path: 'sureforms/v1/srfm-settings',
165 method: 'GET',
166 headers: {
167 'content-type': 'application/json',
168 'X-WP-Nonce': srfm_admin.global_settings_nonce,
169 },
170 } );
171
172 if ( data ) {
173 setSureformsV2CheckboxSecret(
174 data.srfm_v2_checkbox_secret &&
175 data.srfm_v2_checkbox_secret
176 );
177 setSureformsV2CheckboxSite(
178 data.srfm_v2_checkbox_site && data.srfm_v2_checkbox_site
179 );
180 setSureformsV2InvisibleSecret(
181 data.srfm_v2_invisible_secret &&
182 data.srfm_v2_invisible_secret
183 );
184 setSureformsV2InvisibleSite(
185 data.srfm_v2_invisible_site &&
186 data.srfm_v2_invisible_site
187 );
188 setSureformsV3Secret(
189 data.srfm_v3_secret && data.srfm_v3_secret
190 );
191 setSureformsV3Site(
192 data.srfm_v3_site && data.srfm_v3_site
193 );
194 setHoneyPot( data.srfm_honeypot && data.srfm_honeypot );
195 setIsIpLog( data.srfm_ip_log && data.srfm_ip_log );
196 }
197 } catch ( error ) {
198 console.error( 'Error fetching datates:', error );
199 }
200 };
201
202 fetchData();
203 }, [] );
204
205 if ( 'general-settings' === path ) {
206 return (
207 <div className="srfm-flex srfm-justify-center lg:srfm-w-[100%] md:srfm-w-[80%] srfm-w-[70%]">
208 <ToastContainer />
209 <div className="srfm-w-full srfm-p-8 srfm-bg-[#FBFBFC] srfm-rounded-md srfm-m-4 srfm-h-3/4 srfm-overflow-scroll srfm-shadow-md srfm-mb-8">
210 <div
211 className="srfm-flex srfm-gap-2 srfm-text-left srfm-text-[17.6px] srfm-text-[#111827] srfm-pb-4"
212 style={ {
213 borderBottom: '1px solid rgba(229, 231, 235, 1)',
214 } }
215 >
216 <GeneralIcon />
217 <span className="srfm-font-semibold">
218 { __( 'General Settings', 'sureforms' ) }
219 </span>
220 </div>
221 <form onSubmit={ handleSubmit }>
222 <div className="srfm-mt-4">
223 { /* Google reCAPTCHA Settings */ }
224 <div
225 className="srfm-mb-4 srfm-flex srfm-items-start srfm-gap-10"
226 style={ {
227 borderBottom:
228 '1px solid rgba(229, 231, 235, 1)',
229 } }
230 >
231 <div className="srfm-max-w-[250px]">
232 <BaseControl
233 help={ __(
234 'A CAPTCHA serves as an anti-spam measure, safeguarding your website against spam and misuse.',
235 'sureforms'
236 ) }
237 >
238 <h3 className="srfm-text-base srfm-font-semibold srfm-text-gray-90">
239 { __(
240 'Google reCAPTCHA Settings',
241 'sureforms'
242 ) }
243 </h3>
244 </BaseControl>
245 </div>
246 <div>
247 <TabPanel
248 activeClass="active-recaptcha"
249 onSelect={ ( tab ) => onSelect( tab ) }
250 tabs={ [
251 {
252 name: 'srfm-recaptcha-v2-checkbox',
253 title: 'v2 Checkbox',
254 className: 'recaptcha-tab',
255 },
256 {
257 name: 'srfm-recaptcha-v2-invisible',
258 title: 'v2 Invisible',
259 className: 'recaptcha-tab',
260 },
261 {
262 name: 'srfm-recaptcha-v3',
263 title: 'v3 reCAPTCHA',
264 className: 'recaptcha-tab',
265 },
266 ] }
267 >
268 { ( tab ) => {
269 switch ( tab.title ) {
270 case 'v2 Checkbox':
271 return (
272 <div className="srfm-w-[600px] srfm-mt-4">
273 <Fragment>
274 <div className="srfm-mb-4 ">
275 <input
276 type="text"
277 name="srfm_v2_checkbox_site"
278 id="srfm_v2_checkbox_site"
279 className="srfm-block srfm-w-full srfm-rounded-md srfm-border-0 srfm-py-1.5 srfm-text-gray-900 srfm-shadow-sm srfm-ring-1 srfm-ring-inset srfm-ring-gray-300 placeholder:srfm-text-gray-400 focus:srfm-ring-2 focus:srfm-ring-inset focus:srfm-ring-indigo-600 sm:srfm-text-sm sm:srfm-leading-6"
280 placeholder={ __(
281 'Site Key v2 checkbox',
282 'sureforms'
283 ) }
284 onChange={
285 handleChange
286 }
287 value={
288 sureformsV2CheckboxSite
289 }
290 />
291 </div>
292 </Fragment>
293 <Fragment>
294 <div className="srfm-mb-4">
295 <input
296 type="text"
297 name="srfm_v2_checkbox_secret"
298 id="srfm_v2_checkbox_secret"
299 className="srfm-block srfm-w-full srfm-rounded-md srfm-border-0 srfm-py-1.5 srfm-text-gray-900 srfm-shadow-sm srfm-ring-1 srfm-ring-inset srfm-ring-gray-300 placeholder:srfm-text-gray-400 focus:srfm-ring-2 focus:srfm-ring-inset focus:srfm-ring-indigo-600 sm:srfm-text-sm sm:srfm-leading-6"
300 placeholder={ __(
301 'Secret Key v2 checkbox',
302 'sureforms'
303 ) }
304 onChange={
305 handleChange
306 }
307 value={
308 sureformsV2CheckboxSecret
309 }
310 />
311 </div>
312 </Fragment>
313 </div>
314 );
315 case 'v2 Invisible':
316 return (
317 <div className="srfm-w-[600px] srfm-mt-4">
318 <Fragment>
319 <div className="srfm-mb-4 ">
320 <input
321 type="text"
322 name="srfm_v2_invisible_site"
323 id="srfm_v2_invisible_site"
324 className="srfm-block srfm-w-full srfm-rounded-md srfm-border-0 srfm-py-1.5 srfm-text-gray-900 srfm-shadow-sm srfm-ring-1 srfm-ring-inset srfm-ring-gray-300 placeholder:srfm-text-gray-400 focus:srfm-ring-2 focus:srfm-ring-inset focus:srfm-ring-indigo-600 sm:srfm-text-sm sm:srfm-leading-6"
325 placeholder={ __(
326 'Site Key v2 Invisible',
327 'sureforms'
328 ) }
329 onChange={
330 handleChange
331 }
332 value={
333 sureformsV2InvisibleSite
334 }
335 />
336 </div>
337 </Fragment>
338 <Fragment>
339 <div className="srfm-mb-4">
340 <input
341 type="text"
342 name="srfm_v2_invisible_secret"
343 id="srfm_v2_invisible_secret"
344 className="srfm-block srfm-w-full srfm-rounded-md srfm-border-0 srfm-py-1.5 srfm-text-gray-900 srfm-shadow-sm srfm-ring-1 srfm-ring-inset srfm-ring-gray-300 placeholder:srfm-text-gray-400 focus:srfm-ring-2 focus:srfm-ring-inset focus:srfm-ring-indigo-600 sm:srfm-text-sm sm:srfm-leading-6"
345 placeholder={ __(
346 'Secret Key v2 Invisible',
347 'sureforms'
348 ) }
349 onChange={
350 handleChange
351 }
352 value={
353 sureformsV2InvisibleSecret
354 }
355 />
356 </div>
357 </Fragment>
358 </div>
359 );
360 case 'v3 reCAPTCHA':
361 return (
362 <div className="srfm-w-[600px] srfm-mt-4">
363 <Fragment>
364 <div className="srfm-mb-4 ">
365 <input
366 type="text"
367 name="srfm_v3_site"
368 id="srfm_v3_site"
369 className="srfm-block srfm-w-full srfm-rounded-md srfm-border-0 srfm-py-1.5 srfm-text-gray-900 srfm-shadow-sm srfm-ring-1 srfm-ring-inset srfm-ring-gray-300 placeholder:srfm-text-gray-400 focus:srfm-ring-2 focus:srfm-ring-inset focus:srfm-ring-indigo-600 sm:srfm-text-sm sm:srfm-leading-6"
370 placeholder={ __(
371 'Site Key v3',
372 'sureforms'
373 ) }
374 onChange={
375 handleChange
376 }
377 value={
378 sureformsV3Site
379 }
380 />
381 </div>
382 </Fragment>
383 <Fragment>
384 <div className="srfm-mb-4">
385 <input
386 type="text"
387 name="srfm_v3_secret"
388 id="srfm_v3_secret"
389 className="srfm-block srfm-w-full srfm-rounded-md srfm-border-0 srfm-py-1.5 srfm-text-gray-900 srfm-shadow-sm srfm-ring-1 srfm-ring-inset srfm-ring-gray-300 placeholder:srfm-text-gray-400 focus:srfm-ring-2 focus:srfm-ring-inset focus:srfm-ring-indigo-600 sm:srfm-text-sm sm:srfm-leading-6"
390 placeholder={ __(
391 'Secret Key v3',
392 'sureforms'
393 ) }
394 onChange={
395 handleChange
396 }
397 value={
398 sureformsV3Secret
399 }
400 />
401 </div>
402 </Fragment>
403 </div>
404 );
405
406 default:
407 return null;
408 }
409 } }
410 </TabPanel>
411 <h3 className="srfm-text-sm srfm-font-normal srfm-text-[#64748B]">
412 { __(
413 'To enable reCAPTCHA for your form, please follow the steps mentioned ',
414 'sureforms'
415 ) }
416 <a
417 target="_blank"
418 href="https://www.google.com/recaptcha/admin/create"
419 rel="noreferrer"
420 >
421 here
422 </a>
423 .
424 </h3>
425 </div>
426 </div>
427
428 { /* Honeypot Spam Protection Settings might be used later*/ }
429 <div className="srfm-mb-4 srfm-flex srfm-items-start srfm-gap-10">
430 <div className="srfm-max-w-[250px]">
431 <BaseControl
432 help={ __(
433 'This adds a hidden field that if filled out prevents the form from submitting.',
434 'sureforms'
435 ) }
436 >
437 <h3 className="srfm-text-base srfm-font-semibold srfm-text-gray-90">
438 { __(
439 'Honeypot Spam Protection',
440 'sureforms'
441 ) }
442 </h3>
443 </BaseControl>
444 </div>
445 <div className="srfm-w-[600px] srfm-mt-4">
446 <Fragment>
447 <div className="srfm-mb-4 ">
448 <label
449 htmlFor="srfm-honeypot-checkbox-input"
450 className="toggle-button"
451 >
452 <input
453 id="srfm-honeypot-checkbox-input"
454 type="checkbox"
455 name="srfm_honeypot_toggle"
456 checked={ honeyPot }
457 onChange={ handleChange }
458 />
459 <span className="slider"></span>
460 </label>
461 </div>
462 </Fragment>
463 </div>
464 </div>
465
466 { /* Honeypot Spam Protection Settings might be used later*/ }
467 <div className="srfm-mb-4 srfm-flex srfm-items-start srfm-gap-10">
468 <div className="srfm-max-w-[250px]">
469 <BaseControl
470 help={ __(
471 'Shows the IP address of the user who submitted the form. It shows in the Entry Data',
472 'sureforms'
473 ) }
474 >
475 <h3 className="srfm-text-base srfm-font-semibold srfm-text-gray-90">
476 { __(
477 'Enable IP Logging',
478 'sureforms'
479 ) }
480 </h3>
481 </BaseControl>
482 </div>
483 <div className="srfm-w-[600px] srfm-mt-4">
484 <Fragment>
485 <div className="srfm-mb-4 ">
486 <label
487 htmlFor="srfm-ip-checkbox-input"
488 className="toggle-button"
489 >
490 <input
491 id="srfm-ip-checkbox-input"
492 type="checkbox"
493 name="ip_toggle"
494 checked={ isIpLog }
495 onChange={ handleChange }
496 />
497 <span className="slider"></span>
498 </label>
499 </div>
500 </Fragment>
501 </div>
502 </div>
503 </div>
504 <button type="submit" className="button-primary">
505 { __( ' Save', 'sureforms' ) }
506 </button>
507 </form>
508 </div>
509 </div>
510 );
511 }
512
513 if ( 'email-summary' === path ) {
514 return <EmailSummary />;
515 }
516 return null;
517 };
518
519 export default Component;
520