Commit 4839af83 authored by Varun Guleria's avatar Varun Guleria Committed by GitHub

Dapps modals (#2490)

* feat: basic_modal

* feat: dapp_modal_complete

* feat: navigating_apps+popup_open

* feat: removing_not_needed_changes

* feat: removing_not_used_changes_2

* feat: routing_updates+suggestions

* feat: test_update

* feat: router_import_fix

---------
Co-authored-by: default avatarIgor Stuev <108066576+isstuev@users.noreply.github.com>
parent a9c7b726
...@@ -111,10 +111,11 @@ export default function useRatings() { ...@@ -111,10 +111,11 @@ export default function useRatings() {
}, [ address, toast ]); }, [ address, toast ]);
useEffect(() => { useEffect(() => {
const { isPlaceholderData, data } = addressCountersQuery; const isPlaceholderData = addressCountersQuery?.isPlaceholderData;
const canRate = address && !isPlaceholderData && Number(data?.transactions_count) >= MIN_TRANSACTION_COUNT; const transactionsCount = addressCountersQuery?.data?.transactions_count;
const canRate = address && !isPlaceholderData && Number(transactionsCount || 0) >= MIN_TRANSACTION_COUNT;
setCanRate(canRate); setCanRate(canRate);
}, [ address, addressCountersQuery ]); }, [ address, addressCountersQuery?.isPlaceholderData, addressCountersQuery?.data?.transactions_count ]);
const rateApp = useCallback(async( const rateApp = useCallback(async(
appId: string, appId: string,
......
...@@ -7,6 +7,7 @@ import { MarketplaceCategory } from 'types/client/marketplace'; ...@@ -7,6 +7,7 @@ import { MarketplaceCategory } from 'types/client/marketplace';
import useDebounce from 'lib/hooks/useDebounce'; import useDebounce from 'lib/hooks/useDebounce';
import * as mixpanel from 'lib/mixpanel/index'; import * as mixpanel from 'lib/mixpanel/index';
import getQueryParamString from 'lib/router/getQueryParamString'; import getQueryParamString from 'lib/router/getQueryParamString';
import removeQueryParam from 'lib/router/removeQueryParam';
import useRatings from './Rating/useRatings'; import useRatings from './Rating/useRatings';
import useMarketplaceApps from './useMarketplaceApps'; import useMarketplaceApps from './useMarketplaceApps';
...@@ -106,6 +107,14 @@ export default function useMarketplace() { ...@@ -106,6 +107,14 @@ export default function useMarketplace() {
// run only when data is loaded // run only when data is loaded
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [ isPlaceholderData ]); }, [ isPlaceholderData ]);
React.useEffect(() => {
const selectedAppId = getQueryParamString(router.query.selectedAppId);
if (selectedAppId) {
setSelectedAppId(selectedAppId);
setIsAppInfoModalOpen(true);
removeQueryParam(router, 'selectedAppId');
}
}, [ router.query.selectedAppId, router ]);
React.useEffect(() => { React.useEffect(() => {
if (isPlaceholderData) { if (isPlaceholderData) {
......
...@@ -147,7 +147,14 @@ const SearchResultListItem = ({ data, searchTerm, isLoading, addressFormat }: Pr ...@@ -147,7 +147,14 @@ const SearchResultListItem = ({ data, searchTerm, isLoading, addressFormat }: Pr
/> />
{ data.app.external ? ( { data.app.external ? (
<LinkExternal <LinkExternal
href={ data.app.url } href={
route({
pathname: '/apps',
query: {
selectedAppId: data.app.id,
},
})
}
fontWeight={ 700 } fontWeight={ 700 }
wordBreak="break-all" wordBreak="break-all"
isLoading={ isLoading } isLoading={ isLoading }
......
...@@ -211,7 +211,14 @@ const SearchResultTableItem = ({ data, searchTerm, isLoading, addressFormat }: P ...@@ -211,7 +211,14 @@ const SearchResultTableItem = ({ data, searchTerm, isLoading, addressFormat }: P
/> />
{ data.app.external ? ( { data.app.external ? (
<LinkExternal <LinkExternal
href={ data.app.url } href={
route({
pathname: '/apps',
query: {
selectedAppId: data.app.id,
},
})
}
fontWeight={ 700 } fontWeight={ 700 }
wordBreak="break-all" wordBreak="break-all"
isLoading={ isLoading } isLoading={ isLoading }
......
...@@ -209,8 +209,12 @@ test.describe('with apps', () => { ...@@ -209,8 +209,12 @@ test.describe('with apps', () => {
await mockConfigResponse('NEXT_PUBLIC_MARKETPLACE_CONFIG_URL', MARKETPLACE_CONFIG_URL, appsMock); await mockConfigResponse('NEXT_PUBLIC_MARKETPLACE_CONFIG_URL', MARKETPLACE_CONFIG_URL, appsMock);
await mockAssetResponse(appsMock[0].logo, './playwright/mocks/image_s.jpg'); await mockAssetResponse(appsMock[0].logo, './playwright/mocks/image_s.jpg');
await mockAssetResponse(appsMock[1].logo, './playwright/mocks/image_s.jpg'); await mockAssetResponse(appsMock[1].logo, './playwright/mocks/image_s.jpg');
const hooksConfig = {
await render(<SearchBar/>); router: {
query: { q: 'o' },
},
};
await render(<SearchBar/>, { hooksConfig });
await page.getByPlaceholder(/search/i).fill('o'); await page.getByPlaceholder(/search/i).fill('o');
await page.waitForResponse(apiUrl); await page.waitForResponse(apiUrl);
......
import { Image, Flex, Text, useColorModeValue } from '@chakra-ui/react'; import { Image, Flex, Text, useColorModeValue } from '@chakra-ui/react';
import { useRouter } from 'next/router';
import React from 'react'; import React from 'react';
import type { MarketplaceAppOverview } from 'types/client/marketplace'; import type { MarketplaceAppOverview } from 'types/client/marketplace';
...@@ -8,7 +9,6 @@ import IconSvg from 'ui/shared/IconSvg'; ...@@ -8,7 +9,6 @@ import IconSvg from 'ui/shared/IconSvg';
import NextLink from 'ui/shared/NextLink'; import NextLink from 'ui/shared/NextLink';
import SearchBarSuggestItemLink from './SearchBarSuggestItemLink'; import SearchBarSuggestItemLink from './SearchBarSuggestItemLink';
interface Props { interface Props {
data: MarketplaceAppOverview; data: MarketplaceAppOverview;
isMobile: boolean | undefined; isMobile: boolean | undefined;
...@@ -17,7 +17,7 @@ interface Props { ...@@ -17,7 +17,7 @@ interface Props {
} }
const SearchBarSuggestApp = ({ data, isMobile, searchTerm, onClick }: Props) => { const SearchBarSuggestApp = ({ data, isMobile, searchTerm, onClick }: Props) => {
const router = useRouter();
const logo = ( const logo = (
<Image <Image
borderRadius="base" borderRadius="base"
...@@ -96,9 +96,22 @@ const SearchBarSuggestApp = ({ data, isMobile, searchTerm, onClick }: Props) => ...@@ -96,9 +96,22 @@ const SearchBarSuggestApp = ({ data, isMobile, searchTerm, onClick }: Props) =>
if (data.external) { if (data.external) {
return ( return (
<SearchBarSuggestItemLink onClick={ onClick } href={ data.url } target="_blank"> <NextLink
href={{
pathname: '/apps',
query: {
selectedAppId: data.id,
},
}}
passHref
shallow={ router.pathname === '/apps' }
legacyBehavior
>
<SearchBarSuggestItemLink onClick={ onClick }>
{ content } { content }
</SearchBarSuggestItemLink> </SearchBarSuggestItemLink>
</NextLink>
); );
} }
......
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