diff --git a/src/app/claims/layout.tsx b/src/app/claims/layout.tsx new file mode 100644 index 0000000..5aacc26 --- /dev/null +++ b/src/app/claims/layout.tsx @@ -0,0 +1,14 @@ +import type { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Claims | Parashield', + description: 'Submit and manage your insurance claims on Parashield. Track claim status and receive automatic payouts.', +}; + +export default function ClaimsLayout({ + children, +}: { + children: React.ReactNode; +}) { + return children; +} diff --git a/src/app/dashboard/layout.tsx b/src/app/dashboard/layout.tsx new file mode 100644 index 0000000..9dbc0e8 --- /dev/null +++ b/src/app/dashboard/layout.tsx @@ -0,0 +1,14 @@ +import type { Metadata } from 'next'; + +export const metadata: Metadata = { + title: 'Dashboard | Parashield', + description: 'View your active insurance policies, track coverage, and monitor claims status on Parashield.', +}; + +export default function DashboardLayout({ + children, +}: { + children: React.ReactNode; +}) { + return children; +} diff --git a/src/app/dashboard/page.tsx b/src/app/dashboard/page.tsx index 53dedf5..c3fcb1e 100644 --- a/src/app/dashboard/page.tsx +++ b/src/app/dashboard/page.tsx @@ -1,6 +1,6 @@ "use client"; -import { useEffect, useState, useCallback } from "react"; +import { useEffect, useState, useCallback, useMemo } from "react"; import { useWallet } from "@/hooks/useWallet"; import { usePolicies } from "@/hooks/usePolicies"; import { fetchUserClaims } from "@/lib/api"; @@ -83,9 +83,9 @@ export default function DashboardPage() { ); } - const active = policies.filter((p) => p.status === "Active"); - const totalCov = active.reduce((sum, p) => sum + safeBigInt(p.coverage), 0n); - const totalPaid = active.reduce((sum, p) => sum + safeBigInt(p.premiumPaid), 0n); + const active = useMemo(() => policies.filter((p) => p.status === "Active"), [policies]); + const totalCov = useMemo(() => active.reduce((sum, p) => sum + safeBigInt(p.coverage), 0n), [active]); + const totalPaid = useMemo(() => active.reduce((sum, p) => sum + safeBigInt(p.premiumPaid), 0n), [active]); return (
diff --git a/src/components/ConnectWalletPrompt.tsx b/src/components/ConnectWalletPrompt.tsx index 6fdb156..4c13407 100644 --- a/src/components/ConnectWalletPrompt.tsx +++ b/src/components/ConnectWalletPrompt.tsx @@ -32,13 +32,16 @@ export function ConnectWalletPrompt({ message = 'Connect your wallet to continue )} - +
+ +
); } diff --git a/src/components/SearchBar.tsx b/src/components/SearchBar.tsx index 6c3d83f..750c9c2 100644 --- a/src/components/SearchBar.tsx +++ b/src/components/SearchBar.tsx @@ -1,6 +1,6 @@ 'use client'; -import { useState, useEffect, useRef } from 'react'; +import { useState, useEffect } from 'react'; import { useDebounce } from '@/hooks/useDebounce'; interface SearchBarProps { @@ -17,14 +17,9 @@ export function SearchBar({ const [query, setQuery] = useState(''); const debouncedQuery = useDebounce(query, 250); - const onSearchRef = useRef(onSearch); useEffect(() => { - onSearchRef.current = onSearch; - }); - - useEffect(() => { - onSearchRef.current(debouncedQuery); - }, [debouncedQuery]); + onSearch(debouncedQuery); + }, [debouncedQuery, onSearch]); return (