fix: disable route prefetching app-wide to avoid spurious requests

Wrap next/link in a shared Link component that ships prefetch=false by
default, so no route is ever prefetched (viewport or hover) anymore, and
drop the DNS prefetch hint. Removes hidden background requests that were
the source of intermittent issues.
This commit is contained in:
openhands committed 2026-08-29 19:27:13 +02:00
1 parent 944e8ff1d8
commit 7a41775c7e
136 files changed
+141 -143

No files matched your search

+1 -1
View File
@@ -1,6 +1,6 @@
import { ChevronRight, Home } from "lucide-react";
import Link from "next/link";
import { Fragment } from "react";
import Link from "@/components/link";
export type { BreadcrumbItem } from "@/types/common";
+1 -1
View File
@@ -1,9 +1,9 @@
"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
import type { ReactNode } from "react";
import { useAdminMobile } from "@/components/admin/admin-mobile-wrapper";
import Link from "@/components/link";
/**
* Sidebar link that highlights when its route is active.
+1 -1
View File
@@ -1,8 +1,8 @@
"use client";
import Link from "next/link";
import { usePathname } from "next/navigation";
import { useTranslations } from "next-intl";
import Link from "@/components/link";
import { cn } from "@/lib/utils";
export interface AdminTab {
+1 -1
View File
@@ -1,4 +1,4 @@
import Link from "next/link";
import Link from "@/components/link";
/** Minimal prev/next pager for admin list pages without DataTable. */
export function AdminSimplePager({
+1 -1
View File
@@ -1,11 +1,11 @@
"use client";
import Link from "next/link";
import { useRouter } from "next/navigation";
import { useTranslations } from "next-intl";
import { useTransition } from "react";
import { deleteArticle } from "@/actions/admin-articles";
import { useConfirmDialog } from "@/components/admin/confirm-dialog";
import Link from "@/components/link";
export function ArticleCard({
id,
@@ -11,7 +11,6 @@ import {
Save,
Settings,
} from "lucide-react";
import Link from "next/link";
import { useCallback, useEffect, useMemo, useState } from "react";
import { toast } from "sonner";
import { updateCatalogPage } from "@/actions/catalog";
@@ -27,6 +26,7 @@ import { IconPicker } from "@/components/admin/catalog/icon-picker";
import { ItemsShopPreview } from "@/components/admin/catalog/items-shop-preview";
import { QuickAddFurni } from "@/components/admin/catalog/quick-add-furni";
import { CatalogIcon, LAYOUT_COLORS } from "@/components/admin/catalog-tree";
import Link from "@/components/link";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
+1 -1
View File
@@ -21,7 +21,6 @@ import {
Trash2,
X,
} from "lucide-react";
import Link from "next/link";
import { useRouter } from "next/navigation";
import {
createContext,
@@ -33,6 +32,7 @@ import {
} from "react";
import { toast } from "sonner";
import { useConfirmDialog } from "@/components/admin/confirm-dialog";
import Link from "@/components/link";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import {
+1 -1
View File
@@ -1,5 +1,5 @@
import { Minus, TrendingDown, TrendingUp } from "lucide-react";
import Link from "next/link";
import Link from "@/components/link";
import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card";
interface StatsCardProps {
+1 -1
View File
@@ -1,4 +1,4 @@
import Link from "next/link";
import Link from "@/components/link";
/** Shared clarity banner for dual ticket products (CMS desk vs help-center). */
export function TicketQueueBanner({
@@ -1,8 +1,8 @@
"use client";
import Link from "next/link";
import { useTranslations } from "next-intl";
import { DataTable } from "@/components/admin/data-table";
import Link from "@/components/link";
import { Badge } from "@/components/ui/badge";
import type { TicketInboxRow } from "@/lib/admin/ticket-inbox";
import type { DataTableColumn, PaginatedResult } from "@/types/common";