Commit fd974071 authored by Max Alekseenko's avatar Max Alekseenko

fix initial loading with existing search query

parent c4ae053b
...@@ -109,6 +109,10 @@ export default function useMarketplace() { ...@@ -109,6 +109,10 @@ export default function useMarketplace() {
}, [ isPlaceholderData ]); }, [ isPlaceholderData ]);
React.useEffect(() => { React.useEffect(() => {
if (isPlaceholderData) {
return;
}
const query = _pickBy({ const query = _pickBy({
category: selectedCategoryId === MarketplaceCategory.ALL ? undefined : selectedCategoryId, category: selectedCategoryId === MarketplaceCategory.ALL ? undefined : selectedCategoryId,
filter: debouncedFilterQuery, filter: debouncedFilterQuery,
...@@ -126,7 +130,7 @@ export default function useMarketplace() { ...@@ -126,7 +130,7 @@ export default function useMarketplace() {
// omit router in the deps because router.push() somehow modifies it // omit router in the deps because router.push() somehow modifies it
// and we get infinite re-renders then // and we get infinite re-renders then
// eslint-disable-next-line react-hooks/exhaustive-deps // eslint-disable-next-line react-hooks/exhaustive-deps
}, [ debouncedFilterQuery, selectedCategoryId ]); }, [ debouncedFilterQuery, selectedCategoryId, isPlaceholderData ]);
return React.useMemo(() => ({ return React.useMemo(() => ({
selectedCategoryId, selectedCategoryId,
......
...@@ -62,6 +62,7 @@ export default function useMarketplaceApps( ...@@ -62,6 +62,7 @@ export default function useMarketplaceApps(
const { data: securityReports, isPlaceholderData: isSecurityReportsPlaceholderData } = useSecurityReports(); const { data: securityReports, isPlaceholderData: isSecurityReportsPlaceholderData } = useSecurityReports();
const [ sorting, setSorting ] = React.useState<SortValue>();
// Set the value only 1 time to avoid unnecessary useQuery calls and re-rendering of all applications // Set the value only 1 time to avoid unnecessary useQuery calls and re-rendering of all applications
const [ snapshotFavoriteApps, setSnapshotFavoriteApps ] = React.useState<Array<string> | undefined>(); const [ snapshotFavoriteApps, setSnapshotFavoriteApps ] = React.useState<Array<string> | undefined>();
const isInitialSetup = React.useRef(true); const isInitialSetup = React.useRef(true);
...@@ -73,7 +74,9 @@ export default function useMarketplaceApps( ...@@ -73,7 +74,9 @@ export default function useMarketplaceApps(
} }
}, [ isFavoriteAppsLoaded, favoriteApps ]); }, [ isFavoriteAppsLoaded, favoriteApps ]);
const { isPlaceholderData, isError, error, data } = useQuery<unknown, ResourceError<unknown>, Array<MarketplaceAppWithSecurityReport>>({ const {
isPlaceholderData: isAppsPlaceholderData, isError, error, data,
} = useQuery<unknown, ResourceError<unknown>, Array<MarketplaceAppWithSecurityReport>>({
queryKey: [ 'marketplace-dapps', snapshotFavoriteApps ], queryKey: [ 'marketplace-dapps', snapshotFavoriteApps ],
queryFn: async() => { queryFn: async() => {
if (!feature.isEnabled) { if (!feature.isEnabled) {
...@@ -90,7 +93,7 @@ export default function useMarketplaceApps( ...@@ -90,7 +93,7 @@ export default function useMarketplaceApps(
enabled: feature.isEnabled && Boolean(snapshotFavoriteApps), enabled: feature.isEnabled && Boolean(snapshotFavoriteApps),
}); });
const [ sorting, setSorting ] = React.useState<SortValue>(); const isPlaceholderData = isAppsPlaceholderData || isSecurityReportsPlaceholderData;
const appsWithSecurityReportsAndRating = React.useMemo(() => const appsWithSecurityReportsAndRating = React.useMemo(() =>
data?.map((app) => ({ data?.map((app) => ({
...@@ -101,6 +104,10 @@ export default function useMarketplaceApps( ...@@ -101,6 +104,10 @@ export default function useMarketplaceApps(
[ data, securityReports, ratings ]); [ data, securityReports, ratings ]);
const displayedApps = React.useMemo(() => { const displayedApps = React.useMemo(() => {
if (isPlaceholderData) {
return appsWithSecurityReportsAndRating || [];
}
return appsWithSecurityReportsAndRating return appsWithSecurityReportsAndRating
?.filter(app => isAppNameMatches(filter, app) && isAppCategoryMatches(selectedCategoryId, app, favoriteApps)) ?.filter(app => isAppNameMatches(filter, app) && isAppCategoryMatches(selectedCategoryId, app, favoriteApps))
.sort((a, b) => { .sort((a, b) => {
...@@ -112,14 +119,14 @@ export default function useMarketplaceApps( ...@@ -112,14 +119,14 @@ export default function useMarketplaceApps(
} }
return 0; return 0;
}) || []; }) || [];
}, [ selectedCategoryId, appsWithSecurityReportsAndRating, filter, favoriteApps, sorting ]); }, [ selectedCategoryId, appsWithSecurityReportsAndRating, filter, favoriteApps, sorting, isPlaceholderData ]);
return React.useMemo(() => ({ return React.useMemo(() => ({
data, data,
displayedApps, displayedApps,
error, error,
isError, isError,
isPlaceholderData: isPlaceholderData || isSecurityReportsPlaceholderData, isPlaceholderData,
setSorting, setSorting,
}), [ }), [
data, data,
...@@ -127,7 +134,6 @@ export default function useMarketplaceApps( ...@@ -127,7 +134,6 @@ export default function useMarketplaceApps(
error, error,
isError, isError,
isPlaceholderData, isPlaceholderData,
isSecurityReportsPlaceholderData,
setSorting, setSorting,
]); ]);
} }
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