fix: add staleTime to job card expense, parts, and services queries; update job card general info and payments received components
This commit is contained in:
parent
6b356d2855
commit
05b55b5721
@ -44,6 +44,7 @@ export default function JobCardExpenseItemsPage({
|
|||||||
const { data, isLoading } = useQuery({
|
const { data, isLoading } = useQuery({
|
||||||
queryKey,
|
queryKey,
|
||||||
queryFn: () => api.jobCards.getExpenseItems(jobCardId),
|
queryFn: () => api.jobCards.getExpenseItems(jobCardId),
|
||||||
|
staleTime: 30_000,
|
||||||
})
|
})
|
||||||
|
|
||||||
const rows = (data as any)?.data ?? []
|
const rows = (data as any)?.data ?? []
|
||||||
|
|||||||
@ -1,21 +1,10 @@
|
|||||||
import { getServerApi } from '@garage/api/server'
|
|
||||||
import { JobCardGeneralInfo } from '@/modules/job-cards/job-card-general-info'
|
import { JobCardGeneralInfo } from '@/modules/job-cards/job-card-general-info'
|
||||||
import DashboardPage from '@/base/components/layout/dashboard/dashboard-page'
|
import DashboardPage from '@/base/components/layout/dashboard/dashboard-page'
|
||||||
import type { JobCardShowData } from '@garage/api'
|
|
||||||
|
|
||||||
export default async function JobCardDetailPage(props: { params: Promise<{ id: string }> }) {
|
|
||||||
const { id } = await props.params
|
|
||||||
const api = await getServerApi()
|
|
||||||
const response = await api.jobCards.show(id)
|
|
||||||
const data = response.data
|
|
||||||
|
|
||||||
if (!data) {
|
|
||||||
return <div className="text-muted-foreground">Job card not found.</div>
|
|
||||||
}
|
|
||||||
|
|
||||||
|
export default async function JobCardDetailPage() {
|
||||||
return (
|
return (
|
||||||
<DashboardPage header={null}>
|
<DashboardPage header={null}>
|
||||||
<JobCardGeneralInfo jobCard={data} />
|
<JobCardGeneralInfo />
|
||||||
</DashboardPage>
|
</DashboardPage>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -44,6 +44,7 @@ export default function JobCardPartsPage({
|
|||||||
const { data, isLoading } = useQuery({
|
const { data, isLoading } = useQuery({
|
||||||
queryKey,
|
queryKey,
|
||||||
queryFn: () => api.jobCards.getParts(jobCardId),
|
queryFn: () => api.jobCards.getParts(jobCardId),
|
||||||
|
staleTime: 30_000,
|
||||||
})
|
})
|
||||||
|
|
||||||
const rows = (data as any)?.data ?? []
|
const rows = (data as any)?.data ?? []
|
||||||
|
|||||||
@ -46,6 +46,7 @@ export default function JobCardServicesPage({
|
|||||||
const { data, isLoading } = useQuery({
|
const { data, isLoading } = useQuery({
|
||||||
queryKey,
|
queryKey,
|
||||||
queryFn: () => api.jobCards.getServices(jobCardId),
|
queryFn: () => api.jobCards.getServices(jobCardId),
|
||||||
|
staleTime: 30_000,
|
||||||
})
|
})
|
||||||
|
|
||||||
const rows = (data as any)?.data ?? []
|
const rows = (data as any)?.data ?? []
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { Geist_Mono, Inter } from "next/font/google"
|
import { Geist_Mono, Inter } from "next/font/google"
|
||||||
|
import NextTopLoader from "nextjs-toploader"
|
||||||
|
|
||||||
|
|
||||||
import { QueryProvider } from "@/shared/components/query-provider"
|
import { QueryProvider } from "@/shared/components/query-provider"
|
||||||
@ -33,6 +34,7 @@ export default function RootLayout({
|
|||||||
className={cn("antialiased", fontMono.variable, "font-sans", inter.variable)}
|
className={cn("antialiased", fontMono.variable, "font-sans", inter.variable)}
|
||||||
>
|
>
|
||||||
<body>
|
<body>
|
||||||
|
<NextTopLoader color="var(--primary)" height={3} showSpinner={false} />
|
||||||
<NuqsAdapter>
|
<NuqsAdapter>
|
||||||
<ThemeProvider>
|
<ThemeProvider>
|
||||||
<QueryProvider>{children}</QueryProvider>
|
<QueryProvider>{children}</QueryProvider>
|
||||||
|
|||||||
@ -109,6 +109,7 @@ export default function DashboardDetailsPageLayout({
|
|||||||
<Link
|
<Link
|
||||||
key={tab.href}
|
key={tab.href}
|
||||||
href={tab.href}
|
href={tab.href}
|
||||||
|
prefetch
|
||||||
className={cn(
|
className={cn(
|
||||||
"relative inline-flex items-center justify-center px-3 py-2 text-sm font-medium whitespace-nowrap transition-colors",
|
"relative inline-flex items-center justify-center px-3 py-2 text-sm font-medium whitespace-nowrap transition-colors",
|
||||||
"text-muted-foreground hover:text-foreground",
|
"text-muted-foreground hover:text-foreground",
|
||||||
|
|||||||
@ -63,24 +63,48 @@ const DEFAULT_VALUES: EstimateFormValues = {
|
|||||||
|
|
||||||
// ── Mapping helpers ──
|
// ── Mapping helpers ──
|
||||||
|
|
||||||
|
function customerLabel(c: any): string | undefined {
|
||||||
|
if (!c) return undefined
|
||||||
|
const name = [c.first_name, c.last_name].filter(Boolean).join(" ").trim()
|
||||||
|
return c.company_name || name || undefined
|
||||||
|
}
|
||||||
|
|
||||||
|
function vehicleLabel(v: any): string | undefined {
|
||||||
|
if (!v) return undefined
|
||||||
|
const core = [v.make, v.model, v.sub_model].filter(Boolean).join(" ")
|
||||||
|
const suffix = [v.year, v.license_plate].filter(Boolean).join(" - ")
|
||||||
|
if (core && suffix) return `${core} (${suffix})`
|
||||||
|
return core || suffix || undefined
|
||||||
|
}
|
||||||
|
|
||||||
function mapToFormValues(data: unknown): EstimateFormValues {
|
function mapToFormValues(data: unknown): EstimateFormValues {
|
||||||
const d = (data as any)?.data ?? data ?? {}
|
const d = (data as any)?.data ?? data ?? {}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title: d.title || "",
|
title: d.title || "",
|
||||||
customer: toRelation(d.customer_id, d.customer_name),
|
customer: toRelation(
|
||||||
vehicle: toRelation(d.vehicle_id, d.vehicle_name),
|
d.customer_id ?? d.customer?.id,
|
||||||
department: toRelation(d.department_id, d.department_name),
|
d.customer_name ?? customerLabel(d.customer),
|
||||||
insurance_type: toRelation(d.insurance_type_id, d.insurance_type_title ?? d.insurance_type_name ?? d.insurance_type?.title),
|
),
|
||||||
|
vehicle: toRelation(
|
||||||
|
d.vehicle_id ?? d.vehicle?.id,
|
||||||
|
d.vehicle_name ?? vehicleLabel(d.vehicle),
|
||||||
|
),
|
||||||
|
department: toRelation(
|
||||||
|
d.department_id ?? d.department?.id,
|
||||||
|
d.department_name ?? d.department?.name ?? d.department?.title,
|
||||||
|
),
|
||||||
|
insurance_type: toRelation(
|
||||||
|
d.insurance_type_id ?? d.insurance_type?.id,
|
||||||
|
d.insurance_type_title ?? d.insurance_type_name ?? d.insurance_type?.title ?? d.insurance_type?.name,
|
||||||
|
),
|
||||||
insurer: toRelation(
|
insurer: toRelation(
|
||||||
d.insurer_id,
|
d.insurer_id ?? d.insurer?.id,
|
||||||
d.insurer_name
|
d.insurer_name ?? customerLabel(d.insurer),
|
||||||
?? [d.insurer?.first_name, d.insurer?.last_name].filter(Boolean).join(" ")
|
|
||||||
?? d.insurer?.company_name,
|
|
||||||
),
|
),
|
||||||
service_writer: toRelation(
|
service_writer: toRelation(
|
||||||
d.service_writer_id,
|
d.service_writer_id ?? d.service_writer?.id,
|
||||||
d.service_writer_name ?? [d.service_writer?.first_name, d.service_writer?.last_name].filter(Boolean).join(" "),
|
d.service_writer_name ?? customerLabel(d.service_writer),
|
||||||
),
|
),
|
||||||
estimate_number: d.estimate_number || "",
|
estimate_number: d.estimate_number || "",
|
||||||
date: d.date ? d.date.split("T")[0] : "",
|
date: d.date ? d.date.split("T")[0] : "",
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
"use client"
|
||||||
|
|
||||||
import {
|
import {
|
||||||
ClipboardList,
|
ClipboardList,
|
||||||
Calendar,
|
Calendar,
|
||||||
@ -30,6 +32,7 @@ import PaymentReceivedPage from "@/app/(authenticated)/sales/payment-received/pa
|
|||||||
import JobCardPaymentsReceived from "./job-card-payments-received"
|
import JobCardPaymentsReceived from "./job-card-payments-received"
|
||||||
import { formatDate } from "@/shared/utils/formatters"
|
import { formatDate } from "@/shared/utils/formatters"
|
||||||
import type { JobCardShowData } from "@garage/api"
|
import type { JobCardShowData } from "@garage/api"
|
||||||
|
import { useJobCard } from "./job-card-context"
|
||||||
|
|
||||||
type JobCard = JobCardShowData
|
type JobCard = JobCardShowData
|
||||||
|
|
||||||
@ -67,7 +70,14 @@ const statusColorMap: Record<string, string> = {
|
|||||||
cancelled: "destructive",
|
cancelled: "destructive",
|
||||||
}
|
}
|
||||||
|
|
||||||
export function JobCardGeneralInfo({ jobCard }: { jobCard: JobCard }) {
|
export function JobCardGeneralInfo({ jobCard: jobCardProp }: { jobCard?: JobCard } = {}) {
|
||||||
|
const jobCardFromContext = useJobCard()
|
||||||
|
const jobCard = (jobCardProp ?? jobCardFromContext) as JobCard
|
||||||
|
|
||||||
|
if (!jobCard) {
|
||||||
|
return <div className="text-muted-foreground">Job card not found.</div>
|
||||||
|
}
|
||||||
|
|
||||||
const formatStatus = (status?: string) => {
|
const formatStatus = (status?: string) => {
|
||||||
if (!status) return null
|
if (!status) return null
|
||||||
return status
|
return status
|
||||||
|
|||||||
@ -17,12 +17,20 @@ import { Collapsible, CollapsibleContent, CollapsibleTrigger } from "@/shared/co
|
|||||||
import { Button } from "@/shared/components/ui/button"
|
import { Button } from "@/shared/components/ui/button"
|
||||||
import { useJobCard } from "./job-card-context"
|
import { useJobCard } from "./job-card-context"
|
||||||
import { formatDate, formatCurrency } from "@/shared/utils/formatters"
|
import { formatDate, formatCurrency } from "@/shared/utils/formatters"
|
||||||
|
import { useState } from "react"
|
||||||
|
|
||||||
export default function JobCardPaymentsReceived() {
|
export default function JobCardPaymentsReceived() {
|
||||||
const jobCard = useJobCard()
|
const jobCard = useJobCard()
|
||||||
|
const [hasOpened, setHasOpened] = useState(false)
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Collapsible defaultOpen={false} className="group/collapsible">
|
<Collapsible
|
||||||
|
defaultOpen={false}
|
||||||
|
className="group/collapsible"
|
||||||
|
onOpenChange={(open) => {
|
||||||
|
if (open) setHasOpened(true)
|
||||||
|
}}
|
||||||
|
>
|
||||||
<Card>
|
<Card>
|
||||||
<CardHeader>
|
<CardHeader>
|
||||||
<div className="flex items-center justify-between">
|
<div className="flex items-center justify-between">
|
||||||
@ -36,6 +44,7 @@ export default function JobCardPaymentsReceived() {
|
|||||||
</CardHeader>
|
</CardHeader>
|
||||||
<CollapsibleContent>
|
<CollapsibleContent>
|
||||||
<CardContent className="pt-0">
|
<CardContent className="pt-0">
|
||||||
|
{hasOpened && (
|
||||||
<CrudResource<PaymentReceivedClient>
|
<CrudResource<PaymentReceivedClient>
|
||||||
extraParams={{ job_card_id: jobCard?.id }}
|
extraParams={{ job_card_id: jobCard?.id }}
|
||||||
routeKey={PAYMENT_RECEIVED_ROUTES.INDEX}
|
routeKey={PAYMENT_RECEIVED_ROUTES.INDEX}
|
||||||
@ -48,6 +57,8 @@ export default function JobCardPaymentsReceived() {
|
|||||||
resourceId={resourceId}
|
resourceId={resourceId}
|
||||||
defaultJobCard={{ id: jobCard?.id, title: jobCard?.title }}
|
defaultJobCard={{ id: jobCard?.id, title: jobCard?.title }}
|
||||||
invoiceCustomer={jobCard?.customer as any}
|
invoiceCustomer={jobCard?.customer as any}
|
||||||
|
lockJobCard
|
||||||
|
lockCustomer
|
||||||
onSuccess={invalidateQuery}
|
onSuccess={invalidateQuery}
|
||||||
/>
|
/>
|
||||||
)}
|
)}
|
||||||
@ -127,6 +138,7 @@ export default function JobCardPaymentsReceived() {
|
|||||||
actionsColumn(),
|
actionsColumn(),
|
||||||
]}
|
]}
|
||||||
/>
|
/>
|
||||||
|
)}
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</CollapsibleContent>
|
</CollapsibleContent>
|
||||||
</Card>
|
</Card>
|
||||||
|
|||||||
@ -5,7 +5,8 @@ import { AlertTriangle, Plus, Save } from "lucide-react"
|
|||||||
|
|
||||||
import { Button } from "@/shared/components/ui/button"
|
import { Button } from "@/shared/components/ui/button"
|
||||||
import { Alert, AlertTitle } from "@/shared/components/ui/alert"
|
import { Alert, AlertTitle } from "@/shared/components/ui/alert"
|
||||||
import { FieldGroup } from "@/shared/components/ui/field"
|
import { Field, FieldGroup, FieldLabel } from "@/shared/components/ui/field"
|
||||||
|
import { Input } from "@/shared/components/ui/input"
|
||||||
import {
|
import {
|
||||||
Rhform,
|
Rhform,
|
||||||
RhfTextField,
|
RhfTextField,
|
||||||
@ -36,6 +37,8 @@ export type PaymentReceivedFormProps = {
|
|||||||
invoiceId?: string | null
|
invoiceId?: string | null
|
||||||
invoiceCustomer?: { id?: number | null; first_name?: string | null; last_name?: string | null } | null
|
invoiceCustomer?: { id?: number | null; first_name?: string | null; last_name?: string | null } | null
|
||||||
invoiceAmount?: number | string | null
|
invoiceAmount?: number | string | null
|
||||||
|
lockJobCard?: boolean
|
||||||
|
lockCustomer?: boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
// ── Default values ──
|
// ── Default values ──
|
||||||
@ -90,27 +93,33 @@ const STORE_OBJECT = { getOptionValue: (o: any) => o, getOptionLabel: (o: any) =
|
|||||||
|
|
||||||
// ── Component ──
|
// ── Component ──
|
||||||
|
|
||||||
export function PaymentReceivedForm({ resourceId, initialData, onSuccess, defaultJobCard, invoiceId, invoiceCustomer, invoiceAmount }: PaymentReceivedFormProps) {
|
export function PaymentReceivedForm({ resourceId, initialData, onSuccess, defaultJobCard, invoiceId, invoiceCustomer, invoiceAmount, lockJobCard, lockCustomer }: PaymentReceivedFormProps) {
|
||||||
const api = useAuthApi()
|
const api = useAuthApi()
|
||||||
|
|
||||||
|
const isJobCardLocked = !resourceId && (lockJobCard ?? !!defaultJobCard?.id)
|
||||||
|
const isCustomerLocked = !resourceId && (lockCustomer ?? !!invoiceCustomer?.id)
|
||||||
|
|
||||||
|
const customerLabel = invoiceCustomer?.first_name
|
||||||
|
? `${invoiceCustomer.first_name} ${invoiceCustomer.last_name || ""}`.trim()
|
||||||
|
: (invoiceCustomer as any)?.company_name || (invoiceCustomer as any)?.name || ""
|
||||||
|
|
||||||
const resolvedInitialData = useMemo(() => {
|
const resolvedInitialData = useMemo(() => {
|
||||||
const base: any = { ...(initialData as any) }
|
const base: any = { ...(initialData as any) }
|
||||||
if (!resourceId) {
|
if (!resourceId) {
|
||||||
if (defaultJobCard?.id != null) {
|
if (defaultJobCard?.id != null) {
|
||||||
base.job_card = toRelation(defaultJobCard.id, defaultJobCard.title ?? undefined)
|
base.job_card_id = defaultJobCard.id
|
||||||
|
base.job_card_name = defaultJobCard.title ?? undefined
|
||||||
}
|
}
|
||||||
if (invoiceCustomer?.id != null) {
|
if (invoiceCustomer?.id != null) {
|
||||||
const customerLabel = invoiceCustomer.first_name
|
base.customer_id = invoiceCustomer.id
|
||||||
? `${invoiceCustomer.first_name} ${invoiceCustomer.last_name || ""}`.trim()
|
base.customer_name = customerLabel
|
||||||
: (invoiceCustomer as any).company_name || (invoiceCustomer as any).name || undefined
|
|
||||||
base.customer = toRelation(invoiceCustomer.id, customerLabel)
|
|
||||||
}
|
}
|
||||||
if (invoiceAmount != null && invoiceAmount !== "") {
|
if (invoiceAmount != null && invoiceAmount !== "") {
|
||||||
base.amount_received = Number(invoiceAmount)
|
base.amount_received = Number(invoiceAmount)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Object.keys(base).length ? base : initialData
|
return Object.keys(base).length ? base : initialData
|
||||||
}, [resourceId, defaultJobCard, initialData, invoiceCustomer, invoiceAmount])
|
}, [resourceId, defaultJobCard, initialData, invoiceCustomer, invoiceAmount, customerLabel])
|
||||||
|
|
||||||
const { form, isEditing } = useResourceForm<PaymentReceivedFormValues, any>({
|
const { form, isEditing } = useResourceForm<PaymentReceivedFormValues, any>({
|
||||||
schema: paymentReceivedFormSchema,
|
schema: paymentReceivedFormSchema,
|
||||||
@ -153,33 +162,49 @@ export function PaymentReceivedForm({ resourceId, initialData, onSuccess, defaul
|
|||||||
|
|
||||||
<FieldGroup>
|
<FieldGroup>
|
||||||
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
||||||
<RhfAsyncSelectField
|
{isCustomerLocked ? (
|
||||||
name="customer"
|
<Field>
|
||||||
label="Customer"
|
<FieldLabel>
|
||||||
placeholder="Select customer"
|
Customer<span className="text-destructive ms-0.5">*</span>
|
||||||
required
|
</FieldLabel>
|
||||||
queryKey={[CUSTOMER_ROUTES.INDEX]}
|
<Input value={customerLabel} readOnly disabled />
|
||||||
listFn={() => api.customers.list()}
|
</Field>
|
||||||
mapOption={(item: any) => ({
|
) : (
|
||||||
value: String(item.id),
|
<RhfAsyncSelectField
|
||||||
label: item.first_name
|
name="customer"
|
||||||
? `${item.first_name} ${item.last_name || ""}`.trim()
|
label="Customer"
|
||||||
: item.name || `#${item.id}`,
|
placeholder="Select customer"
|
||||||
})}
|
required
|
||||||
{...STORE_OBJECT}
|
queryKey={[CUSTOMER_ROUTES.INDEX]}
|
||||||
/>
|
listFn={() => api.customers.list()}
|
||||||
<RhfAsyncSelectField
|
mapOption={(item: any) => ({
|
||||||
name="job_card"
|
value: String(item.id),
|
||||||
label="Job Card"
|
label: item.first_name
|
||||||
placeholder="Select job card"
|
? `${item.first_name} ${item.last_name || ""}`.trim()
|
||||||
queryKey={[JOB_CARD_ROUTES.INDEX]}
|
: item.name || `#${item.id}`,
|
||||||
listFn={() => api.jobCards.list()}
|
})}
|
||||||
mapOption={(item: any) => ({
|
{...STORE_OBJECT}
|
||||||
value: String(item.id),
|
/>
|
||||||
label: item.title,
|
)}
|
||||||
})}
|
{isJobCardLocked ? (
|
||||||
{...STORE_OBJECT}
|
<Field>
|
||||||
/>
|
<FieldLabel>Job Card</FieldLabel>
|
||||||
|
<Input value={defaultJobCard?.title ?? ""} readOnly disabled />
|
||||||
|
</Field>
|
||||||
|
) : (
|
||||||
|
<RhfAsyncSelectField
|
||||||
|
name="job_card"
|
||||||
|
label="Job Card"
|
||||||
|
placeholder="Select job card"
|
||||||
|
queryKey={[JOB_CARD_ROUTES.INDEX]}
|
||||||
|
listFn={() => api.jobCards.list()}
|
||||||
|
mapOption={(item: any) => ({
|
||||||
|
value: String(item.id),
|
||||||
|
label: item.title,
|
||||||
|
})}
|
||||||
|
{...STORE_OBJECT}
|
||||||
|
/>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
<div className="grid grid-cols-1 gap-4 sm:grid-cols-2">
|
||||||
|
|||||||
@ -31,6 +31,7 @@
|
|||||||
"lucide-react": "^0.577.0",
|
"lucide-react": "^0.577.0",
|
||||||
"next": "16.1.7",
|
"next": "16.1.7",
|
||||||
"next-themes": "^0.4.6",
|
"next-themes": "^0.4.6",
|
||||||
|
"nextjs-toploader": "^3.9.17",
|
||||||
"nuqs": "^2.8.9",
|
"nuqs": "^2.8.9",
|
||||||
"object-to-formdata": "^4.5.1",
|
"object-to-formdata": "^4.5.1",
|
||||||
"radix-ui": "^1.4.3",
|
"radix-ui": "^1.4.3",
|
||||||
|
|||||||
76
pnpm-lock.yaml
generated
76
pnpm-lock.yaml
generated
@ -62,6 +62,9 @@ importers:
|
|||||||
next-themes:
|
next-themes:
|
||||||
specifier: ^0.4.6
|
specifier: ^0.4.6
|
||||||
version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
version: 0.4.6(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||||
|
nextjs-toploader:
|
||||||
|
specifier: ^3.9.17
|
||||||
|
version: 3.9.17(next@16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||||
nuqs:
|
nuqs:
|
||||||
specifier: ^2.8.9
|
specifier: ^2.8.9
|
||||||
version: 2.8.9(next@16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)
|
version: 2.8.9(next@16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4)
|
||||||
@ -3707,6 +3710,13 @@ packages:
|
|||||||
sass:
|
sass:
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
|
nextjs-toploader@3.9.17:
|
||||||
|
resolution: {integrity: sha512-9OF0KSSLtoSAuNg2LZ3aTl4hR9mBDj5L9s9DZiFCbMlXehyICGjkIz5dVGzuATU2bheJZoBdFgq9w07AKSuQQw==}
|
||||||
|
peerDependencies:
|
||||||
|
next: '>= 6.0.0'
|
||||||
|
react: '>= 16.0.0'
|
||||||
|
react-dom: '>= 16.0.0'
|
||||||
|
|
||||||
node-domexception@1.0.0:
|
node-domexception@1.0.0:
|
||||||
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==}
|
||||||
engines: {node: '>=10.5.0'}
|
engines: {node: '>=10.5.0'}
|
||||||
@ -3727,6 +3737,9 @@ packages:
|
|||||||
resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
|
resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
|
||||||
engines: {node: '>=18'}
|
engines: {node: '>=18'}
|
||||||
|
|
||||||
|
nprogress@0.2.0:
|
||||||
|
resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==}
|
||||||
|
|
||||||
nuqs@2.8.9:
|
nuqs@2.8.9:
|
||||||
resolution: {integrity: sha512-8ou6AEwsxMWSYo2qkfZtYFVzngwbKmg4c00HVxC1fF6CEJv3Fwm6eoZmfVPALB+vw8Udo7KL5uy96PFcYe1BIQ==}
|
resolution: {integrity: sha512-8ou6AEwsxMWSYo2qkfZtYFVzngwbKmg4c00HVxC1fF6CEJv3Fwm6eoZmfVPALB+vw8Udo7KL5uy96PFcYe1BIQ==}
|
||||||
peerDependencies:
|
peerDependencies:
|
||||||
@ -4921,7 +4934,7 @@ snapshots:
|
|||||||
'@babel/types': 7.29.0
|
'@babel/types': 7.29.0
|
||||||
'@jridgewell/remapping': 2.3.5
|
'@jridgewell/remapping': 2.3.5
|
||||||
convert-source-map: 2.0.0
|
convert-source-map: 2.0.0
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
gensync: 1.0.0-beta.2
|
gensync: 1.0.0-beta.2
|
||||||
json5: 2.2.3
|
json5: 2.2.3
|
||||||
semver: 6.3.1
|
semver: 6.3.1
|
||||||
@ -5079,7 +5092,7 @@ snapshots:
|
|||||||
'@babel/parser': 7.29.2
|
'@babel/parser': 7.29.2
|
||||||
'@babel/template': 7.28.6
|
'@babel/template': 7.28.6
|
||||||
'@babel/types': 7.29.0
|
'@babel/types': 7.29.0
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
|
|
||||||
@ -5189,7 +5202,7 @@ snapshots:
|
|||||||
'@eslint/config-array@0.21.1':
|
'@eslint/config-array@0.21.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint/object-schema': 2.1.7
|
'@eslint/object-schema': 2.1.7
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
minimatch: 3.1.2
|
minimatch: 3.1.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@ -5197,7 +5210,7 @@ snapshots:
|
|||||||
'@eslint/config-array@0.21.2':
|
'@eslint/config-array@0.21.2':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@eslint/object-schema': 2.1.7
|
'@eslint/object-schema': 2.1.7
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
minimatch: 3.1.5
|
minimatch: 3.1.5
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@ -5213,7 +5226,7 @@ snapshots:
|
|||||||
'@eslint/eslintrc@3.3.1':
|
'@eslint/eslintrc@3.3.1':
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv: 6.12.6
|
ajv: 6.12.6
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
espree: 10.4.0
|
espree: 10.4.0
|
||||||
globals: 14.0.0
|
globals: 14.0.0
|
||||||
ignore: 5.3.2
|
ignore: 5.3.2
|
||||||
@ -5227,7 +5240,7 @@ snapshots:
|
|||||||
'@eslint/eslintrc@3.3.5':
|
'@eslint/eslintrc@3.3.5':
|
||||||
dependencies:
|
dependencies:
|
||||||
ajv: 6.14.0
|
ajv: 6.14.0
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
espree: 10.4.0
|
espree: 10.4.0
|
||||||
globals: 14.0.0
|
globals: 14.0.0
|
||||||
ignore: 5.3.2
|
ignore: 5.3.2
|
||||||
@ -6557,7 +6570,7 @@ snapshots:
|
|||||||
'@typescript-eslint/types': 8.50.0
|
'@typescript-eslint/types': 8.50.0
|
||||||
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
|
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
|
||||||
'@typescript-eslint/visitor-keys': 8.50.0
|
'@typescript-eslint/visitor-keys': 8.50.0
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
typescript: 5.9.2
|
typescript: 5.9.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@ -6569,7 +6582,7 @@ snapshots:
|
|||||||
'@typescript-eslint/types': 8.50.0
|
'@typescript-eslint/types': 8.50.0
|
||||||
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
|
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/visitor-keys': 8.50.0
|
'@typescript-eslint/visitor-keys': 8.50.0
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
eslint: 9.39.4(jiti@2.6.1)
|
eslint: 9.39.4(jiti@2.6.1)
|
||||||
typescript: 5.9.3
|
typescript: 5.9.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
@ -6579,7 +6592,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.2)
|
'@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.2)
|
||||||
'@typescript-eslint/types': 8.50.0
|
'@typescript-eslint/types': 8.50.0
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
typescript: 5.9.2
|
typescript: 5.9.2
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@ -6588,7 +6601,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
'@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3)
|
'@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/types': 8.50.0
|
'@typescript-eslint/types': 8.50.0
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
typescript: 5.9.3
|
typescript: 5.9.3
|
||||||
transitivePeerDependencies:
|
transitivePeerDependencies:
|
||||||
- supports-color
|
- supports-color
|
||||||
@ -6611,7 +6624,7 @@ snapshots:
|
|||||||
'@typescript-eslint/types': 8.50.0
|
'@typescript-eslint/types': 8.50.0
|
||||||
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
|
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.2)
|
||||||
'@typescript-eslint/utils': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2)
|
'@typescript-eslint/utils': 8.50.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.2)
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
eslint: 9.39.1(jiti@2.6.1)
|
eslint: 9.39.1(jiti@2.6.1)
|
||||||
ts-api-utils: 2.1.0(typescript@5.9.2)
|
ts-api-utils: 2.1.0(typescript@5.9.2)
|
||||||
typescript: 5.9.2
|
typescript: 5.9.2
|
||||||
@ -6623,7 +6636,7 @@ snapshots:
|
|||||||
'@typescript-eslint/types': 8.50.0
|
'@typescript-eslint/types': 8.50.0
|
||||||
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
|
'@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/utils': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
|
'@typescript-eslint/utils': 8.50.0(eslint@9.39.4(jiti@2.6.1))(typescript@5.9.3)
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
eslint: 9.39.4(jiti@2.6.1)
|
eslint: 9.39.4(jiti@2.6.1)
|
||||||
ts-api-utils: 2.1.0(typescript@5.9.3)
|
ts-api-utils: 2.1.0(typescript@5.9.3)
|
||||||
typescript: 5.9.3
|
typescript: 5.9.3
|
||||||
@ -6638,7 +6651,7 @@ snapshots:
|
|||||||
'@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.2)
|
'@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.2)
|
||||||
'@typescript-eslint/types': 8.50.0
|
'@typescript-eslint/types': 8.50.0
|
||||||
'@typescript-eslint/visitor-keys': 8.50.0
|
'@typescript-eslint/visitor-keys': 8.50.0
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
minimatch: 9.0.5
|
minimatch: 9.0.5
|
||||||
semver: 7.7.3
|
semver: 7.7.3
|
||||||
tinyglobby: 0.2.15
|
tinyglobby: 0.2.15
|
||||||
@ -6653,7 +6666,7 @@ snapshots:
|
|||||||
'@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3)
|
'@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3)
|
||||||
'@typescript-eslint/types': 8.50.0
|
'@typescript-eslint/types': 8.50.0
|
||||||
'@typescript-eslint/visitor-keys': 8.50.0
|
'@typescript-eslint/visitor-keys': 8.50.0
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
minimatch: 9.0.5
|
minimatch: 9.0.5
|
||||||
semver: 7.7.3
|
semver: 7.7.3
|
||||||
tinyglobby: 0.2.15
|
tinyglobby: 0.2.15
|
||||||
@ -6936,7 +6949,7 @@ snapshots:
|
|||||||
dependencies:
|
dependencies:
|
||||||
bytes: 3.1.2
|
bytes: 3.1.2
|
||||||
content-type: 1.0.5
|
content-type: 1.0.5
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
http-errors: 2.0.1
|
http-errors: 2.0.1
|
||||||
iconv-lite: 0.7.2
|
iconv-lite: 0.7.2
|
||||||
on-finished: 2.4.1
|
on-finished: 2.4.1
|
||||||
@ -7529,7 +7542,7 @@ snapshots:
|
|||||||
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)):
|
eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@9.39.4(jiti@2.6.1)):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nolyfill/is-core-module': 1.0.39
|
'@nolyfill/is-core-module': 1.0.39
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
eslint: 9.39.4(jiti@2.6.1)
|
eslint: 9.39.4(jiti@2.6.1)
|
||||||
get-tsconfig: 4.13.7
|
get-tsconfig: 4.13.7
|
||||||
is-bun-module: 2.0.0
|
is-bun-module: 2.0.0
|
||||||
@ -7693,7 +7706,7 @@ snapshots:
|
|||||||
ajv: 6.12.6
|
ajv: 6.12.6
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
cross-spawn: 7.0.6
|
cross-spawn: 7.0.6
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
escape-string-regexp: 4.0.0
|
escape-string-regexp: 4.0.0
|
||||||
eslint-scope: 8.4.0
|
eslint-scope: 8.4.0
|
||||||
eslint-visitor-keys: 4.2.1
|
eslint-visitor-keys: 4.2.1
|
||||||
@ -7734,7 +7747,7 @@ snapshots:
|
|||||||
ajv: 6.14.0
|
ajv: 6.14.0
|
||||||
chalk: 4.1.2
|
chalk: 4.1.2
|
||||||
cross-spawn: 7.0.6
|
cross-spawn: 7.0.6
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
escape-string-regexp: 4.0.0
|
escape-string-regexp: 4.0.0
|
||||||
eslint-scope: 8.4.0
|
eslint-scope: 8.4.0
|
||||||
eslint-visitor-keys: 4.2.1
|
eslint-visitor-keys: 4.2.1
|
||||||
@ -7846,7 +7859,7 @@ snapshots:
|
|||||||
content-type: 1.0.5
|
content-type: 1.0.5
|
||||||
cookie: 0.7.2
|
cookie: 0.7.2
|
||||||
cookie-signature: 1.2.2
|
cookie-signature: 1.2.2
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
depd: 2.0.0
|
depd: 2.0.0
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
@ -7944,7 +7957,7 @@ snapshots:
|
|||||||
|
|
||||||
finalhandler@2.1.1:
|
finalhandler@2.1.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
on-finished: 2.4.1
|
on-finished: 2.4.1
|
||||||
@ -8148,13 +8161,6 @@ snapshots:
|
|||||||
jsprim: 2.0.2
|
jsprim: 2.0.2
|
||||||
sshpk: 1.18.0
|
sshpk: 1.18.0
|
||||||
|
|
||||||
https-proxy-agent@7.0.6:
|
|
||||||
dependencies:
|
|
||||||
agent-base: 7.1.4
|
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
|
||||||
transitivePeerDependencies:
|
|
||||||
- supports-color
|
|
||||||
|
|
||||||
https-proxy-agent@7.0.6(supports-color@10.2.2):
|
https-proxy-agent@7.0.6(supports-color@10.2.2):
|
||||||
dependencies:
|
dependencies:
|
||||||
agent-base: 7.1.4
|
agent-base: 7.1.4
|
||||||
@ -8696,6 +8702,14 @@ snapshots:
|
|||||||
- '@babel/core'
|
- '@babel/core'
|
||||||
- babel-plugin-macros
|
- babel-plugin-macros
|
||||||
|
|
||||||
|
nextjs-toploader@3.9.17(next@16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react-dom@19.2.4(react@19.2.4))(react@19.2.4):
|
||||||
|
dependencies:
|
||||||
|
next: 16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4)
|
||||||
|
nprogress: 0.2.0
|
||||||
|
prop-types: 15.8.1
|
||||||
|
react: 19.2.4
|
||||||
|
react-dom: 19.2.4(react@19.2.4)
|
||||||
|
|
||||||
node-domexception@1.0.0: {}
|
node-domexception@1.0.0: {}
|
||||||
|
|
||||||
node-fetch@3.3.2:
|
node-fetch@3.3.2:
|
||||||
@ -8715,6 +8729,8 @@ snapshots:
|
|||||||
path-key: 4.0.0
|
path-key: 4.0.0
|
||||||
unicorn-magic: 0.3.0
|
unicorn-magic: 0.3.0
|
||||||
|
|
||||||
|
nprogress@0.2.0: {}
|
||||||
|
|
||||||
nuqs@2.8.9(next@16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4):
|
nuqs@2.8.9(next@16.1.7(@babel/core@7.29.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4))(react@19.2.4):
|
||||||
dependencies:
|
dependencies:
|
||||||
'@standard-schema/spec': 1.0.0
|
'@standard-schema/spec': 1.0.0
|
||||||
@ -9244,7 +9260,7 @@ snapshots:
|
|||||||
|
|
||||||
router@2.2.0:
|
router@2.2.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
depd: 2.0.0
|
depd: 2.0.0
|
||||||
is-promise: 4.0.0
|
is-promise: 4.0.0
|
||||||
parseurl: 1.3.3
|
parseurl: 1.3.3
|
||||||
@ -9295,7 +9311,7 @@ snapshots:
|
|||||||
|
|
||||||
send@1.2.1:
|
send@1.2.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
debug: 4.4.3(supports-color@8.1.1)
|
debug: 4.4.3(supports-color@10.2.2)
|
||||||
encodeurl: 2.0.0
|
encodeurl: 2.0.0
|
||||||
escape-html: 1.0.3
|
escape-html: 1.0.3
|
||||||
etag: 1.8.1
|
etag: 1.8.1
|
||||||
@ -9363,7 +9379,7 @@ snapshots:
|
|||||||
fast-glob: 3.3.3
|
fast-glob: 3.3.3
|
||||||
fs-extra: 11.3.4
|
fs-extra: 11.3.4
|
||||||
fuzzysort: 3.1.0
|
fuzzysort: 3.1.0
|
||||||
https-proxy-agent: 7.0.6
|
https-proxy-agent: 7.0.6(supports-color@10.2.2)
|
||||||
kleur: 4.1.5
|
kleur: 4.1.5
|
||||||
msw: 2.12.14(@types/node@25.5.0)(typescript@5.9.3)
|
msw: 2.12.14(@types/node@25.5.0)(typescript@5.9.3)
|
||||||
node-fetch: 3.3.2
|
node-fetch: 3.3.2
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user