@bbearai/react-native 0.5.2 → 0.5.3
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.d.mts +3 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.js +480 -58
- package/dist/index.mjs +466 -44
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -13119,6 +13119,10 @@ var BugBearContext = (0, import_react.createContext)({
|
|
|
13119
13119
|
updateTesterProfile: async () => ({ success: false }),
|
|
13120
13120
|
refreshTesterInfo: async () => {
|
|
13121
13121
|
},
|
|
13122
|
+
// Issue tracking
|
|
13123
|
+
issueCounts: { open: 0, done: 0, reopened: 0 },
|
|
13124
|
+
refreshIssueCounts: async () => {
|
|
13125
|
+
},
|
|
13122
13126
|
dashboardUrl: void 0,
|
|
13123
13127
|
onError: void 0
|
|
13124
13128
|
});
|
|
@@ -13134,6 +13138,7 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
|
|
|
13134
13138
|
const [isLoading, setIsLoading] = (0, import_react.useState)(true);
|
|
13135
13139
|
const [threads, setThreads] = (0, import_react.useState)([]);
|
|
13136
13140
|
const [unreadCount, setUnreadCount] = (0, import_react.useState)(0);
|
|
13141
|
+
const [issueCounts, setIssueCounts] = (0, import_react.useState)({ open: 0, done: 0, reopened: 0 });
|
|
13137
13142
|
const [activeSession, setActiveSession] = (0, import_react.useState)(null);
|
|
13138
13143
|
const [sessionFindings, setSessionFindings] = (0, import_react.useState)([]);
|
|
13139
13144
|
const hasInitialized = (0, import_react.useRef)(false);
|
|
@@ -13240,6 +13245,11 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
|
|
|
13240
13245
|
if (!client) return null;
|
|
13241
13246
|
return client.uploadImageFromUri(uri, void 0, bucket);
|
|
13242
13247
|
}, [client]);
|
|
13248
|
+
const refreshIssueCounts = (0, import_react.useCallback)(async () => {
|
|
13249
|
+
if (!client) return;
|
|
13250
|
+
const counts = await client.getIssueCounts();
|
|
13251
|
+
setIssueCounts(counts);
|
|
13252
|
+
}, [client]);
|
|
13243
13253
|
const initializeBugBear = (0, import_react.useCallback)(async (bugBearClient) => {
|
|
13244
13254
|
setIsLoading(true);
|
|
13245
13255
|
try {
|
|
@@ -13252,16 +13262,18 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
|
|
|
13252
13262
|
setTesterInfo(info);
|
|
13253
13263
|
setIsTester(!!info);
|
|
13254
13264
|
if (info && qaEnabled) {
|
|
13255
|
-
const [newAssignments, newThreads, session] = await Promise.all([
|
|
13265
|
+
const [newAssignments, newThreads, session, counts] = await Promise.all([
|
|
13256
13266
|
bugBearClient.getAssignedTests(),
|
|
13257
13267
|
bugBearClient.getThreadsForTester(),
|
|
13258
|
-
bugBearClient.getActiveSession()
|
|
13268
|
+
bugBearClient.getActiveSession(),
|
|
13269
|
+
bugBearClient.getIssueCounts()
|
|
13259
13270
|
]);
|
|
13260
13271
|
setAssignments(newAssignments);
|
|
13261
13272
|
setThreads(newThreads);
|
|
13262
13273
|
const totalUnread = newThreads.reduce((sum, t) => sum + t.unreadCount, 0);
|
|
13263
13274
|
setUnreadCount(totalUnread);
|
|
13264
13275
|
setActiveSession(session);
|
|
13276
|
+
setIssueCounts(counts);
|
|
13265
13277
|
if (session) {
|
|
13266
13278
|
const findings = await bugBearClient.getSessionFindings(session.id);
|
|
13267
13279
|
setSessionFindings(findings);
|
|
@@ -13329,6 +13341,9 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
|
|
|
13329
13341
|
refreshTesterStatus,
|
|
13330
13342
|
updateTesterProfile,
|
|
13331
13343
|
refreshTesterInfo,
|
|
13344
|
+
// Issue tracking
|
|
13345
|
+
issueCounts,
|
|
13346
|
+
refreshIssueCounts,
|
|
13332
13347
|
dashboardUrl: config.dashboardUrl,
|
|
13333
13348
|
onError: config.onError
|
|
13334
13349
|
}
|
|
@@ -13338,8 +13353,8 @@ function BugBearProvider({ config, children, appVersion, enabled = true }) {
|
|
|
13338
13353
|
}
|
|
13339
13354
|
|
|
13340
13355
|
// src/BugBearButton.tsx
|
|
13341
|
-
var
|
|
13342
|
-
var
|
|
13356
|
+
var import_react18 = __toESM(require("react"));
|
|
13357
|
+
var import_react_native17 = require("react-native");
|
|
13343
13358
|
|
|
13344
13359
|
// src/widget/logo.ts
|
|
13345
13360
|
var BUGBEAR_LOGO_BASE64 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAYAAADimHc4AAAAAXNSR0IArs4c6QAAAJhlWElmTU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAAAARgEoAAMAAAABAAIAAIdpAAQAAAABAAAATgAAAAAAAABIAAAAAQAAAEgAAAABAASQBAACAAAAFAAAAISgAQADAAAAAQABAACgAgAEAAAAAQAAAGCgAwAEAAAAAQAAAGAAAAAAMjAyNjowMToyNCAxNjoyMTozOABbbVCuAAAACXBIWXMAAAsTAAALEwEAmpwYAAACo2lUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iWE1QIENvcmUgNi4wLjAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczpJcHRjNHhtcEV4dD0iaHR0cDovL2lwdGMub3JnL3N0ZC9JcHRjNHhtcEV4dC8yMDA4LTAyLTI5LyIKICAgICAgICAgICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIj4KICAgICAgICAgPElwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPmh0dHA6Ly9jdi5pcHRjLm9yZy9uZXdzY29kZXMvZGlnaXRhbHNvdXJjZXR5cGUvdHJhaW5lZEFsZ29yaXRobWljTWVkaWE8L0lwdGM0eG1wRXh0OkRpZ2l0YWxTb3VyY2VUeXBlPgogICAgICAgICA8SXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPmZjNzJlN2Q2LTYyYTEtNDE1ZS04MjY5LWM2NjA4MjY0OWRiMDwvSXB0YzR4bXBFeHQ6RGlnSW1hZ2VHVUlEPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAyNi0wMS0yNFQxNjoyMTozODwveG1wOkNyZWF0ZURhdGU+CiAgICAgIDwvcmRmOkRlc2NyaXB0aW9uPgogICA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgri4oBIAAAq4ElEQVR4Ae19B3gd1bXuPzOnnyPpqFfLstxkuQM22MZgmsGAacFAILQb4F4ghRJqCp0ESEIgkAAJCRACOBhw6MTEFhgwxrhhIxdZltWt3s7R6bPfv+ZIhst79/ueLTlw82nj0Wkze/Zea+1V/rX2AIy0EQqMUGCEAiMUGKHACAVGKDBCgREKjFBghAIjFBihwAgFRigwQoERCoxQYIQCIxT4BlJAKWgLFiyw5ebmetPT09PkyMjISC0pKXHdfvvtugK0b+Cw/8chfaMHK8RM8fmy4/H4lLhSM8x4fIIJjIOpcqHg5azsPGQO/BphHkFoWqNuaLsMw9hh0/WNDodjR09PTxd/+0a2byQDnCnOiWbUXBSPm4tUQs0AVM4g9dxODaluwMNXF8mvawoJkj8SA/ojQG9IIRQdPNt6bdQM41Ob3fa6z+3+R2dnZ72m8aJvSPvGMKCgoMDT3t5+asxMXKzi5tGkj9dmABPyNcwao2H2GGDKKIXiLCDdo8Fpo/jzIHNAtWQxIRzX0BkE6tqBrQ3AJ7uBdbsVdu4lkxJyrtZtGPq7Npfx5JxZc96tqKiIy7dfZ/vaGSC6nFJ5QSyR+B5Vy1QhxqElGs48TMMplP2powCDmr29B6huA3a1aqjtANp6NQTCJuKUfruRXBXZaQqjMjWM43oZm62QmQbE4zq21AGvbwJeWqewuVa0FVlhM9a67PaHysvLl61fv57r5+tpXysDDIfjrEQs/jOK8HSHXcPpM3VceazCgkkmopTYD6t0vLNFw+odJnY2K3QE/v81R1aKhokFOo6aqOHk6cCc8bzWVHj3c+CxVTre2GQiFqdFt+mrPV7XnYHuwD+/SarpoIqDy+UqpV5+kTdRMumzDjPU+jt0pZ7T1M5f6uqWxYaakG85NELxgYOf7Q4Fj08hNUNp/iyl8VVP8Sff+ynyfA+3V8HG82Dp+eS1vMfkUbq641u62vMb3ucFQ318u00tnmkMnKcn7E774zk5ObkHdeL/j87/5SuAXsnZ0Xj8IZhmwZQiHb84h6pmlsLWGuCBN3W89KmJIFWL1QwqebcXmtsHuGh5bQ4gFoEK9AIhKnuTmsM0oeWXQLnoFClex88w49BE6UfFKndChfv3Td3v1XHuHB3Xn2hifCGw/BMdt/xNYXuTCd1m7Ezxeq+m1/Tuvgv+jd4Yus12JyUzIVJ/9fE2FXhCV52/19U1i2zK6xSJT0q75vYoLbtQYfREhTHlCmMnK23MJKWlU8oHzsnwu6g/KOVycCUgI9e6RisYo7SSiUorLOVqSd13/n9bEewj1a2pm7jSev+gqZ4/6Oq/jrPxXOlPDzndzh8qpf7lwnnweF1U5NYN/RmZYKZPV3+9yrDUzfJrbGpsrqiBATUj6iOvOEl0IXhWHpkwwTo0D3/jeWXjstRLjy5Ux88t+OI6fi9M1XX2w1fN4eRvuvI4DfUfS8rU334zX334l6PUO0/MUffdMF0dOTufvydV1KQiXb19E8ez1FB//k+bSvcmVZ/T6XxIAr6DR5R/Vc/0cjRDe0WINz7PUOvu0lXiL5r60ck2EmxA6u1OpeUUkfCTrEMrLVcaJVqu0VxuHh7r/eITxqnWisVq92OjVGaaU1149hT1zAML1BoS9/n7pqtZ5SnWeXLdZBJ2zR+mKrXmcKXeyFPqlVSllqcptaJIxT84VL308Bw1tiTdOp9elPrpWSIUvOYOQ43JSdoGh8vxzKJFi5wHk1QHdZmNGzfOWVNT81wikThrVqmBF78PpNKGXvx7Ha9tsBxzhrppUOn0G20UNtHnGoeUiEM17aEP+YV3uPDIYrx0x1h469fQx1foHXci5k0MALXb8btXu3Hv8ggaO5N9FmXqqPiZHSW5bnQ19cBF04GEAlcIxKxo9Lgc2emoUaU4/64mfLy+yaLxkiMM/OlyE02ddIMf0lDZYMLhsj8994i5lx2smOGgMUBwmTvvuutx0zQv06gZhAGZVMlVnOuulqSRpQcDMyufFCFlTCEeBVLe08gaHY1YNCsVr6/tRVlJGlbePwZZ3VsRi8ZhS/XBkZGCxk3NuGmZDSvqXcjP8yIcU6hv7EOuN4ynLzMw3m6iizzqYiDWTTvcm9CQR6GfUMJgjgssbtrRnjUd86+rQiMZJe2oSTqW/YAM7tdw6i81bG824XQ7Hgz3h68XNWedNIx/DhoDbDbbrfFE4h4rTB0YsM1uh/j7URKRMAO/5e1dHmjpWV94McKA1iYUp4Tx5nXpuOQ3rbjuuyU4p6QBkTC9Gl1Lwg9KR3V7DvZ683HoWB3pqXa6+Rp2ksF3P9uE5f+sx5WzNSzKNrGqQcPT28mMiAYfbe25ZRquPhY0L0BHLAV3vuvGE8tbOByOh2H13AkGXrueK6FLx8L7FJq7FHw+79WBQOB3w0h7q6uDwgC6mudEo9FneQd7yahUfOe0Uhw/JwfFeS5GrSY6emJYu7kNS1+twsr1fcmBpGUkVZHIWGMdjiwz8colOvbUxeDPtSHDEYKbwZUykwwQHMKeXwyjdy86a4NoIf3e3g68ulNHVbcNjR1UX5zdfLq6H9PFPDY/A4sK/WiPxPFsdSt+cFgYly7S8Wa1gWtfSKC1JwFNxhAJEdYLYeE0Ha9er1BRqeOMX0tgqPX7/f7jGbWvsQY8TH+ItgxvI/HPJ/GfYq+Oqy+ahmd/MROLZ8dR4miCP1KLlEgT8p1dOHSaAxefWoBpRSbWVobRTRBHE3+9l8BlPITZE2w4sTQBm6yWQAKp2RROaikbFbq4+wL+mP1d6G6No6ndg5veceGRj6II6U40d8Zw6SQN3znEjj9uimNhQSauL89Hjs+JsSkuTErxoLI3gPKMOFx+A799l5AQDYRGlcgAz4oxqpvi2NtD5pxiwsZV+e5W005UdnZpaelfyQQuxeFpw8oAj8czKxKJLKN343ngljm4+7t+uJo+RbRmF2JtHUj09iHWHUR3XS96atphi/dh2oxsLJoax8rNMbRxXlk+Ez8604NbznDwvCgSUfEsNdTXiwGlCskwoMgUk6oioRvo69GQku7G/GNKaFwNjCEWdMWZY/CPLWH0tIewp8/AjVMKkEObkZmfCXeaFy4ae7sWQboviFZiRS+so/FnwKcyGQizT83JoK+/Dxt2J5CbauCaRSY+3mUQDonnhkIhGxmxYnjIz9sNV0clTIhwcL9lAOO7/vIZuP4MhfCm9xBpbIMZlsiUn3sVAp2cLAng0E1EWvsQ3LEbE/39ePwcHX5CzKfPcODHR8WQr/UiGk6gjoTvoH0sKNaRkkk9Hxr0jKiOQiY21Tpw5oP9uOqubTCiJHhbDIm2Pfj9TWOwNubHKKcdo9M88GenwbDrsBNG9ef4ke4yQAwPNfR4rCZEF51FvIhWF3SDra9vZZS8jTbkwQsU/B4d4Ujke1lZWYckLxr632FbAf39/WfR3bxm2qRcPHtTNsxtn5BYcU6a86HkbqYEvbmJS3kzoeJdxO+7NRgEw9yOBD0bwje9CZgBDRU7EjhxTAJpmYrf6yS8Bg/DAJcLSCHaaYVsVAliq3W66xOpqtriduyqi6PcFkJjSwxvb0vgRws6cfoJE7BiC79nAmF0rt+CrGU10TNDf38dMjKieIWA3+Z6rrJMusL0UcVjs/4JQxIxhAMhC4G99mQKEMdTsc20c54FXAUv3HHHHUPmwLAxgCO/nbq5/J4rRmFaYgeizIrYHZyOZuCO13R8/8UECaNjXaOOt/eYPBQiQQ2FFLogYZ1gSIOd9q8ppGPRTOJqqSS4HISBfHx1kAEW8QemLA5LLKqhqTqOYjJib9yGm8/UsJCoZzZtRbDXxLyyTkw7ohx3vt6M2Vmp8FDke6kC+3rbYRiNiHsM3LcygQA8gD+T/ZMRX+pfc/L7YC+qmxMoyzdw4TyFpWs1tPeZ4x5+6KFV4XC4bqgcGBYGZGdn+4LB/ruz0+3+86Yl0FLbh7HFNJh0GW9+UcMj7+i4dFw+rhifgzOKM7AgLw2SPHluZxhdJPwUxgd9dIbi/eICEkaeKBkv6ni6lXuJ+1Mr0+kR2Rwkj3iMmoX1NzcSc+s3kWZXKKJBzyF6UUZ1dfPLGqHsBM6Z2YeMsaW494XtmEFG9Qf6YOq1SM+I4c/bDayuYq+5BfTXHBYthbHJ2/CNwTvLUusPYFuzhquO50qlsX77M6VzaKnxWOzFoa6CYbEBRA9PVMosKWAC5Ml3++DOoq7lZKuov5//ELhtZhFOL/ajMN3DQMiLsiwfrpmUj++V5eLlnQov79Jgo/RJWjHbT2KSISu2GTjhVxqm/kThmmUGmSFskJb8y9OpqknsqWQYXcYT55pw854S8XbGDdRrLvzlY2DBT7pwypgWTDkyG09V7UZmVi186WG8WGfHU2tomzKyGYNQ0kX381+y/+Q9rBjGx0lRHUlU/NwaHZfMJ6Np6KOR6CIKHiOJobVhWQEcwj00vpN6ggo9TI3fuIj5REpwxUZKdVcWTipOR2puOtJpCH30Qjw0igaN43iXDb30y1+p6ccJo5lmZEel4whJVxr49mMms+wO3HZpFi5a6EUKPxFFGpjtIIFkJVAqKf02yQ9zNqap02bYcfmSApxwRBpeWRtDe3Mb7v1uLh5YFcGezn78dYeBlzYloMTlFNUz2OtAt4OfOSd2Snsjy4JeUUO3ju8tZJzI1w93mnbakk7agorB8w/kdcgrwOv15nEgR4vkhGP0bHjQtlrIgh514OicVHjTffDR97bmx98MLusUMiK9MAsXluUh1XCgnioom/T4lDbiqmcSmDnRjY8ezMYPju7H6GgbYoEYiTsQhA0ag336guqJOsFy6qj2tHgUPZuqaYta8eataehTHti7avCTi/Px/FaFDQ2cdt4oEp83FCLLwb6UqBse/JRs8pmjVl4aIbsTG2tMvL9Nw7ePYG6ImBLzGmdNnjw5qbsGr9nP1yGvAErHSfQKLl40zUBeqoaqFoUzpuvIohMRbLXT189GZl4G50XCJFlgTUrGyUoFGkYDlS2dmFkQRo5Xw72reJ1uw9t3+lFidqDyk37sJIzQRHXW1SYJMeZo6A7uI5L1TohvsZf5Y2DPLqq/HQqtjCM8tPALaNSNRBQzSgys2WPH7mbGUVl5MgSL4JbuYaJHpFwSOOiRg4nnvm4rKrZQPGE2A0UHXdnLFii8uoEOQKfKjETCrzP2aUp2tv9/hcVDaiT+sdLB2bOAJYdrlqu3spLBJF1KpzsCNwMrwYCEYGJECdxbgioMiVLpN3X0Yk5xFMTbrDxwKz2ia053YSyj5c3roqivE1CU11BK+5gT3rGFDOqzerLoNkj4Qd6KKpffI2ENSwkj3PmWQsPOGFLJXCPYjh+dTvUHRr4ScVPCtQCJ3FBN+GM3HPR4nERi/V4fRpdOxNiJk5GfmQVnT3uSIZzDu1xBYqsWThGGKyMWi1nz54cDalxIB96WLFliLFv20uE2unezShX9ZVlQJv70kcKx9ETSXXF0m00I9GRaul8n8ROEEITw/YEIQc9Oxgl1OLwwbAFpqcR65ky1Y8khJtqJAbW1Ul2xxzAFM0Ekk+oY8bDCbmI+5YfwgzTSQUghHCZ7rXP8XIlLP1R4YpuwXcPWlymxo4Gi/DiOLQ1h/ow0VGyihIeDUME+5JRMwMyjTyLW5EdRSSkJnEBzYx0XQCeR8RgrwVgQUFeFqvUfMtCL4LMGA8eWKfz8NbrCscR82or7qQnkZvvdhsSAlStXMtOhxhamJ0tBnlqdhJnrOkz8fi3zriSSbutBd8dWruxCrggPcRxKUH+YUHCAsHITHFrUWhWMjWgngMuOYdTrCmPPbgWTBVZiE97bS+3A34uZ9j02j5LMubYRYs4pIMm/NG1ZXfJRYqodXEkiDN+58ELMmn8cHnvxCvxiSRR6pA/nz01BxQaKcTCGqUefjMmHH01mNyN7VAn2trZhy0cr0VK5Af1cJYp5Ck9aOsZMm4VDFy3B2jdexsdVIZzP1e6n89Qdipfn5eXxHavyDqANiNEBXMlLent7aclU6rhcDW66MJvrZPrJYykn+OhGGmbCxt7Ubno9OxjGb2M0WQXlqIHDX0upjlJViJchl9GTYR+zi+PQhUkM0rZ0GLhns8I/iWau2WtiabWJG9eY2BWgPaCtsbwU634yft5X/tEYe7kCNJe1LvD5559jyVmnYQdmoLaVsUUshiPyyHz+PP2401A6bTa2fvohsotKsKdqO1Yve5qS/h665x2C6IJ5MN1uhEIRbK54C500ROVHLsRjK0WVGhjLefOeBWYoxEDiwNqQVgCX3WgucW08YZMoBUoKpqRp9J1NQrp/pg6vqCImP8ZAWXoCKa4gXMTjJWMbploNhDSMyqNo85/HzViAoxGiircTITyxfA8ZQb/e4hC/n3vkfMyeMw+/fepBjCGMUEw742EW0kJHhYvCAPZlZ84hK00YoLBxw3rMOWwm2trasabYjuLCBJZ9EoUrt5Su8ShsWPUGckonoam2BrvWVqC1qwH6XT9BzhGHwUWorGn9BuCRP8ITSMWujWswbcEp2B4rJqxSj8mFOtbXJJz9iQTpgCqZ+/62ITGA7meR3LCE3lwPYYQOSqY0lZLOlBP1QHcbanr68LuNCet7B9ebg6KXQsWeR6N4PiHjEvr2QjSCkUgl0UwhOP910YjuZCLEwiDEQ2EbXVKCB+//OWtAY1j+j19hykRW6PKapBpKElwuFlV07GQdf9pByQh2oHbPHuv69XU2TKq149EKE6MO44r4fAMcPj/8GZmoqdyMvTXboN11K0rnz8Ebk48gbO7AVf4M/IXlL/p9j8GRnoc9W9YRGi/Ga5tqMTE/ST46IhYdrJvs558hqSDeK1smnEMPpqefeppSa0mrWEsJ7bMLoRWNocuXT1DHj6jdgwA9muaQwgVHGTiqhJ4NVY3430Eyz+EiUsr+pBRRWBZhilGuE29F2kt/W4pfPPAAIeowPmgG2uktDmYybTzFQ/fUQfeXNpsJIIUbFgYwejT9Vvb6y/Nc+NX1U7B6lx1dWhY9K+Yg2lsIb2cj0NeL1sqN0BedADXvcOzlYO6v3YFH6quxLUAodvpUJKZPoO/vIDTUA6lZ3dbqtFasjIuCOODTyqf9a0NaAVQXMjsaI2IsTPdFB9SFRgYQmkiORIqpUh0kQXpSUlsbYA/3Ymoh1Ut7spiNZKYtYOqvXkMpsSChvp96isEtG/+WTAYBJkTpJt5y443Wt0UpOvrIdEXr7XGwsKqdaOt2Dz6qT0NjkPlh9pFp68MJTNwffaIHS6ZEEGvcidfXhwhrj0Owi/kIFnN5vF50ULeHEmFoZ51CqJzgHMf+x8Zqds6RSfzCojBzWjnURmoZCpaKhdATcxOLElZbLXPwzf6+Do0BlpdIf580klpOi+YccLINvlL+kjqCTKB8k2BplFQXz6umzUilsUyl8ZWJNtbSzeQq2t3CmlCmCifQICutHn1aF5p9NnQHZSXwRuxnIjVcSTEha66Yn1f48fimInTH/eyfxkhFMX3esYgzen3+vdUY7V9PD8xES1eEkktcKSXBTFoT0gpG02010MMbm+PHQi8ZLf6uDMXyfgaGnRx3Ku0aJ6izT8VYgbk6ir6IDs/VkoJofdjPP0NiwOC9BgRF6MLGQSXHNfhz8lW+o/souEp30MRZT9KXzyPEO4GFbc6kHSCMw7JEA94CA5fP0HH/pNE0qC4EG3exGpr+d7Mdz3xgQ09zHA8voR4v1bF8ows/fp6BlY9Bg07LPtA2vfcWr3Wgv7kZReSw0uMsXWdcEibmT7DPpH8v9AsSHQ11tUGbewy9M5KD2JSEeTIVce1FqOS9ouqRb4VhyalQVUqQwkaZsmae/LR/f4fEAA6HM2ctJ22km6tAYADZLGFxwBr1wHt5sYbIP2SAFEQsZGXCVdMZlAWkSjlpgIvGU4fTUmf6ojA1Ds3uY9arn54TY4AUk/ncBE4tt7EsVKceNtBojkE5wbsTx9fgnR2MaGUAkubiPQIBRrok8oIyN46ZWYqOSBtC4RYwxoKDEmyNjJSMRSKISyLen2oNmzI+kCbkj0JpLgcVJ2ra0MyYhpNUdJP56jLoSdHbksYUbETW5YE0WdMH3Lj0aKGATrqDqYSGrQGJyAyu3f+2FDjYSD8UsfUjmcX61VlUH1wJcY5c3MbsQqoC1uCY/QmpQCDt4ohVb0K8eaeV0pTzJIegwjF47IykbZmI6W74/A789srRuGWhC+OpiW0E4uQ+1GUoy2UccWEB1Y8Nq5kbsFKSlFp6LdCYqpPVKE3yyyocZkVEbN931g/8XeodwXy2Vl0Lg7C18JcZZeS4Q5ZHJ+fRFg444NZV+/VnSCvAMLS9LERm/QzzpfQ+5AgSjk66JsnJJcWI3/GjIrilc/g/PEZDF4nNUEGKnaU0CHtrE5gyQ97TAyIDLOGzlrhcaFrCLUDYXibhrWuyksioSWK605245sLRuOjkMHY1hFHPvHDlli6cc1Iuxo9LoXEPYt32Xhy1mIbZQ5iBy0AkLx5l0p9GV5wGsEoCTY30j2lciF2xd55Arrd3QG2vgq2hBba0HMTCPfTcgjh0XByBSFIHMUlDpXhgTcZxwI2LtU4IXN3CgIheS54V/LC7GKVQpGuQB3IHwRr6CS1n65jKfG9drZxGWEFWNX/OpsvOzXXkHSNjfh7QwlYfUkLaTcb+4AUNh90FHH0fsPajbtiZs+VOF2vBiQ7wZXhw2KHZ+PbCXGQwrmhu7EZ8byeeea0RxbkJqjaFaazLjYm0czxhgRrIXIcEIc0t1PMBqJ3VUHvqkJCjqpoMaIde8QFXtxeJUB/v50SovRGncDNJNdFZaVwBpMOBtSExgNVve0ihRBXtn9B7It19q9FPT5JVPiXJaVkzGohCv4ZcYkdO1uk7WfDsoBckxqybSY4WgrpSuymXSH/WpWSP+N2fMZ/c38gEfkShtodZspf7serN3Qjubke8N0T1wVIV5qEjLb1Ys6Iaf6tUeGVnOn765xYktDDOn014ulFhdo5JNUiDSqmPEYwLUyichKZVJYOwAOEcjlH19HK19lnM0d/7CK7Pd8NGhDRChkVMA7PzezC/DKi0QGgtwlqoGpnpgTRO7cAbkzGRcDhyMeeecvnRVJV9koelVAj1JJU30ISW9NUsfD2FZf02loYU2akG+N0AsIwQ88FpZI6fQbRJXa8LWGM1rgp2WZCuMIMRdykhi0+44hoJTa/YFUfNnj70NnSjtbYb27d14JX32/HEVh/O+/GDOPV7d+PV19/CDybspeHWsLtaIZcMX9PALBmTRTqlX5H7zlQ/wvV7uProwk5nzEFPR+/qgfHWP+H8ZCuc/myEGIc4GRQGmhvw41PiGMcVe8dyy2nak5OdfR9xsQPSQkOyAd1s3Gr0eUfALPiMWaZ54wUOJsFkZ4pUNks0PGiQRc8yYPi8IYqt9TqOm8GEBv1OJ6sXwiS+kDtCbKizXZhC15SrRIA1g3le6UIKFFJyNExgbvZxRrWXLYuzXiiO5bu5y2U3bYRGA87zSiZNw/X3/wz9PT247fv/gYy+nUgQ1miWHALFzc3jSu4bu3dzF3pZnCsuqIvlF/5xU9BBaddaGKDxZkZbFwzWM8kcggzK3MyehXsJKpr9rMo2sL6WZoMQrWEzNjc0NNCaHVgbkgqSW9oN4wOh0IpKDdNGAWOySUpL3wswlJRi0iXZHBJxATOKFZ7fbeDql3iGRD1s8jdAIrWxcrqLEfLeBhZNsWJBcgjymxhmVrLDRkM/yojhjiVueiE2zM7ORxnh4gEICXuqt+GHl12IG6/6Lta+/0+U5Qg7uaI4U+lJapCmjTKQw9yDQBrhzmb0EYq2U7ozx8+EY3cD4hs3IdrciFBPKxL9vfBk5iFCByJMbGsCy1PKGcW//ZmMWtSjUSHvDrQNSQXJTan/wvF44tJgVNOvPB7ck6tZe3MtnT+ghoSAQgQrIiacYGcJ4bMfJxAkMc6bTSmnXs/KpjHlie0kfoSwBu0kyw651VS8Ha4CbvKgtFm9oLbGxNyJZESpHbHWQtx/6HE4gxLcSuN/Ym4x44UM7KG+ZjSBa4k51TCfkE7vSmKVOJn2TK2BVVUsc2e1g92TgkhXK6I8X1SMJ68YLlZrO8lUR2qGtYKDbY10mbkvje2S+TqOLweup0PQ0YeI2+26mbWwbdaPB/BnyAwoKSlp7+ruPbu918w+ldHrlAKFpz7guCV4Ee9C1BDJL/+orqBxItsbY/TwFJPaCoexFLxslI4Ei6Si3XFrX53klqQSnSqaRbvEmejWZ5AR4rd7fBoLq+i21iWw+Ah2ndODR9buRbGWh+8fciSza8W4aOwM9FEp5JR14JzxJpYzBphF2HtLD4u33gdW7xR1TayJApI3ZTZcGfno62hFsLmGFXvtlHYaW+aEQ50thMW5KVAyRcwHU27w2++IkAG/fpuRsM1Yd9rixQ9UVlbuW+T7y4MhM4CVwgmH3ZYTiycWOBnFXn6sYmGsjnpmxTShoPcLYyzGTSoWxE2VSmRuFEADY4gQk/ABIqSFrBe1OentUFSdDJclN0A+WgQXAUxhooVJNcLHOm0FPcf6BI6ZquOYoxJYzbz4q7t2YVtLG95oroSjrAW/ODOGVR8GUMfYoYdlhT95j/v96OYfOoYl7PTc4lxmPfT9jQTVJccl7imfR4GEN4WJGEbhLFe3KieCjDcZkR9XbuCG04CfLWOpZR3dV7v915999tma/SX6l88X7TDklpKSMqEvENxIWNqz9R5gVSVw7qMi8vyXX5IsfBJmsGkCAzB4Uk4XtNZGbjmlt0HJPvdwHfcdp+G2VTpWVJn43akaMlkFLYkZ5mcss+LgYsrM1bkhkl0Q1t6xjUaQfY4fzxLHCV70s2SiJWqH1GcVEKlcs7IHV/9dquqALe3clsqCqrU/ZbwVNDDjNhKQnta1i5044xBeQNT25bUKD7xCbCiVN5B6IbHq4lI31Vjq8/VrdUv/T2cfXGFd6en+aRRAWqsDb0NeAXJr6sAOw26bGuhPTEmjf38FV8Hbn+ncs8VVIAS3bMEAr8UaWkWwvJAhsHwr0WxjRxxtCRueXB21vIt1zSJ8ditTJviSoK1SPyqVIr0MgHqpmrpYR7qqQQpzGajVh1kVTT+eR/P2Hjz/Thg/ZupwZ7eJZn4ttJxOBpw0RuH+d4EN9azau8qB/5wfRQZd08K5C3DM3ExU7WzB5h1cpXRNRU1pHS10z8I4htJ/9zkm7lzOHDWT/Xan4+lgIPA8TxpSG6DKkPqwLk5NTT28t69vdb5fs2+8mxPczT1WD9I15My17AJmjsXBJxXEGLAlb0xXU7wcYguquTbpuhJ714jTC/ookIbLmQT6uL/dsgkpNKQzcjXMK2RMwGppxiBY16pjeyeLZhkb9LBkvY36v1uSOdaNeCcyXeO9jx+l4ZxxDOJoo8oYczx3HhO6tBEGsSjNk864ALjuxSgefZNvSkutkhXV0gAHxXTVrQZy00wcSuln3Nfv9XpmccsS1/rQGhfn8DTWh37icDqXNXdFv33337nr5BLuxTrcwPNrCO/Sy7AAHysu+PL9yBxhCtFFLa/YUkdiGxQxd9G9Gg1imMYwTC9psHWSuLXcZ/B35ppTeFoK1ZKdtqOfbmoHfyPP2Oi+MjWmJN0p8QhX2GRCINfOMrFshybFEOihA7B9hyAQTOLTTBnohGeUCys2c7mJfaJNUCL9ZPx3j7ZhbnkCFzysM/OXoBdnf3o4iC8jHXIcIJ1Io4ei3C7XbQzxu/9YYeLD7Tp+eb4UsvIW4hF10HXgZP6vJktBvhfmpLNQVrAIftaoa5RUpwkxyRCby8cYIIXVFVwhcg6h5z5qiibGDgJNtBHWNi0snNcSYDJcKdY1yftpKCdNBcn8hDQlgApJ5T20XcOuDkFegfxiA+/ssWEnDbuWmgKtvdlyFsqYm7j3XBOvr9Ox9GP2reuttHn3Jvsd+t9hsQGDw2CJXqfT5TAjkcQJG2s1XHk8q5fzNSz7lNExcXdLh3iIuw+oIblO4t7BJrwQGEOjzlXtTfzAQMeVahFeJwgmjLBeuVlAZz2pQSnXaTw18a5EzfC9SL4wSxInonoU4QVFyHYqGRAi+LeCuj+NDLh1pgRkrLQ4QkMZ/Xpfhovem42b8gQdpbpj1OuhR7b0ajoDHPLZD3OFUcVxy+r1gd7AqsExD/V1WBkggymbWPZpZ1fnvKbOxJg2Jk5uOI06lrVBUq5IrMHy5VmvyA8kvEg6CT7YhBXWpzYSn66q4fR+SYqTZ1nnCJMGiK5T2oUxBpliMHtmMUSS+AN9S8LfrSKYQxzpM0p7E2GJENXUIYQ1yohLRVjRvZe1/x0NCm/wsThbGKOIzy8jefhCA986wsSljxv4gDt3CD6+fsZpZ9w4FL9/cK6Dr8POgLa2toTP6/2YZdtL1u9WPj+fbnXjYoWWbgOf1pB8fMqJRXNJAgwQfx8P5I0UyLI41iBsYfNSbEnIJFcEqqY9sfD7wb0CnIZwRNoXfEx+HviOaRiM88UwPS2O1TRFDkKroqk2Mf7IZVDnEW1GQ17JB0H9/tOEtdlbLuUjc3DTWSbuflnHIyuYJ9P1OjoaZ/PhTt1f3GDo74adATIkcUvdbvd2BmdnV1QqY2I+V8KpzAGw0m2TPLGKQY1UH1ilzkJ0ITKbtRqIt4j0u+jsK64cmlX5RX6mro4wUGIQR6m2VMxXqS6nSVfymrwk2Se/LPFEsZbBWzYjbgHuGhjYVXChhZSNldzcRvVhAm39yXFce5IN919o4s8rWV75nHX/kMfjPo+I5yb2PKztoDBARsiq4Sqnx90VicRP5pYePnpMww3cc9veZ0tiRaKOJBcrMKfkWtk0sYaSIKd68eSMIv4SGFwkdGdNBl8sHeF/1ioQWENUzb7lY3WR/DNAfKtP/t7HbE2WI4Z66nA3C4hsZIi4lj4GYt8eq+GNahMbiUEJ125ZnCT+0g8Z1T/JfDUdKZfLeSV3gBI6HP520BggQ2Ud5jqHyxULhRPHvboRhAGojk434SVk8T5dwHiEbgwxBjGg1gOZBG/gYSfsafOmIy6/WQQmcklPSgkDxLCKeNO11L/MhEGp/xLxZTWYXGkJQh5u6hkBA2u4GzNEHCpCt5Ub9lHRCGzv4vYmbih88AIDt5xNLIvR+OVPclckfyfYdiM34z06/KT/F/VIPEdzuB03UboUN9qp+85nSPW8pt650bAeX8NhiOgpAnfM6jOzz/dEJJWveJJypOUopz+PR67SXSwCFVjU4H4kh8865DtHavbAOXLel460XGXz8tFmTl5n9ymfw1CsrFY5fFCTuMzkrHUvuV95oa5W3ZJ8XM3dS+zKsB6joyWoRq+T8fOc//3N5fFcQfGle6Gpi+YbqutxQ3U8ZrOeVCWM4Qz3He7cIuXJHZMkaHq+cpKYmoN4svisEjwbLIUjEzRn8uBqUfaULIsZwhAhvO5K5TUD58griXocGTA9Q1fEnqx7cf+y+v5Cm+rhk7vaH9PVeXOId3N8ZE7A5XVd8r+f6l+ZgTfNewLVRo0QexKl7i3rSVW6+uBnNnXCVIHQhDDJg66lsnv9JH6ORVgGVwMMEAIJE+xJAgtxBw9Ku0j8vs/yvZ2PP9NJWEvqB5msqZOmGWrNbfIAP129dp08JDB5f46vyufzLfjK0P99Pvrz/CVM4vxdCM30pbr4KEPtfpCE+KuuVtxsU2ccZlN8Oi4ZMUAsRkWabIMUtTCwAvYRkyrJIvAgAxze5GebK7lKRGVZDJW+GKk7NHXGobp692a5n6aqfmmoC+bZkiqJv3NcL2ZmZhb++1D7f5jJ7XyYEx/scSUTNDSBfEqNj48wO9XgIyWph/lIye0P2NRdS2zq8HEGn/v2JWYMMsUi6pe+l9BVDgtO+9L3PM/l0NWsUl3d9S1D7bxf7I+uqh801DUn2VSaJ8kgel21Lq/3kq9D33+tBoaPKx7V0dVxQyQUu5T+ii+NQdtibmu66Eg+uWoiw35CBjVEOtcwNyyPId5az8cSd8gDXJOl8FJmKGkGcZQkWyW7dDK472AU8yjlhfLIY7BQgPmCfNk+y+dQEPt5erXGp+iaxPNlkWldDqftj2mpab9mAEmw6l/fvlYGDE6Xj5+fHAwG/ysSjZ1LimaTMBibpzEDpeGEKeAGQNaGZlLISWTGaNZehF7mSeRh3QKmyn4CNyFlPgoIaUzaS+JG4rz6Tnl2tIZ/fK5h5ecmC8iE6GysamE26zk+QPYJBle7kl9+PX+/EQwYnHphYWERM0xnMog7m480m0X5JjmZ1SRhi5lMGZ+XjCWKMpjEZ1WDj99bmzmYMpPtTm0scWnoYtl7K3dsEvWU1WKVSiZvEDBs+hoW1i7N9Nte3bs3cMCJ9MHxDsfrN4oBgxMSXcxn8kxk9LkgEosdlYgnZhCXKObvzPJ/tVmqhF8OSLf1szUt1hFqtXabsYH/L4H3aGDfZ86i2ooBvtrF1/j5G8mAr9JDHn9JHV3EYLhUqVgpYYkCVjinUv1zo73hTMQSIaISQbqQfMweGoha1krZ5NixYxu/ziejf3UeI59HKDBCgREKjFBghAIjFBihwAgFRigwQoERCoxQYIQCIxQYocAIBUYoMEKBEQqMUGCEAl8TBf4Psyet2W9C97cAAAAASUVORK5CYII=";
|
|
@@ -13560,10 +13575,11 @@ var templateInfo = {
|
|
|
13560
13575
|
var import_react3 = __toESM(require("react"));
|
|
13561
13576
|
var import_react_native3 = require("react-native");
|
|
13562
13577
|
function HomeScreen({ nav }) {
|
|
13563
|
-
const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, dashboardUrl } = useBugBear();
|
|
13578
|
+
const { assignments, unreadCount, threads, refreshAssignments, refreshThreads, issueCounts, refreshIssueCounts, dashboardUrl } = useBugBear();
|
|
13564
13579
|
(0, import_react3.useEffect)(() => {
|
|
13565
13580
|
refreshAssignments();
|
|
13566
13581
|
refreshThreads();
|
|
13582
|
+
refreshIssueCounts();
|
|
13567
13583
|
}, []);
|
|
13568
13584
|
const pendingAssignments = assignments.filter((a) => a.status === "pending" || a.status === "in_progress");
|
|
13569
13585
|
const pendingCount = pendingAssignments.length;
|
|
@@ -13629,6 +13645,33 @@ function HomeScreen({ nav }) {
|
|
|
13629
13645
|
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.actionIcon }, "\u{1F4AC}"),
|
|
13630
13646
|
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.actionLabel }, "Messages"),
|
|
13631
13647
|
unreadCount > 0 && /* @__PURE__ */ import_react3.default.createElement(import_react_native3.View, { style: [styles.actionBadge, styles.actionBadgeMsg] }, /* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.actionBadgeText }, unreadCount))
|
|
13648
|
+
)), /* @__PURE__ */ import_react3.default.createElement(import_react_native3.View, { style: styles.issueGrid }, /* @__PURE__ */ import_react3.default.createElement(
|
|
13649
|
+
import_react_native3.TouchableOpacity,
|
|
13650
|
+
{
|
|
13651
|
+
style: [styles.issueCard, styles.issueCardOpen],
|
|
13652
|
+
onPress: () => nav.push({ name: "ISSUE_LIST", category: "open" }),
|
|
13653
|
+
activeOpacity: 0.7
|
|
13654
|
+
},
|
|
13655
|
+
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.issueCountOpen }, issueCounts.open),
|
|
13656
|
+
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.issueLabel }, "Open")
|
|
13657
|
+
), /* @__PURE__ */ import_react3.default.createElement(
|
|
13658
|
+
import_react_native3.TouchableOpacity,
|
|
13659
|
+
{
|
|
13660
|
+
style: [styles.issueCard, styles.issueCardDone],
|
|
13661
|
+
onPress: () => nav.push({ name: "ISSUE_LIST", category: "done" }),
|
|
13662
|
+
activeOpacity: 0.7
|
|
13663
|
+
},
|
|
13664
|
+
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.issueCountDone }, issueCounts.done),
|
|
13665
|
+
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.issueLabel }, "Done")
|
|
13666
|
+
), /* @__PURE__ */ import_react3.default.createElement(
|
|
13667
|
+
import_react_native3.TouchableOpacity,
|
|
13668
|
+
{
|
|
13669
|
+
style: [styles.issueCard, styles.issueCardReopened],
|
|
13670
|
+
onPress: () => nav.push({ name: "ISSUE_LIST", category: "reopened" }),
|
|
13671
|
+
activeOpacity: 0.7
|
|
13672
|
+
},
|
|
13673
|
+
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.issueCountReopened }, issueCounts.reopened),
|
|
13674
|
+
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.issueLabel }, "Reopened")
|
|
13632
13675
|
)), totalTests > 0 && /* @__PURE__ */ import_react3.default.createElement(import_react_native3.View, { style: styles.progressSection }, /* @__PURE__ */ import_react3.default.createElement(import_react_native3.View, { style: styles.progressBar }, /* @__PURE__ */ import_react3.default.createElement(import_react_native3.View, { style: [styles.progressFill, { width: `${Math.round(completedCount / totalTests * 100)}%` }] })), /* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.progressText }, completedCount, "/", totalTests, " tests completed")), dashboardUrl && /* @__PURE__ */ import_react3.default.createElement(
|
|
13633
13676
|
import_react_native3.TouchableOpacity,
|
|
13634
13677
|
{
|
|
@@ -13646,6 +13689,7 @@ function HomeScreen({ nav }) {
|
|
|
13646
13689
|
onPress: () => {
|
|
13647
13690
|
refreshAssignments();
|
|
13648
13691
|
refreshThreads();
|
|
13692
|
+
refreshIssueCounts();
|
|
13649
13693
|
}
|
|
13650
13694
|
},
|
|
13651
13695
|
/* @__PURE__ */ import_react3.default.createElement(import_react_native3.Text, { style: styles.refreshText }, "\u21BB Refresh")
|
|
@@ -13816,6 +13860,54 @@ var styles = import_react_native3.StyleSheet.create({
|
|
|
13816
13860
|
color: colors.textMuted,
|
|
13817
13861
|
marginLeft: 8
|
|
13818
13862
|
},
|
|
13863
|
+
issueGrid: {
|
|
13864
|
+
flexDirection: "row",
|
|
13865
|
+
gap: 10,
|
|
13866
|
+
marginBottom: 20
|
|
13867
|
+
},
|
|
13868
|
+
issueCard: {
|
|
13869
|
+
flex: 1,
|
|
13870
|
+
backgroundColor: colors.card,
|
|
13871
|
+
borderWidth: 1,
|
|
13872
|
+
borderColor: colors.border,
|
|
13873
|
+
borderRadius: 10,
|
|
13874
|
+
paddingVertical: 12,
|
|
13875
|
+
paddingHorizontal: 8,
|
|
13876
|
+
alignItems: "center"
|
|
13877
|
+
},
|
|
13878
|
+
issueCardOpen: {
|
|
13879
|
+
borderTopWidth: 3,
|
|
13880
|
+
borderTopColor: "#f97316"
|
|
13881
|
+
},
|
|
13882
|
+
issueCardDone: {
|
|
13883
|
+
borderTopWidth: 3,
|
|
13884
|
+
borderTopColor: "#22c55e"
|
|
13885
|
+
},
|
|
13886
|
+
issueCardReopened: {
|
|
13887
|
+
borderTopWidth: 3,
|
|
13888
|
+
borderTopColor: "#ef4444"
|
|
13889
|
+
},
|
|
13890
|
+
issueCountOpen: {
|
|
13891
|
+
fontSize: 22,
|
|
13892
|
+
fontWeight: "700",
|
|
13893
|
+
color: "#f97316"
|
|
13894
|
+
},
|
|
13895
|
+
issueCountDone: {
|
|
13896
|
+
fontSize: 22,
|
|
13897
|
+
fontWeight: "700",
|
|
13898
|
+
color: "#22c55e"
|
|
13899
|
+
},
|
|
13900
|
+
issueCountReopened: {
|
|
13901
|
+
fontSize: 22,
|
|
13902
|
+
fontWeight: "700",
|
|
13903
|
+
color: "#ef4444"
|
|
13904
|
+
},
|
|
13905
|
+
issueLabel: {
|
|
13906
|
+
fontSize: 11,
|
|
13907
|
+
fontWeight: "600",
|
|
13908
|
+
color: colors.textSecondary,
|
|
13909
|
+
marginTop: 2
|
|
13910
|
+
},
|
|
13819
13911
|
refreshButton: {
|
|
13820
13912
|
alignItems: "center",
|
|
13821
13913
|
paddingVertical: 8
|
|
@@ -14171,10 +14263,16 @@ function TestListScreen({ nav }) {
|
|
|
14171
14263
|
const filterAssignment = (a) => {
|
|
14172
14264
|
if (roleFilter && a.testCase.role?.id !== roleFilter) return false;
|
|
14173
14265
|
if (filter === "pending") return a.status === "pending" || a.status === "in_progress";
|
|
14174
|
-
if (filter === "
|
|
14266
|
+
if (filter === "done") return a.status === "passed";
|
|
14267
|
+
if (filter === "reopened") return a.status === "failed";
|
|
14175
14268
|
return true;
|
|
14176
14269
|
};
|
|
14177
|
-
return /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, null, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.filterBar }, [
|
|
14270
|
+
return /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, null, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.filterBar }, [
|
|
14271
|
+
{ key: "all", label: "All", count: assignments.length },
|
|
14272
|
+
{ key: "pending", label: "To Do", count: assignments.filter((a) => a.status === "pending" || a.status === "in_progress").length },
|
|
14273
|
+
{ key: "done", label: "Done", count: assignments.filter((a) => a.status === "passed").length },
|
|
14274
|
+
{ key: "reopened", label: "Re Opened", count: assignments.filter((a) => a.status === "failed").length }
|
|
14275
|
+
].map((f) => /* @__PURE__ */ import_react5.default.createElement(import_react_native5.TouchableOpacity, { key: f.key, style: [styles3.filterBtn, filter === f.key && styles3.filterBtnActive], onPress: () => setFilter(f.key) }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles3.filterBtnText, filter === f.key && styles3.filterBtnTextActive] }, f.label, " (", f.count, ")")))), availableRoles.length >= 2 && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.roleSection }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles3.roleBar }, /* @__PURE__ */ import_react5.default.createElement(
|
|
14178
14276
|
import_react_native5.TouchableOpacity,
|
|
14179
14277
|
{
|
|
14180
14278
|
style: [styles3.roleBtn, !roleFilter && styles3.roleBtnActive],
|
|
@@ -14212,7 +14310,19 @@ function TestListScreen({ nav }) {
|
|
|
14212
14310
|
onPress: () => nav.push({ name: "TEST_DETAIL", testId: assignment.id })
|
|
14213
14311
|
},
|
|
14214
14312
|
/* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testBadge }, badge.icon),
|
|
14215
|
-
/* @__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.testKey, " \xB7 ", assignment.testCase.priority), assignment.testCase.role && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.roleBadgeRow }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testMeta }, " \xB7 "), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [styles3.roleBadgeDot, { backgroundColor: assignment.testCase.role.color }] }), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles3.testMeta, { color: assignment.testCase.role.color, fontWeight: "500" }] }, assignment.testCase.role.name))))
|
|
14313
|
+
/* @__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.testKey, " \xB7 ", assignment.testCase.priority), assignment.testCase.role && /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: styles3.roleBadgeRow }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: styles3.testMeta }, " \xB7 "), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [styles3.roleBadgeDot, { backgroundColor: assignment.testCase.role.color }] }), /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [styles3.testMeta, { color: assignment.testCase.role.color, fontWeight: "500" }] }, assignment.testCase.role.name)))),
|
|
14314
|
+
/* @__PURE__ */ import_react5.default.createElement(import_react_native5.View, { style: [
|
|
14315
|
+
styles3.statusPill,
|
|
14316
|
+
{
|
|
14317
|
+
backgroundColor: assignment.status === "passed" ? "#14532d" : assignment.status === "failed" ? "#450a0a" : assignment.status === "in_progress" ? "#172554" : "#27272a",
|
|
14318
|
+
borderColor: assignment.status === "passed" ? "#166534" : assignment.status === "failed" ? "#7f1d1d" : assignment.status === "in_progress" ? "#1e3a5f" : "#3f3f46"
|
|
14319
|
+
}
|
|
14320
|
+
] }, /* @__PURE__ */ import_react5.default.createElement(import_react_native5.Text, { style: [
|
|
14321
|
+
styles3.statusPillText,
|
|
14322
|
+
{
|
|
14323
|
+
color: assignment.status === "passed" ? "#4ade80" : assignment.status === "failed" ? "#f87171" : assignment.status === "in_progress" ? "#60a5fa" : "#d4d4d8"
|
|
14324
|
+
}
|
|
14325
|
+
] }, badge.label))
|
|
14216
14326
|
);
|
|
14217
14327
|
}));
|
|
14218
14328
|
}), /* @__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")));
|
|
@@ -14250,6 +14360,8 @@ var styles3 = import_react_native5.StyleSheet.create({
|
|
|
14250
14360
|
retestTag: { backgroundColor: "#422006", borderWidth: 1, borderColor: "#854d0e", borderRadius: 4, paddingHorizontal: 5, paddingVertical: 1 },
|
|
14251
14361
|
retestTagText: { fontSize: 10, fontWeight: "600", color: "#fbbf24" },
|
|
14252
14362
|
testMeta: { fontSize: 11, color: colors.textDim },
|
|
14363
|
+
statusPill: { paddingHorizontal: 8, paddingVertical: 3, borderRadius: 6, borderWidth: 1, marginLeft: 8 },
|
|
14364
|
+
statusPillText: { fontSize: 10, fontWeight: "600" },
|
|
14253
14365
|
refreshBtn: { alignItems: "center", paddingVertical: 12 },
|
|
14254
14366
|
refreshText: { fontSize: 13, color: colors.blue }
|
|
14255
14367
|
});
|
|
@@ -15134,9 +15246,311 @@ var styles12 = import_react_native14.StyleSheet.create({
|
|
|
15134
15246
|
platformTextActive: { color: colors.blueLight }
|
|
15135
15247
|
});
|
|
15136
15248
|
|
|
15249
|
+
// src/widget/screens/IssueListScreen.tsx
|
|
15250
|
+
var import_react16 = __toESM(require("react"));
|
|
15251
|
+
var import_react_native15 = require("react-native");
|
|
15252
|
+
var CATEGORY_CONFIG = {
|
|
15253
|
+
open: { label: "Open Issues", accent: "#f97316", emptyIcon: "\u2705", emptyText: "No open issues" },
|
|
15254
|
+
done: { label: "Done", accent: "#22c55e", emptyIcon: "\u{1F389}", emptyText: "No completed issues yet" },
|
|
15255
|
+
reopened: { label: "Reopened", accent: "#ef4444", emptyIcon: "\u{1F44D}", emptyText: "No reopened issues" }
|
|
15256
|
+
};
|
|
15257
|
+
var SEVERITY_COLORS = {
|
|
15258
|
+
critical: "#ef4444",
|
|
15259
|
+
high: "#f97316",
|
|
15260
|
+
medium: "#eab308",
|
|
15261
|
+
low: "#71717a"
|
|
15262
|
+
};
|
|
15263
|
+
function IssueListScreen({ nav, category }) {
|
|
15264
|
+
const { client } = useBugBear();
|
|
15265
|
+
const [issues, setIssues] = (0, import_react16.useState)([]);
|
|
15266
|
+
const [loading, setLoading] = (0, import_react16.useState)(true);
|
|
15267
|
+
const config = CATEGORY_CONFIG[category];
|
|
15268
|
+
(0, import_react16.useEffect)(() => {
|
|
15269
|
+
let cancelled = false;
|
|
15270
|
+
setLoading(true);
|
|
15271
|
+
(async () => {
|
|
15272
|
+
if (!client) return;
|
|
15273
|
+
const data = await client.getIssues(category);
|
|
15274
|
+
if (!cancelled) {
|
|
15275
|
+
setIssues(data);
|
|
15276
|
+
setLoading(false);
|
|
15277
|
+
}
|
|
15278
|
+
})();
|
|
15279
|
+
return () => {
|
|
15280
|
+
cancelled = true;
|
|
15281
|
+
};
|
|
15282
|
+
}, [client, category]);
|
|
15283
|
+
if (loading) {
|
|
15284
|
+
return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.emptyContainer }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.ActivityIndicator, { size: "small", color: colors.textMuted }), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.emptyText }, "Loading..."));
|
|
15285
|
+
}
|
|
15286
|
+
if (issues.length === 0) {
|
|
15287
|
+
return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.emptyContainer }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.emptyIcon }, config.emptyIcon), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.emptyText }, config.emptyText));
|
|
15288
|
+
}
|
|
15289
|
+
return /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, null, issues.map((issue) => /* @__PURE__ */ import_react16.default.createElement(
|
|
15290
|
+
import_react_native15.TouchableOpacity,
|
|
15291
|
+
{
|
|
15292
|
+
key: issue.id,
|
|
15293
|
+
style: styles13.issueCard,
|
|
15294
|
+
onPress: () => nav.push({ name: "ISSUE_DETAIL", issue }),
|
|
15295
|
+
activeOpacity: 0.7
|
|
15296
|
+
},
|
|
15297
|
+
/* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.topRow }, issue.severity && /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: [styles13.severityDot, { backgroundColor: SEVERITY_COLORS[issue.severity] || colors.textDim }] }), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.issueTitle, numberOfLines: 1 }, issue.title)),
|
|
15298
|
+
/* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.bottomRow }, issue.route && /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.routeText, numberOfLines: 1 }, issue.route), /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.timeText }, formatRelativeTime(issue.updatedAt))),
|
|
15299
|
+
category === "done" && issue.verifiedByName && /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.verifiedBadge }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.verifiedBadgeText }, "\u2714", " Verified by ", issue.verifiedByName)),
|
|
15300
|
+
category === "reopened" && issue.originalBugTitle && /* @__PURE__ */ import_react16.default.createElement(import_react_native15.View, { style: styles13.reopenedBadge }, /* @__PURE__ */ import_react16.default.createElement(import_react_native15.Text, { style: styles13.reopenedBadgeText, numberOfLines: 1 }, "\u{1F504}", " Retest of: ", issue.originalBugTitle))
|
|
15301
|
+
)));
|
|
15302
|
+
}
|
|
15303
|
+
var styles13 = import_react_native15.StyleSheet.create({
|
|
15304
|
+
emptyContainer: {
|
|
15305
|
+
alignItems: "center",
|
|
15306
|
+
paddingVertical: 40
|
|
15307
|
+
},
|
|
15308
|
+
emptyIcon: {
|
|
15309
|
+
fontSize: 36,
|
|
15310
|
+
marginBottom: 8
|
|
15311
|
+
},
|
|
15312
|
+
emptyText: {
|
|
15313
|
+
color: colors.textMuted,
|
|
15314
|
+
fontSize: 14,
|
|
15315
|
+
marginTop: 4
|
|
15316
|
+
},
|
|
15317
|
+
issueCard: {
|
|
15318
|
+
backgroundColor: colors.card,
|
|
15319
|
+
borderWidth: 1,
|
|
15320
|
+
borderColor: colors.border,
|
|
15321
|
+
borderRadius: 10,
|
|
15322
|
+
padding: 14,
|
|
15323
|
+
marginBottom: 8
|
|
15324
|
+
},
|
|
15325
|
+
topRow: {
|
|
15326
|
+
flexDirection: "row",
|
|
15327
|
+
alignItems: "flex-start",
|
|
15328
|
+
gap: 8
|
|
15329
|
+
},
|
|
15330
|
+
severityDot: {
|
|
15331
|
+
width: 8,
|
|
15332
|
+
height: 8,
|
|
15333
|
+
borderRadius: 4,
|
|
15334
|
+
marginTop: 5
|
|
15335
|
+
},
|
|
15336
|
+
issueTitle: {
|
|
15337
|
+
fontSize: 13,
|
|
15338
|
+
fontWeight: "600",
|
|
15339
|
+
color: colors.textPrimary,
|
|
15340
|
+
flex: 1
|
|
15341
|
+
},
|
|
15342
|
+
bottomRow: {
|
|
15343
|
+
flexDirection: "row",
|
|
15344
|
+
justifyContent: "space-between",
|
|
15345
|
+
marginTop: 6
|
|
15346
|
+
},
|
|
15347
|
+
routeText: {
|
|
15348
|
+
fontSize: 11,
|
|
15349
|
+
color: colors.textDim,
|
|
15350
|
+
maxWidth: "60%"
|
|
15351
|
+
},
|
|
15352
|
+
timeText: {
|
|
15353
|
+
fontSize: 11,
|
|
15354
|
+
color: colors.textDim,
|
|
15355
|
+
marginLeft: "auto"
|
|
15356
|
+
},
|
|
15357
|
+
verifiedBadge: {
|
|
15358
|
+
flexDirection: "row",
|
|
15359
|
+
alignItems: "center",
|
|
15360
|
+
backgroundColor: "#14532d",
|
|
15361
|
+
borderWidth: 1,
|
|
15362
|
+
borderColor: "#166534",
|
|
15363
|
+
borderRadius: 6,
|
|
15364
|
+
paddingHorizontal: 8,
|
|
15365
|
+
paddingVertical: 2,
|
|
15366
|
+
marginTop: 6,
|
|
15367
|
+
alignSelf: "flex-start"
|
|
15368
|
+
},
|
|
15369
|
+
verifiedBadgeText: {
|
|
15370
|
+
fontSize: 10,
|
|
15371
|
+
fontWeight: "600",
|
|
15372
|
+
color: "#4ade80"
|
|
15373
|
+
},
|
|
15374
|
+
reopenedBadge: {
|
|
15375
|
+
flexDirection: "row",
|
|
15376
|
+
alignItems: "center",
|
|
15377
|
+
backgroundColor: "#422006",
|
|
15378
|
+
borderWidth: 1,
|
|
15379
|
+
borderColor: "#854d0e",
|
|
15380
|
+
borderRadius: 6,
|
|
15381
|
+
paddingHorizontal: 8,
|
|
15382
|
+
paddingVertical: 2,
|
|
15383
|
+
marginTop: 6,
|
|
15384
|
+
alignSelf: "flex-start"
|
|
15385
|
+
},
|
|
15386
|
+
reopenedBadgeText: {
|
|
15387
|
+
fontSize: 10,
|
|
15388
|
+
fontWeight: "600",
|
|
15389
|
+
color: "#fbbf24"
|
|
15390
|
+
}
|
|
15391
|
+
});
|
|
15392
|
+
|
|
15393
|
+
// src/widget/screens/IssueDetailScreen.tsx
|
|
15394
|
+
var import_react17 = __toESM(require("react"));
|
|
15395
|
+
var import_react_native16 = require("react-native");
|
|
15396
|
+
var STATUS_LABELS = {
|
|
15397
|
+
new: { label: "New", bg: "#1e3a5f", color: "#60a5fa" },
|
|
15398
|
+
triaging: { label: "Triaging", bg: "#1e3a5f", color: "#60a5fa" },
|
|
15399
|
+
confirmed: { label: "Confirmed", bg: "#422006", color: "#fbbf24" },
|
|
15400
|
+
in_progress: { label: "In Progress", bg: "#1e3a5f", color: "#60a5fa" },
|
|
15401
|
+
fixed: { label: "Fixed", bg: "#14532d", color: "#4ade80" },
|
|
15402
|
+
ready_to_test: { label: "Ready to Test", bg: "#422006", color: "#fbbf24" },
|
|
15403
|
+
verified: { label: "Verified", bg: "#14532d", color: "#4ade80" },
|
|
15404
|
+
resolved: { label: "Resolved", bg: "#14532d", color: "#4ade80" },
|
|
15405
|
+
reviewed: { label: "Reviewed", bg: "#14532d", color: "#4ade80" },
|
|
15406
|
+
closed: { label: "Closed", bg: "#27272a", color: "#71717a" },
|
|
15407
|
+
wont_fix: { label: "Won't Fix", bg: "#27272a", color: "#71717a" },
|
|
15408
|
+
duplicate: { label: "Duplicate", bg: "#27272a", color: "#71717a" }
|
|
15409
|
+
};
|
|
15410
|
+
var SEVERITY_CONFIG = {
|
|
15411
|
+
critical: { label: "Critical", color: "#ef4444", bg: "#7f1d1d" },
|
|
15412
|
+
high: { label: "High", color: "#f97316", bg: "#431407" },
|
|
15413
|
+
medium: { label: "Medium", color: "#eab308", bg: "#422006" },
|
|
15414
|
+
low: { label: "Low", color: "#71717a", bg: "#27272a" }
|
|
15415
|
+
};
|
|
15416
|
+
function IssueDetailScreen({ nav, issue }) {
|
|
15417
|
+
const statusConfig = STATUS_LABELS[issue.status] || { label: issue.status, bg: "#27272a", color: "#a1a1aa" };
|
|
15418
|
+
const severityConfig = issue.severity ? SEVERITY_CONFIG[issue.severity] : null;
|
|
15419
|
+
return /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, null, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.badgeRow }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: [styles14.badge, { backgroundColor: statusConfig.bg }] }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: [styles14.badgeText, { color: statusConfig.color }] }, statusConfig.label)), severityConfig && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: [styles14.badge, { backgroundColor: severityConfig.bg }] }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: [styles14.badgeText, { color: severityConfig.color }] }, severityConfig.label))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.title }, issue.title), issue.route && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.route }, issue.route), issue.description && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.descriptionCard }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.descriptionText }, issue.description)), issue.verifiedByName && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.verifiedCard }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.verifiedHeader }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.verifiedIcon }, "\u2705"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.verifiedTitle }, "Retesting Proof")), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.verifiedBody }, "Verified by ", issue.verifiedByName, issue.verifiedAt && ` on ${new Date(issue.verifiedAt).toLocaleDateString(void 0, { month: "short", day: "numeric", year: "numeric" })}`)), issue.originalBugTitle && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.originalBugCard }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.originalBugHeader }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.originalBugIcon }, "\u{1F504}"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.originalBugTitle }, "Original Bug")), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.originalBugBody }, "Retest of: ", issue.originalBugTitle)), issue.screenshotUrls && issue.screenshotUrls.length > 0 && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.screenshotSection }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.screenshotLabel }, "Screenshots (", issue.screenshotUrls.length, ")"), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.screenshotRow }, issue.screenshotUrls.map((url, i) => /* @__PURE__ */ import_react17.default.createElement(import_react_native16.TouchableOpacity, { key: i, onPress: () => import_react_native16.Linking.openURL(url), activeOpacity: 0.7 }, /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Image, { source: { uri: url }, style: styles14.screenshotThumb }))))), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.View, { style: styles14.metaSection }, issue.reporterName && /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.metaText }, "Reported by ", issue.reporterName), /* @__PURE__ */ import_react17.default.createElement(import_react_native16.Text, { style: styles14.metaTextSmall }, "Created ", formatRelativeTime(issue.createdAt), " ", "\xB7", " Updated ", formatRelativeTime(issue.updatedAt))));
|
|
15420
|
+
}
|
|
15421
|
+
var styles14 = import_react_native16.StyleSheet.create({
|
|
15422
|
+
badgeRow: {
|
|
15423
|
+
flexDirection: "row",
|
|
15424
|
+
gap: 8,
|
|
15425
|
+
flexWrap: "wrap",
|
|
15426
|
+
marginBottom: 12
|
|
15427
|
+
},
|
|
15428
|
+
badge: {
|
|
15429
|
+
paddingHorizontal: 10,
|
|
15430
|
+
paddingVertical: 3,
|
|
15431
|
+
borderRadius: 6
|
|
15432
|
+
},
|
|
15433
|
+
badgeText: {
|
|
15434
|
+
fontSize: 11,
|
|
15435
|
+
fontWeight: "600"
|
|
15436
|
+
},
|
|
15437
|
+
title: {
|
|
15438
|
+
fontSize: 16,
|
|
15439
|
+
fontWeight: "700",
|
|
15440
|
+
color: colors.textPrimary,
|
|
15441
|
+
marginBottom: 8,
|
|
15442
|
+
lineHeight: 21
|
|
15443
|
+
},
|
|
15444
|
+
route: {
|
|
15445
|
+
fontSize: 12,
|
|
15446
|
+
color: colors.textDim,
|
|
15447
|
+
marginBottom: 12
|
|
15448
|
+
},
|
|
15449
|
+
descriptionCard: {
|
|
15450
|
+
backgroundColor: colors.card,
|
|
15451
|
+
borderWidth: 1,
|
|
15452
|
+
borderColor: colors.border,
|
|
15453
|
+
borderRadius: 8,
|
|
15454
|
+
padding: 12,
|
|
15455
|
+
marginBottom: 12
|
|
15456
|
+
},
|
|
15457
|
+
descriptionText: {
|
|
15458
|
+
fontSize: 13,
|
|
15459
|
+
color: colors.textSecondary,
|
|
15460
|
+
lineHeight: 19
|
|
15461
|
+
},
|
|
15462
|
+
verifiedCard: {
|
|
15463
|
+
backgroundColor: "#14532d",
|
|
15464
|
+
borderWidth: 1,
|
|
15465
|
+
borderColor: "#166534",
|
|
15466
|
+
borderRadius: 8,
|
|
15467
|
+
padding: 12,
|
|
15468
|
+
marginBottom: 12
|
|
15469
|
+
},
|
|
15470
|
+
verifiedHeader: {
|
|
15471
|
+
flexDirection: "row",
|
|
15472
|
+
alignItems: "center",
|
|
15473
|
+
gap: 8,
|
|
15474
|
+
marginBottom: 4
|
|
15475
|
+
},
|
|
15476
|
+
verifiedIcon: {
|
|
15477
|
+
fontSize: 16
|
|
15478
|
+
},
|
|
15479
|
+
verifiedTitle: {
|
|
15480
|
+
fontSize: 13,
|
|
15481
|
+
fontWeight: "600",
|
|
15482
|
+
color: "#4ade80"
|
|
15483
|
+
},
|
|
15484
|
+
verifiedBody: {
|
|
15485
|
+
fontSize: 12,
|
|
15486
|
+
color: "#86efac"
|
|
15487
|
+
},
|
|
15488
|
+
originalBugCard: {
|
|
15489
|
+
backgroundColor: "#422006",
|
|
15490
|
+
borderWidth: 1,
|
|
15491
|
+
borderColor: "#854d0e",
|
|
15492
|
+
borderRadius: 8,
|
|
15493
|
+
padding: 12,
|
|
15494
|
+
marginBottom: 12
|
|
15495
|
+
},
|
|
15496
|
+
originalBugHeader: {
|
|
15497
|
+
flexDirection: "row",
|
|
15498
|
+
alignItems: "center",
|
|
15499
|
+
gap: 8,
|
|
15500
|
+
marginBottom: 4
|
|
15501
|
+
},
|
|
15502
|
+
originalBugIcon: {
|
|
15503
|
+
fontSize: 16
|
|
15504
|
+
},
|
|
15505
|
+
originalBugTitle: {
|
|
15506
|
+
fontSize: 13,
|
|
15507
|
+
fontWeight: "600",
|
|
15508
|
+
color: "#fbbf24"
|
|
15509
|
+
},
|
|
15510
|
+
originalBugBody: {
|
|
15511
|
+
fontSize: 12,
|
|
15512
|
+
color: "#fde68a"
|
|
15513
|
+
},
|
|
15514
|
+
screenshotSection: {
|
|
15515
|
+
marginBottom: 12
|
|
15516
|
+
},
|
|
15517
|
+
screenshotLabel: {
|
|
15518
|
+
fontSize: 12,
|
|
15519
|
+
fontWeight: "600",
|
|
15520
|
+
color: colors.textMuted,
|
|
15521
|
+
marginBottom: 8
|
|
15522
|
+
},
|
|
15523
|
+
screenshotRow: {
|
|
15524
|
+
flexDirection: "row",
|
|
15525
|
+
gap: 8
|
|
15526
|
+
},
|
|
15527
|
+
screenshotThumb: {
|
|
15528
|
+
width: 80,
|
|
15529
|
+
height: 60,
|
|
15530
|
+
borderRadius: 6,
|
|
15531
|
+
borderWidth: 1,
|
|
15532
|
+
borderColor: colors.border
|
|
15533
|
+
},
|
|
15534
|
+
metaSection: {
|
|
15535
|
+
borderTopWidth: 1,
|
|
15536
|
+
borderTopColor: colors.border,
|
|
15537
|
+
paddingTop: 12,
|
|
15538
|
+
marginTop: 4
|
|
15539
|
+
},
|
|
15540
|
+
metaText: {
|
|
15541
|
+
fontSize: 12,
|
|
15542
|
+
color: colors.textDim,
|
|
15543
|
+
marginBottom: 4
|
|
15544
|
+
},
|
|
15545
|
+
metaTextSmall: {
|
|
15546
|
+
fontSize: 11,
|
|
15547
|
+
color: colors.textDim
|
|
15548
|
+
}
|
|
15549
|
+
});
|
|
15550
|
+
|
|
15137
15551
|
// src/BugBearButton.tsx
|
|
15138
|
-
var screenWidth =
|
|
15139
|
-
var screenHeight =
|
|
15552
|
+
var screenWidth = import_react_native17.Dimensions.get("window").width;
|
|
15553
|
+
var screenHeight = import_react_native17.Dimensions.get("window").height;
|
|
15140
15554
|
function BugBearButton({
|
|
15141
15555
|
position = "bottom-right",
|
|
15142
15556
|
buttonStyle,
|
|
@@ -15148,7 +15562,7 @@ function BugBearButton({
|
|
|
15148
15562
|
}) {
|
|
15149
15563
|
const { shouldShowWidget, testerInfo, isLoading, unreadCount, assignments } = useBugBear();
|
|
15150
15564
|
const { currentScreen, canGoBack, push, pop, replace, reset } = useNavigation();
|
|
15151
|
-
const [modalVisible, setModalVisible] = (0,
|
|
15565
|
+
const [modalVisible, setModalVisible] = (0, import_react18.useState)(false);
|
|
15152
15566
|
const getInitialPosition = () => {
|
|
15153
15567
|
const buttonSize = 56;
|
|
15154
15568
|
const margin = 16;
|
|
@@ -15160,10 +15574,10 @@ function BugBearButton({
|
|
|
15160
15574
|
return { x, y };
|
|
15161
15575
|
};
|
|
15162
15576
|
const initialPos = getInitialPosition();
|
|
15163
|
-
const pan = (0,
|
|
15164
|
-
const isDragging = (0,
|
|
15165
|
-
const panResponder = (0,
|
|
15166
|
-
|
|
15577
|
+
const pan = (0, import_react18.useRef)(new import_react_native17.Animated.ValueXY(initialPos)).current;
|
|
15578
|
+
const isDragging = (0, import_react18.useRef)(false);
|
|
15579
|
+
const panResponder = (0, import_react18.useRef)(
|
|
15580
|
+
import_react_native17.PanResponder.create({
|
|
15167
15581
|
onStartShouldSetPanResponder: () => draggable,
|
|
15168
15582
|
onMoveShouldSetPanResponder: (_, gs) => draggable && (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5),
|
|
15169
15583
|
onPanResponderGrant: () => {
|
|
@@ -15178,7 +15592,7 @@ function BugBearButton({
|
|
|
15178
15592
|
if (Math.abs(gs.dx) > 5 || Math.abs(gs.dy) > 5) {
|
|
15179
15593
|
isDragging.current = true;
|
|
15180
15594
|
}
|
|
15181
|
-
|
|
15595
|
+
import_react_native17.Animated.event(
|
|
15182
15596
|
[null, { dx: pan.x, dy: pan.y }],
|
|
15183
15597
|
{ useNativeDriver: false }
|
|
15184
15598
|
)(_, gs);
|
|
@@ -15191,7 +15605,7 @@ function BugBearButton({
|
|
|
15191
15605
|
const margin = 16;
|
|
15192
15606
|
const snapX = currentX < screenWidth / 2 ? margin : screenWidth - buttonSize - margin;
|
|
15193
15607
|
const snapY = Math.max(minY, Math.min(currentY, screenHeight - maxYOffset));
|
|
15194
|
-
|
|
15608
|
+
import_react_native17.Animated.spring(pan, {
|
|
15195
15609
|
toValue: { x: snapX, y: snapY },
|
|
15196
15610
|
useNativeDriver: false,
|
|
15197
15611
|
friction: 7,
|
|
@@ -15227,6 +15641,10 @@ function BugBearButton({
|
|
|
15227
15641
|
return currentScreen.thread.subject || "Thread";
|
|
15228
15642
|
case "COMPOSE_MESSAGE":
|
|
15229
15643
|
return "New Message";
|
|
15644
|
+
case "ISSUE_LIST":
|
|
15645
|
+
return currentScreen.category === "open" ? "Open Issues" : currentScreen.category === "done" ? "Done" : "Reopened";
|
|
15646
|
+
case "ISSUE_DETAIL":
|
|
15647
|
+
return "Issue Detail";
|
|
15230
15648
|
case "PROFILE":
|
|
15231
15649
|
return "Profile";
|
|
15232
15650
|
default:
|
|
@@ -15234,24 +15652,24 @@ function BugBearButton({
|
|
|
15234
15652
|
}
|
|
15235
15653
|
};
|
|
15236
15654
|
const handleClose = () => {
|
|
15237
|
-
|
|
15655
|
+
import_react_native17.Keyboard.dismiss();
|
|
15238
15656
|
setModalVisible(false);
|
|
15239
15657
|
};
|
|
15240
15658
|
const nav = {
|
|
15241
15659
|
push: (screen) => {
|
|
15242
|
-
|
|
15660
|
+
import_react_native17.Keyboard.dismiss();
|
|
15243
15661
|
push(screen);
|
|
15244
15662
|
},
|
|
15245
15663
|
pop: () => {
|
|
15246
|
-
|
|
15664
|
+
import_react_native17.Keyboard.dismiss();
|
|
15247
15665
|
pop();
|
|
15248
15666
|
},
|
|
15249
15667
|
replace: (screen) => {
|
|
15250
|
-
|
|
15668
|
+
import_react_native17.Keyboard.dismiss();
|
|
15251
15669
|
replace(screen);
|
|
15252
15670
|
},
|
|
15253
15671
|
reset: () => {
|
|
15254
|
-
|
|
15672
|
+
import_react_native17.Keyboard.dismiss();
|
|
15255
15673
|
reset();
|
|
15256
15674
|
},
|
|
15257
15675
|
canGoBack,
|
|
@@ -15260,73 +15678,77 @@ function BugBearButton({
|
|
|
15260
15678
|
const renderScreen = () => {
|
|
15261
15679
|
switch (currentScreen.name) {
|
|
15262
15680
|
case "HOME":
|
|
15263
|
-
return /* @__PURE__ */
|
|
15681
|
+
return /* @__PURE__ */ import_react18.default.createElement(HomeScreen, { nav });
|
|
15264
15682
|
case "TEST_DETAIL":
|
|
15265
|
-
return /* @__PURE__ */
|
|
15683
|
+
return /* @__PURE__ */ import_react18.default.createElement(TestDetailScreen, { testId: currentScreen.testId, nav });
|
|
15266
15684
|
case "TEST_LIST":
|
|
15267
|
-
return /* @__PURE__ */
|
|
15685
|
+
return /* @__PURE__ */ import_react18.default.createElement(TestListScreen, { nav });
|
|
15268
15686
|
case "TEST_FEEDBACK":
|
|
15269
|
-
return /* @__PURE__ */
|
|
15687
|
+
return /* @__PURE__ */ import_react18.default.createElement(TestFeedbackScreen, { status: currentScreen.status, assignmentId: currentScreen.assignmentId, nav });
|
|
15270
15688
|
case "REPORT":
|
|
15271
|
-
return /* @__PURE__ */
|
|
15689
|
+
return /* @__PURE__ */ import_react18.default.createElement(ReportScreen, { nav, prefill: currentScreen.prefill });
|
|
15272
15690
|
case "REPORT_SUCCESS":
|
|
15273
|
-
return /* @__PURE__ */
|
|
15691
|
+
return /* @__PURE__ */ import_react18.default.createElement(ReportSuccessScreen, { nav });
|
|
15274
15692
|
case "MESSAGE_LIST":
|
|
15275
|
-
return /* @__PURE__ */
|
|
15693
|
+
return /* @__PURE__ */ import_react18.default.createElement(MessageListScreen, { nav });
|
|
15276
15694
|
case "THREAD_DETAIL":
|
|
15277
|
-
return /* @__PURE__ */
|
|
15695
|
+
return /* @__PURE__ */ import_react18.default.createElement(ThreadDetailScreen, { thread: currentScreen.thread, nav });
|
|
15278
15696
|
case "COMPOSE_MESSAGE":
|
|
15279
|
-
return /* @__PURE__ */
|
|
15697
|
+
return /* @__PURE__ */ import_react18.default.createElement(ComposeMessageScreen, { nav });
|
|
15698
|
+
case "ISSUE_LIST":
|
|
15699
|
+
return /* @__PURE__ */ import_react18.default.createElement(IssueListScreen, { nav, category: currentScreen.category });
|
|
15700
|
+
case "ISSUE_DETAIL":
|
|
15701
|
+
return /* @__PURE__ */ import_react18.default.createElement(IssueDetailScreen, { nav, issue: currentScreen.issue });
|
|
15280
15702
|
case "PROFILE":
|
|
15281
|
-
return /* @__PURE__ */
|
|
15703
|
+
return /* @__PURE__ */ import_react18.default.createElement(ProfileScreen, { nav });
|
|
15282
15704
|
default:
|
|
15283
|
-
return /* @__PURE__ */
|
|
15705
|
+
return /* @__PURE__ */ import_react18.default.createElement(HomeScreen, { nav });
|
|
15284
15706
|
}
|
|
15285
15707
|
};
|
|
15286
|
-
return /* @__PURE__ */
|
|
15287
|
-
|
|
15708
|
+
return /* @__PURE__ */ import_react18.default.createElement(import_react18.default.Fragment, null, /* @__PURE__ */ import_react18.default.createElement(
|
|
15709
|
+
import_react_native17.Animated.View,
|
|
15288
15710
|
{
|
|
15289
|
-
style: [
|
|
15711
|
+
style: [styles15.fabContainer, { transform: pan.getTranslateTransform() }, buttonStyle],
|
|
15290
15712
|
...panResponder.panHandlers
|
|
15291
15713
|
},
|
|
15292
|
-
/* @__PURE__ */
|
|
15293
|
-
|
|
15714
|
+
/* @__PURE__ */ import_react18.default.createElement(
|
|
15715
|
+
import_react_native17.TouchableOpacity,
|
|
15294
15716
|
{
|
|
15295
|
-
style:
|
|
15717
|
+
style: styles15.fab,
|
|
15296
15718
|
onPress: () => setModalVisible(true),
|
|
15297
15719
|
activeOpacity: draggable ? 1 : 0.7
|
|
15298
15720
|
},
|
|
15299
|
-
/* @__PURE__ */
|
|
15300
|
-
badgeCount > 0 && /* @__PURE__ */
|
|
15721
|
+
/* @__PURE__ */ import_react18.default.createElement(import_react_native17.Image, { source: { uri: BUGBEAR_LOGO_BASE64 }, style: styles15.fabIcon }),
|
|
15722
|
+
badgeCount > 0 && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.badge }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.badgeText }, badgeCount > 9 ? "9+" : badgeCount))
|
|
15301
15723
|
)
|
|
15302
|
-
), /* @__PURE__ */
|
|
15303
|
-
|
|
15724
|
+
), /* @__PURE__ */ import_react18.default.createElement(
|
|
15725
|
+
import_react_native17.Modal,
|
|
15304
15726
|
{
|
|
15305
15727
|
visible: modalVisible,
|
|
15306
15728
|
animationType: "slide",
|
|
15307
15729
|
transparent: true,
|
|
15308
15730
|
onRequestClose: handleClose
|
|
15309
15731
|
},
|
|
15310
|
-
/* @__PURE__ */
|
|
15311
|
-
|
|
15732
|
+
/* @__PURE__ */ import_react18.default.createElement(
|
|
15733
|
+
import_react_native17.KeyboardAvoidingView,
|
|
15312
15734
|
{
|
|
15313
|
-
behavior:
|
|
15314
|
-
style:
|
|
15735
|
+
behavior: import_react_native17.Platform.OS === "ios" ? "padding" : "height",
|
|
15736
|
+
style: styles15.modalOverlay
|
|
15315
15737
|
},
|
|
15316
|
-
/* @__PURE__ */
|
|
15317
|
-
|
|
15738
|
+
/* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.modalContainer }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.header }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.headerLeft }, canGoBack ? /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.headerNavRow }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.TouchableOpacity, { onPress: () => nav.pop(), style: styles15.backButton }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.backText }, "\u2190 Back")), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.TouchableOpacity, { onPress: () => nav.reset(), style: styles15.homeButton }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.homeText }, "\u{1F3E0}"))) : /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.headerTitleRow }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.headerTitle }, "BugBear"), testerInfo && /* @__PURE__ */ import_react18.default.createElement(import_react_native17.TouchableOpacity, { onPress: () => push({ name: "PROFILE" }) }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.headerName }, testerInfo.name, " \u270E")))), getHeaderTitle() ? /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.headerScreenTitle, numberOfLines: 1 }, getHeaderTitle()) : null, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.TouchableOpacity, { onPress: handleClose, style: styles15.closeButton }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.closeText }, "\u2715"))), /* @__PURE__ */ import_react18.default.createElement(
|
|
15739
|
+
import_react_native17.ScrollView,
|
|
15318
15740
|
{
|
|
15319
|
-
style:
|
|
15320
|
-
contentContainerStyle:
|
|
15741
|
+
style: styles15.content,
|
|
15742
|
+
contentContainerStyle: styles15.contentContainer,
|
|
15321
15743
|
keyboardShouldPersistTaps: "handled",
|
|
15322
15744
|
showsVerticalScrollIndicator: false
|
|
15323
15745
|
},
|
|
15324
|
-
isLoading ? /* @__PURE__ */
|
|
15746
|
+
isLoading ? /* @__PURE__ */ import_react18.default.createElement(import_react_native17.View, { style: styles15.loadingContainer }, /* @__PURE__ */ import_react18.default.createElement(import_react_native17.ActivityIndicator, { size: "large", color: colors.blue }), /* @__PURE__ */ import_react18.default.createElement(import_react_native17.Text, { style: styles15.loadingText }, "Loading...")) : renderScreen()
|
|
15325
15747
|
))
|
|
15326
15748
|
)
|
|
15327
15749
|
));
|
|
15328
15750
|
}
|
|
15329
|
-
var
|
|
15751
|
+
var styles15 = import_react_native17.StyleSheet.create({
|
|
15330
15752
|
// FAB
|
|
15331
15753
|
fabContainer: {
|
|
15332
15754
|
position: "absolute",
|
|
@@ -15468,9 +15890,9 @@ var styles13 = import_react_native15.StyleSheet.create({
|
|
|
15468
15890
|
});
|
|
15469
15891
|
|
|
15470
15892
|
// src/BugBearErrorBoundary.tsx
|
|
15471
|
-
var
|
|
15472
|
-
var
|
|
15473
|
-
var BugBearErrorBoundary = class extends
|
|
15893
|
+
var import_react19 = __toESM(require("react"));
|
|
15894
|
+
var import_react_native18 = require("react-native");
|
|
15895
|
+
var BugBearErrorBoundary = class extends import_react19.Component {
|
|
15474
15896
|
constructor(props) {
|
|
15475
15897
|
super(props);
|
|
15476
15898
|
this.reset = () => {
|
|
@@ -15514,7 +15936,7 @@ var BugBearErrorBoundary = class extends import_react17.Component {
|
|
|
15514
15936
|
if (fallback) {
|
|
15515
15937
|
return fallback;
|
|
15516
15938
|
}
|
|
15517
|
-
return /* @__PURE__ */
|
|
15939
|
+
return /* @__PURE__ */ import_react19.default.createElement(import_react_native18.View, { style: styles16.container }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.title }, "Something went wrong"), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.message }, error.message), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.TouchableOpacity, { style: styles16.button, onPress: this.reset }, /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.buttonText }, "Try Again")), /* @__PURE__ */ import_react19.default.createElement(import_react_native18.Text, { style: styles16.caption }, "The error has been captured by BugBear"));
|
|
15518
15940
|
}
|
|
15519
15941
|
return children;
|
|
15520
15942
|
}
|
|
@@ -15525,7 +15947,7 @@ function useErrorContext() {
|
|
|
15525
15947
|
getEnhancedContext: () => contextCapture.getEnhancedContext()
|
|
15526
15948
|
};
|
|
15527
15949
|
}
|
|
15528
|
-
var
|
|
15950
|
+
var styles16 = import_react_native18.StyleSheet.create({
|
|
15529
15951
|
container: {
|
|
15530
15952
|
padding: 20,
|
|
15531
15953
|
margin: 20,
|