@@ -5,10 +5,28 @@ import { Tooltip } from '../Tooltip';
5
5
import {
6
6
IngredientWithStringOrNumberKey ,
7
7
PipettingLoss ,
8
+ PipettingLossFactorWithMinimum ,
8
9
PipettingLossTableColumn ,
9
10
PipettingLossTableColumnArgs ,
10
11
} from './types' ;
11
12
13
+ type PipettingLosses = {
14
+ factorLoss : number ;
15
+ minPositionsLoss : number ;
16
+ } ;
17
+
18
+ function calculatePipettingLosses (
19
+ count : number ,
20
+ pipettingLoss : PipettingLossFactorWithMinimum ,
21
+ volume = 1 ,
22
+ ) : PipettingLosses {
23
+ const baseVolume = volume * count ;
24
+ return {
25
+ factorLoss : baseVolume * pipettingLoss . factor ,
26
+ minPositionsLoss : volume * pipettingLoss . minPositions ,
27
+ } ;
28
+ }
29
+
12
30
function pipettingLossTitle (
13
31
pipettingLoss : PipettingLoss ,
14
32
count : number ,
@@ -20,8 +38,10 @@ function pipettingLossTitle(
20
38
case 'factor' :
21
39
return `${ pipettingLoss . factor * 100 } %` ;
22
40
case 'factorWithMinimum' : {
23
- const factorLoss = count * pipettingLoss . factor ;
24
- const minPositionsLoss = pipettingLoss . minPositions ;
41
+ const { factorLoss, minPositionsLoss } = calculatePipettingLosses (
42
+ count ,
43
+ pipettingLoss ,
44
+ ) ;
25
45
return factorLoss > minPositionsLoss
26
46
? `${ ( pipettingLoss . factor * 100 ) . toFixed ( 0 ) } %`
27
47
: `${ pipettingLoss . minPositions } x` ;
@@ -45,8 +65,11 @@ function totalVolume(
45
65
) . toFixed ( 1 ) ;
46
66
case 'factorWithMinimum' : {
47
67
const baseVolume = record . volume * args . count ;
48
- const factorLoss = baseVolume * args . pipettingLoss . factor ;
49
- const minPositionsLoss = record . volume * args . pipettingLoss . minPositions ;
68
+ const { factorLoss, minPositionsLoss } = calculatePipettingLosses (
69
+ args . count ,
70
+ args . pipettingLoss ,
71
+ record . volume ,
72
+ ) ;
50
73
const pipettingLoss = Math . max ( factorLoss , minPositionsLoss ) ;
51
74
return ( baseVolume + pipettingLoss ) . toFixed ( 1 ) ;
52
75
}
0 commit comments