/* eslint-disable react-native/no-inline-styles */
import React, { useCallback, useEffect } from 'react';
import { Breadcrumbs } from '../Breadcrumbs';
import { Sidebar } from '../Sidebar';
import { Box, Text, Pressable, Divider } from '@gluestack-ui/themed';
import { LayoutContext } from './LayoutContext';
import { Icon } from '@gluestack-ui/themed';
export const SidebarRecursive = ({
sidebarItem,
version,
Link,
router,
leftIndent,
}: any) => {
if (sidebarItem?.type === 'heading') {
return (
{sidebarItem.title}
{sidebarItem?.pages?.map((sidebarPageItems: any) => {
// const isActiveRoute = router?.route.includes(sidebarPageItems.id);
// console.log('isActiveRoute', isActiveRoute, router?.route);
return (
);
})}
);
}
return (
);
};
const SidebarNodeItem = ({ sidebarItem, Link, router }: any) => {
const { setIsOpenSidebar } = React.useContext(LayoutContext);
let sidebarItemTag = sidebarItem?.metaData?.tag;
// let sidebarItemTagText;
// if (sidebarItemTag) {
// sidebarItemTagText = sidebarItemTag.toString();
// sidebarItemTagText =
// sidebarItemTagText.charAt(0).toUpperCase() + sidebarItemTagText.slice(1);
// }
const isActiveRoute = router?.route === sidebarItem.id;
return (
setIsOpenSidebar(false)}
focusable={false}
tabIndex={-1}
>
{sidebarItem.title}
{sidebarItemTag && (
{sidebarItemTag}
)}
);
};
export const LayoutSidebar = ({ fluidLayout, ...props }: any) => {
const {
sidebarItems: sidebars,
version,
Link,
router,
} = React.useContext(LayoutContext);
// const [sidebars, setSidebars] = React.useState(props.sidebarItems);
// const sidebars = props.sidebarItems;
const getHeaders = useCallback(() => {
const headerItems = [];
for (let i = 0; i < sidebars.length; i++) {
if (sidebars[i].type === 'Dropdown') {
headerItems.push(sidebars[i]);
}
}
return headerItems;
}, [sidebars]);
const getSelectedHeader = React.useCallback(() => {
const header = getHeaders();
for (let i = 0; i < header.length; i++) {
if (
router?.route.includes(
header[i]?.title?.toLocaleLowerCase().split(' ').join('-')
)
) {
return header[i].title;
}
}
}, [getHeaders, router?.route]);
const [selectedHeading, setSelectedHeading] = React.useState(
getSelectedHeader() ?? ''
);
useEffect(() => {
setSelectedHeading(getSelectedHeader());
}, [sidebars, getSelectedHeader]);
const [hover, setHover] = React.useState(false);
function getFirstPage(headerItem: any) {
for (let i = 0; i < sidebars.length; i++) {
if (sidebars[i].title === headerItem) {
return getId(sidebars[i].pages[0]);
}
}
return router?.route;
}
function getId(pages: any): string {
if (pages?.pages.length > 0) {
return getId(pages?.pages[0]);
}
return pages?.id;
}
let isActiveRoute: any = false;
if (selectedHeading) {
isActiveRoute = router?.route.includes(
selectedHeading?.toLocaleLowerCase().split(' ').join('-')
)
? true
: false;
}
function getSidebarItems() {
for (let i = 0; i < sidebars.length; i++) {
if (sidebars[i].title === selectedHeading) {
return sidebars[i].pages;
}
}
}
const handleHeaderClick = (headerItem: any) => {
setSelectedHeading(headerItem.title);
};
// TODO: Remove this incase header items are required in case of gluestack-style
// TODO: remove below hacky code later
if (
// router.pathname.includes('nativewind/docs') ||
router.pathname.includes('style/docs')
) {
return (
{
if (!hover) {
setHover(true);
}
}}
onMouseLeave={() => {
setHover(false);
}}
// onHoverIn={() => {
// console.log('hello world');
// }}
>
{sidebars?.map((sidebarItems: any) => {
return (
);
})}
);
}
return (
{getHeaders().map((headerItem: any) => {
return (
<>
handleHeaderClick(headerItem)}
mr="$2.5"
my={'$0.5'}
borderRadius={'$md'}
sx={{
bg:
isActiveRoute && headerItem.title == selectedHeading
? '$primary100_alpha_50'
: 'transparent',
_light: {
':hover': {
bg: '$primary100_alpha_30',
},
},
_dark: {
'bg':
isActiveRoute && headerItem.title == selectedHeading
? '$primary600_alpha_50'
: undefined,
':hover': {
bg: '$primary600_alpha_30',
},
},
}}
tabIndex={-1}
>
{headerItem.title}
>
);
})}
{getHeaders().length > 0 && }
);
};
function RenderSideBarPages({ ...props }: any) {
const { version, Link, router } = React.useContext(LayoutContext);
const [hover, setHover] = React.useState(false);
const sidebarRef: any = React.useRef(null);
useEffect(() => {
scrollToTop();
}, []);
const scrollToTop = async () => {
if (sidebarRef) {
await sidebarRef?.current?.scrollIntoView({ behavior: 'smooth' });
}
};
return (
<>
{
if (!hover) {
setHover(true);
}
}}
onMouseLeave={() => {
setHover(false);
}}
>
{/* @ts-ignore */}
{props.sidebars?.map((sidebarPagesItems: any) => {
return (
);
})}
>
);
}