@smile_identity/react-native 10.2.3 → 10.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (139) hide show
  1. package/android/build.gradle +4 -1
  2. package/android/gradle.properties +1 -1
  3. package/android/src/main/java/com/smileidentity/react/Mapper.kt +19 -2
  4. package/android/src/main/java/com/smileidentity/react/fragments/SmileCaptureFragment.kt +56 -0
  5. package/android/src/main/java/com/smileidentity/react/utils/ReactUtils.kt +16 -0
  6. package/android/src/main/java/com/smileidentity/react/viewmanagers/BaseSmileIDViewManager.kt +130 -0
  7. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDBiometricKYCViewManager.kt +22 -46
  8. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDConsentViewManager.kt +27 -52
  9. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentCaptureViewManager.kt +15 -40
  10. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDDocumentVerificationViewManager.kt +23 -49
  11. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDEnhancedDocumentVerificationViewManager.kt +28 -47
  12. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.kt +12 -37
  13. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieAuthenticationViewManager.kt +16 -40
  14. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieCaptureViewManager.kt +15 -38
  15. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.kt +13 -38
  16. package/android/src/main/java/com/smileidentity/react/viewmanagers/SmileIDSmartSelfieEnrollmentViewManager.kt +15 -44
  17. package/android/src/main/java/com/smileidentity/react/views/SmileIDBiometricKYCView.kt +7 -0
  18. package/android/src/main/java/com/smileidentity/react/views/SmileIDEnhancedDocumentVerificationView.kt +8 -0
  19. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieCaptureView.kt +38 -25
  20. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentEnhancedView.kt +29 -21
  21. package/android/src/main/java/com/smileidentity/react/views/SmileIDSmartSelfieEnrollmentView.kt +35 -28
  22. package/android/src/main/java/com/smileidentity/react/views/SmileIDView.kt +11 -10
  23. package/android/src/main/res/values/colors.xml +14 -0
  24. package/android/src/main/res/values/strings.xml +91 -0
  25. package/ios/RNDelegates/SmileIDUIViewDelegate.swift +2 -0
  26. package/ios/RNSmileID.swift +470 -471
  27. package/ios/Utils/FileUtils.swift +17 -17
  28. package/ios/Utils/SmileIDDictExt.swift +14 -9
  29. package/ios/View/BaseSmileIDView.swift +6 -5
  30. package/ios/View/SmileIDBiometricKYCView.swift +54 -54
  31. package/ios/View/SmileIDConsentView.swift +2 -1
  32. package/ios/View/SmileIDDocumentCaptureView.swift +64 -64
  33. package/ios/View/SmileIDDocumentVerificationView.swift +51 -51
  34. package/ios/View/SmileIDEnhancedDocumentVerificationView.swift +51 -50
  35. package/ios/View/SmileIDSmartSelfieAuthEnhancedView.swift +34 -33
  36. package/ios/View/SmileIDSmartSelfieAuthView.swift +35 -34
  37. package/ios/View/SmileIDSmartSelfieCaptureView.swift +55 -55
  38. package/ios/View/SmileIDSmartSelfieEnrollmentEnhancedView.swift +35 -34
  39. package/ios/View/SmileIDSmartSelfieEnrollmentView.swift +37 -36
  40. package/ios/ViewManagers/SmileIDBaseViewManager.swift +22 -5
  41. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.m +4 -1
  42. package/ios/ViewManagers/SmileIDBiometricKYCViewManager.swift +2 -2
  43. package/ios/ViewManagers/SmileIDConsentViewManager.m +4 -1
  44. package/ios/ViewManagers/SmileIDConsentViewManager.swift +2 -2
  45. package/ios/ViewManagers/SmileIDDocumentCaptureViewManager.m +4 -1
  46. package/ios/ViewManagers/SmileIDDocumentCaptureViewManager.swift +19 -19
  47. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.m +4 -1
  48. package/ios/ViewManagers/SmileIDDocumentVerificationViewManager.swift +40 -40
  49. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.m +4 -1
  50. package/ios/ViewManagers/SmileIDEnhancedDocumentVerificationViewManager.swift +40 -40
  51. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.m +4 -1
  52. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationEnhancedViewManager.swift +16 -16
  53. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.m +4 -1
  54. package/ios/ViewManagers/SmileIDSmartSelfieAuthenticationViewManager.swift +20 -20
  55. package/ios/ViewManagers/SmileIDSmartSelfieCaptureViewManager.m +4 -1
  56. package/ios/ViewManagers/SmileIDSmartSelfieCaptureViewManager.swift +27 -26
  57. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.m +4 -1
  58. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentEnhancedViewManager.swift +16 -16
  59. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.m +4 -1
  60. package/ios/ViewManagers/SmileIDSmartSelfieEnrollmentViewManager.swift +20 -20
  61. package/ios/ViewModels/SmileIDProductModel.swift +5 -5
  62. package/lib/commonjs/SmileIDBiometricKYCView.js +18 -29
  63. package/lib/commonjs/SmileIDBiometricKYCView.js.map +1 -1
  64. package/lib/commonjs/SmileIDConsentView.js +9 -29
  65. package/lib/commonjs/SmileIDConsentView.js.map +1 -1
  66. package/lib/commonjs/SmileIDDocumentCaptureView.js +9 -29
  67. package/lib/commonjs/SmileIDDocumentCaptureView.js.map +1 -1
  68. package/lib/commonjs/SmileIDDocumentVerificationView.js +9 -29
  69. package/lib/commonjs/SmileIDDocumentVerificationView.js.map +1 -1
  70. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js +17 -28
  71. package/lib/commonjs/SmileIDEnhancedDocumentVerificationView.js.map +1 -1
  72. package/lib/commonjs/SmileIDSmartSelfieAuthenticationEnhancedView.js +9 -29
  73. package/lib/commonjs/SmileIDSmartSelfieAuthenticationEnhancedView.js.map +1 -1
  74. package/lib/commonjs/SmileIDSmartSelfieAuthenticationView.js +9 -29
  75. package/lib/commonjs/SmileIDSmartSelfieAuthenticationView.js.map +1 -1
  76. package/lib/commonjs/SmileIDSmartSelfieCaptureView.js +9 -29
  77. package/lib/commonjs/SmileIDSmartSelfieCaptureView.js.map +1 -1
  78. package/lib/commonjs/SmileIDSmartSelfieEnrollmentEnhancedView.js +9 -29
  79. package/lib/commonjs/SmileIDSmartSelfieEnrollmentEnhancedView.js.map +1 -1
  80. package/lib/commonjs/SmileIDSmartSelfieEnrollmentView.js +9 -29
  81. package/lib/commonjs/SmileIDSmartSelfieEnrollmentView.js.map +1 -1
  82. package/lib/commonjs/useSmileIDView.js +65 -0
  83. package/lib/commonjs/useSmileIDView.js.map +1 -0
  84. package/lib/module/SmileIDBiometricKYCView.js +18 -26
  85. package/lib/module/SmileIDBiometricKYCView.js.map +1 -1
  86. package/lib/module/SmileIDConsentView.js +9 -26
  87. package/lib/module/SmileIDConsentView.js.map +1 -1
  88. package/lib/module/SmileIDDocumentCaptureView.js +9 -26
  89. package/lib/module/SmileIDDocumentCaptureView.js.map +1 -1
  90. package/lib/module/SmileIDDocumentVerificationView.js +9 -26
  91. package/lib/module/SmileIDDocumentVerificationView.js.map +1 -1
  92. package/lib/module/SmileIDEnhancedDocumentVerificationView.js +17 -25
  93. package/lib/module/SmileIDEnhancedDocumentVerificationView.js.map +1 -1
  94. package/lib/module/SmileIDSmartSelfieAuthenticationEnhancedView.js +9 -26
  95. package/lib/module/SmileIDSmartSelfieAuthenticationEnhancedView.js.map +1 -1
  96. package/lib/module/SmileIDSmartSelfieAuthenticationView.js +9 -26
  97. package/lib/module/SmileIDSmartSelfieAuthenticationView.js.map +1 -1
  98. package/lib/module/SmileIDSmartSelfieCaptureView.js +9 -26
  99. package/lib/module/SmileIDSmartSelfieCaptureView.js.map +1 -1
  100. package/lib/module/SmileIDSmartSelfieEnrollmentEnhancedView.js +9 -26
  101. package/lib/module/SmileIDSmartSelfieEnrollmentEnhancedView.js.map +1 -1
  102. package/lib/module/SmileIDSmartSelfieEnrollmentView.js +9 -26
  103. package/lib/module/SmileIDSmartSelfieEnrollmentView.js.map +1 -1
  104. package/lib/module/useSmileIDView.js +58 -0
  105. package/lib/module/useSmileIDView.js.map +1 -0
  106. package/lib/typescript/SmileIDBiometricKYCView.d.ts +3 -6
  107. package/lib/typescript/SmileIDBiometricKYCView.d.ts.map +1 -1
  108. package/lib/typescript/SmileIDConsentView.d.ts +3 -6
  109. package/lib/typescript/SmileIDConsentView.d.ts.map +1 -1
  110. package/lib/typescript/SmileIDDocumentCaptureView.d.ts +3 -6
  111. package/lib/typescript/SmileIDDocumentCaptureView.d.ts.map +1 -1
  112. package/lib/typescript/SmileIDDocumentVerificationView.d.ts +3 -6
  113. package/lib/typescript/SmileIDDocumentVerificationView.d.ts.map +1 -1
  114. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts +3 -6
  115. package/lib/typescript/SmileIDEnhancedDocumentVerificationView.d.ts.map +1 -1
  116. package/lib/typescript/SmileIDSmartSelfieAuthenticationEnhancedView.d.ts +3 -6
  117. package/lib/typescript/SmileIDSmartSelfieAuthenticationEnhancedView.d.ts.map +1 -1
  118. package/lib/typescript/SmileIDSmartSelfieAuthenticationView.d.ts +3 -6
  119. package/lib/typescript/SmileIDSmartSelfieAuthenticationView.d.ts.map +1 -1
  120. package/lib/typescript/SmileIDSmartSelfieCaptureView.d.ts +3 -6
  121. package/lib/typescript/SmileIDSmartSelfieCaptureView.d.ts.map +1 -1
  122. package/lib/typescript/SmileIDSmartSelfieEnrollmentEnhancedView.d.ts +3 -6
  123. package/lib/typescript/SmileIDSmartSelfieEnrollmentEnhancedView.d.ts.map +1 -1
  124. package/lib/typescript/SmileIDSmartSelfieEnrollmentView.d.ts +3 -6
  125. package/lib/typescript/SmileIDSmartSelfieEnrollmentView.d.ts.map +1 -1
  126. package/lib/typescript/useSmileIDView.d.ts +12 -0
  127. package/lib/typescript/useSmileIDView.d.ts.map +1 -0
  128. package/package.json +1 -1
  129. package/src/SmileIDBiometricKYCView.tsx +14 -30
  130. package/src/SmileIDConsentView.tsx +7 -30
  131. package/src/SmileIDDocumentCaptureView.tsx +9 -33
  132. package/src/SmileIDDocumentVerificationView.tsx +9 -36
  133. package/src/SmileIDEnhancedDocumentVerificationView.tsx +23 -35
  134. package/src/SmileIDSmartSelfieAuthenticationEnhancedView.tsx +17 -36
  135. package/src/SmileIDSmartSelfieAuthenticationView.tsx +10 -37
  136. package/src/SmileIDSmartSelfieCaptureView.tsx +9 -33
  137. package/src/SmileIDSmartSelfieEnrollmentEnhancedView.tsx +14 -36
  138. package/src/SmileIDSmartSelfieEnrollmentView.tsx +10 -37
  139. package/src/useSmileIDView.tsx +88 -0
