Commit 5c85b6c7 authored by Max Alekseenko's avatar Max Alekseenko

fix popover bug

parent c524a3b9
import { Text, PopoverTrigger, PopoverBody, PopoverContent, useDisclosure, Skeleton } from '@chakra-ui/react'; import { Text, PopoverTrigger, PopoverBody, PopoverContent, useDisclosure, Skeleton, useOutsideClick, Box } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
import Popover from 'ui/shared/chakra/Popover'; import Popover from 'ui/shared/chakra/Popover';
...@@ -24,6 +24,9 @@ const Rating = ({ ...@@ -24,6 +24,9 @@ const Rating = ({
isSending, isLoading, fullView, canRate, isSending, isLoading, fullView, canRate,
}: Props) => { }: Props) => {
const { isOpen, onToggle, onClose } = useDisclosure(); const { isOpen, onToggle, onClose } = useDisclosure();
// have to implement this solution because popover loses focus on button click inside it (issue: https://github.com/chakra-ui/chakra-ui/issues/7359)
const popoverRef = React.useRef(null);
useOutsideClick({ ref: popoverRef, handler: onClose });
return ( return (
<Skeleton <Skeleton
...@@ -38,28 +41,30 @@ const Rating = ({ ...@@ -38,28 +41,30 @@ const Rating = ({
<Text fontSize="md" ml={ 1 }>{ rating }</Text> <Text fontSize="md" ml={ 1 }>{ rating }</Text>
</> </>
) } ) }
<Popover isOpen={ isOpen } onClose={ onClose } placement="bottom" isLazy> <Box ref={ popoverRef }>
<PopoverTrigger> <Popover isOpen={ isOpen } placement="bottom" isLazy>
<TriggerButton <PopoverTrigger>
rating={ rating } <TriggerButton
fullView={ fullView } rating={ rating }
isActive={ isOpen } fullView={ fullView }
onClick={ onToggle } isActive={ isOpen }
canRate={ canRate } onClick={ onToggle }
/> canRate={ canRate }
</PopoverTrigger>
<PopoverContent w="274px" mx={ 3 }>
<PopoverBody p={ 4 }>
<Content
appId={ appId }
recordId={ recordId }
userRating={ userRating }
rate={ rate }
isSending={ isSending }
/> />
</PopoverBody> </PopoverTrigger>
</PopoverContent> <PopoverContent w="274px" mx={ 3 }>
</Popover> <PopoverBody p={ 4 }>
<Content
appId={ appId }
recordId={ recordId }
userRating={ userRating }
rate={ rate }
isSending={ isSending }
/>
</PopoverBody>
</PopoverContent>
</Popover>
</Box>
</Skeleton> </Skeleton>
); );
}; };
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment