Skip to content

Commit 2d0810d

Browse files
committed
Merge branch 'update-deps' into Sensotrend-smartpix-on-tp-master
2 parents fc96474 + cd31018 commit 2d0810d

File tree

133 files changed

+6697
-11522
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

133 files changed

+6697
-11522
lines changed

SUMMARY.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
* [Abbott FreeStyle meters](docs/checklists/abbottFreeStyleLite.md)
2222
* [Abbott Precision Xtra](docs/checklists/abbottPrecisionXtra.md)
2323
* [Accu-chek Aviva Connect & Guide (BGM)](docs/checklists/avivaConnectAndGuide.md)
24-
* [Animas Vibe CGM](docs/checklists/animasCGM.md)
25-
* [Animas Ping and Vibe Insulin Pumps](docs/checklists/animasPingAndVibe.md)
2624
* [Ascensia/Bayer Contour Next meters](docs/checklists/bayerContourNext.md)
2725
* [Dexcom CGM](docs/checklists/dexcom.md)
2826
* [Insulet OmniPod](docs/checklists/insuletOmniPod.md)

app/actions/async.js

Lines changed: 92 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import semver from 'semver';
2020
import os from 'os';
2121
import { push } from 'connected-react-router';
2222
import { checkCacheValid } from 'redux-cache';
23+
import { ipcRenderer } from 'electron';
2324

2425
import * as actionTypes from '../constants/actionTypes';
2526
import * as actionSources from '../constants/actionSources';
@@ -42,6 +43,9 @@ let hostMap = {
4243
'linux': 'linux',
4344
};
4445

