diff --git a/app/search/[collection]/page.tsx b/app/search/[collection]/page.tsx
index ea52c14ab..0c34864c9 100644
--- a/app/search/[collection]/page.tsx
+++ b/app/search/[collection]/page.tsx
@@ -20,8 +20,6 @@ import {
} from 'lib/constants';
import { Suspense } from 'react';
-export const runtime = 'edge';
-
export async function generateMetadata({
params
}: {
diff --git a/app/search/page.tsx b/app/search/page.tsx
index 2f7a53bd4..60f11b189 100644
--- a/app/search/page.tsx
+++ b/app/search/page.tsx
@@ -3,8 +3,6 @@ import ProductGridItems from 'components/layout/product-grid-items';
import { defaultSort, sorting } from 'lib/constants';
import { getProducts } from 'lib/shopify';
-export const runtime = 'edge';
-
export const metadata = {
title: 'Search',
description: 'Search for products in the store.'
diff --git a/components/layout/search/filters/filters-list.tsx b/components/layout/search/filters/filters-list.tsx
index 83c7276b8..1cdb72ac0 100644
--- a/components/layout/search/filters/filters-list.tsx
+++ b/components/layout/search/filters/filters-list.tsx
@@ -5,6 +5,7 @@ import clsx from 'clsx';
import { Filter } from 'lib/shopify/types';
import { createUrl } from 'lib/utils';
import { usePathname, useRouter, useSearchParams } from 'next/navigation';
+import SelectedList from './selected-list';
const Filters = ({ filters, defaultOpen = true }: { filters: Filter[]; defaultOpen?: boolean }) => {
const router = useRouter();
@@ -31,43 +32,47 @@ const Filters = ({ filters, defaultOpen = true }: { filters: Filter[]; defaultOp
};
return (
-
+ <>
+
+
+ >
);
};
diff --git a/components/layout/search/filters/selected-list.tsx b/components/layout/search/filters/selected-list.tsx
index 1e7d1a14e..16f8a8cfa 100644
--- a/components/layout/search/filters/selected-list.tsx
+++ b/components/layout/search/filters/selected-list.tsx
@@ -1,5 +1,73 @@
-const SelectedList = () => {
- return SelectedList
;
+'use client';
+
+import { XMarkIcon } from '@heroicons/react/16/solid';
+import { Filter } from 'lib/shopify/types';
+import { createUrl } from 'lib/utils';
+import { usePathname, useRouter, useSearchParams } from 'next/navigation';
+
+const SelectedList = ({ filters }: { filters: Filter[] }) => {
+ const searchParams = useSearchParams();
+ const router = useRouter();
+ const pathname = usePathname();
+
+ const selectedFilters = filters.flatMap(({ id, values }) => {
+ const selectedValues = searchParams.getAll(id);
+ if (selectedValues.length === 0) return [];
+ return values
+ .filter(({ value }) => selectedValues.includes(String(value)))
+ .map(({ id: valueId, value, label }) => ({
+ valueId,
+ value,
+ id,
+ label
+ }));
+ });
+
+ const handleClear = (id: string, value: string) => {
+ const newSearchParams = new URLSearchParams(searchParams);
+ const selectedValues = newSearchParams.getAll(id);
+ selectedValues.splice(selectedValues.indexOf(value), 1);
+ newSearchParams.delete(id);
+ for (const value of selectedValues) {
+ newSearchParams.append(id, value);
+ }
+
+ router.replace(createUrl(pathname, newSearchParams), { scroll: false });
+ };
+
+ const handleClearAll = () => {
+ const sort = searchParams.get('sort');
+ const collection = searchParams.get('collection');
+ const q = searchParams.get('q');
+ const newSearchParams = new URLSearchParams({
+ ...(sort && { sort }),
+ ...(collection && { collection }),
+ ...(q && { q })
+ });
+ router.replace(createUrl(pathname, newSearchParams), { scroll: false });
+ };
+
+ return selectedFilters.length ? (
+
+ {selectedFilters.map((filter) => (
+
+ {filter.label}
+
+
+ ))}
+
+
+ ) : null;
};
export default SelectedList;