Files
tolaria/src/components/useRightPanelExclusion.ts
2026-05-29 00:58:40 +02:00

101 lines
2.7 KiB
TypeScript

import { useCallback, useState } from 'react'
import { trackEvent } from '../lib/telemetry'
interface RightPanelExclusionOptions {
inspectorCollapsed: boolean
onToggleAIChat?: () => void
onToggleInspector: () => void
showAIChat?: boolean
}
interface RightPanelToggleOptions extends RightPanelExclusionOptions {
closeTableOfContents: () => void
openTableOfContents?: () => void
showTableOfContents?: boolean
}
function prepareRightPanelOpen(
panel: 'ai' | 'properties',
{
closeTableOfContents,
inspectorCollapsed,
showAIChat,
}: RightPanelToggleOptions,
) {
if (panel === 'properties' && !inspectorCollapsed) return
if (panel === 'ai' && showAIChat) return
closeTableOfContents()
}
function toggleTableOfContentsPanel({
closeTableOfContents,
inspectorCollapsed,
onToggleAIChat,
onToggleInspector,
openTableOfContents,
showAIChat,
showTableOfContents,
}: RightPanelToggleOptions) {
if (showTableOfContents) {
closeTableOfContents()
return
}
if (!inspectorCollapsed) onToggleInspector()
if (showAIChat) onToggleAIChat?.()
openTableOfContents?.()
}
export function useRightPanelExclusion({
inspectorCollapsed,
onToggleAIChat,
onToggleInspector,
showAIChat,
}: RightPanelExclusionOptions) {
const [showTableOfContents, setShowTableOfContents] = useState(false)
const closeTableOfContents = useCallback(() => setShowTableOfContents(false), [])
const handleToggleInspectorPanel = useCallback(() => {
prepareRightPanelOpen('properties', {
closeTableOfContents,
inspectorCollapsed,
onToggleAIChat,
onToggleInspector,
showAIChat,
})
onToggleInspector()
}, [closeTableOfContents, inspectorCollapsed, onToggleAIChat, onToggleInspector, showAIChat])
const handleToggleAIChatPanel = useCallback(() => {
prepareRightPanelOpen('ai', {
closeTableOfContents,
inspectorCollapsed,
onToggleAIChat,
onToggleInspector,
showAIChat,
})
onToggleAIChat?.()
}, [closeTableOfContents, inspectorCollapsed, onToggleAIChat, onToggleInspector, showAIChat])
const handleToggleTableOfContents = useCallback(() => {
trackEvent('table_of_contents_toggled', { open: showTableOfContents ? 0 : 1 })
toggleTableOfContentsPanel({
closeTableOfContents,
inspectorCollapsed,
onToggleAIChat,
onToggleInspector,
openTableOfContents: () => setShowTableOfContents(true),
showAIChat,
showTableOfContents,
})
}, [closeTableOfContents, inspectorCollapsed, onToggleAIChat, onToggleInspector, showAIChat, showTableOfContents])
return {
handleToggleAIChatPanel,
handleToggleInspectorPanel,
handleToggleTableOfContents,
showTableOfContents,
}
}