File "grid-skeleton.js"

Full Path: /home/fresvfqn/waterdamagerestorationandrepairsmithtown.com/wp-content/plugins/astra-sites/inc/lib/onboarding/assets/src/steps/site-list/grid-skeleton.js
File size: 1.58 KB
MIME-type: text/x-java
Charset: utf-8

import React from 'react';
import { useState, useEffect } from '@wordpress/element';
import { Skeleton } from '@mui/material';
import Grid from '@mui/material/Grid';
import Box from '@mui/material/Box';

const ROW_COUNT = 2;

const GridSkeleton = () => {
	const [ columns, setColumns ] = useState( 4 ); // Default number of columns

	useEffect( () => {
		const handleResize = () => {
			// Update the number of columns based on the screen width
			if ( window.innerWidth <= 768 ) {
				setColumns( 2 ); // Adjust for smaller screens
			} else if ( window.innerWidth > 768 && window.innerWidth <= 1024 ) {
				setColumns( 3 );
			} else {
				setColumns( 4 ); // Default for larger screens
			}
		};

		// Listen for window resize events
		window.addEventListener( 'resize', handleResize );

		// Call handleResize initially to set the correct number of columns.
		handleResize();

		// Clean up the event listener on component unmount
		return () => window.removeEventListener( 'resize', handleResize );
	}, [] );

	// Create an array of Skeleton components based on the number of columns
	const skeletonItems = [];
	for ( let i = 0; i < columns * ROW_COUNT; i++ ) {
		skeletonItems.push(
			<Skeleton
				key={ i }
				variant="rect"
				height={ 380 }
				animation="wave"
			/>
		);
	}

	return (
		<div className="st-grid-skeleton">
			<Grid container>
				<Grid item xs={ 12 }>
					<Box
						p="0"
						display="grid"
						gap="40px"
						gridTemplateColumns={ `repeat(${ columns }, 1fr)` }
					>
						{ skeletonItems }
					</Box>
				</Grid>
			</Grid>
		</div>
	);
};

export default GridSkeleton;