import { Button } from "@progress/kendo-react-buttons"; import { useEffect, useRef, useState } from "react"; import { TextBox, TextBoxChangeEvent } from "@progress/kendo-react-inputs"; import FactoryRenderer from "../../../../Renderer"; interface CreateScreenPopupProps { onViewToggle: () => void; create: (viewName: string) => Promise; error?: string; } const VIEW_NAME_MAX_LENGTH = 25; const CreateScreenPopup = (props: CreateScreenPopupProps) => { const [screenName, setScreenName] = useState(""); const [validationError, setValidationError] = useState(""); const popupRef = useRef(null); useEffect(() => { const handleClickOutside = (event: MouseEvent) => { if ( popupRef.current && !popupRef.current.contains(event.target as Node) ) { popupRef.current.classList.add("tmpl-popup-animation-2-reverse"); setTimeout(props.onViewToggle, 200); } }; document.addEventListener("mousedown", handleClickOutside); return () => { document.removeEventListener("mousedown", handleClickOutside); }; }, []); const validateViewName = (value: string): string => { if (!value.trim()) return "Required"; if (value.length > VIEW_NAME_MAX_LENGTH) return `Maximum ${VIEW_NAME_MAX_LENGTH} characters allowed`; return ""; }; const handleCreate = () => { const error = validateViewName(screenName); if (error) { setValidationError(error); return; } props.create(screenName.trim()); }; const onScreenNameChange = (e: TextBoxChangeEvent) => { const value = e.target.value?.toString() || ""; setScreenName(value); setValidationError(validateViewName(value)); }; return (

Create New View

View Name * {validationError && ( {validationError} )} {props.error && {props.error}}
); }; export default CreateScreenPopup;