'use client' import type { FC } from 'react' import type { QuadrantData } from './types' import { RiExpandDiagonalLine } from '@remixicon/react' import { useCallback, useMemo, useState } from 'react' import { useTranslation } from 'react-i18next' import ActionButton from '@/app/components/base/action-button' import FullScreenModal from '@/app/components/base/fullscreen-modal' import QuadrantCard from './quadrant-card' import { isValidQuadrantData, QUADRANT_CONFIGS } from './types' type QuadrantMatrixProps = { content: string } const QuadrantMatrix: FC = ({ content }) => { const { t } = useTranslation() const [isExpanded, setIsExpanded] = useState(false) const parsedData = useMemo(() => { try { const trimmed = content.trim() const data = JSON.parse(trimmed) if (!isValidQuadrantData(data)) return null return data } catch { return null } }, [content]) const handleExpand = useCallback(() => { setIsExpanded(true) }, []) const handleClose = useCallback(() => { setIsExpanded(false) }, []) if (!parsedData) { return (
{t('quadrantMatrix.invalidData', { ns: 'app' })}
{t('quadrantMatrix.invalidDataDesc', { ns: 'app' })}
) } const totalTasks = parsedData.q1.length + parsedData.q2.length + parsedData.q3.length + parsedData.q4.length // Shared grid content component const renderGrid = (expanded: boolean) => (
{/* Row 1: Q1 (Do First), Q2 (Schedule) */} {/* Row 2: Q3 (Delegate), Q4 (Don't Do) */}
) return ( <>
{/* Header */}
{t('quadrantMatrix.title', { ns: 'app' })}
{t('quadrantMatrix.taskCount', { ns: 'app', count: totalTasks })}
{/* Legend + Expand Button */}
{t('quadrantMatrix.legend.importance', { ns: 'app' })} {t('quadrantMatrix.legend.urgency', { ns: 'app' })}
{/* 2x2 Grid */} {renderGrid(false)}
{/* Fullscreen Modal */}
{/* Modal Header */}
{t('quadrantMatrix.title', { ns: 'app' })}
{t('quadrantMatrix.taskCount', { ns: 'app', count: totalTasks })}
{t('quadrantMatrix.legend.importance', { ns: 'app' })} {t('quadrantMatrix.legend.urgency', { ns: 'app' })}
{/* Expanded Grid */}
{renderGrid(true)}
) } export default QuadrantMatrix