From df90fb1e0e38418d6d28564b58939c95b0ad288f Mon Sep 17 00:00:00 2001 From: timmy Date: Mon, 24 Aug 2026 00:40:28 +0000 Subject: [PATCH 1/2] feat: review watched pull request changes (Closes #1328) --- frontend/dashboard.css | 8 +- frontend/dashboard.js | 15 ++- frontend/index.html | 7 ++ frontend/mobile-search-preview-nav.js | 2 + frontend/search-preview.js | 110 +++++++++++++++++++-- frontend/service-worker.js | 2 +- src/main.py | 39 ++++++++ tests/e2e/test_mobile_following_release.py | 23 +++++ tests/test_command_palette.py | 2 +- tests/test_comment_next.py | 2 +- tests/test_following_api.py | 57 +++++++++++ tests/test_following_frontend.py | 72 +++++++++++++- tests/test_later_sync.py | 2 +- tests/test_markdown_renderer.py | 2 +- tests/test_mobile_composer_integration.py | 2 +- tests/test_mobile_device_setup.py | 2 +- tests/test_mobile_insights.py | 2 +- tests/test_mobile_start_day.py | 2 +- tests/test_plan_today.py | 2 +- tests/test_service_worker.py | 32 +++--- tests/test_today_readiness.py | 2 +- tests/test_today_sync.py | 2 +- 22 files changed, 344 insertions(+), 45 deletions(-) diff --git a/frontend/dashboard.css b/frontend/dashboard.css index 5ecb4ad..644be9a 100644 --- a/frontend/dashboard.css +++ b/frontend/dashboard.css @@ -1042,6 +1042,12 @@ textarea { resize: vertical; min-height: 120px; } .search-preview-comment { min-width:0; padding:10px 0; border-bottom:1px solid #1b2d45; overflow-wrap:anywhere; } .search-preview-comment.new-since-review { padding-left:10px; border-left:3px solid var(--accent); background:#10233a; } .search-preview-conversation button { min-height:44px; width:100%; } +.search-preview-review { display:grid; gap:8px; min-width:0; padding-top:8px; border-top:1px solid #2a496e; } +.search-preview-review[hidden] { display:none; } +.search-preview-review h2 { margin:0; font-size:1rem; } +.search-preview-review button { min-height:44px; width:100%; } +.search-preview-file { min-width:0; margin:8px 0; padding:10px; border:1px solid #203a5c; border-radius:10px; overflow:hidden; } +.search-preview-file > strong, .search-preview-file > .small { display:block; overflow-wrap:anywhere; } .search-preview-reply { display:grid; gap:8px; padding-top:8px; border-top:1px solid #2a496e; } .search-preview-reply[hidden] { display:none; } .search-preview-reply h2 { margin:0; font-size:1rem; } @@ -1083,7 +1089,7 @@ textarea { resize: vertical; min-height: 120px; } padding-bottom:calc(6px + env(safe-area-inset-bottom)); background:rgba(11,21,38,.98); border-block:1px solid #2a496e; } - #search-preview-overview, #search-preview-conversation, + #search-preview-overview, #search-preview-conversation, #search-preview-review, #search-preview-reply-workspace, #search-preview-actions { scroll-margin-top:72px; } #search-preview-actions { position:static; } } diff --git a/frontend/dashboard.js b/frontend/dashboard.js index 404f65d..ddd33f4 100644 --- a/frontend/dashboard.js +++ b/frontend/dashboard.js @@ -5693,7 +5693,7 @@ watchButton.hidden = true; watchButton.disabled = false; shareButton.disabled = true; - renderSearchPreviewReply(state, null, searchPreview, document); + renderSearchPreviewWorkspaces(state,null,searchPreview,document,escapeHtml); if (state.status === 'loading') { searchReplyAttachmentTarget = { ...state.item }; @@ -5727,7 +5727,7 @@ (detail.assignees?.length ? ' · assigned to ' + detail.assignees.join(', ') : ''); qs('#search-preview-body').innerHTML = renderMarkdown(detail.body || 'No description provided.'); renderSearchConversation(state.conversation); - renderSearchPreviewReply(state, detail, searchPreview, document); + renderSearchPreviewWorkspaces(state,detail,searchPreview,document,escapeHtml); qs('#open-search-result-gitea').href = safeSearchUrl(detail.url) || '#'; claimButton.hidden = !(detail.claimable || detail.assigned_to_me); claimButton.textContent = detail.assigned_to_me ? 'Open in My Work' : 'Assign to me'; @@ -5766,13 +5766,10 @@ const searchSubscription = searchPreviewSubscriptionOptions(fetchReviewJson); const searchPreview = createSearchPreview({ fetchJson:searchSubscription.preview, - fetchConversation:(item,page)=>fetchReviewJson(searchPreviewConversationPath(item,page),{ - headers:{Accept:'application/json'}, - }), - mutate: (detail, action) => fetchReviewJson( - 'api/v1/repos/' + detail.repository.split('/').map(encodeURIComponent).join('/') + - '/issues/' + encodeURIComponent(detail.number) + '/' + action, - { method:'PATCH', headers:{ Accept:'application/json' } } + fetchConversation:(item,page)=>fetchReviewJson(searchPreviewConversationPath(item,page)), + fetchReview:searchSubscription.review, + mutate:(detail,action)=>fetchReviewJson( + searchPreviewPath(detail).replace(/\?.*$/, '') + '/' + action, {method:'PATCH'} ), watch:(detail,watching) => searchSubscription.watch(detail, watching).then(result => followingQueue.load().catch(() => {}).then(() => result)), diff --git a/frontend/index.html b/frontend/index.html index e26b55b..a281168 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -886,6 +886,7 @@ @@ -901,6 +902,12 @@ +