// Copyright © 2022 Olo Inc. All rights reserved. // This software is made available under the Olo Pay SDK License (See LICENSE.md file) package com.olopaysdkreactnative.paymentcarddetailsview import com.facebook.react.bridge.ReadableMap import com.facebook.react.common.MapBuilder import com.facebook.react.module.annotations.ReactModule import com.facebook.react.uimanager.SimpleViewManager import com.facebook.react.uimanager.ThemedReactContext import com.facebook.react.uimanager.ViewManagerDelegate import com.facebook.react.viewmanagers.PaymentCardDetailsViewManagerDelegate import com.facebook.react.viewmanagers.PaymentCardDetailsViewManagerInterface import com.olopaysdkreactnative.events.CardDetailsChangedEvent import com.olopaysdkreactnative.events.FocusClearedEvent import com.olopaysdkreactnative.events.FocusFieldEvent import com.olopaysdkreactnative.events.FocusReceivedEvent import com.olopaysdkreactnative.events.PaymentMethodResultEvent import com.olo.olopay.data.CardField @ReactModule(name = PaymentCardDetailsViewManager.NAME) class PaymentCardDetailsViewManager : SimpleViewManager(), PaymentCardDetailsViewManagerInterface { private val mDelegate: ViewManagerDelegate = PaymentCardDetailsViewManagerDelegate(this) override fun getDelegate(): ViewManagerDelegate = mDelegate companion object { const val NAME = "PaymentCardDetailsView" } override fun getName(): String { return NAME } override fun createViewInstance(reactContext: ThemedReactContext): PaymentCardDetailsView { return PaymentCardDetailsView(reactContext) } override fun getExportedCustomDirectEventTypeConstants(): MutableMap? { return MapBuilder.of( CardDetailsChangedEvent.Name, MapBuilder.of("registrationName", CardDetailsChangedEvent.Name), FocusReceivedEvent.Name, MapBuilder.of("registrationName", FocusReceivedEvent.Name), FocusClearedEvent.Name, MapBuilder.of("registrationName", FocusClearedEvent.Name), FocusFieldEvent.Name, MapBuilder.of("registrationName", FocusFieldEvent.Name), PaymentMethodResultEvent.Name, MapBuilder.of("registrationName", PaymentMethodResultEvent.Name)) } // Command implementations override fun focus(view: PaymentCardDetailsView, field: String) { view.requestFocusFromJS(CardField.from(field) ?: CardField.CardNumber, true) } override fun blur(view: PaymentCardDetailsView) { view.clearFocusFromJS() } override fun clear(view: PaymentCardDetailsView) { view.clearCardDetails() } override fun createPaymentMethod(view: PaymentCardDetailsView) { view.createPaymentMethod() } override fun setIsEnabled(view: PaymentCardDetailsView, value: Boolean) { view.isEnabled = value } override fun setPostalCodeEnabled(view: PaymentCardDetailsView, value: Boolean) { view.setPostalCodeEnabled(value) } override fun setPlaceholders(view: PaymentCardDetailsView, value: ReadableMap?) { if (value == null) return view.setPlaceholders(value) } override fun setCardStyles(view: PaymentCardDetailsView, value: ReadableMap?) { if(value == null) return view.setCardStyles(value) } override fun setCustomErrorMessages(view: PaymentCardDetailsView, value: ReadableMap?) { if(value == null) return view.setCustomErrorMessages(value) } }