From 0b8a9b43104638bbfba367f6fd26ca509a9ea2a6 Mon Sep 17 00:00:00 2001 From: Isaac Wise Date: Thu, 25 Jul 2024 18:58:52 -0500 Subject: [PATCH] Fix some any types --- components/CollectionListing.tsx | 4 ++-- .../InputSelect/CollectionSelection.tsx | 18 ++++++++--------- components/InputSelect/TagSelection.tsx | 3 ++- components/LinkViews/LinkCard.tsx | 2 +- components/LinkViews/LinkMasonry.tsx | 2 +- .../ModalContent/PreservedFormatsModal.tsx | 2 +- components/PreserverdFormatRow.tsx | 17 +++++----------- components/ReadableView.tsx | 2 +- e2e/data/user.ts | 14 ++++++------- .../controllers/dashboard/getDashboardData.ts | 4 ++-- .../dashboard/getDashboardDataV2.ts | 20 +++++++++---------- lib/api/controllers/links/getLinks.ts | 4 ++-- .../links/getPublicLinksUnderCollection.ts | 4 ++-- lib/client/utils.ts | 4 ++-- lib/shared/getArchiveValidity.ts | 2 +- types/global.ts | 2 ++ 16 files changed, 49 insertions(+), 55 deletions(-) diff --git a/components/CollectionListing.tsx b/components/CollectionListing.tsx index b26e8cf..1e14b8f 100644 --- a/components/CollectionListing.tsx +++ b/components/CollectionListing.tsx @@ -232,8 +232,8 @@ const renderItem = (
{Icon(item as ExtendedTreeItem, onExpand, onCollapse)} diff --git a/components/InputSelect/CollectionSelection.tsx b/components/InputSelect/CollectionSelection.tsx index 99b999e..37899ee 100644 --- a/components/InputSelect/CollectionSelection.tsx +++ b/components/InputSelect/CollectionSelection.tsx @@ -4,17 +4,17 @@ import { useEffect, useState } from "react"; import { styles } from "./styles"; import { Options } from "./types"; import CreatableSelect from "react-select/creatable"; -import Select from "react-select"; +import Select, { ActionMeta } from "react-select"; type Props = { - onChange: any; + onChange: (newValue: unknown, actionMeta: ActionMeta) => void; showDefaultValue?: boolean; defaultValue?: - | { - label: string; - value?: number; - } - | undefined; + | { + label: string; + value?: number; + } + | undefined; creatable?: boolean; }; @@ -107,7 +107,7 @@ export default function CollectionSelection({ components={{ Option: customOption, }} - // menuPosition="fixed" + // menuPosition="fixed" /> ); } else { @@ -123,7 +123,7 @@ export default function CollectionSelection({ components={{ Option: customOption, }} - // menuPosition="fixed" + // menuPosition="fixed" /> ); } diff --git a/components/InputSelect/TagSelection.tsx b/components/InputSelect/TagSelection.tsx index d901b40..104e92b 100644 --- a/components/InputSelect/TagSelection.tsx +++ b/components/InputSelect/TagSelection.tsx @@ -3,9 +3,10 @@ import { useEffect, useState } from "react"; import CreatableSelect from "react-select/creatable"; import { styles } from "./styles"; import { Options } from "./types"; +import { ActionMeta } from "react-select"; type Props = { - onChange: any; + onChange: (newValue: unknown, actionMeta: ActionMeta) => void; defaultValue?: { value: number; label: string; diff --git a/components/LinkViews/LinkCard.tsx b/components/LinkViews/LinkCard.tsx index 70f553c..ba052c2 100644 --- a/components/LinkViews/LinkCard.tsx +++ b/components/LinkViews/LinkCard.tsx @@ -85,7 +85,7 @@ export default function LinkCard({ link, flipDropdown, editMode }: Props) { const permissions = usePermissions(collection?.id as number); useEffect(() => { - let interval: any; + let interval: NodeJS.Timeout | null = null; if ( isVisible && diff --git a/components/LinkViews/LinkMasonry.tsx b/components/LinkViews/LinkMasonry.tsx index 022ac93..335e061 100644 --- a/components/LinkViews/LinkMasonry.tsx +++ b/components/LinkViews/LinkMasonry.tsx @@ -84,7 +84,7 @@ export default function LinkMasonry({ link, flipDropdown, editMode }: Props) { const permissions = usePermissions(collection?.id as number); useEffect(() => { - let interval: any; + let interval: NodeJS.Timeout | null = null; if ( isVisible && diff --git a/components/ModalContent/PreservedFormatsModal.tsx b/components/ModalContent/PreservedFormatsModal.tsx index 4414b37..58a71ba 100644 --- a/components/ModalContent/PreservedFormatsModal.tsx +++ b/components/ModalContent/PreservedFormatsModal.tsx @@ -104,7 +104,7 @@ export default function PreservedFormatsModal({ onClose, activeLink }: Props) { ); })(); - let interval: any; + let interval: NodeJS.Timeout | null = null; if (!isReady()) { interval = setInterval(async () => { diff --git a/components/PreserverdFormatRow.tsx b/components/PreserverdFormatRow.tsx index e28d43d..d35bfe6 100644 --- a/components/PreserverdFormatRow.tsx +++ b/components/PreserverdFormatRow.tsx @@ -4,10 +4,8 @@ import { ArchivedFormat, LinkIncludingShortenedCollectionAndTags, } from "@/types/global"; -import toast from "react-hot-toast"; import Link from "next/link"; import { useRouter } from "next/router"; -import { useSession } from "next-auth/react"; type Props = { name: string; @@ -24,7 +22,6 @@ export default function PreservedFormatRow({ activeLink, downloadable, }: Props) { - const session = useSession(); const { getLink } = useLinkStore(); const [link, setLink] = @@ -36,19 +33,15 @@ export default function PreservedFormatRow({ useEffect(() => { (async () => { - const data = await getLink(link.id as number, isPublic); - setLink( - (data as any).response as LinkIncludingShortenedCollectionAndTags - ); + const { data } = await getLink(link.id as number, isPublic); + setLink(data as LinkIncludingShortenedCollectionAndTags); })(); - let interval: any; + let interval: NodeJS.Timeout | null = null; if (link?.image === "pending" || link?.pdf === "pending") { interval = setInterval(async () => { - const data = await getLink(link.id as number, isPublic); - setLink( - (data as any).response as LinkIncludingShortenedCollectionAndTags - ); + const { data } = await getLink(link.id as number, isPublic); + setLink(data as LinkIncludingShortenedCollectionAndTags); }, 5000); } else { if (interval) { diff --git a/components/ReadableView.tsx b/components/ReadableView.tsx index b862b38..7b827a2 100644 --- a/components/ReadableView.tsx +++ b/components/ReadableView.tsx @@ -75,7 +75,7 @@ export default function ReadableView({ link }: Props) { useEffect(() => { if (link) getLink(link?.id as number); - let interval: any; + let interval: NodeJS.Timeout | null = null; if ( link && (link?.image === "pending" || diff --git a/e2e/data/user.ts b/e2e/data/user.ts index 3ae0b73..cc155ae 100644 --- a/e2e/data/user.ts +++ b/e2e/data/user.ts @@ -2,19 +2,17 @@ import axios, { AxiosError } from "axios" axios.defaults.baseURL = "http://localhost:3000" -export async function seedUser (username?: string, password?: string, name?: string) { +export async function seedUser(username?: string, password?: string, name?: string) { try { return await axios.post("/api/v1/users", { username: username || "test", password: password || "password", name: name || "Test User", }) - } catch (e: any) { - if (e instanceof AxiosError) { - if (e.response?.status === 400) { - return - } - } - throw e + } catch (error) { + const axiosError = error as AxiosError; + if (axiosError && axiosError.response?.status === 400) return + + throw error } } \ No newline at end of file diff --git a/lib/api/controllers/dashboard/getDashboardData.ts b/lib/api/controllers/dashboard/getDashboardData.ts index 3b0f751..8e19ae3 100644 --- a/lib/api/controllers/dashboard/getDashboardData.ts +++ b/lib/api/controllers/dashboard/getDashboardData.ts @@ -1,11 +1,11 @@ import { prisma } from "@/lib/api/db"; -import { LinkRequestQuery, Sort } from "@/types/global"; +import { LinkRequestQuery, Order, Sort } from "@/types/global"; export default async function getDashboardData( userId: number, query: LinkRequestQuery ) { - let order: any; + let order: Order = { id: "desc" }; if (query.sort === Sort.DateNewestFirst) order = { id: "desc" }; else if (query.sort === Sort.DateOldestFirst) order = { id: "asc" }; else if (query.sort === Sort.NameAZ) order = { name: "asc" }; diff --git a/lib/api/controllers/dashboard/getDashboardDataV2.ts b/lib/api/controllers/dashboard/getDashboardDataV2.ts index 6d2fb02..ef58be4 100644 --- a/lib/api/controllers/dashboard/getDashboardDataV2.ts +++ b/lib/api/controllers/dashboard/getDashboardDataV2.ts @@ -1,23 +1,23 @@ import { prisma } from "@/lib/api/db"; -import { LinkRequestQuery, Sort } from "@/types/global"; +import { LinkRequestQuery, Order, Sort } from "@/types/global"; type Response = | { - data: D; - message: string; - status: number; - } + data: D; + message: string; + status: number; + } | { - data: D; - message: string; - status: number; - }; + data: D; + message: string; + status: number; + }; export default async function getDashboardData( userId: number, query: LinkRequestQuery ): Promise> { - let order: any; + let order: Order = { id: "desc" }; if (query.sort === Sort.DateNewestFirst) order = { id: "desc" }; else if (query.sort === Sort.DateOldestFirst) order = { id: "asc" }; else if (query.sort === Sort.NameAZ) order = { name: "asc" }; diff --git a/lib/api/controllers/links/getLinks.ts b/lib/api/controllers/links/getLinks.ts index 561c919..0427ba5 100644 --- a/lib/api/controllers/links/getLinks.ts +++ b/lib/api/controllers/links/getLinks.ts @@ -1,11 +1,11 @@ import { prisma } from "@/lib/api/db"; -import { LinkRequestQuery, Sort } from "@/types/global"; +import { LinkRequestQuery, Order, Sort } from "@/types/global"; export default async function getLink(userId: number, query: LinkRequestQuery) { const POSTGRES_IS_ENABLED = process.env.DATABASE_URL?.startsWith("postgresql"); - let order: any; + let order: Order = { id: "desc" }; if (query.sort === Sort.DateNewestFirst) order = { id: "desc" }; else if (query.sort === Sort.DateOldestFirst) order = { id: "asc" }; else if (query.sort === Sort.NameAZ) order = { name: "asc" }; diff --git a/lib/api/controllers/public/links/getPublicLinksUnderCollection.ts b/lib/api/controllers/public/links/getPublicLinksUnderCollection.ts index d93e804..b03de3a 100644 --- a/lib/api/controllers/public/links/getPublicLinksUnderCollection.ts +++ b/lib/api/controllers/public/links/getPublicLinksUnderCollection.ts @@ -1,5 +1,5 @@ import { prisma } from "@/lib/api/db"; -import { LinkRequestQuery, Sort } from "@/types/global"; +import { LinkRequestQuery, Order, Sort } from "@/types/global"; export default async function getLink( query: Omit @@ -7,7 +7,7 @@ export default async function getLink( const POSTGRES_IS_ENABLED = process.env.DATABASE_URL?.startsWith("postgresql"); - let order: any; + let order: Order = { id: "desc" }; if (query.sort === Sort.DateNewestFirst) order = { id: "desc" }; else if (query.sort === Sort.DateOldestFirst) order = { id: "asc" }; else if (query.sort === Sort.NameAZ) order = { name: "asc" }; diff --git a/lib/client/utils.ts b/lib/client/utils.ts index e067933..010372c 100644 --- a/lib/client/utils.ts +++ b/lib/client/utils.ts @@ -7,10 +7,10 @@ export function isPWA() { } export function isIphone() { - return /iPhone/.test(navigator.userAgent) && !(window as any).MSStream; + return /iPhone/.test(navigator.userAgent) && !(window as unknown as { MSStream?: any }).MSStream; } -export function dropdownTriggerer(e: any) { +export function dropdownTriggerer(e: React.FocusEvent | React.MouseEvent) { let targetEl = e.currentTarget; if (targetEl && targetEl.matches(":focus")) { setTimeout(function () { diff --git a/lib/shared/getArchiveValidity.ts b/lib/shared/getArchiveValidity.ts index 8ec8c44..fdf0457 100644 --- a/lib/shared/getArchiveValidity.ts +++ b/lib/shared/getArchiveValidity.ts @@ -39,7 +39,7 @@ export function monolithAvailable( ); } -export function previewAvailable(link: any) { +export function previewAvailable(link: LinkIncludingShortenedCollectionAndTags) { return ( link && link.preview && diff --git a/types/global.ts b/types/global.ts index 90c9aef..3f5cae0 100644 --- a/types/global.ts +++ b/types/global.ts @@ -81,6 +81,8 @@ export enum Sort { DescriptionZA, } +export type Order = { [key: string]: 'asc' | 'desc' }; + export type LinkRequestQuery = { sort: Sort; cursor?: number;