Total users
+0
+Total messages
+0
+Avg messages/user
+0
+Active languages
+0
+Messages per user
+ +Language distribution
+ +User activity
+| Name | +Username | +Language | +Messages | +Last active | +
|---|
0
+0
+0
+0
+| Name | +Username | +Language | +Messages | +Last active | +
|---|
1x
zj)j97=}_eB 0 0_EA!&qa
zGT*#oCNSxNEfd35-}|v_ZCm>_c8crAV4y;F1})gxwIPuv~Rod0BnZE2v!v+9Ie;+zH1iD
zdi${wXYS>okaxex<
kmPv+yr|Y{09ab03c*wEdt5wCn5?G
zUCJAo6&a_9>GGU48YN)Qk2He8H~b=L{J&0yL(fR5u9|+Y*lg;0oLz-d^u?UPN2IGa
zkCXpWDisKfwy{v!qbV@|QYMh-fNsPb!$&g
8ek*bxK*b8>9$ShG?bL0VtC?jq@;pFLnmwP7lCt^
z)-K$K6{ADWYSnbz^Rlylp4S!@(o<1=f`fg)lY=_J7d!CXq2Xc4NRmRj&|qL;+V0Eo
zz({Eo(y0I*Fjr04HY03m;2C!StHHo92lgit
bW@vdvNa_p|DQ_3KpHj3b+#h33FSDmXwy3mQUr`*Sk5^i;j*4-u*Ycc!y?BI}OYA
zwFA;a#%2_ZH1P(D0qagw76X~D^Z;=xR4xF~wWzq5;l+#83M2$lD+Wf*1-K?KS`d)0
zHq@GNqe1)^4Z`Zp5Y|Ik(M2|}cZ~{@`1p8n2?-M;BNa6@J^MC%(ZGj;D8xa*J2N9=
zcxY(-PW|S6Ko=i85T~N14j_MV8&a7ArjD7}W~RZtuN}bVqY
zdV2OYSUR1PUBhTG&5`d}geGhI))(73R<=#Dug<+n&kjIiJ3m-s+6ii!@yDY1lsLZ#
zYhN!Ob7wJ$wG49Fc`ZujxwVquO6KO2G-1R#+fcszp}k~z<{rP*yq~3QYQ^iN7DG`v
zm}jYsBt{F1a|272yqn8z3mGy5Y3F(Language distribution
User activity
-
@@ -127,13 +114,6 @@
User activity
User activity
const lastActiveDate = new Date(user.lastMessageTime);
row.innerHTML = `
- ${user.firstName} ${user.lastName}
+ ${user.firstName} ${user.lastName || ''}
@${user.userName}
${user.languageCode.toUpperCase()}
From 4c6cc5329686a0b4134959e7ff9930603a9e7fac Mon Sep 17 00:00:00 2001
From: SegoCode <35817798+SegoCode@users.noreply.github.com>
Date: Tue, 25 Mar 2025 00:03:00 +0100
Subject: [PATCH 09/37] Update admin.html
---
code/src/main/resources/views/admin.html | 28 +++++++++++++-----------
1 file changed, 15 insertions(+), 13 deletions(-)
diff --git a/code/src/main/resources/views/admin.html b/code/src/main/resources/views/admin.html
index dc5647b..e138291 100644
--- a/code/src/main/resources/views/admin.html
+++ b/code/src/main/resources/views/admin.html
@@ -3,7 +3,7 @@
- User activity dashboard
+ Usage dashboard
User activity
-
+
@@ -89,11 +89,11 @@ Active languages
Messages per user
-
+
Language distribution
-
+
User activity
function initCharts() {
// Messages per User Chart
- new Chart(document.getElementById('messagesPerUserChart'), {
- type: 'bar',
- data: {
- labels: users.map(user => user.userName),
- datasets: [{
- label: 'Number of messages',
- data: users.map(user => user.messageCount),
- backgroundColor: '#4F46E5',
- borderRadius: 6
- }]
+ const messagesPerUserOptions = {
+ series: [{
+ name: 'Messages',
+ data: users.map(user => user.messageCount)
+ }],
+ chart: {
+ type: 'bar',
+ height: 350,
+ toolbar: {
+ show: false
+ }
},
- options: {
- responsive: true,
- plugins: { legend: { display: false } },
- scales: {
- y: {
- beginAtZero: true,
- ticks: { stepSize: 1 },
- title: { display: true, text: 'Message Count' }
+ plotOptions: {
+ bar: {
+ borderRadius: 6,
+ dataLabels: {
+ position: 'top'
}
}
+ },
+ colors: ['#4F46E5'],
+ xaxis: {
+ categories: users.map(user => user.userName),
+ position: 'bottom'
+ },
+ yaxis: {
+ title: {
+ text: 'Message Count'
+ }
+ },
+ dataLabels: {
+ enabled: false
+ },
+ grid: {
+ borderColor: '#f3f4f6'
}
- });
+ };
+
+ const messagesPerUserChart = new ApexCharts(document.querySelector("#messagesPerUserChart"), messagesPerUserOptions);
+ messagesPerUserChart.render();
// Language Distribution Chart
const languageCounts = users.reduce((counts, user) => {
@@ -203,29 +220,54 @@ User activity
return counts;
}, {});
- new Chart(document.getElementById('languageChart'), {
- type: 'bar',
- data: {
- labels: Object.keys(languageCounts).map(lang => lang.toUpperCase()),
- datasets: [{
- label: 'Users per Language',
- data: Object.values(languageCounts),
- backgroundColor: '#4F46E5',
- borderRadius: 6
- }]
+ const languageChartOptions = {
+ series: [{
+ name: 'Users',
+ data: Object.values(languageCounts)
+ }],
+ chart: {
+ type: 'bar',
+ height: 350,
+ toolbar: {
+ show: false
+ }
},
- options: {
- responsive: true,
- plugins: { legend: { display: false } },
- scales: {
- y: {
- beginAtZero: true,
- ticks: { stepSize: 1 },
- title: { display: true, text: 'Number of users' }
+ plotOptions: {
+ bar: {
+ borderRadius: 6,
+ dataLabels: {
+ position: 'top'
}
}
+ },
+ colors: ['#4F46E5'],
+ xaxis: {
+ categories: Object.keys(languageCounts).map(lang => lang.toUpperCase()),
+ position: 'bottom'
+ },
+ yaxis: {
+ title: {
+ text: 'Number of users'
+ }
+ },
+ dataLabels: {
+ enabled: true,
+ formatter: function (val) {
+ return val;
+ },
+ offsetY: -20,
+ style: {
+ fontSize: '12px',
+ colors: ["#304758"]
+ }
+ },
+ grid: {
+ borderColor: '#f3f4f6'
}
- });
+ };
+
+ const languageChart = new ApexCharts(document.querySelector("#languageChart"), languageChartOptions);
+ languageChart.render();
}
From 386aee8f5e5f1f2dbf0f04d629745fbb826fae64 Mon Sep 17 00:00:00 2001
From: SegoCode <35817798+SegoCode@users.noreply.github.com>
Date: Fri, 28 Mar 2025 11:53:08 +0100
Subject: [PATCH 26/37] Update admin.html
---
code/src/main/resources/views/admin.html | 22 ++++++++++++++++++----
1 file changed, 18 insertions(+), 4 deletions(-)
diff --git a/code/src/main/resources/views/admin.html b/code/src/main/resources/views/admin.html
index 4d63dfa..245e1f5 100644
--- a/code/src/main/resources/views/admin.html
+++ b/code/src/main/resources/views/admin.html
@@ -8,14 +8,28 @@
+
-Usage dashboard
- Usage Dashboard
+ Avg messages/user
Active languages
- Active Countrys
+ Messages per user
Language distribution
-
+ Country distribution
+
User activity
@@ -148,17 +148,17 @@ Name
Username
- Language
+ Country
Messages
Last active
User activity
const totalUsers = users.length;
const totalMessages = users.reduce((sum, user) => sum + user.messageCount, 0);
const avgMessages = totalUsers > 0 ? Math.round(totalMessages / totalUsers) : 0;
- const activeLanguages = new Set(users.map(u => u.languageCode)).size;
+ const activeCountrys = new Set(users.map(u => u.CountryCode)).size;
const totalUsersElement = document.getElementById('totalUsers');
const totalMessagesElement = document.getElementById('totalMessages');
const avgMessagesElement = document.getElementById('avgMessages');
- const activeLanguagesElement = document.getElementById('activeLanguages');
+ const activeCountrysElement = document.getElementById('activeCountrys');
if (totalUsersElement) totalUsersElement.textContent = totalUsers;
if (totalMessagesElement) totalMessagesElement.textContent = totalMessages.toLocaleString();
if (avgMessagesElement) avgMessagesElement.textContent = avgMessages;
- if (activeLanguagesElement) activeLanguagesElement.textContent = activeLanguages;
+ if (activeCountrysElement) activeCountrysElement.textContent = activeCountrys;
}
function initTable() {
@@ -173,7 +173,7 @@ User activity
${user.firstName} ${user.lastName || ''}
@${user.userName}
- ${user.languageCode.toUpperCase()}
+ ${user.CountryCode.toUpperCase()}
${user.messageCount.toLocaleString()}
@@ -228,16 +228,16 @@ User activity
const messagesPerUserChart = new ApexCharts(document.querySelector("#messagesPerUserChart"), messagesPerUserOptions);
messagesPerUserChart.render();
- // Language Distribution Chart
- const languageCounts = users.reduce((counts, user) => {
- counts[user.languageCode] = (counts[user.languageCode] || 0) + 1;
+ // Country Distribution Chart
+ const CountryCounts = users.reduce((counts, user) => {
+ counts[user.CountryCode] = (counts[user.CountryCode] || 0) + 1;
return counts;
}, {});
- const languageChartOptions = {
+ const CountryChartOptions = {
series: [{
name: 'Users',
- data: Object.values(languageCounts)
+ data: Object.values(CountryCounts)
}],
chart: {
type: 'bar',
@@ -256,7 +256,7 @@ User activity
},
colors: ['#4F46E5'],
xaxis: {
- categories: Object.keys(languageCounts).map(lang => lang.toUpperCase()),
+ categories: Object.keys(CountryCounts).map(lang => lang.toUpperCase()),
position: 'bottom'
},
yaxis: {
@@ -280,8 +280,8 @@ User activity
}
};
- const languageChart = new ApexCharts(document.querySelector("#languageChart"), languageChartOptions);
- languageChart.render();
+ const CountryChart = new ApexCharts(document.querySelector("#CountryChart"), CountryChartOptions);
+ CountryChart.render();
}
From f0e6405a06d5545f67634352f10e6cbfde67dac1 Mon Sep 17 00:00:00 2001
From: SegoCode <35817798+SegoCode@users.noreply.github.com>
Date: Fri, 28 Mar 2025 12:16:56 +0100
Subject: [PATCH 28/37] Update admin.html
---
code/src/main/resources/views/admin.html | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/code/src/main/resources/views/admin.html b/code/src/main/resources/views/admin.html
index fd489f5..38eba18 100644
--- a/code/src/main/resources/views/admin.html
+++ b/code/src/main/resources/views/admin.html
@@ -148,7 +148,7 @@ User activity
const totalUsers = users.length;
const totalMessages = users.reduce((sum, user) => sum + user.messageCount, 0);
const avgMessages = totalUsers > 0 ? Math.round(totalMessages / totalUsers) : 0;
- const activeCountrys = new Set(users.map(u => u.CountryCode)).size;
+ const activeCountrys = new Set(users.map(u => u.languageCode)).size;
const totalUsersElement = document.getElementById('totalUsers');
const totalMessagesElement = document.getElementById('totalMessages');
@@ -173,7 +173,7 @@ User activity
${user.firstName} ${user.lastName || ''}
@${user.userName}
- ${user.CountryCode.toUpperCase()}
+ ${user.languageCode.toUpperCase()}
${user.messageCount.toLocaleString()}
@@ -230,7 +230,7 @@ User activity
// Country Distribution Chart
const CountryCounts = users.reduce((counts, user) => {
- counts[user.CountryCode] = (counts[user.CountryCode] || 0) + 1;
+ counts[user.languageCode] = (counts[user.languageCode] || 0) + 1;
return counts;
}, {});
From 6f47b4d83967d4ac9c3b11619403406ee7943a53 Mon Sep 17 00:00:00 2001
From: SegoCode <35817798+SegoCode@users.noreply.github.com>
Date: Fri, 28 Mar 2025 18:05:30 +0100
Subject: [PATCH 29/37] Update admin.html
---
code/src/main/resources/views/admin.html | 34 +++---------------------
1 file changed, 4 insertions(+), 30 deletions(-)
diff --git a/code/src/main/resources/views/admin.html b/code/src/main/resources/views/admin.html
index 38eba18..c4313f2 100644
--- a/code/src/main/resources/views/admin.html
+++ b/code/src/main/resources/views/admin.html
@@ -195,16 +195,10 @@ User activity
chart: {
type: 'bar',
height: 350,
- toolbar: {
- show: false
- }
},
plotOptions: {
bar: {
- borderRadius: 6,
- dataLabels: {
- position: 'top'
- }
+ borderRadius: 10,
}
},
colors: ['#4F46E5'],
@@ -220,9 +214,6 @@ User activity
dataLabels: {
enabled: false
},
- grid: {
- borderColor: '#f3f4f6'
- }
};
const messagesPerUserChart = new ApexCharts(document.querySelector("#messagesPerUserChart"), messagesPerUserOptions);
@@ -241,17 +232,11 @@ User activity
}],
chart: {
type: 'bar',
- height: 350,
- toolbar: {
- show: false
- }
+ height: 350
},
plotOptions: {
bar: {
- borderRadius: 6,
- dataLabels: {
- position: 'top'
- }
+ borderRadius: 10,
}
},
colors: ['#4F46E5'],
@@ -265,18 +250,7 @@ User activity
}
},
dataLabels: {
- enabled: true,
- formatter: function (val) {
- return val;
- },
- offsetY: -20,
- style: {
- fontSize: '12px',
- colors: ["#304758"]
- }
- },
- grid: {
- borderColor: '#f3f4f6'
+ enabled: false
}
};
From 8e525ada142685b3a7d69d3ccf27f1714a0c48ef Mon Sep 17 00:00:00 2001
From: SegoCode <35817798+SegoCode@users.noreply.github.com>
Date: Fri, 28 Mar 2025 18:17:55 +0100
Subject: [PATCH 30/37] Update admin.html
---
code/src/main/resources/views/admin.html | 10 ----------
1 file changed, 10 deletions(-)
diff --git a/code/src/main/resources/views/admin.html b/code/src/main/resources/views/admin.html
index c4313f2..6ec62bf 100644
--- a/code/src/main/resources/views/admin.html
+++ b/code/src/main/resources/views/admin.html
@@ -206,11 +206,6 @@ User activity
categories: users.map(user => user.userName),
position: 'bottom'
},
- yaxis: {
- title: {
- text: 'Message Count'
- }
- },
dataLabels: {
enabled: false
},
@@ -244,11 +239,6 @@ User activity
categories: Object.keys(CountryCounts).map(lang => lang.toUpperCase()),
position: 'bottom'
},
- yaxis: {
- title: {
- text: 'Number of users'
- }
- },
dataLabels: {
enabled: false
}
From 1978b079ac9ab00958c4971617e8056c345475b7 Mon Sep 17 00:00:00 2001
From: SegoCode <35817798+SegoCode@users.noreply.github.com>
Date: Tue, 1 Apr 2025 12:13:58 +0200
Subject: [PATCH 31/37] Update update-license.yml
---
.github/workflows/update-license.yml | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/update-license.yml b/.github/workflows/update-license.yml
index 98f06bd..43f5ac4 100644
--- a/.github/workflows/update-license.yml
+++ b/.github/workflows/update-license.yml
@@ -16,7 +16,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
with:
- ref: main
+ ref: develop
- name: Setup git
run: |
@@ -55,5 +55,5 @@ jobs:
# Only commit if there are changes
git diff --staged --quiet || git commit -m "Update LICENSE with repository information"
- # Push directly to main branch
- git push origin main
+ # Push directly to develop branch
+ git push origin develop
From d5166ef0451f7e508a43baa0320e2c6745589bf9 Mon Sep 17 00:00:00 2001
From: SegoCode <35817798+SegoCode@users.noreply.github.com>
Date: Wed, 2 Apr 2025 17:12:21 +0200
Subject: [PATCH 32/37] Create demoPanel.png
---
media/demoPanel.png | Bin 0 -> 43183 bytes
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 media/demoPanel.png
diff --git a/media/demoPanel.png b/media/demoPanel.png
new file mode 100644
index 0000000000000000000000000000000000000000..59ff34302015b70f37d6591f3b596c7586758e57
GIT binary patch
literal 43183
zcmcG#Wl$Y$6ef5H?wTOMouEO3ySuvtg1ZNIcXxNU;GP6`my0_WcZa>?o2jkZAG1@n
zvt3A6_vyFKYsa3a!xZGikrD6^00028q=bkP005;406_kL`vAVO-C>vr{s(U-q3H+!
zp!|LRg-D`B`3wLM10+QRReok3uey1v%&qdDPh`;}E=dRxlS4r!$JWwN8e(Cg(^6=e
z%a*D2e4*FM`&0=1(Njq4BJLN~HHoU?^+0j5nCREU