import { useState, useCallback } from 'react' export interface ProjectsCursor { cursor: number move(d: 1 | -1): void activate(): void jumpTo(i: number): void } export function useProjectsCursor( projectCount: number, onActivate: (idx: number) => void, ): ProjectsCursor { const [cursor, setCursor] = useState(0) const move = useCallback( (d: 1 | -1) => { if (projectCount === 0) return setCursor(c => Math.max(0, Math.min(projectCount - 1, c + d))) }, [projectCount], ) const activate = useCallback(() => { onActivate(cursor) }, [cursor, onActivate]) const jumpTo = useCallback( (i: number) => { if (projectCount === 0) return setCursor(Math.max(0, Math.min(projectCount - 1, i))) }, [projectCount], ) return { cursor, move, activate, jumpTo } }