feat(pitch): showcase mode — per-investor toggle hides financial/investor slides for customer demos
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
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
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>
This commit is contained in:
@@ -1,21 +1,23 @@
|
||||
'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() {
|
||||
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 = SLIDE_ORDER[currentIndex]
|
||||
const currentSlide = slideOrder[currentIndex]
|
||||
|
||||
const goToSlide = useCallback((index: number) => {
|
||||
if (index < 0 || index >= TOTAL_SLIDES) return
|
||||
if (index < 0 || index >= total) return
|
||||
setDirection(index > currentIndex ? 1 : -1)
|
||||
setCurrentIndex(index)
|
||||
setVisitedSlides(prev => new Set([...prev, index]))
|
||||
@@ -23,10 +25,10 @@ export function useSlideNavigation() {
|
||||
}, [currentIndex])
|
||||
|
||||
const nextSlide = useCallback(() => {
|
||||
if (currentIndex < TOTAL_SLIDES - 1) {
|
||||
if (currentIndex < total - 1) {
|
||||
goToSlide(currentIndex + 1)
|
||||
}
|
||||
}, [currentIndex, goToSlide])
|
||||
}, [currentIndex, goToSlide, total])
|
||||
|
||||
const prevSlide = useCallback(() => {
|
||||
if (currentIndex > 0) {
|
||||
@@ -35,7 +37,7 @@ export function useSlideNavigation() {
|
||||
}, [currentIndex, goToSlide])
|
||||
|
||||
const goToFirst = useCallback(() => goToSlide(0), [goToSlide])
|
||||
const goToLast = useCallback(() => goToSlide(TOTAL_SLIDES - 1), [goToSlide])
|
||||
const goToLast = useCallback(() => goToSlide(total - 1), [goToSlide, total])
|
||||
|
||||
const toggleOverview = useCallback(() => {
|
||||
setShowOverview(prev => !prev)
|
||||
@@ -47,8 +49,8 @@ export function useSlideNavigation() {
|
||||
direction,
|
||||
visitedSlides,
|
||||
showOverview,
|
||||
totalSlides: TOTAL_SLIDES,
|
||||
slideOrder: SLIDE_ORDER,
|
||||
totalSlides: total,
|
||||
slideOrder,
|
||||
goToSlide,
|
||||
nextSlide,
|
||||
prevSlide,
|
||||
@@ -57,6 +59,6 @@ export function useSlideNavigation() {
|
||||
toggleOverview,
|
||||
setShowOverview,
|
||||
isFirst: currentIndex === 0,
|
||||
isLast: currentIndex === TOTAL_SLIDES - 1,
|
||||
isLast: currentIndex === total - 1,
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user