PromucFlow_constructor/app/client/src/components/editorComponents/NavBarItem.tsx

157 lines
3.8 KiB
TypeScript
Raw Normal View History

2019-10-18 08:16:26 +00:00
import React from "react";
import styled from "styled-components";
import { NavLink } from "react-router-dom";
2020-03-06 04:59:24 +00:00
import AnalyticsUtil from "utils/AnalyticsUtil";
2020-05-28 18:10:26 +00:00
import NotificationIcon from "components/designSystems/appsmith/NotificationIcon";
import { theme } from "constants/DefaultTheme";
2019-10-18 08:16:26 +00:00
type MenuBarItemProps = {
icon: Function;
path: string;
title: string;
exact: boolean;
2020-05-28 18:10:26 +00:00
width: number;
height: number;
external?: boolean;
className?: string;
2020-05-28 18:10:26 +00:00
highlight?: boolean;
onClick?: Function;
2019-10-18 08:16:26 +00:00
};
2020-05-28 18:10:26 +00:00
// const AnmiatedNotificationIcon = <NotificationIcon pla></NotificationIcon>
const StyledNotificationIcon = styled(NotificationIcon)`
position: absolute;
top: -4px;
right: -3px;
`;
type Props = MenuBarItemProps;
2019-10-18 08:16:26 +00:00
2020-05-28 18:10:26 +00:00
const IconContainer = styled.div<{
width: number;
height: number;
}>`
2019-10-18 08:16:26 +00:00
display: flex;
align-items: center;
justify-content: center;
2020-05-28 18:10:26 +00:00
margin: 0 auto;
2019-11-13 11:34:11 +00:00
margin-bottom: 5px;
background-color: ${props => props.theme.colors.menuButtonBGInactive};
2019-10-18 08:16:26 +00:00
border-radius: ${props => props.theme.radii[1]}px;
2020-05-28 18:10:26 +00:00
height: ${props => props.height}px;
width: ${props => props.width}px;
2019-10-18 08:16:26 +00:00
svg path {
fill: ${props => props.theme.colors.menuIconColorInactive};
2019-10-18 08:16:26 +00:00
}
`;
const ItemContainer = styled.div`
&& {
a {
2020-06-15 08:51:00 +00:00
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
padding: ${props => props.theme.spaces[5]}px 0;
2019-11-13 11:34:11 +00:00
color: ${props => props.theme.colors.textOnDarkBG};
2020-06-15 08:51:00 +00:00
font-size: ${props => props.theme.fontSizes[1]}px;
cursor: pointer;
background-color: ${props => props.theme.colors.navBG};
&:hover {
background-color: ${props => props.theme.colors.paneBG};
text-decoration: none;
}
color: ${props => props.theme.colors.menuButtonBGInactive};
&.active {
background-color: ${props => props.theme.colors.paneBG};
color: ${props => props.theme.colors.textOnDarkBG};
${IconContainer} {
background-color: ${props => props.theme.colors.primaryOld};
2020-06-15 08:51:00 +00:00
svg path {
fill: ${props => props.theme.colors.textOnDarkBG};
}
}
}
}
2020-06-15 08:51:00 +00:00
span {
width: 100%;
display: inline-block;
text-align: center;
}
}
`;
2019-10-18 08:16:26 +00:00
2020-05-28 18:10:26 +00:00
const Anchor = styled.a`
width: 64px;
display: inline-block;
`;
const ExternalLink = function(props: any) {
return (
<Anchor
onClick={() => {
props.onClick && props.onClick();
}}
href={props.to}
className={props.className}
target="_blank"
>
{props.children}
</Anchor>
);
};
const DetailsContainer = styled.div`
position: relative;
`;
class NavBarItem extends React.Component<Props> {
2019-10-18 08:16:26 +00:00
render(): React.ReactNode {
2020-05-28 18:10:26 +00:00
const {
title,
icon,
path,
exact,
width,
height,
external,
highlight,
onClick,
} = this.props;
const Link = external ? ExternalLink : NavLink;
2019-10-18 08:16:26 +00:00
return (
<ItemContainer>
2020-05-28 18:10:26 +00:00
<Link
2020-03-06 04:59:24 +00:00
exact={exact}
to={path}
className={this.props.className}
onClick={() => {
2020-05-28 18:10:26 +00:00
onClick && onClick();
2020-03-06 04:59:24 +00:00
AnalyticsUtil.logEvent("SIDEBAR_NAVIGATION", {
navPage: this.props.title.toUpperCase(),
});
}}
>
2020-05-28 18:10:26 +00:00
<DetailsContainer>
<IconContainer width={width} height={height}>
{icon({ width: width - 8, height: height - 8 })}
</IconContainer>
<span>{title}</span>
{highlight && (
<StyledNotificationIcon
animate
width={9}
height={9}
color={theme.colors.primaryOld}
2020-05-28 18:10:26 +00:00
/>
)}
</DetailsContainer>
</Link>
2019-10-18 08:16:26 +00:00
</ItemContainer>
);
}
}
export default NavBarItem;