Skip to content

Commit c1e2cfa

Browse files
committed
fix(web): fix-registries-ordering
1 parent ab76a70 commit c1e2cfa

File tree

4 files changed

+39
-10
lines changed

4 files changed

+39
-10
lines changed

web/src/hooks/queries/useRegistriesByIdsQuery.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { graphql } from "src/graphql";
22
import { useQuery } from "@tanstack/react-query";
33
import { useGraphqlBatcher } from "context/GraphqlBatcher";
4+
import { GetRegistriesByIdsQuery } from "src/graphql/graphql";
45

56
export const registriesByIdsQuery = graphql(`
67
query GetRegistriesByIds($ids: [ID!]!) {
@@ -19,7 +20,7 @@ export const registriesByIdsQuery = graphql(`
1920
export const useRegistriesByIdsQuery = (ids) => {
2021
const { graphqlBatcher } = useGraphqlBatcher();
2122

22-
return useQuery({
23+
return useQuery<GetRegistriesByIdsQuery>({
2324
queryKey: ["GetRegistriesByIds", ids.join(",")],
2425
queryFn: async () =>
2526
await graphqlBatcher.fetch({

web/src/pages/AllLists/RegistriesFetcher.tsx

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { isUndefined } from "utils/index";
1212
import { OrderDirection } from "src/graphql/graphql";
1313
import { useRegistryDetailsQuery } from "hooks/queries/useRegistryDetailsQuery";
1414
import { List_filters } from "consts/filters";
15+
import { sortRegistriesByIds } from "utils/sortRegistriesByIds";
1516

1617
const RegistriesFetcher: React.FC = () => {
1718
const { page, order, filter } = useParams();
@@ -44,18 +45,23 @@ const RegistriesFetcher: React.FC = () => {
4445
const registryIds = useMemo(
4546
() =>
4647
itemsData
47-
? itemsData?.items
48+
? (itemsData?.items
4849
.map((item) => item?.props[0]?.value?.toLowerCase() ?? undefined)
49-
.filter((id) => !isUndefined(id))
50+
.filter((id) => !isUndefined(id)) as string[])
5051
: [],
5152
[itemsData]
5253
);
5354

5455
// get registries by id
5556
const { data: registriesData, isLoading: isRegistriesDataLoading } = useRegistriesByIdsQuery(registryIds);
5657

58+
const sortedRegstries = useMemo(
59+
() => (registriesData?.registries ? sortRegistriesByIds(registryIds, registriesData?.registries) : []),
60+
[registriesData]
61+
);
62+
5763
const combinedListsData = useMemo(() => {
58-
return registriesData?.registries.map((registry) => {
64+
return sortedRegstries.map((registry) => {
5965
const registryAsItem = itemsData?.items.find((item) => item?.props[0]?.value?.toLowerCase() === registry.id);
6066
return {
6167
...registry,
@@ -65,7 +71,7 @@ const RegistriesFetcher: React.FC = () => {
6571
itemId: registryAsItem?.id,
6672
};
6773
});
68-
}, [registriesData, itemsData]);
74+
}, [sortedRegstries, itemsData]);
6975

7076
const totalRegistries = useMemo<number>(() => {
7177
if (!mainCurate || !mainCurate.registry) return 0;

web/src/pages/Home/Highlights/index.tsx

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { useNavigateAndScrollTop } from "hooks/useNavigateAndScrollTop";
1414
import { useItemsQuery } from "queries/useItemsQuery";
1515
import { useRegistriesByIdsQuery } from "queries/useRegistriesByIdsQuery";
1616
import { mapFromSubgraphStatus } from "components/RegistryCard/StatusBanner";
17+
import { sortRegistriesByIds } from "utils/sortRegistriesByIds";
1718

1819
const Container = styled.div`
1920
width: 100%;
@@ -51,21 +52,25 @@ const HighlightedLists = () => {
5152
registry: listOfListsAddresses[DEFAULT_CHAIN],
5253
});
5354

54-
// TODO: Json.parse can throw error
5555
const registryIds = useMemo(
5656
() =>
5757
itemsData
58-
? itemsData?.items
58+
? (itemsData?.items
5959
.map((item) => item?.props[0]?.value?.toLowerCase() ?? undefined)
60-
.filter((id) => !isUndefined(id))
60+
.filter((id) => !isUndefined(id)) as string[])
6161
: [],
6262
[itemsData]
6363
);
6464

6565
const { data: registriesData, isLoading: isRegistriesDataLoading } = useRegistriesByIdsQuery(registryIds);
6666

67+
const sortedRegstries = useMemo(
68+
() => (registriesData?.registries ? sortRegistriesByIds(registryIds, registriesData?.registries) : []),
69+
[registriesData]
70+
);
71+
6772
const combinedListsData = useMemo(() => {
68-
return registriesData?.registries.map((registry) => {
73+
return sortedRegstries.map((registry) => {
6974
const registryAsItem = itemsData?.items.find((item) => item?.props[0]?.value?.toLowerCase() === registry.id);
7075
return {
7176
...registry,
@@ -75,7 +80,7 @@ const HighlightedLists = () => {
7580
itemId: registryAsItem?.id,
7681
};
7782
});
78-
}, [registriesData, itemsData]);
83+
}, [sortedRegstries, itemsData]);
7984

8085
const registriesLoading = isUndefined(combinedListsData) || isItemsDataLoading || isRegistriesDataLoading;
8186

web/src/utils/sortRegistriesByIds.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { GetRegistriesByIdsQuery } from "src/graphql/graphql";
2+
3+
/**
4+
*
5+
* @param registryIds Array containing registry ids
6+
* @param registries Array containing registry objects to be sorted
7+
* @returns An array of Registries matching the order of registryIds
8+
*/
9+
export const sortRegistriesByIds = (registryIds: string[], registries: GetRegistriesByIdsQuery["registries"]) => {
10+
const idToIndexMap = {};
11+
registryIds.forEach((id, index) => {
12+
idToIndexMap[id] = index;
13+
});
14+
15+
registries.sort((a, b) => idToIndexMap[a.id] - idToIndexMap[b.id]);
16+
return registries;
17+
};

0 commit comments

Comments
 (0)