From 8fdda8537214ea276de33ec02c81a9afef42e5b0 Mon Sep 17 00:00:00 2001 From: Damla Koksal Date: Thu, 14 Sep 2023 12:18:37 +0300 Subject: [PATCH 1/6] feat: react query implemented to the favorite and delete buttons --- package.json | 1 + pnpm-lock.yaml | 32 +++++++++++ src/app/api/advertisements/route.ts | 10 ++++ src/app/layout.tsx | 19 ++++--- .../ad/delete-ad-button/delete-ad-button.tsx | 52 +++++++++--------- .../favorite-ad-button/favorite-ad-button.tsx | 55 +++++++++---------- src/components/hydrate/index.tsx | 7 +++ src/context/query-client.context.tsx | 44 +++++++++++++++ src/context/react-query.context.tsx | 35 ++++++++++++ src/hooks/use-formatted-date.tsx | 2 +- src/lib/getQueryClient.ts | 14 +++++ src/lib/query-service.ts | 37 +++++++++++++ 12 files changed, 246 insertions(+), 62 deletions(-) create mode 100644 src/components/hydrate/index.tsx create mode 100644 src/context/query-client.context.tsx create mode 100644 src/context/react-query.context.tsx create mode 100644 src/lib/getQueryClient.ts create mode 100644 src/lib/query-service.ts diff --git a/package.json b/package.json index 40afd86..54ec885 100644 --- a/package.json +++ b/package.json @@ -17,6 +17,7 @@ "dependencies": { "@hookform/resolvers": "^3.3.1", "@prisma/client": "^5.2.0", + "@tanstack/react-query": "^4.35.3", "@types/react": "18.2.21", "@types/react-dom": "18.2.7", "classnames": "^2.3.2", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 82d8e89..f7f7c72 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -3,6 +3,7 @@ lockfileVersion: 5.4 specifiers: '@hookform/resolvers': ^3.3.1 '@prisma/client': ^5.2.0 + '@tanstack/react-query': ^4.35.3 '@types/node': 20.5.9 '@types/react': 18.2.21 '@types/react-dom': 18.2.7 @@ -27,6 +28,7 @@ specifiers: dependencies: '@hookform/resolvers': 3.3.1_react-hook-form@7.46.1 '@prisma/client': 5.2.0_prisma@5.2.0 + '@tanstack/react-query': 4.35.3_biqbaboplfbrettd7655fr4n2y '@types/react': 18.2.21 '@types/react-dom': 18.2.7 classnames: 2.3.2 @@ -319,6 +321,28 @@ packages: tslib: 2.6.2 dev: false + /@tanstack/query-core/4.35.3: + resolution: {integrity: sha512-PS+WEjd9wzKTyNjjQymvcOe1yg8f3wYc6mD+vb6CKyZAKvu4sIJwryfqfBULITKCla7P9C4l5e9RXePHvZOZeQ==} + dev: false + + /@tanstack/react-query/4.35.3_biqbaboplfbrettd7655fr4n2y: + resolution: {integrity: sha512-UgTPioip/rGG3EQilXfA2j4BJkhEQsR+KAbF+KIuvQ7j4MkgnTCJF01SfRpIRNtQTlEfz/+IL7+jP8WA8bFbsw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + dependencies: + '@tanstack/query-core': 4.35.3 + react: 18.2.0 + react-dom: 18.2.0_react@18.2.0 + use-sync-external-store: 1.2.0_react@18.2.0 + dev: false + /@tsconfig/node10/1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true @@ -2672,6 +2696,14 @@ packages: punycode: 2.3.0 dev: false + /use-sync-external-store/1.2.0_react@18.2.0: + resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + dependencies: + react: 18.2.0 + dev: false + /util-deprecate/1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false diff --git a/src/app/api/advertisements/route.ts b/src/app/api/advertisements/route.ts index 29c50fb..6189780 100644 --- a/src/app/api/advertisements/route.ts +++ b/src/app/api/advertisements/route.ts @@ -1,6 +1,16 @@ import { NextResponse } from 'next/server' import prisma from '@/lib/prisma' +export async function GET(request: Request) { + try { + const ads = await prisma.advertisement.findMany() + + return NextResponse.json(ads) + } catch (error: any) { + return new NextResponse(error.message, { status: 500 }) + } +} + export async function POST(request: Request) { try { const json = await request.json() diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 26e6bc2..cdfbbec 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -5,6 +5,7 @@ import Header from '@/components/layout/header/header' import { Inter } from 'next/font/google' import Main from '@/components/layout/main/main' import type { Metadata } from 'next' +import { ReactQueryProviders } from '@/context/react-query.context' import { SortOptionProvider } from '@/context/sort-option.context' import Toast from '@/components/general/toast/toast' import { ToastProvider } from '@/context/toast.context' @@ -28,14 +29,16 @@ const RootLayout: React.FC = ({ children }) => { return ( - - -
- -
{children}
-