Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
144 changes: 93 additions & 51 deletions bun.lock

Large diffs are not rendered by default.

2 changes: 0 additions & 2 deletions env.sample

This file was deleted.

9 changes: 8 additions & 1 deletion next.config.ts
Original file line number Diff line number Diff line change
@@ -1,9 +1,16 @@
import type { NextConfig } from "next";

const Year = 1000 * 60 * 60 * 24 * 365;
const nextConfig: NextConfig = {
/* config options here */

cacheComponents: true,
cacheLife: {
nuncaSeRevalida: {
stale: Year, // 1 año
expire: Year , // 1 poco menos de 1año
revalidate: Year , // 1 año
}
},
images: {
formats: ["image/avif", "image/webp"],
},
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"react": "19.2.4",
"react-dom": "19.2.4",
"satori": "^0.25.0",
"shadcn": "^3.8.5",
"shadcn": "^4.0.8",
"sharp": "^0.34.5",
"tailwind-merge": "^3.5.0",
"tw-animate-css": "^1.4.0"
Expand Down
29 changes: 13 additions & 16 deletions src/app/@sidebar/(.)edit/[idproduct]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,21 +1,18 @@
import EditProduct from "@/components/edit-product";
import { getProductIds } from "@/server/queries/products";
export type PageParams = {
idproduct: string;
};
// import { getProductIds } from "@/server/queries/getProductIds";

export async function generateStaticParams() {
const products = await getProductIds(10);
return products.map((product) => ({
idproduct: product.id.toString(),
}));
}

// export async function generateStaticParams() {
// const products = await getProductIds(10);
// return products.map((product) => ({
// idproduct: product.id.toString(),
// }));
// }

export default async function Page({
params,
}: {
params: Promise<PageParams>;
}) {
const { idproduct } = await params;
return <EditProduct idproduct={idproduct} />;
params,
}:PageProps<"/edit/[idproduct]">) {
const { idproduct } = await params;

return <EditProduct idproduct={parseInt(idproduct)} />;
}
7 changes: 2 additions & 5 deletions src/app/@sidebar/(.)edit/layout.tsx
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
import type { ReactNode } from "react";
import CloseButton from "@/components/edit-product/close-button";

interface LayoutProps {
children: ReactNode;
}

