@zac-apps/helium 2.0.0-beta.13 → 2.0.0-beta.14
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/dist/index.js +1900 -9
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -1,18 +1,1909 @@
|
|
|
1
1
|
import _defineProperty from '@babel/runtime/helpers/defineProperty';
|
|
2
2
|
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
|
|
3
|
-
import { useState, useEffect } from 'react';
|
|
3
|
+
import React, { createContext, useContext, useState, useEffect } from 'react';
|
|
4
4
|
import { useImmer } from 'use-immer';
|
|
5
5
|
import useMediaQuery from '@mui/material/useMediaQuery';
|
|
6
6
|
import Grid from '@mui/material/Grid';
|
|
7
|
-
import
|
|
8
|
-
import
|
|
9
|
-
import
|
|
10
|
-
import
|
|
11
|
-
import
|
|
12
|
-
import
|
|
13
|
-
import
|
|
14
|
-
import
|
|
7
|
+
import { AppTheme, AppTable, TableHeadCell, DivTitle, AppCard, ErrorAlert, Percentage, SpecSwitch, PublicFetch, Progress, AppGrid } from '@zac-apps/commons';
|
|
8
|
+
import moment from 'moment';
|
|
9
|
+
import Paper from '@mui/material/Paper';
|
|
10
|
+
import { LineChart, Line, CartesianGrid, XAxis, Label, YAxis, ReferenceLine, ReferenceArea, Tooltip } from 'recharts';
|
|
11
|
+
import ButtonGroup from '@mui/material/ButtonGroup';
|
|
12
|
+
import Button from '@mui/material/Button';
|
|
13
|
+
import FormGroup from '@mui/material/FormGroup';
|
|
14
|
+
import FormControlLabel from '@mui/material/FormControlLabel';
|
|
15
|
+
import Switch from '@mui/material/Switch';
|
|
16
|
+
import TableHead from '@mui/material/TableHead';
|
|
17
|
+
import TableCell from '@mui/material/TableCell';
|
|
18
|
+
import TableRow from '@mui/material/TableRow';
|
|
19
|
+
import TableBody from '@mui/material/TableBody';
|
|
15
20
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
21
|
+
import regression from 'regression';
|
|
22
|
+
import { mean, sqrt, sum } from 'mathjs';
|
|
23
|
+
import IconButton from '@mui/material/IconButton';
|
|
24
|
+
import SaveIcon from '@mui/icons-material/Save';
|
|
25
|
+
import EditIcon from '@mui/icons-material/Edit';
|
|
26
|
+
import TextField from '@mui/material/TextField';
|
|
27
|
+
import InputAdornment from '@mui/material/InputAdornment';
|
|
28
|
+
import moment$1 from 'moment/moment.js';
|
|
29
|
+
import Divider from '@mui/material/Divider';
|
|
30
|
+
import Typography from '@mui/material/Typography';
|
|
31
|
+
import FormControl from '@mui/material/FormControl';
|
|
32
|
+
import Checkbox from '@mui/material/Checkbox';
|
|
33
|
+
import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray';
|
|
34
|
+
import Chip from '@mui/material/Chip';
|
|
35
|
+
import AddBoxIcon from '@mui/icons-material/AddBox';
|
|
36
|
+
import DeleteIcon from '@mui/icons-material/Delete';
|
|
37
|
+
|
|
38
|
+
// Define context
|
|
39
|
+
|
|
40
|
+
var HeliumContext = /*#__PURE__*/createContext(null);
|
|
41
|
+
|
|
42
|
+
function ShowEstimate(_ref) {
|
|
43
|
+
var spec = _ref.spec,
|
|
44
|
+
estimatedBoiloff = _ref.estimatedBoiloff,
|
|
45
|
+
estimatedError = _ref.estimatedError;
|
|
46
|
+
var heliumLookupData = useContext(HeliumContext).heliumLookupData;
|
|
47
|
+
|
|
48
|
+
// Get stored data
|
|
49
|
+
|
|
50
|
+
var storedBoiloff = heliumLookupData.boilOff[spec].toFixed(3) || "N/A";
|
|
51
|
+
|
|
52
|
+
// Round values from props
|
|
53
|
+
|
|
54
|
+
estimatedBoiloff = estimatedBoiloff.toFixed(3) || "N/A";
|
|
55
|
+
estimatedError = estimatedError.toFixed(3) || "N/A";
|
|
56
|
+
|
|
57
|
+
// Warn if values differ
|
|
58
|
+
|
|
59
|
+
var renderEstimatedBoiloff = Math.abs(estimatedBoiloff - storedBoiloff) < 0.01 ? estimatedBoiloff : /*#__PURE__*/jsx("strong", {
|
|
60
|
+
style: {
|
|
61
|
+
color: AppTheme.palette.primary.main
|
|
62
|
+
},
|
|
63
|
+
children: estimatedBoiloff
|
|
64
|
+
});
|
|
65
|
+
return /*#__PURE__*/jsxs("div", {
|
|
66
|
+
children: [/*#__PURE__*/jsx("h4", {
|
|
67
|
+
children: "Boiloff coefficients (%/day)"
|
|
68
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
69
|
+
container: true,
|
|
70
|
+
children: /*#__PURE__*/jsxs(AppTable, {
|
|
71
|
+
children: [/*#__PURE__*/jsx(TableHead, {
|
|
72
|
+
children: /*#__PURE__*/jsxs(TableRow, {
|
|
73
|
+
children: [/*#__PURE__*/jsx(TableHeadCell, {
|
|
74
|
+
children: "Estimated"
|
|
75
|
+
}), /*#__PURE__*/jsx(TableHeadCell, {
|
|
76
|
+
children: "Stored"
|
|
77
|
+
})]
|
|
78
|
+
})
|
|
79
|
+
}), /*#__PURE__*/jsx(TableBody, {
|
|
80
|
+
children: /*#__PURE__*/jsxs(TableRow, {
|
|
81
|
+
children: [/*#__PURE__*/jsxs(TableCell, {
|
|
82
|
+
children: [renderEstimatedBoiloff, " ", /*#__PURE__*/jsxs("em", {
|
|
83
|
+
style: {
|
|
84
|
+
color: AppTheme.palette.secondary.main
|
|
85
|
+
},
|
|
86
|
+
children: ["(\xB1", estimatedError, ")"]
|
|
87
|
+
})]
|
|
88
|
+
}), /*#__PURE__*/jsx(TableCell, {
|
|
89
|
+
children: storedBoiloff
|
|
90
|
+
})]
|
|
91
|
+
})
|
|
92
|
+
})]
|
|
93
|
+
})
|
|
94
|
+
})]
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
function EstimateSlope(_ref) {
|
|
99
|
+
var data = _ref.data;
|
|
100
|
+
_ref.spec;
|
|
101
|
+
// define slope and intercept
|
|
102
|
+
|
|
103
|
+
var slope = 0;
|
|
104
|
+
var intercept = 0;
|
|
105
|
+
|
|
106
|
+
// Define firstMax and firstMaxIndex
|
|
107
|
+
|
|
108
|
+
var firstMax = Number(data[data.length - 1].level);
|
|
109
|
+
var firstMaxIndex = data.length - 1;
|
|
110
|
+
|
|
111
|
+
// Check if the last time when the spectrometer was filled is more than 45 days ago
|
|
112
|
+
|
|
113
|
+
var lastMaxIndex = data.length - 1;
|
|
114
|
+
var lastMax = Number(data[lastMaxIndex].level);
|
|
115
|
+
for (var i = data.length - 2; i >= 0; i--) {
|
|
116
|
+
var level = Number(data[i].level);
|
|
117
|
+
if (level > firstMax) {
|
|
118
|
+
lastMax = level;
|
|
119
|
+
lastMaxIndex = i;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
// stop if level decreases from maximum
|
|
123
|
+
|
|
124
|
+
if (level < lastMax) {
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// if the last maximum is less than 45 days ago, use the last maximum as the first maximum
|
|
130
|
+
// otherwise, the initial firstMaxIndex is the last maximum index
|
|
131
|
+
|
|
132
|
+
if (lastMaxIndex >= data.length - 45) {
|
|
133
|
+
firstMaxIndex = lastMaxIndex - 1;
|
|
134
|
+
firstMax = Number(data[firstMaxIndex].level);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
// minimum level is the level at firstMaxIndex
|
|
138
|
+
|
|
139
|
+
var minLevelIndex = firstMaxIndex - 1;
|
|
140
|
+
|
|
141
|
+
// find previous time when spectrometer was filled - for this start from lastMinimumIndex and go back until a maximum is found or until level reaches 90%
|
|
142
|
+
|
|
143
|
+
var maxLevel = Number(data[minLevelIndex].level);
|
|
144
|
+
var maxLevelIndex = minLevelIndex;
|
|
145
|
+
for (var _i = minLevelIndex - 1; _i >= 0; _i--) {
|
|
146
|
+
var _level = Number(data[_i].level);
|
|
147
|
+
if (_level > maxLevel) {
|
|
148
|
+
maxLevel = _level;
|
|
149
|
+
maxLevelIndex = _i;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
// stop if level is decreases from maximum or if level is above 90%
|
|
153
|
+
|
|
154
|
+
if (_level < maxLevel - 1 || _level >= 90) {
|
|
155
|
+
break;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Create an array of points between maximum and minimum in the form [[x1, y1], [x2, y2], ...]
|
|
160
|
+
|
|
161
|
+
var points = [];
|
|
162
|
+
for (var _i2 = maxLevelIndex; _i2 <= minLevelIndex; _i2++) {
|
|
163
|
+
points.push([_i2, Number(data[_i2].level)]);
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Perform linear regression on the points
|
|
167
|
+
|
|
168
|
+
var result = regression.linear(points, {
|
|
169
|
+
precision: 6
|
|
170
|
+
});
|
|
171
|
+
slope = result.equation[0];
|
|
172
|
+
intercept = result.equation[1];
|
|
173
|
+
|
|
174
|
+
// Determine slope uncertainty based on regression result
|
|
175
|
+
// For that, create an array of control values
|
|
176
|
+
var control = [];
|
|
177
|
+
for (var _i3 = maxLevelIndex; _i3 <= minLevelIndex; _i3++) {
|
|
178
|
+
control.push([_i3, _i3 * slope + intercept]);
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
// Calculate mean x value
|
|
182
|
+
|
|
183
|
+
var meanX = mean(points.map(function (point) {
|
|
184
|
+
return point[0];
|
|
185
|
+
}));
|
|
186
|
+
|
|
187
|
+
// Calculate standard slope error
|
|
188
|
+
|
|
189
|
+
var slopeError = sqrt(1 / (control.length - 2) * sum(points.map(function (point, i) {
|
|
190
|
+
return Math.pow(point[1] - control[i][1], 2);
|
|
191
|
+
})) / sum(points.map(function (point, i) {
|
|
192
|
+
return Math.pow(point[0] - meanX, 2);
|
|
193
|
+
})));
|
|
194
|
+
return {
|
|
195
|
+
slope: slope,
|
|
196
|
+
intercept: intercept,
|
|
197
|
+
slopeError: slopeError
|
|
198
|
+
};
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
function ownKeys$4(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; }
|
|
202
|
+
function _objectSpread$4(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys$4(Object(t), true).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys$4(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
|
|
203
|
+
function RenderGraph(_ref) {
|
|
204
|
+
var data = _ref.data,
|
|
205
|
+
height = _ref.height,
|
|
206
|
+
width = _ref.width,
|
|
207
|
+
spec = _ref.spec;
|
|
208
|
+
// Import Context
|
|
209
|
+
|
|
210
|
+
var heliumLookupData = useContext(HeliumContext).heliumLookupData;
|
|
211
|
+
|
|
212
|
+
// Get estimated data
|
|
213
|
+
|
|
214
|
+
var estimateResult = EstimateSlope(_objectSpread$4({}, {
|
|
215
|
+
data: data,
|
|
216
|
+
spec: spec
|
|
217
|
+
}));
|
|
218
|
+
var estimatedBoiloff = estimateResult.slope;
|
|
219
|
+
var estimatedIntercept = estimateResult.intercept;
|
|
220
|
+
var estimatedError = estimateResult.slopeError;
|
|
221
|
+
|
|
222
|
+
// Custom Tooltip for LineChart
|
|
223
|
+
|
|
224
|
+
var CustomTooltip = function CustomTooltip(_ref2) {
|
|
225
|
+
var active = _ref2.active,
|
|
226
|
+
payload = _ref2.payload,
|
|
227
|
+
label = _ref2.label;
|
|
228
|
+
if (active && payload && payload.length) {
|
|
229
|
+
var date = moment(payload[0].payload.date, "ddd MMM D HH:mm:ss YYYY").format("LL");
|
|
230
|
+
return /*#__PURE__*/jsxs("div", {
|
|
231
|
+
style: {
|
|
232
|
+
border: "solid 1px " + AppTheme.palette.secondary.main,
|
|
233
|
+
padding: "0.75em",
|
|
234
|
+
backgroundColor: "#ffffffaa"
|
|
235
|
+
},
|
|
236
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
237
|
+
children: date
|
|
238
|
+
}), /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsxs("em", {
|
|
239
|
+
children: ["(", label, " days ago)"]
|
|
240
|
+
}), /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsxs("strong", {
|
|
241
|
+
style: {
|
|
242
|
+
color: AppTheme.palette.primary.main
|
|
243
|
+
},
|
|
244
|
+
children: [payload[0].value, " %"]
|
|
245
|
+
})]
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
|
|
250
|
+
// Button for days state change
|
|
251
|
+
|
|
252
|
+
function DayButton(_ref3) {
|
|
253
|
+
var value = _ref3.value;
|
|
254
|
+
return /*#__PURE__*/jsx(Button, {
|
|
255
|
+
onClick: function onClick() {
|
|
256
|
+
return SetDays(value);
|
|
257
|
+
},
|
|
258
|
+
color: value === days ? "primary" : "secondary" // Active button style
|
|
259
|
+
,
|
|
260
|
+
variant: value === days ? "contained" : "outlined" // Active button style
|
|
261
|
+
,
|
|
262
|
+
size: "small",
|
|
263
|
+
children: value
|
|
264
|
+
});
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
// State
|
|
268
|
+
|
|
269
|
+
var _useState = useState(90),
|
|
270
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
271
|
+
days = _useState2[0],
|
|
272
|
+
SetDays = _useState2[1];
|
|
273
|
+
var _useState3 = useState(true),
|
|
274
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
275
|
+
showMinima = _useState4[0],
|
|
276
|
+
setShowMinima = _useState4[1];
|
|
277
|
+
var _useState5 = useState(false),
|
|
278
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
279
|
+
showEstimate = _useState6[0],
|
|
280
|
+
setShowEstimate = _useState6[1];
|
|
281
|
+
|
|
282
|
+
// Add days ago to data (do not mutate props — create a new array)
|
|
283
|
+
var dataWithDays = (data || []).map(function (item) {
|
|
284
|
+
return _objectSpread$4(_objectSpread$4({}, item), {}, {
|
|
285
|
+
days: -moment(item.date, "ddd MMM D HH:mm:ss YYYY").diff(moment(), "days")
|
|
286
|
+
});
|
|
287
|
+
});
|
|
288
|
+
|
|
289
|
+
// Get chart data from estimate
|
|
290
|
+
|
|
291
|
+
// First, get difference between today and last data point
|
|
292
|
+
|
|
293
|
+
// Guard against empty data
|
|
294
|
+
var daysSinceUpate = 0;
|
|
295
|
+
if (dataWithDays.length > 0) {
|
|
296
|
+
daysSinceUpate = moment().diff(moment(dataWithDays[dataWithDays.length - 1].date, "ddd MMM D HH:mm:ss YYYY"), "days");
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
// Then calculate estimated data points
|
|
300
|
+
|
|
301
|
+
// Build final dataset (with optional estimate) without mutating original
|
|
302
|
+
var dataWithEstimate = showEstimate ? dataWithDays.map(function (item) {
|
|
303
|
+
var itemDays = item.days;
|
|
304
|
+
var level = item.level;
|
|
305
|
+
var estimate = estimatedBoiloff * (dataWithDays.length - itemDays + daysSinceUpate) + estimatedIntercept;
|
|
306
|
+
return {
|
|
307
|
+
date: item.date,
|
|
308
|
+
days: itemDays,
|
|
309
|
+
level: level,
|
|
310
|
+
estimate: estimate
|
|
311
|
+
};
|
|
312
|
+
}) : dataWithDays;
|
|
313
|
+
|
|
314
|
+
// Get last n elements of array
|
|
315
|
+
|
|
316
|
+
var slicedData = dataWithEstimate.slice(Math.max(dataWithEstimate.length - days, 0));
|
|
317
|
+
|
|
318
|
+
// Improve visibility of estimate
|
|
319
|
+
|
|
320
|
+
var lineColor = showEstimate ? AppTheme.palette.grey[300] : AppTheme.palette.primary.main;
|
|
321
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
322
|
+
children: [/*#__PURE__*/jsxs(LineChart, {
|
|
323
|
+
height: height,
|
|
324
|
+
width: width,
|
|
325
|
+
data: slicedData,
|
|
326
|
+
margin: {
|
|
327
|
+
top: 5,
|
|
328
|
+
right: 20,
|
|
329
|
+
bottom: 25,
|
|
330
|
+
left: 0
|
|
331
|
+
},
|
|
332
|
+
children: [/*#__PURE__*/jsx(Line, {
|
|
333
|
+
dataKey: "level",
|
|
334
|
+
stroke: lineColor,
|
|
335
|
+
fill: lineColor,
|
|
336
|
+
type: "linear",
|
|
337
|
+
dot: {
|
|
338
|
+
r: 1.5
|
|
339
|
+
}
|
|
340
|
+
}), showEstimate ? /*#__PURE__*/jsx(Line, {
|
|
341
|
+
dataKey: "estimate",
|
|
342
|
+
stroke: AppTheme.palette.action.main,
|
|
343
|
+
type: "monotone",
|
|
344
|
+
strokeDasharray: "5 5",
|
|
345
|
+
strokeWidth: 2,
|
|
346
|
+
dot: false
|
|
347
|
+
}) : null, /*#__PURE__*/jsx(CartesianGrid, {
|
|
348
|
+
stroke: AppTheme.palette.divider,
|
|
349
|
+
strokeDasharray: "5 5"
|
|
350
|
+
}), /*#__PURE__*/jsx(XAxis, {
|
|
351
|
+
dataKey: "days",
|
|
352
|
+
interval: days < 15 ? 1 : Math.round(days / 3),
|
|
353
|
+
children: /*#__PURE__*/jsx(Label, {
|
|
354
|
+
value: "Days ago",
|
|
355
|
+
offset: 1,
|
|
356
|
+
position: "bottom"
|
|
357
|
+
})
|
|
358
|
+
}), /*#__PURE__*/jsx(YAxis, {
|
|
359
|
+
dataKey: "level",
|
|
360
|
+
unit: "%",
|
|
361
|
+
type: "number",
|
|
362
|
+
domain: [0, 100]
|
|
363
|
+
}), showMinima ? /*#__PURE__*/jsxs(React.Fragment, {
|
|
364
|
+
children: [/*#__PURE__*/jsx(ReferenceLine, {
|
|
365
|
+
y: heliumLookupData.minima[spec],
|
|
366
|
+
stroke: AppTheme.palette.secondary.main,
|
|
367
|
+
strokeDasharray: (3)
|
|
368
|
+
}), /*#__PURE__*/jsx(ReferenceArea, {
|
|
369
|
+
y1: heliumLookupData.minima[spec],
|
|
370
|
+
y2: 0,
|
|
371
|
+
stroke: "none",
|
|
372
|
+
stro: true,
|
|
373
|
+
fill: AppTheme.palette.secondary.main,
|
|
374
|
+
fillOpacity: 0.1
|
|
375
|
+
})]
|
|
376
|
+
}) : null, /*#__PURE__*/jsx(Tooltip, {
|
|
377
|
+
content: /*#__PURE__*/jsx(CustomTooltip, {})
|
|
378
|
+
})]
|
|
379
|
+
}), /*#__PURE__*/jsxs(ButtonGroup, {
|
|
380
|
+
disableElevation: true,
|
|
381
|
+
variant: "outlined",
|
|
382
|
+
fullWidth: true,
|
|
383
|
+
color: "secondary",
|
|
384
|
+
"aria-label": "contained primary button group",
|
|
385
|
+
sx: {
|
|
386
|
+
justifySelf: "center",
|
|
387
|
+
px: 5
|
|
388
|
+
},
|
|
389
|
+
size: "small",
|
|
390
|
+
children: [/*#__PURE__*/jsx(DayButton, {
|
|
391
|
+
value: 7
|
|
392
|
+
}), /*#__PURE__*/jsx(DayButton, {
|
|
393
|
+
value: 30
|
|
394
|
+
}), /*#__PURE__*/jsx(DayButton, {
|
|
395
|
+
value: 90
|
|
396
|
+
}), /*#__PURE__*/jsx(DayButton, {
|
|
397
|
+
value: 180
|
|
398
|
+
}), /*#__PURE__*/jsx(DayButton, {
|
|
399
|
+
value: 365
|
|
400
|
+
})]
|
|
401
|
+
}), /*#__PURE__*/jsxs(FormGroup, {
|
|
402
|
+
children: [/*#__PURE__*/jsx(FormControlLabel, {
|
|
403
|
+
control: /*#__PURE__*/jsx(Switch, {
|
|
404
|
+
label: "Show Minimum",
|
|
405
|
+
checked: showMinima,
|
|
406
|
+
onChange: function onChange() {
|
|
407
|
+
return setShowMinima(!showMinima);
|
|
408
|
+
}
|
|
409
|
+
}),
|
|
410
|
+
label: "Show Minimum",
|
|
411
|
+
sx: {
|
|
412
|
+
justifyContent: "center"
|
|
413
|
+
}
|
|
414
|
+
}), /*#__PURE__*/jsx(FormControlLabel, {
|
|
415
|
+
control: /*#__PURE__*/jsx(Switch, {
|
|
416
|
+
label: "Show Estimate",
|
|
417
|
+
checked: showEstimate,
|
|
418
|
+
onChange: function onChange() {
|
|
419
|
+
return setShowEstimate(!showEstimate);
|
|
420
|
+
}
|
|
421
|
+
}),
|
|
422
|
+
label: "Show Estimate",
|
|
423
|
+
sx: {
|
|
424
|
+
justifyContent: "center"
|
|
425
|
+
}
|
|
426
|
+
})]
|
|
427
|
+
}), /*#__PURE__*/jsx(ShowEstimate, {
|
|
428
|
+
spec: spec,
|
|
429
|
+
estimatedBoiloff: estimatedBoiloff,
|
|
430
|
+
estimatedError: estimatedError
|
|
431
|
+
})]
|
|
432
|
+
});
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
function HeliumGraph(_ref) {
|
|
436
|
+
var graphData = _ref.graphData,
|
|
437
|
+
graphDataMeta = _ref.graphDataMeta,
|
|
438
|
+
matches = _ref.matches;
|
|
439
|
+
var height = matches ? 250 : 200;
|
|
440
|
+
var width = matches ? 300 : 280;
|
|
441
|
+
var heliumLookupData = useContext(HeliumContext).heliumLookupData;
|
|
442
|
+
|
|
443
|
+
// remove spectrometers not existing in heliumLookupData
|
|
444
|
+
|
|
445
|
+
Object.keys(graphData).forEach(function (spec) {
|
|
446
|
+
if (!heliumLookupData.boilOff[spec]) {
|
|
447
|
+
delete graphData[spec];
|
|
448
|
+
}
|
|
449
|
+
});
|
|
450
|
+
|
|
451
|
+
// Catch missing data
|
|
452
|
+
|
|
453
|
+
if (graphData.error) {
|
|
454
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
455
|
+
children: [/*#__PURE__*/jsx(DivTitle, {
|
|
456
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
457
|
+
children: "Helium level monitoring"
|
|
458
|
+
})
|
|
459
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
460
|
+
sx: {
|
|
461
|
+
display: "flex",
|
|
462
|
+
justifyContent: "center"
|
|
463
|
+
},
|
|
464
|
+
children: /*#__PURE__*/jsx("em", {
|
|
465
|
+
children: "No graph data available"
|
|
466
|
+
})
|
|
467
|
+
})]
|
|
468
|
+
});
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// Render component
|
|
472
|
+
|
|
473
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
474
|
+
children: [/*#__PURE__*/jsxs(DivTitle, {
|
|
475
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
476
|
+
children: "Helium level monitoring"
|
|
477
|
+
}), " ", /*#__PURE__*/jsxs("em", {
|
|
478
|
+
children: ["(updated ", moment(graphDataMeta.date).fromNow(), ")"]
|
|
479
|
+
})]
|
|
480
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
481
|
+
container: true,
|
|
482
|
+
sx: {
|
|
483
|
+
display: "flex",
|
|
484
|
+
justifyContent: "center"
|
|
485
|
+
},
|
|
486
|
+
children: Object.keys(graphData).map(function (spec) {
|
|
487
|
+
return /*#__PURE__*/jsxs(Paper, {
|
|
488
|
+
sx: {
|
|
489
|
+
display: "flex",
|
|
490
|
+
flexDirection: "column",
|
|
491
|
+
justifyItems: "center",
|
|
492
|
+
stroke: AppTheme.palette.divider,
|
|
493
|
+
px: 2,
|
|
494
|
+
paddingBottom: 2,
|
|
495
|
+
margin: 2
|
|
496
|
+
},
|
|
497
|
+
children: [/*#__PURE__*/jsx("h4", {
|
|
498
|
+
children: spec
|
|
499
|
+
}), /*#__PURE__*/jsx(RenderGraph, {
|
|
500
|
+
data: graphData[spec],
|
|
501
|
+
height: height,
|
|
502
|
+
width: width,
|
|
503
|
+
spec: spec
|
|
504
|
+
})]
|
|
505
|
+
}, "graph_" + spec);
|
|
506
|
+
})
|
|
507
|
+
})]
|
|
508
|
+
});
|
|
509
|
+
}
|
|
510
|
+
|
|
511
|
+
function GraphsPanel(_ref) {
|
|
512
|
+
var graphData = _ref.graphData,
|
|
513
|
+
graphDataMeta = _ref.graphDataMeta;
|
|
514
|
+
var context = useContext(HeliumContext);
|
|
515
|
+
var collapsed = context.collapsed;
|
|
516
|
+
var matches = context.matches;
|
|
517
|
+
return /*#__PURE__*/jsx(AppCard, {
|
|
518
|
+
title: "Helium Graphs",
|
|
519
|
+
size: 12,
|
|
520
|
+
collapsed: collapsed,
|
|
521
|
+
children: /*#__PURE__*/jsx(HeliumGraph, {
|
|
522
|
+
graphData: graphData,
|
|
523
|
+
graphDataMeta: graphDataMeta,
|
|
524
|
+
matches: matches
|
|
525
|
+
})
|
|
526
|
+
});
|
|
527
|
+
}
|
|
528
|
+
|
|
529
|
+
function NumField(_ref) {
|
|
530
|
+
var input = _ref.input,
|
|
531
|
+
SetInput = _ref.SetInput,
|
|
532
|
+
error = _ref.error,
|
|
533
|
+
SetError = _ref.SetError,
|
|
534
|
+
minValue = _ref.minValue,
|
|
535
|
+
maxValue = _ref.maxValue,
|
|
536
|
+
adornment = _ref.adornment,
|
|
537
|
+
size = _ref.size;
|
|
538
|
+
var _useState = useState(""),
|
|
539
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
540
|
+
errorMessage = _useState2[0],
|
|
541
|
+
SetErrorMessage = _useState2[1];
|
|
542
|
+
var _useState3 = useState(false),
|
|
543
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
544
|
+
alert = _useState4[0],
|
|
545
|
+
SetAlert = _useState4[1];
|
|
546
|
+
var sx = {};
|
|
547
|
+
if (size === "small") {
|
|
548
|
+
sx = {
|
|
549
|
+
maxWidth: 75
|
|
550
|
+
};
|
|
551
|
+
}
|
|
552
|
+
function handleEntry(e) {
|
|
553
|
+
var errorFound = false;
|
|
554
|
+
var inputVal = e.target.value;
|
|
555
|
+
if (!inputVal.match(/[0-9-]*/)[0] || inputVal.match(/[0-9-]*/)[0] !== inputVal) {
|
|
556
|
+
errorFound = true;
|
|
557
|
+
SetErrorMessage("Input is not numerical.");
|
|
558
|
+
}
|
|
559
|
+
if (inputVal > maxValue || inputVal < minValue) {
|
|
560
|
+
errorFound = true;
|
|
561
|
+
SetErrorMessage("Input is outside allowed boundaries.");
|
|
562
|
+
}
|
|
563
|
+
SetInput(inputVal);
|
|
564
|
+
SetError(errorFound);
|
|
565
|
+
SetAlert(errorFound);
|
|
566
|
+
}
|
|
567
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
568
|
+
children: [/*#__PURE__*/jsx(TextField, {
|
|
569
|
+
size: "small",
|
|
570
|
+
sx: sx,
|
|
571
|
+
onChange: function onChange(e) {
|
|
572
|
+
return handleEntry(e);
|
|
573
|
+
},
|
|
574
|
+
value: input,
|
|
575
|
+
error: error,
|
|
576
|
+
inputProps: {
|
|
577
|
+
inputMode: "numeric"
|
|
578
|
+
},
|
|
579
|
+
InputProps: {
|
|
580
|
+
endAdornment: /*#__PURE__*/jsx(InputAdornment, {
|
|
581
|
+
position: "end",
|
|
582
|
+
children: adornment
|
|
583
|
+
})
|
|
584
|
+
}
|
|
585
|
+
}), /*#__PURE__*/jsx(ErrorAlert, {
|
|
586
|
+
alert: alert,
|
|
587
|
+
SetAlert: SetAlert,
|
|
588
|
+
message: errorMessage
|
|
589
|
+
})]
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
|
|
593
|
+
// Look up amount in liters for specific spectrometer
|
|
594
|
+
|
|
595
|
+
function CalcLiters(_ref) {
|
|
596
|
+
var spec = _ref.spec,
|
|
597
|
+
value = _ref.value;
|
|
598
|
+
var heliumLookup = useContext(HeliumContext).heliumLookupData.lookup;
|
|
599
|
+
|
|
600
|
+
// Catch negative values
|
|
601
|
+
|
|
602
|
+
if (value < 0 || !value) {
|
|
603
|
+
value = 0;
|
|
604
|
+
} else {
|
|
605
|
+
value = Number(value);
|
|
606
|
+
}
|
|
607
|
+
var returnVal = heliumLookup[spec].find(function (m) {
|
|
608
|
+
return m.level === value;
|
|
609
|
+
}).liters;
|
|
610
|
+
return returnVal;
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
// Look up percentage for liter value in specific spectrometer
|
|
614
|
+
|
|
615
|
+
function CalcPercent(_ref2) {
|
|
616
|
+
var spec = _ref2.spec,
|
|
617
|
+
value = _ref2.value;
|
|
618
|
+
var heliumLookup = useContext(HeliumContext).heliumLookupData.lookup;
|
|
619
|
+
var returnVal = 0;
|
|
620
|
+
|
|
621
|
+
// Catch values out of boundary
|
|
622
|
+
|
|
623
|
+
if (value < 0 || !value) {
|
|
624
|
+
value = 0;
|
|
625
|
+
} else {
|
|
626
|
+
value = Number(value);
|
|
627
|
+
}
|
|
628
|
+
if (value > heliumLookup[spec].find(function (m) {
|
|
629
|
+
return m.level === 100;
|
|
630
|
+
}).liters) {
|
|
631
|
+
returnVal = 100;
|
|
632
|
+
} else {
|
|
633
|
+
var closestLiters = heliumLookup[spec].reduce(function (prev, curr) {
|
|
634
|
+
return Math.abs(curr.liters - value) < Math.abs(prev.liters - value) ? curr : prev;
|
|
635
|
+
}).liters;
|
|
636
|
+
returnVal = heliumLookup[spec].find(function (m) {
|
|
637
|
+
return m.liters === closestLiters;
|
|
638
|
+
}).level;
|
|
639
|
+
}
|
|
640
|
+
return returnVal;
|
|
641
|
+
}
|
|
642
|
+
|
|
643
|
+
// Look up difference from maximum
|
|
644
|
+
|
|
645
|
+
function CalcToMax(_ref3) {
|
|
646
|
+
var spec = _ref3.spec,
|
|
647
|
+
value = _ref3.value;
|
|
648
|
+
var heliumLookup = useContext(HeliumContext).heliumLookupData.lookup;
|
|
649
|
+
|
|
650
|
+
// Catch negative values
|
|
651
|
+
|
|
652
|
+
value = Number(value) || 0;
|
|
653
|
+
if (value < 0 || !value) {
|
|
654
|
+
value = 0;
|
|
655
|
+
}
|
|
656
|
+
var maxLiters = Math.max.apply(null, heliumLookup[spec].map(function (m) {
|
|
657
|
+
return m.liters;
|
|
658
|
+
}));
|
|
659
|
+
var returnVal = maxLiters - heliumLookup[spec].find(function (m) {
|
|
660
|
+
return m.level === value;
|
|
661
|
+
}).liters;
|
|
662
|
+
returnVal = Math.round(returnVal * 10) / 10;
|
|
663
|
+
return returnVal;
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
function HeliumEntry(_ref) {
|
|
667
|
+
var spec = _ref.spec;
|
|
668
|
+
var context = useContext(HeliumContext);
|
|
669
|
+
var heliumLookup = context.heliumLookupData.lookup;
|
|
670
|
+
var heliumData = context.heliumData;
|
|
671
|
+
var SetHeliumData = context.SetHeliumData;
|
|
672
|
+
var SetLevelsEdited = context.SetLevelsEdited;
|
|
673
|
+
var value = Number(heliumData.helium[spec]) || 0;
|
|
674
|
+
var maxValue = Math.max.apply(null, heliumLookup[spec].map(function (m) {
|
|
675
|
+
return m.level;
|
|
676
|
+
}));
|
|
677
|
+
var minValue = 0;
|
|
678
|
+
var _useState = useState(false),
|
|
679
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
680
|
+
edit = _useState2[0],
|
|
681
|
+
SetEdit = _useState2[1];
|
|
682
|
+
var _useState3 = useState(value),
|
|
683
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
684
|
+
input = _useState4[0],
|
|
685
|
+
SetInput = _useState4[1];
|
|
686
|
+
var _useState5 = useState(false),
|
|
687
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
688
|
+
error = _useState6[0],
|
|
689
|
+
SetError = _useState6[1];
|
|
690
|
+
if (edit) {
|
|
691
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
692
|
+
children: [/*#__PURE__*/jsx(NumField, {
|
|
693
|
+
input: input,
|
|
694
|
+
SetInput: SetInput,
|
|
695
|
+
error: error,
|
|
696
|
+
SetError: SetError,
|
|
697
|
+
minValue: minValue,
|
|
698
|
+
maxValue: maxValue,
|
|
699
|
+
adornment: "%",
|
|
700
|
+
size: "small"
|
|
701
|
+
}), /*#__PURE__*/jsx(IconButton, {
|
|
702
|
+
disabled: error,
|
|
703
|
+
onClick: function onClick() {
|
|
704
|
+
SetHeliumData(function (heliumData) {
|
|
705
|
+
heliumData.helium[spec] = Number(input);
|
|
706
|
+
});
|
|
707
|
+
SetEdit(!edit);
|
|
708
|
+
SetLevelsEdited(true);
|
|
709
|
+
},
|
|
710
|
+
children: /*#__PURE__*/jsx(SaveIcon, {})
|
|
711
|
+
})]
|
|
712
|
+
});
|
|
713
|
+
} else {
|
|
714
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
715
|
+
children: [Percentage(value, true), /*#__PURE__*/jsx(IconButton, {
|
|
716
|
+
size: "small",
|
|
717
|
+
onClick: function onClick() {
|
|
718
|
+
return SetEdit(!edit);
|
|
719
|
+
},
|
|
720
|
+
children: /*#__PURE__*/jsx(EditIcon, {})
|
|
721
|
+
})]
|
|
722
|
+
});
|
|
723
|
+
}
|
|
724
|
+
}
|
|
725
|
+
|
|
726
|
+
// render Helium level table
|
|
727
|
+
|
|
728
|
+
function HeliumTable() {
|
|
729
|
+
var context = useContext(HeliumContext);
|
|
730
|
+
var heliumData = context.heliumData;
|
|
731
|
+
context.SetHeliumData;
|
|
732
|
+
context.SetLevelsEdited;
|
|
733
|
+
|
|
734
|
+
// Catch if no data present
|
|
735
|
+
|
|
736
|
+
if (heliumData.helium.length === 0) {
|
|
737
|
+
return /*#__PURE__*/jsx(Grid, {
|
|
738
|
+
children: /*#__PURE__*/jsx("em", {
|
|
739
|
+
children: "No Helium data found."
|
|
740
|
+
})
|
|
741
|
+
});
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
// Calculate sum of missing helium
|
|
745
|
+
|
|
746
|
+
var totalToMax = Object.keys(heliumData.helium).reduce(function (total, current) {
|
|
747
|
+
return total + CalcToMax({
|
|
748
|
+
spec: current,
|
|
749
|
+
value: heliumData.helium[current]
|
|
750
|
+
});
|
|
751
|
+
}, 0);
|
|
752
|
+
totalToMax = Math.round(totalToMax * 10) / 10;
|
|
753
|
+
return /*#__PURE__*/jsxs(AppTable, {
|
|
754
|
+
children: [/*#__PURE__*/jsx(TableHead, {
|
|
755
|
+
children: /*#__PURE__*/jsxs(TableRow, {
|
|
756
|
+
children: [/*#__PURE__*/jsx(TableHeadCell, {
|
|
757
|
+
children: "Spectrometer"
|
|
758
|
+
}), /*#__PURE__*/jsxs(TableHeadCell, {
|
|
759
|
+
children: ["Helium level", /*#__PURE__*/jsx("br", {}), "[%]"]
|
|
760
|
+
}), /*#__PURE__*/jsxs(TableHeadCell, {
|
|
761
|
+
children: ["Helium level", /*#__PURE__*/jsx("br", {}), "[liters]"]
|
|
762
|
+
}), /*#__PURE__*/jsxs(TableHeadCell, {
|
|
763
|
+
children: ["Diff. to maximum", /*#__PURE__*/jsx("br", {}), "[liters]"]
|
|
764
|
+
})]
|
|
765
|
+
})
|
|
766
|
+
}), /*#__PURE__*/jsx(TableBody, {
|
|
767
|
+
children: Object.keys(heliumData.helium).map(function (m) {
|
|
768
|
+
return /*#__PURE__*/jsxs(TableRow, {
|
|
769
|
+
children: [/*#__PURE__*/jsx(TableCell, {
|
|
770
|
+
children: m
|
|
771
|
+
}), /*#__PURE__*/jsx(HeliumEntry, {
|
|
772
|
+
spec: m
|
|
773
|
+
}), /*#__PURE__*/jsx(TableCell, {
|
|
774
|
+
children: /*#__PURE__*/jsx(CalcLiters, {
|
|
775
|
+
spec: m,
|
|
776
|
+
value: heliumData.helium[m]
|
|
777
|
+
})
|
|
778
|
+
}), /*#__PURE__*/jsx(TableCell, {
|
|
779
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
780
|
+
children: /*#__PURE__*/jsx(CalcToMax, {
|
|
781
|
+
spec: m,
|
|
782
|
+
value: heliumData.helium[m]
|
|
783
|
+
})
|
|
784
|
+
})
|
|
785
|
+
})]
|
|
786
|
+
}, m + "_entry");
|
|
787
|
+
})
|
|
788
|
+
}), /*#__PURE__*/jsx("tfoot", {
|
|
789
|
+
children: /*#__PURE__*/jsxs(TableRow, {
|
|
790
|
+
children: [/*#__PURE__*/jsx(TableCell, {
|
|
791
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
792
|
+
children: "Sum"
|
|
793
|
+
})
|
|
794
|
+
}), /*#__PURE__*/jsx(TableCell, {}), /*#__PURE__*/jsx(TableCell, {}), /*#__PURE__*/jsx(TableCell, {
|
|
795
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
796
|
+
children: totalToMax
|
|
797
|
+
})
|
|
798
|
+
})]
|
|
799
|
+
})
|
|
800
|
+
})]
|
|
801
|
+
});
|
|
802
|
+
}
|
|
803
|
+
|
|
804
|
+
function EditAdmon() {
|
|
805
|
+
var context = useContext(HeliumContext);
|
|
806
|
+
if (context.levelsEdited) {
|
|
807
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
808
|
+
children: [", ", /*#__PURE__*/jsx("strong", {
|
|
809
|
+
children: "edited"
|
|
810
|
+
})]
|
|
811
|
+
});
|
|
812
|
+
} else {
|
|
813
|
+
return null;
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
|
|
817
|
+
function CalculatorPanel() {
|
|
818
|
+
var context = useContext(HeliumContext);
|
|
819
|
+
var heliumData = context.heliumData;
|
|
820
|
+
context.levelsEdited;
|
|
821
|
+
return /*#__PURE__*/jsxs(AppCard, {
|
|
822
|
+
title: "Helium Calculator",
|
|
823
|
+
size: context.cardSize,
|
|
824
|
+
collapsed: context.collapsed,
|
|
825
|
+
sx: {
|
|
826
|
+
mb: context.bottomMargin
|
|
827
|
+
},
|
|
828
|
+
children: [/*#__PURE__*/jsx(Grid, {
|
|
829
|
+
children: /*#__PURE__*/jsxs(DivTitle, {
|
|
830
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
831
|
+
children: "Current levels"
|
|
832
|
+
}), " ", /*#__PURE__*/jsxs("em", {
|
|
833
|
+
children: [heliumData.meta.date || heliumData.meta.date !== 0 ? "(updated " + moment(heliumData.meta.date).fromNow() + ")" : "(manual)", /*#__PURE__*/jsx(EditAdmon, {})]
|
|
834
|
+
})]
|
|
835
|
+
})
|
|
836
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
837
|
+
children: /*#__PURE__*/jsx(HeliumTable, {})
|
|
838
|
+
})]
|
|
839
|
+
});
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
function LiterInput(_ref) {
|
|
843
|
+
var limit = _ref.limit,
|
|
844
|
+
SetLimit = _ref.SetLimit,
|
|
845
|
+
error = _ref.error,
|
|
846
|
+
SetError = _ref.SetError;
|
|
847
|
+
var _useState = useState(limit),
|
|
848
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
849
|
+
input = _useState2[0],
|
|
850
|
+
SetInput = _useState2[1];
|
|
851
|
+
var _useState3 = useState(false),
|
|
852
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
853
|
+
edit = _useState4[0],
|
|
854
|
+
SetEdit = _useState4[1];
|
|
855
|
+
if (edit) {
|
|
856
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
857
|
+
children: [/*#__PURE__*/jsx(NumField, {
|
|
858
|
+
input: input,
|
|
859
|
+
SetInput: SetInput,
|
|
860
|
+
error: error,
|
|
861
|
+
SetError: SetError,
|
|
862
|
+
size: "medium",
|
|
863
|
+
adornment: "L"
|
|
864
|
+
}), " ", /*#__PURE__*/jsx(IconButton, {
|
|
865
|
+
disabled: error,
|
|
866
|
+
size: "small",
|
|
867
|
+
onClick: function onClick() {
|
|
868
|
+
SetEdit(!edit);
|
|
869
|
+
SetLimit(Number(input));
|
|
870
|
+
},
|
|
871
|
+
children: /*#__PURE__*/jsx(SaveIcon, {})
|
|
872
|
+
})]
|
|
873
|
+
});
|
|
874
|
+
} else {
|
|
875
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
876
|
+
children: [limit, " L", " ", /*#__PURE__*/jsx(IconButton, {
|
|
877
|
+
size: "small",
|
|
878
|
+
onClick: function onClick() {
|
|
879
|
+
return SetEdit(!edit);
|
|
880
|
+
},
|
|
881
|
+
children: /*#__PURE__*/jsx(EditIcon, {})
|
|
882
|
+
})]
|
|
883
|
+
});
|
|
884
|
+
}
|
|
885
|
+
}
|
|
886
|
+
|
|
887
|
+
function SelectSpecs(_ref) {
|
|
888
|
+
var specs = _ref.specs,
|
|
889
|
+
SetSpecs = _ref.SetSpecs;
|
|
890
|
+
function SetAll(value) {
|
|
891
|
+
SetSpecs(function (specs) {
|
|
892
|
+
Object.keys(specs).map(function (spec) {
|
|
893
|
+
return specs[spec] = value;
|
|
894
|
+
});
|
|
895
|
+
});
|
|
896
|
+
return;
|
|
897
|
+
}
|
|
898
|
+
return /*#__PURE__*/jsxs(FormControl, {
|
|
899
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
900
|
+
textAlign: "left",
|
|
901
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
902
|
+
children: "Select spectrometers"
|
|
903
|
+
})
|
|
904
|
+
}), /*#__PURE__*/jsxs(FormGroup, {
|
|
905
|
+
row: true,
|
|
906
|
+
sx: {
|
|
907
|
+
px: 2
|
|
908
|
+
},
|
|
909
|
+
children: [Object.keys(specs).map(function (m) {
|
|
910
|
+
return /*#__PURE__*/jsx(FormControlLabel, {
|
|
911
|
+
control: /*#__PURE__*/jsx(Checkbox, {
|
|
912
|
+
size: "small"
|
|
913
|
+
}),
|
|
914
|
+
checked: specs[m],
|
|
915
|
+
onChange: function onChange() {
|
|
916
|
+
return SetSpecs(function (specs) {
|
|
917
|
+
specs[m] = !specs[m];
|
|
918
|
+
});
|
|
919
|
+
},
|
|
920
|
+
label: m
|
|
921
|
+
}, m + "_check");
|
|
922
|
+
}), " ", /*#__PURE__*/jsx(Button, {
|
|
923
|
+
size: "small",
|
|
924
|
+
onClick: function onClick() {
|
|
925
|
+
return SetAll(true);
|
|
926
|
+
},
|
|
927
|
+
children: "all"
|
|
928
|
+
}), " ", "\u2002", " ", /*#__PURE__*/jsx(Button, {
|
|
929
|
+
size: "small",
|
|
930
|
+
onClick: function onClick() {
|
|
931
|
+
return SetAll(false);
|
|
932
|
+
},
|
|
933
|
+
children: "none"
|
|
934
|
+
})]
|
|
935
|
+
})]
|
|
936
|
+
});
|
|
937
|
+
}
|
|
938
|
+
|
|
939
|
+
function FindPair(_ref) {
|
|
940
|
+
var currSpecs = _ref.currSpecs,
|
|
941
|
+
heliumData = _ref.heliumData,
|
|
942
|
+
boilOff = _ref.boilOff,
|
|
943
|
+
limit = _ref.limit;
|
|
944
|
+
// find all possible pairs of spectrometers
|
|
945
|
+
|
|
946
|
+
var specPairs = [];
|
|
947
|
+
currSpecs.map(function (spec1) {
|
|
948
|
+
currSpecs.map(function (spec2) {
|
|
949
|
+
if (spec1 !== spec2) {
|
|
950
|
+
specPairs.push([spec1, spec2].sort()); // sort to facilitate duplicate removal
|
|
951
|
+
}
|
|
952
|
+
});
|
|
953
|
+
});
|
|
954
|
+
|
|
955
|
+
// remove duplicates from array by conversion to string
|
|
956
|
+
|
|
957
|
+
specPairs = Array.from(new Set(specPairs.map(JSON.stringify)), JSON.parse);
|
|
958
|
+
var specPairsLiters = [];
|
|
959
|
+
var _loop = function _loop() {
|
|
960
|
+
var j = 1;
|
|
961
|
+
var pairBoil = 0;
|
|
962
|
+
|
|
963
|
+
// Add current pair of specs
|
|
964
|
+
|
|
965
|
+
specPairsLiters.push(specPairs[i]);
|
|
966
|
+
|
|
967
|
+
// Calculate L. to max for pair until reaching target value
|
|
968
|
+
|
|
969
|
+
do {
|
|
970
|
+
pairBoil = specPairs[i].reduce(function (total, current) {
|
|
971
|
+
var boil = Math.round(heliumData.helium[current] + j * boilOff[current]);
|
|
972
|
+
|
|
973
|
+
// Catch negative values
|
|
974
|
+
if (boil < 0) {
|
|
975
|
+
boil = 0;
|
|
976
|
+
}
|
|
977
|
+
var boilToMax = CalcToMax({
|
|
978
|
+
value: boil,
|
|
979
|
+
spec: current
|
|
980
|
+
});
|
|
981
|
+
return total + boilToMax;
|
|
982
|
+
}, 0);
|
|
983
|
+
j++;
|
|
984
|
+
} while (pairBoil < limit && j < 300);
|
|
985
|
+
|
|
986
|
+
// Result to pair
|
|
987
|
+
|
|
988
|
+
specPairsLiters[i].push(j);
|
|
989
|
+
specPairsLiters[i].push(pairBoil);
|
|
990
|
+
specPairsLiters[i].push(pairBoil > limit);
|
|
991
|
+
};
|
|
992
|
+
for (var i in specPairs) {
|
|
993
|
+
_loop();
|
|
994
|
+
}
|
|
995
|
+
|
|
996
|
+
// Remove pairs that did not converge
|
|
997
|
+
|
|
998
|
+
specPairsLiters = specPairsLiters.filter(function (pair) {
|
|
999
|
+
return pair[4];
|
|
1000
|
+
});
|
|
1001
|
+
|
|
1002
|
+
// Find pair with minimal number of days
|
|
1003
|
+
|
|
1004
|
+
var minPair = [];
|
|
1005
|
+
switch (specPairsLiters.length) {
|
|
1006
|
+
case 0:
|
|
1007
|
+
minPair = [];
|
|
1008
|
+
break;
|
|
1009
|
+
case 1:
|
|
1010
|
+
minPair = _toConsumableArray(specPairsLiters);
|
|
1011
|
+
break;
|
|
1012
|
+
default:
|
|
1013
|
+
minPair = specPairsLiters.reduce(function (min, current) {
|
|
1014
|
+
var i = current[2] < min[2] ? current : min;
|
|
1015
|
+
return i;
|
|
1016
|
+
});
|
|
1017
|
+
break;
|
|
1018
|
+
}
|
|
1019
|
+
minPair = minPair.flat();
|
|
1020
|
+
return minPair;
|
|
1021
|
+
}
|
|
1022
|
+
function FindTriple(_ref2) {
|
|
1023
|
+
var currSpecs = _ref2.currSpecs,
|
|
1024
|
+
heliumData = _ref2.heliumData,
|
|
1025
|
+
boilOff = _ref2.boilOff,
|
|
1026
|
+
limit = _ref2.limit;
|
|
1027
|
+
// find all possible triples of spectrometers
|
|
1028
|
+
|
|
1029
|
+
var specTriples = [];
|
|
1030
|
+
currSpecs.map(function (spec1) {
|
|
1031
|
+
currSpecs.map(function (spec2) {
|
|
1032
|
+
currSpecs.map(function (spec3) {
|
|
1033
|
+
if (!(spec1 === spec2 || spec2 === spec3 || spec3 === spec1)) {
|
|
1034
|
+
specTriples.push([spec1, spec2, spec3].sort()); // sort to facilitate duplicate removal
|
|
1035
|
+
}
|
|
1036
|
+
});
|
|
1037
|
+
});
|
|
1038
|
+
});
|
|
1039
|
+
|
|
1040
|
+
// remove duplicates from array by conversion to string
|
|
1041
|
+
|
|
1042
|
+
specTriples = Array.from(new Set(specTriples.map(JSON.stringify)), JSON.parse);
|
|
1043
|
+
var specTriplesLiters = [];
|
|
1044
|
+
var _loop2 = function _loop2() {
|
|
1045
|
+
var j = 1;
|
|
1046
|
+
var pairBoil = 0;
|
|
1047
|
+
|
|
1048
|
+
// Add current pair of specs
|
|
1049
|
+
|
|
1050
|
+
specTriplesLiters.push(specTriples[i]);
|
|
1051
|
+
|
|
1052
|
+
// Calculate L. to max for pair until reaching target value
|
|
1053
|
+
|
|
1054
|
+
do {
|
|
1055
|
+
pairBoil = specTriples[i].reduce(function (total, current) {
|
|
1056
|
+
var boil = Math.round(heliumData.helium[current] + j * boilOff[current]);
|
|
1057
|
+
|
|
1058
|
+
// Catch negative values
|
|
1059
|
+
if (boil < 0) {
|
|
1060
|
+
boil = 0;
|
|
1061
|
+
}
|
|
1062
|
+
var boilToMax = CalcToMax({
|
|
1063
|
+
value: boil,
|
|
1064
|
+
spec: current
|
|
1065
|
+
});
|
|
1066
|
+
return total + boilToMax;
|
|
1067
|
+
}, 0);
|
|
1068
|
+
j++;
|
|
1069
|
+
} while (pairBoil < limit && j < 300);
|
|
1070
|
+
|
|
1071
|
+
// Result to triple
|
|
1072
|
+
|
|
1073
|
+
specTriplesLiters[i].push(j);
|
|
1074
|
+
specTriplesLiters[i].push(pairBoil);
|
|
1075
|
+
specTriplesLiters[i].push(pairBoil > limit);
|
|
1076
|
+
};
|
|
1077
|
+
for (var i in specTriples) {
|
|
1078
|
+
_loop2();
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
// Remove triples that did not converge
|
|
1082
|
+
|
|
1083
|
+
specTriplesLiters = specTriplesLiters.filter(function (pair) {
|
|
1084
|
+
return pair[5];
|
|
1085
|
+
});
|
|
1086
|
+
|
|
1087
|
+
// Find triple with minimal number of days
|
|
1088
|
+
|
|
1089
|
+
var minTriple = [];
|
|
1090
|
+
switch (specTriplesLiters.length) {
|
|
1091
|
+
case 0:
|
|
1092
|
+
minTriple = [];
|
|
1093
|
+
break;
|
|
1094
|
+
case 1:
|
|
1095
|
+
minTriple = _toConsumableArray(specTriplesLiters);
|
|
1096
|
+
break;
|
|
1097
|
+
default:
|
|
1098
|
+
minTriple = specTriplesLiters.reduce(function (min, current) {
|
|
1099
|
+
var i = current[3] < min[3] ? current : min;
|
|
1100
|
+
return i;
|
|
1101
|
+
});
|
|
1102
|
+
break;
|
|
1103
|
+
}
|
|
1104
|
+
minTriple = minTriple.flat();
|
|
1105
|
+
return minTriple;
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
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; }
|
|
1109
|
+
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), true).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; }
|
|
1110
|
+
function TupleResult(_ref) {
|
|
1111
|
+
var children = _ref.children,
|
|
1112
|
+
title = _ref.title;
|
|
1113
|
+
return /*#__PURE__*/jsx(Grid, {
|
|
1114
|
+
children: /*#__PURE__*/jsxs(AppTable, {
|
|
1115
|
+
children: [/*#__PURE__*/jsx(TableHead, {
|
|
1116
|
+
children: /*#__PURE__*/jsx(TableRow, {
|
|
1117
|
+
children: /*#__PURE__*/jsx(TableHeadCell, {
|
|
1118
|
+
children: title
|
|
1119
|
+
})
|
|
1120
|
+
})
|
|
1121
|
+
}), /*#__PURE__*/jsx(TableBody, {
|
|
1122
|
+
children: /*#__PURE__*/jsx(TableRow, {
|
|
1123
|
+
children: /*#__PURE__*/jsx(TableCell, {
|
|
1124
|
+
children: children
|
|
1125
|
+
})
|
|
1126
|
+
})
|
|
1127
|
+
})]
|
|
1128
|
+
})
|
|
1129
|
+
});
|
|
1130
|
+
}
|
|
1131
|
+
function PairResult(_ref2) {
|
|
1132
|
+
var minPair = _ref2.minPair;
|
|
1133
|
+
if (minPair.length !== 0) {
|
|
1134
|
+
var d = new Date();
|
|
1135
|
+
d.setDate(d.getDate() + minPair[2]);
|
|
1136
|
+
var date = moment$1(d).format("ll");
|
|
1137
|
+
return /*#__PURE__*/jsxs(TupleResult, {
|
|
1138
|
+
title: "Pair",
|
|
1139
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
1140
|
+
children: minPair[0]
|
|
1141
|
+
}), " and ", /*#__PURE__*/jsx("strong", {
|
|
1142
|
+
children: minPair[1]
|
|
1143
|
+
}), " ", "in ", /*#__PURE__*/jsxs("strong", {
|
|
1144
|
+
children: [minPair[2], " days"]
|
|
1145
|
+
}), " (", date, ")"]
|
|
1146
|
+
});
|
|
1147
|
+
} else {
|
|
1148
|
+
return /*#__PURE__*/jsx(TupleResult, {
|
|
1149
|
+
title: "Pair",
|
|
1150
|
+
children: /*#__PURE__*/jsx("em", {
|
|
1151
|
+
children: "No spectrometer pair reaches the target value."
|
|
1152
|
+
})
|
|
1153
|
+
});
|
|
1154
|
+
}
|
|
1155
|
+
}
|
|
1156
|
+
function TripleResult(_ref3) {
|
|
1157
|
+
var minTriple = _ref3.minTriple;
|
|
1158
|
+
if (minTriple.length !== 0) {
|
|
1159
|
+
var d = new Date();
|
|
1160
|
+
d.setDate(d.getDate() + minTriple[3]);
|
|
1161
|
+
var date = moment$1(d).format("ll");
|
|
1162
|
+
return /*#__PURE__*/jsxs(TupleResult, {
|
|
1163
|
+
title: "Triple",
|
|
1164
|
+
children: [/*#__PURE__*/jsx("strong", {
|
|
1165
|
+
children: minTriple[0]
|
|
1166
|
+
}), ", ", /*#__PURE__*/jsx("strong", {
|
|
1167
|
+
children: minTriple[1]
|
|
1168
|
+
}), ", and ", /*#__PURE__*/jsx("strong", {
|
|
1169
|
+
children: minTriple[2]
|
|
1170
|
+
}), " in", " ", /*#__PURE__*/jsxs("strong", {
|
|
1171
|
+
children: [minTriple[3], " days"]
|
|
1172
|
+
}), " (", date, ")"]
|
|
1173
|
+
});
|
|
1174
|
+
} else {
|
|
1175
|
+
return /*#__PURE__*/jsx(TupleResult, {
|
|
1176
|
+
title: "Triple",
|
|
1177
|
+
children: /*#__PURE__*/jsx("p", {
|
|
1178
|
+
children: /*#__PURE__*/jsx("em", {
|
|
1179
|
+
children: "No spectrometer triple reaches the target value."
|
|
1180
|
+
})
|
|
1181
|
+
})
|
|
1182
|
+
});
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
function PairWizard() {
|
|
1186
|
+
var context = useContext(HeliumContext);
|
|
1187
|
+
var heliumLookupData = context.heliumLookupData;
|
|
1188
|
+
var heliumData = context.heliumData;
|
|
1189
|
+
|
|
1190
|
+
// Define lookup objects
|
|
1191
|
+
|
|
1192
|
+
var boilOff = heliumLookupData.boilOff;
|
|
1193
|
+
var defaultSpecs = {};
|
|
1194
|
+
Object.keys(boilOff).map(function (spec) {
|
|
1195
|
+
return defaultSpecs = _objectSpread$3(_objectSpread$3({}, defaultSpecs), {}, _defineProperty({}, spec, true));
|
|
1196
|
+
});
|
|
1197
|
+
var _useImmer = useImmer(defaultSpecs),
|
|
1198
|
+
_useImmer2 = _slicedToArray(_useImmer, 2),
|
|
1199
|
+
specs = _useImmer2[0],
|
|
1200
|
+
SetSpecs = _useImmer2[1];
|
|
1201
|
+
var currSpecs = Object.keys(specs).filter(function (spec) {
|
|
1202
|
+
return specs[spec];
|
|
1203
|
+
});
|
|
1204
|
+
var _useState = useState(false),
|
|
1205
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1206
|
+
error = _useState2[0],
|
|
1207
|
+
SetError = _useState2[1];
|
|
1208
|
+
var _useState3 = useState(100),
|
|
1209
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
1210
|
+
limit = _useState4[0],
|
|
1211
|
+
SetLimit = _useState4[1];
|
|
1212
|
+
var minPair = FindPair(_objectSpread$3({}, {
|
|
1213
|
+
currSpecs: currSpecs,
|
|
1214
|
+
heliumData: heliumData,
|
|
1215
|
+
boilOff: boilOff,
|
|
1216
|
+
limit: limit
|
|
1217
|
+
}));
|
|
1218
|
+
var minTriple = FindTriple(_objectSpread$3({}, {
|
|
1219
|
+
currSpecs: currSpecs,
|
|
1220
|
+
heliumData: heliumData,
|
|
1221
|
+
boilOff: boilOff,
|
|
1222
|
+
limit: limit
|
|
1223
|
+
}));
|
|
1224
|
+
return /*#__PURE__*/jsx(React.Fragment, {
|
|
1225
|
+
children: /*#__PURE__*/jsxs(Grid, {
|
|
1226
|
+
container: true,
|
|
1227
|
+
columns: {
|
|
1228
|
+
xs: 6,
|
|
1229
|
+
md: 12
|
|
1230
|
+
},
|
|
1231
|
+
children: [/*#__PURE__*/jsxs(Grid, {
|
|
1232
|
+
sx: {
|
|
1233
|
+
px: 2
|
|
1234
|
+
},
|
|
1235
|
+
size: 6,
|
|
1236
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
1237
|
+
textAlign: "left",
|
|
1238
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
1239
|
+
children: "Find earliest set of spectrometers requiring"
|
|
1240
|
+
})
|
|
1241
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1242
|
+
sx: {
|
|
1243
|
+
padding: 2,
|
|
1244
|
+
display: "flex",
|
|
1245
|
+
justifyContent: "center"
|
|
1246
|
+
},
|
|
1247
|
+
children: /*#__PURE__*/jsx(Typography, {
|
|
1248
|
+
variant: "h4",
|
|
1249
|
+
children: /*#__PURE__*/jsx(LiterInput, {
|
|
1250
|
+
limit: limit,
|
|
1251
|
+
SetLimit: SetLimit,
|
|
1252
|
+
error: error,
|
|
1253
|
+
SetError: SetError
|
|
1254
|
+
})
|
|
1255
|
+
})
|
|
1256
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1257
|
+
children: /*#__PURE__*/jsx(SelectSpecs, {
|
|
1258
|
+
specs: specs,
|
|
1259
|
+
SetSpecs: SetSpecs
|
|
1260
|
+
})
|
|
1261
|
+
})]
|
|
1262
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1263
|
+
sx: {
|
|
1264
|
+
px: 2
|
|
1265
|
+
},
|
|
1266
|
+
size: 6,
|
|
1267
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
1268
|
+
textAlign: "left",
|
|
1269
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
1270
|
+
children: "Result"
|
|
1271
|
+
})
|
|
1272
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1273
|
+
sx: {
|
|
1274
|
+
px: 3
|
|
1275
|
+
},
|
|
1276
|
+
children: [/*#__PURE__*/jsx(PairResult, {
|
|
1277
|
+
minPair: minPair
|
|
1278
|
+
}), /*#__PURE__*/jsx(TripleResult, {
|
|
1279
|
+
minTriple: minTriple
|
|
1280
|
+
})]
|
|
1281
|
+
})]
|
|
1282
|
+
})]
|
|
1283
|
+
})
|
|
1284
|
+
});
|
|
1285
|
+
}
|
|
1286
|
+
|
|
1287
|
+
function SpectrometerSetPanel() {
|
|
1288
|
+
var context = useContext(HeliumContext);
|
|
1289
|
+
return /*#__PURE__*/jsx(AppCard, {
|
|
1290
|
+
title: "Spectrometer Set",
|
|
1291
|
+
size: context.cardSize,
|
|
1292
|
+
collapsed: context.collapsed,
|
|
1293
|
+
sx: {
|
|
1294
|
+
mb: context.bottomMargin
|
|
1295
|
+
},
|
|
1296
|
+
children: /*#__PURE__*/jsx(Grid, {
|
|
1297
|
+
children: /*#__PURE__*/jsx(PairWizard, {})
|
|
1298
|
+
})
|
|
1299
|
+
});
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
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; }
|
|
1303
|
+
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), true).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; }
|
|
1304
|
+
function EstimateConsumption() {
|
|
1305
|
+
// Get data
|
|
1306
|
+
|
|
1307
|
+
var heliumLookupData = useContext(HeliumContext).heliumLookupData;
|
|
1308
|
+
var boilOff = heliumLookupData.boilOff;
|
|
1309
|
+
var lookup = heliumLookupData.lookup;
|
|
1310
|
+
|
|
1311
|
+
// Define array and populate with days and liters to get from 100% to 50%
|
|
1312
|
+
|
|
1313
|
+
var specCons = [];
|
|
1314
|
+
Object.keys(lookup).map(function (spec) {
|
|
1315
|
+
return specCons.push({
|
|
1316
|
+
name: spec,
|
|
1317
|
+
liters: (lookup[spec].filter(function (x) {
|
|
1318
|
+
return x.level === 100;
|
|
1319
|
+
})[0].liters - lookup[spec].filter(function (x) {
|
|
1320
|
+
return x.level === 50;
|
|
1321
|
+
})[0].liters).toFixed(1),
|
|
1322
|
+
days: (-50 / boilOff[spec]).toFixed(1)
|
|
1323
|
+
});
|
|
1324
|
+
});
|
|
1325
|
+
|
|
1326
|
+
// Calculate consumption per day, month, year from values above
|
|
1327
|
+
|
|
1328
|
+
specCons = specCons.map(function (spec) {
|
|
1329
|
+
return _objectSpread$2(_objectSpread$2({}, spec), {}, {
|
|
1330
|
+
perDay: spec.liters / spec.days,
|
|
1331
|
+
perMonth: (spec.liters / spec.days * 30).toFixed(1),
|
|
1332
|
+
perYear: (spec.liters / spec.days * 365).toFixed(1)
|
|
1333
|
+
});
|
|
1334
|
+
});
|
|
1335
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
1336
|
+
children: [/*#__PURE__*/jsx("p", {
|
|
1337
|
+
children: "Helium consumption estimated based on lookup values."
|
|
1338
|
+
}), /*#__PURE__*/jsxs(AppTable, {
|
|
1339
|
+
children: [/*#__PURE__*/jsx(TableHead, {
|
|
1340
|
+
children: /*#__PURE__*/jsxs(TableRow, {
|
|
1341
|
+
children: [/*#__PURE__*/jsx(TableHeadCell, {}), specCons.map(function (spec) {
|
|
1342
|
+
return /*#__PURE__*/jsx(TableHeadCell, {
|
|
1343
|
+
children: spec.name
|
|
1344
|
+
}, "Head" + spec.name);
|
|
1345
|
+
}), /*#__PURE__*/jsx(TableHeadCell, {
|
|
1346
|
+
children: "Sum"
|
|
1347
|
+
})]
|
|
1348
|
+
})
|
|
1349
|
+
}), /*#__PURE__*/jsxs(TableBody, {
|
|
1350
|
+
children: [/*#__PURE__*/jsxs(TableRow, {
|
|
1351
|
+
children: [/*#__PURE__*/jsx(TableCell, {
|
|
1352
|
+
children: "per month"
|
|
1353
|
+
}), specCons.map(function (spec) {
|
|
1354
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
1355
|
+
children: [spec.perMonth, " L ", /*#__PURE__*/jsx("br", {}), "(", (spec.perMonth * 0.79).toFixed(2), " m", /*#__PURE__*/jsx("sup", {
|
|
1356
|
+
children: "3"
|
|
1357
|
+
}), " Gas)"]
|
|
1358
|
+
}, "perMonth" + spec.name);
|
|
1359
|
+
}), /*#__PURE__*/jsx(TableCell, {
|
|
1360
|
+
children: /*#__PURE__*/jsxs("strong", {
|
|
1361
|
+
children: [specCons.reduce(function (total, spec) {
|
|
1362
|
+
return total + Number(spec.perMonth);
|
|
1363
|
+
}, 0).toFixed(1), " ", "L", /*#__PURE__*/jsx("br", {}), "(", (specCons.reduce(function (total, spec) {
|
|
1364
|
+
return total + Number(spec.perMonth);
|
|
1365
|
+
}, 0) * 0.79).toFixed(2), " ", "m", /*#__PURE__*/jsx("sup", {
|
|
1366
|
+
children: "3"
|
|
1367
|
+
}), " Gas)"]
|
|
1368
|
+
})
|
|
1369
|
+
})]
|
|
1370
|
+
}), /*#__PURE__*/jsxs(TableRow, {
|
|
1371
|
+
children: [/*#__PURE__*/jsx(TableCell, {
|
|
1372
|
+
rowSpan: 2,
|
|
1373
|
+
children: "per year"
|
|
1374
|
+
}), specCons.map(function (spec) {
|
|
1375
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
1376
|
+
children: [spec.perYear, " L ", /*#__PURE__*/jsx("br", {}), "(", (spec.perYear * 0.79).toFixed(2), " m", /*#__PURE__*/jsx("sup", {
|
|
1377
|
+
children: "3"
|
|
1378
|
+
}), " ", "Gas)"]
|
|
1379
|
+
}, "perYear" + spec.name);
|
|
1380
|
+
}), /*#__PURE__*/jsx(TableCell, {
|
|
1381
|
+
children: /*#__PURE__*/jsxs("strong", {
|
|
1382
|
+
children: [specCons.reduce(function (total, spec) {
|
|
1383
|
+
return total + Number(spec.perYear);
|
|
1384
|
+
}, 0).toFixed(1), " ", "L", /*#__PURE__*/jsx("br", {}), "(", (specCons.reduce(function (total, spec) {
|
|
1385
|
+
return total + Number(spec.perYear);
|
|
1386
|
+
}, 0) * 0.79).toFixed(2), " ", "m", /*#__PURE__*/jsx("sup", {
|
|
1387
|
+
children: "3"
|
|
1388
|
+
}), " Gas)"]
|
|
1389
|
+
})
|
|
1390
|
+
})]
|
|
1391
|
+
})]
|
|
1392
|
+
})]
|
|
1393
|
+
})]
|
|
1394
|
+
});
|
|
1395
|
+
}
|
|
1396
|
+
|
|
1397
|
+
function EstimatedConsumptionPanel() {
|
|
1398
|
+
var context = useContext(HeliumContext);
|
|
1399
|
+
var cardSize = context.cardSize;
|
|
1400
|
+
var collapsed = context.collapsed;
|
|
1401
|
+
return /*#__PURE__*/jsx(AppCard, {
|
|
1402
|
+
title: "Estimated Consumption",
|
|
1403
|
+
size: cardSize,
|
|
1404
|
+
collapsed: collapsed,
|
|
1405
|
+
sx: {
|
|
1406
|
+
mb: context.bottomMargin
|
|
1407
|
+
},
|
|
1408
|
+
children: /*#__PURE__*/jsx(Grid, {
|
|
1409
|
+
children: /*#__PURE__*/jsx(EstimateConsumption, {})
|
|
1410
|
+
})
|
|
1411
|
+
});
|
|
1412
|
+
}
|
|
1413
|
+
|
|
1414
|
+
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; }
|
|
1415
|
+
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), true).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; }
|
|
1416
|
+
|
|
1417
|
+
// Admonition colors
|
|
1418
|
+
|
|
1419
|
+
var errorBg = AppTheme.palette.primary.main;
|
|
1420
|
+
var errorText = AppTheme.palette.primary.contrastText;
|
|
1421
|
+
var warnText = AppTheme.palette.warning.main;
|
|
1422
|
+
function HePrognosisEntry(_ref) {
|
|
1423
|
+
var value = _ref.value,
|
|
1424
|
+
days = _ref.days,
|
|
1425
|
+
spec = _ref.spec;
|
|
1426
|
+
var context = useContext(HeliumContext);
|
|
1427
|
+
var heliumLookupData = context.heliumLookupData;
|
|
1428
|
+
|
|
1429
|
+
// Define lookup objects
|
|
1430
|
+
|
|
1431
|
+
var boilOff = heliumLookupData.boilOff;
|
|
1432
|
+
var minima = heliumLookupData.minima;
|
|
1433
|
+
var boil = Math.round(value + days * boilOff[spec]);
|
|
1434
|
+
|
|
1435
|
+
// Catch negative values
|
|
1436
|
+
|
|
1437
|
+
if (boil < 0) {
|
|
1438
|
+
boil = 0;
|
|
1439
|
+
}
|
|
1440
|
+
var boilLiter = CalcLiters({
|
|
1441
|
+
value: boil,
|
|
1442
|
+
spec: spec
|
|
1443
|
+
});
|
|
1444
|
+
var boilToMax = CalcToMax({
|
|
1445
|
+
value: boil,
|
|
1446
|
+
spec: spec
|
|
1447
|
+
});
|
|
1448
|
+
var style = {};
|
|
1449
|
+
if (boil < minima[spec] - 30 * boilOff[spec]) {
|
|
1450
|
+
style = {
|
|
1451
|
+
backgroundColor: errorBg,
|
|
1452
|
+
color: errorText
|
|
1453
|
+
};
|
|
1454
|
+
} else if (boil < minima[spec] - 60 * boilOff[spec]) {
|
|
1455
|
+
style = {
|
|
1456
|
+
color: warnText
|
|
1457
|
+
};
|
|
1458
|
+
}
|
|
1459
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
1460
|
+
sx: style,
|
|
1461
|
+
children: [Percentage(boil, true), " ", /*#__PURE__*/jsx("br", {}), boilLiter, " L", /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsxs("strong", {
|
|
1462
|
+
children: [boilToMax, " L"]
|
|
1463
|
+
})]
|
|
1464
|
+
});
|
|
1465
|
+
}
|
|
1466
|
+
|
|
1467
|
+
// Calculate total missing helium at prognosed date
|
|
1468
|
+
|
|
1469
|
+
function HePrognosisSum(_ref2) {
|
|
1470
|
+
var currHeliumData = _ref2.currHeliumData,
|
|
1471
|
+
days = _ref2.days;
|
|
1472
|
+
var context = useContext(HeliumContext);
|
|
1473
|
+
var heliumLookupData = context.heliumLookupData;
|
|
1474
|
+
|
|
1475
|
+
// Define lookup objects
|
|
1476
|
+
|
|
1477
|
+
var boilOff = heliumLookupData.boilOff;
|
|
1478
|
+
var boilData = {};
|
|
1479
|
+
Object.keys(currHeliumData).map(function (spec) {
|
|
1480
|
+
boilData = _objectSpread$1(_objectSpread$1({}, boilData), {}, _defineProperty({}, spec, Math.round(currHeliumData[spec] + days * boilOff[spec])));
|
|
1481
|
+
return null;
|
|
1482
|
+
});
|
|
1483
|
+
var toMaxSum = Object.keys(boilData).reduce(function (total, current) {
|
|
1484
|
+
return total + CalcToMax({
|
|
1485
|
+
spec: current,
|
|
1486
|
+
value: boilData[current]
|
|
1487
|
+
});
|
|
1488
|
+
}, 0);
|
|
1489
|
+
toMaxSum = Math.round(toMaxSum * 10) / 10;
|
|
1490
|
+
return /*#__PURE__*/jsx(TableCell, {
|
|
1491
|
+
children: /*#__PURE__*/jsxs("strong", {
|
|
1492
|
+
children: [toMaxSum, " L"]
|
|
1493
|
+
})
|
|
1494
|
+
});
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
// Cell for day increment with edit switch
|
|
1498
|
+
|
|
1499
|
+
function HePrognosisIncr(_ref3) {
|
|
1500
|
+
var days = _ref3.days,
|
|
1501
|
+
increments = _ref3.increments,
|
|
1502
|
+
SetIncrements = _ref3.SetIncrements,
|
|
1503
|
+
dates = _ref3.dates;
|
|
1504
|
+
var _useState = useState(false),
|
|
1505
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1506
|
+
edit = _useState2[0],
|
|
1507
|
+
SetEdit = _useState2[1];
|
|
1508
|
+
var _useState3 = useState(days),
|
|
1509
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
1510
|
+
input = _useState4[0],
|
|
1511
|
+
SetInput = _useState4[1];
|
|
1512
|
+
var _useState5 = useState(false),
|
|
1513
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
1514
|
+
error = _useState6[0],
|
|
1515
|
+
SetError = _useState6[1];
|
|
1516
|
+
if (edit) {
|
|
1517
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
1518
|
+
children: [dates[days], " ", /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsx(NumField, {
|
|
1519
|
+
input: input,
|
|
1520
|
+
SetInput: SetInput,
|
|
1521
|
+
error: error,
|
|
1522
|
+
SetError: SetError,
|
|
1523
|
+
size: "small"
|
|
1524
|
+
}), /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsx(IconButton, {
|
|
1525
|
+
disabled: error,
|
|
1526
|
+
size: "small",
|
|
1527
|
+
onClick: function onClick() {
|
|
1528
|
+
SetEdit(!edit);
|
|
1529
|
+
SetIncrements(increments.map(function (inc) {
|
|
1530
|
+
if (inc === days) {
|
|
1531
|
+
return Number(input);
|
|
1532
|
+
} else {
|
|
1533
|
+
return inc;
|
|
1534
|
+
}
|
|
1535
|
+
}));
|
|
1536
|
+
},
|
|
1537
|
+
children: /*#__PURE__*/jsx(SaveIcon, {})
|
|
1538
|
+
}), /*#__PURE__*/jsx(IconButton, {
|
|
1539
|
+
size: "small",
|
|
1540
|
+
onClick: function onClick() {
|
|
1541
|
+
return SetIncrements(increments.filter(function (n) {
|
|
1542
|
+
return n !== days;
|
|
1543
|
+
}));
|
|
1544
|
+
},
|
|
1545
|
+
children: /*#__PURE__*/jsx(DeleteIcon, {})
|
|
1546
|
+
})]
|
|
1547
|
+
});
|
|
1548
|
+
} else {
|
|
1549
|
+
return /*#__PURE__*/jsxs(TableCell, {
|
|
1550
|
+
children: [dates[days], " ", /*#__PURE__*/jsx("br", {}), " in ", days, " days ", /*#__PURE__*/jsx("br", {}), /*#__PURE__*/jsx(IconButton, {
|
|
1551
|
+
size: "small",
|
|
1552
|
+
onClick: function onClick() {
|
|
1553
|
+
return SetEdit(!edit);
|
|
1554
|
+
},
|
|
1555
|
+
children: /*#__PURE__*/jsx(EditIcon, {})
|
|
1556
|
+
}), /*#__PURE__*/jsx(IconButton, {
|
|
1557
|
+
size: "small",
|
|
1558
|
+
onClick: function onClick() {
|
|
1559
|
+
return SetIncrements(increments.filter(function (n) {
|
|
1560
|
+
return n !== days;
|
|
1561
|
+
}));
|
|
1562
|
+
},
|
|
1563
|
+
children: /*#__PURE__*/jsx(DeleteIcon, {})
|
|
1564
|
+
})]
|
|
1565
|
+
});
|
|
1566
|
+
}
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
// Render table row in prognosis table
|
|
1570
|
+
|
|
1571
|
+
function HePrognosisBody(_ref4) {
|
|
1572
|
+
var increments = _ref4.increments,
|
|
1573
|
+
SetIncrements = _ref4.SetIncrements,
|
|
1574
|
+
currHeliumData = _ref4.currHeliumData,
|
|
1575
|
+
dates = _ref4.dates;
|
|
1576
|
+
return /*#__PURE__*/jsx(React.Fragment, {
|
|
1577
|
+
children: increments.map(function (m) {
|
|
1578
|
+
return /*#__PURE__*/jsxs(TableRow, {
|
|
1579
|
+
children: [/*#__PURE__*/jsx(HePrognosisIncr, {
|
|
1580
|
+
days: m,
|
|
1581
|
+
increments: increments,
|
|
1582
|
+
SetIncrements: SetIncrements,
|
|
1583
|
+
dates: dates
|
|
1584
|
+
}), Object.keys(currHeliumData).map(function (spec) {
|
|
1585
|
+
return /*#__PURE__*/jsx(HePrognosisEntry, {
|
|
1586
|
+
value: currHeliumData[spec],
|
|
1587
|
+
days: m,
|
|
1588
|
+
spec: spec
|
|
1589
|
+
}, spec + "_progentry");
|
|
1590
|
+
}), /*#__PURE__*/jsx(HePrognosisSum, {
|
|
1591
|
+
currHeliumData: currHeliumData,
|
|
1592
|
+
days: m
|
|
1593
|
+
})]
|
|
1594
|
+
}, m + "_incr");
|
|
1595
|
+
})
|
|
1596
|
+
});
|
|
1597
|
+
}
|
|
1598
|
+
|
|
1599
|
+
// function for adding additional table entries
|
|
1600
|
+
|
|
1601
|
+
function AddPrognoEntry(_ref5) {
|
|
1602
|
+
var increments = _ref5.increments,
|
|
1603
|
+
SetIncrements = _ref5.SetIncrements;
|
|
1604
|
+
var _useState7 = useState(""),
|
|
1605
|
+
_useState8 = _slicedToArray(_useState7, 2),
|
|
1606
|
+
input = _useState8[0],
|
|
1607
|
+
SetInput = _useState8[1];
|
|
1608
|
+
var _useState9 = useState(false),
|
|
1609
|
+
_useState0 = _slicedToArray(_useState9, 2),
|
|
1610
|
+
error = _useState0[0],
|
|
1611
|
+
SetError = _useState0[1];
|
|
1612
|
+
return /*#__PURE__*/jsxs(React.Fragment, {
|
|
1613
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
1614
|
+
textAlign: "left",
|
|
1615
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
1616
|
+
children: "Add prediction row"
|
|
1617
|
+
})
|
|
1618
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1619
|
+
children: [/*#__PURE__*/jsx(NumField, {
|
|
1620
|
+
input: input,
|
|
1621
|
+
SetInput: SetInput,
|
|
1622
|
+
error: error,
|
|
1623
|
+
SetError: SetError,
|
|
1624
|
+
adornment: "days",
|
|
1625
|
+
size: "medium"
|
|
1626
|
+
}), /*#__PURE__*/jsx(IconButton, {
|
|
1627
|
+
disabled: error,
|
|
1628
|
+
onClick: function onClick() {
|
|
1629
|
+
SetIncrements([Number(input)].concat(_toConsumableArray(increments)));
|
|
1630
|
+
},
|
|
1631
|
+
children: /*#__PURE__*/jsx(AddBoxIcon, {})
|
|
1632
|
+
})]
|
|
1633
|
+
})]
|
|
1634
|
+
});
|
|
1635
|
+
}
|
|
1636
|
+
|
|
1637
|
+
// render prognosis table based on day increments state array
|
|
1638
|
+
|
|
1639
|
+
function HePrognosis() {
|
|
1640
|
+
var context = useContext(HeliumContext);
|
|
1641
|
+
var heliumLookupData = context.heliumLookupData;
|
|
1642
|
+
var heliumData = context.heliumData;
|
|
1643
|
+
// Define lookup objects
|
|
1644
|
+
|
|
1645
|
+
var minima = heliumLookupData.minima;
|
|
1646
|
+
var specDefault = {};
|
|
1647
|
+
var specList = Object.keys(heliumData.helium);
|
|
1648
|
+
specList.map(function (spec) {
|
|
1649
|
+
return specDefault = _objectSpread$1(_objectSpread$1({}, specDefault), {}, _defineProperty({}, spec, true));
|
|
1650
|
+
});
|
|
1651
|
+
var _useImmer = useImmer(specDefault),
|
|
1652
|
+
_useImmer2 = _slicedToArray(_useImmer, 2),
|
|
1653
|
+
specs = _useImmer2[0],
|
|
1654
|
+
SetSpecs = _useImmer2[1];
|
|
1655
|
+
var _useState1 = useState([14, 30, 60, 90]),
|
|
1656
|
+
_useState10 = _slicedToArray(_useState1, 2),
|
|
1657
|
+
increments = _useState10[0],
|
|
1658
|
+
SetIncrements = _useState10[1];
|
|
1659
|
+
var currHeliumData = {};
|
|
1660
|
+
Object.keys(specs).filter(function (spec) {
|
|
1661
|
+
return specs[spec];
|
|
1662
|
+
}).map(function (spec) {
|
|
1663
|
+
return currHeliumData = _objectSpread$1(_objectSpread$1({}, currHeliumData), {}, _defineProperty({}, spec, heliumData.helium[spec]));
|
|
1664
|
+
});
|
|
1665
|
+
var dates = {};
|
|
1666
|
+
for (var i in increments) {
|
|
1667
|
+
var d = new Date();
|
|
1668
|
+
d.setDate(d.getDate() + increments[i]);
|
|
1669
|
+
dates = _objectSpread$1(_objectSpread$1({}, dates), {}, _defineProperty({}, increments[i], moment(d).format("ll")));
|
|
1670
|
+
}
|
|
1671
|
+
return /*#__PURE__*/jsxs(Grid, {
|
|
1672
|
+
container: true,
|
|
1673
|
+
columns: {
|
|
1674
|
+
xs: 6,
|
|
1675
|
+
sm: 12
|
|
1676
|
+
},
|
|
1677
|
+
children: [/*#__PURE__*/jsx(Grid, {
|
|
1678
|
+
size: 6,
|
|
1679
|
+
children: /*#__PURE__*/jsx(SelectSpecs, {
|
|
1680
|
+
specs: specs,
|
|
1681
|
+
SetSpecs: SetSpecs
|
|
1682
|
+
})
|
|
1683
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1684
|
+
size: 6,
|
|
1685
|
+
children: /*#__PURE__*/jsx(AddPrognoEntry, {
|
|
1686
|
+
increments: increments,
|
|
1687
|
+
SetIncrements: SetIncrements
|
|
1688
|
+
})
|
|
1689
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1690
|
+
size: 12,
|
|
1691
|
+
children: /*#__PURE__*/jsxs(AppTable, {
|
|
1692
|
+
children: [/*#__PURE__*/jsxs(TableHead, {
|
|
1693
|
+
children: [/*#__PURE__*/jsxs(TableRow, {
|
|
1694
|
+
children: [/*#__PURE__*/jsx(TableHeadCell, {}), Object.keys(currHeliumData).map(function (spec) {
|
|
1695
|
+
return /*#__PURE__*/jsxs(TableHeadCell, {
|
|
1696
|
+
children: [spec, /*#__PURE__*/jsx("br", {}), "(", minima[spec], " %)"]
|
|
1697
|
+
}, spec + "_th");
|
|
1698
|
+
}), /*#__PURE__*/jsx(TableHeadCell, {
|
|
1699
|
+
children: "Sum"
|
|
1700
|
+
})]
|
|
1701
|
+
}), /*#__PURE__*/jsxs(TableRow, {
|
|
1702
|
+
children: [/*#__PURE__*/jsx(TableHeadCell, {}), /*#__PURE__*/jsx(TableHeadCell, {
|
|
1703
|
+
align: "center",
|
|
1704
|
+
colSpan: Object.keys(specs).length + 1,
|
|
1705
|
+
children: /*#__PURE__*/jsx("em", {
|
|
1706
|
+
children: "[%], Liters, L. to max"
|
|
1707
|
+
})
|
|
1708
|
+
})]
|
|
1709
|
+
})]
|
|
1710
|
+
}), /*#__PURE__*/jsx(TableBody, {
|
|
1711
|
+
children: /*#__PURE__*/jsx(HePrognosisBody, {
|
|
1712
|
+
increments: increments,
|
|
1713
|
+
SetIncrements: SetIncrements,
|
|
1714
|
+
dates: dates,
|
|
1715
|
+
currHeliumData: currHeliumData
|
|
1716
|
+
})
|
|
1717
|
+
})]
|
|
1718
|
+
})
|
|
1719
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1720
|
+
sx: {
|
|
1721
|
+
display: "flex",
|
|
1722
|
+
justifyContent: "center",
|
|
1723
|
+
alignItems: "center",
|
|
1724
|
+
pt: 2
|
|
1725
|
+
},
|
|
1726
|
+
size: 12,
|
|
1727
|
+
children: [/*#__PURE__*/jsx(Chip, {
|
|
1728
|
+
sx: {
|
|
1729
|
+
backgroundColor: errorBg,
|
|
1730
|
+
color: errorText,
|
|
1731
|
+
mx: 1
|
|
1732
|
+
},
|
|
1733
|
+
label: "Minimum in less than 30 days"
|
|
1734
|
+
}), /*#__PURE__*/jsx(Chip, {
|
|
1735
|
+
sx: {
|
|
1736
|
+
color: warnText,
|
|
1737
|
+
mx: 1
|
|
1738
|
+
},
|
|
1739
|
+
variant: "outlined",
|
|
1740
|
+
label: "Minimum in less than 60 days"
|
|
1741
|
+
})]
|
|
1742
|
+
})]
|
|
1743
|
+
});
|
|
1744
|
+
}
|
|
1745
|
+
|
|
1746
|
+
function EstimationPanel() {
|
|
1747
|
+
var context = useContext(HeliumContext);
|
|
1748
|
+
return /*#__PURE__*/jsx(AppCard, {
|
|
1749
|
+
title: "Helium Estimation",
|
|
1750
|
+
size: context.cardSize,
|
|
1751
|
+
sx: {
|
|
1752
|
+
mb: context.bottomMargin
|
|
1753
|
+
},
|
|
1754
|
+
children: /*#__PURE__*/jsx(HePrognosis, {})
|
|
1755
|
+
});
|
|
1756
|
+
}
|
|
1757
|
+
|
|
1758
|
+
function FillTarget() {
|
|
1759
|
+
var context = useContext(HeliumContext);
|
|
1760
|
+
var heliumLookupData = context.heliumLookupData;
|
|
1761
|
+
var heliumData = context.heliumData;
|
|
1762
|
+
var boilOff = heliumLookupData.boilOff;
|
|
1763
|
+
var lookup = heliumLookupData.lookup;
|
|
1764
|
+
var _useState = useState(false),
|
|
1765
|
+
_useState2 = _slicedToArray(_useState, 2),
|
|
1766
|
+
error = _useState2[0],
|
|
1767
|
+
SetError = _useState2[1];
|
|
1768
|
+
var _useState3 = useState(25),
|
|
1769
|
+
_useState4 = _slicedToArray(_useState3, 2),
|
|
1770
|
+
amount = _useState4[0],
|
|
1771
|
+
SetAmount = _useState4[1];
|
|
1772
|
+
var _useState5 = useState(Object.keys(lookup)[0]),
|
|
1773
|
+
_useState6 = _slicedToArray(_useState5, 2),
|
|
1774
|
+
spec = _useState6[0],
|
|
1775
|
+
SetSpec = _useState6[1];
|
|
1776
|
+
var currLevel = heliumData.helium[spec];
|
|
1777
|
+
var currLiter = CalcLiters({
|
|
1778
|
+
value: currLevel,
|
|
1779
|
+
spec: spec
|
|
1780
|
+
});
|
|
1781
|
+
var finalLiter = currLiter + amount;
|
|
1782
|
+
var finalLevel = CalcPercent({
|
|
1783
|
+
value: finalLiter,
|
|
1784
|
+
spec: spec
|
|
1785
|
+
});
|
|
1786
|
+
return /*#__PURE__*/jsx(React.Fragment, {
|
|
1787
|
+
children: /*#__PURE__*/jsxs(Grid, {
|
|
1788
|
+
container: true,
|
|
1789
|
+
columns: {
|
|
1790
|
+
xs: 6,
|
|
1791
|
+
md: 12
|
|
1792
|
+
},
|
|
1793
|
+
children: [/*#__PURE__*/jsxs(Grid, {
|
|
1794
|
+
sx: {
|
|
1795
|
+
px: 2
|
|
1796
|
+
},
|
|
1797
|
+
size: 6,
|
|
1798
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
1799
|
+
textAlign: "left",
|
|
1800
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
1801
|
+
children: "Select Spectrometer"
|
|
1802
|
+
})
|
|
1803
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1804
|
+
sx: {
|
|
1805
|
+
padding: 2,
|
|
1806
|
+
display: "flex",
|
|
1807
|
+
justifyContent: "center"
|
|
1808
|
+
},
|
|
1809
|
+
children: /*#__PURE__*/jsx(SpecSwitch, {
|
|
1810
|
+
setup: boilOff,
|
|
1811
|
+
spec: spec,
|
|
1812
|
+
SetSpec: SetSpec
|
|
1813
|
+
})
|
|
1814
|
+
})]
|
|
1815
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1816
|
+
sx: {
|
|
1817
|
+
px: 2
|
|
1818
|
+
},
|
|
1819
|
+
size: 6,
|
|
1820
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
1821
|
+
textAlign: "left",
|
|
1822
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
1823
|
+
children: "Current status"
|
|
1824
|
+
})
|
|
1825
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1826
|
+
sx: {
|
|
1827
|
+
padding: 2,
|
|
1828
|
+
display: "flex",
|
|
1829
|
+
justifyContent: "center"
|
|
1830
|
+
},
|
|
1831
|
+
children: /*#__PURE__*/jsxs(Typography, {
|
|
1832
|
+
variant: "h4",
|
|
1833
|
+
children: [currLevel, " % (", currLiter, " L)"]
|
|
1834
|
+
})
|
|
1835
|
+
})]
|
|
1836
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1837
|
+
sx: {
|
|
1838
|
+
px: 2
|
|
1839
|
+
},
|
|
1840
|
+
size: 6,
|
|
1841
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
1842
|
+
textAlign: "left",
|
|
1843
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
1844
|
+
children: "Helium fill amount"
|
|
1845
|
+
})
|
|
1846
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1847
|
+
sx: {
|
|
1848
|
+
padding: 2,
|
|
1849
|
+
display: "flex",
|
|
1850
|
+
justifyContent: "center"
|
|
1851
|
+
},
|
|
1852
|
+
children: /*#__PURE__*/jsx(Typography, {
|
|
1853
|
+
variant: "h4",
|
|
1854
|
+
children: /*#__PURE__*/jsx(LiterInput, {
|
|
1855
|
+
error: error,
|
|
1856
|
+
SetError: SetError,
|
|
1857
|
+
limit: amount,
|
|
1858
|
+
SetLimit: SetAmount
|
|
1859
|
+
})
|
|
1860
|
+
})
|
|
1861
|
+
})]
|
|
1862
|
+
}), /*#__PURE__*/jsxs(Grid, {
|
|
1863
|
+
sx: {
|
|
1864
|
+
px: 2
|
|
1865
|
+
},
|
|
1866
|
+
size: 6,
|
|
1867
|
+
children: [/*#__PURE__*/jsx(Divider, {
|
|
1868
|
+
textAlign: "left",
|
|
1869
|
+
children: /*#__PURE__*/jsx("strong", {
|
|
1870
|
+
children: "After filling"
|
|
1871
|
+
})
|
|
1872
|
+
}), /*#__PURE__*/jsx(Grid, {
|
|
1873
|
+
sx: {
|
|
1874
|
+
padding: 2,
|
|
1875
|
+
display: "flex",
|
|
1876
|
+
justifyContent: "center"
|
|
1877
|
+
},
|
|
1878
|
+
children: /*#__PURE__*/jsx(Typography, {
|
|
1879
|
+
variant: "h4",
|
|
1880
|
+
children: /*#__PURE__*/jsxs("em", {
|
|
1881
|
+
style: {
|
|
1882
|
+
color: AppTheme.palette.warning.main
|
|
1883
|
+
},
|
|
1884
|
+
children: ["~ ", finalLevel, " % (", CalcLiters({
|
|
1885
|
+
value: finalLevel,
|
|
1886
|
+
spec: spec
|
|
1887
|
+
}), " L)"]
|
|
1888
|
+
})
|
|
1889
|
+
})
|
|
1890
|
+
})]
|
|
1891
|
+
})]
|
|
1892
|
+
})
|
|
1893
|
+
});
|
|
1894
|
+
}
|
|
1895
|
+
|
|
1896
|
+
function FillTargetPanel() {
|
|
1897
|
+
var context = useContext(HeliumContext);
|
|
1898
|
+
return /*#__PURE__*/jsx(AppCard, {
|
|
1899
|
+
title: "Fill Target",
|
|
1900
|
+
size: context.cardSize,
|
|
1901
|
+
sx: {
|
|
1902
|
+
mb: context.bottomMargin
|
|
1903
|
+
},
|
|
1904
|
+
children: /*#__PURE__*/jsx(FillTarget, {})
|
|
1905
|
+
});
|
|
1906
|
+
}
|
|
16
1907
|
|
|
17
1908
|
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; }
|
|
18
1909
|
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), true).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; }
|