@openstax/ts-utils 1.37.1 → 1.37.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -87,15 +87,25 @@ const resolveAttemptInfo = (statements, options) => {
87
87
  return p.completed.result !== undefined &&
88
88
  typeof ((_a = p.completed.result.score) === null || _a === void 0 ? void 0 : _a.scaled) === 'number';
89
89
  };
90
- // Filter to only scored pairs with scaled.
91
- const scoredPairs = completedPairs.filter(hasScaledScore);
92
- const bestPair = scoredPairs.reduce((best, pair) => {
90
+ // Find best scored pair
91
+ const bestScoredPair = completedPairs
92
+ .filter(hasScaledScore)
93
+ .reduce((best, pair) => {
93
94
  if (!best)
94
95
  return pair;
95
- return pair.completed.result.score.scaled > best.completed.result.score.scaled
96
- ? pair
97
- : best;
96
+ return pair.completed.result.score.scaled > best.completed.result.score.scaled ? pair : best;
98
97
  }, undefined);
98
+ // if no scored pair get newest completed without a score
99
+ const bestDefaultPair = !bestScoredPair && completedPairs.length > 0
100
+ ? completedPairs.reduce((best, pair) => {
101
+ if (!best)
102
+ return pair;
103
+ return (0, isAfter_1.default)((0, parseISO_1.default)(pair.attempt.timestamp), (0, parseISO_1.default)(best.attempt.timestamp))
104
+ ? pair
105
+ : best;
106
+ }, undefined)
107
+ : undefined;
108
+ const bestPair = bestScoredPair !== null && bestScoredPair !== void 0 ? bestScoredPair : bestDefaultPair;
99
109
  return {
100
110
  attempts: attempts.length,
101
111
  bestCompletedAttempt: bestPair === null || bestPair === void 0 ? void 0 : bestPair.attempt,