"use client"; import React, { ReactNode } from "react"; import { DynamicTabT } from "./types"; import { AnimatePresence, motion } from "framer-motion"; import { MaterialIcon } from "@shared/components/material-icon"; import { Button } from "@shared/contentful/blocks/button"; import { cx } from "@shared/utils"; export interface OrderedTabViewProps { items: DynamicTabT[]; currentTabIndex: number; subitemColCount: number; onTabClick: (index: number, anchor: string) => void; } export interface OrderedAccordionViewProps extends OrderedTabViewProps { setCurrentTabIndex: (index: number) => void; } // Renders a tab's `tabContent` nodes arranged into `subitemColCount` columns. export function renderOrderedChildren( content: ReactNode, subitemColCount: number ) { const children = Array.isArray(content) ? content : [content]; const colCount = Math.min(subitemColCount, children.length); return (
{[...new Array(colCount)].map((_, colIdx) => ( ))}
); } export function OrderedTabView({ items, currentTabIndex, subitemColCount, onTabClick, }: OrderedTabViewProps) { return ( <>
{items.map((tab, index) => ( ))}
{items.map((tab, index) => (
{renderOrderedChildren(tab.tabContent, subitemColCount)}
))} ); } export function OrderedAccordionView({ items, currentTabIndex, subitemColCount, onTabClick, setCurrentTabIndex, }: OrderedAccordionViewProps) { return (
{items.map((tab, index) => (
{renderOrderedChildren(tab.tabContent, subitemColCount)}
))}
); } export function OrderedSidebarView({ items, currentTabIndex, subitemColCount, onTabClick, }: OrderedTabViewProps) { return (
{[...new Array(Math.min(2, items.length))].map((_, colIdx) => { const perColumn = Math.ceil(items.length / 2); return (
{items .slice(colIdx * perColumn, (colIdx + 1) * perColumn) .map((tab, rowIdx) => { const index = colIdx * perColumn + rowIdx; return ( ); })}
); })}
{items.map((tab, index) => (
{renderOrderedChildren(tab.tabContent, subitemColCount)}
))}
); }