рефакторинг

This commit is contained in:
2025-07-21 17:07:03 +03:00
parent 84f0c9c6aa
commit 5737e37386
35 changed files with 526 additions and 579 deletions

View File

@@ -1,8 +1,9 @@
import { useTemplateContext } from '@/entitiy/template/model/TemplateContext'
import { Template } from '@/type/template'
import { Circle, CircleCheck, FileText, Plus, Trash2 } from 'lucide-react'
import React, { useEffect, useState } from 'react'
import { useNavigate } from 'react-router-dom'
import { useTemplateContext } from '../../context/TemplateContext'
import { Template } from '../../type/template'
import TemplateCard from '../TemplateCard'
import { Button } from '../ui/button'
import {
Dialog,
@@ -13,16 +14,14 @@ import {
DialogTrigger,
} from '../ui/dialog'
import { Input } from '../ui/input'
import TemplateCard from './TemplateCard'
import { TemplateEditor } from './TemplateEditor'
interface TemplateManagerProps {
onTemplateSelect?: (template: Template) => void
templateId?: string
template?: Template
}
export const TemplateManager: React.FC<TemplateManagerProps> = ({
templateId,
template: initialTemplate,
}) => {
const navigate = useNavigate()
const {
@@ -32,7 +31,7 @@ export const TemplateManager: React.FC<TemplateManagerProps> = ({
addTemplate,
updateTemplate,
deleteTemplate,
loadTemplates,
refetchTemplates,
} = useTemplateContext()
const [selectedTemplate, setSelectedTemplate] = useState<Template | null>(
null
@@ -50,14 +49,11 @@ export const TemplateManager: React.FC<TemplateManagerProps> = ({
// Автоматически открываем редактирование шаблона, если передан templateId
useEffect(() => {
if (templateId) {
const template = templates.find(t => t.id === templateId)
if (template) {
setSelectedTemplate(template)
setIsEditMode(true)
}
if (initialTemplate) {
setSelectedTemplate(initialTemplate)
setIsEditMode(true)
}
}, [templateId, templates])
}, [initialTemplate])
const handleCreateTemplate = async () => {
if (!newTemplateName.trim()) return
@@ -70,58 +66,44 @@ export const TemplateManager: React.FC<TemplateManagerProps> = ({
elements: [],
layoutSettings: undefined,
})
// Находим созданный шаблон и открываем его для редактирования
// Поскольку addTemplate может занять время, используем небольшую задержку
setTimeout(() => {
const newTemplate = templates.find(
t => t.name === newTemplateName.trim()
)
if (newTemplate) {
setSelectedTemplate(newTemplate)
setIsEditMode(true)
}
}, 100)
setIsCreateDialogOpen(false)
setNewTemplateName('')
setNewTemplateDescription('')
} catch (error) {
console.error('Ошибка при создании шаблона:', error)
// Здесь можно добавить уведомление пользователю об ошибке
await refetchTemplates()
const created = templates.find(t => t.name === newTemplateName.trim())
if (created) {
setSelectedTemplate(created)
setIsEditMode(true)
}
} catch (err) {
console.error('Error creating template:', err)
alert('Ошибка при создании шаблона. Попробуйте еще раз.')
} finally {
setIsCreating(false)
}
}
const handleTemplateUpdate = async (updatedTemplate: Template) => {
try {
await updateTemplate(updatedTemplate)
setSelectedTemplate(updatedTemplate)
} catch (error) {
console.error('Ошибка при обновлении шаблона:', error)
alert('Ошибка при обновлении шаблона. Попробуйте еще раз.')
}
}
// const handleTemplateUpdate = async (updatedTemplate: Template) => {
// try {
// await updateTemplate(updatedTemplate)
// setSelectedTemplate(updatedTemplate)
// } catch (err) {
// console.error('Error updating template:', err)
// alert('Ошибка при обновлении шаблона. Попробуйте еще раз.')
// }
// }
const handleDeleteTemplates = () => {
templatesToDelete.forEach(template => {
deleteTemplate(template.id)
})
templatesToDelete.forEach(t => deleteTemplate(t.id))
setTemplatesToDelete([])
setIsSelectionMode(false)
setSelectedTemplates(new Set())
}
const toggleTemplateSelection = (templateId: string) => {
const newSelected = new Set(selectedTemplates)
if (newSelected.has(templateId)) {
newSelected.delete(templateId)
} else {
newSelected.add(templateId)
}
setSelectedTemplates(newSelected)
const toggleTemplateSelection = (id: UUID) => {
const next = new Set(selectedTemplates)
next.has(id) ? next.delete(id) : next.add(id)
setSelectedTemplates(next)
}
const handleSelectionModeToggle = () => {
@@ -135,14 +117,12 @@ export const TemplateManager: React.FC<TemplateManagerProps> = ({
}
const handleDeleteSelected = () => {
const selectedTemplatesList = templates.filter(t =>
selectedTemplates.has(t.id)
)
setTemplatesToDelete(selectedTemplatesList)
const toDelete = templates.filter(t => selectedTemplates.has(t.id))
setTemplatesToDelete(toDelete)
}
const handleRetry = () => {
loadTemplates()
refetchTemplates()
}
if (isEditMode && selectedTemplate) {
@@ -152,9 +132,7 @@ export const TemplateManager: React.FC<TemplateManagerProps> = ({
onBack={() => {
setIsEditMode(false)
setSelectedTemplate(null)
if (templateId) {
navigate('/templates')
}
navigate('/templates')
}}
/>
)
@@ -169,7 +147,7 @@ export const TemplateManager: React.FC<TemplateManagerProps> = ({
<h3 className="mb-2 text-lg font-medium text-gray-900">
Ошибка загрузки шаблонов
</h3>
<p className="mb-4 text-gray-600">{error}</p>
<p className="mb-4 text-gray-600">{error.message}</p>
<Button onClick={handleRetry}>Попробовать снова</Button>
</div>
</div>