/** * Generate a UTM-encoded URL for tracking purposes. * @param baseUrl - The base URL to append UTM parameters to. * @param page - The page path to be used for the UTM campaign. * @param utmSource - The UTM source parameter. * @param utmMedium - The UTM medium parameter. * @returns The full URL with UTM parameters. */ export function generateUTMUrl( baseUrl: string, page: string = '/developers/', utmSource: string = 'partnership', utmMedium: string = 'vuejs' ): string { if (!baseUrl) { console.warn('Base URL is empty. Returning an empty string.') return '' } const cleanedPage = page.replace(/\//g, '-').replace(/^-+|-+$/g, '') const url = new URL(baseUrl) url.searchParams.append('utm_source', utmSource) url.searchParams.append('utm_medium', utmMedium) url.searchParams.append('utm_campaign', cleanedPage) return url.toString() } /** * Truncate a combined string from an array of text to a specified length. * @param textArray - The array of strings to combine and truncate. * @param maxLength - The maximum allowed length of the resulting string. * @param ellipsis - The string to append to truncated text, defaulting to '...'. * @returns The truncated string with ellipsis if truncation occurs. */ export function truncateTextFromArray( textArray: string[], maxLength: number, ellipsis: string = '...' ): string { if (textArray.length === 0) return '' const combinedText = textArray.join(' ') if (combinedText.length <= maxLength) return combinedText let truncatedText = combinedText.slice(0, combinedText.lastIndexOf(' ', maxLength)) // Remove trailing comma or punctuation truncatedText = truncatedText.replace(/,\s*$/, '') return `${truncatedText}${ellipsis}` }