import React, { useState, useEffect } from 'react'; import Sidebar from './OCRSidebar'; import { createTemplate, getTemplates, deleteTemplate, createOrUpdateTemplate } from '../services/api'; function OCRTemplate() { const [templates, setTemplates] = useState([]); const [selectedTemplate, setSelectedTemplate] = useState(null); const [newTemplateName, setNewTemplateName] = useState(''); const [isEditing, setIsEditing] = useState(false); const [message, setMessage] = useState(''); const fetchTemplates = async () => { try { const response = await getTemplates(); console.log('fetchTemplates Response:', response); const mappedTemplates = response.map(template => ({ template_name: template.template_name, variables: Object.values(template.fields || {}), // Map fields to variables user_id: template.user_id, })); setTemplates(mappedTemplates); } catch (error) { console.error('Error fetching templates:', error); } }; const handleTemplateChange = (e) => { const templateName = e.target.value; if (templateName === 'new') { setSelectedTemplate(null); setNewTemplateName(''); setIsEditing(false); } else { const existingTemplate = templates.find(template => template.template_name === templateName); setSelectedTemplate(existingTemplate || null); setIsEditing(!!existingTemplate); } }; const addVariable = () => { const newTemplate = { ...selectedTemplate, variables: [...(selectedTemplate.variables || []), ''] }; setSelectedTemplate(newTemplate); }; const handleTemplateNameChange = (value) => { const newTemplate = { ...selectedTemplate, template_name: value }; setSelectedTemplate(newTemplate); }; const handleVariableChange = (variableIndex, value) => { const newTemplate = { ...selectedTemplate }; newTemplate.variables[variableIndex] = value; setSelectedTemplate(newTemplate); }; const addTemplate = () => { const newTemplate = { template_name: newTemplateName, variables: [''] }; // setTemplates([...templates, newTemplate]); setSelectedTemplate(newTemplate); setIsEditing(true); }; const handleSubmit = async () => { const template = selectedTemplate; const fields = {}; template.variables.forEach((variable, i) => { fields[`additionalProp${i + 1}`] = variable; }); try { console.log(template); // Check if the template name already exists const existingTemplate = templates.find(t => t.template_name === template.template_name); if (existingTemplate) { // Update existing template console.log('existingTemplate', existingTemplate.template_name); await createOrUpdateTemplate(template.template_name, fields, template.user_id, true); setMessage('Template updated successfully!'); } else { console.log('Creating new template'); // Create new template const newTemplate = await createOrUpdateTemplate(template.template_name, fields, template.user_id, false); setMessage('Template created successfully!'); } fetchTemplates(); // Fetch templates again to update the list } catch (error) { setMessage('Handle submit Error creating/updating template.'); } }; const handleDeleteTemplate = async () => { const templateName = selectedTemplate.template_name; try { await deleteTemplate(templateName); setTemplates(templates.filter(template => template.template_name !== templateName)); setSelectedTemplate(null); setMessage('Template deleted successfully!'); } catch (error) { setMessage('Error deleting template.'); } }; const handleDeleteVariable = (variableIndex) => { const newTemplate = { ...selectedTemplate }; newTemplate.variables.splice(variableIndex, 1); setSelectedTemplate(newTemplate); }; // Fetch templates on component mount useEffect(() => { fetchTemplates(); }, []); return (
{message}
}