'use client'; import { ChevronDown } from 'lucide-react'; interface Preset { label: string; expr: string; } interface PresetGroup { label: string; items: Preset[]; } const PRESET_GROUPS: PresetGroup[] = [ { label: 'Common', items: [ { label: 'Every minute', expr: '* * * * *' }, { label: 'Every 5 min', expr: '*/5 * * * *' }, { label: 'Every 15 min', expr: '*/15 * * * *' }, { label: 'Every 30 min', expr: '*/30 * * * *' }, { label: 'Every hour', expr: '0 * * * *' }, { label: 'Every 6 hours', expr: '0 */6 * * *' }, ], }, { label: 'Daily', items: [ { label: 'Midnight', expr: '0 0 * * *' }, { label: '6 AM', expr: '0 6 * * *' }, { label: '9 AM', expr: '0 9 * * *' }, { label: 'Noon', expr: '0 12 * * *' }, { label: 'Twice daily', expr: '0 6,18 * * *' }, ], }, { label: 'Weekly', items: [ { label: 'Weekdays 9 AM', expr: '0 9 * * 1-5' }, { label: 'Monday 9 AM', expr: '0 9 * * 1' }, { label: 'Friday 5 PM', expr: '0 17 * * 5' }, { label: 'Sunday 0 AM', expr: '0 0 * * 0' }, { label: 'Weekends 9 AM', expr: '0 9 * * 0,6' }, ], }, { label: 'Periodic', items: [ { label: 'Monthly 1st', expr: '0 0 1 * *' }, { label: '1st & 15th', expr: '0 0 1,15 * *' }, { label: 'Quarterly', expr: '0 0 1 */3 *' }, { label: 'Bi-annual', expr: '0 0 1 1,7 *' }, { label: 'January 1st', expr: '0 0 1 1 *' }, ], }, ]; interface CronPresetsProps { onSelect: (expr: string) => void; current: string; } export function CronPresets({ onSelect, current }: CronPresetsProps) { const allExprs = PRESET_GROUPS.flatMap(g => g.items.map(i => i.expr)); const isPreset = allExprs.includes(current); return (
); }