Skip to content

Commit 5ddba00

Browse files
authored
Merge pull request #19 from qualcomm/sp/add-google-analytics
Add support for card, link, and filter tracking using Google Analytics
2 parents 7599970 + 3b3b3d5 commit 5ddba00

6 files changed

Lines changed: 102 additions & 15 deletions

File tree

package-lock.json

Lines changed: 36 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
"react": "^19.1.1",
1919
"react-bootstrap": "^2.10.10",
2020
"react-dom": "^19.1.1",
21+
"react-ga4": "^2.1.0",
2122
"react-router-dom": "^7.8.0",
2223
"react-scripts": "^5.0.1",
2324
"web-vitals": "^2.1.4"

src/App.js

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import Navbar from 'react-bootstrap/Navbar';
88
import NavDropdown from 'react-bootstrap/NavDropdown';
99
import Button from 'react-bootstrap/Button';
1010

11+
import ReactGA from "react-ga4";
12+
1113
import ProjectCarousel from './components/ProjectCarousel';
1214
import ProjectList from './components/ProjectList';
1315

@@ -30,6 +32,14 @@ function App() {
3032
const allPlatforms = [...new Set(projects.flatMap(p => p.platforms))].sort();
3133
const allCategories = [...new Set(projects.flatMap(p => p.categories))].sort();
3234

35+
const handleLinkClick = (name) => {
36+
ReactGA.event({
37+
category: "Navigation",
38+
action: "Clicked on link",
39+
label: name
40+
});
41+
};
42+
3343
useEffect(() => {
3444
const fetchProjects = async () => {
3545
try {
@@ -48,6 +58,9 @@ function App() {
4858
};
4959

5060
fetchProjects();
61+
62+
ReactGA.initialize("G-ECVJXC37L5");
63+
ReactGA.send({ hitType: "pageview", page: window.location.pathname + window.location.search });
5164
}, []);
5265

5366
if (loading) {
@@ -113,7 +126,7 @@ function App() {
113126
</NavDropdown>
114127
</Nav>
115128
<Navbar.Text>
116-
<Button variant="info" href="https://github.com/qualcomm/awesome-qualcomm-developer/blob/main/CONTRIBUTING.md" target="_blank">
129+
<Button variant="info" href="https://github.com/qualcomm/awesome-qualcomm-developer/blob/main/CONTRIBUTING.md" onClick={() => { handleLinkClick("Contributing"); }} target="_blank">
117130
Add your awesome project!
118131
</Button>
119132
</Navbar.Text>
@@ -127,12 +140,12 @@ function App() {
127140
<ProjectList projects={projects} />
128141
<footer className="text-center mt-4 mb-4 border-top">
129142
<p className="mt-3 mb-3">
130-
Brought to you by <a href="https://qualcomm.com/developer" target="_blank" rel="noreferrer">Qualcomm</a>
143+
Brought to you by <a href="https://qualcomm.com/developer" onClick={() => { handleLinkClick("Qualcomm Developer"); }} target="_blank" rel="noreferrer">Qualcomm</a>
131144
</p>
132145
<small>
133146
<b>Disclaimer</b>: This site is a community-curated listing of third-party projects.<br />
134147
Qualcomm does not own or maintain these projects and is not responsible for their content. <br />
135-
<a href="https://github.com/qualcomm/awesome-qualcomm-developer?tab=readme-ov-file#disclaimer" target="_blank" rel="noreferrer">Learn more.</a>
148+
<a href="https://github.com/qualcomm/awesome-qualcomm-developer?tab=readme-ov-file#disclaimer" onClick={() => { handleLinkClick("Disclaimer"); }} target="_blank" rel="noreferrer">Learn more.</a>
136149
</small>
137150
</footer>
138151
</Container>

src/components/ProjectCard.js

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import Card from 'react-bootstrap/Card';
66
import Col from 'react-bootstrap/Col';
77
import Badge from 'react-bootstrap/Badge';
88

9+
import ReactGA from "react-ga4";
10+
911
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
1012
import { library } from '@fortawesome/fontawesome-svg-core'
1113
import { fas } from '@fortawesome/free-solid-svg-icons'
@@ -15,18 +17,26 @@ library.add(fas)
1517
const ProjectCard = ({ project }) => {
1618
const { name, author, stars, language, link, lastUpdated, platforms, categories, description } = project;
1719

20+
const handleCardClick = (label, type) => {
21+
ReactGA.event({
22+
category: 'Project',
23+
action: `Clicked ${type} Link`,
24+
label: label
25+
});
26+
};
27+
1828
return (
1929
<Col md={6} lg={4} className="mb-4">
2030
<Card className="h-100 shadow-sm">
2131
<Card.Header>
22-
<Card.Link href={link} target="_blank" rel="noopener noreferrer" className="fw-bold text-decoration-none">
32+
<Card.Link href={link} onClick={() => handleCardClick(name, "Project")} target="_blank" rel="noopener noreferrer" className="fw-bold text-decoration-none">
2333
{name}<FontAwesomeIcon icon="fa-solid fa-arrow-up-right-from-square" className="ms-2" />
2434
</Card.Link>
2535
</Card.Header>
2636
<Card.Body className="d-flex flex-column">
2737
<Card.Text>{description}</Card.Text>
2838
<Card.Subtitle className="mt-auto mb-2 text-muted small">
29-
By: <Card.Link href={`https://github.com/${author}`} target="_blank" rel="noopener noreferrer" className="text-decoration-none">{author}</Card.Link>
39+
By: <Card.Link href={`https://github.com/${author}`} onClick={() => handleCardClick(author, "Author")} target="_blank" rel="noopener noreferrer" className="text-decoration-none">{author}</Card.Link>
3040
</Card.Subtitle>
3141
<Card.Text className="text-muted small">
3242
<FontAwesomeIcon icon="fa-solid fa-code" /> {language}

0 commit comments

Comments
 (0)