2020-08-10 04:54:33 +00:00
|
|
|
import React from "react";
|
|
|
|
|
import { ReactComponent as DeleteIcon } from "assets/icons/ads/delete.svg";
|
|
|
|
|
import { ReactComponent as UserIcon } from "assets/icons/ads/user.svg";
|
2020-08-14 07:11:38 +00:00
|
|
|
import { ReactComponent as GeneralIcon } from "assets/icons/ads/general.svg";
|
|
|
|
|
import { ReactComponent as BillingIcon } from "assets/icons/ads/billing.svg";
|
2020-08-26 09:04:58 +00:00
|
|
|
import { ReactComponent as EditIcon } from "assets/icons/ads/edit.svg";
|
|
|
|
|
import { ReactComponent as ErrorIcon } from "assets/icons/ads/error.svg";
|
|
|
|
|
import { ReactComponent as SuccessIcon } from "assets/icons/ads/success.svg";
|
2020-08-26 07:25:27 +00:00
|
|
|
import { ReactComponent as SearchIcon } from "assets/icons/ads/search.svg";
|
|
|
|
|
import { ReactComponent as CloseIcon } from "assets/icons/ads/close.svg";
|
2020-08-10 04:54:33 +00:00
|
|
|
import styled from "styled-components";
|
|
|
|
|
import { Size } from "./Button";
|
|
|
|
|
import { sizeHandler } from "./Spinner";
|
2020-08-28 18:51:16 +00:00
|
|
|
import { CommonComponentProps } from "./common";
|
|
|
|
|
import { noop } from "lodash";
|
2020-08-10 04:54:33 +00:00
|
|
|
|
2020-08-14 07:11:38 +00:00
|
|
|
export type IconName =
|
|
|
|
|
| "Select icon"
|
|
|
|
|
| "delete"
|
|
|
|
|
| "user"
|
|
|
|
|
| "general"
|
|
|
|
|
| "billing"
|
2020-08-26 09:04:58 +00:00
|
|
|
| "edit"
|
|
|
|
|
| "error"
|
|
|
|
|
| "success"
|
2020-08-26 07:25:27 +00:00
|
|
|
| "search"
|
|
|
|
|
| "close"
|
2020-08-14 07:11:38 +00:00
|
|
|
| undefined;
|
2020-08-10 04:54:33 +00:00
|
|
|
|
|
|
|
|
const IconWrapper = styled.div<IconProps>`
|
|
|
|
|
&:focus {
|
|
|
|
|
outline: none;
|
|
|
|
|
}
|
2020-08-14 07:11:38 +00:00
|
|
|
display: flex;
|
2020-08-10 04:54:33 +00:00
|
|
|
svg {
|
2020-08-26 09:04:58 +00:00
|
|
|
width: ${props =>
|
|
|
|
|
props.size ? sizeHandler(props) : props.theme.spaces[9]}px;
|
|
|
|
|
height: ${props =>
|
|
|
|
|
props.size ? sizeHandler(props) : props.theme.spaces[9]}px;
|
2020-08-17 03:25:35 +00:00
|
|
|
path {
|
2020-08-28 10:51:41 +00:00
|
|
|
fill: ${props => props.theme.colors.blackShades[5]};
|
2020-08-17 03:25:35 +00:00
|
|
|
}
|
2020-08-10 04:54:33 +00:00
|
|
|
}
|
|
|
|
|
visibility: ${props => (props.invisible ? "hidden" : "visible")};
|
2020-08-17 03:25:35 +00:00
|
|
|
|
|
|
|
|
&:hover {
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
path {
|
|
|
|
|
fill: ${props => props.theme.colors.blackShades[6]};
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
&:active {
|
|
|
|
|
cursor: pointer;
|
|
|
|
|
path {
|
|
|
|
|
fill: ${props => props.theme.colors.blackShades[7]};
|
|
|
|
|
}
|
|
|
|
|
}
|
2020-08-10 04:54:33 +00:00
|
|
|
`;
|
|
|
|
|
|
|
|
|
|
export type IconProps = {
|
|
|
|
|
size?: Size;
|
|
|
|
|
name?: IconName;
|
|
|
|
|
invisible?: boolean;
|
2020-08-26 07:18:04 +00:00
|
|
|
className?: string;
|
2020-08-28 18:51:16 +00:00
|
|
|
onClick?: () => void;
|
2020-08-10 04:54:33 +00:00
|
|
|
};
|
|
|
|
|
|
2020-08-28 18:51:16 +00:00
|
|
|
const Icon = (props: IconProps & CommonComponentProps) => {
|
2020-08-10 04:54:33 +00:00
|
|
|
let returnIcon;
|
|
|
|
|
switch (props.name) {
|
|
|
|
|
case "delete":
|
2020-08-26 07:18:04 +00:00
|
|
|
returnIcon = <DeleteIcon />;
|
2020-08-10 04:54:33 +00:00
|
|
|
break;
|
2020-08-14 07:11:38 +00:00
|
|
|
case "user":
|
2020-08-26 07:18:04 +00:00
|
|
|
returnIcon = <UserIcon />;
|
2020-08-10 04:54:33 +00:00
|
|
|
break;
|
2020-08-14 07:11:38 +00:00
|
|
|
case "general":
|
2020-08-26 07:18:04 +00:00
|
|
|
returnIcon = <GeneralIcon />;
|
2020-08-14 07:11:38 +00:00
|
|
|
break;
|
|
|
|
|
case "billing":
|
2020-08-26 07:18:04 +00:00
|
|
|
returnIcon = <BillingIcon />;
|
2020-08-14 07:11:38 +00:00
|
|
|
break;
|
2020-08-26 09:04:58 +00:00
|
|
|
case "edit":
|
|
|
|
|
returnIcon = <EditIcon />;
|
|
|
|
|
break;
|
|
|
|
|
case "error":
|
|
|
|
|
returnIcon = <ErrorIcon />;
|
|
|
|
|
break;
|
|
|
|
|
case "success":
|
|
|
|
|
returnIcon = <SuccessIcon />;
|
|
|
|
|
break;
|
2020-08-26 07:25:27 +00:00
|
|
|
case "search":
|
|
|
|
|
returnIcon = <SearchIcon />;
|
|
|
|
|
break;
|
|
|
|
|
case "close":
|
|
|
|
|
returnIcon = <CloseIcon />;
|
|
|
|
|
break;
|
2020-08-14 07:11:38 +00:00
|
|
|
default:
|
|
|
|
|
returnIcon = null;
|
|
|
|
|
break;
|
2020-08-10 04:54:33 +00:00
|
|
|
}
|
2020-08-26 07:18:04 +00:00
|
|
|
return returnIcon ? (
|
|
|
|
|
<IconWrapper
|
|
|
|
|
className={props.className ? props.className : "ads-icon"}
|
2020-08-28 18:51:16 +00:00
|
|
|
data-cy={props.cypressSelector}
|
2020-08-26 07:18:04 +00:00
|
|
|
{...props}
|
2020-08-28 18:51:16 +00:00
|
|
|
onClick={props.onClick || noop}
|
2020-08-26 07:18:04 +00:00
|
|
|
>
|
|
|
|
|
{returnIcon}
|
|
|
|
|
</IconWrapper>
|
|
|
|
|
) : null;
|
2020-08-10 04:54:33 +00:00
|
|
|
};
|
2020-08-26 07:18:04 +00:00
|
|
|
|
|
|
|
|
export default Icon;
|