This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
breakpilot-pwa/pitch-deck/lib/hooks/useSlideNavigation.ts
Benjamin Admin 70f2b0ae64 refactor: Consolidate standalone services into admin-v2, add new SDK modules
Remove standalone services (ai-compliance-sdk root, developer-portal,
dsms-gateway, dsms-node, night-scheduler) and legacy compliance/dsgvo pages.
Add new SDK pipeline modules (academy, document-crawler, dsb-portal,
incidents, whistleblower, reporting, sso, multi-tenant, industry-templates).
Add drafting engine, legal corpus files (AT/CH/DE), pitch-deck,
blog and Förderantrag pages.

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-15 09:05:18 +01:00

93 lines
2.1 KiB
TypeScript

'use client'
import { useState, useCallback } from 'react'
import { SlideId } from '../types'
const SLIDE_ORDER: SlideId[] = [
'cover',
'problem',
'solution',
'product',
'how-it-works',
'market',
'business-model',
'traction',
'competition',
'team',
'technology',
'financials',
'the-ask',
'ai-qa',
'appendix',
'annex-infra',
'annex-ai-stack',
'annex-rag',
'annex-security',
'annex-devops',
'annex-agent-arch',
'annex-agent-rag',
'annex-agent-workflow',
'annex-usp-overview',
'annex-usp-comparison',
'annex-usp-moat',
'annex-roadmap-2027',
'annex-roadmap-2028',
]
export const TOTAL_SLIDES = SLIDE_ORDER.length
export function useSlideNavigation() {
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 goToSlide = useCallback((index: number) => {
if (index < 0 || index >= TOTAL_SLIDES) return
setDirection(index > currentIndex ? 1 : -1)
setCurrentIndex(index)
setVisitedSlides(prev => new Set([...prev, index]))
setShowOverview(false)
}, [currentIndex])
const nextSlide = useCallback(() => {
if (currentIndex < TOTAL_SLIDES - 1) {
goToSlide(currentIndex + 1)
}
}, [currentIndex, goToSlide])
const prevSlide = useCallback(() => {
if (currentIndex > 0) {
goToSlide(currentIndex - 1)
}
}, [currentIndex, goToSlide])
const goToFirst = useCallback(() => goToSlide(0), [goToSlide])
const goToLast = useCallback(() => goToSlide(TOTAL_SLIDES - 1), [goToSlide])
const toggleOverview = useCallback(() => {
setShowOverview(prev => !prev)
}, [])
return {
currentIndex,
currentSlide,
direction,
visitedSlides,
showOverview,
totalSlides: TOTAL_SLIDES,
slideOrder: SLIDE_ORDER,
goToSlide,
nextSlide,
prevSlide,
goToFirst,
goToLast,
toggleOverview,
setShowOverview,
isFirst: currentIndex === 0,
isLast: currentIndex === TOTAL_SLIDES - 1,
}
}