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
+
+
+
+
+