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;