11import { sumSafe } from '@ifrc-go/ui/utils' ;
22import {
3- compareDate ,
3+ isDefined ,
44 isNotDefined ,
55 max ,
66} from '@togglecorp/fujs' ;
77
8+ import { type components } from '#generated/types' ;
9+ import { DREF_TYPE_IMMINENT } from '#utils/constants' ;
810import { type GoApiResponse } from '#utils/restRequest' ;
911
1012type EventResponse = GoApiResponse < '/api/v2/event/' > ;
1113type EventListItem = NonNullable < EventResponse [ 'results' ] > [ number ] ;
1214
15+ type EmergencyStage = components [ 'schemas' ] [ 'ApiEmergencyStageEnumKey' ] ;
16+ export const STAGE_EMERGENCY_APPEAL = 1 satisfies EmergencyStage ;
17+ export const STAGE_DREF_APPLICATION = 2 satisfies EmergencyStage ;
18+ export const STAGE_OPERATIONAL_UPDATE = 3 satisfies EmergencyStage ;
19+ export const STAGE_FINAL_REPORT = 4 satisfies EmergencyStage ;
20+ export const STAGE_FIELD_REPORT = 5 satisfies EmergencyStage ;
21+ export const STAGE_DREF_APPEAL_ONLY = 6 satisfies EmergencyStage ;
22+
1323export function getNumAffected ( event : EventListItem ) {
1424 const latestFieldReport = max (
1525 event . field_reports ,
@@ -22,67 +32,46 @@ export function getNumAffected(event: EventListItem) {
2232 ] ) ;
2333}
2434
25- type EventItem = GoApiResponse < '/api/v2/event/{id}' > ;
26- type FieldReport = EventItem [ 'field_reports' ] [ number ] ;
27- type Appeal = EventItem [ 'appeals' ] [ number ] ;
35+ type EmergencyDetail = GoApiResponse < '/api/v2/emergency/{id}/' > ;
2836
29- export function getLatestAppeal ( appeals : Appeal [ ] | undefined ) {
30- if ( isNotDefined ( appeals ) || appeals . length === 0 ) {
37+ export function getEmergencyMeta ( emergency : EmergencyDetail | undefined ) {
38+ if ( isNotDefined ( emergency ) ) {
3139 return undefined ;
3240 }
3341
34- // FIXME(frozenhelium): verify if this is the desired outcome
35- return appeals . toSorted (
36- ( a , b ) => compareDate ( a . start_date , b . start_date ) ,
37- ) [ 0 ] ;
38- }
42+ const {
43+ disaster_start_date,
44+ appeal,
45+ dref,
46+ stage,
47+ } = emergency ;
3948
40- function getFieldReport (
41- reports : FieldReport [ ] | undefined ,
42- compareFunction : (
43- a ?: string ,
44- b ?: string ,
45- direction ?: number
46- ) => number ,
47- direction ?: number ,
48- ) : FieldReport | undefined {
49- if ( isNotDefined ( reports ) || reports . length === 0 ) {
50- return undefined ;
51- }
49+ const amountRequested = stage === STAGE_DREF_APPLICATION
50+ && dref . type_of_dref === DREF_TYPE_IMMINENT
51+ ? dref ?. total_cost
52+ : dref ?. amount_requested ?? appeal ?. amount_requested ?? dref ?. total_cost ;
5253
53- // FIXME: use max function
54- return reports . reduce ( (
55- selectedReport : FieldReport | undefined ,
56- currentReport : FieldReport | undefined ,
57- ) => {
58- if ( isNotDefined ( selectedReport )
59- || compareFunction (
60- currentReport ?. report_date ?? currentReport ?. created_at ,
61- selectedReport . report_date ?? selectedReport . created_at ,
62- direction ,
63- ) > 0 ) {
64- return currentReport ;
65- }
66- return selectedReport ;
67- } , undefined ) ;
68- }
54+ const drefPlannedBudget = sumSafe (
55+ dref ?. planned_interventions ?. map ( ( { budget } ) => budget ) . filter ( isDefined ) ,
56+ ) ?? dref ?. total_cost ;
6957
70- export function getLatestFieldReport (
71- reports : FieldReport [ ] | undefined ,
72- ) : FieldReport | undefined {
73- return getFieldReport (
74- reports ,
75- compareDate ,
76- 1 ,
77- ) ;
78- }
58+ const amountFunded = drefPlannedBudget ?? appeal ?. amount_funded ;
7959
80- export function getFirstFieldReport (
81- reports : FieldReport [ ] | undefined ,
82- ) : FieldReport | undefined {
83- return getFieldReport (
84- reports ,
85- compareDate ,
86- - 1 ,
87- ) ;
60+ const startDate = dref ?. final_report_details ?. operation_start_date
61+ ?? dref ?. operational_update_details ?. new_operational_start_date
62+ ?? dref ?. date_of_approval
63+ ?? appeal ?. start_date
64+ ?? disaster_start_date ;
65+
66+ const endDate = dref ?. final_report_details ?. operation_end_date
67+ ?? dref ?. operational_update_details ?. new_operational_end_date
68+ ?? dref ?. end_date
69+ ?? appeal ?. end_date ;
70+
71+ return {
72+ startDate,
73+ endDate,
74+ amountFunded,
75+ amountRequested,
76+ } ;
8877}
0 commit comments