@ossy/analytics 1.9.6 → 1.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ossy/analytics",
3
3
  "description": "Analytics module — workspace analytics for website traffic",
4
- "version": "1.9.6",
4
+ "version": "1.10.0",
5
5
  "type": "module",
6
6
  "main": "./src/index.js",
7
7
  "module": "./src/index.js",
@@ -26,5 +26,5 @@
26
26
  "@ossy/sdk-react": "*",
27
27
  "react": "*"
28
28
  },
29
- "gitHead": "72d150cf20ff7ba25b328bc5b429b065c2840b2b"
29
+ "gitHead": "d9d31182be64a448d575da432af2830d909ad4b9"
30
30
  }
package/src/Definition.js CHANGED
@@ -2,12 +2,6 @@ export const Definition = {
2
2
  id: 'analytics',
3
3
  title: 'Analytics',
4
4
  description: 'Workspace analytics for website traffic and top performing pages.',
5
- module: {
6
- id: 'analytics',
7
- enabled: true,
8
- },
5
+ icon: 'chart',
9
6
  statuses: ['beta'],
10
- actions: ['analytics.read'],
11
- views: ['home.page'],
12
- tasks: [],
13
7
  }
@@ -1,12 +1,10 @@
1
1
  import React, { useMemo } from 'react'
2
2
  import { useWorkspace } from '@ossy/sdk-react'
3
- import { Definition } from '@ossy/analytics'
4
- import { Text, Title, View } from '@ossy/design-system'
3
+ import { Text, Title, View, useLocale } from '@ossy/design-system'
5
4
  import { usePageViewStats } from './usePageViewStats.js'
6
5
 
