Loading components/platform/platform-clusters-add-modal.tsx +22 −4 Changes for components/platform/platform-clusters-add-modal.tsx: 22 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ import { Modal, Button, Input, Textarea, Select, SelectItem, SharedSelection, Loading @@ -13,6 +14,7 @@ import { Info } from 'lucide-react'; import { ModalContent, ModalFooter, ModalHeader } from '@nextui-org/react'; import { CalendarDate } from '@internationalized/date'; import { createCluster } from '@/actions/domain-management'; import { load as loadYAML } from 'js-yaml'; interface PlatformClustersAddModalProps { isOpen: boolean; Loading @@ -28,6 +30,17 @@ const initialForm = { endDate: '', }; const isValidYAML = (value: string): boolean => { try { const parsed = loadYAML(value); return parsed !== null && typeof parsed === 'object'; } catch { return false; } }; const encodeToBase64 = (value: string): string => btoa(unescape(encodeURIComponent(value))); const PlatformClustersAddModal: React.FC<PlatformClustersAddModalProps> = ({ isOpen, onClose, Loading Loading @@ -72,7 +85,11 @@ const PlatformClustersAddModal: React.FC<PlatformClustersAddModalProps> = ({ if (organizations && organizations.length > 0 && !selectedOrgId) newErrors.organization = 'Required'; if (!form.name || form.name.trim() === '') newErrors.name = 'Required'; if (!form.kubeConfig || form.kubeConfig.trim() === '') newErrors.kubeConfig = 'Required'; if (!form.kubeConfig || form.kubeConfig.trim() === '') { newErrors.kubeConfig = 'Required'; } else if (!isValidYAML(form.kubeConfig)) { newErrors.kubeConfig = 'Please enter valid YAML'; } if (!form.endDate || form.endDate.trim() === '') newErrors.endDate = 'Required'; if (!form.numberOfWorkers || form.numberOfWorkers.trim() === '') { newErrors.numberOfWorkers = 'Required'; Loading Loading @@ -102,7 +119,7 @@ const PlatformClustersAddModal: React.FC<PlatformClustersAddModalProps> = ({ organizationId: selectedOrgId, organizationName: org?.name ?? undefined, name: form.name, kubeConfig: form.kubeConfig, kubeConfig: encodeToBase64(form.kubeConfig), endDateIso: form.endDate || new Date().toISOString(), endHour: endTime.hours, endMinute: endTime.minutes, Loading Loading @@ -213,19 +230,20 @@ const PlatformClustersAddModal: React.FC<PlatformClustersAddModalProps> = ({ KubeConfig<sup>*</sup> </span> <Tooltip content="Paste your kubeconfig file contents here in base64 format" content="Paste your kubeconfig file contents here in valid YAML format" placement="top" > <Info size={14} className="cursor-help text-gray-400" /> </Tooltip> </div> <div className="w-80"> <Input <Textarea name="kubeConfig" value={form.kubeConfig} onChange={handleChange} fullWidth variant="bordered" minRows={6} classNames={{ inputWrapper: 'rounded-[5px]' }} /> {errors.kubeConfig && ( Loading Loading
components/platform/platform-clusters-add-modal.tsx +22 −4 Changes for components/platform/platform-clusters-add-modal.tsx: 22 added lines, 4 removed lines. Original line number Diff line number Diff line Loading @@ -3,6 +3,7 @@ import { Modal, Button, Input, Textarea, Select, SelectItem, SharedSelection, Loading @@ -13,6 +14,7 @@ import { Info } from 'lucide-react'; import { ModalContent, ModalFooter, ModalHeader } from '@nextui-org/react'; import { CalendarDate } from '@internationalized/date'; import { createCluster } from '@/actions/domain-management'; import { load as loadYAML } from 'js-yaml'; interface PlatformClustersAddModalProps { isOpen: boolean; Loading @@ -28,6 +30,17 @@ const initialForm = { endDate: '', }; const isValidYAML = (value: string): boolean => { try { const parsed = loadYAML(value); return parsed !== null && typeof parsed === 'object'; } catch { return false; } }; const encodeToBase64 = (value: string): string => btoa(unescape(encodeURIComponent(value))); const PlatformClustersAddModal: React.FC<PlatformClustersAddModalProps> = ({ isOpen, onClose, Loading Loading @@ -72,7 +85,11 @@ const PlatformClustersAddModal: React.FC<PlatformClustersAddModalProps> = ({ if (organizations && organizations.length > 0 && !selectedOrgId) newErrors.organization = 'Required'; if (!form.name || form.name.trim() === '') newErrors.name = 'Required'; if (!form.kubeConfig || form.kubeConfig.trim() === '') newErrors.kubeConfig = 'Required'; if (!form.kubeConfig || form.kubeConfig.trim() === '') { newErrors.kubeConfig = 'Required'; } else if (!isValidYAML(form.kubeConfig)) { newErrors.kubeConfig = 'Please enter valid YAML'; } if (!form.endDate || form.endDate.trim() === '') newErrors.endDate = 'Required'; if (!form.numberOfWorkers || form.numberOfWorkers.trim() === '') { newErrors.numberOfWorkers = 'Required'; Loading Loading @@ -102,7 +119,7 @@ const PlatformClustersAddModal: React.FC<PlatformClustersAddModalProps> = ({ organizationId: selectedOrgId, organizationName: org?.name ?? undefined, name: form.name, kubeConfig: form.kubeConfig, kubeConfig: encodeToBase64(form.kubeConfig), endDateIso: form.endDate || new Date().toISOString(), endHour: endTime.hours, endMinute: endTime.minutes, Loading Loading @@ -213,19 +230,20 @@ const PlatformClustersAddModal: React.FC<PlatformClustersAddModalProps> = ({ KubeConfig<sup>*</sup> </span> <Tooltip content="Paste your kubeconfig file contents here in base64 format" content="Paste your kubeconfig file contents here in valid YAML format" placement="top" > <Info size={14} className="cursor-help text-gray-400" /> </Tooltip> </div> <div className="w-80"> <Input <Textarea name="kubeConfig" value={form.kubeConfig} onChange={handleChange} fullWidth variant="bordered" minRows={6} classNames={{ inputWrapper: 'rounded-[5px]' }} /> {errors.kubeConfig && ( Loading