vkashti / app / quiz / AnswersHistory.tsx
AnswersHistory.tsx
Raw
import React from 'react';
import { Portal } from '../components/Portal';
import { motion, AnimatePresence } from 'framer-motion';
import { FaTimes, FaQuestionCircle } from 'react-icons/fa';

type Answer = {
  question: number;
  round: number;
  answer: string;
};

export function AnswersHistory({
  answersHistory,
  setShowHistory
}: {
  answersHistory: Answer[];
  setShowHistory: React.Dispatch<React.SetStateAction<boolean>>;
}) {
  // Group answers by round
  const answersByRound = answersHistory.reduce((acc, answer) => {
    if (!acc[answer.round]) {
      acc[answer.round] = [];
    }
    acc[answer.round].push(answer);
    return acc;
  }, {} as Record<number, Answer[]>);

  return (
    <Portal>
      <motion.div
        initial={{ opacity: 0 }}
        animate={{ opacity: 1 }}
        exit={{ opacity: 0 }}
        className="fixed inset-0 bg-black/50 backdrop-blur-sm flex items-center justify-center z-50 p-4"
      >
        <motion.div
          initial={{ scale: 0.95, opacity: 0 }}
          animate={{ scale: 1, opacity: 1 }}
          exit={{ scale: 0.95, opacity: 0 }}
          className="bg-white/90 backdrop-blur-sm rounded-2xl shadow-xl max-w-2xl w-full max-h-[80vh] overflow-hidden flex flex-col"
        >
          {/* Header */}
          <div className="p-6 border-b border-amber-100 flex justify-between items-center bg-gradient-to-r from-amber-50 to-orange-50 shrink-0">
            <h2 className="text-2xl font-bold text-amber-900 flex items-center gap-2">
              <FaQuestionCircle className="text-amber-500" />
              История на отговорите
            </h2>
            <motion.button
              whileHover={{ scale: 1.1, rotate: 90 }}
              whileTap={{ scale: 0.9 }}
              onClick={() => setShowHistory(false)}
              className="text-amber-500 hover:text-amber-600 transition-colors"
            >
              <FaTimes size={24} />
            </motion.button>
          </div>

          {/* Content */}
          <div className="overflow-y-auto p-6 space-y-6 flex-1">
            {answersHistory.length === 0 ? (
              <div className="text-center py-8">
                <p className="text-amber-900/70 text-lg">Все още няма отговори</p>
              </div>
            ) : (
              Object.entries(answersByRound)
                .sort(([a], [b]) => Number(a) - Number(b))
                .map(([round, answers]) => (
                  <div key={round} className="space-y-3">
                    <div className="text-xl font-semibold text-amber-900 border-b border-amber-200 pb-2">
                      Кръг {round}
                    </div>
                    <div className="grid gap-3">
                      {answers
                        .sort((a, b) => a.question - b.question)
                        .map((answer, index) => (
                          <motion.div
                            initial={{ opacity: 0, y: 20 }}
                            animate={{ opacity: 1, y: 0 }}
                            transition={{ delay: index * 0.1 }}
                            key={answer.question}
                            className="bg-white rounded-xl p-3 shadow-sm border border-amber-100/50 hover:shadow-md transition-shadow"
                          >
                            <div className="flex items-center gap-3">
                              <div className="bg-gradient-to-br from-amber-500 to-orange-500 text-white w-8 h-8 rounded-lg flex items-center justify-center font-bold text-sm shrink-0">
                                {answer.question}
                              </div>
                              <div className="flex-1 min-w-0">
                                <p className={`font-semibold text-amber-900 ${answer.round === 1 ? 'text-xl' : 'text-base'} ${answer.round === 1 ? 'tracking-wider' : ''}`}>
                                  {answer.answer}
                                </p>
                              </div>
                            </div>
                          </motion.div>
                        ))}
                    </div>
                  </div>
                ))
            )}
          </div>
        </motion.div>
      </motion.div>
    </Portal>
  );
}