Commit 591c0ead authored by isstuev's avatar isstuev

fix types

parent 3ee03ae6
...@@ -42,6 +42,13 @@ interface ReturnType { ...@@ -42,6 +42,13 @@ interface ReturnType {
profileItem: NavItem; profileItem: NavItem;
} }
export function isGroupItem(item: NavItem | NavGroupItem): item is NavGroupItem {
if ((item as NavGroupItem).subItems) {
return true;
}
return false;
}
export default function useNavItems(): ReturnType { export default function useNavItems(): ReturnType {
const isMarketplaceFilled = appConfig.marketplaceAppList.length > 0; const isMarketplaceFilled = appConfig.marketplaceAppList.length > 0;
...@@ -49,7 +56,7 @@ export default function useNavItems(): ReturnType { ...@@ -49,7 +56,7 @@ export default function useNavItems(): ReturnType {
const pathname = router.pathname; const pathname = router.pathname;
return React.useMemo(() => { return React.useMemo(() => {
const blockchainNavItems = [ const blockchainNavItems: Array<NavItem> = [
{ text: 'Top accounts', nextRoute: { pathname: '/accounts' as const }, icon: topAccountsIcon, isActive: pathname === '/accounts', isNewUi: true }, { text: 'Top accounts', nextRoute: { pathname: '/accounts' as const }, icon: topAccountsIcon, isActive: pathname === '/accounts', isNewUi: true },
{ text: 'Blocks', nextRoute: { pathname: '/blocks' as const }, icon: blocksIcon, isActive: pathname.startsWith('/block'), isNewUi: true }, { text: 'Blocks', nextRoute: { pathname: '/blocks' as const }, icon: blocksIcon, isActive: pathname.startsWith('/block'), isNewUi: true },
{ text: 'Transactions', nextRoute: { pathname: '/txs' as const }, icon: transactionsIcon, isActive: pathname.startsWith('/tx'), isNewUi: true }, { text: 'Transactions', nextRoute: { pathname: '/txs' as const }, icon: transactionsIcon, isActive: pathname.startsWith('/tx'), isNewUi: true },
......
...@@ -13,25 +13,14 @@ import { ...@@ -13,25 +13,14 @@ import {
import React from 'react'; import React from 'react';
import chevronIcon from 'icons/arrows/east-mini.svg'; import chevronIcon from 'icons/arrows/east-mini.svg';
import type { NavGroupItem } from 'lib/hooks/useNavItems';
import getDefaultTransitionProps from 'theme/utils/getDefaultTransitionProps'; import getDefaultTransitionProps from 'theme/utils/getDefaultTransitionProps';
import NavLink from './NavLink'; import NavLink from './NavLink';
import useColors from './useColors'; import useColors from './useColors';
type NavigationLink = { type Props = NavGroupItem & {
text: string;
url: string;
icon: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
isNewUi: boolean;
isActive: boolean;
}
interface Props {
isCollapsed?: boolean; isCollapsed?: boolean;
isActive?: boolean;
subItems: Array<NavigationLink>;
text: string;
icon: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
} }
const NavLinkGroupDesktop = ({ text, subItems, icon, isCollapsed, isActive }: Props) => { const NavLinkGroupDesktop = ({ text, subItems, icon, isCollapsed, isActive }: Props) => {
......
...@@ -8,24 +8,13 @@ import { ...@@ -8,24 +8,13 @@ import {
import React from 'react'; import React from 'react';
import chevronIcon from 'icons/arrows/east-mini.svg'; import chevronIcon from 'icons/arrows/east-mini.svg';
import type { NavGroupItem } from 'lib/hooks/useNavItems';
import getDefaultTransitionProps from 'theme/utils/getDefaultTransitionProps'; import getDefaultTransitionProps from 'theme/utils/getDefaultTransitionProps';
import useColors from './useColors'; import useColors from './useColors';
type NavigationLink = { type Props = NavGroupItem & {
text: string;
url: string;
icon: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
isNewUi: boolean;
isActive: boolean;
}
interface Props {
isCollapsed?: boolean; isCollapsed?: boolean;
isActive?: boolean;
subItems: Array<NavigationLink>;
text: string;
icon: React.FunctionComponent<React.SVGAttributes<SVGElement>>;
onClick: () => void; onClick: () => void;
} }
......
...@@ -5,7 +5,7 @@ import appConfig from 'configs/app/config'; ...@@ -5,7 +5,7 @@ import appConfig from 'configs/app/config';
import chevronIcon from 'icons/arrows/east-mini.svg'; import chevronIcon from 'icons/arrows/east-mini.svg';
import { useAppContext } from 'lib/appContext'; import { useAppContext } from 'lib/appContext';
import * as cookies from 'lib/cookies'; import * as cookies from 'lib/cookies';
import useNavItems from 'lib/hooks/useNavItems'; import useNavItems, { isGroupItem } from 'lib/hooks/useNavItems';
import getDefaultTransitionProps from 'theme/utils/getDefaultTransitionProps'; import getDefaultTransitionProps from 'theme/utils/getDefaultTransitionProps';
import NetworkLogo from 'ui/snippets/networkMenu/NetworkLogo'; import NetworkLogo from 'ui/snippets/networkMenu/NetworkLogo';
import NetworkMenu from 'ui/snippets/networkMenu/NetworkMenu'; import NetworkMenu from 'ui/snippets/networkMenu/NetworkMenu';
...@@ -80,7 +80,7 @@ const NavigationDesktop = () => { ...@@ -80,7 +80,7 @@ const NavigationDesktop = () => {
<Box as="nav" mt={ 8 }> <Box as="nav" mt={ 8 }>
<VStack as="ul" spacing="1" alignItems="flex-start"> <VStack as="ul" spacing="1" alignItems="flex-start">
{ mainNavItems.map((item) => { { mainNavItems.map((item) => {
if (item.subItems) { if (isGroupItem(item)) {
return <NavLinkGroupDesktop key={ item.text } { ...item } isCollapsed={ isCollapsed }/>; return <NavLinkGroupDesktop key={ item.text } { ...item } isCollapsed={ isCollapsed }/>;
} else { } else {
return <NavLink key={ item.text } { ...item } isCollapsed={ isCollapsed }/>; return <NavLink key={ item.text } { ...item } isCollapsed={ isCollapsed }/>;
......
...@@ -5,7 +5,7 @@ import React, { useCallback } from 'react'; ...@@ -5,7 +5,7 @@ import React, { useCallback } from 'react';
import appConfig from 'configs/app/config'; import appConfig from 'configs/app/config';
import chevronIcon from 'icons/arrows/east-mini.svg'; import chevronIcon from 'icons/arrows/east-mini.svg';
import * as cookies from 'lib/cookies'; import * as cookies from 'lib/cookies';
import useNavItems from 'lib/hooks/useNavItems'; import useNavItems, { isGroupItem } from 'lib/hooks/useNavItems';
import NavFooter from 'ui/snippets/navigation/NavFooter'; import NavFooter from 'ui/snippets/navigation/NavFooter';
import NavLink from 'ui/snippets/navigation/NavLink'; import NavLink from 'ui/snippets/navigation/NavLink';
...@@ -35,6 +35,8 @@ const NavigationMobile = () => { ...@@ -35,6 +35,8 @@ const NavigationMobile = () => {
const iconColor = useColorModeValue('blue.600', 'blue.300'); const iconColor = useColorModeValue('blue.600', 'blue.300');
const openedItem = mainNavItems[openedGroupIndex];
return ( return (
<> <>
<Box position="relative"> <Box position="relative">
...@@ -50,7 +52,7 @@ const NavigationMobile = () => { ...@@ -50,7 +52,7 @@ const NavigationMobile = () => {
alignItems="flex-start" alignItems="flex-start"
> >
{ mainNavItems.map((item, index) => { { mainNavItems.map((item, index) => {
if (item.subItems) { if (isGroupItem(item)) {
return <NavLinkGroupMobile key={ item.text } { ...item } onClick={ onGroupItemOpen(index) }/>; return <NavLinkGroupMobile key={ item.text } { ...item } onClick={ onGroupItemOpen(index) }/>;
} else { } else {
return <NavLink key={ item.text } { ...item }/>; return <NavLink key={ item.text } { ...item }/>;
...@@ -88,7 +90,7 @@ const NavigationMobile = () => { ...@@ -88,7 +90,7 @@ const NavigationMobile = () => {
<Icon as={ chevronIcon } boxSize={ 6 } mr={ 2 } color={ iconColor }/> <Icon as={ chevronIcon } boxSize={ 6 } mr={ 2 } color={ iconColor }/>
<Text variant="secondary" fontSize="sm">{ mainNavItems[openedGroupIndex].text }</Text> <Text variant="secondary" fontSize="sm">{ mainNavItems[openedGroupIndex].text }</Text>
</Flex> </Flex>
{ mainNavItems[openedGroupIndex].subItems?.map((item) => <NavLink key={ item.text } { ...item }/>) } { isGroupItem(openedItem) && openedItem.subItems?.map((item) => <NavLink key={ item.text } { ...item }/>) }
</VStack> </VStack>
</Box> </Box>
) } ) }
......
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