@kingstinct/react-native-healthkit 4.3.0 → 4.4.2

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.
@@ -1,5 +1,5 @@
1
1
  import { useCallback, useEffect, useState } from 'react';
2
- import Native, { EventEmitter, HKQuantityTypeIdentifier, HKUnit } from './native-types';
2
+ import Native, { EventEmitter, HKQuantityTypeIdentifier, HKUnit, HKCategoryTypeIdentifier } from './native-types';
3
3
 
4
4
  const getPreferredUnit = async type => {
5
5
  const [unit] = await getPreferredUnits([type]);
@@ -29,22 +29,16 @@ function deserializeWorkout(sample) {
29
29
  };
30
30
  }
31
31
 
32
- const deserializCategorySample = sample => {
33
- return { ...sample,
34
- startDate: new Date(sample.startDate),
35
- endDate: new Date(sample.endDate)
36
- };
37
- };
32
+ const deserializCategorySample = sample => ({ ...sample,
33
+ startDate: new Date(sample.startDate),
34
+ endDate: new Date(sample.endDate)
35
+ });
38
36
 
39
- const serializeDate = date => {
40
- return date ? date.toISOString() : new Date(0).toISOString();
41
- };
37
+ const serializeDate = date => date ? date.toISOString() : new Date(0).toISOString();
42
38
 
