@@ -143,7 +143,9 @@ const SuperDocTemplateBuilder = forwardRef<
143143 const [ templateFields , setTemplateFields ] = useState < Types . TemplateField [ ] > (
144144 fields . initial || [ ] ,
145145 ) ;
146- const [ selectedFieldId , setSelectedFieldId ] = useState < string | null > ( null ) ;
146+ const [ selectedFieldId , setSelectedFieldId ] = useState < string | number | null > (
147+ null ,
148+ ) ;
147149 const [ menuVisible , setMenuVisible ] = useState ( false ) ;
148150 const [ menuPosition , setMenuPosition ] = useState < DOMRect | undefined > ( ) ;
149151 const [ menuQuery , setMenuQuery ] = useState < string > ( "" ) ;
@@ -202,13 +204,12 @@ const SuperDocTemplateBuilder = forwardRef<
202204 if ( ! superdocRef . current ?. activeEditor ) return false ;
203205
204206 const editor = superdocRef . current . activeEditor ;
205- const fieldId = `field_ ${ Date . now ( ) } ` ;
207+ const previousFields = templateFields ;
206208
207209 const success =
208210 mode === "inline"
209211 ? editor . commands . insertStructuredContentInline ?.( {
210212 attrs : {
211- id : fieldId ,
212213 alias : field . alias ,
213214 tag : field . metadata
214215 ? JSON . stringify ( field . metadata )
@@ -218,7 +219,6 @@ const SuperDocTemplateBuilder = forwardRef<
218219 } )
219220 : editor . commands . insertStructuredContentBlock ?.( {
220221 attrs : {
221- id : fieldId ,
222222 alias : field . alias ,
223223 tag : field . metadata
224224 ? JSON . stringify ( field . metadata )
@@ -228,28 +228,28 @@ const SuperDocTemplateBuilder = forwardRef<
228228 } ) ;
229229
230230 if ( success ) {
231- const newField : Types . TemplateField = {
232- id : fieldId ,
233- alias : field . alias ,
234- tag : field . category ,
235- } ;
231+ const updatedFields = getTemplateFieldsFromEditor ( editor ) ;
236232
237- setTemplateFields ( ( prev ) => {
238- const updated = [ ...prev , newField ] ;
239- onFieldsChange ?.( updated ) ;
240- return updated ;
241- } ) ;
233+ setTemplateFields ( updatedFields ) ;
234+ onFieldsChange ?.( updatedFields ) ;
235+
236+ const insertedField = updatedFields . find (
237+ ( candidate ) =>
238+ ! previousFields . some ( ( existing ) => existing . id === candidate . id ) ,
239+ ) ;
242240
243- onFieldInsert ?.( newField ) ;
241+ if ( insertedField ) {
242+ onFieldInsert ?.( insertedField ) ;
243+ }
244244 }
245245
246246 return success ;
247247 } ,
248- [ onFieldInsert , onFieldsChange ] ,
248+ [ onFieldInsert , onFieldsChange , templateFields ] ,
249249 ) ;
250250
251251 const updateField = useCallback (
252- ( id : string , updates : Partial < Types . TemplateField > ) : boolean => {
252+ ( id : string | number , updates : Partial < Types . TemplateField > ) : boolean => {
253253 if ( ! superdocRef . current ?. activeEditor ) return false ;
254254
255255 const editor = superdocRef . current . activeEditor ;
@@ -275,7 +275,7 @@ const SuperDocTemplateBuilder = forwardRef<
275275 ) ;
276276
277277 const deleteField = useCallback (
278- ( id : string ) : boolean => {
278+ ( id : string | number ) : boolean => {
279279 const editor = superdocRef . current ?. activeEditor ;
280280
281281 if ( ! editor ) {
@@ -348,7 +348,7 @@ const SuperDocTemplateBuilder = forwardRef<
348348 ) ;
349349
350350 const selectField = useCallback (
351- ( id : string ) => {
351+ ( id : string | number ) => {
352352 if ( ! superdocRef . current ?. activeEditor ) return ;
353353
354354 const editor = superdocRef . current . activeEditor ;
0 commit comments