@@ -5,13 +5,74 @@ open FeeEstimationHelper
55open Typography
66open LogicUtils
77
8- module OverviewContainer = {
8+ module OverviewBreakdown = {
99 @react.component
1010 let make = (~monthFilters ) => {
1111 let getURL = APIUtils .useGetURL ()
1212 let showToast = ToastState .useShowToast ()
1313 let updateDetails = APIUtils .useUpdateMethod (~showErrorToast = false )
14+ let defaultValue : LoadedTable .pageDetails = {offset : 0 , resultsPerPage : 10 }
15+ let pageDetailDict = Recoil .useRecoilValueFromAtom (LoadedTable .table_pageDetails )
16+ let pageDetail = pageDetailDict -> Dict .get (costBreakDownTableKey )-> Option .getOr (defaultValue )
1417
18+ let (screenState , setScreenState ) = React .useState (_ => PageLoaderWrapper .Loading )
19+ let (overViewBreakdownRawData , setOverViewBreakdownRawData ) = React .useState (_ =>
20+ Dict .make ()-> FeeEstimationUtils .overviewBreakdownMapper
21+ )
22+ let (overViewBreakdownTableData , setOverViewBreakdownTableData ) = React .useState (_ => [])
23+
24+ let fetchOverviewTableData = async () => {
25+ try {
26+ setScreenState (_ => PageLoaderWrapper .Loading )
27+ let url = getURL (~entityName = V1 (FEE_OVERVIEW_ESTIMATE_BREAKDOWN ), ~methodType = Post )
28+ let body = {
29+ "offset" : pageDetail .offset ,
30+ "limit" : pageDetail .resultsPerPage ,
31+ "startDate" : monthFilters ["startDate" ],
32+ "endDate" : monthFilters ["endDate" ],
33+ }-> Identity .genericTypeToJson
34+
35+ let response = await updateDetails (url , body , Fetch .Post )
36+ let overViewBreakdownDataResponse =
37+ response
38+ -> getDictFromJsonObject
39+ -> getDictfromDict ("response" )
40+ -> FeeEstimationUtils .overviewBreakdownMapper
41+
42+ Console .log2 ("overview breakdown data fetched:" , overViewBreakdownDataResponse )
43+ setOverViewBreakdownRawData (_ => overViewBreakdownDataResponse )
44+ setOverViewBreakdownTableData (_ => overViewBreakdownDataResponse .overviewBreakdown )
45+ setScreenState (_ => PageLoaderWrapper .Success )
46+ } catch {
47+ | _ => {
48+ setScreenState (_ => PageLoaderWrapper .Error ("" ))
49+ showToast (
50+ ~message = "Error while fetching overview data. Please try again" ,
51+ ~toastType = ToastError ,
52+ )
53+ }
54+ }
55+ }
56+
57+ React .useEffect (() => {
58+ fetchOverviewTableData ()-> ignore
59+ None
60+ }, [pageDetail .offset , pageDetail .resultsPerPage ])
61+ <PageLoaderWrapper
62+ screenState
63+ customUI = {<NewAnalyticsHelper .NoData height = "h-56" message = "No data available" />}
64+ customLoader = {<Shimmer styleClass = "w-full h-56 rounded-xl" />}>
65+ <CostBreakDown overViewBreakdownRawData overViewBreakdownTableData />
66+ </PageLoaderWrapper >
67+ }
68+ }
69+
70+ module OverviewContainer = {
71+ @react.component
72+ let make = (~monthFilters ) => {
73+ let getURL = APIUtils .useGetURL ()
74+ let showToast = ToastState .useShowToast ()
75+ let updateDetails = APIUtils .useUpdateMethod (~showErrorToast = false )
1576 let (screenState , setScreenState ) = React .useState (_ => PageLoaderWrapper .Loading )
1677 let (overviewRawData , setOverviewRawData ) = React .useState (_ =>
1778 Dict .make ()-> FeeEstimationUtils .overviewDataMapper
@@ -26,25 +87,21 @@ module OverviewContainer = {
2687 setScreenState (_ => PageLoaderWrapper .Loading )
2788 let url = getURL (~entityName = V1 (FEE_OVERVIEW_ESTIMATE ), ~methodType = Post )
2889 let body = {
29- "payload" : {
30- "offset" : pageDetail .offset ,
31- "limit" : pageDetail .resultsPerPage ,
32- "startDate" : monthFilters ["startDate" ],
33- "endDate" : monthFilters ["endDate" ],
34- },
90+ "offset" : pageDetail .offset ,
91+ "limit" : pageDetail .resultsPerPage ,
92+ "startDate" : monthFilters ["startDate" ],
93+ "endDate" : monthFilters ["endDate" ],
3594 }-> Identity .genericTypeToJson
3695
37- let response = switch GlobalVars .hostType {
38- | Local | Integ => FeeEstimationMockData .overViewMockData
39- | _ => await updateDetails (url , body , Fetch .Post )
40- }
41-
96+ let response = await updateDetails (url , body , Fetch .Post )
4297 let overViewData =
4398 response
4499 -> getDictFromJsonObject
45100 -> getDictfromDict ("response" )
46101 -> FeeEstimationUtils .overviewDataMapper
102+
47103 setOverviewRawData (_ => overViewData )
104+ Console .log2 ("overview data fetched:" , overViewData )
48105 setScreenState (_ => PageLoaderWrapper .Success )
49106 } catch {
50107 | _ => {
@@ -60,7 +117,7 @@ module OverviewContainer = {
60117 React .useEffect (() => {
61118 fetchOverviewData ()-> ignore
62119 None
63- }, [pageDetail . offset , pageDetail . resultsPerPage ])
120+ }, [])
64121
65122 <PageLoaderWrapper
66123 screenState
@@ -71,7 +128,7 @@ module OverviewContainer = {
71128 feeBreakdownData = overviewRawData .feeBreakdownBasedOnGeoLocation
72129 currency = overviewRawData .currency
73130 />
74- <CostBreakDown costBreakDownRawData = { overviewRawData } />
131+ <OverviewBreakdown monthFilters />
75132 </PageLoaderWrapper >
76133 }
77134}
@@ -89,9 +146,10 @@ module TransactionViewContainer = {
89146 let (selectedTransaction , setSelectedTransaction ) = React .useState (_ =>
90147 JSON .Encode .null -> FeeEstimationUtils .feeEstimateBreakdownMapper
91148 )
92- let (transactionData , setTransactionData ) = React .useState (_ =>
149+ let (transactionRawData , setTransactionRawData ) = React .useState (_ =>
93150 Dict .make ()-> FeeEstimationUtils .feeEstimationMapper
94151 )
152+ let (transactionData , setTransactionData ) = React .useState (_ => [])
95153
96154 let defaultValue : LoadedTable .pageDetails = {offset : 0 , resultsPerPage : 10 }
97155 let pageDetailDict = Recoil .useRecoilValueFromAtom (LoadedTable .table_pageDetails )
@@ -107,24 +165,30 @@ module TransactionViewContainer = {
107165 setScreenState (_ => PageLoaderWrapper .Loading )
108166 let url = getURL (~entityName = V1 (FEE_TRANSACTION_ESTIMATE ), ~methodType = Post )
109167 let body = {
110- "payload" : {
111- "offset" : pageDetail .offset ,
112- "limit" : pageDetail .resultsPerPage ,
113- "startDate" : monthFilters ["startDate" ],
114- "endDate" : monthFilters ["endDate" ],
115- },
168+ "offset" : offset ,
169+ "limit" : pageDetail .resultsPerPage ,
170+ "startDate" : monthFilters ["startDate" ],
171+ "endDate" : monthFilters ["endDate" ],
116172 }-> Identity .genericTypeToJson
117- let response = switch GlobalVars .hostType {
118- | Local | Integ => FeeEstimationMockData .mockData
119- | _ => await updateDetails (url , body , Fetch .Post )
120- }
121173
174+ let response = await updateDetails (url , body , Fetch .Post )
122175 let transactionData =
123176 response
124177 -> getDictFromJsonObject
125178 -> getDictfromDict ("response" )
126179 -> FeeEstimationUtils .feeEstimationMapper
127- setTransactionData (_ => transactionData )
180+
181+ let paddedRows = Array .make (
182+ ~length = offset ,
183+ JSON .Encode .object (Dict .make ())
184+ -> FeeEstimationUtils .feeEstimateBreakdownMapper
185+ -> Nullable .make ,
186+ )
187+ let paginatedTransactionData =
188+ paddedRows -> Array .concat (transactionData .breakdown -> Array .map (Nullable .make ))
189+
190+ setTransactionRawData (_ => transactionData )
191+ setTransactionData (_ => paginatedTransactionData )
128192 setScreenState (_ => PageLoaderWrapper .Success )
129193 } catch {
130194 | _ => {
@@ -140,32 +204,36 @@ module TransactionViewContainer = {
140204 React .useEffect (_ => {
141205 fetchData ()-> ignore
142206 None
143- }, [pageDetail . offset , pageDetail .resultsPerPage ])
207+ }, [offset , pageDetail .resultsPerPage ])
144208
145209 <div className = "py-6" >
146210 <PageLoaderWrapper
147211 screenState
148212 customUI = {<NewAnalyticsHelper .NoData height = "h-56" message = "No data available" />}
149213 customLoader = {<Shimmer styleClass = "w-full h-56 rounded-xl" />}>
150- <RenderIf condition = {transactionData . breakdown -> Array .length == 0 }>
214+ <RenderIf condition = {transactionData -> Array .length == 0 }>
151215 <NoDataFound message = "No data available for selected month" />
152216 </RenderIf >
153- <RenderIf condition = {transactionData . breakdown -> Array .length > 0 }>
154- <LoadedTable
217+ <RenderIf condition = {transactionData -> Array .length > 0 }>
218+ <LoadedTableWithCustomColumns
155219 title = transactionViewTableKey
156220 hideTitle = true
157- actualData = {transactionData .breakdown -> Array .map (Nullable .make )}
158- totalResults = {transactionData .totalRecords }
159- resultsPerPage = 10
221+ actualData = {transactionData }
222+ entity = {FeeEstimationEntity .feeEstimationEntity ()}
223+ resultsPerPage = pageDetail .resultsPerPage
224+ totalResults = transactionRawData .totalRecords
160225 offset
161226 setOffset
162- headingCenter = false
163- alignCellContent = "flex items-center"
164- entity = { FeeEstimationEntity . feeEstimationEntity () }
165- currrentFetchCount = { transactionData . breakdown -> Array . length }
227+ currrentFetchCount = { transactionData -> Array . length }
228+ defaultColumns = { FeeEstimationEntity . defaultColumns }
229+ customColumnMapper = { TableAtoms . feeEstimationTransactionViewMapDefaultCols }
230+ showSerialNumberInCustomizeColumns = false
166231 onEntityClick = {selectedData => handleSelectedTransactionData (selectedData )}
167- collapseTableRow = false
232+ showResultsPerPageSelector = true
233+ sortingBasedOnDisabled = false
168234 showAutoScroll = true
235+ isDraggable = true
236+ allowNullableRows = true
169237 />
170238 </RenderIf >
171239 </PageLoaderWrapper >
@@ -183,12 +251,11 @@ module TransactionViewContainer = {
183251
184252@react.component
185253let make = () => {
186- let getDate = (~month , ~year , ~date ) => Date .makeWithYMD (~year , ~month , ~date )
187254 let formattedDate = date => date -> Date .toString -> DateTimeUtils .getFormattedDate ("YYYY-MM-DD" )
188255 let (monthFilters , setMonthFilters ) = React .useState (_ =>
189256 {
190- "startDate" : formattedDate ( getDate ( ~month = 10 , ~year = 2025 , ~date = 1 )) ,
191- "endDate" : formattedDate ( getDate ( ~month = 10 , ~year = 2025 , ~date =- 1 )) ,
257+ "startDate" : Date . makeWithYMDH ( ~month = 8 , ~year = 2025 , ~date = 1 , ~ hours = 10 ) -> formattedDate ,
258+ "endDate" : Date . makeWithYMDH ( ~month = 9 , ~year = 2025 , ~date = 0 , ~ hours = 10 ) -> formattedDate ,
192259 }
193260 )
194261 let tabs : array <Tabs .tab > = [
0 commit comments