From 21afc912af38481d3d8ced61920b7f9b8422059a Mon Sep 17 00:00:00 2001 From: Vlad Furman Date: Wed, 7 May 2025 11:56:09 +0300 Subject: [PATCH 1/3] fix: trying to fix add Reactions popup in Safari 18.3 --- src/components/Reactions/Reaction.tsx | 10 ++-- src/components/Reactions/Reactions.tsx | 25 ++++++--- .../__stories__/Reactions.stories.tsx | 52 +++++++++++++------ src/components/Reactions/context.ts | 2 +- src/components/Reactions/hooks.ts | 21 ++++---- 5 files changed, 71 insertions(+), 39 deletions(-) diff --git a/src/components/Reactions/Reaction.tsx b/src/components/Reactions/Reaction.tsx index 9fb5f503..ce5970dd 100644 --- a/src/components/Reactions/Reaction.tsx +++ b/src/components/Reactions/Reaction.tsx @@ -49,18 +49,18 @@ export function Reaction(props: ReactionInnerProps) { const onClickCallback = React.useCallback(() => onClick?.(value), [onClick, value]); - const buttonRef = React.useRef(null); - const {onMouseEnter, onMouseLeave} = useReactionsPopup(props.reaction, buttonRef); + const [buttonElement, setButtonElement] = React.useState(null); + const {onMouseEnter, onMouseLeave} = useReactionsPopup(props.reaction, buttonElement); const {openedTooltip: currentHoveredReaction} = useReactionsContext(); const button = ( ); +} + +export function PopupWithLink() { + return usePopup('Просто кнопка', ссылка); +} + +function usePopup(label: string, paletteContent: React.ReactNode) { + const [addReactionsElement, setAddReactionsElement] = React.useState( + null, + ); + + const [palettePopupOpened, setPalettePopupOpened] = React.useState(false); + + const onOpenPalettePopup = React.useCallback(() => setPalettePopupOpened(true), []); + const onClosePalettePopup = React.useCallback(() => setPalettePopupOpened(false), []); + const onTogglePalettePopup = React.useCallback( + () => (palettePopupOpened ? onClosePalettePopup() : onOpenPalettePopup()), + [onClosePalettePopup, onOpenPalettePopup, palettePopupOpened], + ); + + const onOpenedChanged = React.useCallback( + (opened: boolean) => { + if (!opened) { + onClosePalettePopup(); + } + }, + [onClosePalettePopup], + ); + + const addReactionButton = ( + + ); + + const addReactionPopup = ( + + {paletteContent} + + ); + + return ( + + {addReactionButton} + {addReactionPopup} + + ); +} diff --git a/src/components/Reactions/Reactions.tsx b/src/components/Reactions/Reactions.tsx index de21b5c3..01b4e177 100644 --- a/src/components/Reactions/Reactions.tsx +++ b/src/components/Reactions/Reactions.tsx @@ -52,6 +52,7 @@ export interface ReactionsProps extends Pick, QAProps, DOM * @default 'end' */ addButtonPlacement?: 'start' | 'end'; + /** * If present, when a user hovers over the reaction, a popover appears with renderTooltip(state) content. * Can be used to display users who used this reaction. diff --git a/src/components/Reactions/__stories__/Reactions.stories.tsx b/src/components/Reactions/__stories__/Reactions.stories.tsx index 83130977..f355557d 100644 --- a/src/components/Reactions/__stories__/Reactions.stories.tsx +++ b/src/components/Reactions/__stories__/Reactions.stories.tsx @@ -1,6 +1,7 @@ import {Flex, Text} from '@gravity-ui/uikit'; import {Meta, StoryFn} from '@storybook/react'; +import {PopupWithButton, PopupWithLink, PopupWithPalette} from '../DELETE_ME_PLEASE'; import {Reactions} from '../Reactions'; import {useMockReactions} from '../__tests__/mock/mockHooks'; @@ -22,6 +23,9 @@ export const Default: StoryFn = () => {
+ + + From 23b60f518860e89cfafde38c9dd9443d824fed39 Mon Sep 17 00:00:00 2001 From: Vlad Furman Date: Thu, 22 May 2025 13:16:02 +0300 Subject: [PATCH 3/3] fix: only button remains --- .../Reactions/__stories__/Reactions.stories.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/components/Reactions/__stories__/Reactions.stories.tsx b/src/components/Reactions/__stories__/Reactions.stories.tsx index f355557d..f8508eaa 100644 --- a/src/components/Reactions/__stories__/Reactions.stories.tsx +++ b/src/components/Reactions/__stories__/Reactions.stories.tsx @@ -1,7 +1,7 @@ import {Flex, Text} from '@gravity-ui/uikit'; import {Meta, StoryFn} from '@storybook/react'; -import {PopupWithButton, PopupWithLink, PopupWithPalette} from '../DELETE_ME_PLEASE'; +import {PopupWithButton} from '../DELETE_ME_PLEASE'; import {Reactions} from '../Reactions'; import {useMockReactions} from '../__tests__/mock/mockHooks'; @@ -23,10 +23,10 @@ export const Default: StoryFn = () => {
- + {/* */} - - + {/* */} + {/* */} );