@bbearai/react-native 0.3.6 → 0.3.7
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 +38 -4
- package/dist/index.mjs +38 -4
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -11543,7 +11543,7 @@ var BugBearClient = class {
|
|
|
11543
11543
|
console.error("BugBear: Failed to fetch assignments", error);
|
|
11544
11544
|
return [];
|
|
11545
11545
|
}
|
|
11546
|
-
|
|
11546
|
+
const mapped = (data || []).map((item) => ({
|
|
11547
11547
|
id: item.id,
|
|
11548
11548
|
status: item.status,
|
|
11549
11549
|
startedAt: item.started_at,
|
|
@@ -11576,6 +11576,12 @@ var BugBearClient = class {
|
|
|
11576
11576
|
} : void 0
|
|
11577
11577
|
}
|
|
11578
11578
|
}));
|
|
11579
|
+
mapped.sort((a, b) => {
|
|
11580
|
+
if (a.isVerification && !b.isVerification) return -1;
|
|
11581
|
+
if (!a.isVerification && b.isVerification) return 1;
|
|
11582
|
+
return 0;
|
|
11583
|
+
});
|
|
11584
|
+
return mapped;
|
|
11579
11585
|
} catch (err) {
|
|
11580
11586
|
console.error("BugBear: Error fetching assignments", err);
|
|
11581
11587
|
return [];
|
|
@@ -13344,7 +13350,9 @@ function HomeScreen({ nav }) {
|
|
|
13344
13350
|
refreshAssignments();
|
|
13345
13351
|
refreshThreads();
|
|
13346
13352
|
}, []);
|
|
13347
|
-
const
|
|
13353
|
+
const pendingAssignments = assignments.filter((a) => a.status === "pending" || a.status === "in_progress");
|
|
13354
|
+
const pendingCount = pendingAssignments.length;
|
|
13355
|
+
const retestCount = pendingAssignments.filter((a) => a.isVerification).length;
|
|
13348
13356
|
const completedCount = assignments.filter((a) => a.status === "passed" || a.status === "failed").length;
|
|
13349
13357
|
const totalTests = assignments.length;
|
|
13350
13358
|
return /* @__PURE__ */ import_react3.default.createElement(import_react_native3.View, null, pendingCount > 0 ? /* @__PURE__ */ import_react3.default.createElement(
|
|
@@ -13356,6 +13364,7 @@ function HomeScreen({ nav }) {
|
|
|
13356
13364
|
},
|
|
13357
13365
|
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.heroCount }, pendingCount),
|
|
13358
13366
|
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.heroLabel }, "test", pendingCount !== 1 ? "s" : "", " waiting"),
|
|
13367
|
+
retestCount > 0 && /* @__PURE__ */ import_react3.default.createElement(import_react_native3.View, { style: styles.retestPill }, /* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.retestPillText }, "\u{1F504} ", retestCount, " retest", retestCount !== 1 ? "s" : "")),
|
|
13359
13368
|
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.heroAction }, "Start Testing \u2192")
|
|
13360
13369
|
) : unreadCount > 0 ? /* @__PURE__ */ import_react3.default.createElement(
|
|
13361
13370
|
import_react_native3.TouchableOpacity,
|
|
@@ -13459,6 +13468,22 @@ var styles = import_react_native3.StyleSheet.create({
|
|
|
13459
13468
|
color: colors.blueText,
|
|
13460
13469
|
marginTop: 2
|
|
13461
13470
|
},
|
|
13471
|
+
retestPill: {
|
|
13472
|
+
flexDirection: "row",
|
|
13473
|
+
alignItems: "center",
|
|
13474
|
+
backgroundColor: "#422006",
|
|
13475
|
+
borderWidth: 1,
|
|
13476
|
+
borderColor: "#854d0e",
|
|
13477
|
+
borderRadius: 6,
|
|
13478
|
+
paddingHorizontal: 8,
|
|
13479
|
+
paddingVertical: 3,
|
|
13480
|
+
marginTop: 8
|
|
13481
|
+
},
|
|
13482
|
+
retestPillText: {
|
|
13483
|
+
fontSize: 12,
|
|
13484
|
+
fontWeight: "600",
|
|
13485
|
+
color: "#fbbf24"
|
|
13486
|
+
},
|
|
13462
13487
|
heroAction: {
|
|
13463
13488
|
fontSize: 14,
|
|
13464
13489
|
fontWeight: "600",
|
|
@@ -13669,7 +13694,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
13669
13694
|
const steps = testCase.steps;
|
|
13670
13695
|
const info = templateInfo[template] || templateInfo.steps;
|
|
13671
13696
|
const rubricMode = testCase.track?.rubricMode || "pass_fail";
|
|
13672
|
-
return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.container }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.topRow }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.positionInfo }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.timerBadge }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.TouchableOpacity, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.viewAllLink }, "View All \u2192"))), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.testKey }, testCase.key), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.TouchableOpacity, { onPress: () => setShowSteps(!showSteps), style: styles2.sectionHeader }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { key: idx, style: styles2.step }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.stepNumber }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepNumberText }, step.stepNumber)), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.stepBody }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ import_react4.default.createElement(
|
|
13697
|
+
return /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.container }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.topRow }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.positionInfo }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.timerBadge }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.TouchableOpacity, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.viewAllLink }, "View All \u2192"))), displayedAssignment.isVerification && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.retestBanner }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.retestIcon }, "\u{1F504}"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.retestLabel }, "Retest"), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.retestSub }, "\u2014 Verify bug fix")), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.testKey }, testCase.key), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.TouchableOpacity, { onPress: () => setShowSteps(!showSteps), style: styles2.sectionHeader }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { key: idx, style: styles2.step }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.stepNumber }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepNumberText }, step.stepNumber)), /* @__PURE__ */ import_react4.default.createElement(import_react_native4.View, { style: styles2.stepBody }, /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ import_react4.default.createElement(import_react_native4.Text, { style: styles2.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ import_react4.default.createElement(import_react4.default.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ import_react4.default.createElement(
|
|
13673
13698
|
import_react_native4.TouchableOpacity,
|
|
13674
13699
|
{
|
|
13675
13700
|
key: idx,
|
|
@@ -13753,6 +13778,10 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
13753
13778
|
}
|
|
13754
13779
|
var styles2 = import_react_native4.StyleSheet.create({
|
|
13755
13780
|
container: { paddingBottom: 16 },
|
|
13781
|
+
retestBanner: { flexDirection: "row", alignItems: "center", gap: 6, backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 8, paddingVertical: 6, paddingHorizontal: 10, marginBottom: 10 },
|
|
13782
|
+
retestIcon: { fontSize: 14 },
|
|
13783
|
+
retestLabel: { fontSize: 13, fontWeight: "600", color: "#fbbf24" },
|
|
13784
|
+
retestSub: { fontSize: 12, color: "#d97706" },
|
|
13756
13785
|
topRow: { flexDirection: "row", justifyContent: "space-between", alignItems: "center", marginBottom: 12 },
|
|
13757
13786
|
positionInfo: { flexDirection: "row", alignItems: "center", gap: 8 },
|
|
13758
13787
|
positionText: { fontSize: 13, color: colors.textMuted },
|
|
@@ -13868,6 +13897,8 @@ function TestListScreen({ nav }) {
|
|
|
13868
13897
|
const statusOrder = { in_progress: 0, pending: 1, failed: 2, skipped: 3, passed: 4 };
|
|
13869
13898
|
for (const folder of groups.values()) {
|
|
13870
13899
|
folder.assignments.sort((a, b) => {
|
|
13900
|
+
if (a.isVerification && !b.isVerification) return -1;
|
|
13901
|
+
if (!a.isVerification && b.isVerification) return 1;
|
|
13871
13902
|
const sd = (statusOrder[a.status] ?? 5) - (statusOrder[b.status] ?? 5);
|
|
13872
13903
|
if (sd !== 0) return sd;
|
|
13873
13904
|
return (priorityOrder[a.testCase.priority] ?? 4) - (priorityOrder[b.testCase.priority] ?? 4);
|
|
@@ -13909,7 +13940,7 @@ function TestListScreen({ nav }) {
|
|
|
13909
13940
|
onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
|
|
13910
13941
|
},
|
|
13911
13942
|
/* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testBadge }, badge.icon),
|
|
13912
|
-
/* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.testInfo }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testMeta }, assignment.testCase.key, " \xB7 ", assignment.testCase.priority))
|
|
13943
|
+
/* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.testInfo }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.testMetaRow }, assignment.isVerification && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.retestTag }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.retestTagText }, "Retest")), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testMeta }, assignment.testCase.key, " \xB7 ", assignment.testCase.priority)))
|
|
13913
13944
|
);
|
|
13914
13945
|
}));
|
|
13915
13946
|
}), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { style: styles3.refreshBtn, onPress: refreshAssignments }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.refreshText }, "\u21BB Refresh")));
|
|
@@ -13932,6 +13963,9 @@ var styles3 = import_react_native5.StyleSheet.create({
|
|
|
13932
13963
|
testBadge: { fontSize: 16, marginRight: 10, width: 20 },
|
|
13933
13964
|
testInfo: { flex: 1 },
|
|
13934
13965
|
testTitle: { fontSize: 14, color: colors.textPrimary, marginBottom: 2 },
|
|
13966
|
+
testMetaRow: { flexDirection: "row", alignItems: "center", gap: 6 },
|
|
13967
|
+
retestTag: { backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 4, paddingHorizontal: 5, paddingVertical: 1 },
|
|
13968
|
+
retestTagText: { fontSize: 10, fontWeight: "600", color: "#fbbf24" },
|
|
13935
13969
|
testMeta: { fontSize: 11, color: colors.textDim },
|
|
13936
13970
|
refreshBtn: { alignItems: "center", paddingVertical: 12 },
|
|
13937
13971
|
refreshText: { fontSize: 13, color: colors.blue }
|
package/dist/index.mjs
CHANGED
|
@@ -11512,7 +11512,7 @@ var BugBearClient = class {
|
|
|
11512
11512
|
console.error("BugBear: Failed to fetch assignments", error);
|
|
11513
11513
|
return [];
|
|
11514
11514
|
}
|
|
11515
|
-
|
|
11515
|
+
const mapped = (data || []).map((item) => ({
|
|
11516
11516
|
id: item.id,
|
|
11517
11517
|
status: item.status,
|
|
11518
11518
|
startedAt: item.started_at,
|
|
@@ -11545,6 +11545,12 @@ var BugBearClient = class {
|
|
|
11545
11545
|
} : void 0
|
|
11546
11546
|
}
|
|
11547
11547
|
}));
|
|
11548
|
+
mapped.sort((a, b) => {
|
|
11549
|
+
if (a.isVerification && !b.isVerification) return -1;
|
|
11550
|
+
if (!a.isVerification && b.isVerification) return 1;
|
|
11551
|
+
return 0;
|
|
11552
|
+
});
|
|
11553
|
+
return mapped;
|
|
11548
11554
|
} catch (err) {
|
|
11549
11555
|
console.error("BugBear: Error fetching assignments", err);
|
|
11550
11556
|
return [];
|
|
@@ -13327,7 +13333,9 @@ function HomeScreen({ nav }) {
|
|
|
13327
13333
|
refreshAssignments();
|
|
13328
13334
|
refreshThreads();
|
|
13329
13335
|
}, []);
|
|
13330
|
-
const
|
|
13336
|
+
const pendingAssignments = assignments.filter((a) => a.status === "pending" || a.status === "in_progress");
|
|
13337
|
+
const pendingCount = pendingAssignments.length;
|
|
13338
|
+
const retestCount = pendingAssignments.filter((a) => a.isVerification).length;
|
|
13331
13339
|
const completedCount = assignments.filter((a) => a.status === "passed" || a.status === "failed").length;
|
|
13332
13340
|
const totalTests = assignments.length;
|
|
13333
13341
|
return /* @__PURE__ */ React2.createElement(View, null, pendingCount > 0 ? /* @__PURE__ */ React2.createElement(
|
|
@@ -13339,6 +13347,7 @@ function HomeScreen({ nav }) {
|
|
|
13339
13347
|
},
|
|
13340
13348
|
/* @__PURE__ */ React2.createElement(Text, { style: styles.heroCount }, pendingCount),
|
|
13341
13349
|
/* @__PURE__ */ React2.createElement(Text, { style: styles.heroLabel }, "test", pendingCount !== 1 ? "s" : "", " waiting"),
|
|
13350
|
+
retestCount > 0 && /* @__PURE__ */ React2.createElement(View, { style: styles.retestPill }, /* @__PURE__ */ React2.createElement(Text, { style: styles.retestPillText }, "\u{1F504} ", retestCount, " retest", retestCount !== 1 ? "s" : "")),
|
|
13342
13351
|
/* @__PURE__ */ React2.createElement(Text, { style: styles.heroAction }, "Start Testing \u2192")
|
|
13343
13352
|
) : unreadCount > 0 ? /* @__PURE__ */ React2.createElement(
|
|
13344
13353
|
TouchableOpacity,
|
|
@@ -13442,6 +13451,22 @@ var styles = StyleSheet2.create({
|
|
|
13442
13451
|
color: colors.blueText,
|
|
13443
13452
|
marginTop: 2
|
|
13444
13453
|
},
|
|
13454
|
+
retestPill: {
|
|
13455
|
+
flexDirection: "row",
|
|
13456
|
+
alignItems: "center",
|
|
13457
|
+
backgroundColor: "#422006",
|
|
13458
|
+
borderWidth: 1,
|
|
13459
|
+
borderColor: "#854d0e",
|
|
13460
|
+
borderRadius: 6,
|
|
13461
|
+
paddingHorizontal: 8,
|
|
13462
|
+
paddingVertical: 3,
|
|
13463
|
+
marginTop: 8
|
|
13464
|
+
},
|
|
13465
|
+
retestPillText: {
|
|
13466
|
+
fontSize: 12,
|
|
13467
|
+
fontWeight: "600",
|
|
13468
|
+
color: "#fbbf24"
|
|
13469
|
+
},
|
|
13445
13470
|
heroAction: {
|
|
13446
13471
|
fontSize: 14,
|
|
13447
13472
|
fontWeight: "600",
|
|
@@ -13652,7 +13677,7 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
13652
13677
|
const steps = testCase.steps;
|
|
13653
13678
|
const info = templateInfo[template] || templateInfo.steps;
|
|
13654
13679
|
const rubricMode = testCase.track?.rubricMode || "pass_fail";
|
|
13655
|
-
return /* @__PURE__ */ React3.createElement(View2, { style: styles2.container }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.topRow }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.positionInfo }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ React3.createElement(View2, { style: styles2.timerBadge }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ React3.createElement(TouchableOpacity2, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.viewAllLink }, "View All \u2192"))), /* @__PURE__ */ React3.createElement(Text2, { style: styles2.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ React3.createElement(Text2, { style: styles2.testKey }, testCase.key), /* @__PURE__ */ React3.createElement(TouchableOpacity2, { onPress: () => setShowSteps(!showSteps), style: styles2.sectionHeader }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ React3.createElement(View2, { style: styles2.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ React3.createElement(View2, { key: idx, style: styles2.step }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.stepNumber }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepNumberText }, step.stepNumber)), /* @__PURE__ */ React3.createElement(View2, { style: styles2.stepBody }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ React3.createElement(React3.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ React3.createElement(
|
|
13680
|
+
return /* @__PURE__ */ React3.createElement(View2, { style: styles2.container }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.topRow }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.positionInfo }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.positionText }, "Test ", currentIndex + 1, " of ", allTests.length), displayedAssignment.status === "in_progress" && assignmentElapsedTime > 0 && /* @__PURE__ */ React3.createElement(View2, { style: styles2.timerBadge }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.timerText }, formatElapsedTime(assignmentElapsedTime)))), /* @__PURE__ */ React3.createElement(TouchableOpacity2, { onPress: () => nav.push({ name: "TEST_LIST" }) }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.viewAllLink }, "View All \u2192"))), displayedAssignment.isVerification && /* @__PURE__ */ React3.createElement(View2, { style: styles2.retestBanner }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.retestIcon }, "\u{1F504}"), /* @__PURE__ */ React3.createElement(Text2, { style: styles2.retestLabel }, "Retest"), /* @__PURE__ */ React3.createElement(Text2, { style: styles2.retestSub }, "\u2014 Verify bug fix")), /* @__PURE__ */ React3.createElement(Text2, { style: styles2.testTitle }, testCase.title), testCase.key && /* @__PURE__ */ React3.createElement(Text2, { style: styles2.testKey }, testCase.key), /* @__PURE__ */ React3.createElement(TouchableOpacity2, { onPress: () => setShowSteps(!showSteps), style: styles2.sectionHeader }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.sectionHeaderText }, showSteps ? "\u25BC" : "\u25B6", " ", info.icon, " ", template === "freeform" ? "Instructions" : `${steps.length} ${template === "checklist" ? "items" : template === "rubric" ? "criteria" : "steps"}`)), showSteps && /* @__PURE__ */ React3.createElement(View2, { style: styles2.templateContent }, template === "steps" && steps.map((step, idx) => /* @__PURE__ */ React3.createElement(View2, { key: idx, style: styles2.step }, /* @__PURE__ */ React3.createElement(View2, { style: styles2.stepNumber }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepNumberText }, step.stepNumber)), /* @__PURE__ */ React3.createElement(View2, { style: styles2.stepBody }, /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepAction }, step.action), step.expectedResult && /* @__PURE__ */ React3.createElement(Text2, { style: styles2.stepExpected }, "\u2192 ", step.expectedResult)))), template === "checklist" && /* @__PURE__ */ React3.createElement(React3.Fragment, null, steps.map((step, idx) => /* @__PURE__ */ React3.createElement(
|
|
13656
13681
|
TouchableOpacity2,
|
|
13657
13682
|
{
|
|
13658
13683
|
key: idx,
|
|
@@ -13736,6 +13761,10 @@ function TestDetailScreen({ testId, nav }) {
|
|
|
13736
13761
|
}
|
|
13737
13762
|
var styles2 = StyleSheet3.create({
|
|
13738
13763
|
container: { paddingBottom: 16 },
|
|
13764
|
+
retestBanner: { flexDirection: "row", alignItems: "center", gap: 6, backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 8, paddingVertical: 6, paddingHorizontal: 10, marginBottom: 10 },
|
|
13765
|
+
retestIcon: { fontSize: 14 },
|
|
13766
|
+
retestLabel: { fontSize: 13, fontWeight: "600", color: "#fbbf24" },
|
|
13767
|
+
retestSub: { fontSize: 12, color: "#d97706" },
|
|
13739
13768
|
topRow: { flexDirection: "row", justifyContent: "space-between", alignItems: "center", marginBottom: 12 },
|
|
13740
13769
|
positionInfo: { flexDirection: "row", alignItems: "center", gap: 8 },
|
|
13741
13770
|
positionText: { fontSize: 13, color: colors.textMuted },
|
|
@@ -13851,6 +13880,8 @@ function TestListScreen({ nav }) {
|
|
|
13851
13880
|
const statusOrder = { in_progress: 0, pending: 1, failed: 2, skipped: 3, passed: 4 };
|
|
13852
13881
|
for (const folder of groups.values()) {
|
|
13853
13882
|
folder.assignments.sort((a, b) => {
|
|
13883
|
+
if (a.isVerification && !b.isVerification) return -1;
|
|
13884
|
+
if (!a.isVerification && b.isVerification) return 1;
|
|
13854
13885
|
const sd = (statusOrder[a.status] ?? 5) - (statusOrder[b.status] ?? 5);
|
|
13855
13886
|
if (sd !== 0) return sd;
|
|
13856
13887
|
return (priorityOrder[a.testCase.priority] ?? 4) - (priorityOrder[b.testCase.priority] ?? 4);
|
|
@@ -13892,7 +13923,7 @@ function TestListScreen({ nav }) {
|
|
|
13892
13923
|
onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
|
|
13893
13924
|
},
|
|
13894
13925
|
/* @__PURE__ */ React4.createElement(Text3, { style: styles3.testBadge }, badge.icon),
|
|
13895
|
-
/* @__PURE__ */ React4.createElement(View3, { style: styles3.testInfo }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testMeta }, assignment.testCase.key, " \xB7 ", assignment.testCase.priority))
|
|
13926
|
+
/* @__PURE__ */ React4.createElement(View3, { style: styles3.testInfo }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testTitle, numberOfLines: 1 }, assignment.testCase.title), /* @__PURE__ */ React4.createElement(View3, { style: styles3.testMetaRow }, assignment.isVerification && /* @__PURE__ */ React4.createElement(View3, { style: styles3.retestTag }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.retestTagText }, "Retest")), /* @__PURE__ */ React4.createElement(Text3, { style: styles3.testMeta }, assignment.testCase.key, " \xB7 ", assignment.testCase.priority)))
|
|
13896
13927
|
);
|
|
13897
13928
|
}));
|
|
13898
13929
|
}), /* @__PURE__ */ React4.createElement(TouchableOpacity3, { style: styles3.refreshBtn, onPress: refreshAssignments }, /* @__PURE__ */ React4.createElement(Text3, { style: styles3.refreshText }, "\u21BB Refresh")));
|
|
@@ -13915,6 +13946,9 @@ var styles3 = StyleSheet4.create({
|
|
|
13915
13946
|
testBadge: { fontSize: 16, marginRight: 10, width: 20 },
|
|
13916
13947
|
testInfo: { flex: 1 },
|
|
13917
13948
|
testTitle: { fontSize: 14, color: colors.textPrimary, marginBottom: 2 },
|
|
13949
|
+
testMetaRow: { flexDirection: "row", alignItems: "center", gap: 6 },
|
|
13950
|
+
retestTag: { backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 4, paddingHorizontal: 5, paddingVertical: 1 },
|
|
13951
|
+
retestTagText: { fontSize: 10, fontWeight: "600", color: "#fbbf24" },
|
|
13918
13952
|
testMeta: { fontSize: 11, color: colors.textDim },
|
|
13919
13953
|
refreshBtn: { alignItems: "center", paddingVertical: 12 },
|
|
13920
13954
|
refreshText: { fontSize: 13, color: colors.blue }
|