46+
const isBrowser = typeof window !== 'undefined';
47+
let win = isBrowser ? window : null;
48+
4549
function createActionError(usrErrMessage, apiError) {
4650
const err = new Error(usrErrMessage);
4751
if (apiError) {
@@ -94,6 +98,13 @@ export function doAppInit(opts, servicesToInit) {
9498
log('Getting OS details.');
9599
await actionUtils.initOSDetails();
96100

101+
ipcRenderer.on('bluetooth-pairing-request', async (event, details) => {
102+
const displayBluetoothModal = actionUtils.makeDisplayBluetoothModal(dispatch);
103+
displayBluetoothModal((response) => {
104+
ipcRenderer.send('bluetooth-pairing-response', response);
105+
}, details);
106+
});
107+
97108
log('Initializing device');
98109
device.init({
99110
api,
@@ -257,12 +268,27 @@ export function doLogout() {
257268
api.user.logout((err) => {
258269
if (err) {
259270
dispatch(sync.logoutFailure());
260-
dispatch(setPage(pages.LOGIN, actionSources.USER));
261271
}
262272
else {
263273
dispatch(sync.logoutSuccess());
264-
dispatch(setPage(pages.LOGIN, actionSources.USER));
265274
}
275+
dispatch(setPage(pages.LOGIN, actionSources.USER));
276+
});
277+
};
278+
}
279+
280+
export function doLoggedOut() {
281+
return (dispatch, getState) => {
282+
const { api } = services;
283+
dispatch(sync.logoutRequest());
284+
api.user.logout((err) => {
285+
if (err) {
286+
dispatch(sync.logoutFailure());
287+
}
288+
else {
289+
dispatch(sync.logoutSuccess());
290+
}
291+
dispatch(setPage(pages.LOGGED_OUT, actionSources.USER));
266292
});
267293
};
268294
}
@@ -293,7 +319,7 @@ export function doDeviceUpload(driverId, opts = {}, utc) {
293319
opts.filename = currentUpload.file.name;
294320
}
295321

296-
device.detect(driverId, opts, (err, dev) => {
322+
device.detect(driverId, opts, async (err, dev) => {
297323
if (err) {
298324
let displayErr = new Error(ErrorMessages.E_SERIAL_CONNECTION);
299325
let deviceDetectErrProps = {
@@ -316,6 +342,9 @@ export function doDeviceUpload(driverId, opts = {}, utc) {
316342
}
317343

318344
displayErr.originalError = err;
345+
if (process.env.NODE_ENV !== 'test') {
346+
deviceDetectErrProps = await actionUtils.sendToRollbar(displayErr, deviceDetectErrProps);
347+
}
319348
return dispatch(sync.uploadFailure(displayErr, deviceDetectErrProps, targetDevice));
320349
}
321350

@@ -337,6 +366,9 @@ export function doDeviceUpload(driverId, opts = {}, utc) {
337366
disconnectedErrProps.code = 'E_DEXCOM_CONNECTION';
338367
}
339368

369+
if (process.env.NODE_ENV !== 'test') {
370+
disconnectedErrProps = await actionUtils.sendToRollbar(displayErr, disconnectedErrProps);
371+
}
340372
return dispatch(sync.uploadFailure(displayErr, disconnectedErrProps, targetDevice));
341373
}
342374

@@ -373,6 +405,7 @@ export function doUpload(deviceKey, opts, utc) {
373405
}));
374406

375407
try {
408+
ipcRenderer.send('setSerialPortFilter', filters);
376409
opts.port = await navigator.serial.requestPort({ filters: filters });
377410
} catch (err) {
378411
// not returning error, as we'll attempt user-space driver instead
@@ -418,6 +451,9 @@ export function doUpload(deviceKey, opts, utc) {
418451
code: 'E_HID_CONNECTION',
419452
};
420453

454+
if (process.env.NODE_ENV !== 'test') {
455+
errProps = await actionUtils.sendToRollbar(hidErr, errProps);
456+
}
421457
return dispatch(sync.uploadFailure(hidErr, errProps, devices[deviceKey]));
422458
}
423459
}
@@ -439,6 +475,9 @@ export function doUpload(deviceKey, opts, utc) {
439475
code: 'E_BLUETOOTH_OFF',
440476
};
441477

478+
if (process.env.NODE_ENV !== 'test') {
479+
errProps = await actionUtils.sendToRollbar(btErr, errProps);
480+
}
442481
return dispatch(sync.uploadFailure(btErr, errProps, devices[deviceKey]));
443482
}
444483
console.log('Done.');
@@ -1154,6 +1193,56 @@ export function setPage(page, actionSource = actionSources[actionTypes.SET_PAGE]
11541193
} else {
11551194
dispatch(sync.getClinicsForClinicianSuccess(clinics, clinicianId, options));
11561195
}
1196+
// fetch EHR and MRN settings for clinics
1197+
_.each(clinics, (clinic) => {
1198+
console.log('fetching settings for clinic', clinic.clinic.id);
1199+
dispatch(fetchClinicEHRSettings(api, clinic.clinic.id));
1200+
dispatch(fetchClinicMRNSettings(api, clinic.clinic.id));
1201+
});
1202+
});
1203+
};
1204+
}
1205+
1206+
/**
1207+
* Fetch Clinic MRN Settings Action Creator
1208+
*
1209+
* @param {Object} api - an instance of the API wrapper
1210+
* @param {String} clinicId - Id of the clinic
1211+
*/
1212+
export function fetchClinicMRNSettings(api, clinicId) {
1213+
return (dispatch) => {
1214+
dispatch(sync.fetchClinicMRNSettingsRequest());
1215+
1216+
api.clinics.getMRNSettings(clinicId, (err, settings) => {
1217+
if (err) {
1218+
dispatch(sync.fetchClinicMRNSettingsFailure(
1219+
createActionError(ErrorMessages.ERR_FETCHING_CLINIC_MRN_SETTINGS, err), err
1220+
));
1221+
} else {
1222+
dispatch(sync.fetchClinicMRNSettingsSuccess(clinicId, settings));
1223+
}
1224+
});
1225+
};
1226+
}
1227+
1228+
/**
1229+
* Fetch Clinic EHR Settings Action Creator
1230+
*
1231+
* @param {Object} api - an instance of the API wrapper
1232+
* @param {String} clinicId - Id of the clinic
1233+
*/
1234+
export function fetchClinicEHRSettings(api, clinicId) {
1235+
return (dispatch) => {
1236+
dispatch(sync.fetchClinicEHRSettingsRequest());
1237+
1238+
api.clinics.getEHRSettings(clinicId, (err, settings) => {
1239+
if (err) {
1240+
dispatch(sync.fetchClinicEHRSettingsFailure(
1241+
createActionError(ErrorMessages.ERR_FETCHING_CLINIC_EHR_SETTINGS, err), err
1242+
));
1243+
} else {
1244+
dispatch(sync.fetchClinicEHRSettingsSuccess(clinicId, settings));
1245+
}
11571246
});
11581247
};
11591248
}

