Skip to content
This repository was archived by the owner on Jul 10, 2024. It is now read-only.

Commit e6f4610

Browse files
committed
analytics file added
1 parent b761e88 commit e6f4610

File tree

3 files changed

+92
-2
lines changed

3 files changed

+92
-2
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "saffroncodejs",
3-
"version": "2.1.5",
3+
"version": "2.1.6",
44
"description": "Package of optimised react components and javascript functions for developers ♫♪",
55
"main": "./lib/SaffronCode.js",
66
"types": "./lib/SaffronCode.d.ts",

src/SaffronCode.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import StringFunctions from './libs/StringFunctions';
1111
import PageData from './framework/pageManager/PageData';
1212
import GlobalStorage from './libs/GlobalStorage';
1313
import Encode from './libs/Encode';
14+
import Analytics from './analytics/Analytics';
1415

1516

1617

@@ -59,5 +60,13 @@ var libs:libsModel = {
5960
Encode:Encode,
6061
}
6162

63+
interface analyticsModel{
64+
Analytics:typeof Analytics
65+
}
66+
67+
var analytics:analyticsModel = {
68+
Analytics: Analytics
69+
}
70+
6271

63-
export {ui,framework,libs} ;
72+
export {ui,framework,libs, analytics};

src/analytics/Analytics.ts

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
interface AnalyticsModel {
2+
run: typeof run
3+
}
4+
5+
var Analytics:AnalyticsModel = {
6+
run: run
7+
};
8+
9+
function run():any {
10+
let hostName:string = window.location.hostname;
11+
let interval:number;
12+
let frequency:number = 200;
13+
14+
// set up interval and send api call on initialization
15+
setAnalyticInterval();
16+
sendApiRequest();
17+
18+
document.addEventListener("visibilitychange", onVisibleChange);
19+
20+
function setAnalyticInterval():any {
21+
let prevLocation:string = window.location.href;
22+
let presentLocation:string = window.location.href;
23+
interval = setInterval(() => {
24+
presentLocation = window.location.href;
25+
26+
if( prevLocation === presentLocation ) {
27+
return;
28+
}
29+
30+
// call api and set prevLocation to presentLocation
31+
sendApiRequest();
32+
prevLocation = presentLocation;
33+
}, frequency)
34+
}
35+
36+
function sendApiRequest():any {
37+
38+
let body = {
39+
AppId: hostName,
40+
PageName: '',
41+
Enter: false
42+
};
43+
44+
let pathName: string = window.location.pathname;
45+
let pathArray: string[] = pathName.split('/');
46+
let pageName: string = pathArray[1];
47+
if(pageName && (pageName.length > 0)) {
48+
body = {
49+
AppId: hostName,
50+
PageName: pageName,
51+
Enter: true
52+
};
53+
}
54+
55+
fetch('https://saffroncodesdk.com/api/Projects/versioncontrol', {
56+
method: 'POST',
57+
body: JSON.stringify(body),
58+
})
59+
.then(response => response.json())
60+
.then(data => console.log(data));
61+
}
62+
63+
function onVisibleChange () {
64+
// if page is hidden to user (minimize or on another tab)
65+
// clear interval and set interval again if page is visible
66+
// to user and also send api request
67+
68+
let isHidden:boolean = document.hidden;
69+
if(isHidden) {
70+
clearInterval(interval);
71+
return;
72+
}
73+
clearInterval(interval);
74+
setAnalyticInterval();
75+
sendApiRequest();
76+
77+
// console.log(document.hidden, 'isHidden', document.visibilityState, 'state');
78+
}
79+
}
80+
81+
export default Analytics;

0 commit comments

Comments
 (0)