@kingstinct/react-native-healthkit 9.0.7 → 9.0.9
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.
- package/ios/CategoryTypeModule.swift +18 -21
- package/ios/CorrelationTypeModule.swift +18 -18
- package/ios/HeartbeatSeriesModule.swift +32 -32
- package/ios/QuantityTypeModule.swift +71 -59
- package/ios/Serializers.swift +12 -16
- package/ios/StateOfMindModule.swift +17 -17
- package/ios/WorkoutsModule.swift +59 -110
- package/lib/commonjs/healthkit.js +1 -1
- package/lib/module/healthkit.js +1 -1
- package/lib/typescript/healthkit.d.ts +3 -2
- package/lib/typescript/specs/WorkoutsModule.nitro.d.ts +3 -0
- package/nitrogen/generated/ios/ReactNativeHealthkit-Swift-Cxx-Bridge.cpp +3 -44
- package/nitrogen/generated/ios/ReactNativeHealthkit-Swift-Cxx-Bridge.hpp +24 -124
- package/nitrogen/generated/ios/ReactNativeHealthkit-Swift-Cxx-Umbrella.hpp +0 -14
- package/package.json +2 -2
- package/src/healthkit.ts +2 -0
- package/src/specs/WorkoutsModule.nitro.ts +3 -0
- package/ios/WorkoutSessionModule.swift +0 -182
- package/lib/commonjs/specs/WorkoutSessionModule.nitro.js +0 -19
- package/lib/module/specs/WorkoutSessionModule.nitro.js +0 -16
- package/lib/typescript/specs/WorkoutSessionModule.nitro.d.ts +0 -47
- package/nitrogen/generated/ios/c++/HybridWorkoutSessionModuleSpecSwift.cpp +0 -11
- package/nitrogen/generated/ios/c++/HybridWorkoutSessionModuleSpecSwift.hpp +0 -107
- package/nitrogen/generated/ios/swift/Func_void_WorkoutEventType.swift +0 -46
- package/nitrogen/generated/ios/swift/Func_void_WorkoutSessionState_WorkoutSessionState_std__chrono__system_clock__time_point.swift +0 -46
- package/nitrogen/generated/ios/swift/Func_void_std__vector_RemoteSessionSharableData_.swift +0 -46
- package/nitrogen/generated/ios/swift/HybridWorkoutSessionModuleSpec.swift +0 -49
- package/nitrogen/generated/ios/swift/HybridWorkoutSessionModuleSpec_cxx.swift +0 -133
- package/nitrogen/generated/ios/swift/RemoteSessionSharableData.swift +0 -46
- package/nitrogen/generated/ios/swift/WorkoutSessionMirroringStartHandlerOptions.swift +0 -118
- package/nitrogen/generated/ios/swift/WorkoutSessionState.swift +0 -56
- package/nitrogen/generated/shared/c++/HybridWorkoutSessionModuleSpec.cpp +0 -22
- package/nitrogen/generated/shared/c++/HybridWorkoutSessionModuleSpec.hpp +0 -68
- package/nitrogen/generated/shared/c++/RemoteSessionSharableData.hpp +0 -75
- package/nitrogen/generated/shared/c++/WorkoutSessionMirroringStartHandlerOptions.hpp +0 -92
- package/nitrogen/generated/shared/c++/WorkoutSessionState.hpp +0 -68
- package/src/specs/WorkoutSessionModule.nitro.ts +0 -71
package/ios/WorkoutsModule.swift
CHANGED
|
@@ -6,55 +6,6 @@ import NitroModules
|
|
|
6
6
|
import WorkoutKit
|
|
7
7
|
#endif
|
|
8
8
|
|
|
9
|
-
/*func tryParseWeatherCondition(_ weatherCondition: Int?) -> WeatherCondition? {
|
|
10
|
-
if let weatherCondition = weatherCondition {
|
|
11
|
-
return WeatherCondition.init(rawValue: Int32(weatherCondition))
|
|
12
|
-
}
|
|
13
|
-
return nil
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
func deserializeWorkoutMetadata(_ metadata: WorkoutMetadata?) -> [String: Any]? {
|
|
17
|
-
if let metadata = metadata {
|
|
18
|
-
var dict = metadata.allMetadata != nil
|
|
19
|
-
? anyMapToDictionary(metadata.allMetadata!)
|
|
20
|
-
: Dictionary<String, Any>()
|
|
21
|
-
// todo (important): hmm, not sure about the typed props here
|
|
22
|
-
// dict[""]
|
|
23
|
-
return dict
|
|
24
|
-
}
|
|
25
|
-
return nil
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
func serializeWorkoutMetadata(_ metadata: [String: Any]?) -> WorkoutMetadata? {
|
|
29
|
-
if let metadata = metadata {
|
|
30
|
-
return WorkoutMetadata(
|
|
31
|
-
// todo: figure out conversions here
|
|
32
|
-
HKWeatherCondition: tryParseWeatherCondition(metadata["HKWeatherCondition"] as? Int),
|
|
33
|
-
HKWeatherHumidity: serializeUnknownQuantityTyped(quantity: metadata["HKWeatherHumidity"] as? HKQuantity),
|
|
34
|
-
HKWeatherTemperature: serializeUnknownQuantityTyped(quantity: metadata["HKWeatherTemperature"] as? HKQuantity),
|
|
35
|
-
HKAverageMETs: serializeUnknownQuantityTyped(quantity: metadata["HKAverageMETs"] as? HKQuantity),
|
|
36
|
-
HKElevationAscended: serializeUnknownQuantityTyped(quantity: metadata["HKElevationAscended"] as? HKQuantity),
|
|
37
|
-
HKIndoorWorkout: metadata["HKIndoorWorkout"] as? Bool,
|
|
38
|
-
HKExternalUUID: metadata["HKExternalUUID"] as? String,
|
|
39
|
-
HKTimeZone: metadata["HKTimeZone"] as? String,
|
|
40
|
-
HKWasUserEntered: metadata["HKWasUserEntered"] as? Bool,
|
|
41
|
-
HKDeviceSerialNumber: metadata["HKDeviceSerialNumber"] as? String,
|
|
42
|
-
HKUDIDeviceIdentifier: metadata["HKUDIDeviceIdentifier"] as? String,
|
|
43
|
-
HKUDIProductionIdentifier: metadata["HKUDIProductionIdentifier"] as? String,
|
|
44
|
-
HKDigitalSignature: metadata["HKDigitalSignature"] as? String,
|
|
45
|
-
HKDeviceName: metadata["HKDeviceName"] as? String,
|
|
46
|
-
HKDeviceManufacturerName: metadata["HKDeviceManufacturerName"] as? String,
|
|
47
|
-
HKSyncIdentifier: metadata["HKSyncIdentifier"] as? String,
|
|
48
|
-
HKSyncVersion: metadata["HKSyncVersion"] as? Double,
|
|
49
|
-
HKWasTakenInLab: metadata["HKWasTakenInLab"] as? Bool,
|
|
50
|
-
HKReferenceRangeLowerLimit: metadata["HKReferenceRangeLowerLimit"] as? Double,
|
|
51
|
-
HKReferenceRangeUpperLimit: metadata["HKReferenceRangeUpperLimit"] as? Double,
|
|
52
|
-
allMetadata: serializeAllMetadata(metadata)
|
|
53
|
-
)
|
|
54
|
-
}
|
|
55
|
-
return nil
|
|
56
|
-
}*/
|
|
57
|
-
|
|
58
9
|
func mapLocations(from locations: [LocationForSaving]) -> [CLLocation] {
|
|
59
10
|
return locations.compactMap { location in
|
|
60
11
|
let latitude = location.latitude
|
|
@@ -65,7 +16,7 @@ func mapLocations(from locations: [LocationForSaving]) -> [CLLocation] {
|
|
|
65
16
|
let course = location.course
|
|
66
17
|
let speed = location.speed
|
|
67
18
|
let timestamp = location.date
|
|
68
|
-
|
|
19
|
+
|
|
69
20
|
let clLocation = CLLocation(
|
|
70
21
|
coordinate: CLLocationCoordinate2D(
|
|
71
22
|
latitude: latitude,
|
|
@@ -76,24 +27,40 @@ func mapLocations(from locations: [LocationForSaving]) -> [CLLocation] {
|
|
|
76
27
|
verticalAccuracy: verticalAccuracy,
|
|
77
28
|
course: course,
|
|
78
29
|
speed: speed,
|
|
79
|
-
timestamp: timestamp
|
|
30
|
+
timestamp: timestamp
|
|
80
31
|
)
|
|
81
|
-
|
|
32
|
+
|
|
82
33
|
return clLocation
|
|
83
34
|
}
|
|
84
35
|
}
|
|
85
36
|
|
|
86
|
-
class WorkoutsModule
|
|
37
|
+
class WorkoutsModule: HybridWorkoutsModuleSpec {
|
|
38
|
+
func startWatchAppWithWorkoutConfiguration(workoutConfiguration: WorkoutConfiguration) throws -> Promise<Bool> {
|
|
39
|
+
let configuration = parseWorkoutConfiguration(workoutConfiguration)
|
|
40
|
+
|
|
41
|
+
return Promise.async {
|
|
42
|
+
try await withCheckedThrowingContinuation { continuation in
|
|
43
|
+
store.startWatchApp(with: configuration) { success, error in
|
|
44
|
+
if let error {
|
|
45
|
+
continuation.resume(throwing: RuntimeError.error(withMessage: error.localizedDescription))
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
continuation.resume(returning: success)
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
87
54
|
func queryWorkoutSamples(options: WorkoutQueryOptions) throws -> Promise<[HybridWorkoutProxySpec]> {
|
|
88
55
|
let predicate = try createPredicateForWorkout(filter: options.filter)
|
|
89
|
-
|
|
56
|
+
|
|
90
57
|
let limit = getQueryLimit(options.limit)
|
|
91
|
-
|
|
58
|
+
|
|
92
59
|
return Promise.async {
|
|
93
60
|
let energyUnit = try await getUnitToUse(unitOverride: options.energyUnit, quantityType: HKQuantityType(.activeEnergyBurned))
|
|
94
|
-
|
|
61
|
+
|
|
95
62
|
let distanceUnit = try await getUnitToUse(unitOverride: options.distanceUnit, quantityType: HKQuantityType(.distanceWalkingRunning))
|
|
96
|
-
|
|
63
|
+
|
|
97
64
|
return try await withCheckedThrowingContinuation { continuation in
|
|
98
65
|
let q = HKSampleQuery(
|
|
99
66
|
sampleType: .workoutType(),
|
|
@@ -104,11 +71,11 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
104
71
|
if let error = error {
|
|
105
72
|
return continuation.resume(throwing: error)
|
|
106
73
|
}
|
|
107
|
-
|
|
74
|
+
|
|
108
75
|
guard let samples = samples else {
|
|
109
76
|
return continuation.resume(throwing: RuntimeError.error(withMessage: "Empty response"))
|
|
110
77
|
}
|
|
111
|
-
|
|
78
|
+
|
|
112
79
|
let workoutProxies = samples.compactMap { s in
|
|
113
80
|
if let workout = s as? HKWorkout {
|
|
114
81
|
return WorkoutProxy.init(
|
|
@@ -119,15 +86,15 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
119
86
|
}
|
|
120
87
|
return nil
|
|
121
88
|
}
|
|
122
|
-
|
|
89
|
+
|
|
123
90
|
return continuation.resume(returning: workoutProxies)
|
|
124
91
|
}
|
|
125
|
-
|
|
92
|
+
|
|
126
93
|
store.execute(q)
|
|
127
94
|
}
|
|
128
95
|
}
|
|
129
96
|
}
|
|
130
|
-
|
|
97
|
+
|
|
131
98
|
func saveWorkoutSample(
|
|
132
99
|
workoutActivityType: WorkoutActivityType,
|
|
133
100
|
quantities: [QuantitySampleForSaving],
|
|
@@ -136,18 +103,18 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
136
103
|
totals: WorkoutTotals,
|
|
137
104
|
metadata: AnyMapHolder
|
|
138
105
|
) throws -> Promise<String> {
|
|
139
|
-
|
|
106
|
+
|
|
140
107
|
let type = try initializeWorkoutActivityType(UInt(workoutActivityType.rawValue))
|
|
141
|
-
|
|
108
|
+
|
|
142
109
|
// if start and end both exist, ensure that start date is before end date
|
|
143
110
|
if let startDate = startDate as Date?, let endDate = endDate as Date? {
|
|
144
111
|
if startDate > endDate {
|
|
145
112
|
throw RuntimeError.error(withMessage: "endDate must not be less than startDate")
|
|
146
113
|
}
|
|
147
114
|
}
|
|
148
|
-
|
|
115
|
+
|
|
149
116
|
let metadataDeserialized = anyMapToDictionary(metadata)
|
|
150
|
-
|
|
117
|
+
|
|
151
118
|
var totalEnergyBurned: HKQuantity?
|
|
152
119
|
var totalDistance: HKQuantity?
|
|
153
120
|
var totalSwimmingStrokeCount: HKQuantity?
|
|
@@ -161,23 +128,23 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
161
128
|
let quantityEnd = quantity.endDate
|
|
162
129
|
let unit = HKUnit.init(from: unitStr)
|
|
163
130
|
let quantity = HKQuantity.init(unit: unit, doubleValue: quantityVal)
|
|
164
|
-
|
|
131
|
+
|
|
165
132
|
if quantity.is(compatibleWith: HKUnit.kilocalorie()) {
|
|
166
133
|
totalEnergyBurned = quantity
|
|
167
134
|
}
|
|
168
|
-
|
|
135
|
+
|
|
169
136
|
if quantity.is(compatibleWith: HKUnit.meter()) {
|
|
170
137
|
totalDistance = quantity
|
|
171
138
|
}
|
|
172
|
-
|
|
139
|
+
|
|
173
140
|
if type.identifier == HKWorkoutSortIdentifierTotalSwimmingStrokeCount {
|
|
174
141
|
totalSwimmingStrokeCount = quantity
|
|
175
142
|
}
|
|
176
|
-
|
|
143
|
+
|
|
177
144
|
if type.identifier == HKWorkoutSortIdentifierTotalFlightsClimbed {
|
|
178
145
|
totalFlightsClimbed = quantity
|
|
179
146
|
}
|
|
180
|
-
|
|
147
|
+
|
|
181
148
|
return HKQuantitySample.init(
|
|
182
149
|
type: type,
|
|
183
150
|
quantity: quantity,
|
|
@@ -186,21 +153,21 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
186
153
|
metadata: metadataDeserialized
|
|
187
154
|
)
|
|
188
155
|
}
|
|
189
|
-
|
|
156
|
+
|
|
190
157
|
// if totals are provided override samples
|
|
191
158
|
let rawTotalDistance = totals.distance ?? 0.0
|
|
192
159
|
let rawTotalEnergy = totals.energyBurned ?? 0.0
|
|
193
|
-
|
|
160
|
+
|
|
194
161
|
if rawTotalDistance != 0.0 {
|
|
195
162
|
totalDistance = HKQuantity(unit: .meter(), doubleValue: rawTotalDistance)
|
|
196
163
|
}
|
|
197
164
|
if rawTotalEnergy != 0.0 {
|
|
198
165
|
totalEnergyBurned = HKQuantity(unit: .kilocalorie(), doubleValue: rawTotalEnergy)
|
|
199
166
|
}
|
|
200
|
-
|
|
167
|
+
|
|
201
168
|
// creating workout
|
|
202
169
|
var workout: HKWorkout?
|
|
203
|
-
|
|
170
|
+
|
|
204
171
|
if totalSwimmingStrokeCount != nil {
|
|
205
172
|
workout = HKWorkout.init(
|
|
206
173
|
activityType: type,
|
|
@@ -230,7 +197,7 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
230
197
|
}
|
|
231
198
|
}
|
|
232
199
|
}
|
|
233
|
-
|
|
200
|
+
|
|
234
201
|
if workout == nil {
|
|
235
202
|
workout = HKWorkout.init(
|
|
236
203
|
activityType: type,
|
|
@@ -242,11 +209,11 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
242
209
|
metadata: metadataDeserialized
|
|
243
210
|
)
|
|
244
211
|
}
|
|
245
|
-
|
|
212
|
+
|
|
246
213
|
guard let workout = workout else {
|
|
247
214
|
throw RuntimeError.error(withMessage: "Could not create workout")
|
|
248
215
|
}
|
|
249
|
-
|
|
216
|
+
|
|
250
217
|
return Promise.async {
|
|
251
218
|
try await withCheckedThrowingContinuation { continuation in
|
|
252
219
|
// saving workout, samples and route
|
|
@@ -254,11 +221,11 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
254
221
|
if let error = error {
|
|
255
222
|
return continuation.resume(throwing: error)
|
|
256
223
|
}
|
|
257
|
-
|
|
224
|
+
|
|
258
225
|
if initializedSamples.isEmpty {
|
|
259
226
|
return continuation.resume(returning: workout.uuid.uuidString)
|
|
260
227
|
}
|
|
261
|
-
|
|
228
|
+
|
|
262
229
|
store.add(initializedSamples, to: workout) { (_, error: Error?) in
|
|
263
230
|
if let error = error {
|
|
264
231
|
return continuation.resume(throwing: error)
|
|
@@ -269,37 +236,19 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
269
236
|
}
|
|
270
237
|
}
|
|
271
238
|
}
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
func startWatchAppWithWorkoutConfiguration(workoutConfiguration: WorkoutConfiguration) -> Promise<Bool>
|
|
275
|
-
{
|
|
276
|
-
let configuration = parseWorkoutConfiguration(workoutConfiguration)
|
|
277
|
-
|
|
278
|
-
return Promise.async {
|
|
279
|
-
try await withCheckedThrowingContinuation { continuation in
|
|
280
|
-
store.startWatchApp(with: configuration) { success, error in
|
|
281
|
-
if let error {
|
|
282
|
-
continuation.resume(throwing: error)
|
|
283
|
-
} else {
|
|
284
|
-
continuation.resume(returning: success)
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
}
|
|
288
|
-
}
|
|
289
|
-
}
|
|
290
|
-
|
|
239
|
+
|
|
291
240
|
func queryWorkoutSamplesWithAnchor(options: WorkoutQueryOptionsWithAnchor) throws -> Promise<QueryWorkoutSamplesWithAnchorResponse> {
|
|
292
241
|
let predicate = try createPredicateForWorkout(filter: options.filter)
|
|
293
|
-
|
|
242
|
+
|
|
294
243
|
let limit = getQueryLimit(options.limit)
|
|
295
|
-
|
|
244
|
+
|
|
296
245
|
let actualAnchor = try deserializeHKQueryAnchor(base64String: options.anchor)
|
|
297
|
-
|
|
246
|
+
|
|
298
247
|
return Promise.async {
|
|
299
248
|
let energyUnit = try await getUnitToUse(unitOverride: options.energyUnit, quantityType: HKQuantityType(.activeEnergyBurned))
|
|
300
|
-
|
|
249
|
+
|
|
301
250
|
let distanceUnit = try await getUnitToUse(unitOverride: options.energyUnit, quantityType: HKQuantityType(.distanceWalkingRunning))
|
|
302
|
-
|
|
251
|
+
|
|
303
252
|
return try await withCheckedThrowingContinuation { continuation in
|
|
304
253
|
let q = HKAnchoredObjectQuery(
|
|
305
254
|
type: .workoutType(),
|
|
@@ -317,7 +266,7 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
317
266
|
if let error = error {
|
|
318
267
|
return continuation.resume(throwing: error)
|
|
319
268
|
}
|
|
320
|
-
|
|
269
|
+
|
|
321
270
|
guard let samples = s, let newAnchor = newAnchor else {
|
|
322
271
|
return continuation.resume(
|
|
323
272
|
throwing: RuntimeError.error(
|
|
@@ -325,7 +274,7 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
325
274
|
)
|
|
326
275
|
)
|
|
327
276
|
}
|
|
328
|
-
|
|
277
|
+
|
|
329
278
|
let workoutProxies = samples.compactMap { s in
|
|
330
279
|
if let workout = s as? HKWorkout {
|
|
331
280
|
return WorkoutProxy.init(
|
|
@@ -336,20 +285,20 @@ class WorkoutsModule : HybridWorkoutsModuleSpec {
|
|
|
336
285
|
}
|
|
337
286
|
return nil
|
|
338
287
|
}
|
|
339
|
-
|
|
288
|
+
|
|
340
289
|
let deletedSamples = deletedSamples?.map({ sample in
|
|
341
290
|
return serializeDeletedSample(sample: sample)
|
|
342
291
|
}) ?? []
|
|
343
|
-
|
|
292
|
+
|
|
344
293
|
let returnValue = QueryWorkoutSamplesWithAnchorResponse(
|
|
345
294
|
workouts: workoutProxies,
|
|
346
295
|
deletedSamples: deletedSamples,
|
|
347
296
|
newAnchor: serializeAnchor(anchor: newAnchor)!
|
|
348
297
|
)
|
|
349
|
-
|
|
298
|
+
|
|
350
299
|
return continuation.resume(returning: returnValue)
|
|
351
300
|
}
|
|
352
|
-
|
|
301
|
+
|
|
353
302
|
store.execute(q)
|
|
354
303
|
}
|
|
355
304
|
}
|
|
@@ -81,7 +81,7 @@ function queryCategorySamples(_categoryTypeIdentifier) {
|
|
|
81
81
|
}
|
|
82
82
|
return Promise.resolve([]);
|
|
83
83
|
}
|
|
84
|
-
function queryCategorySamplesWithAnchor(_categoryTypeIdentifier) {
|
|
84
|
+
function queryCategorySamplesWithAnchor(_categoryTypeIdentifier, _options) {
|
|
85
85
|
if (react_native_1.Platform.OS !== 'ios' && !hasWarned) {
|
|
86
86
|
console.warn(notAvailableError);
|
|
87
87
|
hasWarned = true;
|
package/lib/module/healthkit.js
CHANGED
|
@@ -59,7 +59,7 @@ export function queryCategorySamples(_categoryTypeIdentifier) {
|
|
|
59
59
|
}
|
|
60
60
|
return Promise.resolve([]);
|
|
61
61
|
}
|
|
62
|
-
export function queryCategorySamplesWithAnchor(_categoryTypeIdentifier) {
|
|
62
|
+
export function queryCategorySamplesWithAnchor(_categoryTypeIdentifier, _options) {
|
|
63
63
|
if (Platform.OS !== 'ios' && !hasWarned) {
|
|
64
64
|
console.warn(notAvailableError);
|
|
65
65
|
hasWarned = true;
|
|
@@ -5,6 +5,7 @@ import type { CategorySamplesWithAnchorResponseTyped, CategorySampleTyped } from
|
|
|
5
5
|
import type { CategoryTypeIdentifier } from './types/CategoryTypeIdentifier';
|
|
6
6
|
import { BiologicalSex, BloodType, FitzpatrickSkinType, WheelchairUse } from './types/Characteristics';
|
|
7
7
|
import type { QuantitySample } from './types/QuantitySample';
|
|
8
|
+
import type { QueryOptionsWithAnchor } from './types/QueryOptions';
|
|
8
9
|
export * from './types';
|
|
9
10
|
export declare const authorizationStatusFor: (type: import("./types").ObjectTypeIdentifier) => AuthorizationStatus;
|
|
10
11
|
export declare const disableAllBackgroundDelivery: () => Promise<boolean>;
|
|
@@ -35,12 +36,12 @@ export declare const queryStatisticsCollectionForQuantity: (identifier: import("
|
|
|
35
36
|
export declare const saveQuantitySample: (identifier: import("./types").QuantityTypeIdentifier, unit: string, value: number, start: Date, end: Date, metadata: import("react-native-nitro-modules").AnyMap) => Promise<boolean>;
|
|
36
37
|
export declare const isQuantityCompatibleWithUnit: (identifier: import("./types").QuantityTypeIdentifier, unit: string) => boolean;
|
|
37
38
|
export declare function queryCategorySamples<T extends CategoryTypeIdentifier>(_categoryTypeIdentifier: T): Promise<CategorySampleTyped<T>[]>;
|
|
38
|
-
export declare function queryCategorySamplesWithAnchor<T extends CategoryTypeIdentifier>(_categoryTypeIdentifier: T): Promise<CategorySamplesWithAnchorResponseTyped<T>>;
|
|
39
|
+
export declare function queryCategorySamplesWithAnchor<T extends CategoryTypeIdentifier>(_categoryTypeIdentifier: T, _options: QueryOptionsWithAnchor): Promise<CategorySamplesWithAnchorResponseTyped<T>>;
|
|
39
40
|
export declare const saveCategorySample: <T extends CategoryTypeIdentifier>(identifier: T, value: import("./types").CategoryValueForIdentifier, startDate: Date, endDate: Date, metadata: import("./types").MetadataForCategoryIdentifier<T>) => Promise<boolean>;
|
|
40
41
|
export declare const queryCorrelationSamples: (typeIdentifier: import("./types").CorrelationTypeIdentifier, from: Date, to: Date) => Promise<readonly import("./types").CorrelationSample[]>;
|
|
41
42
|
export declare const saveCorrelationSample: (typeIdentifier: import("./types").CorrelationTypeIdentifier, samples: import("./types").SampleForSaving[], start: Date, end: Date, metadata: import("react-native-nitro-modules").AnyMap) => Promise<boolean>;
|
|
42
43
|
export declare const queryHeartbeatSeriesSamples: (options?: import("./types").QueryOptionsWithSortOrder) => Promise<readonly import("./types").HeartbeatSeriesSample[]>;
|
|
43
|
-
export declare const queryHeartbeatSeriesSamplesWithAnchor: (options:
|
|
44
|
+
export declare const queryHeartbeatSeriesSamplesWithAnchor: (options: QueryOptionsWithAnchor) => Promise<import("./types").HeartbeatSeriesSamplesWithAnchorResponse>;
|
|
44
45
|
export declare const queryWorkoutSamples: (options: import("./types").WorkoutQueryOptions) => Promise<WorkoutProxy[]>;
|
|
45
46
|
export declare const queryWorkoutSamplesWithAnchor: (options: import("./types").WorkoutQueryOptionsWithAnchor) => Promise<import("./types").QueryWorkoutSamplesWithAnchorResponse>;
|
|
46
47
|
export declare const saveWorkoutSample: (workoutActivityType: import("./types").WorkoutActivityType, quantities: readonly import("./types").QuantitySampleForSaving[], startDate: Date, endDate: Date, totals: import("./types").WorkoutTotals, metadata: import("react-native-nitro-modules").AnyMap) => Promise<string>;
|
|
@@ -9,5 +9,8 @@ export interface WorkoutsModule extends HybridObject<{
|
|
|
9
9
|
saveWorkoutSample(workoutActivityType: WorkoutActivityType, quantities: readonly QuantitySampleForSaving[], startDate: Date, endDate: Date, totals: WorkoutTotals, metadata: AnyMap): Promise<string>;
|
|
10
10
|
queryWorkoutSamplesWithAnchor(options: WorkoutQueryOptionsWithAnchor): Promise<QueryWorkoutSamplesWithAnchorResponse>;
|
|
11
11
|
queryWorkoutSamples(options: WorkoutQueryOptions): Promise<WorkoutProxy[]>;
|
|
12
|
+
/**
|
|
13
|
+
* @see {@link https://developer.apple.com/documentation/healthkit/hkhealthstore/1648358-startwatchapp Apple Docs }
|
|
14
|
+
*/
|
|
12
15
|
startWatchAppWithWorkoutConfiguration(workoutConfiguration: WorkoutConfiguration): Promise<boolean>;
|
|
13
16
|
}
|
|
@@ -17,7 +17,6 @@
|
|
|
17
17
|
#include "HybridSourceProxySpecSwift.hpp"
|
|
18
18
|
#include "HybridStateOfMindModuleSpecSwift.hpp"
|
|
19
19
|
#include "HybridWorkoutProxySpecSwift.hpp"
|
|
20
|
-
#include "HybridWorkoutSessionModuleSpecSwift.hpp"
|
|
21
20
|
#include "HybridWorkoutsModuleSpecSwift.hpp"
|
|
22
21
|
#include "ReactNativeHealthkit-Swift-Cxx-Umbrella.hpp"
|
|
23
22
|
|
|
@@ -367,54 +366,14 @@ namespace margelo::nitro::healthkit::bridge::swift {
|
|
|
367
366
|
};
|
|
368
367
|
}
|
|
369
368
|
|
|
370
|
-
// pragma MARK: std::function<void(const std::string& /*
|
|
369
|
+
// pragma MARK: std::function<void(const std::string& /* result */)>
|
|
371
370
|
Func_void_std__string create_Func_void_std__string(void* _Nonnull swiftClosureWrapper) {
|
|
372
371
|
auto swiftClosure = ReactNativeHealthkit::Func_void_std__string::fromUnsafe(swiftClosureWrapper);
|
|
373
|
-
return [swiftClosure = std::move(swiftClosure)](const std::string&
|
|
374
|
-
swiftClosure.call(
|
|
375
|
-
};
|
|
376
|
-
}
|
|
377
|
-
|
|
378
|
-
// pragma MARK: std::function<void(WorkoutSessionState /* toState */, WorkoutSessionState /* fromState */, std::chrono::system_clock::time_point /* date */)>
|
|
379
|
-
Func_void_WorkoutSessionState_WorkoutSessionState_std__chrono__system_clock__time_point create_Func_void_WorkoutSessionState_WorkoutSessionState_std__chrono__system_clock__time_point(void* _Nonnull swiftClosureWrapper) {
|
|
380
|
-
auto swiftClosure = ReactNativeHealthkit::Func_void_WorkoutSessionState_WorkoutSessionState_std__chrono__system_clock__time_point::fromUnsafe(swiftClosureWrapper);
|
|
381
|
-
return [swiftClosure = std::move(swiftClosure)](WorkoutSessionState toState, WorkoutSessionState fromState, std::chrono::system_clock::time_point date) mutable -> void {
|
|
382
|
-
swiftClosure.call(static_cast<int>(toState), static_cast<int>(fromState), date);
|
|
383
|
-
};
|
|
384
|
-
}
|
|
385
|
-
|
|
386
|
-
// pragma MARK: std::function<void(const std::vector<RemoteSessionSharableData>& /* data */)>
|
|
387
|
-
Func_void_std__vector_RemoteSessionSharableData_ create_Func_void_std__vector_RemoteSessionSharableData_(void* _Nonnull swiftClosureWrapper) {
|
|
388
|
-
auto swiftClosure = ReactNativeHealthkit::Func_void_std__vector_RemoteSessionSharableData_::fromUnsafe(swiftClosureWrapper);
|
|
389
|
-
return [swiftClosure = std::move(swiftClosure)](const std::vector<RemoteSessionSharableData>& data) mutable -> void {
|
|
390
|
-
swiftClosure.call(data);
|
|
391
|
-
};
|
|
392
|
-
}
|
|
393
|
-
|
|
394
|
-
// pragma MARK: std::function<void(WorkoutEventType /* type */)>
|
|
395
|
-
Func_void_WorkoutEventType create_Func_void_WorkoutEventType(void* _Nonnull swiftClosureWrapper) {
|
|
396
|
-
auto swiftClosure = ReactNativeHealthkit::Func_void_WorkoutEventType::fromUnsafe(swiftClosureWrapper);
|
|
397
|
-
return [swiftClosure = std::move(swiftClosure)](WorkoutEventType type) mutable -> void {
|
|
398
|
-
swiftClosure.call(static_cast<int>(type));
|
|
372
|
+
return [swiftClosure = std::move(swiftClosure)](const std::string& result) mutable -> void {
|
|
373
|
+
swiftClosure.call(result);
|
|
399
374
|
};
|
|
400
375
|
}
|
|
401
376
|
|
|
402
|
-
// pragma MARK: std::shared_ptr<margelo::nitro::healthkit::HybridWorkoutSessionModuleSpec>
|
|
403
|
-
std::shared_ptr<margelo::nitro::healthkit::HybridWorkoutSessionModuleSpec> create_std__shared_ptr_margelo__nitro__healthkit__HybridWorkoutSessionModuleSpec_(void* _Nonnull swiftUnsafePointer) {
|
|
404
|
-
ReactNativeHealthkit::HybridWorkoutSessionModuleSpec_cxx swiftPart = ReactNativeHealthkit::HybridWorkoutSessionModuleSpec_cxx::fromUnsafe(swiftUnsafePointer);
|
|
405
|
-
return std::make_shared<margelo::nitro::healthkit::HybridWorkoutSessionModuleSpecSwift>(swiftPart);
|
|
406
|
-
}
|
|
407
|
-
void* _Nonnull get_std__shared_ptr_margelo__nitro__healthkit__HybridWorkoutSessionModuleSpec_(std__shared_ptr_margelo__nitro__healthkit__HybridWorkoutSessionModuleSpec_ cppType) {
|
|
408
|
-
std::shared_ptr<margelo::nitro::healthkit::HybridWorkoutSessionModuleSpecSwift> swiftWrapper = std::dynamic_pointer_cast<margelo::nitro::healthkit::HybridWorkoutSessionModuleSpecSwift>(cppType);
|
|
409
|
-
#ifdef NITRO_DEBUG
|
|
410
|
-
if (swiftWrapper == nullptr) [[unlikely]] {
|
|
411
|
-
throw std::runtime_error("Class \"HybridWorkoutSessionModuleSpec\" is not implemented in Swift!");
|
|
412
|
-
}
|
|
413
|
-
#endif
|
|
414
|
-
ReactNativeHealthkit::HybridWorkoutSessionModuleSpec_cxx& swiftPart = swiftWrapper->getSwiftPart();
|
|
415
|
-
return swiftPart.toUnsafe();
|
|
416
|
-
}
|
|
417
|
-
|
|
418
377
|
// pragma MARK: std::function<void(const QueryWorkoutSamplesWithAnchorResponse& /* result */)>
|
|
419
378
|
Func_void_QueryWorkoutSamplesWithAnchorResponse create_Func_void_QueryWorkoutSamplesWithAnchorResponse(void* _Nonnull swiftClosureWrapper) {
|
|
420
379
|
auto swiftClosure = ReactNativeHealthkit::Func_void_QueryWorkoutSamplesWithAnchorResponse::fromUnsafe(swiftClosureWrapper);
|