index.js (3494B)
1 /** 2 * WordPress dependencies 3 */ 4 import { __ } from '@wordpress/i18n' 5 import { ModalManager } from '~redux-templates/modal-manager'; 6 import Form from '@rjsf/core'; 7 import {BlockPreview} from '@wordpress/block-editor'; 8 const {useState} = wp.element; 9 const {apiFetch} = wp; 10 11 function FeedbackDialog(props) { 12 const {title, description, schema, uiSchema, headerImage, headerIcon, data, ignoreData, endpoint, width, buttonLabel} = props; 13 const {closeModal, onSuccess} = props; 14 15 const [loading, setLoading] = useState(false); 16 const [errorMessage, setErrorMessage] = useState(null); 17 18 const onSubmit = ({formData}) => { 19 const path = `redux/v1/templates/${endpoint ? endpoint : 'feedback'}`; 20 if (loading) return; 21 setLoading(true); 22 apiFetch({ 23 path, 24 method: 'POST', 25 data: ignoreData ? formData : {...data, ...formData} 26 }).then(data => { 27 setLoading(false); 28 if (data.success) { 29 setErrorMessage(null); 30 if (onSuccess) onSuccess(data); else onCloseModal(); 31 } else { 32 console.log('There was an error: ', data); 33 setErrorMessage(__('An unexpected error occured, please try again later.', redux_templates.i18n)); 34 } 35 }).catch(err => { 36 setLoading(false); 37 console.log('There was an error: ', err); 38 setErrorMessage(__('An unexpected error occured, please try again later.', redux_templates.i18n)); 39 }); 40 } 41 42 const onCloseModal = () => { 43 if (closeModal) closeModal(); else ModalManager.closeFeedback(); 44 } 45 46 const style = width ? {width} : null; 47 const wrapperClassname = width ? 'redux-templates-modal-wrapper feedback-popup-wrapper less-margin' : 'redux-templates-modal-wrapper feedback-popup-wrapper'; 48 49 return ( 50 <div className="redux-templates-modal-overlay"> 51 <div className={wrapperClassname} style={style}> 52 <div className="feedback-popup-header feedback-popup-header-contact"> 53 {headerImage} 54 {headerIcon} 55 <a className="feedback-popup-close" onClick={onCloseModal}> 56 <i className='fas fa-times' /> 57 </a> 58 </div> 59 <div className="feedback-popup-content"> 60 <h3>{title}</h3> 61 {errorMessage && <p className="error-message">{errorMessage}</p>} 62 <p>{description}</p> 63 <div className="col-wrapper"> 64 <Form schema={schema} uiSchema={uiSchema} onSubmit={onSubmit}> 65 <button className="feedback-popup-btn feedback-popup-rate-btn" type="submit"> 66 {loading && <i className="fas fa-spinner fa-pulse"/>} 67 {buttonLabel} 68 </button> 69 </Form> 70 { data && data.editor_blocks && 71 <div className="preview-panel"> 72 <div className="redux-templates-block-preview-hover" /> 73 <BlockPreview blocks={data.editor_blocks} /> 74 </div> 75 } 76 </div> 77 </div> {/* /.feedback-popup-content */} 78 </div> 79 </div> 80 ); 81 } 82 83 export default FeedbackDialog;