import React, { useMemo, useCallback } 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 { useKeyboardNavigation } from "./hooks/use-keyboard-navigation" import { useMedia } from "react-use" import { Column } from "./partials/column" import { useColumnStyles } from "./hooks/use-column-styles" import { PersonalPage, PersonalPageLists } from "@/lib/schema" import { useRouter } from "next/navigation" 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 handleEnter = useCallback( (selectedPage: PersonalPage) => { router.push(`/pages/${selectedPage.id}`) }, [router] ) const { listRef, setItemRef } = useKeyboardNavigation({ personalPages, activeItemIndex, setActiveItemIndex, isCommandPaletteOpen, disableEnterKey, onEnter: handleEnter }) return (
{!isTablet && }
) } export const ColumnHeader: React.FC = () => { const columnStyles = useColumnStyles() return (
Title Topic Updated
) } interface PageListItemsProps { listRef: React.RefObject setItemRef: (el: HTMLAnchorElement | null, index: number) => void personalPages?: PersonalPageLists | null activeItemIndex: number | null } const PageListItems: React.FC = ({ listRef, setItemRef, personalPages, activeItemIndex }) => ( {personalPages?.map( (page, index) => page?.id && ( setItemRef(el, index)} page={page} isActive={index === activeItemIndex} /> ) )} )