Files
breakpilot-core/pitch-deck/lib/hooks/useSlideNavigation.ts
T
Sharang Parnerkar 30a9165497
Build pitch-deck / build-push-deploy (push) Successful in 1m35s
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-consent (push) Successful in 39s
CI / test-python-voice (push) Successful in 32s
CI / test-bqas (push) Successful in 30s
feat(pitch): showcase mode — per-investor toggle hides financial/investor slides for customer demos
Adds is_showcase boolean to pitch_investors; when set, filters out financials,
the ask, cap table, assumptions, finanzplan, risks, and intro-presenter slides.
Slide navigation is fully dynamic — progress bar and counts update accordingly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 22:41:15 +02:00

65 lines
1.7 KiB
TypeScript

'use client'
import { useState, useCallback } from 'react'
import { SlideId } from '../types'
import { SLIDE_ORDER, TOTAL_SLIDES } from '../slide-order'
// Re-export for backwards compatibility
export { SLIDE_ORDER, TOTAL_SLIDES }
export function useSlideNavigation(slideOrder: SlideId[] = SLIDE_ORDER) {
const total = slideOrder.length
const [currentIndex, setCurrentIndex] = useState(0)
const [direction, setDirection] = useState(0)
const [visitedSlides, setVisitedSlides] = useState<Set<number>>(new Set([0]))
const [showOverview, setShowOverview] = useState(false)
const currentSlide = slideOrder[currentIndex]
const goToSlide = useCallback((index: number) => {
if (index < 0 || index >= total) return
setDirection(index > currentIndex ? 1 : -1)
setCurrentIndex(index)
setVisitedSlides(prev => new Set([...prev, index]))
setShowOverview(false)
}, [currentIndex])
const nextSlide = useCallback(() => {
if (currentIndex < total - 1) {
goToSlide(currentIndex + 1)
}
}, [currentIndex, goToSlide, total])
const prevSlide = useCallback(() => {
if (currentIndex > 0) {
goToSlide(currentIndex - 1)
}
}, [currentIndex, goToSlide])
const goToFirst = useCallback(() => goToSlide(0), [goToSlide])
const goToLast = useCallback(() => goToSlide(total - 1), [goToSlide, total])
const toggleOverview = useCallback(() => {
setShowOverview(prev => !prev)
}, [])
return {
currentIndex,
currentSlide,
direction,
visitedSlides,
showOverview,
totalSlides: total,
slideOrder,
goToSlide,
nextSlide,
prevSlide,
goToFirst,
goToLast,
toggleOverview,
setShowOverview,
isFirst: currentIndex === 0,
isLast: currentIndex === total - 1,
}
}