Skip to content

Commit 53d9632

Browse files
Merge pull request #43 from clj-codes/feat/google-analytics
feat: google analytics
2 parents 78581a4 + 35adec6 commit 53d9632

File tree

5 files changed

+52
-1
lines changed

5 files changed

+52
-1
lines changed

shadow-cljs.edn

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,8 @@
1616
:install-deps true
1717
:closure-defines {codes.clj.docs.frontend.config/BASE_URL #shadow/env ["BASE_URL"]
1818
codes.clj.docs.frontend.config/CLIENT_ID #shadow/env ["CLIENT_ID"]
19-
codes.clj.docs.frontend.config/REDIRECT_URI #shadow/env ["REDIRECT_URI"]}}
19+
codes.clj.docs.frontend.config/REDIRECT_URI #shadow/env ["REDIRECT_URI"]
20+
codes.clj.docs.frontend.config/GA_TAG_ID #shadow/env ["GA_TAG_ID"]}}
2021
:build-hooks [(codes.clj.docs.frontend.dev.shadow.hooks/hashed-files
2122
["resources/public/css/app.css"
2223
"resources/public/js/core.js"])

src/codes/clj/docs/frontend/config.cljs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,10 +20,14 @@
2020
(goog-define BASE_URL "https://docs-backend.fly.dev/api/")
2121
(goog-define CLIENT_ID "46d86692f00ed9c613a1")
2222
(goog-define REDIRECT_URI "https://docs.clj.codes/github-callback")
23+
(goog-define GA_TAG_ID "")
2324

2425
(def config
2526
(let [debug? goog.DEBUG]
2627
{:debug? debug?
28+
:ga-tag-id (if debug?
29+
""
30+
GA_TAG_ID)
2731
:base-url (if debug?
2832
"http://localhost:3001/api/"
2933
BASE_URL)

src/codes/clj/docs/frontend/core.cljs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
(:require ["@mantine/core" :refer [MantineProvider]]
33
["react-dom/client" :as rdom]
44
[codes.clj.docs.frontend.config :refer [theme]]
5+
[codes.clj.docs.frontend.infra.analytics :refer [google-analytics]]
56
[codes.clj.docs.frontend.infra.flex.hook :refer [use-flex]]
67
[codes.clj.docs.frontend.infra.helix :refer [defnc]]
78
[codes.clj.docs.frontend.infra.routes.core :refer [init-routes!]]
@@ -25,5 +26,6 @@
2526
(.render root ($ app)))
2627

2728
(defn ^:export init []
29+
(google-analytics)
2830
(init-routes!)
2931
(render))
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
(ns codes.clj.docs.frontend.infra.analytics
2+
(:require [clojure.string :as string]
3+
[codes.clj.docs.frontend.infra.system.state :as system.state]))
4+
5+
(defn google-tag-manager
6+
[ga-tag-id]
7+
(let [script (js/document.createElement "script")]
8+
(set! (.-src script) (str "https://www.googletagmanager.com/gtag/js?id="
9+
ga-tag-id))
10+
(set! (.-async script) true)
11+
(js/document.head.prepend script)
12+
script))
13+
14+
(defn google-tag
15+
[ga-tag-id gtm-script]
16+
(let [script (js/document.createElement "script")]
17+
(set! (.-src script) (str "window.dataLayer = window.dataLayer || [];
18+
function gtag(){dataLayer.push(arguments);}
19+
gtag('js', new Date());
20+
21+
gtag('config', '" ga-tag-id "');"))
22+
(js/document.head.insertBefore script (.-nextSibling gtm-script))))
23+
24+
(defn ga-scripts
25+
[ga-tag-id]
26+
(when-not (string/blank? ga-tag-id)
27+
(let [gtm-script (google-tag-manager ga-tag-id)]
28+
(google-tag ga-tag-id gtm-script))))
29+
30+
(defn google-analytics []
31+
(ga-scripts (-> @system.state/components :config :ga-tag-id)))
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
(ns codes.clj.docs.frontend.test.infra.analytics-test
2+
(:require [cljs.test :refer-macros [deftest is testing]]
3+
[clojure.string :as string]
4+
[codes.clj.docs.frontend.infra.analytics :as analytics]))
5+
6+
(deftest ga-scripts-test
7+
(testing "not-blank GA_TAG_ID should return a script containing the tag id"
8+
(let [ga-tag-id "G-0123456789"
9+
ga-scripts (analytics/ga-scripts ga-tag-id)]
10+
(is (instance? js/HTMLScriptElement ga-scripts))
11+
(is (string/includes? (.-src ga-scripts) ga-tag-id))))
12+
(testing "blank GA_TAG_ID should not return anything"
13+
(is (nil? (analytics/ga-scripts "")))))

0 commit comments

Comments
 (0)