HEX
Server: Apache/2.4.58 (Ubuntu)
System: Linux newsites.squeezer-software.com 6.8.0-90-generic #91-Ubuntu SMP PREEMPT_DYNAMIC Tue Nov 18 14:14:30 UTC 2025 x86_64
User: www-data (33)
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: /home/sites/ileskneiss/wp-content/plugins/learnpress/assets/src/js/admin/utils-admin.js
/**
 * Library run on Admin
 *
 * @since 4.2.6.9
 * @version 1.0.1
 */
import * as Utils from '../utils.js';
import TomSelect from 'tom-select';
import Api from '../api.js';

const AdminUtilsFunctions = {
	buildTomSelect( elTomSelect, options, fetchAPI, dataSend, callBackHandleData ) {
		if ( ! elTomSelect ) {
			return;
		}

		const optionDefault = {
			plugins: {
				remove_button: {
					title: 'Remove this item',
				},
			},
			onInitialize() {
			},
			onItemAdd( e ) {
				// Get list without current item.
				if ( fetchAPI ) {
					const selectedOptions = Array.from( elTomSelect.selectedOptions );
					const selectedValues = selectedOptions.map( ( option ) => option.value );
					selectedValues.push( e );
					dataSend.id_not_in = selectedValues.join( ',' );

					fetchAPI( '', dataSend, callBackHandleData );
				}
			},
		};

		if ( fetchAPI ) {
			optionDefault.load = ( keySearch, callbackTom ) => {
				const selectedOptions = Array.from( elTomSelect.selectedOptions );
				const selectedValues = selectedOptions.map( ( option ) => option.value );
				dataSend.id_not_in = selectedValues.join( ',' );

				fetchAPI(
					keySearch,
					dataSend,
					AdminUtilsFunctions.callBackTomSelectSearchAPI( callbackTom, callBackHandleData )
				);
			};
		}

		options = { ...optionDefault, ...options };
		const items_selected = options.options;
		/*if ( options?.options?.length > 20 ) {
			const chunkSize = 20;
			const length = options.options.length;
			let i = 0;
			const chunkedOptions = { ...options };
			chunkedOptions.options = items_selected.slice( i, chunkSize );

			const tomSelect = new TomSelect( elTomSelect, chunkedOptions );
			i += chunkSize;

			const interval = setInterval( () => {
				if ( i > ( length - 1 ) ) {
					clearInterval( interval );
				}

				const optionsSlice = items_selected.slice( i, i + chunkSize );
				i += chunkSize;
				tomSelect.addOptions( optionsSlice );
				tomSelect.setValue( options.items );
			}, 200 );

			return tomSelect;
		}*/

		return new TomSelect( elTomSelect, options );
	},
	callBackTomSelectSearchAPI( callbackTom, callBackHandleData ) {
		return {
			success: ( response ) => {
				const options = callBackHandleData.success( response );
				callbackTom( options );
			},
		};
	},
	fetchCourses( keySearch = '', dataSend = {}, callback ) {
		const url = Api.admin.apiSearchCourses;
		dataSend.search = keySearch;
		const params = {
			headers: {
				'Content-Type': 'application/json',
				'X-WP-Nonce': lpDataAdmin.nonce,
			},
			method: 'POST',
			body: JSON.stringify( dataSend ),
		};

		Utils.lpFetchAPI( url, params, callback );
	},
	fetchUsers( keySearch = '', dataSend = {}, callback ) {
		const url = Api.admin.apiSearchUsers;
		dataSend.search = keySearch;
		const params = {
			headers: {
				'Content-Type': 'application/json',
				'X-WP-Nonce': lpDataAdmin.nonce,
			},
			method: 'POST',
			body: JSON.stringify( dataSend ),
		};

		Utils.lpFetchAPI( url, params, callback );
	},
};

export { Utils, AdminUtilsFunctions, Api };