@kingstinct/react-native-healthkit 4.4.6 → 5.1.1
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/README.md +2 -1
- package/ios/ReactNativeHealthkit.m +6 -0
- package/ios/ReactNativeHealthkit.swift +23 -0
- package/ios/ReactNativeHealthkit.xcodeproj/project.xcworkspace/xcuserdata/robertherber.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
- package/lib/commonjs/hooks/useHealthkitAuthorization.js +41 -0
- package/lib/commonjs/hooks/useHealthkitAuthorization.js.map +1 -0
- package/lib/commonjs/hooks/useIsHealthDataAvailable.js +29 -0
- package/lib/commonjs/hooks/useIsHealthDataAvailable.js.map +1 -0
- package/lib/commonjs/hooks/useIsHealthDataAvailable.test.js +45 -0
- package/lib/commonjs/hooks/useIsHealthDataAvailable.test.js.map +1 -0
- package/lib/commonjs/hooks/useMostRecentCategorySample.js +27 -0
- package/lib/commonjs/hooks/useMostRecentCategorySample.js.map +1 -0
- package/lib/commonjs/hooks/useMostRecentQuantitySample.js +43 -0
- package/lib/commonjs/hooks/useMostRecentQuantitySample.js.map +1 -0
- package/lib/commonjs/hooks/useMostRecentWorkout.js +56 -0
- package/lib/commonjs/hooks/useMostRecentWorkout.js.map +1 -0
- package/lib/commonjs/hooks/useStatisticsForQuantity.js +35 -0
- package/lib/commonjs/hooks/useStatisticsForQuantity.js.map +1 -0
- package/lib/commonjs/hooks/useSubscribeToChanges.js +37 -0
- package/lib/commonjs/hooks/useSubscribeToChanges.js.map +1 -0
- package/lib/commonjs/index.ios.js +69 -393
- package/lib/commonjs/index.ios.js.map +1 -1
- package/lib/commonjs/index.js +3 -15
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/jest.setup.js +10 -0
- package/lib/commonjs/jest.setup.js.map +1 -0
- package/lib/commonjs/native-types.js +170 -78
- package/lib/commonjs/native-types.js.map +1 -1
- package/lib/commonjs/types.js +13 -0
- package/lib/commonjs/types.js.map +1 -1
- package/lib/commonjs/utils/deleteQuantitySample.js +16 -0
- package/lib/commonjs/utils/deleteQuantitySample.js.map +1 -0
- package/lib/commonjs/utils/deserializeCategorySample.js +15 -0
- package/lib/commonjs/utils/deserializeCategorySample.js.map +1 -0
- package/lib/commonjs/utils/deserializeCategorySample.test.js +25 -0
- package/lib/commonjs/utils/deserializeCategorySample.test.js.map +1 -0
- package/lib/commonjs/utils/deserializeCorrelation.js +32 -0
- package/lib/commonjs/utils/deserializeCorrelation.js.map +1 -0
- package/lib/commonjs/utils/deserializeSample.js +17 -0
- package/lib/commonjs/utils/deserializeSample.js.map +1 -0
- package/lib/commonjs/utils/deserializeWorkout.js +17 -0
- package/lib/commonjs/utils/deserializeWorkout.js.map +1 -0
- package/lib/commonjs/utils/ensureMetadata.js +14 -0
- package/lib/commonjs/utils/ensureMetadata.js.map +1 -0
- package/lib/commonjs/utils/ensureUnit.js +23 -0
- package/lib/commonjs/utils/ensureUnit.js.map +1 -0
- package/lib/commonjs/utils/getDateOfBirth.js +19 -0
- package/lib/commonjs/utils/getDateOfBirth.js.map +1 -0
- package/lib/commonjs/utils/getMostRecentCategorySample.js +22 -0
- package/lib/commonjs/utils/getMostRecentCategorySample.js.map +1 -0
- package/lib/commonjs/utils/getMostRecentQuantitySample.js +22 -0
- package/lib/commonjs/utils/getMostRecentQuantitySample.js.map +1 -0
- package/lib/commonjs/utils/getMostRecentWorkout.js +24 -0
- package/lib/commonjs/utils/getMostRecentWorkout.js.map +1 -0
- package/lib/commonjs/utils/getPreferredUnit.js +19 -0
- package/lib/commonjs/utils/getPreferredUnit.js.map +1 -0
- package/lib/commonjs/utils/getPreferredUnits.js +19 -0
- package/lib/commonjs/utils/getPreferredUnits.js.map +1 -0
- package/lib/commonjs/utils/getPreferredUnitsTyped.js +46 -0
- package/lib/commonjs/utils/getPreferredUnitsTyped.js.map +1 -0
- package/lib/commonjs/utils/getRequestStatusForAuthorization.js +25 -0
- package/lib/commonjs/utils/getRequestStatusForAuthorization.js.map +1 -0
- package/lib/commonjs/utils/prepareOptions.js +27 -0
- package/lib/commonjs/utils/prepareOptions.js.map +1 -0
- package/lib/commonjs/utils/queryCategorySamples.js +24 -0
- package/lib/commonjs/utils/queryCategorySamples.js.map +1 -0
- package/lib/commonjs/utils/queryCorrelationSamples.js +24 -0
- package/lib/commonjs/utils/queryCorrelationSamples.js.map +1 -0
- package/lib/commonjs/utils/queryQuantitySamples.js +27 -0
- package/lib/commonjs/utils/queryQuantitySamples.js.map +1 -0
- package/lib/commonjs/utils/queryStatisticsForQuantity.js +34 -0
- package/lib/commonjs/utils/queryStatisticsForQuantity.js.map +1 -0
- package/lib/commonjs/utils/queryWorkouts.js +30 -0
- package/lib/commonjs/utils/queryWorkouts.js.map +1 -0
- package/lib/commonjs/utils/requestAuthorization.js +25 -0
- package/lib/commonjs/utils/requestAuthorization.js.map +1 -0
- package/lib/commonjs/utils/saveCategorySample.js +21 -0
- package/lib/commonjs/utils/saveCategorySample.js.map +1 -0
- package/lib/commonjs/utils/saveCorrelationSample.js +24 -0
- package/lib/commonjs/utils/saveCorrelationSample.js.map +1 -0
- package/lib/commonjs/utils/saveQuantitySample.js +21 -0
- package/lib/commonjs/utils/saveQuantitySample.js.map +1 -0
- package/lib/commonjs/utils/saveWorkoutSample.js +25 -0
- package/lib/commonjs/utils/saveWorkoutSample.js.map +1 -0
- package/lib/commonjs/utils/serializeDate.js +12 -0
- package/lib/commonjs/utils/serializeDate.js.map +1 -0
- package/lib/commonjs/utils/serializeDate.test.js +19 -0
- package/lib/commonjs/utils/serializeDate.test.js.map +1 -0
- package/lib/commonjs/utils/subscribeToChanges.js +37 -0
- package/lib/commonjs/utils/subscribeToChanges.js.map +1 -0
- package/lib/module/hooks/useHealthkitAuthorization.js +29 -0
- package/lib/module/hooks/useHealthkitAuthorization.js.map +1 -0
- package/lib/module/hooks/useIsHealthDataAvailable.js +18 -0
- package/lib/module/hooks/useIsHealthDataAvailable.js.map +1 -0
- package/lib/module/hooks/useIsHealthDataAvailable.test.js +38 -0
- package/lib/module/hooks/useIsHealthDataAvailable.test.js.map +1 -0
- package/lib/module/hooks/useMostRecentCategorySample.js +15 -0
- package/lib/module/hooks/useMostRecentCategorySample.js.map +1 -0
- package/lib/module/hooks/useMostRecentQuantitySample.js +30 -0
- package/lib/module/hooks/useMostRecentQuantitySample.js.map +1 -0
- package/lib/module/hooks/useMostRecentWorkout.js +43 -0
- package/lib/module/hooks/useMostRecentWorkout.js.map +1 -0
- package/lib/module/hooks/useStatisticsForQuantity.js +23 -0
- package/lib/module/hooks/useStatisticsForQuantity.js.map +1 -0
- package/lib/module/hooks/useSubscribeToChanges.js +26 -0
- package/lib/module/hooks/useSubscribeToChanges.js.map +1 -0
- package/lib/module/index.ios.js +35 -370
- package/lib/module/index.ios.js.map +1 -1
- package/lib/module/index.js +4 -5
- package/lib/module/index.js.map +1 -1
- package/lib/module/jest.setup.js +7 -0
- package/lib/module/jest.setup.js.map +1 -0
- package/lib/module/native-types.js +154 -74
- package/lib/module/native-types.js.map +1 -1
- package/lib/module/types.js +15 -0
- package/lib/module/types.js.map +1 -1
- package/lib/module/utils/deleteQuantitySample.js +6 -0
- package/lib/module/utils/deleteQuantitySample.js.map +1 -0
- package/lib/module/utils/deserializeCategorySample.js +7 -0
- package/lib/module/utils/deserializeCategorySample.js.map +1 -0
- package/lib/module/utils/deserializeCategorySample.test.js +19 -0
- package/lib/module/utils/deserializeCategorySample.test.js.map +1 -0
- package/lib/module/utils/deserializeCorrelation.js +21 -0
- package/lib/module/utils/deserializeCorrelation.js.map +1 -0
- package/lib/module/utils/deserializeSample.js +9 -0
- package/lib/module/utils/deserializeSample.js.map +1 -0
- package/lib/module/utils/deserializeWorkout.js +9 -0
- package/lib/module/utils/deserializeWorkout.js.map +1 -0
- package/lib/module/utils/ensureMetadata.js +6 -0
- package/lib/module/utils/ensureMetadata.js.map +1 -0
- package/lib/module/utils/ensureUnit.js +13 -0
- package/lib/module/utils/ensureUnit.js.map +1 -0
- package/lib/module/utils/getDateOfBirth.js +9 -0
- package/lib/module/utils/getDateOfBirth.js.map +1 -0
- package/lib/module/utils/getMostRecentCategorySample.js +12 -0
- package/lib/module/utils/getMostRecentCategorySample.js.map +1 -0
- package/lib/module/utils/getMostRecentQuantitySample.js +12 -0
- package/lib/module/utils/getMostRecentQuantitySample.js.map +1 -0
- package/lib/module/utils/getMostRecentWorkout.js +14 -0
- package/lib/module/utils/getMostRecentWorkout.js.map +1 -0
- package/lib/module/utils/getPreferredUnit.js +9 -0
- package/lib/module/utils/getPreferredUnit.js.map +1 -0
- package/lib/module/utils/getPreferredUnits.js +9 -0
- package/lib/module/utils/getPreferredUnits.js.map +1 -0
- package/lib/module/utils/getPreferredUnitsTyped.js +34 -0
- package/lib/module/utils/getPreferredUnitsTyped.js.map +1 -0
- package/lib/module/utils/getRequestStatusForAuthorization.js +15 -0
- package/lib/module/utils/getRequestStatusForAuthorization.js.map +1 -0
- package/lib/module/utils/prepareOptions.js +17 -0
- package/lib/module/utils/prepareOptions.js.map +1 -0
- package/lib/module/utils/queryCategorySamples.js +12 -0
- package/lib/module/utils/queryCategorySamples.js.map +1 -0
- package/lib/module/utils/queryCorrelationSamples.js +12 -0
- package/lib/module/utils/queryCorrelationSamples.js.map +1 -0
- package/lib/module/utils/queryQuantitySamples.js +14 -0
- package/lib/module/utils/queryQuantitySamples.js.map +1 -0
- package/lib/module/utils/queryStatisticsForQuantity.js +23 -0
- package/lib/module/utils/queryStatisticsForQuantity.js.map +1 -0
- package/lib/module/utils/queryWorkouts.js +17 -0
- package/lib/module/utils/queryWorkouts.js.map +1 -0
- package/lib/module/utils/requestAuthorization.js +15 -0
- package/lib/module/utils/requestAuthorization.js.map +1 -0
- package/lib/module/utils/saveCategorySample.js +11 -0
- package/lib/module/utils/saveCategorySample.js.map +1 -0
- package/lib/module/utils/saveCorrelationSample.js +13 -0
- package/lib/module/utils/saveCorrelationSample.js.map +1 -0
- package/lib/module/utils/saveQuantitySample.js +11 -0
- package/lib/module/utils/saveQuantitySample.js.map +1 -0
- package/lib/module/utils/saveWorkoutSample.js +14 -0
- package/lib/module/utils/saveWorkoutSample.js.map +1 -0
- package/lib/module/utils/serializeDate.js +4 -0
- package/lib/module/utils/serializeDate.js.map +1 -0
- package/lib/module/utils/serializeDate.test.js +14 -0
- package/lib/module/utils/serializeDate.test.js.map +1 -0
- package/lib/module/utils/subscribeToChanges.js +25 -0
- package/lib/module/utils/subscribeToChanges.js.map +1 -0
- package/lib/typescript/example-expo/App.d.ts +2 -0
- package/lib/typescript/src/hooks/useHealthkitAuthorization.d.ts +3 -0
- package/lib/typescript/src/hooks/useIsHealthDataAvailable.d.ts +2 -0
- package/lib/typescript/src/hooks/useIsHealthDataAvailable.test.d.ts +1 -0
- package/lib/typescript/src/hooks/useMostRecentCategorySample.d.ts +4 -0
- package/lib/typescript/src/hooks/useMostRecentQuantitySample.d.ts +4 -0
- package/lib/typescript/src/hooks/useMostRecentWorkout.d.ts +7 -0
- package/lib/typescript/src/hooks/useStatisticsForQuantity.d.ts +4 -0
- package/lib/typescript/src/hooks/useSubscribeToChanges.d.ts +3 -0
- package/lib/typescript/src/index.d.ts +2 -3
- package/lib/typescript/src/index.ios.d.ts +49 -3
- package/lib/typescript/src/jest.setup.d.ts +1 -0
- package/lib/typescript/src/native-types.d.ts +170 -65
- package/lib/typescript/src/types.d.ts +14 -90
- package/lib/typescript/src/utils/deleteQuantitySample.d.ts +4 -0
- package/lib/typescript/src/utils/deserializeCategorySample.d.ts +4 -0
- package/lib/typescript/src/utils/deserializeCategorySample.test.d.ts +1 -0
- package/lib/typescript/src/utils/deserializeCorrelation.d.ts +4 -0
- package/lib/typescript/src/utils/deserializeSample.d.ts +4 -0
- package/lib/typescript/src/utils/deserializeWorkout.d.ts +4 -0
- package/lib/typescript/src/utils/ensureMetadata.d.ts +2 -0
- package/lib/typescript/src/utils/ensureUnit.d.ts +3 -0
- package/lib/typescript/src/utils/getDateOfBirth.d.ts +2 -0
- package/lib/typescript/src/utils/getMostRecentCategorySample.d.ts +3 -0
- package/lib/typescript/src/utils/getMostRecentQuantitySample.d.ts +3 -0
- package/lib/typescript/src/utils/getMostRecentWorkout.d.ts +5 -0
- package/lib/typescript/src/utils/getPreferredUnit.d.ts +4 -0
- package/lib/typescript/src/utils/getPreferredUnits.d.ts +4 -0
- package/lib/typescript/src/utils/getPreferredUnitsTyped.d.ts +9 -0
- package/lib/typescript/src/utils/getRequestStatusForAuthorization.d.ts +3 -0
- package/lib/typescript/src/utils/prepareOptions.d.ts +8 -0
- package/lib/typescript/src/utils/queryCategorySamples.d.ts +5 -0
- package/lib/typescript/src/utils/queryCorrelationSamples.d.ts +5 -0
- package/lib/typescript/src/utils/queryQuantitySamples.d.ts +7 -0
- package/lib/typescript/src/utils/queryStatisticsForQuantity.d.ts +14 -0
- package/lib/typescript/src/utils/queryWorkouts.d.ts +4 -0
- package/lib/typescript/src/utils/requestAuthorization.d.ts +3 -0
- package/lib/typescript/src/utils/saveCategorySample.d.ts +7 -0
- package/lib/typescript/src/utils/saveCorrelationSample.d.ts +8 -0
- package/lib/typescript/src/utils/saveQuantitySample.d.ts +7 -0
- package/lib/typescript/src/utils/saveWorkoutSample.d.ts +7 -0
- package/lib/typescript/src/utils/serializeDate.d.ts +2 -0
- package/lib/typescript/src/utils/serializeDate.test.d.ts +1 -0
- package/lib/typescript/src/utils/subscribeToChanges.d.ts +3 -0
- package/package.json +19 -13
- package/src/hooks/useHealthkitAuthorization.ts +39 -0
- package/src/hooks/useIsHealthDataAvailable.test.ts +40 -0
- package/src/hooks/useIsHealthDataAvailable.ts +19 -0
- package/src/hooks/useMostRecentCategorySample.ts +24 -0
- package/src/hooks/useMostRecentQuantitySample.ts +39 -0
- package/src/hooks/useMostRecentWorkout.ts +58 -0
- package/src/hooks/useStatisticsForQuantity.ts +42 -0
- package/src/hooks/useSubscribeToChanges.ts +31 -0
- package/src/index.ios.tsx +40 -569
- package/src/index.tsx +6 -7
- package/src/jest.setup.ts +7 -0
- package/src/native-types.ts +229 -74
- package/src/types.ts +41 -152
- package/src/utils/deleteQuantitySample.ts +14 -0
- package/src/utils/deserializeCategorySample.test.ts +21 -0
- package/src/utils/deserializeCategorySample.ts +12 -0
- package/src/utils/deserializeCorrelation.ts +28 -0
- package/src/utils/deserializeSample.ts +17 -0
- package/src/utils/deserializeWorkout.ts +14 -0
- package/src/utils/ensureMetadata.ts +5 -0
- package/src/utils/ensureUnit.ts +19 -0
- package/src/utils/getDateOfBirth.ts +8 -0
- package/src/utils/getMostRecentCategorySample.ts +18 -0
- package/src/utils/getMostRecentQuantitySample.ts +19 -0
- package/src/utils/getMostRecentWorkout.ts +27 -0
- package/src/utils/getPreferredUnit.ts +14 -0
- package/src/utils/getPreferredUnits.ts +14 -0
- package/src/utils/getPreferredUnitsTyped.ts +38 -0
- package/src/utils/getRequestStatusForAuthorization.ts +21 -0
- package/src/utils/prepareOptions.ts +15 -0
- package/src/utils/queryCategorySamples.ts +29 -0
- package/src/utils/queryCorrelationSamples.ts +29 -0
- package/src/utils/queryQuantitySamples.ts +36 -0
- package/src/utils/queryStatisticsForQuantity.ts +38 -0
- package/src/utils/queryWorkouts.ts +28 -0
- package/src/utils/requestAuthorization.ts +18 -0
- package/src/utils/saveCategorySample.ts +27 -0
- package/src/utils/saveCorrelationSample.ts +34 -0
- package/src/utils/saveQuantitySample.ts +29 -0
- package/src/utils/saveWorkoutSample.ts +28 -0
- package/src/utils/serializeDate.test.ts +16 -0
- package/src/utils/serializeDate.ts +3 -0
- package/src/utils/subscribeToChanges.ts +32 -0
package/README.md
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# @kingstinct/react-native-healthkit
|
|
2
2
|
|
|
3
|
-
[](https://github.com/Kingstinct/react-native-healthkit/actions/workflows/test.yml)
|
|
4
4
|
[](https://www.npmjs.com/package/@kingstinct/react-native-healthkit)
|
|
5
|
+

|
|
5
6
|
|
|
6
7
|
React Native bindings for HealthKit with full TypeScript and Promise support covering almost everything. Keeping TypeScript mappings as close as possible to HealthKit - both in regards to naming and serialization. This will make it easier to keep this library up-to-date with HealthKit as well as browsing the official documentation (and if something - metadata properties for example - is not typed it will still be accessible).
|
|
7
8
|
|
|
@@ -62,6 +62,12 @@ RCT_EXTERN_METHOD(saveQuantitySample:(NSString)typeIdentifier
|
|
|
62
62
|
reject:(RCTPromiseRejectBlock)reject
|
|
63
63
|
)
|
|
64
64
|
|
|
65
|
+
RCT_EXTERN_METHOD(deleteQuantitySample:(NSString)typeIdentifier
|
|
66
|
+
uuid:(NSString)uuid
|
|
67
|
+
resolve:(RCTPromiseResolveBlock)resolve
|
|
68
|
+
reject:(RCTPromiseRejectBlock)reject
|
|
69
|
+
)
|
|
70
|
+
|
|
65
71
|
RCT_EXTERN_METHOD(subscribeToObserverQuery:(NSString)typeIdentifier
|
|
66
72
|
resolve:(RCTPromiseResolveBlock)resolve
|
|
67
73
|
reject:(RCTPromiseRejectBlock)reject
|
|
@@ -379,6 +379,29 @@ class ReactNativeHealthkit: RCTEventEmitter {
|
|
|
379
379
|
}
|
|
380
380
|
}
|
|
381
381
|
|
|
382
|
+
@objc(deleteQuantitySample:uuid:resolve:reject:)
|
|
383
|
+
func deleteQuantitySample(typeIdentifier: String, uuid: String, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock){
|
|
384
|
+
guard let store = _store else {
|
|
385
|
+
return reject(INIT_ERROR, INIT_ERROR_MESSAGE, nil);
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
let identifier = HKQuantityTypeIdentifier.init(rawValue: typeIdentifier);
|
|
389
|
+
let sampleUuid = UUID.init(uuidString: uuid) as! UUID;
|
|
390
|
+
|
|
391
|
+
guard let sampleType = HKObjectType.quantityType(forIdentifier: identifier) else {
|
|
392
|
+
return reject(TYPE_IDENTIFIER_ERROR, typeIdentifier, nil);
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
let samplePredicate = HKQuery.predicateForObject(with: sampleUuid);
|
|
396
|
+
|
|
397
|
+
store.deleteObjects(of: sampleType, predicate: samplePredicate) { (success: Bool, deletedObjectCount: Int, error: Error?) in
|
|
398
|
+
guard let err = error else {
|
|
399
|
+
return resolve(success);
|
|
400
|
+
}
|
|
401
|
+
reject(GENERIC_ERROR, err.localizedDescription, error);
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
|
|
382
405
|
@objc(saveCorrelationSample:samples:start:end:metadata:resolve:reject:)
|
|
383
406
|
func saveCorrelationSample(typeIdentifier: String, samples: Array<Dictionary<String, Any>>, start: Date, end: Date, metadata: Dictionary<String, Any>, resolve: @escaping RCTPromiseResolveBlock, reject: @escaping RCTPromiseRejectBlock){
|
|
384
407
|
guard let store = _store else {
|
|
Binary file
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _getRequestStatusForAuthorization = _interopRequireDefault(require("../utils/getRequestStatusForAuthorization"));
|
|
11
|
+
|
|
12
|
+
var _requestAuthorization = _interopRequireDefault(require("../utils/requestAuthorization"));
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
const useHealthkitAuthorization = (read, write) => {
|
|
17
|
+
const [status, setStatus] = (0, _react.useState)(null);
|
|
18
|
+
const readMemo = (0, _react.useRef)(read);
|
|
19
|
+
const writeMemo = (0, _react.useRef)(write);
|
|
20
|
+
(0, _react.useEffect)(() => {
|
|
21
|
+
readMemo.current = read;
|
|
22
|
+
writeMemo.current = write;
|
|
23
|
+
}, [read, write]);
|
|
24
|
+
const refreshAuthStatus = (0, _react.useCallback)(async () => {
|
|
25
|
+
const auth = await (0, _getRequestStatusForAuthorization.default)(readMemo.current, writeMemo.current);
|
|
26
|
+
setStatus(auth);
|
|
27
|
+
return auth;
|
|
28
|
+
}, []);
|
|
29
|
+
const request = (0, _react.useCallback)(async () => {
|
|
30
|
+
await (0, _requestAuthorization.default)(readMemo.current, writeMemo.current);
|
|
31
|
+
return refreshAuthStatus();
|
|
32
|
+
}, [refreshAuthStatus]);
|
|
33
|
+
(0, _react.useEffect)(() => {
|
|
34
|
+
void refreshAuthStatus();
|
|
35
|
+
}, [refreshAuthStatus]);
|
|
36
|
+
return [status, request];
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
var _default = useHealthkitAuthorization;
|
|
40
|
+
exports.default = _default;
|
|
41
|
+
//# sourceMappingURL=useHealthkitAuthorization.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useHealthkitAuthorization","read","write","status","setStatus","useState","readMemo","useRef","writeMemo","useEffect","current","refreshAuthStatus","useCallback","auth","getRequestStatusForAuthorization","request","requestAuthorization"],"sources":["useHealthkitAuthorization.ts"],"sourcesContent":["import {\n useCallback, useEffect, useRef, useState,\n} from 'react'\n\nimport getRequestStatusForAuthorization from '../utils/getRequestStatusForAuthorization'\nimport requestAuthorization from '../utils/requestAuthorization'\n\nimport type { HealthkitReadAuthorization, HealthkitWriteAuthorization, HKAuthorizationRequestStatus } from '../native-types'\n\nconst useHealthkitAuthorization = (read: readonly HealthkitReadAuthorization[], write?: readonly HealthkitWriteAuthorization[]) => {\n const [status, setStatus] = useState<HKAuthorizationRequestStatus | null>(null)\n\n const readMemo = useRef(read)\n const writeMemo = useRef(write)\n\n useEffect(() => {\n readMemo.current = read\n writeMemo.current = write\n }, [read, write])\n\n const refreshAuthStatus = useCallback(async () => {\n const auth = await getRequestStatusForAuthorization(readMemo.current, writeMemo.current)\n setStatus(auth)\n return auth\n }, [])\n\n const request = useCallback(async () => {\n await requestAuthorization(readMemo.current, writeMemo.current)\n return refreshAuthStatus()\n }, [refreshAuthStatus])\n\n useEffect(() => {\n void refreshAuthStatus()\n }, [refreshAuthStatus])\n\n return [status, request] as const\n}\n\nexport default useHealthkitAuthorization\n"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;;;AAIA,MAAMA,yBAAyB,GAAG,CAACC,IAAD,EAA8CC,KAA9C,KAAiG;EACjI,MAAM,CAACC,MAAD,EAASC,SAAT,IAAsB,IAAAC,eAAA,EAA8C,IAA9C,CAA5B;EAEA,MAAMC,QAAQ,GAAG,IAAAC,aAAA,EAAON,IAAP,CAAjB;EACA,MAAMO,SAAS,GAAG,IAAAD,aAAA,EAAOL,KAAP,CAAlB;EAEA,IAAAO,gBAAA,EAAU,MAAM;IACdH,QAAQ,CAACI,OAAT,GAAmBT,IAAnB;IACAO,SAAS,CAACE,OAAV,GAAoBR,KAApB;EACD,CAHD,EAGG,CAACD,IAAD,EAAOC,KAAP,CAHH;EAKA,MAAMS,iBAAiB,GAAG,IAAAC,kBAAA,EAAY,YAAY;IAChD,MAAMC,IAAI,GAAG,MAAM,IAAAC,yCAAA,EAAiCR,QAAQ,CAACI,OAA1C,EAAmDF,SAAS,CAACE,OAA7D,CAAnB;IACAN,SAAS,CAACS,IAAD,CAAT;IACA,OAAOA,IAAP;EACD,CAJyB,EAIvB,EAJuB,CAA1B;EAMA,MAAME,OAAO,GAAG,IAAAH,kBAAA,EAAY,YAAY;IACtC,MAAM,IAAAI,6BAAA,EAAqBV,QAAQ,CAACI,OAA9B,EAAuCF,SAAS,CAACE,OAAjD,CAAN;IACA,OAAOC,iBAAiB,EAAxB;EACD,CAHe,EAGb,CAACA,iBAAD,CAHa,CAAhB;EAKA,IAAAF,gBAAA,EAAU,MAAM;IACd,KAAKE,iBAAiB,EAAtB;EACD,CAFD,EAEG,CAACA,iBAAD,CAFH;EAIA,OAAO,CAACR,MAAD,EAASY,OAAT,CAAP;AACD,CA3BD;;eA6Bef,yB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _nativeTypes = _interopRequireDefault(require("../native-types"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
const useIsHealthDataAvailable = () => {
|
|
15
|
+
const [isAvailable, setIsAvailable] = (0, _react.useState)(null);
|
|
16
|
+
(0, _react.useEffect)(() => {
|
|
17
|
+
const init = async () => {
|
|
18
|
+
const res = await _nativeTypes.default.isHealthDataAvailable();
|
|
19
|
+
setIsAvailable(res);
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
void init();
|
|
23
|
+
}, []);
|
|
24
|
+
return isAvailable;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
var _default = useIsHealthDataAvailable;
|
|
28
|
+
exports.default = _default;
|
|
29
|
+
//# sourceMappingURL=useIsHealthDataAvailable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useIsHealthDataAvailable","isAvailable","setIsAvailable","useState","useEffect","init","res","Native","isHealthDataAvailable"],"sources":["useIsHealthDataAvailable.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\n\nimport Native from '../native-types'\n\nconst useIsHealthDataAvailable = () => {\n const [isAvailable, setIsAvailable] = useState<boolean | null>(null)\n\n useEffect(() => {\n const init = async () => {\n const res = await Native.isHealthDataAvailable()\n setIsAvailable(res)\n }\n void init()\n }, [])\n\n return isAvailable\n}\n\nexport default useIsHealthDataAvailable\n"],"mappings":";;;;;;;AAAA;;AAEA;;;;AAEA,MAAMA,wBAAwB,GAAG,MAAM;EACrC,MAAM,CAACC,WAAD,EAAcC,cAAd,IAAgC,IAAAC,eAAA,EAAyB,IAAzB,CAAtC;EAEA,IAAAC,gBAAA,EAAU,MAAM;IACd,MAAMC,IAAI,GAAG,YAAY;MACvB,MAAMC,GAAG,GAAG,MAAMC,oBAAA,CAAOC,qBAAP,EAAlB;MACAN,cAAc,CAACI,GAAD,CAAd;IACD,CAHD;;IAIA,KAAKD,IAAI,EAAT;EACD,CAND,EAMG,EANH;EAQA,OAAOJ,WAAP;AACD,CAZD;;eAceD,wB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _reactHooks = require("@testing-library/react-hooks");
|
|
4
|
+
|
|
5
|
+
var _nativeTypes = _interopRequireDefault(require("../native-types"));
|
|
6
|
+
|
|
7
|
+
var _useIsHealthDataAvailable = _interopRequireDefault(require("./useIsHealthDataAvailable"));
|
|
8
|
+
|
|
9
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
+
|
|
11
|
+
describe('useIsHealthDataAvailable', () => {
|
|
12
|
+
test('should return false', async () => {
|
|
13
|
+
jest.spyOn(_nativeTypes.default, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(false));
|
|
14
|
+
const {
|
|
15
|
+
result,
|
|
16
|
+
waitForNextUpdate,
|
|
17
|
+
unmount
|
|
18
|
+
} = (0, _reactHooks.renderHook)(_useIsHealthDataAvailable.default);
|
|
19
|
+
await (0, _reactHooks.act)(async () => {
|
|
20
|
+
await waitForNextUpdate();
|
|
21
|
+
});
|
|
22
|
+
expect(result.current).toBe(false);
|
|
23
|
+
unmount();
|
|
24
|
+
});
|
|
25
|
+
test('should return true', async () => {
|
|
26
|
+
jest.spyOn(_nativeTypes.default, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(true));
|
|
27
|
+
const {
|
|
28
|
+
result,
|
|
29
|
+
waitForNextUpdate,
|
|
30
|
+
unmount
|
|
31
|
+
} = (0, _reactHooks.renderHook)(_useIsHealthDataAvailable.default);
|
|
32
|
+
await (0, _reactHooks.act)(async () => {
|
|
33
|
+
await waitForNextUpdate();
|
|
34
|
+
});
|
|
35
|
+
expect(result.current).toBe(true);
|
|
36
|
+
unmount();
|
|
37
|
+
});
|
|
38
|
+
test('should return null before initalizing', () => {
|
|
39
|
+
const {
|
|
40
|
+
result
|
|
41
|
+
} = (0, _reactHooks.renderHook)(_useIsHealthDataAvailable.default);
|
|
42
|
+
expect(result.current).toBe(null);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=useIsHealthDataAvailable.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["describe","test","jest","spyOn","Native","mockReturnValue","Promise","resolve","result","waitForNextUpdate","unmount","renderHook","useIsHealthDataAvailable","act","expect","current","toBe"],"sources":["useIsHealthDataAvailable.test.ts"],"sourcesContent":["import { act, renderHook } from '@testing-library/react-hooks'\n\nimport Native from '../native-types'\nimport useIsHealthDataAvailable from './useIsHealthDataAvailable'\n\ndescribe('useIsHealthDataAvailable', () => {\n test('should return false', async () => {\n jest.spyOn(Native, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(false))\n\n const { result, waitForNextUpdate, unmount } = renderHook(useIsHealthDataAvailable)\n\n await act(async () => {\n await waitForNextUpdate()\n })\n\n expect(result.current).toBe(false)\n\n unmount()\n })\n\n test('should return true', async () => {\n jest.spyOn(Native, 'isHealthDataAvailable').mockReturnValue(Promise.resolve(true))\n\n const { result, waitForNextUpdate, unmount } = renderHook(useIsHealthDataAvailable)\n\n await act(async () => {\n await waitForNextUpdate()\n })\n\n expect(result.current).toBe(true)\n\n unmount()\n })\n\n test('should return null before initalizing', () => {\n const { result } = renderHook(useIsHealthDataAvailable)\n\n expect(result.current).toBe(null)\n })\n})\n"],"mappings":";;AAAA;;AAEA;;AACA;;;;AAEAA,QAAQ,CAAC,0BAAD,EAA6B,MAAM;EACzCC,IAAI,CAAC,qBAAD,EAAwB,YAAY;IACtCC,IAAI,CAACC,KAAL,CAAWC,oBAAX,EAAmB,uBAAnB,EAA4CC,eAA5C,CAA4DC,OAAO,CAACC,OAAR,CAAgB,KAAhB,CAA5D;IAEA,MAAM;MAAEC,MAAF;MAAUC,iBAAV;MAA6BC;IAA7B,IAAyC,IAAAC,sBAAA,EAAWC,iCAAX,CAA/C;IAEA,MAAM,IAAAC,eAAA,EAAI,YAAY;MACpB,MAAMJ,iBAAiB,EAAvB;IACD,CAFK,CAAN;IAIAK,MAAM,CAACN,MAAM,CAACO,OAAR,CAAN,CAAuBC,IAAvB,CAA4B,KAA5B;IAEAN,OAAO;EACR,CAZG,CAAJ;EAcAT,IAAI,CAAC,oBAAD,EAAuB,YAAY;IACrCC,IAAI,CAACC,KAAL,CAAWC,oBAAX,EAAmB,uBAAnB,EAA4CC,eAA5C,CAA4DC,OAAO,CAACC,OAAR,CAAgB,IAAhB,CAA5D;IAEA,MAAM;MAAEC,MAAF;MAAUC,iBAAV;MAA6BC;IAA7B,IAAyC,IAAAC,sBAAA,EAAWC,iCAAX,CAA/C;IAEA,MAAM,IAAAC,eAAA,EAAI,YAAY;MACpB,MAAMJ,iBAAiB,EAAvB;IACD,CAFK,CAAN;IAIAK,MAAM,CAACN,MAAM,CAACO,OAAR,CAAN,CAAuBC,IAAvB,CAA4B,IAA5B;IAEAN,OAAO;EACR,CAZG,CAAJ;EAcAT,IAAI,CAAC,uCAAD,EAA0C,MAAM;IAClD,MAAM;MAAEO;IAAF,IAAa,IAAAG,sBAAA,EAAWC,iCAAX,CAAnB;IAEAE,MAAM,CAACN,MAAM,CAACO,OAAR,CAAN,CAAuBC,IAAvB,CAA4B,IAA5B;EACD,CAJG,CAAJ;AAKD,CAlCO,CAAR"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _getMostRecentCategorySample = _interopRequireDefault(require("../utils/getMostRecentCategorySample"));
|
|
11
|
+
|
|
12
|
+
var _useSubscribeToChanges = _interopRequireDefault(require("./useSubscribeToChanges"));
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
function useMostRecentCategorySample(identifier) {
|
|
17
|
+
const [category, setCategory] = (0, _react.useState)(null);
|
|
18
|
+
const updater = (0, _react.useCallback)(() => {
|
|
19
|
+
void (0, _getMostRecentCategorySample.default)(identifier).then(setCategory);
|
|
20
|
+
}, [identifier]);
|
|
21
|
+
(0, _useSubscribeToChanges.default)(identifier, updater);
|
|
22
|
+
return category;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
var _default = useMostRecentCategorySample;
|
|
26
|
+
exports.default = _default;
|
|
27
|
+
//# sourceMappingURL=useMostRecentCategorySample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMostRecentCategorySample","identifier","category","setCategory","useState","updater","useCallback","getMostRecentCategorySample","then","useSubscribeToChanges"],"sources":["useMostRecentCategorySample.ts"],"sourcesContent":["import { useCallback, useState } from 'react'\n\nimport getMostRecentCategorySample from '../utils/getMostRecentCategorySample'\nimport useSubscribeToChanges from './useSubscribeToChanges'\n\nimport type { HKCategoryTypeIdentifier } from '../native-types'\nimport type { HKCategorySample } from '../types'\n\nfunction useMostRecentCategorySample<\n TCategory extends HKCategoryTypeIdentifier\n>(identifier: TCategory) {\n const [category, setCategory] = useState<HKCategorySample<TCategory> | null>(\n null,\n )\n const updater = useCallback(() => {\n void getMostRecentCategorySample(identifier).then(setCategory)\n }, [identifier])\n\n useSubscribeToChanges(identifier, updater)\n\n return category\n}\n\nexport default useMostRecentCategorySample\n"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;;;AAKA,SAASA,2BAAT,CAEEC,UAFF,EAEyB;EACvB,MAAM,CAACC,QAAD,EAAWC,WAAX,IAA0B,IAAAC,eAAA,EAC9B,IAD8B,CAAhC;EAGA,MAAMC,OAAO,GAAG,IAAAC,kBAAA,EAAY,MAAM;IAChC,KAAK,IAAAC,oCAAA,EAA4BN,UAA5B,EAAwCO,IAAxC,CAA6CL,WAA7C,CAAL;EACD,CAFe,EAEb,CAACF,UAAD,CAFa,CAAhB;EAIA,IAAAQ,8BAAA,EAAsBR,UAAtB,EAAkCI,OAAlC;EAEA,OAAOH,QAAP;AACD;;eAEcF,2B"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _ensureUnit = _interopRequireDefault(require("../utils/ensureUnit"));
|
|
11
|
+
|
|
12
|
+
var _getMostRecentQuantitySample = _interopRequireDefault(require("../utils/getMostRecentQuantitySample"));
|
|
13
|
+
|
|
14
|
+
var _subscribeToChanges = _interopRequireDefault(require("../utils/subscribeToChanges"));
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
function useMostRecentQuantitySample(identifier, unit) {
|
|
19
|
+
const [lastSample, setLastSample] = (0, _react.useState)(null);
|
|
20
|
+
(0, _react.useEffect)(() => {
|
|
21
|
+
let cancelSubscription;
|
|
22
|
+
|
|
23
|
+
const init = async () => {
|
|
24
|
+
const actualUnit = await (0, _ensureUnit.default)(identifier, unit);
|
|
25
|
+
cancelSubscription = await (0, _subscribeToChanges.default)(identifier, async () => {
|
|
26
|
+
const value = await (0, _getMostRecentQuantitySample.default)(identifier, actualUnit);
|
|
27
|
+
setLastSample(value);
|
|
28
|
+
});
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
void init();
|
|
32
|
+
return () => {
|
|
33
|
+
var _cancelSubscription;
|
|
34
|
+
|
|
35
|
+
void ((_cancelSubscription = cancelSubscription) === null || _cancelSubscription === void 0 ? void 0 : _cancelSubscription());
|
|
36
|
+
};
|
|
37
|
+
}, [identifier, unit]);
|
|
38
|
+
return lastSample;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
var _default = useMostRecentQuantitySample;
|
|
42
|
+
exports.default = _default;
|
|
43
|
+
//# sourceMappingURL=useMostRecentQuantitySample.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMostRecentQuantitySample","identifier","unit","lastSample","setLastSample","useState","useEffect","cancelSubscription","init","actualUnit","ensureUnit","subscribeToChanges","value","getMostRecentQuantitySample"],"sources":["useMostRecentQuantitySample.ts"],"sourcesContent":["import { useEffect, useState } from 'react'\n\nimport ensureUnit from '../utils/ensureUnit'\nimport getMostRecentQuantitySample from '../utils/getMostRecentQuantitySample'\nimport subscribeToChanges from '../utils/subscribeToChanges'\n\nimport type { HKQuantityTypeIdentifier, UnitForIdentifier } from '../native-types'\nimport type { HKQuantitySample } from '../types'\n\nfunction useMostRecentQuantitySample<\n TIdentifier extends HKQuantityTypeIdentifier,\n TUnit extends UnitForIdentifier<TIdentifier>\n>(identifier: TIdentifier, unit?: TUnit) {\n const [lastSample, setLastSample] = useState<HKQuantitySample<\n TIdentifier\n > | null>(null)\n\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined\n\n const init = async () => {\n const actualUnit = await ensureUnit(identifier, unit)\n\n cancelSubscription = await subscribeToChanges(identifier, async () => {\n const value = await getMostRecentQuantitySample(identifier, actualUnit)\n setLastSample(value)\n })\n }\n void init()\n\n return () => {\n void cancelSubscription?.()\n }\n }, [identifier, unit])\n\n return lastSample\n}\n\nexport default useMostRecentQuantitySample\n"],"mappings":";;;;;;;AAAA;;AAEA;;AACA;;AACA;;;;AAKA,SAASA,2BAAT,CAGEC,UAHF,EAG2BC,IAH3B,EAGyC;EACvC,MAAM,CAACC,UAAD,EAAaC,aAAb,IAA8B,IAAAC,eAAA,EAE1B,IAF0B,CAApC;EAIA,IAAAC,gBAAA,EAAU,MAAM;IACd,IAAIC,kBAAJ;;IAEA,MAAMC,IAAI,GAAG,YAAY;MACvB,MAAMC,UAAU,GAAG,MAAM,IAAAC,mBAAA,EAAWT,UAAX,EAAuBC,IAAvB,CAAzB;MAEAK,kBAAkB,GAAG,MAAM,IAAAI,2BAAA,EAAmBV,UAAnB,EAA+B,YAAY;QACpE,MAAMW,KAAK,GAAG,MAAM,IAAAC,oCAAA,EAA4BZ,UAA5B,EAAwCQ,UAAxC,CAApB;QACAL,aAAa,CAACQ,KAAD,CAAb;MACD,CAH0B,CAA3B;IAID,CAPD;;IAQA,KAAKJ,IAAI,EAAT;IAEA,OAAO,MAAM;MAAA;;MACX,6BAAKD,kBAAL,wDAAK,qBAAL;IACD,CAFD;EAGD,CAhBD,EAgBG,CAACN,UAAD,EAAaC,IAAb,CAhBH;EAkBA,OAAOC,UAAP;AACD;;eAEcH,2B"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _getMostRecentWorkout = _interopRequireDefault(require("../utils/getMostRecentWorkout"));
|
|
11
|
+
|
|
12
|
+
var _getPreferredUnitsTyped = _interopRequireDefault(require("../utils/getPreferredUnitsTyped"));
|
|
13
|
+
|
|
14
|
+
var _subscribeToChanges = _interopRequireDefault(require("../utils/subscribeToChanges"));
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
function useMostRecentWorkout(options) {
|
|
19
|
+
const [workout, setWorkout] = (0, _react.useState)(null);
|
|
20
|
+
const optionsRef = (0, _react.useRef)(options);
|
|
21
|
+
(0, _react.useEffect)(() => {
|
|
22
|
+
optionsRef.current = options;
|
|
23
|
+
}, [options]);
|
|
24
|
+
const update = (0, _react.useCallback)(async () => {
|
|
25
|
+
const {
|
|
26
|
+
energyUnit,
|
|
27
|
+
distanceUnit
|
|
28
|
+
} = await (0, _getPreferredUnitsTyped.default)(optionsRef.current);
|
|
29
|
+
setWorkout(await (0, _getMostRecentWorkout.default)({
|
|
30
|
+
energyUnit,
|
|
31
|
+
distanceUnit
|
|
32
|
+
}));
|
|
33
|
+
}, []);
|
|
34
|
+
(0, _react.useEffect)(() => {
|
|
35
|
+
void update();
|
|
36
|
+
}, [update]);
|
|
37
|
+
(0, _react.useEffect)(() => {
|
|
38
|
+
let cancelSubscription;
|
|
39
|
+
|
|
40
|
+
const init = async () => {
|
|
41
|
+
cancelSubscription = await (0, _subscribeToChanges.default)('HKWorkoutTypeIdentifier', update);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
void init();
|
|
45
|
+
return () => {
|
|
46
|
+
var _cancelSubscription;
|
|
47
|
+
|
|
48
|
+
void ((_cancelSubscription = cancelSubscription) === null || _cancelSubscription === void 0 ? void 0 : _cancelSubscription());
|
|
49
|
+
};
|
|
50
|
+
}, [update]);
|
|
51
|
+
return workout;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
var _default = useMostRecentWorkout;
|
|
55
|
+
exports.default = _default;
|
|
56
|
+
//# sourceMappingURL=useMostRecentWorkout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMostRecentWorkout","options","workout","setWorkout","useState","optionsRef","useRef","useEffect","current","update","useCallback","energyUnit","distanceUnit","getPreferredUnitsTyped","getMostRecentWorkout","cancelSubscription","init","subscribeToChanges"],"sources":["useMostRecentWorkout.ts"],"sourcesContent":["import {\n useEffect, useState, useRef, useCallback,\n} from 'react'\n\nimport getMostRecentWorkout from '../utils/getMostRecentWorkout'\nimport getPreferredUnitsTyped from '../utils/getPreferredUnitsTyped'\nimport subscribeToChanges from '../utils/subscribeToChanges'\n\nimport type { EnergyUnit, LengthUnit } from '../native-types'\nimport type { HKWorkout } from '../types'\n\nfunction useMostRecentWorkout<\n TEnergy extends EnergyUnit,\n TDistance extends LengthUnit\n>(options?: { readonly energyUnit?: TEnergy; readonly distanceUnit?: TDistance }) {\n const [workout, setWorkout] = useState<HKWorkout<TEnergy, TDistance> | null>(null)\n\n const optionsRef = useRef(options)\n\n useEffect(() => {\n optionsRef.current = options\n }, [options])\n\n const update = useCallback(async () => {\n const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(\n optionsRef.current,\n )\n\n setWorkout(await getMostRecentWorkout({\n energyUnit,\n distanceUnit,\n }))\n }, [])\n\n useEffect(() => {\n void update()\n }, [update])\n\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined\n\n const init = async () => {\n cancelSubscription = await subscribeToChanges(\n 'HKWorkoutTypeIdentifier',\n update,\n )\n }\n void init()\n\n return () => {\n void cancelSubscription?.()\n }\n }, [update])\n\n return workout\n}\n\nexport default useMostRecentWorkout\n"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;AACA;;;;AAKA,SAASA,oBAAT,CAGEC,OAHF,EAGkF;EAChF,MAAM,CAACC,OAAD,EAAUC,UAAV,IAAwB,IAAAC,eAAA,EAA+C,IAA/C,CAA9B;EAEA,MAAMC,UAAU,GAAG,IAAAC,aAAA,EAAOL,OAAP,CAAnB;EAEA,IAAAM,gBAAA,EAAU,MAAM;IACdF,UAAU,CAACG,OAAX,GAAqBP,OAArB;EACD,CAFD,EAEG,CAACA,OAAD,CAFH;EAIA,MAAMQ,MAAM,GAAG,IAAAC,kBAAA,EAAY,YAAY;IACrC,MAAM;MAAEC,UAAF;MAAcC;IAAd,IAA+B,MAAM,IAAAC,+BAAA,EACzCR,UAAU,CAACG,OAD8B,CAA3C;IAIAL,UAAU,CAAC,MAAM,IAAAW,6BAAA,EAAqB;MACpCH,UADoC;MAEpCC;IAFoC,CAArB,CAAP,CAAV;EAID,CATc,EASZ,EATY,CAAf;EAWA,IAAAL,gBAAA,EAAU,MAAM;IACd,KAAKE,MAAM,EAAX;EACD,CAFD,EAEG,CAACA,MAAD,CAFH;EAIA,IAAAF,gBAAA,EAAU,MAAM;IACd,IAAIQ,kBAAJ;;IAEA,MAAMC,IAAI,GAAG,YAAY;MACvBD,kBAAkB,GAAG,MAAM,IAAAE,2BAAA,EACzB,yBADyB,EAEzBR,MAFyB,CAA3B;IAID,CALD;;IAMA,KAAKO,IAAI,EAAT;IAEA,OAAO,MAAM;MAAA;;MACX,6BAAKD,kBAAL,wDAAK,qBAAL;IACD,CAFD;EAGD,CAdD,EAcG,CAACN,MAAD,CAdH;EAgBA,OAAOP,OAAP;AACD;;eAEcF,oB"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _queryStatisticsForQuantity = _interopRequireDefault(require("../utils/queryStatisticsForQuantity"));
|
|
11
|
+
|
|
12
|
+
var _useSubscribeToChanges = _interopRequireDefault(require("./useSubscribeToChanges"));
|
|
13
|
+
|
|
14
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
+
|
|
16
|
+
function useStatisticsForQuantity(identifier, options, from, to, unit) {
|
|
17
|
+
const [result, setResult] = (0, _react.useState)(null);
|
|
18
|
+
const optionsRef = (0, _react.useRef)(options);
|
|
19
|
+
(0, _react.useEffect)(() => {
|
|
20
|
+
optionsRef.current = options;
|
|
21
|
+
}, [options]);
|
|
22
|
+
const update = (0, _react.useCallback)(async () => {
|
|
23
|
+
const res = await (0, _queryStatisticsForQuantity.default)(identifier, optionsRef.current, from, to, unit);
|
|
24
|
+
setResult(res);
|
|
25
|
+
}, [identifier, from, to, unit]);
|
|
26
|
+
(0, _react.useEffect)(() => {
|
|
27
|
+
void update();
|
|
28
|
+
}, [update]);
|
|
29
|
+
(0, _useSubscribeToChanges.default)(identifier, update);
|
|
30
|
+
return result;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
var _default = useStatisticsForQuantity;
|
|
34
|
+
exports.default = _default;
|
|
35
|
+
//# sourceMappingURL=useStatisticsForQuantity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useStatisticsForQuantity","identifier","options","from","to","unit","result","setResult","useState","optionsRef","useRef","useEffect","current","update","useCallback","res","queryStatisticsForQuantity","useSubscribeToChanges"],"sources":["useStatisticsForQuantity.ts"],"sourcesContent":["import {\n useState, useEffect, useCallback, useRef,\n} from 'react'\n\nimport queryStatisticsForQuantity from '../utils/queryStatisticsForQuantity'\nimport useSubscribeToChanges from './useSubscribeToChanges'\n\nimport type { HKQuantityTypeIdentifier, HKStatisticsOptions, UnitForIdentifier } from '../native-types'\nimport type { QueryStatisticsResponse } from '../types'\n\nfunction useStatisticsForQuantity<TIdentifier extends HKQuantityTypeIdentifier, TUnit extends UnitForIdentifier<TIdentifier> = UnitForIdentifier<TIdentifier>>(\n identifier: TIdentifier,\n options: readonly HKStatisticsOptions[],\n from: Date,\n to?: Date,\n unit?: TUnit,\n) {\n const [result, setResult] = useState<QueryStatisticsResponse<TIdentifier, TUnit> | null>(null)\n\n const optionsRef = useRef(options)\n\n useEffect(() => {\n optionsRef.current = options\n }, [options])\n\n const update = useCallback(async () => {\n const res = await queryStatisticsForQuantity(identifier, optionsRef.current, from, to, unit)\n setResult(res)\n }, [\n identifier, from, to, unit,\n ])\n\n useEffect(() => {\n void update()\n }, [update])\n\n useSubscribeToChanges(identifier, update)\n\n return result\n}\n\nexport default useStatisticsForQuantity\n"],"mappings":";;;;;;;AAAA;;AAIA;;AACA;;;;AAKA,SAASA,wBAAT,CACEC,UADF,EAEEC,OAFF,EAGEC,IAHF,EAIEC,EAJF,EAKEC,IALF,EAME;EACA,MAAM,CAACC,MAAD,EAASC,SAAT,IAAsB,IAAAC,eAAA,EAA6D,IAA7D,CAA5B;EAEA,MAAMC,UAAU,GAAG,IAAAC,aAAA,EAAOR,OAAP,CAAnB;EAEA,IAAAS,gBAAA,EAAU,MAAM;IACdF,UAAU,CAACG,OAAX,GAAqBV,OAArB;EACD,CAFD,EAEG,CAACA,OAAD,CAFH;EAIA,MAAMW,MAAM,GAAG,IAAAC,kBAAA,EAAY,YAAY;IACrC,MAAMC,GAAG,GAAG,MAAM,IAAAC,mCAAA,EAA2Bf,UAA3B,EAAuCQ,UAAU,CAACG,OAAlD,EAA2DT,IAA3D,EAAiEC,EAAjE,EAAqEC,IAArE,CAAlB;IACAE,SAAS,CAACQ,GAAD,CAAT;EACD,CAHc,EAGZ,CACDd,UADC,EACWE,IADX,EACiBC,EADjB,EACqBC,IADrB,CAHY,CAAf;EAOA,IAAAM,gBAAA,EAAU,MAAM;IACd,KAAKE,MAAM,EAAX;EACD,CAFD,EAEG,CAACA,MAAD,CAFH;EAIA,IAAAI,8BAAA,EAAsBhB,UAAtB,EAAkCY,MAAlC;EAEA,OAAOP,MAAP;AACD;;eAEcN,wB"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _subscribeToChanges = _interopRequireDefault(require("../utils/subscribeToChanges"));
|
|
11
|
+
|
|
12
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
13
|
+
|
|
14
|
+
function useSubscribeToChanges(identifier, onChange) {
|
|
15
|
+
const onChangeRef = (0, _react.useRef)(onChange);
|
|
16
|
+
(0, _react.useEffect)(() => {
|
|
17
|
+
onChangeRef.current = onChange;
|
|
18
|
+
}, [onChange]);
|
|
19
|
+
(0, _react.useEffect)(() => {
|
|
20
|
+
let cancelSubscription;
|
|
21
|
+
|
|
22
|
+
const init = async () => {
|
|
23
|
+
cancelSubscription = await (0, _subscribeToChanges.default)(identifier, onChangeRef.current);
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
void init();
|
|
27
|
+
return () => {
|
|
28
|
+
var _cancelSubscription;
|
|
29
|
+
|
|
30
|
+
void ((_cancelSubscription = cancelSubscription) === null || _cancelSubscription === void 0 ? void 0 : _cancelSubscription());
|
|
31
|
+
};
|
|
32
|
+
}, [identifier]);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
var _default = useSubscribeToChanges;
|
|
36
|
+
exports.default = _default;
|
|
37
|
+
//# sourceMappingURL=useSubscribeToChanges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useSubscribeToChanges","identifier","onChange","onChangeRef","useRef","useEffect","current","cancelSubscription","init","subscribeToChanges"],"sources":["useSubscribeToChanges.ts"],"sourcesContent":["import { useEffect, useRef } from 'react'\n\nimport subscribeToChanges from '../utils/subscribeToChanges'\n\nimport type { HKSampleTypeIdentifier } from '..'\n\nfunction useSubscribeToChanges<TIdentifier extends HKSampleTypeIdentifier>(\n identifier: TIdentifier,\n onChange: () => void,\n): void {\n const onChangeRef = useRef(onChange)\n\n useEffect(() => {\n onChangeRef.current = onChange\n }, [onChange])\n\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined\n\n const init = async () => {\n cancelSubscription = await subscribeToChanges(identifier, onChangeRef.current)\n }\n void init()\n\n return () => {\n void cancelSubscription?.()\n }\n }, [identifier])\n}\n\nexport default useSubscribeToChanges\n"],"mappings":";;;;;;;AAAA;;AAEA;;;;AAIA,SAASA,qBAAT,CACEC,UADF,EAEEC,QAFF,EAGQ;EACN,MAAMC,WAAW,GAAG,IAAAC,aAAA,EAAOF,QAAP,CAApB;EAEA,IAAAG,gBAAA,EAAU,MAAM;IACdF,WAAW,CAACG,OAAZ,GAAsBJ,QAAtB;EACD,CAFD,EAEG,CAACA,QAAD,CAFH;EAIA,IAAAG,gBAAA,EAAU,MAAM;IACd,IAAIE,kBAAJ;;IAEA,MAAMC,IAAI,GAAG,YAAY;MACvBD,kBAAkB,GAAG,MAAM,IAAAE,2BAAA,EAAmBR,UAAnB,EAA+BE,WAAW,CAACG,OAA3C,CAA3B;IACD,CAFD;;IAGA,KAAKE,IAAI,EAAT;IAEA,OAAO,MAAM;MAAA;;MACX,6BAAKD,kBAAL,wDAAK,qBAAL;IACD,CAFD;EAGD,CAXD,EAWG,CAACN,UAAD,CAXH;AAYD;;eAEcD,qB"}
|