Improve archived sessions discovery and access
Backend improvements: - Modify GET /api/collaborate/:id/document to return final_document for completed sessions - Sessions archivées sont maintenant accessibles même si pas en mémoire active Frontend improvements: - Add search bar to filter sessions by ID or description - Add search query state to allow real-time filtering - Update session counts in filter buttons - Enhance filteredSessions computed to include search query - Add CSS styling for search input with focus effects - Enable easy discovery and access to all archived sessions - Sessions can now be searched, filtered by status, and browsed
This commit is contained in:
parent
a5e184af8e
commit
588dd98e45
@ -198,7 +198,9 @@ router.get('/:id', (req, res) => {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* GET /api/collaborate/:id/document
|
* GET /api/collaborate/:id/document
|
||||||
* Get the current document
|
* Get the current/final document
|
||||||
|
* For active sessions: returns currentDocument
|
||||||
|
* For completed sessions: returns final_document from DB
|
||||||
*/
|
*/
|
||||||
router.get('/:id/document', (req, res) => {
|
router.get('/:id/document', (req, res) => {
|
||||||
try {
|
try {
|
||||||
@ -210,7 +212,10 @@ router.get('/:id/document', (req, res) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const activeSession = collaborativeOrchestrator.activeSessions.get(sessionId)
|
const activeSession = collaborativeOrchestrator.activeSessions.get(sessionId)
|
||||||
const currentDocument = activeSession?.currentDocument || ''
|
// Use final_document for completed sessions, otherwise use activeSession's current
|
||||||
|
const currentDocument = session.status === 'completed'
|
||||||
|
? (session.final_document || '')
|
||||||
|
: (activeSession?.currentDocument || '')
|
||||||
|
|
||||||
const contentType = session.document_format === 'md'
|
const contentType = session.document_format === 'md'
|
||||||
? 'text/markdown; charset=utf-8'
|
? 'text/markdown; charset=utf-8'
|
||||||
|
|||||||
@ -13,7 +13,9 @@ const isCreating = ref(false)
|
|||||||
const previousSessions = ref([])
|
const previousSessions = ref([])
|
||||||
const loadingPreviousSessions = ref(false)
|
const loadingPreviousSessions = ref(false)
|
||||||
const showAllSessions = ref(false)
|
const showAllSessions = ref(false)
|
||||||
|
const showArchives = ref(false)
|
||||||
const sessionStatusFilter = ref('all') // 'all', 'completed', 'ongoing', 'created'
|
const sessionStatusFilter = ref('all') // 'all', 'completed', 'ongoing', 'created'
|
||||||
|
const searchQuery = ref('')
|
||||||
|
|
||||||
onMounted(async () => {
|
onMounted(async () => {
|
||||||
loadingPreviousSessions.value = true
|
loadingPreviousSessions.value = true
|
||||||
@ -46,6 +48,14 @@ const filteredSessions = computed(() => {
|
|||||||
filtered = filtered.filter(s => s.status === sessionStatusFilter.value)
|
filtered = filtered.filter(s => s.status === sessionStatusFilter.value)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (searchQuery.value.trim()) {
|
||||||
|
const query = searchQuery.value.toLowerCase()
|
||||||
|
filtered = filtered.filter(s =>
|
||||||
|
s.prompt.toLowerCase().includes(query) ||
|
||||||
|
s.sessionId.toString().includes(query)
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
return filtered
|
return filtered
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -153,6 +163,16 @@ const removeFile = () => {
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<!-- Search Bar -->
|
||||||
|
<div class="search-bar">
|
||||||
|
<input
|
||||||
|
v-model="searchQuery"
|
||||||
|
type="text"
|
||||||
|
placeholder="Search by session ID or description..."
|
||||||
|
class="search-input"
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Status Filter -->
|
<!-- Status Filter -->
|
||||||
<div class="filter-tabs">
|
<div class="filter-tabs">
|
||||||
<button
|
<button
|
||||||
@ -160,21 +180,21 @@ const removeFile = () => {
|
|||||||
class="filter-btn"
|
class="filter-btn"
|
||||||
:class="{ active: sessionStatusFilter === 'all' }"
|
:class="{ active: sessionStatusFilter === 'all' }"
|
||||||
>
|
>
|
||||||
All Sessions
|
All Sessions ({{ previousSessions.length }})
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
@click="sessionStatusFilter = 'completed'"
|
@click="sessionStatusFilter = 'completed'"
|
||||||
class="filter-btn"
|
class="filter-btn"
|
||||||
:class="{ active: sessionStatusFilter === 'completed' }"
|
:class="{ active: sessionStatusFilter === 'completed' }"
|
||||||
>
|
>
|
||||||
Completed
|
Completed ({{ completedCount }})
|
||||||
</button>
|
</button>
|
||||||
<button
|
<button
|
||||||
@click="sessionStatusFilter = 'ongoing'"
|
@click="sessionStatusFilter = 'ongoing'"
|
||||||
class="filter-btn"
|
class="filter-btn"
|
||||||
:class="{ active: sessionStatusFilter === 'ongoing' }"
|
:class="{ active: sessionStatusFilter === 'ongoing' }"
|
||||||
>
|
>
|
||||||
In Progress
|
In Progress ({{ ongoingCount }})
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -739,6 +759,33 @@ const removeFile = () => {
|
|||||||
margin-top: 0.25rem;
|
margin-top: 0.25rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.search-bar {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-input {
|
||||||
|
width: 100%;
|
||||||
|
padding: 0.75rem 1rem;
|
||||||
|
background: rgba(255, 255, 255, 0.07);
|
||||||
|
border: 1px solid rgba(102, 126, 234, 0.3);
|
||||||
|
color: rgba(255, 255, 255, 0.9);
|
||||||
|
border-radius: 8px;
|
||||||
|
font-size: 0.95rem;
|
||||||
|
backdrop-filter: blur(5px);
|
||||||
|
transition: all 0.3s ease;
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-input::placeholder {
|
||||||
|
color: rgba(255, 255, 255, 0.4);
|
||||||
|
}
|
||||||
|
|
||||||
|
.search-input:focus {
|
||||||
|
outline: none;
|
||||||
|
border-color: rgba(102, 126, 234, 0.6);
|
||||||
|
background: rgba(102, 126, 234, 0.1);
|
||||||
|
box-shadow: 0 0 15px rgba(102, 126, 234, 0.2);
|
||||||
|
}
|
||||||
|
|
||||||
.filter-tabs {
|
.filter-tabs {
|
||||||
display: flex;
|
display: flex;
|
||||||
gap: 0.75rem;
|
gap: 0.75rem;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user