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 */}
{/* Room Type Card */}
Quyền riêng tư
{/* Public option */}
{/* Private option */}
{/* API Error */}
{apiError && (
)}
{/* Footer */}
);
}
export default CreateRoomView;