@@ -16,13 +16,23 @@ defmodule AlgoraWeb.ClaimLive do
16
16
|> Repo . all ( )
17
17
|> Repo . preload ( [
18
18
:user ,
19
+ :transactions ,
19
20
source: [ repository: [ :user ] ] ,
20
21
target: [ repository: [ :user ] , bounties: [ :owner ] ]
21
22
] )
22
23
23
24
[ primary_claim | _ ] = claims
24
25
25
- { :ok , prize_pool } = primary_claim . target . bounties |> Enum . map ( & & 1 . amount ) |> Money . sum ( )
26
+ prize_pool =
27
+ primary_claim . target . bounties
28
+ |> Enum . map ( & & 1 . amount )
29
+ |> Enum . reduce ( Money . zero ( :USD , no_fraction_if_integer: true ) , & Money . add! ( & 1 , & 2 ) )
30
+
31
+ total_paid =
32
+ primary_claim . transactions
33
+ |> Enum . filter ( & ( & 1 . type == :debit and & 1 . status == :succeeded ) )
34
+ |> Enum . map ( & & 1 . net_amount )
35
+ |> Enum . reduce ( Money . zero ( :USD , no_fraction_if_integer: true ) , & Money . add! ( & 1 , & 2 ) )
26
36
27
37
source_body_html =
28
38
with token when is_binary ( token ) <- Github.TokenPool . get_token ( ) ,
@@ -41,6 +51,7 @@ defmodule AlgoraWeb.ClaimLive do
41
51
|> assign ( :source , primary_claim . source )
42
52
|> assign ( :bounties , primary_claim . target . bounties )
43
53
|> assign ( :prize_pool , prize_pool )
54
+ |> assign ( :total_paid , total_paid )
44
55
|> assign ( :source_body_html , source_body_html ) }
45
56
end
46
57
@@ -49,36 +60,37 @@ defmodule AlgoraWeb.ClaimLive do
49
60
~H"""
50
61
< div class = "container mx-auto py-8 px-4 " >
51
62
< div class = "space-y-8 " >
52
- <%!-- Header with target issue and prize pool --%>
53
63
< . header class = "mb-8 " >
54
- < div class = "flex items-center gap-4 " >
55
- < . avatar class = "h-16 w-16 rounded-full " >
56
- < . avatar_image src = { @ source . repository . user . avatar_url } />
57
- < . avatar_fallback >
58
- { String . first ( @ source . repository . user . provider_login ) }
59
- </ . avatar_fallback >
60
- </ . avatar >
61
- < div class = "space-y-2 " >
62
- < . link href = { @ target . url } class = "text-xl font-semibold hover:underline " target = "_blank " >
63
- { @ target . title }
64
- </ . link >
65
- < div class = "text-sm text-muted-foreground " >
66
- { @ source . repository . user . provider_login } /{ @ source . repository . name } #{ @ source . number }
64
+ < div class = "grid gap-8 md:grid-cols-[2fr_1fr] " >
65
+ < div class = "flex items-center gap-4 " >
66
+ < . avatar class = "h-16 w-16 rounded-full " >
67
+ < . avatar_image src = { @ source . repository . user . avatar_url } />
68
+ < . avatar_fallback >
69
+ { String . first ( @ source . repository . user . provider_login ) }
70
+ </ . avatar_fallback >
71
+ </ . avatar >
72
+ < div class = "space-y-2 " >
73
+ < . link
74
+ href = { @ target . url }
75
+ class = "text-xl font-semibold hover:underline "
76
+ target = "_blank "
77
+ >
78
+ { @ target . title }
79
+ </ . link >
80
+ < div class = "text-sm text-muted-foreground " >
81
+ { @ source . repository . user . provider_login } /{ @ source . repository . name } #{ @ source . number }
82
+ </ div >
67
83
</ div >
68
84
</ div >
69
- </ div >
70
- <: actions >
71
- < div class = "mt-4 text-2xl font-bold text-success font-display " >
72
- { Money . to_string! ( @ prize_pool ) }
85
+ < div class = "mt-4 grid grid-cols-2 gap-8 " >
86
+ < . stat_card title = "Total Paid " value = { Money . to_string! ( @ total_paid ) } />
87
+ < . stat_card title = "Prize Pool " value = { Money . to_string! ( @ prize_pool ) } />
73
88
</ div >
74
- </: actions >
89
+ </ div >
75
90
</ . header >
76
91
77
- <%!-- New grid layout with different column widths --%>
78
92
< div class = "grid gap-8 md:grid-cols-[2fr_1fr] " >
79
- <%!-- Combined Claim Details Card --%>
80
93
< div class = "space-y-8 " >
81
- <%!-- Claimer Info --%>
82
94
< . card >
83
95
< . card_header >
84
96
< div class = "grid grid-cols-1 sm:grid-cols-3 " >
@@ -119,16 +131,11 @@ defmodule AlgoraWeb.ClaimLive do
119
131
</ . card >
120
132
</ div >
121
133
122
- <%!-- Right Column: Claim Metadata + Sponsors --%>
123
134
< div class = "space-y-8 " >
124
- <%!-- Claim Metadata Card --%>
125
135
< . card >
126
136
< . card_header >
127
137
< . card_title >
128
- < div class = "flex items-center gap-2 " >
129
- < . icon name = "tabler-info-circle " class = "h-5 w-5 text-muted-foreground " />
130
- Claim Info
131
- </ div >
138
+ Claim
132
139
</ . card_title >
133
140
</ . card_header >
134
141
< . card_content >
@@ -149,13 +156,10 @@ defmodule AlgoraWeb.ClaimLive do
149
156
</ . card_content >
150
157
</ . card >
151
158
152
- <%!-- Sponsors Card --%>
153
159
< . card >
154
160
< . card_header >
155
161
< . card_title >
156
- < div class = "flex items-center gap-2 " >
157
- < . icon name = "tabler-users " class = "h-5 w-5 text-muted-foreground " /> Sponsors
158
- </ div >
162
+ Sponsors
159
163
</ . card_title >
160
164
</ . card_header >
161
165
< . card_content >
0 commit comments