diff --git a/src/webapp/features/collections/components/collectionFilters/CollectionFilters.tsx b/src/webapp/features/collections/components/collectionFilters/CollectionFilters.tsx
index d93ba8d7..a608577d 100644
--- a/src/webapp/features/collections/components/collectionFilters/CollectionFilters.tsx
+++ b/src/webapp/features/collections/components/collectionFilters/CollectionFilters.tsx
@@ -88,6 +88,15 @@ export function CollectionFiltersSortSelect() {
>
Last Updated
+
onChange(CollectionSortField.CREATED_AT)}
+ rightSection={
+ optimisticSort === CollectionSortField.CREATED_AT &&
+ }
+ closeMenuOnClick={false}
+ >
+ Date Created
+
onChange(CollectionSortField.CARD_COUNT)}
rightSection={
@@ -97,6 +106,15 @@ export function CollectionFiltersSortSelect() {
>
Card Count
+ {/* onChange(CollectionSortField.NAME)}
+ rightSection={
+ optimisticSort === CollectionSortField.NAME &&
+ }
+ closeMenuOnClick={false}
+ >
+ Name
+ */}
);
}
diff --git a/src/webapp/features/collections/lib/dal.ts b/src/webapp/features/collections/lib/dal.ts
index d2b40d3f..cc286063 100644
--- a/src/webapp/features/collections/lib/dal.ts
+++ b/src/webapp/features/collections/lib/dal.ts
@@ -27,13 +27,14 @@ interface SearchParams {
}
export const getCollectionsForUrl = cache(
- async (url: string, params?: PageParams) => {
+ async (url: string, params?: PageParams & { sortOrder?: SortOrder }) => {
const client = createSembleClient();
const response = await client.getCollectionsForUrl({
url,
page: params?.page,
limit: params?.limit,
sortBy: params?.collectionSortBy,
+ sortOrder: params?.sortOrder,
});
return response;
diff --git a/src/webapp/features/collections/lib/queries/useCollectionSearch.tsx b/src/webapp/features/collections/lib/queries/useCollectionSearch.tsx
index 52f41a2d..448d0221 100644
--- a/src/webapp/features/collections/lib/queries/useCollectionSearch.tsx
+++ b/src/webapp/features/collections/lib/queries/useCollectionSearch.tsx
@@ -1,7 +1,8 @@
import { useQuery } from '@tanstack/react-query';
import { getMyCollections } from '../dal';
import { collectionKeys } from '../collectionKeys';
-import { SortOrder } from '@semble/types';
+import { CollectionSortField } from '@semble/types';
+import { getCollectionsSortParams } from '../utils';
interface Props {
query: string;
@@ -17,8 +18,7 @@ export default function useCollectionSearch(props: Props) {
queryFn: () =>
getMyCollections({
limit: props.params?.limit ?? 10,
- sortBy: 'updatedAt',
- sortOrder: SortOrder.DESC,
+ ...getCollectionsSortParams(CollectionSortField.UPDATED_AT),
searchText: props.query || undefined,
}),
enabled: !!props.query,
diff --git a/src/webapp/features/collections/lib/queries/useGemCollectionSearch.tsx b/src/webapp/features/collections/lib/queries/useGemCollectionSearch.tsx
index 6af3ca5d..0c74320f 100644
--- a/src/webapp/features/collections/lib/queries/useGemCollectionSearch.tsx
+++ b/src/webapp/features/collections/lib/queries/useGemCollectionSearch.tsx
@@ -1,7 +1,8 @@
import { useQuery } from '@tanstack/react-query';
import { getMyGemCollections } from '../dal';
import { collectionKeys } from '../collectionKeys';
-import { SortOrder } from '@semble/types';
+import { CollectionSortField } from '@semble/types';
+import { getCollectionsSortParams } from '../utils';
export default function useGemCollectionSearch() {
const QUERY = '💎';
@@ -11,8 +12,7 @@ export default function useGemCollectionSearch() {
queryFn: () =>
getMyGemCollections({
limit: 5,
- sortBy: 'updatedAt',
- sortOrder: SortOrder.DESC,
+ ...getCollectionsSortParams(CollectionSortField.UPDATED_AT),
searchText: QUERY,
}),
enabled: !!QUERY,
diff --git a/src/webapp/features/collections/lib/queries/useSearchCollections.tsx b/src/webapp/features/collections/lib/queries/useSearchCollections.tsx
index 70a53b5d..c3ef160a 100644
--- a/src/webapp/features/collections/lib/queries/useSearchCollections.tsx
+++ b/src/webapp/features/collections/lib/queries/useSearchCollections.tsx
@@ -8,7 +8,9 @@ import {
CollectionSortField,
CollectionAccessType,
GetCollectionsResponse,
+ SortOrder,
} from '@semble/types';
+import { getCollectionsSortParams } from '../utils';
interface Props {
searchText: string;
limit?: number;
@@ -35,6 +37,8 @@ export default function useSearchCollections(props: Props) {
limit,
page: pageParam as number,
collectionSortBy: props.sortBy,
+ sortOrder:
+ props.sortBy && getCollectionsSortParams(props.sortBy).sortOrder,
accessType: props.accessType,
identifier: props.identifier,
}),
diff --git a/src/webapp/features/collections/lib/queries/useSembleCollectionts.tsx b/src/webapp/features/collections/lib/queries/useSembleCollectionts.tsx
index c552d2f0..5d0cec00 100644
--- a/src/webapp/features/collections/lib/queries/useSembleCollectionts.tsx
+++ b/src/webapp/features/collections/lib/queries/useSembleCollectionts.tsx
@@ -1,10 +1,13 @@
import { useSuspenseInfiniteQuery } from '@tanstack/react-query';
import { getCollectionsForUrl } from '../dal';
import { collectionKeys } from '../collectionKeys';
+import { CollectionSortField } from '@semble/types';
+import { getCollectionsSortParams } from '../utils';
interface Props {
url: string;
limit?: number;
+ sortBy?: CollectionSortField;
}
export default function useSembleCollections(props: Props) {
@@ -14,7 +17,13 @@ export default function useSembleCollections(props: Props) {
queryKey: collectionKeys.bySembleUrl(props.url),
initialPageParam: 1,
queryFn: ({ pageParam = 1 }) => {
- return getCollectionsForUrl(props.url, { page: pageParam, limit });
+ return getCollectionsForUrl(props.url, {
+ page: pageParam,
+ limit,
+ collectionSortBy: props.sortBy,
+ sortOrder:
+ props.sortBy && getCollectionsSortParams(props.sortBy).sortOrder,
+ });
},
getNextPageParam: (lastPage) => {
if (lastPage.pagination.hasMore) {
diff --git a/src/webapp/features/collections/lib/utils/index.ts b/src/webapp/features/collections/lib/utils/index.ts
new file mode 100644
index 00000000..e377f179
--- /dev/null
+++ b/src/webapp/features/collections/lib/utils/index.ts
@@ -0,0 +1,35 @@
+import { CollectionSortField, SortOrder } from '@semble/types';
+
+export const getCollectionsSortParams = (field: CollectionSortField) => {
+ switch (field) {
+ case CollectionSortField.NAME:
+ return {
+ sortBy: CollectionSortField.NAME,
+ sortOrder: SortOrder.ASC,
+ };
+
+ case CollectionSortField.CREATED_AT:
+ return {
+ sortBy: CollectionSortField.CREATED_AT,
+ sortOrder: SortOrder.DESC,
+ };
+
+ case CollectionSortField.UPDATED_AT:
+ return {
+ sortBy: CollectionSortField.UPDATED_AT,
+ sortOrder: SortOrder.DESC,
+ };
+
+ case CollectionSortField.CARD_COUNT:
+ return {
+ sortBy: CollectionSortField.CARD_COUNT,
+ sortOrder: SortOrder.DESC,
+ };
+
+ default:
+ return {
+ sortBy: CollectionSortField.UPDATED_AT,
+ sortOrder: SortOrder.DESC,
+ };
+ }
+};
diff --git a/src/webapp/next-env.d.ts b/src/webapp/next-env.d.ts
index c4b7818f..9edff1c7 100644
--- a/src/webapp/next-env.d.ts
+++ b/src/webapp/next-env.d.ts
@@ -1,6 +1,6 @@
///
///
-import "./.next/dev/types/routes.d.ts";
+import "./.next/types/routes.d.ts";
// NOTE: This file should not be edited
// see https://nextjs.org/docs/app/api-reference/config/typescript for more information.