55 useApp ,
66 useContent ,
77 usePanel ,
8- watch ,
9- } from "kirbyuse" ;
8+ watch
9+ } from "kirbyuse"
1010
1111/**
1212 * Composable for syncing slug values with auto-generation and uniqueness
@@ -22,34 +22,34 @@ export function useSyncedSlug({
2222 initialValue,
2323 syncField,
2424 syncSource,
25- onUpdate,
25+ onUpdate
2626} ) {
27- const app = useApp ( ) ;
28- const panel = usePanel ( ) ;
29- const { currentContent } = useContent ( ) ;
27+ const app = useApp ( )
28+ const panel = usePanel ( )
29+ const { currentContent } = useContent ( )
3030
31- const slug = ref ( initialValue || "" ) ;
32- const shouldAutoGenerate = ref ( ! initialValue ) ;
31+ const slug = ref ( initialValue || "" )
32+ const shouldAutoGenerate = ref ( ! initialValue )
3333
3434 // stop auto-generation on publish
3535 const handlePublish = ( ) => {
3636 if ( slug . value ) {
37- shouldAutoGenerate . value = false ;
37+ shouldAutoGenerate . value = false
3838 }
39- } ;
39+ }
4040
4141 onMounted ( ( ) => {
42- panel . events . on ( "content.publish" , handlePublish ) ;
43- } ) ;
42+ panel . events . on ( "content.publish" , handlePublish )
43+ } )
4444
4545 onUnmounted ( ( ) => {
46- panel . events . off ( "content.publish" , handlePublish ) ;
47- } ) ;
46+ panel . events . off ( "content.publish" , handlePublish )
47+ } )
4848
4949 // get all existing keys from the current content
5050 const getExistingKeys = ( ) => {
51- const keys = [ ] ;
52- const content = currentContent . value ;
51+ const keys = [ ]
52+ const content = currentContent . value
5353
5454 if ( content ?. fields && Array . isArray ( content . fields ) ) {
5555 // iterate through all field layouts
@@ -59,61 +59,61 @@ export function useSyncedSlug({
5959 if ( column . blocks && Array . isArray ( column . blocks ) ) {
6060 column . blocks . forEach ( ( block ) => {
6161 // check if this block has a key field
62- const key = block . content ?. key ;
62+ const key = block . content ?. key
6363 if ( key && key !== slug . value ) {
64- keys . push ( key ) ;
64+ keys . push ( key )
6565 }
66- } ) ;
66+ } )
6767 }
68- } ) ;
68+ } )
6969 }
70- } ) ;
70+ } )
7171 }
7272
73- return keys ;
74- } ;
73+ return keys
74+ }
7575
7676 // ensure slug is unique by adding suffix if needed
7777 const ensureUniqueSlug = ( baseSlug ) => {
78- const existingKeys = getExistingKeys ( ) ;
79- let uniqueSlug = baseSlug ;
80- let counter = 2 ;
78+ const existingKeys = getExistingKeys ( )
79+ let uniqueSlug = baseSlug
80+ let counter = 2
8181
8282 while ( existingKeys . includes ( uniqueSlug ) ) {
83- uniqueSlug = `${ baseSlug } _${ counter } ` ;
84- counter ++ ;
83+ uniqueSlug = `${ baseSlug } _${ counter } `
84+ counter ++
8585 }
8686
87- return uniqueSlug ;
88- } ;
87+ return uniqueSlug
88+ }
8989
9090 // watch for sync field changes
9191 if ( syncField && syncSource ) {
9292 watch (
9393 ( ) => syncSource [ syncField ] ,
9494 ( newValue ) => {
9595 if ( shouldAutoGenerate . value && newValue ) {
96- const baseSlug = app . $helper . slug ( newValue ) ;
97- const uniqueSlug = ensureUniqueSlug ( baseSlug ) ;
98- slug . value = uniqueSlug ;
99- onUpdate ?. ( uniqueSlug ) ;
96+ const baseSlug = app . $helper . slug ( newValue )
97+ const uniqueSlug = ensureUniqueSlug ( baseSlug )
98+ slug . value = uniqueSlug
99+ onUpdate ?. ( uniqueSlug )
100100 }
101101 } ,
102- { immediate : true } ,
103- ) ;
102+ { immediate : true }
103+ )
104104 }
105105
106106 // handle manual input
107107 const handleManualInput = ( value ) => {
108108 // disable auto-generation when user manually edits
109- shouldAutoGenerate . value = false ;
110- slug . value = value ;
111- onUpdate ?. ( value ) ;
112- } ;
109+ shouldAutoGenerate . value = false
110+ slug . value = value
111+ onUpdate ?. ( value )
112+ }
113113
114114 return {
115115 slug,
116116 shouldAutoGenerate,
117- handleManualInput,
118- } ;
117+ handleManualInput
118+ }
119119}
0 commit comments