CoolFace
Apppublic

admin08077/Githubgemini

sourceHugging Faceotherupdated 10mo agoView on Hugging Face
0likes
CronJobBuilder-2-5myVyo.js.map1 linesDownload Raw Back to assets
1{"version":3,"file":"CronJobBuilder-2-5myVyo.js","sources":["../../components/features/CronJobBuilder.tsx"],"sourcesContent":["import React, { useState, useMemo, useCallback, useEffect } from 'react';\nimport { CommandLineIcon, SparklesIcon } from '../icons.tsx';\nimport { generateCronFromDescription, CronParts } from '../../services/index.ts';\nimport { LoadingSpinner } from '../shared/index.tsx';\n\nconst CronPartSelector: React.FC<{ label: string, value: string, onChange: (value: string) => void, options: (string|number)[] }> = ({ label, value, onChange, options }) => {\n    return (\n        <div>\n            <label className=\"block text-sm font-medium text-text-secondary\">{label}</label>\n            <select value={value} onChange={e => onChange(e.target.value)} className=\"w-full mt-1 px-3 py-2 rounded-md bg-surface border border-border\">\n                <option value=\"*\">* (every)</option>\n                {options.map(o => <option key={o} value={o}>{o}</option>)}\n            </select>\n        </div>\n    );\n};\n\nexport const CronJobBuilder: React.FC<{ initialPrompt?: string }> = ({ initialPrompt }) => {\n    const [minute, setMinute] = useState('0');\n    const [hour, setHour] = useState('17');\n    const [dayOfMonth, setDayOfMonth] = useState('*');\n    const [month, setMonth] = useState('*');\n    const [dayOfWeek, setDayOfWeek] = useState('1-5');\n    const [aiPrompt, setAiPrompt] = useState(initialPrompt || 'every weekday at 5pm');\n    const [isLoading, setIsLoading] = useState(false);\n    \n    const cronExpression = useMemo(() => {\n        return `${minute} ${hour} ${dayOfMonth} ${month} ${dayOfWeek}`;\n    }, [minute, hour, dayOfMonth, month, dayOfWeek]);\n\n    const handleAiGenerate = useCallback(async (p: string) => {\n        if (!p) return;\n        setIsLoading(true);\n        try {\n            const result: CronParts = await generateCronFromDescription(p);\n            setMinute(result.minute);\n            setHour(result.hour);\n            setDayOfMonth(result.dayOfMonth);\n            setMonth(result.month);\n            setDayOfWeek(result.dayOfWeek);\n        } catch (e) {\n            console.error(e);\n        } finally {\n            setIsLoading(false);\n        }\n    }, []);\n\n    useEffect(() => {\n        if (initialPrompt) {\n            setAiPrompt(initialPrompt);\n            handleAiGenerate(initialPrompt);\n        }\n    }, [initialPrompt, handleAiGenerate]);\n\n    return (\n        <div className=\"h-full flex flex-col p-4 sm:p-6 lg:p-8 text-text-primary\">\n            <header className=\"mb-6\">\n                <h1 className=\"text-3xl font-bold flex items-center\">\n                    <CommandLineIcon />\n                    <span className=\"ml-3\">AI Cron Job Builder</span>\n                </h1>\n                <p className=\"text-text-secondary mt-1\">Visually construct a cron expression or describe it in plain English.</p>\n            </header>\n             <div className=\"flex gap-2 mb-6\">\n                <input type=\"text\" value={aiPrompt} onChange={e => setAiPrompt(e.target.value)} placeholder=\"Describe a schedule...\" className=\"flex-grow px-3 py-1.5 rounded-md bg-surface border border-border text-sm\"/>\n                <button onClick={() => handleAiGenerate(aiPrompt)} disabled={isLoading} className=\"btn-primary px-4 py-1.5 flex items-center gap-2\">\n                    {isLoading ? <LoadingSpinner /> : <SparklesIcon />} AI Generate\n                </button>\n            </div>\n            <div className=\"grid grid-cols-2 md:grid-cols-5 gap-4 mb-6\">\n                <CronPartSelector label=\"Minute\" value={minute} onChange={setMinute} options={Array.from({length: 60}, (_, i) => i)} />\n                <CronPartSelector label=\"Hour\" value={hour} onChange={setHour} options={Array.from({length: 24}, (_, i) => i)} />\n                <CronPartSelector label=\"Day (Month)\" value={dayOfMonth} onChange={setDayOfMonth} options={Array.from({length: 31}, (_, i) => i + 1)} />\n                <CronPartSelector label=\"Month\" value={month} onChange={setMonth} options={Array.from({length: 12}, (_, i) => i + 1)} />\n                <CronPartSelector label=\"Day (Week)\" value={dayOfWeek} onChange={setDayOfWeek} options={Array.from({length: 7}, (_, i) => i)} />\n            </div>\n            <div className=\"bg-surface p-4 rounded-lg text-center border border-border\">\n                <p className=\"text-text-secondary text-sm\">Generated Expression</p>\n                <p className=\"font-mono text-primary text-2xl mt-1\">{cronExpression}</p>\n                 <button onClick={() => navigator.clipboard.writeText(cronExpression)} className=\"mt-4 px-3 py-1 bg-gray-100 hover:bg-gray-200 rounded-md text-xs\">Copy</button>\n            </div>\n        </div>\n    );\n};"],"names":["CronPartSelector","label","value","onChange","options","jsx","jsxs","e","o","CronJobBuilder","initialPrompt","minute","setMinute","useState","hour","setHour","dayOfMonth","setDayOfMonth","month","setMonth","dayOfWeek","setDayOfWeek","aiPrompt","setAiPrompt","isLoading","setIsLoading","cronExpression","useMemo","handleAiGenerate","useCallback","p","result","generateCronFromDescription","useEffect","CommandLineIcon","LoadingSpinner","SparklesIcon","_","i"],"mappings":"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"}