@@ -116,10 +116,13 @@ repositories {
116
116
  mavenCentral()
117
117
  google()
118
118
  gradlePluginPortal()
119
+ maven {
120
+ url 'https://oss.sonatype.org/content/repositories/snapshots/'
121
+ }
119
122
  }
120
123
 
121
124
  def kotlin_version = rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : project.properties["SmileId_kotlinVersion"]
122
- def smile_id_sdk_version = project.properties["SmileId_androidVersion"]
125
+ def smile_id_sdk_version = rootProject.ext.has("smileIdAndroidSdkVersion") ? rootProject.ext.get("smileIdAndroidSdkVersion") : project.properties["SmileId_androidVersion"]
123
126
 
124
127
  dependencies {
125
128
  implementation "com.facebook.react:react-native:0.72"
@@ -3,5 +3,5 @@ SmileId_minSdkVersion=21
3
3
  SmileId_targetSdkVersion=35
4
4
  SmileId_compileSdkVersion=35
5
5
  SmileId_ndkversion=21.4.7075529
6
- SmileId_androidVersion=10.4.2
6
+ SmileId_androidVersion=10.4.4-SNAPSHOT
7
7
  SmileId_kotlinCompilerExtensionVersion=1.5.11
@@ -1,8 +1,10 @@
1
1
  package com.smileidentity.react
2
2
 
3
+ import androidx.compose.animation.core.rememberTransition
3
4
  import com.facebook.react.bridge.ReadableMap
4
5
  import com.smileidentity.models.AuthenticationRequest
5
6
  import com.smileidentity.models.Config
7
+ import com.smileidentity.models.ConsentInformation
6
8
  import com.smileidentity.models.EnhancedKycRequest
7
9
  import com.smileidentity.models.IdInfo
8
10
  import com.smileidentity.models.ImageType
@@ -14,6 +16,7 @@ import com.smileidentity.models.ProductsConfigRequest
14
16
  import com.smileidentity.models.UploadImageInfo
15
17
  import com.smileidentity.models.UploadRequest
16
18
  import com.smileidentity.react.utils.getBoolOrDefault
19
+ import com.smileidentity.react.utils.getCurrentIsoTimestamp
17
20
  import com.smileidentity.react.utils.getIntOrDefault
18
21
  import com.smileidentity.react.utils.getMapOrDefault
19
22
  import com.smileidentity.react.utils.getStringOrDefault
@@ -23,11 +26,11 @@ import com.smileidentity.util.randomUserId
23
26
  import java.io.File
24
27
 
25
28
  fun ReadableMap.toConfig(): Config {
26
- return Config(
29
+ return Config(
27
30
  partnerId = getStringOrDefault("partnerId") ?: run {
28
31
  throw IllegalArgumentException("partnerId is required")
29
32
  },
30
- authToken = getStringOrDefault("authToken") ?: run {
33
+ authToken = getStringOrDefault("authToken") ?: run {
31
34
  throw IllegalArgumentException("authToken is required")
32
35
  },
33
36
  prodLambdaUrl = getStringOrDefault("prodLambdaUrl") ?: run {
@@ -149,6 +152,20 @@ fun ReadableMap.toEnhancedKycRequest(): EnhancedKycRequest {
149
152
  signature = getStringOrDefault("signature") ?: run {
150
153
  throw IllegalArgumentException("signature is required")
151
154
  },
155
+ consentInformation = getMapOrDefault("consentInformation", null)?.toConsentInfo() ?: run {
156
+ throw IllegalArgumentException("consentInformation is required")
157
+ },
158
+ )
159
+ }
160
+
161
+ fun ReadableMap.toConsentInfo(): ConsentInformation {
162
+ return ConsentInformation(
163
+ consentGrantedDate = getStringOrDefault("consentGrantedDate", null) ?: run {
164
+ getCurrentIsoTimestamp()
165
+ },
166
+ personalDetailsConsentGranted = getBoolOrDefault("personalDetailsConsentGranted", false),
167
+ contactInfoConsentGranted = getBoolOrDefault("contactInfoConsentGranted", false),
168
+ documentInfoConsentGranted = getBoolOrDefault("contactInfoConsentGranted", false)
152
169
  )
153
170
  }
154
171
 
@@ -0,0 +1,56 @@
1
+ package com.smileidentity.react.fragments
2
+
3
+ import android.os.Bundle
4
+ import android.view.LayoutInflater
5
+ import android.view.View
6
+ import android.view.ViewGroup
7
+ import androidx.fragment.app.Fragment
8
+ import com.facebook.react.bridge.ReactContext
9
+ import com.facebook.react.bridge.ReadableMap
10
+ import com.facebook.react.bridge.WritableMap
11
+ import com.facebook.react.modules.core.DeviceEventManagerModule
12
+ import com.smileidentity.react.views.SmileIDView
13
+ import com.smileidentity.react.views.SmileViewListener
14
+
15
+
16
+ class SmileCaptureFragment : Fragment(), SmileViewListener {
17
+ lateinit var smileIdView: SmileIDView
18
+ private var args: ReadableMap? = null
19
+ private var reactContext: ReactContext? = null
20
+
21
+ override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
22
+ super.onCreateView(inflater, container, savedInstanceState)
23
+ return smileIdView
24
+ }
25
+
26
+ fun setSmileIDView(smileIDView: SmileIDView) {
27
+ smileIdView = smileIDView
28
+ smileIdView.smileViewListener = this
29
+ }
30
+
31
+ fun setReactContext(reactContext: ReactContext) {
32
+ this.reactContext = reactContext
33
+ }
34
+
35
+ fun updateViewWithParams(params: ReadableMap?) {
36
+ args = params
37
+ // Only update if view is created
38
+ if (view != null) {
39
+ params?.let {
40
+ smileIdView.renderContent()
41
+ }
42
+ }
43
+ }
44
+
45
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
46
+ super.onViewCreated(view, savedInstanceState)
47
+ args?.let {
48
+ smileIdView.renderContent()
49
+ }
50
+ }
51
+
52
+ override fun emitSuccess(map: WritableMap) {
53
+ reactContext?.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
54
+ ?.emit("onSmileResult", map)
55
+ }
56
+ }
@@ -12,6 +12,10 @@ import kotlinx.collections.immutable.persistentMapOf
12
12
  import kotlinx.collections.immutable.toImmutableMap
13
13
  import kotlinx.collections.immutable.toPersistentMap
14
14
  import timber.log.Timber
15
+ import java.text.SimpleDateFormat
16
+ import java.util.Date
17
+ import java.util.Locale
18
+ import java.util.TimeZone
15
19
 
16
20
  fun ReadableMap.toMap(): Map<String, String> {
17
21
  val map = mutableMapOf<String, String>()
@@ -79,3 +83,15 @@ fun ReadableMap.getImmutableMapOrDefault(
79
83
  defaultValue
80
84
  }
81
85
  }
86
+
87
+ /**
88
+ * Converts current time to ISO8601 string with milliseconds in UTC
89
+ * Format: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
90
+ */
91
+ internal fun getCurrentIsoTimestamp(): String {
92
+ val pattern = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
93
+ val sdf = SimpleDateFormat(pattern, Locale.US)
94
+ sdf.timeZone = TimeZone.getTimeZone("UTC")
95
+ return sdf.format(Date())
96
+ }
97
+
@@ -0,0 +1,130 @@
1
+ package com.smileidentity.react.viewmanagers
2
+
3
+ import android.view.Choreographer
4
+ import android.view.View
5
+ import android.view.View.MeasureSpec
6
+ import android.view.ViewGroup
7
+ import android.widget.FrameLayout
8
+ import androidx.fragment.app.FragmentManager
9
+ import com.facebook.react.ReactActivity
10
+ import com.facebook.react.bridge.ReactApplicationContext
11
+ import com.facebook.react.bridge.ReadableArray
12
+ import com.facebook.react.bridge.ReadableMap
13
+ import com.facebook.react.uimanager.SimpleViewManager
14
+ import com.facebook.react.uimanager.ThemedReactContext
15
+ import com.smileidentity.react.fragments.SmileCaptureFragment
16
+ import com.smileidentity.react.views.SmileIDView
17
+
18
+ abstract class BaseSmileIDViewManager<T : SmileIDView>(
19
+ private val reactApplicationContext: ReactApplicationContext
20
+ ) : SimpleViewManager<FrameLayout>() {
21
+ private var smileCaptureFragment: SmileCaptureFragment? = null
22
+ protected var smileIDView: T? = null
23
+
24
+ override fun getExportedCustomBubblingEventTypeConstants(): Map<String, Any> {
25
+ return mapOf(
26
+ "onSmileResult" to mapOf(
27
+ "phasedRegistrationNames" to mapOf(
28
+ "bubbled" to "onResult"
29
+ )
30
+ )
31
+ )
32
+ }
33
+
34
+ private fun createFragment(
35
+ root: FrameLayout,
36
+ reactNativeViewId: Int,
37
+ ) {
38
+ val parentView = root.findViewById<ViewGroup>(reactNativeViewId)
39
+ setupLayout(parentView)
40
+
41
+ // Clean up existing view and fragment
42
+ smileIDView?.let { existingView ->
43
+ (existingView.parent as? ViewGroup)?.removeView(existingView)
44
+ }
45
+ smileCaptureFragment?.let { existingFragment ->
46
+ val activity = reactApplicationContext.currentActivity as ReactActivity
47
+ val manager = activity.supportFragmentManager
48
+ manager.beginTransaction().remove(existingFragment).commit()
49
+ manager.executePendingTransactions()
50
+ }
51
+
52
+ // Create new instances
53
+ smileIDView = createSmileView()
54
+ smileCaptureFragment = SmileCaptureFragment()
55
+ smileCaptureFragment?.setReactContext(reactApplicationContext)
56
+ smileIDView?.let { view ->
57
+ (view.parent as? ViewGroup)?.removeView(view) // Ensure view is detached
58
+ smileCaptureFragment?.setSmileIDView(view)
59
+ }
60
+
61
+ // Add new fragment
62
+ smileCaptureFragment?.let {
63
+ val activity = reactApplicationContext.currentActivity as ReactActivity
64
+ val manager = activity.supportFragmentManager
65
+ manager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)
66
+ manager.beginTransaction()
67
+ .replace(reactNativeViewId, it, reactNativeViewId.toString())
68
+ .commit()
69
+ }
70
+ }
71
+
72
+ abstract fun createSmileView(): T
73
+ abstract fun applyArgs(view: T, args: ReadableMap?)
74
+
75
+ private fun setupLayout(view: View) {
76
+ Choreographer.getInstance().postFrameCallback(object : Choreographer.FrameCallback {
77
+ override fun doFrame(frameTimeNanos: Long) {
78
+ manuallyLayoutChildren(view)
79
+ view.viewTreeObserver.dispatchOnGlobalLayout()
80
+ Choreographer.getInstance().postFrameCallback(this)
81
+ }
82
+ })
83
+ }
84
+
85
+ private fun manuallyLayoutChildren(view: View) {
86
+ val width = view.measuredWidth
87
+ val height = view.measuredHeight
88
+ view.measure(
89
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
90
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
91
+ )
92
+ view.layout(0, 0, width, height)
93
+ }
94
+
95
+ override fun createViewInstance(p0: ThemedReactContext): FrameLayout {
96
+ return FrameLayout(p0)
97
+ }
98
+
99
+ override fun getCommandsMap(): Map<String, Int> {
100
+ return mapOf("setParams" to COMMAND_SET_PARAMS, "create" to COMMAND_CREATE)
101
+ }
102
+
103
+ override fun receiveCommand(
104
+ view: FrameLayout,
105
+ commandId: String?,
106
+ args: ReadableArray?
107
+ ) {
108
+ super.receiveCommand(view, commandId, args)
109
+ when (commandId?.toInt()) {
110
+ COMMAND_CREATE -> {
111
+ val reactNativeViewId = requireNotNull(args).getInt(0)
112
+ createFragment(view, reactNativeViewId)
113
+ }
114
+
115
+ COMMAND_SET_PARAMS -> {
116
+ val params = args?.getMap(1)
117
+ smileIDView?.let { view ->
118
+ applyArgs(view, params)
119
+ // Update the fragment with new params
120
+ smileCaptureFragment?.updateViewWithParams(params)
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ companion object {
127
+ const val COMMAND_SET_PARAMS = 1
128
+ const val COMMAND_CREATE = 2
129
+ }
130
+ }
@@ -1,70 +1,46 @@
1
1
  package com.smileidentity.react.viewmanagers
2
2
 
3
3
  import com.facebook.react.bridge.ReactApplicationContext
4
- import com.facebook.react.bridge.ReadableArray
4
+ import com.facebook.react.bridge.ReadableMap
5
5
  import com.facebook.react.module.annotations.ReactModule
6
- import com.facebook.react.uimanager.SimpleViewManager
7
- import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.smileidentity.react.toConsentInfo
8
7
  import com.smileidentity.react.toIdInfo
9
8
  import com.smileidentity.react.utils.getBoolOrDefault
10
9
  import com.smileidentity.react.utils.getImmutableMapOrDefault
10
+ import com.smileidentity.react.utils.getMapOrDefault
11
11
  import com.smileidentity.react.utils.getStringOrDefault
12
12
  import com.smileidentity.react.views.SmileIDBiometricKYCView
13
13
 
14
14
  @ReactModule(name = SmileIDBiometricKYCViewManager.NAME)
15
15
  class SmileIDBiometricKYCViewManager(
16
16
  private val reactApplicationContext: ReactApplicationContext
17
- ) : SimpleViewManager<SmileIDBiometricKYCView>() {
17
+ ) : BaseSmileIDViewManager<SmileIDBiometricKYCView>(reactApplicationContext) {
18
18
 
19
19
  override fun getName(): String = NAME
20
20
 
21
- override fun getExportedCustomBubblingEventTypeConstants(): Map<String, Any> {
22
- return mapOf(
23
- "onSmileResult" to mapOf(
24
- "phasedRegistrationNames" to mapOf(
25
- "bubbled" to "onResult"
26
- )
27
- )
28
- )
29
- }
30
-
31
- override fun getCommandsMap(): Map<String, Int> {
32
- return mapOf("setParams" to COMMAND_SET_PARAMS)
21
+ override fun createSmileView(): SmileIDBiometricKYCView {
22
+ return SmileIDBiometricKYCView(reactApplicationContext)
33
23
  }
34
24
 
35
- override fun receiveCommand(
36
- view: SmileIDBiometricKYCView,
37
- commandId: String?,
38
- args: ReadableArray?
39
- ) {
40
- super.receiveCommand(view, commandId, args)
41
- when (commandId?.toInt()) {
42
- COMMAND_SET_PARAMS -> {
43
- // Extract params from args and apply to view
44
- val params = args?.getMap(0)
45
- params?.let {
46
- val idInfoMap = params.getMap("idInfo")
47
- ?: return view.emitFailure(IllegalArgumentException("idInfo is required to run Biometric KYC"))
48
- val idInfo = idInfoMap.toIdInfo()
49
- ?: return view.emitFailure(IllegalArgumentException("idInfo is required to run Biometric KYC"))
50
- view.extraPartnerParams = params.getImmutableMapOrDefault("extraPartnerParams")
51
- view.userId = params.getStringOrDefault("userId")
52
- view.jobId = params.getStringOrDefault("jobId")
53
- view.idInfo = idInfo
54
- view.allowAgentMode = params.getBoolOrDefault("allowAgentMode", false)
55
- view.showAttribution = params.getBoolOrDefault("showAttribution", true)
56
- view.showInstructions = params.getBoolOrDefault("showInstructions", true)
57
- view.allowNewEnroll = params.getBoolOrDefault("allowNewEnroll", false)
58
- view.renderContent()
59
- }
60
- }
25
+ override fun applyArgs(view: SmileIDBiometricKYCView, args: ReadableMap?) {
26
+ args?.let {
27
+ val idInfoMap = it.getMap("idInfo")
28
+ ?: return view.emitFailure(IllegalArgumentException("idInfo is required to run Biometric KYC"))
29
+ val consentInformationMap = it.getMap("consentInformation")
30
+ ?: return view.emitFailure(IllegalArgumentException("consentInformation is required to run Biometric KYC"))
31
+ val idInfo = idInfoMap.toIdInfo()
32
+ view.consentInformation = consentInformationMap.toConsentInfo()
33
+ view.extraPartnerParams = it.getImmutableMapOrDefault("extraPartnerParams")
34
+ view.userId = it.getStringOrDefault("userId")
35
+ view.jobId = it.getStringOrDefault("jobId")
36
+ view.idInfo = idInfo
37
+ view.allowAgentMode = it.getBoolOrDefault("allowAgentMode", false)
38
+ view.showAttribution = it.getBoolOrDefault("showAttribution", true)
39
+ view.showInstructions = it.getBoolOrDefault("showInstructions", true)
40
+ view.allowNewEnroll = it.getBoolOrDefault("allowNewEnroll", false)
61
41
  }
62
42
  }
63
43
 
64
- override fun createViewInstance(p0: ThemedReactContext): SmileIDBiometricKYCView {
65
- return SmileIDBiometricKYCView(reactApplicationContext)
66
- }
67
-
68
44
  companion object {
69
45
  const val NAME = "SmileIDBiometricKYCView"
70
46
  const val COMMAND_SET_PARAMS = 6
@@ -2,6 +2,7 @@ package com.smileidentity.react.viewmanagers
2
2
 
3
3
  import com.facebook.react.bridge.ReactApplicationContext
4
4
  import com.facebook.react.bridge.ReadableArray
5
+ import com.facebook.react.bridge.ReadableMap
5
6
  import com.facebook.react.module.annotations.ReactModule
6
7
  import com.facebook.react.uimanager.SimpleViewManager
7
8
  import com.facebook.react.uimanager.ThemedReactContext
@@ -9,72 +10,46 @@ import com.smileidentity.react.utils.getBoolOrDefault
9
10
  import com.smileidentity.react.utils.getImmutableMapOrDefault
10
11
  import com.smileidentity.react.utils.getStringOrDefault
11
12
  import com.smileidentity.react.views.SmileIDConsentView
13
+ import com.smileidentity.react.views.SmileIDDocumentCaptureView
12
14
 
13
15
  @ReactModule(name = SmileIDConsentViewManager.NAME)
14
16
  class SmileIDConsentViewManager(
15
17
  private val reactApplicationContext: ReactApplicationContext
16
- ) : SimpleViewManager<SmileIDConsentView>() {
18
+ ) : BaseSmileIDViewManager<SmileIDConsentView>(reactApplicationContext) {
17
19
 
18
20
  override fun getName(): String = NAME
19
21
 
20
- override fun getExportedCustomBubblingEventTypeConstants(): Map<String, Any> {
21
- return mapOf(
22
- "onSmileResult" to mapOf(
23
- "phasedRegistrationNames" to mapOf(
24
- "bubbled" to "onResult"
25
- )
26
- )
27
- )
28
- }
29
-
30
- override fun getCommandsMap(): Map<String, Int> {
31
- return mapOf("setParams" to COMMAND_SET_PARAMS)
22
+ override fun createSmileView(): SmileIDConsentView {
23
+ return SmileIDConsentView(reactApplicationContext)
32
24
  }
33
25
 
34
- override fun receiveCommand(
35
- view: SmileIDConsentView,
36
- commandId: String?,
37
- args: ReadableArray?
38
- ) {
39
- super.receiveCommand(view, commandId, args)
40
- when (commandId?.toInt()) {
41
- COMMAND_SET_PARAMS -> {
42
- // Extract params from args and apply to view
43
- val params = args?.getMap(0)
44
- params?.let {
45
-
46
- val partnerName = params.getString("partnerName")
47
- ?: return view.emitFailure(IllegalArgumentException("partnerName is required to show Consent Screen"))
48
- val partnerPrivacyPolicy = params.getString("partnerPrivacyPolicy") ?: return view.emitFailure(
49
- IllegalArgumentException("partnerPrivacyPolicy is required to show Consent Screen")
50
- )
51
- val logoResName = params.getString("partnerIcon")
52
- ?: return view.emitFailure(IllegalArgumentException("partnerIcon is required to show Consent Screen"))
53
- val productName = params.getString("productName")
54
- ?: return view.emitFailure(IllegalArgumentException("productName is required to show Consent Screen"))
26
+ override fun applyArgs(view: SmileIDConsentView, args: ReadableMap?) {
27
+ args?.let {
55
28
 
56
- view.extraPartnerParams = params.getImmutableMapOrDefault("extraPartnerParams")
57
- view.userId = params.getStringOrDefault("userId")
58
- view.jobId = params.getStringOrDefault("jobId")
59
- view.partnerName = partnerName
60
- view.partnerPrivacyPolicy = partnerPrivacyPolicy
61
- view.logoResName = logoResName
62
- view.productName = productName
63
- view.allowAgentMode = params.getBoolOrDefault("allowAgentMode", false)
64
- view.showAttribution = params.getBoolOrDefault("showAttribution", true)
65
- view.showInstructions = params.getBoolOrDefault("showInstructions", true)
66
- view.renderContent()
67
- }
68
- }
29
+ val partnerName = it.getString("partnerName")
30
+ ?: return view.emitFailure(IllegalArgumentException("partnerName is required to show Consent Screen"))
31
+ val partnerPrivacyPolicy = it.getString("partnerPrivacyPolicy") ?: return view.emitFailure(
32
+ IllegalArgumentException("partnerPrivacyPolicy is required to show Consent Screen")
33
+ )
34
+ val logoResName = it.getString("partnerIcon")
35
+ ?: return view.emitFailure(IllegalArgumentException("partnerIcon is required to show Consent Screen"))
36
+ val productName = it.getString("productName")
37
+ ?: return view.emitFailure(IllegalArgumentException("productName is required to show Consent Screen"))
38
+
39
+ view.extraPartnerParams = it.getImmutableMapOrDefault("extraPartnerParams")
40
+ view.userId = it.getStringOrDefault("userId")
41
+ view.jobId = it.getStringOrDefault("jobId")
42
+ view.partnerName = partnerName
43
+ view.partnerPrivacyPolicy = partnerPrivacyPolicy
44
+ view.logoResName = logoResName
45
+ view.productName = productName
46
+ view.allowAgentMode = it.getBoolOrDefault("allowAgentMode", false)
47
+ view.showAttribution = it.getBoolOrDefault("showAttribution", true)
48
+ view.showInstructions = it.getBoolOrDefault("showInstructions", true)
69
49
  }
70
50
  }
71
51
 
72
- override fun createViewInstance(p0: ThemedReactContext): SmileIDConsentView {
73
- return SmileIDConsentView(reactApplicationContext)
74
- }
75
-
76
52
  companion object {
77
53
  const val NAME = "SmileIDConsentView"
78
- const val COMMAND_SET_PARAMS = 5
79
54
  }
80
55
  }
@@ -2,64 +2,39 @@ package com.smileidentity.react.viewmanagers
2
2
 
3
3
  import com.facebook.react.bridge.ReactApplicationContext
4
4
  import com.facebook.react.bridge.ReadableArray
5
+ import com.facebook.react.bridge.ReadableMap
5
6
  import com.facebook.react.module.annotations.ReactModule
6
7
  import com.facebook.react.uimanager.SimpleViewManager
7
8
  import com.facebook.react.uimanager.ThemedReactContext
8
9
  import com.smileidentity.react.utils.getBoolOrDefault
9
10
  import com.smileidentity.react.utils.getStringOrDefault
10
11
  import com.smileidentity.react.views.SmileIDDocumentCaptureView
12
+ import com.smileidentity.react.views.SmileIDDocumentVerificationView
11
13
 
12
14
  @ReactModule(name = SmileIDDocumentCaptureViewManager.NAME)
13
15
  class SmileIDDocumentCaptureViewManager(
14
16
  private val reactApplicationContext: ReactApplicationContext
15
- ) : SimpleViewManager<SmileIDDocumentCaptureView>() {
17
+ ) : BaseSmileIDViewManager<SmileIDDocumentCaptureView>(reactApplicationContext) {
16
18
  override fun getName(): String = NAME
17
19
 
18
- override fun getExportedCustomBubblingEventTypeConstants(): Map<String, Any> {
19
- return mapOf(
20
- "onSmileResult" to mapOf(
21
- "phasedRegistrationNames" to mapOf(
22
- "bubbled" to "onResult"
23
- )
24
- )
25
- )
26
- }
27
-
28
- override fun getCommandsMap(): Map<String, Int> {
29
- return mapOf("setParams" to COMMAND_SET_PARAMS)
20
+ override fun createSmileView(): SmileIDDocumentCaptureView {
21
+ return SmileIDDocumentCaptureView(reactApplicationContext)
30
22
  }
31
23
 
32
- override fun receiveCommand(
33
- view: SmileIDDocumentCaptureView,
34
- commandId: String?,
35
- args: ReadableArray?
36
- ) {
37
- super.receiveCommand(view, commandId, args)
38
- when (commandId?.toInt()) {
39
- COMMAND_SET_PARAMS -> {
40
- // Extract params from args and apply to view
41
- val params = args?.getMap(0)
42
- params?.let {
43
- view.userId = params.getStringOrDefault("userId")
44
- view.jobId = params.getStringOrDefault("jobId")
45
- view.allowAgentMode = params.getBoolOrDefault("allowAgentMode", true)
46
- view.showAttribution = params.getBoolOrDefault("showAttribution", true)
47
- view.showInstructions = params.getBoolOrDefault("showInstructions", true)
48
- view.showConfirmation = params.getBoolOrDefault("showConfirmation", true)
49
- view.allowGalleryUpload = params.getBoolOrDefault("allowGalleryUpload", false)
50
- view.front = params.getBoolOrDefault("isDocumentFrontSide", true)
51
- view.renderContent()
52
- }
53
- }
24
+ override fun applyArgs(view: SmileIDDocumentCaptureView, args: ReadableMap?) {
25
+ args?.let {
26
+ view.userId = it.getStringOrDefault("userId")
27
+ view.jobId = it.getStringOrDefault("jobId")
28
+ view.allowAgentMode = it.getBoolOrDefault("allowAgentMode", true)
29
+ view.showAttribution = it.getBoolOrDefault("showAttribution", true)
30
+ view.showInstructions = it.getBoolOrDefault("showInstructions", true)
31
+ view.showConfirmation = it.getBoolOrDefault("showConfirmation", true)
32
+ view.allowGalleryUpload = it.getBoolOrDefault("allowGalleryUpload", false)
33
+ view.front = it.getBoolOrDefault("isDocumentFrontSide", true)
54
34
  }
55
35
  }
56
36
 
57
- override fun createViewInstance(p0: ThemedReactContext): SmileIDDocumentCaptureView {
58
- return SmileIDDocumentCaptureView(reactApplicationContext)
59
- }
60
-
61
37
  companion object {
62
38
  const val NAME = "SmileIDDocumentCaptureView"
63
- const val COMMAND_SET_PARAMS = 1
64
39
  }
65
40
  }