File "content-analysis.js"

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

import { Container, Title, Select, Tabs, Input, Text } from '@bsf/force-ui';
import ContentAnalysisTable from '../content-analysis-table';
import { __ } from '@wordpress/i18n';
import { useState, useEffect } from '@wordpress/element';
import { Search } from 'lucide-react';
import {
	getCurrentBreadcrumb,
	useBreadcrumb,
} from '@/apps/admin-components/dashboard-breadcrumb';
import { cn } from '@/functions/utils';
import EmptyContentGap from '../empty-content-gap';
import { CONTENT_PERFORMANCE_TABS, CONTENT_PERFORMANCE_TABS_COUNT } from './constants';
const ContentAnalysis = () => {
	const [ searchQuery, setSearchQuery ] = useState( '' );
	const [ statusFilter, setStatusFilter ] = useState( 'All' );
	const breadcrumbs = useBreadcrumb(); // Get breadcrumb data
	const [ activeTab, setActiveTab ] = useState( 'analysis' );

	useEffect( () => {
		window.scrollTo( { top: 0, behavior: 'smooth' } );
	}, [] );

	return (
		<Container
			className="h-full p-5 pb-8 xl:p-8 max-[1920px]:max-w-full mx-auto box-content bg-background-secondary"
			cols={ 12 }
			containerType="grid"
			gap="2xl"
		>
			<Container
				direction="row"
				className="gap-2 col-span-12 rounded-xl justify-between"
			>
				<Container.Item className="mt-1">
					{ getCurrentBreadcrumb( breadcrumbs ) }
				</Container.Item>
				<Container.Item className="w-full max-w-[18.75rem]">
					<Input
						aria-label={ __(
							'Search by URL or title',
							'surerank'
						) }
						id="search-by-url-or-title"
						prefix={ <Search /> }
						role="search"
						value={ searchQuery }
						size="sm"
						type="search"
						onChange={ ( value ) => setSearchQuery( value ) }
						placeholder={ __( 'Search', 'surerank' ) }
					/>
				</Container.Item>
			</Container>
			<Container
				direction="column"
				className="gap-2 col-span-12 p-4 bg-background-primary rounded-xl shadow-sm border-0.5 border-solid border-border-subtle"
			>
				<Container.Item className="flex items-center">
					<Container
						align="center"
						className="gap-2 w-full"
						justify="between"
					>
						<Container.Item className="pl-2">
							<Container align="center" className="gap-2">
								<Title
									title={ __(
										'Content Analysis',
										'surerank'
									) }
									size="md"
									tag="h4"
								/>
								<Text
									size={ 16 }
									weight={ 400 }
									color="secondary"
								>
									{ __( '(Last 90 days)', 'surerank' ) }
								</Text>
							</Container>
						</Container.Item>
						<Container.Item className="flex items-center gap-2 py-2">
							<div className="w-48">
								<Select
									onChange={ ( value ) =>
										setStatusFilter( value )
									}
									size="md"
									value={ statusFilter }
									className="w-[250px]"
								>
									<Select.Button
										placeholder={ __(
											'Status',
											'surerank'
										) }
									/>
									<Select.Portal id="surerank-root">
										<Select.Options>
											<Select.Option value="All">
												{ __( 'All', 'surerank' ) }
											</Select.Option>
											<Select.Option value="Top Ranked">
												{ __(
													'Top Ranked',
													'surerank'
												) }
											</Select.Option>
											<Select.Option value="On the Rise">
												{ __(
													'On the Rise',
													'surerank'
												) }
											</Select.Option>
											<Select.Option value="Low Visibility">
												{ __(
													'Low Visibility',
													'surerank'
												) }
											</Select.Option>
										</Select.Options>
									</Select.Portal>
								</Select>
							</div>
							{ CONTENT_PERFORMANCE_TABS_COUNT > 1 && (
								<Tabs.Group
									activeItem={ activeTab }
									onChange={ ( { value: { slug } } ) =>
										setActiveTab( slug )
									}
									size="sm"
									variant="rounded"
								>
									{ Object.entries(
										CONTENT_PERFORMANCE_TABS
									).map( ( [ key, tab ] ) => (
										<Tabs.Tab
											key={ key }
											slug={ key }
											text={ tab.label }
											className={ cn(
												'w-fit text-nowrap space-x-1.5',
												activeTab === key &&
													'text-brand-800 hover:text-brand-800'
											) }
											badge={ null }
											disabled={ tab.disabled }
										/>
									) ) }
								</Tabs.Group>
							) }
						</Container.Item>
					</Container>
				</Container.Item>

				<Tabs activeItem={ activeTab }>
					<Tabs.Panel slug="analysis">
						<ContentAnalysisTable
							type="full"
							searchQuery={ searchQuery }
							statusFilter={ statusFilter }
						/>
					</Tabs.Panel>
					<Tabs.Panel slug="gap">
						<EmptyContentGap rows={ 20 } overlayFixed={ true } />
					</Tabs.Panel>
				</Tabs>
			</Container>
		</Container>
	);
};

export default ContentAnalysis;