| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  | import { Sheet, SheetContent, SheetHeader, SheetTitle, SheetTrigger } from "@/components/ui/sheet"; | 
					
						
							| 
									
										
										
										
											2024-01-04 12:30:29 +08:00
										 |  |  | import useDrawerTOCState from "@/stores/useDrawerTOCState"; | 
					
						
							| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  | import { TTOCItem } from "@/types/toc.type"; | 
					
						
							|  |  |  | import Link from "next/link"; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-01-04 11:34:27 +08:00
										 |  |  | export const DrawerTOC = (props: { data: TTOCItem[] }) => { | 
					
						
							| 
									
										
										
										
											2024-01-04 12:30:29 +08:00
										 |  |  |   const isTOCOpen = useDrawerTOCState((state) => state.isOpen); | 
					
						
							|  |  |  |   const setIsTOCOpen = useDrawerTOCState((state) => state.changeDrawerTOCOpen); | 
					
						
							| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  |   return ( | 
					
						
							|  |  |  |     <Sheet open={isTOCOpen} onOpenChange={setIsTOCOpen}> | 
					
						
							|  |  |  |       <SheetTrigger | 
					
						
							|  |  |  |         title="Open the table of contents" | 
					
						
							| 
									
										
										
										
											2024-01-04 15:53:16 +08:00
										 |  |  |         className="bottom-7 right-4 fixed bg-white dark:bg-black border-gray-700 border dark:border-gray-500 shadow-xl" | 
					
						
							| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  |       > | 
					
						
							| 
									
										
										
										
											2024-01-04 15:53:16 +08:00
										 |  |  |         <div onClick={() => setIsTOCOpen(!isTOCOpen)} className="p-3 font-bold"> | 
					
						
							|  |  |  |           {"TOC"} | 
					
						
							|  |  |  |         </div> | 
					
						
							| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  |       </SheetTrigger> | 
					
						
							|  |  |  |       <SheetContent side={"left"}> | 
					
						
							|  |  |  |         <SheetHeader> | 
					
						
							|  |  |  |           <SheetTitle className="mt-8 font-bold">{"TABLE OF CONTENTS"}</SheetTitle> | 
					
						
							|  |  |  |         </SheetHeader> | 
					
						
							|  |  |  |         <ul className="my-3 flat-scrollbar h-[70vh] flex flex-col overflow-y-auto"> | 
					
						
							|  |  |  |           {props.data?.map((item) => ( | 
					
						
							|  |  |  |             <Link | 
					
						
							|  |  |  |               className="hover:text-sky-500 border-t border-b py-2 border-dashed" | 
					
						
							|  |  |  |               onClick={() => { | 
					
						
							|  |  |  |                 setIsTOCOpen(false); | 
					
						
							|  |  |  |               }} | 
					
						
							| 
									
										
										
										
											2024-01-04 11:34:27 +08:00
										 |  |  |               key={`drawer-toc-${item.anchorId}`} | 
					
						
							| 
									
										
										
										
											2023-12-25 17:21:39 +08:00
										 |  |  |               href={`#${item.anchorId}`} | 
					
						
							|  |  |  |             > | 
					
						
							|  |  |  |               <li | 
					
						
							|  |  |  |                 className="my-2 target:text-blue-500" | 
					
						
							|  |  |  |                 style={{ paddingLeft: `${item.level - 2}em` }} | 
					
						
							|  |  |  |               >{`${item.title}`}</li> | 
					
						
							|  |  |  |             </Link> | 
					
						
							|  |  |  |           ))} | 
					
						
							|  |  |  |         </ul> | 
					
						
							|  |  |  |       </SheetContent> | 
					
						
							|  |  |  |     </Sheet> | 
					
						
							|  |  |  |   ); | 
					
						
							|  |  |  | }; |