Something with the onCLick or typescript not workign with this code: i tried to add data tag didnt help
import { styled } from "solid-styled-components";
type AccordionStyle = 'primary';
interface AccordionProps {
style?: AccordionStyle;
data: any;
}
const primary = styled("div")`
display: flex;
flex-direction: column;
background: black;
color: white;
& > div > :first-child {
display: flex;
flex-direction: column;
padding: 1rem;
&:hover {
background: #222222;
}
}
`;
const AccordionStyles = {
primary,
};
function AccordionBuild(props: AccordionProps) {
const [isVisible, setIsVisible] = createSignal(0);
const handleClick: JSX.EventHandlerUnion<HTMLDivElement, MouseEvent> = (event) => {
const target = event.currentTarget as HTMLDivElement;
const index = parseInt(target.dataset.index ?? "", 10);
if (!isNaN(index)) {
const newIndex = index;
setIsVisible(newIndex);
}
};
const build = props.data.map((item: any) => {
const isExpandedIndex = item.id === isVisible();
const icon = <span>{isExpandedIndex ? "X" : "Y"}</span>;
return (
<div onClick={handleClick} data-index={item.id}>
<div>
{item.label} {icon}
</div>
{isExpandedIndex && <div>{item.content}</div>}
</div>
);
});
const AccordionComponent = props.style ? AccordionStyles[props.style] : AccordionStyles.primary;
return (
<AccordionComponent>
{build}
</AccordionComponent>
);
}
export function AccordionDroid() {
const accordionData = [
{ id: 1, label: 'Radha', content: 'Love for Krishna' },
{ id: 2, label: 'Krishna', content: 'Love for Radha' },
{ id: 3, label: 'souls', content: 'Happy' }
];
return <AccordionBuild data={accordionData} />;
}