/* global wpforms_divi_builder, WPFormsRepeaterField, ETBuilderBackendDynamic */ import React, { Component } from 'react'; import PropTypes from 'prop-types'; /** * WPFormsSelector component. * * @since 1.6.3 */ class WPFormsSelector extends Component { /** * Module slug. * * @since 1.6.3 * * @type {string} */ static slug = 'wpforms_selector'; /** * Constructor. * * @since 1.6.3 * * @param {string} props List of properties. */ constructor( props ) { super( props ); this.state = { error: null, isLoading: true, form: null, }; } /** * Set types for properties. * * @since 1.6.3 * * @returns {object} Properties type. */ static get propTypes() { return { form_id: PropTypes.number, // eslint-disable-line camelcase show_title: PropTypes.string, // eslint-disable-line camelcase show_desc: PropTypes.string, // eslint-disable-line camelcase }; } /** * Check if form settings was updated. * * @since 1.6.3 * * @param {object} prevProps List of previous properties. */ componentDidUpdate( prevProps ) { if ( prevProps.form_id !== this.props.form_id || prevProps.show_title !== this.props.show_title || prevProps.show_desc !== this.props.show_desc ) { this.componentDidMount(); } } /** * Ajax request for form HTML. * * @since 1.6.3 */ componentDidMount() { const formData = new FormData(); formData.append( 'nonce', wpforms_divi_builder.nonce ); formData.append( 'action', 'wpforms_divi_preview' ); formData.append( 'form_id', this.props.form_id ); formData.append( 'show_title', this.props.show_title ); formData.append( 'show_desc', this.props.show_desc ); fetch( wpforms_divi_builder.ajax_url, { method: 'POST', cache: 'no-cache', credentials: 'same-origin', headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'Cache-Control': 'no-cache', }, body: new URLSearchParams( formData ), }, ) .then( ( res ) => res.json() ) .then( ( result ) => { this.setState( { isLoading: false, form: result.data, } ); }, ( error ) => { this.setState( { isLoading: false, error, } ); }, ); } /** * Render module view. * * @since 1.6.3 * * @returns {JSX.Element} View for module. */ render() { const { error, isLoaded, form } = this.state, wrapperClasses = isLoaded ? 'wpforms-divi-form-preview loading' : 'wpforms-divi-form-preview'; if ( typeof this.props.form_id === 'undefined' || this.props.form_id === '' ) { return (
{ wpforms_divi_builder.help_text } { window.open( wpforms_divi_builder.guide_url, '_blank' ); } } > { wpforms_divi_builder.guide_text }.