Skip to content
This repository was archived by the owner on Jan 30, 2025. It is now read-only.

Commit ca0d4c7

Browse files
committed
update analytics metrics
1 parent 14a80f5 commit ca0d4c7

File tree

12 files changed

+146
-31
lines changed

12 files changed

+146
-31
lines changed

src/components/Auth.tsx

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,7 @@ import { db } from '@zoonk/firebase/db';
55
import { performance } from '@zoonk/firebase/performance';
66
import { User } from '@zoonk/models';
77
import { logIPAddress } from '@zoonk/services/users';
8-
import {
9-
appLanguage,
10-
AuthContext,
11-
isProduction,
12-
logEvent,
13-
pageview,
14-
setUserID,
15-
} from '@zoonk/utils';
8+
import { AuthContext, pageview } from '@zoonk/utils';
169

1710
const Auth = () => {
1811
const { user, setProfile, setUser } = useContext(AuthContext);
@@ -36,7 +29,6 @@ const Auth = () => {
3629

3730
// Store the user data to be saved in the AuthContext.
3831
setUser({ ...fbUser, uid: authState.uid });
39-
setUserID(authState.uid);
4032
}
4133
});
4234
}
@@ -82,7 +74,7 @@ const Auth = () => {
8274
* IP address in case of multiple violations.
8375
*/
8476
useEffect(() => {
85-
if (authState && isProduction) {
77+
if (authState) {
8678
logIPAddress();
8779
}
8880
}, [authState]);
@@ -94,14 +86,8 @@ const Auth = () => {
9486
useEffect(() => {
9587
const handleRouteChange = (url: string) => {
9688
// Don't log data when the user is an admin.
97-
if (user?.role === 'admin' || !isProduction) return;
98-
pageview(url);
99-
logEvent({
100-
action: 'view',
101-
category: 'app_language',
102-
label: appLanguage,
103-
value: 1,
104-
});
89+
if (user?.role === 'admin') return;
90+
pageview(url, user?.uid);
10591
};
10692

10793
Router.events.on('routeChangeComplete', handleRouteChange);

src/components/PostCreate.tsx

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ const PostCreate = ({
4040
}
4141
}, [chapterId]);
4242

43+
// Log when a user started creating a post
44+
useEffect(() => {
45+
const start = new Date().getTime();
46+
localStorage.setItem('postStart', String(start));
47+
}, []);
48+
4349
if (!user || !profile) {
4450
return null;
4551
}

src/services/chapters.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { db, timestamp } from '@zoonk/firebase/db';
22
import { Chapter, Profile } from '@zoonk/models';
3-
import { generateRandomSlug } from '@zoonk/utils';
3+
import { generateRandomSlug, logEdit } from '@zoonk/utils';
44
import { updateTopic } from './topics';
55
import { serializeChapter } from '../serializers';
66

@@ -19,13 +19,15 @@ export const createChapter = async (data: Chapter.Create): Promise<string> => {
1919
const { title } = data;
2020
const slug = generateRandomSlug(title);
2121
await db.doc(`chapters/${slug}`).set(data);
22+
logEdit('chapters', 'add', data.createdById);
2223
return slug;
2324
};
2425

2526
export const updateChapter = (
2627
data: Chapter.Update,
2728
id: string,
2829
): Promise<void> => {
30+
logEdit('chapters', 'edit', data.updatedById);
2931
return db.doc(`chapters/${id}`).update(data);
3032
};
3133

src/services/comments.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { db, timestamp } from '@zoonk/firebase/db';
22
import { Comment, Profile } from '@zoonk/models';
3-
import { appLanguage } from '@zoonk/utils';
3+
import { appLanguage, logEdit } from '@zoonk/utils';
44
import { serializeComment } from '../serializers';
55
import { updatePost } from './posts';
66

@@ -18,6 +18,7 @@ const commentConverter: firebase.firestore.FirestoreDataConverter<Comment.Get> =
1818
export const createComment = (
1919
comment: Comment.Create,
2020
): Promise<firebase.firestore.DocumentReference> => {
21+
logEdit('comments', 'add', comment.createdById);
2122
return db.collection('comments').add(comment);
2223
};
2324

src/services/followers.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { db, timestamp } from '@zoonk/firebase/db';
22
import { Follower } from '@zoonk/models';
3+
import { logFollow } from '@zoonk/utils';
34
import { serializeFollower } from '../serializers';
45

56
const followerConverter: firebase.firestore.FirestoreDataConverter<Follower.Get> = {
@@ -58,6 +59,7 @@ export const follow = (
5859
id: string,
5960
userId: string,
6061
): Promise<void> => {
62+
logFollow('follow', collection, id, userId);
6163
return db
6264
.doc(`${collection}/${id}/followers/${userId}`)
6365
.set({ joined: timestamp });
@@ -68,6 +70,7 @@ export const unfollow = (
6870
id: string,
6971
userId: string,
7072
): Promise<void> => {
73+
logFollow('unfollow', collection, id, userId);
7174
return db.doc(`${collection}/${id}/followers/${userId}`).delete();
7275
};
7376

src/services/groups.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { db, timestamp } from '@zoonk/firebase/db';
22
import { Group, Profile } from '@zoonk/models';
3-
import { appLanguage, getRandomId, generateSlug } from '@zoonk/utils';
3+
import { appLanguage, getRandomId, generateSlug, logEdit } from '@zoonk/utils';
44
import { serializeGroup } from '../serializers';
55

66
const groupConverter: firebase.firestore.FirestoreDataConverter<Group.Get> = {
@@ -32,10 +32,12 @@ export const createGroup = async (group: Group.Create): Promise<string> => {
3232
}
3333

3434
await db.doc(`groups/${id}`).set(group);
35+
logEdit('groups', 'add', group.createdById);
3536
return id;
3637
};
3738

3839
export const updateGroup = (group: Group.Update, id: string): Promise<void> => {
40+
logEdit('groups', 'edit', group.updatedById);
3941
return db.doc(`groups/${id}`).update(group);
4042
};
4143

src/services/likes.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import { db } from '@zoonk/firebase/db';
22
import { ItemLike } from '@zoonk/models';
3+
import { logLike } from '@zoonk/utils';
34

45
/**
56
* Check if a user has liked an item or not.
@@ -25,6 +26,7 @@ export const toggleLike = (
2526
uid: string,
2627
current: boolean,
2728
): Promise<void> => {
29+
logLike(!current, itemPath, uid);
2830
return db
2931
.doc(`${itemPath}/likes/${uid}`)
3032
.set({ like: !current }, { merge: true });

src/services/posts.ts

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import { arrayRemove, arrayUnion, db, timestamp } from '@zoonk/firebase/db';
22
import { functions } from '@zoonk/firebase/functions';
33
import { ChapterProgress, Dictionary, Post, Profile } from '@zoonk/models';
4-
import { appLanguage, generateRandomSlug } from '@zoonk/utils';
4+
import {
5+
appLanguage,
6+
generateRandomSlug,
7+
logEdit,
8+
logPostCreation,
9+
} from '@zoonk/utils';
510
import { serializePost } from '../serializers';
611
import { getChapter, updateChapter } from './chapters';
712
import { getTopic } from './topics';
@@ -20,10 +25,21 @@ export const postConverter: firebase.firestore.FirestoreDataConverter<Post.Get>
2025
export const createPost = async (data: Post.Create): Promise<string> => {
2126
const slug = generateRandomSlug(data.title);
2227
await db.doc(`posts/${slug}`).set(data);
28+
logEdit(data.category, 'add', data.createdById);
29+
30+
// Log how long a user took to create a post. This is used to improve the UX.
31+
const start = localStorage.getItem('postStart');
32+
if (start) {
33+
const end = new Date().getTime();
34+
const time = end - Number(start);
35+
logPostCreation(time, data.category);
36+
}
37+
2338
return slug;
2439
};
2540

2641
export const updatePost = (data: Post.Update, id: string): Promise<void> => {
42+
logEdit('posts', 'edit', data.updatedById);
2743
return db.doc(`posts/${id}`).update(data);
2844
};
2945

@@ -50,6 +66,7 @@ export const deletePost = async (
5066
},
5167
id,
5268
);
69+
logEdit('posts', 'delete', editorId);
5370
return db.doc(`posts/${id}`).delete();
5471
};
5572

src/services/topics.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { db } from '@zoonk/firebase/db';
22
import { Topic } from '@zoonk/models';
3-
import { appLanguage } from '@zoonk/utils';
3+
import { appLanguage, logEdit } from '@zoonk/utils';
44
import { serializeTopic } from '../serializers';
55

66
const topicConverter: firebase.firestore.FirestoreDataConverter<Topic.Get> = {
@@ -15,10 +15,12 @@ const topicConverter: firebase.firestore.FirestoreDataConverter<Topic.Get> = {
1515
};
1616

1717
export const createTopic = (topic: Topic.Create, id: string): Promise<void> => {
18+
logEdit('topics', 'add', topic.createdById);
1819
return db.doc(`topics/${id}`).set(topic);
1920
};
2021

2122
export const updateTopic = (topic: Topic.Update, id: string): Promise<void> => {
23+
logEdit('topics', 'edit', topic.updatedById);
2224
return db.doc(`topics/${id}`).update(topic);
2325
};
2426

src/services/upload.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { storage } from '@zoonk/firebase/storage';
2+
import { logImageUpload } from '@zoonk/utils';
23

34
/**
45
* Upload a file to Firebase.
@@ -13,6 +14,7 @@ export const upload = async (file: File, folder: string): Promise<string> => {
1314
// It uses the current timestamp to make sure we're creating a unique file.
1415
const fileUpload = ref.child(`${folder}/${file.name}-${now}`).put(file);
1516
const snap = await fileUpload;
17+
logImageUpload(folder);
1618

1719
// Return a string containing the file URL.
1820
return snap.ref.getDownloadURL();

0 commit comments

Comments
 (0)