-
Notifications
You must be signed in to change notification settings - Fork 83
Expand file tree
/
Copy pathReconEngineOverviewTransactions.res
More file actions
138 lines (130 loc) · 4.69 KB
/
ReconEngineOverviewTransactions.res
File metadata and controls
138 lines (130 loc) · 4.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
@react.component
let make = (~ruleDetails: ReconEngineRulesTypes.rulePayload) => {
open LogicUtils
open HierarchicalTransactionsTableEntity
let (configuredTransactions, setConfiguredReports) = React.useState(_ => [])
let (filteredTransactionsData, setFilteredReports) = React.useState(_ => [])
let (offset, setOffset) = React.useState(_ => 0)
let (screenState, setScreenState) = React.useState(_ => PageLoaderWrapper.Loading)
let {updateExistingKeys, filterValueJson, filterValue, filterKeys} = React.useContext(
FilterContext.filterContext,
)
let getTransactions = ReconEngineHooks.useGetTransactions()
let startTimeFilterKey = HSAnalyticsUtils.startTimeFilterKey
let endTimeFilterKey = HSAnalyticsUtils.endTimeFilterKey
let mixpanelEvent = MixpanelHook.useSendEvent()
let dateDropDownTriggerMixpanelCallback = () => {
mixpanelEvent(~eventName="recon_engine_overview_transactions_date_filter_opened")
}
let fetchTransactionsData = async () => {
setScreenState(_ => PageLoaderWrapper.Loading)
try {
let enhancedFilterValueJson = Dict.copy(filterValueJson)
let statusFilter = filterValueJson->getArrayFromDict("status", [])
if statusFilter->Array.length === 0 {
enhancedFilterValueJson->Dict.set(
"status",
[
"expected",
"over_amount_mismatch",
"under_amount_mismatch",
"over_amount_expected",
"under_amount_expected",
"data_mismatch",
"posted_auto",
"posted_manual",
"posted_force",
"partially_reconciled",
"void",
]->getJsonFromArrayOfString,
)
}
let baseQueryString = ReconEngineFilterUtils.buildQueryStringFromFilters(
~filterValueJson=enhancedFilterValueJson,
)
let queryString = if baseQueryString->isNonEmptyString {
`${baseQueryString}&rule_id=${ruleDetails.rule_id}`
} else {
`rule_id=${ruleDetails.rule_id}`
}
let transactionsList = await getTransactions(~queryParameters=Some(queryString))
let transactionsListData = transactionsList->Array.map(Nullable.make)
setConfiguredReports(_ => transactionsListData)
setFilteredReports(_ => transactionsListData)
setScreenState(_ => PageLoaderWrapper.Success)
} catch {
| _ => setScreenState(_ => PageLoaderWrapper.Custom)
}
}
let setInitialFilters = HSwitchRemoteFilter.useSetInitialFilters(
~updateExistingKeys,
~startTimeFilterKey,
~endTimeFilterKey,
~range=180,
~origin="recon_engine_overview_transactions",
(),
)
React.useEffect(() => {
setInitialFilters()
None
}, [])
React.useEffect(() => {
if !(filterValue->isEmptyDict) {
fetchTransactionsData()->ignore
}
None
}, [filterValue])
let topFilterUi = {
<div className="flex flex-row">
<DynamicFilter
title="ReconEngineOverviewTransactionsFilters"
initialFilters={ReconEngineOverviewUtils.initialDisplayFilters()}
options=[]
popupFilterFields=[]
initialFixedFilters={HSAnalyticsUtils.initialFixedFilterFields(
null,
~events=dateDropDownTriggerMixpanelCallback,
)}
defaultFilterKeys=[startTimeFilterKey, endTimeFilterKey]
tabNames=filterKeys
key="ReconEngineOverviewTransactionsFilters"
updateUrlWith=updateExistingKeys
filterFieldsPortalName={HSAnalyticsUtils.filterFieldsPortalName}
showCustomFilter=false
refreshFilters=false
setOffset
/>
</div>
}
<div className="flex flex-col gap-4">
<div className="flex-shrink-0"> {topFilterUi} </div>
<PageLoaderWrapper
screenState
customUI={<NewAnalyticsHelper.NoData height="h-96" message="No data available" />}
customLoader={<Shimmer styleClass="w-full h-96 rounded-xl" />}>
<LoadedTableWithCustomColumns
title="All Transactions"
actualData={filteredTransactionsData}
entity={hierarchicalTransactionsLoadedTableEntity(
`v1/recon-engine/transactions`,
~authorization=Access,
)}
resultsPerPage=5
totalResults={filteredTransactionsData->Array.length}
offset
setOffset
currrentFetchCount={configuredTransactions->Array.length}
customColumnMapper=TableAtoms.transactionsHierarchicalDefaultCols
defaultColumns
showSerialNumberInCustomizeColumns=false
sortingBasedOnDisabled=false
hideTitle=true
remoteSortEnabled=true
customizeColumnButtonIcon="nd-filter-horizontal"
hideRightTitleElement=true
showAutoScroll=true
customSeparation=[(2, 3)]
/>
</PageLoaderWrapper>
</div>
}