fixed tab issue for elements page

This commit is contained in:
Omar Faruk
2023-05-13 15:48:37 +06:00
parent 998b625341
commit c01f9ddb07
3 changed files with 31 additions and 39 deletions
+1 -1
View File
@@ -30,7 +30,7 @@
"fuse.js": "^6.6.2", "fuse.js": "^6.6.2",
"github-slugger": "^2.0.0", "github-slugger": "^2.0.0",
"gray-matter": "^4.0.3", "gray-matter": "^4.0.3",
"marked": "^5.0.1", "marked": "^5.0.2",
"postcss": "^8.4.23", "postcss": "^8.4.23",
"prettier": "^2.8.8", "prettier": "^2.8.8",
"prettier-plugin-astro": "^0.8.0", "prettier-plugin-astro": "^0.8.0",
+15 -3
View File
@@ -10,15 +10,27 @@ draft: false
<Tabs client:load> <Tabs client:load>
<Tab name="Tab 1"> <Tab name="Tab 1">
1 <h2>Tab 1</h2>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo
</Tab> </Tab>
<Tab name="Tab 2"> <Tab name="Tab 2">
2 <h2>Tab 2</h2>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo
</Tab> </Tab>
<Tab name="Tab 3"> <Tab name="Tab 3">
3 <h2>Tab 3</h2>
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.
Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo
</Tab> </Tab>
</Tabs> </Tabs>
+15 -35
View File
@@ -1,8 +1,9 @@
import React, { useEffect, useRef } from "react"; import { marked } from "marked";
import { number } from "prop-types";
import React, { useEffect, useRef, useState } from "react";
function Tabs({ children }: { children: any }) { function Tabs({ children }: { children: any }) {
//select tabItems const [active,setAvtive]=useState(0)
const tabItemsRef = useRef<HTMLDivElement>(null);
const tabLinks = Array.from( const tabLinks = Array.from(
children.props.value.matchAll( children.props.value.matchAll(
@@ -11,47 +12,26 @@ function Tabs({ children }: { children: any }) {
(match: RegExpMatchArray) => ({ name: match[1], children: match[0] }) (match: RegExpMatchArray) => ({ name: match[1], children: match[0] })
); );
console.log(tabLinks);
//change tab item on click
const handleChangTab = (event: any, index: number) => {
const tabLinks = [...event.currentTarget.parentElement.children];
const items = [...tabItemsRef.current!.children];
const activeItem = items.find((item) => !item.classList.contains("hidden"));
const activeTabLink = tabLinks.find((item) =>
item.classList.contains("active")
);
if (activeItem === items[index]) return;
activeTabLink.classList.remove("active");
event.currentTarget.classList.add("active");
if (activeItem) {
activeItem.classList.add("hidden");
}
items[index].classList.remove("hidden");
};
//show first tab-item
useEffect(() => {
let allItems = [...tabItemsRef.current!.children];
allItems[0].classList.remove("hidden");
}, []);
return ( return (
<div className="tab"> <div className="tab">
{/* <ul className="tab-nav"> <ul className="tab-nav">
{tabLinks.map((item: any, index: number) => ( {tabLinks.map((item: any, index: number) => (
<li <li
key={index} key={index}
className={`tab-nav-item ${index === 0 && "active"}`} className={`tab-nav-item ${index === active && "active"}`}
onClick={(e) => handleChangTab(e, index)} onClick={() =>setAvtive(index) }
> >
{item} {item.name}
</li> </li>
))} ))}
</ul> </ul>
<div className="tab-content" ref={tabItemsRef}>
{children}
</div> */} {
tabLinks.map((item,i)=><div className={active===i?"block tab-content px-5":"hidden"} dangerouslySetInnerHTML={{__html:marked.parseInline(item.children)}} />)
}
</div> </div>
); );
} }