app/actions/sync.js

Lines changed: 75 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -856,6 +856,21 @@ export function dismissedAdHocPairingDialog() {
856856
};
857857
}
858858

859+
export function bluetoothPairingRequest(callback, cfg) {
860+
return {
861+
type: ActionTypes.BLUETOOTH_PAIRING_REQUEST,
862+
payload: { callback, cfg },
863+
meta: { source: actionSources[ActionTypes.BLUETOOTH_PAIRING_REQUEST] }
864+
};
865+
}
866+
867+
export function dismissedBluetoothPairingDialog() {
868+
return {
869+
type: ActionTypes.BLUETOOTH_PAIRING_DISMISSED,
870+
meta: { source: actionSources[ActionTypes.BLUETOOTH_PAIRING_DISMISSED] }
871+
};
872+
}
873+
859874
export function fetchPatientsForClinicRequest() {
860875
return {
861876
type: ActionTypes.FETCH_PATIENTS_FOR_CLINIC_REQUEST,
@@ -1030,10 +1045,62 @@ export function selectClinic(clinicId) {
10301045
};
10311046
}
10321047

1033-
export function keycloakReady(event, error){
1048+
export function fetchClinicMRNSettingsRequest() {
1049+
return {
1050+
type: ActionTypes.FETCH_CLINIC_MRN_SETTINGS_REQUEST,
1051+
};
1052+
}
1053+
1054+
export function fetchClinicMRNSettingsSuccess(clinicId, settings) {
1055+
return {
1056+
type: ActionTypes.FETCH_CLINIC_MRN_SETTINGS_SUCCESS,
1057+
payload: {
1058+
clinicId,
1059+
settings,
1060+
},
1061+
};
1062+
}
1063+
1064+
export function fetchClinicMRNSettingsFailure(error, apiError) {
1065+
return {
1066+
type: ActionTypes.FETCH_CLINIC_MRN_SETTINGS_FAILURE,
1067+
error: error,
1068+
meta: {
1069+
apiError: apiError || null,
1070+
},
1071+
};
1072+
}
1073+
1074+
export function fetchClinicEHRSettingsRequest() {
1075+
return {
1076+
type: ActionTypes.FETCH_CLINIC_EHR_SETTINGS_REQUEST,
1077+
};
1078+
}
1079+
1080+
export function fetchClinicEHRSettingsSuccess(clinicId, settings) {
1081+
return {
1082+
type: ActionTypes.FETCH_CLINIC_EHR_SETTINGS_SUCCESS,
1083+
payload: {
1084+
clinicId,
1085+
settings,
1086+
},
1087+
};
1088+
}
1089+
1090+
export function fetchClinicEHRSettingsFailure(error, apiError) {
1091+
return {
1092+
type: ActionTypes.FETCH_CLINIC_EHR_SETTINGS_FAILURE,
1093+
error: error,
1094+
meta: {
1095+
apiError: apiError || null,
1096+
},
1097+
};
1098+
}
1099+
1100+
export function keycloakReady(event, error, logoutUrl){
10341101
return {
10351102
type: ActionTypes.KEYCLOAK_READY,
1036-
payload: { error, event },
1103+
payload: { error, event, logoutUrl },
10371104
};
10381105
}
10391106

@@ -1108,3 +1175,9 @@ export function keycloakInstantiated(){
11081175
type: ActionTypes.KEYCLOAK_INSTANTIATED
11091176
};
11101177
}
1178+
1179+
export function keycloakReset(){
1180+
return {
1181+
type: ActionTypes.KEYCLOAK_RESET
1182+
};
1183+
}

app/actions/utils.js

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
*/
1717

1818
import _ from 'lodash';
19-
import stacktrace from 'stack-trace';
2019

2120
import sundial from 'sundial';
2221

2322
import ErrorMessages from '../constants/errorMessages';
2423
import * as syncActions from './sync';
24+
import rollbar from '../../app/utils/rollbar';
2525

2626
const isBrowser = typeof window !== 'undefined';
2727
// eslint-disable-next-line no-console
@@ -64,8 +64,14 @@ export function makeDisplayAdhocModal(dispatch) {
6464
};
6565
}
6666

