@wemap/positioning 2.3.1 → 2.3.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.
package/package.json CHANGED
@@ -81,5 +81,5 @@
81
81
  "lint": "eslint --ext .js,.jsx --quiet src",
82
82
  "test": "mocha -r esm \"src/**/*.spec.js\""
83
83
  },
84
- "version": "2.3.1"
84
+ "version": "2.3.2"
85
85
  }
@@ -1,13 +1,16 @@
1
+ /* eslint-disable max-statements */
1
2
  import EventType from './events/EventType';
2
3
  import PdrProvider from './providers/pose/pdr/PdrProvider';
3
4
  import GnssWifiPdrProvider from './providers/pose/GnssWifiPdrProvider';
4
5
  import PoseProvider from './providers/pose/PoseProvider';
5
- import ProviderOptions from './providers/ProviderOptions';
6
+ import PositioningOptions from './PositioningOptions';
6
7
  import InclinationProvider from './providers/others/InclinationProvider';
7
8
  import Logger from '@wemap/logger';
8
9
  import ArCoreAbsoluteProvider from './providers/pose/ArCoreAbsoluteProvider';
9
10
  import ArCoreProvider from './providers/pose/ArCoreProvider';
10
11
  import GnssWifiProvider from './providers/position/GnssWifiProvider';
12
+ import NoProviderFoundError from './errors/NoProviderFoundError';
13
+ import ProviderError from './events/ProviderError';
11
14
 
12
15
  /**
13
16
  * @private
@@ -29,24 +32,24 @@ class PositioningHandler {
29
32
  * @param {EventType[]} eventsType array of events to subscribe
30
33
  * @param {Function} onEvent Callback on events, first and only parameter is a: {@link ProviderEvent[]}.
31
34
  * @param {Function} onError Callback on errors, first and only parameter is a: {@link ProviderError[]}.
32
- * @param {ProviderOptions} options
35
+ * @param {PositioningOptions} options
33
36
  * @returns {Number} an id to stop or interact with
34
37
  */
