| "use client" | |
| import { useEffect, useTransition } from "react" | |
| import { usePathname } from "next/navigation" | |
| import { experimental_useFormStatus as useFormStatus } from "react-dom" | |
| import { Textarea } from "@/components/ui/textarea" | |
| import { Button } from "@/components/ui/button" | |
| import { handleFormSubmit } from "@/server/actions" | |
| export const VideoForm = () => { | |
| const pathname = usePathname() | |
| const ownerId = pathname.split("/").pop() | |
| const { pending } = useFormStatus() | |
| return ( | |
| <form | |
| action={handleFormSubmit} | |
| > | |
| <div className="flex flex-row w-full mb-3"> | |
| <div className="flex flex-col w-1/2 text-center"> | |
| <h2 className="text-4xl font-thin tracking-tight">VideoChain π¬</h2> | |
| <p className="text-md font-thin"> | |
| Powered by <span className="font-normal">Hugging Face π€</span> | |
| </p> | |
| </div> | |
| <div className="flex flex-col w-1/2 text-center"> | |
| <p className="text-sl font-thin"> | |
| For demonstration purposes only. Please use responsibly, and cancel any video you don't need anymore. | |
| You have been assigned this permalink ID: <a href={`/studio/${ownerId}`} className="font-normal" target="_blank">{ownerId}</a> | |
| </p> | |
| </div> | |
| </div> | |
| <div className="flex items-center justify-between md:space-x-3 w-full"> | |
| <input | |
| type="hidden" | |
| id="ownerId" | |
| name="ownerId" | |
| value={ownerId} | |
| /> | |
| <Textarea | |
| id="prompt" | |
| name="prompt" | |
| placeholder="3 clips of a cat playing the piano" | |
| className="mr-3 md:mr-0" | |
| /> | |
| <Button | |
| variant="secondary" | |
| size="lg" | |
| className="text-md md:w-32" | |
| type="submit" | |
| disabled={pending} | |
| > | |
| {pending ? "Loading.." : "Generate"} | |
| </Button> | |
| </div> | |
| </form> | |
| ) | |
| } |