43
39
  const prepareOptions = options => {
44
- var _options$ascending;
45
-
46
40
  const limit = !options.limit || options.limit === Infinity ? 0 : options.limit;
47
- const ascending = (_options$ascending = options.ascending) !== null && _options$ascending !== void 0 ? _options$ascending : limit === 0;
41
+ const ascending = options.ascending ?? limit === 0;
48
42
  const from = serializeDate(options.from);
49
43
  const to = serializeDate(options.to);
50
44
  return {
@@ -62,6 +56,36 @@ const queryQuantitySamples = async (identifier, options) => {
62
56
  return quantitySamples.map(deserializeSample);
63
57
  };
64
58
 
59
+ async function getPreferredUnitsTyped(options) {
60
+ let energyUnit = options === null || options === void 0 ? void 0 : options.energyUnit;
61
+ let distanceUnit = options === null || options === void 0 ? void 0 : options.distanceUnit;
62
+
63
+ if (!energyUnit || !distanceUnit) {
64
+ const units = await Native.getPreferredUnits([HKQuantityTypeIdentifier.distanceWalkingRunning, HKQuantityTypeIdentifier.activeEnergyBurned]);
65
+
66
+ if (!energyUnit) {
67
+ energyUnit = units[HKQuantityTypeIdentifier.distanceWalkingRunning];
68
+ }
69
+
70
+ if (!distanceUnit) {
71
+ distanceUnit = units[HKQuantityTypeIdentifier.activeEnergyBurned];
72
+ }
73
+ }
74
+
75
+ if (!energyUnit) {
76
+ energyUnit = HKUnit.Kilocalories;
77
+ }
78
+
79
+ if (!distanceUnit) {
80
+ distanceUnit = HKUnit.Meters;
81
+ }
82
+
83
+ return {
84
+ energyUnit,
85
+ distanceUnit
86
+ };
87
+ }
88
+
65
89
  const subscribeToChanges = async (identifier, callback) => {
66
90
  const subscription = EventEmitter.addListener('onChange', _ref => {
67
91
  let {
@@ -72,11 +96,11 @@ const subscribeToChanges = async (identifier, callback) => {
72
96
  callback();
73
97
  }
74
98
  });
75
- const queryId = await Native.subscribeToObserverQuery(identifier).catch(error => {
99
+ const queryId = await Native.subscribeToObserverQuery(identifier).catch(async error => {
76
100
  subscription.remove();
77
101
  return Promise.reject(error);
78
102
  });
79
- return () => {
103
+ return async () => {
80
104
  subscription.remove();
81
105
  return Native.unsubscribeQuery(queryId);
82
106
  };
@@ -85,7 +109,7 @@ const subscribeToChanges = async (identifier, callback) => {
85
109
  const getMostRecentQuantitySample = async (identifier, unit) => {
86
110
  const samples = await queryQuantitySamples(identifier, {
87
111
  limit: 1,
88
- unit: unit
112
+ unit
89
113
  });
90
114
  return samples[0];
91
115
  };
@@ -100,17 +124,20 @@ function useMostRecentWorkout(options) {
100
124
  energyUnit,
101
125
  distanceUnit
102
126
  } = await getPreferredUnitsTyped(options);
103
- cancelSubscription = await subscribeToChanges('HKWorkoutTypeIdentifier', () => {
104
- getMostRecentWorkout({
127
+ cancelSubscription = await subscribeToChanges('HKWorkoutTypeIdentifier', async () => {
128
+ const w = await getMostRecentWorkout({
105
129
  energyUnit,
106
130
  distanceUnit
107
- }).then(setWorkout);
131
+ });
132
+ setWorkout(w);
108
133
  });
109
134
  };
110
135
 
111
- init();
136
+ void init();
112
137
  return () => {
113
- cancelSubscription && cancelSubscription();
138
+ var _cancelSubscription;
139
+
140
+ void ((_cancelSubscription = cancelSubscription) === null || _cancelSubscription === void 0 ? void 0 : _cancelSubscription());
114
141
  };
115
142
  }, [options]);
116
143
  return workout;
@@ -124,15 +151,6 @@ const getMostRecentCategorySample = async identifier => {
124
151
  return samples[0];
125
152
  };
126
153
 
127
- function useMostRecentCategorySample(identifier) {
128
- const [category, setCategory] = useState(null);
129
- const updater = useCallback(() => {
130
- getMostRecentCategorySample(identifier).then(setCategory);
131
- }, [identifier]);
132
- useSubscribeToChanges(identifier, updater);
133
- return category;
134
- }
135
-
136
154
  function useSubscribeToChanges(identifier, onChange) {
137
155
  useEffect(() => {
138
156
  let cancelSubscription;
@@ -141,13 +159,26 @@ function useSubscribeToChanges(identifier, onChange) {
141
159
  cancelSubscription = await subscribeToChanges(identifier, onChange);
142
160
  };
143
161
 
144
- init();
162
+ void init();
145
163
  return () => {
146
- cancelSubscription && cancelSubscription();
164
+ var _cancelSubscription2;
165
+
166
+ void ((_cancelSubscription2 = cancelSubscription) === null || _cancelSubscription2 === void 0 ? void 0 : _cancelSubscription2());
147
167
  };
148
168
  }, [identifier, onChange]);
149
169
  }
150
170
 
171
+ useSubscribeToChanges(HKCategoryTypeIdentifier.appleStandHour, () => {});
172
+
173
+ function useMostRecentCategorySample(identifier) {
174
+ const [category, setCategory] = useState(null);
175
+ const updater = useCallback(() => {
176
+ void getMostRecentCategorySample(identifier).then(setCategory);
177
+ }, [identifier]);
178
+ useSubscribeToChanges(identifier, updater);
179
+ return category;
180
+ }
181
+
151
182
  function useMostRecentQuantitySample(identifier, unit) {
152
183
  const [lastSample, setLastSample] = useState(null);
153
184
  useEffect(() => {
@@ -155,22 +186,23 @@ function useMostRecentQuantitySample(identifier, unit) {
155
186
 
156
187
  const init = async () => {
157
188
  const actualUnit = await ensureUnit(identifier, unit);
158
- cancelSubscription = await subscribeToChanges(identifier, () => {
159
- getMostRecentQuantitySample(identifier, actualUnit).then(value => {
160
- setLastSample(value);
161
- });
189
+ cancelSubscription = await subscribeToChanges(identifier, async () => {
190
+ const value = await getMostRecentQuantitySample(identifier, actualUnit);
191
+ setLastSample(value);
162
192
  });
163
193
  };
164
194
 
165
- init();
195
+ void init();
166
196
  return () => {
167
- cancelSubscription && cancelSubscription();
197
+ var _cancelSubscription3;
198
+
199
+ void ((_cancelSubscription3 = cancelSubscription) === null || _cancelSubscription3 === void 0 ? void 0 : _cancelSubscription3());
168
200
  };
169
201
  }, [identifier, unit]);
170
202
  return lastSample;
171
203
  }
172
204
 
173
- const saveQuantitySample = (identifier, unit, value, options) => {
205
+ const saveQuantitySample = async (identifier, unit, value, options) => {
174
206
  const start = (options === null || options === void 0 ? void 0 : options.start) || (options === null || options === void 0 ? void 0 : options.end) || new Date();
175
207
  const end = (options === null || options === void 0 ? void 0 : options.end) || (options === null || options === void 0 ? void 0 : options.start) || new Date();
176
208
  const metadata = (options === null || options === void 0 ? void 0 : options.metadata) || {};
@@ -195,18 +227,14 @@ const queryStatisticsForQuantity = async (identifier, options, from, to, unit) =
195
227
  return response;
196
228
  };
197
229
 
198
- const requestAuthorization = function (read) {
230
+ const requestAuthorization = async function (read) {
199
231
  let write = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
200
- const readPermissions = read.reduce((obj, cur) => {
201
- return { ...obj,
202
- [cur]: true
203
- };
204
- }, {});
205
- const writePermissions = write.reduce((obj, cur) => {
206
- return { ...obj,
207
- [cur]: true
208
- };
209
- }, {});
232
+ const readPermissions = read.reduce((obj, cur) => ({ ...obj,
233
+ [cur]: true
234
+ }), {});
235
+ const writePermissions = write.reduce((obj, cur) => ({ ...obj,
236
+ [cur]: true
237
+ }), {});
210
238
  return Native.requestAuthorization(writePermissions, readPermissions);
211
239
  };
212
240
 
@@ -215,18 +243,14 @@ const getDateOfBirth = async () => {
215
243
  return new Date(dateOfBirth);
216
244
  };
217
245
 
218
- const getRequestStatusForAuthorization = function (read) {
246
+ const getRequestStatusForAuthorization = async function (read) {
219
247
  let write = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
220
- const readPermissions = read.reduce((obj, cur) => {
221
- return { ...obj,
222
- [cur]: true
223
- };
224
- }, {});
225
- const writePermissions = write.reduce((obj, cur) => {
226
- return { ...obj,
227
- [cur]: true
228
- };
229
- }, {});
248
+ const readPermissions = read.reduce((obj, cur) => ({ ...obj,
249
+ [cur]: true
250
+ }), {});
251
+ const writePermissions = write.reduce((obj, cur) => ({ ...obj,
252
+ [cur]: true
253
+ }), {});
230
254
  return Native.getRequestStatusForAuthorization(writePermissions, readPermissions);
231
255
  };
232
256
 
@@ -236,36 +260,6 @@ const queryCategorySamples = async (identifier, options) => {
236
260
  return results.map(deserializCategorySample);
237
261
  };
238
262
 
239
- async function getPreferredUnitsTyped(options) {
240
- let energyUnit = options === null || options === void 0 ? void 0 : options.energyUnit;
241
- let distanceUnit = options === null || options === void 0 ? void 0 : options.distanceUnit;
242
-
243
- if (!energyUnit || !distanceUnit) {
244
- const units = await Native.getPreferredUnits([HKQuantityTypeIdentifier.distanceWalkingRunning, HKQuantityTypeIdentifier.activeEnergyBurned]);
245
-
246
- if (!energyUnit) {
247
- energyUnit = units[HKQuantityTypeIdentifier.distanceWalkingRunning];
248
- }
249
-
250
- if (!distanceUnit) {
251
- distanceUnit = units[HKQuantityTypeIdentifier.activeEnergyBurned];
252
- }
253
- }
254
-
255
- if (!energyUnit) {
256
- energyUnit = HKUnit.Kilocalories;
257
- }
258
-
259
- if (!distanceUnit) {
260
- distanceUnit = HKUnit.Meters;
261
- }
262
-
263
- return {
264
- energyUnit,
265
- distanceUnit
266
- };
267
- }
268
-
269
263
  const queryWorkouts = async options => {
270
264
  const {
271
265
  energyUnit,
@@ -286,7 +280,7 @@ const getMostRecentWorkout = async options => {
286
280
  return workouts[0];
287
281
  };
288
282
 
289
- function saveCategorySample(identifier, value, options) {
283
+ async function saveCategorySample(identifier, value, options) {
290
284
  const start = (options === null || options === void 0 ? void 0 : options.start) || (options === null || options === void 0 ? void 0 : options.end) || new Date();
291
285
  const end = (options === null || options === void 0 ? void 0 : options.end) || (options === null || options === void 0 ? void 0 : options.start) || new Date();
292
286
  const metadata = (options === null || options === void 0 ? void 0 : options.metadata) || {};
@@ -298,13 +292,12 @@ const getPreferredUnits = async identifiers => {
298
292
  return identifiers.map(i => units[i]);
299
293
  };
300
294
 
301
- const buildUnitWithPrefix = (prefix, unit) => {
302
- return `${prefix}${unit}`;
303
- };
295
+ const buildUnitWithPrefix = (prefix, unit) => `${prefix}${unit}`;
304
296
 
305
297
  function deserializeCorrelation(s) {
306
298
  return { ...s,
307
299
  objects: s.objects.map(o => {
300
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
308
301
  // @ts-ignore
309
302
  if (o.quantity !== undefined) {
310
303
  return deserializeSample(o);
@@ -333,29 +326,27 @@ const saveCorrelationSample = async (typeIdentifier, samples, options) => {
333
326
  return Native.saveCorrelationSample(typeIdentifier, samples, start, end, ensureMetadata(options === null || options === void 0 ? void 0 : options.metadata));
334
327
  };
335
328
 
336
- const saveWorkoutSample = (typeIdentifier, quantities, _start, options) => {
329
+ const saveWorkoutSample = async (typeIdentifier, quantities, _start, options) => {
337
330
  const start = _start.toISOString();
338
331
 
339
332
  const end = ((options === null || options === void 0 ? void 0 : options.end) || new Date()).toISOString();
340
333
  return Native.saveWorkoutSample(typeIdentifier, quantities, start, end, ensureMetadata(options === null || options === void 0 ? void 0 : options.metadata));
341
334
  };
342
335
 
343
- const getWorkoutRoutes = workoutUUID => {
344
- return Native.getWorkoutRoutes(workoutUUID);
345
- };
336
+ const getWorkoutRoutes = async workoutUUID => Native.getWorkoutRoutes(workoutUUID);
346
337
 
347
338
  const Healthkit = {
348
- authorizationStatusFor: Native.authorizationStatusFor,
349
- isHealthDataAvailable: Native.isHealthDataAvailable,
339
+ authorizationStatusFor: Native.authorizationStatusFor.bind(Native),
340
+ isHealthDataAvailable: Native.isHealthDataAvailable.bind(Native),
350
341
  buildUnitWithPrefix,
351
342
  disableAllBackgroundDelivery: Native.disableAllBackgroundDelivery,
352
343
  disableBackgroundDelivery: Native.disableBackgroundDelivery,
353
344
  enableBackgroundDelivery: Native.enableBackgroundDelivery,
354
345
  // simple convenience getters
355
- getBiologicalSex: Native.getBiologicalSex,
356
- getFitzpatrickSkinType: Native.getFitzpatrickSkinType,
346
+ getBiologicalSex: Native.getBiologicalSex.bind(Native),
347
+ getFitzpatrickSkinType: Native.getFitzpatrickSkinType.bind(Native),
357
348
  getWheelchairUse: Native.getWheelchairUse,
358
- getBloodType: Native.getBloodType,
349
+ getBloodType: Native.getBloodType.bind(Native),
359
350
  getDateOfBirth,
360
351
  getMostRecentQuantitySample,
361
352
  getMostRecentCategorySample,
@@ -382,7 +373,35 @@ const Healthkit = {
382
373
  useMostRecentCategorySample,
383
374
  useMostRecentQuantitySample,
384
375
  useMostRecentWorkout,
385
- useSubscribeToChanges
376
+ useSubscribeToChanges,
377
+ useIsHealthDataAvailable: () => {
378
+ const [isAvailable, setIsAvailable] = useState(null);
379
+ useEffect(() => {
380
+ const init = async () => {
381
+ const res = await Native.isHealthDataAvailable();
382
+ setIsAvailable(res);
383
+ };
384
+
385
+ void init();
386
+ }, []);
387
+ return isAvailable;
388
+ },
389
+ useHealthkitAuthorization: (read, write) => {
390
+ const [status, setStatus] = useState(null);
391
+ const refreshAuthStatus = useCallback(async () => {
392
+ const auth = await getRequestStatusForAuthorization(read, write);
393
+ setStatus(auth);
394
+ return auth;
395
+ }, []);
396
+ const request = useCallback(async () => {
397
+ await requestAuthorization(read, write);
398
+ return refreshAuthStatus();
399
+ }, []);
400
+ useEffect(() => {
401
+ void refreshAuthStatus();
402
+ }, []);
403
+ return [status, request];
404
+ }
386
405
  };
387
406
  export * from './native-types';
388
407
  export * from './types';
@@ -1 +1 @@
1
- {"version":3,"names":["useCallback","useEffect","useState","Native","EventEmitter","HKQuantityTypeIdentifier","HKUnit","getPreferredUnit","type","unit","getPreferredUnits","ensureUnit","providedUnit","deserializeSample","sample","startDate","Date","endDate","deserializeWorkout","deserializCategorySample","serializeDate","date","toISOString","prepareOptions","options","limit","Infinity","ascending","from","to","queryQuantitySamples","identifier","opts","quantitySamples","map","subscribeToChanges","callback","subscription","addListener","typeIdentifier","queryId","subscribeToObserverQuery","catch","error","remove","Promise","reject","unsubscribeQuery","getMostRecentQuantitySample","samples","useMostRecentWorkout","workout","setWorkout","cancelSubscription","init","energyUnit","distanceUnit","getPreferredUnitsTyped","getMostRecentWorkout","then","getMostRecentCategorySample","queryCategorySamples","useMostRecentCategorySample","category","setCategory","updater","useSubscribeToChanges","onChange","useMostRecentQuantitySample","lastSample","setLastSample","actualUnit","value","saveQuantitySample","start","end","metadata","queryStatisticsForQuantity","toDate","mostRecentQuantityDateInterval","rawResponse","response","requestAuthorization","read","write","readPermissions","reduce","obj","cur","writePermissions","getDateOfBirth","dateOfBirth","getRequestStatusForAuthorization","results","units","distanceWalkingRunning","activeEnergyBurned","Kilocalories","Meters","queryWorkouts","workouts","queryWorkoutSamples","saveCategorySample","identifiers","i","buildUnitWithPrefix","prefix","deserializeCorrelation","s","objects","o","quantity","undefined","ensureMetadata","queryCorrelationSamples","correlations","saveCorrelationSample","saveWorkoutSample","quantities","_start","getWorkoutRoutes","workoutUUID","Healthkit","authorizationStatusFor","isHealthDataAvailable","disableAllBackgroundDelivery","disableBackgroundDelivery","enableBackgroundDelivery","getBiologicalSex","getFitzpatrickSkinType","getWheelchairUse","getBloodType"],"sources":["index.ios.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport Native, {\n EventEmitter,\n HKCategorySampleRaw,\n HKCategoryTypeIdentifier,\n HKCategoryValueForIdentifier,\n HKCharacteristicTypeIdentifier,\n HKCorrelationRaw,\n HKCorrelationTypeIdentifier,\n HKQuantitySampleRaw,\n HKQuantityTypeIdentifier,\n HKSampleTypeIdentifier,\n HKUnit,\n HKUnitSI,\n HKUnitSIPrefix,\n HKWorkoutRaw,\n MetadataMapperForCategoryIdentifier,\n} from './native-types';\nimport type {\n GenericQueryOptions,\n GetMostRecentCategorySampleFn,\n GetMostRecentQuantitySampleFn,\n GetMostRecentWorkoutFn,\n GetPreferredUnitFn,\n GetPreferredUnitsFn,\n GetWorkoutRoutesFn,\n HKCategorySample,\n HKCorrelation,\n HKQuantitySample,\n HKWorkout,\n QueryCategorySamplesFn,\n QueryCorrelationSamplesFn,\n QueryQuantitySamplesFn,\n QueryStatisticsForQuantityFn,\n QueryWorkoutsFn,\n ReactNativeHealthkit,\n SaveCorrelationSampleFn,\n SaveQuantitySampleFn,\n SaveWorkoutSampleFn,\n SubscribeToChangesFn,\n} from './types';\n\nconst getPreferredUnit: GetPreferredUnitFn = async (type) => {\n const [unit] = await getPreferredUnits([type]);\n return unit;\n};\n\nconst ensureUnit = async <TUnit extends HKUnit>(\n type: HKQuantityTypeIdentifier,\n providedUnit?: TUnit\n) => {\n if (providedUnit) {\n return providedUnit;\n }\n const unit = await Native.getPreferredUnits([type]);\n return unit[type] as TUnit;\n};\n\nfunction deserializeSample<\n TIdentifier extends HKQuantityTypeIdentifier,\n TUnit extends HKUnit\n>(\n sample: HKQuantitySampleRaw<TIdentifier, TUnit>\n): HKQuantitySample<TIdentifier, TUnit> {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n };\n}\n\nfunction deserializeWorkout<TEnergy extends HKUnit, TDistance extends HKUnit>(\n sample: HKWorkoutRaw<TEnergy, TDistance>\n): HKWorkout<TEnergy, TDistance> {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n };\n}\n\nconst deserializCategorySample = <T extends HKCategoryTypeIdentifier>(\n sample: HKCategorySampleRaw<T>\n): HKCategorySample<T> => {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n };\n};\n\nconst serializeDate = (date?: Date | null): string => {\n return date ? date.toISOString() : new Date(0).toISOString();\n};\n\nconst prepareOptions = (options: GenericQueryOptions) => {\n const limit =\n !options.limit || options.limit === Infinity ? 0 : options.limit;\n const ascending = options.ascending ?? limit === 0;\n const from = serializeDate(options.from);\n const to = serializeDate(options.to);\n return { limit, ascending, from, to };\n};\n\nconst queryQuantitySamples: QueryQuantitySamplesFn = async (\n identifier,\n options\n) => {\n const unit = await ensureUnit(identifier, options.unit);\n const opts = prepareOptions(options);\n\n const quantitySamples = await Native.queryQuantitySamples(\n identifier,\n unit,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending\n );\n\n return quantitySamples.map(deserializeSample);\n};\n\nconst subscribeToChanges: SubscribeToChangesFn = async (\n identifier,\n callback\n) => {\n const subscription = EventEmitter.addListener(\n 'onChange',\n ({ typeIdentifier }) => {\n if (typeIdentifier === identifier) {\n callback();\n }\n }\n );\n\n const queryId = await Native.subscribeToObserverQuery(identifier).catch(\n (error) => {\n subscription.remove();\n return Promise.reject(error);\n }\n );\n\n return () => {\n subscription.remove();\n return Native.unsubscribeQuery(queryId);\n };\n};\n\nconst getMostRecentQuantitySample: GetMostRecentQuantitySampleFn = async (\n identifier,\n unit\n) => {\n const samples = await queryQuantitySamples(identifier, {\n limit: 1,\n unit: unit,\n });\n return samples[0];\n};\n\nfunction useMostRecentWorkout<\n TEnergy extends HKUnit,\n TDistance extends HKUnit\n>(options?: { energyUnit?: TEnergy; distanceUnit?: TDistance }) {\n const [workout, setWorkout] = useState<HKWorkout<TEnergy, TDistance> | null>(\n null\n );\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined;\n\n const init = async () => {\n const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(\n options\n );\n\n cancelSubscription = await subscribeToChanges(\n 'HKWorkoutTypeIdentifier',\n () => {\n getMostRecentWorkout({ energyUnit, distanceUnit }).then(setWorkout);\n }\n );\n };\n init();\n return () => {\n cancelSubscription && cancelSubscription();\n };\n }, [options]);\n return workout;\n}\n\nconst getMostRecentCategorySample: GetMostRecentCategorySampleFn = async (\n identifier\n) => {\n const samples = await queryCategorySamples(identifier, {\n limit: 1,\n ascending: false,\n });\n\n return samples[0];\n};\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 getMostRecentCategorySample(identifier).then(setCategory);\n }, [identifier]);\n\n useSubscribeToChanges(identifier, updater);\n\n return category;\n}\n\nfunction useSubscribeToChanges<TIdentifier extends HKSampleTypeIdentifier>(\n identifier: TIdentifier,\n onChange: () => void\n): void {\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined;\n\n const init = async () => {\n cancelSubscription = await subscribeToChanges(identifier, onChange);\n };\n init();\n\n return () => {\n cancelSubscription && cancelSubscription();\n };\n }, [identifier, onChange]);\n}\n\nfunction useMostRecentQuantitySample<\n TIdentifier extends HKQuantityTypeIdentifier,\n TUnit extends HKUnit = HKUnit\n>(identifier: TIdentifier, unit?: TUnit) {\n const [lastSample, setLastSample] = useState<HKQuantitySample<\n TIdentifier,\n TUnit\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, () => {\n getMostRecentQuantitySample(identifier, actualUnit).then((value) => {\n setLastSample(value);\n });\n });\n };\n init();\n\n return () => {\n cancelSubscription && cancelSubscription();\n };\n }, [identifier, unit]);\n\n return lastSample;\n}\n\nconst saveQuantitySample: SaveQuantitySampleFn = (\n identifier,\n unit,\n value,\n options\n) => {\n const start = options?.start || options?.end || new Date();\n const end = options?.end || options?.start || new Date();\n const metadata = options?.metadata || {};\n\n return Native.saveQuantitySample(\n identifier,\n unit,\n value,\n start.toISOString(),\n end.toISOString(),\n metadata\n );\n};\n\nconst queryStatisticsForQuantity: QueryStatisticsForQuantityFn = async (\n identifier,\n options,\n from,\n to,\n unit\n) => {\n const actualUnit = await ensureUnit(identifier, unit);\n const toDate = to || new Date();\n const { mostRecentQuantityDateInterval, ...rawResponse } =\n await Native.queryStatisticsForQuantity(\n identifier,\n actualUnit,\n from.toISOString(),\n toDate.toISOString(),\n options\n );\n\n const response = {\n ...rawResponse,\n ...(mostRecentQuantityDateInterval\n ? {\n mostRecentQuantityDateInterval: {\n from: new Date(mostRecentQuantityDateInterval.from),\n to: new Date(mostRecentQuantityDateInterval.to),\n },\n }\n : {}),\n };\n\n return response;\n};\n\nconst requestAuthorization = (\n read: (HKCharacteristicTypeIdentifier | HKSampleTypeIdentifier)[],\n write: HKSampleTypeIdentifier[] = []\n): Promise<boolean> => {\n const readPermissions = read.reduce((obj, cur) => {\n return { ...obj, [cur]: true };\n }, {});\n\n const writePermissions = write.reduce((obj, cur) => {\n return { ...obj, [cur]: true };\n }, {});\n\n return Native.requestAuthorization(writePermissions, readPermissions);\n};\n\nconst getDateOfBirth = async () => {\n const dateOfBirth = await Native.getDateOfBirth();\n return new Date(dateOfBirth);\n};\n\nconst getRequestStatusForAuthorization = (\n read: (HKCharacteristicTypeIdentifier | HKSampleTypeIdentifier)[],\n write: HKSampleTypeIdentifier[] = []\n) => {\n const readPermissions = read.reduce((obj, cur) => {\n return { ...obj, [cur]: true };\n }, {});\n\n const writePermissions = write.reduce((obj, cur) => {\n return { ...obj, [cur]: true };\n }, {});\n\n return Native.getRequestStatusForAuthorization(\n writePermissions,\n readPermissions\n );\n};\n\nconst queryCategorySamples: QueryCategorySamplesFn = async (\n identifier,\n options\n) => {\n const opts = prepareOptions(options);\n const results = await Native.queryCategorySamples(\n identifier,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending\n );\n\n return results.map(deserializCategorySample);\n};\n\nasync function getPreferredUnitsTyped<\n TEnergy extends HKUnit,\n TDistance extends HKUnit\n>(options?: { energyUnit?: TEnergy; distanceUnit?: TDistance }) {\n let energyUnit = options?.energyUnit;\n let distanceUnit = options?.distanceUnit;\n if (!energyUnit || !distanceUnit) {\n const units = await Native.getPreferredUnits([\n HKQuantityTypeIdentifier.distanceWalkingRunning,\n HKQuantityTypeIdentifier.activeEnergyBurned,\n ]);\n if (!energyUnit) {\n energyUnit = units[HKQuantityTypeIdentifier.distanceWalkingRunning] as\n | TEnergy\n | undefined;\n }\n if (!distanceUnit) {\n distanceUnit = units[HKQuantityTypeIdentifier.activeEnergyBurned] as\n | TDistance\n | undefined;\n }\n }\n if (!energyUnit) {\n energyUnit = HKUnit.Kilocalories as TEnergy;\n }\n if (!distanceUnit) {\n distanceUnit = HKUnit.Meters as TDistance;\n }\n return { energyUnit, distanceUnit };\n}\n\nconst queryWorkouts: QueryWorkoutsFn = async (options) => {\n const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(options);\n const opts = prepareOptions(options);\n\n const workouts = await Native.queryWorkoutSamples(\n energyUnit,\n distanceUnit,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending\n );\n\n return workouts.map(deserializeWorkout);\n};\n\nconst getMostRecentWorkout: GetMostRecentWorkoutFn = async (options) => {\n const workouts = await queryWorkouts({\n limit: 1,\n ascending: false,\n energyUnit: options?.energyUnit,\n distanceUnit: options?.distanceUnit,\n });\n\n return workouts[0];\n};\n\nfunction saveCategorySample<T extends HKCategoryTypeIdentifier>(\n identifier: T,\n value: HKCategoryValueForIdentifier<T>,\n options?: {\n start?: Date;\n end?: Date;\n metadata?: MetadataMapperForCategoryIdentifier<T>;\n }\n) {\n const start = options?.start || options?.end || new Date();\n const end = options?.end || options?.start || new Date();\n const metadata = options?.metadata || {};\n\n return Native.saveCategorySample(\n identifier,\n value,\n start.toISOString(),\n end.toISOString(),\n metadata || {}\n );\n}\n\nconst getPreferredUnits: GetPreferredUnitsFn = async (identifiers) => {\n const units = await Native.getPreferredUnits(identifiers);\n return identifiers.map((i) => units[i]);\n};\n\nconst buildUnitWithPrefix = (prefix: HKUnitSIPrefix, unit: HKUnitSI) => {\n return `${prefix}${unit}` as HKUnit;\n};\n\nfunction deserializeCorrelation<\n TIdentifier extends HKCorrelationTypeIdentifier\n>(s: HKCorrelationRaw<TIdentifier>): HKCorrelation<TIdentifier> {\n return {\n ...s,\n objects: s.objects.map((o) => {\n // @ts-ignore\n if (o.quantity !== undefined) {\n return deserializeSample(o as HKQuantitySampleRaw);\n }\n\n return deserializCategorySample(o as HKCategorySampleRaw);\n }),\n endDate: new Date(s.endDate),\n startDate: new Date(s.startDate),\n };\n}\n\nfunction ensureMetadata<TMetadata>(metadata?: TMetadata) {\n return metadata || ({} as TMetadata);\n}\n\nconst queryCorrelationSamples: QueryCorrelationSamplesFn = async (\n typeIdentifier,\n options\n) => {\n const opts = prepareOptions(options);\n const correlations = await Native.queryCorrelationSamples(\n typeIdentifier,\n opts.from,\n opts.to\n );\n\n return correlations.map(deserializeCorrelation);\n};\n\nconst saveCorrelationSample: SaveCorrelationSampleFn = async (\n typeIdentifier,\n samples,\n options\n) => {\n const start = (options?.start || new Date()).toISOString();\n const end = (options?.end || new Date()).toISOString();\n\n return Native.saveCorrelationSample(\n typeIdentifier,\n samples,\n start,\n end,\n ensureMetadata(options?.metadata)\n );\n};\n\nconst saveWorkoutSample: SaveWorkoutSampleFn = (\n typeIdentifier,\n quantities,\n _start,\n options\n) => {\n const start = _start.toISOString();\n const end = (options?.end || new Date()).toISOString();\n\n return Native.saveWorkoutSample(\n typeIdentifier,\n quantities,\n start,\n end,\n ensureMetadata(options?.metadata)\n );\n};\n\nconst getWorkoutRoutes: GetWorkoutRoutesFn = (workoutUUID: string) => {\n return Native.getWorkoutRoutes(workoutUUID);\n};\n\nconst Healthkit: ReactNativeHealthkit = {\n authorizationStatusFor: Native.authorizationStatusFor,\n\n isHealthDataAvailable: Native.isHealthDataAvailable,\n\n buildUnitWithPrefix,\n\n disableAllBackgroundDelivery: Native.disableAllBackgroundDelivery,\n disableBackgroundDelivery: Native.disableBackgroundDelivery,\n enableBackgroundDelivery: Native.enableBackgroundDelivery,\n\n // simple convenience getters\n getBiologicalSex: Native.getBiologicalSex,\n getFitzpatrickSkinType: Native.getFitzpatrickSkinType,\n getWheelchairUse: Native.getWheelchairUse,\n getBloodType: Native.getBloodType,\n getDateOfBirth,\n\n getMostRecentQuantitySample,\n getMostRecentCategorySample,\n getMostRecentWorkout,\n\n getPreferredUnit,\n getPreferredUnits,\n getRequestStatusForAuthorization,\n\n getWorkoutRoutes,\n\n // query methods\n queryCategorySamples,\n queryCorrelationSamples,\n queryQuantitySamples,\n queryStatisticsForQuantity,\n queryWorkouts,\n\n requestAuthorization,\n\n // save methods\n saveCategorySample,\n saveCorrelationSample,\n saveQuantitySample,\n saveWorkoutSample,\n\n // subscriptions\n subscribeToChanges,\n\n // hooks\n useMostRecentCategorySample,\n\n useMostRecentQuantitySample,\n useMostRecentWorkout,\n\n useSubscribeToChanges,\n};\n\nexport * from './native-types';\nexport * from './types';\n\nexport default Healthkit;\n"],"mappings":"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"}
1
+ {"version":3,"names":["useCallback","useEffect","useState","Native","EventEmitter","HKQuantityTypeIdentifier","HKUnit","HKCategoryTypeIdentifier","getPreferredUnit","type","unit","getPreferredUnits","ensureUnit","providedUnit","deserializeSample","sample","startDate","Date","endDate","deserializeWorkout","deserializCategorySample","serializeDate","date","toISOString","prepareOptions","options","limit","Infinity","ascending","from","to","queryQuantitySamples","identifier","opts","quantitySamples","map","getPreferredUnitsTyped","energyUnit","distanceUnit","units","distanceWalkingRunning","activeEnergyBurned","Kilocalories","Meters","subscribeToChanges","callback","subscription","addListener","typeIdentifier","queryId","subscribeToObserverQuery","catch","error","remove","Promise","reject","unsubscribeQuery","getMostRecentQuantitySample","samples","useMostRecentWorkout","workout","setWorkout","cancelSubscription","init","w","getMostRecentWorkout","getMostRecentCategorySample","queryCategorySamples","useSubscribeToChanges","onChange","appleStandHour","useMostRecentCategorySample","category","setCategory","updater","then","useMostRecentQuantitySample","lastSample","setLastSample","actualUnit","value","saveQuantitySample","start","end","metadata","queryStatisticsForQuantity","toDate","mostRecentQuantityDateInterval","rawResponse","response","requestAuthorization","read","write","readPermissions","reduce","obj","cur","writePermissions","getDateOfBirth","dateOfBirth","getRequestStatusForAuthorization","results","queryWorkouts","workouts","queryWorkoutSamples","saveCategorySample","identifiers","i","buildUnitWithPrefix","prefix","deserializeCorrelation","s","objects","o","quantity","undefined","ensureMetadata","queryCorrelationSamples","correlations","saveCorrelationSample","saveWorkoutSample","quantities","_start","getWorkoutRoutes","workoutUUID","Healthkit","authorizationStatusFor","bind","isHealthDataAvailable","disableAllBackgroundDelivery","disableBackgroundDelivery","enableBackgroundDelivery","getBiologicalSex","getFitzpatrickSkinType","getWheelchairUse","getBloodType","useIsHealthDataAvailable","isAvailable","setIsAvailable","res","useHealthkitAuthorization","status","setStatus","refreshAuthStatus","auth","request"],"sources":["index.ios.tsx"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\n\nimport Native, {\n EventEmitter,\n HKQuantityTypeIdentifier,\n HKUnit,\n HKCategoryTypeIdentifier,\n} from './native-types'\n\nimport type {\n HealthkitReadAuthorization,\n HealthkitWriteAuthorization,\n HKAuthorizationRequestStatus,\n HKCategorySampleRaw,\n HKCategoryValueForIdentifier,\n HKCorrelationRaw,\n HKCorrelationTypeIdentifier,\n HKQuantitySampleRaw,\n HKUnitSI,\n HKUnitSIPrefix,\n HKWorkoutRaw,\n MetadataMapperForCategoryIdentifier,\n ReadPermissions,\n SampleTypeIdentifier,\n WritePermissions,\n} from './native-types'\nimport type {\n GenericQueryOptions,\n GetMostRecentCategorySampleFn,\n GetMostRecentQuantitySampleFn,\n GetMostRecentWorkoutFn,\n GetPreferredUnitFn,\n GetPreferredUnitsFn,\n GetWorkoutRoutesFn,\n HKCategorySample,\n HKCorrelation,\n HKQuantitySample,\n HKWorkout,\n QueryCategorySamplesFn,\n QueryCorrelationSamplesFn,\n QueryQuantitySamplesFn,\n QueryStatisticsForQuantityFn,\n QueryWorkoutsFn,\n ReactNativeHealthkit,\n SaveCorrelationSampleFn,\n SaveQuantitySampleFn,\n SaveWorkoutSampleFn,\n SubscribeToChangesFn,\n} from './types'\n\nconst getPreferredUnit: GetPreferredUnitFn = async (type) => {\n const [unit] = await getPreferredUnits([type])\n return unit\n}\n\nconst ensureUnit = async <TUnit extends HKUnit>(\n type: HKQuantityTypeIdentifier,\n providedUnit?: TUnit,\n) => {\n if (providedUnit) {\n return providedUnit\n }\n const unit = await Native.getPreferredUnits([type])\n return unit[type] as TUnit\n}\n\nfunction deserializeSample<\n TIdentifier extends HKQuantityTypeIdentifier,\n TUnit extends HKUnit\n>(\n sample: HKQuantitySampleRaw<TIdentifier, TUnit>,\n): HKQuantitySample<TIdentifier, TUnit> {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n }\n}\n\nfunction deserializeWorkout<TEnergy extends HKUnit, TDistance extends HKUnit>(\n sample: HKWorkoutRaw<TEnergy, TDistance>,\n): HKWorkout<TEnergy, TDistance> {\n return {\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n }\n}\n\nconst deserializCategorySample = <T extends HKCategoryTypeIdentifier>(\n sample: HKCategorySampleRaw<T>,\n): HKCategorySample<T> => ({\n ...sample,\n startDate: new Date(sample.startDate),\n endDate: new Date(sample.endDate),\n})\n\nconst serializeDate = (date?: Date | null): string => (date ? date.toISOString() : new Date(0).toISOString())\n\nconst prepareOptions = (options: GenericQueryOptions) => {\n const limit = !options.limit || options.limit === Infinity ? 0 : options.limit\n const ascending = options.ascending ?? limit === 0\n const from = serializeDate(options.from)\n const to = serializeDate(options.to)\n return {\n limit, ascending, from, to,\n }\n}\n\nconst queryQuantitySamples: QueryQuantitySamplesFn = async (\n identifier,\n options,\n) => {\n const unit = await ensureUnit(identifier, options.unit)\n const opts = prepareOptions(options)\n\n const quantitySamples = await Native.queryQuantitySamples(\n identifier,\n unit,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending,\n )\n\n return quantitySamples.map(deserializeSample)\n}\n\nasync function getPreferredUnitsTyped<\n TEnergy extends HKUnit,\n TDistance extends HKUnit\n>(options?: { readonly energyUnit?: TEnergy; readonly distanceUnit?: TDistance }) {\n let energyUnit = options?.energyUnit\n let distanceUnit = options?.distanceUnit\n if (!energyUnit || !distanceUnit) {\n const units = await Native.getPreferredUnits([\n HKQuantityTypeIdentifier.distanceWalkingRunning,\n HKQuantityTypeIdentifier.activeEnergyBurned,\n ])\n if (!energyUnit) {\n energyUnit = units[HKQuantityTypeIdentifier.distanceWalkingRunning] as\n | TEnergy\n | undefined\n }\n if (!distanceUnit) {\n distanceUnit = units[HKQuantityTypeIdentifier.activeEnergyBurned] as\n | TDistance\n | undefined\n }\n }\n if (!energyUnit) {\n energyUnit = HKUnit.Kilocalories as TEnergy\n }\n if (!distanceUnit) {\n distanceUnit = HKUnit.Meters as TDistance\n }\n return { energyUnit, distanceUnit }\n}\n\nconst subscribeToChanges: SubscribeToChangesFn = async (\n identifier,\n callback,\n) => {\n const subscription = EventEmitter.addListener(\n 'onChange',\n ({ typeIdentifier }) => {\n if (typeIdentifier === identifier) {\n callback()\n }\n },\n )\n\n const queryId = await Native.subscribeToObserverQuery(identifier).catch(\n async (error) => {\n subscription.remove()\n return Promise.reject(error)\n },\n )\n\n return async () => {\n subscription.remove()\n return Native.unsubscribeQuery(queryId)\n }\n}\n\nconst getMostRecentQuantitySample: GetMostRecentQuantitySampleFn = async (\n identifier,\n unit,\n) => {\n const samples = await queryQuantitySamples(identifier, {\n limit: 1,\n unit,\n })\n return samples[0]\n}\n\nfunction useMostRecentWorkout<\n TEnergy extends HKUnit,\n TDistance extends HKUnit\n>(options?: { readonly energyUnit?: TEnergy; readonly distanceUnit?: TDistance }) {\n const [workout, setWorkout] = useState<HKWorkout<TEnergy, TDistance> | null>(\n null,\n )\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined\n\n const init = async () => {\n const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(\n options,\n )\n\n cancelSubscription = await subscribeToChanges(\n 'HKWorkoutTypeIdentifier',\n async () => {\n const w = await getMostRecentWorkout({ energyUnit, distanceUnit })\n setWorkout(w)\n },\n )\n }\n void init()\n return () => {\n void cancelSubscription?.()\n }\n }, [options])\n return workout\n}\n\nconst getMostRecentCategorySample: GetMostRecentCategorySampleFn = async (\n identifier,\n) => {\n const samples = await queryCategorySamples(identifier, {\n limit: 1,\n ascending: false,\n })\n\n return samples[0]\n}\n\nfunction useSubscribeToChanges<TIdentifier extends SampleTypeIdentifier>(\n identifier: TIdentifier,\n onChange: () => void,\n): void {\n useEffect(() => {\n let cancelSubscription: (() => Promise<boolean>) | undefined\n\n const init = async () => {\n cancelSubscription = await subscribeToChanges(identifier, onChange)\n }\n void init()\n\n return () => {\n void cancelSubscription?.()\n }\n }, [identifier, onChange])\n}\n\nuseSubscribeToChanges(HKCategoryTypeIdentifier.appleStandHour, () => {})\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\nfunction useMostRecentQuantitySample<\n TIdentifier extends HKQuantityTypeIdentifier,\n TUnit extends HKUnit = HKUnit\n>(identifier: TIdentifier, unit?: TUnit) {\n const [lastSample, setLastSample] = useState<HKQuantitySample<\n TIdentifier,\n TUnit\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\nconst saveQuantitySample: SaveQuantitySampleFn = async (\n identifier,\n unit,\n value,\n options,\n) => {\n const start = options?.start || options?.end || new Date()\n const end = options?.end || options?.start || new Date()\n const metadata = options?.metadata || {}\n\n return Native.saveQuantitySample(\n identifier,\n unit,\n value,\n start.toISOString(),\n end.toISOString(),\n metadata,\n )\n}\n\nconst queryStatisticsForQuantity: QueryStatisticsForQuantityFn = async (\n identifier,\n options,\n from,\n to,\n unit,\n) => {\n const actualUnit = await ensureUnit(identifier, unit)\n const toDate = to || new Date()\n const { mostRecentQuantityDateInterval, ...rawResponse } = await Native.queryStatisticsForQuantity(\n identifier,\n actualUnit,\n from.toISOString(),\n toDate.toISOString(),\n options,\n )\n\n const response = {\n ...rawResponse,\n ...(mostRecentQuantityDateInterval\n ? {\n mostRecentQuantityDateInterval: {\n from: new Date(mostRecentQuantityDateInterval.from),\n to: new Date(mostRecentQuantityDateInterval.to),\n },\n }\n : {}),\n }\n\n return response\n}\n\nconst requestAuthorization = async (\n read: readonly HealthkitReadAuthorization[],\n write: readonly HealthkitWriteAuthorization[] = [],\n): Promise<boolean> => {\n const readPermissions = read.reduce((obj, cur) => ({ ...obj, [cur]: true }), {} as ReadPermissions)\n\n const writePermissions = write.reduce((obj, cur) => ({ ...obj, [cur]: true }), {} as WritePermissions)\n\n return Native.requestAuthorization(writePermissions, readPermissions)\n}\n\nconst getDateOfBirth = async () => {\n const dateOfBirth = await Native.getDateOfBirth()\n return new Date(dateOfBirth)\n}\n\nconst getRequestStatusForAuthorization = async (\n read: readonly HealthkitReadAuthorization[],\n write: readonly HealthkitWriteAuthorization[] = [],\n) => {\n const readPermissions = read.reduce((obj, cur) => ({ ...obj, [cur]: true }), {} as ReadPermissions)\n\n const writePermissions = write.reduce((obj, cur) => ({ ...obj, [cur]: true }), {} as WritePermissions)\n\n return Native.getRequestStatusForAuthorization(\n writePermissions,\n readPermissions,\n )\n}\n\nconst queryCategorySamples: QueryCategorySamplesFn = async (\n identifier,\n options,\n) => {\n const opts = prepareOptions(options)\n const results = await Native.queryCategorySamples(\n identifier,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending,\n )\n\n return results.map(deserializCategorySample)\n}\n\nconst queryWorkouts: QueryWorkoutsFn = async (options) => {\n const { energyUnit, distanceUnit } = await getPreferredUnitsTyped(options)\n const opts = prepareOptions(options)\n\n const workouts = await Native.queryWorkoutSamples(\n energyUnit,\n distanceUnit,\n opts.from,\n opts.to,\n opts.limit,\n opts.ascending,\n )\n\n return workouts.map(deserializeWorkout)\n}\n\nconst getMostRecentWorkout: GetMostRecentWorkoutFn = async (options) => {\n const workouts = await queryWorkouts({\n limit: 1,\n ascending: false,\n energyUnit: options?.energyUnit,\n distanceUnit: options?.distanceUnit,\n })\n\n return workouts[0]\n}\n\nasync function saveCategorySample<T extends HKCategoryTypeIdentifier>(\n identifier: T,\n value: HKCategoryValueForIdentifier<T>,\n options?: {\n readonly start?: Date;\n readonly end?: Date;\n readonly metadata?: MetadataMapperForCategoryIdentifier<T>;\n },\n) {\n const start = options?.start || options?.end || new Date()\n const end = options?.end || options?.start || new Date()\n const metadata = options?.metadata || {}\n\n return Native.saveCategorySample(\n identifier,\n value,\n start.toISOString(),\n end.toISOString(),\n metadata || {},\n )\n}\n\nconst getPreferredUnits: GetPreferredUnitsFn = async (identifiers) => {\n const units = await Native.getPreferredUnits(identifiers)\n return identifiers.map((i) => units[i])\n}\n\nconst buildUnitWithPrefix = (prefix: HKUnitSIPrefix, unit: HKUnitSI) => `${prefix}${unit}` as HKUnit\n\nfunction deserializeCorrelation<\n TIdentifier extends HKCorrelationTypeIdentifier\n>(s: HKCorrelationRaw<TIdentifier>): HKCorrelation<TIdentifier> {\n return {\n ...s,\n objects: s.objects.map((o) => {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (o.quantity !== undefined) {\n return deserializeSample(o as HKQuantitySampleRaw)\n }\n\n return deserializCategorySample(o as HKCategorySampleRaw)\n }),\n endDate: new Date(s.endDate),\n startDate: new Date(s.startDate),\n }\n}\n\nfunction ensureMetadata<TMetadata>(metadata?: TMetadata) {\n return metadata || ({} as TMetadata)\n}\n\nconst queryCorrelationSamples: QueryCorrelationSamplesFn = async (\n typeIdentifier,\n options,\n) => {\n const opts = prepareOptions(options)\n const correlations = await Native.queryCorrelationSamples(\n typeIdentifier,\n opts.from,\n opts.to,\n )\n\n return correlations.map(deserializeCorrelation)\n}\n\nconst saveCorrelationSample: SaveCorrelationSampleFn = async (\n typeIdentifier,\n samples,\n options,\n) => {\n const start = (options?.start || new Date()).toISOString()\n const end = (options?.end || new Date()).toISOString()\n\n return Native.saveCorrelationSample(\n typeIdentifier,\n samples,\n start,\n end,\n ensureMetadata(options?.metadata),\n )\n}\n\nconst saveWorkoutSample: SaveWorkoutSampleFn = async (\n typeIdentifier,\n quantities,\n _start,\n options,\n) => {\n const start = _start.toISOString()\n const end = (options?.end || new Date()).toISOString()\n\n return Native.saveWorkoutSample(\n typeIdentifier,\n quantities,\n start,\n end,\n ensureMetadata(options?.metadata),\n )\n}\n\nconst getWorkoutRoutes: GetWorkoutRoutesFn = async (workoutUUID: string) => Native.getWorkoutRoutes(workoutUUID)\n\nconst Healthkit: ReactNativeHealthkit = {\n authorizationStatusFor: Native.authorizationStatusFor.bind(Native),\n\n isHealthDataAvailable: Native.isHealthDataAvailable.bind(Native),\n\n buildUnitWithPrefix,\n\n disableAllBackgroundDelivery: Native.disableAllBackgroundDelivery,\n disableBackgroundDelivery: Native.disableBackgroundDelivery,\n enableBackgroundDelivery: Native.enableBackgroundDelivery,\n\n // simple convenience getters\n getBiologicalSex: Native.getBiologicalSex.bind(Native),\n getFitzpatrickSkinType: Native.getFitzpatrickSkinType.bind(Native),\n getWheelchairUse: Native.getWheelchairUse,\n getBloodType: Native.getBloodType.bind(Native),\n getDateOfBirth,\n\n getMostRecentQuantitySample,\n getMostRecentCategorySample,\n getMostRecentWorkout,\n\n getPreferredUnit,\n getPreferredUnits,\n getRequestStatusForAuthorization,\n\n getWorkoutRoutes,\n\n // query methods\n queryCategorySamples,\n queryCorrelationSamples,\n queryQuantitySamples,\n queryStatisticsForQuantity,\n queryWorkouts,\n\n requestAuthorization,\n\n // save methods\n saveCategorySample,\n saveCorrelationSample,\n saveQuantitySample,\n saveWorkoutSample,\n\n // subscriptions\n subscribeToChanges,\n\n // hooks\n useMostRecentCategorySample,\n\n useMostRecentQuantitySample,\n useMostRecentWorkout,\n\n useSubscribeToChanges,\n\n useIsHealthDataAvailable: () => {\n const [isAvailable, setIsAvailable] = useState<boolean | null>(null)\n useEffect(() => {\n const init = async () => {\n const res = await Native.isHealthDataAvailable()\n setIsAvailable(res)\n }\n void init()\n }, [])\n return isAvailable\n },\n useHealthkitAuthorization: (read, write) => {\n const [status, setStatus] = useState<HKAuthorizationRequestStatus | null>(null)\n const refreshAuthStatus = useCallback(async () => {\n const auth = await getRequestStatusForAuthorization(read, write)\n setStatus(auth)\n return auth\n }, [])\n\n const request = useCallback(async () => {\n await requestAuthorization(read, write)\n return refreshAuthStatus()\n }, [])\n\n useEffect(() => {\n void refreshAuthStatus()\n }, [])\n\n return [status, request]\n },\n}\n\nexport * from './native-types'\nexport * from './types'\n\nexport default Healthkit\n"],"mappings":"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"}
@@ -1,44 +1,58 @@
1
1
  import { Platform } from 'react-native';
2
- const notAvailableError = 'Platform "' + Platform.OS + '" not supported, use isHealthDataAvailable to check for availability before using it';
2
+ import { HKAuthorizationRequestStatus, HKBiologicalSex, HKBloodType, HKFitzpatrickSkinType, HKUnit, HKWheelchairUse } from './native-types';
3
+ const notAvailableError = `[@kingstinct/react-native-healthkit] Platform "${Platform.OS}" not supported`;
3
4
 
4
- const UnavailableFn = () => {
5
- throw new Error(notAvailableError);
6
- };
5
+ function UnavailableFn(retVal) {
6
+ return () => {
7
+ console.warn(notAvailableError);
8
+ return retVal;
9
+ };
10
+ }
7
11
 
8
12
  const Healthkit = {
9
- authorizationStatusFor: UnavailableFn,
10
- buildUnitWithPrefix: UnavailableFn,
11
- disableAllBackgroundDelivery: UnavailableFn,
12
- disableBackgroundDelivery: UnavailableFn,
13
- enableBackgroundDelivery: UnavailableFn,
14
- getBiologicalSex: UnavailableFn,
15
- getBloodType: UnavailableFn,
16
- getDateOfBirth: UnavailableFn,
17
- getFitzpatrickSkinType: UnavailableFn,
18
- getMostRecentCategorySample: UnavailableFn,
19
- getMostRecentQuantitySample: UnavailableFn,
20
- getMostRecentWorkout: UnavailableFn,
21
- getPreferredUnit: UnavailableFn,
22
- getPreferredUnits: UnavailableFn,
23
- getRequestStatusForAuthorization: UnavailableFn,
24
- getWheelchairUse: UnavailableFn,
25
- getWorkoutRoutes: UnavailableFn,
26
- isHealthDataAvailable: () => Promise.resolve(false),
27
- queryCategorySamples: UnavailableFn,
28
- queryCorrelationSamples: UnavailableFn,
29
- queryQuantitySamples: UnavailableFn,
30
- queryStatisticsForQuantity: UnavailableFn,
31
- queryWorkouts: UnavailableFn,
32
- requestAuthorization: UnavailableFn,
33
- saveCategorySample: UnavailableFn,
34
- saveCorrelationSample: UnavailableFn,
35
- saveQuantitySample: UnavailableFn,
36
- saveWorkoutSample: UnavailableFn,
37
- subscribeToChanges: UnavailableFn,
38
- useMostRecentCategorySample: UnavailableFn,
39
- useMostRecentQuantitySample: UnavailableFn,
40
- useMostRecentWorkout: UnavailableFn,
41
- useSubscribeToChanges: UnavailableFn
13
+ authorizationStatusFor: UnavailableFn(Promise.resolve(false)),
14
+ buildUnitWithPrefix: UnavailableFn(HKUnit.Atmospheres),
15
+ disableAllBackgroundDelivery: UnavailableFn(Promise.resolve(false)),
16
+ disableBackgroundDelivery: UnavailableFn(Promise.resolve(false)),
17
+ enableBackgroundDelivery: UnavailableFn(Promise.resolve(false)),
18
+ getBiologicalSex: UnavailableFn(Promise.resolve(HKBiologicalSex.notSet)),
19
+ getBloodType: UnavailableFn(Promise.resolve(HKBloodType.notSet)),
20
+ getDateOfBirth: UnavailableFn(Promise.resolve(new Date(0))),
21
+ getFitzpatrickSkinType: UnavailableFn(Promise.resolve(HKFitzpatrickSkinType.notSet)),
22
+ getMostRecentCategorySample: UnavailableFn(Promise.resolve(null)),
23
+ getMostRecentQuantitySample: UnavailableFn(Promise.resolve(null)),
24
+ getMostRecentWorkout: UnavailableFn(Promise.resolve(null)),
25
+ getPreferredUnit: UnavailableFn(Promise.resolve(HKUnit.Atmospheres)),
26
+ getPreferredUnits: UnavailableFn(Promise.resolve([])),
27
+ getRequestStatusForAuthorization: UnavailableFn(Promise.resolve(HKAuthorizationRequestStatus.unknown)),
28
+ getWheelchairUse: UnavailableFn(Promise.resolve(HKWheelchairUse.notSet)),
29
+ getWorkoutRoutes: UnavailableFn(Promise.resolve([])),
30
+ isHealthDataAvailable: async () => Promise.resolve(false),
31
+ queryCategorySamples: UnavailableFn(Promise.resolve([])),
32
+ queryCorrelationSamples: UnavailableFn(Promise.resolve([])),
33
+ queryQuantitySamples: UnavailableFn(Promise.resolve([])),
34
+ queryStatisticsForQuantity: UnavailableFn(Promise.resolve({
35
+ averageQuantity: undefined,
36
+ maximumQuantity: undefined,
37
+ minimumQuantity: undefined,
38
+ sumQuantity: undefined,
39
+ mostRecentQuantity: undefined,
40
+ mostRecentQuantityDateInterval: undefined,
41
+ duration: undefined
42
+ })),
43
+ queryWorkouts: UnavailableFn(Promise.resolve([])),
44
+ requestAuthorization: UnavailableFn(Promise.resolve(false)),
45
+ saveCategorySample: UnavailableFn(Promise.resolve(false)),
46
+ saveCorrelationSample: UnavailableFn(Promise.resolve(false)),
47
+ saveQuantitySample: UnavailableFn(Promise.resolve(false)),
48
+ saveWorkoutSample: UnavailableFn(Promise.resolve(false)),
49
+ subscribeToChanges: UnavailableFn(Promise.resolve(async () => Promise.resolve(false))),
50
+ useMostRecentCategorySample: UnavailableFn(null),
51
+ useMostRecentQuantitySample: UnavailableFn(null),
52
+ useMostRecentWorkout: UnavailableFn(null),
53
+ useSubscribeToChanges: UnavailableFn([null, () => null]),
54
+ useHealthkitAuthorization: UnavailableFn([null, async () => Promise.resolve(null)]),
55
+ useIsHealthDataAvailable: UnavailableFn(false)
42
56
  };
43
57
  export * from './native-types';
44
58
  export * from './types';