HEX
Server: nginx/1.27.1
System: Linux in-4 5.15.0-131-generic #141-Ubuntu SMP Fri Jan 10 21:18:28 UTC 2025 x86_64
User: ilikadirect (1186)
PHP: 7.4.33
Disabled: exec,passthru,shell_exec,system,proc_open,popen,parse_ini_file,show_source
Upload Files
File: /storage/v6964/gopalak/public_html/wp-content/plugins/tablepress/admin/js/common/react-loader.js
/**
 * Common functions for loading React components in TablePress JS.
 *
 * @package TablePress
 * @subpackage Views JavaScript
 * @author Tobias Bäthge
 * @since 2.2.0
 */

/**
 * WordPress dependencies.
 */
import { StrictMode } from 'react';
import { createPortal, createRoot } from 'react-dom';
import { addFilter } from '@wordpress/hooks';

/**
 * Initializes a React component on the page.
 *
 * @param {string}    rootId    HTML ID of the root element for the component.
 * @param {Component} Component JSX component.
 */
export const initializeReactComponent = ( rootId, Component ) => {
	if ( process.env.DEVELOP ) {
		Component = <StrictMode>{ Component }</StrictMode>;
	}

	const root = document.getElementById( rootId );
	if ( root ) {
		createRoot( root ).render( Component );
	}
};

/**
 * Initializes a React component on the page, in a React Portal, and registers its meta box.
 *
 * @param {string}    slug      Slug of the component/feature module.
 * @param {string}    screen    Slug/action of the screen.
 * @param {Component} Component JSX component.
 */
export const initializeReactComponentInPortal = ( slug, screen, Component ) => {
	addFilter(
		`tablepress.${screen}ScreenFeatures`,
		`tp/${slug}/${screen}-screen-feature`,
		( features ) => ( [ ...features, slug ] ),
	);

	addFilter(
		`tablepress.${screen}ScreenPortals`,
		`tp/${slug}/${screen}-screen-portal`,
		( Portals ) => {
			return ( props ) => (
				<>
					<Portals { ...props } />
					{
						createPortal(
							<Component { ...props } />,
							document.getElementById( `tablepress-${slug}-section` ),
						)
					}
				</>
			);
		},
	);
};