- Add comprehensive CSV import system with drag-and-drop upload and validation - Create UniversalTable component with advanced filtering, searching, and batch actions - Implement invoice management (view, edit, delete) with professional PDF export - Add client management with full CRUD operations - Set up authentication with NextAuth.js and email/password login - Configure database schema with users, clients, invoices, and invoice_items tables - Build responsive UI with shadcn/ui components and emerald branding - Add type-safe API layer with tRPC and Zod validation - Include proper error handling and user feedback with toast notifications - Set up development environment with Bun, TypeScript, and Tailwind CSS
31 lines
887 B
TypeScript
31 lines
887 B
TypeScript
import "server-only";
|
|
|
|
import { createHydrationHelpers } from "@trpc/react-query/rsc";
|
|
import { headers } from "next/headers";
|
|
import { cache } from "react";
|
|
|
|
import { createCaller, type AppRouter } from "~/server/api/root";
|
|
import { createTRPCContext } from "~/server/api/trpc";
|
|
import { createQueryClient } from "./query-client";
|
|
|
|
/**
|
|
* This wraps the `createTRPCContext` helper and provides the required context for the tRPC API when
|
|
* handling a tRPC call from a React Server Component.
|
|
*/
|
|
const createContext = cache(async () => {
|
|
const heads = new Headers(await headers());
|
|
heads.set("x-trpc-source", "rsc");
|
|
|
|
return createTRPCContext({
|
|
headers: heads,
|
|
});
|
|
});
|
|
|
|
const getQueryClient = cache(createQueryClient);
|
|
const caller = createCaller(createContext);
|
|
|
|
export const { trpc: api, HydrateClient } = createHydrationHelpers<AppRouter>(
|
|
caller,
|
|
getQueryClient,
|
|
);
|