diff --git a/components/chat/chat-input.tsx b/components/chat/chat-input.tsx index 775331f..30c15a5 100644 --- a/components/chat/chat-input.tsx +++ b/components/chat/chat-input.tsx @@ -14,6 +14,7 @@ import { } from "@/components/ui/form"; import { Input } from "@/components/ui/input"; import { Plus, Smile } from "lucide-react"; +import { useModal } from "@/hooks/use-modal-store"; interface ChatInputProps { apiUrl: string; @@ -32,6 +33,8 @@ export const ChatInput = ({ name, type }: ChatInputProps) => { + const { onOpen } = useModal(); + const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { @@ -66,7 +69,7 @@ export const ChatInput = ({
+
+ ) + } + return ( { + const {isOpen, onClose, type, data} = useModal(); + const router = useRouter(); + + const isModalOpen = isOpen && type === "messageFile"; + const { apiUrl, query } = data; + + const form = useForm({ + resolver: zodResolver(formSchema), + defaultValues: { + fileUrl: "", + } + }); + + const handleClose = () => { + form.reset(); + onClose(); + } + + const isLoading = form.formState.isSubmitting; + + const onSubmit = async (values: z.infer) => { + try { + const url = qs.stringifyUrl({ + url: apiUrl || "", + query, + }) + + await axios.post(url, {...values, content: values.fileUrl,}); + + form.reset(); + router.refresh(); + handleClose(); + } catch (error) { + console.error(error); + } + } + + return ( + + + + + Add an attachment + + + Send a file as a message + + +
+ +
+
+ ( + + + + + + )} + /> +
+
+ + + +
+ +
+
+ ) +} \ No newline at end of file diff --git a/components/providers/modal-provider.tsx b/components/providers/modal-provider.tsx index 505e22d..6adf1cc 100644 --- a/components/providers/modal-provider.tsx +++ b/components/providers/modal-provider.tsx @@ -11,6 +11,7 @@ import { LeaveServerModal } from "@/components/modals/leave-server-modal"; import { DeleteServerModal } from "@/components/modals/delete-server-modal"; import { DeleteChannelModal } from "@/components/modals/delete-channel-modal"; import { EditChannelModal } from "@/components/modals/edit-channel-modal"; +import { MessageFileModal } from "@/components/modals/message-file-modal.tsx"; export const ModalProvider = () => { const [isMounted, setIsMounted] = useState(false); @@ -34,6 +35,7 @@ export const ModalProvider = () => { + ) } \ No newline at end of file diff --git a/hooks/use-modal-store.ts b/hooks/use-modal-store.ts index 1323668..4f334b2 100644 --- a/hooks/use-modal-store.ts +++ b/hooks/use-modal-store.ts @@ -2,12 +2,14 @@ import { Channel, ChannelType, Server } from "@prisma/client"; import { create } from "zustand"; -export type ModalType = "createServer" | "invite" | "editServer" | "members" | "createChannel" | "leaveServer" | "deleteServer" | "deleteChannel" | "editChannel"; +export type ModalType = "createServer" | "invite" | "editServer" | "members" | "createChannel" | "leaveServer" | "deleteServer" | "deleteChannel" | "editChannel" | "messageFile"; interface ModalData { server?: Server; channel?: Channel channelType?: ChannelType; + apiUrl?: string; + query?: Record; } interface ModalStore {