@@ -3,7 +3,7 @@ import { getGlobalPayload } from "@/lib/payload";
33import type {
44 HeroBlock ,
55 PoliticalEntity ,
6- AiExtraction as AiExtractionDocument ,
6+ Promise as PromiseDocument ,
77 PromiseStatus ,
88} from "@/payload-types" ;
99import { format } from "date-fns" ;
@@ -62,9 +62,7 @@ type StatusById = Map<string, PromiseStatus>;
6262
6363type StatusSummaryMap = Map < string , HeroStatusSummary > ;
6464
65- type AiExtractionItem = NonNullable <
66- AiExtractionDocument [ "extractions" ]
67- > [ number ] ;
65+ type PromiseItem = PromiseDocument ;
6866
6967const FALLBACK_GROUP_DEFINITIONS = [
7068 {
@@ -81,21 +79,30 @@ const FALLBACK_GROUP_DEFINITIONS = [
8179 } ,
8280] ;
8381
84- const resolveExtractionStatus = (
85- extraction : AiExtractionItem ,
86- statusById : StatusById
82+ const resolvePromiseStatus = (
83+ promise : PromiseItem ,
84+ statusById : StatusById ,
85+ statusByLabel : Map < string , PromiseStatus >
8786) : PromiseStatus | null => {
88- const statusRef = extraction . Status ;
87+ const statusRef = promise . status ;
8988
90- if ( ! statusRef ) {
91- return null ;
89+ if ( statusRef ) {
90+ if ( typeof statusRef === "string" ) {
91+ const mapped = statusById . get ( statusRef ) ;
92+ if ( mapped ) {
93+ return mapped ;
94+ }
95+ } else {
96+ return statusRef ;
97+ }
9298 }
9399
94- if ( typeof statusRef === "string" ) {
95- return statusById . get ( statusRef ) ?? null ;
100+ const label = promise . statusLabel ?. trim ( ) . toLowerCase ( ) ;
101+ if ( ! label ) {
102+ return null ;
96103 }
97104
98- return statusRef ;
105+ return statusByLabel . get ( label ) ?? null ;
99106} ;
100107
101108const formatUpdatedAt = ( date : string ) : string => {
@@ -210,57 +217,55 @@ export const Hero = async ({ entitySlug, ...block }: HeroProps) => {
210217 statusDocs . map ( ( status ) => [ status . id , status ] )
211218 ) ;
212219 const statusSummaries = buildStatusSummaries ( statusDocs ) ;
220+ const statusByLabel = new Map < string , PromiseStatus > ( ) ;
221+ statusDocs . forEach ( ( status ) => {
222+ const labelKey = status . label ?. trim ( ) . toLowerCase ( ) ;
223+ if ( labelKey ) {
224+ statusByLabel . set ( labelKey , status ) ;
225+ }
226+
227+ const meedanKey = status . meedanId ?. trim ( ) . toLowerCase ( ) ;
228+ if ( meedanKey && ! statusByLabel . has ( meedanKey ) ) {
229+ statusByLabel . set ( meedanKey , status ) ;
230+ }
231+ } ) ;
213232
214- const { docs : documentDocs } = await payload . find ( {
215- collection : "documents " ,
233+ const { docs : promiseDocs } = await payload . find ( {
234+ collection : "promises " ,
216235 where : {
217236 politicalEntity : {
218237 equals : entity . id ,
219238 } ,
220239 } ,
221240 limit : - 1 ,
241+ depth : 1 ,
222242 } ) ;
223243
224- const documentIds = documentDocs . map ( ( doc ) => doc . id ) ;
244+ let totalPromises = 0 ;
225245
226- const { docs : aiExtractionDocs } = documentIds . length
227- ? await payload . find ( {
228- collection : "ai-extractions" ,
229- where : {
230- document : {
231- in : documentIds ,
232- } ,
233- } ,
234- depth : 2 ,
235- limit : - 1 ,
236- } )
237- : { docs : [ ] } ;
246+ for ( const promise of promiseDocs as PromiseItem [ ] ) {
247+ const status = resolvePromiseStatus (
248+ promise ,
249+ statusById ,
250+ statusByLabel
251+ ) ;
238252
239- let totalExtractions = 0 ;
240-
241- for ( const aiExtractionDoc of aiExtractionDocs ) {
242- const extractions = aiExtractionDoc . extractions ?? [ ] ;
243-
244- for ( const extraction of extractions ) {
245- const status = resolveExtractionStatus ( extraction , statusById ) ;
246-
247- if ( ! status ) {
248- continue ;
249- }
250-
251- const summary = statusSummaries . get ( status . id ) ;
252- if ( ! summary ) {
253- continue ;
254- }
253+ if ( ! status ) {
254+ continue ;
255+ }
255256
256- summary . count += 1 ;
257- totalExtractions += 1 ;
257+ const summary = statusSummaries . get ( status . id ) ;
258+ if ( ! summary ) {
259+ continue ;
258260 }
261+
262+ summary . count += 1 ;
263+ totalPromises += 1 ;
259264 }
260265
261266 statusSummaries . forEach ( ( summary ) => {
262267 summary . percentage =
263- totalExtractions > 0 ? ( summary . count / totalExtractions ) * 100 : 0 ;
268+ totalPromises > 0 ? ( summary . count / totalPromises ) * 100 : 0 ;
264269 } ) ;
265270
266271 const groups = buildChartGroups ( block . chartGroups , statusSummaries ) ;
@@ -306,7 +311,7 @@ export const Hero = async ({ entitySlug, ...block }: HeroProps) => {
306311 image : entityImage ,
307312 } ,
308313 metrics : {
309- total : totalExtractions ,
314+ total : totalPromises ,
310315 statuses : summaries ,
311316 groups,
312317 } ,
0 commit comments