diff --git a/frontend/dashboard.css b/frontend/dashboard.css index cfa833e..0c686e4 100644 --- a/frontend/dashboard.css +++ b/frontend/dashboard.css @@ -546,6 +546,10 @@ textarea { resize: vertical; min-height: 120px; } .search-preview-header { display:flex; align-items:flex-start; justify-content:space-between; gap:10px; } .search-preview-header button, .search-preview-actions button, .search-preview-actions a { min-height:44px; } .search-preview-body { margin:0; white-space:pre-wrap; overflow-wrap:anywhere; } +.search-preview-conversation { display:grid; gap:8px; padding-top:8px; border-top:1px solid #2a496e; } +.search-preview-conversation h2 { margin:0; font-size:1rem; } +.search-preview-comment { min-width:0; padding:10px 0; border-bottom:1px solid #1b2d45; overflow-wrap:anywhere; } +.search-preview-conversation button { min-height:44px; width:100%; } .search-preview-navigation { display:grid; grid-template-columns:minmax(0,1fr) auto minmax(0,1fr); align-items:center; gap:8px; } .search-preview-actions { position:sticky; bottom:0; display:grid; gap:8px; padding:10px 0; padding-bottom:calc(10px + env(safe-area-inset-bottom)); background:#0b1526; } .search-preview-actions button, .search-preview-actions a { min-height:44px; box-sizing:border-box; display:flex; align-items:center; justify-content:center; } diff --git a/frontend/dashboard.js b/frontend/dashboard.js index 39e318b..d99ead0 100644 --- a/frontend/dashboard.js +++ b/frontend/dashboard.js @@ -4322,11 +4322,8 @@ commandSearch.setScope(scope); } let searchPreviewDetail = null; - function searchPreviewPath(item) { - const repository = String(item.repository || '').split('/').map(encodeURIComponent).join('/'); - return 'api/v1/repos/' + repository + '/issues/' + encodeURIComponent(item.number) + - '/preview?kind=' + encodeURIComponent(item.kind); - } + const renderSearchConversation = conversation => + renderSearchPreviewConversation(conversation, document, escapeHtml, fmt, renderMarkdown); function renderSearchPreview(state) { const sheet = qs('#search-preview'); const status = qs('#search-preview-status'); @@ -4358,6 +4355,7 @@ qs('#search-preview-title').textContent = state.item.title || 'Work preview'; qs('#search-preview-meta').textContent = ''; qs('#search-preview-body').textContent = ''; + renderSearchConversation(null); qs('#open-search-result-gitea').href = safeSearchUrl(state.item.url) || '#'; status.textContent = 'Loading preview…'; return; @@ -4378,6 +4376,7 @@ (detail.labels?.length ? ' · ' + detail.labels.join(', ') : '') + (detail.assignees?.length ? ' · assigned to ' + detail.assignees.join(', ') : ''); qs('#search-preview-body').innerHTML = renderMarkdown(detail.body || 'No description provided.'); + renderSearchConversation(state.conversation); 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'; @@ -4409,6 +4408,9 @@ } const searchPreview = createSearchPreview({ fetchJson: item => fetchReviewJson(searchPreviewPath(item), { headers:{ Accept:'application/json' } }), + 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, @@ -4430,15 +4432,9 @@ }, formatTime: fmt, }); - function canonicalSearchPreviewUrl() { - const { query, preview, scope = currentSearchScope() } = taskOverlayHistory.currentState(); - const params = new URLSearchParams({ - search:query || '', preview:preview.kind + ':' + preview.repository + ':' + preview.number, - search_kind:scope.kind, search_state:scope.state, - }); - if (scope.repository) params.set('search_repository', scope.repository); - return new URL('?' + params, window.location.origin + window.location.pathname).href; - } + const canonicalSearchPreviewUrl = () => searchPreviewUrl( + taskOverlayHistory.currentState(), currentSearchScope(), window.location + ); function createSearchStart(claim) { return createAssignAndStart({ available: createAndStart.available, diff --git a/frontend/index.html b/frontend/index.html index d09fc25..147de3e 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -465,6 +465,13 @@
Choose a search result.
+
+

Current conversation

+
+
+ + +