fix: address code review issues in session sharing

- Add useCallback for loadShares in ShareSessionModal (React hook deps)
- Use TreeStructure type instead of Record<string, unknown> for type safety
- Fix login redirect format to match LoginPage's expected state shape

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
chihlasm
2026-02-14 16:28:43 -05:00
parent d9734a11bf
commit b97a283ea3
4 changed files with 21 additions and 20 deletions

View File

@@ -1,4 +1,4 @@
import { useState, useEffect } from 'react'
import { useState, useEffect, useCallback } from 'react'
import { X, Copy, Check, Globe, Users, Clock, Trash2, Link2 } from 'lucide-react'
import type { SessionShare, SessionShareVisibility } from '@/types'
import { sessionsApi } from '@/api/sessions'
@@ -82,20 +82,7 @@ export function ShareSessionModal({ sessionId, sessionLabel, isOpen, onClose }:
const [customDatetime, setCustomDatetime] = useState('')
const [visibilityError, setVisibilityError] = useState<string | null>(null)
useEffect(() => {
if (isOpen) {
loadShares()
// Reset form state
setVisibility('account')
setShareName('')
setExpirationPreset('never')
setCustomDatetime('')
setVisibilityError(null)
setCopiedShareId(null)
}
}, [isOpen, sessionId])
const loadShares = async () => {
const loadShares = useCallback(async () => {
setIsLoadingShares(true)
try {
const allShares = await sessionsApi.listMyShares()
@@ -108,7 +95,20 @@ export function ShareSessionModal({ sessionId, sessionLabel, isOpen, onClose }:
} finally {
setIsLoadingShares(false)
}
}
}, [sessionId])
useEffect(() => {
if (isOpen) {
loadShares()
// Reset form state
setVisibility('account')
setShareName('')
setExpirationPreset('never')
setCustomDatetime('')
setVisibilityError(null)
setCopiedShareId(null)
}
}, [isOpen, sessionId, loadShares])
const handleGenerateLink = async () => {
setIsGenerating(true)

View File

@@ -1,7 +1,8 @@
import type { TreeStructure } from '@/types'
import { cn } from '@/lib/utils'
interface SharedSessionTreePreviewProps {
treeStructure: Record<string, unknown>
treeStructure: TreeStructure
pathTaken: string[]
}

View File

@@ -97,7 +97,7 @@ export function SharedSessionPage() {
const status = err.response?.status
if (status === 401) {
navigate('/login', {
state: { from: `/share/${shareToken}` },
state: { from: { pathname: `/share/${shareToken}` } },
replace: true,
})
return
@@ -232,7 +232,7 @@ export function SharedSessionPage() {
<div className="lg:col-span-2">
<SessionTimeline
decisions={data.decisions}
treeType={data.tree_structure?.tree_type as string}
treeType={data.tree_structure?.tree_type}
startedAt={data.started_at}
completedAt={data.completed_at}
showCopyButtons={false}

View File

@@ -156,7 +156,7 @@ export interface SharedSessionView {
session_id: string
tree_name: string
tree_description: string | null
tree_structure: Record<string, unknown>
tree_structure: TreeStructure
path_taken: string[]
decisions: DecisionRecord[]
custom_steps: CustomStep[]