HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: /var/www/html/bwcdev/wp-content/plugins/quiz-master-next/blocks/src/helper.js
//Check if undefined, null, empty
export const qsmIsEmpty = ( data ) => ( 'undefined' === typeof data || null === data || '' === data );

//Get Unique array values
export const qsmUniqueArray = ( arr ) => {
	if ( qsmIsEmpty( arr ) || ! Array.isArray( arr ) ) {
		return arr;
	}
	return arr.filter( ( val, index, arr ) => arr.indexOf( val ) === index );
}

//Match array of object values and return array of cooresponding matching keys 
export const qsmMatchingValueKeyArray = ( values, obj ) => {
	if ( qsmIsEmpty( obj ) || ! Array.isArray( values ) ) {
		return values;
	}
	return values.map( ( val ) => Object.keys(obj).find( key => obj[key] == val) );
}

//Decode htmlspecialchars
export const qsmDecodeHtml = ( html ) => {
	var txt = document.createElement("textarea");
	txt.innerHTML = html;
	return txt.value;
}

export const qsmSanitizeName = ( name ) => {
	if ( qsmIsEmpty( name ) ) {
		name = '';
	} else {
		name = name.toLowerCase().replace( / /g, '_' );
		name = name.replace(/\W/g, '');
	}
	
	return name;
}

// Remove anchor tags from text content.
export const qsmStripTags = ( text ) => {
	let div = document.createElement("div");
	div.innerHTML = qsmDecodeHtml( text );
	return  div.innerText;
}

//prepare form data
export const qsmFormData = ( obj = false ) => {
	let newData = new FormData();
	//add to check if api call from editor
	newData.append('qsm_block_api_call', '1');
	if ( false !== obj ) {
		for ( let k in obj ) {
			if ( obj.hasOwnProperty( k ) ) {
			   newData.append( k, obj[k] );
			}
		}
	}
	return newData;
}

//add objecyt to form data
export const qsmAddObjToFormData = ( formKey, valueObj, data = new FormData() ) => {
	if ( qsmIsEmpty( formKey ) || qsmIsEmpty( valueObj ) || 'object' !== typeof valueObj ) {
		return data;
	}

	for (let key in valueObj) {
		if ( valueObj.hasOwnProperty(key) ) {
			let value = valueObj[key];
			if ( 'object' === value ) {
				qsmAddObjToFormData( formKey+'['+key+']', value,  data );
			} else {
				data.append( formKey+'['+key+']', valueObj[key] );
			}
			
		}
	}

	return data;
}

//Generate random number
export const qsmGenerateRandomKey = (length) => {
    const charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    let key = "";

    // Generate random bytes
    const values = new Uint8Array(length);
    window.crypto.getRandomValues(values);

    for (let i = 0; i < length; i++) {
        // Use the random byte to index into the charset
        key += charset[values[i] % charset.length];
    }

    return key;
}

//generate uiniq id
export const qsmUniqid = (prefix = "", random = false) => {
    const id = qsmGenerateRandomKey(8);
    return `${prefix}${id}${random ? `.${ qsmGenerateRandomKey(7) }`:""}`;
};

//return data if not empty otherwise default value
export const qsmValueOrDefault = ( data, defaultValue = '' ) => qsmIsEmpty( data ) ? defaultValue :data;