diff --git a/packages/components/CHANGELOG.md b/packages/components/CHANGELOG.md index 66d8ebdc..021d747b 100644 --- a/packages/components/CHANGELOG.md +++ b/packages/components/CHANGELOG.md @@ -1,5 +1,11 @@ # @baseapp-frontend/components +## 0.0.22 + +### Patch Changes + +- Fixed overlay not closing issue by forcing hover state to 'false' when exiting the delete dialog + ## 0.0.21 ### Patch Changes diff --git a/packages/components/modules/__shared__/ActionsOverlay/__storybook__/stories.tsx b/packages/components/modules/__shared__/ActionsOverlay/__storybook__/stories.tsx index d4179b6d..aaef39d7 100644 --- a/packages/components/modules/__shared__/ActionsOverlay/__storybook__/stories.tsx +++ b/packages/components/modules/__shared__/ActionsOverlay/__storybook__/stories.tsx @@ -23,7 +23,7 @@ export const DefaultActionsOverlay: Story = { offsetRight: 0, offsetTop: 0, ContainerProps: { - sx: { width: '100px' }, + sx: { maxWidth: 'max-content' }, }, actions: [ { diff --git a/packages/components/modules/__shared__/ActionsOverlay/index.tsx b/packages/components/modules/__shared__/ActionsOverlay/index.tsx index f7fae2e4..d8e6ed79 100644 --- a/packages/components/modules/__shared__/ActionsOverlay/index.tsx +++ b/packages/components/modules/__shared__/ActionsOverlay/index.tsx @@ -11,7 +11,7 @@ import { LoadingButton } from '@mui/lab' import { Box, Divider, Typography } from '@mui/material' import { LongPressCallbackReason, useLongPress } from 'use-long-press' -import { ActionOverlayContainer, IconButtonContentContainer } from './styled' +import { ActionOverlayTooltipContainer, IconButtonContentContainer } from './styled' import { ActionOverlayProps, LongPressHandler } from './types' const ActionsOverlay = forwardRef( @@ -67,6 +67,11 @@ const ActionsOverlay = forwardRef( setIsDeleteDialogOpen(true) } + const handleDeleteDialogClose = () => { + setIsDeleteDialogOpen(false) + setIsHoveringItem(false) + } + const deviceHasHover = typeof window !== 'undefined' && window.matchMedia('(hover: hover)').matches @@ -74,6 +79,7 @@ const ActionsOverlay = forwardRef( setIsDeleteDialogOpen(false) handleDeleteItem?.() handleLongPressItemOptionsClose() + setIsHoveringItem(false) } const renderDeleteDialog = () => ( @@ -90,7 +96,7 @@ const ActionsOverlay = forwardRef( Delete } - onClose={() => setIsDeleteDialogOpen(false)} + onClose={handleDeleteDialogClose} open={isDeleteDialogOpen} /> ) @@ -165,7 +171,7 @@ const ActionsOverlay = forwardRef( if (deviceHasHover && isHoveringItem) { return ( - ( ) })} - + ) } return
@@ -211,9 +217,9 @@ const ActionsOverlay = forwardRef( ref={ref} onMouseEnter={() => setIsHoveringItem(true)} onMouseLeave={() => setIsHoveringItem(false)} + position="relative" {...longPressHandlers()} {...ContainerProps} - sx={{ position: 'relative', maxWidth: 'max-content' }} > {renderDeleteDialog()} {renderActionsOverlay()} diff --git a/packages/components/modules/__shared__/ActionsOverlay/styled.tsx b/packages/components/modules/__shared__/ActionsOverlay/styled.tsx index c927d45f..a9bca5de 100644 --- a/packages/components/modules/__shared__/ActionsOverlay/styled.tsx +++ b/packages/components/modules/__shared__/ActionsOverlay/styled.tsx @@ -1,9 +1,9 @@ import { Box } from '@mui/material' import { styled } from '@mui/material/styles' -import { ActionOverlayContainerProps } from './types' +import { ActionOverlayTooltipContainerProps } from './types' -export const ActionOverlayContainer = styled(Box)( +export const ActionOverlayTooltipContainer = styled(Box)( ({ theme, offsetTop = 0, offsetRight = 0 }) => ({ backgroundColor: theme.palette.background.default, border: `1px solid ${theme.palette.divider}`, @@ -16,7 +16,7 @@ export const ActionOverlayContainer = styled(Box)( 'aria-label': 'Action options', right: 12 - offsetRight, top: -12 - offsetTop, - zIndex: theme.zIndex.tooltip, + zIndex: theme.zIndex.drawer, // zIndex.modal is 1300, so using zIndex.drawer (1200) instead of zIndex.tooltip (1500) transition: theme.transitions.create(['opacity', 'visibility'], { duration: theme.transitions.duration.shorter, easing: theme.transitions.easing.easeInOut, diff --git a/packages/components/modules/__shared__/ActionsOverlay/types.ts b/packages/components/modules/__shared__/ActionsOverlay/types.ts index 36e8feb0..941e5471 100644 --- a/packages/components/modules/__shared__/ActionsOverlay/types.ts +++ b/packages/components/modules/__shared__/ActionsOverlay/types.ts @@ -18,10 +18,10 @@ export type LongPressHandler = { shouldOpenItemOptions: boolean } -export interface ActionOverlayProps extends ActionOverlayContainerProps { +export interface ActionOverlayProps extends ActionOverlayTooltipContainerProps { actions: OverlayAction[] title: string - enableDelete?: boolean + enableDelete?: boolean | null isDeletingItem?: boolean handleDeleteItem?: () => void ContainerProps?: Partial @@ -29,7 +29,7 @@ export interface ActionOverlayProps extends ActionOverlayContainerProps { SwipeableDrawerProps?: Partial } -export interface ActionOverlayContainerProps extends BoxProps { +export interface ActionOverlayTooltipContainerProps extends BoxProps { offsetTop?: number offsetRight?: number } diff --git a/packages/components/modules/comments/CommentItem/index.tsx b/packages/components/modules/comments/CommentItem/index.tsx index 7b4f7b69..9ac30e80 100644 --- a/packages/components/modules/comments/CommentItem/index.tsx +++ b/packages/components/modules/comments/CommentItem/index.tsx @@ -32,7 +32,7 @@ const CommentItem: FC = ({ CommentUpdateProps, CommentsRepliesProps, ActionOverlayProps, - enableDelete = true, + enableDelete = false, Timestamp = DefaultTimestamp, CommentUpdate = DefaultCommentUpdate, CommentReplyButton = DefaultCommentReplyButton, @@ -131,7 +131,7 @@ const CommentItem: FC = ({ { }) cy.findByText('This is not a pinned comment anymore.').should('exist') + cy.step('Cannot delete a comment') + cy.findByText('This is a regular comment.').click() + cy.findAllByRole('button', { name: /delete item/i }).should('not.exist') + cy.step('Delete a comment') - cy.findByText('This is another reply').click() + cy.findByText('This is not a pinned comment anymore.').click() cy.findAllByRole('button', { name: /delete item/i }) .last() .click() @@ -154,9 +158,10 @@ describe('Comments', () => { cy.step('Cancel comment deletion') cy.findByRole('button', { name: /cancel/i }).click() cy.findByText('Delete Comment?').should('not.exist') - cy.findByText('This is another reply').should('exist') + cy.findByText('This is not a pinned comment anymore.').should('exist') cy.step('Confirm comment deletion') + cy.findByText('This is not a pinned comment anymore.').click() cy.findAllByRole('button', { name: /delete item/i }) .last() .click() @@ -165,7 +170,7 @@ describe('Comments', () => { .then(() => { resolveMostRecentOperation({ data: commentDeleteMockData }) }) - cy.findByText('This is another reply').should('not.exist') + cy.findByText('This is not a pinned comment anymore.').should('not.exist') }) it('should render more comments when the bottom is reached', () => { diff --git a/packages/components/modules/comments/Comments/__tests__/__mocks__/requests.ts b/packages/components/modules/comments/Comments/__tests__/__mocks__/requests.ts index 9b15137d..2ce41e67 100644 --- a/packages/components/modules/comments/Comments/__tests__/__mocks__/requests.ts +++ b/packages/components/modules/comments/Comments/__tests__/__mocks__/requests.ts @@ -230,7 +230,7 @@ export const commentEditMockData = { export const commentDeleteMockData = { data: { commentDelete: { - deletedId: 'new-reply-3', + deletedId: 'comment-1', target: { __typename: 'Page', id: 'page-id', diff --git a/packages/components/modules/comments/CommentsList/index.tsx b/packages/components/modules/comments/CommentsList/index.tsx index 4fa14761..0d7a46d3 100644 --- a/packages/components/modules/comments/CommentsList/index.tsx +++ b/packages/components/modules/comments/CommentsList/index.tsx @@ -39,6 +39,7 @@ const CommentsList: FC = ({ currentThreadDepth={1} subscriptionsEnabled={subscriptionsEnabled} onReplyClick={onReplyClick} + enableDelete {...CommentItemProps} /> ) diff --git a/packages/components/package.json b/packages/components/package.json index dc505352..11194558 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -1,7 +1,7 @@ { "name": "@baseapp-frontend/components", "description": "BaseApp components modules such as comments, notifications, messages, and more.", - "version": "0.0.21", + "version": "0.0.22", "main": "./index.ts", "types": "dist/index.d.ts", "sideEffects": false,