From 3260165e86d15ca8ada2a88232d1dbdf395931aa Mon Sep 17 00:00:00 2001 From: Tony Vi Date: Fri, 11 Aug 2023 21:42:18 +0300 Subject: [PATCH] refactor(Tag): move out clean button --- src/components/CleanButton.tsx | 2 +- src/components/Tag.tsx | 54 ++++++---------------------------- 2 files changed, 10 insertions(+), 46 deletions(-) diff --git a/src/components/CleanButton.tsx b/src/components/CleanButton.tsx index 099fdf9a..c0f8842a 100644 --- a/src/components/CleanButton.tsx +++ b/src/components/CleanButton.tsx @@ -2,7 +2,7 @@ import React from 'react'; import styled from 'styled-components'; import { gray10, gray7, gray8 } from '@taskany/colors'; -interface CleanButtonProps extends React.HTMLAttributes { +export interface CleanButtonProps extends React.HTMLAttributes { className?: string; onClick?: (e: React.MouseEvent) => void; diff --git a/src/components/Tag.tsx b/src/components/Tag.tsx index 32d79275..d56ac6ea 100644 --- a/src/components/Tag.tsx +++ b/src/components/Tag.tsx @@ -1,28 +1,23 @@ -import React, { MouseEventHandler, useCallback } from 'react'; +import React, { MouseEventHandler } from 'react'; import styled from 'styled-components'; import { colorPrimary, gapXs, gray10, gray5, gray6, gray9, radiusL, textColorPrimary } from '@taskany/colors'; -import { nullable } from '../utils/nullable'; - import { CleanButton } from './CleanButton'; interface TagProps extends React.HTMLAttributes { - title: string; + children: React.ReactNode; description?: string; size?: 's' | 'm'; className?: string; checked?: boolean; onClick?: MouseEventHandler; - onHide?: () => void; } -const StyledCleanButton = styled(CleanButton)``; +export const TagCleanButton = styled(CleanButton)``; // eslint-disable-next-line @typescript-eslint/no-unused-vars -const StyledTag = styled(({ onHide, ...props }: Partial & { children?: React.ReactNode }) => ( -
-))` +const StyledTag = styled(({ size, ...props }: TagProps) =>
)` display: inline-block; position: relative; padding: 4px 12px 5px; @@ -45,8 +40,7 @@ const StyledTag = styled(({ onHide, ...props }: Partial & { children?: margin-left: ${gapXs}; } - ${({ onHide, checked }) => - !onHide && + ${({ checked }) => !checked && ` &:hover { @@ -57,7 +51,7 @@ const StyledTag = styled(({ onHide, ...props }: Partial & { children?: `} &:hover { - ${StyledCleanButton} { + ${TagCleanButton} { visibility: visible; cursor: pointer; @@ -86,40 +80,10 @@ const StyledTag = styled(({ onHide, ...props }: Partial & { children?: `} `; -export const Tag: React.FC = ({ - title, - description, - size = 'm', - onClick, - onHide, - className, - checked, - ...attrs -}) => { - const onHideClick = useCallback( - (e: React.MouseEvent) => { - e.preventDefault(); - e.stopPropagation(); - - onHide?.(); - }, - [onHide], - ); - +export const Tag: React.FC = ({ children, description, size = 'm', ...props }) => { return ( - - {nullable(onHide, () => ( - - ))} - {title} + + {children} ); };