From c01ed64301ed221fd1060f6462be3d7c72d0e84c Mon Sep 17 00:00:00 2001 From: Aamir Azad <82281117+aamirazad@users.noreply.github.com> Date: Tue, 20 Aug 2024 22:01:26 -0400 Subject: [PATCH] chore: switch from fetch to ky (#128) Fixes # ### TL;DR ### What changed? ### Why? --- bun.lockb | Bin 224816 -> 225152 bytes package.json | 1 + src/app/actions.ts | 1 - src/app/api/whishperRecording/route.ts | 10 ++-- src/app/paperless/document/[id]/page.tsx | 67 ++++++++++------------- src/app/paperless/page.tsx | 46 +++++++--------- src/app/whishper/page.tsx | 8 ++- src/components/audio-preview.tsx | 42 +++++--------- 8 files changed, 72 insertions(+), 103 deletions(-) diff --git a/bun.lockb b/bun.lockb index 4a6ab7823dfca9b6c0cdb9884c2c8d8547a349bd..855f278b06ad2e54eb94972a77655539e0448989 100755 GIT binary patch delta 34731 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 L?5D;Td*J^7KGPLl diff --git a/package.json b/package.json index 4e2102d..1164f8f 100644 --- a/package.json +++ b/package.json @@ -33,6 +33,7 @@ "clsx": "^2.1.1", "drizzle-orm": "^0.33.0", "geist": "^1.3.0", + "ky": "^1.7.0", "lucide-react": "^0.414.0", "next": "^14.2.4", "next-themes": "^0.3.0", diff --git a/src/app/actions.ts b/src/app/actions.ts index 33c691c..da16463 100644 --- a/src/app/actions.ts +++ b/src/app/actions.ts @@ -3,7 +3,6 @@ import { db } from "@/server/db"; import type { UsersTableType } from "@/server/db/schema"; import { users } from "@/server/db/schema"; -import type { PaperlessDocumentsType } from "@/types"; import { auth } from "@clerk/nextjs/server"; /* diff --git a/src/app/api/whishperRecording/route.ts b/src/app/api/whishperRecording/route.ts index 0277e27..d577ed5 100644 --- a/src/app/api/whishperRecording/route.ts +++ b/src/app/api/whishperRecording/route.ts @@ -1,4 +1,5 @@ import { getUserData } from "@/app/actions"; +import ky from "ky"; export async function DELETE(req: Request) { const url = new URL(req.url); @@ -13,15 +14,12 @@ export async function DELETE(req: Request) { if (!userData) { return new Response("Unauthorized", { status: 401 }); } - - const response = await fetch( + + const response = await ky.delete( `${userData.whishperURL}/api/transcriptions/${id}`, - { - method: "DELETE", - }, ); - if (!response.ok) { + if (!(response.ok)) { throw new Error("Network error"); } diff --git a/src/app/paperless/document/[id]/page.tsx b/src/app/paperless/document/[id]/page.tsx index 652a10e..d11e429 100644 --- a/src/app/paperless/document/[id]/page.tsx +++ b/src/app/paperless/document/[id]/page.tsx @@ -27,6 +27,7 @@ import BodyMessage from "@/components/body-message"; import Link from "next/link"; import LoadingSpinner from "@/components/loading-spinner"; import OpenExternalLink from "@/components/external-link"; +import ky from "ky"; const queryClient = new QueryClient(); @@ -36,19 +37,15 @@ export async function getPaperlessDocument( ): Promise { try { const url = `${userData.paperlessURL}/api/documents/${documentId}/download/`; - const response = await fetch(url, { - headers: { - Authorization: `Token ${userData.paperlessToken}`, - }, - }); - if (response.ok) { - const blob = await response.blob(); - const objectUrl = URL.createObjectURL(blob); - return objectUrl; - } else { - console.error("Failed to fetch PDF"); - return null; - } + const blob = await ky + .get(url, { + headers: { + Authorization: `Token ${userData.paperlessToken}`, + }, + }) + .blob(); + const objectUrl = URL.createObjectURL(blob); + return objectUrl; } catch (error) { console.error("Error fetching PDF:", error); return null; @@ -64,44 +61,36 @@ async function deleteDocument(documentId: number) { documents: [documentId], method: "delete", }; - const response = await fetch( - `${userData.paperlessURL}/api/documents/bulk_edit/ `, + const response = await ky.post( + `${userData.paperlessURL}/api/documents/bulk_edit/`, { - method: "POST", + json: body, headers: { - "Content-Type": "application/json", Authorization: `Token ${userData.paperlessToken}`, }, - body: JSON.stringify(body), }, ); return response; } -const fetchUserData = async (): Promise => { - const response = await fetch(`/api/getUserData`); - if (!response.ok) { - throw new Error("Network error"); - } - const data = (await response.json()) as UsersTableType; - return data; -}; +async function fetchUserData(): Promise { + return await ky.get("/api/getUserData").json(); +} -async function getPaperlessDocumentData(id: number, userData: UsersTableType) { +async function getPaperlessDocumentData( + id: number, + userData: UsersTableType, +): Promise { try { const url = `${userData.paperlessURL}/api/documents/${id}/?truncate_content=true`; - const response = await fetch(url, { - headers: { - Authorization: `Token ${userData.paperlessToken}`, - }, - }); - if (response.ok) { - const data = (await response.json()) as PaperlessDocumentType; - return data; - } else { - console.error("Failed to fetch PD dataF"); - return null; - } + const data = await ky + .get(url, { + headers: { + Authorization: `Token ${userData.paperlessToken}`, + }, + }) + .json(); + return data; } catch (error) { console.error("Error fetching PDF data:", error); return null; diff --git a/src/app/paperless/page.tsx b/src/app/paperless/page.tsx index 6a08ba5..3da0b2b 100644 --- a/src/app/paperless/page.tsx +++ b/src/app/paperless/page.tsx @@ -28,6 +28,7 @@ import OpenInternalLink from "@/components/internal-link"; import type { PaperlessDocumentsType } from "@/types"; import type { UsersTableType } from "@/server/db/schema"; import Image from "next/image"; +import ky from "ky"; const queryClient = new QueryClient(); @@ -36,18 +37,17 @@ async function getPaperlessDocuments(query: string) { if (!query || query == "null" || query.length < 3 || !userData) return null; - const response = await fetch( - `${userData.paperlessURL}/api/documents/?query=${query}&page=1&page_size=10&truncate_content=true`, - { - method: "GET", - headers: { - "Content-Type": "application/json", - Authorization: `Token ${userData.paperlessToken}`, + const data = await ky + .get( + `${userData.paperlessURL}/api/documents/?query=${query}&page=1&page_size=10&truncate_content=true`, + { + headers: { + "Content-Type": "application/json", + Authorization: `Token ${userData.paperlessToken}`, + }, }, - }, - ); - - const data = (await response.json()) as PaperlessDocumentsType; + ) + .json(); return data; } @@ -58,19 +58,15 @@ export async function getPaperlessThumbnail( ): Promise { try { const url = `${userData.paperlessURL}/api/documents/${documentId}/thumb/`; - const response = await fetch(url, { - headers: { - Authorization: `Token ${userData.paperlessToken}`, - }, - }); - if (response.ok) { - const blob = await response.blob(); - const objectUrl = URL.createObjectURL(blob); - return objectUrl; - } else { - console.error("Failed to fetch PDF"); - return null; - } + const blob = await ky + .get(url, { + headers: { + Authorization: `Token ${userData.paperlessToken}`, + }, + }) + .blob(); + const objectUrl = URL.createObjectURL(blob); + return objectUrl; } catch (error) { console.error("Error fetching PDF:", error); return null; @@ -232,7 +228,7 @@ function DocumentsPage() { alt={document.title} width={40} height={128} - className="h-32 w-full rounded object-cover mb-2" + className="mb-2 h-32 w-full rounded object-cover" /> {document.title} diff --git a/src/app/whishper/page.tsx b/src/app/whishper/page.tsx index 022910f..54ad1e7 100644 --- a/src/app/whishper/page.tsx +++ b/src/app/whishper/page.tsx @@ -43,6 +43,7 @@ import OpenExternalLink from "@/components/external-link"; import type { UsersTableType } from "@/server/db/schema"; import { BadgeCheck, Badge, BadgeAlert } from "lucide-react"; import type { WhishperRecordingType } from "@/types"; +import ky from "ky"; const queryClient = new QueryClient(); @@ -53,9 +54,10 @@ async function getWhishperRecordings( if (!query || query == "null" || query.length < 3 || !userData) return null; - const response = await fetch(`${userData.whishperURL}/api/transcriptions`); + const data = await ky + .get(`${userData.whishperURL}/api/transcriptions`) + .json(); - const data = (await response.json()) as WhishperRecordingType[]; const lowerCaseQuery = query.toLowerCase(); const filteredAndScored = data .filter( @@ -187,7 +189,7 @@ function RecordingsList() { const WhishperRecordingsMap = WhishperRecordings.data; - if (!WhishperRecordingsMap ?? WhishperRecordingsMap.length === 0) { + if (WhishperRecordingsMap.length === 0) { return

No results!

; } diff --git a/src/components/audio-preview.tsx b/src/components/audio-preview.tsx index b305cdf..5b84861 100644 --- a/src/components/audio-preview.tsx +++ b/src/components/audio-preview.tsx @@ -31,17 +31,13 @@ import { } from "@/components/ui/tooltip"; import { toast } from "sonner"; import BodyMessage from "@/components/body-message"; +import ky from "ky"; const queryClient = new QueryClient(); -const fetchUserData = async (): Promise => { - const response = await fetch("/api/getUserData"); - if (!response.ok) { - throw new Error("Network error"); - } - const data = (await response.json()) as UsersTableType; - return data; -}; +async function fetchUserData(): Promise { + return await ky.get("/api/getUserData").json(); +} function SkeletonLoader() { return ( @@ -68,26 +64,14 @@ function SkeletonLoader() { ); } -async function fetchWhishperRecording(searchId: string, whishperURL: string) { - const response = await fetch(`${whishperURL}/api/transcriptions`); - const data = (await response.json()) as WhishperRecordingType[]; - for (const recording of data) { - if (recording.id === searchId) { - return recording; - } - } -} - -async function deleteWhishperRecording(url: string) { - const response = await fetch(url, { - method: "DELETE", - }); - - if (!response.ok) { - throw new Error("Network error"); - } - - return response; +async function fetchWhishperRecording( + searchId: string, + whishperURL: string, +): Promise { + const data = await ky + .get(`${whishperURL}/api/transcriptions`) + .json(); + return data.find((recording) => recording.id === searchId); } type AudioInfoProps = { @@ -220,7 +204,7 @@ function AudioInfo({ id }: AudioInfoProps) { Cancel { - const response = await deleteWhishperRecording( + const response = await ky.delete( `${userData.whishperURL}/api/transcriptions/${id}`, ); if (response.ok) {