enzostvs's picture
enzostvs HF staff
add pagination page + display model name
2a7eb2e
"use client";
import { useState } from "react";
import { Form } from "@/_types";
import { generate } from "@/app/_actions/generate";
import { Brand } from "./step/brand";
import { Steps } from "./step/list";
import { Industry } from "./step/industry";
import { Description } from "./step/description";
import classNames from "classnames";
import { toast } from "react-toastify";
import Image from "next/image";
export const Generation = () => {
const [form, setForm] = useState<Form>({
brand_name: "",
display_name: false,
description: "",
industry: "",
style: "",
});
const [loading, setLoading] = useState<boolean>(false);
const [result, setResult] = useState<number | undefined>(undefined);
const handleGenerate = async () => {
if (loading) return;
setLoading(true);
try {
const response = await generate(form);
setResult(response.data);
} catch (err) {
toast.error("An error occurred. Please try again later.");
} finally {
setLoading(false);
}
};
return (
<main id="generation" className="w-full py-10 lg:py-20">
<h3 className="max-w-4xl text-2xl lg:text-3xl text-[#aaaaaa] font-semibold mb-12 text-center mx-auto">
Start your <span className="text-white">generation</span> here.
</h3>
<Steps form={form} />
<div className="grid grid-cols-1 lg:grid-cols-3 gap-8 lg:gap-20">
<Brand form={form} setForm={setForm} />
<Description form={form} setForm={setForm} />
<Industry form={form} setForm={setForm} />
<div className="lg:col-span-3 flex items-center justify-center">
<button
className={classNames(
"max-lg:w-full rounded-full bg-white text-zinc-950 font-medium text-sm px-6 py-3 hover:bg-opacity-80 transition-all duration-150 disabled:bg-zinc-500 disabled:text-zinc-700",
{
"animate-pulse": loading,
}
)}
disabled={!form.brand_name || !form.description || !form.industry}
onClick={handleGenerate}
>
{loading ? "Generating..." : "Generate my Logo"}
</button>
</div>
{result && (
<div className="lg:col-span-3 flex items-center justify-center rounded-3xl">
<Image
src={`/api/images/${result}`}
alt="Generated logo"
className="h-[300px]"
width={400}
height={400}
/>
</div>
)}
</div>
</main>
);
};