Commit bf74f517 authored by tom goriunov's avatar tom goriunov Committed by GitHub

UX: add tooltip (setting/chains) (#2890)

Fixes #2877
parent 9e0d2a7b
import { Flex } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
import { IconButton } from 'toolkit/chakra/icon-button'; import { IconButton } from 'toolkit/chakra/icon-button';
import { PopoverRoot, PopoverTrigger } from 'toolkit/chakra/popover'; import { PopoverRoot, PopoverTrigger } from 'toolkit/chakra/popover';
import { Tooltip } from 'toolkit/chakra/tooltip';
import { useDisclosure } from 'toolkit/hooks/useDisclosure';
import IconSvg from 'ui/shared/IconSvg'; import IconSvg from 'ui/shared/IconSvg';
import NetworkMenuContentDesktop from 'ui/snippets/networkMenu/NetworkMenuContentDesktop'; import NetworkMenuContentDesktop from 'ui/snippets/networkMenu/NetworkMenuContentDesktop';
import useNetworkMenu from 'ui/snippets/networkMenu/useNetworkMenu'; import useNetworkMenu from 'ui/snippets/networkMenu/useNetworkMenu';
const NetworkMenu = () => { const NetworkMenu = () => {
const menu = useNetworkMenu(); const menu = useNetworkMenu();
const tooltip = useDisclosure();
const handlePopoverOpenChange = React.useCallback(({ open }: { open: boolean }) => {
open && tooltip.onClose();
menu.onOpenChange({ open });
}, [ menu, tooltip ]);
const handleTooltipOpenChange = React.useCallback(({ open }: { open: boolean }) => {
if (!menu.open) {
tooltip.onOpenChange({ open });
}
}, [ menu, tooltip ]);
return ( return (
<PopoverRoot <PopoverRoot
positioning={{ placement: 'bottom-start', offset: { mainAxis: 6 } }} positioning={{ placement: 'bottom-start', offset: { mainAxis: 6 } }}
lazyMount lazyMount
open={ menu.open } open={ menu.open }
onOpenChange={ menu.onOpenChange } onOpenChange={ handlePopoverOpenChange }
> >
<Tooltip content="Chains list" disableOnMobile open={ tooltip.open } onOpenChange={ handleTooltipOpenChange }>
<Flex alignItems="center">
<PopoverTrigger> <PopoverTrigger>
<IconButton <IconButton
variant="link" variant="link"
...@@ -28,6 +45,8 @@ const NetworkMenu = () => { ...@@ -28,6 +45,8 @@ const NetworkMenu = () => {
<IconSvg name="networks" boxSize="full"/> <IconSvg name="networks" boxSize="full"/>
</IconButton> </IconButton>
</PopoverTrigger> </PopoverTrigger>
</Flex>
</Tooltip>
<NetworkMenuContentDesktop items={ menu.data } tabs={ menu.availableTabs }/> <NetworkMenuContentDesktop items={ menu.data } tabs={ menu.availableTabs }/>
</PopoverRoot> </PopoverRoot>
); );
......
import { Box } from '@chakra-ui/react'; import { Box, Flex } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
import { IconButton } from 'toolkit/chakra/icon-button'; import { IconButton } from 'toolkit/chakra/icon-button';
import { PopoverBody, PopoverContent, PopoverRoot, PopoverTrigger } from 'toolkit/chakra/popover'; import { PopoverBody, PopoverContent, PopoverRoot, PopoverTrigger } from 'toolkit/chakra/popover';
import { Tooltip } from 'toolkit/chakra/tooltip';
import { useDisclosure } from 'toolkit/hooks/useDisclosure'; import { useDisclosure } from 'toolkit/hooks/useDisclosure';
import IconSvg from 'ui/shared/IconSvg'; import IconSvg from 'ui/shared/IconSvg';
...@@ -12,16 +13,30 @@ import SettingsIdentIcon from './SettingsIdentIcon'; ...@@ -12,16 +13,30 @@ import SettingsIdentIcon from './SettingsIdentIcon';
import SettingsScamTokens from './SettingsScamTokens'; import SettingsScamTokens from './SettingsScamTokens';
const Settings = () => { const Settings = () => {
const { open, onOpenChange, onClose } = useDisclosure(); const popover = useDisclosure();
const tooltip = useDisclosure();
const handlePopoverOpenChange = React.useCallback(({ open }: { open: boolean }) => {
open && tooltip.onClose();
popover.onOpenChange({ open });
}, [ popover, tooltip ]);
const handleTooltipOpenChange = React.useCallback(({ open }: { open: boolean }) => {
if (!popover.open) {
tooltip.onOpenChange({ open });
}
}, [ popover, tooltip ]);
return ( return (
<PopoverRoot <PopoverRoot
positioning={{ placement: 'bottom-start' }} positioning={{ placement: 'bottom-start' }}
open={ open } open={ popover.open }
onOpenChange={ onOpenChange } onOpenChange={ handlePopoverOpenChange }
// should be false to enable auto-switch to default color theme // should be false to enable auto-switch to default color theme
lazyMount={ false } lazyMount={ false }
> >
<Tooltip content="Website settings" disableOnMobile open={ tooltip.open } onOpenChange={ handleTooltipOpenChange }>
<Flex alignItems="center">
<PopoverTrigger> <PopoverTrigger>
<IconButton <IconButton
variant="link" variant="link"
...@@ -32,9 +47,11 @@ const Settings = () => { ...@@ -32,9 +47,11 @@ const Settings = () => {
<IconSvg name="gear_slim"/> <IconSvg name="gear_slim"/>
</IconButton> </IconButton>
</PopoverTrigger> </PopoverTrigger>
</Flex>
</Tooltip>
<PopoverContent overflowY="hidden" w="auto" fontSize="sm"> <PopoverContent overflowY="hidden" w="auto" fontSize="sm">
<PopoverBody> <PopoverBody>
<SettingsColorTheme onSelect={ onClose }/> <SettingsColorTheme onSelect={ popover.onClose }/>
<Box borderColor="border.divider" borderTopWidth="1px" my={ 3 }/> <Box borderColor="border.divider" borderTopWidth="1px" my={ 3 }/>
<SettingsIdentIcon/> <SettingsIdentIcon/>
<SettingsAddressFormat/> <SettingsAddressFormat/>
......
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