import React, { useCallback } from 'react'; import { useDispatch, useSelector } from 'react-redux'; import { IReduxState } from '../../../app/types'; import { exportMeeting, generateSummary } from '../../actions'; import { getMeetingIntelligenceState } from '../../functions'; /** * AI-generated meeting summary panel. * * @returns {React.ReactElement} The summary panel component. */ const SummaryPanel: React.FC = () => { const dispatch = useDispatch(); const { summary, summaryLoading, summaryError, selectedMeetingId, selectedMeeting, exportLoading } = useSelector((state: IReduxState) => getMeetingIntelligenceState(state)); const handleGenerateSummary = useCallback(() => { if (selectedMeetingId) { dispatch(generateSummary(selectedMeetingId) as any); } }, [ dispatch, selectedMeetingId ]); const handleExportMarkdown = useCallback(() => { if (selectedMeetingId) { dispatch(exportMeeting(selectedMeetingId, 'markdown') as any); } }, [ dispatch, selectedMeetingId ]); const handleExportPdf = useCallback(() => { if (selectedMeetingId) { dispatch(exportMeeting(selectedMeetingId, 'pdf') as any); } }, [ dispatch, selectedMeetingId ]); const handleExportJson = useCallback(() => { if (selectedMeetingId) { dispatch(exportMeeting(selectedMeetingId, 'json') as any); } }, [ dispatch, selectedMeetingId ]); if (summaryLoading) { return (
Failed to load summary: {summaryError}
{canGenerate ? 'Generate an AI summary to see key points, action items, and decisions.' : 'Summary will be available after transcription is complete.'}
{canGenerate && ( )}{summary.summary_text}