mirror of
https://github.com/cinnyapp/cinny.git
synced 2025-11-10 17:20:28 +03:00
Some checks failed
Deploy to Netlify (dev) / Deploy to Netlify (push) Has been cancelled
* add new search modal * remove search modal from searchTab * fix member avatar load for space with 2 member * use media authentication when rendering avatar * fix hotkey for macos * add @ in username * replace subspace minus separator with em dash
36 lines
731 B
TypeScript
36 lines
731 B
TypeScript
import { useCallback, useState } from 'react';
|
|
|
|
export const useListFocusIndex = (size: number, initialIndex: number) => {
|
|
const [index, setIndex] = useState(initialIndex);
|
|
|
|
const next = useCallback(() => {
|
|
setIndex((i) => {
|
|
const nextIndex = i + 1;
|
|
if (nextIndex >= size) {
|
|
return 0;
|
|
}
|
|
return nextIndex;
|
|
});
|
|
}, [size]);
|
|
|
|
const previous = useCallback(() => {
|
|
setIndex((i) => {
|
|
const previousIndex = i - 1;
|
|
if (previousIndex < 0) {
|
|
return size - 1;
|
|
}
|
|
return previousIndex;
|
|
});
|
|
}, [size]);
|
|
|
|
const reset = useCallback(() => {
|
|
setIndex(initialIndex);
|
|
}, [initialIndex]);
|
|
|
|
return {
|
|
index,
|
|
next,
|
|
previous,
|
|
reset,
|
|
};
|
|
};
|