Skip to content

Commit 927ca6b

Browse files
committed
Add CodeTabs component for code usage examples in ComponentHero
1 parent 9519470 commit 927ca6b

File tree

5 files changed

+49
-44
lines changed

5 files changed

+49
-44
lines changed

docs/app/docs/components/accordion/docs/example_1.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
"use client"
12
import Accordion from "@radui/ui/Accordion";
23

34
let items = [

docs/components/docsHelpers/EditPageOnGithub.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
"use client";
22

33
import { usePathname } from "next/navigation";
4+
import Link from "@radui/ui/Link";
45

56
const EditPageOnGithub = () => {
67

@@ -11,8 +12,8 @@ const EditPageOnGithub = () => {
1112
const currentDocsPath = "docs/app/docs/" + page;
1213

1314
return (
14-
<div>
15-
<a href={`https://github.com/rad-ui/rad-ui/edit/main/${currentDocsPath}/page.mdx`}>Edit this page on GitHub</a>
15+
<div className="w-full max-w-screen-lg mx-auto mt-2">
16+
<Link href={`https://github.com/rad-ui/rad-ui/edit/main/${currentDocsPath}/page.mdx`}>Edit this page on GitHub</Link>
1617
</div>
1718
);
1819
};

docs/components/layout/Documentation/Documentation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ const Documentation = ({ title = '', description = '', currentPage = undefined,
2929
<div className='mt-4'>
3030
{children}
3131
</div>
32-
<Separator />
32+
<Separator className="my-10" />
3333
</div>;
3434
};
3535

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
"use client"
2+
import { useState, useEffect } from 'react'
3+
import Tabs from "@radui/ui/Tabs"
4+
5+
const CodeTabs = ({ data }) => {
6+
const [activeTab, setActiveTab] = useState(data[0]?.value)
7+
console.log(activeTab)
8+
9+
return <Tabs.Root defaultValue={activeTab}>
10+
<Tabs.List>
11+
{data.map((tab, index) => (
12+
<Tabs.Trigger key={index} value={tab.value}>{tab.label}</Tabs.Trigger>
13+
))}
14+
</Tabs.List>
15+
{data.map((tab, index) => (
16+
<Tabs.Content key={index} value={tab.value}>{tab.content}</Tabs.Content>
17+
))}
18+
</Tabs.Root>
19+
20+
}
21+
22+
export default CodeTabs
Lines changed: 22 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,35 @@
11
"use client"
22
import CodeBlock from '../CodeBlock';
3-
import { useState, useEffect } from 'react'
3+
import { useState, useEffect, useMemo } from 'react'
44
import Tabs from "@radui/ui/Tabs"
55
import Heading from "@radui/ui/Heading"
66
import { BookMarkLink } from '@/components/layout/Documentation/utils';
77

8+
import CodeTabs from './CodeTabs';
89

9-
const TabContainer = ({ children }) => {
10-
return <div className='px-2'>
11-
{children}
12-
</div>
13-
}
14-
15-
const initializeTabs = (codeUsage) => {
16-
const tabs = []
17-
for (const key in codeUsage) {
18-
if (Object.hasOwnProperty.call(codeUsage, key)) {
19-
let language = key
20-
if(key === 'javascript') {
21-
language = 'jsx'
10+
const ComponentHero = ({ children, title='', codeUsage = {} }) => {
11+
12+
const initializeTabs = (codeUsage) => {
13+
const tabs = []
14+
for (const key in codeUsage) {
15+
if (Object.hasOwnProperty.call(codeUsage, key)) {
16+
let language = key
17+
if(key === 'javascript') {
18+
language = 'jsx'
19+
}
20+
const element = codeUsage[key];
21+
tabs.push({
22+
label: key,
23+
value: key,
24+
content: <CodeBlock language={language} >{codeUsage[key]?.code}</CodeBlock>,
25+
})
2226
}
23-
const element = codeUsage[key];
24-
tabs.push({
25-
label: key,
26-
value: key,
27-
content: <CodeBlock language={language} >{codeUsage[key]?.code}</CodeBlock>,
28-
})
2927
}
28+
return tabs
3029
}
31-
return tabs
32-
}
33-
34-
35-
const ComponentHero = ({ children, title='', codeUsage = {} }) => {
3630

37-
let data = initializeTabs(codeUsage)
38-
const [activeTab, setActiveTab] = useState(data[0]?.value)
39-
31+
// Use useMemo to avoid recalculating tabs unnecessarily
32+
const data = useMemo(() => initializeTabs(codeUsage), [codeUsage]);
4033

4134
return <div>
4235
{title && <BookMarkLink id={title}> <Heading>{title}</Heading> </BookMarkLink>}
@@ -45,22 +38,10 @@ const ComponentHero = ({ children, title='', codeUsage = {} }) => {
4538
</div>
4639
<div>
4740
<div>
48-
<Tabs.Root defaultValue={activeTab} onValueChange={(value)=>{
49-
setActiveTab(value)
50-
}}>
51-
<Tabs.List>
52-
{data.map((tab, index) => (
53-
<Tabs.Trigger key={index} value={tab.value}>{tab.label}</Tabs.Trigger>
54-
))}
55-
</Tabs.List>
56-
{data.map((tab, index) => (
57-
<Tabs.Content key={index} value={tab.value}>{tab.content}</Tabs.Content>
58-
))}
59-
</Tabs.Root>
41+
<CodeTabs data={data} />
6042
</div>
6143
</div>
6244
</div>
63-
6445
}
6546

6647
export default ComponentHero;

0 commit comments

Comments
 (0)