7
6
  export const metadata = {
8
7
  id: 'analytics/home',
9
- title: 'Analytics',
10
8
  path: {
11
9
  sv: '/analys',
12
10
  en: '/analytics',
@@ -28,12 +26,11 @@ function SummaryCard({ label, value }) {
28
26
  }
29
27
 
30
28
  export default function AnalyticsPage() {
29
+ const { t } = useLocale()
31
30
  const { workspace } = useWorkspace()
32
- // Snapshot once per mount: Date.now() on every render changed `from`/`to` every tick and
33
- // retriggered usePageViewStats (params → useEffect) in a fetch/setState loop.
34
31
  const { from, to } = useMemo(() => {
35
- const t = Date.now()
36
- return { from: t - 30 * 24 * 60 * 60 * 1000, to: t }
32
+ const now = Date.now()
33
+ return { from: now - 30 * 24 * 60 * 60 * 1000, to: now }
37
34
  }, [])
38
35
 
39
36
  const { status, totalViews, dailyViews, topPaths } = usePageViewStats({
@@ -46,28 +43,28 @@ export default function AnalyticsPage() {
46
43
  return (
47
44
  <View inset="l" gap="l" style={{ width: '100%', boxSizing: 'border-box' }}>
48
45
  <View gap="s">
49
- <Title>{Definition.title}</Title>
50
- <Text>{Definition.description}</Text>
46
+ <Title>{t('analytics.home.title')}</Title>
47
+ <Text>{t('analytics.home.description')}</Text>
51
48
  </View>
52
49
 
53
50
  {status === 'loading' && (
54
51
  <View surface="primary" roundness="m" inset="m">
55
- <Text>Loading analytics...</Text>
52
+ <Text>{t('analytics.home.loading')}</Text>
56
53
  </View>
57
54
  )}
58
55
 
59
56
  {status === 'error' && (
60
57
  <View surface="primary" roundness="m" inset="m">
61
- <Text>Could not load analytics data.</Text>
58
+ <Text>{t('analytics.home.error')}</Text>
62
59
  </View>
63
60
  )}
64
61
 
65
62
  {status === 'success' && (
66
63
  <>
67
64
  <View layout="row" gap="m">
68
- <SummaryCard label="Total page views (30 days)" value={`${totalViews}`} />
69
- <SummaryCard label="Tracked pages (30 days)" value={`${topPaths.length}`} />
70
- <SummaryCard label="Days with traffic" value={`${dailyViews.length}`} />
65
+ <SummaryCard label={t('analytics.home.totalPageViews')} value={`${totalViews}`} />
66
+ <SummaryCard label={t('analytics.home.trackedPages')} value={`${topPaths.length}`} />
67
+ <SummaryCard label={t('analytics.home.daysWithTraffic')} value={`${dailyViews.length}`} />
71
68
  </View>
72
69
 
73
70
  <View layout="row" gap="m" style={{ alignItems: 'flex-start' }}>
@@ -78,11 +75,11 @@ export default function AnalyticsPage() {
78
75
  gap="s"
79
76
  style={{ border: '1px solid var(--separator)', flex: 1 }}
80
77
  >
81
- <Title variant="secondary">Top paths</Title>
82
- {topPaths.length === 0 && <Text variant="small">No page views yet.</Text>}
78
+ <Title variant="secondary">{t('analytics.home.topPaths')}</Title>
79
+ {topPaths.length === 0 && <Text variant="small">{t('analytics.home.noPageViews')}</Text>}
83
80
  {topPaths.map((item) => (
84
81
  <View key={item.path || 'unknown'} layout="row" justifyContent="space-between">
85
- <Text variant="small">{item.path || '(unknown path)'}</Text>
82
+ <Text variant="small">{item.path || t('analytics.home.unknownPath')}</Text>
86
83
  <Text variant="small">{item.views}</Text>
87
84
  </View>
88
85
  ))}
@@ -95,8 +92,8 @@ export default function AnalyticsPage() {
95
92
  gap="s"
96
93
  style={{ border: '1px solid var(--separator)', flex: 1 }}
97
94
  >
98
- <Title variant="secondary">Daily page views</Title>
99
- {dailyViews.length === 0 && <Text variant="small">No daily data yet.</Text>}
95
+ <Title variant="secondary">{t('analytics.home.dailyPageViews')}</Title>
96
+ {dailyViews.length === 0 && <Text variant="small">{t('analytics.home.noDailyData')}</Text>}
100
97
  {dailyViews.map((item) => (
101
98
  <View key={item.date} layout="row" justifyContent="space-between">
102
99
  <Text variant="small">{item.date}</Text>
@@ -0,0 +1,15 @@
1
+ {
2
+ "analytics.home.documentTitle": "Analytics",
3
+ "analytics.home.title": "Analytics",
4
+ "analytics.home.description": "Workspace analytics for website traffic and top performing pages.",
5
+ "analytics.home.loading": "Loading analytics...",
6
+ "analytics.home.error": "Could not load analytics data.",
7
+ "analytics.home.totalPageViews": "Total page views (30 days)",
8
+ "analytics.home.trackedPages": "Tracked pages (30 days)",
9
+ "analytics.home.daysWithTraffic": "Days with traffic",
10
+ "analytics.home.topPaths": "Top paths",
11
+ "analytics.home.noPageViews": "No page views yet.",
12
+ "analytics.home.unknownPath": "(unknown path)",
13
+ "analytics.home.dailyPageViews": "Daily page views",
14
+ "analytics.home.noDailyData": "No daily data yet."
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "analytics.home.documentTitle": "Analys",
3
+ "analytics.home.title": "Analys",
4
+ "analytics.home.description": "Workspace-analys för webbtrafik och mest besökta sidor.",
5
+ "analytics.home.loading": "Laddar analys...",
6
+ "analytics.home.error": "Kunde inte ladda analysdata.",
7
+ "analytics.home.totalPageViews": "Totala sidvisningar (30 dagar)",
8
+ "analytics.home.trackedPages": "Spårade sidor (30 dagar)",
9
+ "analytics.home.daysWithTraffic": "Dagar med trafik",
10
+ "analytics.home.topPaths": "Topp-sökvägar",
11
+ "analytics.home.noPageViews": "Inga sidvisningar ännu.",
12
+ "analytics.home.unknownPath": "(okänd sökväg)",
13
+ "analytics.home.dailyPageViews": "Dagliga sidvisningar",
14
+ "analytics.home.noDailyData": "Ingen daglig data ännu."
15
+ }