HEX
Server: Apache
System: Linux efa57bbe-abb1-400d-2985-3b056fbc2701.secureserver.net 6.1.147-1.el9.elrepo.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Jul 24 12:33:32 EDT 2025 x86_64
User: root (0)
PHP: 8.0.30.4
Disabled: NONE
Upload Files
File: /var/www/wp-content/plugins/pojo-accessibility/modules/settings/assets/js/utils/index.js
import { createElement } from '@wordpress/element';

export const injectTemplateVars = (message, components) => {
	const regex = /\{\{(\w+)\}\}([^]*?)\{\{\/\1\}\}/g;
	const splitMessage = message.split(regex);

	// eslint-disable-next-line array-callback-return
	return splitMessage.map((part, index) => {
		if (index % 3 === 0) {
			return part;
		}

		if (index % 3 === 1) {
			return createElement(
				components[part],
				{ key: index },
				splitMessage[index + 1],
			);
		}
	});
};

export const validateUrl = (url) => {
	const pattern =
		/^(https?):\/\/([a-zA-Z0-9-]+\.)+[a-zA-Z]{2,}(:\d{1,5})?(\/.*)?$/i;
	return pattern.test(url);
};

export const validateId = (id) => {
	const pattern = /^#[A-Za-z0-9_.-]+$/;
	return pattern.test(id);
};

// Split array to chunk for display data per page
export const chunkArray = (array, chunkSize = 10) => {
	const result = [];
	for (let i = 0; i < array.length; i += chunkSize) {
		result.push(array.slice(i, i + chunkSize));
	}
	return result;
};

/**
 * Open URL links
 * @param {string} url    URL to open
 * @param {string} target Target to open the URL
 */
export const openLink = (url, target = '_blank') => {
	window.open(url, target);
};

/**
 * Calculate the plan usage percentage of the plan.
 * @param {number} allowed
 * @param {number} used
 * @return {number} The plan usage percentage.
 */
export const calculatePlanUsage = (allowed, used) => {
	if (!used || !allowed) {
		return 0;
	}

	return parseFloat(((used / allowed) * 100).toFixed(1));
};

/**
 * Format the plan value in K and M format
 * @param {string} value The value to format
 */
export const formatPlanValue = (value) => {
	if (value >= 1000000) {
		const millions = value / 1000000;
		return millions % 1 === 0 ? `${millions}M` : `${millions.toFixed(1)}M`;
	}

	if (value >= 1000) {
		const thousands = value / 1000;
		return thousands % 1 === 0 ? `${thousands}K` : `${thousands.toFixed(1)}K`;
	}

	return value;
};