@ovok/native 1.16.1-dev.2171 → 1.16.1-dev.2175
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/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-provider.js +15 -8
- package/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-provider.js.map +1 -1
- package/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-utils.js +1 -1
- package/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-utils.js.map +1 -1
- package/lib/commonjs/modules/data-sync/constants.js +4 -1
- package/lib/commonjs/modules/data-sync/constants.js.map +1 -1
- package/lib/commonjs/modules/data-sync/hooks/use-listen-changes.js +6 -9
- package/lib/commonjs/modules/data-sync/hooks/use-listen-changes.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/convert-ecg-samples-to-observation.js +47 -0
- package/lib/commonjs/modules/data-sync/utils/convert-ecg-samples-to-observation.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/convert-samples-to-observation.js +7 -15
- package/lib/commonjs/modules/data-sync/utils/convert-samples-to-observation.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/default-health-coding.js +13 -7
- package/lib/commonjs/modules/data-sync/utils/default-health-coding.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js +43 -86
- package/lib/commonjs/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js +6 -5
- package/lib/commonjs/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js +15 -15
- package/lib/commonjs/modules/data-sync/utils/health-data-catalog.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/healthkit-daily-statistics.js +64 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-daily-statistics.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-data-types.js.map +1 -1
- package/lib/commonjs/modules/data-sync/utils/healthkit-query-options.js +20 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-query-options.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-sample-source.js +21 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-sample-source.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-samples.js +59 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-samples.js.map +1 -0
- package/lib/commonjs/modules/data-sync/utils/healthkit-series.js +20 -11
- package/lib/commonjs/modules/data-sync/utils/healthkit-series.js.map +1 -1
- package/lib/module/modules/data-sync/components/apple/apple-health-authorization-provider.js +16 -9
- package/lib/module/modules/data-sync/components/apple/apple-health-authorization-provider.js.map +1 -1
- package/lib/module/modules/data-sync/components/apple/apple-health-authorization-utils.js +2 -2
- package/lib/module/modules/data-sync/components/apple/apple-health-authorization-utils.js.map +1 -1
- package/lib/module/modules/data-sync/constants.js +4 -1
- package/lib/module/modules/data-sync/constants.js.map +1 -1
- package/lib/module/modules/data-sync/hooks/use-listen-changes.js +7 -10
- package/lib/module/modules/data-sync/hooks/use-listen-changes.js.map +1 -1
- package/lib/module/modules/data-sync/utils/convert-ecg-samples-to-observation.js +43 -0
- package/lib/module/modules/data-sync/utils/convert-ecg-samples-to-observation.js.map +1 -0
- package/lib/module/modules/data-sync/utils/convert-samples-to-observation.js +7 -15
- package/lib/module/modules/data-sync/utils/convert-samples-to-observation.js.map +1 -1
- package/lib/module/modules/data-sync/utils/default-health-coding.js +13 -7
- package/lib/module/modules/data-sync/utils/default-health-coding.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-samples-from-health.js +44 -87
- package/lib/module/modules/data-sync/utils/get-samples-from-health.js.map +1 -1
- package/lib/module/modules/data-sync/utils/get-total-samples-count.js +5 -4
- package/lib/module/modules/data-sync/utils/get-total-samples-count.js.map +1 -1
- package/lib/module/modules/data-sync/utils/health-data-catalog.js +15 -15
- package/lib/module/modules/data-sync/utils/health-data-catalog.js.map +1 -1
- package/lib/module/modules/data-sync/utils/healthkit-daily-statistics.js +59 -0
- package/lib/module/modules/data-sync/utils/healthkit-daily-statistics.js.map +1 -0
- package/lib/module/modules/data-sync/utils/healthkit-data-types.js.map +1 -1
- package/lib/module/modules/data-sync/utils/healthkit-query-options.js +16 -0
- package/lib/module/modules/data-sync/utils/healthkit-query-options.js.map +1 -0
- package/lib/module/modules/data-sync/utils/healthkit-sample-source.js +17 -0
- package/lib/module/modules/data-sync/utils/healthkit-sample-source.js.map +1 -0
- package/lib/module/modules/data-sync/utils/healthkit-samples.js +52 -0
- package/lib/module/modules/data-sync/utils/healthkit-samples.js.map +1 -0
- package/lib/module/modules/data-sync/utils/healthkit-series.js +19 -10
- package/lib/module/modules/data-sync/utils/healthkit-series.js.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/components/apple/apple-health-authorization-provider.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/components/apple/apple-health-authorization-utils.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/components/apple/apple-health-authorization-utils.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/constants.d.ts +3 -1
- package/lib/typescript/commonjs/src/modules/data-sync/constants.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/hooks/use-listen-changes.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-sync-props.d.ts +4 -7
- package/lib/typescript/commonjs/src/modules/data-sync/types/apple-health-sync-props.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-authorization-status.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/types/health-authorization-status.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-ecg-samples-to-observation.d.ts +6 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-ecg-samples-to-observation.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/convert-samples-to-observation.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/default-health-coding.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts +12 -46
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-daily-statistics.d.ts +10 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-daily-statistics.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts +5 -5
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-query-options.d.ts +7 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-query-options.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-sample-source.d.ts +8 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-sample-source.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-samples.d.ts +30 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-samples.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-series.d.ts +2 -2
- package/lib/typescript/commonjs/src/modules/data-sync/utils/healthkit-series.d.ts.map +1 -1
- package/lib/typescript/commonjs/src/modules/data-sync/utils/to-core-health-observations.d.ts +1 -0
- package/lib/typescript/commonjs/src/modules/data-sync/utils/to-core-health-observations.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/components/apple/apple-health-authorization-provider.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/components/apple/apple-health-authorization-utils.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/components/apple/apple-health-authorization-utils.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/constants.d.ts +3 -1
- package/lib/typescript/module/src/modules/data-sync/constants.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/hooks/use-listen-changes.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-authorization-provider-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-sync-props.d.ts +4 -7
- package/lib/typescript/module/src/modules/data-sync/types/apple-health-sync-props.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/types/health-authorization-status.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/types/health-authorization-status.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/convert-ecg-samples-to-observation.d.ts +6 -0
- package/lib/typescript/module/src/modules/data-sync/utils/convert-ecg-samples-to-observation.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/convert-samples-to-observation.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/default-health-coding.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts +12 -46
- package/lib/typescript/module/src/modules/data-sync/utils/get-samples-from-health.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/get-total-samples-count.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/health-data-catalog.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/utils/health-units.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-daily-statistics.d.ts +10 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-daily-statistics.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts +5 -5
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-data-types.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-query-options.d.ts +7 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-query-options.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-sample-source.d.ts +8 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-sample-source.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-samples.d.ts +30 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-samples.d.ts.map +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-series.d.ts +2 -2
- package/lib/typescript/module/src/modules/data-sync/utils/healthkit-series.d.ts.map +1 -1
- package/lib/typescript/module/src/modules/data-sync/utils/to-core-health-observations.d.ts +1 -0
- package/lib/typescript/module/src/modules/data-sync/utils/to-core-health-observations.d.ts.map +1 -1
- package/package.json +8 -3
package/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-provider.js
CHANGED
|
@@ -22,7 +22,10 @@ const AppleHealthAuthorizationProvider = exports.AppleHealthAuthorizationProvide
|
|
|
22
22
|
renderManualRequestUI,
|
|
23
23
|
onAuthorizationStatusChange
|
|
24
24
|
}) => {
|
|
25
|
-
const [authorizationStatus, requestAuthorization] = (0, _reactNativeHealthkit.useHealthkitAuthorization)(
|
|
25
|
+
const [authorizationStatus, requestAuthorization] = (0, _reactNativeHealthkit.useHealthkitAuthorization)({
|
|
26
|
+
toRead: readIdentifiers,
|
|
27
|
+
toWrite: writeIdentifiers
|
|
28
|
+
});
|
|
26
29
|
const [requestState, setRequestState] = React.useState("unknown");
|
|
27
30
|
const [notRequestedReadIdentifiers, setNotRequestedReadIdentifiers] = React.useState(readIdentifiers);
|
|
28
31
|
const [notRequestedWriteIdentifiers, setNotRequestedWriteIdentifiers] = React.useState(writeIdentifiers || []);
|
|
@@ -54,7 +57,11 @@ const AppleHealthAuthorizationProvider = exports.AppleHealthAuthorizationProvide
|
|
|
54
57
|
readIdentifiers: currentRead,
|
|
55
58
|
writeIdentifiers: currentWrite
|
|
56
59
|
} = identifiersRef.current;
|
|
57
|
-
const [notRequestedRead, notRequestedWrite] = await Promise.all([(0, _appleHealthAuthorizationUtils.getNotRequestedIdentifiers)(currentRead, identifier => (0, _reactNativeHealthkit.getRequestStatusForAuthorization)(
|
|
60
|
+
const [notRequestedRead, notRequestedWrite] = await Promise.all([(0, _appleHealthAuthorizationUtils.getNotRequestedIdentifiers)(currentRead, identifier => (0, _reactNativeHealthkit.getRequestStatusForAuthorization)({
|
|
61
|
+
toRead: [identifier]
|
|
62
|
+
})), (0, _appleHealthAuthorizationUtils.getNotRequestedIdentifiers)(currentWrite || [], identifier => (0, _reactNativeHealthkit.getRequestStatusForAuthorization)({
|
|
63
|
+
toShare: [identifier]
|
|
64
|
+
}))]);
|
|
58
65
|
setNotRequestedReadIdentifiers(notRequestedRead);
|
|
59
66
|
setNotRequestedWriteIdentifiers(notRequestedWrite);
|
|
60
67
|
}, []);
|
|
@@ -77,7 +84,7 @@ const AppleHealthAuthorizationProvider = exports.AppleHealthAuthorizationProvide
|
|
|
77
84
|
}
|
|
78
85
|
previousRequestKey.current = requestKey;
|
|
79
86
|
setRequestError(undefined);
|
|
80
|
-
setRequestState(authorizationStatus === null ? "unknown" : authorizationStatus === _reactNativeHealthkit.
|
|
87
|
+
setRequestState(authorizationStatus === null ? "unknown" : authorizationStatus === _reactNativeHealthkit.AuthorizationRequestStatus.shouldRequest ? "shouldRequest" : "unknown");
|
|
81
88
|
setNotRequestedReadIdentifiers(readIdentifiers);
|
|
82
89
|
setNotRequestedWriteIdentifiers(writeIdentifiers || []);
|
|
83
90
|
}, [authorizationStatus, readIdentifiers, requestKey, writeIdentifiers]);
|
|
@@ -85,11 +92,11 @@ const AppleHealthAuthorizationProvider = exports.AppleHealthAuthorizationProvide
|
|
|
85
92
|
if (authorizationStatus === null) {
|
|
86
93
|
return;
|
|
87
94
|
}
|
|
88
|
-
if (authorizationStatus === _reactNativeHealthkit.
|
|
95
|
+
if (authorizationStatus === _reactNativeHealthkit.AuthorizationRequestStatus.shouldRequest) {
|
|
89
96
|
setRequestState(currentState => currentState === "unknown" ? "shouldRequest" : currentState);
|
|
90
97
|
}
|
|
91
98
|
void inspectAuthorization().then(() => {
|
|
92
|
-
setRequestState(currentState => currentState === "unknown" && authorizationStatus === _reactNativeHealthkit.
|
|
99
|
+
setRequestState(currentState => currentState === "unknown" && authorizationStatus === _reactNativeHealthkit.AuthorizationRequestStatus.shouldRequest ? "shouldRequest" : currentState === "unknown" ? "ready" : currentState);
|
|
93
100
|
}).catch(error => {
|
|
94
101
|
const normalizedError = (0, _toError.toError)(error);
|
|
95
102
|
setRequestError(normalizedError);
|
|
@@ -97,12 +104,12 @@ const AppleHealthAuthorizationProvider = exports.AppleHealthAuthorizationProvide
|
|
|
97
104
|
});
|
|
98
105
|
}, [authorizationStatus, inspectAuthorization]);
|
|
99
106
|
React.useEffect(() => {
|
|
100
|
-
if (renderManualRequestUI || skipRequest || authorizationStatus !== _reactNativeHealthkit.
|
|
107
|
+
if (renderManualRequestUI || skipRequest || authorizationStatus !== _reactNativeHealthkit.AuthorizationRequestStatus.shouldRequest || requestState !== "shouldRequest") {
|
|
101
108
|
return;
|
|
102
109
|
}
|
|
103
110
|
void requestAccess();
|
|
104
111
|
}, [authorizationStatus, requestAccess, renderManualRequestUI, requestState, skipRequest]);
|
|
105
|
-
const needsAuthorization = requestState === "shouldRequest" || requestState === "requesting" || requestState === "unknown" && authorizationStatus === _reactNativeHealthkit.
|
|
112
|
+
const needsAuthorization = requestState === "shouldRequest" || requestState === "requesting" || requestState === "unknown" && authorizationStatus === _reactNativeHealthkit.AuthorizationRequestStatus.shouldRequest;
|
|
106
113
|
const shouldRenderManualRequestUI = renderManualRequestUI && needsAuthorization && requestState !== "requesting" && !skipRequest;
|
|
107
114
|
const shouldRenderFallback = fallback && needsAuthorization && !skipRequest;
|
|
108
115
|
const exposedStatus = React.useMemo(() => skipRequest && status.state === "unknown" ? {
|
|
@@ -116,7 +123,7 @@ const AppleHealthAuthorizationProvider = exports.AppleHealthAuthorizationProvide
|
|
|
116
123
|
request: requestAccess
|
|
117
124
|
}), [exposedStatus, requestAccess]);
|
|
118
125
|
let content = null;
|
|
119
|
-
if (skipRequest || requestState === "ready" || requestState === "unknown" && (authorizationStatus === _reactNativeHealthkit.
|
|
126
|
+
if (skipRequest || requestState === "ready" || requestState === "unknown" && (authorizationStatus === _reactNativeHealthkit.AuthorizationRequestStatus.unknown || authorizationStatus === _reactNativeHealthkit.AuthorizationRequestStatus.unnecessary)) {
|
|
120
127
|
content = /*#__PURE__*/(0, _jsxRuntime.jsx)(_jsxRuntime.Fragment, {
|
|
121
128
|
children: children
|
|
122
129
|
});
|
package/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-provider.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeHealthkit","require","React","_interopRequireWildcard","_toError","_healthAuthorizationContext","_appleHealthAuthorizationContext","_appleHealthAuthorizationUtils","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","AppleHealthAuthorizationProvider","exports","memo","readIdentifiers","writeIdentifiers","dataToSync","fallback","children","skipRequest","renderManualRequestUI","onAuthorizationStatusChange","authorizationStatus","requestAuthorization","useHealthkitAuthorization","requestState","setRequestState","useState","notRequestedReadIdentifiers","setNotRequestedReadIdentifiers","notRequestedWriteIdentifiers","setNotRequestedWriteIdentifiers","requestError","setRequestError","requestKey","join","identifiersRef","useRef","current","previousRequestKey","status","useMemo","error","state","notRequestedMeasurementTypes","entries","filter","data","typeIdentifiers","some","typeIdentifier","includes","map","key","useEffect","inspectAuthorization","useCallback","currentRead","currentWrite","notRequestedRead","notRequestedWrite","Promise","all","getNotRequestedIdentifiers","identifier","getRequestStatusForAuthorization","requestAccess","undefined","normalizedError","toError","
|
|
1
|
+
{"version":3,"names":["_reactNativeHealthkit","require","React","_interopRequireWildcard","_toError","_healthAuthorizationContext","_appleHealthAuthorizationContext","_appleHealthAuthorizationUtils","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","AppleHealthAuthorizationProvider","exports","memo","readIdentifiers","writeIdentifiers","dataToSync","fallback","children","skipRequest","renderManualRequestUI","onAuthorizationStatusChange","authorizationStatus","requestAuthorization","useHealthkitAuthorization","toRead","toWrite","requestState","setRequestState","useState","notRequestedReadIdentifiers","setNotRequestedReadIdentifiers","notRequestedWriteIdentifiers","setNotRequestedWriteIdentifiers","requestError","setRequestError","requestKey","join","identifiersRef","useRef","current","previousRequestKey","status","useMemo","error","state","notRequestedMeasurementTypes","entries","filter","data","typeIdentifiers","some","typeIdentifier","includes","map","key","useEffect","inspectAuthorization","useCallback","currentRead","currentWrite","notRequestedRead","notRequestedWrite","Promise","all","getNotRequestedIdentifiers","identifier","getRequestStatusForAuthorization","toShare","requestAccess","undefined","normalizedError","toError","AuthorizationRequestStatus","shouldRequest","currentState","then","catch","needsAuthorization","shouldRenderManualRequestUI","shouldRenderFallback","exposedStatus","authorizationValue","platform","missingTypes","request","content","unknown","unnecessary","jsx","Fragment","HealthAuthorizationContext","Provider","value","AppleHealthAuthorizationContext"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/components/apple/apple-health-authorization-provider.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -12,7 +12,7 @@ const getNotRequestedIdentifiers = async (identifiers, getStatus) => {
|
|
|
12
12
|
})));
|
|
13
13
|
return statuses.filter(({
|
|
14
14
|
status
|
|
15
|
-
}) => status === _reactNativeHealthkit.
|
|
15
|
+
}) => status === _reactNativeHealthkit.AuthorizationRequestStatus.shouldRequest).map(({
|
|
16
16
|
identifier
|
|
17
17
|
}) => identifier);
|
|
18
18
|
};
|
package/lib/commonjs/modules/data-sync/components/apple/apple-health-authorization-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeHealthkit","require","getNotRequestedIdentifiers","identifiers","getStatus","statuses","Promise","all","map","identifier","status","filter","
|
|
1
|
+
{"version":3,"names":["_reactNativeHealthkit","require","getNotRequestedIdentifiers","identifiers","getStatus","statuses","Promise","all","map","identifier","status","filter","AuthorizationRequestStatus","shouldRequest","exports"],"sourceRoot":"../../../../../../src","sources":["modules/data-sync/components/apple/apple-health-authorization-utils.ts"],"mappings":";;;;;;AAAA,IAAAA,qBAAA,GAAAC,OAAA;AAEA,MAAMC,0BAA0B,GAAG,MAAAA,CACjCC,WAAgB,EAChBC,SAAiE,KAChD;EACjB,MAAMC,QAAQ,GAAG,MAAMC,OAAO,CAACC,GAAG,CAChCJ,WAAW,CAACK,GAAG,CAAC,MAAOC,UAAU,KAAM;IACrCA,UAAU;IACVC,MAAM,EAAE,MAAMN,SAAS,CAACK,UAAU;EACpC,CAAC,CAAC,CACJ,CAAC;EAED,OAAOJ,QAAQ,CACZM,MAAM,CAAC,CAAC;IAAED;EAAO,CAAC,KAAKA,MAAM,KAAKE,gDAA0B,CAACC,aAAa,CAAC,CAC3EL,GAAG,CAAC,CAAC;IAAEC;EAAW,CAAC,KAAKA,UAAU,CAAC;AACxC,CAAC;AAACK,OAAA,CAAAZ,0BAAA,GAAAA,0BAAA","ignoreList":[]}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.SERIES_SLOT_MS = exports.SERIES_REREAD_HOURS = exports.DEFAULT_SYNC_LOOKBACK_DAYS = exports.DEFAULT_HEALTH_SYNC_CHUNK_SIZE = exports.DAILY_REREAD_DAYS = void 0;
|
|
6
|
+
exports.SERIES_SLOT_MS = exports.SERIES_REREAD_HOURS = exports.ECG_PAGE_SIZE = exports.DEFAULT_SYNC_LOOKBACK_DAYS = exports.DEFAULT_HEALTH_SYNC_CHUNK_SIZE = exports.DAILY_REREAD_DAYS = void 0;
|
|
7
7
|
/**
|
|
8
8
|
* Keeps provider pages comfortably below Medplum's synchronous request limit.
|
|
9
9
|
* The save helper also enforces the byte limit because an observation's size
|
|
@@ -11,6 +11,9 @@ exports.SERIES_SLOT_MS = exports.SERIES_REREAD_HOURS = exports.DEFAULT_SYNC_LOOK
|
|
|
11
11
|
*/
|
|
12
12
|
const DEFAULT_HEALTH_SYNC_CHUNK_SIZE = exports.DEFAULT_HEALTH_SYNC_CHUNK_SIZE = 250;
|
|
13
13
|
|
|
14
|
+
/** Each ECG recording holds about 15,000 voltages, so a page of them stays small whatever the chunk size. */
|
|
15
|
+
const ECG_PAGE_SIZE = exports.ECG_PAGE_SIZE = 10;
|
|
16
|
+
|
|
14
17
|
/** How far back the first import of a type reaches when no watermark exists yet. */
|
|
15
18
|
const DEFAULT_SYNC_LOOKBACK_DAYS = exports.DEFAULT_SYNC_LOOKBACK_DAYS = 30;
|
|
16
19
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["DEFAULT_HEALTH_SYNC_CHUNK_SIZE","exports","DEFAULT_SYNC_LOOKBACK_DAYS","DAILY_REREAD_DAYS","SERIES_SLOT_MS","SERIES_REREAD_HOURS"],"sourceRoot":"../../../../src","sources":["modules/data-sync/constants.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA,MAAMA,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,GAAG,GAAG;;AAE1C;AACA,MAAME,
|
|
1
|
+
{"version":3,"names":["DEFAULT_HEALTH_SYNC_CHUNK_SIZE","exports","ECG_PAGE_SIZE","DEFAULT_SYNC_LOOKBACK_DAYS","DAILY_REREAD_DAYS","SERIES_SLOT_MS","SERIES_REREAD_HOURS"],"sourceRoot":"../../../../src","sources":["modules/data-sync/constants.ts"],"mappings":";;;;;;AAAA;AACA;AACA;AACA;AACA;AACA,MAAMA,8BAA8B,GAAAC,OAAA,CAAAD,8BAAA,GAAG,GAAG;;AAE1C;AACA,MAAME,aAAa,GAAAD,OAAA,CAAAC,aAAA,GAAG,EAAE;;AAExB;AACA,MAAMC,0BAA0B,GAAAF,OAAA,CAAAE,0BAAA,GAAG,EAAE;;AAErC;AACA;AACA;AACA;AACA;AACA,MAAMC,iBAAiB,GAAAH,OAAA,CAAAG,iBAAA,GAAG,CAAC;;AAE3B;AACA,MAAMC,cAAc,GAAAJ,OAAA,CAAAI,cAAA,GAAG,MAAM;;AAE7B;AACA,MAAMC,mBAAmB,GAAAL,OAAA,CAAAK,mBAAA,GAAG,CAAC","ignoreList":[]}
|
|
@@ -12,10 +12,10 @@ const useListenChanges = (dataToSync, onChange, backgroundDelivery, onError) =>
|
|
|
12
12
|
const onChangeRef = React.useRef(onChange);
|
|
13
13
|
const onErrorRef = React.useRef(onError);
|
|
14
14
|
const identifiers = React.useMemo(() => {
|
|
15
|
-
return Object.values(dataToSync).flatMap(data => data?.typeIdentifiers.map(identifier => identifier.typeIdentifier));
|
|
15
|
+
return Object.values(dataToSync).flatMap(data => data?.typeIdentifiers.map(identifier => identifier.typeIdentifier) ?? []);
|
|
16
16
|
}, [dataToSync]);
|
|
17
17
|
const backgroundDeliveryEnabled = backgroundDelivery !== undefined;
|
|
18
|
-
const backgroundDeliveryFrequency = backgroundDelivery?.frequency ?? _reactNativeHealthkit.
|
|
18
|
+
const backgroundDeliveryFrequency = backgroundDelivery?.frequency ?? _reactNativeHealthkit.UpdateFrequency.hourly;
|
|
19
19
|
const debouncedOnChange = React.useCallback(identifier => {
|
|
20
20
|
if (timeoutRef.current) {
|
|
21
21
|
clearTimeout(timeoutRef.current);
|
|
@@ -42,25 +42,22 @@ const useListenChanges = (dataToSync, onChange, backgroundDelivery, onError) =>
|
|
|
42
42
|
const subscriptions = [];
|
|
43
43
|
const initSubscriptions = async () => {
|
|
44
44
|
try {
|
|
45
|
-
|
|
45
|
+
await Promise.all(identifiers.map(async identifier => {
|
|
46
46
|
if (backgroundDeliveryEnabled) {
|
|
47
47
|
await _reactNativeHealthkit.default.enableBackgroundDelivery(identifier, backgroundDeliveryFrequency);
|
|
48
48
|
}
|
|
49
|
-
|
|
49
|
+
subscriptions.push(_reactNativeHealthkit.default.subscribeToChanges(identifier, () => {
|
|
50
50
|
debouncedOnChange(identifier);
|
|
51
|
-
});
|
|
52
|
-
subscriptions.push(subscription);
|
|
53
|
-
return subscription;
|
|
51
|
+
}));
|
|
54
52
|
}));
|
|
55
53
|
} catch (error) {
|
|
56
54
|
onErrorRef.current?.(error);
|
|
57
|
-
return undefined;
|
|
58
55
|
}
|
|
59
56
|
};
|
|
60
57
|
initSubscriptions();
|
|
61
58
|
return () => {
|
|
62
59
|
subscriptions.forEach(subscription => {
|
|
63
|
-
subscription
|
|
60
|
+
subscription.remove();
|
|
64
61
|
});
|
|
65
62
|
if (backgroundDeliveryEnabled) {
|
|
66
63
|
void Promise.all(identifiers.map(identifier => _reactNativeHealthkit.default.disableBackgroundDelivery(identifier))).catch(error => onErrorRef.current?.(error));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNativeHealthkit","_interopRequireWildcard","require","React","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useListenChanges","dataToSync","onChange","backgroundDelivery","onError","timeoutRef","useRef","undefined","onChangeRef","onErrorRef","identifiers","useMemo","values","flatMap","data","typeIdentifiers","map","identifier","typeIdentifier","backgroundDeliveryEnabled","backgroundDeliveryFrequency","frequency","
|
|
1
|
+
{"version":3,"names":["_reactNativeHealthkit","_interopRequireWildcard","require","React","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","useListenChanges","dataToSync","onChange","backgroundDelivery","onError","timeoutRef","useRef","undefined","onChangeRef","onErrorRef","identifiers","useMemo","values","flatMap","data","typeIdentifiers","map","identifier","typeIdentifier","backgroundDeliveryEnabled","backgroundDeliveryFrequency","frequency","UpdateFrequency","hourly","debouncedOnChange","useCallback","current","clearTimeout","setTimeout","useEffect","subscriptions","initSubscriptions","Promise","all","Healthkit","enableBackgroundDelivery","push","subscribeToChanges","error","forEach","subscription","remove","disableBackgroundDelivery","catch","exports"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/hooks/use-listen-changes.ts"],"mappings":";;;;;;AAAA,IAAAA,qBAAA,GAAAC,uBAAA,CAAAC,OAAA;AAIA,IAAAC,KAAA,GAAAF,uBAAA,CAAAC,OAAA;AAA+B,SAAAD,wBAAAG,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAL,uBAAA,YAAAA,CAAAG,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAOxB,MAAMkB,gBAAgB,GAAGA,CAC9BC,UAA8C,EAC9CC,QAAyD,EACzDC,kBAA+D,EAC/DC,OAAgC,KAC7B;EACH,MAAMC,UAAU,GAAGzB,KAAK,CAAC0B,MAAM,CAA6BC,SAAS,CAAC;EAEtE,MAAMC,WAAW,GAAG5B,KAAK,CAAC0B,MAAM,CAACJ,QAAQ,CAAC;EAC1C,MAAMO,UAAU,GAAG7B,KAAK,CAAC0B,MAAM,CAACF,OAAO,CAAC;EAExC,MAAMM,WAAW,GAAG9B,KAAK,CAAC+B,OAAO,CAAC,MAAM;IACtC,OAAOd,MAAM,CAACe,MAAM,CAACX,UAAU,CAAC,CAACY,OAAO,CACrCC,IAAI,IACHA,IAAI,EAAEC,eAAe,CAACC,GAAG,CAAEC,UAAU,IAAKA,UAAU,CAACC,cAAc,CAAC,IACpE,EACJ,CAAC;EACH,CAAC,EAAE,CAACjB,UAAU,CAAC,CAAC;EAEhB,MAAMkB,yBAAyB,GAAGhB,kBAAkB,KAAKI,SAAS;EAElE,MAAMa,2BAA2B,GAC/BjB,kBAAkB,EAAEkB,SAAS,IAAIC,qCAAe,CAACC,MAAM;EAEzD,MAAMC,iBAAiB,GAAG5C,KAAK,CAAC6C,WAAW,CACxCR,UAAyC,IAAK;IAC7C,IAAIZ,UAAU,CAACqB,OAAO,EAAE;MACtBC,YAAY,CAACtB,UAAU,CAACqB,OAAO,CAAC;IAClC;IAEArB,UAAU,CAACqB,OAAO,GAAGE,UAAU,CAAC,MAAM;MACpCpB,WAAW,CAACkB,OAAO,CAACT,UAAU,CAAC;MAC/BZ,UAAU,CAACqB,OAAO,GAAGnB,SAAS;IAChC,CAAC,EAAE,GAAG,CAAC;EACT,CAAC,EACD,EACF,CAAC;EAED3B,KAAK,CAACiD,SAAS,CAAC,MAAM;IACpBrB,WAAW,CAACkB,OAAO,GAAGxB,QAAQ;EAChC,CAAC,EAAE,CAACA,QAAQ,CAAC,CAAC;EAEdtB,KAAK,CAACiD,SAAS,CAAC,MAAM;IACpBpB,UAAU,CAACiB,OAAO,GAAGtB,OAAO;EAC9B,CAAC,EAAE,CAACA,OAAO,CAAC,CAAC;EAEbxB,KAAK,CAACiD,SAAS,CAAC,MAAM;IACpB,OAAO,MAAM;MACX,IAAIxB,UAAU,CAACqB,OAAO,EAAE;QACtBC,YAAY,CAACtB,UAAU,CAACqB,OAAO,CAAC;MAClC;IACF,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EAEN9C,KAAK,CAACiD,SAAS,CAAC,MAAM;IACpB,MAAMC,aAAoC,GAAG,EAAE;IAE/C,MAAMC,iBAAiB,GAAG,MAAAA,CAAA,KAAY;MACpC,IAAI;QACF,MAAMC,OAAO,CAACC,GAAG,CACfvB,WAAW,CAACM,GAAG,CAAC,MAAOC,UAAU,IAAK;UACpC,IAAIE,yBAAyB,EAAE;YAC7B,MAAMe,6BAAS,CAACC,wBAAwB,CACtClB,UAAU,EACVG,2BACF,CAAC;UACH;UAEAU,aAAa,CAACM,IAAI,CAChBF,6BAAS,CAACG,kBAAkB,CAACpB,UAAU,EAAE,MAAM;YAC7CO,iBAAiB,CAACP,UAAU,CAAC;UAC/B,CAAC,CACH,CAAC;QACH,CAAC,CACH,CAAC;MACH,CAAC,CAAC,OAAOqB,KAAK,EAAE;QACd7B,UAAU,CAACiB,OAAO,GAAGY,KAAc,CAAC;MACtC;IACF,CAAC;IAEDP,iBAAiB,CAAC,CAAC;IAEnB,OAAO,MAAM;MACXD,aAAa,CAACS,OAAO,CAAEC,YAAY,IAAK;QACtCA,YAAY,CAACC,MAAM,CAAC,CAAC;MACvB,CAAC,CAAC;MAEF,IAAItB,yBAAyB,EAAE;QAC7B,KAAKa,OAAO,CAACC,GAAG,CACdvB,WAAW,CAACM,GAAG,CAAEC,UAAU,IACzBiB,6BAAS,CAACQ,yBAAyB,CAACzB,UAAU,CAChD,CACF,CAAC,CAAC0B,KAAK,CAAEL,KAAc,IAAK7B,UAAU,CAACiB,OAAO,GAAGY,KAAc,CAAC,CAAC;MACnE;IACF,CAAC;EACH,CAAC,EAAE,CACD5B,WAAW,EACXc,iBAAiB,EACjBL,yBAAyB,EACzBC,2BAA2B,CAC5B,CAAC;AACJ,CAAC;AAACwB,OAAA,CAAA5C,gBAAA,GAAAA,gBAAA","ignoreList":[]}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.convertEcgSamplesToObservation = void 0;
|
|
7
|
+
var _next = require("@ovok/core/next");
|
|
8
|
+
var _healthkitSampleSource = require("./healthkit-sample-source.js");
|
|
9
|
+
var _toCoreHealthObservations = require("./to-core-health-observations.js");
|
|
10
|
+
const MILLIVOLTS_PER_VOLT = 1000;
|
|
11
|
+
const MILLISECONDS_PER_SECOND = 1000;
|
|
12
|
+
/** The waveform in millivolts with its heart rate; Apple's classification is never part of it. */
|
|
13
|
+
const toEcgMeasurement = record => {
|
|
14
|
+
const diagramPoints = (record.voltages ?? []).map(({
|
|
15
|
+
voltage
|
|
16
|
+
}) => voltage * MILLIVOLTS_PER_VOLT);
|
|
17
|
+
if (diagramPoints.length === 0) {
|
|
18
|
+
return undefined;
|
|
19
|
+
}
|
|
20
|
+
return {
|
|
21
|
+
measurementTypeKey: _next.MeasurementTypeKey.ecg,
|
|
22
|
+
diagramPoints,
|
|
23
|
+
duration: (record.endDate.getTime() - record.startDate.getTime()) / MILLISECONDS_PER_SECOND,
|
|
24
|
+
heartRate: record.averageHeartRateBpm,
|
|
25
|
+
recordedAt: record.startDate
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
/** Core's own ECG service cannot convert a sample, so the recording is built into a measurement here. */
|
|
30
|
+
const convertEcgSamplesToObservation = async props => {
|
|
31
|
+
const observations = await Promise.all(props.data.map(async record => {
|
|
32
|
+
const measurement = toEcgMeasurement(record);
|
|
33
|
+
if (!measurement) {
|
|
34
|
+
return [];
|
|
35
|
+
}
|
|
36
|
+
const observationBody = await props.client.measurements.build({
|
|
37
|
+
measurement
|
|
38
|
+
});
|
|
39
|
+
return (0, _toCoreHealthObservations.toCoreHealthObservations)(observationBody, {
|
|
40
|
+
...props,
|
|
41
|
+
data: [record]
|
|
42
|
+
}, () => (0, _healthkitSampleSource.getHealthKitSampleSource)(record));
|
|
43
|
+
}));
|
|
44
|
+
return observations.flat();
|
|
45
|
+
};
|
|
46
|
+
exports.convertEcgSamplesToObservation = convertEcgSamplesToObservation;
|
|
47
|
+
//# sourceMappingURL=convert-ecg-samples-to-observation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_next","require","_healthkitSampleSource","_toCoreHealthObservations","MILLIVOLTS_PER_VOLT","MILLISECONDS_PER_SECOND","toEcgMeasurement","record","diagramPoints","voltages","map","voltage","length","undefined","measurementTypeKey","MeasurementTypeKey","ecg","duration","endDate","getTime","startDate","heartRate","averageHeartRateBpm","recordedAt","convertEcgSamplesToObservation","props","observations","Promise","all","data","measurement","observationBody","client","measurements","build","toCoreHealthObservations","getHealthKitSampleSource","flat","exports"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-ecg-samples-to-observation.ts"],"mappings":";;;;;;AACA,IAAAA,KAAA,GAAAC,OAAA;AAIA,IAAAC,sBAAA,GAAAD,OAAA;AAIA,IAAAE,yBAAA,GAAAF,OAAA;AAEA,MAAMG,mBAAmB,GAAG,IAAI;AAChC,MAAMC,uBAAuB,GAAG,IAAI;AAOpC;AACA,MAAMC,gBAAgB,GAAIC,MAAiB,IAAiC;EAC1E,MAAMC,aAAa,GAAG,CAACD,MAAM,CAACE,QAAQ,IAAI,EAAE,EAAEC,GAAG,CAC/C,CAAC;IAAEC;EAAQ,CAAC,KAAKA,OAAO,GAAGP,mBAC7B,CAAC;EAED,IAAII,aAAa,CAACI,MAAM,KAAK,CAAC,EAAE;IAC9B,OAAOC,SAAS;EAClB;EAEA,OAAO;IACLC,kBAAkB,EAAEC,wBAAkB,CAACC,GAAG;IAC1CR,aAAa;IACbS,QAAQ,EACN,CAACV,MAAM,CAACW,OAAO,CAACC,OAAO,CAAC,CAAC,GAAGZ,MAAM,CAACa,SAAS,CAACD,OAAO,CAAC,CAAC,IACtDd,uBAAuB;IACzBgB,SAAS,EAAEd,MAAM,CAACe,mBAAmB;IACrCC,UAAU,EAAEhB,MAAM,CAACa;EACrB,CAAC;AACH,CAAC;;AAED;AACA,MAAMI,8BAA8B,GAAG,MACrCC,KAAgC,IACL;EAC3B,MAAMC,YAAY,GAAG,MAAMC,OAAO,CAACC,GAAG,CACnCH,KAAK,CAACI,IAAI,CAAiBnB,GAAG,CAAC,MAAOH,MAAM,IAAK;IAChD,MAAMuB,WAAW,GAAGxB,gBAAgB,CAACC,MAAM,CAAC;IAE5C,IAAI,CAACuB,WAAW,EAAE;MAChB,OAAO,EAAE;IACX;IAEA,MAAMC,eAAe,GAAG,MAAMN,KAAK,CAACO,MAAM,CAACC,YAAY,CAACC,KAAK,CAAC;MAC5DJ;IACF,CAAC,CAAC;IAEF,OAAO,IAAAK,kDAAwB,EAC7BJ,eAAe,EACf;MAAE,GAAGN,KAAK;MAAEI,IAAI,EAAE,CAACtB,MAAM;IAAE,CAAC,EAC5B,MAAM,IAAA6B,+CAAwB,EAAC7B,MAAM,CACvC,CAAC;EACH,CAAC,CACH,CAAC;EAED,OAAOmB,YAAY,CAACW,IAAI,CAAC,CAAC;AAC5B,CAAC;AAACC,OAAA,CAAAd,8BAAA,GAAAA,8BAAA","ignoreList":[]}
|
|
@@ -5,8 +5,10 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.convertSamplesToObservation = void 0;
|
|
7
7
|
var _creator = require("@ovok/core/dist/client/observation/services/creator");
|
|
8
|
+
var _next = require("@ovok/core/next");
|
|
9
|
+
var _convertEcgSamplesToObservation = require("./convert-ecg-samples-to-observation.js");
|
|
8
10
|
var _convertGenericHealthData = require("./convert-generic-health-data.js");
|
|
9
|
-
var
|
|
11
|
+
var _healthkitSampleSource = require("./healthkit-sample-source.js");
|
|
10
12
|
var _normalizeCoreHealthObservation = require("./normalize-core-health-observation.js");
|
|
11
13
|
var _toCoreHealthObservations = require("./to-core-health-observations.js");
|
|
12
14
|
const convertSamplesToObservation = async props => {
|
|
@@ -37,6 +39,9 @@ const convertSamplesToObservation = async props => {
|
|
|
37
39
|
mode
|
|
38
40
|
});
|
|
39
41
|
}
|
|
42
|
+
if (measurementTypeKey === _next.MeasurementTypeKey.ecg) {
|
|
43
|
+
return (0, _convertEcgSamplesToObservation.convertEcgSamplesToObservation)(props);
|
|
44
|
+
}
|
|
40
45
|
const service = _creator.ObservationServiceCreator.getInstance().getService(measurementTypeKey);
|
|
41
46
|
const measurement = service.convertSamplesToMeasurement(data);
|
|
42
47
|
if (!measurement) {
|
|
@@ -45,20 +50,7 @@ const convertSamplesToObservation = async props => {
|
|
|
45
50
|
const observationBody = await client.measurements.build({
|
|
46
51
|
measurement
|
|
47
52
|
});
|
|
48
|
-
return (0, _toCoreHealthObservations.toCoreHealthObservations)(observationBody, props, index =>
|
|
49
|
-
const sample = data?.[index];
|
|
50
|
-
return {
|
|
51
|
-
device: sample ? (0, _healthObservationDevice.getHealthObservationDevice)({
|
|
52
|
-
manufacturer: sample.device?.manufacturer,
|
|
53
|
-
model: sample.device?.model,
|
|
54
|
-
sourceApp: sample.sourceRevision?.source?.name
|
|
55
|
-
}) : undefined,
|
|
56
|
-
timing: {
|
|
57
|
-
start: sample?.startDate,
|
|
58
|
-
end: sample?.endDate
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
});
|
|
53
|
+
return (0, _toCoreHealthObservations.toCoreHealthObservations)(observationBody, props, index => (0, _healthkitSampleSource.getHealthKitSampleSource)(data[index]));
|
|
62
54
|
};
|
|
63
55
|
exports.convertSamplesToObservation = convertSamplesToObservation;
|
|
64
56
|
//# sourceMappingURL=convert-samples-to-observation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_creator","require","_convertGenericHealthData","
|
|
1
|
+
{"version":3,"names":["_creator","require","_next","_convertEcgSamplesToObservation","_convertGenericHealthData","_healthkitSampleSource","_normalizeCoreHealthObservation","_toCoreHealthObservations","convertSamplesToObservation","props","data","client","measurementTypeKey","mode","convertGenericHealthDataToObservation","length","hasConfiguredNonLoincCoding","isCoreMeasurementTypeKey","MeasurementTypeKey","ecg","convertEcgSamplesToObservation","service","ObservationServiceCreator","getInstance","getService","measurement","convertSamplesToMeasurement","observationBody","measurements","build","toCoreHealthObservations","index","getHealthKitSampleSource","exports"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/convert-samples-to-observation.ts"],"mappings":";;;;;;AACA,IAAAA,QAAA,GAAAC,OAAA;AACA,IAAAC,KAAA,GAAAD,OAAA;AAMA,IAAAE,+BAAA,GAAAF,OAAA;AACA,IAAAG,yBAAA,GAAAH,OAAA;AACA,IAAAI,sBAAA,GAAAJ,OAAA;AAIA,IAAAK,+BAAA,GAAAL,OAAA;AACA,IAAAM,yBAAA,GAAAN,OAAA;AAKO,MAAMO,2BAA2B,GAAG,MACzCC,KAAgC,IACL;EAC3B,MAAM;IAAEC,IAAI;IAAEC,MAAM;IAAEC,kBAAkB;IAAEC,IAAI,GAAG;EAAQ,CAAC,GAAGJ,KAAK;EAElE,IAAII,IAAI,KAAK,OAAO,EAAE;IACpB,OAAO,IAAAC,+DAAqC,EAAC;MAAE,GAAGL,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,IAAIH,IAAI,CAACK,MAAM,KAAK,CAAC,EAAE;IACrB,OAAO,EAAE;EACX;EAEA,IAAI,IAAAC,2DAA2B,EAACP,KAAK,CAAC,EAAE;IACtC,OAAO,IAAAK,+DAAqC,EAAC;MAAE,GAAGL,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,IAAI,CAAC,IAAAI,kDAAwB,EAACL,kBAAkB,CAAC,EAAE;IACjD,OAAO,IAAAE,+DAAqC,EAAC;MAAE,GAAGL,KAAK;MAAEI;IAAK,CAAC,CAAC;EAClE;EAEA,IAAID,kBAAkB,KAAKM,wBAAkB,CAACC,GAAG,EAAE;IACjD,OAAO,IAAAC,8DAA8B,EAACX,KAAK,CAAC;EAC9C;EAEA,MAAMY,OAAO,GAAGC,kCAAyB,CAACC,WAAW,CAAC,CAAC,CAACC,UAAU,CAChEZ,kBACF,CAAC;EAED,MAAMa,WAAW,GAAGJ,OAAO,CAACK,2BAA2B,CACrDhB,IACF,CAAC;EAED,IAAI,CAACe,WAAW,EAAE;IAChB,OAAO,EAAE;EACX;EAEA,MAAME,eAAe,GAAG,MAAMhB,MAAM,CAACiB,YAAY,CAACC,KAAK,CAAC;IACtDJ;EACF,CAAC,CAAC;EAEF,OAAO,IAAAK,kDAAwB,EAACH,eAAe,EAAElB,KAAK,EAAGsB,KAAK,IAC5D,IAAAC,+CAAwB,EAACtB,IAAI,CAACqB,KAAK,CAAsC,CAC3E,CAAC;AACH,CAAC;AAACE,OAAA,CAAAzB,2BAAA,GAAAA,2BAAA","ignoreList":[]}
|
|
@@ -24,6 +24,7 @@ const CORE_MEASUREMENT_CODES = {
|
|
|
24
24
|
HKQuantityTypeIdentifierRestingHeartRate: _next.ObservationCode.RESTING_HEART_RATE,
|
|
25
25
|
HKQuantityTypeIdentifierWalkingHeartRateAverage: _next.ObservationCode.WALKING_HEART_RATE_AVERAGE,
|
|
26
26
|
HKQuantityTypeIdentifierVO2Max: _next.ObservationCode.VO2_MAX,
|
|
27
|
+
HKElectrocardiogramType: _next.ObservationCode.ECG,
|
|
27
28
|
BloodPressure: _next.ObservationCode.SYSTOLIC_BLOOD_PRESSURE,
|
|
28
29
|
HeartRate: _next.ObservationCode.HEART_RATE,
|
|
29
30
|
BloodGlucose: _next.ObservationCode.BLOOD_GLUCOSE,
|
|
@@ -36,10 +37,15 @@ const CORE_MEASUREMENT_CODES = {
|
|
|
36
37
|
Vo2Max: _next.ObservationCode.VO2_MAX
|
|
37
38
|
};
|
|
38
39
|
|
|
39
|
-
/** Health Connect
|
|
40
|
-
const
|
|
41
|
-
|
|
42
|
-
|
|
40
|
+
/** Health Connect records that feed more than one data type: each type is coded by the record field it reads. */
|
|
41
|
+
const SHARED_RECORD_FIELDS = {
|
|
42
|
+
Nutrition: {
|
|
43
|
+
[_healthSyncKeys.HealthDataType.carbohydrates]: "totalCarbohydrate",
|
|
44
|
+
[_healthSyncKeys.HealthDataType.caloriesEaten]: "energy"
|
|
45
|
+
},
|
|
46
|
+
ExerciseSession: {
|
|
47
|
+
[_healthSyncKeys.HealthDataType.exerciseMinutes]: "duration"
|
|
48
|
+
}
|
|
43
49
|
};
|
|
44
50
|
|
|
45
51
|
/** The coding a type is saved under when the app names none: core's own code for a core measurement, else the catalog's. */
|
|
@@ -52,9 +58,9 @@ const getDefaultHealthCoding = (provider, key, identifier, mode) => {
|
|
|
52
58
|
};
|
|
53
59
|
}
|
|
54
60
|
const coding = (0, _healthDataCatalog.getHealthDataCoding)(provider, identifier, mode);
|
|
55
|
-
const
|
|
56
|
-
return
|
|
57
|
-
code: `${coding.code}.${
|
|
61
|
+
const field = SHARED_RECORD_FIELDS[identifier]?.[key];
|
|
62
|
+
return field ? {
|
|
63
|
+
code: `${coding.code}.${field}`,
|
|
58
64
|
system: coding.system
|
|
59
65
|
} : coding;
|
|
60
66
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_next","require","_healthSyncKeys","_fhirSystems","_healthDataCatalog","_toCoreHealthObservations","CORE_MEASUREMENT_CODES","HKQuantityTypeIdentifierBloodPressureSystolic","ObservationCode","SYSTOLIC_BLOOD_PRESSURE","HKQuantityTypeIdentifierBloodPressureDiastolic","DIASTOLIC_BLOOD_PRESSURE","HKQuantityTypeIdentifierHeartRate","HEART_RATE","HKQuantityTypeIdentifierBloodGlucose","BLOOD_GLUCOSE","HKQuantityTypeIdentifierBodyMass","BODY_WEIGHT","HKQuantityTypeIdentifierOxygenSaturation","OXYGEN_SATURATION","HKQuantityTypeIdentifierRespiratoryRate","RESPIRATORY_RATE","HKQuantityTypeIdentifierBodyTemperature","BODY_TEMPERATURE","HKQuantityTypeIdentifierStepCount","STEPS","HKQuantityTypeIdentifierHeartRateVariabilitySDNN","HEART_RATE_VARIABILITY","HKQuantityTypeIdentifierRestingHeartRate","RESTING_HEART_RATE","HKQuantityTypeIdentifierWalkingHeartRateAverage","WALKING_HEART_RATE_AVERAGE","HKQuantityTypeIdentifierVO2Max","VO2_MAX","BloodPressure","HeartRate","BloodGlucose","Weight","OxygenSaturation","RespiratoryRate","BodyTemperature","Steps","RestingHeartRate","Vo2Max","
|
|
1
|
+
{"version":3,"names":["_next","require","_healthSyncKeys","_fhirSystems","_healthDataCatalog","_toCoreHealthObservations","CORE_MEASUREMENT_CODES","HKQuantityTypeIdentifierBloodPressureSystolic","ObservationCode","SYSTOLIC_BLOOD_PRESSURE","HKQuantityTypeIdentifierBloodPressureDiastolic","DIASTOLIC_BLOOD_PRESSURE","HKQuantityTypeIdentifierHeartRate","HEART_RATE","HKQuantityTypeIdentifierBloodGlucose","BLOOD_GLUCOSE","HKQuantityTypeIdentifierBodyMass","BODY_WEIGHT","HKQuantityTypeIdentifierOxygenSaturation","OXYGEN_SATURATION","HKQuantityTypeIdentifierRespiratoryRate","RESPIRATORY_RATE","HKQuantityTypeIdentifierBodyTemperature","BODY_TEMPERATURE","HKQuantityTypeIdentifierStepCount","STEPS","HKQuantityTypeIdentifierHeartRateVariabilitySDNN","HEART_RATE_VARIABILITY","HKQuantityTypeIdentifierRestingHeartRate","RESTING_HEART_RATE","HKQuantityTypeIdentifierWalkingHeartRateAverage","WALKING_HEART_RATE_AVERAGE","HKQuantityTypeIdentifierVO2Max","VO2_MAX","HKElectrocardiogramType","ECG","BloodPressure","HeartRate","BloodGlucose","Weight","OxygenSaturation","RespiratoryRate","BodyTemperature","Steps","RestingHeartRate","Vo2Max","SHARED_RECORD_FIELDS","Nutrition","HealthDataType","carbohydrates","caloriesEaten","ExerciseSession","exerciseMinutes","getDefaultHealthCoding","provider","key","identifier","mode","coreCode","isCoreMeasurementTypeKey","undefined","code","system","LOINC_SYSTEM","coding","getHealthDataCoding","field","exports"],"sourceRoot":"../../../../../src","sources":["modules/data-sync/utils/default-health-coding.ts"],"mappings":";;;;;;AAAA,IAAAA,KAAA,GAAAC,OAAA;AAGA,IAAAC,eAAA,GAAAD,OAAA;AAEA,IAAAE,YAAA,GAAAF,OAAA;AACA,IAAAG,kBAAA,GAAAH,OAAA;AACA,IAAAI,yBAAA,GAAAJ,OAAA;AAEA;AACA,MAAMK,sBAA0E,GAAG;EACjFC,6CAA6C,EAAEC,qBAAe,CAACC,uBAAuB;EACtFC,8CAA8C,EAAEF,qBAAe,CAACG,wBAAwB;EACxFC,iCAAiC,EAAEJ,qBAAe,CAACK,UAAU;EAC7DC,oCAAoC,EAAEN,qBAAe,CAACO,aAAa;EACnEC,gCAAgC,EAAER,qBAAe,CAACS,WAAW;EAC7DC,wCAAwC,EAAEV,qBAAe,CAACW,iBAAiB;EAC3EC,uCAAuC,EAAEZ,qBAAe,CAACa,gBAAgB;EACzEC,uCAAuC,EAAEd,qBAAe,CAACe,gBAAgB;EACzEC,iCAAiC,EAAEhB,qBAAe,CAACiB,KAAK;EACxDC,gDAAgD,EAAElB,qBAAe,CAACmB,sBAAsB;EACxFC,wCAAwC,EAAEpB,qBAAe,CAACqB,kBAAkB;EAC5EC,+CAA+C,EAAEtB,qBAAe,CAACuB,0BAA0B;EAC3FC,8BAA8B,EAAExB,qBAAe,CAACyB,OAAO;EACvDC,uBAAuB,EAAE1B,qBAAe,CAAC2B,GAAG;EAC5CC,aAAa,EAAE5B,qBAAe,CAACC,uBAAuB;EACtD4B,SAAS,EAAE7B,qBAAe,CAACK,UAAU;EACrCyB,YAAY,EAAE9B,qBAAe,CAACO,aAAa;EAC3CwB,MAAM,EAAE/B,qBAAe,CAACS,WAAW;EACnCuB,gBAAgB,EAAEhC,qBAAe,CAACW,iBAAiB;EACnDsB,eAAe,EAAEjC,qBAAe,CAACa,gBAAgB;EACjDqB,eAAe,EAAElC,qBAAe,CAACe,gBAAgB;EACjDoB,KAAK,EAAEnC,qBAAe,CAACiB,KAAK;EAC5BmB,gBAAgB,EAAEpC,qBAAe,CAACqB,kBAAkB;EACpDgB,MAAM,EAAErC,qBAAe,CAACyB;AAC1B,CAAC;;AAED;AACA,MAAMa,oBAA+F,GAAG;EACtGC,SAAS,EAAE;IACT,CAACC,8BAAc,CAACC,aAAa,GAAG,mBAAmB;IACnD,CAACD,8BAAc,CAACE,aAAa,GAAG;EAClC,CAAC;EACDC,eAAe,EAAE;IAAE,CAACH,8BAAc,CAACI,eAAe,GAAG;EAAW;AAClE,CAAC;;AAED;AACA,MAAMC,sBAAsB,GAAGA,CAC7BC,QAAwB,EACxBC,GAAkB,EAClBC,UAAkB,EAClBC,IAAoB,KACmC;EACvD,MAAMC,QAAQ,GAAG,IAAAC,kDAAwB,EAACJ,GAAG,CAAC,GAAGjD,sBAAsB,CAACkD,UAAU,CAAC,GAAGI,SAAS;EAE/F,IAAIF,QAAQ,EAAE;IACZ,OAAO;MAAEG,IAAI,EAAEH,QAAQ;MAAEI,MAAM,EAAEC;IAAa,CAAC;EACjD;EAEA,MAAMC,MAAM,GAAG,IAAAC,sCAAmB,EAACX,QAAQ,EAAEE,UAAU,EAAEC,IAAI,CAAC;EAC9D,MAAMS,KAAK,GAAGpB,oBAAoB,CAACU,UAAU,CAAC,GAAGD,GAAG,CAAC;EAErD,OAAOW,KAAK,GAAG;IAAEL,IAAI,EAAE,GAAGG,MAAM,CAACH,IAAI,IAAIK,KAAK,EAAE;IAAEJ,MAAM,EAAEE,MAAM,CAACF;EAAO,CAAC,GAAGE,MAAM;AACpF,CAAC;AAACG,OAAA,CAAAd,sBAAA,GAAAA,sBAAA","ignoreList":[]}
|
|
@@ -5,10 +5,12 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.getSamplesFromHealth = void 0;
|
|
7
7
|
var _reactNativeHealthkit = _interopRequireWildcard(require("@kingstinct/react-native-healthkit"));
|
|
8
|
-
var _dateFns = require("date-fns");
|
|
9
8
|
var _constants = require("../constants.js");
|
|
10
9
|
var _healthUnits = require("./health-units.js");
|
|
10
|
+
var _healthkitDailyStatistics = require("./healthkit-daily-statistics.js");
|
|
11
11
|
var _healthkitDataTypes = require("./healthkit-data-types.js");
|
|
12
|
+
var _healthkitQueryOptions = require("./healthkit-query-options.js");
|
|
13
|
+
var _healthkitSamples = require("./healthkit-samples.js");
|
|
12
14
|
var _healthkitSeries = require("./healthkit-series.js");
|
|
13
15
|
var _isDailyAggregateMode = require("./is-daily-aggregate-mode.js");
|
|
14
16
|
var _syncWindowStart = require("./sync-window-start.js");
|
|
@@ -26,63 +28,58 @@ const getSamplesFromHealth = async ({
|
|
|
26
28
|
if (!(0, _healthkitDataTypes.isQuantityIdentifier)(typeIdentifier)) {
|
|
27
29
|
throw new _healthkitDataTypes.UnsupportedHealthKitDataError(typeIdentifier, `HealthKit ${mode} mode is only supported for quantity samples.`);
|
|
28
30
|
}
|
|
29
|
-
return mode === "series" ? (0, _healthkitSeries.getHealthKitSeries)(typeIdentifier, startDate) : getDailyStatistics(typeIdentifier, mode, startDate, endDate);
|
|
31
|
+
return mode === "series" ? (0, _healthkitSeries.getHealthKitSeries)(typeIdentifier, startDate) : (0, _healthkitDailyStatistics.getDailyStatistics)(typeIdentifier, mode, startDate, endDate);
|
|
30
32
|
}
|
|
33
|
+
const filter = (0, _healthkitQueryOptions.strictDateWindow)(startDate, endDate);
|
|
31
34
|
const options = {
|
|
32
|
-
from: startDate,
|
|
33
|
-
to: endDate,
|
|
34
35
|
limit: chunkSize,
|
|
35
|
-
anchor
|
|
36
|
+
anchor,
|
|
37
|
+
filter
|
|
36
38
|
};
|
|
37
|
-
if (typeIdentifier === _reactNativeHealthkit.
|
|
38
|
-
const result = await _reactNativeHealthkit.default.queryWorkoutSamplesWithAnchor(
|
|
39
|
+
if (typeIdentifier === _reactNativeHealthkit.WorkoutTypeIdentifier) {
|
|
40
|
+
const result = await _reactNativeHealthkit.default.queryWorkoutSamplesWithAnchor(options);
|
|
41
|
+
return toAnchoredResult(typeIdentifier, result.workouts.map(_healthkitSamples.toWorkoutRecord), result);
|
|
42
|
+
}
|
|
43
|
+
if (typeIdentifier === _reactNativeHealthkit.ElectrocardiogramTypeIdentifier) {
|
|
44
|
+
const limit = Math.min(chunkSize, _constants.ECG_PAGE_SIZE);
|
|
45
|
+
const result = await _reactNativeHealthkit.default.queryElectrocardiogramSamplesWithAnchor({
|
|
39
46
|
...options,
|
|
40
|
-
|
|
41
|
-
|
|
47
|
+
limit,
|
|
48
|
+
includeVoltages: true
|
|
42
49
|
});
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
return toAnchoredResult(typeIdentifier, result);
|
|
50
|
+
return {
|
|
51
|
+
...toAnchoredResult(typeIdentifier, result.samples.map(_healthkitSamples.toEcgRecord), result),
|
|
52
|
+
hasMore: result.samples.length >= limit
|
|
53
|
+
};
|
|
50
54
|
}
|
|
51
|
-
if (typeIdentifier === "HKDataTypeIdentifierHeartbeatSeries"
|
|
55
|
+
if (typeIdentifier === "HKDataTypeIdentifierHeartbeatSeries") {
|
|
52
56
|
const result = await _reactNativeHealthkit.default.queryHeartbeatSeriesSamplesWithAnchor(options);
|
|
53
|
-
return toAnchoredResult(typeIdentifier, result);
|
|
57
|
+
return toAnchoredResult(typeIdentifier, result.samples.map(_healthkitSamples.toPlainSample), result);
|
|
54
58
|
}
|
|
55
|
-
if ((0, _healthkitDataTypes.isCategoryIdentifier)(typeIdentifier)
|
|
59
|
+
if ((0, _healthkitDataTypes.isCategoryIdentifier)(typeIdentifier)) {
|
|
56
60
|
const result = await _reactNativeHealthkit.default.queryCategorySamplesWithAnchor(typeIdentifier, options);
|
|
57
|
-
|
|
58
|
-
return {
|
|
59
|
-
data: [],
|
|
60
|
-
anchor: undefined
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
return toAnchoredResult(typeIdentifier, result);
|
|
61
|
+
return toAnchoredResult(typeIdentifier, result.samples.map(_healthkitSamples.toPlainSample), result);
|
|
64
62
|
}
|
|
65
63
|
if ((0, _healthkitDataTypes.isCorrelationIdentifier)(typeIdentifier)) {
|
|
66
|
-
const
|
|
67
|
-
|
|
68
|
-
|
|
64
|
+
const correlations = await _reactNativeHealthkit.default.queryCorrelationSamples(typeIdentifier, {
|
|
65
|
+
limit: _healthkitQueryOptions.ALL_SAMPLES,
|
|
66
|
+
ascending: true,
|
|
67
|
+
filter
|
|
69
68
|
});
|
|
70
69
|
return {
|
|
71
|
-
data:
|
|
70
|
+
data: correlations.map(_healthkitSamples.toPlainCorrelation),
|
|
72
71
|
anchor: undefined
|
|
73
72
|
};
|
|
74
73
|
}
|
|
75
74
|
if (typeIdentifier === "HKStateOfMindTypeIdentifier") {
|
|
75
|
+
// State of mind is read by window, not by anchor, so an unlimited page keeps the window from being cut short.
|
|
76
76
|
const samples = await _reactNativeHealthkit.default.queryStateOfMindSamples({
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// HealthKit's unbounded query and avoids silently truncating the window.
|
|
81
|
-
limit: 0,
|
|
82
|
-
ascending: false
|
|
77
|
+
limit: _healthkitQueryOptions.ALL_SAMPLES,
|
|
78
|
+
ascending: false,
|
|
79
|
+
filter
|
|
83
80
|
});
|
|
84
81
|
return {
|
|
85
|
-
data:
|
|
82
|
+
data: samples.map(_healthkitSamples.toPlainSample),
|
|
86
83
|
anchor: undefined
|
|
87
84
|
};
|
|
88
85
|
}
|
|
@@ -91,13 +88,7 @@ const getSamplesFromHealth = async ({
|
|
|
91
88
|
...options,
|
|
92
89
|
unit: (0, _healthUnits.healthUnitFor)(typeIdentifier)
|
|
93
90
|
});
|
|
94
|
-
|
|
95
|
-
return {
|
|
96
|
-
data: [],
|
|
97
|
-
anchor: undefined
|
|
98
|
-
};
|
|
99
|
-
}
|
|
100
|
-
return toAnchoredResult(typeIdentifier, result);
|
|
91
|
+
return toAnchoredResult(typeIdentifier, result.samples.map(_healthkitSamples.toPlainSample), result);
|
|
101
92
|
}
|
|
102
93
|
throw new _healthkitDataTypes.UnsupportedHealthKitDataError(typeIdentifier, (0, _healthkitDataTypes.unsupportedHealthKitTypeReason)(typeIdentifier));
|
|
103
94
|
};
|
|
@@ -112,49 +103,15 @@ const deletedRecordIds = samples => {
|
|
|
112
103
|
};
|
|
113
104
|
|
|
114
105
|
/** Maps one page of an anchored HealthKit query to the provider result shape. */
|
|
115
|
-
const toAnchoredResult = (typeIdentifier,
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
106
|
+
const toAnchoredResult = (typeIdentifier, data, {
|
|
107
|
+
deletedSamples,
|
|
108
|
+
newAnchor
|
|
109
|
+
}) => ({
|
|
110
|
+
data,
|
|
111
|
+
...deletedRecordIds(deletedSamples),
|
|
112
|
+
anchor: newAnchor ? {
|
|
119
113
|
typeIdentifier,
|
|
120
|
-
anchor:
|
|
114
|
+
anchor: newAnchor
|
|
121
115
|
} : undefined
|
|
122
116
|
});
|
|
123
|
-
const getDailyStatistics = async (typeIdentifier, mode, startDate, endDate) => {
|
|
124
|
-
const firstDay = (0, _dateFns.startOfDay)(startDate);
|
|
125
|
-
const today = (0, _dateFns.startOfDay)(endDate);
|
|
126
|
-
const options = mode === "daily-total" ? [_reactNativeHealthkit.HKStatisticsOptions.cumulativeSum] : [_reactNativeHealthkit.HKStatisticsOptions.discreteAverage, _reactNativeHealthkit.HKStatisticsOptions.discreteMin, _reactNativeHealthkit.HKStatisticsOptions.discreteMax];
|
|
127
|
-
const statistics = await _reactNativeHealthkit.default.queryStatisticsCollectionForQuantity(typeIdentifier, options, (0, _dateFns.startOfDay)(new Date(2001, 0, 1)), {
|
|
128
|
-
day: 1
|
|
129
|
-
}, firstDay, today, (0, _healthUnits.healthUnitFor)(typeIdentifier));
|
|
130
|
-
const data = statistics.flatMap((statistic, index) => {
|
|
131
|
-
const dayStart = (0, _dateFns.addDays)(firstDay, index);
|
|
132
|
-
const dayEnd = (0, _dateFns.addDays)(dayStart, 1);
|
|
133
|
-
const total = statistic.sumQuantity?.quantity;
|
|
134
|
-
const average = statistic.averageQuantity?.quantity;
|
|
135
|
-
const minimum = statistic.minimumQuantity?.quantity;
|
|
136
|
-
const maximum = statistic.maximumQuantity?.quantity;
|
|
137
|
-
if (dayEnd > today || (mode === "daily-total" ? total === undefined : average === undefined)) {
|
|
138
|
-
return [];
|
|
139
|
-
}
|
|
140
|
-
return [{
|
|
141
|
-
kind: mode,
|
|
142
|
-
typeIdentifier,
|
|
143
|
-
startDate: dayStart,
|
|
144
|
-
endDate: dayEnd,
|
|
145
|
-
unit: statistic.sumQuantity?.unit ?? statistic.averageQuantity?.unit ?? (0, _healthUnits.healthUnitFor)(typeIdentifier) ?? "1",
|
|
146
|
-
...(mode === "daily-total" ? {
|
|
147
|
-
value: total
|
|
148
|
-
} : {
|
|
149
|
-
average,
|
|
150
|
-
minimum,
|
|
151
|
-
maximum
|
|
152
|
-
})
|
|
153
|
-
}];
|
|
154
|
-
});
|
|
155
|
-
return {
|
|
156
|
-
data,
|
|
157
|
-
anchor: undefined
|
|
158
|
-
};
|
|
159
|
-
};
|
|
160
117
|
//# sourceMappingURL=get-samples-from-health.js.map
|