@zac-apps/helium 1.0.0-beta.1
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/README.md +0 -0
- package/dist/index.js +1500 -0
- package/package.json +71 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,1500 @@
|
|
|
1
|
+
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
|
+
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
3
|
+
import React, { useState, createContext, useContext, useEffect } from 'react';
|
|
4
|
+
import moment from 'moment';
|
|
5
|
+
import { useImmer } from 'use-immer';
|
|
6
|
+
import useMediaQuery from '@mui/material/useMediaQuery';
|
|
7
|
+
import Grid from '@mui/material/Unstable_Grid2';
|
|
8
|
+
import TableBody from '@mui/material/TableBody';
|
|
9
|
+
import TableCell from '@mui/material/TableCell';
|
|
10
|
+
import TableHead from '@mui/material/TableHead';
|
|
11
|
+
import TableRow from '@mui/material/TableRow';
|
|
12
|
+
import IconButton from '@mui/material/IconButton';
|
|
13
|
+
import SaveIcon from '@mui/icons-material/Save';
|
|
14
|
+
import EditIcon from '@mui/icons-material/Edit';
|
|
15
|
+
import { ErrorAlert, AppTable, TableHeadCell, Percentage, AppTheme, DivTitle, PublicFetch, Progress, AppGrid, AppCard } from '@zac-apps/commons';
|
|
16
|
+
import TextField from '@mui/material/TextField';
|
|
17
|
+
import InputAdornment from '@mui/material/InputAdornment';
|
|
18
|
+
import { jsxs, jsx } from 'react/jsx-runtime';
|
|
19
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
20
|
+
import Chip from '@mui/material/Chip';
|
|
21
|
+
import AddBoxIcon from '@mui/icons-material/AddBox';
|
|
22
|
+
import DeleteIcon from '@mui/icons-material/Delete';
|
|
23
|
+
import Divider from '@mui/material/Divider';
|
|
24
|
+
import FormControlLabel from '@mui/material/FormControlLabel';
|
|
25
|
+
import FormControl from '@mui/material/FormControl';
|
|
26
|
+
import FormGroup from '@mui/material/FormGroup';
|
|
27
|
+
import Checkbox from '@mui/material/Checkbox';
|
|
28
|
+
import Button from '@mui/material/Button';
|
|
29
|
+
import moment$1 from 'moment/moment.js';
|
|
30
|
+
import Typography from '@mui/material/Typography';
|
|
31
|
+
import { LineChart, Line, CartesianGrid, XAxis, Label, YAxis, ReferenceLine, ReferenceArea, Tooltip } from 'recharts';
|
|
32
|
+
import Paper from '@mui/material/Paper';
|
|
33
|
+
import ButtonGroup from '@mui/material/ButtonGroup';
|
|
34
|
+
import Switch from '@mui/material/Switch';
|
|
35
|
+
|
|
36
|
+
function NumField(_ref) {
|
|
37
|
+
var input = _ref.input,
|
|
38
|
+
SetInput = _ref.SetInput,
|
|
39
|
+
error = _ref.error,
|
|
40
|
+
SetError = _ref.SetError,
|
|
41
|
+
minValue = _ref.minValue,
|
|
42
|
+
maxValue = _ref.maxValue,
|
|
43
|
+
adornment = _ref.adornment,
|
|
44
|
+
size = _ref.size;
|
|
45
|
+
var _useState = useState(""),
|
|
46
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
47
|
+
errorMessage = _useState2[0],
|
|
48
|
+
SetErrorMessage = _useState2[1];
|
|
49
|
+
var _useState3 = useState(false),
|
|
50
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
51
|
+
alert = _useState4[0],
|
|
52
|
+
SetAlert = _useState4[1];
|
|
53
|
+
var sx = {};
|
|
54
|
+
if (size === "small") {
|
|
55
|
+
sx = {
|
|
56
|
+
maxWidth: 75
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
function handleEntry(e) {
|
|
60
|
+
var errorFound = false;
|
|
61
|
+
var inputVal = e.target.value;
|
|
62
|
+
if (!inputVal.match(/[0-9-]*/)[0] || inputVal.match(/[0-9-]*/)[0] !== inputVal) {
|
|
63
|
+
errorFound = true;
|
|
64
|
+
SetErrorMessage("Input is not numerical.");
|
|
65
|
+
}
|
|
66
|
+
if (inputVal > maxValue || inputVal < minValue) {
|
|
67
|
+
errorFound = true;
|
|
68
|
+
SetErrorMessage("Input is outside allowed boundaries.");
|
|
69
|
+
}
|
|
70
|
+
SetInput(inputVal);
|
|
71
|
+
SetError(errorFound);
|
|
72
|
+
SetAlert(errorFound);
|
|
73
|
+
}
|
|
74
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
75
|
+
children: [/*#__PURE__*/jsx(TextField, {
|
|
76
|
+
size: "small",
|
|
77
|
+
sx: sx,
|
|
78
|
+
onChange: function onChange(e) {
|
|
79
|
+
return handleEntry(e);
|
|
80
|
+
},
|
|
81
|
+
value: input,
|
|
82
|
+
error: error,
|
|
83
|
+
inputProps: {
|
|
84
|
+
inputMode: "numeric"
|
|
85
|
+
},
|
|
86
|
+
InputProps: {
|
|
87
|
+
endAdornment: /*#__PURE__*/jsx(InputAdornment, {
|
|
88
|
+
position: "end",
|
|
89
|
+
children: adornment
|
|
90
|
+
})
|
|
91
|
+
}
|
|
92
|
+
}), /*#__PURE__*/jsx(ErrorAlert, {
|
|
93
|
+
alert: alert,
|
|
94
|
+
SetAlert: SetAlert,
|
|
95
|
+
message: errorMessage
|
|
96
|
+
})]
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
// Define context
|
|
101
|
+
|
|
102
|
+
var LookupContext = /*#__PURE__*/createContext(null);
|
|
103
|
+
|
|
104
|
+
// Look up amount in liters for specific spectrometer
|
|
105
|
+
|
|
106
|
+
function CalcLiters(_ref) {
|
|
107
|
+
var spec = _ref.spec,
|
|
108
|
+
value = _ref.value;
|
|
109
|
+
var heliumLookup = useContext(LookupContext).lookup;
|
|
110
|
+
|
|
111
|
+
// Catch negative values
|
|
112
|
+
|
|
113
|
+
if (value < 0 || !value) {
|
|
114
|
+
value = 0;
|
|
115
|
+
} else {
|
|
116
|
+
value = Number(value);
|
|
117
|
+
}
|
|
118
|
+
var returnVal = heliumLookup[spec].find(function (m) {
|
|
119
|
+
return m.level === value;
|
|
120
|
+
}).liters;
|
|
121
|
+
return returnVal;
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
// Look up difference from maximum
|
|
125
|
+
|
|
126
|
+
function CalcToMax(_ref3) {
|
|
127
|
+
var spec = _ref3.spec,
|
|
128
|
+
value = _ref3.value;
|
|
129
|
+
var heliumLookup = useContext(LookupContext).lookup;
|
|
130
|
+
|
|
131
|
+
// Catch negative values
|
|
132
|
+
|
|
133
|
+
value = Number(value) || 0;
|
|
134
|
+
if (value < 0 || !value) {
|
|
135
|
+
value = 0;
|
|
136
|
+
}
|
|
137
|
+
var maxLiters = Math.max.apply(null, heliumLookup[spec].map(function (m) {
|
|
138
|
+
return m.liters;
|
|
139
|
+
}));
|
|
140
|
+
var returnVal = maxLiters - heliumLookup[spec].find(function (m) {
|
|
141
|
+
return m.level === value;
|
|
142
|
+
}).liters;
|
|
143
|
+
returnVal = Math.round(returnVal * 10) / 10;
|
|
144
|
+
return returnVal;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
function HeliumEntry(_ref) {
|
|
148
|
+
var heliumData = _ref.heliumData,
|
|
149
|
+
SetHeliumData = _ref.SetHeliumData,
|
|
150
|
+
spec = _ref.spec,
|
|
151
|
+
SetLevelsEdited = _ref.SetLevelsEdited;
|
|
152
|
+
var heliumLookup = useContext(LookupContext).lookup;
|
|
153
|
+
var value = Number(heliumData.helium[spec]) || 0;
|
|
154
|
+
var maxValue = Math.max.apply(null, heliumLookup[spec].map(function (m) {
|
|
155
|
+
return m.level;
|
|
156
|
+
}));
|
|
157
|
+
var minValue = 0;
|
|
158
|
+
var _useState = useState(false),
|
|
159
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
160
|
+
edit = _useState2[0],
|
|
161
|
+
SetEdit = _useState2[1];
|
|
162
|
+
var _useState3 = useState(value),
|
|
163
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
164
|
+
input = _useState4[0],
|
|
165
|
+
SetInput = _useState4[1];
|
|
166
|
+
var _useState5 = useState(false),
|
|
167
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
168
|
+
error = _useState6[0],
|
|
169
|
+
SetError = _useState6[1];
|
|
170
|
+
if (edit) {
|
|
171
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
172
|
+
children: [/*#__PURE__*/jsx(NumField, {
|
|
173
|
+
input: input,
|
|
174
|
+
SetInput: SetInput,
|
|
175
|
+
error: error,
|
|
176
|
+
SetError: SetError,
|
|
177
|
+
minValue: minValue,
|
|
178
|
+
maxValue: maxValue,
|
|
179
|
+
adornment: "%",
|
|
180
|
+
size: "small"
|
|
181
|
+
}), /*#__PURE__*/jsx(IconButton, {
|
|
182
|
+
disabled: error,
|
|
183
|
+
onClick: function onClick() {
|
|
184
|
+
SetHeliumData(function (heliumData) {
|
|
185
|
+
heliumData.helium[spec] = Number(input);
|
|
186
|
+
});
|
|
187
|
+
SetEdit(!edit);
|
|
188
|
+
SetLevelsEdited(true);
|
|
189
|
+
},
|
|
190
|
+
children: /*#__PURE__*/jsx(SaveIcon, {})
|
|
191
|
+
})]
|
|
192
|
+
});
|
|
193
|
+
} else {
|
|
194
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
195
|
+
children: [Percentage(value, true), /*#__PURE__*/jsx(IconButton, {
|
|
196
|
+
size: "small",
|
|
197
|
+
onClick: function onClick() {
|
|
198
|
+
return SetEdit(!edit);
|
|
199
|
+
},
|
|
200
|
+
children: /*#__PURE__*/jsx(EditIcon, {})
|
|
201
|
+
})]
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
// render Helium level table
|
|
207
|
+
|
|
208
|
+
function HeliumTable(_ref2) {
|
|
209
|
+
var heliumData = _ref2.heliumData,
|
|
210
|
+
SetHeliumData = _ref2.SetHeliumData,
|
|
211
|
+
SetLevelsEdited = _ref2.SetLevelsEdited;
|
|
212
|
+
// Catch if no data present
|
|
213
|
+
|
|
214
|
+
if (heliumData.helium.length === 0) {
|
|
215
|
+
return /*#__PURE__*/jsx(Grid, {
|
|
216
|
+
children: /*#__PURE__*/jsx("em", {
|
|
217
|
+
children: "No Helium data found."
|
|
218
|
+
})
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// Calculate sum of missing helium
|
|
223
|
+
|
|
224
|
+
var totalToMax = Object.keys(heliumData.helium).reduce(function (total, current) {
|
|
225
|
+
return total + CalcToMax({
|
|
226
|
+
spec: current,
|
|
227
|
+
value: heliumData.helium[current]
|
|
228
|
+
});
|
|
229
|
+
}, 0);
|
|
230
|
+
totalToMax = Math.round(totalToMax * 10) / 10;
|
|
231
|
+
return /*#__PURE__*/jsxs(AppTable, {
|
|
232
|
+
children: [/*#__PURE__*/jsx(TableHead, {
|
|
233
|
+
children: /*#__PURE__*/jsxs(TableRow, {
|
|
234
|
+
children: [/*#__PURE__*/jsx(TableHeadCell, {
|
|
235
|
+
children: "Spectrometer"
|
|
236
|
+
}), /*#__PURE__*/jsxs(TableHeadCell, {
|
|
237
|
+
children: ["Helium level", /*#__PURE__*/jsx("br", {}), "[%]"]
|
|
238
|
+
}), /*#__PURE__*/jsxs(TableHeadCell, {
|
|
239
|
+
children: ["Helium level", /*#__PURE__*/jsx("br", {}), "[liters]"]
|
|
240
|
+
}), /*#__PURE__*/jsxs(TableHeadCell, {
|
|
241
|
+
children: ["Diff. to maximum", /*#__PURE__*/jsx("br", {}), "[liters]"]
|
|
242
|
+
})]
|
|
243
|
+
})
|
|
244
|
+
}), /*#__PURE__*/jsx(TableBody, {
|
|
245
|
+
children: Object.keys(heliumData.helium).map(function (m) {
|
|
246
|
+
return /*#__PURE__*/jsxs(TableRow, {
|
|
247
|
+
children: [/*#__PURE__*/jsx(TableCell, {
|
|
248
|
+
children: m
|
|
249
|
+
}), /*#__PURE__*/jsx(HeliumEntry, {
|
|
250
|
+
heliumData: heliumData,
|
|
251
|
+
SetHeliumData: SetHeliumData,
|
|
252
|
+
SetLevelsEdited: SetLevelsEdited,
|
|
253
|
+
spec: m
|
|
254
|
+
}), /*#__PURE__*/jsx(TableCell, {
|
|
255
|
+
children: /*#__PURE__*/jsx(CalcLiters, {
|
|
256
|
+
spec: m,
|
|
257
|
+
value: heliumData.helium[m]
|
|
258
|
+
})
|
|
259
|
+
}), /*#__PURE__*/jsx(TableCell, {
|
|
260
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
261
|
+
children: /*#__PURE__*/jsx(CalcToMax, {
|
|
262
|
+
spec: m,
|
|
263
|
+
value: heliumData.helium[m]
|
|
264
|
+
})
|
|
265
|
+
})
|
|
266
|
+
})]
|
|
267
|
+
}, m + "_entry");
|
|
268
|
+
})
|
|
269
|
+
}), /*#__PURE__*/jsx("tfoot", {
|
|
270
|
+
children: /*#__PURE__*/jsxs(TableRow, {
|
|
271
|
+
children: [/*#__PURE__*/jsx(TableCell, {
|
|
272
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
273
|
+
children: "Sum"
|
|
274
|
+
})
|
|
275
|
+
}), /*#__PURE__*/jsx(TableCell, {}), /*#__PURE__*/jsx(TableCell, {}), /*#__PURE__*/jsx(TableCell, {
|
|
276
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
277
|
+
children: totalToMax
|
|
278
|
+
})
|
|
279
|
+
})]
|
|
280
|
+
})
|
|
281
|
+
})]
|
|
282
|
+
});
|
|
283
|
+
}
|
|
284
|
+
function EditAdmon(_ref3) {
|
|
285
|
+
var levelsEdited = _ref3.levelsEdited;
|
|
286
|
+
if (levelsEdited) {
|
|
287
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
288
|
+
children: [", ", /*#__PURE__*/jsx("strong", {
|
|
289
|
+
children: "edited"
|
|
290
|
+
})]
|
|
291
|
+
});
|
|
292
|
+
} else {
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
function SelectSpecs(_ref) {
|
|
298
|
+
var specs = _ref.specs,
|
|
299
|
+
SetSpecs = _ref.SetSpecs;
|
|
300
|
+
function SetAll(value) {
|
|
301
|
+
SetSpecs(function (specs) {
|
|
302
|
+
Object.keys(specs).map(function (spec) {
|
|
303
|
+
return specs[spec] = value;
|
|
304
|
+
});
|
|
305
|
+
});
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
return /*#__PURE__*/jsxs(FormControl, {
|
|
309
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
310
|
+
textAlign: "left",
|
|
311
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
312
|
+
children: "Select spectrometers"
|
|
313
|
+
})
|
|
314
|
+
}), /*#__PURE__*/jsxs(FormGroup, {
|
|
315
|
+
row: true,
|
|
316
|
+
sx: {
|
|
317
|
+
px: 2
|
|
318
|
+
},
|
|
319
|
+
children: [Object.keys(specs).map(function (m) {
|
|
320
|
+
return /*#__PURE__*/jsx(FormControlLabel, {
|
|
321
|
+
control: /*#__PURE__*/jsx(Checkbox, {
|
|
322
|
+
size: "small"
|
|
323
|
+
}),
|
|
324
|
+
checked: specs[m],
|
|
325
|
+
onChange: function onChange() {
|
|
326
|
+
return SetSpecs(function (specs) {
|
|
327
|
+
specs[m] = !specs[m];
|
|
328
|
+
});
|
|
329
|
+
},
|
|
330
|
+
label: m
|
|
331
|
+
}, m + "_check");
|
|
332
|
+
}), " ", /*#__PURE__*/jsx(Button, {
|
|
333
|
+
size: "small",
|
|
334
|
+
onClick: function onClick() {
|
|
335
|
+
return SetAll(true);
|
|
336
|
+
},
|
|
337
|
+
children: "all"
|
|
338
|
+
}), " ", "\u2002", " ", /*#__PURE__*/jsx(Button, {
|
|
339
|
+
size: "small",
|
|
340
|
+
onClick: function onClick() {
|
|
341
|
+
return SetAll(false);
|
|
342
|
+
},
|
|
343
|
+
children: "none"
|
|
344
|
+
})]
|
|
345
|
+
})]
|
|
346
|
+
});
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
function ownKeys$3(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
350
|
+
function _objectSpread$3(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$3(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$3(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
351
|
+
|
|
352
|
+
// Admonition colors
|
|
353
|
+
|
|
354
|
+
var errorBg = AppTheme.palette.primary.main;
|
|
355
|
+
var errorText = AppTheme.palette.primary.contrastText;
|
|
356
|
+
var warnText = AppTheme.palette.warning.main;
|
|
357
|
+
function HePrognosisEntry(_ref) {
|
|
358
|
+
var value = _ref.value,
|
|
359
|
+
days = _ref.days,
|
|
360
|
+
spec = _ref.spec;
|
|
361
|
+
var heliumLookupData = useContext(LookupContext);
|
|
362
|
+
|
|
363
|
+
// Define lookup objects
|
|
364
|
+
|
|
365
|
+
var boilOff = heliumLookupData.boilOff;
|
|
366
|
+
var minima = heliumLookupData.minima;
|
|
367
|
+
var boil = Math.round(value + days * boilOff[spec]);
|
|
368
|
+
|
|
369
|
+
// Catch negative values
|
|
370
|
+
|
|
371
|
+
if (boil < 0) {
|
|
372
|
+
boil = 0;
|
|
373
|
+
}
|
|
374
|
+
var boilLiter = CalcLiters({
|
|
375
|
+
value: boil,
|
|
376
|
+
spec: spec
|
|
377
|
+
});
|
|
378
|
+
var boilToMax = CalcToMax({
|
|
379
|
+
value: boil,
|
|
380
|
+
spec: spec
|
|
381
|
+
});
|
|
382
|
+
var style = {};
|
|
383
|
+
if (boil < minima[spec] - 30 * boilOff[spec]) {
|
|
384
|
+
style = {
|
|
385
|
+
backgroundColor: errorBg,
|
|
386
|
+
color: errorText
|
|
387
|
+
};
|
|
388
|
+
} else if (boil < minima[spec] - 60 * boilOff[spec]) {
|
|
389
|
+
style = {
|
|
390
|
+
color: warnText
|
|
391
|
+
};
|
|
392
|
+
}
|
|
393
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
394
|
+
sx: style,
|
|
395
|
+
children: [Percentage(boil, true), " ", /*#__PURE__*/jsx("br", {}), boilLiter, " L", /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsxs("strong", {
|
|
396
|
+
children: [boilToMax, " L"]
|
|
397
|
+
})]
|
|
398
|
+
});
|
|
399
|
+
}
|
|
400
|
+
|
|
401
|
+
// Calculate total missing helium at prognosed date
|
|
402
|
+
|
|
403
|
+
function HePrognosisSum(_ref2) {
|
|
404
|
+
var heliumData = _ref2.heliumData,
|
|
405
|
+
days = _ref2.days;
|
|
406
|
+
var heliumLookupData = useContext(LookupContext);
|
|
407
|
+
|
|
408
|
+
// Define lookup objects
|
|
409
|
+
|
|
410
|
+
var boilOff = heliumLookupData.boilOff;
|
|
411
|
+
var boilData = {};
|
|
412
|
+
Object.keys(heliumData).map(function (spec) {
|
|
413
|
+
boilData = _objectSpread$3(_objectSpread$3({}, boilData), {}, _defineProperty({}, spec, Math.round(heliumData[spec] + days * boilOff[spec])));
|
|
414
|
+
return null;
|
|
415
|
+
});
|
|
416
|
+
var toMaxSum = Object.keys(boilData).reduce(function (total, current) {
|
|
417
|
+
return total + CalcToMax({
|
|
418
|
+
spec: current,
|
|
419
|
+
value: boilData[current]
|
|
420
|
+
});
|
|
421
|
+
}, 0);
|
|
422
|
+
toMaxSum = Math.round(toMaxSum * 10) / 10;
|
|
423
|
+
return /*#__PURE__*/jsx(TableCell, {
|
|
424
|
+
children: /*#__PURE__*/jsxs("strong", {
|
|
425
|
+
children: [toMaxSum, " L"]
|
|
426
|
+
})
|
|
427
|
+
});
|
|
428
|
+
}
|
|
429
|
+
|
|
430
|
+
// Cell for day increment with edit switch
|
|
431
|
+
|
|
432
|
+
function HePrognosisIncr(_ref3) {
|
|
433
|
+
var days = _ref3.days,
|
|
434
|
+
increments = _ref3.increments,
|
|
435
|
+
SetIncrements = _ref3.SetIncrements,
|
|
436
|
+
dates = _ref3.dates;
|
|
437
|
+
var _useState = useState(false),
|
|
438
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
439
|
+
edit = _useState2[0],
|
|
440
|
+
SetEdit = _useState2[1];
|
|
441
|
+
var _useState3 = useState(days),
|
|
442
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
443
|
+
input = _useState4[0],
|
|
444
|
+
SetInput = _useState4[1];
|
|
445
|
+
var _useState5 = useState(false),
|
|
446
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
447
|
+
error = _useState6[0],
|
|
448
|
+
SetError = _useState6[1];
|
|
449
|
+
if (edit) {
|
|
450
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
451
|
+
children: [dates[days], " ", /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsx(NumField, {
|
|
452
|
+
input: input,
|
|
453
|
+
SetInput: SetInput,
|
|
454
|
+
error: error,
|
|
455
|
+
SetError: SetError,
|
|
456
|
+
size: "small"
|
|
457
|
+
}), /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsx(IconButton, {
|
|
458
|
+
disabled: error,
|
|
459
|
+
size: "small",
|
|
460
|
+
onClick: function onClick() {
|
|
461
|
+
SetEdit(!edit);
|
|
462
|
+
SetIncrements(increments.map(function (inc) {
|
|
463
|
+
if (inc === days) {
|
|
464
|
+
return Number(input);
|
|
465
|
+
} else {
|
|
466
|
+
return inc;
|
|
467
|
+
}
|
|
468
|
+
}));
|
|
469
|
+
},
|
|
470
|
+
children: /*#__PURE__*/jsx(SaveIcon, {})
|
|
471
|
+
}), /*#__PURE__*/jsx(IconButton, {
|
|
472
|
+
size: "small",
|
|
473
|
+
onClick: function onClick() {
|
|
474
|
+
return SetIncrements(increments.filter(function (n) {
|
|
475
|
+
return n !== days;
|
|
476
|
+
}));
|
|
477
|
+
},
|
|
478
|
+
children: /*#__PURE__*/jsx(DeleteIcon, {})
|
|
479
|
+
})]
|
|
480
|
+
});
|
|
481
|
+
} else {
|
|
482
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
483
|
+
children: [dates[days], " ", /*#__PURE__*/jsx("br", {}), " in ", days, " days ", /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsx(IconButton, {
|
|
484
|
+
size: "small",
|
|
485
|
+
onClick: function onClick() {
|
|
486
|
+
return SetEdit(!edit);
|
|
487
|
+
},
|
|
488
|
+
children: /*#__PURE__*/jsx(EditIcon, {})
|
|
489
|
+
}), /*#__PURE__*/jsx(IconButton, {
|
|
490
|
+
size: "small",
|
|
491
|
+
onClick: function onClick() {
|
|
492
|
+
return SetIncrements(increments.filter(function (n) {
|
|
493
|
+
return n !== days;
|
|
494
|
+
}));
|
|
495
|
+
},
|
|
496
|
+
children: /*#__PURE__*/jsx(DeleteIcon, {})
|
|
497
|
+
})]
|
|
498
|
+
});
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
// Render table row in prognosis table
|
|
503
|
+
|
|
504
|
+
function HePrognosisBody(_ref4) {
|
|
505
|
+
var increments = _ref4.increments,
|
|
506
|
+
SetIncrements = _ref4.SetIncrements,
|
|
507
|
+
heliumData = _ref4.heliumData,
|
|
508
|
+
dates = _ref4.dates;
|
|
509
|
+
return /*#__PURE__*/jsx(React.Fragment, {
|
|
510
|
+
children: increments.map(function (m) {
|
|
511
|
+
return /*#__PURE__*/jsxs(TableRow, {
|
|
512
|
+
children: [/*#__PURE__*/jsx(HePrognosisIncr, {
|
|
513
|
+
days: m,
|
|
514
|
+
increments: increments,
|
|
515
|
+
SetIncrements: SetIncrements,
|
|
516
|
+
dates: dates
|
|
517
|
+
}), Object.keys(heliumData).map(function (spec) {
|
|
518
|
+
return /*#__PURE__*/jsx(HePrognosisEntry, {
|
|
519
|
+
value: heliumData[spec],
|
|
520
|
+
days: m,
|
|
521
|
+
spec: spec
|
|
522
|
+
}, spec + "_progentry");
|
|
523
|
+
}), /*#__PURE__*/jsx(HePrognosisSum, {
|
|
524
|
+
heliumData: heliumData,
|
|
525
|
+
days: m
|
|
526
|
+
})]
|
|
527
|
+
}, m + "_incr");
|
|
528
|
+
})
|
|
529
|
+
});
|
|
530
|
+
}
|
|
531
|
+
|
|
532
|
+
// function for adding additional table entries
|
|
533
|
+
|
|
534
|
+
function AddPrognoEntry(_ref5) {
|
|
535
|
+
var increments = _ref5.increments,
|
|
536
|
+
SetIncrements = _ref5.SetIncrements;
|
|
537
|
+
var _useState7 = useState(""),
|
|
538
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
539
|
+
input = _useState8[0];
|
|
540
|
+
_useState8[1];
|
|
541
|
+
var _useState9 = useState(false),
|
|
542
|
+
_useState10 = _slicedToArray(_useState9, 2),
|
|
543
|
+
error = _useState10[0];
|
|
544
|
+
_useState10[1];
|
|
545
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
546
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
547
|
+
textAlign: "left",
|
|
548
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
549
|
+
children: "Add prediction row"
|
|
550
|
+
})
|
|
551
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
552
|
+
children: /*#__PURE__*/jsx(IconButton, {
|
|
553
|
+
disabled: error,
|
|
554
|
+
onClick: function onClick() {
|
|
555
|
+
SetIncrements([Number(input)].concat(_toConsumableArray(increments)));
|
|
556
|
+
},
|
|
557
|
+
children: /*#__PURE__*/jsx(AddBoxIcon, {})
|
|
558
|
+
})
|
|
559
|
+
})]
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
|
|
563
|
+
// render prognosis table based on day increments state array
|
|
564
|
+
|
|
565
|
+
function HePrognosis(_ref6) {
|
|
566
|
+
var heliumData = _ref6.heliumData;
|
|
567
|
+
var heliumLookupData = useContext(LookupContext);
|
|
568
|
+
|
|
569
|
+
// Define lookup objects
|
|
570
|
+
|
|
571
|
+
var minima = heliumLookupData.minima;
|
|
572
|
+
var specDefault = {};
|
|
573
|
+
var specList = Object.keys(heliumData.helium);
|
|
574
|
+
specList.map(function (spec) {
|
|
575
|
+
return specDefault = _objectSpread$3(_objectSpread$3({}, specDefault), {}, _defineProperty({}, spec, true));
|
|
576
|
+
});
|
|
577
|
+
var _useImmer = useImmer(specDefault),
|
|
578
|
+
_useImmer2 = _slicedToArray(_useImmer, 2),
|
|
579
|
+
specs = _useImmer2[0],
|
|
580
|
+
SetSpecs = _useImmer2[1];
|
|
581
|
+
var _useState11 = useState([14, 30, 60, 90]),
|
|
582
|
+
_useState12 = _slicedToArray(_useState11, 2),
|
|
583
|
+
increments = _useState12[0],
|
|
584
|
+
SetIncrements = _useState12[1];
|
|
585
|
+
var currHeliumData = {};
|
|
586
|
+
Object.keys(specs).filter(function (spec) {
|
|
587
|
+
return specs[spec];
|
|
588
|
+
}).map(function (spec) {
|
|
589
|
+
return currHeliumData = _objectSpread$3(_objectSpread$3({}, currHeliumData), {}, _defineProperty({}, spec, heliumData.helium[spec]));
|
|
590
|
+
});
|
|
591
|
+
var dates = {};
|
|
592
|
+
for (var i in increments) {
|
|
593
|
+
var d = new Date();
|
|
594
|
+
d.setDate(d.getDate() + increments[i]);
|
|
595
|
+
dates = _objectSpread$3(_objectSpread$3({}, dates), {}, _defineProperty({}, increments[i], moment(d).format("ll")));
|
|
596
|
+
}
|
|
597
|
+
return /*#__PURE__*/jsxs(Grid, {
|
|
598
|
+
container: true,
|
|
599
|
+
columns: {
|
|
600
|
+
xs: 6,
|
|
601
|
+
sm: 12
|
|
602
|
+
},
|
|
603
|
+
children: [/*#__PURE__*/jsx(Grid, {
|
|
604
|
+
xs: 6,
|
|
605
|
+
children: /*#__PURE__*/jsx(SelectSpecs, {
|
|
606
|
+
specs: specs,
|
|
607
|
+
SetSpecs: SetSpecs
|
|
608
|
+
})
|
|
609
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
610
|
+
xs: 6,
|
|
611
|
+
children: /*#__PURE__*/jsx(AddPrognoEntry, {
|
|
612
|
+
increments: increments,
|
|
613
|
+
SetIncrements: SetIncrements
|
|
614
|
+
})
|
|
615
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
616
|
+
xs: 12,
|
|
617
|
+
children: /*#__PURE__*/jsxs(AppTable, {
|
|
618
|
+
children: [/*#__PURE__*/jsxs(TableHead, {
|
|
619
|
+
children: [/*#__PURE__*/jsxs(TableRow, {
|
|
620
|
+
children: [/*#__PURE__*/jsx(TableHeadCell, {}), Object.keys(currHeliumData).map(function (spec) {
|
|
621
|
+
return /*#__PURE__*/jsxs(TableHeadCell, {
|
|
622
|
+
children: [spec, /*#__PURE__*/jsx("br", {}), "(", minima[spec], " %)"]
|
|
623
|
+
}, spec + "_th");
|
|
624
|
+
}), /*#__PURE__*/jsx(TableHeadCell, {
|
|
625
|
+
children: "Sum"
|
|
626
|
+
})]
|
|
627
|
+
}), /*#__PURE__*/jsxs(TableRow, {
|
|
628
|
+
children: [/*#__PURE__*/jsx(TableHeadCell, {}), /*#__PURE__*/jsx(TableHeadCell, {
|
|
629
|
+
align: "center",
|
|
630
|
+
colSpan: Object.keys(specs).length + 1,
|
|
631
|
+
children: /*#__PURE__*/jsx("em", {
|
|
632
|
+
children: "[%], Liters, L. to max"
|
|
633
|
+
})
|
|
634
|
+
})]
|
|
635
|
+
})]
|
|
636
|
+
}), /*#__PURE__*/jsx(TableBody, {
|
|
637
|
+
children: /*#__PURE__*/jsx(HePrognosisBody, {
|
|
638
|
+
increments: increments,
|
|
639
|
+
SetIncrements: SetIncrements,
|
|
640
|
+
dates: dates,
|
|
641
|
+
heliumData: currHeliumData
|
|
642
|
+
})
|
|
643
|
+
})]
|
|
644
|
+
})
|
|
645
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
646
|
+
xs: 12,
|
|
647
|
+
sx: {
|
|
648
|
+
display: "flex",
|
|
649
|
+
justifyContent: "center",
|
|
650
|
+
alignItems: "center",
|
|
651
|
+
pt: 2
|
|
652
|
+
},
|
|
653
|
+
children: [/*#__PURE__*/jsx(Chip, {
|
|
654
|
+
sx: {
|
|
655
|
+
backgroundColor: errorBg,
|
|
656
|
+
color: errorText,
|
|
657
|
+
mx: 1
|
|
658
|
+
},
|
|
659
|
+
label: "Minimum in less than 30 days"
|
|
660
|
+
}), /*#__PURE__*/jsx(Chip, {
|
|
661
|
+
sx: {
|
|
662
|
+
color: warnText,
|
|
663
|
+
mx: 1
|
|
664
|
+
},
|
|
665
|
+
variant: "outlined",
|
|
666
|
+
label: "Minimum in less than 60 days"
|
|
667
|
+
})]
|
|
668
|
+
})]
|
|
669
|
+
});
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
function LiterInput(_ref) {
|
|
673
|
+
var limit = _ref.limit,
|
|
674
|
+
SetLimit = _ref.SetLimit,
|
|
675
|
+
error = _ref.error,
|
|
676
|
+
SetError = _ref.SetError;
|
|
677
|
+
var _useState = useState(limit),
|
|
678
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
679
|
+
input = _useState2[0],
|
|
680
|
+
SetInput = _useState2[1];
|
|
681
|
+
var _useState3 = useState(false),
|
|
682
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
683
|
+
edit = _useState4[0],
|
|
684
|
+
SetEdit = _useState4[1];
|
|
685
|
+
if (edit) {
|
|
686
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
687
|
+
children: [/*#__PURE__*/jsx(NumField, {
|
|
688
|
+
input: input,
|
|
689
|
+
SetInput: SetInput,
|
|
690
|
+
error: error,
|
|
691
|
+
SetError: SetError,
|
|
692
|
+
size: "medium",
|
|
693
|
+
adornment: "L"
|
|
694
|
+
}), " ", /*#__PURE__*/jsx(IconButton, {
|
|
695
|
+
disabled: error,
|
|
696
|
+
size: "small",
|
|
697
|
+
onClick: function onClick() {
|
|
698
|
+
SetEdit(!edit);
|
|
699
|
+
SetLimit(Number(input));
|
|
700
|
+
},
|
|
701
|
+
children: /*#__PURE__*/jsx(SaveIcon, {})
|
|
702
|
+
})]
|
|
703
|
+
});
|
|
704
|
+
} else {
|
|
705
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
706
|
+
children: [limit, " L", " ", /*#__PURE__*/jsx(IconButton, {
|
|
707
|
+
size: "small",
|
|
708
|
+
onClick: function onClick() {
|
|
709
|
+
return SetEdit(!edit);
|
|
710
|
+
},
|
|
711
|
+
children: /*#__PURE__*/jsx(EditIcon, {})
|
|
712
|
+
})]
|
|
713
|
+
});
|
|
714
|
+
}
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
function FindPair(_ref) {
|
|
718
|
+
var currSpecs = _ref.currSpecs,
|
|
719
|
+
heliumData = _ref.heliumData,
|
|
720
|
+
boilOff = _ref.boilOff,
|
|
721
|
+
limit = _ref.limit;
|
|
722
|
+
// find all possible pairs of spectrometers
|
|
723
|
+
|
|
724
|
+
var specPairs = [];
|
|
725
|
+
currSpecs.map(function (spec1) {
|
|
726
|
+
currSpecs.map(function (spec2) {
|
|
727
|
+
if (spec1 !== spec2) {
|
|
728
|
+
specPairs.push([spec1, spec2].sort()); // sort to facilitate duplicate removal
|
|
729
|
+
}
|
|
730
|
+
});
|
|
731
|
+
});
|
|
732
|
+
|
|
733
|
+
// remove duplicates from array by conversion to string
|
|
734
|
+
|
|
735
|
+
specPairs = Array.from(new Set(specPairs.map(JSON.stringify)), JSON.parse);
|
|
736
|
+
var specPairsLiters = [];
|
|
737
|
+
var _loop = function _loop() {
|
|
738
|
+
var j = 1;
|
|
739
|
+
var pairBoil = 0;
|
|
740
|
+
|
|
741
|
+
// Add current pair of specs
|
|
742
|
+
|
|
743
|
+
specPairsLiters.push(specPairs[i]);
|
|
744
|
+
|
|
745
|
+
// Calculate L. to max for pair until reaching target value
|
|
746
|
+
|
|
747
|
+
do {
|
|
748
|
+
pairBoil = specPairs[i].reduce(function (total, current) {
|
|
749
|
+
var boil = Math.round(heliumData.helium[current] + j * boilOff[current]);
|
|
750
|
+
|
|
751
|
+
// Catch negative values
|
|
752
|
+
if (boil < 0) {
|
|
753
|
+
boil = 0;
|
|
754
|
+
}
|
|
755
|
+
var boilToMax = CalcToMax({
|
|
756
|
+
value: boil,
|
|
757
|
+
spec: current
|
|
758
|
+
});
|
|
759
|
+
return total + boilToMax;
|
|
760
|
+
}, 0);
|
|
761
|
+
j++;
|
|
762
|
+
} while (pairBoil < limit && j < 300);
|
|
763
|
+
|
|
764
|
+
// Result to pair
|
|
765
|
+
|
|
766
|
+
specPairsLiters[i].push(j);
|
|
767
|
+
specPairsLiters[i].push(pairBoil);
|
|
768
|
+
specPairsLiters[i].push(pairBoil > limit);
|
|
769
|
+
};
|
|
770
|
+
for (var i in specPairs) {
|
|
771
|
+
_loop();
|
|
772
|
+
}
|
|
773
|
+
|
|
774
|
+
// Remove pairs that did not converge
|
|
775
|
+
|
|
776
|
+
specPairsLiters = specPairsLiters.filter(function (pair) {
|
|
777
|
+
return pair[4];
|
|
778
|
+
});
|
|
779
|
+
|
|
780
|
+
// Find pair with minimal number of days
|
|
781
|
+
|
|
782
|
+
var minPair = [];
|
|
783
|
+
switch (specPairsLiters.length) {
|
|
784
|
+
case 0:
|
|
785
|
+
minPair = [];
|
|
786
|
+
break;
|
|
787
|
+
case 1:
|
|
788
|
+
minPair = _toConsumableArray(specPairsLiters);
|
|
789
|
+
break;
|
|
790
|
+
default:
|
|
791
|
+
minPair = specPairsLiters.reduce(function (min, current) {
|
|
792
|
+
var i = current[2] < min[2] ? current : min;
|
|
793
|
+
return i;
|
|
794
|
+
});
|
|
795
|
+
break;
|
|
796
|
+
}
|
|
797
|
+
minPair = minPair.flat();
|
|
798
|
+
return minPair;
|
|
799
|
+
}
|
|
800
|
+
function FindTriple(_ref2) {
|
|
801
|
+
var currSpecs = _ref2.currSpecs,
|
|
802
|
+
heliumData = _ref2.heliumData,
|
|
803
|
+
boilOff = _ref2.boilOff,
|
|
804
|
+
limit = _ref2.limit;
|
|
805
|
+
// find all possible triples of spectrometers
|
|
806
|
+
|
|
807
|
+
var specTriples = [];
|
|
808
|
+
currSpecs.map(function (spec1) {
|
|
809
|
+
currSpecs.map(function (spec2) {
|
|
810
|
+
currSpecs.map(function (spec3) {
|
|
811
|
+
if (!(spec1 === spec2 || spec2 === spec3 || spec3 === spec1)) {
|
|
812
|
+
specTriples.push([spec1, spec2, spec3].sort()); // sort to facilitate duplicate removal
|
|
813
|
+
}
|
|
814
|
+
});
|
|
815
|
+
});
|
|
816
|
+
});
|
|
817
|
+
|
|
818
|
+
// remove duplicates from array by conversion to string
|
|
819
|
+
|
|
820
|
+
specTriples = Array.from(new Set(specTriples.map(JSON.stringify)), JSON.parse);
|
|
821
|
+
var specTriplesLiters = [];
|
|
822
|
+
var _loop2 = function _loop2() {
|
|
823
|
+
var j = 1;
|
|
824
|
+
var pairBoil = 0;
|
|
825
|
+
|
|
826
|
+
// Add current pair of specs
|
|
827
|
+
|
|
828
|
+
specTriplesLiters.push(specTriples[i]);
|
|
829
|
+
|
|
830
|
+
// Calculate L. to max for pair until reaching target value
|
|
831
|
+
|
|
832
|
+
do {
|
|
833
|
+
pairBoil = specTriples[i].reduce(function (total, current) {
|
|
834
|
+
var boil = Math.round(heliumData.helium[current] + j * boilOff[current]);
|
|
835
|
+
|
|
836
|
+
// Catch negative values
|
|
837
|
+
if (boil < 0) {
|
|
838
|
+
boil = 0;
|
|
839
|
+
}
|
|
840
|
+
var boilToMax = CalcToMax({
|
|
841
|
+
value: boil,
|
|
842
|
+
spec: current
|
|
843
|
+
});
|
|
844
|
+
return total + boilToMax;
|
|
845
|
+
}, 0);
|
|
846
|
+
j++;
|
|
847
|
+
} while (pairBoil < limit && j < 300);
|
|
848
|
+
|
|
849
|
+
// Result to triple
|
|
850
|
+
|
|
851
|
+
specTriplesLiters[i].push(j);
|
|
852
|
+
specTriplesLiters[i].push(pairBoil);
|
|
853
|
+
specTriplesLiters[i].push(pairBoil > limit);
|
|
854
|
+
};
|
|
855
|
+
for (var i in specTriples) {
|
|
856
|
+
_loop2();
|
|
857
|
+
}
|
|
858
|
+
|
|
859
|
+
// Remove triples that did not converge
|
|
860
|
+
|
|
861
|
+
specTriplesLiters = specTriplesLiters.filter(function (pair) {
|
|
862
|
+
return pair[5];
|
|
863
|
+
});
|
|
864
|
+
|
|
865
|
+
// Find triple with minimal number of days
|
|
866
|
+
|
|
867
|
+
var minTriple = [];
|
|
868
|
+
switch (specTriplesLiters.length) {
|
|
869
|
+
case 0:
|
|
870
|
+
minTriple = [];
|
|
871
|
+
break;
|
|
872
|
+
case 1:
|
|
873
|
+
minTriple = _toConsumableArray(specTriplesLiters);
|
|
874
|
+
break;
|
|
875
|
+
default:
|
|
876
|
+
minTriple = specTriplesLiters.reduce(function (min, current) {
|
|
877
|
+
var i = current[3] < min[3] ? current : min;
|
|
878
|
+
return i;
|
|
879
|
+
});
|
|
880
|
+
break;
|
|
881
|
+
}
|
|
882
|
+
minTriple = minTriple.flat();
|
|
883
|
+
return minTriple;
|
|
884
|
+
}
|
|
885
|
+
|
|
886
|
+
function ownKeys$2(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
887
|
+
function _objectSpread$2(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$2(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$2(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
888
|
+
function TupleResult(_ref) {
|
|
889
|
+
var children = _ref.children,
|
|
890
|
+
title = _ref.title;
|
|
891
|
+
return /*#__PURE__*/jsx(Grid, {
|
|
892
|
+
children: /*#__PURE__*/jsxs(AppTable, {
|
|
893
|
+
children: [/*#__PURE__*/jsx(TableHead, {
|
|
894
|
+
children: /*#__PURE__*/jsx(TableRow, {
|
|
895
|
+
children: /*#__PURE__*/jsx(TableHeadCell, {
|
|
896
|
+
children: title
|
|
897
|
+
})
|
|
898
|
+
})
|
|
899
|
+
}), /*#__PURE__*/jsx(TableBody, {
|
|
900
|
+
children: /*#__PURE__*/jsx(TableRow, {
|
|
901
|
+
children: /*#__PURE__*/jsx(TableCell, {
|
|
902
|
+
children: children
|
|
903
|
+
})
|
|
904
|
+
})
|
|
905
|
+
})]
|
|
906
|
+
})
|
|
907
|
+
});
|
|
908
|
+
}
|
|
909
|
+
function PairResult(_ref2) {
|
|
910
|
+
var minPair = _ref2.minPair;
|
|
911
|
+
if (minPair.length !== 0) {
|
|
912
|
+
var d = new Date();
|
|
913
|
+
d.setDate(d.getDate() + minPair[2]);
|
|
914
|
+
var date = moment$1(d).format("ll");
|
|
915
|
+
return /*#__PURE__*/jsxs(TupleResult, {
|
|
916
|
+
title: "Pair",
|
|
917
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
918
|
+
children: minPair[0]
|
|
919
|
+
}), " and ", /*#__PURE__*/jsx("strong", {
|
|
920
|
+
children: minPair[1]
|
|
921
|
+
}), " ", "in ", /*#__PURE__*/jsxs("strong", {
|
|
922
|
+
children: [minPair[2], " days"]
|
|
923
|
+
}), " (", date, ")"]
|
|
924
|
+
});
|
|
925
|
+
} else {
|
|
926
|
+
return /*#__PURE__*/jsx(TupleResult, {
|
|
927
|
+
title: "Pair",
|
|
928
|
+
children: /*#__PURE__*/jsx("em", {
|
|
929
|
+
children: "No spectrometer pair reaches the target value."
|
|
930
|
+
})
|
|
931
|
+
});
|
|
932
|
+
}
|
|
933
|
+
}
|
|
934
|
+
function TripleResult(_ref3) {
|
|
935
|
+
var minTriple = _ref3.minTriple;
|
|
936
|
+
if (minTriple.length !== 0) {
|
|
937
|
+
var d = new Date();
|
|
938
|
+
d.setDate(d.getDate() + minTriple[3]);
|
|
939
|
+
var date = moment$1(d).format("ll");
|
|
940
|
+
return /*#__PURE__*/jsxs(TupleResult, {
|
|
941
|
+
title: "Triple",
|
|
942
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
943
|
+
children: minTriple[0]
|
|
944
|
+
}), ", ", /*#__PURE__*/jsx("strong", {
|
|
945
|
+
children: minTriple[1]
|
|
946
|
+
}), ", and ", /*#__PURE__*/jsx("strong", {
|
|
947
|
+
children: minTriple[2]
|
|
948
|
+
}), " in", " ", /*#__PURE__*/jsxs("strong", {
|
|
949
|
+
children: [minTriple[3], " days"]
|
|
950
|
+
}), " (", date, ")"]
|
|
951
|
+
});
|
|
952
|
+
} else {
|
|
953
|
+
return /*#__PURE__*/jsx(TupleResult, {
|
|
954
|
+
title: "Triple",
|
|
955
|
+
children: /*#__PURE__*/jsx("p", {
|
|
956
|
+
children: /*#__PURE__*/jsx("em", {
|
|
957
|
+
children: "No spectrometer triple reaches the target value."
|
|
958
|
+
})
|
|
959
|
+
})
|
|
960
|
+
});
|
|
961
|
+
}
|
|
962
|
+
}
|
|
963
|
+
function PairWizard(_ref4) {
|
|
964
|
+
var heliumData = _ref4.heliumData;
|
|
965
|
+
var heliumLookupData = useContext(LookupContext);
|
|
966
|
+
|
|
967
|
+
// Define lookup objects
|
|
968
|
+
|
|
969
|
+
var boilOff = heliumLookupData.boilOff;
|
|
970
|
+
var defaultSpecs = {};
|
|
971
|
+
Object.keys(boilOff).map(function (spec) {
|
|
972
|
+
return defaultSpecs = _objectSpread$2(_objectSpread$2({}, defaultSpecs), {}, _defineProperty({}, spec, true));
|
|
973
|
+
});
|
|
974
|
+
var _useImmer = useImmer(defaultSpecs),
|
|
975
|
+
_useImmer2 = _slicedToArray(_useImmer, 2),
|
|
976
|
+
specs = _useImmer2[0],
|
|
977
|
+
SetSpecs = _useImmer2[1];
|
|
978
|
+
var currSpecs = Object.keys(specs).filter(function (spec) {
|
|
979
|
+
return specs[spec];
|
|
980
|
+
});
|
|
981
|
+
var _useState = useState(false),
|
|
982
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
983
|
+
error = _useState2[0],
|
|
984
|
+
SetError = _useState2[1];
|
|
985
|
+
var _useState3 = useState(100),
|
|
986
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
987
|
+
limit = _useState4[0],
|
|
988
|
+
SetLimit = _useState4[1];
|
|
989
|
+
var minPair = FindPair(_objectSpread$2({}, {
|
|
990
|
+
currSpecs: currSpecs,
|
|
991
|
+
heliumData: heliumData,
|
|
992
|
+
boilOff: boilOff,
|
|
993
|
+
limit: limit
|
|
994
|
+
}));
|
|
995
|
+
var minTriple = FindTriple(_objectSpread$2({}, {
|
|
996
|
+
currSpecs: currSpecs,
|
|
997
|
+
heliumData: heliumData,
|
|
998
|
+
boilOff: boilOff,
|
|
999
|
+
limit: limit
|
|
1000
|
+
}));
|
|
1001
|
+
return /*#__PURE__*/jsx(React.Fragment, {
|
|
1002
|
+
children: /*#__PURE__*/jsxs(Grid, {
|
|
1003
|
+
container: true,
|
|
1004
|
+
columns: {
|
|
1005
|
+
xs: 6,
|
|
1006
|
+
md: 12
|
|
1007
|
+
},
|
|
1008
|
+
children: [/*#__PURE__*/jsxs(Grid, {
|
|
1009
|
+
xs: 6,
|
|
1010
|
+
sx: {
|
|
1011
|
+
px: 2
|
|
1012
|
+
},
|
|
1013
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
1014
|
+
textAlign: "left",
|
|
1015
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
1016
|
+
children: "Find earliest set of spectrometers requiring"
|
|
1017
|
+
})
|
|
1018
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1019
|
+
sx: {
|
|
1020
|
+
padding: 2,
|
|
1021
|
+
display: "flex",
|
|
1022
|
+
justifyContent: "center"
|
|
1023
|
+
},
|
|
1024
|
+
children: /*#__PURE__*/jsx(Typography, {
|
|
1025
|
+
variant: "h4",
|
|
1026
|
+
children: /*#__PURE__*/jsx(LiterInput, {
|
|
1027
|
+
limit: limit,
|
|
1028
|
+
SetLimit: SetLimit,
|
|
1029
|
+
error: error,
|
|
1030
|
+
SetError: SetError
|
|
1031
|
+
})
|
|
1032
|
+
})
|
|
1033
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1034
|
+
children: /*#__PURE__*/jsx(SelectSpecs, {
|
|
1035
|
+
specs: specs,
|
|
1036
|
+
SetSpecs: SetSpecs
|
|
1037
|
+
})
|
|
1038
|
+
})]
|
|
1039
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1040
|
+
xs: 6,
|
|
1041
|
+
sx: {
|
|
1042
|
+
px: 2
|
|
1043
|
+
},
|
|
1044
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
1045
|
+
textAlign: "left",
|
|
1046
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
1047
|
+
children: "Result"
|
|
1048
|
+
})
|
|
1049
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1050
|
+
sx: {
|
|
1051
|
+
px: 3
|
|
1052
|
+
},
|
|
1053
|
+
children: [/*#__PURE__*/jsx(PairResult, {
|
|
1054
|
+
minPair: minPair
|
|
1055
|
+
}), /*#__PURE__*/jsx(TripleResult, {
|
|
1056
|
+
minTriple: minTriple
|
|
1057
|
+
})]
|
|
1058
|
+
})]
|
|
1059
|
+
})]
|
|
1060
|
+
})
|
|
1061
|
+
});
|
|
1062
|
+
}
|
|
1063
|
+
|
|
1064
|
+
function ownKeys$1(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
1065
|
+
function _objectSpread$1(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$1(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$1(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1066
|
+
function EstimateConsumption() {
|
|
1067
|
+
// Get data
|
|
1068
|
+
|
|
1069
|
+
var heliumLookupData = useContext(LookupContext);
|
|
1070
|
+
var boilOff = heliumLookupData.boilOff;
|
|
1071
|
+
var lookup = heliumLookupData.lookup;
|
|
1072
|
+
|
|
1073
|
+
// Define array and populate with days and liters to get from 100% to 50%
|
|
1074
|
+
|
|
1075
|
+
var specCons = [];
|
|
1076
|
+
Object.keys(lookup).map(function (spec) {
|
|
1077
|
+
return specCons.push({
|
|
1078
|
+
name: spec,
|
|
1079
|
+
liters: (lookup[spec].filter(function (x) {
|
|
1080
|
+
return x.level === 100;
|
|
1081
|
+
})[0].liters - lookup[spec].filter(function (x) {
|
|
1082
|
+
return x.level === 50;
|
|
1083
|
+
})[0].liters).toFixed(1),
|
|
1084
|
+
days: (-50 / boilOff[spec]).toFixed(1)
|
|
1085
|
+
});
|
|
1086
|
+
});
|
|
1087
|
+
|
|
1088
|
+
// Calculate consumption per day, month, year from values above
|
|
1089
|
+
|
|
1090
|
+
specCons = specCons.map(function (spec) {
|
|
1091
|
+
return _objectSpread$1(_objectSpread$1({}, spec), {}, {
|
|
1092
|
+
perDay: spec.liters / spec.days,
|
|
1093
|
+
perMonth: (spec.liters / spec.days * 30).toFixed(1),
|
|
1094
|
+
perYear: (spec.liters / spec.days * 365).toFixed(1)
|
|
1095
|
+
});
|
|
1096
|
+
});
|
|
1097
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
1098
|
+
children: [/*#__PURE__*/jsx("p", {
|
|
1099
|
+
children: "Helium consumption estimated based on lookup values."
|
|
1100
|
+
}), /*#__PURE__*/jsxs(AppTable, {
|
|
1101
|
+
children: [/*#__PURE__*/jsx(TableHead, {
|
|
1102
|
+
children: /*#__PURE__*/jsxs(TableRow, {
|
|
1103
|
+
children: [/*#__PURE__*/jsx(TableHeadCell, {}), specCons.map(function (spec) {
|
|
1104
|
+
return /*#__PURE__*/jsx(TableHeadCell, {
|
|
1105
|
+
children: spec.name
|
|
1106
|
+
}, "Head" + spec.name);
|
|
1107
|
+
}), /*#__PURE__*/jsx(TableHeadCell, {
|
|
1108
|
+
children: "Sum"
|
|
1109
|
+
})]
|
|
1110
|
+
})
|
|
1111
|
+
}), /*#__PURE__*/jsxs(TableBody, {
|
|
1112
|
+
children: [/*#__PURE__*/jsxs(TableRow, {
|
|
1113
|
+
children: [/*#__PURE__*/jsx(TableCell, {
|
|
1114
|
+
children: "per month"
|
|
1115
|
+
}), specCons.map(function (spec) {
|
|
1116
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
1117
|
+
children: [spec.perMonth, " L ", /*#__PURE__*/jsx("br", {}), "(", (spec.perMonth * 0.79).toFixed(2), " m", /*#__PURE__*/jsx("sup", {
|
|
1118
|
+
children: "3"
|
|
1119
|
+
}), " Gas)"]
|
|
1120
|
+
}, "perMonth" + spec.name);
|
|
1121
|
+
}), /*#__PURE__*/jsx(TableCell, {
|
|
1122
|
+
children: /*#__PURE__*/jsxs("strong", {
|
|
1123
|
+
children: [specCons.reduce(function (total, spec) {
|
|
1124
|
+
return total + Number(spec.perMonth);
|
|
1125
|
+
}, 0).toFixed(1), " ", "L", /*#__PURE__*/jsx("br", {}), "(", (specCons.reduce(function (total, spec) {
|
|
1126
|
+
return total + Number(spec.perMonth);
|
|
1127
|
+
}, 0) * 0.79).toFixed(2), " ", "m", /*#__PURE__*/jsx("sup", {
|
|
1128
|
+
children: "3"
|
|
1129
|
+
}), " Gas)"]
|
|
1130
|
+
})
|
|
1131
|
+
})]
|
|
1132
|
+
}), /*#__PURE__*/jsxs(TableRow, {
|
|
1133
|
+
children: [/*#__PURE__*/jsx(TableCell, {
|
|
1134
|
+
rowSpan: 2,
|
|
1135
|
+
children: "per year"
|
|
1136
|
+
}), specCons.map(function (spec) {
|
|
1137
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
1138
|
+
children: [spec.perYear, " L ", /*#__PURE__*/jsx("br", {}), "(", (spec.perYear * 0.79).toFixed(2), " m", /*#__PURE__*/jsx("sup", {
|
|
1139
|
+
children: "3"
|
|
1140
|
+
}), " ", "Gas)"]
|
|
1141
|
+
}, "perYear" + spec.name);
|
|
1142
|
+
}), /*#__PURE__*/jsx(TableCell, {
|
|
1143
|
+
children: /*#__PURE__*/jsxs("strong", {
|
|
1144
|
+
children: [specCons.reduce(function (total, spec) {
|
|
1145
|
+
return total + Number(spec.perYear);
|
|
1146
|
+
}, 0).toFixed(1), " ", "L", /*#__PURE__*/jsx("br", {}), "(", (specCons.reduce(function (total, spec) {
|
|
1147
|
+
return total + Number(spec.perYear);
|
|
1148
|
+
}, 0) * 0.79).toFixed(2), " ", "m", /*#__PURE__*/jsx("sup", {
|
|
1149
|
+
children: "3"
|
|
1150
|
+
}), " Gas)"]
|
|
1151
|
+
})
|
|
1152
|
+
})]
|
|
1153
|
+
})]
|
|
1154
|
+
})]
|
|
1155
|
+
})]
|
|
1156
|
+
});
|
|
1157
|
+
}
|
|
1158
|
+
|
|
1159
|
+
function RenderGraph(_ref) {
|
|
1160
|
+
var data = _ref.data,
|
|
1161
|
+
height = _ref.height,
|
|
1162
|
+
width = _ref.width,
|
|
1163
|
+
spec = _ref.spec;
|
|
1164
|
+
// Import Context
|
|
1165
|
+
|
|
1166
|
+
var heliumLookupData = useContext(LookupContext);
|
|
1167
|
+
|
|
1168
|
+
// Custom Tooltip for LineChart
|
|
1169
|
+
|
|
1170
|
+
var CustomTooltip = function CustomTooltip(_ref2) {
|
|
1171
|
+
var active = _ref2.active,
|
|
1172
|
+
payload = _ref2.payload,
|
|
1173
|
+
label = _ref2.label;
|
|
1174
|
+
if (active && payload && payload.length) {
|
|
1175
|
+
var date = moment(payload[0].payload.date, "ddd MMM D HH:mm:ss YYYY").format("LL");
|
|
1176
|
+
return /*#__PURE__*/jsxs("div", {
|
|
1177
|
+
style: {
|
|
1178
|
+
border: "solid 1px " + AppTheme.palette.secondary.main,
|
|
1179
|
+
padding: "0.75em",
|
|
1180
|
+
backgroundColor: "#ffffffaa"
|
|
1181
|
+
},
|
|
1182
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
1183
|
+
children: date
|
|
1184
|
+
}), /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsxs("em", {
|
|
1185
|
+
children: ["(", label, " days ago)"]
|
|
1186
|
+
}), /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsxs("strong", {
|
|
1187
|
+
style: {
|
|
1188
|
+
color: AppTheme.palette.primary.main
|
|
1189
|
+
},
|
|
1190
|
+
children: [payload[0].value, " %"]
|
|
1191
|
+
})]
|
|
1192
|
+
});
|
|
1193
|
+
}
|
|
1194
|
+
};
|
|
1195
|
+
|
|
1196
|
+
// Button for days state change
|
|
1197
|
+
|
|
1198
|
+
function DayButton(_ref3) {
|
|
1199
|
+
var value = _ref3.value;
|
|
1200
|
+
return /*#__PURE__*/jsx(Button, {
|
|
1201
|
+
onClick: function onClick() {
|
|
1202
|
+
return SetDays(value);
|
|
1203
|
+
},
|
|
1204
|
+
color: value === days ? "primary" : "secondary" // Active button style
|
|
1205
|
+
,
|
|
1206
|
+
variant: value === days ? "contained" : "outlined" // Active button style
|
|
1207
|
+
,
|
|
1208
|
+
size: "small",
|
|
1209
|
+
children: value
|
|
1210
|
+
});
|
|
1211
|
+
}
|
|
1212
|
+
|
|
1213
|
+
// State
|
|
1214
|
+
|
|
1215
|
+
var _useState = useState(90),
|
|
1216
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1217
|
+
days = _useState2[0],
|
|
1218
|
+
SetDays = _useState2[1];
|
|
1219
|
+
var _useState3 = useState(true),
|
|
1220
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
1221
|
+
showMinima = _useState4[0],
|
|
1222
|
+
setShowMinima = _useState4[1];
|
|
1223
|
+
|
|
1224
|
+
// Add days ago to data
|
|
1225
|
+
|
|
1226
|
+
data.map(function (item) {
|
|
1227
|
+
item.days = -moment(item.date, "ddd MMM D HH:mm:ss YYYY").diff(moment(), "days");
|
|
1228
|
+
});
|
|
1229
|
+
|
|
1230
|
+
// Get last n elements of array
|
|
1231
|
+
|
|
1232
|
+
data = data.slice(Math.max(data.length - days, 0));
|
|
1233
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
1234
|
+
children: [/*#__PURE__*/jsxs(LineChart, {
|
|
1235
|
+
height: height,
|
|
1236
|
+
width: width,
|
|
1237
|
+
data: data,
|
|
1238
|
+
margin: {
|
|
1239
|
+
top: 5,
|
|
1240
|
+
right: 20,
|
|
1241
|
+
bottom: 25,
|
|
1242
|
+
left: 0
|
|
1243
|
+
},
|
|
1244
|
+
children: [/*#__PURE__*/jsx(Line, {
|
|
1245
|
+
dataKey: "level",
|
|
1246
|
+
stroke: AppTheme.palette.primary.main,
|
|
1247
|
+
fill: AppTheme.palette.primary.main,
|
|
1248
|
+
type: "linear",
|
|
1249
|
+
dot: {
|
|
1250
|
+
r: 1.5
|
|
1251
|
+
}
|
|
1252
|
+
}), /*#__PURE__*/jsx(CartesianGrid, {
|
|
1253
|
+
stroke: AppTheme.palette.divider,
|
|
1254
|
+
strokeDasharray: "5 5"
|
|
1255
|
+
}), /*#__PURE__*/jsx(XAxis, {
|
|
1256
|
+
dataKey: "days",
|
|
1257
|
+
interval: days < 15 ? 1 : Math.round(days / 3),
|
|
1258
|
+
children: /*#__PURE__*/jsx(Label, {
|
|
1259
|
+
value: "Days ago",
|
|
1260
|
+
offset: 1,
|
|
1261
|
+
position: "bottom"
|
|
1262
|
+
})
|
|
1263
|
+
}), /*#__PURE__*/jsx(YAxis, {
|
|
1264
|
+
dataKey: "level",
|
|
1265
|
+
unit: "%",
|
|
1266
|
+
type: "number",
|
|
1267
|
+
domain: [0, 100]
|
|
1268
|
+
}), showMinima ? /*#__PURE__*/jsxs(React.Fragment, {
|
|
1269
|
+
children: [/*#__PURE__*/jsx(ReferenceLine, {
|
|
1270
|
+
y: heliumLookupData.minima[spec],
|
|
1271
|
+
stroke: AppTheme.palette.secondary.main,
|
|
1272
|
+
strokeDasharray: (3)
|
|
1273
|
+
}), /*#__PURE__*/jsx(ReferenceArea, {
|
|
1274
|
+
y1: heliumLookupData.minima[spec],
|
|
1275
|
+
y2: 0,
|
|
1276
|
+
stroke: "none",
|
|
1277
|
+
stro: true,
|
|
1278
|
+
fill: AppTheme.palette.secondary.main,
|
|
1279
|
+
fillOpacity: 0.1
|
|
1280
|
+
})]
|
|
1281
|
+
}) : null, /*#__PURE__*/jsx(Tooltip, {
|
|
1282
|
+
content: /*#__PURE__*/jsx(CustomTooltip, {})
|
|
1283
|
+
})]
|
|
1284
|
+
}), /*#__PURE__*/jsxs(ButtonGroup, {
|
|
1285
|
+
disableElevation: true,
|
|
1286
|
+
variant: "outlined",
|
|
1287
|
+
fullWidth: true,
|
|
1288
|
+
color: "secondary",
|
|
1289
|
+
"aria-label": "contained primary button group",
|
|
1290
|
+
sx: {
|
|
1291
|
+
justifySelf: "center",
|
|
1292
|
+
px: 5
|
|
1293
|
+
},
|
|
1294
|
+
size: "small",
|
|
1295
|
+
children: [/*#__PURE__*/jsx(DayButton, {
|
|
1296
|
+
value: 7
|
|
1297
|
+
}), /*#__PURE__*/jsx(DayButton, {
|
|
1298
|
+
value: 30
|
|
1299
|
+
}), /*#__PURE__*/jsx(DayButton, {
|
|
1300
|
+
value: 90
|
|
1301
|
+
}), /*#__PURE__*/jsx(DayButton, {
|
|
1302
|
+
value: 180
|
|
1303
|
+
}), /*#__PURE__*/jsx(DayButton, {
|
|
1304
|
+
value: 365
|
|
1305
|
+
})]
|
|
1306
|
+
}), /*#__PURE__*/jsx(FormGroup, {
|
|
1307
|
+
children: /*#__PURE__*/jsx(FormControlLabel, {
|
|
1308
|
+
control: /*#__PURE__*/jsx(Switch, {
|
|
1309
|
+
label: "Show Minimum",
|
|
1310
|
+
checked: showMinima,
|
|
1311
|
+
onChange: function onChange() {
|
|
1312
|
+
return setShowMinima(!showMinima);
|
|
1313
|
+
}
|
|
1314
|
+
}),
|
|
1315
|
+
label: "Show Minimum",
|
|
1316
|
+
sx: {
|
|
1317
|
+
justifyContent: "center"
|
|
1318
|
+
}
|
|
1319
|
+
})
|
|
1320
|
+
})]
|
|
1321
|
+
});
|
|
1322
|
+
}
|
|
1323
|
+
function HeliumGraph(_ref4) {
|
|
1324
|
+
var graphData = _ref4.graphData,
|
|
1325
|
+
graphDataMeta = _ref4.graphDataMeta,
|
|
1326
|
+
matches = _ref4.matches;
|
|
1327
|
+
var height = matches ? 250 : 200;
|
|
1328
|
+
var width = matches ? 300 : 280;
|
|
1329
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
1330
|
+
children: [/*#__PURE__*/jsxs(DivTitle, {
|
|
1331
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
1332
|
+
children: "Helium level monitoring"
|
|
1333
|
+
}), " ", /*#__PURE__*/jsxs("em", {
|
|
1334
|
+
children: ["(updated ", moment(graphDataMeta.date).fromNow(), ")"]
|
|
1335
|
+
})]
|
|
1336
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1337
|
+
container: true,
|
|
1338
|
+
sx: {
|
|
1339
|
+
display: "flex",
|
|
1340
|
+
justifyContent: "center"
|
|
1341
|
+
},
|
|
1342
|
+
children: Object.keys(graphData).map(function (spec) {
|
|
1343
|
+
return /*#__PURE__*/jsxs(Paper, {
|
|
1344
|
+
sx: {
|
|
1345
|
+
display: "flex",
|
|
1346
|
+
flexDirection: "column",
|
|
1347
|
+
justifyItems: "center",
|
|
1348
|
+
stroke: AppTheme.palette.divider,
|
|
1349
|
+
px: 2,
|
|
1350
|
+
paddingBottom: 2,
|
|
1351
|
+
margin: 2
|
|
1352
|
+
},
|
|
1353
|
+
children: [/*#__PURE__*/jsx("h4", {
|
|
1354
|
+
children: spec
|
|
1355
|
+
}), /*#__PURE__*/jsx(RenderGraph, {
|
|
1356
|
+
data: graphData[spec],
|
|
1357
|
+
height: height,
|
|
1358
|
+
width: width,
|
|
1359
|
+
spec: spec
|
|
1360
|
+
})]
|
|
1361
|
+
}, "graph_" + spec);
|
|
1362
|
+
})
|
|
1363
|
+
})]
|
|
1364
|
+
});
|
|
1365
|
+
}
|
|
1366
|
+
|
|
1367
|
+
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
|
|
1368
|
+
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
1369
|
+
function Helium(props) {
|
|
1370
|
+
// State
|
|
1371
|
+
|
|
1372
|
+
var _useImmer = useImmer(null),
|
|
1373
|
+
_useImmer2 = _slicedToArray(_useImmer, 2),
|
|
1374
|
+
heliumData = _useImmer2[0],
|
|
1375
|
+
SetHeliumData = _useImmer2[1];
|
|
1376
|
+
var _useState = useState(false),
|
|
1377
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1378
|
+
levelsEdited = _useState2[0],
|
|
1379
|
+
SetLevelsEdited = _useState2[1];
|
|
1380
|
+
var _useState3 = useState(false),
|
|
1381
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
1382
|
+
preprocessed = _useState4[0],
|
|
1383
|
+
SetPreprocessed = _useState4[1];
|
|
1384
|
+
|
|
1385
|
+
// Query Media size for responsive column wrapping
|
|
1386
|
+
|
|
1387
|
+
var matches = useMediaQuery(AppTheme.breakpoints.up("lg"));
|
|
1388
|
+
var maxHeight = matches ? props.maxHeight || 1280 : 1000000;
|
|
1389
|
+
var cardSize = matches ? 6 : 12;
|
|
1390
|
+
var collapsed = !matches;
|
|
1391
|
+
|
|
1392
|
+
// fetch data
|
|
1393
|
+
|
|
1394
|
+
var heliumLookupData = PublicFetch({
|
|
1395
|
+
url: "/heliumLookup.json"
|
|
1396
|
+
});
|
|
1397
|
+
var fetchGraph = PublicFetch({
|
|
1398
|
+
url: "/graphdata.json"
|
|
1399
|
+
});
|
|
1400
|
+
PublicFetch({
|
|
1401
|
+
url: "/helium.json",
|
|
1402
|
+
SetState: SetHeliumData
|
|
1403
|
+
});
|
|
1404
|
+
useEffect(function () {
|
|
1405
|
+
if (heliumData) {
|
|
1406
|
+
Object.keys(heliumData.helium).map(function (spec) {
|
|
1407
|
+
SetHeliumData(function (heliumData) {
|
|
1408
|
+
heliumData.helium[spec] = Number(heliumData.helium[spec]);
|
|
1409
|
+
});
|
|
1410
|
+
});
|
|
1411
|
+
SetPreprocessed(true);
|
|
1412
|
+
}
|
|
1413
|
+
}, [heliumData]);
|
|
1414
|
+
|
|
1415
|
+
// Catch empty data
|
|
1416
|
+
|
|
1417
|
+
if (!heliumData || !heliumLookupData || !fetchGraph || preprocessed === false) {
|
|
1418
|
+
return /*#__PURE__*/jsx(Progress, {});
|
|
1419
|
+
}
|
|
1420
|
+
var graphDataMeta = fetchGraph.meta;
|
|
1421
|
+
var graphData = _objectSpread({}, fetchGraph);
|
|
1422
|
+
delete graphData.meta;
|
|
1423
|
+
if (!graphDataMeta) {
|
|
1424
|
+
return /*#__PURE__*/jsx(Progress, {});
|
|
1425
|
+
}
|
|
1426
|
+
return /*#__PURE__*/jsx(AppGrid, {
|
|
1427
|
+
children: /*#__PURE__*/jsxs(LookupContext.Provider, {
|
|
1428
|
+
value: heliumLookupData,
|
|
1429
|
+
children: [/*#__PURE__*/jsx(AppCard, {
|
|
1430
|
+
title: "Helium Graphs",
|
|
1431
|
+
size: 12,
|
|
1432
|
+
collapsed: collapsed,
|
|
1433
|
+
children: /*#__PURE__*/jsx(HeliumGraph, {
|
|
1434
|
+
graphData: graphData,
|
|
1435
|
+
graphDataMeta: graphDataMeta,
|
|
1436
|
+
matches: matches
|
|
1437
|
+
})
|
|
1438
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1439
|
+
sx: {
|
|
1440
|
+
display: "flex",
|
|
1441
|
+
flexFlow: "column wrap",
|
|
1442
|
+
maxHeight: maxHeight
|
|
1443
|
+
},
|
|
1444
|
+
children: [/*#__PURE__*/jsxs(AppCard, {
|
|
1445
|
+
title: "Helium Calculator",
|
|
1446
|
+
size: cardSize,
|
|
1447
|
+
collapsed: collapsed,
|
|
1448
|
+
children: [/*#__PURE__*/jsx(Grid, {
|
|
1449
|
+
children: /*#__PURE__*/jsxs(DivTitle, {
|
|
1450
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
1451
|
+
children: "Current levels"
|
|
1452
|
+
}), " ", /*#__PURE__*/jsxs("em", {
|
|
1453
|
+
children: ["(updated", " ", moment(heliumData.meta.date).fromNow(), /*#__PURE__*/jsx(EditAdmon, {
|
|
1454
|
+
levelsEdited: levelsEdited
|
|
1455
|
+
}), ")"]
|
|
1456
|
+
})]
|
|
1457
|
+
})
|
|
1458
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1459
|
+
children: /*#__PURE__*/jsx(HeliumTable, {
|
|
1460
|
+
heliumLookupData: heliumLookupData,
|
|
1461
|
+
heliumData: heliumData,
|
|
1462
|
+
SetHeliumData: SetHeliumData,
|
|
1463
|
+
SetLevelsEdited: SetLevelsEdited
|
|
1464
|
+
})
|
|
1465
|
+
})]
|
|
1466
|
+
}), /*#__PURE__*/jsx(AppCard, {
|
|
1467
|
+
title: "Spectrometer Set",
|
|
1468
|
+
size: cardSize,
|
|
1469
|
+
collapsed: collapsed,
|
|
1470
|
+
children: /*#__PURE__*/jsx(Grid, {
|
|
1471
|
+
children: /*#__PURE__*/jsx(PairWizard, {
|
|
1472
|
+
heliumData: heliumData
|
|
1473
|
+
})
|
|
1474
|
+
})
|
|
1475
|
+
}), /*#__PURE__*/jsx(AppCard, {
|
|
1476
|
+
title: "Estimated Consumption",
|
|
1477
|
+
size: cardSize,
|
|
1478
|
+
collapsed: collapsed,
|
|
1479
|
+
children: /*#__PURE__*/jsx(Grid, {
|
|
1480
|
+
children: /*#__PURE__*/jsx(EstimateConsumption, {})
|
|
1481
|
+
})
|
|
1482
|
+
}), /*#__PURE__*/jsx(AppCard, {
|
|
1483
|
+
title: "Helium Estimation",
|
|
1484
|
+
size: cardSize,
|
|
1485
|
+
children: /*#__PURE__*/jsx(HePrognosis, {
|
|
1486
|
+
heliumData: heliumData,
|
|
1487
|
+
heliumLookupData: heliumLookupData
|
|
1488
|
+
})
|
|
1489
|
+
}), /*#__PURE__*/jsx(AppCard, {
|
|
1490
|
+
title: "Fill Target",
|
|
1491
|
+
size: cardSize
|
|
1492
|
+
})]
|
|
1493
|
+
})]
|
|
1494
|
+
})
|
|
1495
|
+
});
|
|
1496
|
+
}
|
|
1497
|
+
|
|
1498
|
+
// Import and export all components
|
|
1499
|
+
|
|
1500
|
+
export { Helium as default };
|