'use client'; /** * SchedulePreview * * Human-readable preview with cron expression and cheatsheet. * Shows initial value when it differs from current. */ import { useState, useCallback, useMemo } from 'react'; import { Calendar, Copy, Check, ArrowRight } from 'lucide-react'; import { cn } from '@djangocfg/ui-core/lib'; import { useCronPreview, useCronSize } from '../context/hooks'; import { CronCheatsheet } from './CronCheatsheet'; export interface SchedulePreviewProps { /** Show raw cron expression (default: true) */ showCronExpression?: boolean; /** Enable copy to clipboard */ allowCopy?: boolean; /** Show initial value when changed (default: true) */ showInitialValue?: boolean; /** Additional CSS classes */ className?: string; } export function SchedulePreview({ showCronExpression = true, allowCopy = false, showInitialValue = true, className, }: SchedulePreviewProps) { const { cronExpression, humanDescription, isValid, initialValue } = useCronPreview(); const isSm = useCronSize() === 'sm'; // Check if value has changed from initial const hasChanged = useMemo( () => showInitialValue && initialValue && initialValue !== cronExpression, [showInitialValue, initialValue, cronExpression] ); const [copied, setCopied] = useState(false); const handleCopy = useCallback(async () => { try { await navigator.clipboard.writeText(cronExpression); setCopied(true); setTimeout(() => setCopied(false), 2000); } catch (err) { console.error('Failed to copy:', err); } }, [cronExpression]); return (
{initialValue}
>
)}
{cronExpression}