import React, { useMemo, useCallback, useEffect } from "react" import { Primitive } from "@radix-ui/react-primitive" import { useAccount } from "@/lib/providers/jazz-provider" import { useAtom } from "jotai" import { commandPaletteOpenAtom } from "@/components/custom/command-palette/command-palette" import { PageItem } from "./partials/page-item" import { useMedia } from "react-use" import { useColumnStyles } from "./hooks/use-column-styles" import { PersonalPage, PersonalPageLists } from "@/lib/schema" import { useRouter } from "next/navigation" import { useActiveItemScroll } from "@/hooks/use-active-item-scroll" import { Column } from "@/components/custom/column" interface PageListProps { activeItemIndex: number | null setActiveItemIndex: React.Dispatch> disableEnterKey: boolean } export const PageList: React.FC = ({ activeItemIndex, setActiveItemIndex, disableEnterKey }) => { const isTablet = useMedia("(max-width: 640px)") const [isCommandPaletteOpen] = useAtom(commandPaletteOpenAtom) const { me } = useAccount({ root: { personalPages: [] } }) const personalPages = useMemo(() => me?.root?.personalPages, [me?.root?.personalPages]) const router = useRouter() const itemCount = personalPages?.length || 0 const handleEnter = useCallback( (selectedPage: PersonalPage) => { router.push(`/pages/${selectedPage.id}`) }, [router] ) const handleKeyDown = useCallback( (e: KeyboardEvent) => { if (isCommandPaletteOpen) return if (e.key === "ArrowUp" || e.key === "ArrowDown") { e.preventDefault() setActiveItemIndex(prevIndex => { if (prevIndex === null) return 0 const newIndex = e.key === "ArrowUp" ? (prevIndex - 1 + itemCount) % itemCount : (prevIndex + 1) % itemCount return newIndex }) } else if (e.key === "Enter" && !disableEnterKey && activeItemIndex !== null && personalPages) { e.preventDefault() const selectedPage = personalPages[activeItemIndex] if (selectedPage) handleEnter?.(selectedPage) } }, [itemCount, isCommandPaletteOpen, activeItemIndex, setActiveItemIndex, disableEnterKey, personalPages, handleEnter] ) useEffect(() => { window.addEventListener("keydown", handleKeyDown) return () => window.removeEventListener("keydown", handleKeyDown) }, [handleKeyDown]) return (
{!isTablet && }
) } export const ColumnHeader: React.FC = () => { const columnStyles = useColumnStyles() return (
Title Topic Updated
) } interface PageListItemsProps { personalPages?: PersonalPageLists | null activeItemIndex: number | null } const PageListItems: React.FC = ({ personalPages, activeItemIndex }) => { const { setElementRef } = useActiveItemScroll({ activeIndex: activeItemIndex }) return ( {personalPages?.map( (page, index) => page?.id && ( setElementRef(el, index)} page={page} isActive={index === activeItemIndex} /> ) )} ) }