Skip to content

Commit ef05403

Browse files
authored
refactor: use enums for aligment use union for properties (#3)
* refactor: use enums for aligment use union for properties * fix(api): use RiveEvent union for TS side and UnifiedRiveEvent struct for native side
1 parent a4e973b commit ef05403

36 files changed

+830
-474
lines changed
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.margelo.nitro.rive
2+
3+
object EventPropertiesOutputExtensions {
4+
fun boolean(value: Boolean): EventPropertiesOutput =
5+
EventPropertiesOutput.First(value)
6+
7+
fun string(value: String): EventPropertiesOutput =
8+
EventPropertiesOutput.Second(value)
9+
10+
fun number(value: Double): EventPropertiesOutput =
11+
EventPropertiesOutput.Third(value)
12+
}

android/src/main/java/com/margelo/nitro/rive/HybridRiveView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ class HybridRiveView(val context: ThemedReactContext) : HybridRiveViewSpec() {
7272

7373
override fun pause() = executeOnUiThread { view.pause() }
7474

75-
override fun onEventListener(onEvent: (event: RiveEvent) -> Unit) =
75+
override fun onEventListener(onEvent: (event: UnifiedRiveEvent) -> Unit) =
7676
executeOnUiThread { view.addEventListener(onEvent) }
7777

7878
override fun removeEventListeners() = executeOnUiThread { view.removeEventListeners() }

android/src/main/java/com/rive/RiveReactNativeView.kt

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ import app.rive.runtime.kotlin.core.SMIInput
1515
import app.rive.runtime.kotlin.core.SMINumber
1616
import app.rive.runtime.kotlin.core.ViewModelInstance
1717
import com.margelo.nitro.core.AnyMap
18+
import com.margelo.nitro.rive.EventPropertiesOutput
19+
import com.margelo.nitro.rive.EventPropertiesOutputExtensions as EPO
1820
import com.margelo.nitro.rive.RiveEventType
19-
import com.margelo.nitro.rive.RiveEvent as RNEvent
21+
import com.margelo.nitro.rive.UnifiedRiveEvent as RNEvent
2022
import kotlinx.coroutines.CompletableDeferred
2123

2224
data class ViewConfiguration(
@@ -206,16 +208,16 @@ class RiveReactNativeView(context: ThemedReactContext) : FrameLayout(context) {
206208

207209
//region Internal
208210

209-
private fun convertEventProperties(properties: Map<String, Any>?): AnyMap? {
211+
private fun convertEventProperties(properties: Map<String, Any>?): Map<String, EventPropertiesOutput>? {
210212
if (properties == null) return null
211213

212-
val newMap = AnyMap()
214+
val newMap = HashMap<String, EventPropertiesOutput>()
213215

214216
properties.forEach { (key, value) ->
215217
when (value) {
216-
is String -> newMap.setString(key, value)
217-
is Number -> newMap.setDouble(key, value.toDouble())
218-
is Boolean -> newMap.setBoolean(key, value)
218+
is String -> newMap.set(key, EPO.string(value))
219+
is Number -> newMap.set(key, EPO.number(value.toDouble()))
220+
is Boolean -> newMap.set(key, EPO.boolean(value))
219221
}
220222
}
221223

example/src/pages/RiveEventsExample.tsx

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,12 @@ export default function EventsExample() {
6363
? 'General Event'
6464
: 'Open URL Event'}
6565
</Text>
66-
{lastEvent.url && <Text>URL: {lastEvent.url}</Text>}
67-
{lastEvent.target && <Text>Target: {lastEvent.target}</Text>}
66+
{lastEvent.type === RiveEventType.OpenUrl && lastEvent.url && (
67+
<Text>URL: {lastEvent.url}</Text>
68+
)}
69+
{lastEvent.type === RiveEventType.OpenUrl && lastEvent.target && (
70+
<Text>Target: {lastEvent.target}</Text>
71+
)}
6872
{lastEvent.properties &&
6973
Object.keys(lastEvent.properties).length > 0 && (
7074
<>
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import Foundation
2+
3+
extension EventPropertiesOutput {
4+
static func boolean(_ value: Bool) -> EventPropertiesOutput {
5+
return .first(value)
6+
}
7+
8+
static func string(_ value: String) -> EventPropertiesOutput {
9+
return .second(value)
10+
}
11+
12+
static func number(_ value: Double) -> EventPropertiesOutput {
13+
return .third(value)
14+
}
15+
}

ios/HybridRiveView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class HybridRiveView : HybridRiveViewSpec {
3939

4040
func pause() throws { try getRiveView().pause() }
4141

42-
func onEventListener(onEvent: @escaping (RiveEvent) -> Void) throws {
42+
func onEventListener(onEvent: @escaping (UnifiedRiveEvent) -> Void) throws {
4343
try getRiveView().addEventListener(onEvent)
4444
}
4545

ios/RiveReactNativeView.swift

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
1717
// MARK: Internal Properties
1818
private var riveView: RiveView?
1919
private var baseViewModel: RiveViewModel?
20-
private var eventListeners: [(RiveEvent) -> Void] = []
20+
private var eventListeners: [(UnifiedRiveEvent) -> Void] = []
2121
private var viewReadyContinuation: CheckedContinuation<Void, Never>?
2222
private var isViewReady = false
2323

@@ -68,7 +68,7 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
6868
baseViewModel?.pause()
6969
}
7070

71-
func addEventListener(_ onEvent: @escaping (RiveEvent) -> Void) {
71+
func addEventListener(_ onEvent: @escaping (UnifiedRiveEvent) -> Void) {
7272
eventListeners.append(onEvent)
7373
}
7474

@@ -160,7 +160,7 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
160160
}
161161

162162
@objc func onRiveEventReceived(onRiveEvent riveEvent: RiveRuntime.RiveEvent) {
163-
let eventType = RiveEvent(
163+
let eventType = UnifiedRiveEvent(
164164
name: riveEvent.name(),
165165
type: riveEvent is RiveRuntime.RiveOpenUrlEvent ? RiveEventType.openurl : RiveEventType.general,
166166
delay: Double(riveEvent.delay()),
@@ -174,18 +174,18 @@ class RiveReactNativeView: UIView, RiveStateMachineDelegate {
174174
}
175175
}
176176

177-
private func convertEventProperties(_ properties: Dictionary<String, Any>?) -> AnyMapHolder?{
177+
private func convertEventProperties(_ properties: Dictionary<String, Any>?) -> Dictionary<String, EventPropertiesOutput>?{
178178
guard let properties = properties else { return nil }
179179

180-
let newMap = AnyMapHolder()
180+
var newMap: Dictionary<String, EventPropertiesOutput> = [:]
181181

182182
for (key, value) in properties {
183183
if let string = value as? String {
184-
newMap.setString(key: key, value: string)
184+
newMap[key] = .string(string)
185185
} else if let number = value as? NSNumber {
186-
newMap.setDouble(key: key, value: number.doubleValue)
186+
newMap[key] = .number(number.doubleValue)
187187
} else if let boolean = value as? Bool {
188-
newMap.setBoolean(key: key, value: boolean)
188+
newMap[key] = .boolean(boolean)
189189
}
190190
}
191191

nitrogen/generated/android/c++/JEventPropertiesOutput.cpp

Lines changed: 30 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/android/c++/JEventPropertiesOutput.hpp

Lines changed: 83 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

nitrogen/generated/android/c++/JFunc_void_RiveEvent.hpp

Lines changed: 0 additions & 82 deletions
This file was deleted.

0 commit comments

Comments
 (0)