Files
feishin/src/renderer/components/item-list/helpers/use-item-list-scroll-persist.ts
T
2026-01-22 00:33:51 -08:00

28 lines
846 B
TypeScript

import { useCallback, useMemo } from 'react';
import { useSearchParams } from 'react-router';
import { parseIntParam, setSearchParam } from '/@/renderer/utils/query-params';
interface UseItemListScrollPersistProps {
enabled: boolean;
}
export const useItemListScrollPersist = ({ enabled }: UseItemListScrollPersistProps) => {
const [searchParams, setSearchParams] = useSearchParams();
const scrollOffset = useMemo(() => parseIntParam(searchParams, 'scrollOffset'), [searchParams]);
const handleOnScrollEnd = useCallback(
(offset: number) => {
if (!enabled) return;
setSearchParams((prev) => setSearchParam(prev, 'scrollOffset', offset), {
replace: true,
});
},
[enabled, setSearchParams],
);
return { handleOnScrollEnd, scrollOffset };
};