PreRelease v2

This commit is contained in:
2026-03-28 23:46:45 +01:00
parent 6bf998a52a
commit 9993bd232f
39 changed files with 3964 additions and 1469 deletions

View File

@@ -1,5 +1,11 @@
import { redirect } from "next/navigation";
import { auth } from "@clerk/nextjs/server";
import { Metadata } from "next";
export const metadata: Metadata = {
title: "Contracts | LexiChain",
description: "Upload, manage, and analyze your financial contracts with LexiChain's AI.",
};
export default async function ContactsLayout({
children,

View File

@@ -1,11 +1,11 @@
"use client";
import { ContractUploadForm } from "@/components/views/dashboard/contract-upload-form";
import { EmptyContractsState } from "@/components/views/dashboard/empty-contracts-state";
import { ContractsList } from "@/components/views/dashboard/contracts-list";
import { ContactsHeader } from "@/components/views/dashboard/contacts-header";
import { ContractUploadForm } from "@/features/contracts/components/forms/contract-upload-form";
import { EmptyContractsState } from "@/features/contracts/components/list/empty-contracts-state";
import { ContractsList } from "@/features/contracts/components/list/contracts-list";
import { ContactsHeader } from "@/components/layout/contacts-header";
import { useState, useEffect } from "react";
import { getContracts } from "@/lib/actions/contract.action";
import { getContracts } from "@/features/contracts/api/contract.action";
import { Card } from "@/components/ui/card";
export default function ContactsPage() {

View File

@@ -19,13 +19,14 @@ import {
} from "lucide-react";
import { Button } from "@/components/ui/button";
import { Card } from "@/components/ui/card";
import { getStatsAction } from "@/lib/actions/stats.action";
import { checkDeadlineNotifications } from "@/lib/actions/notification.action";
import {
ContractStatusChart,
ContractTypeChart,
TrendChart,
} from "@/components/views/dashboard/charts";
import { getStatsAction } from "@/features/analytics/api/stats.action";
import { checkDeadlineNotifications } from "@/features/notifications/api/notification.action";
import dynamic from "next/dynamic";
// Dynamically import heavy charting libraries to dramatically improve initial load and rendering time
const ContractStatusChart = dynamic(() => import("@/features/analytics/components/charts").then(mod => mod.ContractStatusChart), { ssr: false, loading: () => <div className="h-full w-full animate-pulse bg-muted/30 rounded-lg"></div> });
const ContractTypeChart = dynamic(() => import("@/features/analytics/components/charts").then(mod => mod.ContractTypeChart), { ssr: false, loading: () => <div className="h-full w-full animate-pulse bg-muted/30 rounded-lg"></div> });
const TrendChart = dynamic(() => import("@/features/analytics/components/charts").then(mod => mod.TrendChart), { ssr: false, loading: () => <div className="h-full w-full animate-pulse bg-muted/30 rounded-lg"></div> });
interface DashboardStats {
totalContracts: number;

View File

@@ -1,6 +1,12 @@
import { auth } from "@clerk/nextjs/server";
import { redirect } from "next/navigation";
import { DashboardNavigation } from "@/components/views/dashboard/navigation";
import { DashboardNavigation } from "@/components/layout/navigation";
import { Metadata } from "next";
export const metadata: Metadata = {
title: "Dashboard | LexiChain Contract Intelligence",
description: "View and manage your AI-processed financial contracts, analytics, and metrics in real time.",
};
export default async function DashboardLayout({
children,