JezK
Edit File: sc-razorpay-add-method.entry.js.map
{"file":"sc-razorpay-add-method.entry.js","mappings":";;;;;;;AAAA,MAAM,sBAAsB,GAAG,8CAA8C,CAAC;AAC9E,kCAAe,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qCC+DZ,UAAE;;;;;;;;;;;;;gKAc0B,UAAE;;;;;;;8EAOtB,UAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;sPA0BoC,UAAE;;;;;iRAUzC,UAAE,2OAMrB,UAAE,ubAME,UAAE;;;;;;;;;;","names":[],"sources":["src/components/ui/sc-razorpay-add-method/sc-razorpay-add-method.scss?tag=sc-razorpay-add-method","src/components/ui/sc-razorpay-add-method/sc-razorpay-add-method.tsx"],"sourcesContent":[".sc-razorpay-button-container {\n display: block;\n}\n","/**\n * WordPress dependencies.\n */\nimport { __ } from '@wordpress/i18n';\n\n/**\n * External dependencies.\n */\nimport { Component, h, Host, Prop, State, Watch } from '@stencil/core';\n\n/**\n * Internal dependencies.\n */\nimport apiFetch from '../../../functions/fetch';\nimport { loadRazorpay } from 'src/functions/razorpay';\nimport { PaymentIntent, RazorpayConstructor } from 'src/types';\n\n@Component({\n tag: 'sc-razorpay-add-method',\n styleUrl: 'sc-razorpay-add-method.scss',\n shadow: false,\n})\nexport class ScRazorpayAddMethod {\n @Prop() liveMode: boolean = true;\n @Prop() customerId: string;\n @Prop() successUrl: string;\n @Prop() currency: string;\n\n @State() loading: boolean;\n @State() loaded: boolean;\n @State() error: string;\n @State() paymentIntent: PaymentIntent;\n\n private razorpayInstance: RazorpayConstructor | null = null;\n private confirming: boolean = false;\n\n @Watch('paymentIntent')\n async handlePaymentIntentCreate() {\n // Prevent multiple simultaneous payment attempts\n if (this.confirming) return;\n\n const { external_intent_id, processor_data } = this.paymentIntent || {};\n const { public_key, customer_id } = (processor_data?.razorpay || {}) as any;\n\n // we need this data.\n if (!public_key || !external_intent_id) return;\n\n this.confirming = true;\n\n try {\n // Load Razorpay if not loaded yet.\n if (!this.razorpayInstance) {\n this.razorpayInstance = await loadRazorpay();\n }\n\n const options = {\n key: public_key,\n order_id: external_intent_id,\n customer_id,\n recurring: true,\n handler: async (response: any) => {\n if (response?.razorpay_payment_id) {\n window.location.assign(this.successUrl);\n } else {\n this.error = __('Payment verification failed. Please contact support.', 'surecart');\n this.loading = false;\n }\n },\n modal: {\n ondismiss: () => {\n this.loading = false;\n },\n },\n };\n\n const razorpay = new this.razorpayInstance(options);\n\n razorpay.on('payment.failed', response => {\n this.error = response?.error?.description || __('Payment failed. Please try again.', 'surecart');\n this.loading = false;\n console.error('payment.failed', response);\n });\n\n razorpay.open();\n } catch (e) {\n this.error = e?.message || __('Something went wrong', 'surecart');\n this.loading = false;\n console.error(e);\n } finally {\n this.confirming = false;\n }\n }\n\n async createPaymentIntent() {\n try {\n this.loading = true;\n this.error = '';\n this.paymentIntent = await apiFetch({\n method: 'POST',\n path: 'surecart/v1/payment_intents',\n data: {\n processor_type: 'razorpay',\n reusable: true,\n live_mode: this.liveMode,\n customer_id: this.customerId,\n currency: this.currency,\n refresh_status: true,\n },\n });\n } catch (e) {\n console.error(e);\n this.error = e?.additional_errors?.[0]?.message || e?.message || __('Something went wrong', 'surecart');\n this.loading = false;\n }\n }\n\n render() {\n return (\n <Host>\n {this.error && (\n <sc-alert open={!!this.error} type=\"danger\">\n <span slot=\"title\">{__('Error', 'surecart')}</span>\n {this.error}\n </sc-alert>\n )}\n <div class=\"sc-razorpay-button-container\">\n <sc-alert open={true} type=\"warning\">\n {__(\n 'In order to add a new card, we will need to make a small transaction to authenticate it. This is for authentication purposes and will be immediately refunded.',\n 'surecart',\n )}\n <div>\n <sc-button loading={this.loading} type=\"primary\" onClick={() => this.createPaymentIntent()} style={{ marginTop: 'var(--sc-spacing-medium)' }}>\n {__('Add New Card', 'surecart')}\n </sc-button>\n </div>\n </sc-alert>\n </div>\n </Host>\n );\n }\n}\n"],"version":3}