From 16ce64ba613dd1751d6b532925f490bde24bb54a Mon Sep 17 00:00:00 2001 From: Bob Burningham Date: Mon, 23 Oct 2023 00:05:37 -0700 Subject: [PATCH] added chat input --- .../[serverId]/channels/[channelId]/page.tsx | 6 ++ components/chat/chat-input.tsx | 91 +++++++++++++++++++ 2 files changed, 97 insertions(+) create mode 100644 components/chat/chat-input.tsx diff --git a/app/(main)/(routes)/servers/[serverId]/channels/[channelId]/page.tsx b/app/(main)/(routes)/servers/[serverId]/channels/[channelId]/page.tsx index 0714e39..030e423 100644 --- a/app/(main)/(routes)/servers/[serverId]/channels/[channelId]/page.tsx +++ b/app/(main)/(routes)/servers/[serverId]/channels/[channelId]/page.tsx @@ -3,6 +3,7 @@ import { redirectToSignIn } from "@clerk/nextjs"; import { db } from "@/lib/db"; import { redirect } from "next/navigation"; import { ChatHeader } from "@/components/chat/chat-header"; +import { ChatInput } from "@/components/chat/chat-input"; interface ChannelIdPageProps { params: { @@ -41,6 +42,11 @@ const ChannelIdPage = async ({ return (
+
Future Messages
+
) } diff --git a/components/chat/chat-input.tsx b/components/chat/chat-input.tsx new file mode 100644 index 0000000..775331f --- /dev/null +++ b/components/chat/chat-input.tsx @@ -0,0 +1,91 @@ +"use client" + +import { useForm } from "react-hook-form"; +import * as z from "zod"; +import axios from "axios"; +import qs from "query-string"; +import { zodResolver } from "@hookform/resolvers/zod"; + +import { + Form, + FormControl, + FormField, + FormItem, +} from "@/components/ui/form"; +import { Input } from "@/components/ui/input"; +import { Plus, Smile } from "lucide-react"; + +interface ChatInputProps { + apiUrl: string; + query: Record; + name: string; + type: "conversation" | "channel"; +} + +const formSchema = z.object({ + content: z.string().min(1), +}); + +export const ChatInput = ({ + apiUrl, + query, + name, + type +}: ChatInputProps) => { + const form = useForm>({ + resolver: zodResolver(formSchema), + defaultValues: { + content: "", + } + }); + + const isLoading = form.formState.isSubmitting; + + const onSubmit = async (values: z.infer) => { + try{ + const url = qs.stringifyUrl({ + url: apiUrl, + query, + }); + + await axios.post(url, values); + }catch(error){ + console.log(error); + } + } + + return ( +
+ + ( + + +
+ + +
+ +
+
+
+
+ )} + /> + + + ) +} \ No newline at end of file