@leafygreen-ui/hooks
Version:
LeafyGreen UI Kit Custom Hooks
34 lines (27 loc) • 1.07 kB
text/typescript
// Currently using Material UI useId hook until we can upgrade to React 18's useId
// https://github.com/mui/material-ui/blob/master/packages/mui-utils/src/useId.ts
import { useEffect, useState } from 'react';
interface Params {
prefix?: string;
id?: string;
}
let globalId = 0;
function useGlobalId({ id: idOverride, prefix }: Params): string {
const [defaultId, setDefaultId] = useState<string | number | undefined>(
idOverride,
);
useEffect(() => {
if (defaultId == null) {
// Fallback to this default id when possible.
// Use the incrementing value for client-side rendering only.
// We can't use it server-side.
// If you want to use random values please consider the Birthday Problem: https://en.wikipedia.org/wiki/Birthday_problem
globalId += 1;
setDefaultId(globalId);
}
}, [defaultId, prefix]);
return idOverride ? idOverride : `${prefix ?? 'lg'}-${defaultId}`;
}
export default function useId({ prefix, id: idOverride }: Params): string {
return useGlobalId({ id: idOverride, prefix });
}