1+ ( function ( $ ) {
2+ 'use strict' ;
3+ // Checkout form.
4+ $ ( document . body ) . on (
5+ 'updated_checkout' ,
6+ function ( e , data ) {
7+ wc_monei_form . update_apple_google_label ( ) ;
8+ // Update cofidis_widget.total on every updated_checkout event.
9+ if ( 'object' === typeof ( data ) && data . fragments && data . fragments [ 'monei_new_total' ] ) {
10+ wc_monei_form . total = data . fragments [ 'monei_new_total' ] ;
11+ }
12+
13+ if ( wc_monei_form . is_apple_selected ( ) ) {
14+ wc_monei_form . init_apple_google_pay ( ) ;
15+ }
16+ }
17+ ) ;
18+ // On Pay for order form.
19+ $ ( 'form#order_review' ) . on (
20+ 'click' ,
21+ function ( ) {
22+ if ( wc_monei_form . is_apple_selected ( ) ) {
23+ wc_monei_form . init_apple_google_pay ( ) ;
24+ }
25+ }
26+ ) ;
27+
28+ var wc_monei_form = {
29+ $checkout_form : $ ( 'form.woocommerce-checkout' ) ,
30+ $add_payment_form : $ ( 'form#add_payment_method' ) ,
31+ $order_pay_form : $ ( 'form#order_review' ) ,
32+ $cardInput : null ,
33+ $container : null ,
34+ $payment_request_container : null ,
35+ $errorContainer : null ,
36+ $paymentForm : null ,
37+ is_checkout : false ,
38+ is_add_payment_method : false ,
39+ is_order_pay : false ,
40+ form : null ,
41+ submitted : false ,
42+ init_counter : 0 ,
43+ init_apple_counter : 0 ,
44+ total : wc_monei_apple_google_params . total ,
45+ cardholderNameRegex : / ^ [ A - Z a - z À - ú - ] { 5 , 50 } $ / ,
46+ init : function ( ) {
47+ // Checkout Page
48+ if ( this . $checkout_form . length ) {
49+ this . is_checkout = true ;
50+ this . form = this . $checkout_form ;
51+ }
52+
53+ // Add payment method Page
54+ if ( this . $add_payment_form . length ) {
55+ this . is_add_payment_method = true ;
56+ this . form = this . $add_payment_form ;
57+ }
58+
59+ // Pay for order ( change_payment_method for subscriptions)
60+ if ( this . $order_pay_form . length ) {
61+ if ( wc_monei_form . is_apple_selected ( ) ) {
62+ wc_monei_form . init_apple_google_pay ( )
63+ }
64+
65+ this . is_order_pay = true ;
66+ this . form = this . $order_pay_form ;
67+
68+ $ ( 'input[name="payment_method"]' ) . on ( 'change' , function ( ) {
69+ // Check if the apple google pay method is selected
70+ if ( wc_monei_form . is_apple_selected ( ) ) {
71+ wc_monei_form . init_apple_google_pay ( ) ;
72+ }
73+ } ) ;
74+ }
75+
76+ if ( this . form ) {
77+ this . form . on ( 'change' , this . on_change ) ;
78+ }
79+ } ,
80+ on_change : function ( ) {
81+ // Triggers on payment method selection.
82+ $ ( "[name='payment_method']" ) . on (
83+ 'change' ,
84+ function ( ) {
85+ wc_monei_form . on_payment_selected ( ) ;
86+ }
87+ ) ;
88+ // Triggers on saved card selection.
89+ $ ( "[name='wc-monei-payment-token']" ) . on (
90+ 'change' ,
91+ function ( ) {
92+ wc_monei_form . on_payment_selected ( ) ;
93+ }
94+ ) ;
95+ } ,
96+ on_payment_selected ( ) {
97+ if ( wc_monei_form . is_apple_selected ( ) ) {
98+
99+ wc_monei_form . init_apple_google_pay ( ) ;
100+ console . log ( 'after' )
101+ if ( wc_monei_form . is_checkout ) {
102+ $ ( "[name='woocommerce_checkout_place_order']" ) . attr ( 'data-monei' , 'submit' ) ;
103+ }
104+ $ ( '#place_order' ) . prop ( 'disabled' , true ) ;
105+ return false ;
106+ } else {
107+ if ( wc_monei_form . is_checkout ) {
108+ $ ( '#place_order' ) . prop ( 'disabled' , false ) ;
109+ $ ( "[name='woocommerce_checkout_place_order']" ) . removeAttr ( 'data-monei' ) ;
110+ }
111+ }
112+ } ,
113+ is_apple_selected : function ( ) {
114+ return $ ( '#payment_method_monei_apple_google' ) . is ( ':checked' ) ;
115+ } ,
116+ init_apple_google_pay : function ( ) {
117+ // If checkout is updated (and monei was initiated already), ex, selecting new shipping methods, checkout is re-render by the ajax call.
118+ // and we need to reset the counter in order to initiate again the monei component.
119+ if ( wc_monei_form . $payment_request_container && 0 === wc_monei_form . $payment_request_container . childElementCount ) {
120+ wc_monei_form . init_apple_counter = 0 ;
121+ }
122+
123+ // init monei just once, despite how many times this may be triggered.
124+ if ( 0 !== this . init_apple_counter ) {
125+ return ;
126+ }
127+
128+ if ( wc_monei_form . is_checkout ) {
129+ $ ( "[name='woocommerce_checkout_place_order']" ) . attr ( 'data-monei' , 'submit' ) ;
130+ }
131+
132+ wc_monei_form . instantiate_payment_request ( ) ;
133+ wc_monei_form . $payment_request_container = document . getElementById ( 'payment-request-container' )
134+
135+ // We already init the button.
136+ this . init_apple_counter ++ ;
137+
138+ } ,
139+ instantiate_payment_request : function ( ) {
140+ var paymentRequest = monei . PaymentRequest ( {
141+ accountId : wc_monei_apple_google_params . account_id ,
142+ sessionId : wc_monei_apple_google_params . session_id ,
143+ amount : parseInt ( wc_monei_form . total ) ,
144+ currency : wc_monei_apple_google_params . currency ,
145+ onSubmit ( result ) {
146+ wc_monei_form . apple_google_token_handler ( result . token ) ;
147+ } ,
148+ onError ( error ) {
149+ console . error ( error ) ;
150+ } ,
151+ } ) ;
152+ paymentRequest . render ( '#payment-request-container' ) ;
153+ window . paymentRequest = paymentRequest ;
154+ } ,
155+ apple_google_token_handler : function ( token ) {
156+ $ ( '#place_order' ) . prop ( 'disabled' , false ) ;
157+ wc_monei_form . create_hidden_input ( 'monei_payment_request_token' , 'payment-request-form' , token ) ;
158+ // Once Token is created, submit form.
159+ wc_monei_form . form . submit ( ) ;
160+ } ,
161+ create_hidden_input : function ( id , form , token ) {
162+ var hiddenInput = document . createElement ( 'input' ) ;
163+ hiddenInput . setAttribute ( 'type' , 'hidden' ) ;
164+ hiddenInput . setAttribute ( 'name' , id ) ;
165+ hiddenInput . setAttribute ( 'id' , id ) ;
166+ hiddenInput . setAttribute ( 'value' , token ) ;
167+ wc_monei_form . $paymentForm = document . getElementById ( form ) ;
168+ wc_monei_form . $paymentForm . appendChild ( hiddenInput ) ;
169+ } ,
170+ /**
171+ * If Apple can make payments then we need to show the apple logo and title instead of Google
172+ */
173+ update_apple_google_label : function ( ) {
174+ const isApple = window . ApplePaySession ?. canMakePayments ( ) ;
175+ if ( isApple ) {
176+ const label = document . querySelector ( 'label[for="payment_method_monei_apple_google"]' ) ;
177+ if ( label ) {
178+ label . childNodes [ 0 ] . nodeValue = "Apple Pay " ;
179+ const icon = label . querySelector ( 'img' ) ;
180+ if ( icon ) {
181+ icon . src = wc_monei_apple_google_params . apple_logo ;
182+ icon . alt = "Apple Pay" ;
183+ }
184+ }
185+ }
186+ }
187+ } ;
188+
189+ $ (
190+ function ( ) {
191+ wc_monei_form . init ( ) ;
192+ wc_monei_form . update_apple_google_label ( ) ;
193+ }
194+ ) ;
195+
196+ } ) ( jQuery ) ;
0 commit comments