35
38
  start(eventsType, onEvent, onError, options) {
36
39
 
37
- this.options = Object.assign({}, ProviderOptions, options);
40
+ this.options = Object.assign({}, PositioningOptions, options);
38
41
 
39
42
  const providerClass = PositioningHandler.findProvider(eventsType, this.options);
40
-
41
- if (!providerClass) {
42
- throw new Error('No provider found');
43
+ if (Array.isArray(providerClass)) {
44
+ onError(providerClass);
45
+ return null;
43
46
  }
44
-
45
47
  const provider = Reflect.construct(providerClass, [onEvent, onError, this.options]);
46
48
  this.providerInstances[provider.id] = provider;
47
49
  provider.start();
48
50
 
49
51
  return provider.id;
52
+
50
53
  }
51
54
 
52
55
  /**
@@ -54,17 +57,29 @@ class PositioningHandler {
54
57
  */
55
58
  static findProvider(eventsType, _options) {
56
59
 
57
- const options = Object.assign({}, ProviderOptions, _options);
60
+ const options = Object.assign({}, PositioningOptions, _options);
61
+
62
+ let errors = [];
58
63
  const canUse = (provider, others = []) => {
59
- return !options.ignoreProviders.includes(provider)
60
- && !others.some(elem => options.ignoreProviders.includes(elem))
61
- && provider.checkAvailabilityErrors().length === 0;
64
+ if (options.ignoreProviders.includes(provider.name)
65
+ || others.some(elem => options.ignoreProviders.includes(elem.name))) {
66
+ return false;
67
+ }
68
+ errors = provider.checkAvailabilityErrors();
69
+ return errors.length === 0;
62
70
  };
63
71
 
64
- if (eventsType.length === 1
65
- && eventsType.includes(EventType.Inclination)
66
- && InclinationProvider.checkAvailabilityErrors().length === 0) {
67
- return InclinationProvider;
72
+ const wantInclination = eventsType.length === 1
73
+ && eventsType.includes(EventType.Inclination);
74
+
75
+ if (wantInclination) {
76
+ if (canUse(InclinationProvider)) {
77
+ return InclinationProvider;
78
+ }
79
+ if (errors.length !== 0) {
80
+ return errors;
81
+ }
82
+ return [new ProviderError(null, EventType.Inclination, new NoProviderFoundError())];
68
83
  }
69
84
 
70
85
  const wantPoseProvider = [EventType.AbsolutePosition, EventType.AbsoluteAttitude]
@@ -79,14 +94,17 @@ class PositioningHandler {
79
94
  if (canUse(PdrProvider)) {
80
95
  return PdrProvider;
81
96
  }
82
- return null;
97
+
98
+ return [
99
+ new ProviderError(null, EventType.AbsoluteAttitude, new NoProviderFoundError()),
100
+ new ProviderError(null, EventType.AbsolutePosition, new NoProviderFoundError())
101
+ ];
83
102
  }
84
103
 
85
104
  if (canUse(GnssWifiPdrProvider, [PdrProvider])) {
86
105
  return GnssWifiPdrProvider;
87
106
  }
88
107
 
89
-
90
108
  if (canUse(PoseProvider)) {
91
109
  return PoseProvider;
92
110
  }
@@ -95,9 +113,22 @@ class PositioningHandler {
95
113
  && canUse(GnssWifiProvider)) {
96
114
  return GnssWifiProvider;
97
115
  }
116
+
117
+ if (errors.length !== 0) {
118
+ return errors;
119
+ }
120
+
121
+ if (options.optionalEvents.includes(EventType.AbsoluteAttitude)) {
122
+ return [new ProviderError(null, EventType.AbsolutePosition, new NoProviderFoundError())];
123
+ }
124
+
125
+ return [
126
+ new ProviderError(null, EventType.AbsoluteAttitude, new NoProviderFoundError()),
127
+ new ProviderError(null, EventType.AbsolutePosition, new NoProviderFoundError())
128
+ ];
98
129
  }
99
130
 
100
- return null;
131
+ return [];
101
132
  }
102
133
 
103
134
  /**
@@ -10,6 +10,8 @@ import PdrProvider from './providers/pose/pdr/PdrProvider';
10
10
  import ArCoreAbsoluteProvider from './providers/pose/ArCoreAbsoluteProvider';
11
11
  import GnssWifiProvider from './providers/position/GnssWifiProvider';
12
12
  import ArCoreProvider from './providers/pose/ArCoreProvider';
13
+ import ProviderError from './events/ProviderError';
14
+ import { ProvidersName } from './providers/ProvidersList';
13
15
 
14
16
  const expect = chai.expect;
15
17
 
@@ -53,7 +55,7 @@ describe('PositioningHandler#findProvider', () => {
53
55
  it('Inclination Desktop', () => {
54
56
  config(CHROME_DESKTOP_USER_AGENT);
55
57
  const provider = PositioningHandler.findProvider([EventType.Inclination]);
56
- expect(provider).to.be.null;
58
+ expect(provider[0]).to.be.instanceOf(ProviderError);
57
59
  });
58
60
 
59
61
  it('Inclination Mobile', () => {
@@ -65,7 +67,7 @@ describe('PositioningHandler#findProvider', () => {
65
67
  it('Pose Desktop', () => {
66
68
  config(CHROME_DESKTOP_USER_AGENT);
67
69
  const provider = PositioningHandler.findProvider([EventType.AbsolutePosition, EventType.AbsoluteAttitude]);
68
- expect(provider).to.be.null;
70
+ expect(provider[0]).to.be.instanceOf(ProviderError);
69
71
  });
70
72
 
71
73
  it('Pose without PDR Desktop', () => {
@@ -74,7 +76,7 @@ describe('PositioningHandler#findProvider', () => {
74
76
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
75
77
  { ignoreProviders: [PdrProvider] }
76
78
  );
77
- expect(provider).to.be.null;
79
+ expect(provider[0]).to.be.instanceOf(ProviderError);
78
80
  });
79
81
 
80
82
  it('Pose without ArCore Desktop', () => {
@@ -83,13 +85,13 @@ describe('PositioningHandler#findProvider', () => {
83
85
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
84
86
  { ignoreProviders: [ArCoreProvider] }
85
87
  );
86
- expect(provider).to.be.null;
88
+ expect(provider[0]).to.be.instanceOf(ProviderError);
87
89
  });
88
90
 
89
91
  it('Pose with optional attitude Desktop', () => {
90
92
  config(CHROME_DESKTOP_USER_AGENT);
91
93
  const provider = PositioningHandler.findProvider([EventType.AbsolutePosition, EventType.AbsoluteAttitude]);
92
- expect(provider).to.be.null;
94
+ expect(provider[0]).to.be.instanceOf(ProviderError);
93
95
  });
94
96
 
95
97
  it('Pose with optional attitude without PDR Desktop', () => {
@@ -97,7 +99,7 @@ describe('PositioningHandler#findProvider', () => {
97
99
  const provider = PositioningHandler.findProvider(
98
100
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
99
101
  {
100
- ignoreProviders: [PdrProvider],
102
+ ignoreProviders: [ProvidersName.Pdr],
101
103
  optionalEvents: [EventType.AbsoluteAttitude]
102
104
  }
103
105
  );
@@ -109,7 +111,7 @@ describe('PositioningHandler#findProvider', () => {
109
111
  const provider = PositioningHandler.findProvider(
110
112
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
111
113
  {
112
- ignoreProviders: [ArCoreProvider],
114
+ ignoreProviders: [ProvidersName.ArCore],
113
115
  optionalEvents: [EventType.AbsoluteAttitude]
114
116
  }
115
117
  );
@@ -121,7 +123,7 @@ describe('PositioningHandler#findProvider', () => {
121
123
  const provider = PositioningHandler.findProvider(
122
124
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
123
125
  {
124
- ignoreProviders: [PdrProvider, ArCoreProvider],
126
+ ignoreProviders: [ProvidersName.Pdr, ProvidersName.ArCore],
125
127
  optionalEvents: [EventType.AbsoluteAttitude]
126
128
  }
127
129
  );
@@ -138,7 +140,7 @@ describe('PositioningHandler#findProvider', () => {
138
140
  config(CHROME_ANDROID_USER_AGENT);
139
141
  const provider = PositioningHandler.findProvider(
140
142
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
141
- { ignoreProviders: [PdrProvider] }
143
+ { ignoreProviders: [ProvidersName.Pdr] }
142
144
  );
143
145
  expect(provider).to.be.equals(PoseProvider);
144
146
  });
@@ -147,7 +149,7 @@ describe('PositioningHandler#findProvider', () => {
147
149
  config(CHROME_ANDROID_USER_AGENT);
148
150
  const provider = PositioningHandler.findProvider(
149
151
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
150
- { ignoreProviders: [ArCoreProvider] }
152
+ { ignoreProviders: [ProvidersName.ArCore] }
151
153
  );
152
154
  expect(provider).to.be.equals(GnssWifiPdrProvider);
153
155
  });
@@ -156,7 +158,7 @@ describe('PositioningHandler#findProvider', () => {
156
158
  config(CHROME_ANDROID_USER_AGENT);
157
159
  const provider = PositioningHandler.findProvider(
158
160
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
159
- { ignoreProviders: [PdrProvider, ArCoreProvider] }
161
+ { ignoreProviders: [ProvidersName.Pdr, ProvidersName.ArCore] }
160
162
  );
161
163
  expect(provider).to.be.equals(PoseProvider);
162
164
  });
@@ -185,7 +187,7 @@ describe('PositioningHandler#findProvider', () => {
185
187
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
186
188
  {
187
189
  waitInputPosition: true,
188
- ignoreProviders: [ArCoreProvider]
190
+ ignoreProviders: [ProvidersName.ArCore]
189
191
  }
190
192
  );
191
193
  expect(provider).to.be.equals(PdrProvider);
@@ -197,10 +199,11 @@ describe('PositioningHandler#findProvider', () => {
197
199
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
198
200
  {
199
201
  waitInputPosition: true,
200
- ignoreProviders: [PdrProvider]
202
+ ignoreProviders: [ProvidersName.Pdr]
201
203
  }
202
204
  );
203
- expect(provider).to.be.null;
205
+ expect(provider[0]).to.be.instanceOf(ProviderError);
206
+ expect(provider[1]).to.be.instanceOf(ProviderError);
204
207
  });
205
208
 
206
209
  it('Pose with waitInputPosition without ArCore Mobile Native', () => {
@@ -209,7 +212,7 @@ describe('PositioningHandler#findProvider', () => {
209
212
  [EventType.AbsolutePosition, EventType.AbsoluteAttitude],
210
213
  {
211
214
  waitInputPosition: true,
212
- ignoreProviders: [ArCoreProvider]
215
+ ignoreProviders: [ProvidersName.ArCore]
213
216
  }
214
217
  );
215
218
  expect(provider).to.be.equals(PdrProvider);
@@ -1,4 +1,4 @@
1
- const ProviderOptions = {
1
+ const PositioningOptions = {
2
2
 
3
3
  /**
4
4
  * Does provider have to wait an input position to start
@@ -20,7 +20,7 @@ const ProviderOptions = {
20
20
 
21
21
  /**
22
22
  * Providers listed here will not be used by PositioningHandler
23
- * List of {@link Provider}
23
+ * List of {@link Provider#name}
24
24
  */
25
25
  ignoreProviders: [],
26
26
 
@@ -31,4 +31,4 @@ const ProviderOptions = {
31
31
  optionalEvents: []
32
32
  };
33
33
 
34
- export default ProviderOptions;
34
+ export default PositioningOptions;
@@ -46,6 +46,10 @@ class PositioningPoseComponent extends React.Component {
46
46
  }
47
47
  );
