fix: surface errors and polish UX across Step Library and Batch pages (#92)

- StepLibraryPage: replace silent console.error with toast.error on edit/save
  failures; replace manual setTimeout toast with toast.success helper
- BatchStatusPage: add error state with retry button for failed session loads
  instead of showing ambiguous "No sessions found"
- StepDetailModal: guard clipboard copy against browser denial (no false
  "Copied!" state on permission error); fix dead "See all reviews" button
  with inline expand/collapse toggle
- StepLibraryBrowser: add "Try again" retry button to error state; retry
  increments a counter that re-triggers both load effects

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit was merged in pull request #92.
This commit is contained in:
chihlasm
2026-02-26 03:00:14 -05:00
committed by GitHub
parent 8fa6ee1801
commit 1f77b7fc32
4 changed files with 53 additions and 29 deletions

View File

@@ -5,6 +5,7 @@ import { usePermissions } from '@/hooks/usePermissions'
import { stepsApi } from '@/api/steps'
import { StepLibraryBrowser } from '@/components/step-library/StepLibraryBrowser'
import { StepFormModal } from '@/components/step-library/StepFormModal'
import { toast } from '@/lib/toast'
import type { Step, StepListItem } from '@/types/step'
export default function StepLibraryPage() {
@@ -20,9 +21,6 @@ export default function StepLibraryPage() {
const [isDeleting, setIsDeleting] = useState(false)
const [deleteError, setDeleteError] = useState<string | null>(null)
// Toast for "Save to My Library"
const [saveToast, setSaveToast] = useState<string | null>(null)
// Increment to trigger StepLibraryBrowser reload
const [refreshKey, setRefreshKey] = useState(0)
const refresh = () => setRefreshKey(k => k + 1)
@@ -32,8 +30,8 @@ export default function StepLibraryPage() {
try {
const full = await stepsApi.get(step.id)
setEditingStep(full)
} catch (err) {
console.error('Failed to load step for edit:', err)
} catch {
toast.error('Failed to load step for editing')
}
}
@@ -68,11 +66,10 @@ export default function StepLibraryPage() {
category_id: full.category_id,
tags: full.tags,
})
setSaveToast(`"${full.title}" saved to My Steps`)
setTimeout(() => setSaveToast(null), 3000)
toast.success(`"${full.title}" saved to My Steps`)
refresh()
} catch (err) {
console.error('Failed to save step:', err)
} catch {
toast.error('Failed to save step to your library')
}
}
@@ -168,12 +165,6 @@ export default function StepLibraryPage() {
</div>
)}
{/* Save Toast */}
{saveToast && (
<div className="fixed bottom-6 left-1/2 z-50 -translate-x-1/2 rounded-lg border border-border bg-card px-4 py-2 text-sm text-foreground shadow-lg">
{saveToast}
</div>
)}
</div>
)
}