"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) => (
{children
.slice(
colIdx * Math.ceil(children.length / colCount),
(colIdx + 1) * Math.ceil(children.length / colCount)
)
.map((child, rowIdx) => (
- {child}
))}
))}
);
}
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)}
))}
);
}