48
48
 
49
+ if (!this.id) {
50
+ return;
51
+ }
52
+
49
53
  setTimeout(() => {
50
54
  this.props.positioningHandler.setPosition(this.id, INITIAL_POSITION);
51
55
  this.props.positioningHandler.setHeading(this.id, INITIAL_HEADING);
@@ -0,0 +1,9 @@
1
+ const DEFAULT_MESSAGE = 'Unable to find a provider with your given parameters';
2
+
3
+ class NoProviderFoundError extends Error {
4
+ constructor(message) {
5
+ super(message || DEFAULT_MESSAGE);
6
+ }
7
+ }
8
+
9
+ export default NoProviderFoundError;
package/src/index.js CHANGED
@@ -1,7 +1,8 @@
1
1
  import InclinationProvider from './providers/computed/InclinationProvider';
2
2
  import PositioningHandler from './PositioningHandler';
3
3
  import EventType from './events/EventType';
4
+ import { ProvidersName } from './providers/ProvidersList';
4
5
 
5
6
  export {
6
- InclinationProvider, PositioningHandler, EventType
7
+ InclinationProvider, PositioningHandler, EventType, ProvidersName
7
8
  };
@@ -0,0 +1,44 @@
1
+ import GnssWifi from './position/GnssWifiProvider';
2
+ import Ip from './position/IpProvider';
3
+ import Pdr from './pose/pdr/PdrProvider';
4
+ import ArCore from './pose/ArCoreProvider';
5
+ import ArCoreAbsolute from './pose/ArCoreAbsoluteProvider';
6
+ import Inclination from './others/InclinationProvider';
7
+ import GnssWifiPdr from './pose/GnssWifiPdrProvider';
8
+ import Imu from './others/ImuProvider';
9
+ import AbsoluteAttitude from './attitude/AbsoluteAttitudeProvider';
10
+ import RelativeAttitude from './attitude/RelativeAttitudeProvider';
11
+
12
+ const ProvidersName = {
13
+ AbsoluteAttitude: AbsoluteAttitude.name,
14
+ ArCore: ArCore.name,
15
+ ArCoreAbsolute: ArCoreAbsolute.name,
16
+ GnssWifi: GnssWifi.name,
17
+ GnssWifiPdr: GnssWifiPdr.name,
18
+ Imu: Imu.name,
19
+ Inclination: Inclination.name,
20
+ Ip: Ip.name,
21
+ Pdr: Pdr.name,
22
+ RelativeAttitude: RelativeAttitude.name
23
+ };
24
+
25
+ const ProvidersModules = {
26
+ AbsoluteAttitude,
27
+ ArCore,
28
+ ArCoreAbsolute,
29
+ GnssWifi,
30
+ GnssWifiPdr,
31
+ Imu,
32
+ Inclination,
33
+ Ip,
34
+ Pdr,
35
+ RelativeAttitude
36
+ };
37
+
38
+ function getModuleFromName(name) {
39
+ return ProvidersModules[name];
40
+ }
41
+
42
+ export {
43
+ ProvidersName, getModuleFromName
44
+ };