Skip to content

Commit b10eb82

Browse files
authored
Merge pull request #103 from USACE-RMC/enhancement/google-analytics-tags
Populate all GA4 custom dimensions to eliminate (not set) in analytics
2 parents eacc663 + 9e06ad8 commit b10eb82

1 file changed

Lines changed: 43 additions & 15 deletions

File tree

src/clientModules/analyticsEvents.js

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,17 +34,20 @@ if (typeof window !== 'undefined') {
3434
function parsePath(pathname) {
3535
const path = pathname.startsWith(BASE_PATH) ? pathname.slice(BASE_PATH.length).replace(/\/$/, '') : pathname.replace(/^\//, '').replace(/\/$/, '');
3636

37-
// Home page
37+
// Site-wide pages — all dimensions carry the page name
3838
if (!path) {
39-
return { page_type: 'home' };
39+
return { page_type: 'home', doc_category: 'home', doc_product: 'home', doc_type: 'home', doc_version: 'home', doc_page: 'home', doc_path: 'home' };
4040
}
4141

42-
// Changelog
4342
if (path === 'changelog') {
44-
return { page_type: 'changelog' };
43+
return { page_type: 'changelog', doc_category: 'changelog', doc_product: 'changelog', doc_type: 'changelog', doc_version: 'changelog', doc_page: 'changelog', doc_path: 'changelog' };
4544
}
4645

47-
// Documentation pages: docs/{category}/{product}/{doc_type}/v{X}.{Y}/{page}
46+
if (path === 'feedback') {
47+
return { page_type: 'feedback', doc_category: 'feedback', doc_product: 'feedback', doc_type: 'feedback', doc_version: 'feedback', doc_page: 'feedback', doc_path: 'feedback' };
48+
}
49+
50+
// Versioned documentation pages: docs/{category}/{product}/{doc_type}/v{X}.{Y}/{page}
4851
if (path.startsWith('docs/')) {
4952
const segments = path.replace(/^docs\//, '').split('/');
5053
const versionIdx = segments.findIndex((s) => /^v\d+\.\d+/.test(s));
@@ -57,18 +60,43 @@ function parsePath(pathname) {
5760
const doc_page = segments.slice(versionIdx + 1).join('/') || '(index)';
5861
const doc_path = segments.slice(0, versionIdx + 1).join('/');
5962

60-
// Lookup key for latestVersions.json: everything before the version
6163
const lookupKey = segments.slice(0, versionIdx).join('/');
6264
const latest = latestVersions?.[lookupKey];
6365
const is_latest_version = latest ? (latest === doc_version ? 'true' : 'false') : 'unknown';
6466

6567
return { page_type: 'doc_page', doc_category: category, doc_product: product, doc_type, doc_version, doc_page, doc_path, is_latest_version };
6668
}
6769

68-
return { page_type: 'docs_index' };
70+
// Dev docs: docs/dev/{product...}/{page} — no version segment
71+
if (segments[0] === 'dev' && segments.length >= 2) {
72+
const product = segments.slice(1, -1).join('/') || segments[1];
73+
const doc_page = segments[segments.length - 1];
74+
const doc_path = 'dev/' + segments.slice(1, -1).join('/');
75+
76+
return { page_type: 'dev-page', doc_category: 'dev', doc_product: product, doc_type: product, doc_version: product, doc_page, doc_path };
77+
}
78+
79+
// Fallback for any other docs/ path
80+
const doc_path = segments.join('/');
81+
return { page_type: 'docs-other', doc_category: segments[0], doc_product: doc_path, doc_type: doc_path, doc_version: doc_path, doc_page: doc_path, doc_path };
82+
}
83+
84+
// Category hub pages: /desktop-applications, /web-applications, /toolboxes, /dev
85+
const hubSegments = path.split('/');
86+
if (hubSegments.length === 1) {
87+
const name = hubSegments[0];
88+
return { page_type: 'hub', doc_category: name, doc_product: name, doc_type: name, doc_version: name, doc_page: name, doc_path: name };
89+
}
90+
91+
// Product hub pages: /desktop-applications/lifesim, /toolboxes/internal-erosion-suite, etc.
92+
if (hubSegments.length === 2) {
93+
const category = hubSegments[0];
94+
const product = hubSegments[1];
95+
return { page_type: 'product-hub', doc_category: category, doc_product: product, doc_type: product, doc_version: product, doc_page: product, doc_path: category + '/' + product };
6996
}
7097

71-
return { page_type: 'other' };
98+
// Catch-all for any other page
99+
return { page_type: 'other', doc_category: path, doc_product: path, doc_type: path, doc_version: path, doc_page: path, doc_path: path };
72100
}
73101

74102
// ── Page view tracking (Docusaurus onRouteDidUpdate hook) ───────────
@@ -81,13 +109,13 @@ export function onRouteDidUpdate({ location }) {
81109

82110
window.gtag('event', 'doc_page_view', {
83111
page_type: dims.page_type,
84-
doc_category: dims.doc_category || undefined,
85-
doc_product: dims.doc_product || undefined,
86-
doc_type: dims.doc_type || undefined,
87-
doc_version: dims.doc_version || undefined,
88-
doc_page: dims.doc_page || undefined,
89-
doc_path: dims.doc_path || undefined,
90-
is_latest_version: dims.is_latest_version || undefined,
112+
doc_category: dims.doc_category,
113+
doc_product: dims.doc_product,
114+
doc_type: dims.doc_type,
115+
doc_version: dims.doc_version,
116+
doc_page: dims.doc_page,
117+
doc_path: dims.doc_path,
118+
is_latest_version: dims.is_latest_version || 'n/a',
91119
page_title: document.title,
92120
});
93121
});

0 commit comments

Comments
 (0)