You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
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
|
|
};
|
|
} |