import React, { useEffect, useState } from 'react' import classNames from 'classnames' import Link from 'next/link' import AddIcon from '~public/icons/Add.svg' import CrossIcon from '~public/icons/Cross.svg' import EditIcon from '~public/icons/Edit.svg' import LinkIcon from '~public/icons/Link.svg' import MenuIcon from '~public/icons/Menu.svg' import SaveIcon from '~public/icons/Save.svg' import SettingsIcon from '~public/icons/Settings.svg' import './index.scss' import { ButtonType } from '~utils/enums' interface Props { active?: boolean disabled?: boolean classes?: string[], icon?: string type?: ButtonType children?: React.ReactNode onClick?: (event: React.MouseEvent) => void } const Button = (props: Props) => { // States const [active, setActive] = useState(false) const [disabled, setDisabled] = useState(false) const [pressed, setPressed] = useState(false) const [buttonType, setButtonType] = useState(ButtonType.Base) const classes = classNames({ Button: true, 'Active': active, 'btn-pressed': pressed, 'btn-disabled': disabled, 'save': props.icon === 'save', 'destructive': props.type == ButtonType.Destructive }, props.classes) useEffect(() => { if (props.active) setActive(props.active) if (props.disabled) setDisabled(props.disabled) if (props.type) setButtonType(props.type) }, [props.active, props.disabled, props.type]) const addIcon = ( ) const menuIcon = ( ) const linkIcon = ( ) const crossIcon = ( ) const editIcon = ( ) const saveIcon = ( ) const settingsIcon = ( ) function getIcon() { let icon: React.ReactNode switch(props.icon) { case 'new': icon = addIcon; break case 'menu': icon = menuIcon; break case 'link': icon = linkIcon; break case 'cross': icon = crossIcon; break case 'edit': icon = editIcon; break case 'save': icon = saveIcon; break case 'settings': icon = settingsIcon; break } return icon } function handleMouseDown() { setPressed(true) } function handleMouseUp() { setPressed(false) } return ( ) } export default Button