@@ -34,6 +34,13 @@ class HybridViewModel: HybridViewModelSpec {
3434 }
3535 }
3636
37+ func getPropertiesAsync( ) throws -> Promise < [ ViewModelPropertyInfo ] > {
38+ return Promise . async {
39+ let props = try await self . file. getProperties ( of: self . vmName)
40+ return props. map { ViewModelPropertyInfo ( name: $0. name, type: mapPropertyType ( $0. type) ) }
41+ }
42+ }
43+
3744 func getPropertyCountAsync( ) throws -> Promise < Double > {
3845 return Promise . async {
3946 Double ( try await self . file. getProperties ( of: self . vmName) . count)
@@ -48,7 +55,7 @@ class HybridViewModel: HybridViewModelSpec {
4855
4956 private func createDefaultInstanceImpl( ) async throws -> ( any HybridViewModelInstanceSpec ) ? {
5057 let vmi = try await self . file. createViewModelInstance ( . viewModelDefault( from: . name( self . vmName) ) )
51- return HybridViewModelInstance ( viewModelInstance: vmi, worker: self . worker)
58+ return HybridViewModelInstance ( viewModelInstance: vmi, worker: self . worker, file : self . file , vmName : self . vmName )
5259 }
5360
5461 private func createInstanceByIndexImpl( index: Double ) async throws -> ( any HybridViewModelInstanceSpec ) ? {
@@ -57,7 +64,7 @@ class HybridViewModel: HybridViewModelSpec {
5764 guard idx >= 0 && idx < names. count else { return nil }
5865 let name = names [ idx]
5966 let vmi = try await self . file. createViewModelInstance ( . name( name, from: . name( self . vmName) ) )
60- return HybridViewModelInstance ( viewModelInstance: vmi, worker: self . worker, instanceName: name)
67+ return HybridViewModelInstance ( viewModelInstance: vmi, worker: self . worker, instanceName: name, file : self . file , vmName : self . vmName )
6168 }
6269
6370 // Deprecated: Use createInstanceByNameAsync instead
@@ -68,7 +75,7 @@ class HybridViewModel: HybridViewModelSpec {
6875
6976 private func createInstanceByNameImpl( name: String ) async throws -> ( any HybridViewModelInstanceSpec ) ? {
7077 let vmi = try await self . file. createViewModelInstance ( . name( name, from: . name( self . vmName) ) )
71- return HybridViewModelInstance ( viewModelInstance: vmi, worker: self . worker, instanceName: name)
78+ return HybridViewModelInstance ( viewModelInstance: vmi, worker: self . worker, instanceName: name, file : self . file , vmName : self . vmName )
7279 }
7380
7481 // Deprecated: Use createInstanceByNameAsync instead
@@ -93,7 +100,7 @@ class HybridViewModel: HybridViewModelSpec {
93100
94101 private func createInstanceImpl( ) async throws -> ( any HybridViewModelInstanceSpec ) ? {
95102 let vmi = try await self . file. createViewModelInstance ( . blank( from: . name( self . vmName) ) )
96- return HybridViewModelInstance ( viewModelInstance: vmi, worker: self . worker)
103+ return HybridViewModelInstance ( viewModelInstance: vmi, worker: self . worker, file : self . file , vmName : self . vmName )
97104 }
98105
99106 // Deprecated: Use createBlankInstanceAsync instead
@@ -106,3 +113,24 @@ class HybridViewModel: HybridViewModelSpec {
106113 return Promise . async { try await self . createInstanceImpl ( ) }
107114 }
108115}
116+
117+ func mapPropertyType( _ type: RiveRuntime . ViewModelProperty . DataType ) -> ViewModelPropertyType {
118+ switch type {
119+ case . none: return . none
120+ case . string: return . string
121+ case . number: return . number
122+ case . boolean: return . boolean
123+ case . color: return . color
124+ case . list: return . list
125+ case . enum: return . enum
126+ case . trigger: return . trigger
127+ case . viewModel: return . viewmodel
128+ case . integer: return . integer
129+ case . symbolListIndex: return . symbollistindex
130+ case . assetImage: return . assetimage
131+ case . artboard: return . artboard
132+ case . input: return . input
133+ case . any: return . any
134+ @unknown default : return . none
135+ }
136+ }
0 commit comments