"use client"; import { validateName } from "@/lib/utils"; import Image from "next/image"; import { useEffect, useRef } from "react"; import { Socket } from "socket.io-client"; export default function New({ socket, type, stopEditing, addNew, }: { socket: Socket; type: "file" | "folder"; stopEditing: () => void; addNew: (name: string, type: "file" | "folder") => void; }) { const inputRef = useRef<HTMLInputElement>(null); function createNew() { const name = inputRef.current?.value; if (name) { const valid = validateName(name, "", type); if (valid.status) { if (type === "file") { socket.emit( "createFile", name, ({ success }: { success: boolean }) => { if (success) { addNew(name, type); } } ); } else { socket.emit("createFolder", name, () => { addNew(name, type); }); } } } stopEditing(); } useEffect(() => { inputRef.current?.focus(); }, []); return ( <div className="w-full flex items-center h-7 px-1 hover:bg-secondary rounded-sm cursor-pointer transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring"> <Image src={ type === "file" ? "/icons/default_file.svg" : "/icons/default_folder.svg" } alt="File Icon" width={18} height={18} className="mr-2" /> <form onSubmit={(e) => { e.preventDefault(); createNew(); }} > <input ref={inputRef} className={`bg-transparent transition-all focus-visible:outline-none focus-visible:ring-offset-2 focus-visible:ring-offset-background focus-visible:ring-2 focus-visible:ring-ring rounded-sm w-full`} onBlur={() => createNew()} /> </form> </div> ); }