blocks/case-studies/grid/case-studies-grid.tsx (31 lines of code) (raw):
import { FC } from 'react';
import cn from 'classnames';
import { CaseStudyCard, CaseStudyCardProps } from '../card/case-studies-card';
import { useFilteredCases } from '../filter/use-filtered-cases';
import { MasonryGrid } from '../../../components/masonry-grid/masonry-grid';
import { EmptyState } from '../../../components/empty-state/empry-state';
import { ThemeProvider } from '@rescui/ui-contexts';
import styles from './case-studies-grid.module.css';
export type CaseStudiesGridProps = { className?: string, mode?: CaseStudyCardProps['mode'] };
export const CaseStudiesSection: FC<CaseStudiesGridProps> = ({ className, ...props }) => (
<section className={cn(className, 'ktl-layout ktl-layout--center')} aria-label="Case Studies Grid">
<CaseStudiesGrid {...props} />
</section>
);
export const CaseStudiesGrid: FC<CaseStudiesGridProps> = ({ className, mode }) => {
const cases = useFilteredCases();
const theme = 'light';
return (
<ThemeProvider theme={theme}>
<div className={cn(styles.wrapper, className)} data-testid="case-studies-grid">
{cases.length === 0 ?
<EmptyState /> :
<MasonryGrid
items={cases}
columnCount={2}
gap={32}
renderItem={(caseItem) => <CaseStudyCard mode={mode} {...caseItem} />}
getKey={(caseItem) => caseItem.id}
/>}
</div>
</ThemeProvider>
);
};