diff --git a/components/CoverLetterDialog.tsx b/components/CoverLetterDialog.tsx new file mode 100644 index 0000000..90eac9b --- /dev/null +++ b/components/CoverLetterDialog.tsx @@ -0,0 +1,70 @@ +import { + Dialog, + DialogContent, + DialogDescription, + DialogHeader, + DialogTitle, + DialogTrigger, +} from "@/components/ui/dialog"; +import { SetStateAction, useState } from "react"; +import { Textarea } from "./ui/textarea"; +import { Button } from "./ui/button"; +import { useToast } from "./ui/use-toast"; + +type Props = { + setIsResponseGenerated: React.Dispatch>; + setResponse: React.Dispatch>; + isResponseGenerated: boolean; + response: string; + isError: boolean; +}; + +export default function CoverLetterDialog({ + isResponseGenerated, + setIsResponseGenerated, + response, + setResponse, + isError, +}: Props) { + const { toast } = useToast(); + const copyHandler = () => { + navigator.clipboard.writeText(response); + toast({ + title: "Cover Letter", + description: "Text Copied!!", + }); + }; + + return ( + + + + {!isError && ( + <> + + Cover Letter + + + + + + + )} + {isError && ( + <> + + Error + + + Error Occured!! Please try again later. + + + )} + + + ); +} diff --git a/components/CoverLetterForm.tsx b/components/CoverLetterForm.tsx index d507951..c27e308 100644 --- a/components/CoverLetterForm.tsx +++ b/components/CoverLetterForm.tsx @@ -13,8 +13,10 @@ import { } from "@/components/ui/form"; import { Textarea } from "./ui/textarea"; import { ArrowRightIcon } from "@radix-ui/react-icons"; -import { SetStateAction } from "react"; +import { SetStateAction, useState } from "react"; import { getCoverLetter } from "@/utils/Gemini"; +import Loader from "./Loader"; + const formSchema = z.object({ jobDescription: z @@ -52,6 +54,8 @@ export default function CoverLetterForm({ setIsError, setResponse, }: Props) { + const [isLoading, setIsLoading] = useState(false); + const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { @@ -83,9 +87,8 @@ export default function CoverLetterForm({ } const onSubmit = async (values: z.infer) => { - // Do something with the form values. - // ✅ This will be type-safe and validated. const { jobDescription, project, skills, experience } = values; + setIsLoading(true); try { const res = await getCoverLetter({ @@ -95,10 +98,14 @@ export default function CoverLetterForm({ experience, }); - console.log(res); + if (res) { + setIsResponseGenerated(true); + setResponse(res); + } } catch (err) { setIsError(true); } + setIsLoading(false); }; return ( @@ -223,7 +230,7 @@ export default function CoverLetterForm({ name="skills" render={({ field }) => ( - Projects + Skills