@@ -9,15 +9,45 @@ export const useUTM = (baseUrl: string, content: string) => {
99 /**
1010 * Generates a URL with UTM tracking parameters
1111 *
12- * @returns The URL with UTM parameters
12+ * @returns { string } The URL with UTM parameters
1313 */
1414 const getUrl = ( ) : string => {
15- const url = new URL ( baseUrl ) ;
15+ let url : URL ;
1616
17- /* Add UTM parameters */
17+ try {
18+ url = new URL ( baseUrl ) ;
19+ } catch ( error ) {
20+ return baseUrl ;
21+ }
22+
23+ /* Default UTM parameters */
1824 url . searchParams . set ( 'utm_source' , 'hawk-tracker.ru' ) ;
1925 url . searchParams . set ( 'utm_content' , content ) ;
2026
27+ /* If current page has utm_* params, override defaults with those */
28+ if ( process . client && typeof window !== 'undefined' ) {
29+ const currentSearchParams = new URLSearchParams ( window . location . search || '' ) ;
30+
31+ /**
32+ * If utm_content is overridden, we will add original button content to utm_place
33+ */
34+ let isUtmContentOverridden = false ;
35+
36+ currentSearchParams . forEach ( ( value , key ) => {
37+ if ( key . toLowerCase ( ) . startsWith ( 'utm_' ) ) {
38+ if ( key . toLowerCase ( ) === 'utm_content' ) {
39+ isUtmContentOverridden = true ;
40+ }
41+
42+ url . searchParams . set ( key , value ) ;
43+ }
44+ } ) ;
45+
46+ if ( isUtmContentOverridden && ! url . searchParams . has ( 'utm_place' ) ) {
47+ url . searchParams . set ( 'utm_place' , content ) ;
48+ }
49+ }
50+
2151 return url . toString ( ) ;
2252 } ;
2353
0 commit comments