'use client'; /** * CustomInput * * Raw cron expression input with validation and help popover. */ import { useState, useEffect } from 'react'; import { Input } from '@djangocfg/ui-core/components'; import { cn } from '@djangocfg/ui-core/lib'; import { AlertCircle, CheckCircle2 } from 'lucide-react'; import { useCronCustom, useCronSize } from '../context/hooks'; import { isValidCron } from '../utils/cron-parser'; export interface CustomInputProps { disabled?: boolean; className?: string; } export function CustomInput({ disabled, className }: CustomInputProps) { const { customCron, isValid, setCustomCron } = useCronCustom(); const isSm = useCronSize() === 'sm'; const [localValue, setLocalValue] = useState(customCron); const [localValid, setLocalValid] = useState(isValid); useEffect(() => { setLocalValue(customCron); setLocalValid(isValid); }, [customCron, isValid]); const handleChange = (e: React.ChangeEvent) => { const value = e.target.value; setLocalValue(value); const valid = isValidCron(value); setLocalValid(valid); setCustomCron(value); }; const showError = !localValid && localValue.trim().length > 0; return (
{localValue.trim() && ( localValid ? (
{showError && ( )}
); }