From a392a81994ccc81db4d0bc323a59fb9d93b826be Mon Sep 17 00:00:00 2001 From: Aditya Pimpalkar Date: Thu, 14 Sep 2023 00:31:59 +0100 Subject: [PATCH] fix: hover behaviour on table cells (#1557) * edit button focus fix * cell feedback fix * using theme prop * isHovered prop drill * edit button component * refactor editable cell * import fix * index fix (merge issue) --- .../editable-cell/components/EditableCell.tsx | 36 ++++++------------- .../EditableCellDisplayContainer.tsx | 7 ++-- .../components/EditableCellDisplayMode.tsx | 5 +-- .../components/EditableCellEditButton.tsx | 29 +++++++++++++++ 4 files changed, 48 insertions(+), 29 deletions(-) create mode 100644 front/src/modules/ui/table/editable-cell/components/EditableCellEditButton.tsx diff --git a/front/src/modules/ui/table/editable-cell/components/EditableCell.tsx b/front/src/modules/ui/table/editable-cell/components/EditableCell.tsx index 1114ef393..5a0b54bda 100644 --- a/front/src/modules/ui/table/editable-cell/components/EditableCell.tsx +++ b/front/src/modules/ui/table/editable-cell/components/EditableCell.tsx @@ -1,9 +1,6 @@ import { ReactElement, useState } from 'react'; import styled from '@emotion/styled'; -import { motion } from 'framer-motion'; -import { FloatingIconButton } from '@/ui/button/components/FloatingIconButton'; -import { IconPencil } from '@/ui/icon'; import { HotkeyScope } from '@/ui/utilities/hotkey/types/HotkeyScope'; import { CellHotkeyScopeContext } from '../../contexts/CellHotkeyScopeContext'; @@ -14,14 +11,10 @@ import { useIsSoftFocusOnCurrentCell } from '../hooks/useIsSoftFocusOnCurrentCel import { useSetSoftFocusOnCurrentCell } from '../hooks/useSetSoftFocusOnCurrentCell'; import { EditableCellDisplayMode } from './EditableCellDisplayMode'; +import { EditableCellEditButton } from './EditableCellEditButton'; import { EditableCellEditMode } from './EditableCellEditMode'; import { EditableCellSoftFocusMode } from './EditableCellSoftFocusMode'; -const StyledEditButtonContainer = styled(motion.div)` - position: absolute; - right: 5px; -`; - const StyledCellBaseContainer = styled.div` align-items: center; box-sizing: border-box; @@ -102,27 +95,20 @@ export function EditableCell({ {editModeContent} ) : hasSoftFocus ? ( - - {nonEditModeContent} - + <> + {showEditButton && ( + + )} + + {nonEditModeContent} + + ) : ( <> {showEditButton && ( - - - + )} - - + {nonEditModeContent} diff --git a/front/src/modules/ui/table/editable-cell/components/EditableCellDisplayContainer.tsx b/front/src/modules/ui/table/editable-cell/components/EditableCellDisplayContainer.tsx index 8788f29a0..52d8b7352 100644 --- a/front/src/modules/ui/table/editable-cell/components/EditableCellDisplayContainer.tsx +++ b/front/src/modules/ui/table/editable-cell/components/EditableCellDisplayContainer.tsx @@ -5,10 +5,11 @@ export type EditableCellDisplayContainerProps = { softFocus?: boolean; onClick?: () => void; scrollRef?: Ref; + isHovered?: boolean; }; const StyledEditableCellDisplayModeOuterContainer = styled.div< - Pick + Pick >` align-items: center; display: flex; @@ -20,7 +21,7 @@ const StyledEditableCellDisplayModeOuterContainer = styled.div< width: 100%; ${(props) => - props.softFocus + props.softFocus || props.isHovered ? `background: ${props.theme.background.transparent.secondary}; border-radius: ${props.theme.border.radius.sm}; box-shadow: inset 0 0 0 1px ${props.theme.font.color.extraLight};` @@ -40,6 +41,7 @@ export function EditableCellDisplayContainer({ softFocus, onClick, scrollRef, + isHovered, }: React.PropsWithChildren) { return ( diff --git a/front/src/modules/ui/table/editable-cell/components/EditableCellDisplayMode.tsx b/front/src/modules/ui/table/editable-cell/components/EditableCellDisplayMode.tsx index fff2ca11e..4729a7e01 100644 --- a/front/src/modules/ui/table/editable-cell/components/EditableCellDisplayMode.tsx +++ b/front/src/modules/ui/table/editable-cell/components/EditableCellDisplayMode.tsx @@ -5,7 +5,8 @@ import { EditableCellDisplayContainer } from './EditableCellDisplayContainer'; export function EditableCellDisplayMode({ children, -}: React.PropsWithChildren) { + isHovered, +}: React.PropsWithChildren & { isHovered?: boolean }) { const setSoftFocusOnCurrentCell = useSetSoftFocusOnCurrentCell(); const { openEditableCell } = useEditableCell(); @@ -16,7 +17,7 @@ export function EditableCellDisplayMode({ } return ( - + {children} ); diff --git a/front/src/modules/ui/table/editable-cell/components/EditableCellEditButton.tsx b/front/src/modules/ui/table/editable-cell/components/EditableCellEditButton.tsx new file mode 100644 index 000000000..d3e84812c --- /dev/null +++ b/front/src/modules/ui/table/editable-cell/components/EditableCellEditButton.tsx @@ -0,0 +1,29 @@ +import styled from '@emotion/styled'; +import { motion } from 'framer-motion'; + +import { FloatingIconButton } from '@/ui/button/components/FloatingIconButton'; +import { IconPencil } from '@/ui/icon'; + +const StyledEditButtonContainer = styled(motion.div)` + position: absolute; + right: 5px; +`; + +type EditableCellEditButtonProps = { + onClick?: () => void; +}; + +export function EditableCellEditButton({ + onClick, +}: EditableCellEditButtonProps) { + return ( + + + + ); +}