mirror of
https://github.com/Sendouc/sendou.ink.git
synced 2026-05-13 06:21:21 -05:00
* side layout initial * add elements to side nav * side buttons links * remove clog * calendar page initial * position sticky working * x trends page initial * new table * same mode selector * mobile friendly table * no underline for nav links * xsearch * x trends page outlined * sr initial * relocate calendar components * calendar fix flex * topnav fancier look * layout looking good edition * relocate xtrends * xtrends remove linecharts * x trends new * calender page new * delete headbanner, new login * remove calendar stuff from api * rename stuff in utils * fix user item margin * new home page initial * remove page concept * no pointer xtrends * remove xrank from app * xtrends service * move fa from app * move plus * maps tweaks * new table for plus history * navigational sidebar flex tweaks * builds page * analyzer * user page * free agents * plans * remove mx * tweaks * change layout to grid * home page finalized * mobile nav * restrict main content width * tweaks style * language switcher * container in css * sticky nav * use duplicate icons for now * change mapsketch width to old * chara tour vid * borzoic icons
50 lines
1.2 KiB
TypeScript
50 lines
1.2 KiB
TypeScript
// https://usehooks.com/useDebounce/
|
||
|
||
import { useColorMode } from "@chakra-ui/react";
|
||
import { User as PrismaUser } from "@prisma/client";
|
||
import { useSession } from "next-auth/client";
|
||
import { useRouter } from "next/router";
|
||
import { useEffect, useState } from "react";
|
||
import { theme } from "theme";
|
||
import { navItems } from "utils/constants";
|
||
|
||
export function useDebounce(value: string, delay: number = 500) {
|
||
const [debouncedValue, setDebouncedValue] = useState(value);
|
||
|
||
useEffect(() => {
|
||
const handler = setTimeout(() => {
|
||
setDebouncedValue(value);
|
||
}, delay);
|
||
return () => {
|
||
clearTimeout(handler);
|
||
};
|
||
}, [value, delay]);
|
||
|
||
return debouncedValue;
|
||
}
|
||
|
||
export const useMyTheme = () => {
|
||
const { colorMode } = useColorMode();
|
||
|
||
return theme[colorMode];
|
||
};
|
||
|
||
export const useUser = (): [PrismaUser | undefined | null, boolean] => {
|
||
// @ts-ignore
|
||
return useSession();
|
||
};
|
||
|
||
export const useActiveNavItem = () => {
|
||
const [navItem, setNavItem] = useState<
|
||
undefined | { code: string; name: string }
|
||
>(undefined);
|
||
const router = useRouter();
|
||
const firstPath = router.pathname.split("/")[1];
|
||
|
||
useEffect(() => {
|
||
setNavItem(navItems.find(({ code }) => code === firstPath));
|
||
}, [firstPath]);
|
||
|
||
return navItem;
|
||
};
|