File "empty-content-gap.js"

Full Path: /home/fresvfqn/waterdamagerestorationandrepairsmithtown.com/wp-content/plugins/surerank/src/apps/admin-dashboard/empty-content-gap.js
File size: 6.29 KB
MIME-type: text/html
Charset: utf-8

import { STORE_NAME } from '@/admin-store/constants';
import {
	Button,
	Text,
	Table,
	Badge,
	ProgressBar,
	Container,
} from '@bsf/force-ui';
import { useSelect } from '@wordpress/data';
import { __ } from '@wordpress/i18n';
import ContentPerformanceEmptyState from './content-performance-empty-state';

const dummyRows = [
	{
		url: 'https://surerank.com/',
		status: 'Low Visibility',
		statusVariant: 'neutral',
		clicks: '30,967',
		position: '60.79',
		impressions: '1,870,391',
		contentScore: 50,
	},
	{
		url: 'https://surerank.com/docs/install-premium-starter-templates/',
		status: 'Top Ranked',
		statusVariant: 'green',
		clicks: '1,278',
		position: '8.06',
		impressions: '41,176',
		contentScore: 84,
	},
	{
		url: 'https://surerank.com/docs/fix-starter-template-importing-…',
		status: 'Top Ranked',
		statusVariant: 'green',
		clicks: '1,122',
		position: '9.49',
		impressions: '17,814',
		contentScore: 80,
	},
	{
		url: 'https://surerank.com/docs/getting-started-starter-templates/',
		status: 'Low Visibility',
		statusVariant: 'neutral',
		clicks: '855',
		position: '47.80',
		impressions: '236,183',
		contentScore: 45,
	},
	{
		url: 'https://surerank.com/docs/install-starter-templates/',
		status: 'Top Ranked',
		statusVariant: 'green',
		clicks: '469',
		position: '6.77',
		impressions: '65,364',
		contentScore: 76,
	},
];

const getExtendedRows = ( rowsCount = 5 ) => {
	const times = Math.ceil( rowsCount / dummyRows.length );
	return Array( times ).fill( dummyRows ).flat().slice( 0, rowsCount );
};

const EmptyContentGap = ( { rows = 5, overlayFixed = false } ) => {
	const { hasSiteSelected } = useSelect( ( select ) =>
		select( STORE_NAME ).getSearchConsole()
	);

	if ( ! hasSiteSelected ) {
		return <ContentPerformanceEmptyState />;
	}

	const data = rows > dummyRows.length ? getExtendedRows( rows ) : dummyRows;
	const overlayHeightClass = overlayFixed ? 'h-[600px]' : 'h-[400px]';

	return (
		<div
			className={ `relative w-full px-0 py-8 ${
				rows === 5 ? 'min-h-[400px]' : 'min-h-[800px]'
			}` }
		>
			<div
				className={ `absolute top-0 left-1/2 transform -translate-x-1/2 z-10 flex flex-col items-center justify-center text-center px-4 max-w-2xl pointer-events-none ${ overlayHeightClass }` }
			>
				<img
					src={ `${ surerank_globals.admin_assets_url }/images/content-gap-info.svg` }
					alt={ __( 'Content Gap Illustration', 'surerank' ) }
					className="w-25 h-25 mb-3"
				/>
				<Text tag="h2" size={ 18 } lineHeight={ 28 } className="mb-1">
					{ __(
						'Unlock Competitor Insights with Content Gap',
						'surerank'
					) }
				</Text>
				<Text
					size={ 16 }
					color="secondary"
					lineHeight={ 24 }
					className="line-clamp-2 mb-3"
				>
					{ __(
						'Discover the topics your competitors rank for but you’re missing. Find high-traffic opportunities and close the gap with data-backed content strategies.',
						'surerank'
					) }
				</Text>
				<Button
					variant="primary"
					size="md"
					onClick={ () =>
						window.open( surerank_globals.pricing_link, '_blank' )
					}
					className="pointer-events-auto"
				>
					{ __( 'Upgrade to View Full Report', 'surerank' ) }
				</Button>
			</div>

			{ /* Blurred Table Section */ }
			<div className="absolute inset-0 z-0 pointer-events-none flex justify-center">
				<div className="blur-[7px] w-full overflow-hidden">
					<Table>
						<Table.Head>
							<Table.HeadCell className="w-[35%] max-w-120 min-w-80">
								{ __( 'Page', 'surerank' ) }
							</Table.HeadCell>
							<Table.HeadCell className="w-1/10">
								{ __( 'Status', 'surerank' ) }
							</Table.HeadCell>
							<Table.HeadCell className="w-[12%]">
								{ __( 'Clicks', 'surerank' ) }
							</Table.HeadCell>
							<Table.HeadCell className="w-[12%] text-nowrap">
								{ __( 'Avg. Position', 'surerank' ) }
							</Table.HeadCell>
							<Table.HeadCell className="w-[12%]">
								{ __( 'Impressions', 'surerank' ) }
							</Table.HeadCell>
							<Table.HeadCell className="min-w-[10rem] text-nowrap">
								<Container align="center" className="gap-1">
									<span className="text-text-tertiary">
										{ __( 'Content Score', 'surerank' ) }
									</span>
									<Badge
										className="w-fit"
										size="xs"
										variant="blue"
										label={ __( 'Pro', 'surerank' ) }
									/>
								</Container>
							</Table.HeadCell>
							<Table.HeadCell className="min-w-[10%]">
								<span className="sr-only">
									{ __( 'Actions', 'surerank' ) }
								</span>
							</Table.HeadCell>
						</Table.Head>
						<Table.Body>
							{ data.map( ( row, index ) => (
								<Table.Row key={ index }>
									<Table.Cell>
										<Text
											color="secondary"
											className="line-clamp-1 no-underline text-xs font-thin text-text-tertiary"
											target="_blank"
										>
											{ row.url }
										</Text>
									</Table.Cell>
									<Table.Cell>
										<Badge
											className="w-fit"
											size="xs"
											variant={ row.statusVariant }
											label={ row.status }
											disableHover
											disabled={ true }
										/>
									</Table.Cell>
									<Table.Cell>
										<span className="text-xs font-thin text-text-tertiary">
											{ row.clicks }
										</span>
									</Table.Cell>
									<Table.Cell>
										<span className="text-xs font-thin text-text-tertiary">
											{ row.position }
										</span>
									</Table.Cell>
									<Table.Cell>
										<span className="text-xs font-thin text-text-tertiary">
											{ row.impressions }
										</span>
									</Table.Cell>
									<Table.Cell>
										<Container
											direction="column"
											className="gap-1.5"
										>
											<span className="text-xs font-thin text-text-tertiary">
												{ __(
													'Out of 100',
													'surerank'
												) }
											</span>
											<ProgressBar
												progress={ 0 }
												className="w-full max-w-32"
											/>
										</Container>
									</Table.Cell>
									<Table.Cell>
										<Button
											size="xs"
											variant="outline"
											disabled
										>
											{ __( 'View', 'surerank' ) }
										</Button>
									</Table.Cell>
								</Table.Row>
							) ) }
						</Table.Body>
					</Table>
				</div>
			</div>
		</div>
	);
};

export default EmptyContentGap;