@@ -18,6 +18,7 @@ export default function TemplateManagerPage() {
1818 const [ searchQuery , setSearchQuery ] = useState ( '' ) ;
1919 const [ selectedCategories , setSelectedCategories ] = useState < string [ ] > ( [ ] ) ;
2020 const [ tags , setTags ] = useState ( '' ) ;
21+ const [ error , setError ] = useState < string | null > ( null ) ;
2122
2223 useEffect ( ( ) => {
2324 const init = async ( ) => {
@@ -58,13 +59,18 @@ export default function TemplateManagerPage() {
5859 loadData ( ) ;
5960 } , [ loadData ] ) ;
6061 const handleCreateTemplate = async ( ) => {
61- const newTemplate = await TemplateService . createTemplate ( {
62- name : 'Untitled' ,
63- category : 'blog' ,
64- content : 'New content...' ,
65- } ) ;
66- setTemplates ( [ newTemplate , ...templates ] ) ;
67- setSelectedTemplate ( newTemplate ) ;
62+ try {
63+ setError ( null ) ;
64+ const newTemplate = await TemplateService . createTemplate ( {
65+ name : 'Untitled' ,
66+ category : 'blog' ,
67+ content : 'New content...' ,
68+ } ) ;
69+ setTemplates ( [ newTemplate , ...templates ] ) ;
70+ setSelectedTemplate ( newTemplate ) ;
71+ } catch ( err ) {
72+ setError ( 'Failed to create template.' ) ;
73+ }
6874 } ;
6975
7076 const handleVariableChange = async ( key : string , value : string ) => {
@@ -85,7 +91,9 @@ export default function TemplateManagerPage() {
8591 } ;
8692
8793 const getHighlightedText = ( text : string , highlight : string ) => {
88- const parts = text . split ( new RegExp ( `(${ highlight } )` , 'gi' ) ) ;
94+ if ( ! highlight ) return < span > { text } </ span > ;
95+ const escaped = highlight . replace ( / [ . * + ? ^ $ { } ( ) | [ \] \\ ] / g, '\\$&' ) ;
96+ const parts = text . split ( new RegExp ( `(${ escaped } )` , 'gi' ) ) ;
8997 return (
9098 < span >
9199 { parts . map ( ( part , i ) =>
@@ -148,6 +156,7 @@ export default function TemplateManagerPage() {
148156 + New Template
149157 </ button >
150158 </ div >
159+ { error && < p className = "text-red-500" > { error } </ p > }
151160
152161 < div className = "grid md:grid-cols-2 gap-8" >
153162 < VariableForm
0 commit comments