From 6e5039977dbebad95e1a1e2d312df48433a75230 Mon Sep 17 00:00:00 2001 From: chihlasm Date: Thu, 19 Feb 2026 14:37:16 -0500 Subject: [PATCH] fix: backend alignment - remove drafts toggle, clean dead code, truncation indicator - Remove non-functional drafts toggle and clean TreeFilters type - Fix AccountInvite type to match backend schema - Remove dead API methods: pinnedFlows.pin/reorder, trees.getSharedTree - Remove unused types: SessionListResponse, RatingCreate.is_verified_use - Add session list truncation indicator with size=51 lookahead Co-Authored-By: Claude Opus 4.6 --- frontend/src/api/pinnedFlows.ts | 10 -------- frontend/src/api/sessions.ts | 8 ------- frontend/src/api/trees.ts | 7 +----- frontend/src/pages/SessionDetailPage.tsx | 3 +-- frontend/src/pages/SessionHistoryPage.tsx | 16 +++++++++++-- frontend/src/pages/TreeLibraryPage.tsx | 28 ++++++----------------- frontend/src/types/account.ts | 4 +--- frontend/src/types/step.ts | 1 - frontend/src/types/tree.ts | 1 - 9 files changed, 24 insertions(+), 54 deletions(-) diff --git a/frontend/src/api/pinnedFlows.ts b/frontend/src/api/pinnedFlows.ts index 6ac05d8d..38823178 100644 --- a/frontend/src/api/pinnedFlows.ts +++ b/frontend/src/api/pinnedFlows.ts @@ -22,19 +22,9 @@ export const pinnedFlowsApi = { return data }, - pin: async (treeId: string): Promise => { - const { data } = await apiClient.post(`/trees/${treeId}/pin`) - return data - }, - unpin: async (treeId: string): Promise => { await apiClient.delete(`/trees/${treeId}/pin`) }, - - reorder: async (order: { tree_id: string; display_order: number }[]): Promise => { - const { data } = await apiClient.patch('/trees/pinned/reorder', { order }) - return data - }, } export default pinnedFlowsApi diff --git a/frontend/src/api/sessions.ts b/frontend/src/api/sessions.ts index 635d593a..ffda6080 100644 --- a/frontend/src/api/sessions.ts +++ b/frontend/src/api/sessions.ts @@ -15,14 +15,6 @@ export interface SessionListParams { completed_before?: string } -export interface SessionListResponse { - items: Session[] - total: number - page: number - size: number - pages: number -} - export const sessionsApi = { async list(params?: SessionListParams): Promise { const response = await apiClient.get('/sessions', { params }) diff --git a/frontend/src/api/trees.ts b/frontend/src/api/trees.ts index f8c8375a..8b21840c 100644 --- a/frontend/src/api/trees.ts +++ b/frontend/src/api/trees.ts @@ -1,5 +1,5 @@ import apiClient from './client' -import type { Tree, TreeListItem, TreeCreate, TreeUpdate, TreeFilters, TreeShareCreate, TreeShare, TreeVisibilityUpdate, SharedTree, TreeValidationResponse } from '@/types' +import type { Tree, TreeListItem, TreeCreate, TreeUpdate, TreeFilters, TreeShareCreate, TreeShare, TreeVisibilityUpdate, TreeValidationResponse } from '@/types' export const treesApi = { async list(params?: TreeFilters): Promise { @@ -60,11 +60,6 @@ export const treesApi = { return response.data }, - async getSharedTree(shareToken: string): Promise { - const response = await apiClient.get(`/shared/${shareToken}`) - return response.data - }, - // Tree validation async canPublish(id: string): Promise { const response = await apiClient.post(`/trees/${id}/can-publish`) diff --git a/frontend/src/pages/SessionDetailPage.tsx b/frontend/src/pages/SessionDetailPage.tsx index dd4d8d9a..2dd5739b 100644 --- a/frontend/src/pages/SessionDetailPage.tsx +++ b/frontend/src/pages/SessionDetailPage.tsx @@ -244,8 +244,7 @@ export function SessionDetailPage() { rating: data.rating, review_text: data.review || undefined, was_helpful: data.helpful !== null ? data.helpful : undefined, - session_id: session.id, - is_verified_use: true + session_id: session.id }) ) diff --git a/frontend/src/pages/SessionHistoryPage.tsx b/frontend/src/pages/SessionHistoryPage.tsx index 50ed13ca..ec3d5e4e 100644 --- a/frontend/src/pages/SessionHistoryPage.tsx +++ b/frontend/src/pages/SessionHistoryPage.tsx @@ -17,6 +17,7 @@ export function SessionHistoryPage() { const [searchParams, setSearchParams] = useSearchParams() const [sessions, setSessions] = useState([]) + const [hasMore, setHasMore] = useState(false) const [trees, setTrees] = useState([]) const [isLoading, setIsLoading] = useState(true) const [filter, setFilter] = useState<'all' | 'completed' | 'active'>('all') @@ -111,8 +112,10 @@ export function SessionHistoryPage() { } } - const sessionsData = await sessionsApi.list(params) - setSessions(sessionsData) + const sessionsData = await sessionsApi.list({ ...params, size: 51 }) + const truncated = sessionsData.length > 50 + setHasMore(truncated) + setSessions(truncated ? sessionsData.slice(0, 50) : sessionsData) } catch (err) { toast.error('Failed to load sessions') console.error(err) @@ -295,6 +298,15 @@ export function SessionHistoryPage() { ))} + {hasMore ? ( +

+ Showing the 50 most recent sessions +

+ ) : sessions.length > 0 ? ( +

+ Showing all {sessions.length} sessions +

+ ) : null} )} diff --git a/frontend/src/pages/TreeLibraryPage.tsx b/frontend/src/pages/TreeLibraryPage.tsx index 28f0635b..63d8e7d3 100644 --- a/frontend/src/pages/TreeLibraryPage.tsx +++ b/frontend/src/pages/TreeLibraryPage.tsx @@ -33,8 +33,6 @@ export function TreeLibraryPage() { const [selectedFolderId, setSelectedFolderId] = useState(null) const [searchQuery, setSearchQuery] = useState('') const [isLoading, setIsLoading] = useState(true) - const [showDrafts, setShowDrafts] = useState(false) - // Read type filter from URL query params (e.g. /trees?type=procedural) const urlType = searchParams.get('type') const [typeFilter, setTypeFilter] = useState<'all' | 'troubleshooting' | 'procedural' | 'maintenance'>( @@ -131,7 +129,7 @@ export function TreeLibraryPage() { // Load trees when filters change useEffect(() => { loadTrees() - }, [selectedCategoryId, selectedTags, selectedFolderId, treeLibrarySortBy, showDrafts, typeFilter]) + }, [selectedCategoryId, selectedTags, selectedFolderId, treeLibrarySortBy, typeFilter]) // Load folders on mount and listen for changes useEffect(() => { @@ -150,7 +148,6 @@ export function TreeLibraryPage() { tags: selectedTags.length > 0 ? selectedTags.join(',') : undefined, folder_id: selectedFolderId || undefined, sort_by: treeLibrarySortBy, - include_drafts: showDrafts || undefined, }) setTrees(treesData) } catch (err) { @@ -326,33 +323,22 @@ export function TreeLibraryPage() { {/* View Controls */}
- {/* Type filter tabs — includes Drafts as a first-class filter */} + {/* Type filter tabs */}
- {(['all', 'troubleshooting', 'procedural', 'maintenance', 'drafts'] as const).map((t) => { - const isActive = t === 'drafts' ? showDrafts && typeFilter === 'all' : !showDrafts && typeFilter === t - return ( + {(['all', 'troubleshooting', 'procedural', 'maintenance'] as const).map((t) => ( - ) - })} + ))}
{/* Right controls: sort + view toggle */} diff --git a/frontend/src/types/account.ts b/frontend/src/types/account.ts index 4841530e..78185db0 100644 --- a/frontend/src/types/account.ts +++ b/frontend/src/types/account.ts @@ -44,9 +44,7 @@ export interface AccountInvite { email: string role: 'engineer' | 'viewer' code: string - invited_by_id: string - accepted_by_id: string | null - expires_at: string + expires_at: string | null used_at: string | null created_at: string } diff --git a/frontend/src/types/step.ts b/frontend/src/types/step.ts index 7cd2559e..54d5df29 100644 --- a/frontend/src/types/step.ts +++ b/frontend/src/types/step.ts @@ -121,7 +121,6 @@ export interface RatingCreate { review_text?: string was_helpful?: boolean session_id?: string - is_verified_use?: boolean } export interface RatingUpdate { diff --git a/frontend/src/types/tree.ts b/frontend/src/types/tree.ts index c9674902..dc3887bb 100644 --- a/frontend/src/types/tree.ts +++ b/frontend/src/types/tree.ts @@ -215,7 +215,6 @@ export interface TreeFilters { is_active?: boolean author_id?: string is_public?: boolean - include_drafts?: boolean sort_by?: 'usage_count' | 'updated_at' | 'created_at' | 'name' | 'name_desc' | 'version' skip?: number limit?: number