import { useEffect, useState, useRef } from "react"; import { useVirtualizer } from "@tanstack/react-virtual"; import HistoryList from "@/components/HistoryList.tsx"; import HistorySearch from "@/components/HistorySearch.tsx"; import { AtuinState, useStore } from "@/state/store"; export default function Search() { const history = useStore((state: AtuinState) => state.shellHistory); const refreshHistory = useStore( (state: AtuinState) => state.refreshShellHistory, ); const historyNextPage = useStore( (state: AtuinState) => state.historyNextPage, ); let [query, setQuery] = useState(""); useEffect(() => { (async () => { // nothing rn })(); refreshHistory(); }, []); const parentRef = useRef(null); const rowVirtualizer = useVirtualizer({ count: history.length, getScrollElement: () => parentRef.current, estimateSize: () => 90, overscan: 5, }); useEffect(() => { const [lastItem] = rowVirtualizer.getVirtualItems().slice(-1); if (!lastItem) return; // no undefined plz if (lastItem.index < history.length - 1) return; // if we're not at the end yet, bail // we're at the end! more rows plz! historyNextPage(query); }, [rowVirtualizer.getVirtualItems()]); return ( <>
{ setQuery(q); refreshHistory(q); }} refresh={() => { refreshHistory(query); }} />
); }