// 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.events import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.olo.olopay.data.CardBrand import com.olo.olopay.data.CardField import com.olo.olopay.data.ICardFieldState import com.olopaysdkreactnative.data.DataKeys import com.olopaysdkreactnative.extensions.toWritableArray class CardDetailsChangedEvent constructor( surfaceId: Int, reactTag: Int, private val fieldStates: Map, private val isValid: Boolean, private val editedFieldsError: String, private val allFieldsError: String, private val cardBrand: CardBrand ): OloPayEvent(surfaceId, reactTag) { override fun getEventName(): String { return Name } override fun getEventData(): WritableMap? { val data = Arguments.createMap() data.putBoolean(DataKeys.IsValidKey, isValid) data.putString(DataKeys.CardTypeKey, cardBrand.description) if (!isValid) { val errors = Arguments.createMap() if (editedFieldsError.isNotEmpty()) errors.putString(DataKeys.EditedFieldsErrorKey, editedFieldsError) if (allFieldsError.isNotEmpty()) errors.putString(DataKeys.AllFieldsErrorKey, allFieldsError) if (editedFieldsError.isNotEmpty() || allFieldsError.isNotEmpty()) data.putMap(DataKeys.ErrorsKey, errors) } val invalidFields = fieldStates.filter { !it.value.isValid }.map { it.key } if (invalidFields.isNotEmpty()) data.putArray(DataKeys.InvalidFieldsKey, invalidFields.toWritableArray()) val emptyFields = fieldStates.filter { it.value.isEmpty }.map{ it.key } if (emptyFields.isNotEmpty()) data.putArray(DataKeys.EmptyFieldsKey, emptyFields.toWritableArray()) return data } companion object { const val Name = "onCardChangeEvent" } }