UNPKG

analytica-frontend-lib

Version:

Repositório público dos componentes utilizados nas plataformas da Analytica Ensino

1 lines 24.4 kB
{"version":3,"sources":["../src/components/Support/components/TicketModal.tsx","../src/components/Support/utils/supportUtils.tsx"],"sourcesContent":["import { useState, useEffect, useCallback } from 'react';\nimport dayjs from 'dayjs';\nimport 'dayjs/locale/pt-br';\nimport Badge from '../../Badge/Badge';\nimport Button from '../../Button/Button';\nimport Divider from '../../Divider/Divider';\nimport Modal from '../../Modal/Modal';\nimport Text from '../../Text/Text';\nimport TextArea from '../../TextArea/TextArea';\nimport { SkeletonText } from '../../Skeleton/Skeleton';\nimport {\n SupportTicket,\n SupportStatus,\n SupportAnswerAPI,\n GetSupportAnswersResponse,\n SubmitSupportAnswerRequest,\n SubmitSupportAnswerResponse,\n getStatusBadgeAction,\n getStatusText,\n getCategoryText,\n SupportApiClient,\n} from '../../../types/support';\nimport { getCategoryIcon } from '../utils/supportUtils';\n\ndayjs.locale('pt-br');\n\n// Skeleton component for answer loading\nconst AnswerSkeleton = () => (\n <div className=\"bg-background p-4 space-y-6 rounded-xl\">\n {/* Date skeleton */}\n <div className=\"flex items-center space-x-6\">\n <SkeletonText width=\"80px\" height={16} />\n <SkeletonText width=\"200px\" height={16} />\n </div>\n\n <Divider />\n\n {/* Answer content skeleton */}\n <div className=\"flex items-start space-x-6\">\n <SkeletonText width=\"80px\" height={16} />\n <div className=\"flex-1 space-y-2\">\n <SkeletonText width=\"100%\" height={16} />\n <SkeletonText width=\"80%\" height={16} />\n <SkeletonText width=\"60%\" height={16} />\n </div>\n </div>\n </div>\n);\n\nexport interface TicketModalProps {\n ticket: SupportTicket;\n isOpen: boolean;\n onClose: () => void;\n onTicketClose?: (ticketId: string) => void;\n /** API client instance for making requests */\n apiClient: SupportApiClient;\n /** Current user ID */\n userId?: string;\n}\n\nexport const TicketModal = ({\n ticket,\n isOpen,\n onClose,\n onTicketClose,\n apiClient,\n userId,\n}: TicketModalProps) => {\n const [showCloseConfirmation, setShowCloseConfirmation] = useState(false);\n const [responseText, setResponseText] = useState('');\n const [answers, setAnswers] = useState<SupportAnswerAPI[]>([]);\n const [isSubmittingAnswer, setIsSubmittingAnswer] = useState(false);\n const [isLoadingAnswers, setIsLoadingAnswers] = useState(false);\n\n const handleCloseTicket = () => {\n onTicketClose?.(ticket.id);\n setShowCloseConfirmation(false);\n onClose();\n };\n\n // Fetch support answers\n const fetchAnswers = useCallback(async () => {\n if (!ticket.id || ticket.status !== SupportStatus.RESPONDIDO) return;\n\n setIsLoadingAnswers(true);\n try {\n const response = await apiClient.get<GetSupportAnswersResponse>(\n `/support/answer/${ticket.id}`\n );\n setAnswers(response.data.data || []);\n } catch (error) {\n console.error('Erro ao buscar respostas:', error);\n setAnswers([]);\n } finally {\n setIsLoadingAnswers(false);\n }\n }, [ticket.id, ticket.status, apiClient]);\n\n // Submit user answer\n const handleSubmitAnswer = async () => {\n if (!responseText.trim() || !userId || !ticket.id) {\n return;\n }\n\n setIsSubmittingAnswer(true);\n try {\n const requestData: SubmitSupportAnswerRequest = {\n userId: userId,\n supportId: ticket.id,\n answer: responseText.trim(),\n };\n\n await apiClient.post<SubmitSupportAnswerResponse>(\n '/support/answer',\n requestData\n );\n\n // Clear response text\n setResponseText('');\n\n // Refresh answers list\n await fetchAnswers();\n } catch (error) {\n console.error('Erro ao enviar resposta:', error);\n } finally {\n setIsSubmittingAnswer(false);\n }\n };\n\n const canCloseTicket = ticket.status !== SupportStatus.ENCERRADO;\n\n // Limpar o texto e carregar respostas quando o modal for aberto\n useEffect(() => {\n if (isOpen) {\n setResponseText('');\n (async () => {\n await fetchAnswers();\n })().catch((error) => {\n console.error('Erro ao carregar respostas:', error);\n });\n } else {\n setAnswers([]);\n }\n }, [isOpen, fetchAnswers]);\n\n return (\n <>\n <Modal\n isOpen={isOpen}\n onClose={onClose}\n title={`Pedido: ${ticket.title}`}\n size=\"lg\"\n hideCloseButton={false}\n closeOnEscape={true}\n data-testid=\"ticket-modal\"\n >\n <div className=\"flex flex-col h-full max-h-[80vh]\">\n {/* Header com botão Encerrar Pedido */}\n <div className=\"flex justify-between items-center mb-3\">\n <Text size=\"md\" weight=\"bold\" className=\"text-text-950\">\n Detalhes\n </Text>\n {canCloseTicket && (\n <Button\n variant=\"outline\"\n size=\"small\"\n action=\"negative\"\n onClick={() => setShowCloseConfirmation(true)}\n >\n Encerrar Pedido\n </Button>\n )}\n </div>\n\n {/* Conteúdo com scroll */}\n <div className=\"flex-1 overflow-y-auto pr-2 space-y-6\">\n <div className=\"bg-background p-4 space-y-6 rounded-xl\">\n {/* ID */}\n <div className=\"flex items-center space-x-6\">\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-700 w-20\"\n >\n ID\n </Text>\n <Text size=\"md\" weight=\"normal\" className=\"text-text-600\">\n {ticket.id}\n </Text>\n </div>\n\n {/* Aberto em */}\n <div className=\"flex items-center space-x-6\">\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-700 w-20\"\n >\n Aberto em\n </Text>\n <Text size=\"md\" weight=\"normal\" className=\"text-text-600\">\n {dayjs(ticket.createdAt).format('DD MMMM YYYY, [às] HH[h]')}\n </Text>\n </div>\n\n {/* Status */}\n <div className=\"flex items-center space-x-6\">\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-700 w-20\"\n >\n Status\n </Text>\n <Badge\n variant=\"solid\"\n size=\"small\"\n action={getStatusBadgeAction(ticket.status)}\n className=\"w-fit\"\n >\n {getStatusText(ticket.status)}\n </Badge>\n </div>\n\n {/* Tipo */}\n <div className=\"flex items-center space-x-6\">\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-700 w-20\"\n >\n Tipo\n </Text>\n <Badge\n variant=\"solid\"\n size=\"small\"\n action=\"muted\"\n className=\"w-fit\"\n >\n {getCategoryIcon(ticket.category)}\n {getCategoryText(ticket.category)}\n </Badge>\n </div>\n\n <Divider />\n\n {/* Descrição */}\n <div className=\"flex items-start space-x-6\">\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-700 w-20\"\n >\n Descrição\n </Text>\n {ticket.description && (\n <Text size=\"md\" weight=\"normal\" className=\"text-text-600\">\n {ticket.description}\n </Text>\n )}\n </div>\n </div>\n\n {/* Seção de resposta (quando há respostas do suporte ou carregando) */}\n {ticket.status === SupportStatus.RESPONDIDO && isLoadingAnswers && (\n <>\n <Text size=\"md\" weight=\"bold\" className=\"text-text-950 my-6\">\n Resposta de Suporte Técnico\n </Text>\n <AnswerSkeleton />\n </>\n )}\n\n {/* Seção de resposta (quando há respostas do suporte) */}\n {!isLoadingAnswers &&\n answers.some((answer) => answer.userId !== userId) && (\n <>\n <Text size=\"md\" weight=\"bold\" className=\"text-text-950 my-6\">\n Resposta de Suporte Técnico\n </Text>\n\n {answers\n .filter((answer) => answer.userId !== userId)\n .sort(\n (a, b) =>\n new Date(b.createdAt).getTime() -\n new Date(a.createdAt).getTime()\n )\n .slice(0, 1)\n .map((answer) => (\n <div\n key={answer.id}\n className=\"bg-background p-4 space-y-6 rounded-xl\"\n >\n {/* Recebido em */}\n <div className=\"flex items-center space-x-6\">\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-700 w-20\"\n >\n Recebido\n </Text>\n <Text\n size=\"md\"\n weight=\"normal\"\n className=\"text-text-600\"\n >\n {dayjs(answer.createdAt).format(\n 'DD MMMM YYYY, [às] HH[h]'\n )}\n </Text>\n </div>\n\n <Divider />\n\n {/* Resposta */}\n <div className=\"flex items-start space-x-6\">\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-700 w-20\"\n >\n Resposta\n </Text>\n <Text\n size=\"md\"\n weight=\"normal\"\n className=\"text-text-600\"\n >\n {answer.answer}\n </Text>\n </div>\n </div>\n ))}\n </>\n )}\n\n {/* Seção de resposta do usuário */}\n {!isLoadingAnswers &&\n answers.some((answer) => answer.userId === userId) && (\n <>\n <Text size=\"md\" weight=\"bold\" className=\"text-text-950 my-6\">\n Resposta enviada\n </Text>\n\n {answers\n .filter((answer) => answer.userId === userId)\n .sort(\n (a, b) =>\n new Date(b.createdAt).getTime() -\n new Date(a.createdAt).getTime()\n )\n .slice(0, 1)\n .map((answer) => (\n <div\n key={answer.id}\n className=\"bg-background p-4 space-y-6 rounded-xl\"\n >\n {/* Enviada em */}\n <div className=\"flex items-center space-x-6\">\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-700 w-20\"\n >\n Enviada\n </Text>\n <Text\n size=\"md\"\n weight=\"normal\"\n className=\"text-text-600\"\n >\n {dayjs(answer.createdAt).format(\n 'DD MMMM YYYY, [às] HH[h]'\n )}\n </Text>\n </div>\n\n <Divider />\n\n {/* Resposta */}\n <div className=\"flex items-start space-x-6\">\n <Text\n size=\"md\"\n weight=\"semibold\"\n className=\"text-text-700 w-20\"\n >\n Resposta\n </Text>\n <Text\n size=\"md\"\n weight=\"normal\"\n className=\"text-text-600\"\n >\n {answer.answer}\n </Text>\n </div>\n </div>\n ))}\n </>\n )}\n\n {/* Seção Responder */}\n {!isLoadingAnswers &&\n answers.some((answer) => answer.userId !== userId) && (\n <>\n <Text size=\"lg\" weight=\"bold\" className=\"text-text-950 my-6\">\n Responder\n </Text>\n\n <div className=\"space-y-4\">\n <TextArea\n placeholder=\"Detalhe o problema aqui.\"\n rows={4}\n className=\"w-full\"\n value={responseText}\n onChange={(e) => setResponseText(e.target.value)}\n />\n\n {responseText.trim().length > 0 && (\n <div className=\"flex justify-end\">\n <Button\n variant=\"solid\"\n size=\"medium\"\n onClick={handleSubmitAnswer}\n disabled={isSubmittingAnswer}\n >\n {isSubmittingAnswer ? 'Enviando...' : 'Enviar'}\n </Button>\n </div>\n )}\n </div>\n </>\n )}\n </div>\n </div>\n </Modal>\n\n {/* Modal de confirmação de encerramento */}\n <Modal\n isOpen={showCloseConfirmation}\n onClose={() => setShowCloseConfirmation(false)}\n title=\"Encerrar pedido?\"\n size=\"md\"\n hideCloseButton={false}\n closeOnEscape={true}\n data-testid=\"close-ticket-modal\"\n >\n <div className=\"space-y-6\">\n <Text size=\"sm\" weight=\"normal\" className=\"text-text-700\">\n Ao encerrar este pedido, ele será fechado e não poderá mais ser\n atualizado.\n </Text>\n\n <div className=\"flex gap-3 justify-end\">\n <Button\n variant=\"outline\"\n size=\"medium\"\n onClick={() => setShowCloseConfirmation(false)}\n >\n Cancelar\n </Button>\n <Button\n variant=\"solid\"\n size=\"medium\"\n action=\"negative\"\n onClick={handleCloseTicket}\n >\n Encerrar\n </Button>\n </div>\n </div>\n </Modal>\n </>\n );\n};\n","import { KeyIcon, BugIcon, InfoIcon } from '@phosphor-icons/react';\nimport React from 'react';\nimport { SupportCategory } from '../../../types/support';\n\nexport const getCategoryIcon = (\n category: SupportCategory | null,\n size = 16\n): React.ReactNode => {\n if (!category) return null;\n switch (category) {\n case SupportCategory.ACESSO:\n return <KeyIcon size={size} />;\n case SupportCategory.TECNICO:\n return <BugIcon size={size} />;\n case SupportCategory.OUTROS:\n return <InfoIcon size={size} />;\n default:\n return <InfoIcon size={size} />;\n }\n};\n"],"mappings":"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","names":["jsx"]}