@@ -4,26 +4,18 @@ import PostAnalyticsContent from './components/PostAnalyticsContent';
4
4
import PostAnalyticsHeader from './components/PostAnalyticsHeader' ;
5
5
import PostAnalyticsLayout from './layout/PostAnalyticsLayout' ;
6
6
import { Card , CardContent , CardDescription , CardHeader , CardTitle , LucideIcon , Separator , Table , TableBody , TableCell , TableHead , TableHeader , TableRow , ViewHeader , ViewHeaderActions , formatNumber } from '@tryghost/shade' ;
7
-
7
+ import { useParams } from '@tryghost/admin-x-framework' ;
8
+ import { usePostReferrers } from '../../hooks/usePostReferrers' ;
8
9
const STATS_DEFAULT_SOURCE_ICON_URL = 'https://static.ghost.org/v5.0.0/images/globe-icon.svg' ;
9
10
10
11
interface postAnalyticsProps { }
11
12
12
13
const Growth : React . FC < postAnalyticsProps > = ( ) => {
13
14
// const {isLoading: isConfigLoading} = useGlobalData();
15
+ const { postId} = useParams ( ) ;
16
+ const { stats : postReferrers , isLoading} = usePostReferrers ( postId || '' ) ;
14
17
// const {range} = useGlobalData();
15
18
16
- const isLoading = false ;
17
-
18
- const mockTopSources = [
19
- { id : 'source-001' , title : 'google.com' , freeMembers : 17 , paidMembers : 7 , mrr : 8 } ,
20
- { id : 'source-002' , title : 'twitter.com' , freeMembers : 12 , paidMembers : 5 , mrr : 6 } ,
21
- { id : 'source-003' , title : 'facebook.com' , freeMembers : 9 , paidMembers : 4 , mrr : 5 } ,
22
- { id : 'source-004' , title : 'linkedin.com' , freeMembers : 8 , paidMembers : 3 , mrr : 4 } ,
23
- { id : 'source-005' , title : 'reddit.com' , freeMembers : 7 , paidMembers : 2 , mrr : 3 } ,
24
- { id : 'source-006' , title : 'medium.com' , freeMembers : 6 , paidMembers : 2 , mrr : 3 }
25
- ] ;
26
-
27
19
return (
28
20
< PostAnalyticsLayout >
29
21
< ViewHeader className = 'items-end pb-4' >
@@ -55,7 +47,7 @@ const Growth: React.FC<postAnalyticsProps> = () => {
55
47
< LucideIcon . CircleDollarSign strokeWidth = { 1.5 } />
56
48
</ KpiCardIcon >
57
49
< KpiCardLabel > MRR</ KpiCardLabel >
58
- < KpiCardValue > +$180</ KpiCardValue >
50
+ < KpiCardValue > +${ formatNumber ( 180 ) } </ KpiCardValue >
59
51
</ KpiCard >
60
52
</ div >
61
53
< Card >
@@ -75,22 +67,22 @@ const Growth: React.FC<postAnalyticsProps> = () => {
75
67
</ TableRow >
76
68
</ TableHeader >
77
69
< TableBody >
78
- { mockTopSources . map ( source => (
79
- < TableRow key = { source . id } >
70
+ { postReferrers ? .map ( row => (
71
+ < TableRow key = { row . source } >
80
72
< TableCell >
81
- < a className = 'inline-flex items-center gap-2 font-medium' href = { `https://${ source . title } ` } rel = "noreferrer" target = '_blank' >
73
+ < a className = 'inline-flex items-center gap-2 font-medium' href = { `https://${ row . source } ` } rel = "noreferrer" target = '_blank' >
82
74
< img
83
75
className = "size-4"
84
- src = { `https://www.faviconextractor.com/favicon/${ source . title || 'direct' } ?larger=true` }
76
+ src = { `https://www.faviconextractor.com/favicon/${ row . source || 'direct' } ?larger=true` }
85
77
onError = { ( e : React . SyntheticEvent < HTMLImageElement > ) => {
86
78
e . currentTarget . src = STATS_DEFAULT_SOURCE_ICON_URL ;
87
79
} } />
88
- < span > { source . title || 'Direct' } </ span >
80
+ < span > { row . source || 'Direct' } </ span >
89
81
</ a >
90
82
</ TableCell >
91
- < TableCell className = 'text-right font-mono text-sm' > +{ formatNumber ( source . freeMembers ) } </ TableCell >
92
- < TableCell className = 'text-right font-mono text-sm' > +{ formatNumber ( source . paidMembers ) } </ TableCell >
93
- < TableCell className = 'text-right font-mono text-sm' > +${ source . mrr } </ TableCell >
83
+ < TableCell className = 'text-right font-mono text-sm' > +{ formatNumber ( row . free_members ) } </ TableCell >
84
+ < TableCell className = 'text-right font-mono text-sm' > +{ formatNumber ( row . paid_members ) } </ TableCell >
85
+ < TableCell className = 'text-right font-mono text-sm' > +${ formatNumber ( row . mrr ) } </ TableCell >
94
86
</ TableRow >
95
87
) ) }
96
88
</ TableBody >
0 commit comments