export default function LayoutEdit({ children }: LayoutProps) {

export default function LayoutEdit({ children }: LayoutProps<"/edit">) {
return (
<div className="fixed sidebar w-full max-w-md border-r border-border p-6 overflow-y-auto inset-y-0 overflow-x-hidden z-50 h-screen bg-white shadow-lg">
<CloseButton />
Expand Down
8 changes: 8 additions & 0 deletions src/app/cambiar-page/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
export default function Page() {
return (

<main>
<h1>Es pagina solo para volver atras</h1>
</main>
);
}
27 changes: 11 additions & 16 deletions src/app/edit/[idproduct]/page.tsx
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
import { getProductIds } from "@/server/queries/products";
export type PageParams = {
idproduct: string;
};
// import { getProductIds } from "@/server/queries/getProductIds";

export async function generateStaticParams() {
const products = await getProductIds(10);
return products.map((product) => ({
idproduct: product.id.toString(),
}));
}
// export async function generateStaticParams() {
// const products = await getProductIds(10);
// return products.map((product) => ({
// idproduct: product.id.toString(),
// }));
// }

export default async function ProductPage({
params,
}: {
params: Promise<PageParams>;
}) {
const { idproduct } = await params;
return <div>Edit Product {idproduct}</div>;
// params,
}: PageProps<"/edit/[idproduct]">) {
// const { idproduct } = await params;
return <div>Edit Product ejemplo eliminando ids</div>;
}
33 changes: 28 additions & 5 deletions src/app/layout.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import type { Metadata } from "next";
import { Geist, Geist_Mono, Inter } from "next/font/google";
import "./globals.css";
import { TooltipProvider } from "@/components/ui/tooltip"
import Link from "next/link";
const inter = Inter({ subsets: ["latin"], variable: "--font-sans" });

const geistSans = Geist({
Expand All @@ -22,17 +23,39 @@ export const metadata: Metadata = {
export default function RootLayout({
children,
sidebar,
}: Readonly<{
children: React.ReactNode;
sidebar: React.ReactNode;
}>) {
}: Readonly<LayoutProps<"/">>) {
return (
<html lang="en" className={inter.variable}>
<body
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
>
<TooltipProvider>

<header className=" z-50 border-b bg-background/80 backdrop-blur-md">
<nav className="mx-auto flex h-16 w-full max-w-7xl items-center justify-between px-4 sm:px-6 lg:px-8">
<Link
href="/"
className="text-base font-semibold tracking-tight transition-opacity hover:opacity-80"
>
Mi App
</Link>

<div className="flex items-center gap-2 rounded-full border bg-muted/40 p-1">
<Link
href="/"
className="rounded-full px-4 py-2 text-sm font-medium text-muted-foreground transition-colors hover:bg-background hover:text-foreground"
>
Home
</Link>

<Link
href="/cambiar-page"
className="rounded-full px-4 py-2 text-sm font-medium text-muted-foreground transition-colors hover:bg-background hover:text-foreground"
>
Otra página
</Link>
</div>
</nav>
</header>
{sidebar}
{children}
</TooltipProvider>
Expand Down
10 changes: 5 additions & 5 deletions src/app/page.tsx
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import Home from "@/components/home";
import ProductList from "@/components/home/product-list";

export default async function Page() {
export default function Page() {
return (
<div>
<Home />
</div>
<main className="flex flex-wrap justify-between max-w-300 gap-y-8 py-10 mx-auto container-products">
<ProductList/>
</main>
);
}
15 changes: 10 additions & 5 deletions src/components/edit-product/edit-product.tsx
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
import { cacheTag } from "next/cache";

import { getProduct } from "@/server/queries/products";
import { ProductEditForm } from "./product-edit-form";
import { Suspense } from "react";
import { getProduct } from "@/server/queries/getProduct";
import { cacheLife, cacheTag } from "next/cache";
export type PageParams = {
idproduct: string;
idproduct: number;
};

export default async function EditProduct({ idproduct }: PageParams) {
"use cache";
cacheTag(`product-${idproduct}`);
const product = await getProduct(parseInt(idproduct, 10));
cacheLife("nuncaSeRevalida")
const product = await getProduct(idproduct);

return <ProductEditForm product={product} />;
return (
<Suspense>
<ProductEditForm product={product} />;
</Suspense>)
}
12 changes: 6 additions & 6 deletions src/components/edit-product/product-edit-form.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
Star,
Tag,
} from "lucide-react";
import { useActionState, useMemo, useState } from "react";
import { useActionState, useState } from "react";
import { Badge } from "@/components/ui/badge";
import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
Expand Down Expand Up @@ -46,7 +46,7 @@ export function ProductEditForm({ product }: ProductEditFormProps) {
updateProductAction,
initialState,
);

const editableKeys: EditableKey[] = [
"name",
"description",
Expand Down Expand Up @@ -75,9 +75,9 @@ export function ProductEditForm({ product }: ProductEditFormProps) {
}

const discountedPrice =
edited.discount > 0
( edited.discount > 0
? edited.price * (1 - edited.discount / 100)
: edited.price;
: edited.price).toFixed(2)

return (
<div className="@container w-full product-edit-form">
Expand Down Expand Up @@ -255,7 +255,7 @@ export function ProductEditForm({ product }: ProductEditFormProps) {
</p>
<div className="flex items-baseline gap-3">
<span className="text-2xl font-bold text-foreground">
${discountedPrice.toFixed(2)}
{discountedPrice}
</span>
{edited.discount > 0 && (
<>
Expand Down Expand Up @@ -292,7 +292,7 @@ export function ProductEditForm({ product }: ProductEditFormProps) {
<div className="flex items-center gap-1.5 min-w-18 justify-end">
<StarDisplay rating={edited.rating} />
<span className="text-sm font-medium text-foreground tabular-nums w-8 text-right">
{edited.rating.toFixed(1)}
{edited.rating}
</span>
</div>
</div>
Expand Down
9 changes: 0 additions & 9 deletions src/components/home/home.tsx

This file was deleted.

1 change: 0 additions & 1 deletion src/components/home/index.ts

This file was deleted.

Loading