import { useState } from "react"; import { useSelector } from "react-redux"; import { FiHash, FiAlignLeft, FiLock, FiGlobe, FiX, FiArrowLeft } from "react-icons/fi"; function CreateRoomView({ onCancel, onCreate }) { const { isDark } = useSelector((state) => state.theme); const [roomName, setRoomName] = useState(""); const [roomTopic, setRoomTopic] = useState(""); const [roomType, setRoomType] = useState("public"); const [nameError, setNameError] = useState(""); const [apiError, setApiError] = useState(""); const [isSubmitting, setIsSubmitting] = useState(false); const handleSubmit = async () => { const trimmedName = roomName.trim(); if (!trimmedName) { setNameError("Vui lòng nhập tên room"); return; } if (trimmedName.length < 2) { setNameError("Tên room phải có ít nhất 2 ký tự"); return; } setNameError(""); setApiError(""); setIsSubmitting(true); try { await onCreate({ name: trimmedName, displayName: trimmedName, topic: roomTopic.trim(), type: roomType, }); } catch (err) { setApiError(err?.message || "Không thể tạo room. Vui lòng thử lại."); } finally { setIsSubmitting(false); } }; const handleKeyDown = (e) => { if (e.key === "Enter" && !e.shiftKey) { e.preventDefault(); handleSubmit(); } if (e.key === "Escape") { onCancel(); } }; return (
{/* Header */}
Tạo room mới
Thêm kênh thảo luận mới vào space
{/* Content */}
{/* Room Info Card */}

Thông tin room

{/* Room Name */}
{ setRoomName(e.target.value); if (nameError) setNameError(""); }} onKeyDown={handleKeyDown} placeholder="ví-dụ: thao-luan-chung" className="w-full pl-9 pr-3 py-2 rounded-md text-sm border outline-none" style={{ background: "var(--input-bg)", borderColor: nameError ? "var(--danger)" : "var(--input-border)", color: "var(--input-text)", }} onFocus={(e) => (e.currentTarget.style.borderColor = "var(--primary)") } onBlur={(e) => (e.currentTarget.style.borderColor = nameError ? "var(--danger)" : "var(--input-border)") } autoFocus />
{nameError && (
{nameError}
)}
{/* Room Topic */}
setRoomTopic(e.target.value)} onKeyDown={handleKeyDown} placeholder="Mô tả ngắn về nội dung thảo luận..." className="w-full pl-9 pr-3 py-2 rounded-md text-sm border outline-none" style={{ background: "var(--input-bg)", borderColor: "var(--input-border)", color: "var(--input-text)", }} onFocus={(e) => (e.currentTarget.style.borderColor = "var(--primary)") } onBlur={(e) => (e.currentTarget.style.borderColor = "var(--input-border)") } />
{/* Room Type Card */}

Quyền riêng tư

{/* Public option */} {/* Private option */}
{/* API Error */} {apiError && (
{apiError}
)} {/* Footer */}
); } export default CreateRoomView;