40 lines
906 B
JavaScript
40 lines
906 B
JavaScript
|
'use client';
|
||
|
|
||
|
import { usePreviousProps } from '@mui/utils';
|
||
|
/**
|
||
|
*
|
||
|
* Demos:
|
||
|
*
|
||
|
* - [Badge](https://mui.com/base-ui/react-badge/#hook)
|
||
|
*
|
||
|
* API:
|
||
|
*
|
||
|
* - [useBadge API](https://mui.com/base-ui/react-badge/hooks-api/#use-badge)
|
||
|
*/
|
||
|
export function useBadge(parameters) {
|
||
|
const {
|
||
|
badgeContent: badgeContentProp,
|
||
|
invisible: invisibleProp = false,
|
||
|
max: maxProp = 99,
|
||
|
showZero = false
|
||
|
} = parameters;
|
||
|
const prevProps = usePreviousProps({
|
||
|
badgeContent: badgeContentProp,
|
||
|
max: maxProp
|
||
|
});
|
||
|
let invisible = invisibleProp;
|
||
|
if (invisibleProp === false && badgeContentProp === 0 && !showZero) {
|
||
|
invisible = true;
|
||
|
}
|
||
|
const {
|
||
|
badgeContent,
|
||
|
max = maxProp
|
||
|
} = invisible ? prevProps : parameters;
|
||
|
const displayValue = badgeContent && Number(badgeContent) > max ? `${max}+` : badgeContent;
|
||
|
return {
|
||
|
badgeContent,
|
||
|
invisible,
|
||
|
max,
|
||
|
displayValue
|
||
|
};
|
||
|
}
|