session-desktop/ts/components/session/SessionNotificationCount.tsx

66 lines
1.7 KiB
TypeScript

import React from 'react';
import styled from 'styled-components';
type Props = {
count?: number;
};
const StyledCountContainer = styled.div<{ shouldRender: boolean }>`
position: absolute;
width: 20px;
height: 20px;
font-size: 20px;
top: var(--margins-lg);
right: var(--margins-lg);
padding: 3px;
opacity: 1;
display: flex;
align-items: center;
justify-content: center;
font-family: var(--font-default);
border-radius: 50%;
font-weight: 700;
background: var(--color-destructive);
transition: var(--default-duration);
opacity: ${props => (props.shouldRender ? 1 : 0)};
text-align: center;
color: white;
/* cursor: */
`;
const StyledCount = styled.div<{ countOverflow: boolean }>`
position: relative;
font-size: ${props => (props.countOverflow ? '0.5em' : '0.6em')};
margin-top: ${props => (props.countOverflow ? '0.35em' : '0em')};
margin-left: ${props => (props.countOverflow ? '-0.45em' : '0em')};
`;
const StyledCountSup = styled.div`
position: absolute;
font-size: 1.3em;
top: -0.5em;
margin-inline-start: 0.375em;
`;
export const SessionNotificationCount = (props: Props) => {
const { count } = props;
const overflow = Boolean(count && count > 9);
const shouldRender = Boolean(count && count > 0);
if (overflow) {
return (
<StyledCountContainer shouldRender={shouldRender}>
<StyledCount countOverflow={overflow}>
{9}
<StyledCountSup>+</StyledCountSup>
</StyledCount>
</StyledCountContainer>
);
}
return (
<StyledCountContainer shouldRender={shouldRender}>
<StyledCount countOverflow={overflow}>{count}</StyledCount>
</StyledCountContainer>
);
};