MCPcopy
hub / github.com/guaguaguaxia/weekly_report / TemplateManager

Function TemplateManager

components/TemplateManager.tsx:11–317  ·  view source on GitHub ↗
({ isOpen, onClose, onTemplateCreate })

Source from the content-addressed store, hash-verified

9}
10
11const TemplateManager: React.FC<TemplateManagerProps> = ({ isOpen, onClose, onTemplateCreate }) => {
12 const [templates, setTemplates] = useState<Template[]>([]);
13 const [showCreateForm, setShowCreateForm] = useState(false);
14 const [editingTemplate, setEditingTemplate] = useState<Template | null>(null);
15
16 // 表单状态
17 const [formData, setFormData] = useState({
18 name: '',
19 description: '',
20 content: '',
21 tags: ''
22 });
23
24 useEffect(() => {
25 if (isOpen) {
26 loadTemplates();
27 }
28 }, [isOpen]);
29
30 const loadTemplates = () => {
31 const allTemplates = TemplateStorage.getAllTemplates();
32 setTemplates(allTemplates);
33 };
34
35 const resetForm = () => {
36 setFormData({
37 name: '',
38 description: '',
39 content: '',
40 tags: ''
41 });
42 setEditingTemplate(null);
43 setShowCreateForm(false);
44 };
45
46 const handleCreateTemplate = () => {
47 if (!formData.name || !formData.content) {
48 alert('请填写模板名称和内容');
49 return;
50 }
51
52 const tags = formData.tags.split(',').map(tag => tag.trim()).filter(tag => tag);
53
54 TemplateStorage.saveCustomTemplate({
55 name: formData.name,
56 description: formData.description,
57 content: formData.content,
58 tags
59 });
60
61 resetForm();
62 loadTemplates();
63 onTemplateCreate?.();
64 };
65
66 const handleDeleteTemplate = (templateId: string) => {
67 if (window.confirm('确定要删除这个模板吗?')) {
68 TemplateStorage.deleteCustomTemplate(templateId);

Callers

nothing calls this directly

Calls 3

handleEditTemplateFunction · 0.85
handleDeleteTemplateFunction · 0.85
loadTemplatesFunction · 0.70

Tested by

no test coverage detected