@sumaris-net/ngx-components 2.4.63 → 2.4.65

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,14 +1,46 @@
1
1
  import { Geolocation } from '@capacitor/geolocation';
2
+ import { isNil } from '../functions';
2
3
  export class IPosition {
3
4
  }
4
5
  export class GeolocationUtils {
6
+ static isNotNilAndValid(position, opts) {
7
+ if (!position || isNil(position.latitude) || isNil(position.longitude))
8
+ return false;
9
+ // Invalid lat/lon
10
+ if (position.latitude < -90 || position.latitude > 90
11
+ || position.longitude < -180 || position.longitude > 180) {
12
+ // /!\ Log in console, because should never occur
13
+ if (opts?.debug)
14
+ console.warn('Invalid lat/long position: ', position);
15
+ return false;
16
+ }
17
+ // OK: valid
18
+ return true;
19
+ }
20
+ static isNilOrInvalid(position, opts) {
21
+ return !GeolocationUtils.isNotNilAndValid(position, opts);
22
+ }
23
+ static computeDistanceInMiles(position1, position2) {
24
+ // Invalid position(s): skip
25
+ if (GeolocationUtils.isNilOrInvalid(position1, { debug: true })
26
+ || GeolocationUtils.isNilOrInvalid(position2, { debug: true }))
27
+ return;
28
+ const latitude1Rad = Math.PI * position1.latitude / 180;
29
+ const longitude1Rad = Math.PI * position1.longitude / 180;
30
+ const latitude2Rad = Math.PI * position2.latitude / 180;
31
+ const longitude2Rad = Math.PI * position2.longitude / 180;
32
+ let distance = 2 * 6371 * Math.asin(Math.sqrt(Math.pow(Math.sin((latitude1Rad - latitude2Rad) / 2), 2)
33
+ + Math.cos(latitude1Rad) * Math.cos(latitude2Rad) * Math.pow(Math.sin((longitude2Rad - longitude1Rad) / 2), 2)));
34
+ distance = Math.round((((distance / 1.852) + Number.EPSILON) * 100)) / 100;
35
+ return distance;
36
+ }
5
37
  /**
6
38
  * Get the position by geo loc sensor
7
39
  */
8
40
  static async getCurrentPosition(platform, options) {
9
41
  // Use Capacitor plugin
10
42
  try {
11
- console.info(`[position-utils] Get current geo position, using Capacitor...(timeout: ${options?.timeout})`);
43
+ console.info(`[geolocation-utils] Get current geo location, using Capacitor...(timeout: ${options?.timeout})`);
12
44
  const pos = await Geolocation.getCurrentPosition(options);
13
45
  return {
14
46
  latitude: pos.coords.latitude,
@@ -16,13 +48,19 @@ export class GeolocationUtils {
16
48
  };
17
49
  }
18
50
  catch (err) {
19
- console.error('[position-utils] Cannot get current geo position, using Capacitor:', err);
20
- // Stop if capacitor (cannot use browser geolocation, because of browser security limitation)
21
- if (platform.is('capacitor'))
51
+ // If capacitor : throw error (cannot fallback to browser geolocation, because of browser security limitation)
52
+ if (platform.is('capacitor')) {
53
+ console.error(`[geolocation-utils] Cannot get current geo location, using Capacitor: ${err?.message || ''} (code=${err?.code || 'null'})`);
54
+ const permissions = await Geolocation.checkPermissions();
55
+ const permissionStatus = permissions?.coarseLocation || permissions?.location;
56
+ if (permissionStatus === 'denied') {
57
+ throw { ...err, code: GeolocationPositionError.PERMISSION_DENIED };
58
+ }
22
59
  throw err;
60
+ }
23
61
  }
24
62
  // Or fallback to navigator
25
- console.info('[position-utils] Get current geo position, using browser...');
63
+ console.info('[geolocation-utils] Get current geo location, using browser...');
26
64
  return new Promise((resolve, reject) => {
27
65
  navigator.geolocation.getCurrentPosition((res) => {
28
66
  resolve({
@@ -32,10 +70,10 @@ export class GeolocationUtils {
32
70
  }, (err) => {
33
71
  let message = err?.message || err;
34
72
  message = typeof message === 'string' ? message : JSON.stringify(message);
35
- console.error('[position-utils] Cannot get current geo position, using browser:' + message);
73
+ console.error('[geolocation-utils] Cannot get current geo location, using browser:' + message);
36
74
  reject(err);
37
75
  }, options);
38
76
  });
39
77
  }
40
78
  }
41
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFHL0QsTUFBTSxPQUFPLFNBQVM7Q0FHckI7QUFFRCxNQUFNLE9BQWdCLGdCQUFnQjtJQUVwQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsa0JBQWtCLENBQUMsUUFBeUIsRUFBRSxPQUF5QjtRQUNsRix1QkFBdUI7UUFDdkIsSUFBSTtZQUNGLE9BQU8sQ0FBQyxJQUFJLENBQUMsMEVBQTBFLE9BQU8sRUFBRSxPQUFPLEdBQUcsQ0FBQyxDQUFDO1lBQzVHLE1BQU0sR0FBRyxHQUFhLE1BQU0sV0FBVyxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3BFLE9BQWtCO2dCQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxRQUFRO2dCQUM3QixTQUFTLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTO2FBQ2hDLENBQUM7U0FDSDtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxvRUFBb0UsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN6Riw2RkFBNkY7WUFDN0YsSUFBSSxRQUFRLENBQUMsRUFBRSxDQUFDLFdBQVcsQ0FBQztnQkFBRSxNQUFNLEdBQUcsQ0FBQztTQUN6QztRQUVELDJCQUEyQjtRQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLDZEQUE2RCxDQUFDLENBQUE7UUFDM0UsT0FBTyxJQUFJLE9BQU8sQ0FBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoRCxTQUFTLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzdDLE9BQU8sQ0FBWTtvQkFDakIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUTtvQkFDN0IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUztpQkFDaEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUM7Z0JBQ2xDLE9BQU8sR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxrRUFBa0UsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDNUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxFQUNELE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW9sb2NhdGlvbiwgUG9zaXRpb24gfSBmcm9tICdAY2FwYWNpdG9yL2dlb2xvY2F0aW9uJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuXG5leHBvcnQgY2xhc3MgSVBvc2l0aW9uIHtcbiAgbGF0aXR1ZGU6IG51bWJlcjtcbiAgbG9uZ2l0dWRlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBHZW9sb2NhdGlvblV0aWxzIHtcblxuICAvKipcbiAgICogR2V0IHRoZSBwb3NpdGlvbiBieSBnZW8gbG9jIHNlbnNvclxuICAgKi9cbiAgc3RhdGljIGFzeW5jIGdldEN1cnJlbnRQb3NpdGlvbihwbGF0Zm9ybTogUGxhdGZvcm1TZXJ2aWNlLCBvcHRpb25zPzogUG9zaXRpb25PcHRpb25zKTogUHJvbWlzZTxJUG9zaXRpb24+IHtcbiAgICAvLyBVc2UgQ2FwYWNpdG9yIHBsdWdpblxuICAgIHRyeSB7XG4gICAgICBjb25zb2xlLmluZm8oYFtwb3NpdGlvbi11dGlsc10gR2V0IGN1cnJlbnQgZ2VvIHBvc2l0aW9uLCB1c2luZyBDYXBhY2l0b3IuLi4odGltZW91dDogJHtvcHRpb25zPy50aW1lb3V0fSlgKTtcbiAgICAgIGNvbnN0IHBvczogUG9zaXRpb24gPSBhd2FpdCBHZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24ob3B0aW9ucyk7XG4gICAgICByZXR1cm4gPElQb3NpdGlvbj57XG4gICAgICAgIGxhdGl0dWRlOiBwb3MuY29vcmRzLmxhdGl0dWRlLFxuICAgICAgICBsb25naXR1ZGU6IHBvcy5jb29yZHMubG9uZ2l0dWRlXG4gICAgICB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignW3Bvc2l0aW9uLXV0aWxzXSBDYW5ub3QgZ2V0IGN1cnJlbnQgZ2VvIHBvc2l0aW9uLCB1c2luZyBDYXBhY2l0b3I6JywgZXJyKTtcbiAgICAgIC8vIFN0b3AgaWYgY2FwYWNpdG9yIChjYW5ub3QgdXNlIGJyb3dzZXIgZ2VvbG9jYXRpb24sIGJlY2F1c2Ugb2YgYnJvd3NlciBzZWN1cml0eSBsaW1pdGF0aW9uKVxuICAgICAgaWYgKHBsYXRmb3JtLmlzKCdjYXBhY2l0b3InKSkgdGhyb3cgZXJyO1xuICAgIH1cblxuICAgIC8vIE9yIGZhbGxiYWNrIHRvIG5hdmlnYXRvclxuICAgIGNvbnNvbGUuaW5mbygnW3Bvc2l0aW9uLXV0aWxzXSBHZXQgY3VycmVudCBnZW8gcG9zaXRpb24sIHVzaW5nIGJyb3dzZXIuLi4nKVxuICAgIHJldHVybiBuZXcgUHJvbWlzZTxJUG9zaXRpb24+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oKHJlcykgPT4ge1xuICAgICAgICAgIHJlc29sdmUoPElQb3NpdGlvbj57XG4gICAgICAgICAgICBsYXRpdHVkZTogcmVzLmNvb3Jkcy5sYXRpdHVkZSxcbiAgICAgICAgICAgIGxvbmdpdHVkZTogcmVzLmNvb3Jkcy5sb25naXR1ZGVcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgKGVycikgPT4ge1xuICAgICAgICAgIGxldCBtZXNzYWdlID0gZXJyPy5tZXNzYWdlIHx8IGVycjtcbiAgICAgICAgICBtZXNzYWdlID0gdHlwZW9mIG1lc3NhZ2UgPT09ICdzdHJpbmcnID8gbWVzc2FnZSA6IEpTT04uc3RyaW5naWZ5KG1lc3NhZ2UpO1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ1twb3NpdGlvbi11dGlsc10gQ2Fubm90IGdldCBjdXJyZW50IGdlbyBwb3NpdGlvbiwgdXNpbmcgYnJvd3NlcjonICsgbWVzc2FnZSk7XG4gICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIH0sXG4gICAgICAgIG9wdGlvbnNcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
79
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VvbG9jYXRpb24udXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBwL3NoYXJlZC9nZW9sb2NhdGlvbi9nZW9sb2NhdGlvbi51dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFZLE1BQU0sd0JBQXdCLENBQUM7QUFHL0QsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGNBQWMsQ0FBQztBQUVuQyxNQUFNLE9BQU8sU0FBUztDQUdyQjtBQUVELE1BQU0sT0FBZ0IsZ0JBQWdCO0lBRXBDLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFtQixFQUFFLElBQXdCO1FBRW5FLElBQUksQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQztZQUFFLE9BQU8sS0FBSyxDQUFDO1FBRXJGLGtCQUFrQjtRQUNsQixJQUFJLFFBQVEsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDLFFBQVEsR0FBRyxFQUFFO2VBQ2hELFFBQVEsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQUksUUFBUSxDQUFDLFNBQVMsR0FBRyxHQUFHLEVBQUU7WUFFMUQsaURBQWlEO1lBQ2pELElBQUksSUFBSSxFQUFFLEtBQUs7Z0JBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsRUFBRSxRQUFRLENBQUMsQ0FBQztZQUN4RSxPQUFPLEtBQUssQ0FBQztTQUNkO1FBRUQsWUFBWTtRQUNaLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sQ0FBQyxjQUFjLENBQUMsUUFBbUIsRUFBRSxJQUF3QjtRQUNqRSxPQUFPLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzVELENBQUM7SUFFRCxNQUFNLENBQUMsc0JB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SSxDQUFDLGdFQUFnRSxDQUFDLENBQUE7UUFDOUUsT0FBTyxJQUFJLE9BQU8sQ0FBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsRUFBRTtZQUNoRCxTQUFTLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQzdDLE9BQU8sQ0FBWTtvQkFDakIsUUFBUSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsUUFBUTtvQkFDN0IsU0FBUyxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUztpQkFDaEMsQ0FBQyxDQUFDO1lBQ0wsQ0FBQyxFQUNELENBQUMsR0FBRyxFQUFFLEVBQUU7Z0JBQ04sSUFBSSxPQUFPLEdBQUcsR0FBRyxFQUFFLE9BQU8sSUFBSSxHQUFHLENBQUM7Z0JBQ2xDLE9BQU8sR0FBRyxPQUFPLE9BQU8sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDMUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxxRUFBcUUsR0FBRyxPQUFPLENBQUMsQ0FBQztnQkFDL0YsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ2QsQ0FBQyxFQUNELE9BQU8sQ0FDUixDQUFDO1FBQ0osQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBHZW9sb2NhdGlvbiwgUG9zaXRpb24gfSBmcm9tICdAY2FwYWNpdG9yL2dlb2xvY2F0aW9uJztcbmltcG9ydCB7UGxhdGZvcm1TZXJ2aWNlfSBmcm9tICcuLi8uLi9jb3JlL3NlcnZpY2VzL3BsYXRmb3JtLnNlcnZpY2UnO1xuaW1wb3J0IHtQbGF0Zm9ybX0gZnJvbSAnQGlvbmljL2FuZ3VsYXInO1xuaW1wb3J0IHtpc05pbH0gZnJvbSAnLi4vZnVuY3Rpb25zJztcblxuZXhwb3J0IGNsYXNzIElQb3NpdGlvbiB7XG4gIGxhdGl0dWRlOiBudW1iZXI7XG4gIGxvbmdpdHVkZTogbnVtYmVyO1xufVxuXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgR2VvbG9jYXRpb25VdGlscyB7XG5cbiAgc3RhdGljIGlzTm90TmlsQW5kVmFsaWQocG9zaXRpb246IElQb3NpdGlvbiwgb3B0cz86IHtkZWJ1Zz86IGJvb2xlYW59KSB7XG5cbiAgICBpZiAoIXBvc2l0aW9uIHx8IGlzTmlsKHBvc2l0aW9uLmxhdGl0dWRlKSB8fCBpc05pbChwb3NpdGlvbi5sb25naXR1ZGUpKSByZXR1cm4gZmFsc2U7XG5cbiAgICAvLyBJbnZhbGlkIGxhdC9sb25cbiAgICBpZiAocG9zaXRpb24ubGF0aXR1ZGUgPCAtOTAgfHwgcG9zaXRpb24ubGF0aXR1ZGUgPiA5MFxuICAgICAgfHwgcG9zaXRpb24ubG9uZ2l0dWRlIDwgLTE4MCB8fCBwb3NpdGlvbi5sb25naXR1ZGUgPiAxODApIHtcblxuICAgICAgLy8gLyFcXCBMb2cgaW4gY29uc29sZSwgYmVjYXVzZSBzaG91bGQgbmV2ZXIgb2NjdXJcbiAgICAgIGlmIChvcHRzPy5kZWJ1ZykgY29uc29sZS53YXJuKCdJbnZhbGlkIGxhdC9sb25nIHBvc2l0aW9uOiAgJywgcG9zaXRpb24pO1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIC8vIE9LOiB2YWxpZFxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc3RhdGljIGlzTmlsT3JJbnZhbGlkKHBvc2l0aW9uOiBJUG9zaXRpb24sIG9wdHM/OiB7ZGVidWc/OiBib29sZWFufSkge1xuICAgIHJldHVybiAhR2VvbG9jYXRpb25VdGlscy5pc05vdE5pbEFuZFZhbGlkKHBvc2l0aW9uLCBvcHRzKTtcbiAgfVxuXG4gIHN0YXRpYyBjb21wdXRlRGlzdGFuY2VJbk1pbGVzKHBvc2l0aW9uMTogSVBvc2l0aW9uLCBwb3NpdGlvbjI6IElQb3NpdGlvbik6IG51bWJlciB7XG4gICAgLy8gSW52YWxpZCBwb3NpdGlvbihzKTogc2tpcFxuICAgIGlmIChHZW9sb2NhdGlvblV0aWxzLmlzTmlsT3JJbnZhbGlkKHBvc2l0aW9uMSwge2RlYnVnOiB0cnVlfSlcbiAgICAgIHx8IEdlb2xvY2F0aW9uVXRpbHMuaXNOaWxPckludmFsaWQocG9zaXRpb24yLCB7ZGVidWc6IHRydWV9KSkgcmV0dXJuO1xuXG4gICAgY29uc3QgbGF0aXR1ZGUxUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMS5sYXRpdHVkZSAvIDE4MDtcbiAgICBjb25zdCBsb25naXR1ZGUxUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMS5sb25naXR1ZGUgLyAxODA7XG4gICAgY29uc3QgbGF0aXR1ZGUyUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMi5sYXRpdHVkZSAvIDE4MDtcbiAgICBjb25zdCBsb25naXR1ZGUyUmFkID0gTWF0aC5QSSAqIHBvc2l0aW9uMi5sb25naXR1ZGUgLyAxODA7XG5cbiAgICBsZXQgZGlzdGFuY2UgPSAyICogNjM3MSAqIE1hdGguYXNpbihcbiAgICAgIE1hdGguc3FydChcbiAgICAgICAgTWF0aC5wb3coTWF0aC5zaW4oKGxhdGl0dWRlMVJhZCAtIGxhdGl0dWRlMlJhZCkgLyAyKSwgMilcbiAgICAgICAgKyBNYXRoLmNvcyhsYXRpdHVkZTFSYWQpICogTWF0aC5jb3MobGF0aXR1ZGUyUmFkKSAqIE1hdGgucG93KE1hdGguc2luKChsb25naXR1ZGUyUmFkIC0gbG9uZ2l0dWRlMVJhZCkgLyAyKSwgMilcbiAgICAgICkpO1xuICAgIGRpc3RhbmNlID0gTWF0aC5yb3VuZCgoKChkaXN0YW5jZSAvIDEuODUyKSArIE51bWJlci5FUFNJTE9OKSAqIDEwMCkpIC8gMTAwO1xuICAgIHJldHVybiBkaXN0YW5jZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIHBvc2l0aW9uIGJ5IGdlbyBsb2Mgc2Vuc29yXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZ2V0Q3VycmVudFBvc2l0aW9uKHBsYXRmb3JtOiBQbGF0Zm9ybVNlcnZpY2V8UGxhdGZvcm0sIG9wdGlvbnM/OiBQb3NpdGlvbk9wdGlvbnMpOiBQcm9taXNlPElQb3NpdGlvbj4ge1xuXG4gICAgLy8gVXNlIENhcGFjaXRvciBwbHVnaW5cbiAgICB0cnkge1xuICAgICAgY29uc29sZS5pbmZvKGBbZ2VvbG9jYXRpb24tdXRpbHNdIEdldCBjdXJyZW50IGdlbyBsb2NhdGlvbiwgdXNpbmcgQ2FwYWNpdG9yLi4uKHRpbWVvdXQ6ICR7b3B0aW9ucz8udGltZW91dH0pYCk7XG4gICAgICBjb25zdCBwb3M6IFBvc2l0aW9uID0gYXdhaXQgR2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKG9wdGlvbnMpO1xuICAgICAgcmV0dXJuIDxJUG9zaXRpb24+e1xuICAgICAgICBsYXRpdHVkZTogcG9zLmNvb3Jkcy5sYXRpdHVkZSxcbiAgICAgICAgbG9uZ2l0dWRlOiBwb3MuY29vcmRzLmxvbmdpdHVkZVxuICAgICAgfTtcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIC8vIElmIGNhcGFjaXRvciA6IHRocm93IGVycm9yIChjYW5ub3QgZmFsbGJhY2sgdG8gYnJvd3NlciBnZW9sb2NhdGlvbiwgYmVjYXVzZSBvZiBicm93c2VyIHNlY3VyaXR5IGxpbWl0YXRpb24pXG4gICAgICBpZiAocGxhdGZvcm0uaXMoJ2NhcGFjaXRvcicpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFtnZW9sb2NhdGlvbi11dGlsc10gQ2Fubm90IGdldCBjdXJyZW50IGdlbyBsb2NhdGlvbiwgdXNpbmcgQ2FwYWNpdG9yOiAke2Vycj8ubWVzc2FnZSB8fCAnJ30gKGNvZGU9JHtlcnI/LmNvZGUgfHwgJ251bGwnfSlgKTtcbiAgICAgICAgY29uc3QgcGVybWlzc2lvbnMgPSBhd2FpdCBHZW9sb2NhdGlvbi5jaGVja1Blcm1pc3Npb25zKCk7XG4gICAgICAgIGNvbnN0IHBlcm1pc3Npb25TdGF0dXMgPSBwZXJtaXNzaW9ucz8uY29hcnNlTG9jYXRpb24gfHwgcGVybWlzc2lvbnM/LmxvY2F0aW9uO1xuICAgICAgICBpZiAocGVybWlzc2lvblN0YXR1cyA9PT0gJ2RlbmllZCcpIHtcbiAgICAgICAgICB0aHJvdyB7Li4uZXJyLCBjb2RlOiBHZW9sb2NhdGlvblBvc2l0aW9uRXJyb3IuUEVSTUlTU0lPTl9ERU5JRUR9O1xuICAgICAgICB9XG4gICAgICAgIHRocm93IGVycjtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBPciBmYWxsYmFjayB0byBuYXZpZ2F0b3JcbiAgICBjb25zb2xlLmluZm8oJ1tnZW9sb2NhdGlvbi11dGlsc10gR2V0IGN1cnJlbnQgZ2VvIGxvY2F0aW9uLCB1c2luZyBicm93c2VyLi4uJylcbiAgICByZXR1cm4gbmV3IFByb21pc2U8SVBvc2l0aW9uPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBuYXZpZ2F0b3IuZ2VvbG9jYXRpb24uZ2V0Q3VycmVudFBvc2l0aW9uKChyZXMpID0+IHtcbiAgICAgICAgICByZXNvbHZlKDxJUG9zaXRpb24+e1xuICAgICAgICAgICAgbGF0aXR1ZGU6IHJlcy5jb29yZHMubGF0aXR1ZGUsXG4gICAgICAgICAgICBsb25naXR1ZGU6IHJlcy5jb29yZHMubG9uZ2l0dWRlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0sXG4gICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICBsZXQgbWVzc2FnZSA9IGVycj8ubWVzc2FnZSB8fCBlcnI7XG4gICAgICAgICAgbWVzc2FnZSA9IHR5cGVvZiBtZXNzYWdlID09PSAnc3RyaW5nJyA/IG1lc3NhZ2UgOiBKU09OLnN0cmluZ2lmeShtZXNzYWdlKTtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdbZ2VvbG9jYXRpb24tdXRpbHNdIENhbm5vdCBnZXQgY3VycmVudCBnZW8gbG9jYXRpb24sIHVzaW5nIGJyb3dzZXI6JyArIG1lc3NhZ2UpO1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9LFxuICAgICAgICBvcHRpb25zXG4gICAgICApO1xuICAgIH0pO1xuICB9XG5cbn1cbiJdfQ==
@@ -21994,6 +21994,37 @@ class JobUtils {
21994
21994
  class IPosition {
21995
21995
  }
21996
21996
  class GeolocationUtils {
21997
+ static isNotNilAndValid(position, opts) {
21998
+ if (!position || isNil(position.latitude) || isNil(position.longitude))
21999
+ return false;
22000
+ // Invalid lat/lon
22001
+ if (position.latitude < -90 || position.latitude > 90
22002
+ || position.longitude < -180 || position.longitude > 180) {
22003
+ // /!\ Log in console, because should never occur
22004
+ if (opts === null || opts === void 0 ? void 0 : opts.debug)
22005
+ console.warn('Invalid lat/long position: ', position);
22006
+ return false;
22007
+ }
22008
+ // OK: valid
22009
+ return true;
22010
+ }
22011
+ static isNilOrInvalid(position, opts) {
22012
+ return !GeolocationUtils.isNotNilAndValid(position, opts);
22013
+ }
22014
+ static computeDistanceInMiles(position1, position2) {
22015
+ // Invalid position(s): skip
22016
+ if (GeolocationUtils.isNilOrInvalid(position1, { debug: true })
22017
+ || GeolocationUtils.isNilOrInvalid(position2, { debug: true }))
22018
+ return;
22019
+ const latitude1Rad = Math.PI * position1.latitude / 180;
22020
+ const longitude1Rad = Math.PI * position1.longitude / 180;
22021
+ const latitude2Rad = Math.PI * position2.latitude / 180;
22022
+ const longitude2Rad = Math.PI * position2.longitude / 180;
22023
+ let distance = 2 * 6371 * Math.asin(Math.sqrt(Math.pow(Math.sin((latitude1Rad - latitude2Rad) / 2), 2)
22024
+ + Math.cos(latitude1Rad) * Math.cos(latitude2Rad) * Math.pow(Math.sin((longitude2Rad - longitude1Rad) / 2), 2)));
22025
+ distance = Math.round((((distance / 1.852) + Number.EPSILON) * 100)) / 100;
22026
+ return distance;
22027
+ }
21997
22028
  /**
21998
22029
  * Get the position by geo loc sensor
21999
22030
  */
@@ -22001,7 +22032,7 @@ class GeolocationUtils {
22001
22032
  return __awaiter(this, void 0, void 0, function* () {
22002
22033
  // Use Capacitor plugin
22003
22034
  try {
22004
- console.info(`[position-utils] Get current geo position, using Capacitor...(timeout: ${options === null || options === void 0 ? void 0 : options.timeout})`);
22035
+ console.info(`[geolocation-utils] Get current geo location, using Capacitor...(timeout: ${options === null || options === void 0 ? void 0 : options.timeout})`);
22005
22036
  const pos = yield Geolocation.getCurrentPosition(options);
22006
22037
  return {
22007
22038
  latitude: pos.coords.latitude,
@@ -22009,13 +22040,19 @@ class GeolocationUtils {
22009
22040
  };
22010
22041
  }
22011
22042
  catch (err) {
22012
- console.error('[position-utils] Cannot get current geo position, using Capacitor:', err);
22013
- // Stop if capacitor (cannot use browser geolocation, because of browser security limitation)
22014
- if (platform.is('capacitor'))
22043
+ // If capacitor : throw error (cannot fallback to browser geolocation, because of browser security limitation)
22044
+ if (platform.is('capacitor')) {
22045
+ console.error(`[geolocation-utils] Cannot get current geo location, using Capacitor: ${(err === null || err === void 0 ? void 0 : err.message) || ''} (code=${(err === null || err === void 0 ? void 0 : err.code) || 'null'})`);
22046
+ const permissions = yield Geolocation.checkPermissions();
22047
+ const permissionStatus = (permissions === null || permissions === void 0 ? void 0 : permissions.coarseLocation) || (permissions === null || permissions === void 0 ? void 0 : permissions.location);
22048
+ if (permissionStatus === 'denied') {
22049
+ throw Object.assign(Object.assign({}, err), { code: GeolocationPositionError.PERMISSION_DENIED });
22050
+ }
22015
22051
  throw err;
22052
+ }
22016
22053
  }
22017
22054
  // Or fallback to navigator
22018
- console.info('[position-utils] Get current geo position, using browser...');
22055
+ console.info('[geolocation-utils] Get current geo location, using browser...');
22019
22056
  return new Promise((resolve, reject) => {
22020
22057
  navigator.geolocation.getCurrentPosition((res) => {
22021
22058
  resolve({
@@ -22025,7 +22062,7 @@ class GeolocationUtils {
22025
22062
  }, (err) => {
22026
22063
  let message = (err === null || err === void 0 ? void 0 : err.message) || err;
22027
22064
  message = typeof message === 'string' ? message : JSON.stringify(message);
22028
- console.error('[position-utils] Cannot get current geo position, using browser:' + message);
22065
+ console.error('[geolocation-utils] Cannot get current geo location, using browser:' + message);
22029
22066
  reject(err);
22030
22067
  }, options);
22031
22068
  });