@@ -142,12 +142,13 @@ let make = (
142
142
}
143
143
}
144
144
145
- let fetchPaymentsList = (mountedIframeRef , componentType ) => {
145
+ let fetchPaymentsList = (mountedIframeRef , componentType , promiseResolve ) => {
146
146
let handlePaymentMethodsLoaded = (event : Types .event ) => {
147
147
let json = event .data -> anyTypeToJson
148
148
let dict = json -> getDictFromJson
149
149
let isPaymentMethodsData = dict -> getString ("data" , "" ) === "payment_methods"
150
150
if isPaymentMethodsData {
151
+ promiseResolve ()
151
152
isTaxCalculationEnabled .contents =
152
153
dict -> getDictFromDict ("response" )-> getBool ("is_tax_calculation_enabled" , false )
153
154
addSmartEventListener ("message" , onPlaidCallback (mountedIframeRef ), "onPlaidCallback" )
@@ -212,6 +213,7 @@ let make = (
212
213
mountedIframeRef ,
213
214
disableSavedPaymentMethods ,
214
215
componentType ,
216
+ promiseResolve ,
215
217
) => {
216
218
if ! disableSavedPaymentMethods {
217
219
let handleCustomerPaymentMethodsLoaded = (event : Types .event ) => {
@@ -223,13 +225,16 @@ let make = (
223
225
let json = dict -> getJsonFromDict ("response" , JSON .Encode .null )
224
226
let msg = [("customerPaymentMethods" , json )]-> Dict .fromArray
225
227
mountedIframeRef -> Window .iframePostMessage (msg )
228
+ promiseResolve ()
226
229
}
227
230
}
228
231
addSmartEventListener (
229
232
"message" ,
230
233
handleCustomerPaymentMethodsLoaded ,
231
234
` onCustomerPaymentMethodsLoaded-${componentType}` ,
232
235
)
236
+ } else {
237
+ promiseResolve ()
233
238
}
234
239
let msg =
235
240
[
@@ -809,13 +814,14 @@ let make = (
809
814
addSmartEventListener ("message" , handleGooglePayThirdPartyFlow , "onGooglePayThirdParty" )
810
815
addSmartEventListener ("message" , handleApplePayThirdPartyFlow , "onApplePayThirdParty" )
811
816
812
- let fetchSessionTokens = mountedIframeRef => {
817
+ let fetchSessionTokens = ( mountedIframeRef , promiseResolve ) => {
813
818
let handleSessionTokensLoaded = (event : Types .event ) => {
814
819
let json = event .data -> anyTypeToJson
815
820
let dict = json -> getDictFromJson
816
821
let sessionTokensData = dict -> getString ("data" , "" ) === "session_tokens"
817
822
if sessionTokensData {
818
823
let json = dict -> getJsonFromDict ("response" , JSON .Encode .null )
824
+ promiseResolve ()
819
825
820
826
{
821
827
let sessionsArr =
@@ -1288,22 +1294,42 @@ let make = (
1288
1294
}
1289
1295
preMountLoaderMountedPromise
1290
1296
-> then (_ => {
1291
- fetchPaymentsList (mountedIframeRef , componentType )
1297
+ let paymentMethodsPromise = Promise .make ((resolve , _ ) => {
1298
+ fetchPaymentsList (mountedIframeRef , componentType , resolve )
1299
+ })
1292
1300
let disableSavedPaymentMethods =
1293
1301
newOptions
1294
1302
-> getDictFromJson
1295
1303
-> getBool ("displaySavedPaymentMethods" , true ) &&
1296
1304
! (spmComponents -> Array .includes (componentType ))-> not
1297
- fetchCustomerPaymentMethods (mountedIframeRef , disableSavedPaymentMethods , componentType )
1298
- fetchSessionTokens (mountedIframeRef )
1299
- resolve ()
1305
+ let customerPaymentMethodsPromise = Promise .make ((resolve , _ ) => {
1306
+ fetchCustomerPaymentMethods (
1307
+ mountedIframeRef ,
1308
+ disableSavedPaymentMethods ,
1309
+ componentType ,
1310
+ resolve ,
1311
+ )
1312
+ })
1313
+ let sessionTokensPromise = Promise .make ((resolve , _ ) => {
1314
+ fetchSessionTokens (mountedIframeRef , resolve )
1315
+ })
1316
+ Promise .all ([
1317
+ paymentMethodsPromise ,
1318
+ customerPaymentMethodsPromise ,
1319
+ sessionTokensPromise ,
1320
+ ])-> then (_ => {
1321
+ let msg = [("cleanUpPreMountLoaderIframe" , true -> JSON .Encode .bool )]-> Dict .fromArray
1322
+ preMountLoaderIframeDiv -> Window .iframePostMessage (msg )
1323
+ resolve ()
1324
+ })
1300
1325
})
1301
1326
-> catch (_ => resolve ())
1302
1327
-> ignore
1303
1328
1304
1329
mountedIframeRef -> Window .iframePostMessage (message )
1305
1330
}
1306
1331
1332
+ Console .log ("Creating payment element" )
1307
1333
let paymentElement = LoaderPaymentElement .make (
1308
1334
componentType ,
1309
1335
newOptions ,
@@ -1315,6 +1341,7 @@ let make = (
1315
1341
savedPaymentElement -> Dict .set (componentType , paymentElement )
1316
1342
paymentElement
1317
1343
}
1344
+ Console .log ("Elements initialization completed" )
1318
1345
{
1319
1346
getElement ,
1320
1347
update ,
@@ -1323,6 +1350,7 @@ let make = (
1323
1350
}
1324
1351
} catch {
1325
1352
| e => {
1353
+ Console .log2 (` Elements initialization failed: ` , e )
1326
1354
Sentry .captureException (e )
1327
1355
defaultElement
1328
1356
}
0 commit comments