index.tsx1.4 KB raw575 B gz
// bench-strategy: same-as-tabs-multifile
import { Tab, Tabs, FullWidthTabs } from "./parts";
// --- workload ----------------------------------------------------------------
const LABELS = ["Overview", "Specs", "Reviews", "Q&A", "Similar", "Deals", "Support", "More"];
interface Group { id: number; count: number; activeIdx: number; fullWidth: boolean; disabledIdx: number; }
const TabGroup = ({ group }: { group: Group }) => (
<Tabs>
{Array.from({ length: group.count }, (_, t) => (
<Tab
key={t}
isActive={t === group.activeIdx}
disabled={t === group.disabledIdx && t !== group.activeIdx}
>
{LABELS[t % LABELS.length]}
</Tab>
))}
</Tabs>
);
const FullWidthTabGroup = ({ group }: { group: Group }) => (
<FullWidthTabs>
{Array.from({ length: group.count }, (_, t) => (
<Tab
key={t}
isActive={t === group.activeIdx}
disabled={t === group.disabledIdx && t !== group.activeIdx}
>
{LABELS[t % LABELS.length]}
</Tab>
))}
</FullWidthTabs>
);
export default (i: number) => {
// ONE tab group built from i with the same per-group formula as the original DATA array.
const count = 3 + (i % 6);
const g: Group = {
id: i,
count,
activeIdx: i % count,
fullWidth: i % 3 === 0,
disabledIdx: i % 4 === 0 ? count - 1 : -1,
};
return g.fullWidth ? <FullWidthTabGroup group={g} /> : <TabGroup group={g} />;
};