HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/lipovac/wp-content/plugins/the-events-calendar/common/src/modules/hoc/with-form.js
/**
 * External dependencies
 */
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';
import { noop } from 'lodash';

/**
 * Internal dependencies
 */
import { actions, selectors } from '@moderntribe/common/data/forms';

/**
 * HOC that register a new object associated with set of fields for a form
 *
 * @param {function} getName Function used to set the name of the form, has a props param to generate the name
 * @returns {function(*): *} Returns a function that takes a Component as argument and returns a component.
 */
export default ( getName = noop ) => ( WrappedComponent ) => {
	class WithForm extends Component {
		static propTypes = {
			registerForm: PropTypes.func,
			postType: PropTypes.string,
		};

		componentDidMount() {
			const name = getName( this.props );
			const { registerForm, postType } = this.props;
			registerForm( name, postType );
		}

		render() {
			return <WrappedComponent { ...this.props } { ...this.additionalProps() } />;
		}

		additionalProps() {
			const {
				createDraft,
				sendForm,
				setSubmit,
				editEntry,
				maybeRemoveEntry,
			} = this.props;
			const name = getName( this.props );
			return {
				createDraft: ( fieldsObject ) => createDraft( name, fieldsObject ),
				editEntry: ( fieldsObject ) => editEntry( name, fieldsObject ),
				sendForm: ( fieldsObject, callback ) => sendForm( name, fieldsObject, callback ),
				setSubmit: () => setSubmit( name ),
				maybeRemoveEntry: ( details ) => maybeRemoveEntry( name, details ),
			};
		}
	}

	const mapStateToProps = ( state, props ) => {
		const name = getName( props );
		const modifiedProps = { name };
		return {
			edit: selectors.getFormEdit( state, modifiedProps ),
			create: selectors.getFormCreate( state, modifiedProps ),
			fields: selectors.getFormFields( state, modifiedProps ),
			submit: selectors.getFormSubmit( state, modifiedProps ),
		};
	};

	const mapDispatchToProps = ( dispatch ) => bindActionCreators( actions, dispatch );

	return connect( mapStateToProps, mapDispatchToProps )( WithForm );
};