diff --git a/frontend/src/pages/JobsView.tsx b/frontend/src/pages/JobsView.tsx index 8dd8f41..7d2b19e 100644 --- a/frontend/src/pages/JobsView.tsx +++ b/frontend/src/pages/JobsView.tsx @@ -7,7 +7,8 @@ import { Folder, Filter, Calendar, - X + X, + Edit2 } from 'lucide-react'; import { BackupJobItem, ClientItem, api, SystemSettingsResponse } from '../services/api'; @@ -37,8 +38,9 @@ export const JobsView: React.FC = ({ jobs, clients, onRefresh, se skip_readonly: false, sync_deletions: false, }); + const [editingJobId, setEditingJobId] = useState(null); - const handleCreateJob = async (e: React.FormEvent) => { + const handleSubmitJob = async (e: React.FormEvent) => { e.preventDefault(); if (!formData.client_id) { alert('Por favor selecciona un cliente'); @@ -46,16 +48,41 @@ export const JobsView: React.FC = ({ jobs, clients, onRefresh, se } setLoading(true); try { - await api.createJob(formData); + if (editingJobId !== null) { + await api.updateJob(editingJobId, formData); + } else { + await api.createJob(formData); + } setShowModal(false); onRefresh(); } catch (err: any) { - alert(`Error creando trabajo: ${err.message}`); + alert(`Error guardando trabajo: ${err.message}`); } finally { setLoading(false); } }; + const handleEditClick = (job: BackupJobItem) => { + setEditingJobId(job.id); + setFormData({ + client_id: job.client_id, + name: job.name, + source_path: job.source_path, + file_patterns: job.file_patterns, + schedule_cron: job.schedule_cron, + keep_daily: job.keep_daily, + keep_weekly: job.keep_weekly, + keep_monthly: job.keep_monthly, + min_stable_time_seconds: job.min_stable_time_seconds, + exclude_patterns: job.exclude_patterns || '', + skip_hidden: job.skip_hidden, + skip_system: job.skip_system, + skip_readonly: job.skip_readonly, + sync_deletions: job.sync_deletions, + }); + setShowModal(true); + }; + const handleTrigger = async (job: BackupJobItem) => { try { await api.triggerJob(job.id); @@ -98,6 +125,7 @@ export const JobsView: React.FC = ({ jobs, clients, onRefresh, se alert('Primero debes registrar al menos un cliente Windows.'); return; } + setEditingJobId(null); setFormData({ client_id: clients[0].id, name: '', @@ -195,6 +223,14 @@ export const JobsView: React.FC = ({ jobs, clients, onRefresh, se Ejecutar + - -
+