feat: session sharing frontend #76

Merged
chihlasm merged 14 commits from feat/session-sharing-frontend into main 2026-02-15 04:08:17 +00:00
4 changed files with 21 additions and 20 deletions
Showing only changes of commit b97a283ea3 - Show all commits

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[]