HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux WebLive 5.15.0-79-generic #86-Ubuntu SMP Mon Jul 10 16:07:21 UTC 2023 x86_64
User: ubuntu (1000)
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/html/wpdeskera/wp-content/plugins/wpcf7-redirect/assets/dashboard/DataContext.tsx
import { createContext, useContext, useReducer } from '@wordpress/element';

type FormShortcut = {
	label: string;
	link: string;
};

type SubmissionTableEntry = {
	id: number;
	title: string;
	formLabel: string;
	formLink: string;
	date: string;
	actions: {
		view: string;
	};
};

type ServerDashboardData = {
	assets: {
		logo: string;
	};
	tabs: {
		showLicenses: boolean;
		showPremiumFeatures: boolean;
	};
	formShortcuts: FormShortcut[];
	stats: {
		totalEntries: number;
		todayEntries: string;
		lastEntryDisplayDate: string;
	};
	chart: {
		labels: string[];
		data: ( number | string )[];
		legend: {
			label: string;
		};
	};
	submissionTable: SubmissionTableEntry[];
	plugins: {
		slug: string;
		label: string;
		status: string;
		statusLabel: string;
		description: string;
		licenseMask: string;
		installed: boolean;
	}[];
	endpoints: {
		updateLicense: string;
		toggleDebugMode: string;
		resetSettings: string;
	};
	debugMode: boolean;
	links: {
		upgrade: string;
		docs: string;
		tutorial: string;
		support: string;
	};
};

type DashboardData = ServerDashboardData & {
	isResetModalOpen: boolean;
	isUpdatingOptions: boolean;
};

export const DataContext = createContext< DashboardData >( null );
export const DataDispatchContext = createContext( null );

export function useData() {
	return useContext( DataContext );
}

export function useDataDispatch() {
	return useContext( DataDispatchContext );
}

export function DataProvider( { children } ) {
	const [ tasks, dispatch ] = useReducer( dataReducer, {
		...( ( window?.wpcf7rDash as ServerDashboardData ) ?? {} ),
		isResetModalOpen: false,
		isUpdatingOptions: false,
	} );

	return (
		<DataContext.Provider value={ tasks }>
			<DataDispatchContext.Provider value={ dispatch }>
				{ children }
			</DataDispatchContext.Provider>
		</DataContext.Provider>
	);
}

export const ACTIONS = {
	openResetModal: 'open-reset-modal',
	closeResetModal: 'close-reset-modal',
	updateOptionLoadingStatus: 'update-option-loading-status',
};

function dataReducer( data: DashboardData, action ): DashboardData {
	switch ( action.type ) {
		case ACTIONS.openResetModal: {
			return {
				...data,
				isResetModalOpen: true,
			};
		}
		case ACTIONS.closeResetModal: {
			return {
				...data,
				isResetModalOpen: false,
			};
		}
		case ACTIONS.updateOptionLoadingStatus: {
			return {
				...data,
				isUpdatingOptions: action.isLoading,
			};
		}
		default: {
			throw Error( 'Unknown action: ' + action.type );
		}
	}
}