mirror of
https://github.com/jeffvli/feishin.git
synced 2026-05-09 20:29:36 +02:00
28 lines
846 B
TypeScript
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 };
|
|
};
|