From bf93408568960e3664061cabc6bc51e5ce68fe4c Mon Sep 17 00:00:00 2001 From: Thomas Camlong Date: Wed, 1 Oct 2025 18:22:44 +0200 Subject: [PATCH] refactor(web): extract grid classes and add documentation Extract shared grid classes into GRID_CLASSES constant for reusability. Add JSDoc comments to explain the purpose of IconsGrid (non-virtualized for small lists) and VirtualizedIconsGrid (optimized for large datasets) components --- web/src/components/icon-grid.tsx | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/web/src/components/icon-grid.tsx b/web/src/components/icon-grid.tsx index f5d1ebb7..4a94cd86 100644 --- a/web/src/components/icon-grid.tsx +++ b/web/src/components/icon-grid.tsx @@ -8,9 +8,19 @@ interface IconsGridProps { matchedAliases: Record } +/** + * Base grid layout component used for both regular icon display and virtualized display + * Displays icons in a responsive grid with different column counts per breakpoint + */ +export const GRID_CLASSES = "grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 xl:grid-cols-8 gap-4" + +/** + * Simple non-virtualized grid for displaying icons + * Used for smaller lists (e.g., related icons, first 120 results) + */ export function IconsGrid({ filteredIcons, matchedAliases }: IconsGridProps) { return ( -
+
{filteredIcons.slice(0, 120).map(({ name, data }) => ( ))} @@ -18,6 +28,10 @@ export function IconsGrid({ filteredIcons, matchedAliases }: IconsGridProps) { ) } +/** + * Virtualized grid for displaying large lists of icons efficiently + * Only renders visible rows for better performance with thousands of icons + */ export function VirtualizedIconsGrid({ filteredIcons, matchedAliases }: IconsGridProps) { const listRef = useRef(null) const [windowWidth, setWindowWidth] = useState(0) @@ -72,7 +86,7 @@ export function VirtualizedIconsGrid({ filteredIcons, matchedAliases }: IconsGri width: "100%", transform: `translateY(${virtualRow.start - rowVirtualizer.options.scrollMargin}px)`, }} - className="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 lg:grid-cols-6 xl:grid-cols-8 gap-4" + className={GRID_CLASSES} > {rowIcons.map(({ name, data }) => (