diff --git a/apps/web/src/app/_components/search/search-filter.tsx b/apps/web/src/app/_components/search/search-filter.tsx index cf593c3..fe32850 100644 --- a/apps/web/src/app/_components/search/search-filter.tsx +++ b/apps/web/src/app/_components/search/search-filter.tsx @@ -1,5 +1,7 @@ "use client"; +import { useCallback } from "react"; +import { usePathname, useRouter, useSearchParams } from "next/navigation"; import { zodResolver } from "@hookform/resolvers/zod"; import { useForm } from "react-hook-form"; import { z } from "zod"; @@ -22,8 +24,27 @@ export default function SearchFilter() { }, }); + const searchParams = useSearchParams(); + const router = useRouter(); + const pathName = usePathname(); + + const createQueryString = useCallback( + (name: string, value: string) => { + const params = new URLSearchParams(searchParams); + params.set(name, value); + return params.toString(); + }, + [searchParams], + ); + function onSubmit(values: z.infer) { - console.log(values); + if (values.searchText != "") { + router.push( + pathName + `/?${createQueryString("search", values.searchText)}`, + ); + } else { + router.push(pathName); + } } return ( diff --git a/packages/api/package.json b/packages/api/package.json index 669d443..dfca51e 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -23,6 +23,7 @@ "@cooper/db": "workspace:*", "@cooper/validators": "workspace:*", "@trpc/server": "11.0.0-rc.441", + "fuse.js": "^7.0.0", "superjson": "2.2.1", "zod": "catalog:" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 23378fe..717ddfb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -258,6 +258,9 @@ importers: '@trpc/server': specifier: 11.0.0-rc.441 version: 11.0.0-rc.441 + fuse.js: + specifier: ^7.0.0 + version: 7.0.0 superjson: specifier: 2.2.1 version: 2.2.1 @@ -505,7 +508,7 @@ importers: version: 7.35.0(eslint@9.7.0) eslint-plugin-react-hooks: specifier: rc - version: 5.1.0-rc-0751fac7-20241002(eslint@9.7.0) + version: 5.1.0-rc-a03254bc-20240905(eslint@9.7.0) eslint-plugin-turbo: specifier: ^2.0.6 version: 2.0.9(eslint@9.7.0) @@ -5026,8 +5029,8 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - eslint-plugin-react-hooks@5.1.0-rc-0751fac7-20241002: - resolution: {integrity: sha512-9CEhaksLMmjRIpLdm5xazaCvDYsLZ0OKgCBQTyuiP4LvtB1wiQVBVGgQVWF1iC2FZmilFsefdmxUJb0nQl80Yg==} + eslint-plugin-react-hooks@5.1.0-rc-a03254bc-20240905: + resolution: {integrity: sha512-MAQG2WZjBdVBz2mpyWz2l7piMjBoHrSaPiWAQqyJuwbmRRy5YHdVW/jkLXQcKWoct+U02AojaWh+EGKfsL1fgA==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 @@ -5352,6 +5355,10 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + fuse.js@7.0.0: + resolution: {integrity: sha512-14F4hBIxqKvD4Zz/XjDc3y94mNZN6pRv3U13Udo0lNLCWRBUsrMv2xwcF/y/Z5sV6+FQW+/ow68cHpm4sunt8Q==} + engines: {node: '>=10'} + gauge@3.0.2: resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} engines: {node: '>=10'} @@ -14365,7 +14372,7 @@ snapshots: safe-regex-test: 1.0.3 string.prototype.includes: 2.0.0 - eslint-plugin-react-hooks@5.1.0-rc-0751fac7-20241002(eslint@9.7.0): + eslint-plugin-react-hooks@5.1.0-rc-a03254bc-20240905(eslint@9.7.0): dependencies: eslint: 9.7.0 @@ -14780,6 +14787,8 @@ snapshots: functions-have-names@1.2.3: {} + fuse.js@7.0.0: {} + gauge@3.0.2: dependencies: aproba: 2.0.0