feat: org and course student analytics page (#509)

* UI initialization

* feat: structure API

* feat: audience & people analytics

* feat: quick changes

* feat: add comments

* redesign course student page

* chore: make requests to db more efficient

* clean up analytics page for course

* feat: finish up audience analytics page

* chore: minor UI tweaks

* translate all

* replace inserts of log in events to update

* catch error if last_login isn't inserted

---------

Co-authored-by: Rotimi Best <[email protected]>
This commit is contained in:
Adeyemi Adetunji
2024-12-30 02:59:10 +01:00
committed by GitHub
co-authored by Rotimi Best
parent 381776f388
commit f69bf920a9
46 changed files with 1916 additions and 437 deletions
+68 -2
View File
@@ -286,6 +286,12 @@ importers:
'@sveltejs/adapter-vercel':
specifier: ^3.0.3
version: 3.0.3(@sveltejs/[email protected])
'@sveltekit-i18n/base':
specifier: ^1.3.7
version: 1.3.7([email protected])
'@sveltekit-i18n/parser-icu':
specifier: ^1.0.8
version: 1.0.8
'@tailwindcss/forms':
specifier: ^0.5.4
version: 0.5.4([email protected])
@@ -304,6 +310,9 @@ importers:
canvas-confetti:
specifier: ^1.6.0
version: 1.6.0
clsx:
specifier: ^2.1.1
version: 2.1.1
color2k:
specifier: ^2.0.3
version: 2.0.3
@@ -382,6 +391,9 @@ importers:
sveltekit-i18n:
specifier: ^2.4.2
version: 2.4.2([email protected])
tailwind-merge:
specifier: ^2.6.0
version: 2.6.0
tldts:
specifier: ^6.1.41
version: 6.1.41
@@ -3938,6 +3950,42 @@ packages:
resolution: {integrity: sha512-kym7SodPp8/wloecOpcmSnWJsK7M0E5Wg8UcFA+uO4B9s5d0ywXOEro/8HM9x0rW+TljRzul/14UYz3TleT3ig==}
dev: true
/@formatjs/[email protected]:
resolution: {integrity: sha512-Ip9uV+/MpLXWRk03U/GzeJMuPeOXpJBSB5V1tjA6kJhvqssye5J5LoYLc7Z5IAHb7nR62sRoguzrFiVCP/hnzw==}
dependencies:
'@formatjs/fast-memoize': 2.2.5
'@formatjs/intl-localematcher': 0.5.9
decimal.js: 10.4.3
tslib: 2.8.1
dev: false
/@formatjs/[email protected]:
resolution: {integrity: sha512-6PoewUMrrcqxSoBXAOJDiW1m+AmkrAj0RiXnOMD59GRaswjXhm3MDhgepXPBgonc09oSirAJTsAggzAGQf6A6g==}
dependencies:
tslib: 2.8.1
dev: false
/@formatjs/[email protected]:
resolution: {integrity: sha512-cuEHyRM5VqLQobANOjtjlgU7+qmk9Q3fDQuBiRRJ3+Wp3ZoZhpUPtUfuimZXsir6SaI2TaAJ+SLo9vLnV5QcbA==}
dependencies:
'@formatjs/ecma402-abstract': 2.3.1
'@formatjs/icu-skeleton-parser': 1.8.11
tslib: 2.8.1
dev: false
/@formatjs/[email protected]:
resolution: {integrity: sha512-8LlHHE/yL/zVJZHAX3pbKaCjZKmBIO6aJY1mkVh4RMSEu/2WRZ4Ysvv3kKXJ9M8RJLBHdnk1/dUQFdod1Dt7Dw==}
dependencies:
'@formatjs/ecma402-abstract': 2.3.1
tslib: 2.8.1
dev: false
/@formatjs/[email protected]:
resolution: {integrity: sha512-8zkGu/sv5euxbjfZ/xmklqLyDGQSxsLqg8XOq88JW3cmJtzhCP8EtSJXlaKZnVO4beEaoiT9wj4eIoCQ9smwxA==}
dependencies:
tslib: 2.8.1
dev: false
/@hapi/[email protected]:
resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==}
dev: false
@@ -6115,7 +6163,7 @@ packages:
peerDependencies:
'@sveltejs/kit': ^2.0.0
dependencies:
'@sveltejs/kit': 2.10.1(@sveltejs/vite-plugin-svelte@4.0.0)([email protected])(vite@5.4.11)
'@sveltejs/kit': 2.10.1(@sveltejs/vite-plugin-svelte@5.0.0)([email protected])(vite@6.0.0)
import-meta-resolve: 4.1.0
dev: true
@@ -6403,6 +6451,12 @@ packages:
resolution: {integrity: sha512-/gtzLlqm/sox7EoPKD56BxGZktK/syGc79EbJAPWY5KVitQD9SM0TP8yJCqDxTVPk7Lk0WJhrBGUE2Nn0f5M1w==}
dev: false
/@sveltekit-i18n/[email protected]:
resolution: {integrity: sha512-/LnvE1EJv+higIxB5cWIV+9neiOe+CfC7VKhpv9mnU35NcZO3yOhEZ8y6F8nHHkMYIABLcqr15yk4hSvmRGWDw==}
dependencies:
intl-messageformat: 10.7.10
dev: false
/@swc/[email protected]:
resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==}
dependencies:
@@ -9354,7 +9408,6 @@ packages:
/[email protected]:
resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==}
dev: true
/[email protected]:
resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==}
@@ -11780,6 +11833,15 @@ packages:
resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==}
dev: false
/[email protected]:
resolution: {integrity: sha512-hp7iejCBiJdW3zmOe18FdlJu8U/JsADSDiBPQhfdSeI8B9POtvPRvPh3nMlvhYayGMKLv6maldhR7y3Pf1vkpw==}
dependencies:
'@formatjs/ecma402-abstract': 2.3.1
'@formatjs/fast-memoize': 2.2.5
'@formatjs/icu-messageformat-parser': 2.9.7
tslib: 2.8.1
dev: false
/[email protected]:
resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==}
engines: {node: '>=12.22.0'}
@@ -17153,6 +17215,10 @@ packages:
resolution: {integrity: sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==}
dev: true
/[email protected]:
resolution: {integrity: sha512-P+Vu1qXfzediirmHOC3xKGAYeZtPcV9g76X+xg2FD4tYgR71ewMA35Y3sCz3zhiN/dwefRpJX0yBcgwi1fXNQA==}
dev: false
/[email protected]([email protected]):
resolution: {integrity: sha512-2xmhAf4UIc3PijOUcJPA1LP4AbxhpcHuHM2C26xM0k81r0maAO6uoUSHl3APmvHZcY5cZCY/bYuJdfFa4eGoaw==}
engines: {node: '>=16.x', pnpm: '>=7.x'}