67+
export function makeDisplayBluetoothModal(dispatch) {
68+
return (cb, cfg) => {
69+
dispatch(syncActions.bluetoothPairingRequest(cb, cfg));
70+
};
71+
}
72+
6773
export function makeUploadCb(dispatch, getState, errCode, utc) {
68-
return (err, recs) => {
74+
return async (err, recs) => {
6975
const { devices, uploadsByUser, uploadTargetDevice, uploadTargetUser, version } = getState();
7076
const targetDevice = devices[uploadTargetDevice];
7177

@@ -88,7 +94,6 @@ export function makeUploadCb(dispatch, getState, errCode, utc) {
8894
datasetId: err.datasetId || null,
8995
requestTrace: err.requestTrace || null,
9096
sessionTrace: err.sessionTrace || null,
91-
sessionToken: err.sessionToken || null,
9297
code: err.code || errCode,
9398
version: version,
9499
data: recs
@@ -129,18 +134,13 @@ export function makeUploadCb(dispatch, getState, errCode, utc) {
129134
uploadErrProps.details = 'Could not validate the date format';
130135
}
131136

132-
if (!(process.env.NODE_ENV === 'test')) {
133-
uploadErrProps.stringifiedStack = _.map(
134-
_.filter(
135-
stacktrace.parse(err),
136-
(cs) => { return cs.functionName !== null; }
137-
),
138-
'functionName'
139-
).join(', ');
137+
if (process.env.NODE_ENV !== 'test') {
138+
uploadErrProps = await sendToRollbar(displayErr, uploadErrProps);
140139
}
141140
return dispatch(syncActions.uploadFailure(displayErr, uploadErrProps, targetDevice));
142141
}
143142
const currentUpload = _.get(uploadsByUser, [uploadTargetUser, targetDevice.key], {});
143+
debug('Device model used for metrics:', recs.deviceModel);
144144
dispatch(syncActions.uploadSuccess(uploadTargetUser, targetDevice, currentUpload, recs, utc));
145145
};
146146
}
@@ -158,6 +158,29 @@ export function mergeProfileUpdates(profile, updates){
158158
});
159159
}
160160

161+
export function sendToRollbar(err, props) {
162+
return new Promise((resolve) => {
163+
if (rollbar) {
164+
const extra = {};
165+
if (_.get(props, 'data.blobId', false)) {
166+
_.assign(extra, { blobId: props.data.blobId });
167+
}
168+
169+
rollbar.error(err, extra, (err, data) => {
170+
if (err) {
171+
console.log('Error while reporting error to Rollbar:', err);
172+
} else {
173+
console.log(`Rollbar UUID: ${data.result.uuid}`);
174+
props.uuid = data.result.uuid;
175+
}
176+
resolve(props);
177+
});
178+
} else {
179+
resolve(props);
180+
}
181+
});
182+
}
183+
161184
export async function initOSDetails() {
162185
if (typeof navigator !== 'undefined') {
163186
const ua = await navigator.userAgentData.getHighEntropyValues(

0 commit comments

Comments
 (0)