1 | import { EventEmitter, UnavailabilityError } from '@unimodules/core';
|
2 | import invariant from 'invariant';
|
3 |
|
4 | import ExponentPedometer from './ExponentPedometer';
|
5 |
|
6 | const PedometerEventEmitter = new EventEmitter(ExponentPedometer);
|
7 |
|
8 | type PedometerResult = { steps: number };
|
9 | type PedometerUpdateCallback = (result: PedometerResult) => void;
|
10 | export interface PedometerListener {
|
11 | remove: () => void;
|
12 | }
|
13 |
|
14 | export function watchStepCount(callback: PedometerUpdateCallback): PedometerListener {
|
15 | return PedometerEventEmitter.addListener('Exponent.pedometerUpdate', callback);
|
16 | }
|
17 |
|
18 | export async function getStepCountAsync(start: Date, end: Date): Promise<PedometerResult> {
|
19 | if (!ExponentPedometer.getStepCountAsync) {
|
20 | throw new UnavailabilityError('ExponentPedometer', 'getStepCountAsync');
|
21 | }
|
22 | invariant(start <= end, 'Pedometer: The start date must precede the end date.');
|
23 | return await ExponentPedometer.getStepCountAsync(start.getTime(), end.getTime());
|
24 | }
|
25 |
|
26 | export async function isAvailableAsync(): Promise<boolean> {
|
27 | return await ExponentPedometer.isAvailableAsync();
|
28 | }
|